1、4.1 问题的提出 如何设计一个合适的关系数据库系统呢?如何设计一个合适的关系数据库系统呢?关键是关系数据库模式的设计,即应该构造几个关系关键是关系数据库模式的设计,即应该构造几个关系模式,每个关系模式由哪些属性组成,又如何将这些相互模式,每个关系模式由哪些属性组成,又如何将这些相互关联的关系模式组建成一个适合的关系框,这些都是决定关联的关系模式组建成一个适合的关系框,这些都是决定了整个系统的运行的效率,也是应用系统开发设计成败的了整个系统的运行的效率,也是应用系统开发设计成败的因素之一。因素之一。实际上,关系数据库的设计必须在实际上,关系数据库的设计必须在关系数据库规范化关系数据库规范化理论
2、理论的指导下进行。的指导下进行。4.1.1 4.1.1 规范化理论概述规范化理论概述 关系数据库设计理论主要包括三个方面的内容:函数依赖、范式(Normal Form)和模式设计。其中函数依赖起着核心作用,是模式分解和模式设计的基础,范式是模式分解的标准。BACK4.1.2 4.1.2 不合理的关系模式存在的问题不合理的关系模式存在的问题 例例1 要求设计学生-课程数据库,其关系模式SDC如下:SDC(SNO,SN,AGE,DEPT,MN,CNO,SCORE)其中:SNO 表示学生学号 SN 表示学生姓名 AGE 表示学生年龄 DEPT 表示学生所在的系别 MN 表示系主任名 CNO 表示课程
3、号 SCORE 表示成绩。根据实际情况,这些数据有如下语义规定:根据实际情况,这些数据有如下语义规定:1)一个系有若干个学生,但一个学生只属于一个系一个系有若干个学生,但一个学生只属于一个系;即即sno-dept.2)一个系只能有一个系主任,但一个系主任可以同时兼几一个系只能有一个系主任,但一个系主任可以同时兼几个系的系主任个系的系主任;即即 dept-mn3)一个学生可以选修多门功课,每门课程可被若干个学生一个学生可以选修多门功课,每门课程可被若干个学生选修选修;4)每个学生学习每门课程有一个成绩。每个学生学习每门课程有一个成绩。即即(sno,cno)-score SNO SN AGE DE
4、PT MN CNO SCORE S1赵红 20计算机 张文斌 C190S1赵红 20计算机 张文斌 C285S2王小明 17外语 刘伟华 C557S2王小明 17外语 刘伟华 C680S2王小明 17外语 刘伟华 C7S2王小明 17外语 刘伟华 C470S3吴小林 19信息 刘伟华 C175S3吴小林 19信息 刘伟华 C270S3吴小林 19信息 刘伟华 C485S4张涛 22自动化 钟志强 C193图4.1 关系SDC 在进行数据库的操作时,会出现以下几方面的问题。(1)数据冗余。数据冗余。系名,学生姓名、年龄等等都要重复存储多次 (2)插入异常。插入异常。(SNO,CNO)是主键。缺少
5、一个都无法插入数据另外,若学生未选课,同样也不能进行插入操作。(3)删除异常。删除异常。删去学生数据,导致课程及教师信息丢失。如果某个学生不再选修某课程,有关该学生的其他信息也随之丢失。(4)修改异常。修改异常。如果某学生改名,则该学生的所有记录都要逐一修改SN的值;稍有不慎,就有可能漏改某些记录。鉴于存在以上种种问题,我们可以得出这样的结论:鉴于存在以上种种问题,我们可以得出这样的结论:SDC关系模关系模式不是一个好的模式。一个式不是一个好的模式。一个“好好”的模式应当不会发生插入异常、的模式应当不会发生插入异常、删除异常、更新异常、数据冗余应尽可能少。删除异常、更新异常、数据冗余应尽可能少
6、。为什么会发生这些问题呢?为什么会发生这些问题呢?这是因为这个模式中的函数依赖存在某些不好这是因为这个模式中的函数依赖存在某些不好的性质。假设把这个单一的模式改造一下,分解成的性质。假设把这个单一的模式改造一下,分解成3 3个关系模式:个关系模式:学生关系学生关系 S (SNO,SN,SN,AGE,DEPT)系关系系关系 D (DEPT,MN)选课关系选课关系 SC(SNO,CNO,SCORE)SSNOSNAGEDEPTS1赵红 20计算机 S2王小明 17外语 S3吴小林 19信息 S4张涛 22自动化 DDEPTMN计算机 张文斌 外语 刘伟华 信息 刘伟华 自动化 钟志强 图4.2 关系
7、SDC经分解后的三关系S、D与SC SCSNOCNOSCORES1C190S1C285S2C557S2C680S2C7S2C470S3C175S3C270S3C485S4C193 分解后的关系模式集是一个好的关系数据库模式。这三个关系模式都不会发生插入异常、删除异常的毛病,数据冗余也得到了尽可能地控制。但要注意,一个好的关系模式并不是在任何情况下都是最优的,比如查询某个学生选修课程名及所在系的系主任时,要通过连接操作来完成(即由图4.2中的三张表,连接形成图4.1中的一张总表),而连接所需要的系统开销非常大,因此要以实际设计的目标出发进行设计。练习题:练习题:课后选择题课后选择题14.2.1
8、4.2.1 函数依赖函数依赖 函数依赖函数依赖 定义定义4.14.1 设关系模式R(U,F),U是属性全集,F是U上的函数依赖集,X和Y 是U的子集,如果对于 R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体的值与之对应,则称则称X函数决定函数决定Y,或,或Y函数依赖函数依赖于于X,记,记XY。我们称X为决定因素,Y为依赖因素。当Y不函数依赖于X时,记作:X Y。当XY且YX时,则记作:X Y。4.2 4.2 规范化规范化 对于关系模式SDC:U=SNO,SN,AGE,DEPT,MN,CNO,SCOREF=SNOSN,SNOAGE,SNODEPT,DEPTMN,SNOMN
9、,(SNO,CNO)SCORE 一个SNO有多个SCORE的值与之对应,因此SCORE不能唯一地确定,即SCORE不能函数依赖于SNO,所以有:SNO SCORE,同样有:CNO SCORE。但是SCORE可以被(SNO,CNO)唯一地确定。所以可表示为:(SNO,CNO)SCORE。练习:练习:设有关系模式:商品设有关系模式:商品(商品编号,商品大类,商品小类,商品名商品编号,商品大类,商品小类,商品名称,单价,数量,总价称,单价,数量,总价),试结合实际,分析该关系模式上可能,试结合实际,分析该关系模式上可能存在的函数依赖。存在的函数依赖。商品编号商品编号商品名称商品名称商品编号商品编号商
10、品小类商品小类商品小类商品小类商品大类商品大类商品编号商品编号单价单价(单价,数量单价,数量)总价总价函数依赖有几点需要说明:(1 1)平凡的函数依赖与非平凡的函数依赖平凡的函数依赖与非平凡的函数依赖 当属性集Y是属性集X的子集时,则必然存在着函数依赖XY,这种类型的函数依赖称为平凡的函数依赖。也可表示为:也可表示为:X XY,但,但YX X 则称则称X XY是平凡的函数依赖。是平凡的函数依赖。如:在关系SDC中,(SNO,CNO)SNO。如果Y不是X子集,则称XY为非平凡的函数依赖。也可表示为:X XY,但,但YX X 则称则称X XY是非平凡的函数依赖。是非平凡的函数依赖。如:(sno,c
11、no)score 若不特别声明,我们讨论的都是非平凡的函数依赖。(2 2)函数依赖与属性间的联系类型有关函数依赖与属性间的联系类型有关 在一个关系模式中,如果属性X与Y有1:1联系时,则存在函数依赖XY,YX,即X Y。例如,当学生没有重名时,例如,当学生没有重名时,SNO SN。如果属性X与Y有m:1的联系时,则只存在函数依赖XY。例如:SNO与AGE,DEPT之间均为m:1联系,所以有SNOAGE,SNODEPT。如果属性X与Y有m:n的联系时,则X与Y之间不存在任何函数依赖关系。例如:一个学生可以选修多门课程,一门课程又可以为多个学生选修,所以SNO与CNO之间不存在函数依赖关系。由于函
12、数依赖与属性之间的联系类型有关,所以在确定属性间的函数依赖时,可以从分析属性间的联系入手,便可确定属性间的函数依赖。练习题:练习题:课后选择题课后选择题2 (3)(3)函数依赖的语义范畴的概念函数依赖的语义范畴的概念 我们只能根据语义来确定一个函数依赖,而不能按照其形式化定义来证明一个函数依赖是否成立。例如,对于关系模式S,当学生不存在重名的情况下,可以得到:SNAGE、SNDEPT 这种函数依赖关系,必须是在没有重名的学生条件下才成立,否则就不存在函数依赖了。所以函数依赖反映了一种语义完整性约束,是语义的要求。(4)函数依赖关系的存在与时间无关函数依赖关系的存在与时间无关函数依赖是指关系中所
13、有元组应该满足的约束条件,而不是指关系中某个或某些元组所满足的约束条件。例如:对于关系模式S,假设没有给出无重名的学生这种语义规定,则即使当前关系中没有重名的记录,也不能有“SN-AGE、SN-DEPT”,因为在后续的对表S的操作中,可能马上会增加一个重名的学生的,而使这些函数依赖不能成立。所以函数依赖关系的存在与时间无关,而只与数据间的语义规定有关。(5)(5)函数依赖可以保证关系分解的函数依赖可以保证关系分解的无损连接性无损连接性 设R(X,Y,Z),X、Y、Z为不相交的属性集合,如果XY或XZ则有 R(X,Y,Z)=RX,YRX,Z,其中RX,Y表示关系R在属性(X,Y)上的投影,即R等
14、于两个分别含决定因素X的投影关系(分别是RX,Y与RX,Z)在X上的自然连接,这样便保证了关系R分解后不会丢失原有的信息,称作关系分解的无损连接性。例如例如,对于关系模式,对于关系模式S(SNO,SN,AGE,DEPT),有有SNO-SN,SNO-(AGE,DEPT)S(SNO,SN,AGE,DEPT)=S1(SNO,SN)S2(SNO,AGE,DEPT)也就是说,也就是说,S S的两个投影关系的两个投影关系S1S1、S2S2在在SNOSNO上的自然上的自然连接可复原关系连接可复原关系S S。这一性质非常重要,在后面的关系规范化中要用到。这一性质非常重要,在后面的关系规范化中要用到。函数依赖的
15、基本性质函数依赖的基本性质(1 1)投影性投影性 根据平凡的函数依赖的定义可知,一组属性函数决定它的所有子集。例如,在关系SDC中,(SNO,CNO)SNO和(SNO,CNO)CNO。说明:投影性产生的是平凡的函数依赖,需要时也能使用的。(2 2)扩张性扩张性 若XY且WZ,则(X,W)(Y,Z)。例如,SNO(SN,AGE),DEPTMN,则有(SNO,DEPT)(SN,AGE,MN)。说明:扩张性实现了两函数依赖决定因素与被决定因素的分别合并作用。(3)(3)合并性合并性 若XY且XZ则必有X(Y,Z)。例 如,在 关 系 S D C 中,S N O (S N,A G E),SNODEPT
16、,则有SNO(SN,AGE,DEPT)。说明:决定因素相同的两函数依赖,它们的被决定因素合 并后,函数依赖关系依然保存。(4)(4)分解性分解性 若X(Y,Z),则XY且XZ。很显然,分解性为合并性的逆过程。说明:决定因素能决定全部,当然也能决定全部中的部分。由合并性和分解性,很容易得到以下事实:XA1,A2,,An成立的充分必要条件是XAi(i=1,2,n)成立。3 3完全完全/部分函数依赖和传递部分函数依赖和传递/非传递函数依赖非传递函数依赖定义定义4.24.2 设有关系模式R(U),U是属性全集,X和Y是U的子集,XY,并且对于X的任何一个真子集X,都有X Y,则称Y对X完全函数依赖,记
17、作 X f Y。如果对X的某个真子集X,有XY,则称Y对X部分函数依赖(Partial Functional Dependency),记作 X p Y。例如,在关系模式SDC中,因为SNO SCORE,且CNO SCORE,所以有:(SNO,CNO)f SCORE。而因为有SNOAGE,所以有(SNO,CNO)p AGE。定义定义4.34.3 设有关系模式R(U),U是属性全集,X,Y,Z是U的子集,若XY,(Y X),但Y X,而YZ则称Z对X传递函数依赖(Transitive Functional Dependency),记作:X t Z。注意:如果有YX,则X Y,这时称Z对X直接函数依
18、赖,而不是传递函数依赖。传递函数依赖传递函数依赖如:如:关系模式SDC中,SNO-DEPT,但DEPTSNO,而DEPTMN,则有SNO t MN。当学生不存在重名的情况下,有SNOSN,SNSNO,SNO SN,SN DEPT,这时DEPT对SNO是直接函数依赖,而不是传递函数依赖。练习题:练习题:课后选择题课后选择题5由F=ABC,DCE,DB 由投影性可知 ABC A C BC DC E D E C E DB 再由传递函数依赖关系可知 AE DE 再由合并性可知 AD E练习题:练习题:课后选择题课后选择题84.2.2 4.2.2 码码 在第2章中已给出有关码的概念。这里用函数依赖的概念
19、来定义码。定义定义4.44.4 设K K为R(U,F)中的属性或属性集合,若K K f f U则K K为R R的候选码(或候选关键字候选码(或候选关键字或候选键)或候选键)(Candidate key)。若候选码多于一个,则选定其中的一个为主码主码(或称主键,Primary key)。包含在任何一个候选码中的属性,叫做主属性主属性。不包含在任何候选码中的属性称为非主非主属性属性或非码属性。在最简单的情况,单个属性是码。最极端的情况,整个属性组U是码,称为全码全码(All-key)。如在关系模式S(SNO,DEPT,AGE)中SNO是码,而在关系模式SC(SNO,CNO,SCORE)中属性组合(
20、SNO,CNO)是码。关系模式TCS(T,C,S),属性T表示教师,C表示课程,S表示学生。一个教师可以讲授多门课程,一门课程可有多个教师讲授,一个学生可以选听多门课程,一门课程可 被多个学生选听。教师T,课程C,学生S之间是多对多关系,单个属性T、C、S或两个属性组合(T,C)、(T,S)、(C,S)等均不能完全决定整个属性组U,只有(T,C,S)U,所以这个关系模式的码为(T,C,S),即All-keyAll-key。下面举个全码的例子下面举个全码的例子:找出已知关系模式找出已知关系模式R R(U U,F F)的所有候)的所有候选选键的方法:键的方法:1 1、查 看 函 数 依 赖 集查
21、看 函 数 依 赖 集 F F 中 的 每 个 形 如中 的 每 个 形 如 X Xi i Y Yi i的的(i=1,i=1,n,n)函数依赖关系。看哪些属性在所有)函数依赖关系。看哪些属性在所有Y Yi i(i=1,i=1,n,n)中没有出现过,)中没有出现过,设没出现过的属性集设没出现过的属性集为为P P(P=U-YP=U-Y1 1-Y-Y2 2-Y-Yn n)。)。则当则当P=P=(表示空集)时,转(表示空集)时,转4 4 当当PP时,转时,转2 2。2 2、根据候选键的定义,候选键中应必根据候选键的定义,候选键中应必含含P P(因为没有其(因为没有其它属性能决定它属性能决定P P)。考
22、察)。考察P:P:若有若有P P f f U U成立,则成立,则P P为候选键,并且候选键只有一个为候选键,并且候选键只有一个P,P,转转5 5结束结束若若P P f f U U不成立,则转不成立,则转3 3。3 3、P P可以分别与可以分别与U-PU-P中的每一个属性合并,形成中的每一个属性合并,形成P P1 1,P P2 2,P Pm m。再分别判断。再分别判断P Pj j f f U U(j=1,j=1,m,m)是否成立?能成立则找到了一个候选键,没有则放弃。是否成立?能成立则找到了一个候选键,没有则放弃。合并一个属性若不能找到或不能找全候选键,可进一步合并一个属性若不能找到或不能找全候
23、选键,可进一步考虑考虑P P与与U-PU-P中的两个(或三个,四个,中的两个(或三个,四个,)属性的)属性的所有组合分别进行合并,继续判断分别合并后的各属性所有组合分别进行合并,继续判断分别合并后的各属性组对组对U U的完全函数决定情况的完全函数决定情况;如此直到找出;如此直到找出R R的所有的所有候选键为止。转候选键为止。转5 5结束。(需要提醒的是:如若属性组结束。(需要提醒的是:如若属性组K K已有已有K K f f U U,则完全不必去考察含,则完全不必去考察含K K的其它属性组合了,的其它属性组合了,显然它们都不可能再是候选键了)。显然它们都不可能再是候选键了)。4 4、若若P=P=
24、,则可以先考察,则可以先考察X Xi iYYi i(i=1,i=1,n,n)中的)中的单个单个X Xi i,判断是否有判断是否有X Xi i f f U U?若成立则?若成立则X Xi i为候选键。剩为候选键。剩下不是候选键的下不是候选键的X Xi i,可以考察它们两个或多个的组合,可以考察它们两个或多个的组合,查看其是否能完全函数决定查看其是否能完全函数决定U U,从而找出其它还有可能,从而找出其它还有可能的候选键。转的候选键。转5 5结束。结束。5 5、本方法结束。本方法结束。也可以用也可以用Armstrong公理来求候选码公理来求候选码4.3 4.3 数据依赖的公理系统数据依赖的公理系统
25、*数据依赖的公理系统是模式分解算法的理论基础,数据依赖的公理系统是模式分解算法的理论基础,下面先讨论函数依赖的一个有效而完备的公理系统下面先讨论函数依赖的一个有效而完备的公理系统ArmstrongArmstrong公理系统。公理系统。定义定义4.124.12 对于满足一组函数依赖对于满足一组函数依赖F F的关系模式的关系模式R R(U U,F F),其),其任何一个关系任何一个关系r r,若函数依赖,若函数依赖XYXY都成立(即都成立(即r r中任意两中任意两元组元组t,st,s,若,若tX=sXtX=sX,则,则tY=sYtY=sY),则称),则称F F逻辑蕴逻辑蕴涵涵XYXY。为了求得给定
26、关系模式的码,为了从一组函数依赖为了求得给定关系模式的码,为了从一组函数依赖求得蕴涵的函数依赖,例如已知函数依赖集求得蕴涵的函数依赖,例如已知函数依赖集F F,要问,要问XYXY是否为是否为F F所蕴含,就需要一套推理规则,这组推理规则是所蕴含,就需要一套推理规则,这组推理规则是19741974年首先由年首先由ArmstrongArmstrong提出来的。提出来的。BACKArmstrongArmstrong公理系统公理系统 设设U U为属性集总体,为属性集总体,F F是是U U上的上的一组函数依赖,于是有关系模式一组函数依赖,于是有关系模式R R(U,FU,F)。对)。对R R(U,FU,F
27、)来说有以下的推理规则:)来说有以下的推理规则:l l A1 A1 自反律自反律(ReflexivityReflexivity):若):若Y YX X U U,则,则 XYXY为为F F所蕴含。所蕴含。l l A2 A2 增广律增广律(AugmentationAugmentation):若若XYXY为为F F所蕴所蕴 含,且含,且Z Z U U,则,则XZYZXZYZ为为F F所蕴含。所蕴含。l l A3 A3 传递律传递律(TransitivityTransitivity):若若XYXY及及YZYZ为为F F所含,则所含,则XZXZ为为F F所蕴含。所蕴含。注意:注意:由自反律所得到的函数依
28、赖均是平凡的由自反律所得到的函数依赖均是平凡的函数依赖,自反律的使用并不依赖于函数依赖,自反律的使用并不依赖于F F。根据根据A1A1,A2A2,A3A3这三条推理规则可以得到下面很有这三条推理规则可以得到下面很有用的推理规则:用的推理规则:l l 合并规则合并规则:由由XYXY,XZXZ,XYZXYZ。l l 伪传递规则伪传递规则:由由XYXY,WYZWYZ,有,有XWZXWZ。l l 分解规则分解规则:由:由XYXY及及Z ZY Y,有,有XZXZ。根据合并规则和分解规则,很容易得到这样一个重要事实:根据合并规则和分解规则,很容易得到这样一个重要事实:引理引理4.14.1 XA XA1 1
29、A A2 2A AK K成立的充分必要条件是成立的充分必要条件是XAXAi i成立成立 (i=1i=1,2 2,k k)。)。定义定义4.134.13 在关系模式在关系模式R R(U U,F F)中为)中为F F所蕴含的函数依赖的全所蕴含的函数依赖的全 体叫做体叫做F F的闭包,记为的闭包,记为:F F+。定义定义4.144.14 设设F F为属性集为属性集U U上的一组函数依赖,上的一组函数依赖,X X包含包含于于U U,X XF F+=A|XA=A|XA能由能由F F根据根据ArmstrongArmstrong公理导出公理导出,成为,成为属性集属性集X X关于函数依赖集关于函数依赖集F F
30、的闭包的闭包。引理引理4.24.2 设设F F为属性集为属性集U U上的一组函数依赖,上的一组函数依赖,X X,Y Y包含包含于于U U,XYXY能由能由F F根据根据ArmstrongArmstrong公理导出的充分必要条件是公理导出的充分必要条件是Y Y包包含于含于X XF F+。于是,判定于是,判定XYXY是否能由是否能由F F根据根据ArmstrongArmstrong公理推导公理推导出的问题,就转化为求出的问题,就转化为求出出X XF F+的子集的问题。这个问题由的子集的问题。这个问题由算法算法4.14.1解决了。解决了。算法算法4.1 4.1 求属性集求属性集X X(X XU U)
31、关于)关于U U上的函数依赖集上的函数依赖集 F F的闭包的闭包X XF F+输入:输入:X X,F F 输出:输出:X XF F+步骤:步骤:(1)(1)令令X X(0)(0)=X=X,i=0i=0 (2)(2)求求B B,这里,这里 B=A|(B=A|(V V)(W W)()(VWFVVWFVX X(i)(i)AWAW);(3)X(3)X(i+1)(i+1)=B X=B X(i)(i)(4)(4)判断判断 X X(i+1)(i+1)=X=X(i)(i)吗?吗?(5)(5)若相等若相等或或X X(i+1)(i+1)=U=U,则,则X X(i+1)(i+1)就是就是X XF F+,算法终止。,
32、算法终止。(6)(6)若否,则若否,则i=i+1,i=i+1,返回第(返回第(2 2)步。)步。例例88 已知关系模式已知关系模式R R(U U,F F),),其中其中U=AU=A,B B,C C,D D,EE;F=ABCF=ABC,BDBD,CECE,ECBECB,ACBACB。求求(AB)(AB)F F+。解解 由算法由算法4.14.1,设,设X X(0)(0)=AB=AB;计算计算X X(1)(1);逐一扫描;逐一扫描F F集合中各个函数依赖,找左部集合中各个函数依赖,找左部为为A A,B B或或ABAB的函数依赖。得到两个:的函数依赖。得到两个:ABCABC,BDBD。于是。于是X X
33、(1)(1)=ABCD=ABCD=ABCD=ABCD。因为因为X X(0)(0)X X(1)(1),所以再找出左部为,所以再找出左部为ABCDABCD子集的那些子集的那些函数依赖,又得到函数依赖,又得到CECE,ACBACB,于是,于是X X(2)(2)=X=X(1)(1)BE=ABCDE BE=ABCDE。因为因为X X(2)(2)已等于全部属性的集合,所以已等于全部属性的集合,所以(AB)(AB)F F+=ABCDE=ABCDE。所以可知所以可知R只有一个候选键是只有一个候选键是AB。练习练习1设关系模式设关系模式R(A,B,C,D,E),F=ACD,BC E,D B,E A为为R上的函数
34、依赖集,试求上的函数依赖集,试求R上的所有候选键。上的所有候选键。R上的候选键有上的候选键有A、BC、E。分析:属于分析:属于P=情况情况 设设 X(0)=A;由于由于A-CD X(1)=ACD;由于由于D-B X(2)=ABCD;由于由于BC-E X(3)=ABCDE 所以所以(A)F+=ABCDE。X(0)=BC;由于由于BC-E X(1)=BCE;由于由于E-A X(2)=ABCE;由于由于A-CD X(3)=ABCDE 所以所以(BC)F+=ABCDE。X(0)=E;由于由于E-A X(1)=AE;由于由于A-CD X(2)=ACDE;由于由于D-B X(3)=ABCDE 所以所以(E
35、)F+=ABCDE。X(0)=D;由于由于D-B X(1)=BD;所以所以(D)F+=BD。所以所以R的候选码有的候选码有A、BC、E。练习练习1设关系模式设关系模式R(A,B,C,D,E),F=ACD,BC E,D B,E A为为R上的函数依赖集,试求上的函数依赖集,试求R上的所有候选键。上的所有候选键。练习练习2课后题三(课后题三(6)设设R(A,B,C,D,E,F),函数依赖集函数依赖集F=AB E,AC F,AD B,B C,C DR上的候选键有上的候选键有AB、AC、AD。分析:属于分析:属于P 情况情况 设设 X(0)=A;所以所以(A)F+=A。X(0)=AB;由于由于AB-E
36、X(1)=ABE;由于由于B-C X(2)=ABCE;由于由于AC-F,C-D X(3)=ABCDEF 所以所以(AB)F+=ABCDEF。X(0)=AD;由于由于AD-B X(1)=ABD;由于由于B-C X(2)=ABCD;由于由于AC-F,AB-E X(3)=ABCDEF 所以所以(E)F+=ABCDEF。X(0)=AC;由于由于AC-F X(1)=ACF;由于由于C-D X(2)=ACDF;由于由于AD-B X(3)=ABCDF;由于由于AB-E X(4)=ABCDEF 所以所以(AC)F+=ABCDEF。所以所以R的候选码有的候选码有AB、AD、AC。练习练习2课后题三(课后题三(6
37、)设设R(A,B,C,D,E,F),函数依赖集函数依赖集F=AB E,AC F,AD B,B C,C D练习练习3设设R(A,B,C,D,E),函数依赖集函数依赖集F=AB C,AB E,A D,BD ACER上的候选键有上的候选键有AB和和BD。分析:属于分析:属于P 且且P f U不成立情况不成立情况 设设 X(0)=B;所以所以(B)F+=B。X(0)=AB;由于由于AB-C,AB-E,A-D X(1)=ABCDE;所以所以(AB)F+=ABCDE。X(0)=BD;由于由于BD-ACE X(1)=ABCDE 所以所以(BD)F+=ABCDEF。所以所以R的候选码有的候选码有AB、BD。练
38、习练习4设设R(A,B,C,D,E),根据所给的函数依赖集,示根据所给的函数依赖集,示R的所有候选键。的所有候选键。(1)函数依赖集函数依赖集F=A B,C D,E A.(2)F=BC A,A BC,E CD;(3)F=B CDE,A B,C D(1)CE(2)EA、EBC(3)A 定义定义4.54.5 关系模式关系模式R R中属性或属性组中属性或属性组X X并非并非R R的主码,但的主码,但X X是另是另外一个关系模式外一个关系模式S S的主码,则称的主码,则称X X是是R R的外部码或外部关系的外部码或外部关系键(键(Foreign KeyForeign Key),也称),也称外码外码。如
39、如在在SCSC(SNOSNO,CNOCNO,SCORESCORE)中,单)中,单SNOSNO不是主码,不是主码,但但SNOSNO是关系模式是关系模式S S(SNOSNO,SNSN,SEXSEX,AGEAGE,DEPTDEPT)的主)的主码,则码,则SNOSNO是是SCSC的外码。的外码。主码与外码提供了一个表示关系间联系的手段。如主码与外码提供了一个表示关系间联系的手段。如关系模式关系模式S S与与SCSC的联系就是通过的联系就是通过SNOSNO这个在这个在S S中是主码又在中是主码又在SCSC中是外码的属性来体现的。中是外码的属性来体现的。4.2.3 4.2.3 范式范式 关系数据库的规范化
40、过程中为不同程度的规范化要求设立的不同的标准或准则称为范式范式(Normal FormNormal Form)。满足最低要求的叫第一范式第一范式,简称简称1NF。在第一范式中满足进一步要求的为第二范式(2NF),其余以此类推。R为第几范式就可以写成RxNF(x表示某范式名)。各个范式之间的集合关系可以表示为:5NF4NF BCNF 3NF 2NF 1NF图4.3 各范式之间的关系多值依赖多值依赖连接依赖连接依赖函数依赖函数依赖 一个低一级范式的关系模式,通过模式分一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集解可以转换为若干个高一级范式的关系模式的集合,这种过程
41、就叫合,这种过程就叫规范化规范化。4.2.4 4.2.4 第一范式第一范式 第一范式(First Normal Form)是最基本的规范化形式,即关系中每个属性都是不可再分的简单项关系中每个属性都是不可再分的简单项。定义定义4.64.6 如果关系模式R所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF,记作R1NF。在关系数据库系统中只讨论规范化的关系,凡是非规范化的关系模式必须转化成规范化的关系。在非规范化的关系中去掉组合项就能转化成规范化的关系。每个规范化的关系都是属于1NF。例例2 如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里电话
42、号码)规范成为1NF有三种方法:一是重复存储职工号和姓名。这样关键字是职工号与电话号码的组合。关系模式为:职工(职工号,姓名,电话号码)。二是职工号为关键字,电话号码分为单位电话和住宅电话两个属性。关系模式为:职工(职工号,姓名,单位电话,住宅电话)。三是职工号为关键字,但强制每条记录只能有一个电话号码。关系模式为:职工(职工号,姓名,电话号码)。以上三个方法,可按实际情况选取使用。4.2.5 4.2.5 第二范式第二范式 1第二范式的定义第二范式的定义定义定义4.7 4.7 如果关系模式R1NF,R(U,F)中的所有非主属所有非主属性都性都完全函数依赖完全函数依赖于任意一个候选关键字于任意一
43、个候选关键字,则称关系R 是属于第二范式(Second Normal Form),简称2NF,记作R2NF。从定义可知,满足第二范式的关系模式R中,不可能有某非主属性对某候选关键字存在部分函数依赖。下面让我们来分析下4.1.2节中给出的关系模式SDC。在关系模式在关系模式SDCSDC中,它的关系键是(中,它的关系键是(SNOSNO,CNOCNO)的属性组合,)的属性组合,函数依赖关系有:函数依赖关系有:(SNO,CNO)f SCORE SNOSN,(,(SNO,CNO)p SN SNOAGE,(,(SNO,CNO)p AGE SNODEPT,(,(SNO,CNO)p DEPT,DEPTMN S
44、NO t MN,(SNO,CNO)p p MN 我们可以用函数依赖图表示以上函数依赖关系,如图我们可以用函数依赖图表示以上函数依赖关系,如图4.44.4所示。所示。由关键字的定义可知由关键字的定义可知SGDSGD中的关键字为中的关键字为(SNO,CNO),(SNO,CNO),因此因此SNSN、AGEAGE、DEPTDEPT、MNMN均为非主属性,而非主属性中只有成绩是完全函数依赖于均为非主属性,而非主属性中只有成绩是完全函数依赖于主关键字,其他属性是部分函数依赖于主关键字,因此,关系模式主关键字,其他属性是部分函数依赖于主关键字,因此,关系模式SDGSDG不符合不符合2NF2NF的定义,这种情
45、况往往在数据库中是不允许的,也正的定义,这种情况往往在数据库中是不允许的,也正是由于关系中存在着复杂的函数依赖,才导致数据操作中出现了数是由于关系中存在着复杂的函数依赖,才导致数据操作中出现了数据冗余、插入异常、删除异常、修改异常等弊端。据冗余、插入异常、删除异常、修改异常等弊端。图4.4 SDC中函数依赖图 SCORESNOCNOAGESNMNDEPTptpppf 2.2NF的规范化的规范化 2NF2NF规范化是指把规范化是指把1NF1NF关系模式通过投影分解,消除关系模式通过投影分解,消除非主属性对候选关键字的非主属性对候选关键字的部分部分函数依赖,函数依赖,转换成转换成2NF2NF关系关
46、系模式的集合的过程。模式的集合的过程。分解时遵循的原则是分解时遵循的原则是“一事一地一事一地”,让一个关系只描,让一个关系只描述述一个实体或实体间的联系。如果多于一个实体或联系,一个实体或实体间的联系。如果多于一个实体或联系,则进行投影分解。则进行投影分解。据此我们可以将关系模式据此我们可以将关系模式SDCSDC分解成两个关系模式:分解成两个关系模式:SDSD(SNOSNO,SNSN,AGEAGE,DEPTDEPT,MNMN),描述学生实体),描述学生实体 SCSC(SNOSNO,CNOCNO,SCORESCORE),描述学生与课程的联系。),描述学生与课程的联系。对于分解后的关系模式对于分解
47、后的关系模式SDSD的码为的码为SNOSNO,关系模式,关系模式SCSC的候选关键字为(的候选关键字为(SNOSNO,CNOCNO),非主属性对候选关键),非主属性对候选关键字均是完全函数依赖的,这样就消除了非主属性对候字均是完全函数依赖的,这样就消除了非主属性对候选关键字的部分函数依赖。选关键字的部分函数依赖。即即SD2NFSD2NF,SC2NFSC2NF,它它们之间通过们之间通过SC中的外键中的外键SNO相联系,需要时再进行自相联系,需要时再进行自然联接,能恢复成原来的关系,然联接,能恢复成原来的关系,这种分解不会丢失任这种分解不会丢失任何信息,具有无损连接性。何信息,具有无损连接性。分解
48、后的函数依赖图如图分解后的函数依赖图如图4.54.5和和4.64.6所示。所示。图4.5 SD中的函数依赖关系图 图4.6 SC中的函数依赖关系 SNOSNMNAGEDEPTSNOCNOSCORE 注意:注意:如果如果R R的候选关键字均为单属性,或的候选关键字均为单属性,或R R的全的全体属性均为主属性,则体属性均为主属性,则R2NFR2NF。例如,在讲述全码的概念时给出的关系模式TCS(T,C,S),(T,C,S)三个属性的组合才是其唯一的候选关键字即关系键,T,C,S均是主属性,不存在非主属性,所以也不可能存在非主属性对候选关键字的部分函数依赖,因此TCS2NF。4.2.6 4.2.6
49、第三范式第三范式 1 1第三范式的定义第三范式的定义 定义定义4.84.8 如果关系模式R2NF,R(U,F)中所有所有非主属性非主属性对任对任何候选关键字都何候选关键字都不不存在存在传递传递函数依赖函数依赖,则称R是属于第三范式(Third Normal Form),简称3NF,记作 R3NF。第三范式具有如下性质:(1)(1)如果如果R3NFR3NF,则,则R R也是也是2NF2NF。证明:采用反证法。设R3NF,但R 2NF。则根据判定2NF的定义知,必有非主属性Ai(Ai U,U是R的所有属性集),候选关键字K和K的真子集K(即KK)存在,使得有KAi。由于Ai是非主属性,所以Ai-K
50、(代表空),Ai-K 。由于K K,所以K-K ,并可以断定K K。这样有KK且K K,KAi,且Ai-K ,Ai-K ,即有非主属性Ai传递函数依赖于候选键K(若觉得KK,则可以在K上合并一个Aj,设Aj亦为非主属性,此时仍有KKAj且KAj K,KAj K,KAjAi),所以R 3NF,与题设R3NF相矛盾。从而命题得证。(2)(2)如果如果R2NFR2NF,则,则R R不一定是不一定是3NF3NF。例如:前面讲的关系模式SDC分解为SD和SC,其中SC是3NF,但SD就不是3NF,因为SD中存在非主属性对候选关键字的传递函数依赖:SNODEPT,DEPTMN,即SNO t MN。2NF的