आप Entity-Attribute-Value लागू कर रहे हैं प्रतिरूप यह एक सामान्यीकृत डेटाबेस डिज़ाइन नहीं हो सकता, क्योंकि यह संबंधपरक नहीं है।
इसके बजाय मैं जो सुझाव दूंगा वह है क्लास टेबल इनहेरिटेंस डिजाइन पैटर्न:
- जीवों के लिए एक तालिका बनाएं, जिसमें सभी प्रजातियों के लिए समान गुण हों।
-
प्रति प्रजाति एक तालिका बनाएं, जिसमें उस प्रजाति के लिए विशिष्ट गुण हों। इनमें से प्रत्येक तालिका का जीवों के साथ 1-से-1 संबंध है, लेकिन प्रत्येक गुण अपने स्वयं के कॉलम में है।
____________________ ____________________ | Organisms | | Species | |--------------------| |--------------------| |OrganismId (int, PK)| |SpeciesId (int, PK) | |SpeciesId (int, FK) |∞---------1|Name (varchar) | |Name (varchar) | |____________________| |____________________| 1 | | 1 ______________________ | HumanOrganism | |----------------------| |OrganismId (int, FK) | |Sex (enum) | |Race (int, FK) | |EyeColor (int, FK) | |.... | |______________________|
इसका मतलब यह है कि आप कई तालिकाओं का निर्माण करेंगे, लेकिन इसे एक ट्रेडऑफ़ के रूप में मानें, जिसमें गुणों को एक संबंधपरक रूप से सही तरीके से संग्रहीत करने के कई व्यावहारिक लाभ हैं:
- हर चीज को फ्री-फॉर्म वर्चर मानने के बजाय, आप SQL डेटा प्रकारों का उचित उपयोग कर सकते हैं।
- आप कुछ गुणों को पूर्वनिर्धारित मानों के सेट द्वारा प्रतिबंधित करने के लिए बाधाओं या लुकअप तालिकाओं का उपयोग कर सकते हैं।
- आप संपत्तियों को अनिवार्य बना सकते हैं (यानी NULL नहीं) या अन्य बाधाओं का उपयोग कर सकते हैं।
- डेटा और अनुक्रमणिका अधिक कुशलता से संग्रहीत की जाती हैं।
- प्रश्न लिखना आपके लिए आसान है और RDBMS के लिए निष्पादित करना आसान है।
इस डिज़ाइन के बारे में अधिक जानकारी के लिए, मार्टिन फाउलर की पुस्तक एंटरप्राइज़ एप्लिकेशन आर्किटेक्चर के पैटर्न देखें। , या मेरी प्रस्तुति SQL में प्रैक्टिकल ऑब्जेक्ट-ओरिएंटेड मॉडल ए> , या मेरी किताब, SQL एंटीपैटर्न:डेटाबेस प्रोग्रामिंग के नुकसान से बचना ।