这是教科书中的一个例子: 考虑关系 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) 和 key (因为不存在)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)
关于database - 如何确定完成 3NF 的正确步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42496786/