复合键是MySQL中弱实体的代理键

时间:2017-12-03 16:53:49

标签: mysql innodb

到目前为止,我一直在创建代理键,作为每个表的主键。我对此很满意。

但是,对于依赖于其他表的弱实体,我已经读过,最好使用外键和弱实体的一个属性来创建一个复合键,作为首要的关键。

这个方法有什么好处,还是可以继续为我的所有表使用代理键?

1 个答案:

答案 0 :(得分:1)

我写过的三分之二的表格都是“自然的”PRIMARY KEY。有时候它是“复合的”。甚至有时候我会在PK中的另一个专栏之后放置代理。

我用于决定的原因因应用程序和表的大小而异:

  • 通常会有'自然'PK。
  • id AUTO_INCREMENT通常只是浪费空间,速度等。
  • 有时会有一些查询可以从获取行的​​“范围”中受益 - 让PK连续提供这些行可以提高性能,从而为此定制PK。
  • 如果有很多辅助密钥,那么通常更好的PK更短。 (每个辅助密钥都有一个PK列的副本。)这有时是添加代理项的有效参数。
  • 同样,如果其他几个表需要链接到此表,则最好使用短PK。 (代理人通常比“自然”短。)
  • TEXTBLOB列不能在PK中。

以下是3个例子,其中复合天然PK明显优于代理:

注意:“弱实体”和“外键”不是决策中的考虑因素。