引用完整性
引用完整性指被引用表中的主关键字和引用表中的外部主关键字
之间的关系。如被引用行是否可以被删除等。
在现实生活中的实体之间总是存在着某种联系,在关系模型中实
体与实体之间的联系都是用关系来描述的,这样就存在关系与关
系之间的引用。例如,有学生实体和班级两个实体集合:
学生(学号,姓名,性别,年龄,班级编号)其中学号为主码。
班级(班级编号,学生数量,班主任姓名),其中班级编号为主
码。
这两个关系之间存在着属性的引用,即学生关系引用了班级关系
的主关键字"班级编号",显然,学生关系中的"班级编号"值必须
是在班级表中确实存在的班级的班级编号,即班级关系中有该班
级的记录。这说明学生关系中某个属性的取值要参照班级关系的
属性取值。
在这种情况下,"班级编号"不是学生关系的主关键字,但是却是
班级关系的主码,则称"班级编号"是学生关系的外关键字。
外关键字的定义:
设FK是基本关系R的一个或一组属性,但不一定是关系R的主关键
字。如果FK与基本关系S的主关键字相对应,则称FK是基本关系R
的外关键字,并称基本关系R为引用关系,基本关系S为被引用关
系。
在上例中,"班级编号"是学生关系的外关键字,学生关系是引用
关系,班级关系是被引用关系。
引用完整性就是定义外关键字与主关键字之间的引用规则。如果
要删除被引用的对象,那么也要删除引用它的所有对象,或者把
引用值设置为空(如果允许的话)。例如,前面的学生和班级关系
中,删除某个班级元组之前,必须先删除相应的引用该班级的学
生元组。这就是引用完整性。
图3-1,综合了三种关系数据的完整性。由图中可以看到,实体
完整性是对应元组或行而言域完整性是对应属性或列而言,引用
完整性是对不同表之间的属性或列的引用关系而言。
实体完整性指表中行的完整性。要求表中的所有行都有唯一的标
识符,称为主关键字。主关键字是否可以修改,或整个列是否可
以被删除,取决于主关键字与其他表之间要求的完整性。
实体完整性规则规定基本关系的所有主关键字对应的主属性都不
能取空值,例如,学生选课的关系选课(学号,课程号,成绩)
中,学号和课程号共同组成为主关键字,则学号和课程号两个属
性都不能为空。因为没有学号的成绩或没有课程号的成绩都是不
存在的。
对于实体完整性,有如下规则:
· 实体完整性规则针对基本关系。一个基本关系表通常对应一
个实体集,例如,学生关系对应学生集合。
· 现实世界中的实体是可以区分的,它们具有一种唯一性质的
标识。例如,学生的学号,教师的职工号等。
在关系模型中,主关键字作为唯一的标识,且不能为空。
域完整性
域完整性指列的值域的完整性。如数据类型、格式、值域范围、
是否允许空值等。
域完整性限制了某些属性中出现的值,把属性限制在一个有限的
集合中。例如,如果属性类型是整数,那么它就不能是101.5或
任何非整数。
用户自定义完整性
用户自定义完整性指针对某一具体关系数据库的约束条件,它反
映某一具体应用所涉及的数据必须满足的语义要求。