# 2019/0118/資料庫正規化

## 資料庫正規化(範式)

正規化的動作會將大表切劃為落干個小表，

讓資料異動時，就算讀取麻煩，但必須沒異常錯誤。

### 第一正規化(範式) 1NF :&#x20;

一個欄位儲存一個值

### 第二 :                               &#x20;

去除"!"部分"!"功能(函數)相依 :

"!"部分"!"功能(函數)相依

學號 姓名 課程編號 成績

S001 王曉明 C001 95

S001 王曉明 C005 80

S002 王小英 C003 92

王曉明不知到幾個，C001 這堂課分數是95 不知道是誰 ，

&#x20;↓  S001 王曉明選 C001  成績95 這樣才知道是誰&#x20;

功能相依 :&#x20;

學號可以決定姓名 也可決定 選了哪堂課 成績多少。

知道欄位 A 就會知道欄位 B C D , 1+2=3 --> 3-1=2 , 知道身分證FXX 就知道 王曉明 地址XXX。&#x20;

列出心智圖表，找出最具代表性的元素，念念看合不合理。

供應商ID可以決定供應商嗎?可以，供應商能夠決定品項嗎?不行，必須要供應商ID與供應商決定品項。

無重複 : XX 主檔 (功能相依

一決定一 : XX 主檔 (功能相依

二決定一 : 明細   (部分功能相依

一決定一決定一 : (遞移相依 通常是多加上去的流水號

新增異常 :

沒有林的基本資料但卻新增林的品項賣的蘋果與價錢。

刪除異常 :

林今天不賣蘋果了刪除資料時連林的基本資料都刪除。

修改異常 :

修改林的蘋果漲價卻修改了所有的蘋果漲價。

###

### 第三

BC正規化 BCNF 第三的延伸

去除遞移相依

"所在地"可以決定"運費"，具有功能相依，

"供應商代號"也可以決定"運費"，

"供應商代號"也可以決定"所在地"，

所以"所在地"與"運費"，具有遞移相依，必須移出主表，獨立出副表。

心置圖表元素 : 不可以被兩個箭頭指到。

### 第四

去除多值依賴

{% embed url="<https://zh.wikipedia.org/wiki/%E7%AC%AC%E5%9B%9B%E6%AD%A3%E8%A6%8F%E5%8C%96>" %}

### 第五

#### 以上為實務上，切劃為落干個，讓資料異動時，就算讀取麻煩，但必須沒異常錯誤。

(需求不明確 - 專案經理 -> 系分析師 -> 程式編程)

schema 欄位 value 值 unit 單位

#### 以下為學術上

.

.

.

.
