通常,最好使用本机主键(即现有列或列组合)或将主键设置为自动生成的整数行?
编辑:
有人向我指出,这与这个问题非常相似.
这里的共识是使用代理键,这是我的天生倾向,但我的老板告诉我,我应该尽可能使用自然键.他的建议对于这个特定的应用程序可能是最好的,因为行中的Name唯一地标识它并且我们需要保持查看旧数据的能力,因此对名称/规则的任何更改将意味着新的唯一行.
虽然这里的答案都很有帮助,但大多数都是基于主观的"这就是你应该做的",而不是引用支持来源.我是否缺少一些必要的阅读材料,或者数据库设计是否具有高度主观性和/或依赖于应用程序?
主键
必须唯一地标识一行.
不得包含数据,否则当数据发生变化时会发生变化(这很糟糕)
应该快速比较操作(WHERE子句/连接)
理想情况下,您为行使用人工(代理)键,数字整数数据类型(INT)最好,因为节省空间和快速.
主键应该由最小数量的字段构成,以满足条件1.-3.对于绝大多数表,最小值为:1字段.
对于关系表(或非常特殊的边缘情况),它可能更高.引用具有复合主键的表很麻烦,因此不建议对必须在其自己引用的表上使用复合键.
在关系表(m:n关系)中,您可以从相关表的主键中创建复合键,因此您的复合键会自动满足上述所有三个条件.
如果你绝对确定,你可以用数据制作主键,它将是唯一的,永远不会改变.由于这很难保证,我建议不要这样做.