引言
資料庫規範化是資料庫管理領域中一個關鍵概念。它是一種透過減少資料冗餘並提升資料完整性來優化資料庫結構的過程。規範化是一套規則與指南,可幫助有效組織資料,並防止常見的資料異常,例如更新異常、插入異常和刪除異常。
在本文中,我們將深入探討資料庫規範化的基礎知識、各種規範形式,並提供實用範例來說明每一層規範化的內容。
為什麼要規範化資料庫?
在深入探討資料庫規範化的細節之前,了解其必要性至關重要。規範化具有多項優勢:
- 資料完整性: 規範化透過減少冗餘來幫助維持資料的準確性與一致性。當資料以非重複的方式儲存時,較不容易產生錯誤。
- 高效儲存: 經規範化的資料庫通常佔用較少的儲存空間,因為重複資料已被最小化,從而降低了整體儲存成本。
- 查詢優化: 在規範化的資料庫中,查詢會變得更有效率,因為它們只需存取較小且結構良好的表格,而非大型的非規範化表格。
- 彈性: 規範化的資料庫在應對資料需求或商業規則變更時更具彈性。
規範化的層級
資料庫規範化通常被分為幾個層級,稱為規範形式。最常見的規範形式包括:
- 第一規範形式(1NF): 確保表格中的每一欄都包含原子且不可再分的值。不得存在重複群組,且每一欄都應有唯一的名稱。
- 第二規範形式(2NF): 基於1NF,2NF消除了部分依賴。若表格符合1NF,且所有非鍵屬性均完全依賴於整個主鍵,則該表格即為2NF。
- 第三規範形式(3NF): 基於2NF,3NF消除了傳遞依賴。若表格符合2NF,且所有非鍵屬性均功能依賴於主鍵,而非其他非鍵屬性,則該表格即為3NF。
- 博伊斯-科德規範形式(BCNF): BCNF是3NF的更嚴格版本,確保每個非平凡的功能依賴都是超鍵。這表示不允許存在部分依賴或傳遞依賴。
- 第四規範形式(4NF): 4NF處理多值依賴,即某個屬性依賴於另一個屬性,但並非主鍵的函數。
- 第五規範形式(5NF)或投影-連接規範形式(PJNF): 這些形式處理的是表格已達4NF,但存在可進一步優化的連接依賴的情況。
現在,讓我們透過範例來說明這些規範形式:
第一規範形式(1NF)
考慮一個未規範化的表格,用於儲存客戶訂單:
| 訂單編號 | 客戶 | 產品 |
|---|---|---|
| 1 | 約翰 | 蘋果、香蕉、橙子 |
| 2 | 愛麗絲 | 葡萄、草莓 |
| 3 | 鮑勃 | 檸檬、青檸 |
此表格違反第一範式,因為產品欄位包含一組項目。為了使其符合第一範式,我們將產品拆分為獨立的資料列:
| 訂單編號 | 客戶 | 產品 |
|---|---|---|
| 1 | 約翰 | 蘋果 |
| 1 | 約翰 | 香蕉 |
| 1 | 約翰 | 橙子 |
| 2 | 愛麗絲 | 葡萄 |
| 2 | 愛麗絲 | 草莓 |
| 3 | 鮑勃 | 檸檬 |
| 3 | 鮑勃 | 青檸 |
現在,每個單元格都包含一個原子值,且表格處於第一範式。
第二範式(2NF)
考慮一個儲存學生及其課程資訊的表格:
| 學生編號 | 課程編號 | 課程名稱 | 授課教師 |
|---|---|---|---|
| 1 | 101 | 數學 | 史密斯教授 |
| 1 | 102 | 物理 | 強森教授 |
| 2 | 101 | 數學 | 史密斯教授 |
| 3 | 103 | 歷史 | 戴維斯教授 |
此表格違反第二正規化,因為講師屬性依賴於學生編號和課程編號。為了達到第二正規化,我們將此表格拆分為兩個獨立的表格:
學生表格:
| 學生編號 | 學生姓名 |
|---|---|
| 1 | 約翰 |
| 2 | 愛麗絲 |
| 3 | 鮑勃 |
課程表格:
| 課程編號 | 課程名稱 | 講師 |
|---|---|---|
| 101 | 數學 | 史密斯教授 |
| 102 | 物理 | 強森教授 |
| 103 | 歷史 | 戴維斯教授 |
現在,講師屬性僅取決於課程編號,且該表格符合第二範式。
第三範式(3NF)
考慮一個儲存員工及其專案資訊的表格:
| 員工編號 | 專案編號 | 專案名稱 | 經理 |
|---|---|---|---|
| 1 | 101 | 專案A | 約翰 |
| 1 | 102 | 專案B | 愛麗絲 |
| 2 | 101 | 專案A | 約翰 |
| 3 | 103 | 專案C | 鮑勃 |
此表格違反了3NF,因為經理屬性取決於員工編號,而非直接依賴於主鍵。為了達到第三範式,我們將該表拆分為兩個獨立的表:
員工表:
| 員工編號 | 員工姓名 |
|---|---|
| 1 | 約翰 |
| 2 | 愛麗絲 |
| 3 | 鮑勃 |
專案表:
| 專案編號 | 專案名稱 |
|---|---|
| 101 | 專案A |
| 102 | 專案B |
| 103 | 專案C |
員工專案表:
| 員工編號 | 專案編號 |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
| 3 | 103 |
現在,經理屬性取決於ProjectID,且該表格符合第三範式。
博伊斯-科德範式(BCNF)
BCNF是3NF的更嚴格版本。為了說明BCNF,請考慮一個儲存教授及其研究領域資訊的表格:
| 教授編號 | 研究領域 | 辦公室編號 |
|---|---|---|
| 1 | 人工智慧 | 101 |
| 2 | 機器學習 | 102 |
| 3 | 人工智慧 | 103 |
此表格違反BCNF,因為在研究領域與辦公室編號之間存在非平凡的函數依賴(即辦公室編號取決於研究領域)。為了達到BCNF,我們將此表格拆分為兩個獨立的表格:
教授表格:
| 教授編號 | 教授姓名 |
|---|---|
| 1 | 史密斯教授 |
| 2 | 強森教授 |
| 3 | 戴維斯教授 |
研究領域表格:
| 研究領域 | 辦公室編號 |
|---|---|
| 人工智慧 | 101 |
| 機器學習 | 102 |
教授研究表格:
| 教授編號 | 研究領域 |
|---|---|
| 1 | 人工智慧 |
| 2 | 機器學習 |
| 3 | 人工智慧 |
現在,該表格符合BCNF,因為不存在非平凡的函數依賴。
第四範式(4NF)
4NF處理多值依賴。考慮一個儲存書籍及其作者資訊的表格:
| 書籍編號 | 書名 | 作者 |
|---|---|---|
| 1 | 書籍A | 作者X,作者Y |
| 2 | 書B | 作者Y,作者Z |
| 3 | 書C | 作者X |
此表格違反4NF,因為在「書籍編號」與「作者」之間存在多值依賴。為達到4NF,我們將此表格拆分為三個獨立的表格:
書籍表格:
| 書籍編號 | 標題 |
|---|---|
| 1 | 書A |
| 2 | 書B |
| 3 | 書C |
作者表格:
| 作者編號 | 作者姓名 |
|---|---|
| 1 | 作者X |
| 2 | 作者Y |
| 3 | 作者Z |
書籍作者表:
| 書籍編號 | 作者編號 |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
現在,每個表格都處於第四範式(4NF),且多值依賴已移除。
第五範式(5NF)或投影-連接範式(PJNF)
5NF 或 PJNF 處理連接依賴,這超出了本文的介紹範圍。達到 5NF 通常需要進一步的分解,對於複雜資料庫而言往往是必要的。
結論
資料庫規範化是資料庫設計中的關鍵過程,旨在優化資料儲存、提升資料完整性並減少資料異常。透過將資料組織成規範化表格,可以提升資料庫系統的效率與可維護性。
請記住,達到更高規範化形式(如 BCNF 和 4NF)並不一定對所有資料庫都是必要的。規範化的程度取決於應用程式的具體需求,以及資料完整性與效能之間的權衡。
在設計資料庫時,必須在規範化與實用性之間取得平衡。在許多情況下,達到第三範式(3NF)已足以確保資料完整性,同時維持良好的查詢效能。
理解規範化的原則並透過實際案例加以實踐,對於資料庫管理員和開發人員來說,是建立高效且穩健資料庫系統的關鍵。











