---
# System prepended metadata

title: RDBMS 正規化

---

###### tags: '正規化'
# RDBMS 正規化


---
## 1NF (除去重複資料)
> 為了要排除重複群的出現，table 內的所有資料均為不可分割的原子所組成。
- [x] 每一個欄位均為atomic，不能存入2筆以上的資料
- [x] 沒有任兩筆data會完全相同(pk不重複)
- [x] table包含pk，而其他欄位會相依於pk

### A. 範例
**學生選課table**:
|<u>學號<u>|姓名|<u>課程代碼<u>|課程名稱|學分|分數|老師編號|老師姓名|
|-|-|-|-|-|-|-|-|
|S001|Bill|C001<br>C002|微積分<br>工業數學|4<br>4|98<br>87|T001<br>T002|小名<br>小王|
|S002|Jack|C002<br>C003<br>C004|工業數學<br>離散數學<br>線性代數|4<br>2<br>3|62<br>55<br>73|T002<br>T003<br>T004|小王<br>小陳<br>小美|
    
- 多個欄位具有2個以上的值，不符合1NF

1NF後

**學生選課table**:
|<u>學號<u>|姓名|<u>課程代碼<u>|課程名稱|學分|分數|老師編號|老師姓名|
|-|-|-|-|-|-|-|-|
|S001|Bill|C001|微積分|4|98|T001|小明|
|S001|Bill|C002|工業數學|4|87|T002|小王|
|S002|Jack|C002|工業數學|4|62|T002|小王|
|S002|Jack|C003|離散數學|2|55|T003|小陳|
|S002|Jack|C004|線性代數|3|73|T004|小美|

---
## 2NF (除去部分相依)
> 完成1NF後，table內會出現許多重複的資料，造成資料表空間的浪費；且課程資料會相依於學生，無法單獨針對課程做增刪修。
### A. 定義
- [x] 符合1NF
- [x] 每一個非pk欄位均相依於pk
- [x] 換言之，部分功能相依僅會發生於複合主鍵的情況
### B. 範例

1. **學生選課table**:

|<u>學號<u>|姓名|<u>課程代碼<u>|課程名稱|學分|分數|老師編號|老師姓名|
|-|-|-|-|-|-|-|-|
|S001|Bill|C001|微積分|4|98|T001|小明|
|S001|Bill|C002|工業數學|4|87|T002|小王|
|S002|Jack|C002|工業數學|4|62|T002|小王|
|S002|Jack|C003|離散數學|2|55|T003|小陳|
|S002|Jack|C004|線性代數|3|73|T004|小美|
    
- `姓名`只相依於`學號`
- `課程名稱`只相依於`課程代號`
- 不符合2NF
    
2NF後:

1. **學生table**

|<u>學號<u>|姓名|
|-|-|
|S001|Bill|
|S002|Jack|

2. **課程table**

|<u>課程代碼<u>|課程名稱|學分|老師編號|老師姓名|
|-|-|-|-|-|
|C001|微積分|4|T001|小明|
|C002|工業數學|4|T002|小王|
|C003|離散數學|2|T003|小陳|
|C004|線性代數|3|T004|小美|

3. **學生選課table**

|<u>學號<u>|課程代碼|成績|
|-|-|-|
|S001|C001|98|
|S001|C002|87|
|S002|C002|62|
|S002|C003|55|
|S002|C004|73|

---
## 3NF (除去遞移相依)
> **課程table** 存在遞移相依的關係
> - `老師姓名`相依於`老師編號`
> - `老師編號`相依於`課程代碼`

### A. 定義
- [x] 符合2NF
- [x] 各欄位與pk沒有遞移相依
### B. 範例
1. **課程table**
    
|<u>課程代碼<u>|課程名稱|學分|老師編號|老師姓名|
|-|-|-|-|-|
|C001|微積分|4|T001|小明|
|C002|工業數學|4|T002|小王|
|C003|離散數學|2|T003|小陳|
|C004|線性代數|3|T004|小美|

- `老師姓名`相依於`老師編號`
- `老師編號`相依於`課程代碼`
- 不符合3NF
    
3NF後
    
1. **課程table**
    
|<u>課程代碼<u>|課程名稱|學分|老師編號|
|-|-|-|-|
|C001|微積分|4|T001|
|C002|工業數學|4|T002|
|C003|離散數學|2|T003|
|C004|線性代數|3|T004|
    
2. **老師 table**
    
|<u>老師編號<u>|老師姓名|
|-|-|
|T001|小名|
|T002|小王|
|T003|小陳|
|T004|小美|
    
---
## BCNF (3NF加強)
:::info
通常正規化到BCNF即可
:::
> 單一pk符合BCNF
> 複合pk需要再進行BCNF
### A. 定義
- [x] 符合3NF
- [x] 每個複合pk不可相依於其餘非主鍵欄位

### B. 範例 
以**學生選課table**為例

|<u>學號<u>|課程代碼|成績|
|-|-|-|
|S001|C001|98|
|S001|C002|87|
|S002|C002|62|
|S002|C003|55|
|S002|C004|73|

- `成績`相依於`學號`+`課程代號`
- `課程代號`無相依於`成績`
- `學號`無相依於`成績`
    
---
## 4NF (除去多值相依)
> 
### A. 定義
- [x] 符合BCNF
- [x] table擁有3個以上的pk，A對應B時，B有多個值相對應；A對應C時，C也有多個值相對應，B、C之間無關聯
### B. 範例
1. **學生table**

|<u>學號<u>|姓名|<u>指導教授<u>|教授名稱|<u>論文<u>|
|-|-|-|-|-|
|S001|Bill|T01|教授A|論文1|
|S001|Bill|T01|教授A|論文2|
|S001|Bill|T01|教授A|論文3|
|S001|Bill|T02|教授B|論文2|
|S001|Bill|T02|教授B|論文4|
    
- `學號` 對應多個 `指導教授`
- `學號` 對應多個 `論文`
- `指導教授`、`論文` 無關聯
- 不符合4NF
    
4NF後
    
1. 學生興趣table
    
|<u>學號<u>|<u>指導教授<u>|
|-|-|
|S001|T01|
|S001|T02|
    
2. 學生寵物table
    
|<u>學號<u>|<u>論文<u>|
|-|-|
|S001|論文1|
|S001|論文2|
|S001|論文3|
|S001|論文4|

---
## 5NF (除去合併相依)
### A. 定義
- [x] 符合4NF
- [x] 有3個以上的pk，且pk彼此之間有關連
- 合併相依: 一張table拆分成3張以上的表格，並可以透過多次合併恢復成原來的table
    
### B. 範例
stc table
|<u>student<u>|<u>teacher<u>|<u>course<u>|
|-|-|-|
|小明|教授A|計算機概論|
|小明|教授B|演算法|
|小華|教授B|演算法|
|小華|教授A|網路安全|
|小華|教授C|演算法|
    
可拆分成

st table
|<u>student<u>|<u>teacher<u>|
|-|-|
|小明|教授A|
|小明|教授B|
|小華|教授A|
|小華|教授B|
|小華|教授C|
    
tc table
    
|<u>teacher<u>|<u>course<u>|
|-|-|
|教授A|計算機概論|
|教授A|網路安全|
|教授B|演算法|
|教授C|演算法|

sc table
    
|<u>student<u>|<u>course<u>|
|-|-|
|小明|計算機概論|
|小明|演算法|
|小華|演算法|
|小華|網路安全|
    
在合併

st & tc table
    
|<u>student<u>|<u>teacher<u>|<u>course<u>|
|-|-|-|
|小明|教授A|計算機概論|
|小明|教授A|網路安全|
|小明|教授B|演算法|
|小華|教授A|計算機概論|
|小華|教授A|網路安全|
|小華|教授B|演算法|
|小華|教授C|演算法|
    
在合併
    
st & tc & sc table
    
|<u>student<u>|<u>teacher<u>|<u>course<u>|
|-|-|-|
|小明|教授A|計算機概論|
|小明|教授B|演算法|
|小華|教授B|演算法|
|小華|教授C|演算法|
|小華|教授A|網路安全|

恢復成原來的表格，stc table存在合併相依，需要再做拆分

---
## Reference
- http://cc.cust.edu.tw/~ccchen/doc/db_04.pdf
- http://spaces.isu.edu.tw/upload/19225/0/news/postfile_349.pdf
- http://debussy.im.nuu.edu.tw/sjchen/Database/Final/Ch05.pdf