第 4 章 关系数据库的规范化设计

61
第4第 第第第第第第第 第第第第

Upload: chibale

Post on 13-Jan-2016

99 views

Category:

Documents


9 download

DESCRIPTION

第 4 章 关系数据库的规范化设计. 本章重要概念. ( 1 )关系模式的冗余和异常问题。 ( 2 ) FD 的定义、逻辑蕴涵、闭包、推理规则、与关键码的联系;平凡的 FD ; 属性集 的闭包;推理规则的正确性和完备性; FD 集的等价;最小依赖集。 ( 3 )无损分解的定义、性质、测试;保持依赖集的分解。 ( 4 )关系模式的范式: 1 NF , 2NF , 3NF , BCNF 。 分解成 2 NF 、 3NF 模式集的算法。 ( 5 ) MVD 、 4NF 、 JD 和 5 NF 的定义。. 前言. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 4 章  关系数据库的规范化设计

第 4 章 关系数据库的规范化设计

Page 2: 第 4 章  关系数据库的规范化设计

本章重要概念 ( 1 )关系模式的冗余和异常问题。 ( 2) FD 的定义、逻辑蕴涵、闭包、推理规则、与关

键码的联系;平凡的 FD ;属性集的闭包;推理规则的正确性和完备性; FD 集的等价;最

小依赖集。( 3 )无损分解的定义、性质、测试;保持依赖集的分解。( 4 )关系模式的范式: 1NF, 2NF, 3NF, BCNF 。

分解成 2NF、 3NF 模式集的算法。 ( 5)MVD、 4NF、 JD 和 5NF 的定义。

Page 3: 第 4 章  关系数据库的规范化设计

前言 关系数据库的规范化设计是指面对一个现实问题 ,

如何选择一个比较好的关系模式集合。规范化设计理论主要包括三个方面的内容:数据依赖、范式和模式设计方法。其中数据依赖起着核心的作用。数据依赖研究数据之间的联系,范式是关系模式的标准,模式设计方法是自动化设计的基础。规范化设计理论对关系数据库结构的设计起着重要的作用。

Page 4: 第 4 章  关系数据库的规范化设计

4.1.1 关系模型的外延和内涵 外延就是通常所说的关系、表或当前值,它的基本性质已在第 2 章介绍过。由于用户经常对关系进行插入、删除和修改操作,因此外延是与时间有关的,随着时间的推移在不断变化。

内涵是与时间独立的,是对数据的定义以及数据完整性约束的定义。对数据的定义包括对关系、属性、域的定义和说明。对数据完整性约束的定义涉及面较广,主要包括以下几个方面:

· 静态约束,涉及到数据之间联系(称为“数据依赖, data dependences )、主键和值域的设计。

· 动态约束,定义各种操作(插入、删除、修改)对关系值的影响。

Page 5: 第 4 章  关系数据库的规范化设计

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

Page 6: 第 4 章  关系数据库的规范化设计

4.1.2 关系模式的冗余和异常问题(二)

数据冗余。如果一个教师教几门课程,那么这个教师的地址就要重复几次存储。

操作异常。由于数据的冗余,在对数据操作时会引起各种异常:① 修改异常。譬如教师 t1 教三门课程,在关系中就会有三个元组。如果他的地

址变了,这三个元组中的地址都要改变。若有一个元组中的地址未更改,就会造成这个教师的地址不惟一,产生不一致现象。

② 插入异常。如果一个教师刚调来,尚未分派教学任务,那么要将教师的姓名和地址存储到关系中去时,在属性 C#和 CNAME 上就没有值(空值)。在数据库技术中空值的语义是非常复杂的,对带空值元组的检索和操作也十分麻烦。

③ 删除异常。如果在图 4.1 中要取消教师 t3 的教学任务,那么就要把这个教师的元组删去,同时也把 t3 的地址信息从表中删去了。这是一种不合适的现象。

Page 7: 第 4 章  关系数据库的规范化设计

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

Page 8: 第 4 章  关系数据库的规范化设计

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 )中成立。

Page 9: 第 4 章  关系数据库的规范化设计

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

Page 10: 第 4 章  关系数据库的规范化设计

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

Page 11: 第 4 章  关系数据库的规范化设计

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⊨ 。 }

Page 12: 第 4 章  关系数据库的规范化设计

4.2.3 FD 的推理规则(一) 设 U 是关系模式 R 的属性集, F是 R 上成立的只

涉及到 U 中属性的函数依赖集。 FD 的推理规则有以下三条:

A1 (自反性, reflexivity ):若 YXU ,则X→Y在 R 上成立。

A2 (增广性, augmentation ):若 X→Y在 R 上成立,且 ZU ,则 XZ→YZ在 R 上成立。

A3 (传递性, transitivity ):若 X→Y和 Y→Z在R 上成立,则 X→Z在 R 上成立。

Page 13: 第 4 章  关系数据库的规范化设计

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, ZY }⊨ 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 。

Page 14: 第 4 章  关系数据库的规范化设计

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 。

Page 15: 第 4 章  关系数据库的规范化设计

4.2.3 FD 的推理规则(四) 定义 4.4 对于 FD X→Y ,如果 YX ,那么称 X→Y 是一个“平凡的 FD” ,否则称为“非平凡的 FD” 。

定理 4.3 如果 A1…An 是关系模式 R 的属性集,那么 X→A1…An 成立的充分必要条件是X→Ai( i=1,…, n )成立。

Page 16: 第 4 章  关系数据库的规范化设计

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 的全部属性,但相比之下,只能说是一个超键,而不能说是候选键,因为其中含有多余属性。

Page 17: 第 4 章  关系数据库的规范化设计

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 推理规则推出的充分必要条件是 YX+ 。

例 4.7 属性集 U为 ABCD, FD 集为{ A→B, B→C, D→B }。则用上述算法,可求出 A+=ABC ,( AD) +=ABCD ,( BD)+=BCD ,等等。

Page 18: 第 4 章  关系数据库的规范化设计

4.2.5 FD 推理规则的完备性 推理规则的正确性是指“从 FD集 F使用推理

规则集推出的 FD必定在 F+ 中”,完备性是指“ F+ 中的 FD 都能从 F 集使用推理规则集导出”。也就是正确性保证了推出的所有 FD是正确的,完备性保证了可以推出所有被蕴涵的 FD 。这就保证了推导的有效性和可靠性。

定理 4.5 FD 推理规则 {A1, A2, A3} 是完备的。

Page 19: 第 4 章  关系数据库的规范化设计

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 等价)。

Page 20: 第 4 章  关系数据库的规范化设计

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 。

Page 21: 第 4 章  关系数据库的规范化设计

4.3.1 模式分解问题 (一) 定义 4.9 设有关系模式 R(U) ,属性集为 U,

R1、…、 Rk 都是 U 的子集,并且有R1 R2 … Rk∪ ∪ ∪ = U 。关系模式 R1、…、 Rk 的集合用 ρ 表示, ρ={ R1,…, Rk}。用 ρ代替 R 的过程称为关系模式的分解。这里 ρ 称为 R 的一个分解,也称为数据库模式。

Page 22: 第 4 章  关系数据库的规范化设计

4.3.1 模式分解问题 (二)泛关系模式

数据库模式R ρ ={R1,…,Rk}

r σ =<r1,…,rk>泛关系

数据库实例(数据库)

泛关系模式数据库模式

R ρ ={R1,…,Rk}

r σ =<r1,…,rk>泛关系

数据库实例(数据库)

Page 23: 第 4 章  关系数据库的规范化设计

4.3.2 无损分解(一) 例 4.9r A B C r1 A B r2 A C

1 1 1 1 1 1 11 2 1 1 2

a( ) b( ) c( )

r A B C r1 A B r2 A C r1?r2 A B C1 1 4 1 1 1 4 1 1 41 2 3 1 2 1 3 1 1 3

1 2 41 2 3

a( ) b( ) c( ) d( )

Page 24: 第 4 章  关系数据库的规范化设计

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 )。

Page 25: 第 4 章  关系数据库的规范化设计

4.3.2 无损分解(三) 定理 4.6 设 ρ={ R1,…, Rk }是关系模式 R 的一个分解, r是 R 的任一关系, ri=πRi( r )( 1≤i≤k ),那么有下列性质:

① rmρ( r );② 若 s= mρ( r ),则 πRi( s) =ri ;③ mρ(mρ( r )) = mρ( r ),这个性质称

为幂等性( idempotent )。

Page 26: 第 4 章  关系数据库的规范化设计

4.3.2 无损分解(四)

R ρ ={ R1,R2,…,Rk}r

r1,r2,…,rk

ss1,s2,…,sk

π

π⋈π⋈

图中:r i =π Ri(r)(1≤ i ≤ k)si =π Ri(r)(1≤ i ≤ k)

据性质1.有rmρ(r)据性质2.有si = r i(1≤ i ≤ k)

Page 27: 第 4 章  关系数据库的规范化设计

4.3.2 无损分解(五)

R ρ ={ R1,R2,…,Rk}

r r1,r2,…,rk

s

π

⋈π

R ρ ={ R1,R2,…,Rk}

r …… r1,r2,…,rk

s s1,s2,…,skπ⋈π⋈

Page 28: 第 4 章  关系数据库的规范化设计

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 。

r1 A B r2 B C r1?r2 A B Ca1 b1 b1 c1 a1 b1 c1

b2 c2a r( )关系 1 b r( )关系 2 c r( ) 1?r2

⋈ ⋈

Page 29: 第 4 章  关系数据库的规范化设计

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 是无损分解,否则称损失分解。

Page 30: 第 4 章  关系数据库的规范化设计

4.3.3 无损分解的测试方法(二)

A B C D A B C D AB a1 a2 b13 b14 AB a1 a2 b13 b14 BC b21 a2 a3 b24 BC a1 a2 a3 a4 CD b31 b32 a3 a4 CD b31 b32 a3 a4

a( )初始表格 b( )修改后的表格

A B C D A B C D AB a1 a2 b13 b14 AB a1 a2 b13 b14 BC b21 a2 a3 b24 BC b21 a2 a3 a4 CD b31 b32 a3 a4 CD b31 b32 a3 a4

a( )初始表格 b( )修改后的表格

Page 31: 第 4 章  关系数据库的规范化设计

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 } 是无损分解。

Page 32: 第 4 章  关系数据库的规范化设计

4.3.4 保持函数依赖的分解(一)

定义 4.11 设 F 是属性集 U 上的 FD 集, Z是 U 的子集, F在 Z 上的投影用 πZ( F )表示,定义为 πZ( F) ={ X→Y | X→Y F+∈ ,且 XYZ }

定义 4.12 设 ρ={ R1,…, Rk }是 R的一个分解, F是 R 上的 FD 集,如果有 ∪ πRi( F)⊨ F ,那么称分解 ρ 保持函数依赖集 F 。

Page 33: 第 4 章  关系数据库的规范化设计

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

Page 34: 第 4 章  关系数据库的规范化设计

4.3.5 模式分解与模式等价问题(一)

本节讨论的关系模式分解的两个特性实际上涉及到两个数据库模式的等价问题,这种等价包括数据等价和依赖等价两个方面。数据等价是指两个数据库实例应表示同样的信息内容,用“无损分解”衡量。如果是无损分解,那么对泛关系反复的投影和联接都不会丢失信息。依赖等价是指两个数据库模式应有相同的依赖集闭包。在依赖集闭包相等情况下,数据的语义是不会出差错的。违反数据等价或依赖等价的分解很难说是一个好的模式设计。

Page 35: 第 4 章  关系数据库的规范化设计

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)

Page 36: 第 4 章  关系数据库的规范化设计

4.4 关系模式的范式 关系模式的好与坏,用什么标准衡量?这个标准就是模式的

范式( Normal Forms ,简记为 NF )。范式的种类与数据依赖有着直接的联系,基于 FD 的范式有1NF、 2NF、 3NF、 BCNF 等多种。

在不提及 FD 时,关系中是不可能有冗余的问题,但是当存在 FD 时,关系中就有可能存在数据冗余问题。

1NF 是关系模式的基础; 2NF 已成为历史,一般不再提及;在数据库设计中最常用的是 3NF和 BCNF 。为了叙述的方便,我们还是从 1NF、 2NF、 3NF、 BCNF顺序来介绍。

Page 37: 第 4 章  关系数据库的规范化设计

4.4.1 第一范式( 1NF ) 定义 4.13 如果关系模式 R 的每个关系 r 的属性值

都是不可分的原子值,那么称 R 是第一范式( first normal form ,简记为 1NF )的模式。

满足 1NF 的关系称为规范化的关系,否则称为非规范化的关系。关系数据库研究的关系都是规范化的关系。例如关系模式R( NAME, ADDRESS, PHONE ),如果一个人有两个电话号码( PHONE ),那么在关系中至少要出现两个元组,以便存储这两个号码。

1NF 是关系模式应具备的最起码的条件。

Page 38: 第 4 章  关系数据库的规范化设计

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 的数据库模式。

Page 39: 第 4 章  关系数据库的规范化设计

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 模式。

Page 40: 第 4 章  关系数据库的规范化设计

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 为止。

Page 41: 第 4 章  关系数据库的规范化设计

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 的数据库模式

Page 42: 第 4 章  关系数据库的规范化设计

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 模式。

Page 43: 第 4 章  关系数据库的规范化设计

4.4.3 第三范式( 3NF )(三)算法 4.5 分解成 3NF 模式集的算法设关系模式 R( U ),主键是 W, R 上还存在 FD X→Z 。并且 Z 是非主属性, ZX, X 不是候选键,这样W→Z 就是一个传递依赖。此时应把 R 分解成两个模式:R1( XZ ),主键是 X ;R2( Y ),其中 Y=U-Z ,主键仍是 W ,外键是X( REFERENCES R1 )。利用外键和主键相匹配机制, R1和 R2 通过联接可以重新得到 R 。如果 R1和 R2还不是 3NF ,则重复上述过程,一直到数据库模式中每一个关系模式都是 3NF 为止。

Page 44: 第 4 章  关系数据库的规范化设计

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 模式。

Page 45: 第 4 章  关系数据库的规范化设计

4.4.3 第三范式( 3NF )(五)

键 属性集X 属性A键 属性集X 属性A

键 属性集X 属性A键 属性集X 属性A

键 属性集X 属性A键 属性集X 属性A

(a)

(b)

(c)

Page 46: 第 4 章  关系数据库的规范化设计

4.4.4 BCNF( Boyce–Codd NF )(一)

键 属性A 属性集X键 属性A 属性集X键 属性A 属性集X

键 属性A 属性集X键 属性A 属性集X键 属性A 属性集X(a)

(b)

Page 47: 第 4 章  关系数据库的规范化设计

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 的模式。

Page 48: 第 4 章  关系数据库的规范化设计

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 。

Page 49: 第 4 章  关系数据库的规范化设计

4.4.6 分解成 3NF 模式集的算法算法 4.7 无损分解且保持依赖地分解成 3NF 模式集

① 对于关系模式 R和 R 上成立的 FD集 F ,先求出 F 的最小依赖集,然后再把最小依赖集中哪些左部相同的 FD 用合并性合并起来。

② 对最小依赖集中,每个 FD X→Y 去构成一个模式 XY 。③ 在构成的模式集中,如果每个模式都不包含 R 的候选键,

那么把候选键作为一个模式放入模式集中。

这样得到的模式集是关系模式 R 的一个分解,并且这个分解既是无损分解,又能保持 FD 。

Page 50: 第 4 章  关系数据库的规范化设计

4.4.7 模式设计方法的原则 数据库设计者在进行关系数据库设计时,应作权衡,尽可能使数据库模式保持最好的特性。一般尽可能设计成 BCNF 模式集。如果设计成 BCNF 模式集时达不到保持 FD 的特点,那么只能降低要求,设计成 3NF 模式集,以求达到保持 FD和无损分解的特点。

模式分解并不单指把泛关系模式分解成数据库模式,也可以把数据库模式转换成另一个数据库模式,分解和转换的关键是要“等价”地分解。一个好的模式设计方法应符合三条原则:表达性、分离性和最小冗余性。

Page 51: 第 4 章  关系数据库的规范化设计

4.5 模式的进一步规范化处理前面提到的函数依赖揭示了数据之间的

一种联系。我们通过对函数依赖的观察、分析,可以消除关系模式中的冗余现象。但是函数依赖还不足以描绘现实世界中数据之间的全部联系,有些联系就要用其他数据依赖来刻画,例如多值依赖或联接依赖,本节就是介绍这两种依赖及其模式应达到的范式标准。

Page 52: 第 4 章  关系数据库的规范化设计

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 上成立。

Page 53: 第 4 章  关系数据库的规范化设计

4.5.2 关于 FD和MVD 的推理规则集

A1( FD 的自反性):若 YX ,则 X→Y 。A2( FD 的增广性):若 X→Y ,且 ZU ,则 XZ→YZ 。A3( FD 的传递性):若 X→Y, Y→Z则 X→Z 。A4(MVD 的补规则, complementation ):若 X→→Y ,则 X→→(U- XY) 。A5(MVD 的增广性):若 X→→Y ,且 VWU ,则 WX→VY 。A6(MVD 的传递性):若 X→→Y, Y→→Z ,则 X→→(Z- Y) 。A7 (复制性, replication ):若 X→Y ,则 X→→Y 。A8 (接合性, coalescence rule ):若 X→→Y,W→Z ,并且

ZY,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 。

Page 54: 第 4 章  关系数据库的规范化设计

4.5.3 第四范式( 4NF ) 定义 4.23 设 D 是关系模式 R 上成立的 FD和MVD 集合。如果 D 中每个非平凡的 MVD X→→Y 的左部 X 都是 R 的超键,那么称 R是 4NF 的模式。

Page 55: 第 4 章  关系数据库的规范化设计

4.5.4 嵌入多值依赖 定义 4.24 设关系模式 R( U ), X和 Y 是

属性集 U 的子集, W是 U 的真子集,并且XYW。MVD X→→Y 在模式 R 上不成立,但在模式 W 上成立。那么 X→→Y在 R 上称为嵌入多值依赖( Embedded MVD ,简记为 EMVD ),用符号( X→→Y) W 表示。

Page 56: 第 4 章  关系数据库的规范化设计

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 )。

Page 57: 第 4 章  关系数据库的规范化设计

小 结(一) 本章讨论如何设计关系模式问题。关系模式设计得

好与坏,直接影响到数据冗余度、数据一致性等问题。要设计好的数据库模式,必须有一定的理论为基础。这就是模式规范化理论。

在数据库中,数据冗余是指同一个数据存储了多次,由数据冗余将会引起各种操作异常。通过把模式分解成若干比较小的关系模式可以消除冗余。

Page 58: 第 4 章  关系数据库的规范化设计

小 结(二) 函数依赖 X→Y 是数据之间最基本的一种联系,在

关系中有两个元组,如果 X 值相等那么要求 Y 值也相等。 FD 有一个完备的推理规则集。

关系模式在分解时应保持“等价”,有数据等价和语义等价两种,分别用无损分解和保持依赖两个特征来衡量。前者能保持泛关系在投影联接以后仍能恢复回来,而后者能保证数据在投影或联接中其语义不会发生变化,也就是不会违反 FD 的语义。但无损分解与保持依赖两者之间没有必然的联系。

Page 59: 第 4 章  关系数据库的规范化设计

小 结(三) 范式是衡量模式优劣的标准,范式表达了模

式中数据依赖之间应满足的联系。如果关系模式 R是 3NF ,那么 R 上成立的非平凡 FD都应该左边是超键或右边是非主属性。如果关系模式 R是 BCNF ,那么 R 上成立的非平凡的 FD 都应该左边是超键。范式的级别越高,其数据冗余和操作异常现象就越少。

Page 60: 第 4 章  关系数据库的规范化设计

小 结(四) 分解成 BCNF 模式集的算法能保持无损分解,但不

一定能保持 FD 集。而分解成 3NF 模式集的算法既能保持无损分解,又能保持 FD 集。

关系模式的规范化过程实际上是一个“分解”过程:把逻辑上独立的信息放在独立的关系模式中。分解是解决数据冗余的主要方法,也是规范化的一条原则:“关系模式有冗余问题就分解它”。

Page 61: 第 4 章  关系数据库的规范化设计

本章的重点篇幅

( 1 )教材中 P148 的例 4.13 。(无损联接和保持 FD 的例子)( 2 )教材中 P149 的例 4.14和 P150 的例 4.15 。(分解成 2NF 和 3NF 的例子)