目录
如何判断R为第几范式?
已知一个关系模式的属性之间的语义,也就是相互依赖的关系,如何判断该模式满足第几范式?
1、首先要通过语义把属性之间的函数依赖关系列出来,
2、然后确定哪些属性组合可以候选码,从而找出非主属性和主属性。
3、然后判断是否存在非主属性与码之间的部分函数依赖关系,如果存在,则不满足2NF,如不存在部分函数依赖,则属于2NF,
4、继续进行下一步判断;判断非主属性与码之间存在传递依赖关系,不存在,则为3NF;
5、决定因素是否包含码,满足条件则为BCNF
简而言之
规范化
规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
关系模型
关系模式由五部分组成,即它是一个五元组: R(U, D, DOM, F)
R:关系名
U:组成该关系的属性名集合
D:属性组U中属性所来自的域
DOM:属性向域的映象集合
F:属性间数据的依赖关系集合
简化为一个三元组:R(U, F)
数据依赖
-
什么是函数依赖
-
定义
-
平凡函数依赖与非平凡函数依赖
-
完全函数依赖与部分函数依赖
-
传递函数依赖
-
确定函数依赖的方法
码
外部码
范式
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化
1NF
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
但是满足第一范式的关系模式并不一定是一个好的关系模式
(F为完全依赖,P为部分依赖)
(Sno,Cno)能完全决定S-L-C
2NF
若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。
采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。
3NF
若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
BCNF
关系模式STJ中有学生S,教师T和课程J这样的三个属性,约定的语义是每一个教师只教一门课,每门课有若干个教师,教师与课程之间是一对多的联系,也就是说教师函数决定课程。某个学生选定某门课,就对应一个固定的教师。
我们先来看一下这个关系模式的候选码都有哪些?大家记得候选码的定义吧,要求能够函数决定整个关系R的,而且它的真子集不能函数决定R。照这个标准来判断,我们看(S,J)可以作为候选码,因为学生选定某门课,就对应一个固定的教师,单独的学生和课程都不能决定老师;除此之外,(S,T)是不也可以作为候选码的?因为学生和老师定了,则选的课也就定下来了,但是,其中的S不能决定J和T,T不能决定S(!!!!!)。所以有两个候选码(S,J)和(S,T),这样看来,根据主属性的定义,出现在任何候选码中的属性均为主属性,则三个属性均为主属性,没有非主属性,所以自然满足3NF。
是否满足BCNF呢?就要看一下主属性的依赖关系了,根据定义,如果决定因素都包含码,则是BCNF,这里的T也是主属性,因为教师定了,课程也定了,但是T不包含码,所以不满足BCNF。大家对这里的理解主要是对候选码的定义上,候选码与其余属性的关系不一定要求是完全函数依赖的。这里列出来的3个函数依赖关系,第一个为完全函数依赖,第二个为部分函数依赖,第三个为完全函数依赖,因为决定因素为单个属性。
多值依赖
设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参考书
平凡多值依赖和非平凡的多值依赖若X→→Y,而Z=φ,
则称 X→→Y为平凡的多值依赖
否则称X→→Y为非平凡的多值依赖
性质:
(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→→YÈ Z。
(5)若X→→Y,X→→Z,则X→→Y∩Z。
(6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。
4NF