1:什么候選鍵
要是不懂的朋友,但是又迫切想知道但是很懶的不想再查找的呢 可以看這個文章
2:怎么求候選鍵
在求候選鍵之前先要講講閉包:
當然也是這種概念的東西可以參考這個文章、
例(1): 設有關系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},計算(AE)+
解:閉包我覺得就是推關系,看能不能根據給定的元素,推演出全部的元素
在題中,給定了 開始推演的元素 就是AE,
那就從AE開始:
忘了講一個問題: 在上面的題中 A-> D 代表的意思的就是 A能推出B。我們把 A 叫做 前繼 節點。把B叫做 后繼節點
AE 就是 前繼節點的集合 。
(1) 首先,在給定的關系 F 中找 前繼節點有沒有是 前繼節點的子集的。A->D , E->C 就是我們找到的兩個關系式,將找到的兩個關系中的后繼節點(也就是C,D) 并到前繼節點集合中去。則
(2)現在前繼節點的集合就是AECD了
然后繼續 (1)中的步驟,一直到前繼節點集合中的元素是所有節點就好了。則表示為 (AE)? = ACDEI。那(AE)的閉包就是ACEDI
接下來就可以安安心心的將怎么求了?
看題:
例1:R<U,F>,U=(A,B,C,D,E,G),F={AB-->C,CD-->E,E-->A.A-->G},求候選碼。
利用閉包來求解
首先先要講幾個規則
在關系式中 F 隨便一個關系 例如 AB->C 中我們把 講出現在 -> 左邊的節點叫做 左節點。同樣的,在右邊的節點我們叫做右節點。
1. 只在左邊的出現的節點一定存在于中候選鍵。(也就是候選鍵的一個一部分或者全部)
2. 只在右邊出現的節點一定不是候選鍵。(啥都不是,它只能被候選鍵推導出來 。是個鐵廢物)
3. 兩邊都沒有出現的節點,一點存在于候選鍵中。
4. 在左邊出現的節點(除了只在左邊出現的節點,也就是它可能在右邊也出現過)這樣的節點呢?有待觀察。
下面就來解答:
1: 在題中先在到只在左邊出現的元素 ? ? 就是BD
2: BD 肯定是在候選鍵中,那它是不是候選鍵呢?我們利用閉包來檢查一下,(BD)? = BD
現在BD推不出全部的元素
3:現在在繼續看,G ,出現在右邊,那它肯定不是候選鍵
4: 現在找在右邊出現的元素(但是不包含只在右邊出現的元素) 那就是ACE 這三個可能是候選鍵,要檢查檢查,讓他們分別和BD結合,求閉包看能不能推出全部的元素
- 開始檢查:
- ABD, 利用閉包檢查,(ABD)? = ABCDEG
- CBD, 利用閉包檢查 ,(CBD)? = ABCDEG
- BDE, 利用閉包檢查, (BDE)? = ABCDEG
則這個題中的三個候選鍵就是 ABD,CBD,BDE。
OKOK。
參考這個文章、