为什么有损分解称为有损?我们在有损分解中究竟损失了什么?
有一个关系R。它被分解为两个关系R1和R2。
如果 R = (R1 JOIN R2) 那么它是无损连接分解。没关系。
如果 R 是 (R1 JOIN R2) 的子集,则有损连接分解。
这是有损连接分解,在连接 R1 和 R2 之后,与 R 相比,我们实际上获得了更多的记录。那么我们失去了什么。?
为什么有损分解称为有损?我们在有损分解中究竟损失了什么?
有一个关系R。它被分解为两个关系R1和R2。
如果 R = (R1 JOIN R2) 那么它是无损连接分解。没关系。
如果 R 是 (R1 JOIN R2) 的子集,则有损连接分解。
这是有损连接分解,在连接 R1 和 R2 之后,与 R 相比,我们实际上获得了更多的记录。那么我们失去了什么。?
由于我们正在处理某个实例 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——我们不再拥有此信息。
这就是额外信息如何导致有损分解。记录并没有丢失——我们丢失的是关于哪些记录在原始关系中的信息。