當資料庫綱要設計完成後,要如何檢視設計是否得當,這時候就需要使用正規化 ( Normal Form ) 的方法論了。對於有經驗的資料庫管理師,當資料庫綱要設計完成後,幾乎就符合實務上的需求,所以有很多人就忽略了正規化作業的處理。實際上經過正規化處理 的資料庫綱要,一般而言就可以達到優良資料庫綱要的最低標準,所以正規化的處理是有必要的。
正規化的目的是什麼呢,簡單的說就是避免資料重複的狀況發生,試想當客戶名稱出現在不同表格 ( Table ) 時,當客戶名稱變更時,必須同步更改數個表格,不僅會增加應用系統撰寫的負擔,同時也會增加資料庫的處理負擔,所以避免資料重複是一件很重要的工作。
相對的執行效能因為正規化的關係,會受到些許的影響。因為要取得相關資料的時候,必須到另一個表格才可以取得,當相對的表格數量很多的時候,就必 須花較長的時間才可以取得完整的資料。在一般的狀況下,屬於 OLTP 的系統就應該要做資料庫綱要正規化,如果是屬於 OLAP 的系統就視情況而定了。
正規化的步驟如下:
- 第一正規化 ( First Normal Form,簡稱 1NF ):由 E.F.Codd 提出。
- 第二正規化 ( Second Normal Form,簡稱 2NF ):由 E.F.Codd 提出。
- 第三正規化 ( Third Normal Form,簡稱 3NF ):由 E.F.Codd 提出。
- Boyce/Codd 正規化 ( Boyce/Codd Normal Form,簡稱 BCNF ):由 R.F. Boyce 與 E.F.Codd 共同提出。
- 第四正規化 ( Fourth Normal Form,簡稱 4NF ):由 R. Fagin 提出。
- 第五正規化 ( Fifth Normal Form,簡稱 5NF ):由 R. Fagin 提出。
在上述正規化的步驟中,後面的正規化一定會包含前面的正規化,例如符合 3NF 的資料庫綱要,一定會符合 1NF、2NF。
以下介紹 1NF、2NF、3NF、BCNF 的正規化的目的,如果不符合的話就必須將表格做適當的拆解,以符合每一個正規化的目的。由於不符合 4NF、5NF 的機會較低,在這裡就不多做介紹了。
第一正規化:每個一表格都會有一個 PK ( Primary Key ),同時每一個表格 ( Table ) 中的每一列 ( Row ) 的每一欄 ( Column ),都只能存放一個資料。
第二正規化:在表格中的每一個不是 PK 的欄位都只能與 PK 有相依性。
第三正規化:在表格中的每一個不是 PK 的欄位都必須與完整的 PK 有相依性。
BCNF:如果 PK 為單一欄位時,就不需要考慮這個狀況了。也就是當 PK 為複合欄位時,必須逐一檢視 PK 中每一個單獨的欄位是否與其他欄位有相依性的關係,如果有的話就必須進一步拆解表格。
本則專題由飛達客工作室提供