我们如何决定去与标识列或主键?
Answer 1:
这两个概念并不相互排斥。 所有组合都是可能的:
- 标识列,这也是一个主键,
- 标识列不是主键,
- 主键列,它是不为单位,
- 列既不是主键也不身份
需要注意的是标识列经常被用来作为主键,因为它是保证是独一无二的,它通常是除了所需的架构领域,所以它不会ahve如果架构的变化而变化。
Answer 2:
您使用的标识列,当你需要一个自动递增。 期! 就那么简单。 通常标识列是主键的很好的候选人。
主键只是一个概念。 请告诉我主键背后重要的是,它创建在列聚集索引所以,从理论上讲,你不需要,“主键”,如果你有一个表的唯一聚集索引。
我建议你谷歌和阅读有关这两个概念,这是非常importatn理解
Answer 3:
从以往的经验而不是理论我已经发现,使用不是由用户共享为“用户数据”键是非常重要的。 也就是说,用户数据和密钥应该是不同的领域。
我们有哪些使用项目代码的数据库。 该项目的代码是唯一的,永远不能为null,并且有,一旦分配永远不会更改的业务规则。 这使得它的候选键。
但是,如果用户看到项目代码,查找文件由项目代码等等,这是他们的数据,他们将要改变周围的项目代码的业务规则。
我们的项目代码是客户ID后跟一个破折号和一个序列号,以使其唯一。 如果拟建项目为一个客户ID结束了针对不同客户编号的合同,用户想更改项目代码。 如果用户使用了错误的客户ID输入时,他们想改变的项目代码。 更改主键,所有的外键引用它是有问题的。
这并不(似乎)回答我们如何决定去与标识列或主键的问题?
但是,如果你不使用客户数据的主键,(正如我刚才认为你不应该),那么主键将需要自动生成的,因为你不能指望用户输入。
Answer 4:
你应该总是使用一个主键,它只是使你的数据库的可扩展性。 使用GUID或UUID或其他任何独特。
文章来源: Identity column Vs Primary Key [closed]