SQL Server:非null唯一与主键

Hei*_*nzi 3 database sql-server primary-key

假设我有一些T带有一些非空字段的表A.有一个聚集索引A.请考虑以下两个选项:

  1. 我做A了主键.
  2. 我为它创建了一个UNIQUE约束A.

差异在哪里?我知道什么是主键,我知道数据库理论存在概念上的差异.但是SQL Server 的实际区别是什么?SQL Server数据库引擎的行为有何不同?在这两种情况下,表的聚簇索引都是打开的A; 在这两种情况下我都可以A通过外键来引用.

(启发了这个问题的相关问题:Microsoft SQL Server 2008主键的含义)

Dav*_*kle 5

没有.真的没什么区别.优化器以相同的方式处理它.某些圈子甚至还在争论主键本身是否真的有必要.(虽然没有人会认为你应该为每个表定义至少一个唯一的索引/约束).

反对"主键"概念的一个论点可能是这样的:如果一个表上有两列,它们既是唯一的又是相同数量的数据,那就变成了PK?确实是个好问题.

无论如何,我总是使用PRIMARY KEY概念,因为从文档的角度来看它非常有用,它确实有助于人们理解你的意图.