前言:設計優於硬體升級
合理的資料庫設計對效能提升的貢獻,遠超伺服器硬體升級。但實務中常見不良設計習慣拖垮系統。本文歸納五大「戒條」,助您構建高效、可維護、可擴展的 Oracle 架構。
一戒:小表、高頻異動表 —— 切勿建立索引
理由:索引維護成本(插入/刪除/更新時同步調整 B-Tree)可能超過全表掃描成本。
- 員工基本資料表(<10 欄位、頻繁異動)建立索引 → 維護開銷 > 掃描開銷。
- 小表全表掃描極快,優化器傾向不走索引。
原則:大表、低異動、高查詢選擇性欄位才建索引。
二戒:拒絕使用「用戶可編輯鍵」作為主鍵/外鍵
反例:銷售訂單號作為外鍵關聯出貨單。
問題:
- 用戶需修改單號 → 級聯更新所有子表、檢查外鍵約束、處理衝突。
- 系統強制單號不可改 → 業務靈活性受損、用戶體驗差。
- 效能損耗:每次異動需驗證父表存在性。
正解:使用系統自動維護的無意義代理鍵(如 ORDER_ID SEQUENCE/IDENTITY),前端顯示業務單號,後端關聯代理鍵。業務鍵加 UNIQUE 約束即可。
三戒:資料完整性 —— 寧用資料庫約束,勿依賴前端業務規則
慘痛教訓:資料庫 VARCHAR2(50),前端限制 60 字元 → 用戶輸入 55 字元「保存成功」 → 重查只剩 50 字元,**靜默截斷導致資料損失**。
鐵律:
- **完整性約束下沉至資料庫層**(PK、FK、UK、CHECK、NOT NULL)。
- 約束違規錯誤訊息**詳細回饋前端**(而非通用「保存失敗」)。
- 複雜跨表/跨行邏輯無法用約束表達時,**觸發器**優於應用程式(觸發器與資料同生共死,應用程式易繞過)。
- 觸發器慎用:單純轉換邏輯(如大小寫金額)仍建議前端處理,效能更高。
四戒:前端應用勿直接存取基礎表 —— 視圖作為「中介層」
視圖優勢:
- 安全性:隱藏敏感欄位、限制可見行(
WHERE 子句)、實現行級安全(VPD/FGA 基礎)。
- 解耦:基礎表結構變更(增欄位、拆表)不影響前端,只需調整視圖。
- 效能:預先關聯常用表、預先過濾、物化視圖加速報表。
- 可更新視圖:單一視圖支援多表插入(INSTEAD OF TRIGGER),簡化 ETL/匯入邏輯。
報表開發鐵律:嚴禁傳遞動態 SQL 直查基礎表(SQL 注入風險、效能不可控)。
五戒:代碼/枚舉類欄位 —— 提供下拉選單,禁用手工輸入
適用欄位:民族、職位、省份、幣別、狀態碼、部門代碼……
收益:
- **資料品質:** 杜絕拼錯、大小寫不一、編碼不規範。
- **一致性:** 統一碼表來源,跨系統整合無障礙。
- **使用者體驗:** 選單比輸入快、不易錯、可顯示說明文字。
- **維護成本:** 碼表維護集中化,無需寫複雜驗證邏輯。
實作:建立碼表 + 視圖/同義詞 + 前端下拉元件綁定,或使用 Oracle APEX/ADF 等框架原生 LOV 功能。
結語:嚴謹設計,長久受益
這五戒並非理論潔癖,而是無數專案踩坑總結的生存法則。**嚴守戒條,將效能隱患、維護地雷消滅於設計階段**,才是 DBA 與架構師的核心價值所在。