首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

《Learning SQL (2nd Edition)》銀行示例資料庫完整建構腳本解析

     編輯:MySQL 綜合教學

《Learning SQL (2nd Edition)》銀行示例資料庫完整建構腳本解析

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 → 組織架構樹員工層級管理
customercust_type_cd ENUM('I','B') 分個人/企業客戶多態建模
individual / business1:1 擴展 customer,cust_id 為 PK&FK子類型表模式
accountstatus ENUM('ACTIVE','CLOSED','FROZEN')、雙餘額欄位賬戶狀態機、可用/掛賬餘額分離
transactiontxn_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 元存款流水。

四、實戰練習場景建議

  1. 多表 JOIN:查詢某分行所有活躍賬戶的客戶名、餘額、開戶員工。
  2. 遞歸查詢:找出某員工的所有下屬(CTE 遞歸 / 存儲過程)。
  3. 事務一致性:模擬轉賬:扣減轉出賬戶可用餘額、增加轉入賬戶掛賬餘額、寫入兩筆交易流水,驗證 ACID。
  4. 分組統計:各產品類型開戶數、平均餘額、交易筆數。
  5. 慢查詢優化:在 account.avail_balance、transaction.txn_date 加索引,對比 EXPLAIN。

五、獲取資源

導入此腳本,擁有一個生產級複雜度的練習環境,SQL 技能提升事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved