数据库第六章——关系数据理论
文章目录
一、问题的提出
针对一个具体问题,应该如何构造一个适合于它的数据库模式,即应该构造几个关系模式,每个关系由哪些属性组成。因此,人们以关系模型为背景来讨论这个问题,形成了数据库逻辑设计的一个有力工具——关系数据库的规范化理论。
首先,规范以下名词:
一个关系模式应当是一个五元组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)。
数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是数据间的内在联系。数据依赖有许多种类,其中最重要的是函数依赖(Functional Dependency,FD)和多值依赖(Multi-Valued Dependency,MVD)。
二、规范化
1. 函数依赖
(1)函数依赖的定义
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素。
- 若X→Y,Y→X,则记做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
(2)平凡依赖
- 非平凡函数依赖的定义 :X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
- 平凡函数依赖的定义: X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。若不特别声明, 我们总是讨论非平凡函数依赖。
(3)完全依赖
- 完全函数依赖定义: 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有 X’ /→Y, 则称Y对X完全函数依赖,记作X→(F)Y。(箭头上面一个F)
- 部分函数依赖定义:若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作记作X→(P)Y。(箭头上面一个P)
理解:完全函数依赖即,必须X的所有元素都拿出来,才能使决定所有可能的Y;部分依赖即,秩序部分X,就可以决定所有的F。
例如,(Sno,Cno)→(F)Grade,因为一个学生号码+一个课程号码两个信息都要全部存在才能得出所有的Grade;(Sno,Cno)→(P)Sdept,因为一个系会有多个学生,多门课,所以只要选取部分学生和课的集合,就可以得到所有的Sdept。
(4)传递
- 传递函数依赖定义:在R(U)中,如果X→Y(Y⊈X),Y/→X,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
2. 码
(1)候选码
候选码定义:设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。如果U部分函数依赖于K,即K → (P)U,则K称为超码(Surpkey)。
若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。主码和候选码都简称为码。
(2)全码
最简单的情况,单个属性是码;最极端的情况,整个属性组是码,称为全码(all-key)。
//例1
S(Sno, Sdept, Sage),单个属性Sno是码
SC(Sno, Cno, Grade)中,(Sno, Cno)是码
//例2
R(P,W,A) P:演奏者 W:作品 A:听众
一个演奏者可以演奏多个作品
某一作品可被多个演奏者演奏
听众可以欣赏不同演奏者的不同作品
码为(P,W,A),即All-Key
(3)外码
外码:关系模式R中属性或属性组X 并非R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。
SC(Sno,Cno,Grade)中,Sno不是码
Sno是 S(Sno,Sdept,Sage)的码,则Sno是SC的外码
主码与外部码一起提供了表示关系间联系的手段
(4)主属性与非主属性
- 包含在任何一个候选码中的属性,称为主属性(Prime attribute) ,如Sno
- 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute) ,如Ssex
3. 范式
-
范式是符合某一种级别的关系模式的集合。
-
关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。
-
范式的种类:
- 第一范式(1NF) ,这是最低要求。
- 第二范式(2NF)
- 第三范式(3NF)
- BC范式(BCNF)
- 第四范式(4NF)
- 第五范式(5NF)
-
各种范式之间存在联系:
-
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。
4. 2NF
定义: 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
学习下面这个例子:
S-L-C(Sno,Sdept,Sloc,Cno,Grade), Sloc为学生的住处,并且每个系的学生住在同一个地方。
S-L-C的码(Sno,Cno),也就是Sno和Cno是主属性。
函数依赖有
(Sno,Cno)→(F)Grade //Grade对Sno和Cno是完全函数依赖。
Sno→Sdept //Sno决定Sdept,这是部分的
(Sno,Cno)→(P)Sdept //Sno和Cno决定Sdept,这也是部分的
Sno→Sloc //Sno决定Sloc,这是部分的
(Sno,Cno)→(P)Sloc //Sno和Cno决定Sloc,这也是部分的
Sdept→Sloc //系别决定住处,这个是函数依赖的
用图形分析:
一个关系模式不属于2NF,会产生以下问题:
- 插入异常
如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败。 - 删除异常
如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了。 - 修改复杂
如果一个学生选了多门课,则Sdept,Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。
出现这种问题的原因:
- 例子中有两类非主属性
- 一类如Grade,它对码完全函数依赖
- 另一类如Sdept、Sloc,它们对码不是完全函数依赖
解决方法:
- 用投影分解把关系模式S-L-C分解成两个关系模式
- SC(Sno,Cno,Grade)
- S-L(Sno,Sdept,Sloc)
SC的码为(Sno,Cno),SL的码为Sno,这样使得非主属性对码都是完全函数依赖了。
5. 3NF
定义:设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。
SC没有传递依赖,因此SC ∈ 3NF
S-L中Sno →Sdept( Sdept ↛ Sno), Sdept→Sloc,可得Sno →(传递) Sloc。
解决的办法是将S-L分解成
S-D(Sno,Sdept)∈ 3NF
D-L(Sdept,Sloc)∈ 3NF
6. BCNF
BCNF(Boyce Codd Normal Form)由Boyce和Codd提出,比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。
定义 : 设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF。
换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
BCNF的关系模式所具有的性质:
- 所有非主属性都完全函数依赖于每个候选码
- 所有主属性都完全函数依赖于每个不包含它的候选码
- 没有任何属性完全函数依赖于非码的任何一组属性
如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。
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。
-
多值依赖的另一个等价的定义:
在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。 -
平凡多值依赖和非平凡的多值依赖:
若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。
否则称X→→Y为非平凡的多值依赖。 -
多值依赖与函数依赖的区别
(1)多值依赖的有效性与属性集的范围有关
若X→→Y在U上成立,则在W(XY W U)上一定成立;反之则不然,即X→→Y在W(W U)上成立,在U上并不一定成立。
原因:多值依赖的定义中不仅涉及属性组X和Y,而且涉及U中其余属性Z。
一般地,在R(U)上若有X→→Y在W(W U)上成立,则称X→→Y为R(U)的嵌入型多值依赖。
函数依赖X→Y的有效性仅决定于X、Y这两个属性集的值
只要在R(U)的任何一个关系r中,元组在X和Y上的值满足定义6.l,则函数依赖X→Y在任何属性集W(XY W U)上成立。
(2)若函数依赖X→Y在R (U)上成立,则对于任何Y‘ Y均有X→Y’ 成立。多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y’ Y有X→→Y’ 成立。
8. 4NF
定义 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。
4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的非平凡多值依赖实际上是函数依赖。
如果一个关系模式是4NF, 则必为BCNF。
在[例6.10]的WSC中,W →→S, W→→C,他们都是非平凡多值依赖。而W不是码,关系模式WSC的码是(W,S,C),即All-key,因此WSC ∈ 4NF。
可以把WSC分解成WS(W,S),WC(W,C), WS∈4NF,WC∈4NF。
9. 规范化小结
- 在关系数据库中,对关系模式的基本要求是满足第一范式。
- 规范化程度过低的关系不一定能够很好地描述现实世界
- 可能存在插入异常、删除异常、修改复杂、数据冗余等问题
- 解决方法就是对其进行规范化,转换成高级范式。
- 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
- 关系数据库的规范化理论是数据库逻辑设计的工具。
- 规范化的基本思想
是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”。,即采用“一事一地”的模式设计原则- 让一个关系描述一个概念、一个实体或者实体间的一种联系。
- 若多于一个概念就把它“分离”出去。因此,规范化实质上是概念的单一化。
- 不能说规范化程度越高的关系模式就越好。
- 必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。
- 上面的规范化步骤可以在其中任何一步终止。
三、数据依赖的公理系统
[逻辑蕴涵]对于满足一组函数依赖 F 的关系模式 R<U, F>, 通过函数
依赖 F 可以得到函数依赖 XY, 则称 F 逻辑蕴涵 XY。
[逻辑蕴涵-举例]F: BD, ABC,
因为在 F 中存在函数依赖BD,所以 ABD
得到F 蕴涵 ABD
同理, F 蕴涵 ABCD
F是定义在属性集U上的一组函数依赖,X、Y、Z 都是 U 上的属性组。
[Armstrong- 自反律]如果 Y X, 则 XY 为 F 所蕴涵;
[Armstrong- 增广律]如果XY 为 F 所蕴涵,则XZYZ 为 F 所蕴涵;
[Armstrong- 传递律]如果XY,YZ 为 F 所蕴涵,则XZ 为 F 所蕴涵;
F是定义在属性集U上的一组函数依赖,X、Y、Z 都是 U 上的属性组。
[合并规则] 由XY,XZ,有 XYZ;
[伪传递规则]由XY,WYZ,有 XWZ;
[分解规则]由XY以及 Z Y,有 XZ;
[闭包-定义]:F 所蕴含的所有函数依赖称为 F 的闭包,记为F+。
[函数依赖集的等价性]:如果F+=G+,则 F 和 G 是等价的。