无损分解

时间:2012-11-02 22:02:39

标签: sql database

考虑模式R(A,B,C,D)和函数依赖性A⟶B和C⟶D。那么为什么不将R分解为R1(A,B)和R2(C,D)无损分解?你能用现实生活中的例子解释一下这里丢失了什么信息吗?

2 个答案:

答案 0 :(得分:9)

您当然需要在无损分解中概述的两个关系R1(A,B)和R2(C,D),但是您丢失了关于哪些A值与哪些C值相关联的关键信息存在于原始R(A,B,C,D)中。因此,您还需要R3(A,C)来保留所有原始信息。

关系R

A    B    C    D
1    2    13   14
2    2    13   14
3    1    12   15

关系R1

A    B
1    2
2    2
3    1

关系R2

C    D
13   14
12   15

加入R1和R2(笛卡尔积);伪造的行标有☜

A    B    C    D
1    2    13   14
1    2    12   15   ☜
2    2    13   14
2    2    12   15   ☜
1    3    13   14   ☜
3    1    12   15

由于此连接与R不同,因此建议的分解不是无损的。

关系R3

A   C
1   13
2   13
3   12

加入R1,R2,R3

A    B    C    D
1    2    13   14
2    2    13   14
3    1    12   15

由于此结果关系与原始R相同,因此分解为R1,R2和R3是无损的。

答案 1 :(得分:2)

  

那为什么不将R分解为R1(A,B)和R2(C,D)进行无损分解?

因为现在(A,B)和(C,D)不相关,所以它们不相关。您还需要A和C之间的关系。