我当时正在学习函数依赖和规范化,我遇到了一个问题。原来的问题如下:
给定关系R= {v,w,x,y,z}和函数依赖集{v->w,y->z,yz->v,wx->z}查找BCNF组合,检查依赖保留是否成立。
首先,我试图找到最低限度的掩护,并提出如下:
最小覆盖:
V -> w
Y -> z
Y -> v
wx -> z
然后我试图找到候选密钥,只想出一个候选密钥:
候选密钥:
xy
然后我开始检查正常的表格:
第一范式:检查
第二范式:
我认为以下依赖关系违反了第二范式:
1) y -> z
2) y -> v.
3) wx -> z
前两个问题很容易解决。然而,我从未见过第三个例子,即左手边是质数属性和非素数属性的组合。我们如何解决这种情况?我们是否为第三次制作w和x主键建立了一个新的关系?
如果我解决了这一部分,我猜第三和BC范式将是容易的。
发布于 2017-06-08 12:01:24
一个人是否认为FD (功能依赖)是“违反2NF”取决于一个人对2NF的定义。2NF的一个常见定义是,在非素属性部分依赖于CK (候选键)的情况下,不存在FDs。那么,违反FDs是指非素数属性部分依赖于CK吗?还是非素数属性在功能上依赖于CK的适当子集,其中前面的FDs是部分的?还是两者都有?和/或其他人?不然呢?事实上,违反NFs的不是单个FDs,而是所有FDs的集合。如果您想谈论个别的FDs违规行为,那么您需要给2NF下一个定义&然后根据该定义如何讨论这些FDs,给出并证明违反FD的定义是正确的。
下面使用了上面的2NF定义&讨论了该定义显式不允许的“坏”FDs,其中一个非素属性部分地依赖于CK。
那三个FDs还不错。当右手侧由其左手侧的适当/较小的子集在功能上确定时,FD就是partial。这三个FDs中没有一个是CK (候选键)的部分依赖项。它们中没有一个是部分的,因为没有一个是由左手(行列式)的子集决定的右手边。他们中没有一个是在CK上,因为他们都没有一个CK作为左手。
根据2NF的定义,前两个词可能会“违反2NF”,因为没有左边是CK的适当子集&右侧是一个非素数属性。这个定义明确禁止那些FDs。因此,我们没有2NF。
然而,FDs >z& xy->v是部分的,因为xy的适当/较小的子集决定了z& v,并且它们是坏的: xy是CK,Z&v是非素数属性,因此都有一个非素数属性部分依赖于CK。因此,我们没有2NF。
wx->z还不错。而且,根据2NF定义,没有任何FDs具有CK的适当子集&右侧是一个非素数属性,这并不“违反2NF”。
“左手边是否是质数属性和非素数属性的组合”并不重要。重要的是你的定义中提到了什么。(碰巧你永远不会看到这样一个坏的或“违反”FD的“例子”。因为这两种方法都需要只有CK属性的左侧。)
阅读部分FD和2NF的一些学术定义。(许多教科书/讲演/课程在网上免费。)准确地记忆和应用定义、定理和算法。你似乎不明白很多事情:
https://stackoverflow.com/questions/44430434
复制相似问题