資料庫設計是指針對給定應用環境,構造最優資料庫模式,建立資料庫及應用系統,有效存儲資料並滿足多樣用戶需求。本文系統梳理設計全生命週期、核心方法與實戰技巧。
一、資料庫與資訊系統的關係
- 資料庫是資訊系統核心基礎,按模型組織海量資料,提供存儲、維護、檢索功能。
- 資料庫是系統各部分緊密結合的關鍵紐帶。
- 設計人員需具備:資料庫理論與設計技術、計算機科學與程式設計基礎、軟體工程原理、應用領域知識。
二、設計特點:三分技術、七分管理、十二分基礎資料
- 硬體、軟體、人員(幹件)三位一體。
- 結構(資料)設計與行為(處理)設計並重、分離又結合。
- 傳統軟體工程忽視資料語義分析,早期研究偏重模型輕視行為設計。
三、主流設計方法
| 類別 | 代表方法 | 特點 |
| 手工試湊法 | — | 依賴經驗,缺乏理論支撐,維護成本高 |
| 規範設計法(手工) | 新奧爾良法 | 四階段迭代求精 |
| S.B.Yao 法 | 五步驟流程 |
| I.R.Palmer 法 | 逐步遞進過程 |
| 電腦輔助設計 | Oracle Designer、PowerDesigner | 工具化、標準化、支援團隊協作 |
四、六大基礎階段
- 需求分析:準確理解用戶資料與處理需求,最困難、最耗時,奠定全局基礎。
- 概念結構設計:核心關鍵。綜合歸納抽象形成獨立於 DBMS 的概念模型(E-R 圖)。
- 邏輯結構設計:轉換為目標 DBMS 支援模型(如關聯模型),並優化。
- 物理設計:依應用環境選擇最適存儲結構與存取方法(索引、分區等)。
- 實施:用 DDL/DML 建庫、編寫應用、導入資料、試運行。
- 運行維護:持續評價、調整、修改,適應業務變化。
全程貫穿「結構與行為同步設計、相互參照」原則。
五、模式形成四層次
- 需求分析 → 綜合用戶需求
- 概念設計 → 獨立於機器與 DBMS 的概念模式(E-R 圖)
- 邏輯設計 → 轉換為關聯模型得邏輯模式,再建視圖形成外模式
- 物理設計 → 依 DBMS 特點安排存儲、建索引形成內模式
六、實戰設計技巧精華
1. 需求分析階段
- 深度理解客戶業務,持續確認需求變化。
- 重視輸出導向設計:先看報表/查詢/視圖,反推必要表與欄位(如郵遞區號需獨立欄位以支援排序分組)。
- 建立資料字典與 E-R 圖,實現團隊共識與文檔化。
- 制定物件命名規範(表、欄位、索引、約束統一風格)。
2. 表與欄位設計(邏輯層)
表原則:
- 遵循 3NF(One Fact in One Place),透過外鍵關聯,平衡效能與完整性;效能關鍵處可適度反正規化。
- 採用資料驅動而非硬編碼:連線資訊、工作流定義、角色權限皆存資料表,增強彈性。
- 預留變更追蹤:如姓氏變更(婚姻等),獨立表存儲含生效/失效日期。
每表必加三欄位:
dRecordCreationDate(建檔時間,預設 NOW/GETDATE)
sRecordCreator(建檔人,預設 USER)
nRecordVersion(版本戳,利稽核與 Null 追蹤)
欄位細節:
- 地址拆分多行(Address_Line1/2/3),電話/Email 獨立表含類型標記。
- 角色實體定義分類屬性:
PERSON + PERSON_TYPE 實現頭銜變更歷史追蹤。
- 數值型慎選
smallint/tinyint 避免溢位;ID 類字串長度預留 2-3 位成長空間。
- 採軟刪除旗標(
IsDeleted),避免硬刪破壞索引完整性。
3. 鍵與索引策略
- 四原則:關聯欄位建外鍵、鍵值唯一、避免複合鍵、外鍵必指向唯一鍵。
- 主鍵採系統生成(Identity/Sequence),掌控索引完整性,利邏輯缺陷排查。
- 拒絕用戶可編輯欄位作主鍵。
- 可選鍵可升級為主鍵以強化索引。
索引黃金法則:
- 邏輯主鍵用唯一叢集索引,系統鍵用唯一非叢集,外鍵建非叢集索引。
- 95% 效能問題可由索引解決;必建外鍵索引(頻繁 JOIN 需求)。
- 勿索引 Memo/大型欄位、小型頻繁增刪表(維護成本超過掃描收益)。
4. 資料完整性設計
- 實體完整性靠主鍵,參考完整性靠外鍵約束(級聯/受限/置空)與觸發器,用戶定義完整性靠
NOT NULL/CHECK/Trigger。
- 以約束而非業務層強制完整性:資料庫層面保障跨表一致性,業務層無法覆蓋。
- 啟用宣告式完整性,攔截髒資料入庫。
- 下拉選單/查找表限制輸入,減少錯誤並保證一致性(如國家代碼、狀態代碼)。
- 視圖提供抽象層,隔離應用與底表變更,增靈活度。
5. 其他關鍵習慣
- 慎用觸發器(難除錯),必要時集中文檔化。
- 命名、報表、清單優先用自然語言(英文),代碼輔以說明。
- 專表存放元資料:版本、最後檢查時間、設計文檔連結、客戶資訊。
- 內建版本機制,追蹤結構演進。
- 全方位文檔化:註釋、命名規範、限制、函數;工具支援或獨立文檔庫。
- 測試三部曲:開發測試 → 用戶驗收測試 → 上線前完整回歸。
- 原型驅動檢查設計:對每種輸出原型驗證資料模型取數邏輯。
掌握上述方法論與技巧,方能在複雜應用環境中構建高效、可擴展、易維護的最優資料庫模式。