从功能依赖关系中检查第三范式

时间:2011-03-14 02:00:25

标签: relational-database database-normalization

我有一个关于根据功能依赖性确定关系是否在第三范式中的问题。

R = {A,B,C,D,E}
A -> B
BC -> E ED -> A

由此,我确定候选键是: {ACD},{BCD},{CDE}
维基百科说,如果对于每个函数依赖关系X-> Y,它满足以下至少一个要求,则关系为第三范式: 1. Y是X的子集 2. X是超级钥匙 对于某些关键K,Y是K的子集

我的工作:A -> B满足3因为{BCD}BC->E{CDE}而满足3,而CD -> A{ACD}而满足3 1}}。

这是解释这些规则的正确方法吗?

1 个答案:

答案 0 :(得分:1)

A -> B表示功能依赖。但是这些

R 1 = { A ,B}
R 2 = { B,C ,E}
R 3 = { E,D ,A}

表达关系。 (我假设你的意思是我们将这些作为你从分解R中获得的关系。)

正常形式适用于关系;它们不适用于功能依赖。说“A -> B在3NF中”或“A确定B在3NF中”没有任何意义。

所以R 1 = { A ,B}是一种关系。由于密钥{B,C,D},它不“满足规则3”。它不能,因为{B,C,D}不在R 1 中。

这些规则与分解R的关系的候选键有关,而不是与R本身的候选键有关。

稍后。 。 我看到我的假设不正确。您正在尝试评估 R,而不是分解它。在这种情况下,你的推理是正确的,R在3NF。您还可以得出R在3NF中的结论,因为没有非素数属性。由于没有非素数属性,因此每个FD的右侧必须是候选键的一部分。

但是R不在BCNF。 (或4NF,或5NF。)你能解决这个问题吗?