您认为使用identity列作为主键是否是一种好的做法?对于ORM工具,在表上设置identity列会有所帮助。但还有其他副作用,如意外的重复插入。
谢谢Nayn
发布于 2009-12-03 15:47:36
对于服务器端生成的密钥,在没有复制或大量数据合并的环境中,身份密钥是一种很好的实践。由于它们的实现方式,它们不允许在同一个表中出现重复,所以不用担心这一点。它们还具有最小化没有大量删除的表中的碎片的优点。
GUID是常用的替代方法。它们的优势在于,您可以在web层创建它们,而不需要数据库往返。然而,它们比标识更大,并且它们可能导致极端的表碎片。因为它们是(半)随机的,所以插入分散在整个表中,而不是集中在最后的一页中。
发布于 2009-12-03 18:00:02
是的,对于SQL Server来说,使用INT (或BIGINT)标识是非常好的做法。
SQL Server使用主键作为其默认群集键,并且群集键应始终具有以下属性:
INT IDENTITY非常适合这个条件!
有关更多背景信息,尤其是为什么GUID作为主要(以及集群关键字)是bad的想法的一些信息,请参阅Kimberly Tripp的优秀帖子:
如果您有理由使用GUID作为主键(例如复制),那么一定要确保在这些表上有一个INT标识作为您的聚类键!
Marc
发布于 2009-12-03 15:16:14
我使用Guid,因为当我处理分布式应用程序时,它真的很有用。尤其是当所有分布式实例还需要创建新数据时。
然而,在简单的情况下,我不认为自动增量整数主键有任何问题。实际上,我更喜欢它们,因为直接使用SQL查询更容易,因为它更容易记住。
https://stackoverflow.com/questions/1838199
复制相似问题