函数依赖

关系数据库的函数依赖理论、模式分解与范式设计

Posted by CloudingYu on March 31, 2026

一、函数依赖

1.1 什么是函数依赖

前面通过 ER 图设计的关系表中存在冗余,这些冗余产生的根源在于属性与属性之间存在着一定的语义关系,而在 ER 转换时没有考虑这些关系。

函数依赖(Functional Dependency, FD)是属性与属性之间最重要的一种关系。其形式化定义如下:

设 $R$ 是一个关系模式,$U$ 是 $R$ 上所有属性的集合,$X, Y \subseteq U$。若对于 $R$ 的任意一个当前关系 $r$ 中的任意两个元组 $t$ 和 $s$,只要 $t[X] = s[X]$,就蕴含 $t[Y] = s[Y]$,则称 $X$ 函数确定 $Y$,或 $Y$ 函数依赖于 $X$,记作 $X \to Y$

直观理解:$X$ 能唯一决定 $Y$ 的取值。如果两个元组在 $X$ 上相同,它们在 $Y$ 上也一定相同。

例子:学号 $\to$ 学生姓名,课程号 $\to$ 课程名,学号+课程号 $\to$ 成绩。

函数依赖的存在本身就意味着有冗余的可能——例如同一门课被多个学生选修时,课程名、教师名、教师年龄等信息会随之重复出现多次。

1.2 函数依赖与基数关系

从一对一、一对多的角度看函数依赖:

  • 若 $A$ 到 $B$ 是一对多(一个 $B$ 值对应唯一 $A$ 值),则 $B \to A$ 成立
  • 若 $A$ 到 $B$ 是一对一,则 $A \to B$ 和 $B \to A$ 都成立
  • 若 $A$ 到 $B$ 是多对多,则两个方向的函数依赖都不成立

1.3 逻辑蕴含

设有函数依赖集合 $F$ 和某个函数依赖 $X \to Y$。如果对于 $R$ 的每个满足 $F$ 的关系 $r$,也都满足 $X \to Y$,则称 $F$ 逻辑蕴含 $X \to Y$

换言之:从已知的函数依赖集合 $F$ 中可以推导出新的函数依赖。

1.4 Armstrong 公理系统

Armstrong 公理是函数依赖推理的三条基本规则:

A1 自反律(Reflexivity):若 $Y \subseteq X$,则 $X \to Y$。

证明:因为 $Y$ 是 $X$ 的子集,两个元组在 $X$ 上相同,自然在 $Y$ 上也相同(没有引入新属性)。

A2 增广律(Augmentation):若 $X \to Y$ 在 $R$ 上成立,$Z \subseteq U$,则 $XZ \to YZ$ 在 $R$ 上也成立。

证明(反证法):假设 $XZ \to YZ$ 不成立,则存在两个元组 $t, s$ 在 $XZ$ 上相同但在 $YZ$ 上不同。那么 $t$ 和 $s$ 要么在 $Y$ 上不同(与 $X \to Y$ 矛盾,因为它们在 $X$ 上相同),要么在 $Z$ 上不同(与假设 $t$ 和 $s$ 在 $XZ$ 上相同矛盾)。证毕。

A3 传递律(Transitivity):若 $X \to Y$ 和 $Y \to Z$ 在 $R$ 上成立,则 $X \to Z$ 在 $R$ 上也成立。

证明(反证法):假设存在两个元组 $t, s$ 在 $X$ 上相同但 $Z$ 上不同。由 $X \to Y$ 知它们在 $Y$ 上相同;再由 $Y \to Z$ 知它们在 $Z$ 上也相同,矛盾。

A4~A8 是常用附加规则,可从 A1~A3 推导得出:

  • A4 合并律:若 $X \to Y$ 且 $X \to Z$,则 $X \to YZ$
  • A5 分解律:若 $X \to YZ$,则 $X \to Y$ 且 $X \to Z$

A4 推导:由 $X \to Y$,两边增广 $X$:$XX \to XY$ 即 $X \to XY$;由 $Y \to Z$(但注意这里实际是利用 $X$ 也有 $X \to Z$,再增广可得更多,最后合并得到 $X \to YZ$)。

1.5 平凡与非平凡函数依赖

若 $Y \subseteq X$,则 $X \to Y$ 是平凡的(trivial),它没有带来任何新的属性和属性之间的关系。

若 $Y \not\subseteq X$,则称 $X \to Y$ 为非平凡的(non-trivial)。

平凡的函数依赖没有提供新信息——有 $X$ 就一定有 $X$ 的子集,这在逻辑上是必然成立的。

1.6 闭包

函数依赖集合的闭包 $F^{+}$:给定函数依赖集合 $F$,通过 Armstrong 公理能推导出的所有函数依赖构成的集合称为 $F$ 的闭包。

属性集的闭包 $X^{+}$:在函数依赖集合 $F$ 下,由 $X$ 能函数决定的所有属性的集合

闭包的重要应用:判断两个函数依赖集合是否等价——如果两个 FD 集的闭包相同,则它们等价。

例题:设 $F = {A \to B, B \to C}$ 在关系模式 $R(ABC)$ 上,求 $F^{+}$ 和 $A^{+}$。

  • $F^{+}$ 包含 43 个函数依赖:包括 $A \to A$、$A \to B$、$A \to C$(传递)、$A \to AB$、$A \to BC$、$A \to ABC$……以及所有平凡依赖
  • $A^{+} = {A, B, C}$(因为 $A$ 可推出 $B$,$B$ 推出 $C$)
  • $B^{+} = {B, C}$

定理 4.3:$X \to A_1A_2\ldots A_n$ 成立的充要条件是 $X \to A_i$($i=1,\ldots,n$)每个都成立。

1.7 Armstrong 公理的性质

  • 正确性(Soundness):用推理规则从 $F$ 推导出的所有函数依赖都在 $F^{+}$ 中(不会推导出”错”的)
  • 完备性(Completeness):$F^{+}$ 中的每个函数依赖都可以通过 Armstrong 公理从 $F$ 推导出来

1.8 函数依赖与键

  • 若 $X \to U$($U$ 为全部属性),则 $X$ 是 $R$ 的一个超键(superkey)
  • 若 $X \to U$ 且对 $X$ 的任何真子集都不成立,则 $X$ 是候选键(candidate key)

例子:在学号、姓名、课程号、成绩、老师名、老师年龄的模式中:

  • {学号, 课程号} 是候选键(决定所有属性,且去掉任何一个都不行)
  • {学号, 姓名, 课程号, 老师名} 是超键但不是候选键(去掉姓名、老师名仍能决定所有属性)

1.9 最小函数依赖集

最小函数依赖集(也称为最小覆盖 / canonical cover)是和原 FD 集等价的最精简集合。它需要满足:

  1. 闭包等价:两个 FD 集的闭包相同
  2. 右边最简:每个函数依赖的右边都是单个属性(如 $A \to BC$ 应拆为 $A \to B$ 和 $A \to C$)
  3. 无冗余 FD:去掉任何一条 FD,闭包会发生变化
  4. 左边最简:任何 FD 的左边没有冗余属性(删去任何一个左边属性都会改变闭包)

例题:$F = {A \to BC, B \to C, A \to B, AB \to C}$ 在 $ABC$ 上,求最小依赖集。

解:

  1. 右边拆为单属性:$A \to B, A \to C, B \to C, A \to B, AB \to C$
  2. 去重:$A \to B$ 重复,去掉一个,得 ${A \to B, A \to C, B \to C, AB \to C}$
  3. 去掉冗余:$A \to C$ 可由 $A \to B$ 和 $B \to C$ 推出,去掉;$AB \to C$ 同样可由 $A \to B, B \to C$ 推出,去掉
  4. 最终最小依赖集:${A \to B, B \to C}$

最小函数依赖集是后续第三范式构造算法的基础。


二、模式分解

2.1 为什么需要分解

解决关系表冗余的主要手段就是分解——把一张表分成多张表。

分解定义:设 $R$ 有关系模式,属性集为 $U$。令 $R_1, R_2, \ldots, R_k$ 是 $U$ 的子集,且 $\bigcup_{i=1}^{k} R_i = U$。用 $\rho = {R_1, R_2, \ldots, R_k}$ 代替 $R$ 的过程称为模式分解

分解时属性集合不发生变化——我们没有抛弃任何属性,只是将它们分散到不同表中。

对于具体的关系 $r$:$r_i = \Pi_{R_i}(r)$(对每个子模式做投影)。

2.2 泛关系假设

泛关系假设(Universal Relation Hypothesis):在数据库模式设计中,假设先存在一个包含所有属性的”泛关系”,再通过分解将其分成一个一个的小关系表。

  • 有泛关系假设:分解后再连接回来,理论上能恢复原关系
  • 无泛关系假设:表分别独立存在,连接时可能出现悬挂元组(dangling tuple)——某些元组在其他表中没有对应数据,连接后丢失

例如,某旁听学生在”听课记录表”中有选课记录,但不在”学生信息表”中。当两张表做连接查询时,该旁听学生的信息就会丢失——这就是悬挂元组(dangling tuple)的含义。

2.3 分解要关注的两个问题

  1. 无损分解(Lossless-join Decomposition):分解后再连接回来,不丢失信息
  2. 保持函数依赖(Dependency Preservation):分解后各子模式的函数依赖集与原来的等价

2.4 无损分解

定义:设 $\rho = {R_1, R_2, \ldots, R_k}$ 是 $R$ 的一个分解,若对 $R$ 中满足 $F$ 的每个关系 $r$ 都有:

\[r = \Pi_{R_1}(r) \bowtie \Pi_{R_2}(r) \bowtie \cdots \bowtie \Pi_{R_k}(r)\]

则称 $\rho$ 相对于 $F$ 是无损连接分解

在数据库的语境中,”信息丢失”并非指数据变少了,反而是指数据多出来了。分解后真正丢失的是约束信息——原来某条元组的存在对信息取值范围形成了约束。约束一旦丢失,连接回来就会产生多出”不合法的”元组。

例子

  • 表 $r(A,B,C) = {(1,1,1), (1,2,1)}$,分解为 $AB$ 和 $AC$:
    • $\Pi_{AB}(r) = {(1,1), (1,2)}$,$\Pi_{AC}(r) = {(1,1)}$
    • 连接回来:$(1,1) \bowtie (1,1) = (1,1,1)$,$(1,2) \bowtie (1,1) = (1,2,1)$
    • 与原表相同,是无损的
  • 表 $r(A,B,C) = {(1,4,1), (1,2,3)}$,同样分解为 $AB$ 和 $AC$:
    • $\Pi_{AB}(r) = {(1,4), (1,2)}$,$\Pi_{AC}(r) = {(1,1), (1,3)}$
    • 连接回来:产生 4 条元组 $(1,4,1), (1,4,3), (1,2,1), (1,2,3)$
    • 比原来多了 $(1,4,3)$ 和 $(1,2,1)$,是有损的

2.5 $M_\rho(r)$ 及其性质

定义 $M_\rho(r) = \Pi_{R_1}(r) \bowtie \Pi_{R_2}(r) \bowtie \cdots \bowtie \Pi_{R_k}(r)$,即先投影再连接的结果。

性质:

  1. $r \subseteq M_\rho(r)$:原关系的每条元组拆开再连回来,仍然在结果中
  2. 幂等性:$\Pi_{R_i}(M_\rho(r)) = \Pi_{R_i}(r)$——再投影回去,各部分不变

可以通过”带子”的比喻来理解:把每条元组想象成一根带子,分解就是按一定位置将其裁成几段(可能有重叠部分)。这些片段来自同一根带子,公共部分相同,因此连接时能拼回原样。但如果两根不同的带子裁开后,小段的公共部分恰好相同,拼回时就会出错——这就是有损分解产生多余元组的原因。幂等性则意味着:每根小段在连接过程中并不会改变,再次裁开时,仍是原来的那些片段。

2.6 检验无损分解的矩阵方法

给定关系模式 $R(ABCD)$,分解 $\rho = {AB, BC, CD}$,函数依赖集 $F = {B \to A, C \to D}$:

  1. 构造初始矩阵:行为子模式,列为属性。若属性在子模式中,填 $a_j$($j$ 为该属性列序号);否则填 $b_{ij}$
  A B C D
AB a1 a2 b13 b14
BC b21 a2 a3 b24
CD b31 b32 a3 a4
  1. 根据 FD 修改:遍历每个 $X \to Y$,找 $X$ 上相同的行,使其 $Y$ 上的值也相同(用 $a$ 替代 $b$)

    • $B \to A$:BC 和 AB 在 $B$ 上都是 a2,但 A 上 AB 是 a1、BC 是 b21,不满足 $B \to A$。将 b21 改为 a1
    • $C \to D$:BC 和 CD 在 $C$ 上都是 a3,但 D 上 BC 是 b24、CD 是 a4。将 b24 改为 a4
  2. 判断:若最终表中有一整行全是 $a$(即 $a_1 a_2 \ldots a_n$),则是无损分解;否则是有损的。

本方法的核心思路:以某一行为基础,利用函数依赖一步步推断出其他属性值。如果最终能推断出一个包含所有属性完整值的”行”,说明可以通过连接恢复完整元组。

2.7 定理 4.7 与 4.8(无损分解的判定条件)

定理 4.7:设 $\rho = {R_1, R_2}$ 是 $R$ 的一个分解,$F$ 是 $R$ 上的函数依赖集。$\rho$ 相对于 $F$ 是无损分解的充要条件是:

\[(R_1 \cap R_2) \to (R_1 - R_2) \quad \text{或} \quad (R_1 \cap R_2) \to (R_2 - R_1)\]

定理 4.8:若 $X \to Y$ 在 $R$ 上成立,且 $X \cap Y = \emptyset$,则分解 $\rho = {R - Y, XY}$ 是无损分解。

直观理解:把 $X$(两个子模式的交集部分)看作基础,利用函数依赖 $X \to Y$,从 $R_2$ 中的 $X$ 值可以唯一确定 $R_1$ 中 $Y$ 的值,从而无损地连接回去。

定理 4.8 是后续所有范式分解算法的核心——每一步分解都基于此定理来保证无损性。

2.8 保持函数依赖

投影:$F$ 在 $Z \subseteq U$ 上的投影 $\Pi_Z(F)$ 定义为 ${X \to Y \mid X \to Y \in F^{+} \text{ 且 } XY \subseteq Z}$。

保持函数依赖:分解 $\rho$ 称为保持函数依赖的,如果 $(\bigcup_{i=1}^{k} \Pi_{R_i}(F))^{+} = F^{+}$。

直观理解:分解后,原来所有的函数依赖信息都能在各子模式中”找到”——要么直接保留在某张表中,要么可以通过各表的 FD 推导出来。

例子:$F = {WNO \to WS, WNO \to WG}$,分解为 ${WNO, WS}$ 和 ${WNO, WG}$。两张表各保留一条 FD,合起来等价于原 FD 集,是保持依赖的。

2.9 综合实例:四种分解情况

设 $R(ABC)$,分解 $\rho = {AB, AC}$,在不同的函数依赖集下的表现:

FD 集 是否无损 是否保持依赖 原因
$A \to B$ 无损 保持 $A \to B$ 在 AB 表中保留,$A$ 在 AB 和 AC 的交集中
$A \to C, B \to C$ 无损 不保持 $A \to C$ 在 AC 中保留,但 $B \to C$ 丢失(没有表同时含 $B$ 和 $C$)
$B \to A$ 有损 保持 $B \to A$ 在 AB 中保留,但从 AC 不能确定 $B$,连接时产生多余元组
$B \to A, C \to B$ 有损 不保持 从 AC 不能确定 $B$(因为没 BC),$C \to B$ 丢失

三、关系范式

3.1 范式概述

范式是评估关系模式”好坏”的标准,主要从冗余角度来评价。分为四个等级:

  • 1NF:属性值都是不可再分的原子值
  • 2NF:消除非主属性对候选键的部分函数依赖
  • 3NF:消除非主属性对候选键的传递函数依赖
  • BCNF:消除所有属性(包括主属性)对候选键的传递函数依赖

数据库设计的评价标准除了冗余以外,还涉及性能等因素,本章只关注冗余问题。冗余和查询效率有时是一对矛盾——表分得越细,冗余越少,但查询时需要更多的连接操作。

3.2 第一范式(1NF)

定义:关系模式中每个属性值都是不可再分的原子值,则属于第一范式。

违反 1NF 的例子:某人的电话号码字段包含两个号码(即属性值为集合),不满足 1NF。

修正方法:拆成两个独立的字段(如电话号码1、电话号码2),或拆成多行。

1NF 是关系数据库最基本的要求。

3.3 第二范式(2NF)

动机

考虑模式 $R(学号, 课程号, 成绩, 老师名, 老师地址)$,主键为 {学号, 课程号}。

冗余产生的原因:课程号 $\to$ 老师名 和 课程号 $\to$ 老师地址,即老师名和老师地址只依赖于主键的一部分(课程号),不需要整个主键来决定。

定义

  • 完全函数依赖:若 $X \to Y$,且对 $X$ 的任何真子集 $X’$,$X’ \to Y$ 都不成立,则称 $Y$ 对 $X$ 是完全函数依赖
  • 部分函数依赖(局部依赖):若 $X \to Y$,但存在 $X$ 的真子集 $X’$ 使得 $X’ \to Y$ 也成立,则称 $Y$ 对 $X$ 是部分函数依赖。
  • 主属性:出现在任何候选键中的属性。
  • 非主属性:不出现在任何候选键中的属性。

2NF 定义:若 $R \in 1NF$,且每个非主属性都完全函数依赖于 $R$ 的每个候选键,则 $R \in 2NF$。

分解方法

对于违反 2NF 的局部依赖 $W \to Z$($W$ 是候选键的真子集,$Z$ 是非主属性),按定理 4.8 分解为 ${R-Z, WZ}$。

具体到上面例子:将 {课程号, 老师名, 老师地址} 分离为新表,剩余 {学号, 课程号, 成绩} 为另一张表。

3.4 第三范式(3NF)

动机

即使满足 2NF,仍可能存在冗余。考虑模式 $R(课程号, 老师名, 老师地址)$,候选键为 {课程号}。

  • 课程号 $\to$ 老师名(完全依赖,没问题)
  • 老师名 $\to$ 老师地址

于是 课程号 $\to$ 老师名 $\to$ 老师地址,形成了传递依赖。如果一位老师上多门课,他的地址会重复多次。

定义

传递函数依赖:若 $X \to Y$、$Y \to A$、$Y \not\to X$,且 $A \not\subseteq Y$,则称 $X \to A$ 是传递的

3NF 定义:若 $R \in 1NF$,且每个非主属性都不传递依赖于 $R$ 的任何候选键,则 $R \in 3NF$。

注意:3NF 自然也是 2NF,因为部分依赖是传递依赖的特例。($W \to X’ \to A$,其中 $W$ 是候选键,$X’$ 是真子集)

3NF 的等价判定

$R \in 3NF$ 的充要条件是:对 $R$ 中每个非平凡函数依赖 $X \to A$($A$ 为单属性),至少满足以下之一:

  1. $A \subseteq X$(平凡依赖)
  2. $X$ 是 $R$ 的超键
  3. $A$ 是主属性

违反 3NF 的三种情况

  1. $A$ 是非主属性,依赖候选键的一部分(实际上违反的是 2NF)
  2. $A$ 是非主属性,中间属性与键有相交但不属于键(标准 3NF 违反)
  3. $A$ 是非主属性,中间属性与键完全无交集(标准 3NF 违反)

分解方法

对于违反 3NF 的传递依赖($X \to Z$,$Z$ 是非主属性且 $X$ 不是候选键),分解为 ${R-Z, XZ}$。

具体到上面例子:分解为 {课程号, 老师名} 和 {老师名, 老师地址}。

3.5 从最小依赖集构造 3NF(自底向上方法)

与前面”自顶向下逐层分解”不同,该方法从最小函数依赖集出发构造

  1. 求函数依赖集合的最小依赖集 $F_m$
  2. 将 $F_m$ 中左边相同的函数依赖合并(如 $X \to Y$ 和 $X \to Z$ 合并为 $X \to YZ$)
  3. 每个合并后的 $X \to Y$ 产生一个关系模式 $R_i = XY$
  4. 如果这些关系模式中不包含原 $R$ 的任何候选键,则额外添加一个包含候选键的关系模式

这样得到的分解既是 3NF 的,也是无损的。

例题:$R(ABCDE)$,最小依赖集 $F_m = {A \to B, C \to D}$,候选键为 $ACE$。

  • $F_m$ 的左边不同,各产生一个模式:$R_1 = AB$,$R_2 = CD$
  • 候选键 $ACE$ 不在这两个模式中,单独添加:$R_3 = ACE$
  • 最终分解:${AB, CD, ACE}$,无损且 3NF

3.6 BC 范式(Boyce-Codd Normal Form, BCNF)

动机

3NF 只要求非主属性不传递依赖。但如果主属性之间存在一对一的关系,也可能产生冗余。

经典例题:仓库(仓库名, 管理员, 物品名, 数量)

  • 一个仓库有一个管理员,一个管理员只在一个仓库工作:仓库名 $\to$ 管理员,管理员 $\to$ 仓库名
  • 候选键:{管理员, 物品名} 或 {仓库名, 物品名}
  • 所有属性都是主属性,没有非主属性,所以它已经是 3NF
  • 但仍存在冗余:仓库名和管理员之间的关联信息被重复存储

定义

BCNF 定义:若 $R \in 1NF$,且对 $R$ 中每个非平凡函数依赖 $X \to Y$,$X$ 都是 $R$ 的超键,则 $R \in BCNF$。

换言之:所有属性(不只是非主属性)都不能传递依赖于非超键的属性集。

BCNF $\Rightarrow$ 3NF,但反之不成立。

分解方法

对于违反 BCNF 的 $X \to Y$($X$ 不是超键),分解为 ${R-Y, XY}$。

具体到仓库例子:分解为 {仓库名, 管理员} 和 {仓库名, 物品名, 数量}(或 {管理员, 物品名, 数量})。

3.7 范式总结与实践建议

范式 解决的问题 关注点
1NF 属性值原子性 基础要求
2NF 部分依赖 非主属性必须完全依赖候选键
3NF 传递依赖(非主属性) 非主属性不传递依赖候选键
BCNF 所有传递依赖 任何 FD 的左边必须是超键

在实际应用中,第三范式通常是相对比较合适的水平。分解到 BCNF 有时会把关系分得过散,导致查询时需要频繁连接,降低性能。应根据应用系统中数据访问的特点来做权衡——经常一起访问的数据,适合保留在同一张表中。


四、多值依赖与第四范式

4.1 多值依赖的引入

即使达到 BCNF,仍可能存在冗余。考虑模式:

课程(课程名, 选修学生, 先导课程)

  • C4 这门课有先导课程 C1、C2,有学生 S1、S2
  • 为了保持完整信息,需要:S1-C4-C1, S1-C4-C2, S2-C4-C1, S2-C4-C2(4 条元组)
  • S3 选 C6,C6 有 3 门先导课,S3 选 C6 的信息被重复了 3 次

原因:选修学生和先导课程是两个完全无关的信息,强行放在一起产生了笛卡尔积效应。

4.2 多值依赖的定义

定义 1:设 $U$ 是关系模式 $R$ 的属性集,$X, Y \subseteq U$,$Z = U - X - Y$。若对任意两个元组 $t_1(x, y_1, z_1)$ 和 $t_2(x, y_2, z_2)$ 在 $r$ 中,也存在元组 $t_3(x, y_1, z_2)$ 和 $t_4(x, y_2, z_1)$,则称 $X$ 多值决定 $Y$,记作 $X \to\to Y$

直观理解:固定 $X$ 的值,$Y$ 和 $Z$ 的取值是彼此独立的——$Y$ 取什么值和 $Z$ 取什么值之间没有约束。

定义 2(等价表述):若对 $r$ 中任意两个元组 $t$ 和 $s$ 满足 $t[X] = s[X]$,则存在元组 $u$ 使得:

  • $u[X] = t[X] = s[X]$
  • $u[Y] = t[Y]$
  • $u[Z] = s[Z]$(其中 $Z = U - X - Y$)

4.3 多值依赖的推理规则

多值依赖和函数依赖一起,满足以下推理规则:

规则 内容
FD-自反 若 $Y \subseteq X$,则 $X \to Y$
FD-增广 $X \to Y \Rightarrow XZ \to YZ$
FD-传递 $X \to Y, Y \to Z \Rightarrow X \to Z$
MVD-互补 $X \to\to Y \Rightarrow X \to\to (U - X - Y)$
MVD-增广 $X \to\to Y, V \subseteq W \Rightarrow XW \to\to YV$
MVD-传递 $X \to\to Y, Y \to\to Z \Rightarrow X \to\to (Z - Y)$
FD→MVD $X \to Y \Rightarrow X \to\to Y$(函数依赖是多值依赖的特例)

MVD 传递性的证明思路(反证法):假设 $X \to\to (Z-Y)$ 不成立,即存在 $t$ 和 $s$ 在 $X$ 上相同但不存在满足条件的 $u$。利用 $X \to\to Y$ 构造元组 $v$,再利用 $Y \to\to Z$ 构造元组 $w$。然后验证 $w$ 恰好满足 $u$ 的三个条件(在 $X$ 上与 $t$ 相同、在 $Z-Y$ 上与 $t$ 相同、在剩余部分与 $s$ 相同),从而导出矛盾。

4.4 第四范式(4NF)

若 $R \in 1NF$,且对 $R$ 中每个非平凡多值依赖 $X \to\to Y$,$X$ 都是 $R$ 的超键,则 $R \in 4NF$。

分解方法:将课程(课程名, 学生, 先导课程) 分解为:

  • {课程名, 学生}(选课信息)
  • {课程名, 先导课程}(课程先导信息)