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