第六章 关系数据库理论
6.1 问题的提出
1. 关系模式的表示
- 关系模式由五部分组成,是一个五元组:
R(U, D , DOM, F)
。 - (1)关系名R是符号化的元组语义。(关系的名字)
- (2)U为一组属性。
- (3)D为属性组U中的属性所来自的域。(属性的取值范围)
- (4)DOM为属性到域的映射。(到取值范围的映射)
- (5)F为属性组U上的一组数据依赖。(重点△)
- 【说明】
- (1)由D、DOM与模式设计关系不大,因此在本章中把关系模式看作一个三元组:R<U,F>。
- (2)当且仅当U上的一个关系 r 满足 F 时,r 称为关系模式R<U, F> 的一个关系。
- (3)作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)。
2. 数据依赖
- 数据依赖是一个关系内部属性与属性之间的一种约束关系,是通过属性间值的相等与否体现出来的数据间相互联系。
- 数据依赖的主要类型:
- 函数依赖(Functional Dependency,简记为FD)。
- 多值依赖(Multi-Valued Dependency,简记为MVD)。
3. 函数依赖在现实生活中的体现
- 【例】
- 描述一个学生关系,可以有学号、姓名、系名等属性。一个学号只对应一个学生,一个学生只在一个系中学习,“学号” 确定后,学生的姓名及所在系的值就被唯一确定。
Sname=f (Sno),Sdept=f (Sno)即Sno函数决定Sname,Sno函数决定Sdept,记作Sno→Sname,Sno→Sdept。
4. 函数依赖存在的问题
- 关系模式Student<U, F>中存在的问题:(该例子可看书本P178例6.1)
- (1)数据冗余
- 浪费大量的存储空间,每一个系主任的姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。
- (2)更新异常
- 数据冗余,更新数据时,维护数据完整性代价大。某系更换系主任后,必须修改与该系学生有关的每一个元组,否则会出现数据不一致的异常。
- (3)插入异常
- 如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。
- (4)删除异常
- 如果某个系的学生毕业了,则在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。
- 【说明】
- ① Student关系模式不是一个好的模式。一个“好”的模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽量少。
- ② 存在以上问题的原因是由存在于模式中的某些数据依赖引起的。
- ③ 解决方法是用规范化理论改造关系模式来消除其中不合适的数据依赖。
5. 函数依赖的解决方式
- 把这个单一的模式分成三个关系模式:
- 没有插入异常和删除异常,数据冗余得到控制。
6.2 规范化
6.2.1 函数依赖
- 【定义1】
- 设 R(U) 是属性集 U 上的关系模式,X、Y是 U 的子集。若对于 R(U) 的任意一个可能的关系 r,r 中不可能存在两个元组在 X 上的属性值相等,而在 Y 上的属性值不等,则称 “X函数确定Y” 或 “Y函数依赖于x”,记作 X → Y。
6.2.2 码(关键字)(键)
主属性与非主属性
- 主属性(Prime attribute):包含在任何一个候选码中的属性。
- 非主属性(Nonprime attribute) :不包含在任何码中的属性。
- 全码:整个属性组是码,称为全码(All-key)。
- 【例】
- S (Sno, Sdept, Sage),单个属性Sno是码。
- SC (Sno,Cno, Grade)中,(Sno, Cno)是码。
- 【定义5】
- 关系模式 R 中属性或属性组 X 并非 R 的码,但x是另一个关系模式的码,则称 X 是 R 的外部码 (Foreign key),也称外码。
- 主码与外部码一起提供了表示关系间联系的手段、
6.2.3 范式(重点△)
- 范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。
- 范式的分类:
- 规范化:是指一个低一级范式的关系模式,通过模式分解转换为若干个高一级范式的关系模式集合的过程。
6.2.4 2NF
- 【定义6】
- 若关系模式 R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则 R∈2NF。
- 一个关系模式不属于2NF,会产生以下问题:
- (1)插入异常
- (2)删除异常
- (3)修改复杂
6.2.5 3NF
6.2.6 BCNF
- BCNF是修正的第三范式,有时也称为扩充的第三范式。
- BCNF的关系模式所具有的性质:
- (1)所有非主属性都完全函数依赖于每个候选码。
- (2)所有主属性都完全函数依赖于每个不包含它的候选码。
- (3)没有任何属性完全函数依赖于非码的任何一组属性。
- 如果一个关系数据库中的所有关系模式都属于 BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。
- 【说明】
- ① 对于不是BCNF的关系模式,仍然存在不合适的地方。非BCNF的关系模式也可以通过分解成为BCNF。
- ② 3NF 和 BCNF 是在函数依赖的条件下对模式分解所能达到的分离程度的测度。
- 一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。
- 3NF的 “不彻底” 性表现在可能存在主属性对码的部分依赖和传递依赖。
6.2.7 多值依赖(一对多)
- 【例】
- 学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。每个教员可以讲授多门课程,每种参考书可以供多门课程使用。
- 以上关系存在以下问题:
- (1)数据冗余度大
- (2)增加操作复杂
- (3)删除操作复杂
- (4)修改操作复杂
- 【多值依赖的另一个等价的定义】
- 【平凡多值依赖】
多值依赖的性质:
- (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。
多值依赖与函数依赖的区别:
- (1)多值依赖的有效性与属性集的范围有关。
- (具体看书P188)
- (2)若函数依赖 X→Y 在 R(U) 上成立,则对于任何Y' ⊂ Y均有 X→Y' 成立。多值依赖 X→→Y 若在 R(U) 上成立,不能断言对于任何Y' ⊂ Y有 X→→Y 成立。
6.2.8 4NF(第四范式)
6.2.9 规范化小结
- 在关系数据库中,对关系模式的基本要求是满足第一范式。
- 规范化程度过低的关系不一定能够很好地描述现实世界。可能存在插入异常、删除异常、修改复杂、数据冗余等问题,解决方法就是对其进行规范化,转换成高级范式。
- 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
- 关系数据库的规范化理论是数据库逻辑设计的工具。
- 规范化的基本思想:
- (1)逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的 “分离” 。
- (2)采用 “一事一地” 的模式设计原则。
- 让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它 “分离” 出去。因此规范化实质上是概念的单一化。
- 六(通上面的数字序号). 不能说规范化程度越高的关系模式就越好:
- 必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。
6.3 数据依赖的公理系统
- Armstrong公理系统:是一套推理规则,是模式分解算法的理论基础。主要用于求给定关系模式的码,从一组函数依赖求得蕴涵的函数依赖。
- 定理:Armstrong推理规则是正确的;Armstrong公理系统是有效地,完备的;每一个函数依赖集 F 均等价于一个极小函数依赖集Fm,此 Fm 称为 F 的最小依赖集。
6.4 模式的分解(*)(了解)
6.4.1 模式分解的三个定义
- 分解具有无损连接性。
- 分解要保持函数依赖。
- 分解既要保持函数依赖,又要具有无损连接性。
6.5 小结
- 关系模式的规范化,其基本思想如下:
- 规范化理论为数据库设计提供理论的指南和工具,仅仅是指南和工具。
- 并不是规范化程度越高,模式就越好,必须结合应用环境和现实世界的具体情况合理地选择数据库模式。
Comments | NOTHING