6.1 泛关系模式
6.1.1关系模式的形式化定义
关系模式的一般形式:R(U, D, DOM, F)
R :关系名
U :全部属性集合
D :属性所来自的域的集合
DOM:属性向域的映像集合
F :属性间数据的依赖关系集合
规范化理论主要讨论R <U, F>。
6.1.2泛关系模式
泛关系模式:把现实问题的所有属性组成一个关系模式
6.1.3泛关系模式存在的问题
(1) 数据冗余
(2) 更新异常
(3) 插入异常
(4) 删除异常
产生问题的原因:属性间约束关系(即数据间的依赖关系)太强。
解决问题的方法:分解关系
6.2函数依赖
函数依赖是判断关系模式规范化程度的基础理论。
6.2.1函数依赖的定义和性质
函数依赖:是数据依赖的一种,它反映一个关系中属性或属性组之间相互依存、互相制约的关系。
这种约束关系通过属性间的值相等与否来体现数据间的相互联系
定义:设R(U)是属性U上的一个关系模式,X和Y均为U={A ,A ,…,A }的子集,r为R的任一关系。
如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y](即r中不可能存在
两个元组在X上的属性值相等,而在Y上的属性不等),则称X函数决定Y,或称Y函数依赖于X,记为X→Y。
例1:具有函数依赖关系
sno→sname
cno→cname
(sno,cno)→grade
例2:不具有函数依赖关系
sno→× grade
cno→× tname
例3:例: Student(Sno, Sname, Ssex, Sage, Sdept)假设不允许重名,则有:
Sno → Ssex, Sno → Sage , Sno → Sdept,Sno ←→ Sname Sname → Ssex, Sname → Sage, Sname → Sdept
若X→Y,并且Y→X, 则记为X←→Y
属性间的联系决定函数依赖关系:
设X、Y均是U的子集,则:
(1)X和Y间联系是1:1,则X→Y,Y→X;
(2)X和Y间联系是M:1(M>1),则X→Y;
(3)X和Y间联系是M:N(M,N>1),则X、Y间不存在函数依赖。
6.2.2完全函数依赖和部分函数依赖
1)完全函数依赖:F
在R(U)中,如果X→Y,并且对于X的任何真子集X’都不存在X’→Y,则称Y完全函数依赖
于X,记作X F Y
2)部分函数依赖 P
如果X→Y,且X中存在一个真子集X’,使得X’→Y成立,则Y部分函数依赖于X,记作X P Y。
例:设有关系模式R(U,F),求其中的候选码:
U={A,B,C,D,E,P},
F={A→B,C →P,E →A,CE →D}
解:候选码 F U(完全依赖)
先找出推导式左端;其次,进行组合推到;选出能全部推导出的,并判断单一的是否会推出U,如果不能则为F,如果能则为P
答案:(C,E)
6.3低级范式
设K为关系模式R<U,F>中的属性或属性组合,如果 则K称为R的一个候选码
若有多个候选码,则选定其中的一个做为主码
6.3.1范式的概念
关系模式满足的确定约束条件称为范式,根据满足约束条件的级别不同,范式由低到高分为1NF、2NF、3NF、BCNF等。
满足最低要求的称为第一范式。
6.3.2第一范式(1NF)
关系模式的所有域为简单域,其元素不可再分,即属性不能再分,每个属性是数据项而不是属性组。
不满足1NF的关系称为非规范化关系。
6.3.3第二范式(2NF)
给定关系模式R及其上的函数依赖集F,如果R的任何一个非主属性都完全依赖于它的每个候选码,则称R是第二范式,简记为2NF。
定理:一个2NF的关系模式必定是1NF的。
步骤:1.找出候选键 2.找出非主属性 3.找非主属性的反例(不能存在非主属性被除候选码以外的属性推出)
SCT(sno,cno,cname,grade,tname,salary)
F={(sno,cno)→grade,cno→cname, cno→tname, tname→salary}
候选键:(sno,cno)
存在非主属性cname对候选码(sno,cno)的部分函数依赖cno->cname,所以为1NF
解决办法:
分解:SC ( sno,cno,grade ) CT ( cno,cname,tname,salary )
若R中所有候选码均为单属性,此时1NF必为2NF。因为不可能存在某个非主属性部分函数依赖于候选键 。
结论:若R∈1NF,且R中所有候选码均为单属性,则R ∈ 2NF。
6.4高级范式
6.4.1第三范式(3NF)
给定关系模式R及其上的函数依赖集F,如果R的任何一个非主属性都不传递函数依赖于它的任何一个侯选键,则称R是第三范式,简记为3NF。(同时非主属性也不部分依赖于键)
定理:一个3NF的关系模式必定是2NF的。
~关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z
(Z Y), 使得X→Y(Y 不函数决定X),Y→Z成立,则R<U,F> ∈3NF
~消除非主属性的传递函数依赖。
例1:CT ( cno,cname,tname,salary )
F={cno→tname,cno→cname,tname→salary},判断R属于第几范式。
解:存在非主属性salary传递函数依赖于候选键cno,故CT∈2NF,不是3NF。
可分解为:
C ( cno,cname,tname ),
T ( tname,salary ) 均是3NF
6.4.2 BC范式(BCNF)
给定关系模式R及其上的函数依赖集F,如果F中每个非平凡函数依赖X→Y的左部(决定因素)X中必含有候选键,则称R是Boyce/Codd 范式,简记为BCNF(改进的3NF)。
BCNF 含义
(1)非主属性对候选键完全函数依赖;
(2)非主属性不传递函数依赖于任何一个候选键;
(3)主属性对不含它的候选键完全函数依赖;
(4)主属性不传递函数依赖于任何一个候选键。
候选键为:(S,T)和(S,J)。R中没有非主属性,故R为3NF。
(1)函数依赖T→J的左部不是候选键,判断出R不是BCNF 。T是主属性,与候选键要区分
(2)也可由T→J知,存在主属性J对不包含它的候选键(S,T)的部分函数依赖,判断R不是BCNF。
候选键为:(S,J)和(P,J)。不存在主属性对不包含它的候选键的部分和传递函数依赖,则R不但是3NF,也是BCNF。
或者说,每个函数依赖的左部都是候选键,则R满足BCNF。
练习1:
有关系SJP(S,J,P)
S表示学生,J表示课程,P表示名次
每个学生选修每门课程的成绩有一定的名次,每门课程中每一名次只有一个学生
是否满足3NF,是否满足BCNF
解:SJ ->P ; JP->S
候选码:(SJ),(JP)
满足3NF,又推导式左端为候选码=>为BC范式
练习2:
R1:候选码:(A)(BC)(CD)(E)
又B->D中,B不为候选键(此处B为主属性,注意与候选键),所以不满足BC范式
R3:候选码:(AB)(AC),又C->E,不满足BC范式
练习
(1)R1(A,B,C), F={A→B,B →C, C→A }
候选码(A)(B)(C)
主属性{A,B,C} 非主属性:空集
最高满足BCNF,每个函数依赖左端都是候选码
(2)R2(A,B,C), F={A→B,B →C}
候选码(A)
主属性{A} 非主属性{B,C}
最高满足2NF,候选码是单属性符合2NF,但是存在非主属性C对于候选码A的传递函数依赖
(3)R3(A,B,C), F={A→B,A →C }
候选码(A)
主属性{A} 非主属性{B,C}
最高满足BCNF,每个函数依赖左端都是候选码A
(4)R4(A,B,C), F={A→B, C→B }
候选码(AC)
主属性{A,C} 非主属性 {B}
最高满足1NF,存在非主属性B对于候选码AC的部分函数依赖
(5)R5(A,B,C), F={A→B }
候选码(AC)
主属性{A,C} 非主属性{B}
最高满足1NF,存在非主属性B对于候选码AC的部分函数依赖
(6)R6(A,B,C), F={AB→C }
候选码(AB)
主属性{A,B} 非主属性{C}
最高满足BCNF,函数依赖左端都是候选码AB
总结:
1NF:非主属性对于候选码有部分函数依赖(即候选码中的某个主属性à非主属性)
2NF:任何一个非主属性都完全依赖它的每个候选码(存在函数传递依赖为2NF,侯à非à非)
3NF:任何一个非主属性都不传递函数依赖于它的任何一个候选键
BCNF:每个非平凡函数依赖X->Y的左部X中必含有候选键