正式進入第三階段:「數據掌控」!
昨天實作的 To-Do List API 雖然功能完整,但只要終端機一關閉,陣列裡的任務就會瞬間灰飛煙滅。一個沒有記憶的後端程式,就像是沒有存檔功能的遊戲。為了讓數據達到「永久保存(Persistence)」,我們必須將資料庫(Database)導入我們的架構中。
在後端的世界裡,資料庫有兩大門派正在激烈廝殺。在決定要學哪一個之前,你必須先搞懂它們的底層邏輯。
1. 秩序的守護者:SQL(關聯式資料庫)
代表產品:MySQL, PostgreSQL, SQL Server, Oracle
核心概念:極度嚴謹的「Excel 試算表」。
在 SQL(Structured Query Language)的世界裡,一切講求規矩與關聯。
你必須事先定義好表格(Table)的長相,也就是「Schema(綱要)」。例如,你規定「使用者表」只能有 id (數字)、name (字串)、email (字串)。如果你的程式試圖塞入一個 age 欄位,資料庫會無情地報錯並拒絕寫入。
-
優勢 1:資料一致性極高。 透過外鍵(Foreign Key)綁定,如果你想刪除一個會員,資料庫會先檢查他底下有沒有未完成的訂單,防止你產出「沒有主人的幽靈訂單」。
-
優勢 2:複雜查詢的王者。 支援強大的
JOIN 語法,可以瞬間把「會員」、「訂單」、「商品」、「折扣碼」四張表組合出精美的財務報表。
-
劣勢:架構死板。如果中途想要為幾百萬筆資料新增一個欄位,可能會是一場耗時的災難;擴充伺服器效能(垂直擴展)的成本較高。
2. 自由的拓荒者:NoSQL(非關聯式資料庫)
代表產品:MongoDB, Redis, Cassandra, DynamoDB
核心概念:無拘無束的「JSON 檔案櫃」。
NoSQL(Not Only SQL)是為了解決大數據與現代雲端架構而誕生的。最常見的 Document-based NoSQL(如 MongoDB)完全不需要事先定義表格結構。
你可以第一筆資料存入 { "name": "Bibo" },第二筆資料存入 { "name": "Alice", "skills": ["Node.js", "React"], "age": 25 }。資料庫照單全收。
-
優勢 1:開發速度極快。 前端傳什麼 JSON 過來,後端可以直接整包塞進資料庫,完全不需要管欄位對不對得上(Schema-less)。
-
優勢 2:天生適合分散式系統。 非常容易將資料分散到多台伺服器上(水平擴展),能扛住海量級別的讀寫流量。
-
劣勢:關聯性薄弱。如果你要查詢「買過某個商品的所有會員資料」,在 NoSQL 裡通常要分兩三次查詢自己手動拼湊,且資料庫不保證這中間不會有資料遺失的狀況(缺乏嚴謹的 ACID 交易機制)。
3. 實戰該怎麼選?
不要陷入「誰比較好」的迷思,高級工程師只看「場景」:
-
請選 SQL:電商系統、銀行金融、ERP 系統、任何對「錢」與「庫存」算得很精細,且資料結構明確的系統。
-
請選 NoSQL:IoT 物聯網感測器數據、社交媒體動態貼文、遊戲 Log 紀錄、或是你在做一個明天就要上線的 MVP(最小可行性產品),規格隨時會大改。
4. 環境準備與接下來的路線
為了讓你具備最扎實的後端硬實力,這 30 天的挑戰兩種我們都會學。
我們會先從 SQL 開始,因為理解「關聯式設計」是所有後端工程師的必修課;接著再帶你體驗 NoSQL (MongoDB) 的極速快感。
今天的課後任務(環境準備):
我們不打算讓你在自己電腦上痛苦地安裝資料庫軟體。在雲端時代,我們直接使用線上免費的資料庫服務(DBaaS)!
-
SQL 環境準備:請前往 Supabase 註冊一個免費帳號,並建立一個新專案(這背後是一台強大的 PostgreSQL 資料庫)。
-
(NoSQL 的 MongoDB Atlas 我們留到 Day 19 再來設定。)