参照完整性的定义:如果基本关系R2的属性中,包含与另一个基本关系R1的主码K相对应的属性组F,那么F则称为外部码;对R2每个元组在F上的取值只能只允许两种可能:一是空值;二是等于R1中某个元组的主码值。这里R1和R2不一定是不同的关系;K与F是定义在同一域中的。
举一个实例,教职工关系(职工号,职工名,工资,部门号)和部门关系(部门号,部门名),其中部门关系中的部门号是主码,职工关系中,对每个职工也有部门号这一项,表明这个职工是在哪个部门工作的。职工关系中的部门号属性和部门关系中的部门号属性相对应,职工关系中部门号则是外部码。
从上面的例子可以看到:在职工关系中部门号一项,要么取空值,表示这个职工还未分配到任何一个部门工作;要么取值必须和部门关系中某个元组的部门号相同,表示这个职工分配到某个部门工作。这就是参照完整性。上例中若是教职工关系中某个职工的部门号取值不能与部门关系中任何一个元组的部门号一致,表示这个职工被分配到不属于这个单位的部门工作,这与实际应用环境是不相符的,显然是错误的。这就是为什么关系模型中定义了参照完整性约束规则。
在参照完整性定义中,还注明R1、R2不一定是不同的关系。现再给出一个同一关系的实例:若有教职工关系(职工号,职工名,系主任-职工号,工资),其中职工号是主码。系主任的职工号是外部码,它与本关系职工关系中主码职工号相对应,系主任职工号的取值要么为空值,表示这个系还未任命主任;要么等于职工关系中某个职工号。
实体完整性与参照完整性是由系统自动支持的,即:在建立关系(表)时只要说明了"谁是主码","谁参照于谁",系统将自动进行此类完整性的检查。