Normalization

依賴保持分解

  • May 9, 2016

讓我們成為以下關係方案:

F = {AB → C; 交流→乙;廣告→E;B→D;BC → A;E → G}

下面的分解是否沒有失去依賴性?

R¹=(A,B),R²=(B,C),R³=(A,B,D,E),R⁴=(E,G)

然後看看他們的關閉:

$$ AB $$⁺={A,B,C,D,E,G} $$ BC $$⁺={B,C,A,D,E,G} 然後老師做了一些我不完全理解的關於閉包的事情:

F¹⁺=∅

F²⁺=∅

F³⁺ = {AD → E, B → D, AB → D, AB → E}

我知道 F⁺={X → Y\F⊨X → Y}

然後$$ X $$⁺= {A\F⊨X → A}

然後她做了:

$$ AB $$⁺⇔ AB → C; AB→D;AB→E;AB → G $$ AB $$⁺ ∪ F³⁺={A,B,D,E,G}, C 不在$$ AB $$⁺ ∪ F³⁺ 因此它不是依賴關係保持分解

你能幫我理解為什麼嗎?

最後兩行是解決問題的一種簡化方法,無需重複使用完整的算法來檢查依賴性保留。特別是老師指出,結合您可以從 R 1和 R 3獲得的依賴關係,您無法獲得 C,這對於在依賴關係 BC → A 中獲得 A 至關重要。這種依賴關係永遠不能通過 F 在分解的關係。

以下是完整的解釋。

要檢查分解是否保留依賴關係,可以使用 Ullman 算法檢查 F 中的每個依賴關係 X → Y,如果 Y 包含在關於 F 在分解上的投影的 X 閉包中(正式地,呼叫G 依賴關係在分解關係 R i上的投影的並集,即 G = ∪π R i (F),算法檢查是否 X → Y ∈ G +,通過檢查 Y ⊆ X + G )。

因此,我們必須為 F 的每個依賴項計算 X + G,以檢查 Y 是否包含在其中。

使用以下算法計算這樣的閉包。

  1. 用 X初始化 X + G,
  2. 在每一步,對於每個關係 R i,將通過計算 X + G ∩ R i關於 F的屬性的閉包獲得的屬性添加到 X + G ,並將結果再次投影到 R i上。在符號中: X + G := X + G ∪ ((X + G ∩ R i ) + F ∩ R i )
  3. 當 X + G改變時重複 2 。

讓我們嘗試一下依賴 BC → A。

原來:

BC + G = BC,

使用 R 1 (AB), BC ∩ AB = B, B + F = BD,所以與 AB 相交得到 B,它已經在 BC + G中;

使用 R 2 (BC), BC ∩ BC = BC, BC + F = ABCDEG,所以將它與 BC 相交得到 BC,它已經在 BC + G中;

使用 R 3 (ABDE), BC ∩ ABDE = B, B + F = BD,所以將它與 ABDE 相交我們得到 BD,我們可以將 D 加到 BC + G上,現在變成 BCD;

BC + G已更改,因此我們必須重新檢查新值 BCD。前兩個關係沒有任何貢獻,因為它們中不存在 D。第三個必須再次考慮:

使用 R 3 (ABDE),BCD ∩ ABDE = BD,BD + F = BD,我們不能添加任何東西;

使用 R 4 (EG),BCD ∩ EG = ∅,無需再添加。

所以我們終止了,因為沒有新的屬性可以添加到閉包中,並且由於 BC + G = BCD不包含A,我們可以得出結論,至少沒有保留此依賴關係,因此分解不會保留依賴關係.

並且由於您詢問如何在不失去依賴關係的情況下分解關係,您可以查看合成算法以分解第三範式 (3NF) 中的關係。你可以在任何關於數據庫的好書上找到它,它保證保留依賴關係和數據(無損分解),同時減少冗餘和異常。

在這種情況下,3NF 中的分解如下:

R 1 < (ADE) , { AD → E } >

R 2 < (BD) , { B → D } >

R 3 < (ABC) , { BC → A, AC → B, AB → C } >

R 4 < (EG) , { E → G } >

我最好說

F¹⁺=∅

F²⁺=∅

F³⁺ = {AD → E, B → D, AB → D, AB → E}

F⁴⁺ = {E → G}

(F¹⁺ U F²⁺ U F³⁺ U F⁴⁺) != F

引用自:https://dba.stackexchange.com/questions/137556