四、假設關聯式資料表 R(A, B, C, D, E),其資料間功能相依為: A → {B, C, D, E},D → E 請問如何切割可維持無損連結(lossless join)?(20 分)
詳解 (共 1 筆)
詳解
要將關聯式資料表 ?(?,?,?,?,?)R(A,B,C,D,E) 分解成符合第三正規化(3NF)或 Boyce-Codd 正規化(BCNF)的表格,並同時保持無損連結(lossless join),我們需要考慮給定的功能相依:
- ?→{?,?,?,?}A→{B,C,D,E}
- ?→?D→E
分解步驟
-
確認主鍵:
- 由於 ?→{?,?,?,?}A→{B,C,D,E},所以 ?A 是 ?R 的候選鍵(candidate key)。
-
分解關係:
- 根據功能相依 ?→{?,?,?,?}A→{B,C,D,E},我們可以將其分解為兩個關係:
- ?1(?,?,?,?)R1(A,B,C,D)
- ?2(?,?)R2(D,E)
- 根據功能相依 ?→{?,?,?,?}A→{B,C,D,E},我們可以將其分解為兩個關係:
驗證無損連結(lossless join)
驗證 ?1(?,?,?,?)R1(A,B,C,D) 和 ?2(?,?)R2(D,E) 是否無損連結:
- 在 ?1(?,?,?,?)R1(A,B,C,D) 和 ?2(?,?)R2(D,E) 之間, ?D 是公共屬性。
- 我們需要確保分解後的自然連接(natural join)能夠還原原始表 ?R。
對於無損連接,根據關係分解理論,如果 ?1∩?2R1∩R2 包含一個超鍵(superkey),則分解是無損的。
在 ?1(?,?,?,?)R1(A,B,C,D) 和 ?2(?,?)R2(D,E) 中,公共屬性是 ?D。我們需要檢查 ?D 是否為 ?1R1 或 ?2R2 的超鍵:
- 在 ?2(?,?)R2(D,E) 中,?D 是超鍵,因為 ?→?D→E。
由於 ?D 是 ?2R2 的超鍵,根據無損連接規則,這樣的分解是無損的。
最終分解
我們將 ?(?,?,?,?,?)R(A,B,C,D,E) 分解為:
-
?1(?,?,?,?)R1(A,B,C,D)
- 包含屬性:A, B, C, D
- 主鍵:A
-
?2(?,?)R2(D,E)
- 包含屬性:D, E
- 主鍵:D
這樣的分解既能維持無損連接(lossless join),又能保證數據庫的正規化。