当前位置:
文档之家› 数据库,模式的分解,无损连接性,教案
数据库,模式的分解,无损连接性,教案
(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), R6(HJ)}
每一组函数依赖Fi所涉及的全部属性形成一个属性 集Ui。若Ui lt;U1,F1>,R2<U2,F2>,…,Rk<Uk,Fk>} 构
成R<U,F>的一个保持函数依赖的分解,并且每个
Ri(Ui,Fi)均属于3NF且保持函数依赖。
3.9.4
模式分解算法
例,设R(A,B,C,D,E),Fmin={ A→B,C→D}。 则, ρ={R1(A,B),R2(C,D),R3(E)} 是保持函数依赖的分解。
算法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
模式分解算法
算法4 转换为3NF既有无损连接性又保持函数依赖 的分解 。 (1)对关系模式R中的函数依赖集F进行“极小化” 处理,然后把最小依赖集中那些左部相同的FD用 合并性合并起来,处理后的函数依赖集仍记为F;
(2)对F中的每个一函数依赖X→Y,构成一个关系 模式Ri(X,Y),Ri为3NF,ρ={R1,R2,…,Rn}
3.9
分解的定义:
(关系)模式的分解
关系模式R<U,F>的一个分解是指ρ ={R1<U1,
F1>,R2<U2,F2>,…,Rn<Un,Fn>} 其中U=U1∪U2∪…∪Un ,并且不存在Ui Uj,1≤i,j≤n,Fi是F在Ui上的投影。 函数依赖集合{X→Y| X→Y∈ F+∧XYUi}的 一个覆盖(等价)Fi叫做F在属性Ui上的投影。
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)。 • 具有无损连接性的分解保证不丢失信息。 • 无损连接性不一定能解决插入异常、删除异常、修改复杂、 数据冗余等问题。
A AB AC a1 B a2 C
a1
A
a2
B
a3
C a3
AB BC
a1
a2
a2
算法2 判别一个分解的无损连接性
例3,设关系模式R(ABCD),R分解成 ρ={R1(AB), R2(BC),R3(CD)}。 如果R上成立的函数依赖集 F={A→B,C→D}, 那么ρ相对于F是否无损分解?
算法2 判别一个分解的无损连接性 F={A→B,C→D}
b21 b31
b22 b32
a3 b33
a4 a4
ρ相对于F是无损分解
算法2
判别一个分解的无损连接性
例2,R(A,B,C), F={ AB,CB} –分解ρ1={R1(A,B),R2(A,C)} –分解ρ2={R1(A,B),R1(B,C)} 分析两种分解的无损连接性? –分解1只具有无损连接性, 分解2不具有无损连 接性。
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.4
模式分解算法
• 算法1 判别一个二元分解的无损连接性。 若F+中至少存在如下函数依赖中的一个: (1)(U1∩U2)→U1-U2 (2)(U1∩U2)→U2-U1 则ρ={ R1<U1>,R2<U2>}是R的无损分解。反之也 成立。 如:模式S-L(Sno, Sdept, Sloc) 分解为2个模式: ND(Sno, Sdept) ,NL(Sno, Sloc) 则是无损分解。
3.9.3
保持函数依赖的模式分解(续)
• 如果一个分解具有无损连接性,则它能够保证不 丢失信息。 • 如果一个分解保持了函数依赖,则它可以减轻或 解决各种异常情况。 • 分解具有无损连接性和分解保持函数依赖是两个 互相独立的标准。具有无损连接性的分解不一定 能够保持函数依赖;同样,保持函数依赖的分解 也不一定具有无损连接性。
3.9.2
无损分解(续)
例:S-L(Sno, Sdept, Sloc) F={ Sno→Sdept,Sdept→Sloc,Sno→Sloc} S-L∈2NF,分解方法可以有多种: 1. S-L分解为三个关系模式: SN(Sno) ,SD(Sdept),SL(Sloc) 2. SL分解为下面二个关系模式: NL(Sno, Sloc), DL(Sdept, Sloc) 3. 将SL分解为下面二个关系模式: ND(Sno, Sdept) ,NL(Sno, Sloc)
(1)对关系模式R中的函数依赖集F进行“极小化” 处理,处理后的函数依赖集仍记为F;
(2)若有X→AF,且XA=U,则ρ={R},算法终止;
(3)找出不在F中出现的属性,将它们构成一个关系 模式,并把这些属性从R中去掉,把剩余的属性仍 记为U。
算法3 转换为3NF的保持函数依赖的分解
(4)对F按具有相同左部的原则分组(假定分为k组),
3.9.2
无损分解(续)
第3种分解方法具有无损连接性。 问题: (1)没有保持原关系中的函数依赖,即 S-L中的函数依赖Sdept→Sloc没有投影到关系模 式ND、NL上。 (2)存在冗余和操作异常。
3.9.2
无损分解(续)
4. 将SL分解为下面二个关系模式: ND(Sno, Sdept) , DL(Sdept, Sloc) 该分解保持了函数依赖(且具有无损连接性)。
算法5 转换为BCNF的无损连接分解。
这是一个自项向下的算法。它自然地形成一棵对
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} 显然,模式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.9
模式的分解
3.9.1 关系模式分解的标准 • 把低一级的关系模式分解为若干个高一级的关系模 式的方法并不是唯一的
• 只有能够保证分解后的关系模式与原关系模式等价, 分解方法才有意义
“等价”概念的三种定义: (1)分解具有无损连接性。 (2)分解要保持函数依赖性。 (3)分解既要保持函数依赖,又要具有无损连接性。
例1,设关系模式R(ABCDE), F={AB→C,C→D,D→E}, R分解成 ρ={R1(ABC), R2(CD),R3(DE)}。 那么ρ相对于F是否无损分解?
算法2 判别一个分解的无损连接性 R1(ABC), R2(CD),R3(DE)
F={AB→C,C→D,D→E}
初始表: R1 R2 R3 最后结果: R1 R2 R3 A a1 b21 b31 A a1 B a2 b22 b32 B a2 C a3 a3 b33 C a3 D b14 a4 a4 D a4 1 E b15 b25 a5 E a5 2 2 a5 a5
3.9.3
保持函数依赖的模式分解(续)
例如,将S-L(Sno, Sdept, Sloc) F={ Sno→Sdept,Sdept→Sloc,Sno→Sloc} 分解为下面二个关系模式(第四种分解): ND(Sno, Sdept) , DL(Sdept, Sloc) 该分解保持了函数依赖(具有无损连接性)。
模式分解算法
• 算法1 判别一个二元分解的无损连接性 • 算法2 判别一个分解的无损连接性 • 算法3(合成法)转换为3NF的保持函数依赖的分 解。 • 算法4 转换为3NF既有无损连接性又保持函数依 赖的分解 。 • 算法5 (分解法)转换为BCNF的无损连接分解 • 算法6 达到4NF的具有无损连接性的分解。
算法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。 分解结束。