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

資料庫設計實戰小結:第三範式、命名規範、索引策略與文件化

     編輯:關於SqlServer

從專案實戰沉澱的資料庫設計核心原則

資料庫設計好壞直接決定專案複雜度與效能上限。新手常忽略整體、過度關注局部,導致後期重構成本極高。以下為實戰總結的四大支柱。

一、範式:第三範式 (3NF) 為基準,適度反正規化

  • 1NF:欄位不可再分(無多值、無重複群組)。
  • 2NF:非鍵欄位完全函數相依於**整個**主鍵(無部分相依)。
  • 3NF:非鍵欄位不傳遞相依於主鍵(無傳遞相依)。
  • 實務:**核心交易表嚴守 3NF**;報表/彙總/維度表**適度反正規化**(冗余外鍵、預計算欄位)換查詢速度。
  • 範式優點:消除插入/更新/刪除異常、結構清晰。缺點:可能產生過多表、聯結成本高。

二、命名規範:一致性 > 個人偏好

物件慣例範例
資料表PascalCase、單數、業務名詞`PurchaseOrder`、`Customer`
欄位PascalCase、語意完整`OrderDate`、`UnitPrice`、`IsActive`
主鍵`PK_TableName``PK_PurchaseOrder`
外鍵`FK_ChildTable_ParentTable``FK_PurchaseOrder_Customer`
索引`IX_TableName_KeyColumns``IX_PurchaseOrder_CustomerID_OrderDate`
預存程序`usp_動詞_名詞``usp_GetCustomerOrders`、`usp_InsertPurchaseOrder`
檢查約束`CK_TableName_Column``CK_PurchaseOrder_Status`

**禁用保留字、空格、中文、縮寫不一致**。專案啟動時產出《命名規範文件》,Code Review 強制檢查。

三、索引策略:從查詢模式反推,而非從表結構正推

  1. 收集核心查詢(TOP 20 佔 80% 負載的 SQL)。
  2. 分析 `WHERE`、`JOIN`、`ORDER BY`、`GROUP BY` 欄位組合。
  3. 設計 **覆蓋索引** (`INCLUDE` 非鍵欄位) 避免 Key Lookup。
  4. 叢集索引首選 **窄、唯一、遞增、靜態** (如 `IDENTITY BIGINT`),避免 `GUID`/`複合鍵` 導致分頁分裂。
  5. 定期跑 `sys.dm_db_index_usage_stats` 清理未使用索引,`sys.dm_db_index_physical_stats` 重組/重建碎片索引。

四、文件化:Data Dictionary + ERD + 變更日誌

  • Data Dictionary**:每欄位定義、資料型別、可否 NULL、預設值、業務含義、範例值、來源/去向系統。
  • ER Diagram**:標註 PK/FK、基數、識別/非識別關係,工具產出 (ERWin, PowerDesigner, dbdiagram.io, SSMS)。
  • 變更日誌**:每次 Schema 變更記錄 `版本、日期、作者、變更內容、影響範圍、回滾腳本`,納入版控 (Git/Liquibase/Flyway)。

實戰範例:法規文件表 (3NF)

CREATE TABLE Regulations (
    ID INT IDENTITY PRIMARY KEY,
    Title NVARCHAR(200) NULL,
    FileAddress VARCHAR(255) NULL,
    OpenDate DATETIME NULL,
    TypeID INT NULL,              -- FK 到 RegulationTypes
    PostDate DATETIME NULL,
    CONSTRAINT PK_Regulations PRIMARY KEY (ID),
    CONSTRAINT FK_Regulations_Type FOREIGN KEY (TypeID) REFERENCES RegulationTypes(ID)
);

結語

**好的資料庫設計 = 3NF 基石 + 一致命名 + 查詢導向索引 + 活文件**。不求一次完美,但求每次變更留痕、可追溯、可回滾,讓資料庫隨業務演進而非腐化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved