數據庫求閉包,求最小函數依賴集,求候選碼,判斷模式分解是否爲無損鏈接,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。spa

 

         例如:f={a->b,b->c,a->d,e->f};由a可直接獲得b和d,間接獲得c,則a的閉包就是{a,b,c,d}3d

2.blog

候選碼的求解理論和算法class

  對於給定的關係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上第一、二、5行相同均爲a1,因此將屬性列C上的b13、b23、b53改成同一個符號b13(取行號最小值)。

③ 根據B→C,對上表進行處理,因爲屬性列B上第二、3行相同均爲a2,因此將屬性列C上的b13、b33改成同一個符號b13(取行號最小值)。

④ 根據C→D,對上表進行處理,因爲屬性列C上第一、二、三、5行相同均爲b13,因此將屬性列D上的值均改成同一個符號a4

⑤ 根據DE→C,對上表進行處理,因爲屬性列DE上第三、四、5行相同均爲a4a5,因此將屬性列C上的值均改成同一個符號a3

⑥ 根據CE→A,對上表進行處理,因爲屬性列CE上第三、四、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).

相關文章
相關標籤/搜索