我想知道3NF归一化算法的最后一步,它说明了:
4)如果前面步骤中获得的关系都不包含R的超级密钥,则添加一个新关系,其关系的模式是R的关键字。
我的具体问题是,该关系的语义会发生什么?为什么只有一个关系而不是很多单属性关系(每个关键字属性一个)?
我发现在一些例子中,额外的关系是有意义的,但在其他情况下,它似乎“混合”不相关的属性......
答案 0 :(得分:2)
需要3NF归一化算法的最后一步来保证算法生成的分解是无损的。
实际上有一个定理表明如果分解保留了依赖关系,并且其中一个分解的模式是原始关系的超级密钥,那么分解也是无损的。
该算法与前面的步骤一起保证了每个功能依赖都存在于某些分解关系中。如果在某些其他关系中不存在任何键,则引入包含键的关系,可以保证算法产生保留数据和依赖关系的分解。
<强>加强>
这是一个简单的例子,显示了最后一步的需要。假设关系R(A,B,C,D)与A-> B,C-> D(带有密钥A,C)的实例是:
R
A | B | C | D
-------------
1 2 2 3
1 2 3 4
2 3 2 3
R1(A,B),R2(C,D)中的分解为第三正常形式,但是有损(添加剂)。事实上,将该实例投射到分解上会产生:
R1 R2
A | B C | D
----- -----
1 2 2 3
2 3 3 4
如果我们执行分解关系的自然连接,这会产生与原始实例不同的实例,则此分解的附加属性是明确的:
R1 ⨝ R2 =
A | B | C | D
-------------
1 2 2 3
1 2 3 4
2 3 2 3
2 3 3 4
如果在R1(A,B),R2(C,D),R3(A),R4(C)中分解R,情况不会改变:实际上,用R1⨝R2⨝R3⨝R4重新组合它与4行产生完全相同的关系:
R1 R2 R3 R4 R1 ⨝ R2 ⨝ R3 ⨝ R4 =
A | B C | D A C A | B | C | D
----- ----- -- --- --------------
1 2 2 3 1 2 1 2 2 3
2 3 3 4 2 3 1 2 3 4
2 3 2 3
2 3 3 4
相反,情况随着R1(A,B),R2(C,D),R3(A,C)中的分解而完全改变。使用自然连接重构时,您将获得原始实例:
R1 R2 R3 R1 ⨝ R2 ⨝ R3 =
A | B C | D A | C A | B | C | D
----- ----- ------ --------------
1 2 2 3 1 2 1 2 2 3
2 3 3 4 1 3 1 2 3 4
2 2 2 3 2 3
因此,总而言之,在前两种情况下,您丢失了信息(未获得原始实例),而在第三种情况下,您有3NF 和无损(非加性)分解。