数据库模式分解.ppt
- 文档编号:18752989
- 上传时间:2023-10-29
- 格式:PPT
- 页数:67
- 大小:887.50KB
数据库模式分解.ppt
《数据库模式分解.ppt》由会员分享,可在线阅读,更多相关《数据库模式分解.ppt(67页珍藏版)》请在冰点文库上搜索。
习题讲解,最小依赖集,1)考查AB,去掉它,计算A+=AC,不包含B,不能去掉2)考查BA,去掉它,计算BBCA,包含A,可去掉它3)考查BC,去掉它,计算BB,不包含C,不能去掉4)考查AC,去掉它,计算AABC,包含C,可去掉它5)考查CA,去掉它,计算CC,不包含A,不能去掉,12345,求解关系模式的候选码,属性分类L类:
只出现在函数依赖的左边的属性R类:
只出现在函数依赖的右边的属性N类:
在函数依赖的两边均未出现的属性LR类:
出现在函数依赖的两边的属性,求解关系模式的候选码,对于给定的关系模式R及其函数依赖集F如果X是L或N类属性,则X必为R的任一候选码的成员如果X是R类属性,则X必不在任何候选码中如果X是L和N类组成的属性组,且X+包含了全部属性,则X是R的唯一候选码,前例,例:
关系模式CTHRSG,若最小依赖集为F=CT,HRC,CSG,HSR,HTR,候选关键字为HS?
解:
L、N类属性为HS,LR属性为CTRHS+=HSRCTG,包含全部属性,所以为唯一候选码,函数依赖图FDG用有向图表示的函数依赖,如,L或N类属性有E和C,LR类属性ADB,令X=EC,(EC)+=U,EC为R的唯一候选码。
对左边为单属性的函数依赖集求所有候选码,
(1)求F的最小依赖集F
(2)作出函数依赖图FDG(3)从FDG图中找出无入边的属性集X(4)察看FDG图中有无回路,若无,则输出X并结束,否则进行下一步(5)从各独立回路中各取一个结点的属性与X组成一个候选码,重复取得所有可能的组合,即R的全部候选码,算法:
对左边为多属性的函数依赖集求所有候选码,
(1)将R所有属性分为L,R,N,LR四类,并令X代表L,N两类,令Y代表LR类。
(2)求X+,若X+包含R全部属性,则X即为R的唯一候选码,结束,否则转下一步。
(3)在Y中取一属性A,求(XA)+,若它包含R的全部属性,则转下一步,否则换一个属性重试,直至试完所有Y中的属性。
(4)若已找出所有候选码,则结束,否则在Y中依次取两个、三个、,求它们的属性闭包,直至其闭包包含R的全部属性。
属于N-P完全问题(一类直观上难解可又找不出方法来证明它们的确难解的计算问题)多属性下求解候选码的充分条件,第六章关系数据理论,6.1数据依赖6.2规范化6.3数据依赖的公理系统6.4模式的分解,6.4模式的分解,把低一级的关系模式分解为若干个高一级的关系模式的方法并不是唯一的。
只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义。
关系模式分解的标准,三种模式分解的等价定义分解具有无损连接性分解要保持函数依赖分解既要保持函数依赖,又要具有无损连接性,模式的分解(续),定义6.16关系模式R的一个分解:
=R1,R2,RnU=U1U2Un,且不存在UiUj,Fi为F在Ui上的投影。
定义6.17函数依赖集合XY|XYF+XYUi的一个覆盖Fi叫作F在属性Ui上的投影,模式的分解(续),定义6.16关系模式R的一个分解:
=R1,R2,RnU=U1U2Un,且不存在UiUj,Fi为F在Ui上的投影。
定义6.17函数依赖集合XY|XYF+XYUi的一个覆盖Fi叫作F在属性Ui上的投影,模式的分解(续),例:
SL(Sno,Sdept,Sloc)F=SnoSdept,SdeptSloc,SnoSlocSL2NF存在插入异常、删除异常、冗余度大和修改复杂等问题分解方法可以有多种。
模式的分解(续),SLSnoSdeptSloc95001CSA95002ISB95003MAC95004ISB95005PHB,模式的分解(续),1.SL分解为下面三个关系模式:
SN(Sno)SD(Sdept)SO(Sloc),分解后的关系为:
SNSDSOSnoSdeptSloc95001CSA95002ISB95003MAC95004PH95005,模式的分解(续),分解后的数据库丢失了许多信息例如无法查询95001学生所在系或所在宿舍。
如果分解后的关系可以通过自然连接恢复为原来的关系,那么这种分解就没有丢失信息,模式的分解(续),2.SL分解为下面二个关系模式:
NL(Sno,Sloc)DL(Sdept,Sloc)分解后的关系为:
NLDLSnoSlocSdeptSloc95001ACSA95002BISB95003CMAC95004BPHB95005B,模式的分解(续),NLDLSnoSlocSdept95001ACS95002BIS95002BPH95003CMA95004BIS95004BPH95005BIS95005BPH,模式的分解(续),NLDL比原来的SL关系多了3个元组无法知道95002、95004、95005究竟是哪个系的学生元组增加了,信息丢失了,第三种分解方法,3.将SL分解为下面二个关系模式:
ND(Sno,Sdept)NL(Sno,Sloc)分解后的关系为:
模式的分解(续),NDNLSnoSdeptSnoSloc95001CS95001A95002IS95002B95003MA95003C95004IS95004B95005PH95005B,模式的分解(续),NDNLSnoSdeptSloc95001CSA95002ISB95003MAC95004CSA95005PHB与SL关系一样,因此没有丢失信息。
具有无损连接性的模式分解,关系模式R的一个分解=R1,R2,Rn,若R与R1、R2、Rn自然连接的结果相等,则称关系,模式R的这个分解具有无损连接性(Losslessjoin)具有无损连接性的分解保证不丢失信息无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题,模式的分解(续),第三种分解方法具有无损连接性问题:
这种分解方法没有保持原关系中的函数依赖SL中的函数依赖SdeptSloc,没有投影到关系模式ND、NL上,保持函数依赖的模式分解,设关系模式R被分解为若干个关系模式R1,R2,Rn(其中U=U1U2Un,且不存在UiUj,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的(Preservedependency)。
保持函数依赖的模式分解,例子,R(A,B,C),F=AB,CB分解1=(A,B,AB),(A,C)分解2=(A,B,AB),(B,C,CB)计算分解1,2中3个模式的闭包FAB:
A+=AB,B+=B,AB+=AB,则对AB的分解有函数依赖ABAC:
A+=A,C+=C,AC+=AC,则对AC的分解没有函数依赖BC:
B+=B,C+=CB,BC+=BC,则对BC的分解只有函数依赖CB分解1:
只有AB,显然,分解1不具有依赖保持性分解2:
保留了所有函数依赖,具有依赖保持性,分析两种分解的依赖保持性?
第四种分解方法,SL(Sno,Sdept,Sloc)F=SnoSdept,SdeptSloc,SnoSloc将SL分解为下面二个关系模式:
ND(Sno,Sdept)DL(Sdept,Sloc)这种分解方法就保持了函数依赖。
模式的分解(续),如果一个分解具有无损连接性,则它能够保证不丢失信息。
如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。
分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。
具有无损连接性的分解不一定能够保持函数依赖。
同样,保持函数依赖的分解也不一定具有无损连接性。
模式的分解(续),第一种分解方法既不具有无损连接性,也未保持函数依赖,它不是原关系模式的一个等价分解SN(Sno),SD(Sdept),SO(Sloc)第二种分解方法保持了函数依赖,但不具有无损连接性。
NL(Sno,Sloc),DL(Sdept,Sloc),SL(Sno,Sdept,Sloc)F=SnoSdept,SdeptSloc,SnoSloc,模式的分解(续),第三种分解方法具有无损连接性,但未持函数依赖ND(Sno,Sdept),NL(Sno,Sloc)第四种分解方法既具有无损连接性,又保持了函数依赖ND(Sno,Sdept),DL(Sdept,Sloc),SL(Sno,Sdept,Sloc)F=SnoSdept,SdeptSloc,SnoSloc,分解算法,算法6.2判别一个分解的无损连接性算法6.3(合成法)转换为3NF的保持函数依赖的分解。
算法6.4转换为3NF既有无损连接性又保持函数依赖的分解算法6.5转换为BCNF的无损连接分解(分解法)算法6.6达到4NF的具有无损连接性的分解P196图5.11,判别一个分解的无损连接性,算法6.2
(1)构造初始表:
构造一个k行n列的初始表,其中每列对应于R的一个属性,每行用于表示分解后的一个模式组成。
如果属性Aj属于关系模式Ri,则在表的第一i行第j列置符号aj,否则置符号bij。
(2)根据F中的函数依赖修改表内容:
考察F中的每个函数依赖XY,在属性组X所在的那些列上寻找具有相同符号的行,如果找到这样的两行或更多的行,则修改这些行,则使这些行上属性组Y所在的列上元素相同。
修改规则是:
如果y所在的要修改的行中有一个为aj,则这些元素均变成aj;否则改动为bmj(其中m为这些行的最小行号)。
判别一个分解的无损连接性,注意:
若某个bij被改动,则该列中凡是与bij相同的符号均做相同的改动。
循环地对F中的函数依赖进行逐个处理,直到发现表中有一行变为a1,a2,an或不能再被修改为止。
(3)判断分解是否为无损联接:
如果通过修改,发现表中有一行变a1,a2,an,则分解是无损联接的,否则分解不具有无损联接性。
初始表:
最后结果:
R1,R2,R3,R1,R2,R3,1,2,2,例子:
判断无损连接性,初始表:
最后结果:
R1,R2,R3,R1,R2,R3,1,2,2,简易方法:
只画关注数据,判别一个分解的无损连接性,已知关系模式R(ABCDE)及函数依赖集F=AC,BC,CD,DEC,CEA验证分解=R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE)是否为无损联接。
通过修改发现表中第三行元素变为a1,a2,an,分解是无损联接。
判别一个分解的无损连接性,定理:
如果R的分解为r=R1,R2,F为R所满足的函数依赖集合,分解r具有无损联接性的充要条件是:
R1R2(R1R2)F+或R1R2(R2R1)F+,模式的分解(续),定义6.16关系模式R的一个分解:
=R1,R2,RnU=U1U2Un,且不存在UiUj,Fi为F在Ui上的投影。
定义6.17函数依赖集合XY|XYF+XYUi的一个覆盖Fi叫作F在属性Ui上的投影,判别一个分解的无损连接性,关系模式R(A,B,C,D)函数依赖集F=AB,CD,=R1(AB),R2(CD),求R1,R2,并检验分解的无损联接性和分解的函数依赖保持性。
解:
F1=R1(F)=AB,F2=R2(F)=CD,分解为R1(AB,AB),R2(CD,CD)U1U2=ABCD=,U1-U2=AB,U2-U1=CD,ABF+,CDF+,所以不是无损分解。
判别一个分解的无损连接性,例:
设R=ABC,F=AB,则1=R1(AB),R2(AC)和2=R1(AB),R3(BC)是否具有无损联接性。
判别一个分解的无损连接性,例将R=(ABCD,AB,BC,BD,CA)分解为关于U1=AB,U2=ACD两个关系,求R1、R2,并检验分解的无损联接性和分解的函数依赖保持性。
解:
F1=R1(F)=AB,BA,F2=R2(F)=AC,CA,ADR1=(AB,AB,BA)R2=(ACD,AC,CA,AD)U1U2=ABACD=A,U1-U2=AB-ACD=B,ABF+,所以是无损连接分解;,(F1UF2)+=AB,BA,AC,CA,AD+AB,BC,BD,CA+=F+,所以是函数依赖保持性。
练习:
已知关系模式R(CITY,ST,ZIP),F=(CITY,ST)ZIP,ZIPCITY,以及R上的一个分解=R1,R2,R1=ST,ZIP,R2=CITY,ZIP,求R1,R2,并检验分解的无损联接性和分解的函数依赖保持性。
答案R1=(ST,ZIP,)R2=(CITY,ZIP,ZIPCITY),是无损分解,但不具有函数依赖保持性。
(1)极小化处理F
(2)如果R中的某些属性在F的所有依赖的左边和右边都不出现,那么这些属性可以从R中分出去,单独构成一个关系模式。
(3)如果F中有一个依赖XA有XA=R,则=R,转(4)(4)对于F中每一个XA,构成一个关系模式XA,如果F有有XA1,XA2.XAn,则可以用模式XA1A2.An代替n个模式XA1,XA2.XAn;(5)分解结束。
算法6.3分解成3NF模式集(合成法)保持函数依赖,一般情况下,只要用F中所有函数依赖左右两边的属性组成各个关系子模式,函数依赖中不涉及的属性组成一个关系。
具有依赖保持性的3NF分解例子,例1:
SL(Sno,Sdept,Sloc)F=SnoSdept,SdeptSloc,SnoSlocF=SnoSdept,SdeptSloc,因为去掉SnoSloc,Sno+=SnoSdeptSloc,包含Sloc,则可去掉具有依赖保持性的3NF分解为Sno,Sdept和Sdept,Sloc例2:
关系模式CTHRSG,若最小依赖集为F=CT,HRC,CSG,HSR,HTR具有依赖保持性的3NF分解为CT,CHR,CSG,HSR,HTR,分解成3NF模式(保持函数依赖又无损连接),使用合成法将RU,F分解为=设X是R的码,令=R*X,FX如有某个Ui,使得:
XUi,则从中去掉R*X,FX即所求,例子,例:
关系模式CTHRSG,若最小依赖集为F=CT,HRC,CSG,HSR,HTR,候选关键字为HS如前例,具有依赖保持性的3NF分解为CT,CHR,CSG,HSR,HTR则具有无损连接和依赖保持性的3NF分解为CT,CHR,CSG,HSR,HTR,HSHS和HSR重复,则为CT,CHR,CSG,HSR,HTR,1、设U=A,B,C,D,E,FF=ABCDE,DEABC,ABD,EC,DEF求最小依赖集,并使用算法分解到3NF解:
F=ABCD,ABCE,DEA,DEB,DEC,ABD,EC,DEFABD,ABCD去掉ABCD又EC,DEC去掉DECFm=ABCE,ABD,EC,DEA,DEB,DEF其码:
ABC,ABE,DE按算法1得到:
=R1ABCE,ABCE,R2(ABD,ABD),R3,R4,例题,例题,其中,
(1)R3的属性包含在R1关系的属性中,去掉R3R2的属性包含在R4关系的属性中,去掉R2;=R1ABCE,ABCE,R2(ABD,ABD),R3,R4
(2)由于R*ABC,FABC,R*DE,FDE,R*ABE,FABE皆是中的某个Ui的子集,因此全部去掉。
最终的分解为:
=R1故上面的分解既保持函数依赖又无损连接。
分解成BCNF模式集的算法,无损联接分解成BCNF模式集的算法:
(1)置初值=R;
(2)如果中所有关系模式都是BCNF,则转(4);(3)如果中有一个关系模式S不是BCNF,则S中必能找到一个函数依赖集XA有X不是S的键,且A不属于X,设S1=XA,S2=S-A,用分解S1,S2代替S,转
(2);(4)分解结束。
输出。
Notice:
重点在于(3)步,判断哪个关系不是BCNF,并找到X和A。
分成BCNF,设关系模式R,R的函数依赖关系F=AD,ED,DB,BCD,DCA请将该关系分解到BCNF。
解:
找到候选键:
EDECDC.
(1)DCAECA.
(2)DBDCBCBECB.(3)由
(1)
(2)(3)得ECABDEC为键,这里关系键仅有一个(在右边有E和C未出现键中必包含EC为键)主属性EC,非主属性A,B,D。
分成BCNF(无损),直接分解到BCNFAD,ABCER1(AD),R2(ABCE)在R2中EB分解:
R21(EB),R22(EAC)R分解为R1(AD),R2(EB),R3(EAC)分解不是唯一的。
分解算法,解P196图5.11若要求分解具有无损连接性,那么模式分解一定能够达到4NF。
若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。
泛关系假设,“假设已知一个模式S,它仅由单个关系模式组成,问题是要设计一个模式SD,它与S等价,但在某些方面更好一些”。
从一个关系模式出发,而不是从一组关系模式出发实行分解。
“等价”的定义也是一组关系模式与一个关系模式的“等价”。
小结(续),规范化理论为数据库设计提供了理论的指南和工具也仅仅是指南和工具并不是规范化程度越高,模式就越好必须结合应用环境和现实世界的具体情况合理地选择数据库模式,综合习题,下面给出一个数据集,判断它是否可直接作为关系数据库中的关系,若不行,则改造成为尽可能好的并能作为关系数据库中关系的形式,同时说明进行这种改造的理由。
解答,下面给出的关系R为第几范式?
是否存在操作异常?
若存在,则将其分解为高一级范式。
分解完成的高级范式中是否可以避免分解前关系中存在的操作异常?
解答,答:
它为1NF。
因为该关系的候选关键字为(工程号,材料号),而非主属性(开工日期和完工日期)部分函数依赖于候选关键字的子集工程号,即:
(工程号,材料号)p开工日期(工程号,材料号)p完工日期所以它不是2NF。
它存在操作异常。
如果工程项目确定后,若暂时未用到材料,则该工程的数据因缺少关键字的一部分(材料号)而不能进入到数据库中,出现插入异常。
若某工程下马,则删去该工程的操作也可能丢失材料方面的信息。
将其中的部分函数依赖分解为一个独立的关系,则产生如下的两个2NF关系子模式:
分解后,新工程确定后,尽管还未用到材料,该工程数据可在关系R2中插入。
删除某工程数据时,仅对关系R2操作,不会丢失材料方面的信息。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 模式 分解