BCNF分解算法不起作用

时间:2017-03-14 18:46:36

标签: decomposition bcnf

我有以下问题:R(ABCDEFG)和F = {AB-> CD,C-> EF,G-> A,G-> F,CE-> F}。显然,B& G应该是键的一部分,因为它们不是依赖集的一部分。此外,BG + = ABCDEFG,因此是候选密钥。显然,AB-> CD违反BCNF。但是当我遵循算法时,我不会在任何答案中结束。可能做错了什么。任何人都可以告诉我如何正确应用算法来达到分解?

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,您应该计算依赖项的规范封面。在这种情况下,它是:

{ A B → C
  A B → D
  C → E
  C → F
  G → A
  G → F } >

由于(唯一)候选键是B G,因此没有功能依赖性满足BNCF。然后,从违反BCNF的任何函数依赖项X → Y开始,我们计算XX+的闭包,并用两个关系{{1}替换原始关系R<T,F>。 1}}和R1<X+>。因此,在这种情况下选择依赖项R2<T - X+ + X>,我们将原始关系替换为:

A B → C

R1 < (A B C D E F) ,
     { A B → C
       A B → D
       C → E
       C → F} >

然后我们检查每个分解的关系,看它是否满足BCNF,否则我们递归地应用算法。

在这种情况下,例如,在R2 < (A B G) , { G → A } > 中,密钥为R1,因此A B违反了BCNF,我们将C -> E替换为:

R1

R3 < (C E F) ,
     { C → E
       C → F } >

两个满足BCNF的关系。

最后,由于R4 < (A B C D) , { A B → C A B → D } > 也不满足BCNF(因为密钥为R2),我们将B G分解为:{/ p>

R2

R5 < (A G) ,
     { G → A } >

在BCNF。

因此最终分解由关系构成:R6 < (B G) , { } > R3R4R5。我们还可以注意到,在分解中,原始关系上的依赖关系R6将丢失

相关问题