依赖 lhs 的第二范式违规是复合的(素数和非素数在一起)

2nd normal form violation with lhs of the dependency is composite (prime and non-prime together)

我在研究函数依赖和规范化时遇到了一个问题。原题如下:

"Given the relation R = {v,w,x,y,z} and functional dependency set {v->w,y->z,yz->v,wx->z} find BCNF composition and check if dependency preservation holds."

首先我试图找到最小的掩体并想出了这个:

最小封面:
v -> w
y -> z
y -> v
wx -> z

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

候选键:
xy

然后我开始检查普通表格:

第一范式: 检查

第二范式:

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

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

前两个很容易解决。但是,我从未见过 3rd 的左侧是素数和非素数属性的组合的示例。我们如何解决这种情况?我们是否为第 3 个创建 w 和 x 主键创建新关系?

如果我解决了那部分,我猜 3rd 和 BC 范式会很容易。

那些 FD 不违反 2NF。当 FD(函数依赖)的右侧由其左侧的 proper/smaller 子集在功能上确定时,它是 partial。 None 这三个 FD 部分依赖于 CK(候选密钥)。 None 其中甚至是部分的,因为 none 的右侧由左侧的子集(行列式)决定。而且 none 他们甚至在 CK 上,因为 none 他们的左手边有 CK。

然而,FD xy->z 和 xy->v 是部分的,因为 xy 的 proper/smaller 个子集决定了 z 和 v。它们违反了 2NF,因为 xy 是 CK 而 v 是非素数属性。而 wxy->z 是部分的,因为它的 proper/smaller 子集 xy 决定了 z(因为 xy 是一个 CK,所以决定了所有的子集)。但它不违反 2NF,因为它的行列式不是 CK。

你永远不会看到 "an example [2NF-violating FD] where the left-hand side is a composite of prime and non-prime attributes"。因为违反 2NF 的 FD 的左侧是 CK,所以没有非素数属性。虽然它是部分的,所以它有一个 proper/smaller 子集,它也决定了右边。

阅读部分 FD 和 2NF 的一些学术定义。 (许多 textbooks/presentations/courses 在线免费。)准确记住和应用定义、定理和算法。你似乎不明白很多事情:

  • 处于 BCNF 意味着处于所有较低的 NF。 进入 BCNF 不需要通过较低的 NF。
  • 你看到的分解例子不是分解算法的介绍.
  • 我们不通过连续的 NF 进行归一化。我们对我们想要的 NF 使用一种算法。 (通过较低的 NF 甚至可能意味着良好的较高 NF 设计变得不可用。)
  • 每次我们根据一个坏的 FD 进行分解时,我们都会得到新的关系、FD 和 CK。
  • 组件中持有的FD是其属性所在的原始文件的所有FD。 (即封面的闭包,而不仅仅是封面的那些。)
  • 当 FD 的右侧在功能上由其左侧的 proper/smaller 子集确定时,FD 是部分的。
  • 2NF 被 CK 上非主要属性的部分 FD 所违反。