আপনি বর্ণিত ধরণের শ্রেণিবিন্যাসের মডেলিংয়ের জন্য কমপক্ষে এই পাঁচটি বিকল্প রয়েছে:
একক টেবিল উত্তরাধিকার : সমস্ত প্রকারের সমস্ত বৈশিষ্ট্য সংরক্ষণ করার জন্য পর্যাপ্ত কলাম সহ সমস্ত পণ্যের ধরণের জন্য একটি টেবিল। এর অর্থ প্রচুর কলাম, যার বেশিরভাগই কোনও প্রদত্ত সারিতে শূন্য।
ক্লাস টেবিল উত্তরাধিকার : পণ্যগুলির জন্য একটি টেবিল, সমস্ত পণ্যের ধরণের সাধারণ বৈশিষ্ট্য সংরক্ষণ করে। তারপরে পণ্যের ধরণের প্রতি এক টেবিল, সেই পণ্যটির জন্য নির্দিষ্ট বৈশিষ্ট্যগুলি সংরক্ষণ করে।
কংক্রিট টেবিল উত্তরাধিকার : সাধারণ পণ্য বৈশিষ্ট্যের জন্য কোনও টেবিল নেই table পরিবর্তে, পণ্য ধরণের প্রতি এক টেবিল, উভয় সাধারণ পণ্য বৈশিষ্ট্য এবং পণ্য-নির্দিষ্ট বৈশিষ্ট্য সংরক্ষণ করে।
সিরিয়ালযুক্ত এলওবি : পণ্যগুলির জন্য একটি টেবিল, সমস্ত পণ্যের ধরণের সাধারণ বৈশিষ্ট্য সংরক্ষণ করে। একটি অতিরিক্ত কলাম XML, YAML, JSON, বা অন্য কোনও ফর্ম্যাটে অর্ধ-কাঠামোগত ডেটার একটি BLOB সঞ্চয় করে B এই BLOB আপনাকে প্রতিটি পণ্যের ধরণের জন্য নির্দিষ্ট বৈশিষ্ট্যগুলি সংরক্ষণ করতে দেয়। আপনি এটি বর্ণনার জন্য অভিনব নকশার প্যাটার্নগুলি ব্যবহার করতে পারেন, যেমন ফেসিড এবং মেমেন্টো। তবে নির্বিশেষে আপনার কাছে এমন একটি বৈশিষ্ট্য রয়েছে যা এসকিউএল-এর মধ্যে সহজে জিজ্ঞাসা করা যায় না; আপনাকে পুরো ব্লবটি অ্যাপ্লিকেশনটিতে ফিরিয়ে আনতে হবে এবং এটি সেখানে সাজিয়ে ফেলতে হবে।
সত্তা-গুণ-মান : পণ্যগুলির জন্য একটি সারণী এবং একটি টেবিল যা কলামগুলির পরিবর্তে সারিগুলিতে বৈশিষ্ট্যগুলিকে পিভট করে। EAV সম্পর্কিত সম্পর্কিত দৃষ্টান্তের সাথে সম্মত একটি বৈধ নকশা নয়, তবে অনেক লোক যাইহোক এটি ব্যবহার করে। এটি অন্য একটি উত্তর দ্বারা উল্লিখিত "সম্পত্তিগুলির প্যাটার্ন"। কিছু সমস্যার জন্য স্ট্যাকওভারফ্লোতে ইভা ট্যাগ সহ অন্যান্য প্রশ্নগুলি দেখুন other
আমি এ সম্পর্কে আরও একটি উপস্থাপনা, এক্সটেনসিবল ডেটা মডেলিংয়ে লিখেছি ।
EAV সম্পর্কে অতিরিক্ত চিন্তা: যদিও অনেক লোক EAV এর পক্ষে বলে মনে হয়, আমি তা করি না। এটি সবচেয়ে নমনীয় সমাধানের মতো বলে মনে হয় এবং তাই সেরা therefore তবে, ট্যানস্টাএফএল প্রবন্ধটি মনে রাখবেন । এখানে ইএভি এর কিছু অসুবিধা রয়েছে:
- কোনও কলাম বাধ্যতামূলক করার কোনও উপায় নয় (সমতুল্য
NOT NULL
)।
- এন্ট্রিগুলিকে বৈধতা দেওয়ার জন্য এসকিউএল ডেটা প্রকারগুলি ব্যবহার করার কোনও উপায় নেই।
- অ্যাট্রিবিউটের নামগুলি ধারাবাহিকভাবে বানান তা নিশ্চিত করার কোনও উপায় নেই।
- কোনও প্রদত্ত বৈশিষ্ট্যের মানগুলিতে বিদেশী কী রাখার কোনও উপায় নেই, উদাহরণস্বরূপ একটি সন্ধানের টেবিলের জন্য।
- প্রচলিত সারণী বিন্যাসে ফলাফল আনয়ন জটিল এবং ব্যয়বহুল, কারণ একাধিক সারি থেকে
JOIN
গুণাবলী প্রতিটি বৈশিষ্ট্যের জন্য আপনাকে করতে হবে ।
নমনীয়তা EAV ডিগ্রি আপনাকে অন্যান্য ক্ষেত্রে ত্যাগের প্রয়োজন দেয়, সম্ভবত আপনার কোডটিকে জটিল (বা আরও খারাপ) হিসাবে তুলনায় এটি আরও প্রচলিত উপায়ে আসল সমস্যাটি সমাধান করা হত।
এবং বেশিরভাগ ক্ষেত্রে, নমনীয়তার ডিগ্রি থাকা অপ্রয়োজনীয়। পণ্যের ধরণ সম্পর্কে ওপি-র প্রশ্নের মধ্যে, পণ্য-নির্দিষ্ট বৈশিষ্ট্যের জন্য পণ্য প্রকারের জন্য একটি সারণী তৈরি করা অনেক সহজ, সুতরাং আপনার কমপক্ষে একই পণ্য প্রকারের প্রবেশের জন্য কিছু সামঞ্জস্যপূর্ণ কাঠামো প্রয়োগ করা হয়েছে।
আমি EAV ব্যবহার করতে চাই শুধুমাত্র যদি প্রত্যেক সারি সম্ভাব্য গুণাবলী একটি স্বতন্ত্র সেট আছে করার অনুমতি দিতে হবে। আপনার কাছে যখন পণ্যের ধরণের একটি সীমাবদ্ধ সেট থাকে, তখন EAV ওভারকিল হয়। ক্লাস টেবিল উত্তরাধিকার আমার প্রথম পছন্দ হবে।
২০১৮ আপডেট করুন: "অনেকগুলি কাস্টম বৈশিষ্ট্য" সমস্যার সমাধান হিসাবে লোকেরা যত বেশি JSON ব্যবহার করে দেখি, আমি তার সমাধানটি কম পছন্দ করি। এটি সমর্থনগুলিতে বিশেষ JSON ফাংশন ব্যবহার করার পরেও প্রশ্নগুলি খুব জটিল করে তোলে । সাধারণ সারি এবং কলামগুলিতে সংরক্ষণের তুলনায় জেএসএন নথি সংরক্ষণ করতে অনেক বেশি সঞ্চয় স্থান লাগে space
মূলত, এই সমাধানগুলির কোনওটিই একটি সম্পর্কিত সম্পর্কিত ডেটাবেজে সহজ বা দক্ষ নয়। "ভেরিয়েবল অ্যাট্রিবিউটস" থাকার পুরো ধারণাটি মূলত সম্পর্কের তত্ত্বের সাথে মতবিরোধে।
এটি যেটি নেমে আসে তা হ'ল আপনাকে এমন একটি সমাধান বেছে নিতে হবে যার ভিত্তিতে আপনার অ্যাপ্লিকেশনটি সবচেয়ে কম খারাপ । অতএব আপনি কীভাবে ডেটাবেস ডিজাইন বেছে নেওয়ার আগে আপনি কীভাবে ডেটা অনুসন্ধান করতে চলেছেন তা জানতে হবে। "সেরা" একটি সমাধান চয়ন করার কোনও উপায় নেই কারণ প্রদত্ত অ্যাপ্লিকেশনটির জন্য সমাধানগুলির মধ্যে কোনওটিই সেরা হতে পারে।