一尘不染

不使用GUID作为主键的原因是什么?

sql

每当我设计数据库时,我都会自动为每个表(查找表除外)自动生成一个GUID主键。

我知道我永远不会因重复的键,合并表等而失眠。对我而言,从哲学上讲,任何给定的记录在所有域中都应该是唯一的,并且唯一性应该在表与表之间以一致的方式表示。

我意识到这永远不是最有效的选择,但是撇开性能,我想知道是否有反对这种做法的哲学观点?

根据回答,让我澄清一下:

我说的是始终使用GUID代理键作为主键,而不管表上是否设计了自然键或顺序键。这些是我的假设:

  1. 基于自然键的数据完整性可以设计用于(但不能假设)。
  2. 主键的功能是参照完整性,而与性能,排序或数据无关。

阅读 192

收藏
2021-03-17

共1个答案

一尘不染

杰夫·阿特伍德(Jeff
Atwood)对此进行了详细讨论:http :
//www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-
guids.html

Guid Pro:
在每个表,每个数据库,每个服务器上都是唯一的
允许轻松合并来自不同数据库的记录
允许在多个服务器之间轻松分发数据库
您可以在任何位置生成ID,而不必往返于数据库
大多数复制方案始终需要GUID列

指导意见:
它比传统的4字节索引值大4倍;如果您不注意
Cumbersome进行调试,则这可能会对性能和存储造成严重影响(其中userid
=’{BAE7DF4-DDF-3RG-5TY3E3RF456AS10}’)
生成的GUID应该部分顺序以获得最佳性能(例如, SQL 2005)并启用聚集索引的使用

2021-03-17