第7章 关系数据库的规范化理论

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 92

第7章

关系数据库的规范化理论

刘红岩
清华大学经济管理学院
管理科学与工程系
关系模式的规范化理论
主要内容:
基本概念
函数依赖
Armstrong公理系统
闭包、最小覆盖
2NF 、3NF、BCNF
多值依赖、4NF
基本概念
更新异常问题
Courses(cID, cName, credit, preCID) 主键
cID cName credit preCID
c1 C语言 2
c2 数据结构 3 c1
c3 数据库原理 3 c2
c3 数据库原理 3 c5
c4 商务智能 2 c3
c5 计算机概论 2
更新异常问题
设有一个关系模式 salesperson,候选键?
emp emp sex birthday spTelNo branch branch branch
ID Name ID Name TelNo
sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668
sp2 Philip Li M 67-5-2 13901213146 B101 Haidian 62525668
sp3 Jane He F 62-9-7 13805352210 B101 Haidian 62525668
sp4 Tom Zhao M 72-12-9 13022654523 B102 Chaoyang 64427202
sp5 Lily Wang F 75-3-8 13685653369 B102 Chaoyang 64427202
sp6 Peter Li M 62-7-5 13312650852 B103 Xicheng 68683326

存储冗余(redundant storage)
更新异常问题
 插入异常(insertion anomalies)
 插入一个新的元组

emp emp sex birthday spTelNo branch branch branch


ID Name ID Name TelNo
sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668
sp2 Philip Li M 67-5-2 13901213146 B101 Haidian 62525668
sp3 Jane He F 62-9-7 13805352210 B101 Haidian 62525668
sp4 Tom Zhao M 72-12-9 13022654523 B102 Chaoyang 64427202
sp5 Lily Wang F 75-3-8 13685653369 B102 Chaoyang 64427202
sp6 Peter Li M 62-7-5 13312650852 B103 Xicheng 68683326
sp7 Tony Wan M 72-10-25 B103 Xiceng 68683326
更新异常问题
 插入异常(insertion anomalies)
 属性取值缺失时: 新的分支机构B104
emp emp sex birthday spTelNo branch branch branch
ID Name cID cName credit preCIDName
ID TelNo

sp1 Connie Liuc1 F 70-1-20 2


C语言 13901082345 B101 Haidian 62525668

sp2 Philip Li c2 M 数据结构


67-5-2 3
13901213146 c1
B101 Haidian 62525668

sp3 Jane He c3 F 数据库原理


62-9-7 3
13805352210 c2
B101 Haidian 62525668

sp4 Tom Zhao c3 M 数据库原理


72-12-9 3
13022654523 c5
B102 Chaoyang 64427202

sp5 Lily Wang c4 F 商务智能


75-3-8 2
13685653369 c3
B102 Chaoyang 64427202

sp6 Peter Li c5 M 计算机概论


62-7-5 2
13312650852 B103 Xicheng 68683326

B104 Chongwen 88690426


更新异常问题

 删除异常(deletion anomalies)
 删除编号为sp6的销售员

emp emp sex birthday spTelNo branch branch branch


ID Name ID Name TelNo
sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668
sp2 Philip Li M 67-5-2 13901213146 B101 Haidian 62525668
sp3 Jane He F 62-9-7 13805352210 B101 Haidian 62525668
sp4 Tom Zhao M 72-12-9 13022654523 B102 Chaoyang 64427202
sp5 Lily Wang F 75-3-8 13685653369 B102 Chaoyang 64427202
sp6 Peter Li M 62-7-5 13312650852 B103 Xicheng 68683326
更新异常问题

 修改异常(modification anomalies)
 修改异常是指对冗余的数据进行修改很容易
造成数据的不一致
emp emp sex birthday spTelNo branch branch branch
ID Name ID Name TelNo
sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668
sp2 Philip Li M 67-5-2 13901213146 B101 Haidian 62525668
sp3 Jane He F 62-9-7 13805352210 B101 Haidian 62525668
sp4 Tom Zhao M 72-12-9 13022654523 B102 Chaoyang 64427202
sp5 Lily Wang F 75-3-8 13685653369 B102 Chaoyang 64427202
sp6 Peter Li M 62-7-5 13312650852 B103 Xicheng 68683326
更新异常问题
如何解决这些问题?
 Salesperson (empID, empName, sex, birthday, spTelNo,
brachNo)
 Branch (branchID, branchName, branchTelNo)

empID empName sex birthday spTelNo branchID branchID branchName branchTelNo

sp1 Connie Liu F 70-1-20 13901082345 B101 B101 Haidian 62525668


sp2 Philip Li M 67-5-2 13901213146 B101 branch
sp3 Jane He F 62-9-7 13805352210 B101 B102 Chaoyang 64427202
sp4 Tom Zhao M 72-12-9 13022654523 B102 branch
sp5 Lily Wang F 75-3-8 13685653369 B102 B103 Xicheng 68683326
sp6 Peter Li M 62-7-5 13312650852 B103 branch
更新异常问题

更新异常问题的原因?
数据依赖:数据之间存在着某种内在的联

如: empID和 branchID
如,cID, cName
函数依赖
Functional Dependency
规范化理论

E. F. Codd 于1971年提出规范化理论


该理论按属性间的数据依赖情况规范关系
模式,按规范化的程度不同分为
第一范式:1NF(first Normal Form)
2NF
3NF
BCNF
4NF
5NF
1NF

每一个分量都是不可分的,这是最基本
的规范化
若R属于第几范式,一般记为RxNF
一个低一级范式的关系模式,通过模式
分解总可以将它分解为若干个高一级范
式的关系模式的集合,这种过程就叫规
范化(normalization)。
函数依赖 (functional dependency)
定义7.1: 设A和B是关系模式R的两个非空属
性组,如果A的每一个取值只对应B的一
个取值,则称
 A函数决定B (A functionally determines B), 简称A
决定B,或
 B函数依赖于A ( B is functionally dependent on A)
 记为A→B
 A称为B的决定子或决定因素(determinant)
 若Y不函数依赖于X,则记作 X→Y
函数依赖 (functional dependency)
emp emp sex birthday spTelNo branch branch branch
ID Name ID Name TelNo
sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668
sp2 Philip Li M 67-5-2 13901213146 B101 Haidian 62525668
sp3 Jane He F 62-9-7 13805352210 B101 Haidian 62525668
sp4 Tom Zhao M 72-12-9 13022654523 B102 Chaoyang 64427202
sp5 Lily Wang F 75-3-8 13685653369 B102 Chaoyang 64427202
sp6 Peter Li M 62-7-5 13312650852 B103 Xicheng 68683326

empID empName empID, sex empName


empID sex empID sex, empName
empID birthday
empID spTelNo Sex ? empName
empID  branchID empName ? birthday
branchID  branchName
……
……
函数依赖 (functional dependency)
A B
emp emp sex birthday spTelNo branch branch branch
ID Name ID Name TelNo
sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668
sp2 Philip Li M 67-5-2 13901213146 B101 Haidian 62525668
sp3 Jane He F 62-9-7 13805352210 B101 Haidian 62525668
sp4 Tom Zhao M 72-12-9 13022654523 B102 Chaoyang 64427202
sp5 Lily Wang F 75-3-8 13685653369 B102 Chaoyang 64427202
t1 sp6 Peter Li M 62-7-5 13312650852 B103 Xicheng 68683326
t2 sp7 Peter Li M 82-9-6 13412751834 B103 Xicheng 68683326

empName ? birthday
检验A → B在R中是否成立:对于R的任一个关系
r,如果r中任意两个元组t1和t2都满足:若t1[A]=
t2[A],则t1[B]= t2[B]。那么A → B成立。
一一对应
定义7.2: 如果AB,并且B  A,则称A和B
一一对应,记作AB。
branchID  branchName
branchName  branchID

branchID  branchName

Other example?
非平凡函数依赖 (Nontrivial Dependencies)
sex, empName sex, empName
sex, empName sex
sex, empName empName ……
定义7.3:如果A  B,并且BA,则称此函
数依赖为平凡的函数依赖(trivial
functional dependancy)
与此对应,A  B,但B不是A的任一个子集,
则称A  B为非平凡的函数依赖。
一般不特殊指明的情况下,我们总是讨论非平凡函
数依赖
部分函数依赖
定义7.4:如果A  B,并且B不依赖于A的任
何非空真子集,则称B完全函数依赖于A,
函数依赖,A  B是完全函数依赖(fully
functional dependency)。
A f >B
如果存在A的某个真子集C,C  B,则称A
 B 是 部 分 函 数 依 赖 ( partial
dependency),B部分依赖于A。
A p >B
 例如:empID sex,empID, empNamesex
传递函数依赖
定义7.5:如果A  B,B A,B  C,则称C通过
B传递函数依赖于A,或简称C传递函数依赖于
A,函数依赖A  C称为传递依赖(transitive
dependency)。
 例如:empID branchID, branchIDbranchName
empID  branchName
 如果B  A同时成立,则A和B是一一对应,A
 C就不是传递依赖了,即C是直接依赖于A。
 例如:branchID branchName
branchNamebranchTelNo
branchIDbranchTelNo
Armstrong公理系统
Armstrong’ Axioms
函数依赖集的闭包(closure)
 如何找出所有的函数依赖?
定义7.6:一个函数依赖集F的闭包(closure)
是F所逻辑蕴涵的所有的函数依赖的集合,
记为F+。即F+={X→Y | F|=X→Y }
 The set of all FDs that are implied by a
given set F of FDs is called the closure
of F, written F+.
函数依赖集的闭包(closure)
 设F是R的函数依赖集合,X→Y是R的一
个函数依赖,如果一关系模式满足F,则
必然满足X→Y,则称F逻辑蕴涵X→Y,
表示为F|=X→Y。

 例如 :
F={empID→branchID, branchID→branchName}
F |= empID→branchName
Armstrong’ Axioms

 假设A、B、C和D是关系模式R的四个属性
组,Armstrong公理包括三条推理规则:
 自反律(reflexivity):若AB,则AB。
自含律(Self-determination)AA
 增广律(augmentation):若AB,则对任意
的属性组C,ACBC成立。
 传递律(transitivity):若AB和BC成立,
则AC成立。
Armstrong 公理
①若AB,则AB
设t1,t2是R中任意两个元组。若t1[A]=t2[A],则
由于BA,所以t1[B]=t2[B],故A→B成立。
如: branchID, branchName → branchID
B A
emp emp sex birthday spTelNo branch branch branch
ID Name ID Name TelNo

t1 sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668


t2 sp2 Philip Li M 67-5-2 13901213146 B101 Haidian 62525668
sp3 Jane He F 62-9-7 13805352210 B101 Haidian 62525668
sp4 Tom Zhao M 72-12-9 13022654523 B102 Chaoyang 64427202
sp5 Lily Wang F 75-3-8 13685653369 B102 Chaoyang 64427202
Armstrong 公理
②若AB,则对任意的属性组C,ACBC成立
若t1[AC]=t2[AC],则t1[A]=t2[A],t1[C]=t2[C],由
于A→B,所以t1[B]=t2[B],故t1[BC]=t2[BC] 即
AC→BC。 如:empID → empName
A B C
emp emp sex birthday spTelNo roomNo
ID Name
sp1 Connie Liu F 70-1-20 62783456 101
t1 sp1 Connie Liu F 70-1-20 13901233456 102
t2 sp1 Connie Liu F 70-1-20 13901233456 101
sp1 Connie Liu F 70-1-20 62783456 102
sp4 Tom Zhao M 72-12-9 13022654523 103
sp5 Connie Liu F 75-3-8 13685653369 104
Armstrong 公理
③若AB和BC成立,则AC成立
因A→B, 若t1[A]=t2[A] ,则t1[B]=t2[B], 又
因B→C,则t1[C]=t2[C], 故A→C成立。
A B C
emp emp sex birthday spTelNo branch branch branch
ID Name ID Name TelNo

t1 sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668


t2 sp1 Connie Liu F 70-1-20 13901082345 B101 Haidian 62525668
sp3 Jane He F 62-9-7 13805352210 B101 Haidian 62525668
sp4 Tom Zhao M 72-12-9 13022654523 B102 Chaoyang 64427202
sp5 Lily Wang F 75-3-8 13685653369 B102 Chaoyang 64427202
sp6 Peter Li M 62-7-5 13312650852 B103 Xicheng 68683326
Further rules
 合并律(union): 若AB和AC成立,
则A BC成立。
A → B =| A → A B ;
A →C=| A B → BC ;由传递率,则A → BC
 分解律(decomposition):若A BC成
立,则AB和AC成立。
B BC =| BC →B,又因 A → BC ,故A →B成立
C BC =| BC →C,又因 A → BC ,故A →C成立
 伪 传 递 律 ( pseudo transitivity ) : 若
AB和BDC成立,则AD C成立
A → B =| A D→ B D ;又因 B D →C,故A D→C成立
应用
例:设有关系R(ABCDE),F={A→BC,
CD →E,B →D,E → A},求R所有的候选
键。
1)由于A →BC, B →D, 所以A →BCD, 又因为CD
→E, 所以A →BCDE。
2)由于E → A,所以E →ABCDE
3)由于CD → E,所以CD →ABCDE
4 ) 由 于 B →D , 所 以 BC →CD, 又 因 为 CD
→ABCDE ,所以BC →ABCDE
课堂练习
1. 已知 R(U,F), U=ABCD, F={A →B, BD→A,
A →D},求R的所有候选键

2. 已知 R(U,F), U=ABCDE, F={A →BC,


BD→E, B→DA},求R的所有候选键
规律
一个不包含在任何函数依赖中的属性

一个只出现在函数依赖的右边的属性
Review
更新异常
函数依赖: 决定因素
非平凡函数依赖、一一对应
部分依赖、传递依赖
Armstrong公理
自反、增广、传递
合并、分解、伪传递
函数依赖集F的闭包
要判断一个函数依赖AB是否被F所逻辑蕴涵,
可以先求出F+,然后检查F+是否包含AB。
但是,当F包括很多个函数依赖时,F+是很难求出

假设有这样一个函数依赖XY1Y2…Yn,其中Yi
(i=1, 2, …, n)是单个属性,则根据分解律,可
以得到形如XZ (ZY1Y2…Yn)的函数依赖的个
数?

由此可见,求F+是一件很费时的工作
属性组的闭包
 定义7.7:设A是关系模式R(U, F) 的一个
属性组,A关于F的闭包,记为A+ ,定义
为满足AB的所有属性B的集合,其中,
AB是根据Armstrong的推理规则可以从F
推导出的。
 引理:A→B可由Armstrong公理导出的充
分必要条件是B  A+。
算法7.1:属性组的闭包的计算
已知关系模式R(U,F),其中U代表R的所有属
性组成的属性集,F是U上的函数依赖集,
属性组AU的闭包A+的计算方法:
s1=A;
do{
s0=s1;
if exists VW in F such that Vs0 and W-s0
s1=s1W;
} while (s0!=s1 and s1!=U);
output(s1);
闭包的计算
算法7.1:计算属性集A关于F的闭包A+。
输入:属性集AU,函数依赖集F。
输出:A+。
①初始化:s1=A;
②s0=s1, 求属性集B={X|(v)(w)(v→w F  vs0 
Xw}
③s1=Bs1, 若s1≠s0且s1 ≠ U ,则返回②继续计算。
④若s0=s1 或 s1=U ,则A+=s1,计算结束。
闭包的计算:example
例 : 设 R(U, F), U={A,B,C,D,E,G}, F={AB→C,
D→EG, C→A, BE→C, BC→D, CG→BD,
ACD→B, CE→AG}, 求BD+.
解:①初始化:s1=BD;
②s0=s1=BD, 找左部为BD的子集的函数依赖,只有
D→EG,故s1=BDEG.
③s1≠s0 ,s0=s1=BDEG. 找左部为BDEG的子集的函
数依赖,有D→EG,BE→C, 故s1=BDEGC.
④s1≠s0 ,s0=s1=BDEGC,找左部为BDEGC的子集
的 函 数 依 赖 , 有 C→A, BC→D, CG→BD,
CE→AG, 故s1=ABCDEG=U,不必继续迭代,计
算结束。
最小覆盖
 一个函数依赖集F的闭包F+通常包含很多函数依赖,有些是
无意义的,如平凡的函数依赖,有些可由另外一些推导出
 如果将每一个函数依赖看作对关系的一个约束,要检查F+中
的每一个函数依赖对应的约束,显然是一件很繁重的任务。
 如果能找出一个与F等价的包含较少数目函数依赖的函数依
赖集G,则可以简化此工作。
 定义7.8:F、G是关系模式R上的两个函数依
赖集,若F+=G+,则称F 和G 是等价的
( equivalent ),或G覆盖F,或F覆盖G,或
F和G相互覆盖。
最小覆盖的定义
 定义7.9:一个函数依赖集G如果满足如下三
个条件,则称为函数依赖集F的一个最小覆盖。
① G中的每个函数依赖的右边是单个属性;
② G中不存在这样的函数依赖AB,使得
G-{AB}{VB} 与G等价,
其中V是A的真子集;
③ G中不存在这样的函数依赖AB,使得
G-{AB}与G等价;
最小覆盖
引理:任一函数依赖集F总可以为一右部恒为单属性
的函数依赖集所覆盖。
定理7.1:任一函数依赖集F都与一最小函数依赖集F’
等价,F’称为F的最小覆盖。
证明:只要能构造一个满足定义7.9的覆盖G,该定
理即得证。
(1)根据引理,F总可以为一右部恒为单属性的函
数依赖集所覆盖,设此覆盖为G1,则G1满足定义
7.9中的条件1。
最小覆盖
(2) 对G1中的每一个函数依赖AB检查:
 是否存在A的某个真子集V使VB成立,而且
不存在任何V的真子集W使WB成立。如果
存在这样的V,则用VB替换AB。
 如果VB成立,说明AB是一个部分依赖,
因此F中必定存在或可以推导出相应的完全依
赖VB,而由VB根据增广律可以得到
AB,因此将AB用VB替换的函数依赖
集与F是等价的。
 处理后的函数依赖集记为G2。G2符合定义7.9
中的条件(1)和(2)。
最小覆盖
(3) 对G2中的每一个函数依赖AB进行如下
检查:通过函数依赖集G2-{AB}能否推
导出AB?如果可以,令G2=G2-{AB}。
 经过以上步骤处理后的函数依赖集G2必定
满足定义7.9中的3个条件,因而得到了F的
最小覆盖
 需要注意的是,F的最小覆盖不是唯一的.
最小覆盖:例7.6
 设F是关系模式R(ABCD)的函数依赖集,
F={AC,BAC,BDA,DAC},求F的
最小覆盖。
1. 根据分解律将右部分解为单个属性, G1={AC,
CA,BA,BC,BDA,DA,DC};
2. 由G1中的BA,根据增广律可得BDA,故
BDA是部分依赖,可以删除,G2={ AC,
CA,BA,BC,DA,DC};
3. 对于G2中的BA,由BC和CA根据传递律
可以得出,因而冗余,从G2中删除;
对于DA,由DC和CA根据传递律也可以
得出,故应删除,这样得到了G3=={AC,
CA,BC,DC}。
最小覆盖:例7.6
在第3步中,若首先检查的是BC,则可以
发现它是冗余的,应该删去,接着也可以
在检查DA之前检查DC,则可以发现
DC是多余的。
为此根据检查的函数依赖的先后顺序不同,
还可以得到另外三个不同的最小覆盖如下:
G={AC,CA,BA,DC}
G={AC,CA,BC,DA}
G={AC,CA,BA,DA}
homework
1. 书后7.4。
一个有5个属性的关系模式R(ABCDE),函数依
赖集为F={A → BDE, CE → D, E → A}
2. 下面的结论哪些是正确的,哪些是错误的,错误
的给出一个反例。
① 若R(ABC),B →A,C→A,则BC →A
② 若R(ABC),AB →AC,则B →C
③ 若R(ABC),B C→A,则C→A,B →A
④ 若R(ABCD),A → B, C →D, 则AC →BD
范式
Normal Forms
1NF
1NF
emp emp sex spTelNo address branchI branch branch
ID Name D Name TelNo

sp1 Connie F 13901082345, 海淀区 B101 Haidian 62525668


Liu 62525661 中关村南 branch
大街
sp2 PhilipM 13901213146, 海淀区 B101 Haidian 62525668
Li 62525661 中关村南 branch
大街
sp3 Jane He F 13805352210, 朝阳区 B101 Haidian 62525668
62525663 樱花东街 branch
1NF
empID emp sex spTelNo district street branchNo branch branch
Name Name TelNo

sp1 Connie F 13901082345 海淀区 中关村南 B101 Haidian 62525668


Liu 大街 branch
sp1 Connie F 62525661 海淀区 中关村南 B101 Haidian 62525668
Liu 大街 branch
sp2 Philip Li M 13901213146 海淀区 中关村南 B101 Haidian 62525668
大街 branch
sp2 Philip Li M 62525661 海淀区 中关村南 B101 Haidian 62525668
大街 branch
sp3 Jane He F 13805352210 朝阳区 樱花东街 B101 Haidian 62525668
branch
sp3 Jane He F 62525663 朝阳区 樱花东街 B101 Haidian 62525668
branch
2NF
2NF
定义7.11:一个属于1NF的关系模式R,如果每
个非主属性都完全函数依赖于关系的候选
键,则关系模式R属于2NF,记为R2NF。
empID emp sex spTelNo district street branch branch Branch
Name No Name TelNo
sp1 Connie F 13901082345 海淀区 中关村 B101 Haidian 62525668
Liu 南大街 branch
sp1 Connie F 62525661 海淀区 中关村 B101 Haidian 62525668
Liu 南大街 branch
sp2 Philip M 13901213146 海淀区 中关村 B101 Haidian 62525668
Li 南大街 branch
Sp2 Philip M 62525661 海淀区 中关村 B101 Haidian 62525668
Li 南大街 branch
2NF
 候选键:
 函数依赖:
 empID→ empName
 empID → sex
 empID → district
 empID → street
 empID → branchID
 empID → branchName
 empID → branchTelNo
2NF
emp emp sex district street branch branch branch empID spTelNo
ID Name ID Name TelNo
sp1 13901082345
sp1 Connie F 海淀区 中关村 B101 Haidian 62525668
Liu 南大街 branch sp1 62525661

sp2 13901213146
sp2 Philip M 海淀区 中关村 B101 Haidian 62525668
Li 南大街 branch sp2 62525662

sp3 13805352210
sp3 Jane F 朝阳区 樱花东 B101 Haidian 62525668
He 街 branch sp3 62525663
3NF
3NF
定义7.12:一个属于1NF的关系模式R,如果
不存在任何非主属性对候选键的传递函
数依赖,则关系模式R属于3NF,记为
R3NF。
3NF
 若R3NF,则必有R2NF,反过来说,
如果一个关系模式R不属于2NF,则R必不
属于3NF。
 若R2NF,则至少存在一个非主属性对候选键
的部分依赖,假设该部分依赖为A → C,其中A
是R的候选键,C为R的非主属性,而C完全依赖
于A的某真子集B,即B → C,由于BA,由自
反律可得:A → B,并且B A,否则A不是候
选键,因此,由A → B,B A,B → C,可知
A → C是个传递依赖,C通过B传递函数依赖于
A,因此R3NF。
3NF
例:
emp emp sex district street branchI branch branch
ID Name D Name TelNo
sp1 Connie F 海淀区 中关村 B101 Haidian 62525668
Liu 南大街 branch

sp2 Philip M 海淀区 中关村 B101 Haidian 62525668


Li 南大街 branch
sp3 Jane He F 朝阳区 樱花东 B101 Haidian 62525668
街 branch
3NF
 empID → branchID, branchID →
branchName
 empID → branchID, branchID→
branchTelNo
 假设北京市的街道没有重名
 empID → street, street → district
3NF
empID emp Name sex street branch No
sp1 Connie Liu F 中关村南大街 B101
sp2 Philip Li M 中关村南大街 B101
sp3 Jane He F 樱花东街 B101
sp4 Tom Zhao M 朝阳门内大街 B102
sp5 Lily Wang F 和平西街 B102
sp6 Peter Li M 崇文门外大街 B103

street district
branchID branchName branchTelNo
中关村南大街 海淀区
樱花东街 朝阳区 B101 Haidian branch 62525668
朝阳门内大街 东城区
B102 Chaoyang branch 64427202
和平西街 朝阳区
崇文门外大街 崇文区 B103 Xicheng branch 68683326
BCNF
BCNF
 BCNF (Boyce Codd Normal Form)是由Boyce和
Codd 提 出 的 , 它 比 3NF 又 进 一 步 , 通 常 认 为
BCNF是修正的第三范式,有时也称为3NF。
 定义7.13: 一个属于1NF的关系模式R,对
于每个非平凡的函数依赖A→B, 若其决定
因素都是超键,则关系模式R属于BCNF,
记为RBCNF。
即,F中每一个决定因素都包含键,则R∈BCNF。
BCNF
若R∈BCNF,则R∈3NF
证明:假设R∈BCNF,但R不属于3NF。
若R不属于3NF,则存在非主属性Z对键X的传
递依赖,即:X->Y,Y不决定X,Y->Z。
由于Y不决定X,故Y不可能是候选键,
而若R∈BCNF,Y->Z,Y必须是超键,即Y肯
定决定X,结果互相矛盾,假设不成立。
若R∈3NF,则R不一定属于BCNF
BCNF
Order(orderNo, customerNo, empID, orderDate)
订单号、客户编号、负责该订单的销售员
的编号、订单提交的日期
如果每个订单只对应一个客户,但可以由多个销
售员共同负责,一个客户在一天内最多提交一个
订单,则存在的函数依赖包括:
orderNo→ (customerNo, orderDate)
(customerNo, orderDate) → orderNo
BCNF
关系模式Order的候选键有哪些?
(orderNo, empID)
(customerNo, orderDate, empID)

orderNo customerNo empID orderDate

11 10005 2 06-10-5

11 10005 6 06-10-5

12 10002 1 06-10-12
BCNF
分解
(orderNo, empID)
(customerNo, orderDate, orderNo )

orderNo empID
orderNo customerNo orderDate
11 2
11 10005 06-10-5
11 6
12 10002 06-10-12
12 1
对于每个非平凡的?函数依赖A→B, 若
其决定因素都是超键
empID emp Name sex street branch No
sp1 Connie Liu F 中关村南大街 B101
sp2 Philip Li M 中关村南大街 B101
sp3 Jane He F 樱花东街 B101
sp4 Tom Zhao M 朝阳门内大街 B102
sp5 Lily Wang F 和平西街 B102
sp6 Peter Li M 崇文门外大街 B103
BCNF
在函数依赖的范围里,如果将一个数据库模式的
每一个关系模式R(U,F)依据规范化理论,分解为
一个关系模式的集合={R1, R2, …, Rk}代替,其
中R1 、R2、 …、Rk 每个都属于BCNF。那么在函
数依赖的范围里它已实现了彻底的分解,已清除
了由于函数依赖而引起的更新异常问题。
多值依赖

Multi-Valued Dependence
多值依赖

那么符合BCNF的关系模式就不会存在存储异常问
题呢?

例 关系Course(Cno,Tno,Bno)
一个课程由若干老师讲授,
一个老师讲若干门课,
每一课程都有一套固定的参考书
多值依赖
Cno Tno Bno
C1 T1 B1
C1 T1 B2
C1 T1 B3
C1 T2 B1
C1 T2 B2
C1 T2 B3
C2 T1 B1
C2 T1 B4
C2 T3 B1
C2 T3 B4
多值依赖
函数依赖

候选键?

course属于?NF
多值依赖
更新异常
 重复:冗余
 当要增加一名教师时,若相应的参考书多于一个,必
须插入多个元组。如增加一个教C1课的教师T3,必须
加添元组(C1,T3,B1)、(C1,T3,B3)、(C1,T3,B3);
 同样要删掉某一个老师的一门课,如T3教师的C1课,
也必须删掉三个元组,很明显增删都不方便

 原因:多值依赖(Multi-Valued Dependence )
多值依赖
定义7.14:假设A和B是关系模式R(U)的两个属性
组,若对于R的任一个关系r,A的每一个取值对
应B的一组取值,而这组取值与R的其他属性C
(C=U-AB)的取值是没有关系的,则称多值依赖
A→→B成立

例如,course(Cno,Tno,Bno)中,对于Cno的一个取
值C1,有一组Tno的取值{T1,T2}与之对应,它仅
取决于C1,而对于B上的值无关,故Cno→→Tno

多值依赖
Cno Tno Bno
例,course(Cno,Tno,Bno)
C1 T1 B1
对于Cno的一个取值C1,有
一组Tno的取值{T1,T2}与 C1 T1 B2
之对应,它仅取决于C1, C1 T1 B3
而对于B上的值无关,故 C1 T2 B1
Cno→→Tno 。 C1 T2 B2
C1 T2 B3
C2 T1 B1
C2 T1 B4
C2 T3 B1
C2 T3 B4
例子
关系模式为 BTL(branchID, branchTelNo, branchLeader)
每一个分支机构(branchID)可以对应多个联系电话
(branchTelNo),
每个分支机构(branchID)可有多个负责人
(branchLeader)
例子
branchID branchTelNo Branch
Leader
B101 62525668 sp1
B101 62525669 sp1
B101 62525668 sp2
B101 62525669 sp2
B102 62712689 sp3
B102 62712688 sp3
多值依赖
BID Tel Leader
B101 62525668 sp1
B101 62525669 sp1
B101 62525668 sp2
B101 62525669 sp2

 属性BID的一个取值:B101,
对应属性Tel的两个取值:62525668和62525669,
而这两个取值与另一个属性Leader取值为sp1还是
sp2没有关系,因此多值依赖
branchID→→branchTelNo成立。
多值依赖
 branchID→→branchTelNo BID Tel Leader
成立吗? B101 62525668 sp1
B101 62525669 sp1
B101 62525668 sp2

 属性BID的一个取值:B101,
对应属性Tel的两个取值:62525668和62525669,
而这两个取值与另一个属性Leader取值为sp1还是
sp2有没有关系
多值依赖
 检查多值依赖A→→B对于R(U)是否成立的另
一个方法为,检验下列式子对于A的每一个取值a
是否在R的任一个关系r中都成立。(C=U-AB )

πBC(σA=a(R))= πB(σA=a(R))πC(σA=a(R))

 a=B101
BID Tel Leader Tel Leader
Tel Leader
B101 62525668 sp1 62525668 sp1
62525668 sp1
B101 62525669 sp1 62525669 sp1 = ×
62525669 sp2
B101 62525668 sp2 62525668 sp2
B101 62525669 sp2 62525669 sp2
多值依赖性质
R(U)
①互补律(complementation)
若A→→B成立,则A→→U-AB成立
例 BTL(BID,Tel,Leader), BID→→Tel ,
BID→→Leader

BID Tel Leader


B101 62525668 sp1
B101 62525669 sp1
B101 62525668 sp2
B101 62525669 sp2
多值依赖性质
多值依赖有以下:R(U)
②复制律(replication)
若A→B成立,则A→→B成立
即函数依赖是多值依赖的一个特殊情况。

emp ID emp Name sex


sp1 Connie Liu F
sp2 Philip Li M
sp3 Jane He F
平凡多值依赖
 定义7.15:A→→B是关系模式R(U)的
多值依赖,如果B是A的子集,或者
AB=U,则此多值依赖称为是平凡的多
值依赖。
empID spTelNo
sp1 13901082345
sp1 62525661
sp2 13901213146
sp2 62525662
sp3 13805352210
sp3 62525663
4NF
4NF
定义7.16:一个属于1NF的关系模式R(U), 若
其中存在的每一个多值依赖A→→B都满
足以下两个条件之一,则关系模式R属于
4NF,记为R4NF。
 B是A的子集或AB=U,即A→→B是平凡的
多值依赖;
 A是超键

 每个非平凡的多值依赖的左边都是超键
4NF
属于4NF的关系模式必然属于BCNF,反之,
不属于BCNF的关系模式必不属于4NF。
如果关系模式R不属于BCNF,则至少存在
一个非平凡的函数依赖A→B,其中A不是
超键,由复制律可知,多值依赖A→→B在
R中成立,且
A不是超键,
B不是A的子集(因为A→B是非平凡的函数依
赖),
AB≠U(否则A必是超键),
因而R不属于4NF。
4NF
Cno Tno Bno
例,course(Cno,Tno,Bno)
C1 T1 B1
Cno→→Tno
C1 T1 B2
Cno→→Bno
C1 T1 B3
C1 T2 B1
C1 T2 B2
C1 T2 B3
C2 T1 B1
C2 T1 B4
C2 T3 B1
C2 T3 B4
4NF
Cno Tno
例,course(Cno,Tno,Bno) C1 T1
C1 T2
分解为
C2 T1
R1(Cno,Tno)∈4NF,
C2 T3
R2(Cno,Bno)∈4NF.
Cno Bno
C1 B1
C1 B2
C1 B3
C2 B1
C2 B4
4NF
对BTL来说,存在两个非平凡的多值依赖:
branchID→→branchTelNo
branchID→→branchLeader
其左部都不是超键,因而不属于4NF,可以采用分
解的方式,分解为两个关系模式:
BT(branchID, branchTelNo)
BL(branchID, branchLeader)

BID Tel BID Leader


B101 62525668 B101 sp1
B101 62525669 B101 sp2
homework
1. 书后7.4。
一个有5个属性的关系模式R(ABCDE),函数依
赖集为F={A → BDE, CE → D, E → A}
① 求A+,C+,E+
② 求出R的最小覆盖
作业
3. 书上 7.5
请判断以下各关系模式在函数依赖的范围里分别
最高属于几范式(至少1NF),为什么?
① R(ABC), F={A→B}
② R(ABCD), F={A→C, DA→B}
③ R(ABC), F={AC→B, B→C}
④ R(ABCD), F={A→C, C→A, C→D, A→B}
⑤ R(ABCDE), F={AB→CE, E→AB, C→D}
个人作业
7.8 关系模式R(ABCDE) 的关系如表7.19所示,
该关系是否隐含依赖:AB→C和AB→→C?,将
关系进行如下修改,再回答此问题:
① 将第2行和第4行元组替换为(1,b,3,d,e)和(a,b,3,1,5)
后如何?
③ 删除表7.19中的后三行,插入行(1, b, 3, d, 5)后如何?
表7.19 关系R(ABCDE)

A B C D E
a b c d e
a b 3 d e
a b c d 5
a b 3 d 5

You might also like