参照完整性是指如果属性(或属性组)F是基本信息体系R的外码,并且与其他基本信息体系的主要编码Ks相对应,则针对基本体系R中各个元组在F上的值必须为空值,或者与S中某列的值相一致。例如,学生选修数据库包含学生表S、选修表SC和课程表C,其中S关系的主码为学号Snum,课程关系的主码为课程号Cnum。选修关系中,学号Snum与S关系的主码学号Snum相对应,课程号Cnum与课程关系的主码课程号Cnum相对应,外码为Snum与Cnum,我们称S和C为被参照关系或目标关系,SC为参照关系。关系型数据库管理系统(RDBMS)在实现参照完整性时需要考虑以下几个方面。
(一)外码是否可以接受空值的问题
在实现参照完整性时,系统除了应该提供定义外码的机制外,还应提供定义外码列是否允许空值的机制。外码是否能够取空值,依赖于应用环境的语义。
(二)在被参照关系删除元组的问题
有时需要删除被参照关系的某个元组,而参照关系又有若干元组的外码值与被删除的被参照关系的主码值相对应。这时系统可能采取的做法有以下3种:
1.级联删除(cascades)
级联删除,即将参照关系中有外码值与被参照关系中要删除元组主码值相对应的元组一起删除。
2.受限删除(Restricted)
受限删除,即只有当参照关系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相对应时,系统才执行删除操作,否则拒绝此删除操作。
3.置空值删除(Nullifies)
置空值删除是指清除被参照体系中的元组层级,并且把与被参照关系中被清除的元组层级相关参照关系设置为空值状态。(www.xing528.com)
(三)修改被参照关系中主码的问题
在某些情况下,需要更改被参照关系中隶属于元祖层级的主要编码数值,同时,这些被参照关系中的主码值与某些参照关系中的外码值存在较大的关联性。与实施清除操作的情况相似,数据库系统会采取一定的处理方式,主要包括以下三种解决形式:
1.级联修改(Cascades)
采取同样的手段,处理被参照关系中的主码值和参照关系中的外码值。与级联删除途径有一定的相似之处,参照关系有多种角色,也是其他关系的被参照关系。这种级联关系在更改途径中不断延续下去。
2.受限修改(Restricted)
受限修改,即拒绝执行这一更改行为。修改需要以某一条件为基础,只有当被参照关系中的某一元组的主码值和参照关系中某一元组的外码值一致的条件下,才能执行更改操作。
3.置空值修改(Nullifies)
置空值修改是指更改被参照系中的主码值,并且将参照关系中与之对应的外码值设置为空值的形式。
在这三种方法中,要根据应用环境的要求确定哪一种是正确的。从上面的讨论可以看出,DBMS在实现参照完整性时,除了需要向用户提供定义主码、外码的机制外,还需要向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法。无论选择哪种方法,都需要根据应用环境的具体要求而确定。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。