本机主键还是自动生成的?

Jam*_*hon 5 database database-design primary-key

通常,最好使用本机主键(即现有列或列组合)或将主键设置为自动生成的整数行?

编辑:
有人向我指出,这与这个问题非常相似.

这里的共识是使用代理键,这是我的天生倾向,但我的老板告诉我,我应该尽可能使用自然键.他的建议对于这个特定的应用程序可能是最好的,因为行中的Name唯一地标识它并且我们需要保持查看旧数据的能力,因此对名称/规则的任何更改将意味着新的唯一行.

虽然这里的答案都很有帮助,但大多数都是基于主观的"这就是你应该做的",而不是引用支持来源.我是否缺少一些必要的阅读材料,或者数据库设计是否具有高度主观性和/或依赖于应用程序?

Tom*_*lak 8

主键

  1. 必须唯一地标识一行.
  2. 不得包含数据,否则当数据发生变化时会发生变化(这很糟糕)
  3. 应该快速比较操作(WHERE子句/连接)

理想情况下,您为行使用人工(代理)键,数字整数数据类型(INT)最好,因为节省空间和快速.

主键应该由最小数量的字段构成,以满足条件1.-3.对于绝大多数表,最小值为:1字段.

对于关系表(或非常特殊的边缘情况),它可能更高.引用具有复合主键的表很麻烦,因此不建议对必须在其自己引用的表上使用复合键.

在关系表(m:n关系)中,您可以从相关表的主键中创建复合键,因此您的复合键会自动满足上述所有三个条件.

如果你绝对确定,你可以用数据制作主键,它将是唯一的,永远不会改变.由于这很难保证,我建议不要这样做.


cle*_*tus 4

这是一个很常见的话题。

\n\n\n

  • 是的,SO 搜索……不太好。你必须知道要寻找什么或做我经常做的事情,然后在谷歌中输入:site:stackoverflow.com 搜索词 (2认同)