資料庫正規化(Database normalization) - HackMD
文章推薦指數: 80 %
資料庫正規化(Database normalization) --- ## 目的其目的是為了降低資料的「重覆性」與避免「更新異常」的情況發生。
---- ### 範例訂單| 購買.
ownedthisnote
Published
LinkedwithGitHub
Like1
Bookmark
Subscribe
Edit
#資料庫正規化(Databasenormalization)
---
##目的
其目的是為了降低資料的「重覆性」與避免「更新異常」的情況發生。
----
###範例訂單
|購買日期|客戶ID|客戶名稱|商品名稱|單價|量(斤)|
|--------|--------|--------|--------|--------|--------|
|12/24|p001|Ken|香蕉|10|5|
|12/24|p002|Howard|蘋果,香蕉,橘子|30,10,20|2,4,1|
|12/25|p003|Chris|蘋果|30|2|
|12/25|p003|Chris|蘋果|30|2|
|12/25|p004|May|蘋果,橘子|30,20|1,1|
----
1NF(Firstnormalform)
-一格(每一列每一欄)只能有一筆資料
-每筆資料都有一個唯一的主鍵作為識別
2NF (Secondnormalform)
-符合1NF
-消除部分相依
3NF (Thirdnormalform)
-符合1NF及2NF
-消除遞移相依
---
##1NF
-避免欄位長度無法確定
-避免出現完全一樣的兩筆資料
----
首先將欄位中有多重資料的訂單拆開,然後給每一筆訂單一個唯一鍵
|購買日期|客戶ID|客戶名稱|商品名稱|單價|量(斤)|
|--------|--------|--------|--------|--------|--------|
|12/24|p002|Howard|蘋果,香蕉,橘子|30,10,20|2,4,1|
|購買日期|客戶ID|客戶名稱|商品名稱|單價|量(斤)|
|--------|--------|--------|--------|--------|--------|
|12/24|p002|Howard|蘋果|30|2|
|12/24|p002|Howard|香蕉|10|4|
|12/24|p002|Howard|橘子|20|1|
----
下表是我第一次正規化的結果
|編號|購買日期|客戶ID|客戶名稱|商品名稱|單價|量(斤)|
|--------|--------|--------|--------|--------|--------|--------|
|1|12/24|p001|Ken|香蕉|10|5|
|2|12/24|p002|Howard|蘋果|30|2|
|3|12/24|p002|Howard|香蕉|10|4|
|4|12/24|p002|Howard|橘子|20|1|
|5|12/25|p003|Chris|蘋果|30|2|
|6|12/25|p003|Chris|蘋果|30|2|
|7|12/25|p004|May|蘋果|30|1|
|8|12/25|p004|May|橘子|20|1|
失去原本的資料的真實性了,看不出來其實002~004其實是同一筆訂單了,其他多筆資料的訂單也是,所以再弄成下面這樣
----
###訂單
|編號|訂單編號|購買日期|客戶ID|客戶名稱|商品名稱|單價|量(斤)|
|--------|--------|--------|--------|--------|--------|--------|--------|
|1|d001|12/24|p001|Ken|香蕉|10|5|
|2|d002|12/24|p002|Howard|蘋果|30|2|
|3|d002|12/24|p002|Howard|香蕉|10|4|
|4|d002|12/24|p002|Howard|橘子|20|1|
|5|d003|12/25|p003|Chris|蘋果|30|2|
|6|d004|12/25|p003|Chris|蘋果|30|2|
|7|d005|12/25|p004|May|蘋果|30|1|
|8|d005|12/25|p004|May|橘子|20|1|
感覺資料變更多了啊!!!
---
##2NF
消除部分相依
-將商品名稱與單價獨立出來
----
###訂單
|編號|訂單編號|購買日期|客戶ID|客戶名稱|商品名稱|量(斤)|
|--------|--------|--------|--------|--------|--------|--------|
|1|d001|12/24|p001|Ken|香蕉|5|
|2|d002|12/24|p002|Howard|蘋果|2|
|3|d002|12/24|p002|Howard|香蕉|4|
|4|d002|12/24|p002|Howard|橘子|1|
|5|d003|12/25|p003|Chris|蘋果|2|
|6|d004|12/25|p003|Chris|蘋果|2|
|7|d005|12/25|p004|May|蘋果|1|
|8|d005|12/25|p004|May|橘子|1|
###商品資訊
|商品名稱|單價|
|--------|--------|
|香蕉|10|
|蘋果|30|
|橘子|20|
---
##3NF
消除遞移相依
-何謂遞移相依?
X->Y,Y->Z所以X->Z
-將客戶ID與客戶名稱獨立出來
----
###訂單
|編號|訂單編號|購買日期|客戶ID|商品名稱|量(斤)|
|--------|--------|--------|--------|--------|--------|
|1|d001|12/24|p001|香蕉|5|
|2|d002|12/24|p002|蘋果|2|
|3|d002|12/24|p002|香蕉|4|
|4|d002|12/24|p002|橘子|1|
|5|d003|12/25|p003|蘋果|2|
|6|d004|12/25|p003|蘋果|2|
|7|d005|12/25|p004|蘋果|1|
|8|d005|12/25|p004|橘子|1|
###客戶資料
|客戶ID|客戶名稱|
|--------|--------|
|p001|Ken|
|p002|Howard|
|p003|Chris|
|p004|May|
###商品資訊
|商品名稱|單價|
|--------|--------|
|香蕉|10|
|蘋果|30|
|橘子|20|
----
###正規化練習
![正規化練習](https://i.imgur.com/r4U4xaU.png)
*Timesheet(考勤單)要多所以要取得Invoice(發票)ID,必須把Invoice的Timesheetid刪掉
*EmployeeAddress1Address2違反第一正規化
*EmployeeZIP違反正規化
*地址在資料庫寫法必須分開為城市路巷等等才不違反規定
*Vehicle的EmplyeeID應該與VehicleID形成一個新表
*EmployeeType與Employee應該是1->多
*Salary不屬於Employee
*因為Timesheet中有ClientID所以Client對TimeSheet應該要有一條1->多
修改版
![正規化練習](https://i.imgur.com/87GhRp3.png)
---
##參考資料
-[Normalization-1NF,2NF,3NFand4NF
](https://www.youtube.com/watch?v=UrYLYV7WSHM)
-[為何使用資料庫儲存資料時,需要先執行正規化?
](https://www.ithome.com.tw/node/47440)
1
×
Signin
Email
Password
Forgotpassword
or
Byclickingbelow,youagreetoourtermsofservice.
SigninviaFacebook
SigninviaTwitter
SigninviaGitHub
SigninviaDropbox
SigninviaGoogle
NewtoHackMD?Signup
延伸文章資訊
- 1Database 正規化步驟 - 翻轉工作室
第一正規化定義如下:『在一個資料表內,所屬欄位的內容都是單元值(Atomic Value),則稱該資料表滿足 1NF。』簡單的說,每個欄位的內容都是最小單元,不可以再分割的。
- 2資料庫正規化實作練習 - MySQL Taiwan
資料庫正規化實作練習. Admin - 4月30, 2014. 如下的資料,我們應該如何進行正規化呢? 如果無正規化,對於處理上有何問題呢? 資料表1: 問題在於欄位並非atomic(基元 ...
- 3資料庫正規化練習完整相關資訊 - 小文青生活
資料庫正規化- 工作達人(Job Da Ren)2013年4月21日· 這是MySQL 5實力養成暨評量裡的1-32.『可以消除表格部份依賴關係的是下列哪個正規化? 答案:Continue Re...
- 4「不是工程師」關聯式資料庫正規化是什麼? 先從第一 ... - 進度條
先從第一正規化(1NF)開始吧!(database normalization, Primary Key - PK). 資料庫設計很難?都不實作練習當然難!先用這簡單的 ...
- 5資料庫正規化- JOBDAREN 工作達人
這是MySQL 5實力養成暨評量裡的1-32.『可以消除表格部份依賴關係的是下列哪個正規化? 答案:Continue Reading| JOBDAREN 工作達人| 資料庫正規化| ...