为什么要管理自己的Sql Server ID列?

时间:2014-05-19 17:57:35

标签: sql sql-server-2008-r2 relational-database primary-key

我最近开始了一份新工作,我很困惑为什么表格是这样设计的。 (在许多数据库中)是否有人可以给我一个合乎逻辑的解释?

每个表都有一个主键/ Id字段。示例:EmployeeId(整数)

然后,为了获得下一个id,我们实际上需要查询和更新管理每个表的所有键的表。

SELECT NextId 
FROM dbo.NextID 
Where TableName = 'Employees'

这让生活变得困难,你可以想象。设计这个烂摊子的人已经离开了,而其他人只是买了这个就是你做事的方式。

MS SQL Identity列中是否存在一些设计缺陷?我不明白吗?有什么想法吗?

感谢您的输入

2 个答案:

答案 0 :(得分:0)

我的猜测是,人们希望ID列中没有间隙,因此他/她实现了获取下一个可用ID的不必要的过程。

也许你的应用程序依赖于顺序ID,无论哪种方式都不是,你的应用程序不应该依赖于顺序值。毫无疑问,身份价值是达到这种要求的方式。

身份栏问题

是的,Sql Server 2012中的Identity列中存在活动错误。在创建新的标识值时,Identity Column会跳过大的跳转。它仍然无关紧要。

答案 1 :(得分:0)

IDENTITY列的功能/限制使它们在许多情况下可用于生成代理键,但它们并非适用于所有目的 - 例如创建业务可用的“有意义”,托管和/或可能更新的标识符;或用于数据集成或复制。 Microsoft在SQL Server 2008中引入了SEQUENCE功能作为IDENTITY的一种更灵活的替代方法。在为早期版本编写的代码中,序列不可用时,看到您所描述的方案类型并不罕见。