Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल:बाधाओं को बनाए रखते हुए डेटाबेस का सामान्यीकरण

आप 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 एंटीपैटर्न:डेटाबेस प्रोग्रामिंग के नुकसान से बचना



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सी # में संग्रहीत प्रक्रिया पैरामीटर के रूप में उपयोगकर्ता परिभाषित तालिका प्रकार को कैसे पास करें

  2. डेटा को जोड़ने के लिए टेबल पर लूप (कर्सर का उपयोग किए बिना)

  3. MS SQL 2019 में UDF के अंदर अनपेक्षित @@ rowcount व्यवहार

  4. ROW_NUMBER() OVER (पार्टिशन बाय ...) का उपयोग करने में समस्या

  5. SQL सर्वर में मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन्स और इनलाइन टेबल-वैल्यूड फंक्शन्स के बीच अंतर