数据库系统原理-读书笔记:范式

范式:

目前存在六种范式,其之间的关系为:

5NF\subset4NF\subsetBCNF\subset3NF\subset2NF\subset1NF

如图所示关系:

第一范式(1NF):

若一个关系模式R的所有属性都是不可分的基本数据项,则R\in1NF。

在任何一个关系数据库系统中,第一范式是对关系模式最基本的要求。不满足第一范式的数据库模式不能称为关系数据库。

但是满足第一范式的关系模式并不一定是一个好的关系模式。例如,关系模式

SLC(Sno,Sdept,Sloc,Cno,Grade)

其中函数依赖包括:

(Sno,Cno)->Grade

Sno->Sdept

扫描二维码关注公众号,回复: 9233453 查看本文章

(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)

若关系模式R\in1NF,并且每一个非主属性都完全函数依赖于R的码,则R\in2NF

关系模式SLC出现上述问题是因为Sdept,Sloc,对码的部分函数依赖。为了消除这个依赖,可采用投影分解法。

可分解为:

SC(Sno,Cno,Grade)

SL(Sno,Sdept,Sloc)

这样非主属性就完全依赖于码了。

可是依然存在问题:

1、插入异常:如果某个系因种种原因(例如刚刚成立),目前暂且没有在校学生,就无法把这个系的信息存入数据库

2、删除异常:如果某个系的学生全部毕业了,在删除该系学生信息的同时,把这个系的信息也丢掉了

3、数据冗余度大:每个系的住处相同,若该系有多名学生则住处重复出现多次

4、修改复杂:若系的住处信息发生变化,则需要修改多名学生的住处信息。

第三范式(3NF)

如果关系模式R<U,F>中不存在候选码X,属性组Y以及非主属性Z(Z\nsubseteqY),使得X->Y,Y->Z和Y-\>X成立,则R\in3NF

关系模式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>\in1NF,如果对于R的每个函数依赖X->Y,若Y\nsubseteqX,则X必含有候选码,那么R\inBCNF

关系模式STJ出现上述问题的原因在于主属性J依赖于T,即主属性J部分依赖于码(S,T)使用投影法将其分解。

ST(S,T)

TJ(T,J)

由定义看出,BCNF具有以下性质:

1、所有非主属性都完全函数依赖于每个候选码。

2、所有主属性都完全依赖依赖于每个不包含它的候选码。

3、没有任何属性完全函数依赖于非码的任何任何一组属性。

第四范式(4NF)

关系模式R<U,F>\in1NF,如果对于R的每个非平凡多值依赖X->->Y(Y\nsubseteqX),X都含有候选码,则R\in4NF

例如,设学校某一门的课程由多个教授讲授,他们使用相同的一套参考书。可以用一个关系模式Teach(C,T,B)表示课程C,教师T,和参考书B之间的关系。

Teach具有唯一候选码(C,T,B)即全码,因而Teach\inBCNF,但Teach模式存在一些问题:

1、数据冗余度大:每一门课程的参考书都是固定的,但在Teach关系中,有多少名任课教师就有多少本参考书被存储,造成大量数据冗余。

2、增加操作复杂:当某一课程增加一名任课教师时,该课程有多少本参考书,就必须要插入多少个元组。例如:物理课增加一名教室刘高,需要插入两个元组:

(物理,刘高,微分方程) (物理,刘高,光学原理)

3、删除操作复杂:某一门课要去除某一门书,该课程有多少名教师,就必须删除多少个元组。

例如,数学课去掉《微分方程》书,需要删除两个元组:

(数学,邓军,微分方程)(数学,陈思,微分方程)

4、修改操作复杂:某一门课程修改一门参考书、该课程有多少名教师、就必须有多少个元组。

之所以产生上述问题,是因为参考书的的取值和教师的取值是彼此独立毫无关系的,它们都只取决于课程名。也就是说,该关系模式存在一种多值依赖。

使用投影分解法将其分解为:

CT(C,T)

CB(C,B)

 

发布了90 篇原创文章 · 获赞 36 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_37716512/article/details/104366277