1、数据依赖的公理系统,数据依赖的公理系统是模式分解算法的理论基础 Armstrong公理系统: 函数依赖的一个有效而完备的公理系统 逻辑蕴含: 对于满足一组函数依赖F的关系模R, 其中任何一个关系r, 若函数依赖XY都成立, 则称F逻辑蕴含XY 一套推理规则(Armstrong公理系统): 可以求得给定关系模式的码, 可以从一组函数依赖求得蕴含的函数依赖,数据依赖的公理系统,Armstrong公理系统: 设U为属性集总体, F是U上的一组函数依赖, 于是有关系模式R, 对R来说有以下的推理规则 A1 自反律: 若YXU, 则XY为F所蕴含 A2 增广律: 若XY为F所蕴含, 且ZU, 则XZYZ
2、 为F所蕴含 A3 传递律: 若XY和YZ为F所蕴含, 则XZ为F所蕴含 定理1: Armstrong推理规则是正确的, 即如果F成立, 则由F出发, 根据Armstrong公理导出的函数依赖总是正确的,数据依赖的公理系统,证明1: 设YXU对R的任一关系r中的任意两个元组t, s若tX=sX, 由YX 可得tY=sY所以XY成立 证明2: 设XY为F所蕴含, 且ZU对R的任一关系r中的任意两个元组t, s若tXZ=sXZ, 则有tX=sX和tZ=sZ又XY成立, 则有tX=sX和 tY=sY 所以tYZ=sYZ, 所以XZYZ为F所蕴含,数据依赖的公理系统,证明3: 设XY及YZ为F所蕴含对
3、R的任一关系r中的任意两个元组t, s若tX=sX, 由XY可得tY=sY又YZ成立, 则有tZ=sZ 所以XZ为F所蕴含 根据上述推理规则得到另外的推理规则 1合并规则: 若XY 和XZ, 则有XYZ 2伪传递规则: 若XY和 WYZ, 则有XWZ 3分解规则: 若XY及ZY, 则有XZ,数据依赖的公理系统,引理1: XA1 A2. Ak成立的充分必要条件是X Ai成立(由合并规则和分解规则可以证明) 定义2: F的闭包 在关系模式R中为F所蕴含的函数依赖的全体, 记作F+ 定理2: Armstrong公理系统是有效的、完备的 有效的: 指由F出发, 根据Armstrong公理导出的每个函数
4、依赖一定在F+中(由定理1可证明) 完备的: 指F+中的每个函数依赖必定可由F出发, 根据Armstrong公理推导出来,数据依赖的公理系统,由定理2可知, 理论上是可以求得F+的, 如果有F+, 判断XY是否属于F+是非常容易的, 但实际上由F求F+有时几乎是不可能做到的, 例如从F=XA1 , XA2 , XAn 出发可以推导出2n个函数依赖 定义3: 设F为属性集U上的一组函数依赖, X U, XF+=A|X A能由F根据Armstrong公理导出, XF+称为属性集X关于函数依赖集F的闭包 引理2(由引理1得出):设F为属性集U上的一组函数依赖, X,Y U, XY能由F根据Armst
5、rong公理导出的充分必要条件是Y XF+,数据依赖的公理系统,判断XY是否能由F根据Armstrong问题, 转化为求XF+, 判断Y是否为XF+的子集问题 求XF+算法(输入X, F, 输出XF+) (1)令X(0)=X, i=0 (2)求B, B=A|(v)(w)(v wFv X(i)Aw) (3) X(i+1)=BX(i) (4)判断X(i+1)=X(i) (5)若不等, i=i+1, 返回(2) (6)若相等或X(i)=U, XF+ =X(i),结束,数据依赖的公理系统,例子: 已知关系模式R, U=A, B, C, D, E, F=AB C, B D, C E, EC B, AC
6、B 求(AB)F+ (1)X(0)=AB, i=0 (2)求B, B=CD (3) X(1)=BX(0)=ABCD (4)因为X(1)X(0), 所以再找出左部为ABCD子集的那些函数依赖 (5)B=CDBE (6) X(2)=BX(1)=ABCDE (AB)F+ =ABCDE,数据依赖的公理系统,定义4: 设F, G为两个函数依赖集, 如果F+=G+, 则称F和G是等价的, 也称F覆盖G, 或称G覆盖F, 也可以说F和G互相覆盖 引理3: F+=G+的充分必要条件为FG+和GF+证: 必要性F+=G+F+ G+ G+ F+ 所以 F G+ G F+充分性F G+则F+ (G+ )+, 但(G
7、+ )+= G+ 故F+ G+ 同理可证 G+ F+ 所以F+=G+,数据依赖的公理系统,引理3给出了测试函数依赖集F和G是否等价的方法: 测试FG+和GF+是否成立例如: 测试FG+对每个函数依赖XY F, 测试它是否在G+中计算X关于G+ 的闭包 , 然后测试Y 定义5: 如果函数依赖集F满足下列条件, 则称F为一个极小的函数依赖集, 也称最小覆盖(1) F中的每个函数依赖的右部为单属性(2) F中不存在这样的函数依赖XA, 使得F-XA 与F等价,数据依赖的公理系统,(3) F中不存在这样的函数依赖XA, 使得F-XA ZA与F等价(Z X) 定理3: 每个函数依赖集F均等价于一个极小的
8、函数依赖集Fm, Fm称为F的最小覆盖证明: 只要能构造一个满足定义5中3个条件的覆盖Fm, 定理得证(1) 逐一检查F中的函数依赖XY, 如Y=A1A2.An ,则用XAi | i=1,2., K取代XY(2) 逐一检查XA 令G=F-XA, 若A XG+ 则从F中去掉该函数依赖, 对所有的XA检查并处理后, 的覆盖G, G满足定义5中的(1)(2),数据依赖的公理系统,(3) 检查G中每个函数依赖XA, 设X= B1B2.Bm , 对Bi逐一做下列检查和处理G与G-XA(X- Bi) A是否等价如等价, 则以X- Bi取代X, 如不等价, 则X不变所有的Bi检查完后, 令最后的X为Z 并以
9、G- XA(Z A) 代替GG中每个XA做如此检查后, 设得函数依赖集G显然G满足定义5中的3项, 故令G为Fm, 即Fm是可构造的,数据依赖的公理系统,关系模式R1和R2, 如果F和G等价, 那么R1的关系一定是R2的关系, 所以在R中用与F等价的依赖集G来取代F是允许的 给定关系模式R, 求候选码例子: 对于R(ABCDE), F=AB, BC E, EDA求出R的所有候选关键字如果K是关键字, 则有K U, 所以只要判断KF+ =U 且KF+ U (KK)(CD)F+ =CD (CDE)F+ =CDEAB(CDA)F+ =ABCDE(CDB)F+ =CDBEA,模式分解,有时候为了控制由
10、于冗余带来的问题以及插入和删除等问题要求关系模式满足一定的范型,可以通过模式分解来达到,这一过程称之为规范化(Normalization) 有时候考虑到查询的效率,需要将满足较高范型的关系模式进行合并,这一过程称之为 Denormalization,模式分解,关系模式R(U,F)的一个分解是指 =R1, R2, , Rn, 其中U=ni=1Ui, 并且没有UiUj, 1i,j n, Fi是F在Ui上的投影 Fi是F在Ui上的投影=XY | XYF+XYUi的最小函数依赖集 模式分解的三个定义: 朴素想法: 一个关系分解成多个关系, 相应的原来一个关系中的数据就要分散到多个关系中, 要使分解有意
11、义, 就要求后者不能丢失前者的信息,模式分解,例子: 已知R, 其中U=S#, SD, MN F=S#SD, SD MN, 由于R中存在传递函数依赖S#MN, 会发生更新异常 分解 1=R1, R2, R3 分解后Ri的关系ri是R的关系r在Ui上的投影 S# SD MN r1=S1, S2, S3, S4 S1 D1 张五 r2=D1, D2, D3 S2 D1 张五 r3=张五, 李四, 王一 S3 D2 李四 如果问S1在哪个系学习, 此 S4 D3 王一 时变得无从知道, 丢失了原来的信息,模式分解,分解 2=R1, R2 S# SD MN r1= S1, D1, S2, D1, S1
12、 D1 张五 S3, D2, S4, ,D3 S2 D1 张五 r2= S1,张五, S2,张五, S3 D2 李四 S3,李四, S4,王一 S4 D3 王一 通过自然连接, 可以恢复r无损分解(分解具有无损连接性): 不丢失信息 2不能解决插入、删除异常, 由于丢失SDMN,模式分解,分解 3=R1, R2 S# SD MN r1= S1, D1, S2, D1, S1 D1 张五 S3, D2, S4, ,D3 S2 D1 张五 r2= D1,张五, S3,李四, S3 D2 李四 S4,王一 S4 D3 王一 通过自然连接, 可以恢复r保持函数依赖: 不丢失函数依赖 保持函数依赖又具有
13、无损连接性:,模式分解,通过例子来考察分解后的性质 R1=R1, R2, R3 有损分解、不保持函数依赖 3=R1, R2 无损分解、保持函数依赖,模式分解,2 ? 结论: 对一个模式的分解是多种多样的, 但分解后产生的模式应与原模式等价, 等价的三个不同定义: 分解具有“无损连接性” 分解要保持函数依赖 分解既要保持函数依赖又要具有无损连接性 定义3: 设=R1,R2, , Rn是R的一个分解, r是R的任意一个值, 如果满足条件r= r1 r2, , rn, 其中ri= Ui (r), 称分解具有无损连接性或简称无损分解,模式分解,定义4: 设=R1,R2, , Rn是R的一个分解, 如果
14、 逻辑蕴含F, 称分解保持函数依赖关系模式分解的两种准则 只满足无损分解: 最基本的要求, 发同样的查询得到查询结果相等 既满足无损分解又满足保持函数依赖,模式分解,反例: 只保持函数依赖, 而不满足无损分解要求的分解. 关系模式R(ABCD), 设F=A B, C D, 它的分解=R1(AB), R2(CD), 分解无意义 无损分解测试算法: 检测一个分解是否无损分解 输入: 关系模式R(A1, A2, ., An)R上的函数依赖集FR上的分解=R1, R2, . ,Rk 输出: 是无损分解 步骤:,模式分解,(1) 建立n列, k行的矩阵M,属性, 的K个关系模式,A1 A2 . Aj .
15、 An R1 R2Ri . Mi, j Rk,.,.,.,Mi, j= aj 若AiUibij 若AiUi,模式分解,(2) 对F中的每个函数依赖XY反复进行下面 的检查和处理, 直到M无变化 为止检查X中的属性所对应的列, 找出X相等的那些行, 如果找到X相等的两行(或多行), 把相应的Y属性对应的符号该为一致, 即如果其中之一为aj, 则其他也改成aj, 如果这两个符号为bij和blj, 将它们统一成bij或blj(3)当M无变化时, 如果M中有一行变成了 a1,a2.,an, 则是无损分解, 否则不是,模式分解,例子: 关系模式R(ABCDE)=R1(AD), R2(AB), R3(BE
16、), R4(CDE), R5(AE) 是R的一个分解, 在R上有下列函数依赖F=A C, B C, C D, DE C, CE A, 判别是否是无损分解解:(1)建M(2)对A C检查b13, b23, b53 b13对B C检查b13, b33 b13,模式分解,=R1(AD), R2(AB), R3(BE), R4(CDE), R5(AE) ,模式分解,对C D检查对DE C检查,模式分解,对CE A检查再进行下去, M无任何变动, 由于第三行已是全a, 所以是无损分解,模式分解,定理: 算法1可以正确判断一个分解是无损分解 定理: 关系模式R, 分解=R1, R2具有无损连接性的充分必要
17、条件为U1U2U1-U2F+或U1U2U2-U1F+ 保持函数依赖分解测试算法: 检测一个分解是否保持函数依赖 输入: , F 输出: 是否保持函数依赖,模式分解,(1) 令G= , 检查G是否覆盖F (2) 对F中的每个函数依赖XY进行下列检查1)计算X关于G的闭包XG+, 检查Y是否是XG+的子集为了计算XG+, 不必求出G, 可以分别地, 反复地计算Ui(F) (其中i=1,2,.,k)对XG+所增加的属性Z=Xwhile Z有改变 dofor i=1 to k doZ=Z(Z Ui)F+ Ui),Z中与Ui有关属性,是Ui(F)对XG+增加的属性,模式分解,经反复计算, 直至Z不变Z是
18、XG+如果YXG+, 则XY G+2)如果F中的所有函数依赖都属于G+ ,则保持函数依赖 例子: 关系模式R(ABCD), F=A B, B C, C D, D A, 判别=R1(AB), R2(BC), R3(CD) 是否保持函数依赖 解: U1(F) A BU2(F) BCU3(F) C D,F中的前三个函数依赖已明显在G中, 只要检验D A是否为F所蕴含,模式分解,令 Z=D第一遍: i=1ZU1=D A, B = Z不变i=2ZU2=D B, C = Z不变i=3ZU3=D C, D =DZ=D(DF+ C, D)=D(A,B,C,D C, D)= C, D,模式分解,第二遍: i=1
19、ZU1=C,D A, B = Z不变i=2ZU2=C,D B, C =CZ=C,D(CF+ B, C)=C,D(A,B,C,D B, C)= B,C,Di=3ZU3=B,C,D C, D =C,DZ=B,C,D(C,DF+ C, D)=B,C,D(A,B,C,D C, D)= B,C, D,模式分解,第三遍: i=1ZU1=B,C,D A, B =BZ=B,C,D(BF+ A,B)= A,B,C,DZ是全部属性集, 不可能再改变所以DG+ =A,B,C,D因为A D G + 所以DA G+ 所以保持函数依赖,模式分解,对数据库设计者来说两种重要的范式: 3NF和BCNF由于关系规范化要求不同,
20、 出现了不同的范式, 其规范化条件越来越强, 后面的范式可以看成是前面范式的特例, 从关系规范化的发展看来, 有这些范式, 但在规范化时, 不必按此步骤顺序已不不去做, 对于数据库设计者来说1NF和2NF并不重要 一般来说属于3NF而非BCNF的关系模式不是很多, 即使出现了这种关系模式, 对数据库设计者来说, 引起的更新异常往往也不是重要的,模式分解,例子: 关系模式R(C, S, Z), 其中C-city, S-street, Z-zip, R属于3NF而非BCNF 问题: 插入异常(如不知道街道) 规范化: R1(Z,C) R2(S,Z), 都为BCNF 因为(ZCSZ)(ZC-SZ)F
21、+, 但F中的CS Z将得不到保持 R(C,S,Z)还是合理的, 因为撇开街道, 单单表示Z与C的关系在应用中不是很必要的,C S,Z,码,非主属性,模式分解算法,保持函数依赖的3NF范式分解:算法1 对R中的F进行最小化处理 不在F中出现的属性组成一个关系模式,并从U中去掉这些属性 若存在XAF, 有XA=U, 则=R, 终止算法 否则,对于具有相同左部的函数依赖分成一组,假设有K组,记为F1,F2,Fk, Fi的所有属性构成Ui, 若UiUj(ij), 则去掉Ui, 这样得到的一个分解=R1, R2, , Rk构成了R的一个保持函数依赖的分解,模式分解算法,具有无损连接性和保持函数依赖的3
22、NF范式分解:算法2 设X是关系模式R的关键字 通过算法1得到一个分解 = U R* 若存在一个Uj, 有XUj, 则将R*从中去掉 是一个具有无损连接和保持函数依赖的3NF分解,模式分解算法,具有无损连接性的BCNF范式分解:算法3 =R 检查中的每个关系模式是否为BCNF,若是算法终止 设中Ri不属于BCNF, 那么必存在XAFi+(AX), X不是Ri的关键字,对Ri进行分解:=S1,S2, Us1=XA, Us2=Ui-A, 以代替Ri, 返回第二步,模式分解算法-小结,若要保持函数依赖,模式分解总可以达到3NF,但不一定能达到BCNF 若要保持函数依赖和具有无损分解性,模式分解也总可
23、以达到3NF,但不一定能达到BCNF 若要求具有无损分解性,模式分解总可以达到4NF,本章小结,概念 函数依赖、关键字、1NF、 2NF、 3NF、 BCNF、属性闭包、最小函数依赖集 算法 属性闭包的求解算法 最小函数依赖集的求解算法 关键字的判定方法 1NF、2NF、3NF、BCNF的判定方法 模式分解算法,本章练习,对于R(A,B,C,D), 设AB是关键字,给定一个函数依赖集FD,使得R1NF,但R2NF 对于R(A,B,C,D), 设AB是关键字,给定一个函数依赖集FD,使得R2NF,但R3NF 对于R(A,B,C), BCF, 设A是一个候选关键字,RBCNF可能吗?若可能需要什么
24、条件?若不可能则为什么? 对于R(ABCDE), F=AB, BC E, EDA 求出R的所有候选关键字 R3NF? RBCNF?,本章练习,对于R(ABCDEFGHI), 分解得到下面的关系 R1(ABCDE), AB, CD, ACE R2(ABF), AB, BF R3(AD), R4(DCGH), DG, GH, CD R5(AICE), AI, IA, 问题: 上述子关系模式最高范式级别? 如果不满足BCNF,进行分解,本章练习,对于R(ABCD), 对于下面的函数依赖 CD, CA, BC BC, DA ABCD, DA AB, BCD, AC ABC, ABD, CA, DB 问题: 上述每种情况的所有候选关键字 上述每种情况的最高范式级别? 如果不满足BCNF,进行分解,