具有依赖性的lhs的第二次正规形式违反是复合的(素数和非素数一起)

时间:2017-06-08 08:26:23

标签: database database-normalization functional-dependencies

我正在研究功能依赖和规范化,我遇到了一个问题。原始问题如下:

“给定关系R = {v,w,x,y,z}和函数依赖集{v-> w,y-> z,yz-> v,wx-> z}找到BCNF组成并检查依赖性保留是否成立。“

首先,我试图找到最小的封面并想出了这个:

最小封面
v - > w ^
y - > ž
y - > v
wx - > ž

然后我试图找到候选键,只想出一个候选键:

候选键:
XY

然后我开始检查正常形式:

第一范式:检查

第二范式:

我认为以下依赖关系违反了第二范式:

1) y - > ž
2) y - > v
3) wx - > ž

前两个很容易解决。但是,我从未见过第三个例子,左边是素数和非素数属性的复合。我们如何解决这种情况?我们是否为第三个制作w和x主键建立了新的关系?

如果我解决那个部分,我猜想第3和BC普通表格很容易。

1 个答案:

答案 0 :(得分:0)

那些FD不违反2NF。当FD(功能依赖性)的右侧由其左手侧的适当/较小子集在功能上确定时,它是partial。这三个FD中没有一个是对CK(候选键)的部分依赖。它们都不是部分的,因为没有一个具有由左手侧的子集(行列式)确定的右手侧。而且他们都没有在CK上,因为他们都没有CK作为他们的左手边。

然而,FDs xy-> z& xy-> v是部分的,因为xy的适当/较小的子集确定z& v。它们违反2NF,因为xy是CK而v是非素数属性。并且wxy-> z是部分的,因为其正确/较小的子集xy确定z(因为xy是CK,因此确定所有子集)。但它并没有违反2NF,因为它的决定因素不是CK。

你永远不会看到"一个例子[2NF-violation FD],左边是素数和非素数属性的组合"。因为违反2NF的FD的左侧是CK,所以没有非素数属性。虽然它是部分的,但它有一个适当/较小的子集,也决定了右手边。

阅读偏FD&amp ;;的部分学术定义2NF。 (许多教科书/演示文稿/课程都是免费在线的。)准确记住并应用定义,定理和算法。你似乎不理解很多事情:

  • 在BCNF 意味着在所有较低的NF中。 前往BCNF 不需要通过较低的NF。
  • 您看到的分解示例不是分解算法的演示文稿
  • 我们不会通过连续的NF进行标准化。我们使用我们想要的NF算法。 (通过较低的NF甚至可能意味着更高的NF设计变得不可用。)
  • 每次我们根据坏FD分解我们都会得到新的关系,FD& CKS。
  • 组件中包含的FD都是其属性所在的原始FD。 (即封面的封闭的封面,而不仅仅是封面封面。)
  • 当右手边的功能由其左手边的适当/较小的子集决定时,FD是部分的。
  • 2NF违反了CK上的非素数属性的部分FD。