在设计表格时,我养成了一个习惯,即拥有一个唯一的列并且我将其作为主键。这可以根据要求通过三种方式实现:
数字 3 将用于相当小的查找,主要是读取可能具有唯一静态长度字符串代码或数值(例如年份或其他数字)的表。
在大多数情况下,所有其他表都将具有自动递增的整数或唯一标识符主键。
我最近开始使用没有一致行标识符的数据库,并且主键当前聚集在各个列中。一些例子:
这有一个有效的案例吗?我总是会为这些情况定义一个身份或唯一标识符列。
此外,还有很多表根本没有主键。有什么正当理由(如果有的话)?
我试图理解为什么桌子被设计成原来的样子,这对我来说似乎是一团糟,但也许有很好的理由。
第三个问题可以帮助我破译答案:在使用多列组成复合主键的情况下,这种方法与代理/人工键相比是否有特定优势?我主要考虑性能、维护、管理等方面的问题?
我遵循一些规则:
关于代理与自然键,我参考了上面的规则。如果自然键很小并且永远不会更改,则可以将其用作主键。如果自然键很大或可能会更改,我会使用代理键。如果没有主键,我仍然会创建代理键,因为经验表明您将始终将表添加到您的架构中,并希望您将主键放在适当的位置。