एक-से-कई और कई-से-एक रिश्ते के बीच वास्तविक अंतर क्या है? यह केवल उलटा है, किस तरह का?
मुझे इस विषय के अलावा इस विषय के बारे में कोई 'अच्छा और आसान समझने वाला' ट्यूटोरियल नहीं मिल सकता है: शुरुआती के लिए SQL: भाग 3 - डेटाबेस संबंध
एक-से-कई और कई-से-एक रिश्ते के बीच वास्तविक अंतर क्या है? यह केवल उलटा है, किस तरह का?
मुझे इस विषय के अलावा इस विषय के बारे में कोई 'अच्छा और आसान समझने वाला' ट्यूटोरियल नहीं मिल सकता है: शुरुआती के लिए SQL: भाग 3 - डेटाबेस संबंध
जवाबों:
हाँ, यह इसके विपरीत है। यह निर्भर करता है कि इकाई किस संबंध में मौजूद है।
उदाहरण के लिए, यदि एक विभाग कई कर्मचारियों के लिए नियोजित कर सकता है, तो कर्मचारी से विभाग कई संबंधों के लिए एक है (1 विभाग कई कर्मचारियों को नियुक्त करता है), जबकि कर्मचारी से विभाग का संबंध एक से कई है (कई कर्मचारी एक विभाग में काम करते हैं)।
संबंधों के प्रकार के बारे में अधिक जानकारी :
इस पृष्ठ से डेटाबेस शब्दावली के बारे में
तालिकाओं के बीच अधिकांश संबंध एक-से-कई हैं।
उदाहरण:
- एक क्षेत्र कई पाठकों का निवास स्थान हो सकता है।
- एक पाठक की कई सदस्यताएँ हो सकती हैं।
- एक समाचार पत्र में कई सदस्यता हो सकती हैं।
ए टू वन रिलेशन एक-से-कई के समान है, लेकिन एक अलग दृष्टिकोण से।
- एक क्षेत्र में कई पाठक रहते हैं।
- कई सदस्यताएँ एक और एक ही पाठक की हो सकती हैं।
- कई सदस्यताएँ एक और एक ही अखबार के लिए हैं।
एक-से-कई और कई-से-एक रिश्ते के बीच वास्तविक अंतर क्या है?
इन शर्तों के बीच वैचारिक मतभेद हैं जो आपको डेटा की कल्पना करने में मदद करनी चाहिए और उत्पन्न स्कीमा में संभावित अंतर भी हैं जिन्हें पूरी तरह से समझा जाना चाहिए। ज्यादातर अंतर हालांकि परिप्रेक्ष्य में से एक है।
एक में एक-से-कई संबंध, स्थानीय तालिका एक पंक्ति है कि एक और तालिका में कई पंक्तियों के साथ जुड़ा हो सकता है। शुरुआती लोगों के लिए एसक्यूएल से उदाहरण में , एक Customerकई Orderएस से जुड़ा हो सकता है ।
विपरीत कई-से-एक संबंध में, स्थानीय तालिका में कई पंक्तियाँ हो सकती हैं जो किसी अन्य तालिका में एक पंक्ति से संबद्ध हैं। हमारे उदाहरण में, कई Orderएस एक से जुड़े हो सकते हैं Customer। यह वैचारिक अंतर मानसिक प्रतिनिधित्व के लिए महत्वपूर्ण है।
इसके अलावा, संबंध का समर्थन करने वाले स्कीमा को अलग-अलग Customerऔर Orderतालिकाओं में दर्शाया जा सकता है । उदाहरण के लिए, यदि ग्राहक के पास कॉलम idऔर name:
id,name
1,Bill Smith
2,Jim Kenshaw
फिर एक Orderके साथ जुड़े रहने के लिए Customer, कई SQL कार्यान्वयन Orderतालिका में एक कॉलम जोड़ते हैं जो idसंबद्ध Customer(इस स्कीमा में) को संग्रहीत करता है customer_id:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
उपरोक्त डेटा पंक्तियों में, यदि हम customer_idid कॉलम को देखते हैं, तो हम देखते हैं कि Bill Smith(customer-id # 1) में उनसे जुड़े 2 आदेश हैं: एक $ 12.34 के लिए और एक $ 7.58 के लिए। Jim Kenshaw(customer-id # 2) में $ 158.01 के लिए केवल 1 ऑर्डर है।
यह जानना महत्वपूर्ण है कि आम तौर पर एक-से-कई संबंध वास्तव में किसी भी स्तंभ को उस तालिका में नहीं जोड़ते हैं जो "एक" है। Customerबिना किसी अतिरिक्त कॉलम जिसके साथ संबंध का वर्णन है Order। वास्तव में Customerहो सकता है यह भी साथ एक एक-से-कई संबंध हैं ShippingAddressऔर SalesCallटेबल और अभी तक कोई अतिरिक्त कॉलम को जोड़ा गया है Customerतालिका।
हालाँकि, कई-से-एक संबंध का वर्णन करने के लिए, अक्सर id"कई" तालिका में एक स्तंभ जोड़ा जाता है जो "एक" तालिका के लिए एक विदेशी-कुंजी है - इस मामले में एक customer_idस्तंभ को जोड़ा जाता है Order। $ 12.34 के लिए # 10 से संबंधित ऑर्डर करने के लिए Bill Smith, हम customer_idकॉलम को Bill Smith's id 1' में असाइन करते हैं ।
हालाँकि, यह भी संभव है कि एक और तालिका हो , जो Customerऔर Orderसंबंधों के बारे में बताए , ताकि तालिका में कोई अतिरिक्त फ़ील्ड जोड़ने की आवश्यकता न हो Order। customer_idफ़ील्ड को Orderतालिका में जोड़ने के बजाय , ऐसी तालिका हो सकती Customer_Orderहै जिसमें दोनों Customerऔर के लिए कुंजियाँ हों Order।
customer_id,order_id
1,10
1,11
2,12
इस मामले में, एक-से-एक और कई-से-एक सभी वैचारिक हैं क्योंकि उनके बीच कोई स्कीमा परिवर्तन नहीं हैं। कौन सा तंत्र आपके स्कीमा और एसक्यूएल कार्यान्वयन पर निर्भर करता है।
उम्मीद है की यह मदद करेगा।
javax.persistence.OneToManyअलग है ManyToOne। क्या आप कह रहे हैं कि वे पर्यायवाची हैं या सिर्फ यह कि यह कार्यान्वयन पर निर्भर करता है? क्या मेरा जवाब गलत है?
इसमें कोई फर्क नही है। यह सिर्फ भाषा और पसंद की बात है कि आप किस तरह से रिश्ते को आगे बढ़ाते हैं।
आपके पहले प्रश्न का उत्तर है: दोनों समान हैं,
आपके दूसरे प्रश्न का उत्तर है: एक-से-एक -> एक MAN (MAN तालिका) में एक से अधिक पत्नी (WOMEN तालिका) कई-से-एक हो सकती हैं -> एक से अधिक महिलाओं ने एक MAN से विवाह किया है।
अब यदि आप इस संबंध को दो तालिकाओं MAN और WOMEN के साथ जोड़ना चाहते हैं, तो एक MAN तालिका पंक्ति में WOMEN तालिका में पंक्तियों के साथ कई संबंध हो सकते हैं। आशा है कि यह स्पष्ट है।
SQL में, केवल एक प्रकार का संबंध है, इसे एक संदर्भ कहा जाता है। (आपका सामने वाला अंत सहायक या भ्रमित करने वाली चीजें कर सकता है [जैसे कि कुछ उत्तर में], लेकिन यह एक अलग बात है)।
SQL के संदर्भ में, बार संदर्भ Foo
नहीं अन्य तरीके के आसपास
CREATE TABLE Foo (
Foo CHAR(10) NOT NULL, -- primary key
Name CHAR(30) NOT NULL
CONSTRAINT PK -- constraint name
PRIMARY KEY (Foo) -- pk
)
CREATE TABLE Bar (
Bar CHAR(10) NOT NULL, -- primary key
Foo CHAR(10) NOT NULL, -- foreign key to Foo
Name CHAR(30) NOT NULL
CONSTRAINT PK -- constraint name
PRIMARY KEY (Bar), -- pk
CONSTRAINT Foo_HasMany_Bars -- constraint name
FOREIGN KEY (Foo) -- fk in (this) referencing table
REFERENCES Foo(Foo) -- pk in referenced table
)चूंकि Foo.Fooएक प्राथमिक कुंजी है, यह अद्वितीय है, किसी भी दिए गए मूल्य के लिए केवल एक पंक्ति हैFoo
Bar.Fooएक संदर्भ है, एक विदेशी कुंजी है, और उस पर कोई अद्वितीय सूचकांक नहीं है, इसलिए किसी भी मूल्य के लिए कई पंक्तियां हो सकती हैंFoo Foo::Barएक-से है Bar::Fooकई-से-एक है
Barपंक्ति के लिए, केवल एक Fooपंक्ति है जिसे वह संदर्भित करता हैएक से कई और कई से एक रिश्ते में असली अंतर क्या है?
केवल एक ही संबंध है, इसलिए कोई अंतर नहीं है। धारणा (एक "अंत" या दूसरे "अंत" से) या इसे पीछे की ओर पढ़ने से संबंध नहीं बदलता है।
कार्डिनलिटी को पहले डेटा मॉडल में घोषित किया जाता है, जिसका अर्थ है तार्किक और भौतिक (इरादा), और फिर कार्यान्वयन में (इरादे का एहसास)।
SQL में एक से शून्य से कई कि (ऊपर) सभी आवश्यक है।
वन टू वन-टू रेफरेंसिंग टेबल में आपको लागू करने के लिए
आपको एक लेन-देन की आवश्यकता होती है ।
एक शून्य से एक
आप में की जरूरत है Bar:
CONSTRAINT AK -- constraint name
UNIQUE (Foo) -- unique column, which makes it an Alternate Key
एक से एक
आपको रेफ़रिंग टेबल में एक लागू करने के लिए एक लेनदेन की आवश्यकता है ।
बहुत से लोग
भौतिक स्तर पर ऐसी कोई बात नहीं करते हैं (याद रखें, SQL में केवल एक प्रकार का संबंध है)।
मॉडलिंग अभ्यास के दौरान शुरुआती तार्किक स्तरों पर, इस तरह के संबंध को खींचना सुविधाजनक है। इससे पहले कि मॉडल कार्यान्वयन के करीब हो जाए, यह केवल उन चीजों का उपयोग करने के लिए बेहतर हो गया था जो मौजूद हो सकते हैं। इस तरह के संबंध को एक सहयोगी तालिका लागू करके हल किया जाता है।
एक-से-कई और कई-से-एक गुणन में समान हैं लेकिन पहलू (यानी दिशात्मकता) नहीं।
की मैपिंग संघों इकाई वर्गों और के बीच रिश्ते तालिकाओं के बीच। रिश्तों की दो श्रेणियां हैं:
कोई व्यावहारिक अंतर नहीं है। बस उस रिश्ते का उपयोग करें जो कि आपकी समस्या को देखते हुए सबसे अधिक समझ में आता है जैसा कि देवेंद्र ने सचित्र किया है।
--- एक से कई --- उन 3 बच्चों में एक ही माता-पिता हो सकते हैं।
दोनों समान हैं। यह जरूरत के लिए इस्तेमाल किया जा सकता है। यदि आप एक विशेष माता-पिता के लिए बच्चों को ढूंढना चाहते हैं, तो आप एक-से-कई के साथ जा सकते हैं। वरना, जुड़वा बच्चों के लिए माता-पिता ढूंढना चाहते हैं, तो आप बहुत से लोगों के साथ जा सकते हैं। इसी तरह ....,
एक से कई माता - पिता वर्ग में बच्चों की संख्या शामिल है, इसलिए यह एक संग्रह मानचित्रण है।
कई-टू-वन में बच्चों की संख्या होती है जिसमें एक माता-पिता होते हैं इसलिए यह एक वस्तु मानचित्रण है