2013-02-16 5 views
6

कल्पना कीजिए कि मेरे पास profiles, profiles_skills और skills नामक तीन टेबल हैं। यह एक एचएबीटीएम रिश्ते है, जहां एक प्रोफाइल में कई कौशल हो सकते हैं और एक कौशल कई प्रोफाइल से संबंधित हो सकता है।एक विदेशी कुंजी बाधा जोड़ने के दौरान, कौन सी दिशा सर्वोत्तम अभ्यास है?

मुझे इन तालिकाओं के बीच एक विदेशी कुंजी बाधा स्थापित करने की आवश्यकता है। मेरा सवाल यह है कि विदेशी कुंजी किस दिशा में होनी चाहिए?

ALTER TABLE profiles_skills ADD FOREIGN KEY (skill_id) REFERENCES skills(id); 
ALTER TABLE profiles_skills ADD FOREIGN KEY (profile_id) REFERENCES profiles(id); 

या मैं ऐसा क्यों करें: उदाहरण के लिए, मैं यह कर कर

ALTER TABLE profiles ADD FOREIGN KEY (id) REFERENCES profiles_skills(profile_id); 
ALTER TABLE skills ADD FOREIGN KEY (id) REFERENCES profiles_skills(skill_id); 

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

+2

विदेशी कुंजी "बच्चे" तालिका पर होनी चाहिए, जो आपके मामले में 'profiles_skills' है। और हाँ, यह मायने रखता है। अलग प्रोफाइल/कौशल तालिकाओं पर एफके के साथ, प्रोफ़ाइल से एक कौशल को हटाने से प्रोफाइल हटा दिया जाएगा। –

+0

'प्रोफ़ाइल' (और/या 'कौशल') तालिका में रिकॉर्ड होना असंभव है जब' profiles_skills' तालिका में कोई पंक्ति नहीं है, तो उपयोग केस की कल्पना करना मुश्किल है। लेकिन यह वही है जो आपकी दूसरी परिभाषा रोकती है। इसलिए, यह 'सर्वोत्तम प्रथाओं' का सवाल नहीं है - पहला तरीका ही एकमात्र तरीका है। – raina77ow

उत्तर

9

मेरा सवाल यह है कि विदेशी कुंजी किस दिशा में होनी चाहिए?

विदेशी कुंजी जंक्शन तालिका (profiles_skills) में होना चाहिए, endpoint तालिकाओं (profiles और skills) को संदर्भित।

यदि आप इसे अन्य तरीके से करने का प्रयास करते हैं, तो आप गैर-मौजूद प्रोफ़ाइल और/या कौशल को "कनेक्ट" करने में सक्षम होंगे, जो वास्तव में विदेशी कुंजी को रोकना है। यह एक असंबंधित प्रोफ़ाइल (या कौशल) होना असंभव बना देगा।

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