Jon*_*des 10 database-design primary-key index-tuning unique-constraint
我有几个表,其中的记录可以用几个广泛的业务领域唯一标识。过去,我将这些字段用作 PK,并考虑到以下好处:
但是,我听说过一个创建合成IDENTITY INT
PK的案例,而是使用单独的UNIQUE
约束来强制执行业务密钥。优点是狭窄的 PK 使得二级索引小得多。
如果一个表有没有比PK其他指标,我看不出有任何理由赞成第二种方法,虽然在一个大表它可能是最好的假设,指数可能在未来是必要的,因此,有利于在狭窄合成PK . 我是否缺少任何考虑?
顺便说一下,我并不是反对在数据仓库中使用合成键,我只是对何时使用单一的宽泛 PK 以及何时使用窄 PK 加上宽泛的 UK 感兴趣。
gbn*_*gbn 11
使用自然键作为聚集索引没有明显的缺点
缺点是页面拆分会增加,因为数据插入将分布在整个数据中,而不是在最后。
在有 FK 或 NC 索引的情况下,使用窄的、数字的、递增的聚集索引具有优势。对于每个 NC 或 FK 条目,您只需重复几个字节的数据,而不是 while 业务/自然键。
至于为什么,请阅读Google 的 5 篇文章
注意我避免使用“主键”。
您可以在代理键上使用聚集索引,但将 PK 保留在业务规则上,但作为非聚集索引。只要确保集群是唯一的,因为 SQL 会添加一个“唯一标识符”来实现它。
最后,在每张表上都有一个代理键可能是有意义的,但不是盲目的:很多表不需要一个,或者来自父表的复合键就足够了