DBMS 中超键的定义:超键是一组单个或多个属性(列),可以唯一地标识表中的行。通常 初学者会混淆超键和候选键,因此我们还将在本文中讨论候选键及其与超键的关系。
候选键如何与超键不同?
答案很简单 – 从超键集中选择候选键,我们在选择候选键时唯一要注意的是:它不应该有任何冗余属性。这就是他们被称为最小超键的原因。
让我们举一个例子来理解这一点:
表:Employee
Emp_SSN Emp_Number Emp_Name
--------- ---------- --------
123456789 226 Steve
999999321 227 Ajeet
888997212 228 Chaitanya
777778888 229 Robert
超键:上表有以下超键。以下所有超键集都能够唯一标识employee
表的一行。
- {} Emp_SSN
- {} Emp_Number
- {Emp_SSN,Emp_Number}
- {Emp_SSN,Emp_Name}
- {Emp_SSN,Emp_Number,Emp_Name}
- {Emp_Number,Emp_Name}
候选键:正如我在开头提到的,候选键是一个没有冗余属性的最小超键。从上述集合中选择以下两组超键,因为这些集合中没有冗余属性。
- {} Emp_SSN
- {} Emp_Number
只有这两组是候选键,因为所有其他组都具有冗余属性,这些属性对于唯一标识不是必需的。
超键与候选键
关于超键和候选键之间的混淆,我收到了很多评论。让我给你一个清楚的解释。
- 首先,您必须了解所有候选键都是超键。这是因为候选键是从超键中选择的。
-
我们如何从超键集中选择候选键?我们寻找那些我们无法删除任何字段的键。在上面的示例中,我们没有选择
{Emp_SSN, Emp_Name}
作为候选键,因为{Emp_SSN}
单独可以识别表中的唯一行,而Emp_Name
是冗余的。
主键:
从一组候选键中选择主键。这是由数据库管理员或数据库设计者完成的。我们可以说可以选择{Emp_SSN}
或{Emp_Number}
作为表Employee
的主键。