重要结论:
1.在关系DB中,二元关系模式的最高范式为4NF。
2.关系模式 R 中的属性全部是主属性,则 R 的最高范式必定是(3NF )
6.1 问题的提出
Ⅰ 关系模式看作一个三元组:R
Ⅱ 属性间的联系:一对一联系、多对一联系、多对多联系
Ⅲ 数据依赖:是一个关系内部属性与属性之间的一种约束关系,通过属性间值的相等与否体现出来的数据间相互联系
(1)数据依赖的主要类型
6.2 规范化
6.2.1 函数依赖
1.函数依赖
一、定义: 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
二、函数依赖与属性间的联系类型有关
(1) 一对一联系:X←→Y
(2) 多对一联系:X→Y
(3) 多对多联系:不存在依赖关系
(4) 可从属性间的联系类型来分析属性间的函数依赖
2.平凡函数依赖与非平凡函数依赖
①X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
②X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
例:在关系SC(Sno, Cno, Grade)中,
非平凡函数依赖: (Sno, Cno) → Grade
平凡函数依赖: (Sno, Cno) → Sno
(Sno, Cno) → Cno
3.完全函数依赖与部分函数依赖
①在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ Y, 则称Y对X完全函数依赖,记作X → Y。
②若X→Y,但x的真子集不决定y,则称Y对X部分函数依赖,记作X → Y
4.传递函数依赖
定义: 在R(U)中,如果X→Y(Y⊈X),YX,Y→Z,Z⊈Y, 则称Z对X传递函数依赖(transitive functional dependency)。记为:X → Z。
注: 如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。
[例] 在关系Std(Sno, Sdept, Mname)中,有:Sno → Sdept,Sdept → Mname,Mname传递函数依赖于Sno
6.2.2 码
定义: 设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。
(1)主属性与非主属性
n包含在任何一个候选码中的属性 ,称为主属性 (Prime attribute)
n不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
(2)全码:整个属性组是码,称为全码(All-key)
(3) 外码:关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。
6.2.3 范式
6.2.4 2NF:不存在非主属性对码的部分函数依赖
6.2.5 3NF:在第二范式的基础上,不存在非主属性对码的传递函数依赖
例:2NF关系模式S-L(Sno, Sdept, Sloc)中
函数依赖:
Sno→Sdept
Sdept → Sno
Sdept→Sloc
6.2.6 BCNF:在第三范式的基础上,不存在主属性对码的部分函数依赖和传递函数依赖,即每一个决定属性集都包含候选码
[例6.8] 关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。
- 由语义可得到函数依赖:(S,J)→T;(S,T)→J;T→J
- 因为没有任何非主属性对码传递依赖或部分依赖, STJ ∈ 3NF。
- 因为T是决定因素,而T不包含码,所以STJ 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值无关。
例: Teaching(C, T, B)
对于C的每一个值,T有一组值与之对应,而不论B取何值。因此T多值依赖于C,即C→→T。
(一)平凡多值依赖和非平凡的多值依赖
若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。否则称X→→Y为非平凡的多值依赖(即Z不为空集)。
(二)多值依赖的性质
(1)多值依赖具有对称性。即若X→→Y,则X→→Z,其中Z=U-X-Y
(2)多值依赖具有传递性。即若X→→Y,Y→→Z, 则 X→→Z -Y。
(3)函数依赖是多值依赖的特殊情况。即若X→Y,则 X→→Y。
(4)若X→→Y,X→→Z,则X→→YZ。
(5)若X→→Y,X→→Z,则X→→Y∩Z。
(6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。
(三)多值依赖与函数依赖的区别
(1)多值依赖的有效性与属性集的范围有关
若X→→Y在U上成立,则在W上一定成立;反之则不然,即X→→Y在W上成立,在U上并不一定成立。
(2)若函数依赖X→Y在R (U)上成立,则对于任何Y‘均有X→Y’ 成立。多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y’ 有X→→Y’ 成立。
6.2.8 4NF
定义: 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。
v不允许有非平凡且非函数依赖的多值依赖。
v允许的非平凡多值依赖实际上是函数依赖。
6.2.9 规范化小结
注意:不能说规范化程度越高的关系模式就越好。
6.3 数据依赖的公理系统
(1)定义6.11 对于满足一组函数依赖F的关系模式 R <U,F>,其任何一个关系r,若函数依赖X→Y都成立(即r中任意两元组t、s,若t[X]=s[X],则 t[Y]=s[Y]),则称F逻辑蕴涵X →Y。
(2)Armstrong公理系统
设U为属性集总体,F是U上的一组函数依赖, 于是有关系模式R <U,F >。对R <U,F> 来说有以下的推理规则:
A1 自反律(reflexivity rule):若Y X U,则X →Y 为F所蕴涵。
A2 增广律(augmentation rule):若X→Y为F所蕴涵,且Z U,则XZ→YZ 为F所蕴涵。
A3 传递律(transitivity rule):若X→Y及Y→Z为F所蕴涵,则X→Z 为F所蕴涵。
注意:由自反律所得到的函数依赖均是平凡的函数依赖, 自反律的使用并不依赖于F。
※根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:
n 合并规则(union rule):由X→Y,X→Z,有X→YZ。
n 伪传递规则(pseudo transitivity rule): 由X→Y,WY→Z,有XW→Z。
n 分解规则(decomposition rule): 由X→Y及ZY,有X→Z。
※根据合并规则和分解规则,可得引理6.1
引理6.1 X→A1 A2…Ak成立的充分必要条件是X→Ai成立(i=1,2,…,k)。
(3)定义6.12 在关系模式R<U,F>中为F所逻辑蕴涵的函数依赖的全体叫作F的闭包,记为。
(4)定义6.13 设F为属性集U上的一组函数依赖,X、YU, ={ A|X→A能由F根据Armstrong公理导出},称为属性集X关于函数依赖集F的闭包。
求闭包:
(5)定义6.14 如果,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价。
注意:两个函数依赖集等价是指它们的闭包等价
(6)定义6.15 如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
(1)单属性化: F中任一函数依赖的右部仅含有一个属性。
(2)无冗余化: F中不存在这样的函数依赖X→A, 使得F与F-{X→A}等价。即F中的函数依赖均不能由F中其他函数依赖导出
(3)既约化: F中不存在这样的函数依赖X→A, X有真子集Z使得F-{X→A}∪{Z→A}与F等价。即F中各函数依赖左部均为最小属性集(不存在冗余属性)
- 无冗余化实例:
注意:F的最小依赖集Fm不一定是唯一的,它与对各函数依赖FDi 及X→A中X各属性的处置顺序有关。
- 既约化实例:
6.4 模式的分解
(1)三种模式分解等价的定义:
⒈ 分解具有无损连接性
⒉ 分解要保持函数依赖
⒊ 分解既要保持函数依赖,又要具有无损连接性
(2)关系模式R的一个分解 ρ={ R11,F1>,R22,F2>, …,Rnn,Fn>},若R与R1、R2、…、Rn自然连接的结果相等,则称关系模式R的这个分解ρ具有无损连接性(Lossless join)
(3)
v如果一个分解具有无损连接性,则它能够保证不丢失信息
v如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况
v分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。具有无损连接性的分解不一定能够保持函数依赖;同样,保持函数依赖的分解也不一定具有无损连接性。
(4)分解算法
v算法6.2 判别一个分解的无损连接性
v算法6.3(合成法)转换为3NF的保持函数依赖的分解。
v算法6.4 转换为3NF既有无损连接性又保持函数依赖的分解
v算法6.5 (分解法)转换为BCNF的无损连接分解
v算法6.6 达到4NF的具有无损连接性的分解
6.5 小结