为什么不在3NF给出示例?

时间:2016-08-04 10:40:21

标签: database database-design relational-database normalization database-normalization

我有以下示例,我想了解,其中:

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

Prime键是A

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

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

由于

1 个答案:

答案 0 :(得分:3)

在关系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中的关系,这种分解保留了原始模式的功能依赖性。