【问题标题】:Boyce codd normal form, trying to understand how to decomposeBoyce codd 范式,试图了解如何分解
【发布时间】:2019-12-04 12:17:21
【问题描述】:

我正在努力学习 BCNF。

假设

R=(A,B,C,D)

F={C→D,C→A,B→C}

我猜 R 不在 BCNF 中,因为 C 是 C→A,C→AB→C。我应该如何改进我的答案,我应该如何分解它以使其成为 BCNF?

【问题讨论】:

    标签: schema database-normalization relation bcnf


    【解决方案1】:

    短语“R 不在 BCNF 中”是无效的,因为只有功能依赖 (FD) 可能违反 BCNF。

    在你的情况下要分解,首先找到候选键(FD闭包后可以获得所有属性的最小键)

    Key = B,因为 B+ = {A,B,C,D}

    BCNF 法则:left side of all FDs need to be superkeys

    让我们从第一个 FD 开始,C -> D

    C -> D violates BCNF 因为C is not a superkey of B

    分解公式:Assume X -> Y, R1 = X+, R2 = R - (X+ - X)

    在我们的例子中,使用基本数学,R1 = (C,D), R2 = (A,B,C)

    现在 C -> D 满足 BCNF

    第二个 FD:C -> A violates BCNF 因为C is not a superkey of B

    使用上述相同的公式分解 R2,因为 R2 包含这些属性:

    R21 = (A,C), R22 = (B,C)

    现在 C -> A 满足 BCNF

    让我们检查最后一个 FD,B -> C satisfies BCNF 因为B is superkey of B

    所以分解后,R = (A,B,C,D) 分解为

    R1 = (C,D)

    R2 = (A, C)

    R3 = (B, C)

    【讨论】:

    • 这是不正确的。你只做需要的片段。要确定 CK,我们需要得到一个掩护,但问题并不是说 F 是。假设 F 是一个封面:你没有证明 B 是唯一的 CK,所以你关于“C -> A 违反”的论点是不正确的。当显示表在 BCNF 中时,所有重要的 FD 都必须将超级键作为行列式。但是您只查看原始封面中的 FD,而不是每个表中的所有重要 FD。您不计算和使用 R2 的 CK(s)。也不清楚你为什么要做很多你正在做的事情。
    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多