数据库设计 – 为什么单个主键比复合键更好?

前端之家收集整理的这篇文章主要介绍了数据库设计 – 为什么单个主键比复合键更好?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么使用名为id的单个主键拒绝复合键来支持所有表.原因一般所有ORM都遵循这个.. ???

编辑

我刚刚开始在轨道上学习ruby,在敏捷开朗的书中,务实地有一行:
除非每个表都有数字主键,否则Rails实际上不会很好.对列的名称不那么吝啬.
当我学习学说时,我读到的那种线条.

EDIT2
请检查这个链接.我越来越困惑这个事情:—
Composite primary keys versus unique object ID field

从以上链接: –

*主键应该是恒定和无意义的;非代理键通常会失败一个或两个要求,最终

如果密钥不是恒定的,您将有一个可能会变得相当复杂的未来更新问题
如果关键是没有意义的,那么它更有可能改变,即不是恒定的;往上看

拿一个简单的常见例子:一个库存项目表.将项目编号(sku号,条形码,部件代码或其他)作为主键可能很诱人,但是一年后,所有的项目编号都会更改,而且您会留下一个非常混乱的更新 – 数据库问题…

编辑:还有一个比哲学更实际的问题.在许多情况下,您将要找到一个特定的行,然后更新它或再次找到(或两者).使用复合键,有更多的数据可以跟踪WHERE子句中的更多和更多的约束,用于重新查找或更新(或删除).同时有可能其中一个关键细分可能发生变化!使用代理键,总是只保留一个值(代理ID),并且根据定义,它不能改变,这样可以显着简化情况.

解决方法

我不认为只有一个名为id的主键才能使用一个总括语句.

大多数人使用代理主键作为自动生成int,因为它隔离主键以免需要更改,就像您将PK设为用户名,稍后更改其法定名称.您将必须更新PK和所有FK列以反映新名称.如果您使用代理主键,则只需在一个位置更新用户名称(因为表中的表不是加入名称).

主键的大小很重要,因为PK被复制到您在表上构建的每个索引中.如果PK很大(像一个字符串),索引中的每个页面的键数就会减少,索引将会占用更多的缓存来存储它. Ints很小

拥有自动递增int PK可以很好地将其作为一个聚簇索引,因为按照这个顺序存储行,并且不需要返回并且不能排除插入新行的行,所以总是添加到表的结尾.

原文链接:https://www.f2er.com/mssql/82686.html

猜你在找的MsSQL相关文章