假设我有一些表 T
带有一些非空字段 A
. A
上有一个聚簇索引 . 请考虑以下两个选项:
-
我将
A
作为主键 . -
我为
A
创建了一个UNIQUE约束 .
区别在哪里?我知道主键是什么,我知道w.r.t有一个概念上的区别 . 数据库理论 . 但是SQL Server的实际区别是什么? SQL Server数据库引擎的行为有何不同?在这两种情况下,表的聚簇索引都在 A
上;在这两种情况下,我都可以通过外键来引用 A
.
(启发了这个问题的相关问题:Meaning of Primary Key to Microsoft SQL Server 2008)
2 回答
没有 . 真的没什么区别 . 优化器以相同的方式处理它 . 某些圈子甚至还在争论主键本身是否真的有必要 . (虽然没有人会认为你应该为每个表定义至少一个唯一的索引/约束) .
反对“主键”概念的一个论点可能是这样的:如果一个表上有两列,它们既是唯一的又是相同数量的数据,那就变成了PK?确实是个好问题 .
无论如何,我总是使用PRIMARY KEY概念,因为从文档的角度来看它非常有用,它确实有助于人们理解你的意图 .
我从来没有得到任何真正的区别,但概念但我也想过这么多次 .