一、轉換成3nf的保持函式依賴的分解
演算法:ρ=是關係模式r的乙個分解,u=,f=,並設f是乙個最小依賴集,記fdi為xi→alj,其步驟如下:
① 對r的函式依賴集f進行極小化處理(處理後的結果仍記為f);
② 找出不在f中出現的屬性,將這樣的屬性構成乙個關係模式。把這些屬性從u中去掉,剩餘的屬性仍記為u;
③ 若有x→a f,且xa=u,則ρ=,演算法終止;
④ 否則,對f按具有相同左部的原則分組(假定分為k組),每一組函式依賴fi所涉及的全部屬性形成乙個屬性集ui。若ui uj(i≠j),就去掉ui。由於經過了步驟②,故
,於是構成的乙個保持函式依賴的分解。並且,每個ri(ui,fi)均屬於3nf且保持函式依賴。 例
1:關係模式r,其中u=,f=,將其分解成3nf並保持函式依賴。
解:根據演算法進行求解
(一)計算f的最小函式依賴集
① 利用分解規則,將所有的函式依賴變成右邊都是單個屬性的函式依賴。由於f的所有函式依賴的右邊都是單個屬性,故不用分解。
② 去掉f中多餘的函式依賴
a.設cs→g為冗餘的函式依賴,則去掉cs→g,得:
f1=計算(cs)f1
+:設x(0)=cs
計算x(1):掃瞄f1中各個函式依賴,找到左部為cs或cs子集的函式依賴,找到乙個c→t函式依賴。故有x(1)=x(0)∪t=cst。
計算x(2):掃瞄f1中的各個函式依賴,找到左部為cst或cst子集的函式依賴,沒有找到任何函式依賴。故有x(2)=x(1)。演算法終止。
(cs)f1
+= cst不包含g,故cs→g不是冗餘的函式依賴,不能從f1中去掉。
b.設c→t為冗餘的函式依賴,則去掉c→t,得:
f2=計算(c)f2
+:設x(0)=c
計算x(1):掃瞄f2中的各個函式依賴,沒有找到左部為c的函式依賴。故有x(1)=x(0)。演算法終止。故c→t不是冗餘的函式依賴,不能從f2中去掉。
c.設th→i為冗餘的函式依賴,則去掉th→i,得:
f3=計算(th)f3
+:設x(0)=th
計算x(1):掃瞄f3中的各個函式依賴,沒有找到左部為th或th子集的函式依賴。故有x(1)=x(0)。演算法終止。故th→i不是冗餘的函式依賴,不能從f3中去掉。
d.設hi→c為冗餘的函式依賴,則去掉hi→c,得:
f4=計算(hi)f4
+:設x(0)=hi
計算x(1):掃瞄f4中的各個函式依賴,沒有找到左部為hi或hi子集的函式依賴。故有x(1)=x(0)。演算法終止。故hi→c不是冗餘的函式依賴,不能從f4中去掉。
e.設hs→i為冗餘的函式依賴,則去掉hs→i,得:
f5=計算(hs)f5
+:設x(0)=hs
計算x(1):掃瞄f5中的各個函式依賴,沒有找到左部為hs或hs子集的函式依賴。故有x(1)=x(0)。演算法終止。故hs→i不是冗餘的函式依賴,不能從f5中去掉。即:f5=
③ 去掉f5中各函式依賴左邊多餘的屬性(只檢查左部不是單個屬性的函式依賴)
沒有發現左邊有多餘屬性的函式依賴。故最小函式依賴集為:f=
(二)由於r中的所有屬性均在f中都出現,所以轉下一步。
(三)對f按具有相同左部的原則分為:r1=csg,r2=ct,r3=thi,r4=hic,r5=hsi。所以ρ=。
檢驗分解的函式依賴保持性
輸入 關係模式r的函式依賴集f和分解p 輸出 p是否保持函式依賴的判定。方法 1 for 每個x y f do 2 begin 3 if 不存在i使得xyr then 檢驗x y是否被分解p所保持 4 begin 5 z x 6 repeat 7 for i 1 to k do 8 z z u z ...
函式依賴保持性
你現在的位置 首頁 教學內容 第7章 重難點 概念搜尋 7.3.2 函式依賴保持性 定義5 設關係模式r具有屬性集u和函式依賴集f,r1,rk 是r的乙個分解,ui是ri的屬性集,fi是f在ui的投映。若f i 1kfi 則稱分解 具函式依賴保持性?演算法2 函式依賴保持性的判斷演算法 輸入 函式依...
3NF的無損連線和保持函式依賴的分解
總結 先求最小覆蓋,再求碼,然後根據左部相同原則劃分關係,將上述劃分的再根據是否有包含關係進行合併,最後若關係中包含之前求的碼,那麼這個關係就是要求的分解,否則再加上乙個關係,將碼放入其中。以下 自 例一 設關係模式r a,b,c,d,e 上的函式依賴集f是 1 計算f的最小覆蓋。首先將右部不唯一的...