2010-07-20 17 views
13

यदि मेरे पास दो तालिकाओं के बीच संबंध है (दोनों तालिकाओं की अपनी प्राथमिक कुंजी है) तो मेरे निर्णय को किस दिशा में रखना चाहिए कि किस तालिका को विदेशी कुंजी को स्टोर करना चाहिए? मैं समझता हूं कि रिश्ते की प्रकृति शायद मायने रखती है (एक-से-एक, एक से कई, कई से कई, यूनी-दिशात्मक, द्वि-दिशात्मक), और शायद पहुंच पैटर्न भी मायने रखती हैं। यद्यपि निर्णय लेने का व्यवस्थित तरीका क्या है?मुझे एक विदेशी कुंजी कहां स्टोर करनी चाहिए?

+2

"यह निर्णय लेने का व्यवस्थित तरीका क्या है?" "समझें कि रिश्ते की प्रकृति शायद मायने रखती है"। सही बात। रिश्ते की प्रकृति महत्वपूर्ण है। मुझे सवाल नहीं मिला। क्या आप जानना चाहते हैं कि दूसरे पर निर्भर कौन है? –

+0

[विदेशी कुंजी का MySQL दस्तावेज] (https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html#idm139680617903472) 2 माता-पिता के बीच संबंधों का एक सरल उदाहरण प्रदान करता है सारणी: 'ग्राहक',' उत्पाद' और एक बाल तालिका: 'product_order'। उस उदाहरण में 'product_order' बाल तालिका है जिसमें विदेशी कुंजी होनी चाहिए। –

उत्तर

18

रिश्ते में बच्चा कौन सा टेबल है?
उत्तर दें, और आप जानते हैं कि कौन सी तालिका को विदेशी कुंजी कॉलम की आवश्यकता है, माता-पिता की [आमतौर पर] प्राथमिक कुंजी का संदर्भ लें। यह एक से कई रिश्तों के लिए है ...

कई से अधिक लोगों को आपकी मुख्य कुंजी के रूप में दोनों टेबलों की चाबियों का उपयोग करके तीसरी तालिका जोड़ने की आवश्यकता होगी।

+3

... और यदि कोई बच्चा/माता-पिता संबंध नहीं है। यह शायद जॉइन-टेबल में कई से अधिक है। – Wrikken

+5

या यह एक-से-एक संबंध है और ओपी खुद से पूछना चाहिए कि यह पहली जगह में दो टेबलों में क्यों विभाजित है। – Allan

+1

@Wrikken, @Allan: आप दोनों उत्कृष्ट अंक। –

1

एक विदेशी कुंजी केवल एक तालिका में एक फ़ील्ड है जो किसी अन्य तालिका के एक प्रमुख क्षेत्र को संदर्भित करती है। इस तरह के विदेशी कुंजी क्षेत्र की पहचान करना बिल्कुल महत्वपूर्ण नहीं है। यही है, आपको स्पष्ट रूप से विदेशी कुंजी जोड़ने की आवश्यकता नहीं है ... इसके लिए टेबल पर संदर्भ एक विदेशी कुंजी होने के लिए बाध्यता है। जब आप दोनों तालिकाओं को एक साथ जोड़ते हैं, तो मूल तालिका की प्राथमिक कुंजी बाल तालिका की विदेशी कुंजी के बराबर सेट की जाएगी। जो भी प्राथमिक कुंजी विदेशी कुंजी है।

एक से कई रिश्ते में, एफके "कई" पक्ष पर जाता है। यह "एक" पक्ष पर नहीं जा सकता है क्योंकि वह जगह है जहां पीके जाता है और प्राथमिक कुंजी की परिभाषा में डुप्लिकेट को अस्वीकार करना शामिल है।

यदि आपके पास कई से अधिक रिश्ते हैं, तो आपको टेबल को फिर से काम करने की आवश्यकता होगी ताकि आप दो से कई रिश्ते और एक मध्यवर्ती संकल्प तालिका के साथ समाप्त हो सकें।

7

"हालांकि निर्णय लेने का व्यवस्थित तरीका क्या है?"

दो विकल्प होते हैं: एफके के "कई पक्ष" के रूप में "वन" पक्ष, या "कई" पक्ष में एफके का "वन" पक्ष होता है।

चलो वास्तव में विकल्पों को देखें।

  • "कई" पक्ष की सभी पंक्तियां "वन" पक्ष पर आसानी से एक पंक्ति का संदर्भ दे सकती हैं।

  • "वन" पक्ष पर एक पंक्ति कभी भी "कई" पक्षों की सभी पंक्तियों का संदर्भ नहीं दे सकती है।

केवल एक तकनीक काम करती है: "कई" पक्ष में "वन" पक्ष में एफके है।

केवल एक वास्तविक कार्यान्वयन विकल्प है। कोई "निर्णय" नहीं है।

+3

संक्षेप में: यह कार्डिनालिटी का मामला है। यदि आपके पास एक से अधिक संबंध हैं, तो कुंजी को 'कई' पक्ष पर रहना चाहिए। यदि यह 'एक' तरफ, एक-से-शायद एक है। यदि यह कई से अधिक है, तो आपको एक मध्यवर्ती तालिका की आवश्यकता है। यदि यह एक-एक है, तो आप चुनने के लिए स्वतंत्र हैं। – reinierpost

0

primary key की तरह, foreign key एक प्रकार में constraint एक तालिका में एक या अधिक कॉलम पर रखा गया है।

foreign key किसी अन्य तालिका में प्रमुख कॉलम और संबंधित कॉलम के बीच एक लिंक स्थापित करता है। (आप विदेशी कुंजी कॉलम को उसी तालिका में कॉलम से भी लिंक कर सकते हैं।)

तालिका जिसमें विदेशी कुंजी है, को बाल तालिका माना जाता है, और तालिका जो विदेशी कुंजी संदर्भ मूल तालिका है।

कुंजी अंक

  1. foreign key एक प्राथमिक कुंजी या अद्वितीय बाधा संदर्भ होना चाहिए, हालांकि उस संदर्भ में एक ही मेज पर या एक अलग मेज पर हो सकता है
  2. एक foreign key भी एक ही होना चाहिए संदर्भित बाधा में कॉलम की संख्या के रूप में स्तंभों की संख्या, और डेटा प्रकारों को संबंधित कॉलम के बीच मेल खाना चाहिए।
  3. Primary key के विपरीत, Foreign key कॉलम में NULL मान हो सकते हैं।
संबंधित मुद्दे