🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# DBMS 中的超键 > 原文: [https://beginnersbook.com/2015/04/super-key-in-dbms/](https://beginnersbook.com/2015/04/super-key-in-dbms/) **DBMS 中超键的定义**:超键是一组单个或多个属性(列),可以唯一地标识表中的行。通常 [DBMS 初学者](https://beginnersbook.com/2015/04/dbms-tutorial/)混淆超键和[候选键](https://beginnersbook.com/2015/04/candidate-key-in-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 只有这两组是候选键,因为所有其他组都具有冗余属性,这些属性对于唯一标识不是必需的。 ## 超键与候选键 关于超键和候选键之间的混淆,我收到了很多评论。让我给你一个清楚的解释。 1. 首先,您必须了解所有候选键都是超键。这是因为候选键是从超键中选择的。 2. 我们如何从超键集中选择候选键?我们寻找那些我们无法删除任何字段的键。在上面的示例中,我们没有选择`{Emp_SSN, Emp_Name}`作为候选键,因为`{Emp_SSN}`单独可以识别表中的唯一行,而`Emp_Name`是冗余的。 [**主键**](https://beginnersbook.com/2015/04/primary-key-in-dbms/): 从一组候选键中选择主键。这是由数据库管理员或数据库设计者完成的。我们可以说可以选择`{Emp_SSN}`或`{Emp_Number}`作为表`Employee`的主键。