多值依赖违规?

时间:2011-11-01 08:03:44

标签: database database-design database-normalization multivalue

我对mvd违规感到困惑,根本我无法弄清楚任何违反mvd的行为,例如有A B C三列,每行都是一个元组

A B C

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

B->> C和B->> A?

感谢

3 个答案:

答案 0 :(得分:4)

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

你无法知道它是否适用于查看样本数据(也适用于FD)。

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

现在这样的MVD规则是什么状态完全

首先看一下FD陈述完全的内容。 FD指出对于某个[集合]属性[s](FD的左侧),不可能是某个特定的[值]组合[s]与多个[组合]相关联的情况FD右侧属性的不同值[s]。

A-> B确实意味着对于所有属性值对(a1,b1)和(a2,b2),它认为a1 = a2 ===&gt; B1 = B2。

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

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

在您的示例中,b2与集合{c1}“关联”,值b1与集合{c2,c3}“关联”。现在,如果MVD B-> C确实适用,那么除非a4,b1,c3行同时出现,否则a4,b1,c2行不应出现在你的表中。同样,如果你有这两个额外的行,并且你添加了a1,b1,c4,这将把“c4”添加到“多个确定”值b1的值集合中,因此,除非你违反了你的MVD还要添加a4,b1,c4。

答案 1 :(得分:1)

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

A B C

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

如果B - &gt;&gt; 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->&gt;&gt; A和B-&gt;&gt; C.也可能A-> B和A-> C,或C-> A和C-> B.

答案 2 :(得分:0)

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