当前位置:文档之家› 参照完整性

参照完整性

Database System
数据库系统概论Introduction to Database Systems
主讲人:吴岩河南理工大学
第四章 数据库的完整性
知 识 点
实体完整性规则
1
参照完整性规则
2
用户定义的完整性规则
3
4.2 参照完整性规则
参照完整性的含义
定义参照完整性
参照完整性检查和违约处理
4.2.1 参照完整性的含义
参照完整性规则
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主
相对应(R和S不一定是不同的关系),则对于R中每个元组在F上码K
s
的值必须:
●或者等于空值(F的每个属性值均为空值);
●或者等于S中某个元组的主码值。

4.2.2 定义参照完整性
用REFERENCES 短语指明外码参照哪些表的主码 2 可在创建表时定义约束或向表中添加约束
3 用FOREIGN KEY 短语定义哪些列为外码 1
4.2.2 定义参照完整性
创建表时定义-语法格式
CREATE TABLE <表名>
(<列名> <数据类型> ,

FOREIGN KEY(<列名>) REFERENCES 被参照表名(<列名>)

4.2.2 定义参照完整性
创建表时定义-示例
读者(读者号,姓名,性别,读者类型ID,类型名称)
创建“读者”表时定义“读者类型ID”参照“读者类型”表中的“读者类型ID”:
CREATE TABLE 读者
(读者号 char(6) PRIMARY KEY,
姓名 varchar(20),
性别 char(2),
读者类型ID char(6),
类型名称varchar(16),
FOREIGN KEY(读者类型ID) REFERENCES 读者类型(读者类型ID)
)
4.2.2 定义参照完整性
向表中添加约束-语法格式
ALTER TABLE <表名>
ADD CONSTRAINT<约束名> FOREIGN KEY(<列名>)
REFERENCES被参照表名(<列名>)
4.2.2 定义参照完整性
向表中添加约束-示例
图书(图书号,书名,主编,出版社,单价)
借阅(读者号,图书号,借阅日期,还书日期)
在已经创建的“借阅”表中添加名称为FK_图书号的参照完整性约束:
ALTER TABLE 借阅
ADD CONSTRAINT FK_图书号 FOREIGN KEY(图书号)
REFERENCES 图书(图书号)
程丽
2018-4-13
4.2.3 参照完整性检查和违约处理
可能破坏参照完整性的情况及违约处理
ISBN BookName Editor Press 9781267845 9781678676
9781765980 9781766770
数据库 数据库系统
数据库应用 数据库原理 王伟 陈瑾
郑智浩 王丽娟 清华大学出版社
清华大学出版社 高等教育出版社
电子工业出版社 9781765982 ISBN Reader BorrowDate 张晨
2018-3-2
王明明 2018-3-3 程丽 2018-4-12 程丽
2018-4-12
9781267845 9781267845 9781765980 9781766772
9781766770 9781766771 Borrow 关系
Book 关系
主码
外码

借阅表中插入一条新记录 •借阅表中修改一个ISBN 号 •图书表中删除一条记录 •图书表中修改一个ISBN 号
4.2.3 参照完整性检查和违约处理
可能破坏参照完整性的情况及违约处理
被参照表(例如图书表)参照表(例如借阅表)违约处理
可能破坏参照完整性插入元组
可能破坏参照完整性修改外码值删除元组可能破坏参照完整性修改主码值可能破坏参照完整性
拒绝
拒绝
拒绝/级联删除/设置空值
拒绝/级联修改/设置空值
默认策略
4.2.3 参照完整性检查和违约处理 创建参照表时显式定义违约处理策略-示例 CREATE TABLE 借阅
(读者号 char(6) ,
图书号 varchar(15) ,
借阅日期 datetime ,
还书日期 datetime ,
Primary Key(读者号,图书号), Foreign key (读者号) References 读者(读者号) ON DELETE CASCADE ON UPDATE CASCADE , Foreign key (图书号) References 图书 (图书号) ON DELETE NO ACTION ON UPDATE CASCADE )
/*在表级定义实体完整性 /*在表级定义参照完整性 /*当删除读者表中元组时,级联删除借阅表中相应元组 /*当更新读者表中读者号时,级联更新借阅表中相应元组 /*当删除图书表中元组造成与借阅表不一致时,拒绝删除 /*当更新图书表中图书号时,级联更新借阅表中相应元组
●参照完整性规则要求外键属性取值为被参照
表中某主码的取值,或者为空值。

●参照完整性规则可用Foreign Key定义。

●当执行增、删、改等操作时,DBMS根据参照
完整性规则自动进行检查并进行违约处理。

相关主题