【问题标题】:Unable to decompose this relation to BCNF无法分解此与 BCNF 的关系
【发布时间】:2013-03-08 13:12:59
【问题描述】:

我有关系

R = { A, B, C, D, E, F, G, H, I }

以及函数依赖

F ={
ABC -> DE
E -> C
AB -> F
C -> G
F -> H
H -> IJ
F -> B
}

我可以进行简单的 BCNF 分解,但我不能分解它。我有 ABC 作为唯一的候选键。然后我把它分成两个关系来摆脱第一个破坏 BCNF 的 FD,E -> C,给我关系

{ A, B, D, E, F, G, H, I, J } and { E, C }

但是现在我马上就丢失了第一个关系的候选键。那么这是否意味着我现在必须为第一个关系找到一个新的候选键,然后继续分解它的过程,直到我们没有违反 BCNF 的关系?有人可以告诉我如何进行这种分解吗?

编辑:

好的,这就是我接下来要做的事情:

我目前有{ A, B, D, E, F, G, H, I, J }{ E, C }

我为更大的关系找到了一把新钥匙。这个新密钥是ABDEG?

然后我通过在违反 BCNF 的地方拆分关系来继续分解。以下是我采取的步骤:

{ A, B, D, E, F, G, H, I, J } // { E, C }

{ A, B, D, E, G, H, I, J } // { AB, F } // { E, C }

{ A, B, D, E, G, H, J } // { H, I } // { AB, F } // { E, C }

{ A, B, D, E, G, H } // { H, J } // { H, I } // { AB, F } // { E, C }

所以最后一行是我的最终结果。那似乎是在BCNF?我的答案是否正确,我的分解是否正确?

【问题讨论】:

  • 如果 ABC 是候选键,那么从 E->C 可以得出 ABE 也必须是候选键。
  • 干杯,没有发现。考虑到这一点,我再次检查了我的结果,但我仍然得到了相同的答案。
  • 有四个候选键:ABC、ABE、ACF 和 AEF。

标签: database-design relational-database normalization


【解决方案1】:

我没有检查你的结果,但如果目的是“分解成 BCNF”,那么你的结果可能确实是正确的。

这并不意味着您的分解也是最适合选择的。

设计在 BCNF 中并不意味着它本身就是最好的。

实现最适当分解的最佳机会是从“交织”最少的 FD 开始。例如。 H->IJ 是一个很好的候选者,因为其他任何地方都没有提到 I 和 J。

因此,您会得到 {ABCDEFGH} 和 {HIJ},它们各自的 FD 从原始集合“继承”。

现在另一个不错的候选是 C->G。所以你得到 {ABCDEFH} {CG} 和 {HIJ}。

现在另一个好方法是 F->H。所以你得到 {ABCDEF} {FH} {CG} 和 {HIJ}。

不,你只剩下讨厌的 FD ABC->DE E->C AB->F F->B。现在您必须选择其中之一,并接受其他 FD 变得无法表达的后果。

但这并不意味着您的解决方案错误(就获得 BCNF 结果而言)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多