Ars*_*yan 5 sql t-sql sql-server identity
在企业应用程序中使用MS SQL Identity的良好实践吗?是不是在创建业务逻辑和将数据库从一个迁移到另一个时遇到了困难?
Ein*_*ein 14
就个人而言,我不能没有身份列,并在任何地方使用它们,但有一些理由考虑不使用它们.
最初,不使用标识列AFAIK的主要原因是使用复制和/或各种中间件组件来分布多数据库模式(断开连接)来移动数据.没有可用的分布式同步机器,因此没有可靠的方法来防止冲突.由于SQL Server支持分发ID,因此发生了重大变化.但是,它们的使用仍可能无法映射到更复杂的应用程序控制的复制方案.
他们可以泄露信息.帐户ID,发票号码等.如果我每个月都收到您的发票,我可以将您发送的发票或客户的数量包括在内.
我一直遇到问题,合并客户数据库,所有方面仍希望保留旧帐号.这有时让我质疑我对身份字段的依赖:)
像大多数事情一样,最终的答案是"它取决于"特定情况的细节应该在你的决定中占很大的比重.
Jam*_*mes 10
是的,它们运作良好且可靠,并且表现最佳.使用身份字段与非身份字段的一大好处是,它们可以处理尝试保留新ID的多个呼叫者的所有复杂并发问题.对于代码而言,这似乎是微不足道的,但事实并非如此.
下面的这些链接提供了一些有关身份字段的有趣信息,以及为什么要尽可能使用它们.
是.
它们通常按预期工作,您可以使用该DBCC CHECKIDENT
命令来操作和使用它们.
身份的最常见的想法是提供基于主键的有序数字列表.
编辑:我对填充因子错了,我没有考虑到所有插入都会发生在B树的一侧.
另外,在修订后的问题中,您询问了从一个数据库迁移到另一个数据库的问题:
只要迁移是单向复制,身份就完全没问题.如果您有两个需要彼此复制的数据库,那么UniqueIdentifier列可能是您最好的选择.
请参阅:您何时真正被迫使用UUID作为设计的一部分?讨论何时在数据库中使用UUID.
问题始终是:
您真实地从一个数据库迁移到另一个数据库的可能性有多大?如果你正在构建一个多数据库应用程序,这是一个不同的故事,但大多数应用程序都不会被移植到新的数据库中游 - 特别是当他们开始使用像SQL Server一样健壮的东西时.
身份构造非常好,而且你不应该使用它的原因很少.如果你有兴趣,我写了一篇关于身份价值的一些常见神话的博客文章.