मान लीजिए मैं निम्न तालिकाओं को बनाए रखते हुए:एसक्यूएल: डेटाबेस का सामान्यीकरण की कमी
____________________ ____________________
| Organisms | | Species |
|--------------------| |--------------------|
|OrganismId (int, PK)| |SpeciesId (int, PK) |
|SpeciesId (int, FK) |∞---------1|Name (varchar) |
|Name (varchar) | |____________________|
|____________________| 1
1 |
| |
| |
∞ ∞
______________________ ____________________ _______________
| OrganismPropsValues | | SpeciesProps | | Props |
|----------------------| |--------------------| |---------------|
|OrganismId (int, FK) | |PropId (int,PK,FK) | ∞-----1|PropId (int,PK)|
|PropId (int, FK) | |SpeciesId(int,PK,FK)| |Name (varchar) |
|Value (varchar) | |____________________| |_______________|
|______________________| 1
∞ |
| |
-----------------------------------------------------------
मैं क्या यहाँ प्रतिनिधित्व करने के लिए कोशिश कर रहा हूँ का एक त्वरित विवरण: लगता है हम इस तरह बिल्ली के रूप में प्रजातियों, की एक सूची है, कुत्ते , मानव, आदि। हमारे पास गुणों का एक समूह भी है (संक्षेप में प्रॉप्स ताकि मैं आरेख में इसे अधिक आसानी से फिट कर सकूं) जो कुछ पर लागू होता है लेकिन जरूरी नहीं कि सभी प्रजातियां - उदाहरण के लिए, यह पूंछ की लंबाई हो सकती है (पूंछ वाली प्रजातियों के लिए), आंखों का रंग (आंखों वाले लोगों के लिए), आदि
प्रजातियां एक लिंकर तालिका है जो परिभाषित करती है कि कौन सी गुण प्रजातियों पर लागू होते हैं - तो यहां हम एलडी में {मानव, आंखों का रंग}, {कुत्ता, आंखों का रंग}, {बिल्ली, आंखों का रंग}, {कुत्ता, पूंछ की लंबाई}, {बिल्ली, पूंछ की लंबाई} है। हमारे पास {मानव, पूंछ की लंबाई} नहीं है क्योंकि पूंछ की लंबाई स्पष्ट रूप से एक मानव पर लागू करने के लिए वैध संपत्ति नहीं है।
जीवों की तालिका प्रजातियों के वास्तविक "कार्यान्वयन" रखती है - तो यहां हमारे पास {मानव, बॉब}, {कुत्ता, रूफस}, और {बिल्ली, फ़ेलिक्स} हो सकता है।
यहां मेरा मुद्दा है: ऑर्गेनिज्मप्रॉपवल्स तालिका में, मैं प्रत्येक जीव के लिए गुणों के 'मान' को संग्रहीत करना चाहता हूं - उदाहरण के लिए, बॉब के लिए मैं {बॉब, आई कलर, ब्लू} स्टोर करना चाहता हूं। रूफस के लिए, मैं {रूफस, आई कलर, ब्राउन} और {रूफस, टेल लम्बाई, 20} (फ़ेलिक्स के लिए समान) स्टोर करना चाहता हूं। मेरी समस्या हालांकि, यह है कि मैंने जो स्कीमा विस्तृत किया है, वह {बॉब, पूंछ की लंबाई, 10} को स्टोर करना पूरी तरह से संभव है, भले ही {मानव, पूंछ की लंबाई} टुपल प्रजातिप्रॉप में मौजूद न हो। मैं इस स्कीमा को कैसे संशोधित कर सकता हूं ताकि मैं पर्याप्त सामान्यीकरण बनाए रखने के दौरान, OrganismPropsValues में प्रजातिप्रॉप में परिभाषित बाधाओं को लागू कर सकूं?
SpeciesProps तालिका में SpeciesPropsId जोड़ें:
डीबी (उदाहरण के ओरेकल के लिए) पर निर्भर करता है मैं सिर्फ सुझाव के लिए सम्मिलित/अपडेट करने के लिए कुछ संग्रहित प्रक्रियाओं – Yahia
@Yahia धन्यवाद पैदा करेगा/हटाएँ और वहाँ किसी भी जटिल बाधाओं को लागू ..., लेकिन अगर वहाँ एक रास्ता है प्रक्रियाओं, ट्रिगर्स इत्यादि को शुरू किए बिना ऐसा करने के लिए मैं इसे पसंद करूंगा। यह एमएस-एसक्यूएल (2008) है। – Andrew
जिसने मेरा सिर चोट पहुंचाई।यह पूछने के लिए भयानक होगा (सोचें कि मानव के बारे में सभी डेटा प्राप्त करने में कितने लोग शामिल होंगे!) और यह एक खराब डिजाइन है जिसे मैं नहीं जानता कि कहां से शुरू करना है। डेटाबेस ऑब्जेक्ट्स नहीं हैं और उन्हें वस्तुओं की तरह डिज़ाइन नहीं किया जाना चाहिए। ईएवी टेबल एक बेहद खराब समाधान हैं। एक असली डेटाबेस डिजाइनर किराया। – HLGEM