关系数据理论
一.问题的提出
1.关系模式由五部分组成,是一个五元组
R(U,D,DOM,F)
- 关系名R是符号化的元组语义;
- U为一组属性;
- D为属性组U中的属性所来自的域;
- DOM为属性到域的映射;
- F为属性组U上的一组数据依赖。
①由于D、DOM与模式设计关系不大,因此在本章中把关系模式看做一个三元组:R<U,F>
②当且仅当U上的一个关系r满足F时,r称为关系模式R<U,F>的一个关系。
③作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
2.数据依赖
①是一个关系内部属性与属性之间的一种约束关系
通过属性间值的相等与否体现出来的数据间相互联系。
②是现实世界属性间相互联系的抽象。
③是数据内在的性质。
④是语义的体现。
3.数据依赖的主要类型
①函数依赖(Functional Dependency,FD)
第二、三范式,BCNF范式(修正的第三范式)
②多值依赖(Multi-Valued Dependency,MVD)
第四范式
4.函数依赖普遍存在于现实生活中
①描述一个学生关系,可以有学号、姓名、系名等属性:
a.一个学号只对应一个学生,一个学生只在一个系中学习;
b.“学号”值确定后,学生的姓名及所在系的值就被唯一确定。
Sname=f(Sno), Sdept=f(Sno)
- 即Sno函数决定Sname
- Sno函数决定Sdept
- 记作Sno->Sname,Sno->Sdept
②例子:建立一个描述学校教务的数据库。
涉及的对象包括:学生学号Sno、所在系Sdept、系主任姓名Mname、课程号Cno、成绩Grade。
假设学校教务的数据库模式用一个单一的关系模式Student来表示,则该关系模式的属性集合为:
U={Sno,Sdept,Mname,Cno,Grade}
现实世界的已知事实(语义):
- 一个系有若干学生,但一个学生只属于一个系;
- 一个系只有一名(正职)负责人;
- 一个学生可以选修多门课程,每门课程有若干学生选修;
- 每个学生学习每一门课程有一个成绩。
由此可得到属性组U上的一组函数依赖F:
F={Sno->Sdept,Sdept->Mname,(Sno,Cno)->Grade}
5.关系模式Student<U,F>中存在的问题
①数据冗余
浪费大量的存储空间:
- 每一个系主任的姓名重复出现,重复次数与该系所有学生的所有课程信息出现次数相同。
②更新异常(Update Anomalies)
数据冗余,更新数据时,维护数据完整性代价大:
- 某系更换系主任后,必须修改与该系学生有关的每一个元组。
③插入异常(Insertion Anomalies)
如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。
④删除异常(Deletion Anomalies)
如果某个系的学生全部毕业了,则在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。
6.结论
①Student关系模式不是一个好的模式。
②一个“好”的模式应当不会发送插入异常、删除异常和更新异常,数据冗余应尽可能少。
7.原因:
由存在于模式中的某些数据依赖引起的。
8.解决方法
用规范化理论改造关系模式来消除其中不合适的数据依赖。
把这个单一的模式分成三个关系模式:
S(Sno,Sdept,Sno->Sdept)
SC(Sno,Cno,Grade,(Sno,Cno)->Grade)
DEPT(Sdept,Mname,Sdept->Mname)
二.规范化
1.函数依赖
(1)函数依赖
①定义:
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。
若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
②例子: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
④若Y不函数依赖于X,则记为
⑤函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
⑥函数依赖是语义范畴的概念,只能根据数据的语义来确定一个函数依赖。
(2)平凡函数依赖与非平凡函数依赖
①X→Y,但Y⊈X:则称X→Y是非平凡的函数依赖。
②X→Y,但Y⊆X:则称X→Y是平凡的函数依赖。
a.对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。
b.若不特别声明,我们总是讨论非平凡函数依赖。
③若X→Y,则X称为这个函数依赖的决定因素(Determinant)。
④若X→Y,Y→X,则记作X←→Y。
⑤若Y不函数依赖于X,则记作
(3)完全函数依赖与部分函数依赖
①在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有
则称Y对X完全函数依赖,记作:
②若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作:
③例子:在关系SC(Sno,Cno,Grade)中,有:
由于
因此:
(4)传递函数依赖
①在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z
,Z⊈Y,则称Z对X传递函数依赖(transitive functional dependency),记为:
②如果有Y→X,即X←→Y,则Z直接依赖于X,而不是传递函数依赖。
③例子:关系Std(Sno,Sdept,Mname)中,有:
Sno→Sdept
Sdept→Mname
Mname传递函数依赖于Sno
2.码
(1)候选码和超码:
设K为R<U,F>中的属性或属性组合。 若
则K称为R的一个候选码(Candidate Key)。
如果U部分函数依赖于K,即:
则K称为超码(Surpkey)。
候选码是最小的超码,即K的任意一个真子集都不是候选码。
(2)主码
若关系模式R有多个候选码,则选定其中的一个作为主码(Primary Key)。
(3)主属性与非主属性
包含在任何一个候选码中的属性,称为主属性(Prime attribute)。
不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute) 。
(4)全码
整个属性组是码,称为全码(All-key)。
(5)例子:
S(Sno,Sdept,Sage),单个属性Sno是码;
SC(Sno,Cno,Grade)中,(Sno,Cno)是码。
(6)外码
关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreign Key),也称外码。
(7)主码与外码一起提供了表示关系间联系的手段。
3.范式
(1)范式是符合某一种级别的关系模式的集合。
(2)关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。
(3)范式的种类
第一范式1NF
第二范式2NF
第三范式3NF
BC范式BCNF
第四范式4NF
第五范式5NF
(4)各种范式之间存在联系:
某一关系模式R为第n范式,可简记为R∈nNF。
(5)一个低一级范式的关系模式,通过模式分解,可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
4.2NF
(1)定义:
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。
(2)例子:S-L-C(Sno,Sdept,Sloc,Cno,Grade),Sloc为学生的住处,并且每个系的学生住在同一个地方。取定S-L-C的码为(Sno,Cno)。
函数依赖有:
a.非主属性Sdept、Sloc并不完全依赖于码;
b.关系模式S-L-C不属于2NF。
(3)一个关系模式不属于2NF,会产生以下问题:
①插入异常
如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败。
②删除异常
如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了。
③修改复杂
如果一个学生选了多门课,则Sdept、Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。
(4)出现这种问题的原因
例子中有两类非主属性:
a.一类如Grade,它对码完全函数依赖;
b.另一类如Sdept、Sloc,它们对码不是完全函数依赖。
(5)解决方法
用投影分解把关系模式S-L-C分解成两个关系模式:
a.SC(Sno,Cno,Grade)
b.S-L(Sno,Sdept,Sloc)
- SC的码为(Sno,Cno),SL的码为Sno,这样使得非主属性对码都是完全函数依赖了。
5.3NF
(1)定义:
设关系模式R<U,F> ∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Y⊈Z),使得X→Y,Y→Z成立,且
则称R<U,F> ∈3NF。
①SC没有传递依赖,所以SC∈3NF。
②S-L中Sno→Sdept,Sdept→Sloc,可得:
所以,SL∉3NF。
③解决的方法是将S-L分解成:
S-D(Sno,Sdept)∈3NF
D-L(Sdept,Sloc)∈3NF
6.BCNF
(1)BCNF比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。
(2)定义:
设关系模式R<U,F>∈1NF,若X →Y且Y
⊈X时,X必含有码,则R<U,F>∈BCNF。
换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
(3)BCNF的关系模式所具有的性质
a.所有非主属性都完全函数依赖于每个候选码;
b.所有主属性都完全函数依赖于每个不包含它的候选码;
c.没有任何属性完全函数依赖于非码的任何一组属性。
(4)如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。
(5)例子
①考察关系模式C(Cno,Cname,Pcno)
a.它只有一个码Cno,没有任何属性对Cno部分依赖或传递依赖,所以C∈3NF。
b.同时C中Cno是唯一的决定因素,所以C∈BCNF。
②关系模式S(Sno,Sname,Sdept,Sage)
a.假定Sname也具有唯一性,那么S就有两个码,这两个码都由单个属性组成,彼此不相交。
b.其他属性不存在对码的传递依赖与部分依赖,所以S∈3NF。
c.同时S中除Sno,Sname外没有其他决定因素,所以S也属于BCNF。
③关系模式SJP(S,J,P)中,S是学生,J是课程,P是名次。每一个学生选修每门课程的成绩有一定的名次,每门课程中每一名次只有一个学生(即没有并列名次)。
a.由语义可得到函数依赖:(S,J)→P;(J,P)→S
b.(S,J)与(J,P)都可以作为候选码。
c.关系模式中没有属性对码传递依赖或部分依赖,所以SJP∈3NF。
d.除(S,J)与(J,P)以外没有其他决定因素,所以SJP∈BCNF。
④关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
分析:某一学生选定某门课,就对应一个固定的教师;每一教师只教一门课,每门课有若干教师。
a.由语义可得到函数依赖:(S,J)→T,(S,T)→J,T→J
b.因为没有任何非主属性对码传递依赖或部分依赖,STJ∈3NF。
c.因为T是决定因素之一,而T不包含码,所以STJ∉BCNF关系。
- T不是码,因为T不能决定S;
- (S,J),(S,T)都是候选码,所以S/T/J都是主属性,不存在非主属性。
(6)对于不是BCNF的关系模式,仍然存在不合适的地方。
(7)非BCNF的关系模式也可以通过分解成为BCNF。
(8)3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。
a.一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除异常。
b.3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。
7.多值依赖
(1)例子:设学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。每个教员可以讲授多门课程,每种参考书可以供多门课程使用。
用关系模式Teaching(C,T,B)来表示课程C、教师T和参考书B之间的关系。
①Teaching具有唯一候选码(C,T,B),即全码。
②Teaching∈BCNF。
③存在的问题:
a.数据冗余度大:有多名任课教师,参考书就要存储多少次。
b.增加操作复杂:当某一课程增加一名任课教师时,该课程有多少本参考书,就必须插入多少个元组。
c.删除操作复杂:某一门课要去掉一本参考书,该课程有多少名教师,就必须删除多少个元组。
d.修改操作复杂:某一门课要修改一本参考书,该课程有多少名教师,就必须修改多少个元组。
e.产生的原因:存在多值依赖。
(2)定义
设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。
(3)多值依赖的另一个等价的定义
在R(U)的任一关系r中,如果存在元组t,s使得t[X]=s[X],那么就必然存在元组w,v∈r,(w,v可以与s,t相同), 使得w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],
v[Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值所得的两个新元组必在r中), 则Y多值依赖于X,记为X→→Y。这里X,Y是U的子集,Z=U-X-Y。
(4)平凡多值依赖和非平凡的多值依赖
若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。
否则称X→→Y为非平凡的多值依赖。
(5)例子:关系模式WSC(W,S,C)中,W表示仓库,S表示保管员,C表示商品。假设每个仓库有若干个保管员,有若干种商品。每个保管员保管所在仓库的所有商品,每种商品被所有保管员保管。
①按照语义,对于W的每一个值Wi,S有一个完整的集合与之对应而不论C取何值。所以W→→S。
②对应W的某一个值Wi的全部S值记作{S}Wi(表示此仓库工作的全部保管员)。
③全部C值记作{C}Wi(表示在此仓库中存放的所有商品)。
④应当有{S}Wi中的每一个值和{C}Wi中的每一个C值对应。
⑤于是{S}Wi与{C}Wi之间正好形成了一个完全二分图,因而W→→S。
⑥由于S与C的完全对称性,必然有W→→C成立。
(6)多值依赖的性质
①对称性
a.若X→→Y,则X→→Z,其中Z=U-X-Y
b.多值依赖的对称性可以用完全二分图直观地表示出来。
②传递性
若X→→Y,Y→→Z, 则X→→Z - Y
③函数依赖是多值依赖的特殊情况
若X→Y,则X→→Y
④若X→→Y,X→→Z,则X→→YZ
⑤若X→→Y,X→→Z,则X→→Y∩Z
⑥若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y
(7)多值依赖与函数依赖的区别
①多值依赖的有效性与属性集的范围有关(设W ⊆ U)
a.若X→→Y在U上成立,则在W(XY⊆ W⊆ U)上一定成立;反之则不然,即X→→Y在W(W ⊆ U)上成立,在U上并不一定成立。
b.原因:多值依赖的定义中不仅涉及属性组X和Y,而且涉及U中其余属性Z。
c.一般地,在R(U)上若有X→→Y在W(W ⊆U)上成立,则称X→→Y为R(U)的嵌入型多值依赖。
d.函数依赖X→Y的有效性仅决定于X、Y这两个属性集的值。
e.只要在R(U)的任何一个关系r中,元组在X和Y上的值满足定义,则函数依赖X→Y在任何属性集W(XY⊆ W⊆U)上成立。
②若函数依赖X→Y在R (U)上成立,则对于任何Y’ ⊂ Y均有X→Y’ 成立。多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y’ ⊂ Y有X→→Y’ 成立。
例如:关系R(A,B,C,D),A→→BC成立,当然也有A→→D成立。有R的一个关系实例,在此实例上A→→B是不成立的。
8.4NF
(1)定义
关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。
(2)4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的非平凡多值依赖实际上是函数依赖。
(3)如果一个关系模式是4NF,则必为BCNF。
9.小结
(1)在关系数据库中,对关系模式的基本要求是满足第一范式。
(2)规范化程度过低的关系不一定能够很好地描述现实世界。
a.可能存在插入异常、删除异常、修改复杂、数据冗余等问题。
b.解决方法就是对其进行规范化,转换成高级范式。
(3)一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
(4)关系数据库的规范化理论是数据库逻辑设计的工具。
(5)规范化的基本思想
a.是逐步消除数据依赖中不合适的那部分,使模式中的各关系模式达到某种程度的“分离”。
b.即采用“一事一地”的模式设计原则:
- 让一个关系描述一个概念、一个实体或者实体间的一种联系。
- 若多于一个概念就把它“分离”出去。
c.因此规范化实质上是概念的单一化。
(6)不是规范化程度越高的关系模式就越好
a.必须对现实世界的实际情况和用户应用需求作进一步分许,确定一个合适的、能够反映现实世界的模式。
b.上面的规范化步骤可以在其中任何一步终止。
(7)若要求分解具有无损连接性,那么分解一定能够达到4NF。
(8)若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
(9)若分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。
(10)规范化理论为数据库设计提供理论的指南和工具
(11)并不是规范化程度越高,模式就越好。
必须结合应用环境和现实世界的具体情况合理地选择数据模式。