Database Normalization 資料庫正規化

2021-11-20

筆記資料庫設計進行正規化的步驟,以及如何進行 BCNF。

SQL Server Logo

資料庫設計

需求訪談 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

  1. 資料表必須有 Primary Key,各欄位都必須相依於 Primary Key
  2. 每個欄位只儲存單一值
  3. 沒有重複意義的欄位 (Ex: 電話1、電話2)

藉由達成 1NF,可以確認資料欄位的適當長度,增加資料存取的效率並減少跨欄位尋找的問題。

例如下列的資料表,就沒有符合 1NF,不僅沒有主鍵,同時資料欄也儲存多個值與存在重複意義的欄位,對於資料的查詢而言非常不方便。

經過調整,增加主鍵,並且另外拆出兩種資料表用於存放興趣以及電話,解決單一欄位儲存多個值以及重複意義欄位的問題。

2NF

  1. 必須符合 1NF
  2. 各欄位與 PK 之間不存在部分相依關係

解決更新資料的問題
避免新增資料、刪除資料的問題

3NF

  1. 必須符合 2NF
  2. 各欄位與 PK 之間不存在間接相依關係

Boyce-Codd NormalForm, BCNF

適用於多個欄位組成 PK 的情境

  1. 必須符合 2NF
  2. 各欄位與 PK 之間不存在間接相依關係
  3. PK 中的各欄位不可相依於非 PK 欄位