F={AB→C,BC→D,ACD→B,D→EG,BE→C,CG→BD},计算与其等价的最小依赖集。
时间: 2023-11-18 10:19:34 浏览: 183
我们可以使用以下步骤来计算与F等价的最小依赖集:
1. 计算F的闭包,得到所有可以推导出来的依赖关系。具体步骤如下:
- AB+ = AB
- BC+ = BCD
- ACD+ = ABCD
- D+ = DEG
- BE+ = BCE
- CG+ = ABCDG
2. 对于F中的每个依赖关系X→Y,检查X的闭包是否包含Y。如果是,则可以从F中删除此依赖关系。具体步骤如下:
- AB→C:AB+ = AB,C∉AB+,保留依赖关系。
- BC→D:BC+ = BCD,D∈BC+,删除依赖关系。
- ACD→B:ACD+ = ABCD,B∈ACD+,删除依赖关系。
- D→EG:D+ = DEG,E∈D+,G∈D+,删除依赖关系。
- BE→C:BE+ = BCE,C∈BE+,删除依赖关系。
- CG→BD:CG+ = ABCDG,B∈CG+,D∈CG+,保留依赖关系。
3. 对于剩余的依赖关系,检查是否可以使用前缀闭包来替代。如果可以,则可以从F中删除此依赖关系。具体步骤如下:
- AB→C:没有可以使用前缀闭包替代的依赖关系。
- CG→BD:没有可以使用前缀闭包替代的依赖关系。
因此,与F等价的最小依赖集为:
{AB→C,CG→BD}
相关问题
设U={A,B,C,D,E,,G},F={ AB→C,C→A,BC→D,ACD→B,D→EG,BE→C,CG→BD,CE→AG } 求(BD)F+。
首先,(BD)+ 表示经过多次推导,可以得到 BD 的所有函数依赖集合。因此,我们需要先求出 F 的闭包。
对于 F 中的每个函数依赖:
- AB→C:由于 C 已经在右侧,则闭包为 AB→C。
- C→A:由于 A 已经在左侧,则闭包为空。
- BC→D:由于 D 已经在右侧,则闭包为 BC→D。
- ACD→B:由于 B 已经在右侧,则闭包为 ACD→B。
- D→EG:由于 E 和 G 都不在右侧,则闭包为空。
- BE→C:由于 C 已经在右侧,则闭包为 BE→C。
- CG→BD:由于 B 和 D 都已经在右侧,则闭包为 CG→BD。
- CE→AG:由于 A 和 G 都不在右侧,则闭包为空。
因此,F 的闭包为:AB→C,BC→D,ACD→B,BE→C,CG→BD。
接下来,我们需要找到所有能推导出 BD 的函数依赖:
- AB→C,BC→D,则可以推导出 ABD→CD。
- ACD→B,BE→C,则可以推导出 ABDE→BCD。
- CG→BD,则可以推导出 ABDG→BCDG。
因此,(BD)+ 的函数依赖集合为:ABD→CD,ABDE→BCD,ABDG→BCDG。
最后,我们需要化简函数依赖集合,去掉冗余的依赖:
- ABD→CD 和 ABDE→BCD 中都包含了 ABD→BCD,因此可以去掉前两个依赖。
- ABDG→BCDG 中包含了 BD→G,因此可以去掉后者。
因此,(BD)+ 的函数依赖集合为:ABD→BCDG。
习题1:设U={A,B,C,D,E,G},F={AB→C,C→A,BC→D, ACD→B,D→EG,BE→C,CG→BD,CE→AG}求(BD)F+
首先,计算出所有满足右部为BD的函数依赖:
- BC → D,因此 BD 可以由 B 和 C 推出。
- CG → BD,因此 BD 可以由 C 和 G 推出。
因此,(BD)F+ 的值可以由以下函数依赖推出:
- B+ → BD
- C+ → BD
- G+ → BD
其中,B+ 表示能够由 B 推出的所有属性集合。同理,C+ 和 G+ 分别表示能够由 C 和 G 推出的所有属性集合。
现在我们来计算 B+:
- 由 AB → C 可以推出 A+ → C,因此 A 可以被忽略。
- 由 ACD → B 可以推出 CD+ → B,因此 C 可以被忽略,而 D 可以被包含进 B+。
- 由 D → EG 可以推出 E+ → G,因此 E 可以被忽略。
综上,B+={D}。同理,可以计算出 C+={B,D} 和 G+={B,D}。
因此,(BD)F+ = B+ ∩ C+ ∩ G+ = {B,D}。
阅读全文