数据库完整性之参照完整性

数据库完整性之参照完整性,第1张

完整性约束 关系模型的参照完整性参照完整性定义参照完整性检查参照完整性违约处理使用navicat设置字段外键/参照完整性约束

关系模型的参照完整性
     数据表字段的外键约束属于数据库设计—— 关系模型的参照完整性 的内容。
    关系模型的参照完整性是指:在创建表create table的SQL语句中,用foreign key短语定义哪些列/字段作为当前数据表的外键,用references短语指明这些外键参照哪些表的主码。
参照完整性定义     关系模型的参照完整性使用场景举例如下:     假定现在有学生表student(主键:sno)、选课表sc(主键sno、cno)、课程表course(主键:cno),那么:sc选课表的主键(sno,cno)的取值就需要参考学生表student的主键sno和课程表course的主键cno。
    那么,在创建sc表时,其SQL语句如下:
CREATE TABLE sc
	(sno CHAR(11)) NOT NULL,
	(cno CHAR(10)) NOT NULL,
	grade SMALLINT,
	#指定主键
	PRIMARY KEY(sno,cno),
	//定义参照完整性
	FOREIGN KEY (sno) REFERENCES student(sno),
	FOREIGN KEY (cno) REFERENCES course(cno)

参照完整性检查

    通过为sc表定义参照完整性,那么,sc表的主键(sno,cno)取值,就和student学生表的主键sno、course课程表的主键cno联系起来了。
    那么,合理的情况应当是:对被参照表(student或者course)、参照表(sc)执行增加、删除、修改 *** 作时,有可能会破坏这种参照完整性规则。
    例如:当某个学生A转校或是退学,他在student表中的记录信息会被抹除,sno字段值当然也不会再存在,那么,sc选课表的主键(sno,cno)对于学生A这条记录的sno字段值无从参考,就出现了违反参照完整性的情况。因此,必须对参照完整性进行检查,以保证两个表的相容性。

参照完整性违约处理

    当出现上图中给出的违背参照完整性规则的情况时,数据库管理系统就需要根据不同的策略执行相应的处理。一般有如下几种规则:


    前提:现有数据表A、B,数据表A的creator字段参考了数据表B的admin字段(或者说:在创建数据表A时,指定数据表B的admin字段作为外键,与A表的creator相关联),暂时称表B为父表、表A为子表。以下策略都是在描述:当父表执行某项 *** 作时,DBMS需要对A表执行的 *** 作。
     (1)拒绝(NO ACTION) *** 作     不允许该 *** 作进行,这也是默认处理策略。

    (2)级联(CASCADE) *** 作
    当删除/修改父表B中的某一条记录,导致子表A的某一条或者几条记录不一致时,同时删除/修改子表A中所有不一致的若干条记录。

    (3)设置为空值(SET NULL)
    当删除/修改父表B中的某一条记录,导致子表A的某一条或者几条记录不一致时,就将子表A中所有不一致的若干条记录中的creator字段设置为空-null。


     例如:给定规则-
    ①当删除表student中的记录时,级联删除sc表中的记录;
    ②当删除表course中的记录,并将导致SC表中的记录不一致时,拒绝执行此次删除 *** 作;
    ③当更新表student、course中的记录时,级联更新sc表中的记录。
    则SQL语句如下,
CREATE TABLE sc
	(sno CHAR(11)) NOT NULL,
	(cno CHAR(10)) NOT NULL,
	grade SMALLINT,
	#指定主键
	PRIMARY KEY(sno,cno),
	//定义参照完整性
	FOREIGN KEY (sno) REFERENCES student(sno)
		#当删除表student中的记录时,级联删除sc表中的记录
		ON DELETE CASCADE
		#当更新表student中的记录时,级联更新sc表中的记录
		ON UPDATE CASCADE, 
	FOREIGN KEY (cno) REFERENCES course(cno)
		#当删除表course中的记录,并将导致SC表中的记录不一致时,拒绝执行此次删除 *** 作
		ON DELETE NO ACTION
		#当更新表course中的记录时,级联更新sc表中的记录
		ON UPDATE CASCADE
使用navicat设置字段外键/参照完整性约束

    使用navicat设置字段外键/参照完整性约束也是在创建数据表的时候指定的,只需将创建数据表的选项卡切换至“外键”,按照上述原理进行指定即可。当然,具体如何指定,还需要根据具体的应用场景来确定。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/991490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存