1. 超级键
超级键是一个属性(或一组属性),用于唯一标识关系中的所有属性。所有的超级键都不能是候选键,但反之亦然。在一个关系中,超级键的数量多于候选键的数量。

例子:
我们有一个给定的关系 R(A, B, C, D, E, F),通过以下给定的依赖关系检查是否是超级键:

Functional dependencies         Super key
AB->CDEF                         YES
CD->ABEF                         YES
CB->DF                           NO
D->BC                            NO

通过使用键 AB,我们可以识别表的其余属性 (CDEF)。同样,键 CD 也可以完成。但是,通过使用键 CB,只能识别 D 和 F,而不是 A 和 E。对于键 D 也是同样的。

2. 候选键
候选键是唯一标识关系或表中的元组的一组属性(或属性)。众所周知,主键是最小的超级键,因此在任何关系中都只有一个主键,但可以出现多个候选键。候选键的属性可以包含与主键相反的 NULL 值。

示例:

Student{ID, First_name, Last_name, Age, Sex, Phone_no}

这里可以看到两个候选键 ID 和 {First_name, Last_name, DOB, Phone_no}。所以在这里,存在多个候选键,它们可以唯一地标识一个关系中的一个元组。

超级键和候选键的区别:

编号 超级键 候选键
1 超级键是一个属性(或属性集),用于唯一标识关系中的所有属性。 候选键是超级键的子集。
2 所有超级键都不能是候选键。 但是所有候选键都是超级键。
3 各种超级键共同构成选择候选键的标准。 各种候选键共同构成选择主键的标准。
4 在一个关系中,超级键的数量多于候选键的数量。 在关系中,候选键的数量少于超级键的数量。
5 超级键的属性可以包含 NULL 值。 候选键的属性也可以包含 NULL 值。