第 4章 关系数据库的规范化设计本章重要概念
( 1) 关系模式的冗余和异常问题 。
( 2) FD的定义,逻辑蕴涵,闭包,推理规则,与关键码的联系;平凡的 FD; 属性集的闭包;推理规则的正确性和完备性; FD集的等价;
最小依赖集 。
( 3) 无损分解的定义,性质,测试;保持依赖集的分解 。
( 4) 关系模式的范式,1NF,2NF,3NF,BCNF。 分解成 2NF,3NF模式集的算法 。
( 5) MVD,4NF,JD和 5NF的定义。
前言
关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合。规范化设计理论主要包括三个方面的内容:数据依赖、范式和模式设计方法。其中数据依赖起着核心的作用。数据依赖研究数据之间的联系,范式是关系模式的标准,
模式设计方法是自动化设计的基础。规范化设计理论对关系数据库结构的设计起着重要的作用。
4.1.1 关系模型的外延和内涵
外延就是通常所说的关系、表或当前值,它的基本性质已在第 2章介绍过。由于用户经常对关系进行插入、删除和修改操作,因此外延是与时间有关的,随着时间的推移在不断变化。
内涵是与时间独立的,是对数据的定义以及数据完整性约束的定义。对数据的定义包括对关系、属性、域的定义和说明。
对数据完整性约束的定义涉及面较广,主要包括以下几个方面:
·静态约束,涉及到数据之间联系(称为“数据依赖,data
dependences)、主键和值域的设计。
·动态约束,定义各种操作(插入、删除、修改)对关系值的影响。
4.1.2 关系模式的冗余和异常问题
(一)
例 4.1
TNAME ADDRESS C# CNAME
t1 a1 c1 n1
t1 a1 c2 n2
t1 a1 c3 n3
t2 a2 c4 n4
t2 a2 c5 n2
t3 a3 c6 n4
4.1.2 关系模式的冗余和异常问题
(二)
数据冗余。如果一个教师教几门课程,那么这个教师的地址就要重复几次存储。
操作异常。由于数据的冗余,在对数据操作时会引起各种异常:
① 修改异常。譬如教师 t1教三门课程,在关系中就会有三个元组。如果他的地址变了,这三个元组中的地址都要改变。若有一个元组中的地址未更改,就会造成这个教师的地址不惟一,产生不一致现象。
② 插入异常。如果一个教师刚调来,尚未分派教学任务,那么要将教师的姓名和地址存储到关系中去时,在属性 C#和 CNAME上就没有值(空值)。在数据库技术中空值的语义是非常复杂的,对带空值元组的检索和操作也十分麻烦。
③ 删除异常。如果在图 4.1中要取消教师 t3的教学任务,那么就要把这个教师的元组删去,同时也把 t3的地址信息从表中删去了。这是一种不合适的现象。
4.1.2 关系模式的冗余和异常问题
(三)
TNAME ADDRESS TNAME C# CNAME
t1 a1 t1 c1 n1
t2 a2 t1 c2 n2
t3 a3 t1 c3 n3
t2 c4 n4
t2 c5 n2
t3 c6 n4
4.2.1 函数依赖的定义(一)
定义 4.1 设有关系模式 R( U),X和 Y是属性集 U的子集,函数依赖( functional
dependency,简记为 FD)是形为 X→Y 的一个命题,只要 r是 R的当前关系,对 r中任意两个元组 t和 s,都有 t[ X] =s[ X]蕴涵 t[ Y]
=s[ Y],那么称 FD X→Y 在关系模式 R( U)
中成立。
4.2.1 函数依赖的定义(二)
例 4.2
A B C D A B C D
a1 b1 c1 d1 a1 b1 c1 d1
a1 b1 c2 d2 a1 b2 c2 d2
a2 b2 c3 d3 a2 b2 c3 d3
a3 b1 c4 d4 a3 b2 c4 d4
4.2.1 函数依赖的定义(三)
例 4.3 有一个关于学生选课、教师任课的关系模式:
R( S#,SNAME,C#,GRADE,CNAME,TNAME,TAGE)
属性分别表示学生学号、姓名、选修课程的课程号、成绩、课程名、任课教师姓名和年龄等意义。
如果规定,每个学号只能有一个学生姓名,每个课程号只能决定一门课程,那么可写成下列 FD形式:
S#→SNAME C#→CNAME
每个学生每学一门课程,有一个成绩,那么可写出下列 FD:
( S#,C#) →GRADE
还可以写出其他一些 FD:
C#→ ( CNAME,TNAME,TAGE) TNAME→TAGE
4.2.2 FD的逻辑蕴涵
定义 4.2 设 F是在关系模式 R上成立的函数依赖的集合,X→Y 是一个函数依赖。如果对于
R的每个满足 F的关系 r也满足 X→Y,那么称 F
逻辑蕴涵 X→Y,记为 F? X→Y 。
定义 4.3 设 F是函数依赖集,被 F逻辑蕴涵的函数依赖全体构成的集合,称为函数依赖集 F
的闭包( closure),记为 F+。即 F+=
{ X→Y | 记为 F?X→Y 。 }
4.2.3 FD的推理规则(一)
设 U是关系模式 R的属性集,F是 R上成立的只涉及到 U中属性的函数依赖集。 FD的推理规则有以下三条:
A1(自反性,reflexivity):若 Y?X?U,则 X→Y 在
R上成立。
A2(增广性,augmentation):若 X→Y 在 R上成立,
且 Z?U,则 XZ→YZ 在 R上成立。
A3(传递性,transitivity):若 X→Y 和 Y→Z 在 R上成立,则 X→Z 在 R上成立。
4.2.3 FD的推理规则(二)
定理 4.1 FD推理规则 A1,A2和 A3是正确的。也就是,如果
X→Y 是从 F用推理规则导出,那么 X→Y 在 F+中。
定理 4.2 FD的其他五条推理规则,
(1) A4(合并性,union):{ X→Y,X→Z }?X→YZ 。
(2) A5(分解性,decomposition):{ X→Y,Z?Y }?X→Z 。
(3) A6(伪传递性):{ X→Y,WY→Z }?WX→Z 。
(4) A7(复合性,composition):{ X→Y,W→Z }
XW→YZ 。
(5) A8 { X→Y,W→Z }?X∪ ( W- Y) →YZ 。
4.2.3 FD的推理规则(三)
例 4.5 已知关系模式 R( ABC),F={ A→B,
B→C },求 F+。
根据 FD的推理规则,可推出 F的 F+有 43个 FD。
譬如,据规则 A1可推出 A→φ ( φ表示空属性集),
A→A,… 。据已知的 A→B 及规则 A2可推出
AC→BC,AB→B,A→AB,… 。据已知条件及规则 A3可推出 A→C 等。作为习题,读者可自行推出这 43个 FD。
4.2.3 FD的推理规则(四)
定义 4.4 对于 FD X→Y,如果 Y?X,那么称
X→Y 是一个“平凡的 FD”,否则称为“非平凡的 FD”。
定理 4.3 如果 A1…An 是关系模式 R的属性集,
那么 X→A1…An 成立的充分必要条件是 X→Ai
( i=1,…,n)成立。
4.2.4 FD和关键码的联系
定义 4.5 设关系模式 R的属性集是 U,X是 U的一个子集。如果 X→U 在 R上成立,
那么称 X是 R的一个超键。如果 X→U 在 R上成立,但对于 X的任一真子集 X1都有
X1→U 不成立,那么称 X是 R上的一个候选键。本章的键都是指候选键。
例 4.6 在学生选课、教师任课的关系模式中:
R( S#,SNAME,C#,GRADE,CNAME,TNAME,TAGE)
如果规定:每个学生每学一门课只有一个成绩;每个学生只有一个姓名;每个课程号只有一个课程名;每门课程只有一个任课教师。
根据这些规则,可以知道( S#,C#)能函数决定 R的全部属性,并且是一个候选键。虽然( S#,SNAME,C#,TNAME)也能函数决定 R的全部属性,但相比之下,只能说是一个超键,而不能说是候选键,因为其中含有多余属性。
4.2.5 属性集的闭包
定义 4.6 设 F是属性集 U上的 FD集,X是 U的子集,
那么(相对于 F)属性集 X的闭包用 X+表示,它是一个从 F集使用 FD推理规则推出的所有满足 X→A 的属性 A的集合,X+={ 属性 A | X→A 在 F+中 }
定理 4.4 X→Y 能用 FD推理规则推出的充分必要条件是 Y?X+。
例 4.7 属性集 U为 ABCD,FD集为{ A→B,B→C,
D→B }。则用上述算法,可求出 A+=ABC,( AD)
+=ABCD,( BD) +=BCD,等等。
4.2.5 FD推理规则的完备性
推理规则的正确性是指“从 FD集 F使用推理规则集推出的 FD必定在 F+中”,完备性是指
,F+中的 FD都能从 F集使用推理规则集导出”。也就是正确性保证了推出的所有 FD是正确的,完备性保证了可以推出所有被蕴涵的 FD。这就保证了推导的有效性和可靠性。
定理 4.5 FD推理规则 {A1,A2,A3}是完备的。
4.2.6 FD集的最小依赖集(一)
定义 4.7 如果关系模式 R( U)上的两个函数依赖集 F和 G,
有 F+=G+,则称 F和 G是等价的函数依赖集。
定义 4.8 设 F是属性集 U上的 FD集。如果 Fmin是 F的一个最小依赖集,那么 Fmin应满足下列四个条件:
⑴ F+min =F+;
⑵ 每个 FD的右边都是单属性;
⑶ Fmin中没有冗余的 FD(即 F中不存在这样的函数依赖
X→Y,使得 F与 F-{ X→Y }等价);
⑷ 每个 FD的左边没有冗余的属性(即 F中不存在这样的函数依赖 X→Y,X有真子集 W使得 F-{ X→Y } ∪ { W→Y }
与 F等价)。
4.2.6 FD集的最小依赖集(二)
例 4.8 设 F是关系模式 R( ABC)的 FD集,F={ A→BC,
B→C,A→B,AB→C },试求 Fmin。
① 先把 F中的 FD写成右边是单属性形式:
F={ A→B,A→C,B→C,A→B,AB→C }
显然多了一个 A→B,可删去。得 F={ A→B,A→C,B→C,
AB→C }
② F中 A→C 可从 A→B 和 B→C 推出,因此 A→C 是冗余的,
可删去。得 F={ A→B,B→C,AB→C }
③ F中 AB→C 可从 A→B 和 B→C 推出,因此 AB→C 也可删去。
最后得 F={ A→B,B→C },即所求的 Fmin。
4.3.1 模式分解问题 (一)
定义 4.9 设有关系模式 R(U),属性集为 U,
R1,…,Rk都是 U的子集,并且有
R1∪ R2∪ … ∪ Rk= U。关系模式 R1,…,
Rk的集合用 ρ表示,ρ={ R1,…,Rk}。用
ρ代替 R的过程称为关系模式的分解。这里 ρ
称为 R的一个分解,也称为数据库模式。
4.3.1 模式分解问题 (二)
泛关系模式数据库模式
R ρ = {R
1
,…,R
k
}
r σ = < r
1
,…,r
k

泛关系数据库实例(数据库)
泛关系模式数据库模式
,…,
<,…,>
泛关系数据库实例(数据库)
4.3.2 无损分解(一)
例 4.9
r A B C r
1
A B r
2
A C
1 1 1 1 1 1 1
1 2 1 1 2
( a ) ( b ) ( c )
r A B C r
1
A B r
2
A C r
1
r
2
A B C
1 1 4 1 1 1 4 1 1 4
1 2 3 1 2 1 3 1 1 3
1 2 4
1 2 3
( a ) ( b ) ( c ) ( d )
4.3.2 无损分解(二)
定义 4.10 设 R是一个关系模式,F是 R上的一个 FD
集。 R分解成数据库模式 ρ={ R1,…,Rk }。如果对 R中满足 F的每一个关系 r,都有
r=πR1( r)?πR2( r)? …?πRk( r)
那么称分解 ρ相对于 F是“无损联接分解”
( lossless join decomposition),简称为“无损分解”,否则称为“损失分解”( lossy
decomposition)。
4.3.2 无损分解(三)
定理 4.6 设 ρ={ R1,…,Rk }是关系模式 R的一个分解,r是 R的任一关系,ri=πRi
( r)( 1≤i≤k),那么有下列性质:
① r?mρ( r);
② 若 s= mρ( r),则 πRi( s) =ri;
③ mρ( mρ( r)) = mρ( r),这个性质称为幂等性( idempotent)。
4.3.2 无损分解(四)
R ρ = { R
1
,R
2
,…,R
k

r
r
1
,r
2
,…,r
k
s
s
1
,s
2
,…,s
k
π
π
图中,r
i
= π
Ri
( r )( 1 ≤ i ≤ k )
s
i
= π
Ri
( r )( 1 ≤ i ≤ k )
据性质 1,有 r? m
ρ
( r )
据性质 2,有 s
i
= r
i
( 1 ≤ i ≤ k )
4.3.2 无损分解(五)
R ρ = { R
1
,R
2
,…,R
k

r r
1
,r
2
,…,r
k
s
π
π
R ρ = { R
1
,R
2
,…,R
k

r …… r
1
,r
2
,…,r
k
s s
1
,s
2
,…,s
k
π
4.3.2 无损分解(六)
例 4.10 设关系模式 R( ABC)分解成 ρ={ AB,BC }。
( a)和( b)分别是模式 AB和 BC上的值 r1和 r2,( c)是
r1?r2的值。显然 πBC( r1?r2) ≠r2。这里 r2中元组
( b2c2)就是一个悬挂元组,由于它的存在,使得 r1和 r2
不存在泛关系 r。
r
1
A B r
2
B C r
1
r
2
A B C
a
1
b
1
b
1
c
1
a
1
b
1
c
1
b
2
c
2
( a ) 关 系 r
1
( b ) 关 系 r
2
( c ) r
1
r
2
4.3.3 无损分解的测试方法(一)
算法 4.3 无损分解的测试
① 构造一张 k行 n列的表格,每列对应一个属性 Aj( 1≤j≤n),每行对应一个模式 Ri( 1≤i≤k)。如果 Aj在 Ri中,那么在表格的第 i行第 j列处填上符号
aj,否则填上 bij。
② 把表格看成模式 R的一个关系,反复检查 F中每个 FD在表格中是否成立,
若不成立,则修改表格中的值。修改方法如下:对于 F中一个 FD X→Y,
如果表格中有两行在 X值上相等,在 Y值上不相等,那么把这两行在 Y值上也改成相等的值。如果 Y值中有一个是 aj,那么另一个也改成 aj;如果没有 aj,那么用其中一个 bij替换另一个值(尽量把下标 ij改成较小的数)。
一直到表格不能修改为止。(这个过程称为 chase过程)
③ 若修改的最后一张表格中有一行是全 a,即 a1a2…an,那么称 ρ相对于 F
是无损分解,否则称损失分解。
4.3.3 无损分解的测试方法(二)
A B C D A B C D
A B a
1
a
2
b
1 3
b
1 4
A B a
1
a
2
b
1 3
b
1 4
B C b
2 1
a
2
a
3
b
2 4
B C a
1
a
2
a
3
a
4
C D b
3 1
b
3 2
a
3
a
4
C D b
3 1
b
3 2
a
3
a
4
( a ) 初 始 表 格 ( b ) 修 改 后 的 表 格
A B C D A B C D
A B a
1
a
2
b
1 3
b
1 4
A B a
1
a
2
b
1 3
b
1 4
B C b
2 1
a
2
a
3
b
2 4
B C b
2 1
a
2
a
3
a
4
C D b
3 1
b
3 2
a
3
a
4
C D b
3 1
b
3 2
a
3
a
4
( a ) 初 始 表 格 ( b ) 修 改 后 的 表 格
4.3.3 无损分解的测试方法(三)
定理 4.7 设 ρ={ R1,R2 }是关系模式 R的一个分解,F是 R上成立的 FD集,那么分解 ρ相对于 F是无损分解的充分必要条件是( R1∩R2) → ( R1- R2)
或( R1∩R2) → ( R2- R1)。
定理 4.8 如果 FD X→Y 在模式 R上成立,且 X∩Y=φ,
那么 R分解成 ρ={R- Y,XY }是无损分解。
4.3.4 保持函数依赖的分解(一)
定义 4.11 设 F是属性集 U上的 FD集,Z是 U的子集,F在 Z上的投影用 πZ( F)表示,定义为 πZ( F) ={ X→Y | X→Y ∈ F+,且 XY?Z }
定义 4.12 设 ρ={ R1,…,Rk }是 R的一个分解,F是 R上的 FD集,如果有 ∪ πRi
( F)?F,那么称分解 ρ保持函数依赖集 F。
4.3.4 保持函数依赖的分解(二)
WNO WS WNO WG WNO WS WG
W1 8级 W1 2000 W1 8级 2000
W2 6级 W2 1600 W2 6级 1600
W3 6级 W3 1400 W3 6级 1400
(a)关系 r1 (b)关系 r2 (c) r1?r2
例 4.12
4.3.5 模式分解与模式等价问题(一)
本节讨论的关系模式分解的两个特性实际上涉及到两个数据库模式的等价问题,这种等价包括数据等价和依赖等价两个方面。数据等价是指两个数据库实例应表示同样的信息内容,用“无损分解”
衡量。如果是无损分解,那么对泛关系反复的投影和联接都不会丢失信息。依赖等价是指两个数据库模式应有相同的依赖集闭包。在依赖集闭包相等情况下,数据的语义是不会出差错的。违反数据等价或依赖等价的分解很难说是一个好的模式设计。
4.3.5 模式分解与模式等价问题(二)
例 4.13 设关系模式 R( ABC),ρ={ AB,AC }是 R的一个分解。试分析分别在 F1={ A→B },F2={ A→C,
B→C },F3={ B→A },F4={ C→B,B→A }情况下,
ρ是否具有无损分解和保持 FD的分解特性。
① 相对于 F1={ A→B },分解 ρ是无损分解且保持 FD的分解。
② 相对于 F2={ A→C,B→C },分解 ρ是无损分解,但不保持 FD集。因为 B→C 丢失了。
③ 相对于 F3={ B→A },分解 ρ是损失分解但保持 FD集的分解。
④ 相对于 F4={ C→B,B→A },分解 ρ是损失分解且不保持 FD集的分解
(丢失了 C→B)
4.4 关系模式的范式
关系模式的好与坏,用什么标准衡量?这个标准就是模式的范式( Normal Forms,简记为 NF)。范式的种类与数据依赖有着直接的联系,基于 FD的范式有 1NF,2NF,3NF、
BCNF等多种。
在不提及 FD时,关系中是不可能有冗余的问题,但是当存在 FD时,关系中就有可能存在数据冗余问题。
1NF是关系模式的基础; 2NF已成为历史,一般不再提及;
在数据库设计中最常用的是 3NF和 BCNF。为了叙述的方便,
我们还是从 1NF,2NF,3NF,BCNF顺序来介绍。
4.4.1 第一范式( 1NF)
定义 4.13 如果关系模式 R的每个关系 r的属性值都是不可分的原子值,那么称 R是第一范式( first
normal form,简记为 1NF)的模式。
满足 1NF的关系称为规范化的关系,否则称为非规范化的关系。关系数据库研究的关系都是规范化的关系。例如关系模式 R( NAME,ADDRESS,
PHONE),如果一个人有两个电话号码
( PHONE),那么在关系中至少要出现两个元组,
以便存储这两个号码。
1NF是关系模式应具备的最起码的条件。
4.4.2 第二范式( 2NF)(一)
定义 4.14 对于 FD W→A,如果存在 X?W有 X→A 成立,那么称 W→A 是局部依赖( A局部依赖于 W);
否则称 W→A 是完全依赖。完全依赖也称为“左部不可约依赖”。
定义 4.15 如果 A是关系模式 R的候选键中属性,那么称 A是 R的主属性;否则称 A是 R的非主属性。
定义 4.16 如果关系模式 R是 1NF,且每个非主属性完全函数依赖于候选键,那么称 R是第二范式
( 2NF)的模式。如果数据库模式中每个关系模式都是 2NF,则称数据库模式为 2NF的数据库模式。
4.4.2 第二范式( 2NF)(二)
例 4.14 设关系模式 R( S#,C#,GRADE,TNAME,TADDR)
的属性分别表示学生学号、选修课程的编号、成绩、任课教师姓名和教师地址等意义。( S#,C#)是 R的候选键。
R上有两个 FD:( S#,C#) → ( TNAME,TADDR)和 C#→
( TNAME,TADDR),因此前一个 FD是局部依赖,R不是 2NF
模式。此时 R的关系就会出现冗余和异常现象。譬如某一门课程有 100个学生选修,那么在关系中就会存在 100个元组,因而教师的姓名和地址就会重复 100次。
如果把 R分解成 R1( C#,TNAME,TADDR)和 R2( S#,C#,
GRADE)后,局部依赖( S#,C#) → ( TNAME,TADDR)就消失了。 R1和 R2都是 2NF模式。
4.4.2 第二范式( 2NF)(三)
算法 4.4 分解成 2NF模式集的算法设关系模式 R( U),主键是 W,R上还存在 FD X→Z,并且
Z是非主属性和 X?W,那么 W→Z 就是一个局部依赖。此时应把 R分解成两个模式
R1( XZ),主键是 X;
R2( Y),其中 Y=U-Z,主键仍是 W,外键是 X
( REFERENCES R1)。
利用外键和主键的联接可以从 R1和 R2重新得到 R。
如果 R1和 R2还不是 2NF,则重复上述过程,一直到数据库模式中每一个关系模式都是 2NF为止。
4.4.3 第三范式( 3NF)(一)
定义 4.17 如果 X→Y,Y→A,且 Y→X 和
A∈ Y,那么称 X→A 是传递依赖( A传递依赖于 X)。
定义 4.18 如果关系模式 R是 1NF,且每个非主属性都不传递依赖于 R的候选键,那么称 R
是第三范式( 3NF)的模式。如果数据库模式中每个关系模式都是 3NF,则称其为 3NF
的数据库模式
4.4.3 第三范式( 3NF)(二)
例 4.15 在例 4.14中,R2是 2NF模式,而且也已是 3NF模式。
但 R1( C#,TNAME,TADDR)是 2NF模式,却不一定是
3NF模式。如果 R1中存在函数依赖 C#→TNAME 和
TNAME→TADDR,那么 C#→TADDR 就是一个传递依赖,
即 R1不是 3NF模式。此时 R1的关系中也会出现冗余和异常操作。譬如一个教师开设五门课程,那么关系中就会出现五个元组,教师的地址就会重复五次。
如果把 R2分解成 R21( TNAME,TADDR)和 R22( C#,
TNAME)后,C#→TADDR 就不会出现在 R21和 R22中。这样 R21和 R22都是 3NF模式。
4.4.3 第三范式( 3NF)(三)
算法 4.5 分解成 3NF模式集的算法设关系模式 R( U),主键是 W,R上还存在 FD X→Z 。并且
Z是非主属性,Z?X,X不是候选键,这样 W→Z 就是一个传递依赖。此时应把 R分解成两个模式:
R1( XZ),主键是 X;
R2( Y),其中 Y=U-Z,主键仍是 W,外键是 X
( REFERENCES R1)。
利用外键和主键相匹配机制,R1和 R2通过联接可以重新得到 R。
如果 R1和 R2还不是 3NF,则重复上述过程,一直到数据库模式中每一个关系模式都是 3NF为止。
4.4.3 第三范式( 3NF)(四)
定理 4.9 如果 R是 3NF模式,那么 R也是 2NF
模式。
定理 4.10 设关系模式 R,当 R上每一个 FD
X→A 满足下列三个条件之一时,A∈ X(即
X→A 是一个平凡的 FD); X是 R的超键;
A是主属性。关系模式 R就是 3NF模式。
4.4.3 第三范式( 3NF)(五)
键 属性集 X 属性 A键 属性集 属性键属性集 X 属性 A
键属性集 属性键属性集 X 属性 A
键属性集 属性
( a )
( b )
( c )
4.4.4 BCNF( Boyce–Codd NF)
(一)
键 属性 A 属性集 X键 属性 属性集键 属性 属性集键属性 A 属性集 X
键属性 属性集键属性 属性集
( a )
( b )
4.4.4 BCNF( Boyce–Codd NF)
(二)
定义 4.19 如果关系模式 R是 1NF,且每个属性都不传递依赖于 R的候选键,那么称 R是 BCNF的模式。
如果数据库模式中每个关系模式都是 BCNF,则称为 BCNF的数据库模式。
定理 4.11 如果 R是 BCNF模式,那么 R也是 3NF模式。
定义 4.19’ 设 F是关系模式 R的 FD集,如果对 F中每个非平凡的 FD X→Y,都有 X是 R的超键,那么称 R
是 BCNF的模式。
4.4.5 分解成 BCNF模式集的算法算法 4.6 无损分解成 BCNF模式集对于关系模式 R的分解 ρ(初始时 ρ={R}),
如果 ρ中有一个关系模式 Ri相对于
πRi( F)不是 BCNF。据定义 4-20可知,Ri中存在一个非平凡 FD X→Y,有 X不包含超键。
此时把 Ri分解成 XY和 Ri- Y两个模式。重复上述过程,一直到 ρ中每一个模式都是 BCNF。
4.4.6 分解成 3NF模式集的算法算法 4.7 无损分解且保持依赖地分解成 3NF模式集
① 对于关系模式 R和 R上成立的 FD集 F,先求出 F的最小依赖集,然后再把最小依赖集中哪些左部相同的 FD用合并性合并起来。
② 对最小依赖集中,每个 FD X→Y 去构成一个模式 XY。
③ 在构成的模式集中,如果每个模式都不包含 R的候选键,那么把候选键作为一个模式放入模式集中。
这样得到的模式集是关系模式 R的一个分解,并且这个分解既是无损分解,又能保持 FD。
4.4.7 模式设计方法的原则
数据库设计者在进行关系数据库设计时,应作权衡,尽可能使数据库模式保持最好的特性。一般尽可能设计成 BCNF模式集。如果设计成 BCNF模式集时达不到保持 FD的特点,那么只能降低要求,设计成 3NF模式集,以求达到保持 FD和无损分解的特点。
模式分解并不单指把泛关系模式分解成数据库模式,也可以把数据库模式转换成另一个数据库模式,分解和转换的关键是要“等价”地分解。一个好的模式设计方法应符合三条原则:表达性、分离性和最小冗余性。
4.5 模式的进一步规范化处理前面提到的函数依赖揭示了数据之间的一种联系。我们通过对函数依赖的观察、分析,
可以消除关系模式中的冗余现象。但是函数依赖还不足以描绘现实世界中数据之间的全部联系,有些联系就要用其他数据依赖来刻画,例如多值依赖或联接依赖,本节就是介绍这两种依赖及其模式应达到的范式标准。
4.5.1 多值依赖的定义
定义 4.20 设 U是关系模式 R的属性集,X和 Y
是 U的子集,Z=R―X―Y,小写的 xyz表示属性集 XYZ的值。对于 R的关系 r,在 r中存在元组( x,y1,z1)和( x,y2,z2)时,就也存在元组( x,y2,z1)和( x,y1,z2),
那么称多值依赖( multivalued dependency,
简记为 MVD) X→→Y 在模式 R上成立。
4.5.2 关于 FD和 MVD的推理规则集
A1( FD的自反性):若 Y?X,则 X→Y 。
A2( FD的增广性):若 X→Y,且 Z?U,则 XZ→YZ 。
A3( FD的传递性):若 X→Y,Y→Z 则 X→Z 。
A4( MVD的补规则,complementation):若 X→→Y,则 X→→(U - XY)。
A5( MVD的增广性):若 X→→Y,且 V?W?U,则 WX→VY 。
A6( MVD的传递性):若 X→→Y,Y→→Z,则 X→→(Z - Y)。
A7(复制性,replication):若 X→Y,则 X→→Y 。
A8(接合性,coalescence rule):若 X→→Y,W→Z,并且 Z?Y,W∩Y=φ,
那么 X→Z 。
A9( MVD的并规则):若 X→→Y,X→→Z,则 X→→YZ 。
A10( MVD的交规则):若 X→→Y,X→→Z,则 X→→Y∩Z 。
A11( MVD的差规则):若 X→→Y,X→→Z,则 X→→Y - Z,X→→Z - Y。
A12( MVD的伪传递):若 X→→Y,WY→→Z,则 WX→→Z - WY。
A13(混合伪传递):若 X→→Y,XY→Z,则 X→Z - Y。
4.5.3 第四范式( 4NF)
定义 4.23 设 D是关系模式 R上成立的 FD和
MVD集合。如果 D中每个非平凡的 MVD
X→→Y 的左部 X都是 R的超键,那么称 R是
4NF的模式。
4.5.4 嵌入多值依赖
定义 4.24 设关系模式 R( U),X和 Y是属性集 U的子集,W是 U的真子集,并且 XY?W。
MVD X→→Y 在模式 R上不成立,但在模式 W
上成立。那么 X→→Y 在 R上称为嵌入多值依赖( Embedded MVD,简记为 EMVD),用符号( X→→Y ) W表示。
4.5.5 联接依赖和第五范式
定义 4.25 设 U是关系模式 R的属性集,R1,…,Rn是 U的子集,并满足 U=R1∪ … ∪ Rn,ρ={ R1,…,Rn }是 R的一个分解。如果对于 R的每个关系 r都有 mρ( r) =r,那么称联接依赖( join dependency,简记为 JD)在模式 R上成立,记为 *( R1,…,Rn)。
定义 4.26 如果 *( R1,…,Rn)中某个 Ri就是 R,那么称这个 JD是平凡的 JD。
定义 4.27 如果关系模式 R的每个 JD均由 R的候选键蕴涵,那么称 R是 5NF的模式。在有的文献中,5NF也称为投影联接范式( project-join NF,简记为 PJNF)。
小 结(一)
本章讨论如何设计关系模式问题。关系模式设计得好与坏,直接影响到数据冗余度、数据一致性等问题。要设计好的数据库模式,必须有一定的理论为基础。这就是模式规范化理论。
在数据库中,数据冗余是指同一个数据存储了多次,
由数据冗余将会引起各种操作异常。通过把模式分解成若干比较小的关系模式可以消除冗余。
小 结(二)
函数依赖 X→Y 是数据之间最基本的一种联系,在关系中有两个元组,如果 X值相等那么要求 Y值也相等。
FD有一个完备的推理规则集。
关系模式在分解时应保持“等价”,有数据等价和语义等价两种,分别用无损分解和保持依赖两个特征来衡量。前者能保持泛关系在投影联接以后仍能恢复回来,而后者能保证数据在投影或联接中其语义不会发生变化,也就是不会违反 FD的语义。但无损分解与保持依赖两者之间没有必然的联系。
小 结(三)
范式是衡量模式优劣的标准,范式表达了模式中数据依赖之间应满足的联系。如果关系模式 R是 3NF,那么 R上成立的非平凡 FD都应该左边是超键或右边是非主属性。如果关系模式 R是 BCNF,那么 R上成立的非平凡的 FD
都应该左边是超键。范式的级别越高,其数据冗余和操作异常现象就越少。
小 结(四)
分解成 BCNF模式集的算法能保持无损分解,但不一定能保持 FD集。而分解成 3NF模式集的算法既能保持无损分解,又能保持 FD集。
关系模式的规范化过程实际上是一个“分解”过程:
把逻辑上独立的信息放在独立的关系模式中。分解是解决数据冗余的主要方法,也是规范化的一条原则:“关系模式有冗余问题就分解它”。
本章的重点篇幅
( 1) 教材中 P148的例 4.13。 ( 无损联接和保持 FD的例子 )
( 2)教材中 P149的例 4.14和 P150的例 4.15。
(分解成 2NF和 3NF的例子)