資料完整性確保資料精確性與可靠性。SQL Server 實作四類:1) 實體完整性:主鍵/唯一/Identity 確保列唯一;2) 域完整性:資料型別、CHECK/DEFAULT/NOT NULL/FOREIGN KEY 限制欄位值域;3) 參考完整性:外鍵確保主從表鍵值對應,防止孤立/遺失資料,支援級聯動作;4) 使用者定義完整性:業務特有規則,透過規則/預設值/約束/觸發器實作。本文詳細說明 CREATE RULE/sp_bindrule、CREATE DEFAULT/sp_bindefault、約束語法 (PRIMARY KEY, UNIQUE, CHECK, FOREIGN KEY, DEFAULT)、觸發器在完整性中的角色,並說明規則/預設值將被約束取代的趨勢。
| 類型 | 核心機制 | 典型實作 |
|---|---|---|
| 實體完整性 | 列唯一識別 | PRIMARY KEY, UNIQUE, IDENTITY |
| 域完整性 | 欄位值域限制 | CHECK, DEFAULT, NOT NULL, FOREIGN KEY, 資料型別 |
| 參考完整性 | 主從表鍵值一致 | FOREIGN KEY (CASCADE UPDATE/DELETE) |
| 使用者定義 | 業務特有規則 | Rule, Default, Constraint, Trigger |
CREATE RULE rule_name AS @var > 0 AND @var < 100;
EXEC sp_bindrule 'rule_name', 'table.column';
CREATE DEFAULT default_name AS 'N/A';
EXEC sp_bindefault 'default_name', 'table.column';
注意:規則/預設值為單一資料庫物件,需綁定/解除綁定,功能已被資料行層級 CHECK 約束與 DEFAULT 約束取代,新專案建議直接使用約束。
善用宣告式約束 (DRI) 取代觸發器實作完整性,效能更好、維護更簡單。