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