課程 22:設計資料模型與索引
學會資料模型設計與 SQL 索引的原理與實作,包含主鍵、外鍵、索引建立與查詢效能最佳化,並輔以圖解與實作練習。
一、什麼是資料模型設計?
- 資料模型設計是規劃資料庫結構的過程。
- 它定義了資料將如何儲存、組織以及表格之間的關係。
- 良好的資料模型是資料庫效能、一致性和可維護性的基礎。
二、主鍵 (PRIMARY KEY)
- 主鍵是用於唯一標識資料表中每一行記錄的一個或多個欄位。
- 它必須包含唯一值,且不能包含 NULL 值。
- 一個資料表只能有一個主鍵。
- 主鍵是建立表格之間關聯的基礎。
範例:在 customers
表中,id
欄位通常設為主鍵。
CREATE TABLE customers (\n id INT PRIMARY KEY,\n name VARCHAR(255),\n email VARCHAR(255)\n);\n
三、外鍵 (FOREIGN KEY)
- 外鍵是用於在兩個資料表之間建立連結的一個或多個欄位。
- 它指向另一個資料表(父表)中的主鍵。
- 外鍵確保了資料的參照完整性 (Referential Integrity),即子表中的外鍵值必須在父表中存在對應的主鍵值(或為 NULL)。
範例:在 orders
表中,customer_id
欄位是外鍵,它參考 customers
表的 id
欄位。
CREATE TABLE orders (\n order_id INT PRIMARY KEY,\n customer_id INT,\n amount DECIMAL(10, 2),\n FOREIGN KEY (customer_id) REFERENCES customers(id)\n);\n
四、SQL索引 (INDEX)
- 索引是一種特殊的查找結構,可以加快資料庫查詢的速度。
- 它類似於書的索引,可以幫助資料庫系統快速找到特定的行,而無需掃描整個表格。
- 主鍵和外鍵通常會自動創建索引。
- 過多的索引會降低資料插入、更新和刪除的速度,因為每次修改數據時都需要更新索引。
範例:為 products
表的 name
欄位創建索引,以加快按名稱搜索產品的速度。
CREATE INDEX idx_product_name\nON products (name);\n
五、資料模型設計原則
- 正規化 (Normalization): 減少數據冗餘,提高資料一致性。
- 選擇合適的資料型別: 根據數據特性選擇最適合的資料型別。
- 定義約束: 使用主鍵、外鍵、唯一約束、檢查約束等來確保資料的準確性和完整性。
六、課後小練習
- 假設您要設計一個簡單的圖書館資料庫,需要儲存書籍信息和讀者信息。請設計兩個表格:
books
和readers
,並考慮如何使用主鍵和外鍵建立它們之間的關係(例如讀者借閱書籍的記錄)。 - 考慮在您設計的圖書館資料庫中,哪些欄位適合建立索引來提高查詢效率?為什麼?
資料關聯圖解 (客戶與訂單)
下圖展示了客戶 (customers) 表和訂單 (orders) 表之間如何通過主鍵 (id
) 和外鍵 (customer_id
) 建立關聯。