Skip to content
难度基础(★)
建议时长45分钟

3.6.3 规范化理论基本概念-02

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

候选键为什么是范式题的入口

候选键是能够唯一标识元组且没有冗余的属性集。后面判断 2NF、3NF、BCNF 都要先知道候选键,因为只有知道候选键,才能区分主属性和非主属性,才能判断“非主属性是否部分依赖或传递依赖于候选键”。

概念精确定义做题判断
超键能推出关系模式全部属性的属性集闭包包含全属性
候选键最小超键是超键,且去掉任一属性后不再是超键
主键从候选键中选定的一个业务或实现选择
主属性出现在任一候选键中的属性所有候选键取并集
非主属性不出现在任何候选键中的属性范式异常检查重点

候选键可以有一个,也可以有多个;可以是单属性,也可以是多属性组合。主属性不是“主键里的属性”,而是“任一候选键里的属性”。

属性闭包法

属性闭包是从某个属性集出发,根据函数依赖能推出的全部属性,记作 X+。判断一个属性集 X 是否为超键,就看:

X+=U

其中 U 是关系模式的全部属性集。

计算步骤:

  1. 初始令 X+=X
  2. 扫描函数依赖集,若某条依赖 YZ 的左部 YX+,则把 Z 加入 X+
  3. 重复扫描,直到闭包不再增长。
  4. 若闭包包含全部属性,X 是超键;再检查是否最小,判断候选键。

图示法:从入度为 0 的属性开始

字幕中给了更适合选择题的图示法:把函数依赖画成有向图,A -> B 就画成 A 指向 B。入度为 0 的属性没有任何其他属性能推出,因此必须进入候选键,否则候选键永远推不出它。

mermaid
flowchart LR
  A1["A1"] --> A2["A2"]
  A3["A3"] --> A2
  A2 --> A3
  A2 --> A4["A4"]

例如依赖为:

A1A2,A3A2,A2A3,A2A4

A1 入度为 0,必须作为候选键的一部分。从 A1 出发可推出 A2,再由 A2 推出 A3A4,所以:

A1+={A1,A2,A3,A4}

因此 A1 就是候选键。若再加上其他属性,就会变成有冗余的超键,不是候选键。

入度法的边界

图示法很快,但要理解它的边界:

情况处理
入度为 0 的属性能遍历全部属性这些属性集通常就是候选键
入度为 0 的属性不能遍历全部属性尝试加入既有入度又有出度的中间属性
多个中间属性可选分别计算闭包,找最小组合
存在复合左部依赖图示法要谨慎,闭包法更稳

所以正式书写时推荐用闭包法验证,图示法用于快速筛选候选属性。

外键与参照完整性

字幕中顺带复习了外键。外键通常是本关系中的属性,用来引用另一个关系的主键或候选键,体现参照完整性。例如:

学生(学号,姓名,专业号)专业(专业号,专业名)

学生表中的 专业号 是外键,它要求每个学生所属专业应在专业表中存在。外键表达的是关系模式之间的联系,不负责唯一标识本关系中的元组。

做题路线

  1. 先找不出现在任何依赖右部的属性,它们通常必须包含在候选键中。
  2. 对候选属性集求闭包,闭包能覆盖全部属性就是超键。
  3. 若闭包不够,尝试加入中间属性;若闭包足够,尝试删除属性验证最小性。
  4. 列出所有候选键后,再判断主属性和非主属性。
  5. 后续范式题不要跳过这一步,否则部分依赖和传递依赖都容易误判。

例题

单选
不含多余属性、能够唯一标识元组的属性集称为:
单选
判断某属性集能否推出全部属性,常用:

自查要点

  1. 超键和候选键有什么区别?
  2. 属性闭包怎么用于求候选键?
  3. 主属性和非主属性如何判断?