#第六章 关系数据理论
##6.1 问题的提出
针对具体问题,如何构造一个适合于它的关系模式,应该构造几个关系模式,每个关系由哪些属性组成等。这是数据库设计的问题,是关系数据库逻辑设计的问题。
数据库逻辑设计的工具──关系数据库的规范化理论。
1、数据依赖
是一个关系内部属性与属性之间的一种约束关系。
是通过属性间值的相等与否体现出来的数据间相互联系。
是现实世界属性间相互联系的抽象
是数据内在的性质
是语义的体现
2、数据依赖的主要类型
函数依赖(Functional Dependency,简记为FD)
多值依赖(Multi-Valued Dependency,简记为MVD)
3、函数依赖普遍存在于现实生活中
描述一个学生关系,可以有学号、姓名、系名等属性。
由于一个学号只对应一个学生,一个学生只在一个系中学习。
因此“学号”值确定后,学生的姓名及所在系的值就被唯一确定。
类似于y=f(x),自变量x确定之后,相应的函数值y也就相应确定了。
类似于Sname=f(Sno),Sdept=f(Sno) 即Sno函数决定Sname,Sno函数决定Sdept。
或者说Sname和Sdept函数依赖于Sno,记作Sno→Sname,Sno→Sdept
## 6.2 规范化
关系数据库逻辑设计的好坏与其所含的各个关系模式设计的好坏相关。如果各个关系模式结构合理、功能简单明确、规范化程度高,就能确保所建立的数据库具有较少的数据冗余、较高的数据共享度、较好的数据一致性,并为数据库系统能够很好的应用。
## 6.2 规范化
### 6.2.1 函数依赖
1、函数依赖
定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
函数依赖指的是一组属性值唯一决定另一组属性值的这种数据依赖。
是指在关系R中,X、Y为R的两个属性或属性组,如果关系R存在:当任何时刻R中的任意两个元组中的X属性值相同时,则它们的Y属性值也相同,则称X函数决定Y,或称属性Y函数依赖于属性X,记作X→Y。称X为决定因素。
简单描述:如果属性X的值决定属性Y的值,那么属性Y函数依赖于属性X;或者可以 说如果知道X的值,就可以获得Y的值。
2、平凡函数依赖与非平凡函数依赖
在关系模式R(U)中,U是R上的属性集,对于U的子集X和Y
X→Y,但Y⊈X,则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X (Y是X的子集)则称X→Y是平凡的函数依赖。
3、完全函数依赖与部分函数依赖
定义6.2 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → Y。
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X → Y
或:如果X→Y,但对于X的某一个真子集X’,,有X’→Y成立,则称Y部分函数依赖于X。记作X→Y。
4、传递函数依赖
定义6.3:在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,而不是传递函数依赖。
[例] 在关系Stu(sno, name, sdept, Mname,cname, grade)中,有:
Sno → Sdept,Sdept → Mname,
Mname传递函数依赖于Sno
## 6.2 规范化
### 6.2.2 码
1、候选码和主码
定义6.4 设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。
如果U部分函数依赖于K,即K → U,则K称为超码 (Surpkey)。候选码是最小的超码,即K的任意一个真子集都不是候选码。
若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
2、主属性与非主属性
包含在任何一个候选码中的属性 ,称为主属性 (Prime attribute)
不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
student中,sno为主属性,其余为非主属性; sc中,sno和cno为主属性,grade为非主属性。
3、外码
定义6.5 关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。
SC(Sno,Cno,Grade)中,Sno不是码。
Sno是 S(Sno,Sdept,Sage)的码,则Sno是SC的外码 。
主码与外部码一起提供了表示关系间联系的手段。
## 6.2 规范化
### 6.2.3 范式
1、什么是范式
范式是符合某一种级别的关系模式的集合。是衡量关系模式规范化程度的标准。
关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。
2、范式的种类:
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
BC范式(BCNF)
第四范式(4NF)
第五范式(5NF)
3、各种范式之间的联系
某一关系模式R为第n范式,可简记为R∈nNF。
4、规范化
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。
## 6.2 规范化
### 6.2.4 2NF
1、什么是2NF
定义6.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
[例] S-L-C(Sno,Sdept,Sloc,Cno,Grade),
步骤:1 确定依赖关系集F;
2 由依赖关系集F判断候选码;
3 非主属性的确定;
2、一个关系模式不属于2NF,会产生什么问题?
(1)插入异常
如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败。
(2)删除异常
如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了。
(3)修改复杂
如果一个学生选了多门课,则Sdept,Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。
一个系学生对应的sloc出现了重复,因此,假如修改一个系学生的住宿位置sloc,则需要将所有该系学生的sloc都要进行更新。
### 6.2.5 3NF
1、什么是3NF
定义6.7 设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X,则称R<U,F> ∈ 3NF。
若R属于3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
如果R属于3NF,则必有R属于2NF。
2、小结
在关系数据库中,对关系模式的基本要求是满足第一范式。
规范化程度过低的关系不一定能够很好地描述现实世界可能存在插入异常、删除异常、修改复杂、数据冗余等问题;
解决方法就是对其进行规范化,转换成高级范式。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
关系数据库的规范化理论是数据库逻辑设计的工具。
3、规范化的基本思想
是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”。
即采用“一事一地”的模式设计原则,让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去。因此 规范化实质上是概念的单一化。
4、规范化的程度
不能说规范化程度越高的关系模式就越好。
必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。上面的规范化步骤可以在其中任何一步终止。
【小测试】
1、设有关系模式R(职工编号,日期,日营业额,部门名,部门经理),该模式统计商店里每个职工的日营业额,以及职工所在的部门和经理信息。
如果规定:每个职工每天只有一个营业额;每个职工只在一个部门工作;每个部门只有一个经理。试回答下列问题:
(1)根据上述规定,写出模式R的基本FD和候选码;
(2)说明R不是2NF的理由,并把R分解成2NF模式集;
(3)进而分解成3NF模式集。
2、设有关系模式
R(运动员编号,比赛项目,成绩,比赛类别,比赛主管)
存储运动员比赛成绩及比赛类别、主管等信息。
如果规定:每个运动员每参加一个比赛项目,只有一个成绩;每个比赛项目只属于一个比赛类别;每个比赛类别只有一个比赛主管。
试回答下列问题:
(1)根据上述规定,写出模式R的基本FD和候选码;
(2)说明R不是2NF的理由,并把R分解成2NF模式集;
(3)进而分解成3NF模式集。
#拓展知识
2018-2019年上半年软件水平考试(中级)数据库系统工程师上午(基础知识)真题试卷
(注意:拓展练习为软考数据库系统工程师考试中相关试题。此为软考中级难度,普遍高于本课程期末考试难度,想参加软考或有兴趣的请选做)
1、将满足3NF的关系(46)________________后,可将其规范化为BCNF。
(A)消除非主属性对码的部分函数依赖
(B)消除非主属性对码的传递函数依赖
(C)消除主属性对码的部分和传递函数依赖
(D)消除非平凡且非函数依赖的多值依赖
标准答案 C
知识点解析 本题考查数据库范式和规范化知识。
第一范式(1NF):要求属性值不可再分,即属性项不能由属性组合组成。
第二范式(2NF):引入候选码,如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的每个候选码,则R为第二范式关系模式。(主属性与非主属性:如果A是关系模式R的某个候选码中的属性,则称A是R的主属性,否则称A是R的非主属性)。
第三范式(3NF):如果关系模式R为第二范式,并且每个非主属性都不传递依赖于R的每个候选码,则R为第三范式关系模式。部分依赖属于传递依赖,原因是候选码→候选码真子集→非主属性。
BC范式(BCNF):如果关系模式R的所有属性(包括主属性和非主属性)都既不部分依赖又不传递依赖于R的任何候选码,那么称关系R是属于BCNF的。或者说关系R中,如果每个决定因素都包含候选码,则R是BCNF。通常认为BCNF是修正的第三范式,也称为扩充的第三范式。
2、设学生关系模型Stu(学号,姓名,性别,学院)的主码是学号,成绩关系模型SC(学号,课程号,成绩)的主码为(学号,课程号),若关系模型R(学号,姓名,性别,学院,课程号,成绩)的主码为(学号,课程号),则R满足(47)________________。
(A)1NF
(B)2NF
(C)3NF
(D)BCNF
标准答案 A
知识点解析
本题考查数据库规范化的知识。因为学号→(姓名,性别,学院),因此关系模型R中属性姓名,性别,学院对主码(学号,课程号)存在部分依赖,按照第二范式定义,第二范式中不能存在部分依赖,因此关系模型R只能属于第一范式(满足属性不可再分割)。