"每张桌子"上自动增量键的优缺点

Bru*_*bar 9 sql database-design

我们公司正在讨论是否在我们的数据库中的每个表上放置一个自动增量密钥.

我可以理解将一个放在有FK引用的表上,但我有点不喜欢将这些键放在我们的每一个表上,即使这些键永远不会被使用.

请帮助我们在每张桌子上放置自动增量键,除了占用额外的空间和减慢一切(我们有一些数以亿计的记录表).

谢谢

Ken*_*Far 12

我假设几乎所有的表都有一个主键 - 这只是一个问题,即该键是由一个或多个自然键还是一个自动递增的代理键组成.如果您不使用主键,那么在几乎所有表中使用它们通常会获得很多优势.

所以,这里有代理键的一些优点和缺点.首先,专业人士:

  • 最重要的是:它们允许自然键发生变化.简单的例子,一个人的表应该有一个person_id的主键而不是last_name,first_name.
  • 读取性能 - 非常小的索引扫描速度更快.但是,这仅您通过代理键实际约束查询时才有用.因此,对查找表有好处,对主表不太好.
  • 简单 - 如果命名合适,它使数据库易于学习和使用.
  • 容量 - 如果您正在设计类似数据仓库事实表的内容 - 维度上的代理键允许您保留一个非常狭窄的事实表 - 这会带来巨大的容量改进.

缺点:

  • 它们不会阻止重复的自然值.因此,您通常仍希望在逻辑密钥上使用唯一约束(索引).
  • 写性能.使用额外的索引,您将减慢插入,更新和删除更多.
  • 简单性 - 对于几乎不会改变的小型数据表,它们是不必要的.例如,如果您需要国家/地区列表,则可以使用ISO国家/地区列表.它包括有意义的缩写.这比代理键更好,因为它既小又有用.

一般来说,代理键很有用,只要记住缺点,并在适当的时候不要犹豫使用自然键.


lee*_*ers 7

您需要这些表上的主键.你还不知道.

  • 问题是关于自动增量键,而不是主键.有一个区别. (3认同)

Rob*_*ley 5

如果你对Clustered Indexes使用这样的小键,那么它具有非常显着的优点.

喜欢:

插入内容将始终位于页面末尾.

非聚簇索引(需要引用CIX键)不会有长行地址需要考虑.

还有更多...金伯利·特里普的东西是最好的资源.谷歌她......

另外 - 如果你没有其他任何东西可以确保它的独特性,你就会在每一行中找到一个你不会拥有的钩子.您仍应将唯一索引放在应该唯一的字段上,并在适当的字段上使用FK.

但是......请考虑在现有表格上创建此类内容的开销.这可能非常可怕.您可以在表上放置唯一索引,而无需创建额外字段.然后可以将这些唯一索引用于FK.