【发布时间】: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
我对违反 mvd 感到困惑,只是我无法弄清楚任何会违反 mvd 的内容,例如 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
如果您要将 a1 的值更改为 b1 的 一个 行上的其他值,则会违反 MVD。
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,那么您的表格应如下所示:
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。
【讨论】:
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。
【讨论】:
这是关于违反 mvd 还是违反 4NF?你检查http://en.wikipedia.org/wiki/Multivalued_dependency了吗?
【讨论】: