DBMS 中的超键

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是冗余的。

主键
从一组候选键中选择主键。这是由数据库管理员或数据库设计者完成的。我们可以说可以选择{Emp_SSN}{Emp_Number}作为表Employee的主键。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程