有损分解

use*_*986 14 database database-normalization

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

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

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

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

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

小智 33

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

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

           R
SSN     Name      Address
1111    Joe       1 Pine
2222    Alice     2 Oak
3333    Alice     3 Pine
Run Code Online (Sandbox Code Playgroud)

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

     R1                     R2
SSN     Name     |     Name    Address
1111    Joe      |     Joe     1 Pine
2222    Alice    |     Alice   2 Oak
3333    Alice    |     Alice   3 Pine
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

这是额外信息可能导致有损分解的方式.该记录中没有丢失-我们失去了什么是信息有关哪些记录在原始关系.