1. 什麼是資料庫 (What is a Database)? 🤔
- 定義: 資料庫是有組織地儲存和管理資料的集合。這些資料通常以結構化的方式儲存,便於檢索、更新和分析。
- 例子: 學校的學生名冊、公司的客戶資料、產品庫存清單、銀行交易紀錄、網站的使用者資訊等等,都可以儲存在資料庫中。
2. 資料庫管理系統 (Database Management System, DBMS) 🧑💻
- 定義: DBMS 是一種軟體,用於創建、管理和維護資料庫。它允許使用者和應用程式以安全、高效的方式與資料庫互動,而無需直接操作底層的檔案系統。
- 功能:
- 資料定義 (Data Definition): 定義資料的結構、型別、約束等。
- 資料操作 (Data Manipulation): 增、刪、改、查資料。
- 資料安全與保護 (Data Security & Protection): 實施存取控制、資料加密、備份與恢復等。
- 資料完整性 (Data Integrity): 確保資料的準確性和一致性。
- 多使用者存取控制 (Multi-user Access Control): 管理多個使用者同時存取資料庫。
3. 資料庫的類型 (Types of Databases) 🧩
市面上有很多種資料庫,它們有不同的結構和適用情境:
- 關聯式資料庫 (Relational Database) 🌐 (RDBMS):
- 概念: 這是目前最常見的資料庫類型。它將資料儲存在一個或多個表格 (Table) 中,每個表格由行 (Row) 和列 (Column) 組成。表格之間透過關聯 (Relationship) 連結,就像透過共同的欄位(例如學生 ID)來連接學生資訊表和選課表。
- 比喻: 就像 Excel 表格一樣,每個表格有固定的欄位,表格之間可以互相參照。
- 特性:
- 結構化 (Structured): 資料儲存嚴格按照預定義的結構(表格、欄位)。
- ACID 特性: 原子性 (Atomicity): 交易要嘛全部成功,要嘛全部失敗,沒有中間狀態。 一致性 (Consistency): 交易完成後,資料庫從一個有效狀態轉移到另一個有效狀態。 隔離性 (Isolation): 多個交易同時進行時,彼此不影響,就像單獨執行一樣。 持久性 (Durability): 交易一旦提交,其變更就是永久的,即使系統故障也不會丟失。
- 使用 SQL 語言操作。
- 常見的關聯式資料庫系統: MySQL、PostgreSQL、Microsoft SQL Server、Oracle Database。
- 適用情境: 銀行交易、電商訂單、使用者管理等需要高度資料一致性和結構化的應用。
- 非關聯式資料庫 (Non-Relational Database) 或 NoSQL 資料庫 🚫💾:
- 概念: 相對於關聯式資料庫,NoSQL 資料庫不使用表格、行、列的結構,而是以更靈活的方式儲存資料。它們為特定類型應用程式的資料儲存和檢索而設計。
- 比喻: 就像一個大倉庫,你可以把東西裝在各種不同形狀的箱子裡 (文件、鍵值對、圖形),而不是非得放進固定的格子裡。
- 常見類型:
- 鍵值資料庫 (Key-Value Database): 最簡單的 NoSQL,每個資料都是一個鍵值對。例如 Redis (常用於快取)、DynamoDB (AWS)。
- 文件資料庫 (Document Database): 資料以文件形式儲存(通常是 JSON 或 BSON 格式)。適合儲存非結構化或半結構化資料。例如 MongoDB。
- 列式資料庫 (Column-Family Database): 以列而不是行的方式儲存資料。適合處理大量分散式資料。例如 Cassandra。
- 圖形資料庫 (Graph Database): 用於儲存節點和邊的關係,擅長處理複雜的關係網路。例如 Neo4j (常用於社群網路、推薦系統)。
- 特性:
- 彈性結構 (Flexible Schema): 資料模型不嚴格固定,容易應對資料結構的變化。
- 高擴展性 (High Scalability): 容易水平擴展以處理大量資料和高併發。
- 效能高 (High Performance): 對於某些特定類型資料的存取非常快速。
- 最終一致性 (Eventual Consistency): 在分散式環境下,資料可能在一段時間後才達到一致性,而不是立即一致。
- 適用情境: 社群媒體、物聯網、大數據分析、即時應用程式、內容管理系統等需要高擴展性和靈活資料結構的應用。
4. SQL (Structured Query Language) 💬
- 定義: SQL 是標準的查詢語言,用於與關聯式資料庫進行通訊和管理資料。它是資料庫專業人員和開發者必備的技能。
- 基本操作:
- 查詢資料 (SELECT): 從資料庫中讀取資料。
- SELECT * FROM Customers; (查詢 Customers 表格中的所有資料)
- SELECT ProductName, Price FROM Products WHERE Category = 'Electronics'; (查詢類別為 'Electronics' 的產品名稱和價格)
- 插入資料 (INSERT): 將新資料添加到表格中。
- INSERT INTO Customers (CustomerID, Name, Email) VALUES (1, '張三', 'zhangsan@example.com');
- 更新資料 (UPDATE): 修改表格中現有的資料。
- UPDATE Products SET Price = 1000 WHERE ProductID = 5;
- 刪除資料 (DELETE): 從表格中移除資料。
- DELETE FROM Customers WHERE CustomerID = 1;
- 建立表格 (CREATE TABLE): 建立新的資料庫表格。
- 修改表格 (ALTER TABLE): 修改表格的結構。
- 刪除表格 (DROP TABLE): 刪除整個表格。
5. 資料庫設計 (Database Design) 📐
- 正規化 (Normalization): 是一種資料庫設計原則,旨在減少資料冗餘(重複資料)和提高資料完整性。透過將大型表格拆分為多個較小的、相關的表格,並定義表格之間的關係。這有助於避免更新異常、刪除異常和插入異常。
- 實體關係圖 (Entity-Relationship Diagram, ERD): 一種視覺化工具,用於表示資料庫中實體(例如客戶、產品)及其之間的關係。
- 索引 (Indexing): 為了加速資料庫查詢而創建的一種特殊資料結構。就像書的目錄或字典的字母索引一樣,可以幫助資料庫系統快速找到所需的資料,而無需掃描整個表格。