函式依賴族的閉包“F”是什麼?
我有一些問題要確定
F
函式依賴系列的閉包是什麼。我知道它的定義是
F⁺= {X → Y\F⊨X → Y}
一個例子
讓我們成為以下關係
R(Student,Examination, Date)
具有以下一組功能依賴項:F={D,St → Ex, Ex → D}
關係分解為
R¹(St,Ex) R²(Ex,D)
**為什麼是
F¹= ∅
但是F²={Ex → D}
?**我會做出:F²= ∅
從定義F⁺
我從社區 wiki 知道
功能依賴要求它們必須為每個 可能的實例都成立。
從一個實例中,您無法找到特定關係模式中的功能依賴關係
因此我不知道如何知道函式依賴族的閉包是什麼。
另一個例子是:
第二個例子
R(Course,Student,Birthday,Grade)
具有以下一組功能依賴項:
F={C,St → G, St → B}
以及以下關係:
R¹(C,St,G)
和R²(St,B)
**
F¹{C,St → G}
從定義來看,R²(St → B)
**我會這樣做:F¹=F²=∅
當你有一個關係 R 與一組函式依賴 F 和 R 在 R 1 …R n中的分解時,你必須考慮兩個不同的概念:
- 函式依賴集 F 的閉包。這個閉包,稱為 F +,是從 F 派生的所有依賴項的集合,在可能的情況下,通過應用一組稱為“阿姆斯特朗公理”的規則。這個集合可以很長,(與 F 的依賴數成指數),所以一般不計算。相反,可以計算的是它的覆蓋,它是可以從中派生 F +的少量依賴項(因此相當於 F +)。例如,當您對關係進行規範化時,這種計算很有用。
- 依賴集 F 在 R 的分解上的投影。根據定義,對於每個 R i ,該投影是F +的所有依賴關係的集合,這些依賴關係具有R i**中的所有屬性(並表示為 π R i (F))。但是,由於我們不計算 F +,如上所述,我們無法計算這樣的投影。在實踐中可以做的是,在簡單的情況下,查看 F 中是否存在某種依賴關係,其所有屬性都包含在 R i中,因此我們確信這種依賴關係在 R i中成立. 但是,如果以這種方式在分解關係之一中找不到依賴項,則不能保證這種依賴項會失去,因為它可能是其他依賴項的結果。
在您的第一個範例中,對於關係 R(S, Ex, D),您在 F 中有兩個依賴項:
D, St → Ex Ex → D
因此,考慮 R 2 = (Ex, D),我們可以立即看到,在依賴關係中 Ex → D 在 R 2中成立,因為它的所有屬性都包含在 R 2中,而第一個依賴關係不能在 R 1和 R中都不成立2,因為它具有三個屬性。實際上,在關係 R 1中,您既沒有第一個依賴項,也沒有第二個依賴項(在 R 1中僅存在來自 F +的瑣碎依賴項,例如 St → St)。
相反,在您的第二個範例中,分解的關係是這樣的,即在第一個依賴項中存在所有屬性,因此它在其中微不足道,而在第二個範例中存在第二個依賴項的所有屬性,您可以再次確保第二個依賴關係在第二個關係中成立。
最後,請注意,雖然計算 π R i (F)在計算上不可行,但有一種有效的多項式算法可以查看某個分解是否保留了依賴關係,換句話說,如果 ∪π R i (F) 是F +的封面。您可以在此答案中查看更多詳細資訊。