如果我有我的最小封面说:F' = {A->F, A->G, CF->A, BG->C) 并且我已经确定了关系的一个候选键,说它是 A。那么我到底在做什么?
F' 不是最小覆盖:您必须将 A->F 和 A->G 组合到 A->FG
即使值 A 也不能是给定 F' 的候选键,因为 B 不属于 A 的闭包。可能的候选键是 AB。
对于 3NF,您首先为 F' 中的每个依赖项创建表,即
R1(A,F,G) R2(A,C,F) R3(B,C,G)
接下来检查其中一个表是否包含候选键。由于 B 仅出现在依赖项的左侧,因此 B 应该始终是候选键的一部分。唯一带有 B 的表是 R3,它不包含候选键(检查它!)。因此,我们添加一个带有候选键作为属性的新表 R4
R4(A,B)
最后,我们检查一个表的属性集是否包含在另一个表的属性集中。对于我们正在运行的示例,情况并非如此。
因此,我们的 3NF 分解是
R1(A,F,G) R2(A,C,F) R3(B,C,G) R4(A,B)
对于 BCNF,您从 R(A,B,C,F,G) 开始并查找 BCNF 违规。
例如,A->FG 违反了 BCNF,因为这种依赖关系不是微不足道的,而且 A 不是超键。因此,我们将 R 拆分为
R1(A,F,G) and R2(A,B,C)
所获得的关系都不包含违反 BCNF 的行为,因此该过程在此停止。