Database 正規化步驟 - 翻轉工作室
文章推薦指數: 80 %
第一正規化定義如下:『在一個資料表內,所屬欄位的內容都是單元值(Atomic Value),則稱該資料表滿足 1NF。
』簡單的說,每個欄位的內容都是最小單元,不可以再分割的。
資料庫系統概論:第
十章
資料庫邏輯設計
上一頁
下一頁
10-5正規化步驟
內容:
10-5-11NF-第一正規化
10-5-22NF-第二正規化
10-5-33NF-第三正規化
雖然我們並不需要達到第六階層的正規化,但最起碼還是需要到3NF的正規化,因此,我需要由1NF、2NF、到3NF之間按部就班達成。
10-5-11NF-第一正規化
第一正規化定義如下:『在一個資料表內,所屬欄位的內容都是單元值(AtomicValue),則稱該資料表滿足1NF。
』簡單的說,每個欄位的內容都是最小單元,不可以再分割的。
如需要再分割,則需另外再設計資料表的欄位。
譬如:學生資料表內某一筆資料的地址是『高雄市鳥松區澄清路840號』,它就是一個單元值,不可以再區分其它欄位,譬如縣市、區域等等。
學
號
姓
名
地
址
性別
電
話
40011223
張有明
高雄市鳥松區澄清路
840號
男
07112234
40011224
劉志明
彰化市
真的需要將地址再區分縣市、區域的話,則資料表必須重新設計,將地址劃分為縣市、區域、道路,如下:(但它每個欄位也是單元值)
學
號
姓
名
縣市
區域
道
路
性別
電
話
40011223
張有明
高雄市
鳥松區
澄清路
840號
男
07112234
40011224
劉志明
彰化市
如果,如下面設計,姓名與地址同一個欄位存放,那它就不能滿足第一正規化。
學
號
監護人
關係
電
話
40011223
張有明(高雄市鳥松區澄清路
840號)
男
07112234
40011224
劉志明(彰化市
….)
10-5-22NF-第二正規化
第二正規化定義如下:『一個資料表,除了符合第一正規化特性外,所有主鍵以外的欄位都必須與主鍵功能相依,則稱該資料表滿足2NF。
』簡單的說,所有欄位都必須與主鍵之間功能性相依。
假設學生選課資料表,記錄著學生選讀那些課程,每一位學生可修讀多門課,主鍵為{學號、課程名稱},設計如下:
學
號
姓
名
地
址
課程名稱
學分數
成績
必選修
40011223
張有明
高雄市###
資料庫管理系統
4
80
必
40011224
劉志明
彰化市###
資料庫管理系統
3
90
必
40011234
陳美麗
台南市###
計算機概論
2
85
選
49921234
林秀氣
屏東縣###
null
null
null
null
從上表可以看出它包含學生個人資料與成績,由資料表看得出來,我們必須選擇{學號、課程名稱}當複合主鍵。
是否主鍵以外的欄位都與主鍵功能相依,探討如下:
(a)姓名與地址僅與學號相依,並不與課程名稱相依。
(b)學分數、成績、必選修等欄位與課程名稱相依,並不與學號相依。
如此看起來它不符合第二正規化,可能出現問題如下:
新增可能發生錯誤:如果僅增加一位學生『林秀氣』,當還未修讀任何課程,結果『課程名稱』欄位空白,違背主鍵不可Null之規定。
更新可能發生錯誤:系上規定『資料庫管理系統』的學分數改為4,如果僅更新『學號=40011223』的資料,其它同學的學分數就沒有變更到。
刪除可能發生錯誤:如果刪除了學號=40011234這筆資料,以後可能找不到『計算機概論』的資料了。
解決的方法很簡單,只要將表格拆成:學生資料表與選課總表等兩個表格即可,當然不僅這樣,往後還會慢慢談到相關技巧。
10-5-33NF-第三正規化
第三正規化定義如下:『一個資料表,除了符合第二正規化特性外,所有主鍵以外的欄位都僅能與主鍵功能相依,且沒有與其它欄位相依,則稱該資料表滿足3NF。
』簡單的說,所有欄位都必須、且僅能與主鍵之間功能性相依,其它欄位之間不可以有相依的特性存在。
假設我們設計學生資料表如下圖,欄位包含有:{學號、姓名、地址、郵遞區號、性別、電話},很容易可以看出必須選擇『學號』為主鍵,是否滿足3NF分析如下:
(a)姓名、地址、郵遞區號、性別與電話都與學號之間功能性相依,符合2NF特性。
(b)郵遞區號與地址之間功能相依,不符合3NF特性。
學
號
姓
名
地
址
郵遞區號
性別
電
話
40011223
張有明
高雄市鳥松區澄清路
840號
850
男
07112234
40011224
劉志明
彰化市
40011234
陳美麗
台南市安南區中華路
2號
644
女
06234567
49921234
林秀氣
高雄市鳥松區澄清路
450號
833
女
07231134
由此可以看出此學生資料表並不能符合3NF特性,期可能出現問題如下:
更新可能出現錯誤:如果高雄市鳥松區的郵遞區號改為850,如僅修改40011223這筆資料,則出現與49921234資料內郵遞區號不一致的現象。
刪除可能出現錯誤:如刪除掉40011234這筆資料,可能無法再找到台南市安南區的郵遞區號資料了。
解決的方法是:
(a)將郵遞區號另外再開啟一個資料表來存放,雖然可以滿足3NF規範,但也增加了一個資料表,是否需要這樣呢?這要看您系統的使用環境,並非一昧的追求最完善就是最好。
(b)或者,如果郵遞區號不需要另外查詢,則將它加入地址欄位,也可以滿足3NF。
由上述正規化的操作可以發現,為了滿足更嚴謹的正規化,就是需要再細分資料表,如此可能再延伸查詢、更新與其它操作的困難。
本人建議初學者正規化到這個階段就可以了,目前市面上70%以上資料庫系統,也幾乎只到規劃到這樣,如果熟悉資料庫運作之後,有興趣或需要再學習更進一步的正規化階段。
翻轉工作室:粘添壽
資料庫系統概論(含邏輯設計)
第一章
實習環境架設
第二章資料庫系統簡介
第三章資料庫範例-course_db
第四章資料庫操作-SQLSelect
第五章多重子查詢操作
第六章合併查詢操作
第七章混合查詢操作
第八章善用View視界查詢
第九章表格異動處理
第十章資料庫邏輯設計
10-1資料庫的設計流程
10-2E-RModel實體關係圖
10-3E-R圖轉換為資料表
10-4資料表的正規化
10-5正規化步驟
9-6E-RModel繪圖工具-Draw.io
9-7邏輯設計演練
第十一章單表格資料庫設計
第十二章多表格資料庫設計
第十三章專題研討:課務管理系統
第十四章期末報告範例-圖書銷售系統
翻轉電子書系列:
資訊與網路安全技術
Java程式設計(一)含程式邏輯
Java
程式設計(二)含物件導向
資料庫程式設計-PHP+MySQL
資料庫系統概論(含邏輯設計)
網路規劃與管理技術
電腦網路與連結技術
TCP/IP協定與Internet網路
電子商務安全概論
Linux伺服器管理-CentOS
Unix/Linux系統管理實務
延伸文章資訊
- 1Day23. MySQL: 資料庫正規化Database normalization - iT 邦幫忙
第1正規形式(1NF); 第2正規形式(2NF); 第3正規形式(3NF); BCNF正規形式(BCNF); 第4正規形式(4NF); 第5正規形式(5NF). 資料庫正規化實作- 練習 ...
- 2資料庫正規化練習完整相關資訊 - 小文青生活
資料庫正規化- 工作達人(Job Da Ren)2013年4月21日· 這是MySQL 5實力養成暨評量裡的1-32.『可以消除表格部份依賴關係的是下列哪個正規化? 答案:Continue Re...
- 3「不是工程師」關聯式資料庫正規化是什麼? 先從第一 ... - 進度條
先從第一正規化(1NF)開始吧!(database normalization, Primary Key - PK). 資料庫設計很難?都不實作練習當然難!先用這簡單的 ...
- 4資料庫正規化(Database normalization) - HackMD
資料庫正規化(Database normalization) --- ## 目的其目的是為了降低資料的「重覆性」與避免「更新異常」的情況發生。 ---- ### 範例訂單| 購買.
- 5Database 正規化步驟 - 翻轉工作室
第一正規化定義如下:『在一個資料表內,所屬欄位的內容都是單元值(Atomic Value),則稱該資料表滿足 1NF。』簡單的說,每個欄位的內容都是最小單元,不可以再分割的。