概述
数据完整性指数据库中数据的正确性、相容性和一致性。包括现实世界中的应用需求的完整性。数据的完整性由完整性规则来定义。
关系模型的完整性规则是对关系的某种约束,提供一种手段来保证用户对数据库的修改时不会破坏数据库中数据的完整性。保证数据是有意义的。
关系模型分三类约束:实体完整性约束、参照完整性约束和用户自定义完整性约束。 前两者是必须满足的条件,称作关系的两个不变性。由DBMS自动支持
实体完整性约束(Entity Integrity Constraint)
此约束指关系的主属性,主码不能为空,在关系数据库系统中,一个关系对应一张表,实体完整性指在数据存储数据的表中,主键/码不能取控值 NULL
参照完整性约束 (Referential Integrity Constraint)
现实世界中实体之间往往存在某种联系,在关系模型中这种联系通过关系来描述
参照完整性约束就说定义外码和主码之间的引用规则,是对关系间引用数据的一种限制。若属性(属性组)X 是基本关系 R 的外码,它与基本关系 S 的主码 Y 对应,那么 R 中每个元组在 F 上的值要么取 NULL,要么等于 S中对应元组的主码值。 R 和 S 可以是不同的关系,也可以是同一关系。
如:1
2教师(职工号,姓名,性别,系编号)
系(系编号,系名,办公地点)
上述两个关系之间存在属性的引用,系编码既是 系
关系的主码又是教师
关系的外部码。那么教师
关系中系编码属性的取值需要参照 系
关系中系编码的值或为 NULL。
用户定义完整性约束 (User-defined Integrity constraint)
此约束针对某一应用环境的完整性约束条件,反映了某一具体应用所涉及的数据应满足的要求。关系模型提供定义和检验的机制,此类规则一般在建立数据库表的同时进行定义,如果某些条件未建立在库表一级,则应在各个模块的具体编程中通过程序进行检查和控制。
关系模型完整性约束检验
在对数据库进行修改时须检验是否满足对上述三类完整性约束
插入操作
首先检查实体完整性约束,检查插入行在主码属性上的值是否已存在,不存在,可以执行插入,否则不可插入。再检查参照完整性约束,如果是向被参照关系插入,则不需要考虑此约束;如果向参照关系插入,则检查插入行在外码属性上的值是否已在相应被参照关系的主码属性中存在,存在,可插入,否则不可插入,或者将插入行的外码属性的值改为NULL,再插入,最后检查自定义完整性约束,包括数据的类性、精度、取值范围、是否允许空值、是否有默认值等,满足即可执行插入操作,否则给出错误信息。
删除操作
一般只需对被参照关系检查参照完整性约束。如果主键被引用则不可删,或将参照关系中对应行的外码属性改为为NULL,再删除
更新操作
结合删除 和 插入操作,先删除再插入。