# DBMS 中的候选键

> 原文： [https://beginnersbook.com/2015/04/candidate-key-in-dbms/](https://beginnersbook.com/2015/04/candidate-key-in-dbms/)

**DBMS** 中候选键的定义：没有冗余属性的[超键](https://beginnersbook.com/2015/04/super-key-in-dbms/)被称为候选键。从超键集中选择候选键，在选择候选键时我们唯一要注意的是候选键不应具有任何冗余属性。这就是他们被称为最小超键的原因。

## 候选键示例

让我们举一个表`Employee`的例子。该表有三个属性：`Emp_Id`，`Emp_Number`和`EMP_NAME`。在这里 `Emp_Id`和`Emp_Number`将具有唯一值，并且`Emp_Name`可以具有重复值，因为多个员工可以具有相同的名称。

```
Emp_Id	Emp_Number	Emp_Name
------  ----------      --------
E01	2264	        Steve
E22	2278	        Ajeet
E23	2288	        Chaitanya
E45	2290	        Robert
```

上表可以有多少个超键？

1. `{Emp_Id}`
2. `{Emp_Number}`
3. `{Emp_Id, Emp_Number}`
4. `{Emp_Id, Emp_Name}`
5. `{Emp_Id, Emp_Number, Emp_Name}`
6. `{Emp_Number, Emp_Name}`

让我们从上面的一组超键中选择候选键。

1. `{Emp_Id}` - 无冗余属性
2. `{Emp_Number}` - 无冗余属性
3. `{Emp_Id, Emp_Number}` - 有冗余属性。这些属性中的任何一个都可以是最小超键，因为这两个列都具有唯一值。
4. `{Emp_Id, Emp_Name}` - 冗余属性`Emp_Name`。
5. `{Emp_Id, Emp_Number, Emp_Name}` - 有冗余属性。仅`Emp_Id`或`Emp_Number`就足以唯一地标识`Employee`表的一行。
6. `{Emp_Number, Emp_Name}` - 冗余属性`Emp_Name`。

我们选择的**候选键**是：

+   `{Emp_Id}`
+   `{Emp_Number}`

**注**：从候选键组中选择[主键](https://beginnersbook.com/2015/04/primary-key-in-dbms/)。这意味着我们可以将`Emp_Id`或`Emp_Number`作为主键。该决定由 DBA（数据库管理员）完成。