CodeGym /課程 /SQL SELF /資料庫管理系統的種類:關聯式與 NoSQL

資料庫管理系統的種類:關聯式與 NoSQL

SQL SELF
等級 1, 課堂 2
開放

主要有兩種資料庫管理系統(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)。

優點

  1. 嚴謹的資料結構:表格保證每個物件都有固定的欄位,管理資料更簡單。
  2. 資料完整性:靠主鍵和外鍵,關聯式 DB 可以避免資料集出現不一致。
  3. 支援 ACID 標準:關聯式 DBMS 保證交易的可靠性,遵循原子性、一致性、隔離性和持久性。
  4. 支援複雜查詢: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 開始吃不消的時候。它有幾個很強的優點:

  1. 很快。NoSQL 處理超大量資料很厲害——查詢速度快,就算資料很多、結構不像 Excel 表格那麼整齊也沒問題。
  2. 彈性高。資料結構可以隨時改:今天三個欄位,明天五個,也不會壞掉。
  3. 容易擴充。資料太多時,可以直接分散到不同伺服器。這叫做水平擴充,NoSQL 超愛這一招。
  4. 很適合 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 則像一塊留言板,什麼都能貼上去,從便條到照片都行。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION