模式分解补充材料(打印)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 的一次扫描。