3.3.2 维护数据完整性和精确性
参照完整性就是指在数据库中规范数据表之间关系的一些规则,其作用就是保证数据库中表关系的完整性和拒绝能使表的关系变得无效的数据修改。参照完整性规则要求:
(1)不允许在“多”端的字段中输入1个“一”端主键不存在的值。
(2)如果某一记录有相关的记录存在于关系表中,那么数据库引擎不允许从“一”端删除这个记录(除非选择了级联删除相关字段,这样会同时删除“一”端和“多”端的记录,从而保证数据的完整性),因为如果允许又会出现第一种情况。
(3)如果某一记录有相关的记录存在于关系表中,那么数据库引擎不允许改变“一”端主键的值(除非选择了级联更新相关字段,这样会同时更新“一”端和“多”端的主键值,从而保证数据的完整性),因为如果允许又会出现第一种情况。
如果选择了“实施参照完整性”复选框,程序会检测用户输入的数据是否符合上面所说的“参照完整性规则要求”,如果违反上述规则,会给出提示并且不接受用户输入的数据;如果同时选择了“级联删除相关字段”复选框,从“一”端删除记录时,“多”端的相关记录同时被删除;如果选择了“级联更新相关字段”复选框,则允许更改“一”端连接字段,但同时“多”端的相关字段也同时被更改。为保证数据的完整性,应尽可能实施参照完整性。
在“编辑关系”对话框中,有3个复选框供用户选择,但前提是必须先选中“实施参照完整性”复选框,选中之后其他两个复选框才可用,如图3.38所示。这些选项的操作,其实就是在数据库中实施参照完整性。

图3.38 “编辑关系”对话框
1.实施参照完整性
当满足下列全部条件时,可以设置参照完整性。
(1)主表中的匹配字段是一个主键或者具有唯一约束。
(2)相关联字段具有相同的数据类型。
(3)两个表属于相同的数据库。
如果设置了“参照完整性”,则会有如下功能。
(1)不能在相关表的外键字段中输入不存在于主表的主键的值。例如,“院系”表中不存在院系号为“9901”这个院系,而用户试图在“班级”表输入某个班级信息时,院系号输入“9901”就会弹出错误,阻止了用户非法输入,原因是作为主表的“院系”表中不存在该院系号。
(2)如果在相关表中存在匹配的记录,则不能从主表中删除该记录。例如,“班级”表中某个班级的院系号为“4101”,如若试图删除主表“院系”表中院系号为“4101”的记录,则阻止此次执行。
(3)如果在相关表中存在匹配的记录,则不能在主表中更改主键的值。例如,“班级”表中有院系号为“4101”的记录,则不能将主表“院系”表中的院系号为“4101”的记录修改为其他值。
2.级联更新相关字段
在选中了“实施参照完整性”复选框后,如果选中了“级联更新相关字段”复选项,则不管何时更改主表中记录的主键,都会自动在所有相关表的相关记录中,将与该主键相关联的字段更新为新值。例如,将主表“院系”表中院系号为“4101”的记录修改为“9101”,则相关表“班级”表里所有院系号为“4101”的记录全部修改为“9101”。
3.级联删除相关字段
在选中了“实施参照完整性”复选框后,如果选中了“级联删除相关字段”复选项,则不管何时删除主表中的记录,都会自动删除相关表中的相关记录。例如,将主表“院系”表中院系号为“4101”的记录删除,则相关表“班级”表里所有院系号为“4101”的记录将全部删除。