我们如何决定使用Identity列或主键?
答案 0 :(得分:4)
这两个概念并不相互排斥。所有组合都是可能的:
请注意,标识列通常用作主键,因为它保证是唯一的,并且它通常是所需的架构字段的补充,因此如果架构更改,则无法进行更改。
答案 1 :(得分:2)
在需要自动增量时使用Identity列。期!就那么简单。通常,标识列是主键的良好候选者。
主键只是一个概念。在主键背后重要的是它在列上创建了一个CLUSTERED INDEX,所以理论上,如果你有一个具有唯一聚簇索引的表,你就不需要“主键”。
我建议你google并阅读这两个概念,这些概念非常重要,可以理解
答案 2 :(得分:1)
从经验而不是理论我发现使用不被用户共享的密钥作为“用户数据”很重要。也就是说,用户数据和密钥应该是不同的字段。
我们有一个使用项目代码的数据库。项目代码是唯一的,永远不会为空,并且具有一旦分配的业务规则永远不会被更改。这使它成为候选人。
但是,如果用户看到项目代码,按项目代码查找文件等等,那就是他们的数据,他们希望围绕项目代码更改业务规则。
我们的项目代码是客户ID,后跟破折号和序列号,使其独一无二。如果针对一个客户ID的建议项目最终签订了不同客户ID的合同,则用户希望更改项目代码。如果用户使用错误的客户ID输入,则他们想要更改项目代码。更改主键以及引用它的所有外键都存在问题。
这似乎没有(似乎)回答问题我们如何决定使用Identity列或主键?
但是,如果你不使用客户数据作为主键,(我刚才认为你不应该这样做)那么主键需要自动生成,因为你不能指望用户输入它
答案 3 :(得分:0)
您应该始终使用主键,它只是使您的数据库可扩展。使用GUID或UUID或其他任何唯一的。