डेटाबेस में एक-से-अनेक संबंध तब होता है जब तालिका ए में प्रत्येक रिकॉर्ड में तालिका बी में कई लिंक किए गए रिकॉर्ड हो सकते हैं, लेकिन तालिका बी में प्रत्येक रिकॉर्ड में तालिका ए में केवल एक संबंधित रिकॉर्ड हो सकता है।
डेटाबेस में एक-से-अनेक संबंध सबसे सामान्य संबंधपरक डेटाबेस डिज़ाइन है और अच्छे डिज़ाइन के केंद्र में है।
डेटाबेस एक-से-एक संबंध और कई-से-अनेक संबंध भी लागू कर सकते हैं।
एक-से-अनेक संबंध का उदाहरण
एक शिक्षक और उनके द्वारा पढ़ाए जाने वाले पाठ्यक्रमों के बीच संबंधों पर विचार करें। एक शिक्षक कई कक्षाओं को पढ़ा सकता है, लेकिन पाठ्यक्रम का शिक्षक के साथ समान संबंध नहीं होगा।
इसलिए, शिक्षक तालिका में प्रत्येक रिकॉर्ड के लिए, पाठ्यक्रम तालिका में कई रिकॉर्ड हो सकते हैं। यह उदाहरण एक-से-अनेक संबंध दिखाता है: एक शिक्षक से कई पाठ्यक्रमों के लिए।
एक-से-अनेक संबंध स्थापित करना क्यों महत्वपूर्ण है
एक-से-अनेक संबंध का प्रतिनिधित्व करने के लिए, आपको कम से कम दो तालिकाओं की आवश्यकता है। देखते हैं क्यों।
पहले सामान्य फॉर्म डिजाइन का पालन
शायद हमने एक टेबल बनाया है जिसमें हम पढ़ाए गए नाम और कोर्स को रिकॉर्ड करना चाहते हैं। हम इस तरह से एक शिक्षक और पाठ्यक्रम तालिका तैयार कर सकते हैं:
शिक्षक_आईडी | शिक्षक_नाम | पाठ्यक्रम |
---|---|---|
शिक्षक_001 | कारमेन | जीव विज्ञान |
शिक्षक_002 | वेरोनिका | गणित |
शिक्षक_003 | जॉर्ज | अंग्रेज़ी |
क्या होगा अगर कारमेन दो या दो से अधिक पाठ्यक्रम पढ़ाती है? इस डिज़ाइन के साथ हमारे पास दो विकल्प हैं। हम इसे कारमेन के मौजूदा रिकॉर्ड में इस तरह जोड़ सकते हैं:
शिक्षक_आईडी | शिक्षक_नाम | पाठ्यक्रम |
---|---|---|
शिक्षक_001 | कारमेन | जीव विज्ञान, गणित |
शिक्षक_002 | वेरोनिका | गणित |
शिक्षक_003 | जॉर्ज | अंग्रेज़ी |
हालांकि, ऊपर दिया गया डिज़ाइन लचीला है और बाद में जब आप डेटा डालते हैं, संपादित करते हैं या हटाते हैं तो समस्याएँ उत्पन्न हो सकती हैं। इससे डेटा खोजना मुश्किल हो जाता है।
यह डिज़ाइन डेटाबेस नॉर्मलाइज़ेशन के पहले सिद्धांत, फर्स्ट नॉर्मल फॉर्म (1NF) का भी उल्लंघन करता है, जिसमें कहा गया है कि प्रत्येक टेबल सेल में डेटा का एक एकल, असतत टुकड़ा होना चाहिए।
दूसरा सामान्य फॉर्म नियम
कारमेन के लिए दूसरा रिकॉर्ड जोड़ने के लिए एक और डिज़ाइन विकल्प हो सकता है:
शिक्षक_आईडी | शिक्षक_नाम | पाठ्यक्रम |
---|---|---|
शिक्षक_001 | कारमेन | जीव विज्ञान |
शिक्षक_001 | कारमेन | गणित |
शिक्षक_002 | वेरोनिका | गणित |
शिक्षक_003 | जॉर्ज | अंग्रेज़ी |
यह दृष्टिकोण 1NF का पालन करता है लेकिन अभी भी खराब डेटाबेस डिज़ाइन है क्योंकि यह अतिरेक का परिचय देता है और अनावश्यक रूप से एक बड़े डेटाबेस को ब्लोट कर सकता है। इससे भी महत्वपूर्ण बात यह है कि डेटा असंगत हो सकता है।
उदाहरण के लिए, अगर कारमेन का नाम बदल गया तो क्या होगा? डेटा के साथ काम करने वाला कोई व्यक्ति अपना नाम एक रिकॉर्ड में अपडेट कर सकता है और दूसरे रिकॉर्ड में इसे अपडेट करने में विफल हो सकता है।
यह डिज़ाइन दूसरे सामान्य फॉर्म (2NF) मानक का उल्लंघन करता है, जो 1NF का पालन करता है और कई रिकॉर्ड के अतिरेक से भी बचना चाहिए। 2NF नियम डेटा के सबसेट को कई तालिकाओं में अलग करके और उनके बीच संबंध बनाकर इसे प्राप्त करता है।
एक-से-अनेक संबंधों के साथ एक डेटाबेस कैसे डिज़ाइन करें
शिक्षक और पाठ्यक्रम तालिका में एक-से-अनेक संबंध लागू करने के लिए, तालिकाओं को दो भागों में तोड़ें और एक विदेशी कुंजी का उपयोग करके उन्हें लिंक करें।
यहां, हमने शिक्षक तालिका में पाठ्यक्रम कॉलम को हटा दिया है:
शिक्षक_आईडी | शिक्षक_नाम |
---|---|
शिक्षक_001 | कारमेन |
शिक्षक_002 | वेरोनिका |
शिक्षक_003 | जॉर्ज |
और यहाँ पाठ्यक्रम तालिका है। ध्यान दें कि इसकी विदेशी कुंजी, Teacher_ID, शिक्षक तालिका में एक पाठ्यक्रम को शिक्षक से जोड़ती है:
कोर्स_आईडी | पाठ्यक्रम_नाम | शिक्षक_आईडी |
---|---|---|
पाठ्यक्रम_001 | जीव विज्ञान | शिक्षक_001 |
पाठ्यक्रम_002 | गणित | शिक्षक_001 |
पाठ्यक्रम_003 | अंग्रेज़ी | शिक्षक_003 |
हमने विदेशी कुंजी का उपयोग करके शिक्षकों और पाठ्यक्रम तालिका के बीच संबंध विकसित किया है। यह व्यवस्था हमें बताती है कि कारमेन जीव विज्ञान और गणित दोनों पढ़ाते हैं और जॉर्ज अंग्रेजी पढ़ाते हैं।
हम देख सकते हैं कि कैसे यह डिज़ाइन किसी भी संभावित अतिरेक से बचा जाता है, व्यक्तिगत शिक्षकों को कई पाठ्यक्रम पढ़ाने की अनुमति देता है, और एक-से-अनेक संबंध लागू करता है।