डेटाबेस में एक पारस्परिक निर्भरता एक ही तालिका में मानों के बीच अप्रत्यक्ष संबंध है जो कार्यात्मक निर्भरता का कारण बनती है। तीसरे सामान्य फॉर्म (3 एनएफ) के सामान्यीकरण मानक को प्राप्त करने के लिए, आपको किसी भी पारगमन निर्भरता को खत्म करना होगा।
अपनी प्रकृति से, एक संक्रमणीय निर्भरता के लिए तीन या अधिक विशेषताओं (या डेटाबेस कॉलम) की आवश्यकता होती है जिनके बीच एक कार्यात्मक निर्भरता होती है, जिसका अर्थ है कि तालिका में कॉलम ए कॉलम बी पर मध्यवर्ती कॉलम सी के माध्यम से निर्भर करता है।
चलो देखते हैं कि यह कैसे काम कर सकता है।
ट्रांजिटिव निर्भरता उदाहरण
लेखक
| Author_ID | लेखक | किताब | Author_Nationality |
|---|---|---|---|
| Auth_001 | ऑरसन स्कॉट कार्ड | ख़त्म करने वाले का खेल | संयुक्त राज्य अमेरिका |
| Auth_001 | ऑरसन स्कॉट कार्ड | ख़त्म करने वाले का खेल | संयुक्त राज्य अमेरिका |
| Auth_002 | मार्गरेट एटवुड | हस्तनिर्मित कथा | कनाडा |
उपरोक्त लेखक उदाहरण में:
- किताब → लेखक : यहां ही किताब विशेषता निर्धारित करता है लेखक विशेषता। यदि आप पुस्तक का नाम जानते हैं, तो आप लेखक का नाम सीख सकते हैं। हालाँकि, लेखक निर्धारित नहीं करता है किताब , क्योंकि एक लेखक कई किताबें लिख सकता है। उदाहरण के लिए, सिर्फ इसलिए कि हम लेखक के नाम ऑरसन स्कॉट कार्ड को जानते हैं, हम अभी भी पुस्तक का नाम नहीं जानते हैं।
- लेखक → Author_Nationality : इसी तरह, लेखक विशेषता निर्धारित करता है Author_Nationality , लेकिन दूसरी तरफ नहीं; सिर्फ इसलिए कि हम राष्ट्रीयता को जानते हैं इसका मतलब यह नहीं है कि हम लेखक को निर्धारित कर सकते हैं।
लेकिन यह तालिका एक पारस्परिक निर्भरता पेश करती है:
- किताब → Author_Nationality: अगर हम पुस्तक का नाम जानते हैं, तो हम लेखक कॉलम के माध्यम से राष्ट्रीयता निर्धारित कर सकते हैं।
ट्रांजिटिव निर्भरता से बचें
तीसरा सामान्य फॉर्म सुनिश्चित करने के लिए, चलिए ट्रांजिटिव निर्भरता को हटा दें।
हम लेखक तालिका से पुस्तक कॉलम को हटाकर और एक अलग पुस्तक तालिका बनाकर शुरू कर सकते हैं:
पुस्तकें
| Book_ID | किताब | Author_ID |
|---|---|---|
| Book_001 | ख़त्म करने वाले का खेल | Auth_001 |
| Book_001 | दिमाग के बच्चे | Auth_001 |
| Book_002 | हस्तनिर्मित कथा | Auth_002 |
लेखक
| Author_ID | लेखक | Author_Nationality |
|---|---|---|
| Auth_001 | ऑरसन स्कॉट कार्ड | संयुक्त राज्य अमेरिका |
| Auth_002 | मार्गरेट एटवुड | कनाडा |
क्या यह ठीक है? आइए अब हमारी निर्भरताओं की जांच करें:
किताबें टेबल:
- Book_ID → किताब: किताब पर निर्भर करता है Book_ID .
- इस तालिका में कोई अन्य निर्भरता मौजूद नहीं है, इसलिए हम ठीक हैं। ध्यान दें कि विदेशी कुंजी Author_ID इस तालिका को अपनी प्राथमिक कुंजी के माध्यम से AUTHORS तालिका में लिंक करता है Author_ID । हमने एक संक्रमणीय निर्भरता, संबंधपरक डेटाबेस का एक प्रमुख डिजाइन से बचने के लिए एक रिश्ता बनाया है।
लेखक तालिका:
- Author_ID → लेखक: लेखक पर निर्भर करता है Author_ID .
- लेखक → Author_Nationality: राष्ट्रीयता लेखक द्वारा निर्धारित किया जा सकता है।
- Author_ID → Author_Nationality: राष्ट्रीयता से निर्धारित किया जा सकता है Author_ID के माध्यम से लेखक विशेषता। हमारे पास अभी भी एक पारस्परिक निर्भरता है।
इस डेटा को सामान्य करने के लिए हमें एक तीसरी तालिका जोड़नी होगी:
देशों
| country_id | देश |
|---|---|
| Coun_001 | संयुक्त राज्य अमेरिका |
| Coun_002 | कनाडा |
लेखक
| Author_ID | लेखक | country_id |
|---|---|---|
| Auth_001 | ऑरसन स्कॉट कार्ड | Coun_001 |
| Auth_002 | मार्गरेट एटवुड | Coun_002 |
अब टेबल के बीच लिंक करने के लिए विदेशी कुंजी का उपयोग करने के लिए हमारे पास तीन टेबल हैं:
- पुस्तक तालिका की विदेशी कुंजी Author_ID AUTHORS तालिका में एक लेखक को एक पुस्तक से लिंक करता है।
- लेखक तालिका की विदेशी कुंजी country_id COUNTRIES तालिका में किसी देश को लेखक से लिंक करता है।
- COUNTRIES तालिका में कोई विदेशी कुंजी नहीं है क्योंकि इस डिज़ाइन में किसी अन्य तालिका से लिंक करने की आवश्यकता नहीं है।
क्यों ट्रांजिटिव निर्भरता खराब डेटाबेस डिजाइन हैं
3 एनएफ सुनिश्चित करने में मदद के लिए ट्रांजिटिव निर्भरताओं से बचने का क्या महत्व है? आइए हमारी पहली तालिका दोबारा विचार करें और इसके द्वारा बनाए गए मुद्दों को देखें:
लेखक
| Author_ID | लेखक | किताब | Author_Nationality |
|---|---|---|---|
| Auth_001 | ऑरसन स्कॉट कार्ड | ख़त्म करने वाले का खेल | संयुक्त राज्य अमेरिका |
| Auth_001 | ऑरसन स्कॉट कार्ड | दिमाग के बच्चे | संयुक्त राज्य अमेरिका |
| Auth_002 | मार्गरेट एटवुड | हस्तनिर्मित कथा | कनाडा |
इस प्रकार का डिज़ाइन डेटा विसंगतियों और असंगतताओं में योगदान दे सकता है, उदाहरण के लिए:
- यदि आपने दो पुस्तकें "बच्चों के दिमाग" और "एन्डर गेम" को हटा दिया है, तो आप लेखक "ऑर्सन स्कॉट कार्ड" और उनकी राष्ट्रीयता को पूरी तरह से डेटाबेस से हटा देंगे।
- जब तक आप कोई पुस्तक नहीं जोड़ते तब तक आप डेटाबेस में एक नया लेखक नहीं जोड़ सकते; क्या होगा यदि लेखक अभी तक अप्रकाशित है या आप उस पुस्तक के नाम को नहीं जानते हैं जिसे उसने लिखा है?
- अगर "ऑरसन स्कॉट कार्ड" ने अपनी नागरिकता बदल दी है, तो आपको इसे सभी अभिलेखों में बदलना होगा जिसमें वह प्रकट होता है। एक ही लेखक के साथ कई रिकॉर्ड होने के कारण गलत डेटा हो सकता है: क्या होगा यदि डेटा प्रविष्टि व्यक्ति को यह नहीं पता कि उसके लिए कई रिकॉर्ड हैं और केवल एक रिकॉर्ड में डेटा बदलते हैं?
- आप लेखक को पूरी तरह से हटाए बिना "द हैंडमाइड्स टेल" जैसी पुस्तक को हटा नहीं सकते हैं।
ये सामान्य कारण हैं, और सामान्य निर्भरताओं से परहेज करते हैं, डेटा की रक्षा करते हैं और स्थिरता सुनिश्चित करते हैं।




