iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0

在建立資料表時我們需要確保每張表都有經歷過正規化
正規化的目的

  1. 減少資料重複
  2. 避免資料異常
  3. 提高資料一致性
    簡單來說,就是把一個「大表」拆成多個「小表」,並用鍵(Key)把它們關聯起來
    正規化的步驟
    正規化有分
    第一正規化1NF
  • 每個欄位的值都是原子值(不可再分)
  • 表格中的每一列都是唯一的
    第二正規化2NF
  • 先符合1NF
  • 每個非鍵欄位都完全依賴於主鍵(消除部分依賴)
    第三正規化3NF
  • 先符合2NF
  • 非鍵欄位不依賴於其他非鍵欄位(消除傳遞依賴)

這裡會舉一個簡單的例子
訂單編號 客戶姓名 客戶電話 商品名稱 商品價格 數量
001 小明 0912-123-456 筆記本 500 2
001 小明 0912-123-456 滑鼠 200 1
002 小華 0987-654-321 鍵盤 300 1
這是一個訂單表(原始表)
首先來看他有沒有符合第一正規化
因為表的每欄都是唯一,所以已經符合第一正規化

再來是第二正規化,每個非鍵值位都要完全依賴主鍵
假如主鍵是訂單編號+商品名稱
那客戶姓名還有客戶電話都只依賴訂單編號,存在部分依賴,所以可以分成兩張表

訂單表(訂單資訊)
訂單編號 客戶姓名 客戶電話
001 小明 0912-123-456
002 小華 0987-654-321

訂單明細表(商品資訊)
訂單編號 商品名稱 商品價格 數量
001 筆記本 500 2
001 滑鼠 200 1
002 鍵盤 300 1

最後是第三正規化
因為商品價格只依賴商品名稱,所以訂單明細表會再拉一個表出來叫做商品表
所以經過正規化結束後會有三個表
訂單表
訂單編號 客戶姓名 客戶電話
001 小明 0912-123-456
002 小華 0987-654-321

商品明細表
訂單編號 商品名稱 商品價格 數量
001 筆記本 500 2
001 滑鼠 200 1
002 鍵盤 300 1

商品表
商品名稱 商品價格
筆記本 500
滑鼠 200
鍵盤 300

這樣我們就完成正規化所有過程,並且資料變更少,更好更新了


上一篇
Day 25 控制用戶存取
下一篇
Day 27 前置作業
系列文
跟著生成式AI一起從零開始學習資料庫,30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言