我说函数依赖集 { AE -> BCD, B -> E } 属于 3NF,但我的老师说它既不属于 3NF,也不属于 BCNF。
我获得了候选密钥AE和AB。
在第一个函数依赖中,左侧是候选键,第二个 E 包含在候选键中,因此它属于 3NF。
如何用 BCNF、3NF 或两者都不显示?
假设关系的所有属性都是 A B C D 和 E,并且给出的唯一依赖关系是所描述的两个 (F),那么你是对的。由于(唯一的)候选键正确的是 A E 和 A B,并且由于函数依赖 B → E 具有不是超键的行列式,因此该关系不在 BCNF 中。给定 BNCF 的定义之一:“对于 F+ 的所有非平凡依赖项 X → Y,X 是超键”,有一个定理表明,其充分必要条件是作为超级键适用于 F 中的所有依赖项。
另一方面,由于 E 是素数属性,即候选键的属性,因此依赖关系 B → E 不违反 3NF,因此关系符合 3NF。再次,给出 3NF 的定义之一:“对于 F+ 中的所有非平凡依赖项 X → A,则 X 是超键或 A 是素数属性”,这是由于一个定理:这个条件相当于检查,“对于 F 中的每个函数依赖 X → A1,...,An,以及对于 {1..n} 中的每个 i,或者Ai属于X,或者X是超级密钥或者Ai是素数”。 F 的两个依赖关系满足了这一点。
当你声明/表明其中存在关系时,你需要使用 NF 的定义。
您实际上并没有说出所有属性是什么。我假设属性是 A 到 E。否则,CK(候选键)不是您所说的。
你反对 BCNF 的论点是正确的。您使用的定义是 FD(功能依赖性)的所有决定因素都不在超键之外。您发现了一个反例FD B→E。
如果这是关于 BCNF 与 3NF 的非此即彼的问题,你可以就此打住。
在第一个函数依赖中,左侧是候选键,并且在 B -> E 中,E 包含在候选键中
您没有证明该表满足以下任何一个定义(来自维基百科,恰好是正确的)的条件,即表处于 3NF 当且仅当:
满足以下两个条件:
- 该关系属于 2NF
- 每个非素数属性都非传递地依赖于每个[候选]键
对于每个函数依赖 X → A,至少满足以下条件之一:
- X 包含 A
- X 是超级键
- A-X 中的每个属性都是质数
您似乎使用定义2(但没有这么说)。您显示项目符号 2 对于 AE → BCD 成立。指出 E 在 B → E 中是素数似乎是证明 E-B 都是素数的一部分。但你需要证明 every FD 满足子弹。请注意,持有的 FD 数量多于给定的 FD 数量。阿姆斯特朗公理告诉您所有 FD 是什么。
在实践中,通过应用 3NF 算法可以更容易地显示模式处于 3NF 中。