データの整合性
データの整合性を強制すると、データベース内のデータの品質を確実にできます。たとえば、ある従業員の従業員 ID の値を 123 と入力した場合、そのデータベース内では、他の従業員に同じ ID を使用することを禁止する必要があります。employee_rating 列で 1 ~ 5 の範囲の値を対象にする場合、データベース内では、範囲外の値を許容しないようにします。従業員の部署番号を格納する dept_id 列がテーブルにある場合、データベース内では、社内の部署番号として有効な値のみを許可するようにします。
テーブルのプランを作成する際には、列に対する有効値を識別する手順、およびその列のデータの整合性をどのように強制するかを決定する手順の 2 つが重要です。データの整合性は次の種類に分類されます。
エンティティの整合性
ドメインの整合性
参照整合性
ユーザー定義の整合性
エンティティの整合性
エンティティの整合性は、行を特定のテーブルの一意なエンティティとして定義します。UNIQUE インデックス、UNIQUE 制約、または PRIMARY KEY 制約を使用して、テーブルの識別子列または主キーの整合性を強制します。
ドメインの整合性
ドメインの整合性とは、特定の列に対するエントリの妥当性です。データ型を使用して型を制限したり、CHECK 制約とルールを使用して形式を制限したり、FOREIGN KEY 制約、CHECK 制約、DEFAULT 定義、NOT NULL 定義、およびルールを使用して有効値の範囲を制限することにより、ドメインの整合性を強制できます。
参照整合性
参照整合性は、行の入力時または削除時に、テーブル間で定義されている関係を維持します。SQL Server での参照整合性は、FOREIGN KEY 制約および CHECK 制約を使用した、外部キーと主キーの関係または外部キーと一意キーの関係に基づいています。参照整合性を強制することで、テーブル間でキー値の一貫性を確保できます。このような一貫性を確保するには、存在しない値への参照がないことのほか、キー値の変更時にその値への参照がすべてデータベース全体で一貫して変更されることが必要です。
参照整合性を強制すると、ユーザーによる次の操作が SQL Server によって禁止されます。
関連付けられた行が主テーブル内にない場合に、関連テーブルに対して行の追加や削除を行うこと。
関連テーブルの行が孤立状態になるような変更を、主テーブルの値に対して行うこと。
一致する関連行がある場合に、主テーブルから行を削除すること。
たとえば、AdventureWorks2008R2 データベース内の Sales.SalesOrderDetail テーブルおよび Production.Product テーブルを使用する場合、参照整合性は、Sales.SalesOrderDetail テーブルの外部キー (ProductID) と Production.Product テーブルの主キー (ProductID) との間の関係に基づいています。この関係により、販売注文では Production.Product テーブルに存在しない製品を参照できなくなります。
ユーザー定義の整合性
ユーザー定義の整合性を使用すると、整合性の他のカテゴリに当てはまらない特定のビジネス ルールを定義できます。整合性のどのカテゴリも、ユーザー定義の整合性をサポートします。これには、CREATE TABLE、ストアド プロシージャ、およびトリガーで使用される列レベルおよびテーブル レベルのすべての制約が含まれます。