��1、问题的提出
��所谓的参照完整性就是说一个关系中给定属性集的取值都来自于另一关系中某个属性集的取值。例如,关系account和branch的关系模式分别是Account-schema和Branch-schema:
Account-schema = (branch-name, account-number, balance)
Branch-schema = (branch-name, branch-city, assets)
针对上述关系模式,以下两种情况是完全不同的:
⑴关系account中branch-name的属性值有一个为Tsinghua,它在关系branch中是不存在的;
⑵关系branch中branch-name的属性值有一个为Peking,但是它从来都没有在关系account中出现过。
��对于第⑵种情况来说是合理的,因为即使一个银行的分支机构已经存在,也不一定有客户在该机构申请帐号办理存款;而对于第⑴种情况来说就有问题了,因为该分支机构还不存在,却已经有客户在该机构申请帐号办理存款了。因此,在数据库中要禁止第⑴种情况出现。

�2、参照完整性的形式化定义
��假设关系r1(R1)和r2(R2)的主码分别为K1和K2。称R2的子集a为参照关系r1中K1的外码,是要求对r2中的任意元组t2,均存在r1中的元组t1,使得:
��t1[K1] = t2[α]
这种要求就称为参照完整性约束,或子集依赖。子集依赖也可以表示为:
��
一般来说,α是等于K1的!