15

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

有一个关系R。它被分解为两个关系R1和R2。

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

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

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

4

1 回答 1

34

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

假设您使用以下关系 R = (SSN, Name, Address):

           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——我们不再拥有此信息。

这就是额外信息如何导致有损分解。记录并没有丢失——我们丢失的是关于哪些记录在原始关系中的信息。

于 2012-10-08T14:11:43.337 回答