Database 正規化步驟 - 翻轉工作室

文章推薦指數: 80 %
投票人數:10人

第一正規化定義如下:『在一個資料表內,所屬欄位的內容都是單元值(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系統管理實務       



請為這篇文章評分?