【问题标题】:BCNF Decomposition algorithm not workingBCNF分解算法不起作用
【发布时间】:2017-08-05 06:28:57
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: decomposition bcnf


    【解决方案1】:

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

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

    由于(唯一的)候选键是B G,没有函数依赖满足BNCF。然后,从任何违反BCNF的函数依赖X → Y开始,我们计算XX+的闭包,并将原始关系R<T,F>替换为两个关系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} >
    

    和:

    R2 < (A B G) ,
         { G → A } >
    

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

    在这种情况下,例如,在R1 中,键是A B,所以C -&gt; E 违反了BCNF,我们将R1 替换为:

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

    和:

    R4 < (A B C D) ,
         { A B → C
           A B → D } >
    

    满足 BCNF 的两个关系。

    最后,由于R2也不满足BCNF(因为key是B G),我们将R2分解为:

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

    和:

    R6 < (B G) ,
          { } >
    

    在 BCNF 中。

    所以最终的分解由以下关系构成:R3R4R5R6。我们还可以注意到,在分解中,原始关系上的依赖G → F丢失了

    【讨论】:

    • 感谢您的回复和解释。我仍然有一个困惑。当您分解为 R1 和 R2 时,FD : G->F 似乎已经消失了。这是我开始感到困惑的地方。在分解的同时丢弃一些 FD 可以吗?我对此的理解非常不清楚。我将不胜感激。
    • @Rana,正如我在答案的最后一句话中所说:“我们还可以注意到原始关系上的依赖 G → F 在分解中丢失了。”事实上,在通过 BCNF 算法获得的分解中,可能会丢失一些依赖性。这是一个负面的事实,因为我们丢失了有关原始模式的重要信息(完整性约束,因为函数依赖可以被视为完整性约束)。
    • 因此可以使用 3NF(第三范式)代替 BCNF,因为它的分解算法保证不会丢失任何依赖项(但有时结果仍然存在一些异常,例如冗余)。事实上,这是归一化理论中众所周知的事实,因此在实践中使用的是 3NF,而不是 BCNF。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多