模式分解补充材料(打印)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
补充阅读材料(例题) 属性闭包的计算
例1设关系模式R 的属性集U={A,B,C,D,E,G},F={AB →C,BC →AD,D →E,CG →B}是R 上的函数
依赖集.求{A,B}关于F 的闭包,即{A,B}F +
。 解: 从X={A,B} 出发,X(0)=AB 。
(1) 左部为X(0)子集的函数依赖只有AB →C ,X(1)=AB ∪C =ABC
(2) 左部为X(1)子集而未检查的函数依赖只有BC →AD ,X(2)=ABC ∪AD =ABCD (3) 左部为X(2)子集而未检查的函数依赖只有D →E ,X(3)=ABCD ∪E =ABCDE
已经不存在左部为X(3)的子集而未检查的函数依赖。因此,{A,B}F +
={A,B,C,D,E}
注意到函数依赖CG →B 没有用上,因为它的左边没有包含在{A,B}F +
中。 函数依赖集的最小化
例2 设F={A →BC,B →AC,C →A},对F 进行极小化处理
解:(1) 根据分解规则,把F 中的函数依赖转化成右部都是单属性的函数依赖集合,分解后的函数依赖集仍用F 表示F={A →B, A →C,B →A, B →C,C →A} (2) 去掉F 中的冗余函数依赖 判断A →B 是否冗余。
设G1={A →C,B →A, B →C,C →A},得 A G1+
=AC
因+
∉1G A B ,所以A →B 不冗余。
判断A →C 是否冗余。
设G2={A →B,B →A, B →C,C →A},得 A G2+
=ABC
因+
∈2G A C ,所以A →C 冗余(以后得检查不再考虑A →C )
。 判断B →A 是否冗余。
设G3={A →B, B →C,C →A},得 B G3+
=ABC
因+
∈3G B A ,所以B →A 冗余(以后得检查不再考虑B →A )
。 判断B →C 是否冗余。
设G4={A →B, C →A},得 B G4+
=B
因+
∉4G B C ,所以B →C 不冗余。
判断C →A 是否冗余。
设G5={A →B, B →C},得 C G5+
=C
因+
∉5G C A ,所以C →A 不冗余。
由于该例中的函数依赖表达式的左部均为单属性,因而不需要进行第三步的检查。上述结果为最小函数依赖集,用F m 表示:F m ={A →B, B →C,C →A}
若依次按A →B ,B →C 的顺序判定函数依赖是否冗余,则得到最小依赖集:F m2={A →B, B →A, A →C,C →A}。这说明最小依赖集不唯一,与对各函数依赖FDi 及X →A 中X 各属性的处置顺序有关。同时注意到,在此例中A 、B 、C 是一一对应的。 例3 求F={AB →C,A →B,B →A}的最小函数依赖集F m
解:(1) 将F 中函数依赖都分解为右部为单属性的函数依赖。显然,F 已满足该条件。 (2) 去掉F 中冗余的函数依赖。 判断AB →C 是否冗余。
设},{1A B B A G →→=,得AB AB G =+1
)(
∵ +∉1
)(G AB C , ∴ AB →C 不冗余。
判断A →B 是否冗余。
设},{2A B C AB G →→=,得A A G =+2
)(
∵ +∉2
)(G A B , ∴ A →B 不冗余。
判断B →A 是否冗余。
设},{3B A C AB G →→=,得B B G =+3
)(
∵ +∉3
)(G B A , ∴ B →A 不冗余。
经检验后得函数依赖集仍然为F 。
(3) 去掉各函数依赖左部冗余得属性。 本题只需考虑AB →C 的情况。
方法一:在决定因素中去掉B ,若+∈F A C ,则以A →C 代替AB →C 。 求得:ABC A F =+。 ∵ +∈F A C ∴ 以A →C 代替AB →C 。 故,F m ={A →C, A →B,B →A}
方法二:也可在决定因素中去掉A ,若+∈F B C ,则以B →C 代替AB →C 。 求得:ABC B F =+。 ∵ +∈F B C ∴ 以B →C 代替AB →C 。
故,F m ={B →C, A →B,B →A}
例4 F={BE →G,BD →G,CDE →AB,CD →A,CE →G,BC →A,B →D,C →D},求Fmin. 解: (1) 先分解右边
F={BE →G,BD →G,CDE →A, CDE →B,CD →A,CE →G,BC →A,B →D,C →D} (2) 判断每个函数依赖,是否冗余。
F={ BD →G, CDE →B,CD →A,CE →G, B →D,C →D} (3) BDG B F =+, 包含G ,用B →G 代替BD →G
D D F =+
,未包含G ,不能用D →G 代替BD →G CEBDGA CE F =+)(,包含B ,用CE →B 代替CDE →B CDA C F =+)(,包含A ,用C →A 代替CD →A
Fmin ={B →G,CE →B,C →A,CE →G,B →D,C →D } 候选码的确定
确定关系模式的候选码是进行规范化分析的出发点,有下述准则可以使用: 关系R(U,F)中,F 是最小函数依赖集。
准则1:如果属性A 只在F 中各函数依赖的左端出现,则A 必是码中的属性; 准则2:如果属性A 只在F 中各函数依赖的右端出现,则A 必不是码中的属性; 确定候选码的步骤是:
(1) 对于关系模式R(U,F),求F 的最小函数依赖集,仍用F 表示。 (2) 根据准则1,确定码中必须有的属性集(设为M)。 (3) 根据准则2,去掉码中没有的属性集。 (4) 确定余下的属性集(设为W)。
(5) 从M 开始,令K =M ,如果U K F =+
,K 就是候选码。否则从W 选择属性加入到K 中,
直到U K F =+
,K 就是候选码。
(6) 注意可能有多个候选码。
例5 设R(U,F),U=ABCDEG,F={BE →G,BD →G,CDE →AB,CD →A,CE →G,BC →A,B →D,C →D},求R 的码。
解:(1) 求得 Fmin ={B →G,CE →B,C →A,CE →G,B →D,C →D } (2) 只在左端出现的属性CE (M=CE)。 (3) 只在右端出现的属性ADG 。 (4) 余下的属性B (W=B)。 R 的候选码只可能是CE 、CEB 。
经计算ABCDEG CE F =+)(,因此R 的码是CE 。
模式分解
对模式分解的两个基本要求
(1) 避免信息丢失:无损连接性; (2) 避免数据关系丢失。
分解具有无损连接性和分解保持函数依赖是两个相互独立的标准。
无损分解决定一个关系是否可分解,保持数据依赖决定一个关系分解的好坏。 算法6.2 判别一个分解的无损连接性
若},,,,{111><><=k k k F U R F U R ρ是R的一个分解,},,,{21n A A A U =,
},,,{21m FD FD FD F =,不妨设F 是一极小依赖集,记i FD 为i A X i 1→。
(1) 建立一张n 列k 行的表。每一列队应一个属性,每一行对应分解中的一个关系模式。若
属性j A 属于i U ,则在j 列i 行交叉处填上j a ,否则填上ij b ;
(2) 对每一个i FD 做下列操作:找到i X 所对应的列中具有相同符号的那些行。考察这些行
中i l 列的元素,若其中有i l a ,则全部改为i l a ,否则全改为i ml b ,m 是这些行的行号最小值。
如在某次更改后,有一行成为n a a a ,,,21 。则算法终止。ρ具有无损连接性,否则ρ不具有无损连接性。
对F 中m 个FD 逐一进行一次这样的处置,称为对F 的一次扫描。