目录

  • 1 课程导入
    • 1.1 课程导入
  • 2 绪论
    • 2.1 数据模型
    • 2.2 数据模型的组成要素和常用数据模型
    • 2.3 三级模式两层映像两种独立性
    • 2.4 本章习题
  • 3 关系数据库
    • 3.1 关系数据结构和完整性约束
    • 3.2 关系代数
      • 3.2.1 关系代数概念
      • 3.2.2 集合关系代数
      • 3.2.3 选择、投影、连接和除法操作
      • 3.2.4 关系代数复习与习题
    • 3.3 关系数据库标准语言SQL
      • 3.3.1 数据定义与删除
      • 3.3.2 数据查询
        • 3.3.2.1 单表查询
        • 3.3.2.2 多表查询--连接
        • 3.3.2.3 多表查询--嵌套
        • 3.3.2.4 多表查询--集合
      • 3.3.3 数据更新
      • 3.3.4 例题集粹
      • 3.3.5 SQL语言学习小结
    • 3.4 视图
    • 3.5 本章习题
  • 4 数据库安全性
    • 4.1 数据库安全性概述
    • 4.2 数据库安全控制--用户身份鉴别
    • 4.3 数据库安全控制--自主存取控制方法
    • 4.4 视图机制、审计、加密
    • 4.5 本章习题
  • 5 数据库完整性
    • 5.1 数据库完整性约束的概念
    • 5.2 实体完整性
    • 5.3 参照完整性
    • 5.4 用户定义完整性
    • 5.5 完整性约束命名子句
    • 5.6 域中的完整性限制
    • 5.7 断言
    • 5.8 触发器
    • 5.9 本章习题
  • 6 关系数据理论
    • 6.1 问题的提出
    • 6.2 规范化
    • 6.3 数据依赖的公理系统
    • 6.4 模式分解
    • 6.5 本章习题
  • 7 数据库设计
    • 7.1 数据库设计概述
      • 7.1.1 数据库设计的特点
      • 7.1.2 数据库设计的方法
      • 7.1.3 数据库设计的基本步骤
      • 7.1.4 数据库设计过程中的各级模式
    • 7.2 需求分析
    • 7.3 概念结构设计
    • 7.4 逻辑结构设计
      • 7.4.1 E-R图向关系模型的转换
      • 7.4.2 数据模型的优化
    • 7.5 设计用户子模式
    • 7.6 物理设计
      • 7.6.1 数据库物理设计的内容和方法
      • 7.6.2 关系模式存取方法选择
      • 7.6.3 确定数据库的存储结构
      • 7.6.4 评价物理结构
      • 7.6.5 数据库的实施和维护
    • 7.7 本章习题
  • 8 数据库编程
    • 8.1 嵌入式SQL
      • 8.1.1 嵌入式SQL的处理过程
      • 8.1.2 嵌入式SQL语句与主语言之间的通信
      • 8.1.3 不用游标的SQL语句
      • 8.1.4 使用游标的SQL语句
      • 8.1.5 动态SQL
    • 8.2 过程化SQL
      • 8.2.1 过程化SQL的块结构
      • 8.2.2 变量和常量的定义
      • 8.2.3 流程控制
    • 8.3 存储过程和函数
      • 8.3.1 存储过程
      • 8.3.2 函数
    • 8.4 ODBC编程
      • 8.4.1 ODBC概述
      • 8.4.2 ODBC工作原理概述
      • 8.4.3 ODBC API 基础
      • 8.4.4 ODBC的工作流程
    • 8.5 本章习题
  • 9 关系查询处理和查询优化
    • 9.1 关系数据库系统的查询处理
      • 9.1.1 实现查询操作的算法示例
    • 9.2 关系数据库系统的查询优化
      • 9.2.1 一个实例
    • 9.3 代数优化
    • 9.4 物理优化
      • 9.4.1 基于启发式规则的存取路径选择优化
      • 9.4.2 基于代价的优化
    • 9.5 本章习题
  • 10 数据库恢复技术
    • 10.1 事务的基本概念
    • 10.2 数据库恢复概述
    • 10.3 故障的种类
    • 10.4 恢复的实现技术
    • 10.5 恢复策略
    • 10.6 具有检查点的恢复技术
    • 10.7 数据库镜像
    • 10.8 本章习题
  • 11 并发控制
    • 11.1 并发控制概述
    • 11.2 封锁
    • 11.3 封锁协议
    • 11.4 活锁和死锁
    • 11.5 并发调度的可串行性
    • 11.6 两段锁协议
    • 11.7 封锁的粒度
    • 11.8 小结
    • 11.9 本章习题
参照完整性
  • 1 讲稿
  • 2 习题



一、参照完整性定义

关系模型的参照完整性在create table中用foreign key短语定义外码,用references短语指明外码参照哪些表的主码。

例:

s(sno,sname,ssex,sage,sdept)  主码sno

c(cno,cname,cpno,ccredit) 主码cno

sc(sno,cno,grade) 主码(sno,cno)

定义sc 中的参照完整性

create table sc

{

sno char(9) not null,

cno char(4) not null,

grade smallint,

primary key(sno,cno),

foreign key(sno) references s(sno),

foreign key(cno) references c(cno)

};


二、参照完整性检查和违约处理


 例如,对表SCStudent有四种可能破坏参照完整性的情况 :

 nSC表中增加一个元组,该元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。

 n修改SC表中的一个元组,修改后该元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。


例如,对表SCStudent有四种可能破坏参照完整性的情况 (续):

nStudent表中删除一个元组,造成SC表中某些元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等。

n修改Student表中一个元组的Sno属性,造成SC表中某些元组的Sno属性的值在表Student中找不到一个元组,其Sno属性的值与之相等 。



5.1 可能破坏参照完整性的情况及违约处理

                             

 


 

被参照表(例如Student

 
 


 

参照表(例如SC

 
 


 

违约处理

 
 

可能破坏参照完整性

 
 

    插入元组

 
 

拒绝

 
 

可能破坏参照完整性

 
 

    修改外码值

 
 

拒绝

 
 

删除元组

 
 

  可能破坏参照完整性

 
 

拒绝/级连删除/设置为空值

 
 

修改主码值

 
 

 可能破坏参照完整性

 
 

拒绝/级连修改/设置为空值

 


三、参照完整性违约处理

1)拒绝(NO ACTION)执行

  l不允许该操作执行。该策略一般设置为默认策略

2)级联(CASCADE)操作

  l当删除或修改被参照表(Student)的一个元组造成了与参照表(SC)的不一致,则删除或

修改参照表中的所有造成不一致的元组

3)设置为空值(SET-NULL

  l当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组

的对应属性设置为空值。

例如,有下面2个关系

    学生(学号,姓名,性别,专业号,年龄)

    专业(专业号,专业名)

  l假设专业表中某个元组被删除,专业号为12

  l按照设置为空值的策略,就要把学生表中专业号=12的所有元组的专业号设置为空值

  l对应语义:某个专业删除了,该专业的所有学生专业未定,等待重新分配专业

4对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值 

[例5.4] 显式说明参照完整性的违约处理示例

       CREATE TABLE SC

        (  Sno   CHAR(9)  NOTNULL

           Cno   CHAR(4)  NOT NULL

           Grade  SMALLINT,

           PRIMARY KEY(Sno,Cno),  

           FOREIGN KEY (Sno)REFERENCES Student(Sno)

  ON DELETE CASCADE        /*级联删除SC表中相应的元组*/

             ON UPDATE CASCADE,     /*级联更新SC表中相应的元组*/

           FOREIGN KEY (Cno) REFERENCES Course(Cno)                     

             ON DELETE NO ACTION  

                 /*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/

             ON UPDATE CASCADE  

          /*当更新course表中的cno时,级联更新SC表中相应的元组*/

           );