超级钥匙,候选钥匙和;首要的关键

时间:2011-12-01 06:20:24

标签: sql oracle primary-key relational

任何善良的灵魂都可以通过下面的一个简单示例澄清我的怀疑,并确定超级钥匙,候选钥匙和主键吗?

我知道有很多帖子和网站在那里解释它们之间的差异。但看起来所有都是通用定义。

示例:

Student (StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber)

因此,从上面的示例中,我可以知道StudentNumber是主键。

但是对于超级密钥,我有点困惑,哪些属性组合可以组成超级密钥?

至于候选键,我对给定的定义感到困惑,因为任何候选键都可以作为主键。

是否意味着PhoneNumber等属性是候选键并且可以是主键? (假设PhoneNumber只属于一个学生)

感谢您的任何澄清!

3 个答案:

答案 0 :(得分:52)

由于您不想要教科书定义,所以松散地说,超级键是一组唯一定义行的列。

此集合可以包含一个或多个元素,并且表格可以有多个超级密钥。您通常通过功能依赖来执行此操作。

在你的例子中,我假设:

StudentNumber    unique
FamilyName     not unique
Degree     not unique
Major      not unique
Grade      not unique
PhoneNumber    not unique

在这种情况下,超级密钥是包含学号的任何组合。

以下是超级密钥

StudentNumber
StudentNumber, FamilyName
StudentNumber, FamilyName, Degree
StudentNumber, FamilyName, Degree, Major
StudentNumber, FamilyName, Degree, Major, Grade
StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber
StudentNumber, Degree
StudentNumber, Degree, Major
StudentNumber, Degree, Major, Grade
StudentNumber, Degree, Major, Grade, PhoneNumber
StudentNumber, Major
StudentNumber, Major, Grade
StudentNumber, Major, Grade, PhoneNumber
StudentNumber, Grade
StudentNumber, Grade, PhoneNumber
StudentNumber, PhoneNumber

现在假设,如果PhoneNumber是唯一的(这些天分享手机的人),那么以下也是超级密钥(除了我上面列出的内容)。

PhoneNumber
PhoneNumber, Grade, 
PhoneNumber, Major, Grade
PhoneNumber, Degree, Major, Grade
PhoneNumber, FamilyName, Degree, Major, Grade
PhoneNumber, Major
PhoneNumber, Degree, Major
PhoneNumber, FamilyName, Degree, Major
PhoneNumber, StudentNumber, FamilyName, Degree, Major
PhoneNumber, Degree
PhoneNumber, FamilyName, Degree
PhoneNumber, StudentNumber, FamilyName, Degree
PhoneNumber, FamilyName
PhoneNumber, StudentNumber, FamilyName

候选键只是“最短”的超级键。回到第一个超级密钥列表(即电话号码不是唯一的),最短的超级密钥是StudentNumber。

主键通常只是候选键。

答案 1 :(得分:13)

超级键是任何一组属性,对于这些属性,值始终保证对于表中所有可能的元组集都是唯一的。

候选键是" minimal"超级键 - 表示唯一的超级键属性的最小子集。因此,从候选键中删除任何属性将使其不唯一。

主键只是候选键。主键和任何其他候选键之间没有区别。

仅根据属性名称列表对密钥进行假设并不是很有用。您需要知道属性之间应该包含哪些依赖项。话虽如此,我的猜测是你是对的 - 在你的例子中,StudentNumber可能是候选键。

答案 2 :(得分:1)

拉伸Cambium的答案,如果PhoneNumberStudentNumber一起也是唯一的,那么candidate keys将是: - {StudentNumber}{PhoneNumber}
在这里,我们不能将{StudentNumber,PhoneNumber}假设为单个candidate key,因为如果我们省略一个属性StudentNumber,我们仍会获得一个唯一属性{PhoneNumber},这违反了candidate key

Primary key:从所有candidate key中选择一个candidate keys。有2 candidate keys,因此我们可以选择{StudentNumber}作为primary keyAlternate keys:选择candidate keys后,primary key剩余candidate keys是替代密钥,即{PhoneNumber}

compound key:复合键是由两个或多个唯一标识实体事件的属性组成的键。一个简单的键只有一个属性。复合键可以由其他唯一的简单键和非键属性组成,但可能不包含另一个复合键。

composite key:复合键包含至少一个复合键和另一个属性。复合键还可以包括简单键和非键属性。