如果将标识列作为主键是一个好习惯,您能否提出意见?对于 ORM 工具,在表上有标识列会有所帮助。但是还有其他副作用,例如意外重复插入。
谢谢奈恩
如果将标识列作为主键是一个好习惯,您能否提出意见?对于 ORM 工具,在表上有标识列会有所帮助。但是还有其他副作用,例如意外重复插入。
谢谢奈恩
是的,对于 SQL Server,使用 INT(或 BIGINT)IDENTITY 是非常好的做法。
SQL Server 使用主键作为其默认集群键,集群键应始终具有以下属性:
INT IDENTITY 完全符合要求!
有关更多背景信息,尤其是为什么将 GUID 作为您的主要(因此集群键)是一个坏主意的一些信息,请参阅 Kimberly Tripp 的优秀帖子:
如果您有理由使用 GUID 作为主键(例如复制),那么一定要确保将 INT IDENTITY 作为您在这些表上的集群键!
马克
在没有复制或大量数据合并的环境中,IDENTITY 密钥对于服务器端生成的密钥是一种很好的做法。它们的实现方式不允许在同一个表中重复,所以不用担心。它们还具有将没有大量 DELETE 的表中的碎片最小化的优点。
GUID 是常用的替代方法。它们的优点是您可以在 Web 层创建它们,而无需数据库往返。但是,它们比 IDENTITIES 大,并且可能导致极端的表碎片。由于它们是(半)随机的,因此插入分布在整个表中,而不是最后集中在一页中。
我使用 Guid 是因为它在处理分布式应用程序时真的很有帮助。特别是当所有分布式实例也需要创建新数据时。
尽管如此,在简单的情况下,我看不到自动增量整数主键有任何问题。实际上我更喜欢它们,因为直接使用 SQL 查询更容易,因为它更容易记住。