数据库系统概论——第六章 关系数据理论

数据库系统概论——第六章 关系数据理论

(零)引言
基于某个数据库管理系统设计数据库,如何基于数据库编程
第6章 关系数据理论
第7章 数据库设计
第8章 数据库编程

(一) 问题的提出

一、 关系数据库逻辑设计
(1)针对具体问题,如何构造一个适合于它的数据模式
(2)数据库逻辑设计的工具——关系数据库的规范化理论

二、关系模式由五部分组成,是一个五元组:
R(U,D,DOM,F)
关系名R是符号化的元组语义
U为一组属性
D为属性组U中的属性所来自的域
DOM为属性到域的映射
F为属性组U上的一组数据依赖
(1)当且仅当U上的一个关系r满足F时,r称为关系模式R<U,F>的一个关系
(2)第一范式(1NF)
满足:满足每个分量必须是不可分开的数据项这个条件的关系模式。

三、 数据依赖
(1)定义:是一个关系内部属性与属性之间的一种约束关系(通过属性间值的相等与否体现出来的数据间相互联系)
(2)数据依赖的主要类型
1)函数依赖(Functional Dependency ,简称FD)
2)多值依赖(Multi-Valued Dependency,简记为MVD)
(3)函数依赖普遍存在与现实中
Sname=f(Sno),Sdept=f(Sno)
即Sno函数决定Sname
Sno函数决定Sdept
记作Sno→Sname,Sno→Sdept

例子:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
以上关系模式student<U,F>存在的问题
(1)数据冗余
1)浪费大量的存储空间
每一个系主任的姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。
(2)异常更新
1)数据冗余 ,更新数据时,维护数据完整性代价大。
某系更换系主任后,必须修改与该系学生有关的每一个元组。
(2)插入异常
如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。
(4)删除异常
如果某个系的学生全部毕业了, 则在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。

在这里插入图片描述
把这个单一的模式分成三个关系模式:
S(Sno,Sdept,Sno → Sdept);
SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
DEPT(Sdept,Mname,Sdept → Mname);

这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。

(二)规范化(重点)

一、.函数依赖

1. 函数依赖
(1)定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
(2)若X——>Y,则X称为这个函数依赖的决定因素

“就是对于任意关系r,只要X相等,Y就相等”
在这里插入图片描述


(3)函数依赖是语义范畴的概念,只能根据数据的语义来确定一个函数依赖。
例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立

2. 平凡函数依赖与非平凡函数依赖


对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。
若不特别声明, 我们总是讨论非平凡函数依赖。

3. 完全函数依赖与部分函数依赖
在这里插入图片描述
例子:
在这里插入图片描述
4. 传递函数依赖

二、码

1、超码、候选码、主码

若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)

2. 主属性与非主属性
包含在任何一个候选码中的属性 ,称为主属性 (Prime attribute)
不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)

3. 全码
整个属性组是码,称为全码(All-key)

4. 外码
定义6.5 关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。
SC(Sno,Cno,Grade)中,Sno不是码
Sno是 S(Sno,Sdept,Sage)的码,则Sno是SC的外码

重点来了!!!!!!

三、范式
1. 定义:是符合某一种级别的关系模式的集合
2. 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。
3. 范式的种类
(1)第一范式(1NF)
(2)第二范式(2NF)
(3)第三范式(3NF)
(4)BC范式(BCNF)
(5)第四范式(4NF)
(6)第五范式(5NF)
4. 各种范式之间存在联系:
在这里插入图片描述
某一关系模式R为第n范式,可简记为R∈nNF。
(1)规范化
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。

5. 2NF
定义6.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
判断步骤:
(1)判断是否符合第一范式,即满足每个分量必须是不可分开的数据项
(2)找出候选码
(3)找出非主属性
(4)写出依赖
(5)判断是否每一个非主属性都完全函数依赖于任何一个候选码

例如:S-L-C(Sno,Sdept,Sloc,Cno,Grade), Sloc为学生的住处,并且每个系的学生住在同一个地方。
解答:
S-L-C的码为(Sno,Cno)。
非主属性为 Sdept,Sloc,Grade。
Sdept、Sloc 不完全依赖于(Sno,Cno)。
所以关系模式S-L-C不属于2NF。

一个关系模式不属于2NF,会产生以下问题:
(1)插入异常
如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败。
(2)删除异常
如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了。
(3)修改复杂
如果一个学生选了多门课,则Sdept,Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。

出现这种问题的原因
例子中有两类非主属性:
1)一类如Grade,它对码完全函数依赖
2)另一类如Sdept、Sloc,它们对码不是完全函数依赖

解决方法:
用投影分解把关系模式S-L-C分解成两个关系模式
SC(Sno,Cno,Grade)
S-L(Sno,Sdept,Sloc)


SC的码为(Sno,Cno),SL的码为Sno,这样使得非主属性对码都是完全函数依赖了

5. 3NF

“因此只要没有传递依赖,那么就一定属于3NF范式。”
在这里插入图片描述
判断步骤:
(1)找出码
(2)写出依赖
(3)判断

3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。

例如:

解决方法:
解决的办法是将S-L分解成
S-D(Sno,Sdept)∈ 3NF
D-L(Sdept,Sloc)∈ 3NF

6. BCNF
BCNF比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式


“即,如果所有依赖的左边必包含候选码,则属于BCNF范式”

(1)BCNF的关系模式所具有的性质
①所有非主属性都完全函数依赖于每个候选码
②所有主属性都完全函数依赖于每个不包含它的候选码
③没有任何属性完全函数依赖于非码的任何一组属性
(2)如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
对于不是BCNF的关系模式,仍然存在不合适的地方。
非BCNF的关系模式也可以通过分解成为BCNF。例如STJ可分解为ST(S,T)与TJ(T,J),它们都是BCNF。

3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。
一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。

7. 多值依赖


Teaching具有唯一候选码(C,T,B), 即全码。
Teaching∈BCNF

仍然存在问题
1)数据冗余度大:有多少名任课教师,参考书就要存储多少次。
2)增加操作复杂:当某一课程增加一名任课教师时,该课程有多少本参照书,就必须插入多少个元组。
3)删除操作复杂:某一门课要去掉一本参考书,该课程有多少名教师,就必须删除多少个元组。
4)修改操作复杂:某一门课要修改一本参考书,该课程有多少名教师,就必须修改多少个元组。

产生问题的原因:存在多值依赖

(1)定义6.9
设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。

(前提Z=U-X-Y ,对于X的每一个值,Y有一组值与之对应,这组值仅仅决定于x值而与z值无关。)

例 Teaching(C, T, B)
对于C的每一个值,T有一组值与之对应,而不论
B取何值。因此T多值依赖于C,即C→→T。

(2) 平凡多值依赖和非平凡的多值依赖
1)平凡多值依赖:
若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。
2)非平凡的多值依赖:若X→→Y,Z不为空,称X→→Y为非平凡的多值依赖。

(3)多值依赖的性质
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。

(4)多值依赖与函数依赖的区别
1)多值依赖的有效性与属性集的范围有关

在这里插入图片描述

2)
在这里插入图片描述

8. 4NF

4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的非平凡多值依赖实际上是函数依赖。

在[例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. 小结
(1)在关系数据库中,对关系模式的基本要求是满足第一范式。
(2)规范化程度过低的关系不一定能够很好地描述现实世界
可能存在插入异常、删除异常、修改复杂、数据冗余等问题
解决方法就是对其进行规范化,转换成高级范式。
(3)一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
(4)关系数据库的规范化理论是数据库逻辑设计的工具。
(5)规范化的基本思想
1)是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”。
2)即采用“一事一地”的模式设计原则
让一个关系描述一个概念、一个实体或者实体间的一种联系。
若多于一个概念就把它“分离”出去。
3)因此 规范化实质上是概念的单一化。

(6)不能说规范化程度越高的关系模式就越好。
必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。
上面的规范化步骤可以在其中任何一步终止。

(三)数据依赖的公理系统(重点)
1.在这里插入图片描述

2. Armstrong公理系统
设U为属性集总体,F是U上的一组函数依赖, 于是有关系模式R <U,F >。对R <U,F> 来说有以下的推理规则:
(1)自反律:若Y ⊆X ⊆ U,则X →Y 为F所蕴涵。
(2)增广律: 若X→Y为F所蕴涵,且Z ⊆ U,则XZ→YZ 为F所蕴涵。
(3)传递律:若X→Y及Y→Z为F所蕴涵,则X→Z 为F所蕴涵。
由自反律所得到的函数依赖均是平凡的函数依赖。

根据以上三条推理规则可以得到下面三条推理规则
(1)合并规则
由X→Y,X→Z,有X→YZ。
(2)伪传递规则
由X→Y,WY→Z,有XW→Z。
(3)分解规则
由X→Y及Z⊆Y,有X→Z。

F的闭包:在关系模式R<U,F>中为F所逻辑蕴涵的函数依赖的全体叫作F的闭包,记为F +。
属性集X关于函数依赖集F的闭包

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
重点:判定X→Y是否能由F根据Armstrong公理导出的问题,就能转化为求出X关于依赖F的闭包,判定Y是否为闭包的子集。

求闭包的算法:
已知:X,F
求:X关于F的闭包

定理6.2 Armstrong公理系统是有效的、完备的。(即既充分又必要)

如果G+=F+,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价。

最小依赖集和最小覆盖
如果函数依赖集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中各函数依赖左部均为最小属性集(不存在冗余属性))


定理6.3的证明过程
是求F极小依赖集的过程
也是检验F是否为极小依赖集的一个算法
若改造后的F与原来的F相同,说明F就是一个最小依赖集

证明过程:
(1)逐一检查F中各函数依赖FDi:X→Y,
若Y=A1A2 …Ak,k≥2,
则用{X→Aj | j=1,2,…,k}来取代X→Y。
(2)逐一检查F中各函数依赖FDi:X→A,
令G=F-{X→A},
若A∈XG+,则从F中去掉此函数依赖。
(3)逐一取出F中各函数依赖FDi:X→A,
设X=B1B2…Bm,m≥2,
逐一考查Bi (i=1,2,…,m),
若A ∈(X-Bi )F+,则以X-Bi 取代X。

F的最小依赖集Fm不一定是唯一的,它与对各函数依赖FDi 及X→A中X各属性的处置顺序有关。

在R<U,F>中可以用与F等价的依赖集G来取代F

(五)小结

  1. 若要求分解具有无损连接性,那么模式分解一定能够达到4NF。
  2. 若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
  3. 若分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。

并不是规范化程度越高,模式就越好
必须结合应用环境和现实世界的具体情况合理地选择数据库模式

发布了34 篇原创文章 · 获赞 4 · 访问量 1297

猜你喜欢

转载自blog.csdn.net/zj20165149/article/details/104092403