9.1 问题提出
例:教学关系描述如下
- 一个学生(学号,姓名)只有一个学号,一门课程(课程号,课程名),只有一个课程号
- 每一位学生选修的每一门课程都有一个成绩
- 每一门课程只有一位教师任教,但一个教师可以担任多门课程
- 教师没有重名,每一位教师只属于一个系
建立的关系如下

关系模式可能存在的异常
冗余过多
- 如:学生的姓名、课程的名称有很多重复值
插入异常
- 如:新增加的学生,如果还没有选课,将无法将信息插入到表中
更新异常
- 如:许红霞老师上的课要转给其他教师上时,在更新时很容易出现错误
删除异常
- 如:有一门课程因为选课人数不够,需要取消,则在删除该门课程的选课信息的同时,这门课程的信息(课程号,课程名)也将一并被删除;同样,如果一位教师退休,要删除该位教师的信息,则这位教师的相关授课信息也将被删除
异常原因分析
根本原因
- 关系的结构。在关系模式的结构中,属性之间存在过多的"数据依赖"。
数据依赖
- 指一个关系中属性值之间的相互联系,它是现实世界属性间相互联系的体现,是数据之间的内在性质,是语义的体现。
常见的数据依赖有
- 函数依赖
- 多值依赖
例题

异常问题的解决
- 对关系模式进行分解。先分析和掌握属性间的语义关联,然后再依据这些关联得到相应的设计方案。
9.2 关系模式的函数依赖
函数依赖的一般概念
定义1
-

-
小写字母r表示关系模式R(U)的对应的具体关系(当前基本表的状态)
-
注意:R(U)的一切具体关系r都要满足函数依赖的约束条件
例题

函数依赖的一般概念
- 几个常用的术语和记号

定义2

定义3

候选键与主键
定义4

定义5

定义6

9.3 关系模式的规范化
如何构造一个合适于现实世界具体问题的数据库模式?
- E.F.Codd在1977年提出了关系数据库规范化理论,主要研究关系模式中属性之间的相互依赖关系,以及对关系模式性能的影响,一个"好"的关系模式应当具备的性能,以及如何设计一个好的关系模式的设计方法。
- 关系模式的规范化理论为我们提供了判断关系模式优劣的理论标准。
范式
- 即正规公式,是符合某一种级别的关系模式的集合。
- 满足不同程度要求的为不同范式。
- 关系模式R满足第i范式要求,就可以写成


-

-
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
第一范式
定义7
- 如果一个关系模式R(U)的所有属性都是不可再分的基本数据项,则称R(U)为第一范式,即

一般而言,每一个关系模式都必须满足1NF,这是对每一个关系最基本的要求。

第一范式
- 属性是否可以再分,取决于这个属性在实际问题中的重要程度。
- 但是,第一范式通常存在数据冗余过多、删除异常和插入异常等问题。
第二范式
定义8
-
若

,且每一个非主属性完全函数依赖于每个候选键,称R(U)为第二范式,即

。
例

非2NF关系模式所引起的问题
- 插入异常
-
- 如:要插入一个学生Sno='20090101',Sdept='cs',Sloc='181-326',该元组不能插入。
- 删除异常
-
- 如:某学生20090101只选一门C06号课,现在他不选了,则必须删除整个元组,学生的信息也丢失了。
- 修改复杂
-
- 如:某学生从计算机系cs转到数学系ma,则必须同时修改该生的住处,且若该生选修了n门课,则需修改多个元组中的值。
非2NF关系模式的转换
- 方法:将关系模式进行分解。用投影分解把原关系模式R分解为两个或多个关系模式。

注意:
- 将一个1NF的关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。
-
- 例:新建的宿舍,还没有学生入住,则宿舍的信息就无法输入;某课程,没有学生选修,也无法输入。
第三范式
定义9

例

非3NF关系模式所引起的问题
- 插入异常、删除异常、冗余度大等问题
非3NF关系模式的转换
- 模式分解

例题
-
设有关系模式SCT(U)=(学号Sno,课程号Cno,教师姓名Tname),语义如下:(1)每位教师不重名;(2)每位教师仅上一门课;(3)每门课程可由若干教师讲授;(4)学生选定某门课程后,教师即唯一确定
-
函数依赖集F如下:
-
F={(Sno, Cno)-->Tname, (Sno,Tname)-->Cno,Tname-->Cno}
-


BC范式

- 若关系模式R(U)EBCNF,则以下结论成立。
-
-
R(U)的所有非主属性都完全函数依赖于每一个候选键,因此

-
R(U)的所有主属性都完全函数依赖于不包含它的候选键。
-
R(U)中没有属性完全函数依赖于任何一组非候选键属性。
-
-
定理1
-
-
若

,则

-
- 大多数情况下,3NF都是BCNF
- 3NF可能违反BCNF的两种情况
-
- 关系中包含两个(或更多)联合候选键
- 候选键有重叠,通常至少有一个重叠的属性
- 例:(学号,课程号),(学号,教师姓名)
- 定理2
-
-
如果

且R(U)有唯一候选键X,则必有

-
- BCNF是在函数依赖条件下对模式分解所能达到的最高分离程度。
- 3NF与BCNF的区别
-
- 对一个函数依赖A一>B,3NF允许B是主属性,而A不是候选键。而BCNF则要求在这个依赖中,A必须是候选键。
- 当3NF消除了主属性对候选键的部分和传递函数依赖时,则成为BCNF。
- 注意:
-
- 在任何情况下都将所有关系转化为BCNTF并不一定是最佳的,因为在对关系进行分解时,有可能会丢失一些函数依赖。所以,是否要规范化到BCNF,取决于产生的数据冗余量与函数依赖的丢失造成的影响哪个更重要
多值依赖
例

定义11
- 设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U一X一Y。若对于R(U)的任一具体关系r,r在属性(X,Z)上的每一个值,就有属性Y上的一组值与之对应,且这组值仅仅决定于X上的值而与Z上的值无关,则称Y多值依赖于X,记作X一>一>Y。
关系模式规范化步骤

9.4 函数依赖的推理规则
函数依赖的逻辑蕴含
定义12

注意
X->Y不一定属于F
定义13

通常

Armstrong公理系统
属性的闭包
Armstrong公理系统

属性的闭包

属性集X

属性的闭包
函数依赖推理规则的完备性

函数依赖集的等价和覆盖

最小函数依赖集

9.5 关系模式的分解特性
定义16
模式分解中存在的问题
- 实际上,关系模式的分解,不仅仅是属性集合的分解,它是对关系模式上的函数依赖集,以及关系模式对应的具体关系进行分解的体现。
例题
评判标准
- 分解具有无损连接
- 分解保持函数依赖
- 分解既保持函数依赖,又具有无损连接性(最好的分解)
无损连接
-

-

-
定理9
例题

无损连接的测试
输入

输出

算法
例题

保持函数依赖的分解




例

关于关系模式的分解有以下几个重要事实:
(1)若要求分解保持函数依赖,那么模式分解总可以达到3NF,但不一定能达到BCNF。
(2)若要求分解既保持函数依赖,又具有无损连接性,可以达到3NF,但不一定能达到BCNF。
(3)若要求分解具有无损连接性,那一定可达到4NF。
分解成3NF的模式集
算法



关系模式设计原则


总结



















