思维导图

  • 数据库完整性
    • 完整性约束条件
      • 完整性约束条件作用的对象
    • 完整性控制
      • DBMS的完整性控制机制
        • 定义功能
        • 检查功能
        • 违约反应
        • 完整性规则
      • 关系系统三类完整性的实现
      • 参照完整性的实现
  • 什么是数据库的完整性

    • 指数据的正确性和相容性
    • 防止不符合语义的数据进入数据库。
  • 例: 学生的年龄必须是整数,取值范围为14~29;

    • 学生的性别只能是男或女;
    • 学生的学号一定是唯一的;
    • 学生所在的系必须是学校开设的系;
  • 完整性:是否真实地反映现实世界

  1. 完整性约束条件定义机制
    • 数据模型的组成部分约束数据库中数据的语义
    • DBMS应提供定义数据库完整性约束条件,并把它们作为模式的一部分存入数据库中
  2. 完整性检查机制
    检查用户发出的操作请求是否违背了完整性约束条件
  3. 违约反应

完整性约束条件

完整性约束条件作用的对象

  • 列:对属性的取值类型、范围、精度等的约束条件
  • 元组:对元组中各个属性列间的联系的约束
  • 关系:对若干元组间、关系集合上以及关系之间的联系的约束

  • 静态
    • 对静态对象的约束是反映数据库状态合理性的约束
  • 动态
    • 对动态对象的约束是反映数据库状态变迁的约束

完整性控制

DBMS的完整性控制机制

定义功能

一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。

检查功能

  • 立即执行的约束(Immediate constraints)语句执行完后立即检查是否违背完整性约束
  • 延迟执行的约束(Deferred constrainsts)完整性检查延迟到整个事务执行结束后进行

违约反应

  • 拒绝该操作
  • 其他处理方法

完整性规则

  • 完整性规则五元组表示:
    • (D,O,A,C,P)
  • D(Data) 约束作用的数据对象;
  • O(Operation) 触发完整性检查的数据库操作;
    • 当用户发出什么操作请求时需要检查该完整性规则
    • 是立即检查还是延迟检查;
  • A(Assertion) 数据对象必须满足的断言或语义约束这是规则的主体;
  • C(Condition) 选择A作用的数据对象值的谓词;
  • P(Procedure) 违反完整性规则时触发的过程。

关系系统三类完整性的实现

  • 关系数据库系统都提供了定义和检查实体完整性、参照完整性和用户定义的完整性的功能
  • 违反实体完整性规则和用户定义的完整性规则的操作:
    • 一般是拒绝执行
  • 违反参照完整性的操作:
    • 拒绝执行
    • 接受这个操作,同时执行一些附加的操作,以保证数据库的状态正确

参照完整性的实现

  • 参照完整性指的是什么?
    • 可以防止数据丢失或者无意义的数据;
    • 可以禁止在从表中插入被参照表中不存在的关键字的记录。
  • 参照完整性的常见实现机制包括:
    • 外键(Foreign Key)、触发器(Trigger);
  • 外码
    • 设F是基本关系R的一个或一组属性, 但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码(Foreign Key)
    • 基本关系R称为参照关系(Referencing Relation)
    • 基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)
  • 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
    • 或者取空值(F的每个属性值均为空值)
    • 或者等于S中某个元组的主码值。


例:职工-部门数据库包含职工表EMP和部门表DEPT
DEPT关系的主码为部门号Deptno;
EMP关系的主码为职工号Empno, 外码为部门号Deptno;
称DEPT为被参照关系或目标关系,EMP为参照关系。


  • RDBMS实现参照完整性时需要考虑以下4方面:
  • 违约操作
    • 修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值
    • 修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值
  • 违约反应
    • 修改的关系是被参照关系:与删除类似
      • 级联修改ON UPDATE CASCADE
        • 修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。
      • 受限修改ON UPDATE NO ACTION
        • 拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。
      • 置空值修改ON UPDATE SET NULL
        • 修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。
  • 需要向用户提供定义主码、外码的机制
  • 向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法