我有一个关于第四范式(4nf)的问题。
我有点困惑,因为我看到了一些定义,其中有些不同。
我看到的最简单的定义是这个:【从德国维基百科翻译过来】-English Wikipedia:
如果表是boyce–codd normal form(bcnf),并且只包含微不足道的多值依赖项(mvd),则它是4nf。
使用wikipedia中mvd的定义
(https://en.wikipedia.org/wiki/Multivalued_dependency)
根据维基百科的说法,一个微不足道的MVP是:
如果y是x的子集,则多值依赖项x->>y是微不足道的,或者
如果x y是关系的全部属性集。
使用此定义,下表不应在4nf中:
CourseNr Book Lecturer
======== ==== ========
1 Math-A Prof. Smith
1 Math-B Prof. Bob
1 Math-A Prof. Bob
1 Math-B Prof. Smith
这几乎是维基百科上的定义。
我现在的问题是:
如果从该表中删除最后一行:
CourseNr Book Lecturer
======== ==== ========
1 Math-A Prof. Smith
1 Math-B Prof. Bob
1 Math-A Prof. Bob
如果这张桌子现在是4NF?
我会说是的,因为它不符合
多值依赖关系不再存在,因此表不包含
一个微不足道的mvd,因此应该在4nf中。
我的假设是正确的还是一路上犯了错误?
最佳答案
如果一个表是boyce-codd标准格式,并且只包含微不足道的多值依赖项(mvd),那么它是4nf格式的。
这个词用得很差。而且,在初学者的上下文中,它对“contains”的用法可能是模糊的。似乎是想说:
如果表在bcnf中,则它在4nf中,并且它满足的mvd是微不足道的。
然而,这是错误的。
如果fd x→y保持,那么mvd x y保持。(人们常说fd是mvd,但这是不正确的。fds和mvd是带箭头的表达式。但是fd声明了一个比mvd更受限制的条件。)非正式地,虽然mvd说y的所有子行值必须与x的所有子行值一起出现,但是fd说所有y子行的集合只有一个元素。
正确的描述如下:
如果一个表在bcnf中,并且它满足的每个mvd都是平凡的或对应于fd,那么它就在4nf中。
如果一个表在bcnf中,那么它在4nf中,并且它满足的每个mvd都与fd不对应,这是微不足道的。
(不要把维基百科作为技术参考,只是作为补充。尤其是关系模型中的大多数条目都有错误和混淆。)
(请参阅我对4NF和MVD的回答。)
关于database - 归一化中第四范式的定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44028231/