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

पहचान या गैर-पहचान करने वाले संबंध में चाइल्ड टेबल कौन सी है?

चाइल्ड टेबल (ए.के.ए. कमजोर इकाई ) एक तालिका है जिसकी प्राथमिक कुंजी विशेषताएँ निर्भर करती हैं दूसरी टेबल पर, इस प्रकार चाइल्ड टेबल पहचान . है या आंशिक रूप से पहचाना गया तालिका में पंक्तियों द्वारा यह (माता-पिता) पर निर्भर करता है। चाइल्ड टेबल में पंक्तियाँ उसकी मूल तालिका में संबंधित पंक्ति के बिना मौजूद नहीं हो सकती हैं।

उदाहरण के लिए, आइए एक सरल और पूरी तरह से प्रासंगिक उदाहरण लें जिससे हम सभी परिचित हैं:परिवार के संदर्भ में माता-पिता और बच्चे . हम इस संबंध को इस तरह की तालिकाओं के साथ मॉडल कर सकते हैं:

उपरोक्त मॉडल में, Parents . में प्रत्येक पंक्ति तालिका विशिष्ट रूप से पहचानी गई . है एक SSN . द्वारा . SSN प्रत्येक माता-पिता के लिए एक आंतरिक और अद्वितीय विशेषता है, इस प्रकार यह एक स्टैंडअलोन या "मजबूत" इकाई है क्योंकि यह अपनी पहचान को परिभाषित करने के लिए किसी अन्य तालिका पर निर्भर नहीं है।

हालांकि बच्चे, आवश्यकता मौजूद रहने के लिए माता-पिता (Parent_SSN चाहिए मौजूदा SSN . के संदर्भ में Parents . में मेज़)।

समग्र प्राथमिक कुंजी पर ध्यान दें (Parent_SSN, Name ) Children . में मेज़। इसका मतलब है कि बच्चे अद्वितीय रूप से पहचाने जाते हैं संयोजन . द्वारा Parent_SSN . का और Name . आप केवल Name . के आधार पर किसी एक बच्चे के लिए क्वेरी नहीं कर सकते हैं फ़ील्ड क्योंकि कई माता-पिता के एक ही नाम के बच्चे हो सकते हैं। इसी तरह, आप केवल Parent_SSN . के आधार पर किसी एक बच्चे के लिए क्वेरी नहीं कर सकते हैं क्षेत्र क्योंकि एक माता-पिता के कई बच्चे हो सकते हैं। इसे ध्यान में रखते हुए, बच्चों को उनके माता-पिता द्वारा आंशिक रूप से पहचाना जाता है, इसलिए पहचान संबंध।

लेकिन क्या एसएसएन द्वारा भी बच्चों की विशिष्ट रूप से पहचान नहीं की जा सकती है? क्यों हाँ, ज़रूर। आइए आगे बढ़ें और अपने मॉडल को इसमें शामिल करने के लिए समायोजित करें:

मॉडल के इस संस्करण में, ध्यान दें कि हमने SSN . पेश किया है Children . के लिए फ़ील्ड . अद्वितीय पहचान बच्चों की संख्या अब उनके स्वयं के आंतरिक और अद्वितीय SSN . द्वारा परिभाषित की गई है . उनकी पहचान अब निर्भर नहीं करती Parents . पर मेज़। हालांकि Parent_SSN फ़ील्ड अभी भी SSN . का संदर्भ देता है Parents . के तालिका, इसका अद्वितीय पहचान में कोई हिस्सा नहीं है बच्चे की, इस प्रकार माता-पिता के पास एक गैर-पहचान . है उनके बच्चों के साथ संबंध, और दोनों तालिकाओं को अब "मजबूत" स्टैंडअलोन इकाइयां माना जा सकता है।

एक तरफ, मॉडल के इस संस्करण में पहले की तुलना में कुछ फायदे हैं:

  • एक माता-पिता के अब एक ही नाम के दो या दो से अधिक बच्चे हो सकते हैं, जबकि इकाई अखंडता ए> पिछले मॉडल में बाधा इसकी अनुमति नहीं देगी।
  • आप Parent_SSN को अनुमति दे सकते हैं NULL रखने के लिए फ़ील्ड इस घटना के लिए खाते के लिए कि आपके पास बच्चे के बारे में डेटा है, लेकिन यह नहीं जानते कि उसके माता-पिता कौन हैं।

उपरोक्त दोनों मॉडलों में, Parents तालिका को Children . की मूल तालिका माना जाता है मेज़। हालांकि, गैर-पहचानने वाले . में दूसरे मॉडल की तरह संबंध, Parents विदेशी कुंजी Parent_SSN . के संदर्भ में केवल एक मूल तालिका है क्योंकि Parent_SSN संदर्भ/निर्भर करता है SSN पर Parents . में तालिका, लेकिन नहीं बच्चों की वास्तविक पहचान को परिभाषित करने में उनकी कोई भूमिका है।

यह समझने के लिए कि माता-पिता/चाइल्ड टेबल कौन सी टेबल हैं, यह तय करते समय संदर्भ क्यों महत्वपूर्ण है, निम्नलिखित उदाहरण पर विचार करें जिसमें सर्कुलर निर्भरता शामिल है:

इस उदाहरण में, कर्मचारियों और विभागों को उनकी अपनी विशेषताओं से विशिष्ट रूप से पहचाना जाता है और उनकी पहचान का कोई भी हिस्सा अन्य तालिकाओं से प्राप्त नहीं होता है।

यहां, हमारे दो गैर-पहचान वाले संबंध हैं:एक कर्मचारी एक विभाग के लिए काम करता है (DeptNo Employee . में तालिका), और एक विभाग एक कर्मचारी द्वारा प्रबंधित किया जाता है (ManagerSSN Department . में मेज़)। पैरेंट टेबल कौन सी है? ...बच्चे की मेज?

यह संदर्भ पर निर्भर करता है - आप किस विदेशी कुंजी संबंध के बारे में बात कर रहे हैं? विभाग तालिका को DeptNo . के संदर्भ में मूल तालिका माना जाएगा Employee . में तालिका क्योंकि DeptNo संदर्भ/आश्रित है Department . पर मेज़।

हालांकि, ManagerSSN . के संदर्भ में कर्मचारी तालिका को मूल तालिका माना जाएगा Department . में तालिका क्योंकि ManagerSSN संदर्भ/आश्रित है Employee . पर टेबल।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL का चयन करें जहां एकाधिक मानों के बराबर है

  2. संग्रहीत कार्यविधि को कॉल करने का वैध उदाहरण मांगना C#:MYSQL

  3. दो परिणाम सेट के बीच समानता की तुलना करें

  4. SQL क्वेरी निर्माण - एक कॉलम में डेटा को दो कॉलम में अलग करें

  5. PHP MySQL क्वेरी जिसमें कीवर्ड/आरक्षित शब्द शामिल हैं