【问题标题】:Why do we need to use Foreign Keys? [duplicate]为什么我们需要使用外键? [复制]
【发布时间】:2012-10-01 13:01:15
【问题描述】:

可能重复:
Should I use foreign keys?

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

【问题讨论】:

  • 可以通过非常快速的互联网搜索来回答。

标签: mysql sql foreign-keys primary-key


【解决方案1】:

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

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

用户:
用户名:

  • 1
  • 2
  • 3

评论:
用户:

  • 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 放在用户表中。

        【讨论】:

          猜你喜欢
          • 2015-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-26
          • 1970-01-01
          • 2019-09-17
          • 2018-11-02
          • 1970-01-01
          相关资源
          最近更新 更多