mysql - 添加外键约束时,哪个方向是最佳实践?

标签 mysql database database-design relational-database

假设我有三个表,分别是profilesprofiles_skillsskills。这是一种 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/

相关文章:

MySql : How to select records based on current week?

php - 我有一个数组,但现在如何插入 csv 值 php mysql

mysql - 带有 Node MySQL 的无服务器框架

PHP数组代码解决

mysql - 标准化 : is it done good?

ios - Fetch Request 执行方法不返回任何内容

database - 既然可以通过主键唯一标识一个元组,为什么还需要superkey?

php - MySQL 对字段进行排序

mysql - 在数据库中存储两个位置之间的路线

sql - 数据库表;将它们散开,还是将它们归零?