Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

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

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

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

資料庫入門:關聯式與非關聯式資料庫的差異

最後更新:2025年12月31日資料庫

前面的文章我們提到,資料庫的欄位(Column)一旦設計好,通常不建議隨意增減。

但有些情況下,資料的「共同性質」並不固定,這時候傳統的表格設計就會遇到困難。

這就牽涉到資料庫的兩大流派:關聯式資料庫與非關聯式資料庫。

這篇文章會帶你認識這兩種資料庫的差異,以及它們各自適合的使用情境。

資料庫的兩大流派

資料庫依照「欄位是否固定」,可以分成兩大流派:

流派欄位特性對應語法
關聯式資料庫欄位固定SQL
非關聯式資料庫欄位彈性NoSQL
欄位特性欄位固定
對應語法SQL
欄位特性欄位彈性
對應語法NoSQL

你可能聽過 SQL 和 NoSQL 這兩個詞,它們就是對應這兩種資料庫的操作語法。

💡 NoSQL 不是「不要 SQL」的意思,而是 Not Only SQL(不只是 SQL)。因為實務上,大多數系統會同時使用關聯式和非關聯式資料庫,互相搭配。

關聯式資料庫(SQL)

什麼是關聯式資料庫?

關聯式資料庫的特色是:欄位在一開始就固定下來,之後不能隨意增減。

當你建立一張資料表時,必須先定義好有哪些欄位:

姓名年齡居住地
小明28台北
小美26高雄
年齡28
居住地台北
年齡26
居住地高雄

之後每新增一筆資料,都必須照著這個結構填寫。

你不能在新增某一筆資料時,突然多一個「電話」欄位:

姓名年齡居住地電話
小明28台北❌ 不存在這個欄位
年齡28
居住地台北
電話❌ 不存在這個欄位

如果需要「電話」欄位,必須先去修改資料表的欄位定義,讓整張表都多出這個欄位:

姓名年齡居住地電話
小明28台北NULL
小美26高雄NULL
小王30台中0912-345-678
年齡28
居住地台北
電話NULL
年齡26
居住地高雄
電話NULL
年齡30
居住地台中
電話0912-345-678

修改後,整張表的所有資料都會多出「電話」欄位,舊資料的電話會是空值(NULL)。

為什麼欄位要固定?

欄位固定的好處是:資料結構嚴謹,不容易出錯。

  • 每筆資料都有相同的欄位,格式一致
  • 可以設定欄位的限制(例如:年齡必須是數字、姓名不能空白)
  • 讀取資料時,你可以確定每筆資料長什麼樣子

這就像是一份標準化的表單,每個人填的欄位都一樣,不會有人自己亂加欄位。

關聯式資料庫的術語

術語說明
Table(表格)儲存資料的表格
Column(欄位)直行,代表資料的共同屬性
Row(列)橫列,代表一筆完整的資料
說明儲存資料的表格
說明直行,代表資料的共同屬性
說明橫列,代表一筆完整的資料

非關聯式資料庫(NoSQL)

什麼是非關聯式資料庫?

非關聯式資料庫的特色是:欄位可以彈性變動,不需要事先固定。

非關聯式資料庫的儲存方式很像 JSON 格式,每筆資料就像一個獨立的物件,可以有自己的欄位:

資料 1:{ "姓名": "小明", "年齡": 28, "居住地": "台北" }

資料 2:{ "姓名": "小美", "電話": "0912-345-678", "興趣": "閱讀" }

你會發現,資料 1 和資料 2 的欄位完全不同,這在非關聯式資料庫中是允許的。

為什麼需要彈性欄位?

有些情況下,資料的結構很難事先定義:

  • 商品資料:書籍有「作者、頁數」,衣服有「尺寸、顏色」,食品有「有效期限、成分」,欄位差異很大
  • 使用者偏好設定:每個使用者可能有不同的設定項目
  • 日誌紀錄:不同類型的事件,記錄的資訊不同

這時候,非關聯式資料庫的彈性就很有用。

非關聯式資料庫的術語

在關聯式資料庫中,所有資料的欄位必須「對齊」——每筆資料都有相同的欄位,排列成整齊的表格。但非關聯式資料庫沒有這個限制,每筆資料可以有不同的欄位,不需要對齊成表格。

因此,非關聯式資料庫的術語也不太一樣:

關聯式術語非關聯式術語說明
Table(表格)Collection(資料集)存放資料的容器
Column(欄位)Field(領域)資料的屬性,但不需要對齊
Row(列)Document(文件)一筆完整的資料
非關聯式術語Collection(資料集)
說明存放資料的容器
非關聯式術語Field(領域)
說明資料的屬性,但不需要對齊
非關聯式術語Document(文件)
說明一筆完整的資料

非關聯式資料庫的儲存方式很像 JSON 格式,所以拿出來的資料可以直接當作物件使用,不需要額外轉換。

兩種資料庫的比較

比較項目關聯式資料庫(SQL)非關聯式資料庫(NoSQL)
欄位固定,事先定義彈性,可隨時變動
結構嚴謹,每筆資料格式一致靈活,每筆資料可以不同
適合情境結構明確的資料(會員、訂單、交易)結構不固定的資料(日誌、偏好設定)
學習順序初階,先學這個進階,之後再學
代表產品MySQL、PostgreSQL、SQLiteMongoDB、Redis、Firebase
關聯式資料庫(SQL)固定,事先定義
非關聯式資料庫(NoSQL)彈性,可隨時變動
關聯式資料庫(SQL)嚴謹,每筆資料格式一致
非關聯式資料庫(NoSQL)靈活,每筆資料可以不同
關聯式資料庫(SQL)結構明確的資料(會員、訂單、交易)
非關聯式資料庫(NoSQL)結構不固定的資料(日誌、偏好設定)
關聯式資料庫(SQL)初階,先學這個
非關聯式資料庫(NoSQL)進階,之後再學
關聯式資料庫(SQL)MySQL、PostgreSQL、SQLite
非關聯式資料庫(NoSQL)MongoDB、Redis、Firebase

SQL 與 NoSQL 的語法差異

雖然這篇文章不會深入講語法,但可以先讓你有個概念。

SQL(關聯式資料庫)

讀取資料:

SQL 讀取資料的特色是:先說要取哪些欄位,再說從哪張表取。

SELECT 姓名, 年齡 FROM 會員表 WHERE 居住地 = '台北'

順序是:

  1. SELECT 姓名, 年齡:先說要取哪些欄位
  2. FROM 會員表:再說從哪張表取
  3. WHERE 居住地 = '台北':最後說篩選條件

新增/刪除/更新:

這三種操作的特色是:先說動作類型,再說對哪張表操作。

INSERT INTO 會員表 (姓名, 年齡) VALUES ('小明', 28)
DELETE FROM 會員表 WHERE 姓名 = '小明'
UPDATE 會員表 SET 年齡 = 29 WHERE 姓名 = '小明'

順序是:先說動作類型(INSERT / DELETE / UPDATE),再說表格,最後說欄位和值。

NoSQL(非關聯式資料庫)

NoSQL 語法的特色是:先說要操作哪個資料集,再說篩選條件。

讀取資料:

db.會員集.find({ 居住地: "台北" })

順序是:

  1. db.會員集:先說要操作哪個資料集
  2. .find({ 居住地: "台北" }):再說篩選條件

因為資料拿出來就像 JSON 物件,所以不需要特別指定要取哪些欄位,拿出來之後直接處理就好。

新增/刪除/更新:

db.會員集.insertOne({ 姓名: "小明", 年齡: 28 })

db.會員集.deleteOne({ 姓名: "小明" })

db.會員集.updateOne({ 姓名: "小明" }, { $set: { 年齡: 29 } })

順序一樣是:先說資料集,再說條件和內容。

兩者的關鍵差異

比較項目SQLNoSQL
語法順序先說動作,再說表格先說資料集,再說條件
取出的資料格式表格格式,需要轉換JSON 物件,可直接使用
指定欄位必須明確指定要取哪些欄位不需要,整筆資料直接拿出來
SQL先說動作,再說表格
NoSQL先說資料集,再說條件
SQL表格格式,需要轉換
NoSQLJSON 物件,可直接使用
SQL必須明確指定要取哪些欄位
NoSQL不需要,整筆資料直接拿出來

初學者該從哪個開始?

建議先學關聯式資料庫(SQL)。

原因:

  1. 歷史悠久,是主流:大部分系統的核心資料都用關聯式資料庫
  2. 結構嚴謹,適合入門:欄位固定,比較容易理解和學習
  3. 實務上是基礎:就算之後用到非關聯式資料庫,通常也是搭配關聯式資料庫一起使用

所以在接下來的課程中,我們會先介紹關聯式資料庫的基礎操作。

小結

資料庫有兩大流派:

流派特色語法
關聯式資料庫欄位固定、結構嚴謹SQL
非關聯式資料庫欄位彈性、結構靈活NoSQL
特色欄位固定、結構嚴謹
語法SQL
特色欄位彈性、結構靈活
語法NoSQL

對於初學者來說,先學關聯式資料庫是最好的起點。掌握了基礎之後,再學非關聯式資料庫會更容易理解它的優勢和使用情境。

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

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 資料庫的兩大流派
  • 關聯式資料庫(SQL)
  • 什麼是關聯式資料庫?
  • 為什麼欄位要固定?
  • 關聯式資料庫的術語
  • 非關聯式資料庫(NoSQL)
  • 什麼是非關聯式資料庫?
  • 為什麼需要彈性欄位?
  • 非關聯式資料庫的術語
  • 兩種資料庫的比較
  • SQL 與 NoSQL 的語法差異
  • SQL(關聯式資料庫)
  • NoSQL(非關聯式資料庫)
  • 兩者的關鍵差異
  • 初學者該從哪個開始?
  • 小結