數據庫求閉包,求最小函數依賴集,求候選碼,判斷模式分解是否為無損連接,3NF,BCNF


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

 

 例(1):   設有關系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},計算(AE)+

 

        解:  (1) 令X={AE},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,b->c,a->d,e->f};由a可直接得到b和d,間接得到c,則a的閉包就是{a,b,c,d}

2.

候選碼的求解理論和算法

  對於給定的關系R(A1,A2,…An)和函數依賴集F,可將其屬性分為4類:

    L類  僅出現在函數依賴左部的屬性。

    R 類  僅出現在函數依賴右部的屬性。

    N 類  在函數依賴左右兩邊均未出現的屬性。

    LR類  在函數依賴左右兩邊均出現的屬性。

  定理:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是L類屬性,則X必為R的任一候選碼的成員。

  推論:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是L類屬性,且X+包含了R的全部屬性;則X必為R的唯一候選碼。

  例(2):設有關系模式R(A,B,C,D),其函數依賴集F={D→B,B →D,AD →B,AC →D},求R的所有候選碼。

         解:考察F發現,A,C兩屬性是L類屬性,所以AC必是R的候選碼成員,又因為(AC)+=ABCD,所以AC是R的唯一候選碼。

  定理:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是R類屬性,則X不在任何候選碼中。

  定理:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是N類屬性,則X必包含在R的任一候選碼中。

  推論:對於給定的關系模式R及其函數依賴集F,若X(X∈R)是L類和N類組成的屬性集,且X+包含了R的全部屬性;則X是R的唯一候選碼。

具體的步驟:

算法描述
(1)將R 的所有屬性分為L、R、LR 和N 四類,並令X 代表L、N 類,Y 代表LR 類。
(2)求X+。若X+包含了R 的全部屬性,則即為R 的唯一候選碼,轉(5);否則,轉(3)。

(3)在Y 中取一屬性A,求(XA)+ ,若它包含了R 的全部屬性,則是候選碼,轉(4);否則,調換一屬性反復進行這一過程,直到試完所有Y 中的屬性。
(4)如果已找出所有候選碼,則轉(5);否則在Y 中依次取2 個、3 個、…,求它們的屬性閉包,若其閉包包含R 的全部屬性,則是候選碼。 

(5)結束。

3.求最小函數依賴集分三步:

1.將F中的所有依賴右邊化為單一元素

此題fd={abd->e,ab->g,b->f,c->j,cj->i,g->h};已經滿足

2.去掉F中的所有依賴左邊的冗余屬性.

作法是屬性中去掉其中的一個,看看是否依然可以推導

此題:abd->e,去掉a,則(bd)+不含e,故不能去掉,同理b,d都不是冗余屬性

ab->g,也沒有

cj->i,因為c+={c,j,i}其中包含i所以j是冗余的.cj->i將成為c->i

F={abd->e,ab->g,b->f,c->j,c->i,g->h};

3.去掉F中所有冗余依賴關系.

做法為從F中去掉某關系,如去掉(X->Y),然后在F中求X+,如果Y在X+中,則表明x->是多余的.需要去掉.

此題如果F去掉abd->e,F將等於{ab->g,b->f,c->j,c->i,g->h},而(abd)+={a,d,b,f,g,h},其中不包含e.所有不是多余的.

同理(ab)+={a,b,f}也不包含g,故不是多余的.

b+={b}不多余,c+={c,i}不多余

c->i,g->h多不能去掉.

所以所求最小函數依賴集為 F={abd->e,ab->g,b->f,c->j,c->i,g->h};

4.判斷模式分解是否為無損連接

方法一:無損連接定理

關系模式R(U,F)的一個分解,ρ={R1<U1,F1>,R2<U2,F2>}具有無損連接的充分必要條件是:

U1∩U2→U1-U€F或U1∩U2→U2 -U1€F+

方法二:算法

ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是關系模式R<U,F>的一個分解,U={A1,A2,...,An},F={FD1,FD2,...,FDp},並設F是一個最小依賴集,記FDi為Xi→Alj,其步驟如下:

① 建立一張n列k行的表,每一列對應一個屬性,每一行對應分解中的一個關系模式。若屬性Aj Ui,則在j列i行上真上aj,否則填上bij

② 對於每一個FDi做如下操作:找到Xi所對應的列中具有相同符號的那些行。考察這些行中li列的元素,若其中有aj,則全部改為aj,否則全部改為bmli,m是這些行的行號最小值。

如果在某次更改后,有一行成為:a1,a2,...,an,則算法終止。且分解ρ具有無損連接性,否則不具有無損連接性。

對F中p個FD逐一進行一次這樣的處理,稱為對F的一次掃描。

③ 比較掃描前后,表有無變化,如有變化,則返回第② 步,否則算法終止。如果發生循環,那么前次掃描至少應使該表減少一個符號,表中符號有限,因此,循環必然終止。

舉例1:已知R<U,F>,U={A,B,C},F={A→B},如下的兩個分解:

① ρ1={AB,BC}

② ρ2={AB,AC}

判斷這兩個分解是否具有無損連接性。

①因為AB∩BC=B,AB-BC=A,BC-AB=C

所以B→A ¢F+,B→C ¢ F+

故ρ1是有損連接。

② 因為AB∩AC=A,AB-AC=B,AC-AB=C

所以A→B €F+,A→C ¢F+

故ρ2是無損連接。

舉例2:已知R<U,F>,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一個分解為R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判斷這個分解是否具有無損連接性。

 ① 構造一個初始的二維表,若“屬性”屬於“模式”中的屬性,則填aj,否則填bij

② 根據A→C,對上表進行處理,由於屬性列A上第1、2、5行相同均為a1,所以將屬性列C上的b13、b23、b53改為同一個符號b13(取行號最小值)。

③ 根據B→C,對上表進行處理,由於屬性列B上第2、3行相同均為a2,所以將屬性列C上的b13、b33改為同一個符號b13(取行號最小值)。

④ 根據C→D,對上表進行處理,由於屬性列C上第1、2、3、5行相同均為b13,所以將屬性列D上的值均改為同一個符號a4

⑤ 根據DE→C,對上表進行處理,由於屬性列DE上第3、4、5行相同均為a4a5,所以將屬性列C上的值均改為同一個符號a3

⑥ 根據CE→A,對上表進行處理,由於屬性列CE上第3、4、5行相同均為a3a5,所以將屬性列A上的值均改為同一個符號a1

⑦ 通過上述的修改,使第三行成為a1a2a3a4a5,則算法終止。且分解具有無損連接性。

5.3NF

第一范式
在任何一個關系數據庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的數據庫就不是關系數據庫。
所謂第一范式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一范式(1NF)中表的每一行只包含一個實例的信息。例如,對於圖3-2 中的員工信息表,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現一次。簡而言之,第一范式就是無重復的列。
第二范式
第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被唯一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。如圖3-2 員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是唯一的,因此每個員工可以被唯一區分。這個唯一屬性列被稱為主關鍵字或主鍵、主碼。
第二范式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那么這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。簡而言之,第二范式就是非主屬性非部分依賴於主關鍵字。
第三范式
滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡而言之,第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在圖3-2的員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三范式(3NF)也應該構建它,否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴於其它非主屬性。
滿足第三范式的條件:
若關系R中存在非平凡FD A1A2A3……An->B,且要么左邊{A1A2A3……An}是超鍵,要么右邊的B屬於某個鍵,則認為關系R屬於第三范式(3NF).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM