資料庫可以分為兩種類型,
關聯式資料庫(Relational Database Management System,RDBMS)和
非關聯式資料庫(Non-relational Database, NoSQL)。
關聯式資料庫
關聯式資料庫透過Table的集合來管理資料。每個表格由行和列關係組成,資料之間有明確的關聯,Table和Table之間可以用primary 或Foreign Key創建關聯性,這種關聯型結構可以減少資料重複,並且提高事務的處理能力。這種模型適合儲存結構化資料。 MySQL、 PostgreSQL、 Oracle、Microsoft SQL Server、Amazon Aurora 都是關聯式資料庫。以下是幾個關聯式資料庫的優點與缺點:
- 優點
- 數據一致性:支持事務處理和ACID(原子性、一致性、隔離性、持久性)屬性,保證資料的準確性和可靠性。
原子性(Atomicity):舉例來說,如果在網路銀行轉賬,從你的帳戶扣款和收款人帳戶加款這兩個操作都必須發生,或是都不發生。如果轉帳過程中發生錯誤,系統會自動rollback到轉帳前的狀態,確保不會只完成一部分作業。
一致性(Consistency):在轉帳的例子中,還必須確保轉帳後兩個帳戶的總額不變。如果交易前後資料的總和、格式或類型發生了改變,那麼就違反了一致性原則。
隔離性(Isolation):若兩個銀行轉帳事務同時發生,隔離性確保它們不會相互干擾,每個轉帳作業都是單獨執行的。
持久性(Durability): 假設系統發生故障或電源故障,交易的結果也不會遺失,一旦轉帳成功,即使銀行的伺服器立刻故障,轉帳的結果也會被保存下來並且當交易完成時,操作將不能更改。 - 複雜查詢:適合複雜的查詢和數據分析
- 結構化查詢語言(SQL):提供了一種強大的標準化語言來進行資料的檢索、插入、更新和刪除。
SELECT * FROM [TABLE_NAME] WHERE [COND];
- 缺點
- 擴展性:垂直擴展(增加服務器性能,例如cpu)相對容易,但水平擴展(增加更多服務器)比較為困難。
- 靈活性:預先定義的模式限制了資料的存儲方式,對於模式經常變動的應用來說比較困難,不適合快速開發流程。
關聯式資料庫適用於需要高度結構化資料儲存、強大事務支援和複雜查詢能力的系統。以下是適合使用關聯式資料庫的系統:
- 企業管理系統、 財務管理系統、 人力資源管理系統:需要精確的事務處理和複雜的報表功能以及存儲結構化資料。
- 客戶關係管理系統:儲存客戶資訊、服務請求等,需要複雜的資料關聯和查詢。
- 電商或線上預約系統:管理產品目錄、訂單、庫存、付款資訊需要保證資料一致性。
- 銀行和金融系統 :處理帳戶資訊、轉帳、貸款管理等,需要保證資料的準確、可靠和資料安全性。
- 教育和醫療系統: 管理記錄等,需要維護資料的完整性和一致性以及需要遵守嚴格的隱私和安全標準。
非關聯資料庫
非關聯資料庫是一種將資料儲存為類似JSON、XML文件甚至CSV文件,資料並不存儲在 Table 中,資料庫由 collection 組成,儲存方式為鍵-值(key-value)。另一個特點是,不講求資料同步,只求最後結果一致。MongoDB,、Redis 都是非關聯式資料庫。以下是幾個非關聯式資料庫的優點與缺點:
- 優點
- 擴展性:支援大資料的儲存和查詢,適合於大數據和即時Web應用。
- 靈活性:可以儲存結構化、半結構化或非結構化數據,適應數據結構的變化。
- 高效能:使用鍵-值儲存資料提供了更好的可拓展性和性能,別是當資料分佈在多個服務器上時。
- 缺點
- 缺乏標準化:缺乏像SQL這樣的統一查詢語言,不同資料庫的操作可能會有所不同。
- 數據一致性:不完全支援ACID屬性,不如關聯式資料庫在資料一致性方面強。
非關聯式資料庫適用於需要處理大量非結構化或半結構化資料、高效能讀寫作業、或資料頻繁變化的系統。以下是適合使用非關聯式資料庫的系統:
- 大數據應用:分析和儲存大規模資料集,如社群媒體資料分析、物聯網(IoT)資料處理。
- 線上遊戲、即時聊天應用程式:即時數據更新的應用程式、社交網絡。