2010-09-15 13 views
15

स्टैक ओवरफ़्लो पर एक उत्तर में, मैंने यह कोड देखा:MySQL विदेशी कुंजी क्या हैं?

CREATE TABLE Favorites (
    user_id INT NOT NULL, 
    movie_id INT NOT NULL, 
    PRIMARY KEY (user_id, movie_id), 
    FOREIGN KEY (user_id) REFERENCES Users(user_id), 
    FOREIGN KEY (movie_id) REFERENCES Movies(movie_id) 
); 

मैंने पहले कभी 'विदेशी कुंजी' रिलेशनशिप कीवर्ड का उपयोग नहीं किया है।

  • यह क्या है?
  • लोग इसका उपयोग क्यों करते हैं?
  • क्या यह अर्थशास्त्र से अलग कोई लाभ प्रदान करता है?
+0

संभावित डुप्लिकेट [वास्तव में एक विदेशी कुंजी क्या है?] (Http://stackoverflow.com/questions/655446/what-exactly-is-a-foreign-key) –

+0

http://stackoverflow.com/questions/1730837/कर सकते हैं-किसी समझाओ- mysql-foreign-keys –

उत्तर

14

एक विदेशी कुंजी एक और तालिका में प्राथमिक कुंजी या तालिका खुद के लिए एक संदर्भ है। यह क्या referential integrity कहा जाता है के लिए प्रयोग किया जाता है। मूल रूप से आपकी तालिका में Favorites में रिकॉर्ड होने के लिए प्रदान किया गया - आपको Users तालिका से वैध user_id और Movies तालिका से मान्य movie_id प्रदान करना होगा। विदेशी कुंजी लागू करने के साथ, मैं Users या Movies से रिकॉर्ड हटा नहीं सका। अगर मेरे पास विदेशी कुंजी नहीं थी, तो मैं उन रिकॉर्ड्स को हटा सकता था। फिर यदि मैंने पर SELECT ... JOIN किया तो यह टूट जाएगा।

Wikipedia देखें।

+0

इसका उपयोग क्यों किया जाता है? मेरे पास कई से अधिक रिश्तों के साथ कई तालिकाओं हैं, और मैंने इन संबंधों को स्पष्ट रूप से परिभाषित किए बिना 'ठीक है' काम किया है। –

+0

असल में यह आपके डेटा को साफ रखने में मदद करता है। –

+0

तो ... यह मूल रूप से यह देखने के लिए MySQL को मजबूर करता है कि आईडी मौजूद है, और एक त्रुटि फेंकता है, अगर रिकॉर्ड मौजूद नहीं है तो रिकॉर्ड डालने में असफल रहा है? –

12

एक विदेशी कुंजी दो तालिकाओं के बीच एक संबंध का वर्णन है। इसके कई लाभ हैं:

  • आप यह लागू कर सकते हैं कि यदि एक तालिका में कोई मान है तो यह अन्य तालिका में भी मौजूद होना चाहिए। इस बाधा को तोड़ने का कोई भी प्रयास एक त्रुटि देगा।
  • यह डेटाबेस प्रशासक या प्रोग्रामर और अधिक आसानी से सिर्फ तालिका परिभाषाओं को देखकर तालिकाओं के बीच संबंध को समझने के लिए अनुमति देता है।
  • यह उपकरण को स्कीमा का निरीक्षण करने और तालिकाओं के बीच संबंध दिखाने वाले आरेखों को आकर्षित करने की अनुमति देता है, या कक्षाएं बनाते हैं जहां किसी ऑब्जेक्ट के बच्चे माता-पिता से सदस्यों के माध्यम से पहुंच योग्य होते हैं।
  • एक विदेशी कुंजी जोड़ने InnoDB में भी स्वचालित रूप से इतना है कि शामिल होने के किसी भी दिशा में कुशलता से बनाया जा सकता है कि स्तंभ पर एक सूचकांक कहते हैं। (Source)

यदि आप MyISAM का उपयोग कर रहे हैं तो विदेशी कुंजी समर्थित नहीं हैं।

1

जब आप संबंधित रिकॉर्ड हटा दिए जाते हैं तो आप कैस्केड करने की क्षमता भी जोड़ सकते हैं। उदाहरण के लिए यदि मेरे पास संबंधित "पुस्तक" तालिका में कई पुस्तकों के साथ एक लाइब्रेरी टेबल है और मैं अपनी लाइब्रेरी तालिका से दी गई लाइब्रेरी को हटा देता हूं, तो 'आश्रित पुस्तक रिकॉर्ड भी हटा दिए जाएंगे।

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