为什么给出的例子不在 3NF 中?

Why is given example not in 3NF?

我有以下我试图理解的示例,其中:

R = {A, B, C}
FD = {A->B, B->C, AB->C}

主键是 A

我知道这个例子是2NF,因为prime key只有一个元素,但是我不明白为什么这个例子不是3NF。

C 在功能上依赖于 AB,但 B 不是密钥或密钥的一部分。这就是它不在 3NF 中的原因吗?

谢谢

在关系 R 中,依赖集 FD 的规范覆盖是:

1. A → B
2. B → C

原因是依赖性 A B → C 可以从其他派生:

1. A → B  (given)
2. AB → B (by enrichment of A → B)
3. AB → C (by transitivity of AB → B and B → C)

关系的候选键是 A,因为它的闭包决定了所有其他属性:

A+ = A
A+ = AB (by using A → B)
A+ = ABC (by using B → C)

没有其他属性可以作为键(B不能确定AC只出现在依赖的右边部分。

请记住,当且仅当规范覆盖的函数依赖性的所有决定因素都是超键时,或者对于第三范式 (3NF),当且仅当且仅当且仅当仅当规范覆盖的函数依赖性的所有决定因素都是超键,或者确定因素是素数属性时。

因此,模式不在 BCNF 中,也不在 3NF 中,因为存在函数依赖性 B → C,其中行列式 B 不是键,而 C 是不是主要属性。最后,将模式分解为两个关系:

R1 < (A B), { A → B } >

R2 < (B C), { B → C } >

我们有两个关系,它们都在 3NF 和 BCNF 中,这种分解保留了原始模式的函数依赖性。