有损分解

时间:2012-10-01 10:14:29

标签: database database-normalization

为什么有损分解称为有损?我们究竟在有损分解中损失了什么?

存在关系R.它被分解为两个关系R1和R2。

如果R =(R1 JOIN R2)那么它就是无效的连接分解。没关系。

如果R是(R1 JOIN R2)的子集,那么有损连接分解。

这是有损连接分解,在连接R1和R2后,我们实际上得到的记录与R相比更多。那么我们失去了什么。 ?

1 个答案:

答案 0 :(得分:32)

由于我们正在处理一些实例R,该关系包含固定数量的记录。它还隐式包含有关哪些记录不存在的信息。如果R1和R2的连接产生额外记录,我们将失去信息完整性。

假设您使用以下关系R =(SSN,名称,地址):

           R
SSN     Name      Address
1111    Joe       1 Pine
2222    Alice     2 Oak
3333    Alice     3 Pine

设R1 =(SSN,名称),R2 =(名称,地址)。

     R1                     R2
SSN     Name     |     Name    Address
1111    Joe      |     Joe     1 Pine
2222    Alice    |     Alice   2 Oak
3333    Alice    |     Alice   3 Pine

R1和R2的连接将产生下表:

       R1 join R2
SSN     Name      Address
1111    Joe       1 Pine
2222    Alice     2 Oak
2222    Alice     3 Pine
3333    Alice     2 Oak
3333    Alice     3 Pine

此示例中丢失的信息是人2222和3333的地址。在原始关系中,R,人2222住在2 Oak。在R1和R2的连接中,2222人或者住在2 Oak或3 Pine - 我们不再拥有此信息。

这是额外信息可能导致有损分解的方式。 记录没有丢失 - 我们丢失的是关于哪些记录与原始关系有关的信息