FD 的复合 LHS 的第二范式违规同时具有质数和非质数属性

问题描述 投票:0回答:1

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

我试图找到一个最小的封面:
v -> w
y -> z
y -> v
wx -> z

我只找到一个候选键:
XY

我开始检查范式:

第一范式:检查

第二范式:

这些依赖关系违反了 2NF: y -> z
y -> v
wx -> z

我从未见过像第三个 FD 这样的例子,其中左侧是素数和非素数属性的组合。

遇到这种情况我们该如何解决?

我们是否为第三个 FD 创建一个新的关系,使 w 和 x 主键?

database database-normalization functional-dependencies
1个回答
0
投票

是否认为FD(功能依赖)“违反了2NF”取决于人们对2NF的定义。 2NF 的常见定义是,如果非素数属性在功能上部分依赖于 CK(候选键),则 FD 不成立。那么,违规 FD 是否是非主属性在功能上部分依赖于 CK 的 FD?或者非素数属性在功能上依赖于 CK 的真子集,而前面的 FD 是部分的?或者两者都有?和/或其他?或者什么?事实上,并不是单个 FD 违反了 NF,而是所有 FD 的集合都成立。如果您想讨论个别 FD 违规,那么您需要给出 2NF 的定义,然后根据定义如何谈论此类 FD 给出并证明违反 FD 的定义。

下面使用上面的 2NF 定义并讨论该定义明确不允许的“坏”FD,其中非素数属性在功能上部分依赖于 CK。

这三个FD还不错。当 FD 的右侧在功能上由其左侧的适当/较小子集确定时,FD 是“部分”的。这三个 FD 都不是对 CK(候选密钥)的部分依赖。它们都不是部分的,因为没有一个右侧是由左侧的子集(行列式)确定的。他们甚至都没有在 CK 上,因为他们的左手边都没有 CK。 您可能会认为前两个“违反了 2NF”,根据 2NF 定义,不存在左侧为 CK 的真子集且右侧为非素数属性的 FD。该定义明确不允许这些 FD。所以我们没有 2NF。

然而,FD xy->z 和 xy->v 是部分的,因为 xy 的真/较小子集决定了 z 和 v。它们是不好的:xy 是 CK,Z 和 v 是非素数属性,因此两者都有非素数属性部分依赖于 CK。所以我们没有 2NF。

wx->z 还不错。而且根据 2NF 定义,不存在左侧为 CK 的真子集且右侧为非素数属性的 FD,这并不“违反 2NF”。

“左边是否是素数和非素数属性的组合”并不重要。重要的是你的定义中提到了什么。 (碰巧你永远不会看到这样的不良或“违反”FD 的“例子”。因为这两者都需要仅具有 CK 属性的左侧。)

阅读部分 FD 和 2NF 的一些学术定义。 (许多教科书/演示文稿/课程都是免费的在线课程。)准确记忆并应用定义、定理和算法。你似乎不明白很多事情:

    处于 BCNF
  • 意味着处于所有较低的 NF 中。 达到 BCNF 不需要经过较低的 NF。
  • 您所看到的分解示例
  • 不是分解算法的演示 我们不通过连续的 NF 进行标准化。我们使用一种算法来得到我们想要的 NF。 (经历较低的 NF 甚至可能意味着良好的较高 NF 设计变得不可用。)
  • 当某些 FD 成立时,阿姆斯特朗公理所隐含的所有 FD 也成立。
  • 要确定 CK 和 NF,仅仅知道某些 FD 成立是不够的,我们需要知道哪些 FD 成立以及哪些 FD 不成立。您需要知道 FD 的
  • closure
  • cover 每次分解时,我们都会得到新的关系以及新的 FD 和 CK 集。
  • 组件中保存的 FD 是其属性所在的所有原始 FD。 (那些是封闭的,而不仅仅是封面的。)
  • 当 FD 的右侧在功能上由其左侧的真/较小子集确定时,FD 是部分的。
  • 常见的 2NF 定义明确不允许 CK 上非素数属性的部分 FD。
  • “违反 FD”不是一个有用的术语,请参阅定义中提到的内容。
© www.soinside.com 2019 - 2024. All rights reserved.