sql - 链接表是否需要无意义的主键字段?

标签 sql database-design primary-key

我正在研究几个链接表,我开始思考(Danger Will Robinson,Danger)链接表的可能结构是什么,它们的优缺点是什么。
我为链接表提出了一些可能的限制:
传统的 3 列模型

  • id - 自动编号 PRIMARY
  • table1fk - 外键
  • table2fk - 外键

  • 在大多数书中,这是一部经典之作,'nuff 说。
    索引 3 列模型
  • id - 自动编号 PRIMARY
  • table1fk - 外键 INDEX ('table1fk')
  • table2fk - 外键 INDEX ('table2fk')

  • 根据我自己的经验,您查询的字段在传统模型中没有索引。我发现索引外键字段确实可以提高性能,正如预期的那样。不是一个重大变化,而是一个很好的优化调整。
    复合键 2 列 ADD PRIMARY KEY ('table1fk' , 'table2fk')
  • table1fk - 外键
  • table2fk - 外键

  • 有了这个,我使用复合键,以便 table1 中的记录只能链接到 table2 上的记录一次。因为键是复合的,所以我可以添加记录 (1,1)、(1,2)、(2,2) 而不会出现任何重复错误。
    复合键 2 列选项有任何潜在问题吗?这可能会导致索引问题吗?性能受到打击?有什么会使这成为可能的选择的资格吗?

    最佳答案

    拥有单列 pk 可以在灾难恢复情况下提供很大帮助。因此,虽然理论上是正确的,但您只需要 2 个外键。在实践中,当狗屎击中风扇时,您可能需要单列键。我从来没有遇到过因为我有一个单列标识符而被搞砸的情况,但我曾经遇到过因为没有而被搞砸的情况。

    关于sql - 链接表是否需要无意义的主键字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1843222/

    相关文章:

    django - Python/Django : Create table with two primary_key using cql engine

    php - MySQL 计算一段时间内共享至少 3 列中的 1 列的条目数

    mysql - 使用 GROUP BY 语句的 SQL 查询

    sql - 是否可以通过DB链接访问DB链接

    database - 将不同数据库的表子集复制/复制到第三个数据库

    database - 其他两个中间表之间的中间表的专有名称

    postgresql - 如果不存在则插入行会导致竞争条件?

    ruby-on-rails - 在 Rails 中,您能否在 primary_key 和 foreign_key 具有不同数据类型的两个模型之间建立关联?

    sql - 在第一个空格之前剪切字符串

    mysql - 在MySQL中实现继承:替代方案和仅具有代理键的表