主要有兩種資料庫管理系統(DBMS):關聯式和 NoSQL。前者用表格來處理資料,一切都很有條理,像 Excel 一樣。後者比較自由,不需要嚴格的結構。這很適合你沒有明確資料結構,或是結構常常變動的時候。
對了,NoSQL 不是「不 SQL」的意思,其實是「不只 SQL」(Not Only SQL)。很多 NoSQL 系統也能理解 SQL 查詢,只是運作方式有點不一樣。
常見的 DBMS 範例:
- 關聯式:PostgreSQL、MySQL、Microsoft SQL Server。
- NoSQL:MongoDB、Cassandra、Redis。
關聯式 DBMS
關聯式資料庫(RDB)把資料組織成表格,每一列就是一筆紀錄(或物件),每一欄就是一個欄位(屬性)。表格之間用 key 來連結:主鍵(用來識別紀錄)和外鍵(用來連結表格)。
這裡有個經典的「學生」表格範例,在關聯式 DBMS 裡:
| id | name | age | group |
|---|---|---|---|
| 1 | Anna | 21 | KA-01 |
| 2 | Eve | 20 | KA-02 |
| 3 | Max | 22 | KA-01 |
關聯式 DBMS 的重點特色:
- 資料結構很嚴謹。
- 表格之間的關聯用 key 來定義。
- 跟資料互動用 SQL(Structured Query Language)。
優點
- 嚴謹的資料結構:表格保證每個物件都有固定的欄位,管理資料更簡單。
- 資料完整性:靠主鍵和外鍵,關聯式 DB 可以避免資料集出現不一致。
- 支援 ACID 標準:關聯式 DBMS 保證交易的可靠性,遵循原子性、一致性、隔離性和持久性。
- 支援複雜查詢:SQL 可以做很強大的查詢、排序和彙總。
關聯式 DBMS 很適合資料結構很明確,而且每個細節都要對得很精準的場合。像銀行系統,不能有任何遺漏——每一筆帳戶動作都要被追蹤。或者像帳務系統:發票、客戶、倉庫通常結構都很固定,用表格來存很方便。還有很多 web 應用程式,像用戶清單、商品、訂單——這些都很適合用表格和嚴格的關聯來處理。
NoSQL DBMS
NoSQL(Not Only SQL)就是不採用關聯式模型的 DBMS。資料可以用文件、key-value、圖形或欄位的方式存。重點就是彈性:你可以用最適合你需求的方式存資料,不用被嚴格規則綁死。當然,這也有代價。
NoSQL 資料存法範例(以 MongoDB 為例):
{
"id": 1,
"name": "Alex",
"age": 21,
"group": "KA-01"
}
NoSQL DBMS 其實有很多種——看它怎麼存資料。例如,文件型 DBMS,像 MongoDB,就是用很彈性的結構,資料存成文件,通常是 JSON 格式。這很適合每筆資料結構都可能不一樣的情況。
Key-value DBMS,像 Redis,就是一個超大的「key:value」儲存空間。很適合拿來做快取或快速存取簡單設定。
如果你要處理物件之間的關聯——像分析社群朋友或規劃路線——那就很適合用 圖形 DBMS,像 Neo4j。它們把資料存成節點和關聯,很適合這種結構。
還有 欄式 DBMS,像 Apache Cassandra 或 HBase,是用欄位來存資料,不是用列。這對於大量資料、只要分析特定指標(像分析或 Big Data 系統)特別有用。
為什麼、什麼時候該選 NoSQL
NoSQL 資料庫很適合傳統關聯式 DBMS 開始吃不消的時候。它有幾個很強的優點:
- 很快。NoSQL 處理超大量資料很厲害——查詢速度快,就算資料很多、結構不像 Excel 表格那麼整齊也沒問題。
- 彈性高。資料結構可以隨時改:今天三個欄位,明天五個,也不會壞掉。
- 容易擴充。資料太多時,可以直接分散到不同伺服器。這叫做水平擴充,NoSQL 超愛這一招。
- 很適合 Big Data。如果你有一堆 log、事件、用戶行為或其他「原始」資料,沒有明確結構——NoSQL 很能搞定。
這種 DBMS 特別適合這些情境:
- 資料量成長很快、結構常變(像 log 或事件分析),
- 需要快速查找和彙總資料(像分析),
- 有複雜的關聯網路,像社群網站(這時圖形 DBMS 很適合)。
簡單說,如果你的專案比較像活生生的有機體,而不是死板的表格,NoSQL 可能就是你要的東西。
關聯式與 NoSQL DBMS 比較
| 特性 | 關聯式 DBMS | NoSQL DBMS |
|---|---|---|
| 資料儲存方式 | 表格、列、欄 | 文件、圖形、key-value、欄 |
| 查詢語言 | SQL | 看實作(例如 MongoDB Query) |
| 資料完整性 | 高(主鍵/外鍵) | 看實作(不一定保證完整性) |
| 擴充性 | 垂直擴充(加強伺服器效能) | 水平擴充(分散到多台伺服器) |
| 結構彈性 | 結構固定(表格和欄位都定死) | 動態結構(可以隨時變) |
| 效能 | 適合結構化資料 | 大量、結構不明確資料時效能高 |
| 範例 | PostgreSQL、MySQL、Oracle Database | MongoDB、Cassandra、Redis |
什麼時候選關聯式或 NoSQL DBMS?
關聯式 DBMS:
- 資料結構很嚴謹時。
- 需要交易支援時。
- 需要用 SQL 做複雜分析時。
NoSQL DBMS:
- 需要資料結構彈性時。
- 擴充性比結構嚴謹更重要時。
- 要處理大量、難以用表格組織的資料時。
可以這樣比喻:關聯式 DBMS 就像 Excel 表格,一切都排得整整齊齊。NoSQL 則像一塊留言板,什麼都能貼上去,從便條到照片都行。
GO TO FULL VERSION