歡迎來到資料庫的世界!
在本章中,我們將探討電腦如何儲存和組織海量的資訊。你可以把資料庫想像成你最愛的應用程式背後的「大腦」。無論是 Spotify 記錄數百萬首歌曲,還是學校管理學生的個人資料,它們都使用資料庫來讓數據井然有序且方便搜尋。讀完這些筆記,你就能像專家一樣設計、建立和管理這些數碼檔案櫃!
1. 基礎概念:平面檔案與關聯式資料庫
在進入進階內容前,我們需要先了解資料儲存的兩種主要方式。
平面檔案資料庫 (Flat File Databases)
試想像一個巨大的試算表,把所有東西都塞進同一個表格裡。這就是平面檔案資料庫。雖然對於小型清單(例如購物清單)來說很簡單,但對於大型項目而言,這簡直是一場惡夢,因為你會不斷地重複輸入相同的資訊。這被稱為資料冗餘 (Data Redundancy)。
關聯式資料庫 (Relational Databases)
這是現代電腦運算中的黃金標準。關聯式資料庫不使用單一的大表格,而是將資料拆分成幾個較小的表格並互相連結。 例子:與其每次客戶購買 DVD 時都寫下他們的地址,你只需要建立一個「客戶」表格和一個「訂單」表格,然後使用唯一的 ID 將它們連結起來即可。
2. 鍵值 (Keys):資料庫的「身份證」
為了保持一切井然有序且互相連結,我們使用不同類型的鍵值 (Keys):
- 主鍵 (Primary Key):表格中每條記錄的唯一識別碼。就像你的身分證號碼或指紋一樣,沒有兩個人會有一樣的號碼!
- 外鍵 (Foreign Key):這是來自另一個表格的主鍵,出現在目前的表格中,用來建立兩個表格之間的連結(關係)。
- 次要鍵 (Secondary Key):也稱為「索引」。這是用來快速搜尋資料的欄位。 例子:你可能會使用「姓氏」作為次要鍵,因為雖然它不是唯一的,但這是人們搜尋資料時最常用的方式。
快速回顧:關聯式資料庫利用主鍵和外鍵來連結表格,從而避免混亂且重複的資料。
3. 實體關係模型 (ER Modelling)
在建立資料庫之前,你需要一張地圖。這就是實體關係圖 (ERD)。我們查看「實體」(我們要儲存資料的事物)以及它們之間如何互動。
主要的關係類型有三種:
- 一對一 (One-to-One):一位丈夫對應一位妻子(通常是這樣!)。
- 一對多 (One-to-Many):一位母親可以有多個孩子。(這是資料庫中最常見的類型)。
- 多對多 (Many-to-Many):多名學生修讀多個科目。(注意:在資料庫中,我們通常需要使用一個「連結表格」將其拆解為兩個一對多的關係)。
4. 正規化 (Normalisation):資料的「整理」過程
正規化只是一個讓資料庫更有效率的專業術語。我們進行正規化是為了消除冗餘(重複的資料)並確保資料完整性(確保資料準確無誤)。
如果覺得這很難,別擔心!只要記住這句著名的助記詞,代表三個正規化階段(Normal Forms):
"The Key, The Whole Key, and Nothing but the Key."(鍵值、完整鍵值、且只有鍵值。)
第一正規化 (1NF)
如果一個表格沒有重複的資料組,且每項資料都是「原子的」(拆解到最小單位),該表格就符合 1NF。 例子:你不會把「陳大文」放在同一個格子裡;你應該有「名字」欄位和「姓氏」欄位。
第二正規化 (2NF)
該表格必須先符合 1NF。要達到 2NF,必須消除局部依賴 (Partial Dependencies)。這意味著每個欄位都必須依賴於完整的主鍵。這通常應用在有「複合鍵」(由兩個欄位組成的特殊主鍵)的情況下。
第三正規化 (3NF)
該表格必須符合 2NF。要達到 3NF,你必須消除傳遞依賴 (Transitive Dependencies)。這意味著沒有任何欄位應該依賴於主鍵以外的其他欄位。 「只有鍵值!」
重點總結:正規化能讓資料庫體積更小、運作更快,並減少更新資訊時發生錯誤的機會。
5. 結構化查詢語言 (SQL)
SQL 是我們與資料庫溝通的語言。你需要學會閱讀和撰寫基本的指令:
- SELECT:你想要哪些欄位?
- FROM:資料位於哪個表格?
- WHERE:搜尋條件是什麼?(例如:價格 > 10)
- ORDER BY:你想要按字母順序還是數字順序排序?
- JOIN:使用鍵值連結兩個表格。
查詢範例:
SELECT Title, Author
FROM Books
WHERE Genre = 'Sci-Fi'
ORDER BY Title ASC
6. 資料管理:擷取、選擇與交換
資料實際上是如何進出系統的呢?
- 擷取 (Capturing):將資料匯入資料庫。這可以透過網上表格、條碼掃描器或 OCR(光學字元辨識)來完成。
- 選擇 (Selecting):選取你需要的特定資料(通常使用 SQL)。
- 管理 (Managing):保持資料更新、安全並定期備份。
- 交換 (Exchanging):在不同系統之間移動資料。常見的格式有 JSON 和 XML,因為它們容易被不同類型的電腦讀取。
7. 事務 (Transactions) 與 ACID
事務是資料庫中的單一操作。試想一下將錢從你的銀行帳戶轉帳給朋友。你需要確保錢從你帳戶扣除的同時,也存入了對方的帳戶。如果只發生了一半,那簡直是一場災難!
為了確保事務安全,我們使用 ACID 規則:
- 原子性 (Atomicity):事務必須是「全有或全無」。如果任何部分失敗,整個過程都會被取消。
- 一致性 (Consistency):資料庫必須遵守所有規則(例如:如果規則禁止,你的銀行帳戶餘額不能為負數)。
- 隔離性 (Isolation):如果兩個人同時嘗試更新同一筆記錄,這些事務必須一個接一個地處理,而不是同時進行。
- 持久性 (Durability):一旦變更完成,它就是永久的,即使隨後立刻斷電也不會改變。
記錄鎖定 (Record Locking)
為了協助達成隔離性,資料庫使用記錄鎖定。如果你正在編輯一筆記錄,資料庫會將其「鎖定」,這樣在完成之前,沒有人能進行修改。這能防止資料被覆蓋或損壞。
你知道嗎?如果沒有記錄鎖定,兩個人可能會同時預訂飛機上的同一個座位!
8. 參照完整性 (Referential Integrity)
這是一個簡單但至關重要的概念。參照完整性確保你不會有「懸空」的連結。如果「學生」表格中有名為外鍵的欄位指向「班級」ID,那麼該班級必須確實存在於「班級」表格中。如果有學生被分配到某個班級,你就不可以刪除該班級!
快速回顧箱
- 平面檔案 (Flat File):單一表格。
- 關聯式 (Relational):多個連結的表格。
- 主鍵 (Primary Key):唯一識別 ID。
- SQL:用於查詢資料的語言。
- ACID:保持事務安全的規則。
- 正規化 (Normalisation):將表格整理至 3NF 的過程。
如果正規化起初看起來像拼圖一樣令人困惑,請別擔心——多練習幾個表格,你很快就能看出規律!你一定做得到的!