如何确定完成 3NF 的正确步骤?

How to identify the corrects step to complete 3NF?

这是教科书上的例子: 考虑关系 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 也是极小的。但我不知道为什么。 如何检查最小值?

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

然后我们检查 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 的数据库系统第 103 页

How do you check minimality?

作者在这里没有使用极小这个词。要检查 最小基础 ,请按照示例 3.27 前两段中的过程进行操作。归结为

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

Also, do we have to find all the FD's besides the ones given to check whether to perform 3-NF or not?

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

综合算法对您提供的 FD 进行操作。在学术环境中,正如您可能会在教科书中发现的那样,假设您已获得足够的信息来解决问题。在实际应用程序中,您可能会从业务分析师那里获得一组 FD。不要假设分析师已经给了你足够的信息;寻找更多的FD。

We then check if AB -> C can be split into A -> C and B -> C, we notice that these do not stand on their own so AB -> C is not splittable.

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

If [the original relation] is in 3NF and there are no violations . . .

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