資料庫設計好壞直接決定專案複雜度與效能上限。新手常忽略整體、過度關注局部,導致後期重構成本極高。以下為實戰總結的四大支柱。
| 物件 | 慣例 | 範例 |
|---|---|---|
| 資料表 | 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 強制檢查。
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 基石 + 一致命名 + 查詢導向索引 + 活文件**。不求一次完美,但求每次變更留痕、可追溯、可回滾,讓資料庫隨業務演進而非腐化。