前言
資料庫是系統核心,設計品質直決系統效能、穩定與維護成本。大型專案(百萬級以上、高併發、多模組)需建立**系統化設計流程**與**落地執行技巧**,而非單純依賴範式理論。
一、建立資料小組:跨職能治理機制
- 組成: 熟悉業務的專案骨幹(架構師、DBA、資深開發、業務分析師)。
- 職能: 需求分析提取核心資料元素 → 參考同類系統 → 審核新元素完整性/業務覆蓋 → 舊系統資料轉換規劃 → 設計審核/調整 → 定版把關 → 變更通知(含頭文件自動產生)。
- 核心原則: 集中審核、統一標準、版本控制、變更追蹤。
二、七大設計原則
| # | 原則 | 執行要點 |
| 1 | 規範命名 | 庫/表/欄位統一命名規則(前綴、縮寫、大小寫),附中文說明,納入資料字典。 |
| 2 | 控制欄位引用 | 使用設計管理工具,既有欄位直接引用(含型別/約束/說明),避免重複定義導致不一致。 |
| 3 | 庫表去重 | 新設計欄位>80% 既有 → 懷疑表重複 → 查詢欄位所屬表/設計人 → 確認合併或拆分。 |
| 4 | 並發控制 | 同一表同一時間僅一人具編輯權,其他人唯讀,防衝突覆蓋。 |
| 5 | 必要討論 | 設計定版前組織評審,熟悉結構、暴露問題、同步資訊。 |
| 6 | 小組審核把關 | 所有庫表定版/變更必經資料小組審核,簽核留痕。 |
| 7 | 頭文件同步 | 變更後自動產生/更新程式端頭文件(C/C++/Java 實體類),通知相關開發同步修改。 |
三、七大開發技巧
1. 大表拆分:垂直/水平/業務三維度
- 高頻小表(參數/代碼表)獨立,避免大表掃描拖慢熱點查詢。
- 業務維度拆分:如戶主帳表 → 活期/定期/對公三表,查詢效能提升數倍。
- 水平分表:按時間/區域/機構分區(Partition)或物理分表,配合應用路由。
2. 索引設計:選擇性、順序、覆蓋
- 索引欄位優先選**重複值少(高選擇性)**的欄位。
- 複合索引遵循**最左前綴**:WHERE/Order By 欄位順序與索引定義順序一致。
- 案例:流水表 5 萬筆,(日期,流水號) 索引查流水號 3 秒;單欄流水號索引 <1 秒。日期重複值高導致索引失效。
3. 資料操作優化:批次化、緩衝、避免大事務
- 批次取號: 流水號表單次更新 +1000,減少鎖競爭,批次業務提速 90%+。
- 大量寫入: 使用
PUT/緩衝區滿頁再 I/O(或 LOAD DATA/COPY/INSERT /*+ APPEND */),避免逐行 Commit。
- 大量刪除:
DELETE 產生大事務 → 改 TRUNCATE / DROP + RECREATE / 分批 DELETE ... WHERE rownum <= 10000 循環。
4. 參數調優:經驗驅動、監控閉環
- 鎖數量過小 → 鎖升級為表鎖 → 併發崩潰。
- 邏輯日誌檔過少 → 大表插入失敗/效能抖動。
- 由資深 DBA 依實際負載持續調整,建立基準線與告警。
5. 必要工具:自動化提升效率
- 自動產生頭文件/實體類。
- 資料初始化腳本化。
- 插入函數封裝(統一錯誤處理/日誌/審計)。
- 錯誤追蹤/自動顯示儀表板。
6. 避免長事務:拆解與補償
- 單表大操作 → 參數調優 + 分檔/分批。
- 業務長事務(如日終批次) → 拆解為多個小事務,應用層控制流程與補償邏輯(失敗重跑單步),避免整體回滾耗時數小時。
7. 適度超前:擴展性預留
- 欄位長度/精度預留 20-30% 成長空間。
- 關鍵實體預留擴充屬性表(EAV)或 JSON 欄位。
- 分區鍵選擇支援未來業務維度(如預留機構/租戶欄位)。
- 定期評估架構承載上限,提前規劃分庫/分表/讀寫分離方案。
總結
大型資料庫設計 = **治理機制(資料小組)** + **落地原則(命名/引用/去重/並發/審核/同步)** + **效能技巧(拆分/索引/批次/參數/工具/事務拆解/超前)**。唯有將這些內化為團隊標準作業程序(SOP),才能在專案規模增長時保持系統穩健、高效、可維護。