- 数据完整性主要指的是数据的精确性和可靠性,目的就是为了防止数据库中存放的数值,以及字符具有合法性(即按照管理员定义的规则进行存放)
分为以下四类:
- 实体完整性
实体完整性要求每一个表中的主键字段都不能为空或者重复的值。实体完整性指表中行的完整性。要求表中的所有行都有唯一的标识符,称为主关键字。主关键字是否可以修改,或整个列是否可以被删除,取决于主关键字与其他表之间要求的完整性。
实体完整性规则:
基本关系的所有主关键字对应的主属性都不能取空值,例如,学生选课的关系选课(学号,课程号,成绩)中,学号和课程号共同组成为主关键字,则学号和课程号两个属性都不能为空。因为没有学号的成绩或没有课程号的成绩都是不存在的。
2.域完整性
域完整性可以强制域完整性限制类型(即通过使用数据类型)、限制格式(即通过使用check约束和规则)或者是限制可能值得范围(使用foreign key约束、check约束、default定义、not null定义和规则)。
3.引用完整性
该名词,很多同志可能刚看到也比较陌生,因为在SQL server2000之前(不含)的版本中一直被包括在参照完整性的概念里。
在输入或删除记录时,引用完整性保持表之间已定义的关系。在 Microsoft® SQL Server™ 2000 中,引用完整性基于外键与主键之间或外键与唯一键之间的关系(通过 FOREIGN KEY 和 CHECK 约束)。引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。
强制引用完整性时,SQL Server 禁止用户进行下列操作:
- 当主表中没有关联的记录时,将记录添加到相关表中。
- 更改主表中的值并导致相关表中的记录孤立。
- 从主表中删除记录,但仍存在与该记录匹配的相关记录。
例如,对于 pubs 数据库中的 sales 和 titles 表,引用完整性基于 sales 表中的键 (title_id) 与 titles 表中的主键 (title_id) 之间的关系。
4.用户定义完整性
用户定义完整性使您得以定义不属于其它任何完整性分类的特定业务规则。所有的完整性类型都支持用户定义完整性(CREATE TABLE 中的所有列级和表级约束、存储过程和触发器)。