---
# System prepended metadata

title: 關聯式資料庫 vs. 非關聯式資料庫
tags: [資料庫]

---

# **關聯式資料庫 vs. 非關聯式資料庫**

## <font color='#0072E3'> **零、建立資料庫管理系統的目的為何? Excel不夠用嗎?**</font>

在開始之前，還是先來說說為什麼我們需要建立資料庫管理系統好了 !
建立資料庫管理系統（DBMS）的主要目的是在更有效、更安全地管理大量資料。雖然 Excel 在小型專案或個人數據管理上很方便，但在處理大量數據、多人協作和複雜的查詢時，Excel 的功能和性能會變得不足。以下是 DBMS 超越 Excel 的一些主要原因：

1. **資料一致性**：DBMS 可以使用「事務」來保證資料的一致性，即便發生系統故障也能回復。Excel 無法保證在多人同時編輯或系統故障時維護資料一致性。

2. **多人協作**：DBMS 支援多人同時存取和更新資料，而不會造成數據損壞或版本衝突；相反，Excel 雖支援多人編輯，但當同時操作的人數增多時，數據版本控制變得困難。

3. **大量數據處理**：當數據量變得龐大時，DBMS 可以進行快速的查詢、排序和更新操作，性能遠超過 Excel。Excel 在數據達到一定規模後，處理速度會明顯變慢，且容易出現崩潰或延遲。

4. **安全性**：DBMS 提供多層級的安全控制，允許分配不同的訪問權限給不同的用戶。Excel 在這方面限制較多，無法提供細粒度的權限控制。

5. **複雜查詢和資料分析**：DBMS 支援 SQL 等查詢語言，可用於快速執行複雜查詢，進行跨多個表格的數據整合和分析。而 Excel 的查詢功能較為有限，處理多表格聯合查詢和嵌套查詢相對困難。

6. **備份和復原**：DBMS 有系統化的備份與復原機制，能有效地保護數據。Excel 雖有恢復功能，但如果文檔損壞，數據容易丟失。

因此，對於需要長期管理、存取和分析大量數據的情境，如企業級的客戶關係管理（CRM）、財務系統或生產數據管理，建立 DBMS 會更符合需求。

所以說了那麼多，資料庫管理系統到底是甚麼呢?

## <font color='#0072E3'> **一、簡介** </font>
簡單來說，資料庫管理系統（DBMS, Database Management System）是一種軟體，用於建立、管理、維護和操作資料庫。其主要目的是有效地儲存和檢索大量資料，並提供用戶方便地進行資料查詢、更新、刪除等操作。

需要注意的是 DBMS 的基本功能，主要在於管理資料庫與樞紐分析表的輸出， **不適合拿來實現統計檢定或分析，更不支援各種數學模型或邏輯語言!** 雖然優些新出的資料庫系統，或是新開發的軟體可以幫助我們實現，在資料庫系統內進行簡易的分析與報表輸出，但功能非常陽春，至少據我所知，檢定和數學模型方面的功能還是得依靠 Python、R、SAS、Malab 等分析軟體或程式語言完成。

DBMS 主要還是用於資料儲存與管理、樞紐分析、安全性管理(提供權限管理功能，讓不同用戶擁有不同的操作權限，保護資料的私密性) 為主。

而我們常聽到的 MySQL、Oracle、Microsoft SQL Server、PostgreSQL 其實都是資料庫管理系統 (DBMS) 的查詢語言罷了。但因為這些語言實在是太有名了，導致現在 SQL 先在幾乎已經變成 DBMS 的代名詞了....

說了那麼多，我們趕快進入重點吧 ! 現行的資料庫的設計和結構可以根據應用需求分為兩種主要類型：**關聯式資料庫** (Relational Database) 和 **非關聯式資料庫** (Non-Relational Database)。兩者在**資料的組織方式、擴展性、查詢能力**等方面有顯著的差異，以下我來一一為大家介紹:


## <font color='#0072E3'> **二、關聯式資料庫 (Relational Database, RDB)** </font>
### **I. 特徵：**
- **表格結構**：資料以**表格 (Table)** 形式儲存，表中的列 (Column) 代表屬性，行 (Row) 代表紀錄。
- **主鍵 (Primary Key)** 和 **外鍵 (Foreign Key)**：用於確保資料的一致性和>表之間的關聯性。
- **SQL 查詢語言**：使用 **SQL** (Structured Query Language) 進行資料的>操作，如查詢、更新、插入和刪除。
- **ACID 特性**：關聯式資料庫>強調 **ACID** (原子性、一致性、隔離性、耐久性)，確保資料的準確性與一致性。

### **II. 優點：**
- **一致性高**：適合需要嚴格資料結構的應用，例如銀行和金融系統。
- **關聯性強**：方便查詢和分析跨多張表的資料。
- **成熟生態系統**：支援 SQL 的工具眾多，且被廣泛應用。

### **III. 缺點：**
- **擴展性較差**：垂直擴展（增加硬體性能）比較容易，但水平擴展（增加伺服器數量）困難。
- **性能瓶頸**：面對大量非結構化資料或需要高吞吐量的應用（如社交網路）時效能可能下降。

### **P.s 代表系統 :**
> MySQL、PostgreSQL、Oracle Database、Microsoft SQL Server



## <font color='#0072E3'> **三、 非關聯式資料庫 (Non-Relational Database, NoSQL)** </font>    
    
### **I. 特徵：**
- **資料儲存靈活**：不以表格形式組織資料，而是根據需求使用不同的資料模型，如文件 (Document)、鍵值對 (Key-Value)、圖形 (Graph)、或列族 (Column-Family)。
- **無固定模式**：允許儲存非結構化資料或半結構化資料，不需要提前定義欄位。
- **BASE 模型**：相比於 ACID，NoSQL 系統傾向於 **BASE**（基本可用性、柔性狀態和最終一致性），適合快速擴展和應對大量資料的情境。

>P.s
>-   文件型資料庫 (Document Database)： 如 MongoDB，用於儲存 JSON 或 BSON 格式的資料。
>-  鍵值型資料庫 (Key-Value Database)： 如 Redis，適合高速存取和快取。
>-  圖形資料庫 (Graph Database)： 如 Neo4j，專為處理節點與關係（如社交網路）而設計。
>- 族型資料庫 (Column-Family Database)： 如 Cassandra，常用於分散式系統。


### **II. 優點：**
- **擴展性高**：支持水平擴展，能應對巨量資料和高流量需求。
- **高性能**：適合需要快速響應的應用，例如即時分析或社交平台。
- **靈活性強**：無需固定模式，方便儲存多種結構的資料。

### **III. 缺點：**
- **一致性較弱**：通常不保證即時一致性，需要在性能與一致性之間取得平衡。
- **查詢複雜性較高**：與 SQL 相比，查詢語言較不直觀，需針對不同資料庫學習不同的語法。

### **代表系統：**
>MongoDB、Redis、Cassandra、Neo4j



## <font color='#0072E3'> **四、 比較：關聯式 vs. 非關聯式** </font>

| 特性               | 關聯式資料庫 (RDB)         | 非關聯式資料庫 (NoSQL)       |
|------------------|--------------------------|-----------------------------|
| **資料結構**        | 表格結構 (行、列)         | 文件、鍵值、圖形或列族       |
| **查詢語言**        | SQL                     | 特定於資料庫的查詢語言      |
| **擴展性**          | 垂直擴展為主              | 水平擴展優秀                |
| **一致性**          | 高 (ACID 支援)           | 低 (BASE 模型)              |
| **適用場合**        | 金融、ERP 系統           | 社交網路、大數據分析         |


兩者在資料管理的不同場景中各有優勢，因此許多系統也會根據需求**混合使用** RDB 和 NoSQL。例如，銀行系統使用 RDB 儲存交易資料，同時利用 NoSQL 儲存即時通知或用戶行為數據。


