2012-04-13 21 views
8

दो तालिकाओं के बीच कई संबंधों में से एक को दो या तीन तालिकाओं के साथ कार्यान्वित किया जाना चाहिए? उदाहरण के लिए हम होना चाहिए:डेटाबेस में कई रिश्तों के लिए - डिज़ाइन अवधारणा

author(id,otherAttributtes) 
books(id,authorid,otherAttributes) 

या

author(id,otherAttributtes) 
    books(id,otherAttributes) 
    authorConnectsBooks(authorid,booksid) 

मैं और अधिक पहले दृष्टिकोण की तरह, लेकिन मैं दूसरे और अधिक जटिल अनुप्रयोगों में समय की एक बहुत कुछ देखा है। क्या पहली विधि के लिए कोई नकारात्मक पक्ष है, या यह सिर्फ व्यक्तिगत है जिस पर पालन करना है?

+0

धन्यवाद !! (उदाहरण यादृच्छिक था, मैं सिर्फ कई रिश्ते में एक दिखाना चाहता था) – user666

उत्तर

22

पहला उदाहरण कई रिश्तों को दिखाता है, जबकि दूसरा कई रिश्तों को दिखाता है।

उदाहरण कहते हैं कि हम पहले उदाहरण

Author 
AuthorID 

Book 
BookID 
AuthorID 

आप कैसे प्रतिनिधित्व होता है कि दोनों जेन और जॉन पुस्तक "मनोरंजन के लिए Stackoverflow" लिखा उपयोग करने देता है? इस संबंध तालिका में आप नहीं कर सकते, आपने व्यक्त किया है कि एक लेखक कई किताबें लिख सकता है। तो या तो जेन ने लिखा या जॉन ने इसे लिखा। अगर उनमें से केवल एक किताबें लिखीं तो आप इस रिश्ते के प्रकार का उपयोग कर सकते हैं। हालांकि, अगर आप यह दिखाना चाहते हैं कि दोनों ने इस पुस्तक को लिखा है तो आपको कई रिश्तेदारों की आवश्यकता है।

अब जेन और जॉन के समान समानता का उपयोग करके आप अपने दूसरे उदाहरण का उपयोग करके इस पुस्तक में दोनों लेखकों का प्रतिनिधित्व कर सकते हैं - कई रिश्तों के लिए कई।


एक उदाहरण कई रिश्ते के लिए एक से एक के साथ शुरू करने और कई रिश्ते के लिए कई के साथ समाप्त होने के रूप में Stackoverflow का उपयोग करने देता:

Authors 
Joel 
Jeff 

Books 
Stackoverflow Joel 

गरीब जेफ, वह ऊपर के उदाहरण से stackoverflow का श्रेय नहीं है ... तो हम कि ठीक करने के लिए की जरूरत है:

Author 
Joel 
Jeff 

Books 
Stackoverflow 

AuthorBooks 
Stackoverflow Jeff 
Stackoverflow Joel 

अब हर कोई खुश है ...

+0

हमें उस रिकॉर्ड को हटाना होगा जहां जेफ एक मालिक है क्योंकि वह अब नहीं है :-( – JonH

1

यदि रिश्ते वास्तव में कई लोगों के लिए है, तो लिंकिंग तालिका (authorConnectsBooks आपके उदाहरण में) की आवश्यकता नहीं है। हालांकि, आपके उदाहरण में, आपके पास एक से अधिक रिश्ते नहीं हैं क्योंकि एक लेखक कई किताबें लिख सकता है और कई लेखकों द्वारा एक पुस्तक लिखी जा सकती है। आपके उदाहरण में, वास्तव में आपके पास कई से अधिक रिश्ते हैं। यदि आपके पास वास्तव में बहुत से रिश्ते हैं, तो आपको एक लिंकिंग टेबल (authorConnectsBooks अपने उदाहरण में) की आवश्यकता है।

5

एक कई लोगों के लिए दो तालिकाओं है।

दूसरा वाला कई लोगों के लिए है।

Authors 
1 Larry Niven 
2 Jerry Pournelle 

Books 
1 Integral Trees 
2 King David's Spaceship 
3 The Mote in God's eye 

AuthorsBooks 
1 1 
2 2 
1 3 
2 3 
4

एक से कई रिश्ते 2 टेबल के साथ लागू किए जाने चाहिए।

लेकिन आपके उदाहरण (लेखक और पुस्तकों के बीच) में जो रिश्ते आप प्रस्तावित करते हैं, वह एक से अधिक नहीं है, कई से अधिक है।

"एक लेखक कई पुस्तकें लिख सकता है, और एक पुस्तक एक या अधिक लेखकों द्वारा लिखी जा सकती है।"

और कई तालिकाओं को 3 टेबल के साथ लागू किया जाना चाहिए।

एक अच्छा दिन है।

0

जैसा कि सभी ने बताया है, पहला व्यक्ति कई रिश्तों में से एक है जिसमें आपको अतिरिक्त तालिका की आवश्यकता नहीं है। बस दो टेबल काम करना चाहिए। लेकिन दूसरे मामले में, इसके बाद से कई लोगों को कई वास्तविकताएं मिलती हैं, इसलिए आपको एक अतिरिक्त तालिका जोड़नी होगी जिसे जंक्शन या क्रॉस-रेफरेंस टेबल कहा जाता है क्योंकि अधिकांश डेटाबेस प्रबंधन सिस्टम केवल एक से कई रिश्तों का समर्थन करते हैं, यह आवश्यक है तीसरे जंक्शन तालिका के माध्यम से मैन्युअल रूप से ऐसे रिश्तों को लागू करने के लिए। जंक्शन तालिका की प्राथमिक कुंजी आमतौर पर कनेक्ट होने वाली तालिकाओं की प्राथमिक कुंजी का उपयोग करके बनाई जाती है। यहाँ एक विकि पृष्ठ है कि ठीक उसी उदाहरण है कि आप से पूछा बताते है: जवाब के लिए

LINK

संबंधित मुद्दे