Google Search Box

自訂搜尋

Saturday, July 3, 2010

Re: [課業] 資料庫/正規化及推導候選鍵

作者: nonsweet (不甜) 站內: Examination
標題: Re: [課業] 資料庫/正規化及推導候選鍵
時間: Sun Jul 4 11:16:29 2010

※ 引述《nonsweet (不甜)》之銘言:
: R1(A, B, C, D, E, F)
: FD有 {A, B, C}→E;{A, B, C}→D;{A, B, C}→F;D→E;{A, B}→C

: R2(G, H, I, J, K)
: FD有 {G, H}→I;{G, H}→J;{G, H}→K;H→G

: R3(P, Q, S, T)
: {P, Q}→T;{P, Q}→S;T→Q

: R4(T, U, V, X, Y, Z)
: {T, U, V}→X;{T, U, V}→Y;{T, U}→Z

: (二) R1、R2、R3、R4分別不滿足那個正規化(Normal Form)?
: (三) R1、R2、R3、R4分別應如何更改,使之滿足BCNF(Boyce-Codd Normal Form)?

我又重新看了一下正規化的定義,順便再次整理答案:

R1候選鍵:{A, B}
R2候選鍵:{H}
R3候選鍵:{P, Q}和{P, T} (候選鍵不是唯一,且具有共同屬性)
R4候選鍵:{T, U, V}

原本我的認知是,如果存在FD的左邊是非候選鍵,右邊是非鍵屬性,
則這個表格不符合3NF。
也就是說,符合3NF的表格,FD左邊應該是候選鍵。

但後來我努力查書 + google 3NF的定義,
發現符合3NF的表格,FD左邊為超級鍵(super key),
如果存在FD左邊是非超級鍵,右邊是非鍵屬性,
即不符合3NF。

至於BCNF則規定,FD左邊一定是超級鍵,
如果存在FD左邊是非超級鍵,則不符合BCNF。

簡單來說,候選鍵是最小的超級鍵,
由於之前我都是以候選鍵來答題,
所以有些地方有點卡卡的,使得答案有點怪異。

如果依照上述定義下去檢視這四張表格:

R1:不符合3NF,因為D→E。(D非超級鍵,E為非鍵屬性)
不符合BCNF,因為D→E。(D非超級鍵)

R2:已符合3NF和BCNF,因為{G, H}和{H}都是超級鍵。
(討論:雖然超級鍵不唯一,但對所有FD Left→Right而言,Left都是超級鍵)

R3:若選{P, Q}為候選鍵,不符合3NF,因為T→Q。(T非超級鍵,Q為非鍵屬性)
若選{P, T}為候選鍵,不符合2NF,因為T→Q。(T為候選鍵子集合,Q為非鍵屬性)
不符合BCNF,因為T→Q。(T非超級鍵)

R4:不符合2NF,因為{T, U}→Z。({T, U}為候選鍵子集合,Z為非鍵屬性)
不符合BCNF,因為{T, U}→Z。({T, U}非超級鍵)

以下對四張表格進行正規化,使之符合BCNF:

1. R1中不符合之FD:D→E。
利用Heath's定理分割表格:
R11(A, B, C, D, F),主鍵為{A, B}。
R122(D, E),主鍵為{D}。

2. R2已符合BCNF,因此不用分割表格。
R2(G, H, I, J, K),主鍵為{H}。

3. R3中不符合之FD:T→Q。
利用Heath's定理分割表格:
R31(P, T, S),主鍵為{P, T}。
R32(T, Q),主鍵為{T}。

4. R4中不符合之FD:{T, U}→Z。
利用Heath's定理分割表格:
R41(T, U, V, X, Y),主鍵為{T, U, V}。
R42(T, U, Z),主鍵為{T, U}。

1 comment:

  1. 推 kisha024:R11去掉 只留R121 R122,R12主鍵改{A,B} 220.129.10.199 07/03 22:46
    → kisha024:不知道可不可以? 220.129.10.199 07/03 22:46
    → kisha024:是 R121主鍵改{A,B} 打錯 抱歉 220.129.10.199 07/03 22:47
    → nonsweet:其實對於R1的答案我也不是非常確定, 220.133.50.57 07/04 00:53
    → nonsweet:正規化的觀念還不夠清楚^^" 不過目前的 220.133.50.57 07/04 00:53
    → nonsweet:表格都有符合候選鍵唯一的條件,只是我也 220.133.50.57 07/04 00:54
    → nonsweet:R11和R121是不是可以合併這樣,因為{A,B} 220.133.50.57 07/04 00:55
    → nonsweet:也能推導到D和F,我可能要再想想^^" 220.133.50.57 07/04 00:56
    推 zadpos:昨天我好像說錯了~今天又看了一下... 123.193.229.30 07/04 09:14
    → zadpos:R1應該不符合3NF..而且(A,B)->(C,D,E,F) 123.193.229.30 07/04 09:16
    → zadpos:所以R11(A,B,C,D,F) R12(D,E) (A,B)為PK 123.193.229.30 07/04 09:17
    → zadpos:這題有(A,B)->C..所以就有點怪..如果是 123.193.229.30 07/04 09:31
    → zadpos:改為(A,B)->D.再去掉(A,B,C)->D會比較好吧 123.193.229.30 07/04 09:36
    → nonsweet:這樣R2好像有點問題..我再修改一下 220.133.50.57 07/04 11:49

    ReplyDelete