我对 mvd 违规感到困惑,只是我无法弄清楚任何会违反 mvd 的内容,例如有 ABC 三列,每一行都是一个元组
美国广播公司
a2 b2 c1
a1 b1 c2
a1 b1 c3
a2 b3 c1
B->>C 和 B->>A?
谢谢
我对 mvd 违规感到困惑,只是我无法弄清楚任何会违反 mvd 的内容,例如有 ABC 三列,每一行都是一个元组
a2 b2 c1
a1 b1 c2
a1 b1 c3
a2 b3 c1
B->>C 和 B->>A?
谢谢
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 值确定,而是声明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。
如果您要将 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 还是违反 4NF?你检查了http://en.wikipedia.org/wiki/Multivalued_dependency吗?