这些 FD 的范式是什么?

In which normal form are these FDs?

我一直在尝试使用这个例子找出第二范式和第三范式之间的区别。这些定义对我没用...

这些是功能依赖项:

A is the candidate key. (A --> A,B,C,D)
FDs:
A --> CD
AC --> D
CD --> B
D --> B

我的想法:它是第 1 和第 2 范式,但不是第 3 范式,因为候选键 A 不包含两列或更多列。但是B是传递依赖于D的。所以它不在第三。

对吗?尤其是A由少于两列组成的说法?

首先,让我们看看什么是2NF和3NF。从问题的上下文来看,很明显 1NF 已被理解,因此我将参考它。如果还有不清楚的地方,告诉我,我也会澄清的。

2NF:R 是第二范式,当且仅当它是第一范式并且没有非素数属性依赖于关系的任何候选键的任何适当子集。

非主属性是不属于任何候选键的属性。因此,如果非素数属性可以由包含候选键的非完整子集的函数依赖关系确定,则该关系不在 2NF 中。

例如,让我们考虑一个 invoices(number, year, age) table,其中 (number, year) 是一个候选键。年龄可以单独由年份确定,因此 table 不在 2NF 中。

在你的例子中,由于密钥是一维的,假设它是 1NF,我们也可以说它是 2NF。然而,它在 3NF 中当且仅当它在 2NF 中并且每个非素数属性都非传递地依赖于每个键。

在你的例子中,A 是关键,但是因为

A -> D -> B

B 传递依赖于 A,所以你的 table 不在 3NF 中。要实现 3NF,您将需要创建另一个 table,它将通过 D 与此相关联并包含 B。可能的解决方案:

T1(A, C, D)

T2(D, B)

请注意,AC -> D 和 A -> CD 是微不足道的,因为 A 是候选键,而候选键决定了其他一切。如果不是这种情况,您还需要看看 1NF。