資料正規化 <ul><li>巨匠電腦  葉建榮整理 [email_address] </li></ul>
資料來源  <ul><li>本份簡報是由旗標出版「挑戰資料庫管理系統第二版 」簡報整理。 </li></ul>
資料正規化  <ul><li>資料庫正規化 (Normailzation) 技術 </li></ul><ul><ul><li>專門用來設計邏輯資料庫架構 </li></ul></ul><ul><li>邏輯資料庫架構設計 </li></ul><u...
資料庫正規化的型式  <ul><li>正規化型式 </li></ul><ul><ul><li>第一正規化型式 (First Normal Form , </li></ul></ul><ul><ul><li>簡稱 1NF) </li></ul><...
資料庫正規化的型式與義涵
第一正規化 <ul><li>第一正規形式 (First Normal Form ,簡稱 1NF) </li></ul><ul><ul><li>表格 沒有重複 出現的欄位,且表格中每一筆記錄的每一個欄位只能存放單一的資料值 </li></ul><...
第一正規化目的  <ul><li>第一正規化乃在 消除 資料表上的 重複資料 </li></ul><ul><ul><li>一個表格中若有重複的欄位,應該將之分割,放置在不同的資料表中 </li></ul></ul><ul><ul><li>一個欄...
刪除新增修改異常處理 <ul><li>考慮供貨紀錄表 ( 表 6.2) </li></ul><ul><ul><li>刪除異常 </li></ul></ul><ul><ul><ul><li>倘若 S04 結束營業,其供貨紀錄將被刪除,則連同 SM...
功能相依 <ul><li>功能相關 ( Functional Dependency) , 或稱 「相依」 </li></ul><ul><ul><li>供貨紀錄表 ( 表 6.2) 上十個欄位屬性間之相依關係 </li></ul></ul><ul...
屬性間的相依關係
第一正規化之後
第一正規化之後
第二正規化 <ul><li>【定義】 第二正規化 (Second Normal Form , 簡稱 2NF)   </li></ul><ul><ul><li>若且唯若關聯 R 為 1NF 且紀錄中的每一非鍵欄位都完全相關於主鍵 (PK) </l...
第二正規化之後 <ul><ul><li>2NF 很明顯地改善了 1NF 的缺點 </li></ul></ul><ul><ul><ul><li>例如 S04 突然宣告倒閉,它的資料從「供應商資料表」剔除之後, SM05 的資訊依然完整的保存在「超...
第三正規化 <ul><li>【定義】 第三正規化 (Third Normal Form ,簡稱 3NF) </li></ul><ul><ul><li>若且唯若關聯 R 為 2NF 且紀錄中的每一非鍵欄位之屬性 </li></ul></ul><u...
第三正規化之後
多重值相關 <ul><ul><li>多重值相關 Multi-Valued Dependency) </li></ul></ul><ul><ul><ul><li>超市助理資料表 </li></ul></ul></ul><ul><ul><ul><l...
多重值相關 <ul><ul><li>多重值相關 Multi-Valued Dependency) </li></ul></ul><ul><ul><ul><li>「超市助理」多重值相關於「超市代號」 </li></ul></ul></ul><ul...
多重值相關處理後
另一個正規化例子   <ul><li>設計一個「銷售資料庫」 </li></ul><ul><li>資料項 </li></ul><ul><ul><li>訂單序號 </li></ul></ul><ul><ul><li>訂貨日期 </li></ul>...
另一個正規化例子   <ul><li>原始資料  </li></ul>
另一個正規化例子   <ul><li>正規化的過程 </li></ul><ul><ul><li>【步驟 1 】  </li></ul></ul><ul><ul><ul><li>去除重複資料,將表 6.5 分割成表 6.6 及表 6.7  </l...
另一個正規化例子
另一個正規化例子   <ul><ul><li>【步驟 2 】  </li></ul></ul><ul><ul><ul><li>先由表 6.7 下手 </li></ul></ul></ul><ul><ul><ul><li>由「訂單序號」 + 「產...
另一個正規化例子
另一個正規化例子   <ul><ul><li>【步驟 3 】  </li></ul></ul><ul><ul><ul><li>從表 6.6 得知 </li></ul></ul></ul><ul><ul><ul><li>由「訂單序號」可以決定出「...
另一個正規化例子
一個簡易方法–類聚檢查法   <ul><li>物 以 類 聚 </li></ul><ul><ul><li>物 :資料項 </li></ul></ul><ul><ul><li>類 :實體 (Entity) 、資料表 </li></ul></ul>...
一個簡易方法–類聚檢查法   <ul><li>【步驟 1 】 </li></ul><ul><li>分析問題,收集所有資料項 </li></ul><ul><ul><li>訂單序號 </li></ul></ul><ul><ul><li>訂貨日期 <...
一個簡易方法–類聚檢查法   <ul><li>【步驟 2 】 </li></ul><ul><li>分析問題,找出 實體 (Entity) </li></ul><ul><ul><li>Product( 產品 ) 實體 </li></ul></ul...
一個簡易方法–類聚檢查法   <ul><li>【步驟 3 】 </li></ul><ul><li>將資料項分類,逐一擺放到適當的實體裡,並且須滿足: </li></ul><ul><ul><li>每一個實體都有 一個主鍵 </li></ul></...
一個簡易方法–類聚檢查法
一個簡易方法–類聚檢查法   <ul><li>【步驟 4 】 </li></ul><ul><li>檢查每一個實體是否符合 1NF 、 2NF 、 3NF </li></ul><ul><ul><li>我們發現「 Orders 」實體中,一個訂單序...
一個簡易方法–類聚檢查法   <ul><li>很自然地我們將「 Orders 」實體分割成「 Orders 」實體和「 Orderslist 」實體,兩者以 訂單序號 相互聯繫,即  </li></ul>
一個簡易方法–類聚檢查法   <ul><li>【步驟 5 】 </li></ul><ul><li>畫出實體關係圖  </li></ul>
Upcoming SlideShare
Loading in …5
×

Relation3正規化

2,168
-1

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,168
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Relation3正規化

  1. 1. 資料正規化 <ul><li>巨匠電腦 葉建榮整理 [email_address] </li></ul>
  2. 2. 資料來源 <ul><li>本份簡報是由旗標出版「挑戰資料庫管理系統第二版 」簡報整理。 </li></ul>
  3. 3. 資料正規化 <ul><li>資料庫正規化 (Normailzation) 技術 </li></ul><ul><ul><li>專門用來設計邏輯資料庫架構 </li></ul></ul><ul><li>邏輯資料庫架構設計 </li></ul><ul><ul><li>將 資料項 (Data Item) 分門別類後 </li></ul></ul><ul><ul><li>將 資料項 分別安排在不同的資料表中 </li></ul></ul><ul><ul><li>建立起彼此的 關聯 (Relation) </li></ul></ul><ul><li>合併 (Join) 運算 </li></ul><ul><li>反正規化 (De-Normalization) </li></ul>
  4. 4. 資料庫正規化的型式 <ul><li>正規化型式 </li></ul><ul><ul><li>第一正規化型式 (First Normal Form , </li></ul></ul><ul><ul><li>簡稱 1NF) </li></ul></ul><ul><ul><li>第二正規化型式 (Second Normal Form , </li></ul></ul><ul><ul><li>簡稱 2NF) </li></ul></ul><ul><ul><li>第三正規化型式 (Third Normal Form , </li></ul></ul><ul><ul><li>簡稱 3NF) </li></ul></ul>
  5. 5. 資料庫正規化的型式與義涵
  6. 6. 第一正規化 <ul><li>第一正規形式 (First Normal Form ,簡稱 1NF) </li></ul><ul><ul><li>表格 沒有重複 出現的欄位,且表格中每一筆記錄的每一個欄位只能存放單一的資料值 </li></ul></ul>
  7. 7. 第一正規化目的 <ul><li>第一正規化乃在 消除 資料表上的 重複資料 </li></ul><ul><ul><li>一個表格中若有重複的欄位,應該將之分割,放置在不同的資料表中 </li></ul></ul><ul><ul><li>一個欄位若有多個資料值,也應該將之分割,放置在不同的紀錄裡 </li></ul></ul><ul><li>除了 供應商代號 及 供應商姓名 兩個欄位外,其餘欄位均有兩個資料值,因此不符合第一正規形式,必須將之分割到不同的紀錄上 </li></ul>
  8. 8. 刪除新增修改異常處理 <ul><li>考慮供貨紀錄表 ( 表 6.2) </li></ul><ul><ul><li>刪除異常 </li></ul></ul><ul><ul><ul><li>倘若 S04 結束營業,其供貨紀錄將被刪除,則連同 SM05 的相關資訊也會被一併刪除,因而造成資料的流失 </li></ul></ul></ul><ul><ul><li>新增異常 </li></ul></ul><ul><ul><ul><li>若有一家新超市開業,它尚未找到合適的供應商,這時若硬要將超市的資訊加入到供貨紀錄 資料 表,則會因有些鍵值是空白而產生異常 </li></ul></ul></ul><ul><ul><li>修改異常 </li></ul></ul><ul><ul><ul><li>例如 SM01 的助理由 MARY 換成 LINDA , 若只更新了 R2 而忘了更新 R3 及 R8 , 也會造成資料的不一致 </li></ul></ul></ul>
  9. 9. 功能相依 <ul><li>功能相關 ( Functional Dependency) , 或稱 「相依」 </li></ul><ul><ul><li>供貨紀錄表 ( 表 6.2) 上十個欄位屬性間之相依關係 </li></ul></ul><ul><ul><li>QTY 完全功能相關 (Fully Functional Dependency) 於 </li></ul></ul><ul><ul><li>「 SNO 、 PNO 、 SMNO 」 </li></ul></ul>
  10. 10. 屬性間的相依關係
  11. 11. 第一正規化之後
  12. 12. 第一正規化之後
  13. 13. 第二正規化 <ul><li>【定義】 第二正規化 (Second Normal Form , 簡稱 2NF) </li></ul><ul><ul><li>若且唯若關聯 R 為 1NF 且紀錄中的每一非鍵欄位都完全相關於主鍵 (PK) </li></ul></ul><ul><ul><li>每一個欄位只能與 主鍵 相依 </li></ul></ul><ul><ul><li>每一個欄位只能由 主鍵 來 唯一識別 ,但不可其中某些欄位可由主鍵的一部份來識別 </li></ul></ul><ul><ul><li>將 1NF 轉化為 2NF 之過程即在 消除非鍵欄位與主鍵間之部份功能相依 。 </li></ul></ul>
  14. 14. 第二正規化之後 <ul><ul><li>2NF 很明顯地改善了 1NF 的缺點 </li></ul></ul><ul><ul><ul><li>例如 S04 突然宣告倒閉,它的資料從「供應商資料表」剔除之後, SM05 的資訊依然完整的保存在「超市經理資料表」裡 </li></ul></ul></ul><ul><ul><ul><li>然而如果 SM05 關門大吉,自「超市經理資料表」將整筆記錄刪除之後,我們就無法查出北區的區長是誰了? </li></ul></ul></ul>
  15. 15. 第三正規化 <ul><li>【定義】 第三正規化 (Third Normal Form ,簡稱 3NF) </li></ul><ul><ul><li>若且唯若關聯 R 為 2NF 且紀錄中的每一非鍵欄位之屬性 </li></ul></ul><ul><ul><li>都不具有遞移相關於主鍵 (PK) 之特性 </li></ul></ul><ul><ul><li>將 2NF 轉化為 3NF 之過程即在 消除遞移相依 </li></ul></ul>
  16. 16. 第三正規化之後
  17. 17. 多重值相關 <ul><ul><li>多重值相關 Multi-Valued Dependency) </li></ul></ul><ul><ul><ul><li>超市助理資料表 </li></ul></ul></ul><ul><ul><ul><li>一家超市 均有可能對應到 多位助理 以及 多支電話 ( 例如 SM04 超市擁有 JOHN 和 JANE 兩位超市助理,而 SM01 超市擁有 22514172 和 22514173 兩支電話 ) </li></ul></ul></ul>
  18. 18. 多重值相關 <ul><ul><li>多重值相關 Multi-Valued Dependency) </li></ul></ul><ul><ul><ul><li>「超市助理」多重值相關於「超市代號」 </li></ul></ul></ul><ul><ul><ul><li>「電話」也多重值相關於「超市代號」 </li></ul></ul></ul><ul><ul><ul><li>表示這張資料表中有太多重複資料 </li></ul></ul></ul><ul><ul><ul><li>這對於資料的更新異動會產生許多異常現象 </li></ul></ul></ul><ul><ul><ul><li>需將超市助理資料表分割成兩張資料表 </li></ul></ul></ul>
  19. 19. 多重值相關處理後
  20. 20. 另一個正規化例子 <ul><li>設計一個「銷售資料庫」 </li></ul><ul><li>資料項 </li></ul><ul><ul><li>訂單序號 </li></ul></ul><ul><ul><li>訂貨日期 </li></ul></ul><ul><ul><li>單價 </li></ul></ul><ul><ul><li>庫存量等 </li></ul></ul><ul><ul><li>… </li></ul></ul>
  21. 21. 另一個正規化例子 <ul><li>原始資料 </li></ul>
  22. 22. 另一個正規化例子 <ul><li>正規化的過程 </li></ul><ul><ul><li>【步驟 1 】 </li></ul></ul><ul><ul><ul><li>去除重複資料,將表 6.5 分割成表 6.6 及表 6.7 </li></ul></ul></ul>
  23. 23. 另一個正規化例子
  24. 24. 另一個正規化例子 <ul><ul><li>【步驟 2 】 </li></ul></ul><ul><ul><ul><li>先由表 6.7 下手 </li></ul></ul></ul><ul><ul><ul><li>由「訂單序號」 + 「產品代號」可以決定出「訂購數量」 </li></ul></ul></ul><ul><ul><ul><li>由「產品代號」可以決定出「產品名稱」、「單價」及「庫存量」 </li></ul></ul></ul><ul><ul><ul><li>須滿足:「每一非鍵欄位都完全相關於主鍵 (PK) 」 </li></ul></ul></ul><ul><ul><ul><li>將表 6.7 分割成分別以「訂單序號」 + 「產品代號」以及「產品代號」為主鍵的兩張資料表,即表 6.8 及表 6.9 </li></ul></ul></ul>
  25. 25. 另一個正規化例子
  26. 26. 另一個正規化例子 <ul><ul><li>【步驟 3 】 </li></ul></ul><ul><ul><ul><li>從表 6.6 得知 </li></ul></ul></ul><ul><ul><ul><li>由「訂單序號」可以決定出「訂貨日期」、「送貨日期」及「客戶代號」 </li></ul></ul></ul><ul><ul><ul><li>由「客戶代號」可以決定出「客戶名稱」及「客戶地址」 </li></ul></ul></ul><ul><ul><ul><li>去除遞移相依 </li></ul></ul></ul><ul><ul><ul><ul><li>將表 6.6 分割成表成分別以「訂單序號」及「客戶代號」為主鍵的兩張資料表,即 6.10 及表 6.11 </li></ul></ul></ul></ul>
  27. 27. 另一個正規化例子
  28. 28. 一個簡易方法–類聚檢查法 <ul><li>物 以 類 聚 </li></ul><ul><ul><li>物 :資料項 </li></ul></ul><ul><ul><li>類 :實體 (Entity) 、資料表 </li></ul></ul><ul><li>檢查是否符合第一、第二及第三正規化型式 </li></ul>
  29. 29. 一個簡易方法–類聚檢查法 <ul><li>【步驟 1 】 </li></ul><ul><li>分析問題,收集所有資料項 </li></ul><ul><ul><li>訂單序號 </li></ul></ul><ul><ul><li>訂貨日期 </li></ul></ul><ul><ul><li>送貨日期 </li></ul></ul><ul><ul><li>客戶代號 </li></ul></ul><ul><ul><li>客戶名稱 </li></ul></ul><ul><ul><li>客戶地址 </li></ul></ul><ul><ul><li>產品代號 </li></ul></ul><ul><ul><li>訂購數量 </li></ul></ul><ul><ul><li>產品名稱 </li></ul></ul><ul><ul><li>單價 </li></ul></ul><ul><ul><li>庫存量等 </li></ul></ul>
  30. 30. 一個簡易方法–類聚檢查法 <ul><li>【步驟 2 】 </li></ul><ul><li>分析問題,找出 實體 (Entity) </li></ul><ul><ul><li>Product( 產品 ) 實體 </li></ul></ul><ul><ul><ul><li>存放所有與產品有關的資料 </li></ul></ul></ul><ul><ul><li>Customer ( 客戶 ) 實體 </li></ul></ul><ul><ul><ul><li>存放所有與客戶有關的資料 </li></ul></ul></ul><ul><ul><li>Orders ( 訂單 ) 實體 </li></ul></ul><ul><ul><ul><li>存放客戶的訂購資訊 </li></ul></ul></ul>
  31. 31. 一個簡易方法–類聚檢查法 <ul><li>【步驟 3 】 </li></ul><ul><li>將資料項分類,逐一擺放到適當的實體裡,並且須滿足: </li></ul><ul><ul><li>每一個實體都有 一個主鍵 </li></ul></ul><ul><ul><li>實體與實體間必須至少有一 關連 互相聯繫,使實體不致於成為孤島 </li></ul></ul><ul><li>因此,我們得到以下結果: </li></ul>
  32. 32. 一個簡易方法–類聚檢查法
  33. 33. 一個簡易方法–類聚檢查法 <ul><li>【步驟 4 】 </li></ul><ul><li>檢查每一個實體是否符合 1NF 、 2NF 、 3NF </li></ul><ul><ul><li>我們發現「 Orders 」實體中,一個訂單序號可能訂購好幾項產品,因而造成訂貨日期、送貨日期及客戶代號等資料會大量地重複 </li></ul></ul><ul><ul><li>下表中陰影部分的資料皆重複了 </li></ul></ul>
  34. 34. 一個簡易方法–類聚檢查法 <ul><li>很自然地我們將「 Orders 」實體分割成「 Orders 」實體和「 Orderslist 」實體,兩者以 訂單序號 相互聯繫,即 </li></ul>
  35. 35. 一個簡易方法–類聚檢查法 <ul><li>【步驟 5 】 </li></ul><ul><li>畫出實體關係圖 </li></ul>

×