O'Reilly 經典教材《Learning SQL (2nd Edition)》配套的銀行示例資料庫,涵蓋 13 張表、完整外鍵關係、豐富測試資料,是練習複雜查詢、事務、存儲過程的絕佳沙箱。本文解析腳本結構、核心表設計、資料填充邏輯與實戰應用場景。
CREATE DATABASE bank; USE bank; /* 13 張表建立 */ department, branch, employee, product_type, product, customer, individual, business, officer, account, transaction /* 測試資料填充 */ 部門、分行、員工、產品類型、產品、個人/企業客戶、賬戶、交易流水
| 表 | 關鍵設計 | 業務含義 |
|---|---|---|
| employee | 自關聯 superior_emp_id → 組織架構樹 | 員工層級管理 |
| customer | cust_type_cd ENUM('I','B') 分個人/企業 | 客戶多態建模 |
| individual / business | 1:1 擴展 customer,cust_id 為 PK&FK | 子類型表模式 |
| account | status ENUM('ACTIVE','CLOSED','FROZEN')、雙餘額欄位 | 賬戶狀態機、可用/掛賬餘額分離 |
| transaction | txn_type_cd ENUM('DBT','CDT')、funds_avail_date | 借貸記賬、資金可用日 |
emp_tmp 存主鍵,再 UPDATE ... SET superior_emp_id = (SELECT ...) 逐層掛接,最後 ALTER TABLE ADD FK。INSERT ... SELECT ... CROSS JOIN ... UNION ALL 模式,單語句完成多表關聯資料生成。INSERT INTO transaction SELECT ... FROM account WHERE product_cd IN (...) 一鍵為所有活期/儲蓄賬戶生成 100 元存款流水。account.avail_balance、transaction.txn_date 加索引,對比 EXPLAIN。導入此腳本,擁有一個生產級複雜度的練習環境,SQL 技能提升事半功倍。