目录

  • 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 习题

一、数据库的完整性

n数据的正确性

  l是指数据是符合现实世界语义,反映了当前实际状况的

n数据的相容性

  l是指数据库同一对象在不同关系表中的数据是符合逻辑的

   例如,

   l学生的学号必须唯一

   l性别只能是男或女

   l本科学生年龄的取值范围为14~50的整数

   l学生所选的课程必须是学校开设的课程,学生所在的院系必须是学校已成立的院系


二、数据的完整性和安全性是两个不同概念

n数据的完整性

  l防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据

  l防范对象:不合语义的、不正确的数据

n数据的安全性

  l保护数据库防止恶意的破坏和非法的存取

  l防范对象:非法用户和非法操作


三、为维护数据库的完整性,数据库管理系统必须:

1.提供定义完整性约束条件的机制

  l完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件

  lSQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户

     定义完整性

  l这些完整性一般由SQL的数据定义语言语句来实现 


2.提供完整性检查的方法

  l数据库管理系统中检查数据是否满足完整性约束条件的机制称为完整性检查。

  l一般在INSERTUPDATEDELETE语句执行后开始检查,也可以在事务提交时检查 


3.违约处理

  l数据库管理系统若发现用户的操作违背了完整性约束条件,就采取一定的动作

   Ø拒绝(NO ACTION)执行该操作

   Ø级连(CASCADE)执行其他操作


  四、关系模型的实体完整性

  nCREATE  TABLE中用PRIMARY KEY定义

(一)单属性构成的码有两种说明方法 

  n定义为列级约束条件

  n定义为表级约束条件v对多个属性构成的码只有一种说明方法

  (1定义为表级约束条件 


[例5.1] 将Student表中的Sno属性定义为码


        1)在列级定义主码             

              CREATE TABLE Student

                (  Sno  CHAR(9) PRIMARY KEY,

                   Sname  CHAR(20) NOT NULL,    

                   Ssex  CHAR(2),

                   Sage SMALLINT,

                   Sdept  CHAR(20)

                );



2)在表级定义主码

    CREATE TABLE Student

       (  Sno  CHAR(9), 

          Sname  CHAR(20) NOT NULL,

          Ssex  CHAR(2),

          Sage  SMALLINT,

          Sdept  CHAR(20),

          PRIMARY KEY (Sno)

         ); 

[例5.2] SC表中的SnoCno属性组定义为码

      CREATE TABLE SC

           (  Sno   CHAR(9)  NOTNULL,

              Cno  CHAR(4)  NOT NULL, 

              Grade    SMALLINT,

              PRIMARYKEY (Sno,Cno)    /*只能在表级定义主码*/

           ); 


(二)实体完整性检查和违约处理

1插入或对主码列进行更新操作时,关系数据库管理系统按照实体完整性规则自动进行检查。包括:

n检查主码值是否唯一,如果不唯一则拒绝插入或修改

n检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

2检查记录中主码值是否唯一的一种方法是进行全表扫描

n依次判断表中每一条记录的主码值与将插入记录上的主码值(或者修改的新主码值)是否相同



3表扫描缺点

  n十分耗时

4为避免对基本表进行全表扫描,RDBMS核心一般都在主码上自动建立一个索引 

5B+树索引vvvv

例如,

n新插入记录的主码值是25

 l通过主码索引,从B+树的根结点开始查找

 l读取3个结点:根结点(51)、中间结点(12 30)、叶结点(15 20 25)该主码值已经存在,不能插入这条记录