数据库超级键和候选键怎么区分?

文章导读
Previous Quiz Next 数据库中的键用于唯一标识记录并维护数据完整性。请阅读本章以深入了解超键和候选键及其工作原理。
📋 目录
  1. A DBMS 中键的快速回顾
  2. B 超键:键的超集
  3. C 候选键:最小超键
  4. D 如何决定候选键(Candidate Key)?
  5. E 候选键(Candidate Keys)和主键(Primary Keys)
  6. F 超键(Super Keys)和候选键(Candidate Keys)的区别
  7. G 结论
A A

DBMS - 超键和候选键



Previous
Quiz
Next

数据库中的键用于唯一标识记录并维护数据完整性。请阅读本章以深入了解超键和候选键及其工作原理。

DBMS 中键的快速回顾

数据库中的键是一个属性或一组属性,用于唯一标识表中的每条记录。例如,想象一个具有以下列的表 −

  • CID (College ID)
  • UID (University ID)
  • Name
  • Marks

这里,每行代表一名学生。我们使用键来唯一标识特定学生的记录。没有键,我们可能会遇到检索重复记录或无法精确定位特定条目等问题。

超键:键的超集

顾名思义,超键是键的超集。超键是表中任何一组属性组合,能够唯一标识一条记录。即使组合中包含不必要的属性也没关系,只要该组能够唯一标识一行,它就是超键。

以下是超键的重要特性

  • 它可以包含一个或多个属性。
  • 属性组可能包含不必要的属性。
  • 每种组合都必须确保唯一标识。

例如,在我们的Student表中,CIDUIDName都可以单独作为超键,因为它们能够标识记录。像(CID + UID)、(UID + Marks)甚至(CID + UID + Name)这样的组合也是超键,因为它们仍然能够唯一标识行。

超键的数量

表中超键的总数取决于属性。对于我们示例中具有四个属性的表,可能存在多个超键。这些超键可以包括所有四个属性、三属性的子集、二属性的子集,甚至单个属性。它们都用于唯一标识行。

超键的重要性

超键很重要,因为它们构成了标识记录的基础。然而,并非所有超键都实用或可用。许多超键包含冗余属性,它们不会为标识过程增加价值。这就引出了下一类键,即候选键。

候选键:最小超键

候选键是超键的最小子集。简单来说,它是能够唯一标识行的最小属性组。如果从候选键中移除任何一个属性,它就无法再作为唯一标识符。

以下是候选键的重要特性

  • 它是超键,但不包含冗余属性。
  • 每个表可以有一个或多个候选键。
  • 候选键是成为Primary Key的潜在候选。

候选键示例

让我们再次查看Student表。我们有多个超键 −

  • CID
  • UID
  • CID + UID
  • UID + Name

其中,CIDUID是候选键,因为 −

  • 它们能够唯一标识行。
  • 它们不包含任何不必要的属性。

另一方面,像(CID + UID)这样的组合不是候选键,因为额外的属性不会为标识过程增加任何价值。

为什么使用“候选”一词?

使用“candidate”(候选)一词是为了表示这些键是“候选”成为表的主键。

如何决定候选键(Candidate Key)?

要确定候选键(Candidate Keys),我们必须按照以下步骤进行 −

  • 列出所有超键(Super Keys) − 首先识别所有能够唯一标识行的属性组合。
  • 消除冗余 − 移除包含不必要属性的组合。
  • 验证最小性 − 确保每个候选键都是最小性的,即移除任何一个属性都会使其失效。

示例 − 在我们的 Student 表中,CIDUID 是能够唯一标识行的独立属性。这些是候选键(Candidate Keys)。现在,像 (CID + UID) 或 (UID + Marks) 这样的组合是超键(Super Keys),但不是候选键,因为它们包含了不必要的属性。

候选键(Candidate Keys)和主键(Primary Keys)

一旦我们识别出候选键,就需要选择其中一个作为主键(Primary Key)。这个决定通常基于键的作用域和实用性。

如何选择主键(Primary Key)?

假设在我们的 Student 表中,CIDUID 都是候选键。那么,问题来了,应该选择哪一个作为主键?这取决于上下文 −

  • CID 仅限于单个学院。它只能在单一机构内唯一标识学生。
  • UID 却是通用的。它可以跨多个学院标识学生。

鉴于此,UID 是主键的更好选择,因为它的作用域更广、更具意义。

示例 − 超键(Super Key)就像一份购物清单,包含了你可能需要的一切物品。有些物品是必需的,而有些是多余的。候选键(Candidate Key)则是精简后的清单;它只包含我们绝对需要完成任务的必需物品。主键(Primary Key)是我们决定最先购买的最关键物品。

超键(Super Keys)和候选键(Candidate Keys)的区别

总结一下,以下是超键(Super Keys)和候选键(Candidate Keys)的快速比较 −

特征 Super Key Candidate Key
定义 任何能够唯一标识行的属性或属性集 超键的最小子集
冗余 可能包含不必要的属性 没有不必要的属性
数量 通常较多 少于超键的数量
示例 CID + UID, UID + Name CID, UID

结论

在本章中,我们详细解释了数据库中超键(Super Keys)和候选键(Candidate Keys)的概念。从键对于唯一标识行的重要性简要回顾开始,我们涵盖了超键,学习了它们如何包含任何属性组合,甚至是冗余的。

在超键之后,我们转向候选键,它们是超键的最小且实用的子集。我们还涵盖了如何识别候选键,将它们与超键进行比较,并说明了如何使用候选键来决定表的的主键。