什麼是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相同,因此,上述分解是無損連線分解。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP