我对mvd冲突感到困惑,只是我找不出任何违反mvd的东西,例如有A、B、C三列,每行是一个元组
A、B、C
a2 b2 c1
a1 b1 c2
a1 b1 c3
a2 b3 c1
B->>C和B->>A吗?
谢谢
发布于 2011-11-04 22:25:51
MVD,就像FD一样,是一条规则。它是否适用于您的业务案例,您需要检查需求和/或规格才能知道。
你不能通过查看样本数据就知道它是否适用(这也适用于FD)。
查看样本数据只能告诉你,“如果规则适用,那么这个数据将是有效/无效的”,或者“如果这个数据必须是有效的,那么某些特定的MVD规则肯定不适用”。
现在,这样的MVD规则到底说明了什么?
首先,我们来看看FD到底说明了什么。FD规定,对于某一组属性s,值的某个特定组合不能与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,否则您的MVD将被违反。
发布于 2011-11-04 11:19:20
如果您在b1的某一行上将a1的值更改为其他值,则会违反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。
发布于 2011-11-10 20:45:59
这是关于mvd违规还是4NF违规?你查过http://en.wikipedia.org/wiki/Multivalued_dependency了吗
https://stackoverflow.com/questions/7963832
复制相似问题