这是一个实用的概念还是一个理论概念?它与主键有什么不同?
答案 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并且在任何域中都是唯一的。