1、資料正規化,何謂正規化正規化的步驟欄位相依的用意正規化的另類思考,實體 - 關係圖與正規化的關係,資料表的正規化理論 (Normalization Theory) 其實是一套資料表分割的法則。正規化的目的, 則是要避免資料重複或相互矛盾的情形, 並使資料庫在使用時能更有效率、更容易維護。,資料庫的正規化,資料庫的正規化共可分為 1NF (Normal Form)、2NF、3NF、BCNF (Boyce-Codd Normal Form)、4NF、5NF 等多個階段, 不過對於一般資料庫設計來說, 通常只需要執行到 BCNF 即可, 而其他更高階的正規化只有在特殊的情況下才用得到。在資料表正規化
2、的過程 (1NF 到 BCNF) 中, 每個階段都是以欄位的相依性, 做為分割資料表的依據之一。,資料庫的正規化,欄位相依,在一個資料表中, 若乙欄位的值必須搭配甲欄位才有意義, 則我們說乙欄位相依於甲欄位。舉例來說, 一個員工資料表如下:,欄位相依,正規化基本概念,正規化的過程是循序漸進的, 資料表必須在滿足第一階正規化的條件之下, 才能進行第二階正規化。也就是說, 第二階正規化必須建立在符合第一階正規化的資料表上, 依此類推。而第一階正規化正是所有正規化的基礎。,第一階正規化的規則,如果資料表符合以下條件, 我們就說這個資料表符合第一階正規化的形式(First Normal Form, 簡
3、稱 1NF):資料表中有主鍵, 而其他所有的欄位都相依於主鍵。每個欄位中都只有儲存單一值, 例如姓名欄位中不能存放 2 個人的姓名。資料表中沒有意義相同的多個欄位, 例如姓名1、姓名2.等重複的欄位。,未符合 1NF 資料表的缺點,學號、學生姓名及成績欄的長度無法確定降低存取資料的效率,建構 1NF 資料表的方法,對於不具第一階正規化形式的資料表, 我們可將重複的資料項分別儲存到不同的記錄中, 並加上適當的主鍵:,第二階正規化 (2NF),在執行符合一階正規化的資料表時, 應該會發覺:我們輸入了許多重複的資料。如此, 不但浪費儲存的空間, 更容易造成新增、刪除或更新資料時的異常狀況。所以, 我
4、們必須進行第二階正規化, 來消除這些問題。,第二階正規化的規則,如果資料表符合以下的條件, 我們說這個資料表符合第二階正規化的形式 (Second Normal Form, 簡稱 2NF):符合 1NF 的格式。各欄位與主鍵間沒有部分相依的關係。,第二階正規化的規則,部分相依的問題,新增資料時:若有一個新來的轉學生吳技安, 但還沒有選修任何課程, 那麼它的資料將無法輸入。更改資料時:當我們想要將課程名稱資料庫系統更改為資料庫管理時, 必須搜尋整個資料庫並一一更改, 非常沒有效率。刪除資料時:由於陳鐵雄只修了CS101一門課, 如果將該筆記錄刪除, 那麼陳鐵雄的資料也就跟著消失了。,建構 2NF
5、 資料表的方法,要除去資料表中的部分相依性, 只需將部份相依的欄位分割成另外的資料表即可。例如我們將修課資料表分割成 3 個較小的資料表 (加 * 號的欄位為主鍵):,建構 2NF 資料表的方法,第三階正規化 (3NF),經過了第二階正規化後的資料表, 其實還存在一些問題:在課程資料表中, 如果新來了一位教師甄蒡, 在尚未安排他教授的課程之前, 我們無法輸入該教師的資料。若要刪除影像處理的課程, 勢必會將教授該門課程的教師一併刪除。若要更改影像處理課程的名稱, 則必須同時更改多筆記錄, 造成不便。,第三階正規化的規則,如果資料表符合以下條件, 我們就說這個資料表符合第三階正規化的形式 (Thi
6、rd Normal Form, 簡稱 3NF):符合 2NF 的格式。各欄位與主鍵間沒有間接相依的關係。,第三階正規化的規則,建構 3NF 資料表的方法,要除去資料表中的間接相依性, 其方法和除去部分相依性完全相同。例如課程資料表可再分割成兩個資料表:,與直覺式的分割技巧做比較,Boyce-Codd 正規化 (BCNF),對於大部分資料庫來說, 通常只需要執行到第三階段的正規化即足夠了。如果資料表的主鍵是由多個欄位組成的, 則必須再執行 Boyce-Codd 正規化。,Boyce-Codd 正規化的規則,如果資料表的主鍵只由單一欄位組成, 則符合第三階正規化的資料表, 亦符合 Boyce-Codd 正規化。若資料表的主鍵由多個欄位組成, 則資料表只要符合以下條件, 我們就說這個資料表符合Boyce-Codd 正規化的形式 (Boyce-Codd Normal Form, 簡稱 BCNF):符合 2NF 的格式。各欄位與主鍵沒有間接相依的關係。主鍵中的各欄位不可以相依於其他非主鍵的欄位。,檢驗成績資料表是否滿足 BCNF 規範,我們利用 Boyce-Codd 正規化的條件, 來檢驗主鍵由多個欄位組成的成績資料表:,經過正規化產生的資料表,正規化的另類思考,不必要的分割, 以郵遞區號為例:人工的分割,