假设我有三个表,分别是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);
我从来没有真正遵守约定,我只是按照我输入的方式去做,没有遇到任何问题。但我内心深处一直在想,这是否真的很重要。
最佳答案
My question is, what direction should the foreign key be?
外键应该在junction 表(profiles_skills
)中,引用endpoint 表(profiles
和技能
).
如果您尝试以相反的方式进行,您将能够“连接”不存在的个人资料和/或技能,这正是外键应该防止的。这也使得不可能拥有未连接的配置文件(或技能)。
关于mysql - 添加外键约束时,哪个方向是最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14916315/