1
数据库原理与应用技术
1.3.1.2 2.1.2 关系的完整性规则
2.1.2 关系的完整性规则

1. 实体完整性规则

实体完整性规则(Entity Integrity Rule)是指关系中的元组在组成主键的属性上不允许出现空值(NULL)。空值就是“不知道”或“无意义”。关系中的每一行都代表一个实体,而任何实体都应是可以区分的,主键的值正是区分实体的唯一标识。如果出现空值,那么主键值就起不到唯一标识元组的作用。

例如,学生关系STUDENT(sno,sname,sex,birthday)中的主键是sno,它在任何时候都不能取空值。

例如,学生选课关系SC(sno,cno,grade),属性组学号sno、课程号cno构成选课关系的主键,所以sno、cno这两个属性在任何时候都不能取空值。

实体完整性规则的意义在于,如果主键中的属性取空值,就说明存在某个不可标识实体,即存在不可区分的实体,这与关键字的意义相矛盾。

2. 参照完整性规则

所谓参照完整性规则(Reference Integrity Rule)是指一个表的外键必须是另一个表主键的有效值,或者是空值。如果外键存在一个值,则这个值必须是另一个表中主键的有效值,也就是说,外键可以没有值,即空值,但不允许是一个无效值。

例如,除了上述学生关系 STUDENT(sno,sname,sex,birthday),选课关系 SC (sno,cno,grade),还有课程关系COURSE(cno,cname,credit),每个关系中有下画线的属性表示主键。可知,选课关系SC中的属性学号sno是一个外键,课程号cno也是一个外键,它们分别是关系STUDENT和COURSE的主键。所以,选课关系SC中的学号值必须是实际存在的学号,即学生关系STUDENT中有这个学生的记录;选课关系SC中的课程号的值也必须是确实存在的课程的课程号,即课程关系COURSE中有该课程的记录。也就是说,选课关系SC中某些属性的取值需要参照其他关系的取值。

3. 用户定义完整性

任何关系数据库系统都应该支持实体完整性和参照完整性。除此之外,不同的关系数据库应根据它的应用环境不同,还需要一些特殊的约束条件。用户定义完整性就是针对某一具体关系数据库的约束条件的,是用户按照实际数据库运行环境的要求对关系中的数据所定义的约束条件,反映的是某一具体应用所涉及的数据必须要满足的条件。系统提供定义和检验这类完整性的机制,以便用统一的方法处理它们,而不再由应用程序承担这项工作。例如,学生的性别定义为字符型数据,范围太大,因此可以写一个规则,把性别限制为男或女。