डेटा मॉडलिंग में एक-से-एक संबंध क्या है? आप इस संबंध को डेटाबेस में कैसे कार्यान्वित करते हैं? इस लेख के उदाहरण इन सवालों के जवाब देंगे।
डेटा मॉडलिंग में निकायों (तालिकाओं) के बीच तीन प्रकार के संबंध होते हैं:
- एक-से-अनेक संबंध (1:M के रूप में भी निर्दिष्ट)।
- कई-से-अनेक संबंध (एम:एन).
- एक-से-एक संबंध (1:1)।
सबसे सामान्य प्रकार का संबंध एक-से-अनेक संबंध है, जहां एक इकाई में एक रिकॉर्ड को दूसरी इकाई में कई रिकॉर्ड द्वारा संदर्भित किया जा सकता है। एक अन्य सामान्य प्रकार कई-से-अनेक संबंध है। इस प्रकार का संबंध केवल तार्किक डेटा मॉडल में उपयोग किया जाता है। एक भौतिक डेटाबेस में, इसे एक-से-कई संबंधों और एक जंक्शन तालिका का उपयोग करके कार्यान्वित किया जाना है।
इस लेख में, हम तीसरे प्रकार के संबंधों पर चर्चा करेंगे:एक-से-एक संबंध . डेटा मॉडल में यह सबसे कम सामान्य प्रकार का संबंध है। हम एक-से-एक रिश्तों के उदाहरण देंगे, एक ईआर आरेख में एक-से-एक संबंधों के लिए संकेतन दिखाएंगे, और व्यवहार में एक-से-एक संबंधों पर चर्चा करेंगे।
एक-से-एक संबंधों के उदाहरण
सबसे पहले, एक-से-एक संबंध क्या है? यह एक ऐसा संबंध है जहां एक इकाई (तालिका) में एक रिकॉर्ड दूसरी इकाई (तालिका) में ठीक एक रिकॉर्ड से जुड़ा होता है।
आइए एक-से-एक रिश्तों के कुछ वास्तविक जीवन के उदाहरण देखें:
- देश - राजधानी शहर :प्रत्येक देश की ठीक एक राजधानी होती है। प्रत्येक राजधानी शहर बिल्कुल एक देश की राजधानी है।
- व्यक्ति - उनकी उंगलियों के निशान . प्रत्येक व्यक्ति के पास उंगलियों के निशान का एक अनूठा सेट होता है। उंगलियों के निशान का प्रत्येक सेट ठीक एक व्यक्ति की पहचान करता है।
- ईमेल - उपयोगकर्ता खाता . कई वेबसाइटों के लिए, एक ईमेल पता ठीक एक उपयोगकर्ता खाते से जुड़ा होता है और प्रत्येक उपयोगकर्ता खाते की पहचान उसके ईमेल पते से होती है।
- पति/पत्नी - पति/पत्नी :एक एकल विवाह में, प्रत्येक व्यक्ति का बिल्कुल एक जीवनसाथी होता है।
- उपयोगकर्ता प्रोफ़ाइल - उपयोगकर्ता सेटिंग . एक उपयोगकर्ता के पास उपयोगकर्ता सेटिंग्स का एक सेट होता है। उपयोगकर्ता सेटिंग का एक सेट ठीक एक उपयोगकर्ता के साथ संबद्ध है।
स्पष्टता के लिए, आइए इन उदाहरणों की तुलना ऐसे संबंधों से करें जो एक-से-एक नहीं हैं:
- देश - शहर: प्रत्येक शहर ठीक एक देश में है, लेकिन अधिकांश देशों में कई शहर हैं।
- माता-पिता - बच्चे :प्रत्येक बच्चे के दो माता-पिता होते हैं, लेकिन प्रत्येक माता-पिता के कई बच्चे हो सकते हैं।
- कर्मचारी - प्रबंधक :प्रत्येक कर्मचारी के पास ठीक एक तत्काल पर्यवेक्षक या प्रबंधक होता है, लेकिन प्रत्येक प्रबंधक आमतौर पर कई कर्मचारियों का पर्यवेक्षण करता है।
ER आरेख में एक-से-एक संबंध को प्रदर्शित करना
ईआर आरेख में एक-से-एक संबंध को सभी रिश्तों की तरह, दो संस्थाओं को जोड़ने वाली रेखा के साथ दर्शाया जाता है। "एक" कार्डिनैलिटी को एक सीधी रेखा के साथ दर्शाया गया है। ("कई" कार्डिनैलिटी को कौवा के पैर के प्रतीक के साथ दर्शाया गया है।)
देश और राजधानी के बीच आमने-सामने के रिश्ते को इस तरह दर्शाया जा सकता है:
लंबवत सीधी रेखाओं का अर्थ है “अनिवार्य " यह आरेख दिखाता है कि एक पूंजी के लिए एक देश होना अनिवार्य है और एक देश के लिए एक राजधानी होना अनिवार्य है।
एक और संभावना यह है कि रिश्ते के एक या दोनों पक्ष वैकल्पिक . हों . एक वैकल्पिक पक्ष को एक खुले सर्कल के साथ दर्शाया गया है। यह आरेख कहता है कि एक व्यक्ति और उसकी उंगलियों के निशान के बीच एक-से-एक संबंध है। एक व्यक्ति अनिवार्य है (उंगलियों के निशान एक व्यक्ति को सौंपे जाने चाहिए), लेकिन उंगलियों के निशान वैकल्पिक हैं (एक व्यक्ति के पास डेटाबेस में कोई उंगलियों के निशान नहीं हो सकते हैं)।
भौतिक डेटाबेस में आमने-सामने संबंध
भौतिक डेटाबेस में एक-से-एक संबंध लागू करने के कुछ तरीके हैं।
प्राथमिक कुंजी विदेशी कुंजी के रूप में
डेटाबेस में एक-से-एक संबंध को लागू करने का एक तरीका दोनों तालिकाओं में एक ही प्राथमिक कुंजी का उपयोग करना है। प्राथमिक कुंजी में समान मान वाली पंक्तियाँ संबंधित हैं। इस उदाहरण में, फ़्रांस एक country है id . के साथ 1 और इसकी राजधानी शहर तालिका में है capital id . के अंतर्गत 1.
country
| id | <वें शैली="पृष्ठभूमि-रंग:#cecece">नाम|
|---|---|
| 1 | फ़्रांस |
| 2 | जर्मनी |
| 3 | स्पेन |
capital
तकनीकी रूप से, प्राथमिक कुंजी में से एक को विदेशी कुंजी के रूप में चिह्नित किया जाना चाहिए, जैसे इस डेटा मॉडल में:
तालिका में प्राथमिक कुंजी capital एक विदेशी कुंजी भी है जो देश तालिका में आईडी कॉलम का संदर्भ देती है . चूंकि capital.id एक प्राथमिक कुंजी है, कॉलम में प्रत्येक मान अद्वितीय है, इसलिए पूंजी अधिकतम एक देश को संदर्भित कर सकती है। यह भी होना चाहिए किसी देश का संदर्भ लें - यह एक प्राथमिक कुंजी है, इसलिए इसे खाली नहीं छोड़ा जा सकता है।
अद्वितीय बाधा के साथ अतिरिक्त विदेशी कुंजी
डेटाबेस में एक-से-एक संबंध लागू करने का दूसरा तरीका एक नया कॉलम जोड़ना और इसे एक विदेशी कुंजी बनाना है।
इस उदाहरण में, हम country_id . कॉलम जोड़ते हैं तालिका में capital . id . के साथ राजधानी 1, मैड्रिड, देश 3, स्पेन से जुड़ा है।
country
| id | <वें शैली="पृष्ठभूमि-रंग:#cecece">नाम|
|---|---|
| 1 | फ़्रांस |
| 2 | जर्मनी |
| 3 | स्पेन |
capital
| id | <वें शैली="पृष्ठभूमि-रंग:#cecece">नाम <वें शैली ="पृष्ठभूमि-रंग:#cecece">देश_आईडी||
|---|---|---|
| 1 | मैड्रिड | 3 |
| 2 | बर्लिन | 2 |
| 3 | पेरिस | 1 |
तकनीकी रूप से, कॉलम country_id id . को संदर्भित करने वाली विदेशी कुंजी होनी चाहिए तालिका में कॉलम country . चूंकि आप चाहते हैं कि प्रत्येक पूंजी ठीक एक देश से जुड़ी हो, इसलिए आपको विदेशी कुंजी कॉलम country_id बनाना चाहिए अनोखा।
एक-से-एक संबंध व्यवहार में हैं
कुछ आमने-सामने के रिश्ते अंतिम
एक-से-एक संबंध कम से कम लगातार संबंध प्रकार हैं। इसका एक कारण यह भी है कि वास्तविक जीवन में बहुत कम आमने-सामने के रिश्ते होते हैं। साथ ही, अधिकांश एक-से-एक संबंध केवल कुछ समय के लिए एक-से-एक होते हैं। यदि आपके मॉडल में समय घटक शामिल है और परिवर्तन इतिहास को कैप्चर करता है, जैसा कि अक्सर होता है, तो आपके पास एक-से-एक संबंध बहुत कम होंगे।
एक एकांगी संबंध टूट सकता है या भागीदारों में से एक की मृत्यु हो सकती है। यदि आप समय के साथ एकांगी संबंधों (जैसे विवाह या नागरिक संघ) की वास्तविकता को मॉडल करते हैं, तो आपको इस तथ्य को मॉडल करने की आवश्यकता होगी कि वे केवल एक निश्चित अवधि के लिए ही चलते हैं।
आपको लगता होगा कि एक व्यक्ति और उनकी उंगलियों के निशान कभी नहीं बदलते। लेकिन क्या होगा अगर व्यक्ति एक उंगली खो देता है या उंगली बुरी तरह जल जाती है? उनके फिंगरप्रिंट बदल सकते हैं। यह बहुत बार-बार होने वाला परिदृश्य नहीं है; फिर भी, कुछ मॉडलों में, आपको इसे ध्यान में रखना पड़ सकता है।
यहां तक कि कुछ भी ऐसा प्रतीत होता है जैसे देश और उनकी राजधानियाँ समय के साथ बदलती हैं। उदाहरण के लिए, द्वितीय विश्व युद्ध के बाद, जब बर्लिन पूर्वी जर्मनी का हिस्सा था, बॉन पश्चिम जर्मनी (बुंडेस्रेपब्लिक ड्यूशलैंड) की राजधानी हुआ करता था। जर्मन पुनर्मिलन के बाद यह बदल गया; जर्मनी की राजधानी (बुंडेस्रेपब्लिक Deutschland) अब बर्लिन है। आपको इसे ध्यान में रखना चाहिए या नहीं यह आपकी व्यावसायिक वास्तविकता और उस एप्लिकेशन पर निर्भर करता है जिस पर आप काम कर रहे हैं।
एक व्यवहार्य 1:1 परिदृश्य:तालिका के वैकल्पिक भाग
मैं वास्तविक एक-से-एक संबंध के लिए एक व्यवहार्य परिदृश्य के बारे में सोच सकता हूं:तालिका के वैकल्पिक भाग। कल्पना कीजिए कि आपके पास तालिका है उपयोगकर्ता उपयोगकर्ता डेटा के साथ। तालिका में सामान्य उपयोगकर्ता जानकारी होती है, जैसे उपयोगकर्ता के नाम, ईमेल पते और साइनअप तिथियां। इसमें उपयोगकर्ता सेटिंग्स भी शामिल हैं, जैसे कि उस ऐप के लिए रंग थीम या ऑटो-लॉगिन। हालांकि, अधिकांश उपयोगकर्ताओं के पास कोई उपयोगकर्ता सेटिंग नहीं होती है; वे डिफ़ॉल्ट सेटिंग्स का उपयोग करते हैं।
user
| id | <वें शैली="पृष्ठभूमि-रंग:#cecece">नामईमेल | <वें शैली="पृष्ठभूमि-रंग:#cecece">साइनअप_ तिथि <थ शैली="पृष्ठभूमि-रंग:#cecece">थीमऑटोलॉगिन | |||
|---|---|---|---|---|---|
| 1 | नथानेल टैलबोट | nat@example.com | 2020-12-12 | अंधेरा | सच |
| 2 | तलिता येट्स | yates@example.com | 2020-12-14 | ||
| 3 | मार्कस वियर | weir@example.com | 2020-12-15 | प्रकाश | झूठा |
| 4 | नथाली हेज़ | hays@example.com | 2020-12-18 | ||
| 5 | मौरिस चर्च | mch@example.com | 2020-12-20 | ||
| 6 | अरवा वाल्डेज़ | arval@example.com | 2020-12-21 |
इस तालिका में बहुत सारे खाली क्षेत्र हैं। आप user तालिका को दो तालिकाओं में विभाजित करें:user और user_settings , जिसमें उन लोगों के लिए उपयोगकर्ता सेटिंग्स के बारे में जानकारी है जिन्होंने उन्हें चुनना चुना है।
user
| id | <वें शैली="पृष्ठभूमि-रंग:#cecece">नामईमेल | <वें शैली="पृष्ठभूमि-रंग:#cecece">साइनअप_ तिथि <थ शैली="पृष्ठभूमि-रंग:#cecece">थीमऑटोलॉगिन | |||
|---|---|---|---|---|---|
| 1 | नथानेल टैलबोट | nat@example.com | 2020-12-12 | अंधेरा | सच |
| 2 | तलिता येट्स | yates@example.com | 2020-12-14 | ||
| 3 | मार्कस वियर | weir@example.com | 2020-12-15 | प्रकाश | झूठा |
| 4 | नथाली हेज़ | hays@example.com | 2020-12-18 | ||
| 5 | मौरिस चर्च | mch@example.com | 2020-12-20 | ||
| 6 | अरवा वाल्डेज़ | arval@example.com | 2020-12-21 |
user_settings
| user_id | <थ शैली="पृष्ठभूमि-रंग:#cecece">थीमऑटोलॉगिन | |
|---|---|---|
| 1 | अंधेरा | सच |
| 3 | प्रकाश | झूठा |
डेटा को दो तालिकाओं में विभाजित करने से तालिका क्वेरी करना अधिक जटिल हो जाता है:आपको दोनों तालिकाओं के डेटा को जोड़ना होगा। दूसरी ओर, मुख्य उपयोगकर्ता तालिका को प्रबंधित करना आसान है।
डेटाबेस संबंधों के बारे में अधिक जानें
एक-से-एक संबंध एक ऐसा संबंध है जहां एक तालिका में एक रिकॉर्ड दूसरी तालिका में ठीक एक रिकॉर्ड से जुड़ा होता है। इस तरह का रिश्ता असल जिंदगी में कम ही देखने को मिलता है। यदि आप अपने डेटा मॉडल में समय शामिल करते हैं, तो कई एक-से-एक संबंध एक-से-अनेक या अनेक-से-अनेक संबंध बन जाते हैं। डेटाबेस में एक-से-एक संबंध का उपयोग करने के लिए सबसे आम परिदृश्य एक तालिका को दो में विभाजित करना है:एक अनिवार्य कॉलम के साथ, दूसरा वैकल्पिक कॉलम के साथ।
अगर आपको यह लेख पसंद आया है, तो हमारे ब्लॉग पर एक से कई और कई से कई संबंधों पर अन्य लेख देखें।
यदि आप डेटाबेस क्लास लेने वाले छात्र हैं, तो हमारे ऑनलाइन ईआर डायग्राम ड्राइंग टूल, वर्टाबेलो में एक निःशुल्क शैक्षणिक खाता बनाना सुनिश्चित करें। वर्टाबेलो आपको सीधे अपने ब्राउज़र में तार्किक और भौतिक ईआर आरेख बनाने की अनुमति देता है। यह PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift और अन्य रिलेशनल डेटाबेस को सपोर्ट करता है। इसे आज़माएं और देखें कि आरंभ करना कितना आसान है!