当前位置:
文档之家› 数据库模式的分解无损连接性教案
数据库模式的分解无损连接性教案
3.9.2 无损分解
无损分解定义:关系模式R<U,F>的一个分解
ρ={ R1<U1,F1>,R2<U2,F2>, …,Rn<Un,Fn>},对于R的任
一关系r,都有r为其在各Ui(1=1,…,n)上的投影的(自然) 连接,即r=πU1(r) ⋈πU2(r) ⋈… ⋈πUn(r),则称关系模式
R的这个分解ρ具有无损连接性(Lossless join)。
ρ={R1(ABC), R2(CD),R3(DE)}。 那么ρ相对于F是否无损分解?
算法2 判别一个分解的无损连接性
R1(ABC), R2(CD),R3(DE) F={AB→C,C→D,D→E}
初始表:
A
B
C
D
E
R1 a1 a2 a3 b14 b15
R2 b21 b22 a3 a4 b25
R3 b31 b32 b33
(4)对F按具有相同左部的原则分组(假定分为k组), 每一组函数依赖Fi所涉及的全部属性形成一个属性 集Ui。若Ui Uj(i≠j),就去掉Ui。于是 ρ={R1<U1,F1>,R2<U2,F2>,…,Rk<Uk,Fk>} 构 成R<U,F>的一个保持函数依赖的分解,并且每个 Ri(Ui,Fi)均属于3NF且保持函数依赖。
算法2 判别一个分解的无损连接性
③比较扫描前后,表有无变化。如有变化, 则返回第②步处理,否则,算法结束,则 ρ相对于F是有损分解。 如果发生循环,那么前次扫描至少应使该 表减少一个符号,表中符号有限,因此循 环必然会终止。
算法2 判别一个分解的无损连接性
例1,设关系模式R(ABCDE), F={AB→C,C→D,D→E}, R分解成
3.9.2 无损分解(续)
4. 将SL分解为下面二个关系模式: ND(Sno, Sdept) , DL(Sdept, Sloc) 该分解保持了函数依赖(且具有无损连接性)。
3.9.3 保持函数依赖的模式分解
定义:设关系模式R<U,F>被分解为若干个关系模式 R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn> 其中 U=U1∪U2∪…∪Un,且不存在Ui Uj,Fi为F在Ui上 的投影),若F所逻辑蕴含的函数依赖一定也由分 解得到的某个关系模式中的函数依赖Fi所逻辑蕴含, 则称关系模式R的这个分解是保持函数依赖的 (Preserve dependency)。
3.9.3 保持函数依赖的模式分解(续)
• 如果一个分解具有无损连接性,则它能够保证不 丢失信息。
• 如果一个分解保持了函数依赖,则它可以减轻或 解决各种异常情况。
• 分解具有无损连接性和分解保持函数依赖是两个 互相独立的标准。具有无损连接性的分解不一定 能够保持函数依赖;同样,保持函数依赖的分解 也不一定具有无损连接性。
算法2 判别一个分解的无损连接性
设ρ={R1<U1,F1>,R2<U2,F2>,…,Rk<Uk,Fk>}
是R<U,F>的一个分解,U={A1,…, An} ①构造一张k行n列的表格。每列对应一个属性Aj,
每行对应一个模式Ri。如果Aj属于Ui,那么在表格 的第i行第j列处填上符号aj,否则填上bij。
3.9.4 模式分解算法
例,设R(A,B,C,D,E),Fmin={ A→B,C→D}。 则, ρ={R1(A,B),R2(C,D),R3(E)}
是保持函数依赖的分解。
3.9.4 模式分解算法
算法4 转换为3NF既有无损连接性又保持函数依赖 的分解 。 (1)对关系模式R中的函数依赖集F进行“极小化” 处理,然后把最小依赖集中那些左部相同的FD用 合并性合并起来,处理后的函数依赖集仍记为F;
算法终止。 (3)设ρ中Ri<Ui,Fi>不属于BCNF,那么必有X→AFi+
( A X),且X非Ri的超码。对Ri进行分解: σ={S1,S2},US1=XA,US2=Ui-{A},以σ代替 Ri<Ui,Fi>返回第(2)步。 由于U中属性有限,因而有限次循环后算法5一定 会终止。
算法5 转换为BCNF的无损连接分解。
3.9 模式的分解
3.9.1 关系模式分解的标准 • 把低一级的关系模式分解为若干个高一级的关系模
式的方法并不是唯一的
• 只有能够保证分解后的关系模式与原关系模式等价, 分解方法才有意义 “等价”概念的三种定义:
(1)分解具有无损连接性。 (2)分解要保持函数依赖性。 (3)分解既要保持函数依赖,又要具有无损连接性。
R6(HJ)}
3.9.4 模式分解算法
课后习题: 已知,关系模式R(A,B,C,D,E),R的最小依 赖集Fmin={A→B,C→D}。 试将R分解为3NF,并具有无损连接性和保持 函数依赖性。
3.9.4 模式分解算法
算法5 转换为BCNF的无损连接分解。 (1)关系模式R的分解ρ,初始时ρ={R<U,F>}。 (2)检查ρ中各关系模式是否均属于BCNF。若是,则
算法2 判别一个分解的无损连接性
②逐一检查F中的每个函数依赖,并修改元素,方法是: 1、取F中一函数依赖X→Y(从第一个开始,到最后一个取完结束), 2、找出X所对应的列中具有相同符号的行。 (如X列中有某两个值均 为a3的行,则算是相同的两行,如果是有两个下标的则不是相同符号, 如a31) 3、考察这些行中Y列的元素,若其中有aj,则全部改为aj,否则全部改 bmj,其中m是这些行的行号最小值。 4、若在某次更改后,有一行是a1a2…an,那么ρ相对于F是无损分解, 算法结束。 对F中的每个函数依赖进行一次上述的处置,称对F的一次扫描。
这是一个自项向下的算法。它自然地形成一棵对 R<U,F>的二又分解树。R<U,F>的分解树不一定是
唯一的。这与步骤(3)中具体选定的X→A有关。
算法5 转换为BCNF的无损连接分解。
例, 设关系模式W(CTHRSG)的属性分别表示课程 名、任课教师名、上课时间、上课教室、选修的 学生学号、成绩等含义。W上的函数依赖集F: {C → T,HR → C,TH→R,CS → G,HS → R}
3.9.3 保持函数依赖的模式分解 (续)
对于关系模式S-L:
• 第1种分解方法既不具有无损连接性,也未保持函 数依赖。
• 第2种分解方法未保持函数依赖,也不具有无损连 接性。
• 第3种分解方法具有无损连接性,但未保持函数依 赖。
• 第4种分解方法既具有无损连接性,又保持了函数 依赖。
3.9.4 模式分解算法
显然,模式W上只有一个键,是HS。
解:要把W分解成BCNF模式集,可以首先考虑CS
→ G,据算法,应把CTHRSG分解成CSG和CTHRS。
为进一步分解,计算出πCSG (F)={CS → G }, πCTHRS (F) ={C → T,HR →C,TH → R,HS → R}。模式CTHRS的键是HS。
算法3(合成法)转换为3NF的保持函数依赖的分解。 (1)对关系模式R中的函数依赖集F进行“极小化”
处理,处理后的函数依赖集仍记为F; (2)若有X→AF,且XA=U,则ρ={R},算法终止; (3)找出不在F中出现的属性,将它们构成一个关系
模式,并把这些属性从R中去掉,把剩余的属性仍 记为U。
算法3 转换为3NF的保持函数依赖的分解
解:HJ是L类属性,所以候选键至少包含HJ,另 外,(HJ)+ ={FGHIJ},所以HJ是唯一的候选键。 (1)求出最小依赖集
Fmin=F={F→I,J→I,I→G,GH→I,IH→F}
3.9.4 模式分解算法
(2) 将关系分解为: ρ={ R1(FI),R2(JI),R3(IG),R4(GHI),R5(IHF)} (3) ρ并上候选键: ρ={R1(FI),R2(JI),R3(IG),R4(GHI),R5(IHF),
算法5 转换为BCNF的无损连接分解。
显然CSG已是BCNF,而CTHRS必须进一步分 解。如考虑C→T,则把CTHRS分解成CT和 CHRS, πCT (F) ={C →T}, πCHRS (F) ={CH → R,HS → R,HR → C}。HS是 CHRS的键。 CHRS再分解一次,利用CH→R分解成CHR和 CHS,2模式均满足BCNF。 分解结束。
最后结果: A
B
C
R1 a1
a2
a3
R2 b21 b22 a3
R3 b31 b32 b33
a4 a5
D
E
a4 1 a5 2
a4
a5 2
a4 a5
ρ相对于F是无损分解
算法2 判别一个分解的无损连接性
例2,R(A,B,C), F={ AB,CB}
–分解ρ1={R1(A,B),R2(A,C)} –分解ρ2={R1(A,B),R1(B,C)} 分析两种分解的无损连接性?
2. SL分解为下面二个关系模式: NL(Sno, Sloc), DL(Sdept, Sloc)
3. 将SL分解为下面二个关系模式: ND(Sno, Sdept) ,NL(Sno, Sloc)
3.9.2 无损分解(续)
第3种分解方法具有无损连接性。 问题: (1)没有保持原关系中的函数依赖,即 S-L中的函数依赖Sdept→Sloc没有投影到关系模 式ND、NL上。 (2)存在冗余和操作异常。
• 具有无损连接性的分解保证不丢失信息。 • 无损连接性不一定能解决插入异常、删除异常、修改复杂、
数据冗余等问题。
3.9.2 无损分解(续)
例:S-L(Sno, Sdept, Sloc) F={ Sno→Sdept,Sdept→Sloc,Sno→Sloc} S-L∈2NF,分解方法可以有多种: