数据库技术 第十章 数据库完整性 中国科学技术大学网络学院 阚卫华.

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

数据库完整性 第 10 章 完整性约束条件 完整性控制 Oracle 的完整性. 什么是数据库的完整性  数据的正确性和相容性  防止不合语义的数据进入数据库 例 : 学生的年龄必须是整数,取值范围为 ; 学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的系。
2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
2011/11,12 南台資管 吳昭儀. 1. 使用者介面 (User Interface)  使用者操作畫面的安排  Textbox, ComboBox, ListBox, CheckList, … 2. 流程控制 (Process Control)  使用者輸入資料檢查  計算  資料輸出.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
第2章 SQL语言初步 2.1 SQL的基本概念 2.2 基本表、索引的创建、删除和修改操作 2.3 SQL的查询语句——SELECT
数据库系统概论 华中科技大学能源与动力工程学院
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
复习重点; 1. 关系模型、ER模型 2. SQL 3. 事务管理 4. 函数依赖与规范化 5. 数据库设计  复习题 一、单项选择题
数据库技术及应用 ——SQL Server 任课教师: 毕丛娣 电话: 年3月.
第四章 数据库对象.
第3章 SQL语言初步 2017/3/14.
Access数据库程序设计 总复习.
An Introduction to Database System
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
資料庫 (Database) SQL Server 2008實作
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
创建数据库 MySql创建数据库的语法: CREATE DATABASE 数据库名; 例: CREATE DATABASE mydb;
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
第5章 数据库保护 之事务.
软件设计师培训.
计算机应用基础 上海大学计算中心.
資料庫管理 資管二 賴柏融.
数据库原理 Database Principles 第五章 数据库完整性 Database Principles.
PL/SQL程序设计 过程, 函数 Trigger 对象关系数据库技术.
第7章 建立資料表與完整性限制條件 7-1 資料型別 7-2 資料表的建立 7-3 建立完整性限制條件 7-4 修改與刪除資料表
An Introduction to Database System An Introduction to Database System
第四章 关系系统及其查询优化 这一章包括两个内容,一是关系系统(关系数据库系统的简称),二是关系系统的查询优化。第一部分讨论关系系统的定义和分类;第二部分讨论关系系统中查询优化的概念、查询优化的基本原理和技术。
第11章 详细设计.
Oracle数据库入门.
第四章:触发器   触发器类似于过程、函数,因为它们都是拥有说明部分、语句执行部分和异常处理部分的有名的PL/SQL块。与包类似,触发器必须存储在数据库中,并且不能被块进行本地化说明。但是,对于过程而言,可以从另一个块中通过过程调用显式地执行一个过程,同时在调用时可以传递参数。对于触发器而言,当触发事件发生时就会显式地执行该触发器,并且触发器不接受参数。
作业4讲评.
实验二 交互式SQL 邓云.
数据库技术 第三章 关系数据库标准语言SQL 中国科学技术大学网络学院 阚卫华.
第4章 SQL语言基础及数据库定义 4.1 基本概念 4.2 SQL Server 提供的主要数据类型 4.3 数据定义.
Chap 10 SQL定義、操作與控制指令.
An Introduction to Database System An Introduction to Database System
胡鹏 王慧锋 TEL: 数据库系统原理课程设计 实验环节1 胡鹏 王慧锋 TEL:
第 7 章 建立資料表與 資料庫圖表.
教 师:曾晓东 电 话: 数据库技术 教 师:曾晓东 电 话:
資料庫系統專題期末報告 線上水果購買系統 ──水果天堂 指導老師:黃三益 博士 第三組 組 長:柯志銘(n )
第8章 数据库的安全和完整性约束 数据库的破坏一般来自: 1.系统故障; 2.并发所引起的数据不一致; 3.人为的破坏;
第 16 章 觸發程序.
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
第4章 關聯式資料庫模型 4-1 關聯式資料庫模型的基礎 4-2 關聯式資料庫模型的資料結構 4-3 關聯式資料庫模型的完整性限制條件
第7章 ADO.NET操作SQL Server数据库
建立/修改/刪除資料表 建立資料表 使用Enterprise Manager工具
MySQL数据库基础与实例教程 之 MySQL表结构的管理 郭水泉.
第三章:包   包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件------包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。
国家“十一五”规划教材 数据库原理与应用教程(第3版).
第三章作业讲评 文洁 2012/4/10.
SQL SERVER 一些经典语句 1.
第四讲 数据库对象(视图、序列、同义词、索引)
作业3-点评.
Ch4.SQL Server 2005資料庫組成員元件介紹
实验二讲评 … 张榆….
数据库技术.
数据库技术与应用.
ORACLE 第九讲 触发器.
第3章 关系数据库的创建与维护 Microsoft SQL Server2008 概述 SQL Server数据库基础 数据库的创建与维护
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
通讯录管理系统设计 常州工程职业技术学院 计算机技术系.
第三章 SQL Server数据管理.
第 7 章 建立資料表與資料庫圖表.
第4章 表的创建与维护 4.1 数据类型 4.2 数据完整性约束 4.3 创建数据表 4.4 修改数据表 4.5 删除数据表.
Principle and Technology of Database
Presentation transcript:

数据库技术 第十章 数据库完整性 中国科学技术大学网络学院 阚卫华

第十章 数据库完整性 什么是数据库的完整性 数据的正确性和相容性; 防止不合语义的数据进入数据库。 例如: 学生的学号必须是唯一的; 第十章 数据库完整性  什么是数据库的完整性 数据的正确性和相容性; 防止不合语义的数据进入数据库。     例如: 学生的学号必须是唯一的; 学生的年龄必须是整数的取值范围; 学生的性别只能是男或女; 学生所在的系必须是学校已开设的系。   完整性:数据库是否具备完整性,关系到数据库系统能否真实地反映现实世界,因此,维护数据库的完整性是非常重要的。 2018年11月7日星期三

完整性控制机制 1. 完整性约束条件定义机制; 2. 完整性检查机制; 3. 违约反应。 2018年11月7日星期三

完整性约束条件定义 完整性约束条件:数据模型的组成部分 约束数据库中数据的语义;   完整性约束条件:数据模型的组成部分 约束数据库中数据的语义; DBMS必须提供定义数据库完整性约 束条件,并把它们作为模式的一部分存入 数据库中。 DBMS中检查数据是否满足完 整性条件的机制称为完整性检查。 2018年11月7日星期三

完整性控制机制 检查用户发出的操作请求是否违背了完整性约束条件。    检查用户发出的操作请求是否违背了完整性约束条件。    完整性检查是围绕完整性约束条件进行的 ,因此 ,完整性约束条件是完整性控 制机制的核心。 2018年11月7日星期三

违约反应    如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。 2018年11月7日星期三

第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结 第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结 2018年11月7日星期三

完整性约束条件(续) 完整性约束条件作用的对象: 列:对属性的取值类型、范围、精度等的约束条件; 元组:对元组中各个字段间的联系的约束;   完整性约束条件作用的对象: 列:对属性的取值类型、范围、精度等的约束条件; 元组:对元组中各个字段间的联系的约束; 关系:对若干元组间、关系集合上以及关系之间的联系的约束。 2018年11月7日星期三

完整性约束条件(续)   静态   静态约束是对静态对象的约束,指的是数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束,这是最重要的一类完整性约束。   动态   动态约束是对动态对象的约束,指的是数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。 2018年11月7日星期三

完整性约束条件分类 六类完整性约束条件: 静态列级约束; 静态元组约束; 静态关系约束; 动态列级约束; 动态元组约束; 动态关系约束。   六类完整性约束条件:   静态列级约束;   静态元组约束;   静态关系约束;   动态列级约束;   动态元组约束;   动态关系约束。 2018年11月7日星期三

图10.1完整性约束条件分类 对象状态 动态列级约束 动态元组约束 动态关系约束 动态 ④ ⑤ ⑥ 静态 ① ② ③ 动态列级约束 动态元组约束 动态关系约束 动态 ④ ⑤ ⑥ 静态列级约束 静态元组约束 静态关系约束 静态 ① ② ③   列 元组 关系 对象粒度 具体讨论如下: 2018年11月7日星期三

完整性约束条件(续) 1. 静态列级约束 静态列级约束:对一个列的取值域的说明; 这是最常用、最简单、最容易实现的一类完整性约束。包括以下内容: 2018年11月7日星期三

完整性约束条件(续) 五类静态列级约束 1) 对数据类型的约束 包括数据的类型、长度、单位、精度等; 1) 对数据类型的约束 包括数据的类型、长度、单位、精度等; 例如:学生数据库中的学生姓名的数据类型为 字符型,长度为8。 2)  对数据格式的约束: 例如:学号的前两位表示入学年份,后四位为顺序编号,出生日期的格式为YY. MM. DD。 2018年11月7日星期三

完整性约束条件(续) 3) 对取值范围或取值集合的约束 例如:规定成绩的取值范围为0-100; 年龄的   3) 对取值范围或取值集合的约束 例如:规定成绩的取值范围为0-100; 年龄的 取值范围为:不限; 性别的取值集合为{男,女}。 4) 对空值的约束 空值:未定义或未知的值;与零值和空格 不同。有的列允许空值,有的则不允许,如成 绩可为空值;学号不能取空值。 5) 其他约束 例如:关于列的排序说明,组合列等。 2018年11月7日星期三

完整性约束条件(续) 2. 静态元组约束 例:订货关系中发货量不得超过订货 量;另如:教师关系中教授的工资不低于 1000元。    静态元组约束:规定元组的各个列之间的约束关系。 例:订货关系中发货量不得超过订货 量;另如:教师关系中教授的工资不低于 1000元。 静态元组约束只局限在元组上 。 2018年11月7日星期三

完整性约束条件(续) 3. 静态关系约束 在一个关系的各个元组之间或者若干关系之 间,常常存在的各种联系或约束。 常见的静态关系约束:    在一个关系的各个元组之间或者若干关系之 间,常常存在的各种联系或约束。 常见的静态关系约束: 1) 实体完整性约束; 2) 参照完整性约束; 3) 函数依赖约束; 4) 统计约束。 2018年11月7日星期三

实体完整性约束和 参照完整性约束 实体完整性约束和 参照完整性约束是关系模型的两个极其重要的约束,称为关系的两个不变性。    实体完整性约束和 参照完整性约束是关系模型的两个极其重要的约束,称为关系的两个不变性。 2018年11月7日星期三

函数依赖约束 大部分函数依赖约束都在关系模式中定义。 例如:在学生 - 课程 - 教师关系 SJT(S,J,T) 的函数依赖:    大部分函数依赖约束都在关系模式中定义。 例如:在学生 - 课程 - 教师关系 SJT(S,J,T) 的函数依赖: ( ( S , J ) → T, T → J ), 主码: ( S , J ) ; 或主码为( S , T ) 。 2018年11月7日星期三

统计约束 字段值与关系中多个元组的统计值之间的约 束关系。 例如 :规定部门经理的工资不得高于本部门     字段值与关系中多个元组的统计值之间的约 束关系。     例如 :规定部门经理的工资不得高于本部门 职工平均工资的 5 倍,不得低于本部门职工平均 工资的 2 倍。这里 ,本部门职工的平均工资是一 个统计值。 2018年11月7日星期三

完整性约束条件(续) 4. 动态列级约束 动态列级约束是修改列定义或列值时应满足的约束条件,包括以下两个方面: 2018年11月7日星期三

完整性约束条件(续) 1) 修改列定义时的约束 例如:将原来允许空值的列改为不允许空值 2) 修改列值时的约束     例如:将原来允许空值的列改为不允许空值 时,如果该列目前已存在空值,则拒绝这种修改。 2) 修改列值时的约束 修改列值有时需要参照其旧值,并且新、旧 值之间需要满足某种约束条件。   例如:职工工资调整 不低于其原来工资;年 龄只能增长。 2018年11月7日星期三

完整性约束条件(续) 5. 动态元组约束 动态元组约束是指修改元组的值时,元组中各个字段之间需要满足某种约束条件。 例如: 职工工资调整时     动态元组约束是指修改元组的值时,元组中各个字段之间需要满足某种约束条件。 例如: 职工工资调整时 新工资不得低于 原工资 + 工龄*1.5等。 2018年11月7日星期三

完整性约束条件(续) 6. 动态关系约束 动态关系约束是加在关系变化前后状态上的限制条件。例如:事务一致性、原子性等约束条件。   6. 动态关系约束    动态关系约束是加在关系变化前后状态上的限制条件。例如:事务一致性、原子性等约束条件。    以上六类完整性约束条件的含义可用下 页表10.1进行概括 [当然,完整性的约束条件 可以从不同角度进行分类,因此,会有多种分 类方法] 。 2018年11月7日星期三

完整性约束条件小结 表10.1 完整性约束条件 粒 度 状态 静 态 动 态 元组值应满足的条件 关 系 级 元 组 级 列 级 关系新旧状态间应满足的约束条件 元组新旧值之间应满足的约束条件 改变列定义或列值 动 态 实体完整性约束 参照完整性约束 函数依赖约束 统计约束 元组值应满足的条件   列定义 ·类型 ·格式 ·值域 ·空值  静 态 关 系 级 元 组 级 列 级 粒 度 状态 2018年11月7日星期三

第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结 第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结 2018年11月7日星期三

10.2 完整性控制  一、DBMS的完整性控制机制   二、关系系统三类完整性的实现   三、参照完整性的实现 2018年11月7日星期三

一、DBMS的完整性控制机制  1. 定义功能 一个完善的完整性控制机制,应该允   许用户定义各类完整性约束条件。 2018年11月7日星期三

DBMS的完整性控制机制(续) 2. 检查功能 立即执行约束(Immediate constraints)   2. 检查功能   立即执行约束(Immediate constraints)   语句执行完后立即检查是否违背完整性约束。 延迟执行约束(Deferred constraints) 完整性检查延迟到整个事务执行结束后进行。 2018年11月7日星期三

DBMS的完整性控制机制(续) 例如:银行数据库中“借贷总金额应平衡” 的约束就应该是延迟执行的约束。     例如:银行数据库中“借贷总金额应平衡” 的约束就应该是延迟执行的约束。   从账号 A 转一笔钱到账号 B 为一个事务, 从账号A转出去钱后账就不平了,必须等转入 账号B后账才能重新平衡,这时才能进行完整 性检查。 2018年11月7日星期三

DBMS的完整性控制机制(续)  3. 违约反应 如果发现用户操作请求违背了完整性约束条件,系统将拒绝该操作,但对于延迟执行的约束,系统将拒绝整个事务,把数据库恢复到该事务执行前的状态。 2018年11月7日星期三

DBMS的完整性控制机制(续) 一条完整性规则可以用一个五元组表示: (D,O,A,C,P) D(Data) 约束作用的数据对象; O(Operation) 触发完整性检查的数据库操作,即 当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查; A(Assertion) 数据对象必须满足的断言或语义约束,这是规则的主体; C(Condition) 选择A作用的数据对象值的谓词; P(Procedure) 违反完整性规则时触发的过程。 2018年11月7日星期三

DBMS的完整性控制机制(续) 例1:在“学号不能为空”的约束中 D 约束作用的对象为Sno属性; O 插入或修改Student 元组时;    例1:在“学号不能为空”的约束中 D 约束作用的对象为Sno属性; O 插入或修改Student 元组时; A Sno不能为空; C 无(A可作用于所有记录的Sno属性); P 拒绝执行该操作。 2018年11月7日星期三

DBMS的完整性控制机制(续) 例2:在“教授工资不得低于1000元”的约束中 D 约束作用的对象为工资Sal属性;    例2:在“教授工资不得低于1000元”的约束中 D 约束作用的对象为工资Sal属性; O 插入或修改职工元组时; A Sal不能小于1000; C 职称= `教授 ` (A仅作用于职称=` 教授 `的记录); P 拒绝执行该操作。 2018年11月7日星期三

二、关系系统三类完整性的实现 关系数据库系统都提供了定义和检查实体完 整性、参照完整性和用户定义的完整性的功能。    关系数据库系统都提供了定义和检查实体完 整性、参照完整性和用户定义的完整性的功能。     对于违反实体完整性规则和用户定义的完整 性规则的操作: 一般是拒绝执行。    违反参照完整性的操作时: 拒绝执行;或 接受这个操作,同时执行一些附加的操作,以保 证数据库的状态正确。 2018年11月7日星期三

三、参照完整性的实现 例如:职工 - 部门数据库包含职工表EMP和部门表DEPT,其中: 1 . DEPT关系的主码为部门号Deptno;  2 . EMP关系的主码为职工号Empno, 外码为部门号Deptno;   称DEPT为被参照关系或目标关系,EMP为参照关系。   RDBMS实现参照完整性时需要考虑以下4方面: 2018年11月7日星期三

1. 外码是否可以接受空值的问题 外码是否能够取空值:依赖于应用环境的语义。 实现参照完整性: 系统提供定义外码的机制;    外码是否能够取空值:依赖于应用环境的语义。    实现参照完整性: 系统提供定义外码的机制; 定义外码列是否允许空值的机制。 2018年11月7日星期三

1. 外码是否可以接受空值的问题(续) 例1:在职工 - 部门数据库中,EMP关系包含有外码Deptno。   在EMP中,某元组的Deptno这一列若为空值,表示这个职工尚未分配到任何具体的部门工作。这和应用环境的语义是相符的,因此, EMP的Deptno列可以为空值。 2018年11月7日星期三

1. 外码是否可以接受空值的问题(续)    例2:在学生 - 选课数据库中, Student关系为被参照关系,其主码为Sno;SC为参照关系,外码为Sno。   若SC的Sno为空值,则表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade列中。这与学校的应用环境是不相符的,因此,SC的Sno列不能取空值。 2018年11月7日星期三

2.在被参照关系中删除元组时的问题 出现违约操作的情形:  出现违约操作的情形:   例如,要删除student关系中Sno=95001的元 组,而SC关系中又有4个元组的Sno都等于95001。 一般地,当删除被参照关系的某个元组(student), 而参照关系存在若干元组 (SC),其外码值与被参 照关系删除元组的主码值相同,[这时可有如下三种 不同的策略]: 2018年11月7日星期三

2.在被参照关系中删除元组时的问题(续) 违约反应:可有三种策略: 级联删除(CASCADES); 受限删除(RESTRICTED); 置空值删除(NULLIFIES)。   这三种处理方法,哪一种是正确的,要依应用环境的语义来定。 2018年11月7日星期三

2.在被参照关系中删除元组时的问题(续) 级联删除: 将参照关系中外码值与被参照关系中要删除 元组主码值相对应的元组一起删除。 受限删除: 仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组的主码值相同时,系统才执行删除操作,否则拒绝此删除操作。 2018年11月7日星期三

2.在被参照关系中删除元组时的问题(续) 置空值删除 删除被参照关系的元组,并将参照关系中相应元组的外码值置为空值。 2018年11月7日星期三

2.在被参照关系中删除元组时的问题(续) 例如:要删除Student关系中Sno=950001的元 组,而SC关系中有4个元组的Sno都等于950001。 级联删除:将SC关系中所有4个Sno=950001的 元组一起删除。如果参照关系同时又是另一个关 系的被参照关系,则这种删除操作会继续级联下 去 。 受限删除:系统将拒绝执行此删除操作。 2018年11月7日星期三

2.在被参照关系中删除元组时的问题(续) 置空值删除:将SC关系中所有Sno=950001的元组的Sno值置为空值。 在学生 - 选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。 2018年11月7日星期三

3.在参照关系中插入元组时的问题 出现违约操作的情形 需要在参照关系中插入元组,而被参照关系不存在相应的元组。 违约反应 受限插入; 递归插入 。 2018年11月7日星期三

3.在参照关系中插入元组时的问题(续) (1)受限插入   (1)受限插入   仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。  (2)递归插入   首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。 2018年11月7日星期三

3.在参照关系中插入元组时的问题(续)    例如:向SC关系插入(99001,1,90)元组,而Student关系中尚没有Sno=99001的学生。 受限插入:系统将拒绝向SC关系插入      (99001,1,90)元组。 递归插入:系统将首先向Student关系插入Sno=99001的元组,然后向SC关系插入(99001,1,90)元组。 2018年11月7日星期三

4. 修改被参照关系中主码的问题  两种策略 (1) 不允许修改主码; (2) 允许修改主码。 2018年11月7日星期三

允许修改主码策略 违约操作 要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值。  违约操作 要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值。 要修改参照关系中某些元组的主码值,而 被参照关系中没有任何元组的外码值等 于被参照关系修改后的主码值。 2018年11月7日星期三

允许修改主码策略  违约反应 (1)  修改的关系是被参照关系:与删除类似 级联修改; 受限修改; 置空值修改。 2018年11月7日星期三

允许修改主码策略 级联修改 修改被参照关系中主码值的同时,用相同的方法修改参照关系中相应的外码值。 受限修改  级联修改   修改被参照关系中主码值的同时,用相同的方法修改参照关系中相应的外码值。  受限修改   拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。  置空值修改   修改被参照关系中的主码值,同时将参照关系中相应的外码值置为空值。 2018年11月7日星期三

允许修改主码策略    例如:将Student关系中Sno = 950001的元组中Sno值改为960123。而SC关系中有 4 个元组的 Sno = 950001;这时可以有 级联修改:将SC关系中4个Sno=950001元组中的Sno值也改为 960123。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去。 2018年11月7日星期三

允许修改主码策略 受限修改 : 只 有 SC 中 没 有 任 何 元 组 的 Sno=950001时,才能修改Student表中Sno = 950001 的 元 组的Sno值改为960123。 置空值修改:将Student表中Sno=950001的元 组 的 Sno 值 改 为 9 6 0 123 ; 而 将 S 表 中 所 有 Sno=950001的元组的Sno值置为空值。 在学生 - 选课数据库中只有第一种方法是正确的。 2018年11月7日星期三

允许修改主码策略 违约反应 (2) 修改的关系是参照关系:与插入类似。 受限插入; 递归插入。 2018年11月7日星期三

参照完整性的实现 RDBMS在实现参照完整性时: 需要向用户提供定义主码、外码的机制;   需要向用户提供定义主码、外码的机制;   向用户提供不同的策略供用户选择,即按照自己的应用要求选择处理依赖关系中对应的元组的方法。至于选择哪种策略,都要根据应用环境的要求确定。 2018年11月7日星期三

第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结 第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结 2018年11月7日星期三

10.3 Oracle的完整性 一、Oracle中的实体完整性 二、Oracle中的参照完整性 三、Oracle中用户定义的完整性 2018年11月7日星期三

一、Oracle中的实体完整性    Oracle在CREATE TABLE语句中提供了PRIMARY KEY子句,供用户在建表时指定关系的主码列。 在列级使用PRIMARY KEY子句; 在表级使用PRIMARY KEY子句。 2018年11月7日星期三

Oracle中的实体完整性(续) 例1:在学生选课数据库中,要定义Student表的Sno属性为主码 CREATE TABLE Student (Sno NUMBER(8), Sname VARCHAR(20), Sage NUMBER(20), CONSTRAINT PK_SNO PRIMARY KEY (Sno)); 或: CREATE TABLE Student (Sno NUMBER(8) PRIMARY KEY , Sage NUMBER(20)); 2018年11月7日星期三

Oracle中的实体完整性(续) CREATE TABLE SC 例2:要在SC表中定义(Sno, Cno)为主码 (Sno NUMBER(8), Cno NUMBER(2), Grade NUMBER(2), CONSTRAINT PK_SC PRIMARY KEY (Sno, Cno)); 2018年11月7日星期三

Oracle中的实体完整性(续) 用户程序对主码列进行更新操作时,系统自动进行完整性检查。 违约操作 使主属性值为空值的操作;   违约操作 使主属性值为空值的操作; 使主码值在表中不唯一的操作。   违约反应 系统拒绝此操作,从而保证了实体完整性。 2018年11月7日星期三

二、Oracle中的参照完整性 定义参照完整性: FOREIGN KEY子句:定义外码列。   定义参照完整性:    FOREIGN KEY子句:定义外码列。    REFERENCES子句:指明外码相应于哪 个表的主码。    ON DELETE CASCADE子语:指明在 删 除被参照关系的元组时,同时删除参照 关 系中相应的(外码值等于被参照关系的元 组中主码值的)元组。 2018年11月7日星期三

Oracle中的参照完整性(续) CREATE TABLE EMP CONSTRAINT FK_DEPTNO   例1:使用如下SQL语句建立表(EMP表) CREATE TABLE EMP (Empno NUMBER(4), Ename VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2), CONSTRAINT FK_DEPTNO FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno)); 2018年11月7日星期三

Oracle中的参照完整性(续) 或: CREATE TABLE EMP (Empno NUMBER(4), Ename VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2) CONSTRAINT FK_DEPTNO FOREIGN KEY REFERENCES DEPT(Deptno)); 2018年11月7日星期三

Oracle中的参照完整性(续) 这时EMP表中外码为Deptno,它相应于DEPT表中的主码Deptno。 当要修改DEPT表中的DEPTNO值时, 先要检查EMP表中是否有元组的Deptno值 与之对应 若没有,系统接受这个修改操作; 否则,系统拒绝这一更新操作。 2018年11月7日星期三

Oracle中的参照完整性(续) 当要删除DEPT表中某个元组时,系统要检 查EMP表,若找到相应元组即将其随之删除。 当要插入EMP表中某个元组时,系统要检查 DEPT表,先要检查DEPT表中有无元组的Deptno 值与之对应 若没有,系统拒绝此插入操作; 否则,系统接受此操作。 2018年11月7日星期三

三、Oracle中用户定义的完整性 用CREATE TABLE语句在建表时定义用户完整性约束; 通过触发器来定义用户的完整性规则。    通过触发器来定义用户的完整性规则。 2018年11月7日星期三

Oracle中用户定义的完整性(续) 1. 用CREATE TABLE语句在建表时定义用户 完整性约束 可定义三类完整性约束   完整性约束 可定义三类完整性约束 列值非空(NOT NULL短语); 列值唯一(UNIQUE短语); 检查列值是否满足一个布尔表达式(CHECK短语)。 2018年11月7日星期三

Oracle中用户定义的完整性(续) 例1:建立部门表DEPT,要求部门名称Dname列 取值唯一,部门编号Deptno列为主码。 CREATE TABLE DEPT (Deptno NUMBER, Dname VARCHAR(9) CONSTRAINT U1 UNIQUE, Loc VARCHAR(10), CONSTRAINT PK_DEPT PRIMARY KEY (Deptno));   其中 CONSTRAINT U1 UNIQUE 表示约束名为U1, 该约束要求Dname列值唯一。 2018年11月7日星期三

Oracle中用户定义的完整性(续) 例2: 建立学生登记表Student,要求学号在90000至99999 之间,年龄<29,性别 只能是“男”或“女” ,姓名非空。 CREATE TABLE Student (Sno NUMBER(5) CONSTRAINT C1 CHECK (Sno BETWEEN 10000 AND 99999), Sname VARCHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMBER(3) CONSTRAINT C3 CHECK (Sage < 29), Ssex VARCHAR(2) CONSTRAINT C4 CHECK (Ssex IN ('男', '女')); 2018年11月7日星期三

Oracle中用户定义的完整性(续) 例3 :建立职工表EMP,要求每个职工的应发工资不得超过3000元。 应发工资实际上就是实发工资列Sal与扣除项Deduct之和。 CREATE TABLE EMP (Eno NUMBER(4) Ename VARCHAR(10), Job VARCHAR(8), Sal NUMBER(7,2), Deduct NUMBER(7,2) Deptno NUMBER(2), CONSTRAINTS C1 CHECK (Sal + Deduct <=3000)); 2018年11月7日星期三

Oracle中用户定义的完整性(续) 2. 通过触发器来定义用户的完整性规则 定义其它的完整性约束时,需要用数据库触发器(Trigger)来实现。 数据库触发器:一类靠事务驱动的特殊过程。    一旦由某个用户定义,任何用户对该数据的 增、删、改操作均由服务器自动激活相应的触发 器,在核心层进行集中的完整性控制。  定义数据库触发器的语句: CREATE [OR REPLACE] TRIGGER 2018年11月7日星期三

Oracle中用户定义的完整性(续)    例4: 为教师表Teacher定义完整性规则 “教授的工资不得低于1000元,如果低于1000元,自动改为1000元”。 2018年11月7日星期三

Oracle中用户定义的完整性(续) CREATE TRIGGER UPDATE_SAL BEFORE INSERT OR UPDATE OF Sal, Pos ON Teacher   FOR EACH ROW WHEN (:new.Pos=`教授`) /*某教员晋升为教授*/ BEGIN IF :new.sal<1000 THEN :new.Sal:=1000; END IF; END; 2018年11月7日星期三

Oracle完整性小结 Oracle提供定义完整性约束条件 Oracle自动执行相应的完整性检查: 对于违反完整性约束条件的操作,  CREATE TABLE语句;  CREATE TRIGGER语句; 可以定义很复杂的完整性约束条件。 Oracle自动执行相应的完整性检查:   对于违反完整性约束条件的操作, 拒绝执行或者执行事先定义的操作。 2018年11月7日星期三

第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结 第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结 2018年11月7日星期三

10.4 小结 数据库的完整性,是为了保证数据库中存储的数据是正确的,所谓 正 确 的是指符合现实世界语义的。 DBMS完整性实现的机制: 10.4 小结    数据库的完整性,是为了保证数据库中存储的数据是正确的,所谓 正 确 的是指符合现实世界语义的。  DBMS完整性实现的机制: 完整性约束定义机制; 完整性检查机制; 违背完整性约束条件时,DBMS应采取的动作等。 2018年11月7日星期三

小结(续) 完整性机制的实施会极大地影响系统性能,因此,不同的数据库产品对完整性的支持策略和支持程度是不同的。   完整性机制的实施会极大地影响系统性能,因此,不同的数据库产品对完整性的支持策略和支持程度是不同的。    许多数据库管理系统对完整性机制的支持比对安全性的支持要晚得多、也弱得多。    随着硬件性能和容量的提高以及数据库技 术的发展,许多数据库厂商对完整性的支持越 来越好。不仅能保证实体完整性和参照完整性, 而且能在DBMS核心定义、检查和保证用户定 义的完整性约束条件。 2018年11月7日星期三