前言
設計品質決定效能上限,**合理設計優於硬體升級**。現場常見五大反模式與正確法則:
鐵律一:小表、高頻異動表**嚴禁建立索引**
- 員工基本資料表(<10 欄位、頻繁增刪改)。
- 索引維護成本(DML 額外 4-5 次 I/O)> 全表掃描成本。
- 規則:**大表、低異動、高查詢** 才建索引;小表全掃極快。
鐵律二:**不要使用使用者可編輯的業務鍵作為 PK/FK**
- 銷售單號可編輯、可重複、業務規則多變。
- 採用 **Surrogate Key(系統自動序列/Identity Column)**:
SALES_ORDER_ID NUMBER GENERATED ALWAYS AS IDENTITY。
- 優勢:不可變、無業務語意、索引窄、Join 效能高、隔離應用變更。
- 前端顯示業務單號,後端存儲/關聯 Surrogate Key。
鐵律三:**資料完整性在資料庫層強制,不依賴前端業務規則**
- 案例:DB 欄位 VARCHAR2(50),前端限制 60 → 截斷無感知,資料損失。
- 原則:DB 約束 為最後防線。
- 配套:
CHECK、NOT NULL、UNIQUE、FK 全上;錯誤訊息詳細回饋前端(含約束名、違規值);
複雜跨表規則用 **Trigger**(僅限無法用約束表達時),嚴禁前端單獨驗證。
鐵律四:**前端應用不直接存取基礎表,通過 View/Procedure 介面**
- View = 基礎表的「新聞發言人」:
- 安全:隱藏敏感欄位、行級安全 (VPD/FGAC)。
- 穩定:基礎表結構變更(加欄位、拆表)View 可適配,前端無感。
- 效能:可更新 View 整合多表寫入;報表 View 預先 Join/Aggregate。
- 嚴禁前端拼接動態 SQL 直查基礎表(注入風險、耦合度極高)。
鐵律五:**減少使用者手工輸入,改用下拉選單/LOV**
- 民族、職稱、省份、幣別、狀態碼等**代碼類欄位**全部下拉選單。
- 效益:消除輸入錯誤、保證編碼一致性、前端體驗佳、後端驗證邏輯簡化。
- 配合
CHECK (col IN (...)) 或 FK 參考代碼表,雙重保障。
總結
五大鐵律——**小表不建索引、業務鍵不做鍵、完整性靠資料庫、存取走介面、輸入改選單**——從設計源頭鎖定高效能、高可維護、高安全的資料庫系統。