什么是DBMS中的分解?
分解意味着将关系R分解成{R1, R2, ......Rn}。它是依赖性保持和无损的。
依赖性保持分解
假设R被分解成{R1, R2,....,Rn},其投影FD集为{F1,F2,......Fn}。如果F+ ={F1 U F2 U.........Fn}+,则此分解是依赖性保持的。
示例
假设关系R{A,B,C,D,E} F:{AB->C, C->D, AB->D} R被分解成R1(A,B,C), R2(D,E)。证明分解是依赖性保持的。
解答
F1={AB->C}
F2={C->D}
=> (F1 u F2) = {AB->C, C->D}
在(F1 U F2)下AB+ = {A,B,C,D} => AB->D在(F1 U F2)下
F+ = (F1 U F2)+
=> 分解是依赖性保持的。
分解不保持
现在考虑另一个分解不保持的示例。
假设关系R{A,B,C,D,E,F,G,H,I,J},其中F: {AB->C, A->DE, B->F, F->GH. D->IJ}
R被分解成R1(A,B,C,D), R2(D,E), R3(B,F), R4(F,G,H) 和 R5(D,I,J)。检查分解是依赖性保持的还是不保持的。
解答
F1={AB->C}
F2={}
F3={B->F}
F4={F->GH}
F5={D->IJ}
=> (F1 U F2 U F3 U F4 U F5) = {AB->C, B->F, F->GH, D->IJ}
在(F1 U F2 U F3 U F4 U F5)下A+ = {AB->C, B->F, F->GH, D->IJ}
=>A->DE不在(F1 U F2 UF3 U F4 U F5)下
=>F+ ≠ (F1 U F2 U F3 U F4 U F5)+
=> 分解不是依赖性保持的。
无损连接分解
这是一个将关系分解成两个或多个关系的过程。此属性保证不会发生额外或较少的元组生成问题,并且在分解过程中不会从原始关系中丢失任何信息。它也称为非加性连接分解。
当子关系再次组合时,新关系必须与分解前的原始关系相同。
考虑一个关系R,如果我们将其分解成子部分关系R1和关系R2。
当它满足以下语句时,分解是无损的:
如果我们联合子关系R1和R2,则它必须包含在分解前原始关系R中可用的所有属性。
R1和R2的交集不能为Null。子关系必须包含一个公共属性。公共属性必须包含唯一数据。
公共属性必须是子关系R1或R2的超键。
这里,
R = (A, B, C)
R1 = (A, B)
R2 = (B, C)
关系R具有三个属性A、B和C。关系R被分解成两个关系R1和R2。R1和R2都各有2个属性。公共属性为B。
列B中的值必须是唯一的。如果它包含重复值,则无损连接分解是不可能的。
绘制包含原始数据的R关系表:
R (A, B, C)
A | B | C |
---|---|---|
12 | 25 | 34 |
10 | 36 | 09 |
12 | 42 | 30 |
它分解成两个子关系,如下所示:
R1 (A, B)
A | B |
---|---|
12 | 25 |
10 | 36 |
12 | 42 |
R2 (B, C)
B | C |
---|---|
25 | 34 |
36 | 09 |
42 | 30 |
我们现在可以检查无损连接分解的第一个条件。
子关系R1和R2的并集与关系R相同。
R1U R2 = R
我们得到以下结果:
A | B | C |
---|---|---|
12 | 25 | 34 |
10 | 36 | 09 |
12 | 42 | 30 |
该关系与原始关系R相同,因此,上述分解是无损连接分解。