資料完整性

強制資料完整性可確保資料庫中的資料品質。例如,如果所輸入的員工識別碼值為 123,資料庫就不允許其他員工具有相同值的識別碼。若您希望 employee_rating 資料行的值範圍從 15,資料庫就不應接受該範圍以外的值。若資料表擁有 dept_id 資料行,裡面儲存了員工的部門編號,資料庫就只能接受對公司部門編號而言有效的值。

計畫資料表中兩個重要的步驟是識別資料欄的有效值,以及決定如何強制資料欄中資料的完整性。資料完整性分成下列類別:

  • 實體完整性

  • 值域完整性

  • 參考完整性

  • 使用者自訂完整性

實體完整性

實體完整性將定義一資料列作為特定資料表的唯一實體。實體完整性透過 UNIQUE 索引、UNIQUE 條件約束或 PRIMARY KEY 條件約束,強制識別碼資料行或資料表主索引鍵的完整性。

值域完整性

值域完整性是指特定資料行的項目有效性。您可以強制值域完整性,藉由使用資料類型來限制類型、使用 CHECK 條件約束與規則來限制格式、或使用 FOREIGN KEY 條件約束、CHECK 條件約束、DEFAULT 定義、NOT NULL 定義與規則來限制可能值的範圍。

參考完整性

參考完整性可在輸入或刪除資料列時,保留資料表之間已定義的關聯性。在 SQL Server 中,參考完整性是以外部索引鍵與主索引鍵間的關聯性,或外部索引鍵與唯一索引鍵間的關聯性為基礎 (透過 FOREIGN KEY 和 CHECK 條件約束)。參考完整性可確保索引鍵值在各資料表間的一致性。這種一致性要求不可參考不存在的值,且若索引鍵值發生變更,資料庫中所有指向它的參考也必須一致變更。

當您強制參考完整性時,SQL Server 會防止使用者執行下列動作:

  • 若主要資料表中沒有關聯的資料列,會在相關的資料表中加入或變更資料列。

  • 變更主要資料表中的值,而在相關資料表內產生遺棄的資料列。

  • 若有符合的相關資料列,會從主要資料表中刪除資料列。

例如,對於 AdventureWorks2008R2 資料庫中的 Sales.SalesOrderDetailProduction.Product 資料表,參考完整性是以 Sales.SalesOrderDetail 資料表中的外部索引鍵 (ProductID) 和 Production.Product 資料表中的主索引鍵 (ProductID) 之間的關聯性為基礎。此關聯性可確保銷售訂單絕不會參考 Production.Product 資料表中沒有的產品。

使用外部/主索引鍵的參考完整性

使用者自訂完整性

使用者自訂完整性可讓您定義不屬於其他完整性類別目錄的特定商務規則。所有完整性類別目錄都支援使用者自訂完整性。其中包括 CREATE TABLE、預存程序與觸發程序中,所有資料行層級與資料表層級的條件約束。