1

这是教科书中的一个例子:考虑关系 R (A ,B ,C ,D ,E ) 与 FD 的 AB -> C、C -> B 和 A -> D。

我们知道关键是 ABE 和 ACE。分解:ABE+=ACE+=ABCDE。

你如何检查最小化?我知道 AB+=ABD 并且教科书上说因为 AB+ 不包括 C。那么它是最小的。C+=AB 和 A+=AD 也是最小的。但我不知道为什么。你如何检查最小化?

另外,除了检查是否执行 3-NF 的那些之外,我们是否必须找到所有的 FD?

然后我们检查 AB -> C 是否可以拆分为 A -> C 和 B -> C,我们注意到它们不能独立存在,因此 AB -> C 不可拆分。

我们剩下最后的关系:S1(ABC),S2(BC),S3(AD)和密钥(因为不存在)S4(ABE)(或S4(ABC))。然后我们删除 S2,因为它是 S1 的子集。

如果它在3NF并且没有违规,那么他们为什么将原始关系拆分为:S1(A,B,C),S2(A,D)和S4(A,B,E)。

书名和页码:Ullman's Database Systems 第 103 页

4

1 回答 1

1

你如何检查最小化?

作者在这里没有使用最小化这个词。要检查最小基,请遵循示例 3.27 的前两段中的过程。归结为

  • “......验证我们不能消除任何给定的依赖关系。”
  • “......验证我们不能从左侧消除任何属性。”

另外,除了检查是否执行 3-NF 的那些之外,我们是否必须找到所有的 FD?

这个问题真的没有意义。3NF 不是您执行的操作。教科书中的例子与 3NF 模式的综合算法有关。综合算法将关系R分解为至少 3NF 的关系。

合成算法在您获得的 FD 上运行。在学术环境中,您可能会在教科书中找到,假设您已经获得了足够的信息来解决问题。在实际应用程序中,您可能会从业务分析师那里获得一组 FD。不要以为分析师已经给了你足够的信息;寻找更多的FD。

然后我们检查 AB -> C 是否可以拆分为 A -> C 和 B -> C,我们注意到它们不能独立存在,因此 AB -> C 不可拆分。

不。您验证(未注意到)您不能从左侧消除任何属性。消除A留下B->C;消除 B 留下 A->C。三个原始 FD 都没有暗示这些。所以你不能从左侧消除任何属性。

如果 [原始关系] 在 3NF 中并且没有违规。. .

原始关系不在3NF 中。它甚至不在2NF中。(A->D)

于 2017-04-16T15:52:06.677 回答