কোনও ওআরএম ব্যবহার করার সময়, আপনার ডাটাবেস ডিজাইনে কিছু জিনিস নজর রাখা উচিত


19

কিছু ডাটাবেস নকশা gotchas জন্য সতর্ক যখন আপনি জানেন ডাটাবেসের একটি অবজেক্টকে রিলেশনাল ম্যাপার (ORM) ব্যবহার অ্যাক্সেস করা হবে কি কি উইকিপিডিয়া ? সত্তা ফ্রেমওয়ার্ক এনহাইবারনেট বা এলএলবিএলজেনপ্রোও দেখুন।

উদাহরণ হিসাবে, আমি স্কেল সার্ভারের আরপিসি কলটিতে 2100 পরামিতি সীমাটি নোট করব। এই সময় একটি সমস্যা LLBLgen ব্যবহার করে এবং টেবিল যোগদান যখন যৌগ প্রাথমিক কী ব্যবহার হয়েছে যৌগ কী জন্য দুটিই MSDN নিবন্ধটি দেখুন


4
কোন অপরাধ, কিন্তু এই redefines একটি টেবিলের সাধারণ নিয়ম এক, টেবিল প্রতি একটি একক পি কে .. "1 এর অধিক প্রাথমিক কী দিয়ে টেবিল যোগদান"। আপনি ঠিক কি বলতে চেয়েছিলেন?
মেরিয়ান

এটি কীভাবে 2100 পরামিতি সীমাতে আঘাত করে? আপনার কি অনেকগুলি কলাম সহ টেবিল রয়েছে? এছাড়াও, আমি অনুমান করে আপনি কি এটা বোঝাতে "অবজেক্ট রিলেশনাল ম্যাপিং" এবং না "অবজেক্ট ভূমিকা মডেলিং"
জন বিযয়ক

2100 প্যারামিটার সীমাটি কখনও কখনও একটি সমস্যা হয়ে থাকে যদি আপনি কোনও এসকিউএল 'ইন' (লিনকিউ অ্যারে। কনটেনস (সদস্য)) এর কাছে মানগুলির একটি বৃহত তালিকা পাস করেন। তবে, এটিতে ডাটাবেস ডিজাইনের আসলে কিছুই নেই; এটি ক্যোয়ারী প্যাটার্ন ইস্যুতে আরও বেশি। ওআরএম'র পক্ষে 'আক্রান্ত' এর পক্ষে সবচেয়ে সহজ কাজটি হ'ল তালিকাকে একটি [স্থায়ী] অস্থায়ী টেবিলের মধ্যে সন্নিবেশ করানো এবং সেই সাথে যুক্ত হওয়া এবং / অথবা এমন একটি সাবকোয়ারী ব্যবহার করুন যা আইটেমগুলি যেখানেই উত্পন্ন হয় সেখান থেকে অনুসন্ধান করার জন্য নির্বাচন করুন। (একটি এসকিউএল 'ইন' এ হাজার হাজার আইটেমগুলি পাস করা সাধারণত যেভাবেই খারাপ হয় আপনি কোনও ওআর ম্যাপার ব্যবহার করছেন বা না করেন)।
ক্রিস্টোফার

@ জন, হ্যাঁ সম্পর্কিত সম্পর্কযুক্ত ম্যাপিং
বোজোজো 20'11

4
@ বজোজো: একটি সারণী - সংজ্ঞা অনুসারে - কেবল একটি প্রাথমিক কী থাকতে পারে। এমন কোনও ডিবিএমএস নেই যা আপনাকে একক টেবিলের জন্য একাধিক প্রাথমিক কী সংজ্ঞায়িত করতে দেয়।
a_horse_with_no_name

উত্তর:


17

স্ট্যান্ডার্ড নরমালাইজেশন কৌশলগুলি দিয়ে যান, প্রধানত তৃতীয় সাধারণ ফর্মটিতে। কিছু ওআরএম ডাটাবেস স্তরে সংজ্ঞায়িত সম্পর্কগুলি তুলতে পারে যাতে আপনাকে ম্যানুয়ালি করতে হবে না।

আমি সত্যিই অন্য পথে যাব এবং জিজ্ঞাসা করব যে ওআরএম সম্পর্কে আমার কী জানা উচিত। আপনি জানেন তা নিশ্চিত করুন: - আমি কীভাবে প্রশ্নগুলি প্রোফাইল করব? - আমি কীভাবে ওআরএমকে ওভাররাইড করব এবং নিজের ক্যোয়ারী লিখব? - আমি কি পরিবর্তে সঞ্চিত প্রকল্পগুলি ব্যবহার করতে পারি?

ডাটাবেসটি ওআরএম অজোনস্টিক হওয়া উচিত, সম্ভবত এটি বেশি পরিমাণে অ্যাপ্লিকেশনটিকে ছাড়িয়ে যাবে।


+1: "ডাটাবেসটি ওআরএম অজোনস্টিক হওয়া উচিত"। ডাটাবেস ডিজাইনের মানদণ্ডগুলিতে আটকে থাকুন এবং ভাল ওআরএম খুব খুশি হবে।
মাইকসিম

12
  1. ওআরএম কখনই স্কিমা তৈরি বা আপডেট করতে দেয় না। সর্বদা এর উত্পাদিত এসকিউএলটিকে একটি টেম্পলেট হিসাবে ব্যবহার করুন তবে পরিবর্তনটি করার আগে এর মাধ্যমে যান (আমি আমাদের ওআরএমকে রিডানড্যান্ট সূচী তৈরি করতে দেখেছি, খারাপ ডেটা টাইপ ব্যবহার করি ... সমস্ত খারাপ জিনিসই ব্যবহার করি)

  2. আপনার ওআরএম কী করতে পারে না সে সম্পর্কে সচেতন হন। জ্যাঙ্গো কিছুক্ষণের জন্য ওআরএমের মাধ্যমে গোষ্ঠীটিকে সমর্থন করে নি যা একটি ব্যথা ছিল (এখনও, উত্তরাধিকার ব্যবস্থা মজাদার!)। ডিআবিএর জন্য ওআরএমের সীমাবদ্ধতা সম্পর্কে সচেতন হওয়া অপরিহার্য যদিও তারা ওআরএম-র জন্য কোড লিখছেন না কেন

  3. পর্যায়ক্রমে, আপনার ধীর লগগুলি ধরুন, মাইএসকিএলস্লোগ্লগের মাধ্যমে এগুলিকে একত্রিত করুন এবং শীর্ষ 10 বা আরও দেখুন look মূলত এটি আপনাকে এমন প্রশ্নের দেখাবে যা সামগ্রিকভাবে সবচেয়ে বেশি সময় নিয়েছে। এমন একটি ক্যোয়ারী যা কেবল গড়ে 1 সেকেন্ড সময় নিয়েছিল কিন্তু গত মাসে 50K বার দৌড়েছিল তা মোটামুটি প্রতিবেদনের উপর দুর্ঘটনার মতো থামবে;)

আমি ওআরএমকে পুরোপুরি ডাম্প করার মতো চরমভাবে যেতে বলব না। যদি আপনার বিকাশকারীরা ওআরএম ব্যবহার করে ডিবিএর না হয় তবে তারা এসকিউএল লিখতে পারে যা ওআরএমের চেয়ে খারাপ বা খারাপ। সুতরাং অবশেষে এটি ডিবিএর উপর পড়বে যা চলছে তা দেখার জন্য।


1
এবং একটি সঞ্চিত প্রকল্পে খুব জটিল যুক্তি স্থাপন বিবেচনা করুন। ওআরএমগুলি সঞ্চিত প্রক্সগুলিকে কল করতে পারে এবং খুব জটিল যুক্তির জন্য, কোনও প্রোকে সম্পাদন করা সহজ।
এইচএলজিইএম

7

কিছু বিষয় আছে আমি ডান একটি লিগ্যাসি ডাটাবেসের করে একটি ডাটাবেস থেকে পৃথক মত ORMs দ্বারা নির্মিত সম্পর্কে দূরে লক্ষ্য হয় পরিশিষ্টদায়্ক এবং ActiveRecord রুবি জন্য।

  1. সমস্ত টেবিলে একটি প্রাথমিক কী ব্যবহার করা হয় 'id'। হ্যাঁ, এটি ওভাররাইড করা যেতে পারে তবে idএটি ডিফল্ট।
  2. টেবিলগুলির জন্য বহুবচন নাম ব্যবহার।
  3. টেবিল এবং ক্ষেত্রের বর্ণনামূলক নাম তৈরি করে শব্দগুলি পৃথক করতে আন্ডারস্কোর ("স্নাকেকেস") ব্যবহার করুন।
  4. _idবিদেশী কীগুলিতে সংযুক্ত ব্যবহার : লেআউটটি সাধারণত পছন্দ হয় referenced_table_id

আমি কয়েক বছর ধরে আমার এসকিউএল হাতে নিয়ে লিখছি কারণ আমি কোনও ওআরএম-তে বিশ্বাস করি না, তবে গত দু'তিন ধরে আমি দুটি বর্ণিত ওআরএম ব্যবহার শুরু করেছি এবং তারা বিদ্যমান ডাটাবেসের সাথে কতটা সংহত হয়েছে তা দেখে আমি মুগ্ধ হয়েছি, এবং যদি তাদের সম্মেলনগুলি অনুসরণ করা হয় তবে তারা কোনও ডেটাবেসকে কতটা ভালভাবে ব্যাখ্যা করতে পারে, বা আমি কোনও উত্তরাধিকার ডিবি বোঝার জন্য প্রয়োজনীয় ইঙ্গিতগুলি দেওয়ার জন্য সময় নিই।

আমি জানি না ওআরএমগুলির সাথে সুন্দরভাবে খেলতে স্কিমা ডিজাইনের জন্য কোনও সাধারণ নির্দেশিকা রয়েছে কি না, তবে আমি মনে করি কিছু মান রেখে আমরা সকলেই উপকৃত হব। কোনও ওআরএমের জন্য অবশ্যই একটি সময় এবং জায়গা রয়েছে, বিশেষত যদি আপনি ভাল ওও ভাষা ব্যবহার করেন এবং আপনি একটি দৃ schedule় সময়সূচীতে থাকেন।


1
এফওয়াইআই: অনেকগুলি ও ম্যাপারদের নামকরণের কনভেনশন পার্থক্য মোকাবেলার জন্য সরঞ্জাম রয়েছে। আমার কাছে ভিজ্যুয়াল স্টুডিওর একটি অ্যাড-ইন রয়েছে যা নিয়ম-ভিত্তিক নামকরণ সহ অ্যান্টিটি ফ্রেমওয়ার্ক এবং লিনক-টু-এসকিউএল-এর জন্য যত্ন নেয়; দেখতে huagati.com/dbmltools যে আরও বিশদের জন্য।
ক্রিস্টোফার

1
আইডি আইডি ফিল্ডটির নামকরণের জন্য একটি এসকিউএল অ্যান্টিপ্যাটার্ন এবং এটি ব্যবহার করা উচিত নয়।
এইচএলজিইএম

কেন বোঝাতে যত্ন? যখন আমাদের এক থেকে একাধিক এবং একাধিক থেকে একের মতো দেখার প্রয়োজন হয় তখন আমরা টেবিলগুলির মধ্যে সম্পর্কগুলি কীভাবে পরিচালনা করব? ওআরএমগুলিতে আমি আইডি ব্যবহার না করে অবশ্যই প্রবাহের বিরুদ্ধে চলেছি।
টিন ম্যান

2

এটি (:)) আপনি কী বা ম্যাপার ব্যবহার করছেন তার উপর কিছুটা নির্ভর করে, সুতরাং প্রশ্ন সাপোর্টে ও ডি ম্যাপারটি কী সমর্থন করে / সমর্থন করে না তা নিয়ে গবেষণা করে কিছুটা সময় ব্যয় করুন।

যেমন মাইক্রোসফ্টের বা ম্যাপাররা এসকিউএল সার্ভারের সমস্ত অন্তর্নির্মিত ডেটাটাইপগুলি সমর্থন করে না, কিছু নতুন / উন্নত টিএসকিউএল বৈশিষ্ট্যগুলি সমর্থন করবে না (পুনরাবৃত্তির অনুসন্ধানগুলি, অপ্টিমাইজার ইঙ্গিত ইত্যাদি স্মরণে বসন্ত)।

তত্ত্ব অনুসারে , একটি ভাল ওআর ম্যাপার একটি ভাল অবজেক্ট মডেলের একটি ভাল নকশাকৃত রিলেশনাল ডাটাবেস স্কিমাকে কাটিয়ে উঠতে (এবং আপনাকে ম্যাপ দেওয়ার অনুমতি দিতে) যথেষ্ট নমনীয় হওয়া উচিত। বাস্তবে, ধাঁধাটির সমস্ত টুকরো ঠিক জায়গায় থাকার আগে আমাদের এখনও কিছুটা যেতে হবে; যদিও অনেকগুলি ও ম্যাপাররা অ্যাডভান্সড ম্যাপিং সমর্থন করে এটি প্রায়শই জটিল প্রশ্ন এবং পারফরম্যান্স সমস্যার ব্যয় করে আসে।

ভাল ডিবি পারফরম্যান্সের জন্য (এবং ডিবিএর সান্টিটি সংরক্ষণের জন্য :)) ডিবি স্কিমা ডিজাইনের ক্ষেত্রে আপনার এখনও সর্বোত্তম অভ্যাসগুলি অনুসরণ করা উচিত; প্রথমে স্বাভাবিক করুন এবং যেখানে [/ যদি] প্রয়োজন হয় সেক্ষেত্রে অস্বীকার করুন। কোড-সাইডে, আপনার অবজেক্ট মডেলটি দিয়ে ওভারবোর্ডে যাবেন না ; এমনকি ওআর ম্যাপার জটিল উত্তরাধিকারের মডেল এবং সত্ত্বাকে সমর্থন করে যা অনেকগুলি টেবিলকে একত্রে একত্রিত করে, এটিও সেই অঞ্চল যেখানে আপনার অতি জটিল জটিল প্রশ্নগুলির সাথে ডাটাবেস ইত্যাদিতে আঘাত হানার ঝুঁকি রয়েছে Profile প্রোফাইল, প্রোফাইল, প্রোফাইল এবং কেবল ওআরএম গ্রহণ করবেন না মঞ্জুর জন্য উত্পন্ন জিজ্ঞাসা। মনে রাখবেন যে ওআর ম্যাপার থেকে উত্পন্ন উত্সগুলি প্রায়শই সাধারণ এসকিউএল কোয়েরির মতো টুইট করা যেতে পারে এবং বস্তুর পাশে দুটি কার্যকরী সমতুল্য ক্যোয়ারী (যেমন লিনক ক্যোয়ারী) কখনও কখনও বিস্তৃতভাবে বিভিন্ন এসকিউএল কোয়েরি তৈরি করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.