如果你正在打造你的第一個實際應用程式,你很快就會遇到這個問題:「我應該使用 SQL 還是 NoSQL?」
這聽起來有點嚇人,但一旦你掌握核心概念,其實非常簡單。讓我們來拆解說明。
資料庫到底是什麼?
資料庫就是存放你應用程式資料的地方,這樣資料就不會在你關閉瀏覽器的那一刻消失。把它想像成一個非常有條理的檔案櫃。如何整理這個檔案櫃,就是 SQL 和 NoSQL 分道揚鑣的地方。
SQL 資料庫:結構化且嚴謹
SQL 資料庫(如 PostgreSQL、MySQL 或 SQLite)將資料儲存在資料表中——以列和欄的方式,就像試算表一樣。每一列都遵循相同的結構,而且資料表之間可以相互連結。
範例:簡單的 users 和 orders 設定。
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id),
item VARCHAR(100),
price DECIMAL
);
Enter fullscreen mode Exit fullscreen mode
想要取得特定使用者的所有訂單?只需要一個簡潔的查詢:
SELECT orders.item, orders.price
FROM orders
JOIN users ON orders.user_id = users.id
WHERE users.email = '[email protected]';
Enter fullscreen mode Exit fullscreen mode
那個 JOIN 就是 SQL 的超能力。資料之間的關聯性由資料庫本身強制執行,而且跨資料表的查詢也非常直觀。
NoSQL 資料庫:彈性且快速
NoSQL 資料庫(如 MongoDB、Firebase 或 Redis)不會強迫你的資料放入僵化的資料表。最常見的類型——文件資料庫——將資料儲存為類似 JSON 的物件,而且每個文件的外觀可以彼此不同。
範例:在 MongoDB 中相同的「使用者與訂單」概念。
{
"_id": "0001",
"name": "Jane",
"email": "[email protected]",
"orders": [
{ "item": "Keyboard", "price": 45 },
{ "item": "Mouse", "price": 20 }
]
}
Enter fullscreen mode Exit fullscreen mode
關於 Jane 的所有資訊都存在單一文件中。不需要 join——你只要直接取出即可。
真正的差異
| SQL | NoSQL | |
|---|---|---|
| 結構 | 固定資料表、列與欄 | 彈性文件/物件 |
| 綱要 | 預先定義 | 隨時可以變更 |
| 關聯性 | 透過 joins 建立強關聯 | 通常採用巢狀或重複方式 |
| 擴展性 | 主要是垂直擴展(更大型的伺服器) | 原生支援水平擴展 |
| 適合情境 | 交易處理、複雜查詢 | 快速迭代、大量寫入 |
那麼我應該使用哪一種?
老實說,這取決於你正在打造什麼。
- 如果你正在打造涉及金錢、庫存,或任何需要嚴格一致性的東西(銀行、金融、電子商務結帳)?選擇 SQL。
- 如果你正在打造資料結構經常變動,或需要快速處理大量讀寫的應用(聊天應用程式、活動動態、內容平台)?NoSQL 更適合。
這裡是大多數教學忽略的部分:你不必只選擇其中一種。許多實際上線的應用程式會同時使用兩者——使用 SQL 存放核心交易資料,並搭配 Redis 作為快取,或使用 MongoDB 存放日誌和分析資料。這種混合方式有時被稱為多語持久化,而且比人們想像中更常見。
總結
SQL 與 NoSQL 其實不是一場戰爭——它是在結構與彈性之間的權衡。一旦你了解每種資料庫真正擅長的地方,選擇通常會根據你正在打造的東西而自然浮現。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.