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

SQL सर्वर में 1:1 और 1:m संबंधों को डिज़ाइन करना

किसी भी संबंध के लिए आवश्यक है कि "पैरेंट" तालिका (एक तरफ) में प्राथमिक (या अद्वितीय) कुंजी (पीके) हो, जो विशिष्ट रूप से प्रत्येक पंक्ति की पहचान करती है, और "चाइल्ड" तालिका (दूसरी तरफ) में एक विदेशी कुंजी कॉलम या कॉलम होता है , जो उन मानों से भरा होना चाहिए जो मूल तालिका में प्राथमिक कुंजी के कुछ मौजूदा मान [एस] के समान हैं। यदि आप एक से कई (1-एम) संबंध चाहते हैं तो विदेशी कुंजी बाल तालिका में एक सामान्य विशेषता (कॉलम या कॉलम) होनी चाहिए जो दोहरा सकती है (समान मान के साथ कई पंक्तियां हो सकती हैं)

यदि आप एक से एक (1-1) संबंध चाहते हैं तो विदेशी कुंजी स्वयं प्राथमिक कुंजी या बाल तालिका में अद्वितीय अनुक्रमणिका होनी चाहिए जो गारंटी देती है कि उस मान के साथ बाल तालिका में अधिकतम एक पंक्ति हो सकती है।

एक 1-1 संबंध प्रभावी रूप से एक तालिका में विशेषताओं (कॉलम) को दो तालिकाओं में विभाजित करता है। इसे ऊर्ध्वाधर विभाजन कहा जाता है। यह अक्सर उप-वर्गीकरण . के लिए किया जाता है तालिका निकाय, या, किसी अन्य कारण से, यदि तालिका में स्तंभों पर उपयोग के पैटर्न से संकेत मिलता है कि कुछ स्तंभों को बाकी स्तंभों की तुलना में अधिक बार एक्सेस करने की आवश्यकता है। (मान लें कि एक या दो कॉलम प्रति सेकंड 1000 बार एक्सेस किए जाएंगे और अन्य 40 कॉलम महीने में केवल एक बार एक्सेस किए जाएंगे)। तालिका को इस तरह से विभाजित करने से उन दो अलग-अलग प्रश्नों के लिए भंडारण पैटर्न का अनुकूलन होगा।

उप-वर्गीकरण . उपरोक्त वास्तव में 1 से शून्य या एक संबंध बनाता है, जिसका उपयोग उप-वर्ग या उप-प्रकार के संबंध के लिए किया जाता है। यह तब होता है जब आपके पास दो अलग-अलग निकाय होते हैं जो बड़ी संख्या में विशेषताएँ साझा करते हैं, लेकिन एक निकाय में अतिरिक्त विशेषताएँ होती हैं जिनकी दूसरे को आवश्यकता नहीं होती है। एक अच्छा उदाहरण हो सकता है कर्मचारी , और वेतनभोगी कर्मचारी . कर्मचारी तालिका में वे सभी विशेषताएं होंगी जो सभी कर्मचारी साझा करते हैं, और वेतनभोगी कर्मचारी तालिका अतिरिक्त विशेषताओं (वेतन) के साथ कर्मचारियों के साथ (1-0/1) संबंध में मौजूद होगी , वार्षिक अवकाश , आदि) जो केवल वेतनभोगी कर्मचारियों को चाहिए।

यदि आप वास्तव में 1-1 संबंध चाहते हैं, तो आपको यह गारंटी देने के लिए एक और तंत्र जोड़ना होगा कि मूल तालिका में प्रत्येक रिकॉर्ड/पंक्ति के लिए बाल तालिका में हमेशा एक रिकॉर्ड होगा। आम तौर पर ऐसा करने का एकमात्र तरीका डेटा डालने के लिए उपयोग किए गए कोड में इसे लागू करना है (या तो ट्रिगर, संग्रहीत प्रक्रिया या डेटाबेस के बाहर कोड)। ऐसा इसलिए है क्योंकि यदि आपने दो तालिकाओं पर संदर्भात्मक अखंडता बाधाओं को जोड़ा है जिसके लिए पंक्तियों को हमेशा दोनों में होना आवश्यक है, तो बाधाओं में से किसी एक का उल्लंघन किए बिना किसी एक पंक्ति को जोड़ना संभव नहीं होगा, और आप दोनों में एक पंक्ति नहीं जोड़ सकते हैं एक ही समय में टेबल।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बहु-भाग पहचानकर्ता को बाध्य नहीं किया जा सकता - SubQuery

  2. SQL सर्वर डेटाबेस में मौजूदा तालिका में कॉलम जोड़ें

  3. 1 कॉलम के आधार पर समूहबद्ध करते हुए केवल 50 से अधिक पंक्तियों के पुराने रिकॉर्ड हटाएं

  4. SQL सर्वर डेटाबेस पुनर्स्थापना त्रुटि:निर्दिष्ट कास्ट मान्य नहीं है। (एसक्लमैनेजरयूआई)

  5. एक्सेल में वीबीए में एसक्यूएल सर्वर से त्रुटि संदेश पकड़ना