【问题标题】:Multivalue Dependency violation?多值依赖违反?
【发布时间】:2011-12-19 07:32:31
【问题描述】:

我对违反 mvd 感到困惑,只是我无法弄清楚任何会违反 mvd 的内容,例如 A B C 三列,每一行都是一个元组

A B C

a2 b2 c1
a1 b1 c2
a1 b1 c3
a2 b3 c1

B->>C 和 B->>A 有吗?

谢谢

【问题讨论】:

    标签: database database-design database-normalization multivalue


    【解决方案1】:

    如果您要将 a1 的值更改为 b1 的 一个 行上的其他值,则会违反 MVD。

    A B C

    a2 b2 c1
    a1 b1 c2
    a3 b1 c3
    a2 b3 c1

    如果 B ->> A 和 B->>C,那么对于给定的 B 值,行应该由不同值的 叉积 形成A 和 C。换句话说,将表示 A 和 C 的不同值的每个排列。

    如果您需要 b1 来确定 a1/a3 和 c2/c3,那么您的表格应如下所示:

    A B C

    a2 b2 c1
    a1 b1 c2
    a1 b1 c3
    a3 b1 c2
    a3 b1 c3
    a2 b3 c1

    但我认为您的示例中没有足够的信息来说明 B->>A 和 B->>C。也可能是 A->>B 和 A->>C,或者 C->>A 和 C->>B。

    【讨论】:

    • 嗨,谢谢回复,但是为什么改成a3会违反,我对这部分有点困惑
    【解决方案2】:

    MVD 就像 FD 一样,是一个规则。它是否适用于您的业务案例,您需要检查要求和/或规格才能知道。

    您无法通过查看样本数据来知道它是否适用(这也适用于 FD)。

    查看示例数据只能告诉您,“如果规则适用,则此数据将有效/无效”,或“如果此数据必须有效,则某些特定的 MVD 规则肯定不适用”。

    现在这样的 MVD 规则说明了什么究竟?

    首先看一下 FD 所陈述的内容究竟是什么。 FD 指出,对于某个 [set of] attribute[s](FD 的左侧),某些特定 [combination of] value[s] 不可能与多个 [combination of] 相关联FD 右侧属性的不同值。

    A->B 确实意味着对于所有属性值对 (a1,b1) 和 (a2,b2),它持有 a1=a2 ===> b1=b2。

    MVD 是 FD 的概括,因为它没有声明 单个 B 值必须与 A 值相关联/由 A 值确定,而是声明 SETS of B 值必须与 A 值相关联/由 A 值确定。

    (警告:从 A/B 切换到 B/C !)

    在您的示例中,b2 与集合 {c1}“关联”,值 b1 与集合 {c2,c3}“关联”。现在,如果 MVD B->>C 确实适用,那么行 a4,b1,c2 应该不可能出现在您的表中,除非行 a4,b1,c3 也同时出现。同样,如果您有这两个额外的行,并添加 a1、b1、c4,这会将 c4“添加”到由值 b1“多决定”的值集,因此,除非您同时添加 a4,b1,c4。

    【讨论】:

      【解决方案3】:

      这是关于违反 mvd 还是违反 4NF?你检查http://en.wikipedia.org/wiki/Multivalued_dependency了吗?

      【讨论】:

        猜你喜欢
        • 2012-03-16
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 2015-01-16
        • 2015-02-10
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        相关资源
        最近更新 更多