求候選碼
關係模式r
lhsa:屬性只出現在函式依賴集中的左部分。
rhsa:屬性只出現在函式依賴集中的右部分。如a->bc,則b和c為rhsa
lrsh:出現在左右部分的。
nona:沒有出現在函式依賴集中屬性的集合。
構造lhsa和nona集合,構成並集x。如果x的閉包為u,則完畢。否則執行
對於lrsh中每個屬性a,如果ax的閉包是u,加到答案中且lrsh-
對於lrsh中的每兩個屬性z,如果zx的閉包是u,加到答案中。
對於lrsh中每3個,每4個。。。。屬性z,如果zx的閉包是u,加到答案中.
例題:設關係模式r=(a,b,c,d,e,f),
函式依賴集f=,求r 的候選碼
lhsa=, rhsa=
觀察ad,bd,cd,de ,得到ad的閉包為r. 去掉a之後的lrsa=,其餘的bd,cd,de的閉包不等與r
觀察bcd,bde,cde,得到 bcd,bde的閉包為r
觀察bced,他的閉包是r,但由於包含候選碼bcd,bed,所以他是個超碼,去掉
得到候選碼為ad,bcd,bed
bncf 分解
2.例題 : r(u, f), u(a, b, c, d, e, f), f=
解:依次考察每一條函式依賴,看其是否滿足bncf,若都滿足,則無須分解比如 a->b, a+
^++ = ab != u, 所以a->b不滿足bcnf,所以可以把r分解為兩部分:r1=, r2=, r1只有兩個元素,必定滿足bcnf,所以接下來只看r2,r2對應的函式依賴f2=, 重複之前的步驟即可,對於c->df,c+
^++ = cdf != r2, 不滿足bcnf, 所以分解r2為兩部分:r21=, r22=, 依次下去…
完整步驟:
所以最終的bcnf分解為:
3nf分解
1.r(u, f): u=, f=
解:1.求出候選碼:ab, bc, bd
2.ab->c, ab是候選碼,即滿足3nf;c->d,c不是候選碼,但d包含於r的乙個候選碼bd中,即滿足3nf,d-a類似
3.即r屬於3nf,無須分解
2.r(u,f): u=, f=
解:1.求出候選碼:ab
2.判斷出r不滿足3nf
3.求出r的正則覆蓋fc =
4.分解為 (需要新增候選碼)
3.r(u,f): u=, f=
解:1.求出候選碼:ac, 判斷出r不屬於3nf
2.求出r的正則覆蓋fc =
3.分解為 (無需新增候選碼,因為ace已經包含ac)
資料庫複習 3NF分解演算法
輸入 關係r和其上成立的函式依賴集f。輸出 又r分解出的關係集合,其中每個關係均屬於3nf。分解具有無損鏈結和依賴保持性質。方法 依次執行下列步驟 找出f的乙個最小基本集,記為g。對於g中的每乙個fd x a,將xa作為分解出的某個關係的模式。如果第2步分解出的關係的模式均不包含r的超鍵,則增加乙個...
3NF的無損連線和保持函式依賴的分解
總結 先求最小覆蓋,再求碼,然後根據左部相同原則劃分關係,將上述劃分的再根據是否有包含關係進行合併,最後若關係中包含之前求的碼,那麼這個關係就是要求的分解,否則再加上乙個關係,將碼放入其中。以下 自 例一 設關係模式r a,b,c,d,e 上的函式依賴集f是 1 計算f的最小覆蓋。首先將右部不唯一的...
資料庫中轉化為3NF的幾個分解演算法
例 關係模型r,u f 第一步 首先計算出f的最小依賴集 演算法詳見最小函式依賴 得到f 第二步 觀察u中是否有屬性不在f 中的出現,如果有,則這個個屬性組成一對關係r,並在原來的u中刪除這些屬性。而例子中u中的屬性都出現在f中,則可以跳過這一步。第三步 對f 中的函式依賴,把左邊的相同分為一組,一...