在教學中,大多實例都是主鍵由一列構(gòu)成,所以也可以簡單地說主屬性與主鍵沒有什么區(qū)別。
第三范式的定義:如果關(guān)系模式R中的所有非主屬性對任何候選關(guān)鍵字都不存在傳遞依賴,則稱關(guān)系R是屬于第三范式的。記作R 3NF。
如:學生關(guān)系模式S1(學號,姓名,系號,系名,系地址)
(學號)為關(guān)鍵字,因是單屬性關(guān)鍵字,不存在部份依賴問題,應(yīng)屬于第二范式。但因為:學號—>系號,系號—\>學號,系號—>系地址,因此:學號—>系地址 是通過傳遞依賴實現(xiàn)的。即候選關(guān)鍵字“學號”不直接函數(shù)決定于非主屬性“系地址”。所以此關(guān)系不屬于第三范式。應(yīng)將其分解為:
SC(學號,姓名,系號)
D(系號,系名,系地址)
C(課程號,課程名,學分)
S(學號,課程號,成績)
設(shè)計原則:“一事一地”,即一個關(guān)系反映一個實體或一個聯(lián)系,不應(yīng)把幾樣東西混合放在一起。基本關(guān)系模式切忌“大而全”,在若干個基本關(guān)系模式組成的關(guān)系模型上,根據(jù)需要可以通過自然聯(lián)接導(dǎo)出所需要的關(guān)系。
BCNF的定義:如果一個關(guān)系R中的所有屬性都不傳遞依賴于R的任何候選關(guān)鍵字,或者說關(guān)系R中的每個決定因數(shù)都是候選關(guān)鍵字時,則稱關(guān)系R屬于BCNF范式,記作R BCNF。
一個滿足BCNF的關(guān)系模式有
1.所有非主屬性對每一個碼都是完全函數(shù)依賴。
2.所有的主屬性對每一個不包含它的碼,也是完全函數(shù)依賴。
3.沒有任何屬性完全函數(shù)依賴于非碼的任何一組屬性。
由于RBCNF,按定義排除了任何屬性對碼的傳遞依賴與部分依賴,所以R3NF。但是若R3NF,則R未必屬于BCNF。
下面用幾個例子說明屬于3NF的關(guān)系模式有的屬于BCNF,但有的不屬于BCNF。
詳細信息...
例l 關(guān)系模式SJP(S,J,P)中,S是學生,J表示課程,P表示名次。每一個學生選修每門課程的成績有一定的名次,每門課程中每一名次只有一個學生(即沒有并列名次)。由語義可得到下面的函數(shù)依賴:
(S,J)→P ,(J,P)→S
所以(S,J)與(J,P)都可以作為候選碼。這兩個碼各由兩個屬性組成,而且它們是相交的。這個關(guān)系模式中顯然沒有屬性對碼傳遞依賴或部分依賴。所以SJP3NF,而且除(S,J)與(J,P)以外沒有其它決定因素,所以SJPBCNF。
例2 關(guān)系模式STJ(S,T,J)中,S表示學生,T表示教師,J表示課程。每一教師只教一門課。每門課有若干教師,某一學生選定某門課,就對應(yīng)一個固定的教師。由語義可得到如下的函數(shù)依賴。
(S,J)→T;(S,T)→J;T→J。
這里(S,J),(S,T)都是候選碼。
STJ是3NF,因為沒有任何非主屬性對碼傳遞依賴或部分依賴。但STJ不是BCNF關(guān)系,因為T是決定因素,而T不包含碼。
3NF的“不徹底”性表現(xiàn)在可能存在主屬性對碼的部分依賴和傳遞依賴。非BCNF的關(guān)系模式也可以通過分解成為BCNF。例如STJ可分解為ST(S,T)與TJ(T,J),它們都是BCNF。
一個模式中的關(guān)系模式如果都屬于BCNF,那么在函數(shù)依賴范疇內(nèi),它已實現(xiàn)了徹底的分離,已消除了插入和刪除的異常。
關(guān)系模式規(guī)范化小結(jié)
目的:規(guī)范化的目的是使結(jié)構(gòu)合理,消除存儲異常,使數(shù)據(jù)冗余盡量小,便于插入、刪除和更新。
原則:遵從概念單一化“一事一地”的原則,即一個關(guān)系模式描述一個實體或?qū)嶓w間的一種聯(lián)系。規(guī)范的實質(zhì)就是概念單一化。
方法:將關(guān)系模式投影分解成兩個或兩個以上的關(guān)系模式。
要求:分解后的關(guān)系模式集合應(yīng)當與原關(guān)系模式“等價”,即經(jīng)過自然聯(lián)接可以恢復(fù)原關(guān)系而不丟失信息,并保持屬性間合理的聯(lián)系。