Re: [考題] 資料庫主鍵問題
※ 引述《Sunofgod ( )》之銘言:
: 題目來自101國營資訊專業科目非選擇題
: http://ppt.cc/V4oO 公職王的擬答
: Joe 的公司有3 名員工及3 個部門。員工分別是Bob、Joe 及Mary(按字母順序排序)
: 部門分別是HR MIS Sale(按字母順序)。其中Bob屬HR部門 Joe屬MIS部門 Mary為新進同仁
: 尚未有部門 Sale部門則無員工
: 資料塑模中建立兩個關聯 員工任務及部門
: 用來紀錄員工任務及隸屬部門。
: 員工任務的關聯綱目為 員工任務(EID,EName,DID,JobID,JName,Title,Salary)
: ,函數相依如下 EID-->{EName,DID,JobID}
: JobID-->JName
: {EID,Title}-->Salary
: 部門的關聯綱目為 部門(DID,DName) 主鍵為DID
: 員工任務.DID 參照 部門.DID
: Mary因不屬於任何部門 故DID為NULL
: (一)員工任務的主鍵為?
: (二)請將員工任務分解成滿足3NF的關聯綱目,並指出各綱目主鍵
: 查到的答案為EID
: 但我想問為什麼{EID,Title}不行?
: 很弱的問題 請多多包涵
我廢話比較多用回文比較快...。
你仔細看關聯表跟列舉的相依關係
會發現沒有任何項目可以決定Title與EID
所以實際上應該是EID, Title可以決定所有項目
所以aids講的是對的
你的認為也是對的
可是網路上的解答,這題,是錯的。
然後...
EID Title 兩個屬性可以決定整個關聯表屬性,且無其他多餘(非鍵值)屬性
這是主鍵沒錯
主鍵應該要滿足兩個條件,最小性或者最簡性,以及唯一性,然後從候選鍵中被選出
(如果有候選鍵的話啦)
假設你把其他亂七八糟的非鍵值屬性都扔進去...
的確照你的理解是一樣可以決定關聯表內其他值沒錯
實際上也有這種狀況,但不叫主鍵
比如說R(a,b) 裡面
已知相依關係a->b
所以a->ab是成立的
當然ab->b或者ab->ab也都成立
但b->b與a->a,兩個拆出來看根本廢話(攤手)
這是理所當然的吧?
所以當你把所有廢話全部刪掉之後,就會得到最簡表示相依關係,a->b,於是a為主鍵
那一定要把非鍵值屬性加進去的狀況下有沒有?
有阿,超鍵。
我另外舉一個例子
R(a,b,c)
a->b, b->c
很明顯a是主鍵屬性
abc中有遞移關係,但別管他
這時候我們可以很清楚的判斷a->{a,b,c}是可以成立的
當然,ab->{a,b,c}與abc->{abc}也一樣都成立
所以ab是超鍵之一,abc也一樣是超鍵之一
同樣的a也是超鍵。
你可以找一下超鍵,候選鍵,主鍵的定義
Google就有
超鍵是「只要可以表達決定整個關聯,他就是超鍵」
候選鍵是「要滿足超鍵條件,同時無多餘非鍵值屬性」
主鍵是「要滿足候選鍵。」
然後所謂的非鍵值屬性就是多餘屬性
所謂的鍵值,就是可以成為超鍵、候選鍵、主鍵的集合
上面那一句所講的集合...
舉例來說大概像這樣
R(a,b,c)
a->b, b->c
超鍵值可以是a, ab, abc,這時候a是超鍵值1 , ab 是超鍵值二,abc 是超鍵值三
鍵值可以是複合值組
屬性不行,除非你不滿足第一正規化才會有複合屬性
這樣,okeydoke?
P.S. 定義要看清楚,每個字每個符號都請了解意思...
今年高考好像滿多人因為定義的關係痛失分數...orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.111.51.2
→
08/29 18:57, , 1F
08/29 18:57, 1F
→
08/29 19:05, , 2F
08/29 19:05, 2F
推
08/29 19:48, , 3F
08/29 19:48, 3F
→
08/29 19:55, , 4F
08/29 19:55, 4F
→
08/29 19:58, , 5F
08/29 19:58, 5F
→
08/29 19:58, , 6F
08/29 19:58, 6F
→
08/29 20:03, , 7F
08/29 20:03, 7F
→
08/29 20:05, , 8F
08/29 20:05, 8F
→
08/29 20:06, , 9F
08/29 20:06, 9F
→
08/29 23:28, , 10F
08/29 23:28, 10F
討論串 (同標題文章)