簡介
關係模式R<U,F> 中若不存在這樣的碼X、屬性組Y及非主屬性Z(Z (強制依賴)Y),使得X→Y,Y→Z,成立,Y→X不成立,則稱R<U,F> ∈ 3NF。
若R∈3NF,則R的每一個非主屬性既不部分函式依賴於候選碼也不傳遞函式依賴於候選碼。
如果R∈3NF,則R也是2NF。
採用投影分解法將一個2NF的關係分解為多個3NF的關係,可以在一定程度上解決原2NF關係中存在的插入異常、刪除異常、數據冗餘度大、修改複雜等問題。
將一個2NF關係分解為多個3NF的關係後,並不能完全消除關係模式中的各種異常情況和數據冗餘。
詳細信息
例:如S1(SNO,SNAME,DNO,DNAME,LOCATION) 各屬性分別代表學號,姓名,所在系,系名稱,系地址。
關鍵字SNO決定各個屬性。由於是單個關鍵字,沒有部分依賴的問題,肯定是2NF。但這關係肯定有大量的冗餘,有關學生所在的幾個屬性DNO,DNAME,LOCATION將重複存儲,插入,刪除和修改時也將產生類似以上例的情況。
原因:關係中存在傳遞依賴造成的。即SNO -> DNO。 而DNO -> SNO卻不存在,DNO -> LOCATION, 因此關鍵字 SNO 對 LOCATION 函式決定是通過傳遞依賴 DNO -> LOCATION 實現的。也就是說,SNO不直接決定非主屬性LOCATION。
解決目地:每個關係模式中不能留有傳遞依賴。
解決方法:分為兩個關係 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
注意:關係S中不能沒有外關鍵字DNO。否則兩個關係之間失去聯繫。
將第一範式,第二範式化為第三範式的步驟:
(1)求出R的最小函式依賴集Fmin
(2)找出不在Fmin中出現的屬性,並將這些屬性從R中去掉,構成一個關係模式
(3)若Fmin中有一個函式依賴涉及R的全部屬性,則R不能分解
(4)否則,若Fmin中有X->A,則分解應包含{XA};若有X->A1,X->A2....X->An均屬於Fmin,則分解應包含{XA1A2...An}