Skip to main content

RDBMS & NoSQL

關聯式資料庫 RDBMS

Relational Database Management System 又稱關聯式資料庫系統 (RDBMS),主要有以下幾個特點:

  • 資料是以資料表 (Table) 的方式存放,每一列 (Row) 都代表一筆資料,而每一欄 (Column) 則被稱為資料欄位 (Field),代表意義為屬性 (Attribute)。

RDBMS from ALPHA Camp

  • 一般都用來儲存結構化的資料,資料之間有明確的關聯。
  • 以 SQL (Structured Query Language 結構化查詢語言) 操作。
  • 每個資料表一定要有一個主鍵 (Primary Key) 的欄位,而多個資料表之間可使用外鍵 (Foreign Key) 建立關聯。
  • 可以使用 JOIN 合併資料表,搭配正規化和反正規化
  • 遵循 ACID 原則,來保證交易一致性 (Transaction)。

非關聯式資料庫 NoSQL

NoSQL 的意思為 Not Only SQL,不限定為關聯式資料庫的統稱,主要有以下特性:

  • 每筆資料為一份文件 (Document),這些文件會組成集合 (Collection),通常將資料儲存為 JSON 文件。

NoSQL from ALPHA Camp

  • 通常不使用關聯模型,也並不需要固定的結構 (Schema-Free)。但有需要時, NoSQL 也可以使用關聯模型與 Schema
  • 放寬關聯式資料庫的一致性限制。
  • 資料物件由 Key-Value Pair (屬性-值) 或陣列組成。

何時使用 RDBMS? 何時使用 NoSQL?

沒有說一定要使用關聯式資料庫或是非關聯式資料庫,端看當時的使用情境與需求,分析兩個資料庫的特性,去選擇最適合的資料庫。

使用 RDBMS

  • 資料格式應用上變動幅度小且有明確的資料格式。
  • 資料要求準確性高不能出錯,且需要確保符合 ACID 特性的情境,像是銀行轉帳、金融交易等。

舉例來說,如果今天已經從你的帳戶轉一筆款項給店家,系統一定要同步「帳戶已經扣除這筆款項」這個訊息。

否則轉出的款項,可能會被重複扣除,或者其他系統會誤以為我們帳戶的結餘跟匯款前一樣。

使用 NoSQL

  • 開發初期而且需求變化很快,Database Schema 常常需要修改,不太好預先定義。
  • 對於簡單的查詢需要快速的回應。
  • 不講求資料同步,只求最後結果一致。

舉例來說,像是在 Facebook 上的貼文的按讚數,這個數字的準確性就不是非常重要。

當這篇貼文獲得第 100 個按讚時,某些使用者可能會看到最新的數字,但部分使用者可能需要間隔幾十秒後才能看到按讚數的變更。

這些訊息的延誤,將不會造成太大的問題。

SQL 和 MongoDB 的術語比較

SQLMongoDB
集合
文件
欄位
主索引鍵物件 ID
索引索引
陣列陣列
巢狀表格或物件內嵌文件

結語

這裡僅簡單介紹了 RDBMS 和 NoSQL 的特性和差異,文後最後也補充了 MySQL (RDBMS) 以及 MongoDB (NoSQL) 的術語比較,希望能給剛入門資料庫的新手們一點基礎的認識。