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

3.6.5 范式判断-02

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

3NF:消除传递依赖

3NF 建立在 2NF 基础上,要求非主属性不能传递依赖于候选键。典型结构是:

KA,AB

其中 K 是候选键,AB 都是非主属性,则 B 通过 A 传递依赖于 K

例如:

学生(学号,姓名,系号,系名,系位置)

函数依赖为:

学号姓名,系号系号系名,系位置

候选键是 学号。因为候选键是单属性,所以不存在部分依赖,至少满足 2NF;但 系名系位置 通过非主属性 系号 传递依赖于 学号,所以不满足 3NF。

传递依赖造成什么问题

学生表中每个学生都会重复存储所属系的系名和位置。一旦“计算机系”更名或搬迁,要修改所有该系学生记录;如果新建一个系但还没有学生,无法插入系信息;删除最后一个该系学生,也可能丢失系信息。

改进方式仍然是“哪里不满足就拆哪里”:

学生(学号,姓名,系号)(系号,系名,系位置)

拆分时要把 系号 保留在学生关系中,因为它既是学生所属系的外键,也是连接回系信息的桥。

BCNF:每个决定因素都足够强

BCNF 比 3NF 更严格。它要求每个非平凡函数依赖的决定因素都包含某个候选键。常见教材会写成“每个决定因素都是候选键”,软考讲法中常强调“决定因素包含候选码”。

设关系:

R(S,T,J)

含义是学生 S、教师 T、课程 J。业务规则:

  1. 一个教师只教一门课,所以 TJ
  2. 学生选定课程后对应一个教师,所以 SJT

候选键有两个:

SJ,ST

因为 S,J,T 都出现在某个候选键中,所以没有非主属性,至少满足 3NF。但是检查 BCNF:

函数依赖决定因素是否包含候选键结论
TJT不包含 SJST破坏 BCNF
SJTSJ本身就是候选键满足 BCNF 要求

只要有一个非平凡依赖的决定因素不满足要求,就不属于 BCNF。因此该模式最高到 3NF。

快速判断表

范式必须先满足继续检查什么不满足时最高到
1NF属性是否原子未达到 1NF
2NF1NF非主属性是否部分依赖候选键1NF
3NF2NF非主属性是否传递依赖候选键2NF
BCNF3NF每个决定因素是否包含候选键3NF

两个实用捷径:

  1. 候选键是单属性时,不会因部分依赖破坏 2NF。
  2. 没有非主属性时,至少满足 3NF,但仍可能不满足 BCNF。

做题路线

  1. 求候选键,列出主属性和非主属性。
  2. 按 1NF、2NF、3NF、BCNF 顺序判断,不能跳级。
  3. 3NF 重点看“候选键 -> 非主属性 -> 非主属性”的链。
  4. BCNF 不再只盯非主属性,而要逐条看函数依赖左部是否足够成为候选键级别的决定因素。

例题

单选
BCNF 的核心要求是:
单选
非主属性传递依赖于候选键,会破坏:

自查要点

  1. 3NF 主要排除哪类依赖?
  2. BCNF 为什么比 3NF 更严格?
  3. “决定因素不是候选键”会影响哪个范式?