解决方法是先在有关联的一方表添加相应的记录,然后再于多方表追加或修改对应的记录;又或者只添加或修改为一方表已经存在的关联记录到多方表。当然删除相应的表间关系也可以避免报错,但是这是最糟糕的解决办法,因为这样会破坏数据结构的严整性!
假设学生表和成绩表通过学生ID字段建立了一对多参照完整性关系,如果为成绩表添加一条学生ID为“0100”的成绩记录,而学生表里并不存在“0100”的学生ID,或者修改某条成绩记录的“学生ID”为一个学生表中不存在的“学生ID”;反之若果成绩表里已经存在“学生ID”为“0100”的成绩记录,现在要删除学生表里“学生ID”为“0100”的记录(若未设置级联删除的话),这些都会导致违反外键约束。
access编辑关系时勾选“实施参照完整性”复选框有什么作用?
参照完整性要求表间关系中不允许引用不存在的实体。两张表之间如果实施了参照完整性(也可称之为设置了外键约束),关联表的某一方表中的记录发生新增、更新和删除等操作时,要是这些操作违反了外键约束,系统就会报错并拒绝执行相应操作以保持数据始终处于完整、和谐和正确的状态并可减少冗余。
当我们把2张表建立联系的时候,这2个表肯定是有关系的。它可以是一对一的关系;如果是多对多的关系,这是不允许出现的(说明表及其关系设置有问题);大多数都是一对多的关系,当建立了一对多关系时数据库引擎就自然建立完整性原则,它能保证2个表之间的关系及数据得到正确的维护,从最基本的意义上说,防止“多端”出现不完整的记录。
参照完整性规则要求:1、不允许在“多端”的字段中输入1个“一端”主键不存在的值;2、如果某一记录有相关的记录存在于关系表中,那么数据库引擎不允许从“一端”删除这个记录(除非选择了级联删除相关字段,这样会同时删除“一端”和“多端”的记录,从而保证数据的完整性),因为如果允许又回出现第一种情况。3、如果某一记录有相关的记录存在于关系表中,那么数据库引擎不允许改变“一端”主键的值(除非选择了级联更新相关字段,这样会同时更新“一端”和“多端”的主键值,从而保证数据的完整性),因为如果允许又回出现第一种情况。
如果你选择了“实施参照完整性”,程序会检测你输入的数据是否符合上面所说的“参照完整性规则要求”,如果违反上述规则,会给出提示并且不接受你输入的数据;如果同时选择了“级联删除相关字段”,从“一端”删除记录时,“多端”的相关记录同时被删除;如果选择了“级联更新相关字段”,则允许更改“一端”连接字段,但同时“多端”的相关字段也同时被更改。
为保证数据的完整性,您应尽可能实施参照完整性。