目录

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

一、概念定义

一)用户定义的完整性是:针对某一具体应用的数据必须满足的语义要求

(二)关系数据库管理系统提供了定义和检验用户定义完整性的机制,不必由应用程序承担

二、属性上的约束

一)CREATE TABLE定义属性上的约束条件

   n列值非空(NOT NULL

   n列值唯一(UNIQUE

   n检查列值是否满足一个条件表达式(CHECK


  (1)不允许取空值

      [例5.5]  在定义SC表时,说明SnoCnoGrade属性不允许取空值。

       CREATE TABLE SC

       (  Sno CHAR(9)  NOT NULL

          Cno CHAR(4)  NOT NULL

          Grade  SMALLINT NOTNULL

          PRIMARY KEY (Sno, Cno), 

            …

             /* 如果在表级定义实体完整性,隐含了SnoCno不允许取空值,则在 

            列级不允许取空值的定义 可以不写 * /

        ); 


  (2)列值唯一


   [例5.6]建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码

    CREATE TABLE DEPT

        (   Deptno  NUMERIC(2),

            Dname  CHAR(9)  UNIQUE NOT NULL

                                          /*要求Dname列值唯一, 并且不能取空值*/

            Location CHAR(10),

            PRIMARY KEY (Deptno)

         );


3)用CHECK短语指定列值应该满足的条件


    [例5.7]  Student表的Ssex只允许取“男”或“女”。

     CREATE TABLE Student

          ( Sno  CHAR(9) PRIMARY KEY,

            Sname CHAR(8) NOT NULL,                    

            Ssex  CHAR(2)  CHECK Ssex IN (‘男’,’’)),          

                                                    /*性别属性Ssex只允许取'''' */

            Sage SMALLINT,

            Sdept  CHAR(20)

          );


[5.8] SC表的Grade的值应该在0100之间。

   CREATE TABLE  SC

         ( Sno     CHAR(9),

            Cno   CHAR(4),

  Grade  SMALLINT CHECK(Grade>=0 AND Grade<=100)        /*Grade取值范围是0100*/

            PRIMARY KEY (Sno,Cno),

            FOREIGN KEY (Sno) REFERENCES Student(Sno),

            FOREIGN KEY (Cno) REFERENCES Course(Cno)

           );


   (二)用户定义完整性检查和违约处理

n插入元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足

n如果不满足则操作被拒绝执行 

[例5.9]当学生的性别是男时,其名字不能以Ms.打头。

    CREATE TABLE Student

        (  Sno    CHAR(9),

           Sname  CHAR(8) NOT NULL

           Ssex   CHAR(2),

           Sage   SMALLINT,

           Sdept  CHAR(20),

           PRIMARY KEY (Sno),

           CHECK (Ssex='' OR Sname NOT LIKE 'Ms.%')

                  /*定义了元组中SnameSsex两个属性值之间的约束条件*/

         );

  Ø性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立;

  Ø当性别是男性时,要通过检查则名字一定不能以Ms.打头

三、元组上的约束条件检查和违约处理

 n插入元组或修改属性的值时,关系数据库管理系统检查元组上的约束条件是否被满足

 n如果不满足则操作被拒绝执行 

四、完整性约束命名子句


1.完整性约束命名子句

CONSTRAINT <完整性约束条件名><完整性约束条件>

n<完整性约束条件>包括NOT NULLUNIQUEPRIMARY KEY短语、FOREIGN KEY短语、CHECK

  短语等


[例5.10]建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于

30,性别只能是“男”或“女”。

    CREATE TABLE Student

      (   Sno  NUMERIC(6)

         CONSTRAINTC1 CHECK (Sno BETWEEN 90000 AND 99999),

         Sname  CHAR(20) 

         CONSTRAINTC2 NOT NULL,

         Sage  NUMERIC(3)

         CONSTRAINT C3 CHECK (Sage< 30),

         Ssex  CHAR(2)

         CONSTRAINT C4 CHECK (Ssex IN ( ‘’,'')),

         CONSTRAINT StudentKey PRIMARY KEY(Sno)

        );

üStudent表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1C2C3C4

四个列级约束。


2. 修改表中的完整性限制

n使用ALTER TABLE语句修改表中的完整性限制n

[5.12]去掉例5.10Student表中对性别的限制。

        ALTER TABLEStudent

        DROPCONSTRAINT C4;


   [例5.13]  修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30

为小于40

n可以先删除原来的约束条件,再增加新的约束条件

      ALTERTABLE Student

        DROP CONSTRAINT C1;

        ALTERTABLE Student

        ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999),

        ALTERTABLE Student

       DROP CONSTRAINT C3;

        ALTERTABLE Student

       ADD CONSTRAINT C3 CHECK(Sage < 40);