6
想象我有三個表稱爲profiles
,profiles_skills
和skills
。這是一個HABTM關係,一個配置文件可以擁有許多技能,而且一項技能可以屬於多個配置文件。當增加一個外鍵約束,哪個方向的最佳實踐?
我需要建立這些表之間的外鍵約束。我的問題是,外鍵應該是什麼方向?例如,做我這樣做:
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);
我從來沒有真正遵循慣例,我只是做了我輸入並沒有路有問題。但是我一直想知道它是否真的很重要。
的外鍵必須在「子」表,而你的情況是'profiles_skills'。是的,這很重要。通過單獨的配置文件/技能表上的FK,從配置文件中刪除技能將刪除配置文件。 – 2013-02-16 23:32:28
這是很難想象的使用情況時,它不可能在'profiles'記錄(和/或'skills')表中沒有的'profiles_skills'表中的相應行。但這正是你的第二個定義所預防的。因此,這不是「最佳實踐」的問題 - 第一種方法是唯一的方法。 – raina77ow 2013-02-16 23:57:25