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

資料庫設計 14 大核心技巧:從 ER 建模到效能優化的完整實戰指南

     編輯:關於SqlServer

前言

資料庫設計是資訊系統成敗的基石。本文彙整 14 大核心技巧,涵蓋**實體識別、鍵值設計、範式權衡、關聯處理、視圖應用、完整性約束、三少原則、效能優化**等全生命週期關鍵決策點,助您建立高內聚、低耦合、可擴展的資料架構。

技巧 1:原始單據與實體的對應關係

  • **一對一** (最常見):單據 ↔ 基本表
  • **一對多**:單據拆解為多基本表 (如員工履歷 → 基本資料/社會關係/工作簡歷 三表)
  • **多對一**:多單據匯聚為一實體
  • **指導原則**:明確對應關係 → 設計錄入介面、驗證邏輯、ETL 流程

技巧 2:主鍵 (PK) 與外鍵 (FK) 設計鐵律

  • 葉子實體 (無子實體) **可無 PK,但必有 FK** (指向父實體)
  • 非葉子實體 **必有 PK** (被子實體 FK 參考)
  • 專家名言:「鍵,到處都是鍵,除了鍵之外,什麼也沒有」— PK 抽象實體,PK-FK 配對表達實體連接

技巧 3:基本表四大本質特徵

特徵定義設計含義
原子性欄位不可再分解拒絕多值欄位、複合欄位 (如「姓名」拆「姓/名」)
原始性記錄為基礎原始資料非衍生、非彙總、非暫存
演繹性配合代碼表可演繹所有輸出基本表 + 代碼表 = 系統完整資訊來源
穩定性結構相對穩定、長期保存變動需嚴格變更控制,區別於中介/暫存表

技巧 4:範式標準與刻意違反

  • **目標**:基本表滿足 3NF (無傳遞相依)
  • **現實**:為效能**刻意降範式** (增加冗余欄位),以空間換時間
  • **範例**:商品表保留 Amount = Price * Qty — 違反 3NF,但查詢統計無需運算
  • **工具支援**:Rose/PowerDesigner 區分「資料欄」與「計算欄」
  • **策略**:概念模型遵守 3NF,物理模型視效能降範式

技巧 5:三大範式通俗理解

  • **1NF**:欄位原子性,不可再分
  • **2NF**:記錄唯一性,實體有單一識別碼 (PK)
  • **3NF**:欄位無冗余,非鍵欄位不傳遞相依於 PK

技巧 6:識別與消除多對多關聯

  • **識別**:兩實體互為多對多 (如 圖書 ↔ 讀者)
  • **消除**:引入**關聯實體** (如 借還書),轉為兩個一對多
  • **屬性分配**:關聯實體包含雙方 PK (成為 FK)、關聯屬性 (借閱時間、歸還標記)
  • **工具提示**:建模工具通常**無法自動識別**多對多,需設計師主動發現

技巧 7:主鍵取值策略

  • **推薦**:無業務意義的代理鍵 (Surrogate Key) — IDENTITY、SEQUENCE、NEWSEQUENTIALID()
  • **避免**:複合主鍵 (超過 2~3 欄位) — 索引膨脹、連接條件冗長、FK 傳播導致子表鍵值過長
  • **業務鍵**:以唯一條件約束 (Unique Constraint) 保護,不作 PK

技巧 8:正確認知資料冗余

**核心**:PK/FK 在多表重複 **不算冗余**,那是關聯機制。

技巧 9:ER 圖無標準答案,但有優劣標準

  • 覆蓋業務範圍與功能即可行
  • **優秀 ER 圖標準**:結構清晰、關聯簡潔、實體數適中、屬性分配合理、無低級冗余

技巧 10:視圖技術在設計中的戰略價值

  • **虛擬表**:依賴基表存在,不佔儲存 (索引檢視表除外)
  • **四大角色**:程式存取窗口、基表資料綜合形式、運算加速手段、資料保密屏障
  • **深度限制**:定義深度 ≤ 3 層;不足時 → 視圖上建暫存表 → 再建視圖,迭代繞過限制
  • **安全模式**:高機密系統 → 基表完成物理設計 → 立即建立 1:1 視圖層 → **程式員僅操作視圖**,DBA 持多重金鑰操作基表

技巧 11:中介表、報表、暫存表分工

類型定義範例態度
低級冗余 (重複性)非鍵欄位在多表重複儲存多表存「客戶名稱」**堅決反對** — 導致不一致
高級冗余 (衍生性)欄位由其他欄位衍生計算Amount = Price * Qty**提倡** — 以空間換查詢速度

技巧 12:完整性約束三層實現

  • **域完整性**:CHECK 約束、DEFAULT、資料型別、NOT NULL — 工具中對欄位定義取值範圍
  • **參考完整性**:PK/FK、表級觸發器 (跨表複雜規則)
  • **使用者定義完整性**:業務規則 — **預存程序** (複雜驗證/流程)、**觸發器** (資料級強制規則)

技巧 13:防止打補丁設計 — 「三少原則」

類型用途維護者鍵值
中介表統計資料、資料倉庫、報表輸出DBA視需求 (倉庫需 PK/FK)
報表表特定報表快取DBA/開發通常無
暫存表程式員個人暫存運算中間結果程式員 (程式自動建刪)無

**核心洞見**:「三少」是**系統級資料整合**的指導原則 — 文件系統 → 單一應用資料庫 → 主題資料庫 → 全域綜合資料庫。整合程度越高,共享性越強,孤島越少,實體/屬性總數越少。

**反模式**:「三多」 = 打補丁設計 → 垃圾堆/大雜院 → 系統癱瘓無法維護。

技巧 14:提升資料庫執行效率的三層優化

  1. 系統級:DBMS 參數調優 (緩衝區、執行緒、平行度、鎖定升級閾值)
  2. 設計級:
    • 適度降範式、增加高級冗余
    • 少用觸發器,多用預存程序 (計畫重用、批次處理)
    • 超大表水平分割 (按 PK 範圍/時間/雜湊) / 垂直分割 (熱/冷欄位分離)
    • 分區表/分區索引 (Enterprise Edition)
  3. 程式實現級:
    • 極複雜/超大量運算 (千萬列+) → **資料庫外運算** (C++/Python/檔案系統) → 最後批次載入
    • SQL 語句優化:索引覆蓋、避免隱性轉換、參數化、窗口函數替代游標

總結

資料庫設計的實用鐵律:**在冗余與速度間尋找平衡點**。「三少」不是教條,而是**整合導向的架構審視鏡**。優秀設計師能在概念模型嚴守 3NF、物理模型精準降範式、視圖層構建安全與效能雙重保障、程式層發揮集合運算極致效能。將這 14 大技巧內化為設計直覺,並在每個專案中以檢查清單形式落地,方能構建經得起時間考驗的資料資產。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
原則內容效益
表少資料庫表數越少越好ER 圖少而精、去重整合、防止孤島、減少打補丁
組合鍵少複合主鍵欄位數越少越好索引小、連接快、FK 傳播輕量
欄位少單表欄位數越少越好無重複/冗余、強迫「列轉行」正規化、防止主表殘留大量空值欄位