關聯式資料庫設計 1

學習關聯式資料庫設計

August 20, 2026

在從事前端工程的這段時間中,跟後端的協作多半來自串接 API,對於後端在資料庫設計,資料表的欄位設計等沒有著墨太深,只知道資料庫設計跟效能上也有很大的關係。 這系列可能不會涉及太深或太複雜的資料庫設計,多半是我為了釐清學習過程中的問題以及複習的文字紀錄。

課程: Udemy - Relational Database Design Bootcamp

在開始之前,想先彙整一些資料庫設計會用到的台灣繁體中文翻譯跟英文對照。

英文台灣繁體中文
Entitiy實體
Cloumn行
Row列
NoSQL DB非關聯式資料庫
RDB關聯式資料庫
RDBMS關聯式資料庫管理系統
Primary Key主鍵
1NF第一正規化

不一樣的資料庫類別

在第一部分 Introduction of Database Design,講師透過簡報說明資料庫以及資料庫設計的一些概要與原則。

平面檔案資料庫 (Flat File DB)

簡易的資料庫,所有資料儲存在單一表格或是試算表,適用於規模較小的資料集,常見的有 CSV, TXT。

非關聯式資料庫 (NoSQL DB)

專為非結構化或半結構化資料設計,適用於大規模或快速變化的資料,市場常見的有 MongoDB, Cassandra。

關聯式資料庫 (RDB)

一種將資料組成由行和列組成的表(即「關係」)的資料庫

  • 每張表代表一個不同的實體(如藝術家、客戶等)
  • 每一列是一筆記錄,每一行是一個欄位或屬性
  • 可在不同表之間建立關係,以關聯相關資料
  • 提升資料的可靠性與完整性

好的表格 vs. 壞的表格

一張表格有固定的結構,基本原則如下:

  • 行與列:構成資料表的基本網格,分別代表屬性(Attributes)與記錄(Records)。
  • 主鍵:確保資料表中的每一筆紀錄都有獨一無二的識別方式。
  • 資料型態:限制欄位內只能儲存特定型態的值,維持資料一致性。
  • 原子性):確保每個儲存格(欄位值)皆為不可分割的單一值,這正是修正前一個例子中 playlists 欄位夾雜多個值的關鍵所在。

範例

不符合資料庫設計結構的表格

first_namelast_namedate_of_birthstatecountryplaylists
AndrewSmith1998-03-11WisconsinUSAEasy Listening
MichaelPortmanDec 3rd 1995New HampshireUSAbest of 2024, best of 2025
JosephSamuel2003-07-20New YorkUSA90's classics

符合資料庫設計結構的表格

sb_idfirst_namelast_namedate_of_birthstatecountry
1AndrewSmith1998-03-11WisconsinUSA
2MichaelPortman2000-09-15New HampshireUSA
3JosephSamuel2003-07-20New YorkUSA

從不符合設計結構的表格來看,它主要違反了:

  • 未達成原子性:
    • playlists 欄位中儲存了多個以逗號分隔的值(例如:best of 2024, best of 2025)。在 1NF 的規範下,每個欄位都必須是不可分割的單一值(即原子值),不能在同一個欄位內塞入多個資料。
    • date_of_birth 欄位格式不一致(例如:Dec 3rd 1995 與標準的 YYYY-MM-DD 格式不同),這也會導致資料型態不一致與後續查詢、排序上的困難。
  • 無主鍵

資料庫設計目標

這邊是概念的部分,我覺得可以記一下,然後去對照資料庫是否有違反設計原則,再來思考怎麼最佳化。

促進資料完整性與可靠性

涉及資料庫中所儲存資料的準確性、一致性和可靠性。

  • 確保資料在任何時間(插入、更新、刪除操作期間)均保持正確且有效。
  • 透過規則、約束和通用實踐來強制執行。
  • 確保表中的每筆記錄都能被唯一標識,並防止重複記錄。
  • 確保資料庫中的關聯資料能夠被正確引用。
  • 防止邏輯錯誤,並確保使用者能夠信賴這些資料來進行決策。

最小化資料冗餘

  • 避免在資料庫的多個位置重複存放相同的資料
  • 節省儲存空間並降低資料不一致的風險

維護性與可擴展性

  • 讓資料庫更容易進行更新、修改與擴充,且不會破壞現有的功能
  • 針對未來資料量與使用者負載的成長進行設計

有效率的資料存取與查詢效能

  • 規劃資料表與索引的結構,以支援快速且有效率的資料檢索

安全性與存取控制

  • 定義角色與權限來控管誰能檢視或修改資料
  • 使用檢視(Views)來限制對敏感資料的存取

考量業務與邏輯

  • 在資料庫設計中捕捉並強制執行與業務領域相關的規則和邏輯
  • 設計資料庫以適應未來的變更,而無需進行重大重新設計
回到部落格 🏃🏽‍♀️