关系模式设计之规范形式
函数依赖
(1) 函数依赖的定义
设 R(U)
是属性集合 $ U = {A_1,A_2,…,A_n} $ 上的一个关系模式,X
, Y
是 U
上的两个子集。若对 R(U)
的任意可能关系 r
,r
中不存在两个元组在 X
中的属性值相等而在 Y
中的属性值不等,则称 “X函数决定Y” 或 **”Y函数依赖于X”**,记作 $ X \to Y $。
示例
属性全集:
$ U = {\text{学号}, \text{姓名}, \text{年龄}, \text{班号}, \text{班长}, \text{课号}, \text{成绩}} $
▢ $ \text{学号} \to {\text{姓名}, \text{年龄}} $
▢ $ \text{班号} \to \text{班长} $
▢ $ {\text{学号}, \text{课号}} \to \text{成绩} $ z
设计关系模式时
除给出属性全集外,还需明确给出 数据依赖集合。
注
函数依赖的成立取决于:
- 问题领域的限定和分析;
- 业务规则的正确理解。
示例说明:
- 若问题领域中学生无重名,则存在:
$ \text{姓名} \to {\text{年龄}, \text{家庭住址}} $ - 若问题领域中学生有重名,则上述依赖不成立。
函数依赖的特性
非平凡函数依赖
对 $ X\rightarrow Y $,但 $ Y\subsetneq X $,则称 $ X\rightarrow Y $ 为非平凡的函数依赖。决定因素
若 $ X\rightarrow Y $,则任意两个元组在X上值相等时,在Y上值必然相等,称X为决定因素。相互函数依赖
若 $ X\rightarrow Y $ 且 $ Y\rightarrow X $,则记作 $ X\leftrightarrow Y $。非函数依赖表示
若Y不函数依赖于X,则记作 $ X\not\rightarrow Y $。依赖的适用范围
- 基于模式R:对任意关系r成立
- 基于具体关系r:仅对某一特定关系r成立
特殊情形下的恒等依赖
如一关系r的某属性集X,r中不存在X值相等的两个元组,则 $ X\rightarrow Y $ 恒成立。
函数依赖类型:完全依赖与部分依赖
[Definition] 部分或完全函数依赖
在关系模式 R(U)
中:
依赖类型 | 定义 | 表示法 |
---|---|---|
完全函数依赖 | 若 X → Y 且对 X 的任意真子集 X' 都有 X' ↛ Y | $ X \xrightarrow{f} Y $ |
部分函数依赖 | 若 X → Y 但存在 X 的真子集 X' 使得 X' → Y | $ X \xrightarrow{p} Y $ |
概念解析:
完全依赖的核心特征
- 决定因素
X
必须完整才能确定Y
- 移除
X
的任意属性都会破坏依赖关系
示例:
$ {\text{学号}, \text{课程号}} \xrightarrow{f} \text{成绩} $
- 决定因素
部分依赖的识别
Y
可由X
的某个真子集单独决定- 存在属性冗余的决定因素
示例:
$ {\text{学号}, \text{姓名}} \xrightarrow{p} \text{年龄} $
(因 $\text{学号} → \text{年龄}$ 已成立)
视觉提示:
- 完全依赖符号:$ \xrightarrow{f} $ (f: full)
- 部分依赖符号:$ \xrightarrow{p} $ (p: partial)
- 非函数依赖符号:$ \not\rightarrow $
传递函数依赖
[Definition]
在关系模式 R(U)
中,设 X
, Y
, Z
是 U
的子集。若满足:
- $ X \to Y $
- $ Y \to Z $
- $ Y \not\subset X $(即 Y 不是 X 的子集)
- $ Z \not\subset Y $
- $ Z \not\subset X $
- $ Y \not\to X $(即 Y 不能函数决定 X)
则称 Z 传递函数依赖于 X,记作 $ X \xrightarrow{t} Z $(t: transitive)。
核心条件解析:
条件 | 数学表示 | 语义说明 |
---|---|---|
依赖性 | $ X \to Y $ 且 $ Y \to Z $ | 存在依赖链传递关系 |
非包含性 | $ Y \not\subset X $ $ Z \not\subset Y $ $ Z \not\subset X $ | 排除因集合包含关系导致的依赖 |
非相互依赖 | $ Y \not\to X $ | 确保 Y 不是 X 的等价属性集 |
传递依赖的本质:当且仅当依赖不能通过直接路径($ X \to Z $)建立,但可通过中间属性 Y 间接推导时成立。
示例说明:
学生选课系统中:
$ \text{学号} \to \text{班号} $
$ \text{班号} \to \text{班长} $
且满足非包含条件:
- 班号 ⊄ 学号
- 班长 ⊄ 班号
- 班长 ⊄ 学号
- 班号 ↛ 学号
则 $ \text{学号} \xrightarrow{t} \text{班长} $
[Definition] 候选键
设 $ K $ 为关系模式 $ R(U) $ 中的属性或属性组合,若满足:
$$ K \xrightarrow{f} U $$
则称 $ K $ 为 $ R(U) $ 上的 候选键 (Candidate Key)。
说明:
主键选择
可任选一候选键作为 $ R $ 的 主键 (Primary Key)主属性划分
- 包含在任一候选键中的属性 → 主属性 (Prime Attribute)
- 未包含在任何候选键中的属性 → 非主属性 (Non-Prime Attribute)
超键定义
若 $ S \supset K $($ S $ 真包含 $ K $)且 $ K $ 是候选键 →
$ S $ 为 超键 (Super Key)
概念关系图解
graph LR
A[超键] --> B[候选键] --> C[主键]
B --> D[主属性]
C --> D
A -.-> E[非主属性]
外来键
若R(U)中的属性或属性组合X并非R的候选键,但X却是另一关系的候选键,则称X为R的外来键(Foreign Key),简称外键。
第一范式
若关系模式R(U)中关系的每个分量都是不可分的数据项(值、原子),则称R(U)属于第一范式,记为:R(U) ∈1NF。
1NF要求关系中不能有复合属性、多值属性及其组合。
将 非1NF转换为 1NF情况:将复合属性处理为简单属性;将多值属性与关键字单独组成一新的关系。
第二范式
若R(U)∈ 1NF 且 U中的每一非主属性完全函数依赖于候选键,则称R(U)属于第二范式,记为:R(U)∈2NF。
第二范式消除了非主属性对候选键的部分依赖。
第三范式
第三范式 (3NF) 定义 若关系模式 $R(U, F) \in \text{2NF}$ 且 $R$ 中不存在以下情况:
- 候选键 $X$
- 属性组 $Y \subseteq U$
- 非主属性 $A$
- 满足: 1. $A \notin X$ 且 $A \notin Y$ 2. $Y \not\subseteq X$ (Y 不包含于 X) 3. $Y \nrightarrow X$ (Y 不函数决定 X) 4. $X \rightarrow Y$ 且 $Y \rightarrow A$ 则称 $R(U)$ 属于第三范式,记为: $$R(U) \in \text{3NF}$$
第3范式消除了非主属性对侯选键的传递依赖
关系模式设计如满足第3范式,则一定能满足第2范式;反之则不然。
BCNF
若 $R(U, F) \in \text{1NF}$,且对于任何 $X \rightarrow Y \in F$(或 $X \rightarrow A \in F$),当 $Y \not\subseteq X$(或 $A \notin X$)时,$X$ 必含有候选键,则称 $R(U)$ 属于 Boyce-Codd 范式,记为:$$R(U) \in \text{BCNF}$$
[定理] 若 $R(U,F) \in \text{BCNF}$,则 $R(U,F) \in \text{3NF}$。
证明:
(反证法)假设 $R(U,F) \in \text{BCNF}$ 但 $R(U,F) \notin \text{3NF}$。
依据 3NF 定义,必存在传递依赖:
$$\exists X \rightarrow Y,\ Y \rightarrow A$$
其中:
- $X$ 是候选键
- $A \notin X$ 且 $A \notin Y$
- $Y \nrightarrow X$(即 $X \notin Y$)
由于 $A \notin Y$,$Y \rightarrow A$ 违反 BCNF 的定义(BCNF 要求所有非平凡函数依赖的左侧必须包含候选键,但 $Y$ 不是候选键)。
故假设矛盾,定理得证。
证毕。
→ 总结:存在传递依赖或不满足 3NF 的关系模式,必定不满足 BCNF。
多值依赖(MVD)
定义:
设 $X, Y \subseteq U$, $Z = U - X - Y$,
$X \to\to Y$ 成立当且仅当:
对任意 $t_1, t_2$ 满足 $t_1[X] = t_2[X]$,
必存在 $t_3, t_4$ 使得:
- t3[X]=t4[X]=t1[X]
- t3[Y]=t1[Y] 且 t3[Z]=t2[Z]
- t4[Y]=t2[Y] 且 t4[Z]=t1[Z]
关键特性
性质 | 规则 |
---|---|
互补性 | $X \to\to Y \Rightarrow X \to\to Z$ |
FD蕴含MVD | $X \to Y \Rightarrow X \to\to Y$ |
超键条件 | $X \to\to Y$ 中 $X$ 是超键 ⇒ 平凡 MVD |
典型案例:课程分配表
Course | Teacher | Textbook |
---|---|---|
Math | Alice | Calculus |
Math | Alice | Algebra |
Math | Bob | Calculus |
Math | Bob | Algebra |
MVD存在:
$Course \to\to Teacher$
$Course \to\to Textbook$(互补性)
graph LR
A[1NF] --> B[2NF]
B --> C[3NF]
C --> D[BCNF]
D --> E[4NF]
subgraph MVD处理
D -- 存在非平凡MVD --> E
end
subgraph FD处理
A -- 消除部分依赖 --> B
B -- 消除传递依赖 --> C
C -- 消除主属性依赖 --> D
end
**第四范式 (4NF) **
设关系模式 $R(U) \in \text{1NF}$,$D$ 是其上的一组依赖(包括函数依赖和多值依赖)。若对任意非平凡多值依赖 $X \to\to Y \in D$ 满足以下条件:
- $Y \neq \phi$ (Y 非空)
- $Y \not\subset X$ (Y 不包含于 X)
- $XY \neq U$ (X 和 Y 的组合不等于全集)
必有 $X$ 为超键(即 X 包含候选键),则称 $R(U)$ 满足第四范式,记为:
$$R(U) \in \text{4NF}$$
如果有多值依赖,则一定依赖于候选键
第四范式消除了非主属性对候选键以外属性的多值依赖。
$R(U) \in \text{4NF}$ 当且仅当:
- $R \in \text{BCNF}$
- 对所有非平凡 MVD $X \to\to Y$,$X$ 必须是超键
分解方法
若存在非平凡 MVD $X \to\to Y$,可无损分解为:
$$R_1(X \cup Y), \quad R_2(X \cup Z) \quad (Z = U - X - Y)$$
范式关系 | 条件 | 结论 |
---|---|---|
4NF→BCNF | 无限制 | 恒成立 |
BCNF→4NF | 仅存在函数依赖(无MVD) | 等价 |
BCNF→4NF | 存在多值依赖(MVD) | 不成立 |
graph LR
BCNF -- 存在多值依赖 --> 需升级至 --> 4NF
4NF -- 仅函数依赖 --> 等价于 --> BCNF
4NF -- 无限制 --> 严格强于 --> BCNF
关系的第4范式和弱第4范式
[Definition] W4NF
设关系模式 $R(U) \in \text{3NF}$,若 $R$ 上的任何互补多值依赖:
- $X \twoheadrightarrow Y$
- $X \twoheadrightarrow (R - X - Y)$
满足约束条件:
- $XY \neq U$ ($X$ 与 $Y$ 组合非全集)
- $Y - X \neq \varnothing$ ($Y$ 有独立于 $X$ 的属性)
则必有一个是多值依赖是函数依赖(即 $X \to Y$ 或 $X \to (R-X-Y)$),此时称 $R$ 是弱第四范式的,记为:
$$R \in \text{W4NF}$$
注:
- W4NF 不一定是 BCNF
- BCNF 也不一定是 W4NF
- $\twoheadrightarrow$ 表示多值依赖符号(常见替代:
X \to\to Y
)