要找出關聯資料庫表格 R(A, B, C, D) 的所有候選鍵(Candidate Key),需要使用屬性封閉性(Closure)的概念。屬性封閉性是一個屬性集在給定的功能相依集合下所能確定的所有屬性集合。下面是找出候選鍵的步驟:
給定條件
- 表格 R 的屬性:{A, B, C, D}
- 功能相依(Functional Dependency):{A, B, D} → C 和 {C, D} → B
步驟 1:計算各個屬性集的封閉集
計算各個屬性集的封閉集以確定候選鍵。候選鍵是能確定所有屬性的最小屬性集。
封閉集計算步驟
(1) 計算 {A, B, D} 的封閉集
- 開始:{A, B, D}⁺ = {A, B, D}
- 根據 {A, B, D} → C,添加 C:{A, B, D}⁺ = {A, B, C, D}
- 最終封閉集:{A, B, D}⁺ = {A, B, C, D}
{A, B, D} 能確定所有屬性,因此 {A, B, D} 是一個候選鍵。
(2) 計算 {C, D} 的封閉集
- 開始:{C, D}⁺ = {C, D}
- 根據 {C, D} → B,添加 B:{C, D}⁺ = {B, C, D}
- 無其他功能相依可應用
- 最終封閉集:{C, D}⁺ = {B, C, D}
{C, D} 不能確定所有屬性,因此 {C, D} 不是候選鍵。
(3) 計算 {A, B} 的封閉集
- 開始:{A, B}⁺ = {A, B}
- 無功能相依可應用
- 最終封閉集:{A, B}⁺ = {A, B}
{A, B} 不能確定所有屬性,因此 {A, B} 不是候選鍵。
(4) 計算 {A, D} 的封閉集
- 開始:{A, D}⁺ = {A, D}
- 無功能相依可應用
- 最終封閉集:{A, D}⁺ = {A, D}
{A, D} 不能確定所有屬性,因此 {A, D} 不是候選鍵。
(5) 計算 {B, D} 的封閉集
- 開始:{B, D}⁺ = {B, D}
- 無功能相依可應用
- 最終封閉集:{B, D}⁺ = {B, D}
{B, D} 不能確定所有屬性,因此 {B, D} 不是候選鍵。
(6) 計算 {A, C} 的封閉集
- 開始:{A, C}⁺ = {A, C}
- 無功能相依可應用
- 最終封閉集:{A, C}⁺ = {A, C}
{A, C} 不能確定所有屬性,因此 {A, C} 不是候選鍵。
(7) 計算 {B, C} 的封閉集
- 開始:{B, C}⁺ = {B, C}
- 無功能相依可應用
- 最終封閉集:{B, C}⁺ = {B, C}
{B, C} 不能確定所有屬性,因此 {B, C} 不是候選鍵。
(8) 計算 {A, B, C} 的封閉集
- 開始:{A, B, C}⁺ = {A, B, C}
- 無功能相依可應用
- 最終封閉集:{A, B, C}⁺ = {A, B, C}
{A, B, C} 不能確定所有屬性,因此 {A, B, C} 不是候選鍵。
(9) 計算 {A, B, C, D} 的封閉集
- 開始:{A, B, C, D}⁺ = {A, B, C, D}
- 這個集已經包含所有屬性,因此是所有屬性的超鍵,但不是最小集,不是候選鍵。
結論
根據以上計算,表格 R 的候選鍵為 {A, B, D}。這是唯一一個能確定所有屬性且屬性集最小的候選鍵。