資料庫規範化理論 求候選鍵

2021-08-21 08:25:17 字數 3816 閱讀 2618

1、概念型演算法

f 的閉包:

在關係模式

r,f>中為f

所邏輯蘊含的函式依賴的全體叫作

f的閉包,記為f+

。屬性集

x 關於函式依賴集

f 的閉包:

設f 為屬性集

u 上的一組函式依賴,

x í u ,

xf+ =

,xf+ 稱為屬性集

x 關於函式依賴集

f 的閉包.

演算法求屬性集 

x( x

í u )關於 u

上的函式依賴集 f 

的閉包 xf+

輸入: x

, f         

輸出: xf

+步驟:

( 1 )令 x

( 0 ) =x , i

=0( 2 )求 b

,這裡 b

=  ;

( 3 ) x

( i+1 ) =b ∪ x

( i )

( 4 )判斷 x

( i+1 ) = x ( i )嗎 ?

( 5 )若相等或 x

( i ) =u , 則 x

( i )就是 xf

+ , 演算法終止。

( 6 )若否,則 i

=i +l ,返回第( 2 )步。

2、通俗演算法

以下是寫的比較科學規範的閉包求解方法,設x和y均為關係r的屬性集的子集,f是r上的函式依賴集,若對r的任一屬性集b,一旦x→b,必有b⊆y,且對r的任一滿足以上條件的屬性集y1 ,必有y⊆y1,此時稱y為屬性集x在函式依賴集f下的閉包,記作x+。 

計算關係r的屬性集x的閉包的步驟如下: 

第一步:設最終將成為閉包的屬性集是y,把y初始化為x; 

第二步:檢查f中的每乙個函式依賴a→b,如果屬性集a中所有屬性均在y中,而b中有的屬性不在y中,則將其加入到y中; 

第三步:重複第二步,直到沒有屬性可以新增到屬性集y中為止。 最後得到的y就是x+

例(1):   設有關係模式r(u,f),其中u=,f=,計算(ae)+

解:  (1) 令x=,x(0)=ae

(2)在f中尋找尚未使用過的左邊是ae的子集的函式依賴,結果是: a→d, e→c;所以 x(1)=x(0)dc=acde, 顯然 x(1)≠x(0).

(3) 在f中尋找尚未使用過的左邊是acde的子集的函式依賴, 結果是: cd→i;所以 x(2)=x(1)i=acdei。雖然x(2)≠x(1),但f中尋找尚未使用過函式依賴的左邊已經沒有x(2)的子集,所以不必再計算下去,即(ae)+=acdei。

說白話一點:閉包就是由乙個屬性直接或間接推導出的所有屬性的集合。

例如:f=;由a可直接得到b和d,間接得到c,則a的閉包就是

難點:1、畫函式依賴圖不能畫錯;

2、沒有入度為0的屬性或入度為0不能遍歷全圖時較難。

3、如何定義「能正常遍歷圖中所有節點」?當存在多個屬性共同決定某屬性時,存在歧義易錯。例架構師考試2009題26

需要注意問題:

1、圖中第二條:「若能正常遍歷圖中所有節點」指的是該屬性集合加起來能遍歷全圖。舉例:設u=,假設零入度的有c和d,c為起點能遍歷b、a、e。d為起點能遍歷a、e。c和d加起來能遍歷所有,故cd集合為候選碼。

結論:是一種快速演算法,但由於難點3,不屬於一種比較嚴謹的演算法。可作為一種參考,若題目較複雜,不建議採用。

以下兩個演算法都是基於閉包演算法的,思路略有差異,演算法基本相同。

演算法1:理論

首先對於給定的r(u)和函式依賴集f,可以將它的屬性劃分為4類:

l類,僅出現在f的函式依賴左部的屬性。 

r類,僅出現在f的函式依賴右部的屬性。  

n類,在f的函式依賴左部和右部均未出現的屬性。 

lr類,在f的函式依賴左部和右部兩部均出現的屬性。  

根據以下定理和推論來求解候選碼。  

定理1:對於給定的關係模式r及其函式依賴集f,若x(x∈r)是l類屬性,則x必為r的任一候選碼的成員。 

推論1:對於給定的關係模式r及其函式依賴集f,若x(x∈r)是l類屬性,且x+包含了r的全部屬性,則x必為r的唯一候選碼。  

定理2:對於給定的關係模式r及其函式依賴集f,若x(x∈r)是r類屬性,則x不在任何候選碼中。  

定理3:設有關係模式r及其函式依賴集f,如果x是r的n類屬性,則x必包含在r的任一候選碼中。  

推論2:對於給定的關係模式r及其函式依賴集f,如果x是r的n類和l類組成的屬性集,且x+包含了r的有屬性,則x是r的唯一候選碼。  

例:如設有關係模式r(u),其函式依賴集為f,其中:  

u=, f= 

求r的候選碼。  

解:根據函式依賴可得:  

屬性b、d為l類,e為n類,因此屬性b、d、e必為候選碼的成員,且此三個屬性的閉包:b+=abc,(bd)+=abcd,(bde)+=abcde,根據推論2可得bde是r的唯一候選碼。所以r的候選碼為bde。 如果把例題中關係模式r(u)中的屬性e去掉,那麼再求r的候選碼的話可以根據推論1得出bd為r的唯一候選碼。  

快速求解方法適用於判斷有屬性是屬於l類、n類或其中一種的情況下求解。如果有l類和n類的屬性,則求解候選碼速度非常快。  

簡而言之:l、r、n、lr類。根據定理,l、n類必為侯選碼之一,如果l+包含全部r,則l為唯一侯選。r類不在任何侯選碼中。l+n類且(l+n)+包含所有r,則l+n為唯一侯選。(適於有l、n類至少一種的情況。) 

演算法2:較通俗

在學習資料庫的時候,經常要碰到候選鍵的求取,但是一開始的時候,根本搞不清楚怎麼去求,最近看了一些文章和資料,終於搞明白了。

首先來看候選鍵的定義:若關係中的某一屬性組的值能唯一地標識乙個元組,則稱該屬性組為候選鍵。

若w是候選鍵,則必須滿足兩個條件:w的閉包是u;w沒有冗餘。

設關係模式r中u=abc.......等n個屬性,u中的屬性在fd中有四種範圍:

(1)左右出現;

(2)只在左部出現;

(3)只在右部出現;

(4)不在左右出現;

演算法:按以下步驟求候選鍵:

1.只在fd右部出現的屬性,不屬於候選碼;

2.只在fd左部出現的屬性,一定存在於某候選碼當中;

3.外部屬性一定存在於任何候選碼當中;

4.其他屬性逐個與2,3的屬性組合,求屬性閉包,直至x的閉包等於u,若等於u,則x為候選碼。

例1:r,u=(a,b,c,d,e,g),f=,求候選碼。

因g只在右邊出現,所以g一定不屬於候選碼;而b,d只在左邊出現,所以b,d一定屬於候選碼;bd的閉包還是bd,則對bd進行組合,除了g以外,bd可以跟a,c,e進行組合

先看abd

abd本身自包abd,而ab-->c,cd-->e,a-->g,所以abd的閉包為abdceg=u

再看bdc

cd-->e,e-->a,a-->g,bdc本身自包,所以bdc的閉包為bdceag=u

最後看bde

e-->a,a-->g,ab-->c,bde本身自包,所以bde的閉包為bdeagc=u

因為(abd)、(bcd)、(bde)的閉包都是abcdeg所以本問題的候選碼有3個分別是abc、bcd和bde

例2:r,u=(a,b,c),f=,求候選碼。

因為a只出現在左邊,所以a一定是候選鍵。a的閉包還是a,則對a進行組合,可以和b,c進行組合。

首先看ab,ab本身自包ab,而ab-->c,所以ab的閉包是abc=u。

再看ac,ac本身自包ac,而c-->b,所以ac的閉包是abc=u。

因為ab,ac的閉包都是abc,也就是u,所以候選鍵是ab,ac。

結論:演算法一可作參考,不宜採用。演算法二.2推薦採用。考試時由於題目只會出現在選擇題,可以結合排出法、倒推(算閉包法)得出答案。

資料庫規範化理論 模式分解

先上傳乙個導圖作為整體概況 背景和保持函式依賴分解,有導圖就不再贅述,下面主要說說有損無損的判斷方法 通過題目說明 法展示 1.畫出 2.通過函式依賴把a和b調換位置 比如在分解後的成績表中 學號 姓名 可將b12改為a2,以次判斷分解三種模式,得出下列結果 當成績一行包含了所有的屬性後,即全部變為...

資料庫複習之規範化理論

宣告 本文為作者複習資料庫課程時簡單記錄的筆記,如有錯誤之處,敬請指出,謝謝。1.乙個關係模式是乙個五元組,形如r u,d,dom,f 其中d dom與模式設計關係不大,可以看作三元組r。2.資料依賴 乙個關係內部屬性與屬性之間的一種約束關係。最重要的是函式依賴 fd 和多值依賴 mvd 還有乙個叫...

資料庫規範化

規範化 normalization 是資料庫系統設計中非常重要的乙個技術。資料庫規範化能夠讓資料庫設計者更好地了解組織內部當前的資料結構,最終得到一系列的資料實體。資料庫規範化通過對資料庫表的設計,可以有效降低資料庫冗餘程度。在進行資料庫規範化的時候,我們有一系列的步驟需要遵循。我們把這些步驟稱作正...