11

可能重复:
我应该使用外键吗?

好的,假设我们有两个表,users并且comments. 在评论中,我们有一列comment_made_by_user_id,它表示哪个用户键入了该特定评论。为什么我们需要将其指定为外键?如果我们不这样做,它仍然可以工作。我们指定主键,因为据我所知,它使查询更快(我们只需要搜索一行,而当我们没有主键/索引时,我们必须遍历所有行)。这只是一个很好的编码实践吗?

4

4 回答 4

11

当您使用外键时,您会得到:

  1. 数据的完整性
  2. 更快的查询。

用户:
用户 ID:

  • 1
  • 2
  • 3

评论:
用户:

  • 1
  • 2
  • 4 XXX 无效,因为 4 不在 users 表中。

请阅读维基百科以获取有关数据完整性的更多详细信息

于 2012-10-10T23:08:38.597 回答
8

它在数据库中创建数据完整性。假设您删除了一个用户,那么如果您忘记使用单独的查询手动删除评论,您最终会得到很多链接到无效用户的评论。使用外键,您可以将其设置为在删除用户时自动删除所有评论(或更新更改,例如更改用户 ID)。

于 2012-10-10T23:11:47.413 回答
2

首先,外键是一个约束。如果您在数据库中有一对多多对多的关系,外键将非常有用。在此处查找更多信息 -参照完整性

他们也有一些好的动作——限制、级联、设置为空、无动作;在文档中阅读此信息。

因此,外键和数据库本身可以为您做一些工作。

于 2012-10-11T08:50:31.437 回答
0

通过将其设为外键,您将强制执行表之间的关系。如果您有外键,则不能将 user_id 放在用户表中。

于 2012-10-10T23:09:16.960 回答