什么是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)

ABC
122534
103609
124230

它分解成两个子关系,如下所示:

R1 (A, B)

AB
1225
1036
1242

R2 (B, C)

BC
2534
3609
4230

我们现在可以检查无损连接分解的第一个条件。

子关系R1和R2的并集与关系R相同。

R1U R2 = R

我们得到以下结果:

ABC
122534
103609
124230

该关系与原始关系R相同,因此,上述分解是无损连接分解。

更新于: 2021年7月3日

8K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告