第六章 关系数据理论
6.1 问题的提出
在第2章关系数据库中已经讲过,一个关系模式应当是一个五元组。
R
(
U
,
D
,
D
O
M
,
F
)
R(U,D,DOM,F)
R(U,D,DOM,F)
这里:
- 关系名R是符号化的元组语义。
- U为一组属性。
- D为属性组U中的属性所来自的域。
- DOM为属性到域的映射。
- F为属性U上的一组数据依赖。
在本章中把关系模式看作一个三元组:
R
(
U
,
F
)
R(U,F)
R(U,F)
当且仅当U上的一个关系r满足F时,r称为关系模式R<U,F>的一个关系。
作为一个二维表,关系要符合一个最基本的条件:每一个分量必须是不可分的数据项。满足了这个条件的关系模式就属于第一范式(1NF)。
数据依赖的类型有多种,其中最重要的是 函数依赖 和 多值依赖 。
关系模式存在的问题:
- 数据冗余太大
- 更新异常
- 插入异常
- 删除异常
一个好的模式应当不会发生插入异常、删除异常、和更新异常,数据冗余应尽可能少。
6.2 规范化
6.2.1 函数依赖
定义:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系 r,r 中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称 “X函数确定Y” 或 “Y函数依赖于X”,记作 X→Y。
注意:函数依赖不是指关系模式R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。
-
X → Y X\rightarrow Y X→Y,但 Y ⊈ X Y\nsubseteq X Y⊈X,则称 X → Y X\rightarrow Y X→Y 是非平凡的函数依赖。
-
X → Y X\rightarrow Y X→Y,但 Y ⊆ X Y\subseteq X Y⊆X,则称 X → Y X\rightarrow Y X→Y 是平凡的函数依赖。
-
若 X → Y X\rightarrow Y X→Y,则 X X X 称为这个函数依赖的决定属性组,也成为决定因素。
-
若 X → Y X\rightarrow Y X→Y, Y → X Y\rightarrow X Y→X,则记作 X ← → Y X\leftarrow\rightarrow Y X←→Y。
-
若Y不函数依赖于X,则记作 X ↛ Y X\nrightarrow Y X↛Y。
在R(U)中,如果 X → Y X\rightarrow Y X→Y,并且对于X的任何一个真子集X’,都有 X ’ → Y X’\rightarrow Y X’→Y,则称Y对X完全函数依赖。
若 X → Y X\rightarrow Y X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。
传递函数依赖,直接函数依赖
6.2.2 码
码是关系模式中的一个重要概念。
定义:设K为R<U,F>中的属性或属性组合,若U完全函数依赖于K,则K为R的侯选码。若候选码多于一个,则选定其中的一个做为主码。
包含在任何一个候选码中的属性称为主属性;不包含在任何候选码中的属性称为非主属性或非码属性。
6.2.3 范式
关系数据库中的关系必须是要满足一定的要求,满足不同程度要求的为不同范式。满足最低要求的叫第一范式,简称1NF;在第一范式中满足进一步要求的为第二范式,其余以此类推。
范式是符合某一种级别的关系模式的集合。即R为第几范式就可以写成 R ∈ x N F R\in xNF R∈xNF。
各范式之间的关系有:
5
N
F
⊂
4
N
F
⊂
B
C
N
F
⊂
3
N
F
⊂
2
N
F
⊂
1
N
F
5NF\subset 4NF\subset BCNF\subset 3NF\subset 2NF\subset 1NF
5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
5NF规范化程度最高。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
6.2.4 2NF
定义:若 R ∈ 1 N F R\in 1NF R∈1NF,且每一个 非主属性 完全函数依赖于 任何一个候选码,则 R ∈ 2 N F R\in 2NF R∈2NF。
2NF在1NF的基础上消除了非主属性对码的部分函数依赖。
6.2.5 3NF
若 R ∈ 3 N F R\in 3NF R∈3NF,则每一个 非主属性 既 不传递依赖于码,也不部分依赖于码。
如果R属于3NF,则必有R属于2NF。
3NF在2NF的基础上又消除了非主属性对码的传递函数依赖。
6.2.6 BCNF
定义:关系模式 R<U,F> ∈ 1NF,若 X → \rightarrow → Y 且 Y ⊈ \nsubseteq ⊈ X 时 X 必含有码,则 R<U,F> ∈ BCNF。
也就是说,关系模式 R<U,F> 中,若每一个决定因素都包含码,则 R<U,F> ∈ BCNF。
若R∈BCNF,则有结论:
- 所有非主属性对每一个码都是完全函数依赖
- 所有主属性对每一个不包含它的码也是完全函数依赖
- 没有任何属性完全函数依赖于非码的任何一组属性
由于R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF。
但是若R∈3NF,R未必属于BCNF。
如果R∈3NF,且R只有一个候选码,则R∈BCNF是R∈3NF的充分必要条件。
BCNF消除了主属性对码的部分函数依赖和传递函数依赖。
6.2.7 多值依赖
定义:设R(U)是一个属性集U上的一个关系模式,X、Y、Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖 X→→Y 成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
若 X→→Y,而 Z=φ,即Z为空,则称 X→→Y 为平凡的多值依赖,否则称 X→→Y 为非平凡的多值依赖。
多值依赖具有以下性质:
-
多值依赖具有对称性。即若X→→Y,则X→→Z,其中Z=U-X-Y。
-
多值依赖具有传递性。即若X→→Y,Y→→Z, 则X→→Z–Y。
-
函数依赖是多值依赖的特殊情况,若X→Y,则X→→Y。
-
若X→→Y,X→→Z,则X→→Y∩Z。(交)
-
若X→→Y,X→→Z,则X→→Y∪Z。(并)
-
若X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y。(差)
多值依赖与函数依赖的区别:
- 多值依赖的有效性与属性集的范围有关。 若多值依赖 X→→Y 若在 R(U) 上成立,则在 W ( X Y ⊆ W ⊆ U ) W(XY\subseteq W\subseteq U) W(XY⊆W⊆U) 上一定成立;反之则不然,即 X→→Y 在 W ( W ⊂ U ) W(W\subset U) W(W⊂U) 上成立,在 U 上并不一定成立。
- 若函数依赖X→Y在R(U)上成立,则对于任何 Y ′ ⊂ Y Y'\subset Y Y′⊂Y 均有 X→Y’ 成立。而多值依赖X→→Y若在R(U)上成立,不能断言对于任何 Y ′ ⊂ Y Y'\subset Y Y′⊂Y 有 X→→Y’ 成立。
6.2.8 4NF
定义:关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖 X→→Y(Y ⊈ \nsubseteq ⊈ X),X 都含有码,则R∈4NF。
4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
4NF所允许的非平凡的多值依赖实际上是函数依赖。
如果R ∈ 4NF,则R ∈ BCNF。
可用投影分解的方法消去非平凡且非函数依赖的多值依赖。
6.2.9 规范化小结
在关系数据库中,对关系模式的基本故要求是满足第一范式,这样的关系模式就是合法的、允许的。
关系数据库的规范化理论是数据库逻辑设计的工具。
目的:尽量消除插入、删除异常,修改复杂,数据冗余。
基本思想:逐步消除数据依赖中不合适的部分。
实质:概念的单一化。
关系模式规范化的基本步骤:
不能说规范化程度越高的关系模式就越好。在设计数据库模式结构时,必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。上面的规范化步骤可以在其中任何一步终止。
**关系模式的规范化过程是通过对关系模式的分解来实现的,即把低一级的关系模式分解为若干个高一级的关系模式。**这种分解不是唯一的。
6.3 数据依赖的公理系统
逻辑蕴涵定义:对于满足一组函数依赖 F 的关系模式 R<U,F>,其任何一个关系 r,若函数依赖 X→Y 都成立,(即 r 中任意两元组t,s,若t[X]=s[X],则t[Y]=s[Y]),则称F逻辑蕴含X→Y。
Armstrong公理系统设U为属性集总体,F是U上的一组函数依赖,于是有关系模式R<U,F >,对R<U,F >来说有以下的推理规则:
-
A1. 自反律(Reflexivity):若Y ⊆ \subseteq ⊆ X ⊆ \subseteq ⊆ U,则X→Y为F所蕴含。(由自反律所得到的的函数依赖均是平凡的函数依赖,自反律的使用并不依赖于F)
-
A2. 增广律(Augmentation):若X→Y为F所蕴含,且Z ⊆ \subseteq ⊆ U,则XZ→YZ为F所蕴含。(这里XZ代表X∪Z,YZ代表Y∪Z)
-
A3. 传递律(Transitivity):若X→Y及Y→Z为F所蕴含,则X→Z为F所蕴含。
证明略(课本P190)。
根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:
-
合并规则:由X→Y,X→Z,有X→YZ。
(A2, A3)
-
伪传递规则:由X→Y,WY→Z,有XW→Z。
(A2, A3)
-
分解规则:由X→Y及 Z ⊆ \subseteq ⊆ Y,有X→Z。
(A1, A3)
引理6.1: X → A 1 A 2 ⋯ A k X\rightarrow A_1A_2\cdots A_k X→A1A2⋯Ak 成立的充分必要条件是 X → A i X\rightarrow A_i X→Ai 成立( i = 1 , 2 , ⋯ , k i=1,2,\cdots,k i=1,2,⋯,k)。