我最近开始了一份新工作,我很困惑为什么表格是这样设计的。 (在许多数据库中)是否有人可以给我一个合乎逻辑的解释?
每个表都有一个主键/ Id字段。示例:EmployeeId(整数)
然后,为了获得下一个id,我们实际上需要查询和更新管理每个表的所有键的表。
SELECT NextId
FROM dbo.NextID
Where TableName = 'Employees'
这让生活变得困难,你可以想象。设计这个烂摊子的人已经离开了,而其他人只是买了这个就是你做事的方式。
MS SQL Identity列中是否存在一些设计缺陷?我不明白吗?有什么想法吗?
感谢您的输入
答案 0 :(得分:0)
我的猜测是,人们希望ID列中没有间隙,因此他/她实现了获取下一个可用ID的不必要的过程。
也许你的应用程序依赖于顺序ID,无论哪种方式都不是,你的应用程序不应该依赖于顺序值。毫无疑问,身份价值是达到这种要求的方式。
身份栏问题
是的,Sql Server 2012中的Identity列中存在活动错误。在创建新的标识值时,Identity Column会跳过大的跳转。它仍然无关紧要。
答案 1 :(得分:0)
IDENTITY列的功能/限制使它们在许多情况下可用于生成代理键,但它们并非适用于所有目的 - 例如创建业务可用的“有意义”,托管和/或可能更新的标识符;或用于数据集成或复制。 Microsoft在SQL Server 2008中引入了SEQUENCE功能作为IDENTITY的一种更灵活的替代方法。在为早期版本编写的代码中,序列不可用时,看到您所描述的方案类型并不罕见。