【问题标题】:Why do we need to use Foreign Keys? [duplicate]为什么我们需要使用外键? [复制]
【发布时间】:2012-10-01 13:01:15
【问题描述】:
可能重复:
Should I use foreign keys?
好的,假设我们有两个表,users 和 comments。在 cmets 中,我们有一列 comment_made_by_user_id,它表示哪个用户键入了该特定评论。为什么我们需要将其指定为外键?如果我们不这样做,它仍然可以工作。我们指定主键,因为据我所知,它使查询更快(我们只需要搜索一行,而当我们没有主键/索引时,我们必须遍历所有行)。这只是一个好的编码实践吗?
【问题讨论】:
标签:
mysql
sql
foreign-keys
primary-key
【解决方案1】:
当你使用外键时,你会得到:
-
数据完整性
- 查询速度更快。
用户:
用户名:
评论:
用户:
- 1
- 2
- 4 XXX 无效,因为 4 不在用户表中。
请阅读维基百科了解更多关于Data integrity的详细信息
【解决方案2】:
它在数据库中创建数据完整性。假设您删除了一个用户,那么如果您忘记使用单独的查询手动删除 cmets,您最终会得到很多链接到无效用户的 cmets。使用外键,您可以将其设置为在删除用户时自动删除所有 cmets(或更新更改,例如更改用户 ID)。
【解决方案3】:
首先 - 外键是一个约束。如果您在数据库中有 一对多 或 多对多 关系,外键将非常有用。在此处查找更多信息 - Referential integrity。
他们也有一些不错的动作 - RESTRICT, CASCADE, SET NULL, NO ACTION;在documentation阅读此信息。
所以,外键和数据库本身可以为您做一些工作。
【解决方案4】:
通过将其设为外键,您将强制执行表之间的关系。如果您有外键,则不能将 user_id 放在用户表中。