数据完整性

强制数据完整性可保证数据库中数据的质量。例如,如果输入了雇员 ID 值为 123 的雇员,则数据库不允许其他雇员拥有同值的 ID。如果您的 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.SalesOrderDetail 表和 Production.Product 表,引用完整性基于 Sales.SalesOrderDetail 表中的外键 (ProductID) 与 Production.Product 表中的主键 (ProductID) 之间的关系。此关系可以确保销售订单从不引用 Production.Product 表中不存在的产品。

使用外键/主键的引用完整性

用户定义完整性

用户定义完整性使您可以定义不属于其他任何完整性类别的特定业务规则。所有完整性类别都支持用户定义完整性。这包括 CREATE TABLE 中所有列级约束和表级约束、存储过程以及触发器。

请参阅

概念

其他资源