SQL Series
資料庫學習一 資料庫導論: https://blog.yexca.net/archives/86
資料庫學習二 關聯式模型: https://blog.yexca.net/archives/87
資料庫學習三 SQL 語言: https://blog.yexca.net/archives/88
資料庫學習四 關聯式資料庫理論: https://blog.yexca.net/archives/89
資料庫學習五 範式: 本文
資料庫學習六 資料庫設計: https://blog.yexca.net/archives/91
資料庫學習七 資料庫的控制功能: https://blog.yexca.net/archives/92
關聯式資料庫中的關聯必須滿足一定的正規化要求,對於不同的正規化程度可以使用範式來衡量。目前主要有 6 種範式:1NF、2NF、3NF、BCNF、4NF 和 5NF
滿足最低要求的稱為 1NF,在 1NF 基礎上進一步滿足一些要求的為 2NF,以此類推。在這些範式中,最重要的是 3NF 和 BCNF,它們是進行正規化的主要目標
一個低階範式的關聯式模式,透過模式分解可以轉換為若干個高階範式的關聯式模式的集合,這個過程稱為正規化
第一正規化範式 (1NF)
定義:假設 R 是一個關聯式模式,R 屬於第一正規化範式,若且唯若 R 中每一個屬性 A 的值域只包含原子項,即不可分割的資料項
1NF 無法排除資料冗餘、更新 (插入、刪除) 異常和修改複雜等問題,因為其中可能存在部分函數依賴
第二正規化範式 (2NF)
定義:假設 R 是一個關聯式模式,R 屬於第二正規化範式,若且唯若 R 是 1NF,且每個非主屬性都完全依賴於候選鍵
屬於 2NF 的關聯式模式 R 也可能存在資料冗餘和更新異常等問題,因為其中可能存在遞移函數依賴
第三正規化範式 (3NF)
定義:假設 R 是一個關聯式模式,R 屬於第三正規化範式,若且唯若 R 是 2NF,且每個非主屬性都非遞移依賴於候選鍵
屬於 3NF 的關聯式模式 R 可能存在主屬性對鍵的部分依賴和遞移依賴
BC 正規化範式 (BCNF)
定義:假設 R 是一個關聯式模式,F 是它的依賴集,R 屬於 BCNF,若且唯若 R 是 3NF,且 F 中每個依賴的決定因素必定包含 R 的某個候選鍵
由 BCNF 的定義可以得到結論,一個滿足 BCNF 的關聯式模式有:
- 所有非主屬性對每一個鍵都是完全函數依賴
- 所有的主屬性對每一個不包含它的鍵,也是完全函數依賴
- 沒有任何屬性完全函數依賴於非鍵的任何一組屬性
一個滿足 BCNF 的關聯式模式 R 已消除了插入和刪除異常
只有兩個屬性的關聯式模式一定是 BCNF
第四正規化範式 (4NF)
定義:假設有一個關聯式模式 R<U, F> 是 1NF,如果對於 R 的每個非平凡多值依賴 X →→ Y (Y ⊈ X),X 都包含了 R 的一個候選鍵,則稱 R 是第四正規化範式
- 多值依賴
給定的關聯式模式 R<U, F>,有 X、Y、Z 是 U 的子集,並且 Z = U - X - Y,關聯式模式 R 中的多值依賴 X →→ Y 成立,若且唯若對 R 的任一關聯 r,給定一對 (x, z) 值,有一組 Y 的值,這組值僅僅決定於 x 值而與 z 值無關
- 平凡的多值依賴
若以上多值依賴的定義中有 X →→ Y 成立,而且 Z 為空集,則稱 X →→ Y 為平凡的多值依賴
範式總結
- 1NF(第一正規化範式)
所有欄位值都是不可分解的原子值
- 2NF(第二正規化範式)
不包含非主屬性對鍵的部分函數依賴,一個資料表只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中
- 3NF(第三正規化範式)
不包含非主屬性對鍵的遞移函數依賴,確保資料表中每一欄資料都和主鍵直接相關,而不能間接相關
- BCNF(BC 正規化範式)
消除每一屬性對候選鍵的遞移依賴,BCNF 是修正的 3NF
1NF → 2NF:消除非主屬性對鍵的部分函數依賴
2NF → 3NF:消除非主屬性對鍵的遞移函數依賴
3NF → BCNF:消除主屬性對鍵的部分和遞移函數依賴
BCNF → 4NF:消除非平凡且非函數依賴的多值依賴
候選鍵都是單個屬性至少是 2NF
關聯式模式的分解
對於存在資料冗餘、插入異常、刪除異常問題的關聯式模式,應採取一個關聯式模式分解為多個關聯式模式的方法進行處理,相對地,原來儲存在一個二維表內的資料就要分散到多個二維表中,要使這個分解有意義,最基本的要求是後者不能遺失前者的資訊
在分解處理中會涉及一些新問題,為使分解後的模式保持原模式所滿足的特性,其基本要求是模式分解具有無損連接性和保持函數依賴性
無損連接
無損連接指的是對關聯式模式分解時,原關聯式模式下任一合法的關聯實例在分解之後應能透過自然連接運算恢復起來
即分解後的關聯透過自然連接可以恢復為原關聯
保持函數依賴
做模式分解後的 F’ (各個子模式函數依賴的聯集) 是否與 F (原有的函數依賴集) 等價,F’ 包含所有的 F 中的函數依賴則可以得出保持函數的依賴性 (充分條件)
即分解後依賴不變
參考: 模式分解保持函數依賴判斷——資料庫考試複習_guoyp2126的博客-CSDN博客
已知 R (ABCDEGH), F={A->D, E->D, D->B, BC->D,DC->A}, 求保存函數依賴的 3NF 分解
1)求出最小函數依賴集
2)把不在 F 裡面的屬性都找出來,單獨分一類
3)把每一個依賴左邊相同的分成一類,沒有一樣的,那麼就把 A->D 改為{AD}, 如果一樣{A->B,A->C}那麼就改為{ABC}
4)如果候選鍵沒出現在分離裡面,把任意一個候選鍵作為一類
最小函數依賴集 Fmin={A->D, E->D, D->B, BC->D, DC->A}
GH 沒在 F 裡面,單獨一類{GH}
候選鍵:CE
AE
{AD}{ED}{DB}{BCD}{DCA}{CE}{GH}