歡迎來到資料庫的世界!

在本章中,我們將探索電腦如何儲存和管理海量的資訊。無論是你最喜歡的串流平台如何追蹤你的播放清單,還是學校如何管理數千名學生的記錄,資料庫(Databases)都是背後的核心引擎。看完這些筆記後,你將會學會如何有效地組織數據,以及如何使用程式碼與資料庫進行「對話」!

8.1 資料庫概念

在現代資料庫出現之前,人們使用檔案系統(File-based approach)。想像一下如果你手上有幾十個獨立的試算表或文字檔,這會導致嚴重的問題:

數據冗餘(Data Redundancy): 同一份數據被儲存在多個地方(例如:你的地址同時出現在「圖書館」檔案和「學費」檔案中)。
數據不一致(Data Inconsistency): 如果你搬家了卻只更新其中一個檔案,這些檔案之間的資料就會產生衝突!
數據依賴(Data Dependency): 數據與建立它的特定軟體緊密綁定。

關聯式資料庫解決方案:
關聯式資料庫(Relational Database)透過將數據組織成相互連結的表格來解決這些問題。這不僅減少了冗餘,還確保了數據的準確性(即數據完整性,Data Integrity)。

關鍵術語(資料庫的語言)

別擔心,如果這些術語起初看起來很生硬,它們其實只是你已知事物的不同稱呼而已!

實體(Entity): 用來儲存數據的物件或概念(例如:學生、書籍、課程)。你可以把它想像成資料表的「標題」。
資料表(Table): 儲存特定實體所有數據的地方。
欄位/屬性(Field / Attribute): 實體的一個特徵(例如:學生姓名、出生日期)。這些就是資料表中的直行(columns)
記錄/元組(Record / Tuple): 一組關於特定個體的欄位資訊(例如:關於某一位特定學生的所有資訊)。這些就是資料表中的橫列(rows)
主鍵(Primary Key): 每一筆記錄的唯一識別碼。就像你的身份證號碼一樣,沒有兩個人可以擁有相同的號碼!
候選鍵(Candidate Key): 任何因為具有唯一性,而「有可能」成為主鍵的欄位。
外鍵(Foreign Key): 出現在另一個資料表中,用來連結兩個資料表的主鍵。
次鍵(Secondary Key): 經過索引處理的欄位,用來加快搜尋速度(例如:以姓氏而非學號進行搜尋)。

實體關係圖(E-R Diagrams)

我們使用 E-R 圖來視覺化資料表之間的連結。其中最重要的是關係(Relationship)

一對一(1:1): 一個丈夫擁有一位妻子(在大多數系統中!)。
一對多(1:M): 一位母親可以擁有多個孩子。
多對多(M:M): 多個學生選修多門科目。

小撇步: 在關聯式資料庫中,我們無法直接處理多對多關係。我們通常會使用第三個「連結」資料表,將其拆解為兩個一對多關係!

正規化過程(Normalisation)

正規化只是一個聽起來很高級的詞,意指「組織你的數據以避免混亂」。我們分三個步驟來完成:

1. 第一正規化(1NF):
如果資料表中沒有重複的資料群組,且所有屬性都是原子的(Atomic)(意即每個儲存格只包含一個數據,不可再分——不能是列表!),該表即符合 1NF。

2. 第二正規化(2NF):
首先必須符合 1NF。接著,每個非主鍵欄位必須完全依賴於整個主鍵。只有當你擁有「複合鍵」(由兩個欄位組成的唯一主鍵)時,這點才重要。

3. 第三正規化(3NF):
必須符合 2NF。此外,不能有遞移相依(Transitive dependencies)。這意味著一個非主鍵欄位不能依賴於另一個非主鍵欄位。
例子:如果「社團會費」依賴於「社團名稱」,但「社團名稱」不是主鍵,你需要把它們移到一個獨立的資料表中!

重點總結: 正規化能提升資料庫效率,減少重複數據,並確保當你在一個地方修改資料時,整體數據保持一致。

8.2 資料庫管理系統(DBMS)

DBMS 是位於使用者與數據之間的軟體。把它想像成一位圖書館員:你向館員借書,他們知道書在哪裡,並且知道如何安全地取得它。

DBMS 的功能:

數據字典(Data Dictionary): 儲存「元數據」(關於數據的數據)的檔案,例如資料表名稱、欄位類型和關聯關係。
數據管理(Data Management): 處理數據在磁碟上的實際儲存方式。
數據完整性(Data Integrity): 確保規則被遵守(例如:如果學生還未歸還圖書館的書,你就不能刪除該學生的資料)。
數據安全性(Data Security): 管理誰可以查看或編輯資料庫的哪些部分(存取權限)。
查詢處理器(Query Processor): 理解你的 SQL 指令並找到對應數據的部分。

DBMS 中的軟體工具:

開發者介面(Developer Interface): 允許程式設計師輕鬆建立資料表和表單。
邏輯綱要(Logical Schema): 整個資料庫設計的總體視圖。

重點總結: DBMS 處理了安全與組織的「繁重工作」,讓使用者不必擔心儲存的技術細節。

8.3 結構化查詢語言(SQL)

SQL 是與資料庫溝通的標準語言,主要分為兩大部分:

1. 數據定義語言(DDL)

用於建立或更改資料庫的結構

CREATE DATABASE: 建立一個新的資料庫檔案。
CREATE TABLE: 定義一個新資料表及其欄位。
例子:
CREATE TABLE Students (
StudentID INTEGER PRIMARY KEY,
FirstName VARCHAR(20),
DateOfBirth DATE
);
ALTER TABLE: 用於在現有資料表中新增或刪除欄位。

2. 數據操縱語言(DML)

用於管理資料表內部的數據

SELECT: 最常用的指令,用於提取數據。
INSERT INTO: 新增一列數據。
UPDATE: 修改現有的數據。
DELETE FROM: 移除數據。

編寫 SELECT 查詢

把 SELECT 查詢想成一個篩選器。其基本結構為:
SELECT [欄位] FROM [資料表] WHERE [條件] ORDER BY [欄位];

例子:找出所有 12 年級的學生,並按姓名排序:
SELECT FirstName, LastName
FROM Students
WHERE YearGroup = 12
ORDER BY LastName ASC;

連結(Joins)與聚合函數(Aggregates)

INNER JOIN: 用於結合兩個資料表,前提是它們有相符的欄位(通常為主鍵與外鍵)。
SUM, COUNT, AVG: 這些是「聚合」函數,用於對數據進行數學運算。
例子: SELECT COUNT(*) FROM Students; (這會計算資料表中有多少名學生)。

快速回顧:
DDL = 建立「水桶」(結構)。
DML = 管理水桶裡的「水」(數據)。
• 使用 WHERE 來篩選結果。
• 使用 INNER JOIN 來連結資料表。

你知道嗎? SQL 是當今就業市場中最熱門的技能之一。掌握它,你就已經領先群雄了!

最終總結

資料庫遠比簡單的檔案強大。透過使用關聯模型,我們能讓數據保持組織與安全。正規化保持了資料表的整潔,DBMS 確保了數據安全,而 SQL 讓我們能在瞬間找到所需的資訊。不用擔心 SQL 語法一開始看起來很挑剔——電腦是非常講求字面意義的!只要記住「Select-From-Where」的模式,很快你就會成為資料庫專家。