范式:
目前存在六种范式,其之间的关系为:
5NF4NF
BCNF
3NF
2NF
1NF
如图所示关系:
第一范式(1NF):
若一个关系模式R的所有属性都是不可分的基本数据项,则R1NF。
在任何一个关系数据库系统中,第一范式是对关系模式最基本的要求。不满足第一范式的数据库模式不能称为关系数据库。
但是满足第一范式的关系模式并不一定是一个好的关系模式。例如,关系模式
SLC(Sno,Sdept,Sloc,Cno,Grade)
其中函数依赖包括:
(Sno,Cno)->Grade
Sno->Sdept
(Sno,Cno)->Sdept
Sno->Sloc
(Sno,Cno)->Sloc
Sdept->Sloc
在其中Sdept和Sloc 部分依赖于(Sno,Cno)。
SLC关系存在以下4个问题:
1、插入异常:假若需要插入一个Sno=2,Sdept=002,Sloc=m,但该学生并未选课,但Cno为主码,所以不能插入
2、删除异常:假如某个学生只选修了一门课,如95002只选择了3号课程,若他3号课程不选了,则删除后3号课程就不存在了。
3、数据冗余度高:如果一个学生选修了10门课程,则Sdept和Sloc需要存10次。
4、修改复杂:某个学生从数学系转到化学系不仅需要修改Sdept 还需要修改Sdept.
第二范式(2NF)
若关系模式R1NF,并且每一个非主属性都完全函数依赖于R的码,则R
2NF
关系模式SLC出现上述问题是因为Sdept,Sloc,对码的部分函数依赖。为了消除这个依赖,可采用投影分解法。
可分解为:
SC(Sno,Cno,Grade)
SL(Sno,Sdept,Sloc)
这样非主属性就完全依赖于码了。
可是依然存在问题:
1、插入异常:如果某个系因种种原因(例如刚刚成立),目前暂且没有在校学生,就无法把这个系的信息存入数据库
2、删除异常:如果某个系的学生全部毕业了,在删除该系学生信息的同时,把这个系的信息也丢掉了
3、数据冗余度大:每个系的住处相同,若该系有多名学生则住处重复出现多次
4、修改复杂:若系的住处信息发生变化,则需要修改多名学生的住处信息。
第三范式(3NF)
如果关系模式R<U,F>中不存在候选码X,属性组Y以及非主属性Z(ZY),使得X->Y,Y->Z和Y-\>X成立,则R
3NF
关系模式SL中Sloc传递依赖于Sno.为了消除该传递函数依赖,课采用投影分解法。
SL分解为:
SD(Sno,Sdept)
DL(Sdept,Sloc)
但满足了三范式的关系模式仍有一定的问题:
例如,在关系模式(S,T,J)中,S表示学生,T表示教师,J表示课程。假设每一教师只教一门课。每门课由若干教师教,某一学生选定某门课,就确定了一个固定的教师。于是有了如下的函数依赖
(S,J)->T
(S,T)->J
T->J
存在的问题:
1、插入异常:如果某个学生刚刚入校,尚未选课,但受主属性不能为空的限制,有关信息无法存入数据库中。
2、删除异常:如果选修某门课的学生全部毕业了,则在删除学生元组的同时,相应教师开设该门课程的信息同时丢掉。
3、数据冗余大:虽然某个老师只教一门课,但选修了该门课的学生元组都要记录该教师的信息。
4、修改复杂:某个教师开设的某门课程改名后,所有选修了该教师该门课程的学生元组都要进行相应修改。
BC范式(BCNF)
设关系模式R<U,F>,F>1NF,如果对于R的每个函数依赖X->Y,若Y
X,则X必含有候选码,那么R
BCNF
关系模式STJ出现上述问题的原因在于主属性J依赖于T,即主属性J部分依赖于码(S,T)使用投影法将其分解。
ST(S,T)
TJ(T,J)
由定义看出,BCNF具有以下性质:
1、所有非主属性都完全函数依赖于每个候选码。
2、所有主属性都完全依赖依赖于每个不包含它的候选码。
3、没有任何属性完全函数依赖于非码的任何任何一组属性。
第四范式(4NF)
关系模式R<U,F>1NF,如果对于R的每个非平凡多值依赖X->->Y(Y
X),X都含有候选码,则R
4NF
例如,设学校某一门的课程由多个教授讲授,他们使用相同的一套参考书。可以用一个关系模式Teach(C,T,B)表示课程C,教师T,和参考书B之间的关系。
Teach具有唯一候选码(C,T,B)即全码,因而TeachBCNF,但Teach模式存在一些问题:
1、数据冗余度大:每一门课程的参考书都是固定的,但在Teach关系中,有多少名任课教师就有多少本参考书被存储,造成大量数据冗余。
2、增加操作复杂:当某一课程增加一名任课教师时,该课程有多少本参考书,就必须要插入多少个元组。例如:物理课增加一名教室刘高,需要插入两个元组:
(物理,刘高,微分方程) (物理,刘高,光学原理)
3、删除操作复杂:某一门课要去除某一门书,该课程有多少名教师,就必须删除多少个元组。
例如,数学课去掉《微分方程》书,需要删除两个元组:
(数学,邓军,微分方程)(数学,陈思,微分方程)
4、修改操作复杂:某一门课程修改一门参考书、该课程有多少名教师、就必须有多少个元组。
之所以产生上述问题,是因为参考书的的取值和教师的取值是彼此独立毫无关系的,它们都只取决于课程名。也就是说,该关系模式存在一种多值依赖。
使用投影分解法将其分解为:
CT(C,T)
CB(C,B)