Pun*_*nit 2 sql database-design identity primary-key uniqueidentifier
我已经阅读了很多关于我们是否应该将主键作为标识列的文章,但我仍然感到困惑.
使列具有标识的优点在于它可以在连接中提供更好的性能并提供数据一致性.但是有一个与标识相关的主要缺点,即当INSERT语句失败时,IDENTITY值仍会增加如果事务被回滚,则新的IDENTITY列值不会回滚,因此我们最终会在排序方面出现空白.我可以使用GUID(通过使用NEWSEQUENTIALID),但它会降低性能.
差距无关紧要:标识列是内部的,不适用于最终用户使用或识别.
由于16字节宽度,GUID会破坏性能,甚至连续性能.
在对数据建模并计算出您的自然键之后,应选择标识列以尊重物理实现.也就是说,所选择的自然键是逻辑键,但您选择代理键(标识),因为您知道引擎的工作方式.
或者您使用ORM并让客户端尾随数据库狗...