資料庫是什麼?
資料庫,說穿了就是「存資料的地方」。你可能會想,那跟把東西存在檔案裡有什麼不一樣?差別在於資料庫可以幫你快速找到你要的東西、確保資料不會亂掉、而且很多人同時存取也不會打架。
你一定用過 Excel 吧?一個工作表,上面有很多欄位,每一列是一筆資料。資料庫的概念其實很像,只是它更強大、更可靠,而且可以處理幾百萬甚至幾億筆資料,速度還不會太慢。
你用過 Excel 嗎?資料庫就是更強大、更可靠的 Excel。它能處理百萬筆資料、支援多人同時存取,而且不會像 Excel 一樣動不動就當掉。
SQL vs NoSQL:兩大陣營
資料庫的世界基本上分成兩大類:SQL 和 NoSQL。這不是在問你「要不要學 SQL」(SQL 一定要學),而是在說資料庫的架構方式不同。
SQL 資料庫像是整理好的 Excel 表格——每個欄位都定義好了,資料要乖乖照格式放。NoSQL 資料庫比較像 JSON 檔案——結構很彈性,想加什麼欄位就加,不用事先規劃好。
| SQL | NoSQL | |
|---|---|---|
| 結構 | 固定欄位,像表格 | 彈性結構,像文件 |
| 彈性 | 低,改結構要遷移 | 高,隨時加欄位 |
| 適合場景 | 金融、電商、關聯資料 | 即時通訊、日誌、快速原型 |
| 代表 | PostgreSQL, MySQL | MongoDB, Redis |
大部分情況?選 PostgreSQL 就對了。它功能強大、社群活躍、免費開源,從小專案到大系統都撐得住。不知道選什麼的時候,選它不會錯。
常見的資料庫一覽
| 資料庫 | 類型 | 適合場景 |
|---|---|---|
| PostgreSQL | 全能型 | 大部分場景,特別是需要複雜查詢的 |
| MySQL | 最普及 | 中小型網站,WordPress 預設用這個 |
| MongoDB | 彈性高 | 快速開發、結構常變動的專案 |
| Redis | 超快 | 快取、Session、排行榜 |
| Elasticsearch | 搜尋專用 | 全文檢索、日誌分析 |
| SQLite | 輕量 | 手機 App、小工具、本地開發 |
新手該從哪個開始?
如果你是新手,建議從 PostgreSQL 或 MySQL 開始。兩個都是 SQL 資料庫,學會一個,另一個也差不多會了。SQL 語法是通用的,在哪個資料庫都能用。
先學會這幾個基本操作,你就能應付大部分的需求了:
查資料。「把所有訂單列出來」就是一個 SELECT。
新增資料。使用者註冊的時候,就是在 INSERT 一筆新的使用者資料。
修改資料。改密碼、改暱稱,都是 UPDATE。
刪除資料。使用的時候要特別小心,刪了就回不來了(除非你有備份)。
另外,搞懂幾個重要的概念:資料表(table)就是一張表格,欄位(column)就是表格的標題列,資料列(row)就是每一筆資料,主鍵(primary key)是每筆資料的身分證字號,外鍵(foreign key)是用來連結不同表格的橋樑。
總結
你可以做的作品
- 設計電商資料表 用戶、商品、訂單的關聯設計
- SQL 練習 用 PostgreSQL 寫基本的 CRUD 和 JOIN
- Redis 快取實作 把常用查詢結果存到 Redis
- 資料遷移腳本 練習把 CSV 匯入資料庫
需要具備的觀念
- SQL vs NoSQL 的差異和適用場景
- 資料表設計和正規化
- Primary Key 和 Foreign Key
- 索引的原理和使用時機
- ACID 特性
- 讀寫分離和連接池