👋 歡迎來到關聯式資料庫的世界!
各位未來的電腦科學家,你們好!這一章節至關重要,因為資料庫是數位世界的骨幹——想想看 Google、Amazon,或是你們學校的學生紀錄系統。只要涉及儲存大量結構化數據,背後一定就是資料庫的功勞!
如果剛開始覺得有點複雜也不用擔心。我們將逐步拆解這些超高效數據儲存系統的運作原理,並聚焦於你在開始學習結構化查詢語言(SQL)前必須掌握的概念。
1. 什麼是資料庫?
簡單定義
資料庫(Database)就是一組經過組織的相關數據集合。它讓使用者能夠快速且有效地儲存、管理和檢索資訊。
想像一下你當地的圖書館。如果所有的書都散落在各處,要找到特定的一本小說是不可能的。圖書館目錄——它按書名、作者和位置整齊地分類書籍——就是資料庫在現實生活中最完美的比喻。
關聯式模型
在電腦科學中,我們專注於一種特定的資料庫類型,稱為關聯式資料庫(Relational Database)。
關聯式模型的核心理念是:數據儲存在分開、簡單的結構(稱為「資料表」)中,並透過特殊的鍵值互相連結(關聯)。這比將所有數據擠在一個巨大的清單中要高效得多。
🔑 關鍵要點:效率
關聯式資料庫組織數據的方式旨在節省空間,並避免重複儲存相同的資訊。這個過程稱為減少數據冗餘(Data Redundancy)。
2. 關聯式資料庫的組成部分
關聯式資料庫由三個主要部分組成。只要你看得懂試算表,就絕對難不倒你!
2.1. 資料表(Tables / Relations)
資料表(Table)(有時稱為關聯 / Relation)是資料庫最基礎的建構單位。它用來儲存關於某種實體(例如學生、產品或訂單)的數據。
- 比喻:就像一個獨立的試算表檔案。
2.2. 欄位(Fields / Attributes / Columns)
欄位(Field)是關於資料表實體的單一資訊片段。欄位是資料表的垂直部分。
- 範例:學生ID (Student_ID)、名字 (First_Name)、出生日期 (Date_of_Birth)。
- 欄位定義了數據的結構。
你知道嗎? 在資料庫理論中,欄位也被稱為屬性(Attributes)!
2.3. 紀錄(Records / Tuples / Rows)
紀錄(Record)是針對某個特定項目或人員的一整組欄位數據。紀錄是資料表的水平部分。
- 範例:關於某位特定學生的所有資訊(他們的ID、姓名、出生日期等)。
- 紀錄有時也被稱為元組(Tuple)或簡單地稱為列(Row)。
📝 快速複習:結構
資料表 (Table) = 整個容器(例如:'學生' 檔案)
欄位 (Field) = 標題(例如:'姓名' 或 '地址')
紀錄 (Record) = 該標題下關於一個項目的具體數據
3. 確保數據品質:鍵值與完整性
為了讓資料庫可靠運作,每一筆紀錄都必須容易識別且具備唯一性。這可以透過稱為鍵值(Keys)的特殊欄位來達成。
3.1. 主鍵(Primary Key, PK)
主鍵(Primary Key)是一個欄位(或是欄位的組合),用來唯一識別資料表中的每一筆紀錄。它是數據完整性中最核心的概念!
主鍵的規則:
- 必須唯一:沒有兩筆紀錄可以擁有相同的主鍵值。(例如:沒有兩位學生可以有相同的學生ID)。
- 不能為空(Not Null):必須始終有值(不能空白)。
比喻:你的指紋或護照號碼
無論這世界上有多少人跟你名字一樣,只有你擁有專屬的護照號碼。主鍵就是資料表的「護照號碼」——它保證了個體的獨特性。
3.2. 外鍵(Foreign Key, FK)
外鍵(Foreign Key)是資料表中的一個欄位,它參照(匹配)另一個資料表的主鍵。它是連接兩個資料表的紐帶。
外鍵至關重要,因為它讓我們能在不重複儲存大量數據的情況下建立關聯。
如何識別外鍵:
如果你在資料表 A 中看到一個欄位,其名稱與資料表 B 的主鍵相同,那它很有可能就是外鍵。
- 範例:「客戶」資料表有一個主鍵叫 Customer_ID。
- 「訂單」資料表需要知道是哪位客戶下了哪筆訂單。因此,「訂單」資料表會包含一個欄位叫 Customer_ID。
- 在「訂單」資料表中,Customer_ID 就是外鍵。
這樣我們就能將訂單連結回客戶的全名和地址,而無需為每一筆訂單重複儲存這些客戶詳細資料!
🧠 記憶小撇步:P 與 F
P 代表 Permanent(永久/自身)或 Primary:用於識別自己資料表紀錄的唯一代碼。
F 代表 Foreign(外來):一個從其他資料表「造訪」過來的主鍵,專門用來進行連結。
4. 資料表之間的關係(連結)
關聯式資料庫的強大之處,在於透過主鍵與外鍵所建立的「關係」。
4.1. 避免冗餘
如果你將所有銷售數據放在同一個巨大的資料表中,當某位客戶更改地址時,你可能需要更新數百筆紀錄。透過將數據拆分為「客戶」資料表和「訂單」資料表,你只需要在「客戶」資料表中更新一次地址即可。這就是關係如何減少數據冗餘(數據重複)的方法。
4.2. 理解一對多關係 (One-to-Many, 1:M)
你需要理解的最常見且最重要的關係就是一對多(1:M)。
這意味著第一個資料表中的一筆紀錄(「一」的那一端,持有主鍵)可以連結到第二個資料表中的多筆紀錄(「多」的那一端,持有外鍵)。
分步範例 (1:M)
- 資料表 1:教師(「一」的那一端)
- 欄位:Teacher_ID (PK), 姓名, 部門。
- 資料表 2:班級(「多」的那一端)
- 欄位:Class_ID (PK), 班級名稱, 教室號碼, Teacher_ID (FK)。
連結方式:
- 一位教師(來自資料表 1)可以任教多個不同的班級(在資料表 2 中)。
- 我們透過將資料表 1 的 Teacher_ID (PK) 放入資料表 2 作為外鍵 (FK) 來建立連結。
這種結構正確地模擬了現實世界,並避免我們在每堂課的紀錄中重複輸入老師的全名和部門資料!
✅ 本章總結:重點複習
- 關聯式資料庫透過互相連結的資料表儲存數據。
- 紀錄是橫列(Row);欄位是直行(Column)。
- 主鍵 (PK) 在自己的資料表中唯一識別一筆紀錄。
- 外鍵 (FK) 是來自另一個資料表的主鍵,用於建立關係。
- 建立關係的主要目標是減少數據冗餘。
恭喜你成功掌握了資料庫的理論基礎!現在你已經準備好學習如何使用 SQL 與資料庫進行溝通了!