1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1,第四章,数据库规范化理论,第二节、范式理论,第一节、,函数依赖,第三节、关系模式分解,概 述,2,第四章,数据库规范化理论,第二节、范式理论,数据依赖引起的主要问题是操作异常,解决的办法是进行关系模式的合理,分解,也就是进行关系模式的,规范化,(Normalization),。,由于关系的规范化的要求不同,出现了不同的范式,(,Normal Form,),,,有,1NF,、,2NF,、,3NF,、,BCNF,、,4N
2、F,、,5NF,等。,满足最低要求的条件是叫做第一范式,简称,1NF,。这是最基本的范式化。,在第一范式的基础上进一步增加条件,则有第二范式,2NF,、第三范式,3NF,,,BCNF,范式,第四范式,4NF,和第五范式,5NF,等。,其规范化的条件按上述次序越来越强,,后面的范式可以看成是前面范式的特例,。,把低级范式的关系模式,通过分解转换为高一级范式的关系模式的集合,,这个过程称为规范化设计。,3,1NF,2NF,3NF,BCNF,4NF,5NF,第四章,数据库规范化理论,第二节、范式理论,图,4-1,5,第四章,数据库规范化理论,第二节、范式理论,一、,第一范式(,1NF,),如果关系仅
3、仅满足第一范式的条件是不够的,可能会存在更新异常。,为了消除这些异常,需要进行关系的规范化。,下面是满足第一范式的,(,不好的,),关系模式的例子。,例如:,设有一关系模式,R(S#,,,C#,,,G,,,TN,,,D),,其中,(S#),为学号,,C#,为课程号,,G,为成绩,,TN,为任课教师姓名,,D,为教师所在系名,,这些数据具有下列语义:,(1),学号是一个学生的标识,课程号是一门课程的标识。,(2),一位学生所修的每门课程都有一个成绩。,(3),每门课程只有一位任课教师,但一位教师可以教多门课。,(4),教师中没有重名,每位教师只属于一个系。,6,下面是一个具体关系实例的数据,如表
4、4-6,:,第四章,数据库规范化理论,第二节、范式理论,一、,第一范式(,1NF,),学号,S#,课程号,C#,成绩,G,教师,TN,系名,D,s1,c1,g1,t1,d1,s1,c2,g2,t2,d2,s2,c1,g3,t1,d1,s2,c2,g4,t2,d2,s3,c2,g5,t2,d2,s3,c3,g6,t2,d2,7,第四章,数据库规范化理论,第二节、范式理论,一、,第一范式(,1NF,),虽然上述的关系模式只有五个属性,但它是一个不好的关系模式。,因为该模式在使用过程中有以下几个问题:,(4),修改异常。,(3),删除异常。,(2),插入异常。,(1),数据冗余。,教师所在系名对选
5、该教师所开课的所有学生都重复输入一次。,由于关系的主键,S#,C#,不能为空值,如果一个教师不教课,则这位教师的姓名及所属的系名就不能插入表中。,如果所有学生都退选某一门课,则有关该门课的其它数据,(,任课教师名及所在系名,),也将被删除。,如果改变一门课的任课教师,则需要修改表中选修该门课程的多行记录,如果部分修改,部分不修改,则会导致数据的不一致。,8,第四章,数据库规范化理论,第二节、范式理论,一、,第一范式(,1NF,),上述关系模式只所以是一个不好的关系模式,是因为模式中,存在部分函数依赖和传递函数依赖,。,消除这些部分函数依赖和传递函数依赖,就可以得到一个比较好的关系模式。,根据上
6、述示例说明的语义,找出其函数依赖集合,F,:,F,S#,C#G,,,C#TN,,,TN D,S#,C#,TN,G,D,图,4-2,10,第四章,数据库规范化理论,第二节、范式理论,一、,第一范式(,1NF,),把原来一个关系表的数据分解为三个关系表存放。,表,4-9,S#,C#,G,s1s1s2s2s3s3,c1c2c1c2c2c3,g1g2g3g4g5g6,表,4-7,C#,TN,c1c2c3,t1t2t2,TN,D,t1t2,d1d2,表,4-8,12,第四章,数据库规范化理论,第二节、范式理论,二、,第二范式(,2NF,),如果关系模式,R,满足第一范式,且它的任何一个非主属性都完全函数
7、依赖于任一个候选码,则,R,满足第二范式(简记为,2NF,),例:设有关系模式如下:,REPROT(S#,C#,TITLE,LNAME,ROOM#,MARKS),其中,S#,是学号,,C#,是课程号,,TITLE,为课程名,,LNAME,是教师名,,ROOM#,是教室号,,MARKS,是分数。,假设关系中的一个元组:,表示学生,s,在课程,c,中的得分为,m,,课程名为,t,由教师,l,讲授,其教室编号为,r,。,则,REPORT,的函数依赖如下:,(S#,C#)MARKS,C#TITLE,C#LNAME,LNAMEROOM#,14,第四章,数据库规范化理论,第二节、范式理论,二、,第二范式(
8、2NF,),关系模式,REPROT(S#,C#,TITLE,LNAME,ROOM#,MARKS),的,码,是:,(S#,C#),非,主属性有:,TITLE,,,LNAME,和,ROOM#,,,对码的函数依赖为,部分函数依赖。,并存在其它函数依赖关系:,传递函数依赖,-,C#LNAME,,,LNAMEROOM#,。,为了消除部分函数依赖,将,REPORT,关系模式分解为,REPORT1,和,COURSE,模式:,REPORT1(S#,C#,MARKS),函数依赖是,(S#,C#)MARKS,COURSE(C#,TITLE,LNAME,ROOM#),函数依赖是,C#TITLE,C#LNAME,L
9、NAMEROOM#,。,REPORT1,和,COURSE,都消除了对码的部分函数依赖,因此都属于,2NF,。,15,第四章,数据库规范化理论,第二节、范式理论,二、,第二范式(,2NF,),一个关系模式仅仅满足,2NF,仍是不够的。,Why,?,如在关系模式,COURSE(C#,TITLE,LNAME,ROOM#),中,,仍存在着插入,删除和修改异常问题:,Why,?,新来的教师,还没有分配授课之前,教师的姓名及教室编号都不能,加到关系中;,如果要修改某个教师的教室编号,必须修改与教师授课相对应的各元,组中的教室编号,因为一位教师可能会教多门课。,存在上述这些问题的原因是,:,关系模式,COU
10、RSE,中存在传递函数依赖,,所以要把关系模式,COURSE,向第三范式转化,,除去非主属性对码的传递函数依赖,。,16,第四章,数据库规范化理论,第二节、范式理论,三、,第三范式(,3NF,),如果关系模式,R,满足,2NF,,并且它的任何一个非主属性都不传递依赖,于任何候选码,则称,R,是第三范式,(3NF),记作,R,3NF,。,在上面的例中,关系模式:,COURSE(C#,TITLE,LNAME,ROOM#),其中存在非主属性,ROOM#,对码的传递依赖,,即:,C#LNAME,LNAMEROOM#,因此,COURSE,不属于,3NF,。,将,COURSE,分解为:,COURSE1(C
11、TITLE,LNAME),和,LECTURE(LNAME,ROOM#),则关系模式,COURSE1,和,LECTURE,中都没有传递函数依赖,,因此,COURSE1,和,LECTURE,都属于,3NF,。,17,第四章,数据库规范化理论,第二节、范式理论,三、,第三范式(,3NF,),至此,关系模式,REPORT,分解为下列,3,个属于,3NF,的一组关系模式,:,REPORT1(S#,C#,MARKS),COURSE1(C#,TITLE,LNAME),LECTURE(LNAME,ROOM#),和关系模式,REPORT,相比,这些关系模式是对现实世界更加精确的描述。,把这,3,个关系进行连
12、接,总能重构初始的关系。,18,第四章,数据库规范化理论,第二节、范式理论,四、,BCNF,范式,BCNF(Boyce Codd Normal Form),是由,Boyce,和,Codd,提出的,,通常认为,BCNF,是,3NF,的修正,有时也称为扩充的第三范式。,定义:,关系模式,R1NF,,若,XY,,且,Y,X,时,,X,必含有候选码,则,RBCNF,。,即 在关系模式,R,中,若,R,的每一个决定因素都包含候选码,则,RBCNF,。,由,BCNF,的定义可知,一个满足,BCNF,的关系模式有如下,特性,:,每个非主属性对每个码都是完全函数依赖;,所有的主属性对每一个不包含它的码,也是完
13、全函数依赖;,没有任何属性完全函数依赖于非码的任何一组属性,。,若,RBCNF,,则,R3NF,。若,R3NF,,则,R,不一定于,BCNF,。,20,第四章,数据库规范化理论,第二节、范式理论,四、,BCNF,范式,函数依赖的图形表示如图,4-4,所示。,图,4-4 STJ,的函数依赖,S,J,T,S,J,T,21,由图,4-4,可以看到:,第四章,数据库规范化理论,第二节、范式理论,四、,BCNF,范式,(,S,,,J,)和(,S,,,T,)都是候选码;,S,,,T,,,J,都是主属性。,STJ,3NF,,因为没有任何非主属性对候选码的传递函数依赖或部分函数依赖,。,STJ,BCNF,,因
14、为,T,是决定因素,但,T,不包含码。,对于不是,BCNF,的关系模式,仍然存在不合适的地方。,例如,在上例中,当课程已设置,并已确定教师,但还没有学生选课,,则教师和课程的信息就不能加入到数据库中。,非,BCNF,的关系模式可以通过分解成为,BCNF,,例如,STJ,可以分解为,ST(S,T),和,TJ(T,J),则,ST,和,TJ,都是属于,BCNF,范式。,23,第四章,数据库规范化理论,第二节、范式理论,3NF,和,BCNF,是在函数依赖的条件下对模式分解所能达到的分离程度的限度。,一个关系数据库中的所有关系模式如果都属于,BCNF,,这在函数依赖,范畴内,就已经实现了彻底的分离,达到
15、了最高的规范化程度,并消除,了插入异常和删除异常,。,3NF,的不彻底性表现在可能存在主属性对码的部分函数依赖和传递依赖。,四、,BCNF,范式,24,第四章,数据库规范化理论,第二节、范式理论,五、,第四范,式,(4NF),第四范式是,BCNF,的推广,它适用于多值依赖的关系模式。,定义:,设关系模式,R,属于,1NF,,如果对于,R,的每个非平凡多值依赖,XY(Y,X),,,X,都包含码,则称,R,为第四范式,表示为,R,4NF,。,如果一个关系模式属于,BCNF,,但没有达到,4NF,,仍然存在操作中的异常问题。,例如,在关系模式,TSC,中,(,见,(,第一节,表,4-3,),,数据的
16、冗余度很大。,解决的方法是分解,TSC,为,TS(T,S),和,TC(T,C),,则,TC,和,TS,都是第四范式。,26,第四章,数据库规范化理论,第二节、范式理论,六、,关系模式规范化设计实例,有学生基本情况的关系模式,STUDENT,:,STUDENT,(,SNO,,,SNAME,,,AGE,,,SEX,,,CLASS,,,DEP,,,CNO,,,CNAME,,,GRADE,,,SCORE,),该关系模式的函数依赖集,F=SNOSNAME,,,SNOAGE,,,SNOSEX,,,SNOCLASS,,,SNODEP,,,CLASSDEP,,,CNOCNAME,,,CNOSCORE,,,SN
17、O+CNOGRADE,该模式的码是,(SNO,CNO),;,该模式是属于,1NF,:,满足的条件是元组的每个分量必须是不可分的数据项。,它不是一个好的关系模式。,同学自己分析为什么是一个不好的关系模式?,27,(1).,修改设计使其满足第二范式,2NF,。,第四章,数据库规范化理论,第二节、范式理论,六、,关系模式规范化设计实例,关系模式,STUDENT,不符合,2NF,要求,,关系模式,STUDENT,的主码是,(SNO,,,CNO),非主属性,SNAME,,,AGE,,,SEX,,,CLASS,,,DEP,,,CNAME,,,GRADE,,,SCORE,非主属性中存在对码的部分函数依赖,如
18、SNOSNAME,,,CNOCNAME,。,因为其中存在部分函数依赖。,28,第四章,数据库规范化理论,第二节、范式理论,六、,关系模式规范化设计实例,消除部分函数依赖,将,STUDENT,关系模式进行分解,消除部分函数依赖,,得到三个关系模式符合,2NF,要求:,STUDENT2,(,SNO,,,SNAME,,,AGE,,,SEX,,,CLASS,,,DEP,),COURSE,(,CNO,,,CNAME,,,SCORE,),SC,(,SNO,,,CNO,,,GRADE,),分解后,在,STUDENT2,模式中,仍然存在数据冗余,以及插入和删除异常。,因为在,STUDENT2,模式中,仍然
19、有非主属性中对码的传递函数依赖。,30,(2).,修改设计使其满足第三范式,3NF,。,第四章,数据库规范化理论,第二节、范式理论,六、,关系模式规范化设计实例,至此,关系模式,STUDENT,分解为,4,个,3NF,的关系模式:,STUDENT3(SNO,,,SNAME,,,AGE,,,SEX,,,CLASS);,CLASS,(,CLASS,,,DEP,),COURSE,(,CNO,,,CNAME,,,SCORE,),SC,(,SNO,,,CNO,,,GRADE,),31,(3).,修改设计使其满足第,BCNF,范式。,第四章,数据库规范化理论,第二节、范式理论,六、,关系模式规范化设计实例
20、分析,STUDENT,分解的四个关系模式,它们是满足第三范式的,,同时也是满足,BCNF,范式的。,32,同时,,COURSE,中,CNO,是唯一的决定因素,,例,1,,关系模式课程,COURSE(CNO,,,CNAME,,,SCORE),所以,COURSE,3NF,。,因此,COUSE,BCNF,。,第四章,数据库规范化理论,第二节、范式理论,六、,关系模式规范化设计实例,其中只有一个码,CNO,,没有任何属性对码有部分和传递函数依赖,,33,例,2,,在关系模型例,2,中,有关系模式,CSZ(CITY,,,ST,,,ZIP),,其中城市,CITY,,街道,ST,,邮政编码,ZIP,。,第
21、四章,数据库规范化理论,第二节、范式理论,六、,关系模式规范化设计实例,关系模式,CSZ 3NF,。,关,系模式,CSZ,BCNF,。,因为函数依赖,ZIPCITY,的决定因素,ZIP,不包含码,所以,CSZ,BCNF,。,它们就都是,BCNF,的关系模式了。,若将关系模式,CSZ,分解为两个关系模式:,ZC(ZIP,,,CITY),和,ST(ST,,,ZIP),34,第四章,数据库规范化理论,第二节、范式理论,七、,关系模式规范化小结,规范化的基本思想是逐步消除数据依赖中不合适的部分,,使关系模型中,的各关系模式达到某种程度的,“,分离,”,,以解决关系模式中存在的插入、删除、修改异常和数据
22、冗余等毛病。但,关系模式的分解不是唯一的。,(2),数据库设计是一个相当复杂而且是具有很强应用性的工作,,规范化理论,仅仅从一个侧面提供了改善关系模式的理论和方法。,(3),规范化程度是衡量一个关系模式好坏的标准之一,但不是唯一的标准,。,(4),一个关系数据库模式中的关系模式都,属于,BCNF,,则在函数依赖的范畴,内,已实现了彻底的分离,消除了插入、删除和修改异常,。,(5),在实际设计中,,并不是规范化程度越高越好,,这取决于应用。,因为对规,范化程度高的关系模式进行查询时,可能要做更多的连接操作。,35,例如,原来的,STUDENT,数据模式中存在数据冗余度大,及插入,删除和修,改异常
23、现象,但用来查询非常方便。对原数据模式进行分解后,所带来的问,题是对某些查询需要进行开销很大的连接操作,可能影响数据库的性能。,第四章,数据库规范化理论,第二节、范式理论,七、,关系模式规范化小结,36,第四章,数据库规范化理论,第二节、范式理论,七、,关系模式规范化小结,关系模式规范化的步骤:,规范化就是对原关系进行投影,消除决定属性不是候选键的任何函数依赖。具体可以分为以下几步:,3,对,3NF,关系进行投影,消除原关系中主属性对键的部分函数依赖和传递,函数依赖,也就是说使决定因素都包含一个候选键。得到一组,BCNF,关系,。,2,对,2NF,关系进行投影,消除原关系中非主属性对键的传递函
24、数依赖,将,2NF,关系转换成若干个,3NF,关系。,1,对,1NF,关系进行投影,消除原关系中非主属性对键的部分函数依赖,将,1NF,关系转换成若干个,2NF,关系。,37,关系规范化的基本步骤如下图所示。,1NF,2NF,3NF,BCNF,消除,决定属性,不是候选键的非平凡的函数依赖,消除非主属性对键的部分函数依赖,消除非主属性对键的传递函数依赖,消除主属性对键的部分和传递函数依赖,第四章,数据库规范化理论,第二节、范式理论,七、,关系模式规范化小结,38,一般情况下,我们说,没有异常弊病的数据库设计是好的数据库设计,,一,个不好的关系模式也总是可以,通过分解转换成好的关系模式的集合,。,
25、第四章,数据库规范化理论,第二节、范式理论,七、,关系模式规范化小结,在实际应用中,,最有价值的是,3NF,和,BCNF,,在进行关系模式的设计时,,通常,分解到,3NF,就足够了,。,对于那些,只要求查询而不要求插入、删除等操作的系统,几种异常现象,的存在并不影响数据库的操作,。这时便,不宜过度分解,,,否则当要对整体,查询时,需要更多的多表连接操作,这有可能得不偿失。,但是在分解时要,全面衡量,综合考虑,视实际情况而定,。,39,第四章,数据库规范化理论,第二节、范式理论,八、,第四范式设计示例,BCNF,的关系模式是否就很完美呢?,关系模式,WSC(W,S,C),中,W,表示仓库,,S,
26、表示保管员,,C,表示物品。假设每个仓库有若干个保管员,存放若干种物品。每种物品由存放仓库中的所有保管员负责保管。现有仓库、保管员、物品一组数据如下表,4-12,所示:,W,S,C,W1,S1,C1,W1,S1,C2,W1,S1,C3,W1,S2,C1,W1,S2,C2,W1,S2,C3,W2,S1,C3,W2,S1,C4,W2,S2,C3,W2,S2,C4,在函数依赖范畴内,,BCNF,达到了最高的规范化程度。,我们先看一个例子:,表,4-12,40,造成上述问题的原因是关系模式,WSC,的属性之间存在一种称为多值依赖的数据依赖。,第四章,数据库规范化理论,第二节、范式理论,八、,第四范式设
27、计示例,关系模式,WSC,的非主属性之间没有任何函数依赖,,(W,S,C),是码。,WSCBCNF,,但关系模式有明显的毛病:数据冗余。,若仓库,W1,增加一个保管员,S3,,则必须插入,W1S3C1,,,W1S3C2,,,W1S3C3,三个元组,,若仓库,W2,减少一种物品,C4,,则必须删除,W2S1C4,,,W2S2C4,两个元组。,41,当然就有,XY,。所以,之所以允许的非平凡多值依赖实际上是函数依赖。,第四章,数据库规范化理论,第二节、范式理论,八、,第四范式设计示例,4NF,是限制关系模式的属性之间不允许有非平凡函数依赖的多值依赖。,因为根据定义,要求每一个非平凡的多值依赖,XY
28、Y,X,),都有,X,包含码,,若将,WSC,分解为两个关系模式:,WS(W,S),,,WC(W,C),,就不再有非平凡依赖且非函数依赖的多值依赖,就都是,4NF,的关系模式了。,关系模式,WSC,中,,WS,,,WC,,都是非平凡的多值依赖,而,W,中又不,含码,(W,S,C),,因此,WSC4NF,。,正是由于,WS,,,WC,,这样的非平凡依赖,且非函数依赖的多值依赖的,存在,造成关系模式,WSC,的数据冗余。,42,作业及思考题,“,机械工业出版社,”,教材:,“,人民邮电出版社,”,教材:,P122,:,5,,,9,,,10,作业:,第四章,数据库规范化理论,第二节、范式理论,43,教师,T,系,S,课程,C,王,计算机,数学,王,电子工程,数学,李,计算机,英文,李,电子工程,英文,李,自动化,英文,李,微电子,英文,周,计算机,c,语言,周,电子工程,数据结构,周,电子工程,c,语言,周,计算机,数据结构,






