資料庫正規化 (1NF、2NF、3NF)
目的是為了降低資料的「重覆性」與避免「更新異常」的情況發生。
正規化層級 (每一層皆需符合前面層級的正規化) :
- 第一正規化 (1NF)
- 第二正規化 (2NF)
- 第三正規化 (3NF)
- BCNF 正規化
- 第四正規化 (4NF)
- 第五正規化 (5NF)
正規化步驟 :
層級 | 處理 |
---|---|
未經正規化資料表 | - |
↓ | 除去重複群 |
第一正規化 | - |
↓ | 除去部份相依 |
第二正規化 | - |
↓ | 除去遞移相依 |
第三正規化 | - |
第一正規化 (1NF) :
- 第一正規化的目標是確保表中每一列的每個欄位只能有一個基元值 (Atomic) 即單一值,而不是多個值。這樣可以消除重複的資料,並且每一列的欄位都可以獨立地進行查詢和排序。
- 沒有任何兩筆以上的資料是完全重覆。
- 資料表中有主鍵,而其他所有的欄位都相依於「主鍵」。
正規化前 :
學號 | 姓名 | 課程代碼 | 課程名稱 | 學分 | 成績 | 老師編號 | 老師姓名 |
---|---|---|---|---|---|---|---|
S001 | 張三 | C001 C002 |
國文 數學 |
2 3 |
88 68 |
T001 T002 |
國老師 數老師 |
S002 | 李四 | C002 C003 C004 |
數學 英文 物理 |
3 2 3 |
77 69 95 |
T002 T003 T004 |
數老師 英老師 物老師 |
正規化後 :
學號 | 姓名 | 課程代碼 | 課程名稱 | 學分 | 成績 | 老師編號 | 老師姓名 |
---|---|---|---|---|---|---|---|
S001 | 張三 | C001 | 國文 | 2 | 88 | T001 | 國老師 |
S001 | 張三 | C002 | 數學 | 3 | 68 | T002 | 數老師 |
S002 | 李四 | C002 | 數學 | 3 | 77 | T002 | 數老師 |
S002 | 李四 | C003 | 英文 | 2 | 69 | T003 | 英老師 |
S002 | 李四 | C004 | 物理 | 3 | 95 | T004 | 物老師 |
第二正規化 (2NF) :
- 符合第一正規化。
- 每一非鍵屬性必須「完全相依」於主鍵,即不可「部份功能相依」於主鍵。
正規化前 :
學號 | 姓名 | 課程代碼 | 課程名稱 | 學分 | 成績 | 老師編號 | 老師姓名 |
---|---|---|---|---|---|---|---|
S001 | 張三 | C001 | 國文 | 2 | 88 | T001 | 國老師 |
S001 | 張三 | C002 | 數學 | 3 | 68 | T002 | 數老師 |
S002 | 李四 | C002 | 數學 | 3 | 77 | T002 | 數老師 |
S002 | 李四 | C003 | 英文 | 2 | 69 | T003 | 英老師 |
S002 | 李四 | C004 | 物理 | 3 | 95 | T004 | 物老師 |
正規化後 :
(一) 學生資料表 (已完成) :
學號 (主鍵) | 姓名 |
---|---|
S001 | 張三 |
S002 | 李四 |
(二) 成績資料表 (已完成) :
學號 (主鍵) | 課程代碼 (主鍵) | 成績 |
---|---|---|
S001 | C001 | 88 |
S001 | C002 | 68 |
S002 | C002 | 77 |
S002 | C003 | 69 |
S002 | C004 | 95 |
(三) 課程資料表 :
課程代碼 (主鍵) | 課程名稱 | 學分 | 老師編號 | 老師姓名 |
---|---|---|---|---|
C001 | 國文 | 2 | T001 | 國老師 |
C002 | 數學 | 3 | T002 | 數老師 |
C003 | 英文 | 2 | T003 | 英老師 |
C004 | 物理 | 3 | T004 | 物老師 |
第三正規化 (3NF) :
- 符合第二正規化。
- 各欄位與「主鍵」之間沒有「遞移相依」的關係。將「遞移相依」或「間接相依」的欄位「分割」出去,再另外組成「新的資料表」。
正規化前 :
課程代碼 (主鍵) | 課程名稱 | 學分 | 老師編號 | 老師姓名 |
---|---|---|---|---|
C001 | 國文 | 2 | T001 | 國老師 |
C002 | 數學 | 3 | T002 | 數老師 |
C003 | 英文 | 2 | T003 | 英老師 |
C004 | 物理 | 3 | T004 | 物老師 |
正規化後 :
課程資料表 (已完成) :
課程代碼 (主鍵) | 課程名稱 | 學分 | 老師編號 |
---|---|---|---|
C001 | 國文 | 2 | T001 |
C002 | 數學 | 3 | T002 |
C003 | 英文 | 2 | T003 |
C004 | 物理 | 3 | T004 |
老師資料表 (已完成) :
老師編號 (主鍵) | 老師姓名 |
---|---|
T001 | 國老師 |
T002 | 數老師 |
T003 | 英老師 |
T004 | 物老師 |
※ 最後總共產生了四個表格 (學生資料表、成績資料表、課程資料表、老師資料表)。