SQL Server中的候选键是什么?

时间:2015-12-16 04:21:50

标签: sql sql-server

这是一个实用的概念还是一个理论概念?它与主键有什么不同?

2 个答案:

答案 0 :(得分:3)

候选密钥也称为自然密钥,域密钥或业务密钥。这把钥匙很独特。它可能不一定是主要的,但通常是。

主键是唯一且非空。

让我们举个例子

create table employees (
   employee_id int not null auto_increment primary key,
   empssn char(9),
   firstname varchar(50) not null,
   lastname varchar(50) not null,
   gender char(1),
   constraint uk_employees_ssn (empssn)
);

此处的员工SSN是候选密钥。从业务角度来看,很自然地认为SSN不会重复。员工可能尚未拥有SSN或员工尚未披露其SSN。因此它是独一无二的,可以自负。

在这个例子中,我们还选择将名为employee_id的不同字段作为主键。该理论是为员工提供连续的数值。这允许我们改变SSN(我在做一个项目时学到了,在某些情况下SSN可以改变)。员工ID在此处称为代理键。 user2864740对主键和候选键之间的关系有很好的评论。

另请阅读social MSDN关于密钥的讨论。

答案 1 :(得分:1)

候选键 - 候选键可以是任何列或列的组合,可以作为数据库中的唯一键。一个表中可以有多个候选键。每个候选人密钥都可以作为主要密钥。

主键 - 主键是唯一标识记录的列或列组合。只有一个候选密钥可以是主密钥。

在选择主键时需要非常小心,因为错误的选择会对数据库架构师和将来的规范化产生负面影响。要使候选键成为主键,它应该是非NULL并且在任何域中都是唯一的。