求最小函数依赖集
例:求 F={ABDAC,CBE,ADBF,BE}的最小函数依赖集 Fm 注意:当在函数依赖已经改变的地方开始一个新步骤时,重写函数依赖集很重要,这样可以 在下一步中方便引用。 第一步 对 F 中的函数依赖运用分解原则来创建一个等价函数依赖集 H, 该集合中每一个函 数依赖的右部是单个属性: H={①ABDA,②ABDC,③CB,④CE,⑤ADB,⑥ADF,⑦BE} 第二步 考察每一个函数依赖是否是必须的,去除非必要的函数依赖 (1) ABDA 是平凡的函数依赖,所以显然是非必要的函数依赖,因此去除。保留在 H 中的函数依赖是 H={②ABDC,③CB,④CE,⑤ADB,⑥ADF,⑦ BE} (2) 考察 ABDC, 去掉此函数依赖将会得到新的函数依赖集 J= {③CB, ④CE, ⑤ ADB,⑥ ADF,⑦ BE } 。如果 ABDC 是非必要的,则 C∈(ABD)J 。 (ABD)J =ABDFE,不包含 C,因此 ABDC 是必要的函数依赖,不能去掉。 H={②ABDC,③CB,④CE,⑤ADB,⑥ADF,⑦BE} (3) 考察 CB,J={②ABDC,④CE,⑤ADB,⑥ADF,⑦BE} 。(C)J =CE, 不包含 B,因此 CB 是必要的函数依赖,保留在 H 中。 (4) 考察 CE, J= {②ABDC, ③CB, ⑤ADB, ⑥ADF, ⑦BE} 。 (C)J =CBE, 包含 E, 因此是不必要的, 去除后得到的函数依赖集为 H= {②ABDC, ③CB, ⑤ADB,⑥ADF,⑦BE} (5) 同理考察函数依赖⑤、⑥和⑦,最后得到的函数依赖集为 H={②ABDC,③ CB,⑤ADB,⑥ADF,⑦BE} 。为了第三步方便引用,我们进行重新编 号:H={①ABDC,②CB,③ADB,④ ADF,⑤ BE} 。 第三步 考察每一个左部为多个属性的函数依赖, 看左部的每个属性是否是必须的, 能否用 更小的属性集替代原有的属性集。 首先从函数依赖①ABDC 开始。 (1) 去除 A?如果 A 可以去除, 那么可得到新的函数依赖集 J= {①BDC, ②CB, ③ADB,④ ADF,⑤ BE} 。去掉 A 后 BD 在 J 上的闭包将比在 H 下函数决 定更多的属性,如果(BD)J =(BD)H (或者 C∈(BD)H ) ,则说明去掉 A 得到的函 数依赖集和原有的函数依赖集是等价的,可以用 BDC 替换 ABDC。 (BD)H =BDE,不包含 C,所以 A 不能去掉。 (2) 去掉 B?J={①ADC,②CB,③ADB,④ ADF,⑤ BE} 。 (3) 去掉 D?J={①AC,②CB,③ADB,④ ADF,⑤ BE} 。
+ + + + + + + +
因为 H 的函数依赖集在第三步发生了改变,因此我们需要回到第二步。 最后得到的函数依赖集为 H={ADC, CB, ADF, BE}
ห้องสมุดไป่ตู้