我一直在尝试使用此示例找出第二范式和第三范式之间的区别。这些定义对我没有用......
这些是功能依赖项:
A is the candidate key. (A --> A,B,C,D)
FDs:
A --> CD
AC --> D
CD --> B
D --> B
我的想法:它是第一和第二,但不是第三范式,因为候选键 A 不包含两列或更多列。但是 B 是传递依赖于 D 的。所以它不在第 3 位。
那是正确的吗?特别是 A 包含少于两列的论点?
我一直在尝试使用此示例找出第二范式和第三范式之间的区别。这些定义对我没有用......
这些是功能依赖项:
A is the candidate key. (A --> A,B,C,D)
FDs:
A --> CD
AC --> D
CD --> B
D --> B
我的想法:它是第一和第二,但不是第三范式,因为候选键 A 不包含两列或更多列。但是 B 是传递依赖于 D 的。所以它不在第 3 位。
那是正确的吗?特别是 A 包含少于两列的论点?
首先,让我们看看 2NF 和 3NF 是什么。从问题的上下文来看,很明显 1NF 已被理解,因此我将参考它。如果还不清楚,请告诉我,我也会澄清这一点。
2NF:R 是第二范式,当且仅当它是第一范式并且没有非主属性依赖于关系的任何候选键的任何适当子集。
非主要属性是不属于任何候选键的属性。因此,如果一个非主属性可以由包含候选键的非完整子集的函数依赖确定,则该关系不在 2NF 中。
例如,让我们考虑一个 invoices(number, year, age) 表,其中 (number, year) 是候选键。年龄可以仅由年份确定,因此该表不在2NF中。
在您的情况下,由于密钥是一维的,假设它在 1NF 中,我们也可以说它在 2NF 中。但是,它在 3NF 中当且仅当它在 2NF 中并且每个非主属性都非传递地依赖于每个键。
在您的情况下, A 是关键,但是由于
A -> D -> B
B 传递依赖于 A,因此您的表不在 3NF 中。要实现 3NF,您将需要创建另一个表,该表将通过 D 与该表相关并保存 B。可能的解决方案:
T1(A, C, D)
T2(D, B)
请注意,AC -> D 和 A -> CD 是微不足道的,因为 A 是候选键,而候选键决定了其他一切。如果不是这种情况,您还需要查看 1NF。