MySQL में 'ibfk' क्या है?


25

अगर मैं phpmyadmin में तालिका 'फ़ोटो' के लिए एक विदेशी कुंजी बाधा बनाता हूं, तो मैं बाद में देखता हूं कि बाधा का नाम 'photos_ibfk_1' है, और अगले बाधा को 'photos_ibfk_2' कहा जाता है, आदि। इससे मैं इकट्ठा हुआ है कि [tablename] _ibfk_constraintIndex है। MySQL में DB बाधाओं के लिए सम्मेलन। क्या ये सही है? IBFK किस लिए खड़ा है?


5
ibfk = आईबी ( मैं nnoD बी ) FK ( oreign कश्मीर EY) ... विदेशी कुंजी InnoDB
WebGuy

जवाबों:


24

निर्दोष विदेशी कुंजी। यह सिर्फ शॉर्ट हैंड नेमिंग कन्वेंशन है। आप इसे asdfqwerty कह सकते हैं और नाम अभी भी काम करेगा।


7

यद्यपि विदेशी कुंजी नाम कुछ भी हो सकते हैं, यह वास्तव में तालिका नाम को पहले रखने के सम्मेलन का पालन करने के लिए एक अच्छा अभ्यास है।

इसका सबसे महत्वपूर्ण कारण यह है कि विदेशी कुंजी नाम एक डेटाबेस के भीतर अद्वितीय होना चाहिए (इसके विपरीत सूचकांक नामों के लिए, जो प्रत्येक तालिका के भीतर केवल अद्वितीय होना चाहिए)। इसलिए, इस सम्मेलन का अनुसरण करते हुए, विदेशी कुंजी नामों को प्रत्येक तालिका के भीतर अद्वितीय होना चाहिए।

व्यक्तिगत रूप से, मैं सम्मेलन का उपयोग करता हूं [table_name]_fk_[field_name]

अपनी विदेशी चाबियों को नाम देने के लिए, आपको स्पष्ट रूप से केवल विदेशी कुंजी के बजाय, मेज पर बाधा को स्पष्ट करना होगा।

सरल विधि (स्वचालित नामकरण, परिणाम होगा [table_name]_ibfk_[index]):

ALTER TABLE `[table_name]`
  ADD FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

स्पष्ट विधि (परिणाम में [table_name]_fk_[field_name]):

ALTER TABLE `[table_name]`
  ADD CONSTRAINT `[table_name]_fk_[field_name]`
    FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

1
संपूर्ण सर्वर पर बाधा नाम वैश्विक रूप से अद्वितीय नहीं हैं - केवल डेटाबेस के लिए अद्वितीय हैं। आप एक ही सर्वर पर दो अलग-अलग डेटाबेस पर एक ही बाधा नाम का फिर से उपयोग कर सकते हैं।
ब्रैंडन

@ब्रांडन: अच्छा कैच! मैं संपादित करूँगा। 👍
मार्को रॉय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.