8

想象一下,我有三个名为profilesprofiles_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);

我从来没有真正遵循过约定,我只是按照我输入的方式去做,没有遇到任何问题。但我一直在想,这是否真的很重要。

4

1 回答 1

12

我的问题是,外键应该是什么方向?

外键应该在联结表 ( profiles_skills) 中,引用端点表 (profilesskills)。

如果您尝试以相反的方式进行操作,您将能够“连接”不存在的配置文件和/或技能,这正是外键应该防止的。这也使得无法拥有未连接的个人资料(或技能)。

于 2013-02-18T11:29:14.487 回答