Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

資料庫架構設計入門:什麼是正規化形式?

最後更新:2026年1月7日資料庫

上一篇文章我們學到了「第二正規化形式」,知道怎麼透過拆表單、刪欄位來避免重複資料。

但你可能會好奇:為什麼叫「第二」正規化形式?還有第一、第三嗎?這些正規化形式到底是什麼?

這篇文章會解釋正規化形式的由來,以及什麼時候可以打破這些規則。

正規化形式是什麼?

正規化形式(Normal Form,簡稱 NF)是前人在資料庫發展的歷史中,發現的一些重要原則。

為什麼會有正規化形式?

在資料庫剛開始發展的時候,大家都在摸索:表單要怎麼設計才好?欄位要怎麼安排?

經過很多人的實際經驗和研究,他們發現了一些共同的問題:

  • 把太多欄位塞在同一張表單,會造成資料重複
  • 資料重複之後,修改的時候要改很多次
  • 改很多次就容易漏改,造成資料不一致

於是,這些前人把他們的經驗整理成一套規則,告訴後人:「如果你要設計資料庫的表單架構,最好遵循這些規則。」

這些規則就是「正規化形式」。

正規化形式的目標

所有正規化形式的目標都是同一個:

確保資料庫裡的資料不會重複。

不同的正規化形式,是從不同的角度來檢查「有沒有重複」。

例如第二正規化形式,就是在檢查:「這張表單裡,有沒有欄位是跟著其他欄位走的?如果有,就應該拆出去。」

簡單來說

正規化形式就是前人留下來的智慧。

你不需要自己從零開始摸索怎麼設計資料庫,只要遵循這些規則,就能設計出乾淨、不重複的資料庫架構。

為什麼叫「第二」正規化形式?

你可能會問:為什麼上一篇文章介紹的是「第二」正規化形式,而不是從第一個開始?

原因很簡單:這樣比較好理解。

正規化形式有很多條,常見的有:

  • 第一正規化形式(1NF)
  • 第二正規化形式(2NF)
  • 第三正規化形式(3NF)
  • 還有更多…

但這些編號只是教學和溝通上的方便。實際上,你不需要死背「這是第幾條」,重要的是理解背後的原則。

設計表單設計久了之後,你會發現這些規則其實非常符合直覺。我們把它們點出來,是為了讓大家有一個明確的規則可以依循。

什麼時候可以打破正規化形式?

這些規則大概適用於 90% 的情況,但總是有例外。

效能考量

舉個例子:假設你已經把表單拆得很乾淨,每次要查「飯店電話」的時候,你要:

  1. 先從訂房表單找到房型 ID
  2. 再從房型表單找到飯店 ID
  3. 最後從飯店表單找到電話

這樣要跨兩張表單才能找到電話,效能可能會比較差。

如果你的系統非常在意查詢速度,而且你很確定這個欄位不會經常修改,那你可以刻意違反正規化形式,把電話直接存在訂房表單裡,省去查詢的時間。

彈性考量

有時候為了系統的彈性,也會刻意保留一些重複的資料。

重點:先學規則,再學打破規則

但要記住一件事:

我們都是先學規則,再來學什麼情境下可以打破規則。

絕對不是一開始就漫無目標地亂做,然後說「本來就沒有規則」。

學任何東西都是這樣:

  1. 先把正規化形式學好
  2. 嚴格遵守這些規則
  3. 直到你遇到特殊情況(效能、彈性等考量)
  4. 你可以刻意違反正規化形式,但要能說出原因

如果你說不出為什麼要違反規則,那就代表你應該繼續遵守規則。

正規化形式與欄位限制

在實作正規化形式的時候,我們有時候會需要替欄位加上一些「限制」。

這些限制可以幫助我們:

  • 確保進來的資料符合規定
  • 如果資料不符合限制,就會被拒絕,不會被存進資料庫

例如:你可以設定「會員 ID」欄位不能是空的,或者「房型 ID」必須對應到房型表單裡的某一筆資料。

這些限制會在後續的文章中詳細說明,現在只要知道有這個東西就好。

正規化形式重點整理

這篇文章介紹了正規化形式的基本概念:

  1. 正規化形式是前人留下來的智慧,幫助我們設計不重複的資料庫
  2. 常見的有 1NF、2NF、3NF,但不需要死背編號,重要的是理解原則
  3. 核心目標是讓重複的資料最小化
  4. 90% 的情況應該遵守規則,但在效能或彈性的考量下,可以刻意違反
  5. 先學規則,再學打破規則——要能說出為什麼違反,才能違反
  6. 後續會介紹欄位限制,幫助我們實作正規化形式

接下來的文章會繼續介紹其他的正規化形式,以及如何用欄位限制來確保資料的正確性。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 正規化形式是什麼?
  • 為什麼會有正規化形式?
  • 正規化形式的目標
  • 簡單來說
  • 為什麼叫「第二」正規化形式?
  • 什麼時候可以打破正規化形式?
  • 效能考量
  • 彈性考量
  • 重點:先學規則,再學打破規則
  • 正規化形式與欄位限制
  • 正規化形式重點整理