Database Normalization 資料庫正規化
2021-11-20
筆記資料庫設計進行正規化的步驟,以及如何進行 BCNF。
資料庫設計
需求訪談 Requirement Collection & Analysis
- 表單、報表、表格 蒐集資料項目轉換為資料欄位
概念資料庫設計 Conceptural
- 使用 Entity Relationship Model
- 分辨資料表的關聯 (Relationship) 與主鍵 (Primary Key)
邏輯資料庫設計 Logical
- 使用 Entity Relationship Model
- 進行正規化
實體資料庫設計 Physical
- 轉換為資料庫建置語法
從概念設計到實體資料庫設計,可以使用 SQL Power Architect 來協助進行,SQL Power Arcitect 為商用軟體,有提供 Community Edition。
正規化
正規化的過程就是將欄位重新設計,拆分為不同的資料表,並讓各資料表以主鍵 (Primary Key)與外鍵 (Foreign Key)的關係連結。
1NF
- 資料表必須有 Primary Key,各欄位都必須相依於 Primary Key
- 每個欄位只儲存單一值
- 沒有重複意義的欄位 (Ex: 電話1、電話2)
藉由達成 1NF,可以確認資料欄位的適當長度,增加資料存取的效率並減少跨欄位尋找的問題。
例如下列的資料表,就沒有符合 1NF,不僅沒有主鍵,同時資料欄也儲存多個值與存在重複意義的欄位,對於資料的查詢而言非常不方便。
經過調整,增加主鍵,並且另外拆出兩種資料表用於存放興趣以及電話,解決單一欄位儲存多個值以及重複意義欄位的問題。
2NF
- 必須符合 1NF
- 各欄位與 PK 之間不存在部分相依關係
解決更新資料的問題
避免新增資料、刪除資料的問題
3NF
- 必須符合 2NF
- 各欄位與 PK 之間不存在間接相依關係
Boyce-Codd NormalForm, BCNF
適用於多個欄位組成 PK 的情境
- 必須符合 2NF
- 各欄位與 PK 之間不存在間接相依關係
- PK 中的各欄位不可相依於非 PK 欄位