數據庫 Databases 課程概覽 關聯式數據庫概念 Relational Databases Concepts 結構化查詢語言 SQL 數據庫設計方法 Database Design Methodology 資料庫的基本概念(Basic Concepts of Databases) 1. 實體(Entity) 實體(Entity)是資料庫中用來代表人、物、事件或概念的資料對象,通常對應一個資料表(Table)。 例子: 學校系統中的「學生(Student)」 圖書館系統中的「書籍(Book)」 2. 屬性(Attribute) 屬性(Attribute)是用來描述實體特徵的資料項目,在資料表中對應為欄位(Field / Column)。 例子: Student 實體的屬性:StudentID、Name、DateOfBirth、Class Book 實體的屬性:BookID、Title、Author 3. 紀錄與表格(Record and Table) 紀錄(Record / Tuple):表格中的一行資料,代表一個實體實例 表格(Table / Relation):由多個紀錄及欄位組成 鍵的概念(Keys) 1. 主鍵(Primary Key, PK) 主鍵(Primary Key)是一個或多個屬性,用來唯一識別(Uniquely Identify)表格中的每一筆紀錄。 主鍵必須符合: 唯一性(Uniqueness) 不可為空值(NOT NULL) 例子: Students 表格中的 StudentID 2. 候選鍵(Candidate Key) 候選鍵(Candidate Key)是所有具備成為主鍵條件的屬性。 例子: StudentID HKID_Number 資料表只能選擇其中一個作為主鍵,其餘仍屬候選鍵。 3. 外來鍵(Foreign Key, FK) 外來鍵(Foreign Key)是來自另一個表格的主鍵,用來建立表格之間的關係(Relationship)。 例子: Sales 表格中的 CustomerID(參照 Customers 表格) Book_Loans 表格中的 BookID(參照 Books 表格) 建立關聯式資料庫(Creating a Relational Database) 在關聯式資料庫中,資料應被分拆並儲存在多個表格中,以減少資料冗餘(Data Redundancy)。 建立步驟: 識別實體(Identify Entities) 例如:Customers、Products、Sales 為每個實體建立表格(Create Tables) Customers(CustomerID PK, Name, Phone) Products(ProductID PK, ItemName, Price) Sales(SaleID PK, CustomerID FK, ProductID FK, Quantity) 利用外來鍵建立關係(Establish Relationships) 此設計可提升資料一致性(Data Consistency)及可維護性(Maintainability)。 資料完整性(Data Integrity) 資料完整性(Data Integrity)確保資料庫中的資料正確、一致及可靠。 1. 實體完整性(Entity Integrity) 主鍵不可為空值(Primary Key ≠ NULL) 確保每筆紀錄皆可被識別 2. 參照完整性(Referential Integrity) 外來鍵的值必須: 參照至存在的主鍵值,或 為 NULL(如允許) 防止出現孤立紀錄(Orphan Records)。 3. 域完整性(Domain Integrity) 每個屬性必須符合其資料類型(Data Type) 屬性值須來自允許的域(Domain) 例子: Gender ∈ {‘M’, ‘F’} Score ∈ 0–100 索引(Index) 索引(Index)是一種加快資料檢索(Data Retrieval)的資料結構。 特點: 避免全表掃描(Full Table Scan) 常建立於經常查詢的欄位(如 ID、日期) 主鍵通常自動建立索引 交易與回溯(Transaction and Rollback) 1. 交易(Transaction) 交易(Transaction)是一組資料庫操作,必須遵守全有或全無(All-or-Nothing)原則。 2. 回溯(Rollback) 回溯(Rollback)用於撤銷未能成功完成的交易。 回溯的目的包括: 撤銷部分完成的更改(Undo Changes) 維持資料一致性(Maintain Consistency) 保護資料完整性(Preserve Integrity) SQL 與資料庫架構(Database Architecture) 在關聯式資料庫系統中,資料以Schema(資料庫模式)與Instance(資料庫實例)方式存在: Database Schema:資料庫的結構定義(Table Structure, Column Definition) Database Instance:某一時間點實際儲存的資料內容 SQL 是用來操作 Schema 與 Instance 的核心工具。 SQL 指令分類(SQL Command Categories) 1. 資料查詢語言 Data Query Language (DQL) 功能:資料檢索(Data Retrieval) 核心指令:SELECT 操作對象:Table、View、Result Set 2. 資料操作語言 Data Manipulation Language (DML) 功能:資料新增、修改、刪除(Insert / Update / Delete) 核心指令:INSERT, UPDATE, DELETE 操作層級:Record / Tuple 3. 資料定義語言 Data Definition Language (DDL) 功能:資料結構管理(Schema Definition) 核心指令:CREATE, ALTER, DROP 操作對象:Table、View、Index SELECT 查詢結構(Query Structure) 基本查詢語法(Basic Query Syntax) SELECT column_list FROM table_name; 涉及概念: Projection(選取欄位) Relation(資料表) Result Set(查詢結果) 查詢所有欄位(Wildcard) SELECT * FROM Students; *:Wildcard 回傳完整 Tuple WHERE 條件過濾(Selection) WHERE 子句 WHERE Clause WHERE 用於進行 Selection Operation,篩選符合條件的 Records。 WHERE Class = ‘5A’ 涉及概念: Predicate Condition Expression Boolean Evaluation 比較運算子 Comparison Operators =(Equal) <>(Not Equal) > < >= <= 邏輯運算子 Logical Operators AND OR NOT 特殊運算子(Special Operators) IN(Set Membership) BETWEEN(Range Checking) LIKE(Pattern Matching) %:Multi-character Wildcard _:Single-character Wildcard 排序(Ordering) ORDER BY ORDER BY Clause ORDER BY Score DESC; 涉及概念: Sorting Ascending Order (ASC) Descending Order (DESC) 聚合與內置函數(Built-in Functions) 聚合函數 Aggregate Functions COUNT() → Cardinality SUM() AVG() MAX() MIN() 👉 回傳單一 Scalar Value 字串函數 String Functions UPPER() / UCASE() LOWER() / LCASE() LENGTH() / LEN() 涉及概念: String Manipulation Character Data Type 多表查詢與連接(Multi-table Queries) 等值連接 Equi-Join / INNER JOIN FROM A JOIN B ON A.id = B.id 涉及概念: Join Condition Foreign Key – Primary Key Relationship Result Set Combination 外部連接 Outer Join LEFT JOIN RIGHT JOIN 涉及概念: NULL Values Unmatched Tuples Preserved Table 自然連接 NATURAL JOIN 自動依同名 Attribute 連接 潛在 Ambiguity Risk 子查詢(Nested Query) 子查詢 Sub-query WHERE Score > (SELECT AVG(Score) FROM Students) 涉及概念: Nested Query Inner Query / Outer Query Single-level Sub-query 檢視表(View) VIEW Virtual Table CREATE VIEW ViewName AS SELECT … 涉及概念: Virtual Relation Stored Query Security Layer Abstraction 修改表格結構(Schema Modification) ALTER TABLE Schema Alteration ADD COLUMN DROP COLUMN MODIFY COLUMN 涉及概念: Attribute Definition Data Type (VARCHAR, INT, DATE) 交易與安全(Transaction Control) 交易 Transaction 一組 SQL 操作 必須遵守 Atomicity 回溯 Rollback 撤銷未完成交易 維持 Data Consistency 保護 Data Integrity (常與 COMMIT / ROLLBACK 並列) 數據庫設計的三層抽象 Three‑Level Data Abstraction 關聯式資料庫設計一般遵循三層抽象模型(Three‑level Architecture): 概念層(Conceptual Level) 使用 Entity‑Relationship Model (ER Model) 工具:Entity‑Relationship Diagram (ERD) 重點:實體(Entity)、關係(Relationship)、屬性(Attribute) 邏輯層(Logical Level) 使用 Relational Model 工具:Table、Primary Key、Foreign Key 重點:Normalization、Schema Design 檢視層(View / External Level) 使用 View (Virtual Table) 重點:Access Rights、Data Privacy 實體關係圖(ER Diagram / ERD) ER Diagram (ERD) 是概念層(Conceptual Design)最重要的設計工具,用於描述資料結構而不涉及實際 DBMS。 1. 實體 Entity 實體(Entity)代表需儲存資料的人、物、事件或概念(Person / Object / Event / Concept),並最終對應一個資料表(Table / Relation)。 例子: Student Book Course 2. 屬性 Attribute 屬性(Attribute)是用來描述實體的資料項目,於關聯式資料庫中對應為欄位(Field / Column)。 Simple Attribute Composite Attribute(進階) Key Attribute 3. 鍵屬性與主鍵 Key Attribute / Primary Key 鍵屬性(Key Attribute)是可唯一識別(Uniquely Identify)實體實例的屬性,轉換為表格後成為Primary Key (PK)。 主鍵特性: Uniqueness NOT NULL Constraint 4. 關係 Relationship 關係(Relationship)描述兩個或多個實體之間的連結方式,屬於 Binary Relationship(DSE 要求)。 例子: Student borrows Book Student enrols in Course 關係類型與基數 Relationship Types and Cardinality 關係的數量限制稱為基數(Cardinality): One‑to‑One (1:1) One‑to‑Many (1:M) Many‑to‑Many (M:N) M:N 關係必須於邏輯設計階段被解析(Resolve)。 參與限制 Participation Constraint Mandatory Participation(Total Participation) Optional Participation(Partial Participation) 這影響 Foreign Key Constraint 的設計。 由 ERD 轉換為表格 Transforming ERD to Relational Tables 規則一:實體 → 表格 Entity Mapping 每個 Entity → 一個 TableKey Attribute → Primary Key 規則二:1:M 關係 One‑to‑Many Mapping 將「一」方的 Primary Key 加入「多」方作為 Foreign Key (FK) 規則三:M:N 關係 Many‑to‑Many Resolution 建立 Linking Table / Junction Table 包含兩邊的 Primary Keys 組成 Composite Primary Key 資料冗餘與異常 Data Redundancy and Anomalies 資料冗餘(Data Redundancy)會導致: Update Anomaly Insertion Anomaly Deletion Anomaly 規範化 Normalisation 規範化(Normalisation)是依據Functional Dependency 重組資料表的過程。 第一規範式 First Normal Form (1NF) Atomic Values No Repeating Groups 第二規範式 Second Normal Form (2NF) In 1NF No Partial Dependency 適用於 Composite Primary Key 第三規範式 Third Normal Form (3NF) In 2NF No Transitive Dependency 記憶法則: Key → Whole Key → Nothing but the Key 反規範化 Denormalisation 反規範化(Denormalisation)是為改善Query Performance,而有意引入冗餘資料的策略。 Trade‑off between Performance and Data Consistency 常見於 Data Warehouse / Reporting System 存取權限與資料私隱 Access Rights and Data Privacy 資料庫透過權限管理(Access Control)保護資料: SELECT INSERT UPDATE DELETE 設計原則: Principle of Least Privilege