Presentation is loading. Please wait.

Presentation is loading. Please wait.

An Introduction to Database System

Similar presentations


Presentation on theme: "An Introduction to Database System"— Presentation transcript:

1 An Introduction to Database System
数据库系统概论 An Introduction to Database System

2 教材及参考书 萨师煊,王珊:数据库系统概论(第三版) , 高等教育出版社,2000 中国人民大学  教材 1 教材介绍:
 教材 萨师煊,王珊:数据库系统概论(第三版) , 高等教育出版社, 中国人民大学 1 教材介绍: 比较经典的数据库教材 第一版中国最早的数据库教材,为众多高校计算机专业采用 2. 萨老师介绍 创建信息系,最早系主任 中国的C J, Date 3 王老师介绍 4 数据库所介绍

3 教材及参考书(2)  参考书 施伯乐,丁宝康:数据库系统教程,高教出版社,2003

4 学习方式 (启发式、讨论式) (预习、复习)  听课  读书 评分标准:
 听课 (启发式、讨论式)  读书 (预习、复习) 评分标准: 平时表现 5%平时测试 15%个人研究报告 8%集体项目 12%期末考试60%

5 研究报告(第15周交) 题目自拟,与数据库有关,偏重理论而不是具体软件的操作。题目于五一节前定好。 包括以下要点:
1)从问题入手,该技术是解决什么问题 2)该技术的发展历史 3)该技术的要点是什么,如何一步一步做的 4)该技术的发展方向 5)个人对该技术的看法,比如新思想,建议算法的改变等等。 6)索引,reference,必须要有并且标记在文中。 7)准备10分钟的ppt文件。以便抽查演讲。

6 集体项目: 提供用access或者mysql为数据库,编程选用c++,java,php,visual basic,若用其他语言或数据库,请准备好演示环境。 5-8人一组。自由分组。第六周组好 题目将于第七周公布。 上交时,软件,项目说明书,以及20分钟ppt。

7 内容安排(1) 第一章:绪论 第二章:关系数据库 第三章:关系数据库标准语言SQL 第四章:关系系统及其查询优化 第五章:关系数据理论
 基础篇 第一章:绪论 第二章:关系数据库 第三章:关系数据库标准语言SQL 第四章:关系系统及其查询优化 第五章:关系数据理论  设计篇 第六章:数据库设计 与一些教材的区别 偏重理论,不去讨论某个系统的具体使用方法,但会涉及实现技术 我们的优势 虽然枯燥,但适应DBA的需要 不过时

8 内容安排(2)  系统篇 第七章:数据库恢复技术 第八章:并发控制 第九章:数据库安全性 第十章:数据库完整性

9 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第一章 绪论

10 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域
1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域 1.6 小结

11 1.1 数据库系统概述 1.1.1 数据库的地位 1.1.2 四个基本概念 1.1.3 数据管理技术的产生与发展

12 数据库的地位 数据库技术产生于六十年代末,是数据管理的最新技术,是计算机科学的重要分支
数据库技术是信息系统的核心和基础,它的出现极大地促进了计算机应用向各行各业的渗透 数据库的建设规模、数据库信息量的大小和使用频度已成为衡量一个国家信息化程度的重要标志

13 1.1 数据库系统概述 1.1.1 数据库的地位 1.1.2 四个基本概念 1.1.3 数据管理技术的产生与发展

14 1.1.2 四个基本概念 数据(Data) 数据库(Database) 数据库管理系统(DBMS) 数据库系统(DBS)

15 一、数据 数据(Data)是数据库中存储的基本对象 数据的定义 数据的种类 数据的特点 描述事物的符号记录 文字、图形、图象、声音
数据与其语义是不可分的

16 数据举例 学生档案中的学生记录 数据的形式不能完全表达其内容 数据的解释 请给出另一个解释和语义
(李明,男,1972,江苏,计算机系,1990) 数据的形式不能完全表达其内容 数据的解释 语义:学生姓名、性别、出生年月、籍贯、所在系别、入学时间 解释:李明是个大学生,1972年出生,江苏人,1990年考入计算机系 请给出另一个解释和语义

17 二、数据库(举例)

18 二、数据库(续) 数据库的定义 人们收集并抽取出一个应用所需要的大量数据之后,应将其保存起来以供进一步加工处理,进一步抽取有用信息
数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据集合

19 二、数据库(续) 数据库的特征 数据按一定的数据模型组织、描述和储存 可为各种用户共享 冗余度较小 数据独立性较高 易扩展

20 三、数据库管理系统 什么是DBMS DBMS的用途
数据库管理系统(Database Management System,简称DBMS)是位于用户与操作系统之间的一层数据管理软件。 DBMS的用途 科学地组织和存储数据、高效地获取和维护数据

21 DBMS的主要功能 数据定义功能 数据操纵功能:提供数据操纵语言(DML) 提供数据定义语言(DDL) 操纵数据实现对数据库的基本操作
定义数据库中的数据对象 数据操纵功能:提供数据操纵语言(DML) 操纵数据实现对数据库的基本操作 (查询、插入、删除和修改)

22 DBMS的主要功能 数据库的运行管理 保证数据的安全性、完整性、 数据库的建立和维护功能(实用程序) 多用户对数据的并发使用
发生故障后的系统恢复 数据库的建立和维护功能(实用程序) 数据库数据批量装载 数据库转储 介质故障恢复 数据库的重组织 性能监视等

23 四、数据库系统 什么是数据库系统 数据库系统的构成
数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成。 在不引起混淆的情况下常常把数据库系统简称为数据库。 数据库系统的构成 由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员(和用户)构成。

24 数据库系统(续) 数据库系统构成图示 参看教材page_5 图1.1 数据库系统在计算机系统中的位置图示 参看教材page_ 5 图1.2

25 1.1 数据库系统概述 1.1.1 数据库的地位 1.1.2 四个基本概念 1.1.3 数据管理技术的产生与发展

26 1.1.3 数据管理技术的产生和发展 什么是数据管理 数据管理技术的发展过程
数据管理技术的产生和发展 什么是数据管理 对数据进行分类、组织、编码、存储、检索和维护,是数据处理的中心问题 数据管理技术的发展过程 人工管理阶段(40年代中--50年代中) 文件系统阶段(50年代末--60年代中) 数据库系统阶段(60年代末--现在)

27 数据管理技术的产生和发展(续) 数据管理技术的发展动力 应用需求的推动 计算机硬件的发展 计算机软件的发展

28 一、人工管理 时期 产生的背景 40年代中--50年代中 应用需求 科学计算 硬件水平 无直接存取存储设备 软件水平 没有操作系统
应用需求 科学计算 硬件水平 无直接存取存储设备 软件水平 没有操作系统 处理方式 批处理

29 人工管理(续) 特点 数据的管理者:应用程序,数据不保存。 数据面向的对象:某一应用程序 数据的共享程度:无共享、冗余度极大
数据的独立性:不独立,完全依赖于程序 数据的结构化:无结构 数据控制能力:应用程序自己控制

30 应用程序与数据的对应关系(人工管理) 应用程序1 数据集1 应用程序2 数据集2 应用程序n 数据集n ...…

31 二、文件系统 时期 产生的背景 50年代末--60年代中 应用需求 科学计算、管理 硬件水平 磁盘、磁鼓 软件水平 有文件系统
应用需求 科学计算、管理 硬件水平 磁盘、磁鼓 软件水平 有文件系统 处理方式 联机实时处理、批处理

32 文件系统(续) 特点 数据的管理者:文件系统,数据可长期保存 数据面向的对象:某一应用程序 数据的共享程度:共享性差、冗余度大
数据的结构化:记录内有结构,整体无结构 数据的独立性:独立性差,数据的逻辑结构改变必须修改应用程序 数据控制能力:应用程序自己控制 数据独立性差: 1。靠程序定义和解释数据的结构 2。靠程序描述数据间的联系

33 应用程序与数据的对应关系(文件系统) 应用程序1 文件1 应用程序2 文件2 应用程序n 文件n 存取方法 ...…

34 文件系统中数据的结构 记录内有结构。 数据的结构是靠程序定义和解释的。 数据只能是定长的。
可以间接实现数据变长要求,但访问相应数据的应用程序复杂了。 文件间是独立的,因此数据整体无结构。 可以间接实现数据整体的有结构,但必须在应用程序中对描述数据间的联系。 数据的最小存取单位是记录。

35 三、数据库系统 时期 产生的背景 60年代末以来 应用背景 大规模管理 硬件背景 大容量磁盘 软件背景 有数据库管理系统
应用背景 大规模管理 硬件背景 大容量磁盘 软件背景 有数据库管理系统 处理方式 联机实时处理,分布处理,批处理

36 数据管理技术进入数据库阶段的标志是20世纪60年代末的三件大事:
1968年美国IBM公司推出层次模型的IMS系统 。 1969年美国CODASYL组织发布了DBTG报告,总结了当时各式各样的数据库,提出网状模型。 1970年美国IBM公司的E.F.Codd 连续发表论文,提出关系模型,奠定了关系数据库的理论基础。

37 数据库系统(续) 特点 数据的管理者:DBMS 数据面向的对象:现实世界 数据的共享程度:共享性高 数据的独立性:高度的物理独立性和一定的
逻辑独立性 数据的结构化:整体结构化 数据控制能力:由DBMS统一管理和控制

38 应用程序与数据的对应关系(数据库系统) DBMS 应用程序1 应用程序2 数据库

39 数据的高共享性的好处 降低数据的冗余度,节省存储空间 避免数据间的不一致性 使系统易于扩充

40 数据独立性 物理独立性 逻辑独立性 指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。当数据的物理存储改变了,应用程序不用改变。
指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,用户程序也可以不变。

41 数据结构化 整体数据的结构化是数据库的主要特征之一。 数据库中实现的是数据的真正结构化 数据的结构用数据模型描述,无需程序定义和解释。
数据可以变长。 数据的最小存取单位是数据项。

42 DBMS对数据的控制功能 数据的安全性(Security)保护 数据的完整性(Integrity)检查
使每个用户只能按指定方式使用和处理指定数据,保护数据以防止不合法的使用造成的数据的泄密和破坏。 数据的完整性(Integrity)检查 将数据控制在有效的范围内,或保证数据之间满足一定的关系。

43 DBMS对数据的控制功能 并发(Concurrency)控制 数据库恢复(Recovery)
对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。 数据库恢复(Recovery) 将数据库从错误状态恢复到某一已知的正确状态。

44 程序和数据间的联系 文件系统阶段信息处理的传统方式

45 数据库阶段信息处理方式的演变

46 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域 1.6 小结

47 数据模型 在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。通俗地讲数据模型就是现实世界的模拟 数据模型应满足三方面要求
能比较真实地模拟现实世界 容易为人所理解 便于在计算机上实现

48 数据模型(续) 数据模型分成两个不同的层次 (1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模。
(1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模。 (2) 数据模型 主要包括网状模型、层次模型、关系模型等,它是按计算机系统的观点对数据建模。

49 数据模型(续) 客观对象的抽象过程---两步抽象 概念模型是现实世界到机器世界的一个中间层次。 现实世界中的客观对象抽象为概念模型;
把概念模型转换为某一DBMS支持的数据模型。 概念模型是现实世界到机器世界的一个中间层次。

50 1.2 数据模型 1.2.1 数据模型的组成要素 1.2.2 概念模型 1.2.3 常用逻辑数据模型 1.2.4 层次模型
1.2.5 网状模型 1.2.6 关系模型

51 1.2.1 数据模型的组成要素 数据结构 数据操作 数据的约束条件

52 1. 数据结构 什么是数据结构 两类对象 数据结构是对系统静态特性的描述 对象类型的集合 与数据类型、内容、性质有关的对象
与数据之间联系有关的对象 数据结构是对系统静态特性的描述

53 2.数据操作 数据操作 数据操作的类型 对数据库中各种对象(型)的实例(值)允许执行的操作及有关的操作规则 检索
更新(包括插入、删除、修改)

54 数据操作(续) 数据模型对操作的定义 操作的确切含义 操作符号 操作规则(如优先级) 实现操作的语言 数据操作是对系统动态特性的描述。

55 3.数据的约束条件 数据的约束条件 一组完整性规则的集合。
完整性规则是给定的数据模型中数据及其联系所具有的制约和储存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。

56 数据的约束条件(续) 数据模型对约束条件的定义
反映和规定本数据模型必须遵守的基本的通用的完整性约束条件。例如在关系模型中,任何关系必须满足实体完整性和参照完整性两个条件。 提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。

57 概念模型 1. 概念模型 2. 信息世界中的基本概念 3. 概念模型的表示方法

58 1. 概念模型 概念模型的用途 对概念模型的基本要求 概念模型用于信息世界的建模 是现实世界到机器世界的一个中间层次 是数据库设计的有力工具
数据库设计人员和用户之间进行交流的语言 对概念模型的基本要求 较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识 简单、清晰、易于用户理解。

59 2. 信息世界中的基本概念 (1) 实体(Entity) (2) 属性(Attribute) (3) 码(Key)
客观存在并可相互区别的事物称为实体。 可以是具体的人、事、物或抽象的概念。 (2) 属性(Attribute) 实体所具有的某一特性称为属性。 一个实体可以由若干个属性来刻画。 (3) 码(Key) 唯一标识实体的属性集称为码。

60 信息世界中的基本概念(续) (4) 域(Domain) (5) 实体型(Entity Type) (6) 实体集(Entity Set)
属性的取值范围称为该属性的域。 (5) 实体型(Entity Type) 用实体名及其属性名集合来抽象和刻画 同类实体称为实体型 (6) 实体集(Entity Set) 同型实体的集合称为实体集

61 信息世界中的基本概念(续) (7) 联系(Relationship) 实体型间联系 现实世界中事物内部以及事物之间的联系在信息世界
中反映为实体内部的联系和实体之间的联系 实体型间联系 两个实体型 一对一联系(1:1)   三个实体型 一对多联系(1:n) 一个实体型 多对多联系(m:n)

62 两个实体型间的联系 实体型1 联系名 实体型2 1 1:1联系 m n m:n联系 1:n联系

63 数据联系的描述 图1. 一对一联系 图1.9 一对多联系

64 图 多对多联系

65 两个实体型间的联系 一对一联系   如果对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系。记为1:1。 实例 班级与班长之间的联系: 一个班级只有一个正班长 一个班长只在一个班中任职

66 两个实体型间的联系 (续) 一对多联系 如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系 记为1:n 实例 班级与学生之间的联系: 一个班级中有若干名学生, 每个学生只在一个班级中学习

67 两个实体型间的联系 (续) 多对多联系(m:n) 实例
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系。记为m:n 实例 课程与学生之间的联系: 一门课程同时有若干个学生选修 一个学生可以同时选修多门课程

68 多个实体型间的联系(续) 多个实体型间的一对多联系
若实体集E1,E2,...,En存在联系,对于实体集Ej(j=1,2,...,i-1,i+1,...,n)中的给定实体,最多只和Ei中的一个实体相联系,则我们说Ei与E1,E2,...,Ei-1,Ei+1,...,En之间的联系是一对多的。

69 多个实体型间的联系(续) 多个实体型间的一对一联系 多个实体型间的多对多联系 实例 课程、教师与参考书三个实体型
如果一门课程可以有若干个教师讲授,使用若干 本参考书,每一个教师只讲授一门课程,每一本 参考书只供一门课程使用 课程与教师、参考书之间的联系是一对多的 多个实体型间的一对一联系 多个实体型间的多对多联系

70 同一实体集内各实体间的联系 一对多联系 一对一联系 多对多联系 实例 职工实体集内部具有领导与被领导的联系
某一职工(干部)“领导”若干名职工 一个职工仅被另外一个职工直接领导 这是一对多的联系 一对一联系 多对多联系

71 三元联系 一元联系

72 3. 概念模型的表示方法 概念模型的表示方法很多 实体-联系方法(E-R方法) 用E-R图来描述现实世界的概念模型

73 E-R图 实体型 用矩形表示,矩形框内写明实体名。 学生 教师

74 E-R图(续) 属性 用椭圆形表示,并用无向边将其与相应的实体连接起来 学生 学号 年龄 性别 姓名

75 E-R图(续) 联系 联系本身:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n) 联系的属性:联系本身也是一种实体型,也可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来

76 联系的表示方法 实体型1 联系名 实体型2 1 1:1联系 m n m:n联系 1:n联系

77 联系的表示方法(续) 实体型1 联系名 m n 同一实体型内部的m:n联系 实体型2 1 多个实体型间的1:n联系 实体型3

78 联系的表示方法示例 班级 班级-班长 班长 1 1:1联系 课程 选修 学生 m n m:n联系 组成 1:n联系

79 联系的表示方法示例(续) 职工 领导 1 n 同一实体型内部的1:n联系 课程 讲授 教师 m 多个实体型间的1:n联系 参考书

80 联系属性的表示方法 课程 选修 学生 m n 成绩

81 实体联系模型(实例) 为仓库管理设计一个ER模型。仓库主要管理零件的采购和供应等事项。仓库根据需要向外面供应商订购零件,而许多工程项目需要仓库提供零件。

82 首先确定实体类型。本问题有三个实体类型:零件PART,工程项目PROJECT,零件供应商SUPPLIER。
确定联系类型。PROJECT和PART之间是M:N联系,PART和SUPPLIER之间也是M:N联系,分别命名为P_P和P_S. 把实体类型和联系类型组合成ER图。 确定实体类型和联系类型的属性。 确定实体类型的键,在ER图中属于码的属性名下画一条横线。

83 图1.14 ER图实例

84 1.2.3 常用数据模型 非关系模型 层次模型(Hierarchical Model) 网状模型(Network Model )
数据结构:以基本层次联系为基本单位 基本层次联系:两个记录以及它们之间的一对多(包括一对一)的联系

85 常用数据模型(续) 关系模型(Relational Model) 面向对象模型(Object Oriented Model) 数据结构:表
数据结构:对象

86 1.2 数据模型 1.2.1 数据模型的组成要素 1.2.2 概念模型 1.2.3 常用数据模型 1.2.4 层次模型 1.2.5 网状模型
1.2.6 关系模型

87 1.2.4 层次模型 1. 层次数据模型的数据结构 2. 层次数据模型的数据操纵 3. 层次数据模型的与完整性约束
4. 层次数据模型的存储结构 5. 层次数据模型的优缺点 6. 典型的层次数据库系统

88 1. 层次数据模型的数据结构 层次模型 满足下面两个条件的基本层次联系的集合为层次模型。 层次模型中的几个术语
1. 有且只有一个结点没有双亲结点,这个结点称为根 结点 2. 根以外的其它结点有且只有一个双亲结点 层次模型中的几个术语 根结点,双亲结点,兄弟结点,叶结点

89 层次数据模型的数据结构(续) 1 根结点 2 兄弟结点 3 叶结点 4 5

90 层次数据模型的数据结构(续) 表示方法 实例:教员-学生数据模型(P23) 实体型:用记录类型描述。 每个结点表示一个记录类型。
属性:用字段描述。每个记录类型可包含若干个字段。 联系:用结点之间的连线表示记录(类)型之间的 一对多的联系 实例:教员-学生数据模型(P23)

91 层次数据模型的数据结构(续) 特点 结点的双亲是唯一的 只能直接处理一对多的实体联系 每个记录类型定义一个排序字段,也称为码字段
任何记录值只有按其路径查看时,才能显出它的全部意义 没有一个子女记录值能够脱离双亲记录值而独立存在

92 层次数据模型的数据结构(续) 多对多联系在层次模型中的表示 用层次模型间接表示多对多联系 方法 分解方法 将多对多联系分解成一对多联系
冗余结点法 虚拟结点法

93 2. 层次模型的数据操纵 查询 插入 删除 更新

94 3. 层次模型的完整性约束 无相应的双亲结点值就不能插入子女结点值 如果删除双亲结点值,则相应的子女结点值也被同时删除 更新操作时,应更新所有相应记录,以保证数据的一致性

95 4.层次数据模型的存储结构 邻接法 链接法 按照层次树前序遍历的顺序把所有记录值依次邻接存 放,即通过物理空间的位置相邻来实现层次顺序
用指引元来反映数据之间的层次联系 子女-兄弟链接法 P26 层次序列链接法 P26

96 5. 层次模型的优缺点 优点 缺点 层次数据模型简单,对具有一对多的层次关系的部门描述自然、直观,容易理解 性能优于关系模型,不低于网状模型
层次数据模型提供了良好的完整性支持 缺点 多对多联系表示不自然 对插入和删除操作的限制多 查询子女结点必须通过双亲结点 层次命令趋于程序化

97 6. 典型的层次数据库系统 IMS数据库管理系统 第一个大型商用DBMS 1968年推出 IBM公司研制

98 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域
1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域 1.6 小结

99 1.2 数据模型 1.2.1 概念模型 1.2.2 数据模型的组成要素 1.2.3 最常用的数据模型 1.2.4 层次模型
1.2.5 网状模型 1.2.6 关系模型

100 1.2.5 网状模型 1. 网状数据模型的数据结构 2. 网状数据模型的数据操纵 3. 网状数据模型的完整性约束
4. 网状数据模型的存储结构 5. 网状数据模型的优缺点 6. 典型的网状数据库系统

101 1.网状数据模型的数据结构 网状模型 满足下面两个条件的基本层次联系的集合为网状模型。 1. 允许一个以上的结点无双亲;
2. 一个结点可以有多于一个的双亲。

102 网状数据模型的数据结构 1 2 R3 L L2 R1 R2 L3 L1 L2 R3 L4 R4 R5

103 网状数据模型的数据结构(续) 表示方法(与层次数据模型相同) 实体型:用记录类型描述。 每个结点表示一个记录类型。 属性:用字段描述。
每个记录类型可包含若干个字段。 联系:用结点之间的连线表示记录(类)型之 间的一对多的父子联系。

104 网状数据模型的数据结构(续) 特点 只能直接处理一对多的实体联系 每个记录类型定义一个排序字段,也称为码字段
任何记录值只有按其路径查看时,才能显出它的全部意义

105 网状数据模型的数据结构(续) 网状模型与层次模型的区别 网状模型允许多个结点没有双亲结点 网状模型允许结点有多个双亲结点
网状模型允许两个结点之间有多种联系(复合联系) 网状模型可以更直接地去描述现实世界 层次模型实际上是网状模型的一个特例

106 网状数据模型的数据结构(续) 1 2 R3 L L2 R1 R2 L3 L1 L2 R3 L4 R4 R5

107 网状数据模型的数据结构(续) 1 L L2 R2

108 网状数据模型的数据结构(续) 学生宿舍 学生 教研室 教师

109 网状数据模型的数据结构(续) 父母 子女 种植 砍伐 养育 赡养

110 网状数据模型的数据结构(续) 多对多联系在网状模型中的表示 用网状模型间接表示多对多联系 方法 将多对多联系直接分解成一对多联系

111 2. 网状模型的数据操纵 查询 插入 删除 更新

112 3.网状数据模型的完整性约束 网状数据库系统(如DBTG)对数据操纵加 了一些限制,提供了一定的完整性约束
双亲结点与子女结点之间是一对多联系 属籍类别 加入类别(自动的,手工的) 移出类别(固定的,必须 的,随意的)

113 3. 网状数据模型的完整性约束 完整性约束条件 允许插入尚未确定双亲结点值的子女结点值 允许只删除双亲结点值

114 4.网状数据模型的存储结构 关键 实现记录之间的联系 常用方法 单向链接 双向链接 环状链接 向首链接 例:P29

115 5.网状模型的优缺点 优点 缺点 能够更为直接地描述现实世界,如一个结点可以有多个双亲 具有良好的性能,存取效率较高
结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握 DDL、DML语言复杂,用户不容易使用

116 6. 典型的网状数据库系统 DBTG系统,亦称CODASYL系统 实际系统 由DBTG提出的一个系统方案
奠定了数据库系统的基本概念、方法和技术 70年代推出 实际系统 Cullinet Software Inc.公司的 IDMS Univac公司的 DMS1100 Honeywell公司的IDS/2 HP公司的IMAGE

117 1.2 数据模型 1.2.1 概念模型 1.2.2 数据模型的组成要素 1.2.3 最常用的数据模型 1.2.4 层次模型
1.2.5 网状模型 1.2.6 关系模型

118 1.2.6 关系模型 1. 关系数据模型的数据结构 2. 关系数据模型的操纵 3. 关系数据模型的完整性约束 4. 关系数据模型的存储结构
5. 关系数据模型的优缺点 6. 典型的关系数据库系统

119 关系模型 最重要的一种数据模型。也是目前主要采用的数据模型 1970年由美国IBM公司San Jose研究室的研究员E.F.Codd提出
本课程的重点

120 关系数据模型的数据结构 在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。

121 关系模型的基本概念 关系(Relation) 元组(Tuple) 属性(Attribute) 一个关系对应通常说的一张表。
表中的一行即为一个元组。 属性(Attribute) 表中的一列即为一个属性,给每一个属性起一个名称即属性名。

122 关系模型的基本概念 主码(Key) 域(Domain) 分量 关系模式 对关系的描述 关系名(属性1,属性2,…,属性n)
表中的某个属性组,它可以唯一确定一个元组。 域(Domain) 属性的取值范围。 分量 元组中的一个属性值。 关系模式 对关系的描述 关系名(属性1,属性2,…,属性n) 学生(学号,姓名,年龄,性别,系,年级)

123 关系数据模型的数据结构(续) 实体及实体间的联系的表示方法 实体型:直接用关系(表)表示。 属性:用属性名表示。
一对一联系:隐含在实体对应的关系中。 一对多联系:隐含在实体对应的关系中。 多对多联系:直接用关系表示。

124 关系数据模型的数据结构(续) 例1 学生、系、系与学生之间的一对多联系: 例2 系、系主任、系与系主任间的一对一联系
学生(学号,姓名,年龄,性别,系号,年级) 系 (系号,系名,办公地点) 例2 系、系主任、系与系主任间的一对一联系

125 关系数据模型的数据结构(续) 例3 学生、课程、学生与课程之间的多对多联系: 学生(学号,姓名,年龄,性别,系号,年级)
课程(课程号,课程名,学分) 选修(学号,课程号,成绩)

126 关系数据模型的数据结构(续) 关系必须是规范化的,满足一定的规范条件 最基本的规范条件:关系的每一个分量必须是一个不 可分的数据项。

127 2.关系模型的数据操纵 查询、插入、删除、更新 数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合
存取路径对用户隐蔽,用户只要指出“干什么”,不必详细说明“怎么干”

128 3.关系模型的完整性约束 实体完整性 参照完整性 用户定义的完整性

129 4.关系数据模型的存储结构 表以文件形式存储 有的DBMS一个表对应一个操作系统文件 有的DBMS自己设计文件结构

130 PART模式 (P#,PNAME,COLOR,WEIGHT) PROJECT模式 (J#,JNAME,DATE)
SUPPLIER模式 (S#,SNAME,SADDR) P_P模式 (J#,P#,TOTAL) P_S模式 (P#,S#,QUANTITY) 图 关系模型的例子

131 PART PART 关系 关系 P_P P_P 关系 关系 P# P# PNAME PNAME COLOR COLOR WEIGHT WEIGHT J# J# P# P# TOTAL TOTAL P1 P1 SCREW SCREW BLUE BLUE 14 14 J1 J1 P1 P1 50 50 P2 P2 BOLT BOLT GREEN GREEN 17 17 J2 J2 P2 P2 15 15 P3 P3 NUT NUT RED RED 12 12 J3 J3 P3 P3 6 6 P4 P4 SCREW SCREW RED RED 19 19 J1 J1 P2 P2 65 65 PROJECT PROJECT 关系 关系 J2 J2 P3 P3 25 25 J# J# JNAME JNAME DATE DATE J1 J1 P3 P3 18 18 J1 J1 JA JA 89.1 89.1 P_S P_S 关系 关系 J2 J2 JB JB 90.5 90.5 P# P# S# S# QUANTITY QUANTITY J3 J3 JC JC 91 91 - - 3 3 P1 P1 S1 S1 100 100 SUPPLIER SUPPLIER 关系 关系 P2 P2 S2 S2 200 200 S# S# SNAME SNAME SADDR SADDR P2 P2 S1 S1 150 150 S1 S1 PICC PICC SHANGHAI SHANGHAI P3 P3 S2 S2 300 300 S2 S2 FADC FADC BEIJING BEIJING P4 P4 S2 S2 100 100

132 5.关系模型的优缺点 优点 建立在严格的数学概念的基础上 概念单一。数据结构简单、清晰,用户易懂易用 关系模型的存取路径对用户透明
实体和各类联系都用关系来表示。 对数据的检索结果也是关系。 关系模型的存取路径对用户透明 具有更高的数据独立性,更好的安全保密性 简化了程序员的工作和数据库开发建立的工作

133 关系模型的优缺点(续) 缺点 存取路径对用户透明导致查询效率往往不如非 关系数据模型 为提高性能,必须对用户的查询请求进行优化
增加了开发数据库管理系统的难度

134 6. 典型的关系数据库系统 ORACLE SYBASE INFORMIX DB/2 COBASE PBASE EasyBase DM/2
OpenBase

135 对象模型 对象(object)是现实世界中实体的模型化,与实体概念相仿,但远比实体复杂。
将属性集和方法集相同的所有对象组合在一起,构成了一个类(class)。

136 1969年CODASYL的DBTG报告(71年通过)
层次模型 网状模型 关系模型 面向对象模型 创始 1968年IBM公司的IMS系统 1969年CODASYL的DBTG报告(71年通过) 1970年F.Codd提出关系模型 20世纪80年代 数据结构 复杂 (树结构) (有向图结构) 简单 (二维表) (嵌套递归) 数据联系 通过指针 通过表间的公共属性 通过对象标识 查询语言 过程性语言 非过程性语言 面向对象语言 典型产品 IMS IDS/Ⅱ IMAGE/3000 IDMS TOTAL Oracle Sybase DB2 SQL Server Informix ONTOS DB 盛行期 20世纪70年代 70年代至80年代中期 80年代至现在 90年代至现在 图 四种逻辑数据模型的比较

137 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域 1.6 小结

138 1.3 数据库系统结构 1.3.1数据库系统内部的模式结构 1.3.2数据库系统外部的体系结构 从数据库管理系统角度看
从数据库最终用户角度看

139 1.3.1 数据库系统的模式结构 数据库系统模式的概念 数据库系统的三级模式结构 数据库的二级映象功能与数据独立性 小结

140 数据库系统模式的概念 “型” 和“值” 的概念 型(Type) 值(Value) 对某一类数据的结构和属性的说明 是型的一个具体赋值
例如:学生记录 记录型: (学号,姓名,性别,系别,年龄,籍贯) 该记录型的一个记录值: (900201,李明,男,计算机,22,江苏)

141 数据库系统模式的概念(续) 模式(Schema)-型 数据库逻辑结构和特征的描述 是型的描述 反映的是数据的结构及其联系 模式是相对稳定的
模式的一个实例(Instance)-值 模式的一个具体值 反映数据库某一时刻的状态 同一个模式可以有很多实例 实例随数据库中的数据的更新而变动

142 1.3.1 数据库系统的模式结构 数据库系统模式的概念 数据库系统的三级模式结构 数据库的二级映象功能与数据独立性 小结

143 数据库系统的三级模式结构

144 讲解 1、何为模式、外模式、内模式? 2、处在什么样的地位? 3、他有什么样的作用? 4、什么描述语言?

145 1.模式(Schema) 模式(也称逻辑模式) 数据库中全体数据的逻辑结构和特征的描述 所有用户的公共数据视图,综合了所有用户的需求
一个数据库只有一个模式 模式的地位:是数据库系统模式结构的中间层 与数据的物理存储细节和硬件环境无关 与具体的应用程序、开发工具及高级程序设计语言无关

146 模式的定义-内容 数据的逻辑结构(数据项的名字、类型、取值范围等) 数据之间的联系 数据有关的安全性、完整性要求 模式描述语言(模式DDL)

147 2. 外模式(External Schema) 外模式(也称子模式或用户模式)
数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述 数据库用户的数据视图,是与某一应用有关的数据的逻辑表示

148 外模式(续) 外模式的地位:介于模式与应用之间 模式与外模式的关系:一对多 外模式通常是模式的子集
一个数据库可以有多个外模式。反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求。 对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同

149 外模式与应用的关系:一对多 同一外模式也可以为某一用户的多个应用系统所使用, 但一个应用程序只能使用一个外模式。

150 外模式(续) 外模式的用途 保证数据库安全性的一个有力措施。 每个用户只能看见和访问所对应的外模式中的数据 子模式描述语言(子模式DDL)

151 3.内模式(Internal Schema)
内模式(也称存储模式) 是数据物理结构和存储方式的描述 是数据在数据库内部的表示方式 记录的存储方式(顺序存储,按照B树结构存储,按hash方法存储) 索引的组织方式 数据是否压缩存储 数据是否加密 数据存储记录结构的规定 一个数据库只有一个内模式

152 注意:内部记录并不涉及到物理设备的约束。比内模式更接近物理存储和访问的那些软件机制是操作系统的一部分(文件系统),例如从磁盘读数据或写数据到磁盘上的操作等。
内模式描述语言(内模式DDL、存储DDL)

153 数据按外模式的描述提供给用户, 按内模式的描述存储在磁盘中, 而模式提供了连接这两级的相对稳定的中间观点,并使得两级中任何一级的改变不受另一级的牵制。

154 1.3.1 数据库系统的模式结构 数据库系统模式的概念 数据库系统的三级模式结构 数据库的二级映象功能与数据独立性 小结

155 三级模式与二级映象 三级模式是对数据的三个抽象级别 二级映象在DBMS内部实现这三个抽象层次的联系和转换
数据独立性:是指应用程序和数据库的数据结构之间相互独立,不受影响。 数据独立性 物理数据独立性 逻辑数据独立性

156 数据库系统的三级模式结构

157 1.外模式/模式映象 1、定义外模式与模式之间的对应关系 2、每一个外模式都对应一个外模式/模式映象
3、映象定义通常包含在各自外模式的描述中

158 外模式/模式映象的用途 4、保证数据的逻辑独立性 当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变
应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。

159 数据库系统的三级模式结构

160 2.模式/内模式映象 模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。例如,说明逻辑记录和字段在内部是如何表示的
数据库中模式/内模式映象是唯一的 该映象定义通常包含在模式描述中

161 模式/内模式映象的用途 保证数据的物理独立性
当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变 应用程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性。

162 数据库系统的三级模式结构

163 数据库的三级体系结构

164 1.3.1 数据库系统的模式结构 数据库系统模式的概念 数据库系统的三级模式结构 数据库的二级映象功能与数据独立性 小结

165 小结 模式 是数据库的中心与关键 独立于数据库的其它层次 设计数据库模式结构时应首先确定数据库的逻辑模式

166 小结(续) 内模式 依赖于全局逻辑结构,但独立于数据库的用户视图即外模式,也独立于具体的存储设备。
它将全局逻辑结构中所定义的数据结构及其联系按照一定的物理存储策略进行组织,以达到较好的时间与空间效率。

167 小结(续) 外模式 面向具体的应用程序,定义在逻辑模式之上,但独立于存储模式和存储设备
设计外模式时应充分考虑到应用的扩充性。当应用需求发生较大变化,相应外模式不能满足其视图要求时,该外模式就得做相应改动

168 小结(续) 应用程序 在外模式描述的数据结构上编制的,它依赖于特定的外模式,与数据库的模式和存储结构独立。
不同的应用程序有时可以共用同一个外模式。

169 小结(续) 二级映象 保证了数据库外模式的稳定性,从而从底层保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改。
数据与程序之间的独立性,使得数据的定义和描述可以从应用程序中分离出去。

170 1.3 数据库系统结构 1.3.1数据库系统内部的模式结构 1.3.2数据库系统外部的体系结构 从数据库管理系统角度看
从数据库最终用户角度看

171 数据库系统外部的体系结构 单用户结构 主从式结构 分布式结构 客户/服务器结构

172 1. 单用户数据库系统 整个数据库系统(应用程序、DBMS、数据)装在一台计算机上,为一个用户独占,不同机器之间不能共享数据。
早期的最简单的数据库系统 例如一个企业的各个部门都使用本部门的机器来管理本部门的数据,各个部门的机器是独立的。由于不同部门之间不能共享数据,因此企业内部存在大量的冗余数据。例如人事部门、会计部门、技术部门必须重复存放每一名职工的一些基本信息(职工号、姓名等)。

173 2. 主从式结构的数据库系统 一个主机带多个终端的多用户结构 数据库系统,包括应用程序、DBMS、数据,都集中存放在主机上,所有处理任务都由
主机来完成 各个用户通过主机的终端并发地存取数据库,共享数据资源

174 主从式结构的数据库系统 终端 主机

175 主从式结构的数据库系统(续) 优点 缺点 易于管理、控制与维护。
当终端用户数目增加到一定程度后,主机的任务会过分繁重,成为瓶颈,从而使系统性能下降。 系统的可靠性依赖主机,当主机出现故障时,整个系统都不能使用。

176 3. 分布式结构的数据库系统 数据库中的数据在逻辑上是一个整体,但物理地分布在计算机网络的不同结点上。
网络中的每个结点都可以独立处理本地数据库中的数据,执行局部应用 同时也可以同时存取和处理多个异地数据库中的数据,执行全局应用

177

178 分布式结构的数据库系统(续) 优点 缺点 适应了地理上分散的公司、团体和组织对于数据库应用的需求。
数据的分布存放给数据的处理、管理与维护带来困难。 当用户需要经常访问远程数据时,系统效率会明显地受到网络传输的制约。

179 把DBMS功能和应用分开 4.客户/服务器结构的数据库系统
与主从式结构的区别 主从式数据库系统中的主机和分布式数据库系统中的每个结点机既执行DBMS功能又执行应用程序。

180 客户/服务器数据库系统的种类 集中的服务器结构 分布的服务器结构 一台数据库服务器,多台客户机 在网络中有多台数据库服务器
分布的服务器结构是客户/服务器与 分布式数据库的结合

181 客户/服务器结构的优点 客户端的用户请求被传送到数据库服务器,数据库服务器进行处理后,只将结果返回给用户,从而显著减少了数据传输量
数据库更加开放 客户与服务器一般都能在多种不同的硬件和软件平台上运行 可以使用不同厂商的数据库应用开发工具

182 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域 1.6 小结

183 1.4 数据库系统的组成 数据库-仓库 数据库管理系统(及其开发工具)-管理制度、运行规则 应用系统-使用仓库的公司
数据库管理员-仓库管理员 (用户)-使用仓库的公司的人员

184 一、硬件平台及数据库 数据库系统对硬件资源的要求 (1) 足够大的内存-运行 操作系统 DBMS的核心模块 数据缓冲区 应用程序

185 数据库系统对硬件资源的要求 (2) 足够大的外存-存储 (3) 较高的通道能力,提高数据传送率-传输 磁盘 光盘、磁带、软盘 操作系统
DBMS 应用程序 数据库及其备份 光盘、磁带、软盘 数据备份 (3) 较高的通道能力,提高数据传送率-传输

186 二、软件 DBMS 操作系统 与数据库接口的高级语言及其编译系统 以DBMS为核心的应用开发工具 为特定应用环境开发的数据库应用系统

187 三、人员 数据库管理员-运行中的管理人员 系统分析员 数据库设计人员 开发人员 应用程序员 (最终用户)

188 1. 数据库管理员(DBA) 决定数据库中的信息内容和结构 决定数据库的存储结构和存取策略 定义数据的安全性要求和完整性约束条件

189 数据库管理员(续) 监控数据库的使用和运行 周期性转储数据库 数据文件 日志文件 系统故障恢复 介质故障恢复 监视审计文件

190 数据库管理员(续) 数据库的改进和重组 性能监控和调优 数据重组 数据库重构

191 2. 系统分析员 负责应用系统的需求分析和规范说明 与用户及DBA(数据库管理员)协商,确定系统的硬软件配置 参与数据库系统的概要设计

192 3. 数据库设计人员 参加用户需求调查和系统分析 确定数据库中的数据 设计数据库各级模式

193 4. 应用程序员 设计和编写应用系统的程序模块 进行调试和安装

194 5. 用户 偶然用户 企业或组织机构的高中级管理人员 简单用户 银行的职员、机票预定人员、旅馆总台服务员

195 用户(续) 复杂用户 工程师、科学家、经济学家、科技工作者等
直接使用数据库语言访问数据库,甚至能够基于数据库管理系统的API编制自己的应用程序

196 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域 1.6 小结

197 1.5 数据库技术的研究领域 数据库管理系统软件的研制 数据库设计--我们的应用重点 数据库理论--需要掌握的知识

198 数据库管理系统软件的研制 DBMS核心 一组相互联系的软件系统 工具软件 中间件

199 数据库设计 数据库设计方法 设计工具 设计理论 数据模型和数据建模

200 数据库理论 关系的规范化理论 关系数据理论

201 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 数据库技术的研究领域 1.6 小结

202 小结 数据库系统概述 数据库的基本概念 数据管理的发展过程 数据模型 数据模型的三要素 概念模型, E-R 模型 三种主要数据模型

203 小结(续) 数据库系统的结构 数据库系统三级模式结构 数据库系统的体系结构 数据库系统的组成

204 作业 教材习题P41: 第12题 第13题 参考教材P19-20的例子

205 第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结

206 关系数据库简介 系统而严格地提出关系模型的是美国IBM公司的E.F.Codd 1970年提出关系数据模型
E.F.Codd, “A Relational Model of Data for Large Shared Data Banks”, 《Communication of the ACM》,1970 之后,提出了关系代数和关系演算的概念 1972年提出了关系的第一、第二、第三范式 1974年提出了关系的BC范式

207 关系数据库简介 关系数据库应用数学方法来处理数据库中的数据 80年代后,关系数据库系统成为最重要、最流行的数据库系统

208 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第二章 关系数据库

209 本章概要 本章先介绍关系模型的基本概念; 然后介绍关系运算的三种理论:关系代数、关系演算和关系逻辑。

210 第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结

211 2.1 关系模型概述 关系数据库系统 是支持关系模型的数据库系统 关系模型的组成 关系数据结构 关系操作集合 关系完整性约束

212 1. 关系数据结构 单一的数据结构----关系 数据的逻辑结构----二维表 现实世界的实体以及实体间的各种联系均用关系来表示
从用户角度,关系模型中数据的逻辑结构是一张二维表。

213 用二维表格表示实体集,用关键码进行数据导航的数据模型称为关系模型。这里数据导航是指从已知数据查找未知数据的过程和方法。

214 2. 关系操作集合 1) 常用的关系操作 2) 关系操作的特点 3) 关系数据语言的种类 4) 关系数据语言的特点

215 关系操作集合(续) 1) 常用的关系操作 查询 数据更新 查询的表达能力是其中最主要的部分 选择、投影、连接、除、并、交、差
插入、删除、修改 查询的表达能力是其中最主要的部分

216 关系操作集合(续) 2) 关系操作的特点 集合操作方式,即操作的对象和结果都是集合。 非关系数据模型的数据操作方式:一次一记录
文件系统的数据操作方式

217 关系操作集合(续) 3) 关系数据语言的种类 1、关系代数语言 用对关系的运算来表达查询要求

218 关系操作集合(续) 关系数据语言的种类(续) 2、关系演算语言:用谓词来表达查询要求 元组关系演算语言 谓词变元的基本对象是元组变量
典型代表:APLHA, QUEL 域关系演算语言 谓词变元的基本对象是域变量 典型代表:QBE

219 具有关系代数和关系演算双重特点的语言 典型代表:SQL 是关系数据库的标准语言

220 关系代数语言 (ISBL) 元组关系演算语言(ALPHA、QUEL) 关系数据语言 关系演算语言 域关系演算语言(QBE) 具有关系代数和关系演算双重特点的语言SQL

221 关系操作集合(续) 4) 关系数据语言的特点 关系语言是一种高度非过程化的语言 能够嵌入高级语言中使用
存取路径的选择由DBMS的优化机制来完成 用户不必用循环结构就可以完成数据操作 能够嵌入高级语言中使用 关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价

222 3. 关系的三类完整性约束 实体完整性 参照完整性 用户定义的完整性 通常由关系系统自动支持 早期系统不支持,目前大型系统能自动支持
反映应用领域需要遵循的约束条件,体现了具体领域中的语义约束 用户定义后由系统支持

223 第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结

224 2.2 关系数据结构 关系模型建立在集合代数的基础上 关系数据结构的基本概念 关系 关系模式 关系数据库

225 2.2 关系数据结构 关系 关系模式 关系数据库

226 关系 ⒈ 域(Domain) 2. 笛卡尔积(Cartesian Product) 3. 关系(Relation)

227 ⒈ 域(Domain) 域是一组具有相同数据类型的值的集合。例: 整数 实数 介于某个取值范围的整数 长度指定长度的字符串集合
{‘男’,‘女’} 介于某个取值范围的日期 {张清玫,刘逸} {计算机专业,信息专业}

228 2. 笛卡尔积(Cartesian Product)
1) 笛卡尔积 给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为: D1×D2×…×Dn={(d1,d2,…,dn)|diDi,i=1,2,…,n} 所有域的所有取值的一个组合 不能重复

229 笛卡尔积(续) 例 给出三个域: D1=SUPERVISOR ={ 张清玫,刘逸 } D2=SPECIALITY={计算机专业,信息专业}
例 给出三个域: D1=SUPERVISOR ={ 张清玫,刘逸 } D2=SPECIALITY={计算机专业,信息专业} D3=POSTGRADUATE={李勇,刘晨,王敏} 则D1,D2,D3的笛卡尔积为: D1×D2×D3 = {(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨), (张清玫,计算机专业,王敏),(张清玫,信息专业,李勇), (张清玫,信息专业,刘晨),(张清玫,信息专业,王敏), (刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨), (刘逸,计算机专业,王敏),(刘逸,信息专业,李勇), (刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }

230 导师 专业 研究生 张清玫 计算机专业 李勇 刘晨 王敏 信息专业 刘逸 D3域 研究生集合 李勇 刘晨 王敏 D1域 导师集合 张清玫
专业集合 计算机专业 信息专业

231 笛卡尔积(续) 2) 元组(Tuple) 3) 分量(Component)
笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组。 3) 分量(Component) 笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量。

232 笛卡尔积(续) 4) 基数(Cardinal number)
若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为: 在上例中,基数:2×2×3=12,即D1×D2×D3共有2×2×3=12个元组

233 笛卡尔积(续) 5)笛卡尔积的表示方法 笛卡尔积可表示为一个二维表。表中的每行对应一个元组,表中的每列对应一个域。
在上例中,12个元组可列成一张二维表

234

235 3. 关系(Relation) 1) 关系 D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为
R(D1,D2,…,Dn) R:关系名 n:关系的目或度(Degree)

236 关系(续) 注意: 关系是笛卡尔积的有限子集。无限关系在数据库系统中是无意义的。 由于笛卡尔积不满足交换律,即
(d1,d2,…,dn )≠(d2,d1,…,dn ) 但关系满足交换律,即 (d1,d2 ,…,di ,dj ,…,dn)=(d1,d2 ,…,dj,di ,…,dn) (i,j = 1,2,…,n) 解决方法:为关系的每个列附加一个属性名以取消关系元组的有序性

237 关系(续) 例 在表2.1 的笛卡尔积中取出有实际意义的元组 来构造关系 关系:SAP(导师,专业,研究生)
例 在表2.1 的笛卡尔积中取出有实际意义的元组 来构造关系 关系:SAP(导师,专业,研究生) 关系名,属性名 假设:导师与专业:1:1,导师与研究生:1:n 于是:SAP关系可以包含三个元组 { (张清玫,信息专业,李勇), (张清玫,信息专业,刘晨), (刘逸,信息专业,王敏) }

238 关系(续) 2) 元组 3) 单元关系与二元关系 关系中的每个元素是关系中的元组,通常用t表示。
当n=1时,称该关系为单元关系(Unary relation)。 当n=2时,称该关系为二元关系(Binary relation)。

239 关系(续) 4) 关系的表示 关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。

240 关系(续) 5) 属性 关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。
n目关系必有n个属性。

241 关系(续) 6) 码 候选码(Candidate key) 若关系中的某一属性组的值能唯一地标识 一个元组,则称该属性组为候选码
在最简单的情况下,候选码只包含一个属性。 在最极端的情况下,关系模式的所有属性组 是这个关系模式的候选码,称为全码(All- key)

242 关系(续) 码(续) 主码 若一个关系有多个候选码,则选定其中一个 为主码(Primary key)
主码的诸属性称为主属性(Prime attribute)。 不包含在任何侯选码中的属性称为非码属性 (Non-key attribute)

243 关系(续) 7) 三类关系 基本关系(基本表或基表) 查询表 视图表 实际存在的表,是实际存储数据的逻辑表示 查询结果对应的表
由基本表或其他视图表导出的表,是虚表,不对 应实际存储的数据

244 8) 基本关系的性质 ① 列是同质的(Homogeneous) 每一列中的分量是同一类型的数据,来自同 一个域

245 ② 不同的列可出自同一个域 其中的每一列称为一个属性 不同的属性要给予不同的属性名 分清 “属性” 和 “域”。

246 基本关系的性质(续) 上例中也可以只给出两个域: 人(PERSON)=张清玫,刘逸,李勇,刘晨,王敏
专业(SPECIALITY)=计算机专业,信息专业 SAP关系的导师属性和研究生属性都从PERSON域中取值 为了避免混淆,必须给这两个属性取不同的属性名,而不能直接使 用域名。 例如定义: 导师属性名为SUPERVISOR-PERSON(或SUPERVISOR) 研究生属性名为POSTGRADUATE-PERSON(或POSTGRADUATE)

247 基本关系的性质(续) ③ 列的顺序无所谓, 列的次序可以任意交换
遵循这一性质的数据库产品(如ORACLE),增加新属性时,永远是插至最后一列 但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了属性顺序

248 基本关系的性质(续) ④ 任意两个元组不能完全相同 由笛卡尔积的性质决定 但许多关系数据库产品没有遵循这一性质。 例如:
Oracle,FoxPro等都允许关系表中存在两个完全相同的元组,除非用户特别定义了相应的约束条件。

249 基本关系的性质(续) ⑤ 行的顺序无所谓 行的次序可以任意交换 遵循这一性质的数据库产品(如ORACLE),插入一个元组时永远插至最后一行
但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了元组的顺序

250 基本关系的性质(续) ⑥ 分量必须取原子值 每一个分量都必须是不可分的数据项。 这是规范条件中最基本的一条

251 小结 域->笛卡尔积->关系(有限子集)->关系的目、元组t、二维表、属性、码、三种关系、基本关系的六个特点

252 2.2 关系数据结构 关系 关系模式 关系数据库

253 关系模式 1.什么是关系模式 2.定义关系模式 3. 关系模式与关系

254 1.什么是关系模式 关系模式(Relation Schema)是型 关系是值 关系模式是对关系的描述 元组集合的结构
属性构成 属性来自的域 属性与域之间的映象关系 元组语义以及完整性约束条件 属性间的数据依赖关系集合

255 2.定义关系模式 关系模式可以形式化地表示为: R(U,D,dom,F) R 关系名 U 组成该关系的属性名集合
D 属性组U中属性所来自的域 dom 属性向域的映象集合 F 属性间的数据依赖关系集合

256 定义关系模式 (续) 例: 导师和研究生出自同一个域——人, 取不同的属性名,并在模式中定义属性向域 的映象,即说明它们分别出自哪个域:
dom(导师-人) = dom(研究生-人) =PERSON

257 定义关系模式 (续) 关系模式通常可以简记为 R (U) 或 R (A1,A2,…,An) R 关系名 A1,A2,…,An 属性名
注:域名及属性向域的映象常常直接说明为 属性的类型、长度

258 3. 关系模式与关系 关系模式 关系 对关系的描述 静态的、稳定的 关系模式在某一时刻的状态或内容 动态的、随时间不断变化的
3. 关系模式与关系 关系模式 对关系的描述 静态的、稳定的 关系 关系模式在某一时刻的状态或内容 动态的、随时间不断变化的 关系模式和关系往往统称为关系 通过上下文加以区别

259 2.2 关系数据结构 关系 关系模式 关系数据库

260 关系数据库 1. 关系数据库 2. 关系数据库的型与值

261 1. 关系数据库 在一个给定的应用领域中,所有实体及实 体之间联系的关系的集合构成一个关系数 据库。

262 2. 关系数据库的型与值 关系数据库也有型和值之分 关系数据库的型称为关系数据库模式,是对关系数据库的描述
若干域的定义 在这些域上定义的若干关系模式 关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库

263 第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结

264 2.3 关系的完整性 关系模型的完整性规则是对关系的某种约束条件。 关系模型中三类完整性约束: 实体完整性 参照完整性 用户定义的完整性
2.3 关系的完整性 关系模型的完整性规则是对关系的某种约束条件。 关系模型中三类完整性约束: 实体完整性 参照完整性 用户定义的完整性 实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。

265 关系的完整性(续) 2.3.1 实体完整性 参照完整性 用户定义的完整性

266 2.3.1 实体完整性 实体完整性规则(Entity Integrity) 若属性A是基本关系R的主属性,则属性 A不能取空值 例
SAP(导师,专业,研究生) 研究生属性为主码 (假设研究生不会重名),则其不能取空值

267 实体完整性(续) 关系模型必须遵守实体完整性规则的原因
(1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集或多对多联系。 (2) 现实世界中的实体和实体间的联系都是可区分的,即它们具有某种唯一性标识。 (3) 相应地,关系模型中以主码作为唯一性标识。

268 实体完整性(续) (4) 主码中的属性即主属性不能取空值。 空值就是“不知道”或“无意义”的值。 反证法:
主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。

269 基本关系 -- 现实世界的实体集 主码为关系的唯一标识 -- 现实世界实体是可区分 (没有相同的指纹、 我爱的你是唯一的) 所以:主码中的属性(主属性不能取空值)

270 实体完整性(续) 注意 实体完整性规则规定基本关系的所有 主属性都不能取空值 例 选修(学号,课程号,成绩)
“学号、课程号”为主码,则两个属性都不能取空值。

271 关系的完整性 2.3.1 实体完整性 参照完整性 用户定义的完整性

272 2.3.2 参照完整性 1. 关系间的引用 2. 外码 3. 参照完整性规则

273 1. 关系间的引用 在关系模型中实体及实体间的联系都是用 关系来描述的,因此可能存在着关系与关 系间的引用。

274 两个关系之间 例1 学生实体、专业实体以及专业与学生 间的一对多联系 学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名)

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

276 三个关系 例2 学生、课程、学生与课程之间的多对 多联系 学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分)
例2 学生、课程、学生与课程之间的多对 多联系 学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩)

277 学生 课程 学生选课

278 同一个关系 例3 学生实体及其内部的领导联系(一对多) 学生(学号,姓名,性别,专业号,年龄,班长)

279 2.外码(Foreign Key) 设F是基本关系R的一个或一组属性,但不 是关系R的码。如果F与基本关系S的主码
Ks相对应,则称F是基本关系R的外码 基本关系R称为参照关系(Referencing Relation) 基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)。

280 例子1: 学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名) 学生关系 ----------专业关系 专业号 参照的关系
被参照的关系

281 例子2:学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩)
学生关系 < 选修关系---课程关系 被参照的关系 被参照的关系 参照的关系

282 例3 学生实体及其内部的领导联系(一对多) 学生(学号,姓名,性别,专业号,年龄,班长) 学生关系 参照的关系 被参照的关系

283 外码(续) 说明 1、关系R和S不一定是不同的关系 2、目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上
3、外码并不一定要与相应的主码同名。 通常:当外码与相应的主码属于不同关系时,往往 取相同的名字,以便于识别

284 3. 参照完整性规则 若属性(或属性组)F是基本关系R的外码 它与基本关系S的主码Ks相对应(基本关 系R和S不一定是不同的关系),则对
于R中每个元组在F上的值必须为:  或者取空值(F的每个属性值均为空值)  或者等于S中某个元组的主码值。

285 参照完整性规则(续) 例子1:学生关系中每个元组的“专业号”属性只取下面两类值: (1)空值,表示尚未给该学生分配专业
(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中

286 参照完整性规则(续) 例子2:选修(学号,课程号,成绩) “学号”和“课程号”是选修关系中的主属性 按照实体完整性和参照完整性规则,它们
只能取相应被参照关系中已经存在的主码

287 参照完整性规则(续) 例子3:学生(学号,姓名,性别,专业号,年龄,班长) “班长”属性值可以取两类值:
(1)空值,表示该学生所在班级尚未选出班长,或该学生本人即是班长; (2)非空值,这时该值必须是本关系中某个元组的学号值

288 参照完整性小结: 关系和关系之间有引用(三个关系、二个关系、单个关系) 外码 参照完整性规则

289 关系的完整性(续) 2.3.1 实体完整性 参照完整性 用户定义的完整性

290 2.3.3 用户定义的完整性 用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。

291 用户定义的完整性(续) 例: 课程(课程号,课程名,学分) “课程名”属性必须取唯一值 非主属性“课程名”也不能取空值
“学分”属性只能取值{1,2,3,4}

292 小结 关系数据结构 关系 笛卡尔积 关系,属性,元组 候选码,主码,主属性 基本关系的性质 关系模式 关系数据库

293 关系的数据操作集合 查询 选择、投影、连接、除、并、交、差 数据更新 插入、删除、修改

294 关系的完整性约束 实体完整性 参照完整性 外码 用户定义的完整性

295 4 关系模型的操作 4.1 关系代数 Operation 运算,操作 Operator 算子 Operand 操作数

296 第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结

297 2.4 关系代数 概述 传统的集合运算 专门的关系运算

298 概述 1. 关系代数 2. 运算的三要素 3. 关系代数运算的三个要素 4. 关系代数运算的分类 5. 表示记号

299 概述 1.关系代数 一种抽象的查询语言 用对关系的运算来表达查询

300 概述(续) 2.关系代数运算的三个要素 运算对象:关系 运算结果:关系 运算符:四类

301 概述(续) 集合运算符 专门的关系运算符 算术比较符 逻辑运算符 将关系看成元组的集合 运算是从关系的“水平”方向即行的角度来进行
不仅涉及行而且涉及列 算术比较符 辅助专门的关系运算符进行操作 逻辑运算符

302 概述(续) 表2.4 关系代数运算符 运算符 含义 集合 运算 符 ∪ - ∩ × 并 差 交 广义笛卡尔积 比较运算符 > ≥ < ≤
表2.4 关系代数运算符 运算符 含义 集合 运算 - × 广义笛卡尔积 比较运算符 = ≠ 大于 大于等于 小于 小于等于 等于 不等于 专门的关系 运算符 σ π ÷ 选择 投影 连接 逻辑运算符

303 概述(续) 4.关系代数运算的分类 传统的集合运算 并、差、交、广义笛卡尔积 专门的关系运算 选择、投影、连接、除

304 概述(续) 5.表示记号 (1) R,tR,t[Ai] 设关系模式为R(A1,A2,…,An)
它的一个关系设为R。tR表示t是R的一个元组 t[Ai]则表示元组t中相应于属性Ai的一个分量

305 概述(续) (2) A,t[A], A 若A={Ai1,Ai2,…,Aik},其中Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,则A称为属性列或域列。t[A]=(t[Ai1],t[Ai2],…,t[Aik])表示元组t在属性列A上诸分量的集合。A则表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组。

306 概述(续) (3) tr ts R为n目关系,S为m目关系。tr R,tsS, tr ts称为元组的连接。它是一个n + m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。

307 概述(续) 4)象集Zx 给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集(Images Set)为:
Zx={t[Z]|t R,t[X]=x} 它表示R中属性组X上值为x的诸元组在Z上分量的集合。

308 除(续) R B C b1 c2 b2 C3 c1 A B C a1 b1 c2 a2 b3 c7 a3 b4 c6 b2 c3 a4 b6

309 分析: 在关系R中,A可以取四个值 {a1,a2,a3,a4} a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}

310 2.4 关系代数   概述   传统的集合运算   专门的关系运算

311 传统的集合运算 广义笛卡尔积

312 1. 并(Union) R和S R∪S 具有相同的目n(即两个关系都有n个属性) 相应的属性取自同一个域
R∪S = { t|t  R∨t S }

313 并(续) R R∪S S A B C a1 b1 c1 b2 c2 a2 A B C a1 b1 c1 b2 c2 b3 a2 A B C

314 R RUS S

315 2. 差(Difference) R和S R - S R -S = { t|tR∧tS } 具有相同的目n 相应的属性取自同一个域
仍为n目关系,由属于R而不属于S的所有元组组成  R -S = { t|tR∧tS }

316 差(续) R R-S S S-R? A B C a1 b1 c1 b2 c2 a2 A B C a1 b1 c1 A B C a1 b2

317 R-S R S

318 3. 交(Intersection) R和S R∩S 具有相同的目n 相应的属性取自同一个域 仍为n目关系,由既属于R又属于S的元组组成
R∩S = { t|t  R∧t S } R∩S = R –(R-S)

319 交 (续) R R ∩ S S A B C a1 b1 c1 b2 c2 a2 A B C a1 b2 c2 a2 c1 A B C a1

320 R∩S R S

321 4. 广义笛卡尔积(Extended Cartesian Product)
n目关系,k1个元组 S m目关系,k2个元组 R×S 列:(n+m)列的元组的集合 元组的前n列是关系R的一个元组 后m列是关系S的一个元组 行:k1×k2个元组 R×S = {tr ts |tr R ∧ tsS }

322 广义笛卡尔积 (续) a1 b1 c1 b2 c2 a2 a1 b2 c2 b3 a2 c1 R S R × S R.A R.B R.C
S.A S.B S.C a1 b2 c2 b3 a2 c1 A B C a1 b1 c1 b2 c2 a2 R R × S A B C a1 b2 c2 b3 a2 c1 S

323 2.4 关系代数 概述 传统的集合运算 专门的关系运算

324 2.4.2 专门的关系运算 选择 投影 连接

325 1. 选择(Selection) 1) 选择又称为限制(Restriction)
2)选择操作是根据某些条件对关系做水平分割,即选取符合条件的元组。

326 3) 选择运算符的含义 在关系R中选择满足给定条件的诸元组 σF(R) = {t|tR∧F(t)= '真'} F称为条件表达式。包括:
运算对象:常数(用引号括起来),元组分量(属性名或列的序号) 运算符:算术比较运算符( θ)、逻辑运算符( ∧或∨,  )

327 F:选择条件,是一个逻辑表达式,基本形式为: [( ] X1θY1 [ )][φ [( ] X2θY2 [ )]]…
θ:比较运算符(>,≥,<,≤,=或<>) X1,Y1等:属性名、常量、简单函数;属性名也可以用它的序号来代替; φ:逻辑运算符(∧或∨) [ ]:表示任选项 …:表示上述格式可以重复下去

328 [( ] X1θY1 [ )][φ [( ] X2θY2 [ )]]…
分解: X1θY 例子: Sdept = ‘CS'  ( X1θY1 ) 例子: ( Sdept = ‘CS' ) X2θY 例子:Sage>20 (X1θY1) φ ( X2θY2 ) 例子:(Sdept = ‘CS’ ) ∧(Sage>20)

329 选择(续) 4) 选择运算是从行的角度进行的运算 5) 举例
设有一个学生-课程数据库,包括学生关系Student、课程关系Course和选修关系SC。 σ

330 选择(续) Student 学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所 在 系 Sdept 95001 李勇
学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所 在 系 Sdept 95001 李勇 20 CS 95002 刘晨 19 IS 95003 王敏 18 MA 95004 张立 Student (a) 例1 例2 例3 例4 例9

331 选择(续) Course 课程号 课程名 先行课 学分 Cno Cname Cpno Ccredit 1 数据库 5 4 2 数学 3
3 信息系统 操作系统 6 数据结构 7 数据处理 PASCAL语言 Course (b) 例9

332 选择(续) SC 学 号 课 程 号 成 绩 Sno Cno Grade 95001 1 92 2 85 3 88 95002 90 80
选择(续) 学 号 课 程 号 成 绩 Sno Cno Grade 95001 1 92 2 85 3 88 95002 90 80 SC (c) 例7 例9

333 选择(续) [例1] 查询信息系(IS系)全体学生 σSdept = 'IS' (Student) 或 σ5 ='IS' (Student)
结果: Sno Sname Ssex Sage Sdept 95002 刘晨 19 IS 95004 张立

334 选择(续) [例2] 查询年龄小于20岁的学生 σSage < 20(Student) 或 σ4 < 20(Student)
[例2] 查询年龄小于20岁的学生 σSage < 20(Student) 或 σ4 < 20(Student) 结果: Sno Sname Ssex Sage Sdept 95002 刘晨 19 IS 95003 王敏 18 MA 95004 张立

335 2. 投影(Projection) 1)投影运算符的含义 从R中选择出若干属性列组成新的关系 πA(R) = { t[A] | t R }
这个操作是对一个关系进行垂直分割,消去某些列,并重新安排列的顺序。

336 2. 投影(Projection) 2)投影操作主要是从列的角度进行运算
但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行) π

337 投影(续) 3) 举例 [例3] 查询学生的姓名和所在系 即求Student关系上学生姓名和所在系两个属性上的投影
[例3] 查询学生的姓名和所在系 即求Student关系上学生姓名和所在系两个属性上的投影 πSname,Sdept(Student) 或 π2,5(Student) 结果:

338 投影(续) Sname Sdept 李勇 CS 刘晨 IS 王敏 MA 张立

339 投影(续) [例4] 查询学生关系Student中都有哪些系 πSdept(Student) 结果: Sdept CS IS MA

340 3. 连接(Join) 1)连接也称为θ连接 2)连接运算的含义 从两个关系的笛卡尔积中选取属性间满足一定条件的元组 AθB
R S = { | tr  R∧ts S∧tr[A]θts[B] } A和B:分别为R和S上度数相等且可比的属性组 θ:比较运算符  AθB tr ts

341 连接运算: 从R和S的广义笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系的元组。

342 连接(续) 3)两类常用连接运算 等值连接(equijoin) 什么是等值连接 θ为“=”的连接运算称为等值连接 等值连接的含义
从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为: R S = { | tr R∧ts S∧tr[A] = ts[B] } A=B tr ts

343 连接(续) 自然连接(Natural join) R S = { | tr R∧ts S∧tr[B] = ts[B] } 什么是自然连接
自然连接是一种特殊的等值连接 两个关系中进行比较的分量必须是相同的属性组 在结果中把重复的属性列去掉 自然连接的含义 R和S具有相同的属性组B R S = { | tr R∧ts S∧tr[B] = ts[B] } tr ts

344 连接(续) 4)一般的连接操作是从行的角度进行运算。 自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。 AθB R S

345 连接(续) 5)举例 [例5] R S B E b1 3 b2 7 b3 10 2 b5 A B C a1 b1 5 b2 6 a2 b3
8 b4 12 R S

346 连接(续) C<E R S A R.B C S.B E a1 b1 5 b2 7 b3 10 6 a2 8

347 连接(续) R.B=S.B 等值连接 R S A R.B C S.B E a1 b1 5 3 b2 6 7 a2 b3 8 10 2

348 连接(续) 自然连接 R S A B C E a1 b1 5 3 b2 6 7 a2 b3 8 10 2

349 笛卡尔积:R×S = {tr ts |tr R ∧ tsS }
连接(θ):R S = { | tr  R∧ts S∧tr[A]θts[B] } 等值连接:R S = { | tr R∧ts S∧tr[A] = ts[B] } 自然连接: R S = { | tr R∧ts S∧tr[B] = ts[B] } AθB tr ts A=B tr ts tr ts

350 4)象集Z 给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集(Images Set)为:
Zx={t[Z]|t R,t[X]=x} 它表示R中属性组X上值为x的诸元组在Z上分量的集合。

351 象集Z S R A B C a1 b1 c2 a2 b3 c7 a3 b4 c6 b2 c3 a4 b6 c1 B C D b1 c2 d1
R÷S A a1

352 4. 除(Division) R÷S = {tr [X] | tr  R∧πY (S)  Yx }
给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。 R中的Y与S中的Y可以有不同的属性名,但必须出自相同 的域集。R与S的除运算得到一个新的关系P(X),P是R中 满足下列条件的元组在X属性列上的投影:元组在X上分 量值x的象集Yx包含S在Y上投影的集合。 R÷S = {tr [X] | tr  R∧πY (S)  Yx } Yx:x在R中的象集,x = tr[X]

353 分析: 1、前提:两个关系R(X,Y)和S(Y,Z)应该有公共属性列。 2、运算的结果:为P(X),元组来自于R关系,只包含X属性列 3、R关系中的哪些元组呢? 对于t[X]的象集包含πY (S)

354 除(续) 2)除操作是同时从行和列角度进行运算 3)举例   [例6] (p62) ÷ R S

355 除(续) S R A B C a1 b1 c2 a2 b3 c7 a3 b4 c6 b2 c3 a4 b6 c1 B C D b1 c2
R÷S A a1

356 分析: 在关系R中,A可以取四个值{a1,a2,a3,a4} S在(B,C)上的投影为 只有a1的象集包含了S在(B,C)属性组上的投影
a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}  a2的象集为 {(b3,c7),(b2,c3)}  a3的象集为 {(b4,c6)}  a4的象集为 {(b6,c6)} S在(B,C)上的投影为 {(b1,c2),(b2,c1),(b2,c3) } 只有a1的象集包含了S在(B,C)属性组上的投影 所以 R÷S ={a1}

357 除(续) S R A B C a1 b1 c2 a2 b3 c7 a3 b4 c6 b2 c3 a4 b6 c1 B C b1 c2 b2
R÷S A a1

358 分析: 在关系R中,A可以取四个值{a1,a2,a3,a4} S在(B,C)上的投影为 只有a1的象集包含了S在(B,C)属性组上的投影
a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}  a2的象集为 {(b3,c7),(b2,c3)}  a3的象集为 {(b4,c6)}  a4的象集为 {(b6,c6)} S在(B,C)上的投影为 {(b1,c2),(b2,c1),(b2,c3) } 只有a1的象集包含了S在(B,C)属性组上的投影 所以 R÷S ={a1}

359 ? R表示选修课程 S1、S2、S3表示课程情况 R R÷S 1 S1 S2 R÷S 2 S3 R÷S 3 SNO SNAME S1 BAO
GU S3 AN S4 LI SNO SNAME CNO CNAME S1 BAO C1 DB C2 OS C3 DS C4 MIS S2 GU S3 AN S4 LI CNO CNAME C2 OS S2 CNO CNAME C2 OS C4 MIS R÷S 2 SNO SNAME S1 BAO S4 LI S3 CNO CNAME C1 DB C2 OS C4 MIS R÷S 3 SNO SNAME S1 BAO

360 除法的含义: R÷S 1表示至少选修S1关系中列出课程的学生的学号和姓名

361 类似 X中谁的象集包含Y这张表

362 A B C D a b c d e f h k l K A B a b c k C D c d e f R÷S S R

363 总结: 一共八种运算: 五种基本运算:并、差、笛卡尔积、选择、投影 三种组合运算:交、连接、除 关系代数表达式:
关系代数运算经有限次复合后形成的式子

364 举例: Student 学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所 在 系 Sdept 95001 李勇 男
学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所 在 系 Sdept 95001 李勇 20 CS 95002 刘晨 19 IS 95003 王敏 18 MA 95004 张立 Student

365 Course 课程号 课程名 先行课 学分 Cno Cname Cpno Ccredit 1 数据库 5 4 2 数学 3 信息系统
3 信息系统 操作系统 6 数据结构 7 数据处理 PASCAL语言 Course

366 学 号 课 程 号 成 绩 Sno Cno Grade 95001 1 92 2 85 3 88 95002 90 80 SC

367 5.综合举例 以学生-课程数据库为例 (P.59) [例7] 查询至少选修1号课程和3号课程的学生号码 Cno 首先建立一个临时关系K:
[例7] 查询至少选修1号课程和3号课程的学生号码  首先建立一个临时关系K: 然后求:πSno.Cno(SC)÷K Cno 1 3

368 综合举例(续) 例 7续 πSno.Cno(SC) 95001象集{1,2,3} 95002象集{2,3} πCno(K)={1,3}
于是:πSno.Cno(SC)÷K={95001} Sno Cno 95001 1 2 3 95002

369 综合举例(续) [例 8] 查询选修了2号课程的学生的学号。 πSno(σCno='2'(SC)) ={ 95001,95002} 

370 综合举例(续) [例9] 查询至少选修了一门其直接先行课为5号课程的课程的学生姓名。 或
[例9] 查询至少选修了一门其直接先行课为5号课程的课程的学生姓名。 πSname(σCpno='5'(Course SC Student)) πSname(σCpno='5'(Course) SC πSno,Sname(Student)) πSname (πSno (σCpno='5' (Course) SC) πSno,Sname (Student)) 

371 综合举例(续) [例10] 查询选修了全部课程的学生号码和姓名。
[例10] 查询选修了全部课程的学生号码和姓名。 πSno,Cno(SC)÷πCno(Course) πSno,Sname(Student)

372 两种题型: 给出具体数据库和关系代数表达式,求出结果。 给出数据库的关系模式和查询要求,要求写出关系代数表达式。

373 应用实例: 设教学数据库中有三个关系: 要求用关系表达式表达查询语句。 学生关系 S(S#,SNAME,AGE,SEX)
课程关系C(C#,CNAME,TEACHER) 选课关系SC(S#,C#,GRADE) 要求用关系表达式表达查询语句。

374 举例: S 学号 姓名 性别 年龄 S# SNAME SEX AGE 95001 李勇 男 20 95002 刘晨 女 19 95003
王敏 18 95004 张立

375 选择(续) C 课程号 课程名 教师 C# CNAME TEACHER C1 数据库 张清玫 C2 数学 刘逸 C3 信息系统 丁宝康 C4
操作系统 孙钟秀 C5 数据结构 殷人昆 C6 数据处理 王珊 C7 PASCAL语言 施伯乐 C

376 选择(续) 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80 SC

377 ∏S#,GRADE(σC#=‘C2’(SC))
然后再列出其学号与成绩 σC#=‘C2’(SC) ∏S#,GRADE(σC#=‘C2’(SC))

378 SC 学 号 课 程 号 成 绩 S# C# Grade 95001 C1 92 95001 C2 85 学 号 课 程 号 成 绩 S#
学 号 课 程 号 成 绩 S# C# Grade 95001 C1 92 95001 C2 85 学 号 课 程 号 成 绩 S# C# Grade 95001 C1 92 C2 85 C3 88 95002 90 80 σC#=‘C2’(SC) 95001 C3 88 95002 C2 90 95002 C3 80 成 绩 学 号 S# Grade 85 95001 SC 90 95002 ∏S#,GRADE(σC#=‘C2’(SC))

379 ∏S#, SNAME(σC#=‘C2’(S SC))
然后再列出其学号与姓名 σC#=‘C2’(S SC) ∏S#, SNAME(σC#=‘C2’(S SC))

380 举例: S SC 学 号 课 程 号 成 绩 S# C# Grade 95001 C1 92 C2 85 C3 88 95002 90 80
学 号 课 程 号 成 绩 S# C# Grade 95001 C1 92 C2 85 C3 88 95002 90 80 S# Sname Ssex Sage Sdept 95001 李勇 20 CS 95002 刘晨 19 IS 95003 王敏 18 MA 95004 张立 S# Sname Ssex Sage Sdept C# Grade 95001 李勇 20 CS C1 92 C2 85 C3 88 95002 刘晨 19 IS 90 80 S SC

381 S# Sname Ssex Sage Sdept C# Grade 95001 李勇 20 CS C1 92 C2 85 C3 88 95002 刘晨 19 IS 90 80 σC#=‘C2’(S SC)

382 ∏S#, SNAME(σC#=‘C2’(S SC))
S# Sname Ssex Sage Sdept C# Grade 95001 李勇 20 CS C2 85 95002 刘晨 19 IS 90 ∏S#, SNAME(σC#=‘C2’(S SC)) S# Sname 95001 李勇 95002 刘晨 学习C2课程的学生学号与姓名

383 (3)检索选修课程名为数学的学生学号与姓名
选修、课程名、姓名 (S SC C) 选修课程名为数学的学生 σCNAME=‘数学’(S SC C)) 最后 取出学生的学号与姓名 ∏S#, SNAME(σCNAME=‘数学’(S SC C))

384 检索选修课程名为数学的学生学号与姓名 学号 姓名 性别 年龄 S# SNAME SEX AGE 95001 李勇 男 20 95002 刘晨
19 95003 王敏 18 95004 张立 课程号 课程名 教师 C# CNAME TEACHER C1 数据库 张清玫 C2 数学 刘逸 C3 信息系统 丁宝康 C4 操作系统 孙钟秀 C5 数据结构 殷人昆 C6 数据处理 王珊 C7 PASCAL语言 施伯乐 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80

385 C S SC S# Sname Ssex Sage Sdept C# Grade 95001 李勇 男 20 CS C1 92 C2 85
88 95002 刘晨 19 IS 90 80 课程号 课程名 教师 C# CNAME TEACHER C1 数据库 张清玫 C2 数学 刘逸 C3 信息系统 丁宝康 C4 操作系统 孙钟秀 C5 数据结构 殷人昆 C6 数据处理 王珊 C7 PASCAL语言 施伯乐 C S SC

386 S SC C S# Sname Ssex Sage Sdept C# Grade CNAME TEACHER 95001 李勇 男 20
92 数据库 张清玫 C2 85 数学 刘逸 C3 88 信息系统 丁宝康 95002 刘晨 19 IS 90 80 S SC C

387 选修课程名为数学的学生 最后 取出学生的学号与姓名 σCNAME=‘数学’(S SC C))
Sname Ssex Sage Sdept C# Grade CNAME TEACHER 95001 李勇 20 CS C1 92 数据库 张清玫 C2 85 数学 刘逸 C3 88 信息系统 丁宝康 95002 刘晨 19 IS 90 80 最后 取出学生的学号与姓名 ∏S#, SNAME(σCNAME=‘数学’(S SC C))

388 (4)检索选修课程号为C2或C4的学生学号 只涉及到一个表 SC 选修课程号为C2或C4的学生 最后 取出学生的学号
σC#=‘C2’ ∨C#=‘C4’ (SC) 最后 取出学生的学号 ∏S#(σC#=‘C2’ ∨C#=‘C4’ (SC))

389 选修课程号为C2或C4的学生 最后 取出学生的学号 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3
σC#=‘C2’ ∨C#=‘C4’ (SC) 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80 最后 取出学生的学号 ∏S#(σC#=‘C2’ ∨C#=‘C4’ (SC))

390 (5)检索至少选修课程号为C2和C3的学生学号
成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80

391 方法1 只涉及到一个表,但不能直接用∧ 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88
σC#=‘C2’ ∧ C#=‘C3’ (SC) 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80 SC

392 SC×SC 笛卡尔积将垂直的条件展开为水平的条件。

393 SC1 SC2 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80

394 选修课程号为C2和C3的学生 最后 取出学生的学号 σ1=4 ∧ 2=‘C2’ ∧5=‘C3’ (SC×SC)

395 方法2 考虑用除法来做 构造一个临时表 至少选修课程号为“C2”和“C3”的关系(表) 课程号 课程名 教师 C# CNAME
TEACHER C1 数据库 张清玫 C2 数学 刘逸 C3 信息系统 丁宝康 C4 操作系统 孙钟秀 C5 数据结构 殷人昆 C6 数据处理 王珊 C7 PASCAL语言 施伯乐 构造一个临时表 K=∏C#(σC#=‘C2’ ∨ C#=‘C3’ (C)) C# C2 C3

396 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80 S# C# 95001
∏ S#,C#(SC) ∏ S#,C#(SC) ÷ K 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80 K S# 95001 95002 C# C2 C3

397 (6)检索不学C2课的学生姓名与年龄 首先考虑“差”的问题 先求出全体学生的姓名和年龄, 再求出学了C2课的学生的姓名和年龄, 最后执行两个集合的差操作。

398 全体学生的姓名和年龄 ∏ SNAME,AGE(S)
学了C2课的学生的姓名和年龄-第二题 ∏SNAME,AGE(σC#=‘C2’(S SC)) 最后 求差 ∏ SNAME,AGE(S) -∏SNAME,AGE(σC#=‘C2’(S SC))

399 A、学生选课情况可用: ∏ S#,C#(SC)
(7)检索学习全部课程的学生姓名 A、学生选课情况可用: ∏ S#,C#(SC) 学号 课程号 成绩 S# C# GRADE 95001 C1 92 C2 85 C3 88 95002 90 80

400 B、全部课程: ∏ C#(C) 课程号 课程名 教师 C# CNAME TEACHER C1 数据库 张清玫 C2 数学 刘逸 C3
信息系统 丁宝康 C# C1 C2 C3

401 C、学习全部课程的学生学号可用除法表示,操作结果是学号S#集。 ∏ S#,C#(SC) ÷ ∏ C#(C)
95001

402 D、从S#求学生姓名SNAME,可以用自然连接和投影操作组合而成:
∏ SNAME(S (∏ S#,C#(SC) ÷ ∏ C#(C) )) 本例中只有一个学生的学号,好像可以从S表中直接查询,其实不行,因为在其他的例子中可能不只一个学生,而是多个学生的学号,仍然必须要做连接操作

403 (8)检索所学课程包含学生S3所学课程的学生学号
A、学生选课情况可用操作∏ S#,C#(SC) B、学生S3所学课程可用操作 ∏ C#(σs#=‘s3’(SC) C、所学课程包含学生S3所学课程的学生学号,用除法操作求得: ∏ S#,C#(SC) ÷ ∏ C#(σs#=‘s3’(SC)

404 总结: 查询语句的关系表达式一般形式是: ∏…(σ…(R×S))或者 ∏…(σ…(R S)) 解释:首先涉及到的关系取来,执行笛卡尔积或自然连接操作得到一张大的表格,然后对大表格执行水平分割(选择操作)和垂直分割(投影操作)。

405 但是当查询涉及到否定或全部值时,上述形式就不能表达了,就要用到差操作或除操作。

406 作业 1、教材习题5 2、设有三个关系:S(S#,SNAME,AGE,SEX),SC(S#,C#,CNAME),C(C#,CNAME,TEACHER),试用关系代数表达式表示下列查询语句: 1)检索LIU老师所授课程的课程号和课程名 2)检索年龄大于23岁的男学生的学号和姓名 3)检索学号为S3学生所学课程的课程名与任课教师名 4)检索至少选修LIU老师所授课程中一门课的女学生姓名 5)检索WANG同学不学的课程的课程号 6)检索至少选修两门课的学生学号 7)检索全部学生都选修的课程的课程号与课程名 8)检索选修课程包含LIU老师所授全部课程的学生学号

407 小结 l 关系代数运算 关系代数运算 基本运算 交、连接、除 并、差、交、笛卡尔积、投影、选择、连接、除 并、差、笛卡尔积、投影、选择
可以用5种基本运算来表达 引进它们并不增加语言的能力,但可以简化表达

408 小结(续) l 关系代数表达式 l 典型关系代数语言 关系代数运算经有限次复合后形成的式子
ISBL(Information System Base Language) 由IBM United Kingdom研究中心研制 用于PRTV(Peterlee Relational Test Vehicle)实验系统

409 (2)“检索不学C2课的学生姓名”,决不能用下式表示:
πSNAME,AGE(σC#≠'C2'(S⋈SC)) 一定要用“差”的形式: πSNAME,AGE(S)-πSNAME,AGE(σC#='C2'(S⋈SC))

410 (3)“检索学习全部课程的学生学号”,要用πS#,C#(SC)÷πC#(C)表示,
而不能写成 πS# (SC÷πC#(C))形式。这是因为一个学生学的课程的成绩可能是不一样的。

411 关系代数的几个扩充操作 改名:ρs(R) 广义投影: ∏S#, Grade*1.05(σC#=‘C4’(SC))

412 外连接(outer join) A B C D a b c d e f null g B C D b c d e a f g A B C D
S R S R S A B C D a b c d e null f g A B C D a b c d e f null R S R S

413 外部并(outer union) A B C D a b c null f d e g

414 第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结

415 2.5 关系演算 关系演算 种类:按谓词变元不同分类 以数理逻辑中的谓词演算为基础 1.元组关系演算: 以元组变量作为谓词变元的基本对象
2.5 关系演算 关系演算 以数理逻辑中的谓词演算为基础 种类:按谓词变元不同分类 1.元组关系演算: 以元组变量作为谓词变元的基本对象 元组关系演算语言ALPHA 2.域关系演算: 以域变量作为谓词变元的基本对象 域关系演算语言QBE

416 元组 关系演算 在元组关系演算(Tuple Relational Calculus)中,元组 关系演算表达式简称为元组表达式,其一般形式为
{ t | P(t)} 其中,t是元组变量,表示一个元数固定的元组;P是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表达式。 { t | P(t)}表示:满足公式P的所有元组t的集合。

417 元组关系演算 (4) (a)、(b)是关系R和S,(c)~(g)分别是下面五个元组表达式的值 元组关系演算的例子
R1 = { t | S(t)∧t[1]>2 } R2 = { t | R(t)∧┐S(t)} R3 = { t |(u)(S(t)∧R(u)∧t[3]<u[2]}} R4 = { t |(u)(R(t)∧ S(u)∧t[3]>u[1])} R5 = { t |(u)(v)(R(u)∧ S(v)∧u[1]>v[2]∧t[1]=u[2]∧t[2]=v[3]∧t[3]=u[1])}

418 元组关系演算 关系代数表达式到元组表达式的转换 例 R∪S可用{ t | R(t)∨S(t)}表示;
R×S可用{ t |(u)(v)(R(u)∧S(V) ∧t[1]=u[1] ∧t[2]=u[2]∧t[3]=u[3]∧t[4]=v[1] ∧t[5]=v[2] ∧t[6]=v[3])} 表示。 设投影操作是π2,3(R),那么元组表达式可写成: { t |(u)(R(u)∧t[l]=u[2]∧t[2]=u[3])} 选择σF(R)可用{ t |R(t)∧F'}表示,F'是F的等价表示形式。譬如σ2='d'(R)可写成{ t |(R(t)∧t[2]='d')。

419 2.5.1 元组关系演算语言ALPHA 由E.F.Codd提出 语句 INGRES所用的QUEL语言是参照ALPHA语言研制的 检索语句
GET 更新语句 PUT,HOLD,UPDATE,DELETE,DROP

420 一、检索操作 语句格式: GET 工作空间名 [(定额)](表达式1) [:操作条件] [DOWN/UP 表达式2]
 语句格式: GET 工作空间名 [(定额)](表达式1) [:操作条件] [DOWN/UP 表达式2]  定额:规定检索的元组个数 格式: 数字 表达式1:指定语句的操作对象 格式: 关系名| 关系名. 属性名| 元组变量. 属性名| 集函数 [,… ] 操作条件:将操作结果限定在满足条件的元组中 格式: 逻辑表达式 表达式2:指定排序方式 格式: 关系名. 属性名| 元组变量. 属性名[,… ]

421 检索操作 (续) (1) 简单检索(即不带条件的检索) (2) 限定的检索(即带条件的检索) (3) 带排序的检索 (4) 带定额的检索
(5) 用元组变量的检索 (6) 用存在量词的检索

422 检索操作 (续) (7) 带有多个关系的表达式的检索 (8) 用全称量词的检索 (9) 用两种量词的检索
(10) 用蕴函(Implication)的检索 (11) 集函数

423 (1)简单检索 GET 工作空间名 (表达式1) [例1] 查询所有被选修的课程号码。 GET W (SC.Cno)
[例1] 查询所有被选修的课程号码。 GET W (SC.Cno)  [例2] 查询所有学生的数据。 GET W (Student)

424 (2)限定的检索 格式 GET 工作空间名(表达式1):操作条件 [例3] 查询信息系(IS)中年龄小于20岁的学生的学号和年龄。
GET W (Student.Sno,Student.Sage): Student.Sdept='IS'∧ Student.Sage<20

425 (3)带排序的检索 格式 GET 工作空间名(表达式1)[:操作条件] DOWN/UP 表达式2
[例4] 查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序。 GET W (Student.Sno,Student.Sage): Student.Sdept='CS‘ DOWN Student.Sage

426 (4)带定额的检索 格式 : GET 工作空间名(定额)(表达式1) [:操作条件] [DOWN/UP 表达式2]
[例5] 取出一个信息系学生的学号。 GET W (1) (Student.Sno): Student.Sdept='IS'  [例6] 查询信息系年龄最大的三个学生的学号及其年龄,结果按年龄降序排序。 GET W (3) (Student.Sno,Student.Sage): Student.Sdept='IS' DOWN Student.Sage

427 (5)用元组变量的检索 元组变量的含义 表示可以在某一关系范围内变化(也称为范围变量Range Variable) 元组变量的用途
① 简化关系名:设一个较短名字的元组变量来代替较长的关系名。 ② 操作条件中使用量词时必须用元组变量。 定义元组变量 格式: RANGE 关系名 变量名 一个关系可以设多个元组变量

428 (6) 用存在量词的检索 GET W (Student.Sname): X(X.Sno=Student.Sno∧X.Cno='2')
[例8] 查询选修2号课程的学生名字。 RANGE SC X GET W (Student.Sname): X(X.Sno=Student.Sno∧X.Cno='2') [例9] 查询选修了这样课程的学生学号,其直接先行课是6号课程。 RANGE Course CX GET W (SC.Sno): CX (CX.Cno=SC.Cno∧CX.Pcno='6')

429 用存在量词的检索(续) [例10]查询至少选修一门其先行课为6号课程的学生名字 RANGE Course CX SC SCX
GET W (Student.Sname): SCX (SCX.Sno=Student.Sno∧ CX (CX.Cno=SCX.Cno∧CX.Pcno='6'))  前束范式形式: GET W (Student.Sname): SCXCX (SCX.Sno=Student.Sno∧ CX.Cno=SCX.Cno∧CX.Pcno='6')

430 [例11] 查询成绩为90分以上的学生名字与课程名字。
(7)带有多个关系的表达式的检索  [例11] 查询成绩为90分以上的学生名字与课程名字。 RANGE SC SCX GET W(Student.Sname,Course.Cname): SCX (SCX.Grade≥90∧ SCX.Sno=Student.Sno∧ Course.Cno=SCX.Cno)

431 (8)用全称量词的检索 [例12] 查询不选1号课程的学生名字。 RANGE SC SCX
 [例12] 查询不选1号课程的学生名字。 RANGE SC SCX GET W (Student.Sname): SCX (SCX.Sno≠Student.Sno∨SCX.Cno≠'1') 用存在量词表示: GET W (Student.Sname): SCX (SCX.Sno=Student.Sno∧SCX.Cno='1')

432 (9)用两种量词的检索 [例13] 查询选修了全部课程的学生姓名。 RANGE Course CX SC SCX
[例13] 查询选修了全部课程的学生姓名。 RANGE Course CX SC SCX GET W (Student.Sname): CXSCX (SCX.Sno=Student.Sno∧ SCX.Cno=CX.Cno)

433 (10)用蕴函(Implication)的检索
 [例14] 查询最少选修了95002学生所选课程的学生学号。 RANGE Couse CX SC SCX SC SCY GET W (Student.Sno): CX(SCX (SCX.Sno='95002'∧SCX.Cno=CX.Cno) SCY(SCY.Sno=Student.Sno∧ SCY.Cno= CX.Cno))

434 (11)集函数 常用集函数(Aggregation function)或内 部函数(Build-in function) 函 数 名 功 能
功 能 COUNT 对元组计数 TOTAL 求 总 和 MAX 求最大值 MIN 求最小值 AVG 求平均值

435 集函数(续) [例15] 查询学生所在系的数目。 [例16] 查询信息系学生的平均年龄
[例15] 查询学生所在系的数目。 GET W ( COUNT(Student.Sdept) ) COUNT函数在计数时会自动排除重复值。 [例16] 查询信息系学生的平均年龄 GET W (AVG(Student.Sage): Student.Sdept='IS’ )

436 二、更新操作 (1) 修改操作 (2) 插入操作 (3) 删除操作

437 (1)修改操作步骤 ① 用HOLD语句将要修改的元组从数据库中读到工作空间中 HOLD 工作空间名(表达式1)[:操作条件 ]
HOLD语句是带上并发控制的GET语句 ② 用宿主语言修改工作空间中元组的属性 ③ 用UPDATE语句将修改后的元组送回数据库中 UPDATE 工作空间名

438 修改操作(续) [例17] 把95007学生从计算机科学系转到信息系。
[例17] 把95007学生从计算机科学系转到信息系。 HOLD W (Student.Sno, Student.Sdetp): Student.Sno='95007' (从Student关系中读出95007学生的数据) MOVE 'IS' TO W.Sdept (用宿主语言进行修改) UPDATE W (把修改后的元组送回Student关系)

439 (2)插入操作 步骤 PUT语句只对一个关系操作 ① 用宿主语言在工作空间中建立新元组 ② 用PUT语句把该元组存入指定关系中
PUT语句只对一个关系操作

440 插入操作(续) [例18] 学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为8,直接先行课为6号课程。插入该课程元组
[例18] 学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为8,直接先行课为6号课程。插入该课程元组    MOVE '8' TO W.Cno MOVE '计算机组织与结构' TO W.Cname MOVE '6' TO W.Cpno MOVE '2' TO W.Ccredit PUT W (Course)

441 (3)删除操作 ① 用HOLD语句把要删除的元组从数据库中读到工作空间中 ② 用DELETE语句删除该元组 DELETE 工作空间名

442 删除操作(续) [例19] 95110学生因故退学,删除该学生元组。
[例19] 学生因故退学,删除该学生元组。 HOLD W (Student): Student.Sno='95110' DELETE W 

443 删除操作(续) [例20] 将学号95001改为95102。 HOLD W (Student): Student.Sno='95001'
[例20] 将学号95001改为95102。 HOLD W (Student): Student.Sno='95001' DELETE W MOVE '95102' TO W.Sno MOVE '李勇' TO W.Sname MOVE '男' O W.Ssex MOVE '20' TO W.Sage MOVE 'CS' TO W.Sdept PUT W (Student) 

444 删除操作(续) [例21] 删除全部学生。 在删除操作中保持参照完整性 HOLD W (SC) DELETE W
[例21] 删除全部学生。 HOLD W (SC) DELETE W  HOLD W (Student) DELETE W 在删除操作中保持参照完整性

445 检索操作 GET 插入操作 修改操作 删除操作 建立新元组--PUT 小结:元组关系演算语言ALPHA
[:操作条件] [DOWN/UP 表达式2] 插入操作 建立新元组--PUT 修改操作 HOLD--修改--UPDATE 删除操作 HOLD--DELETE

446 2.5 关 系 演 算 元组关系演算语言ALPHA 域关系演算语言QBE

447 域关系演算 (1) 域演算表达式是形为 {t1…tk∣P(t1,…,tk)}
的表达式,其中P(t1,…,tk)是关于自由域变量t1,…,tk 的公式。 原子公式有两种形式: ⑴ R(x1…xk); ⑵ xθy。 公式中也可使用∧、∨、┐和等逻辑运算符,(x)和(x),但变量x是域变量,不是元组变量。

448 R3={ xyz|(u)(v)(R(zxu)∧ w(yv)∧ u>v )}
域关系演算 (2) 例2.20 图2.21的(a)、(b)、(c)是三个关系R、S、W,(d)、(e)、(f)分别表示下面三个域表达式的值。 (a)关系R (b)关系S (c)关系W (d)R1 (e)R2 (f)R3 图2.21 域关系演算的例子 R1={ xyz| R(xyz)∧ x<5 ∧ y>3 } R2={ xyz| R(xyz)∨(S(xyz)∧ y = 4)} R3={ xyz|(u)(v)(R(zxu)∧ w(yv)∧ u>v )}

449 2.5.2 域关系演算语言QBE l 一种典型的域关系演算语言 l QBE:Query By Example 基于屏幕表格的查询语言
由M.M.Zloof提出 1978年在IBM370上得以实现 QBE也指此关系数据库管理系统 l QBE:Query By Example 基于屏幕表格的查询语言 查询要求:以填写表格的方式构造查询 用示例元素(域变量)来表示查询结果可能的情况 查询结果:以表格形式显示

450 QBE操作框架 属性名 关系名 操作命令 元组属性值或查询条件或操作命令

451 一、检索操作 (3)用户在最左边一栏输入要查询的关系名,例如 Student; (1)用户提出要求; (2)屏幕显示空白表格;
  (3)用户在最左边一栏输入要查询的关系名,例如 Student; Student

452 检索操作(续) (4)系统显示该关系的属性名 (5)用户在上面构造查询要求 Student Sno Sname Ssex Sage
Sdept Student Sno Sname Ssex Sage Sdept P. T C

453 检索操作(续) (6)屏幕显示查询结果 Student Sno Sname Ssex Sage Sdept 李勇 张立 C

454 构造查询的几个要素 示例元素 即域变量 一定要加下划线 示例元素是这个域中可能的一个值,它不必是查询结果中的元素
示例元素 即域变量 一定要加下划线 示例元素是这个域中可能的一个值,它不必是查询结果中的元素 打印操作符P. 指定查询结果所含属性列 查询条件 不用加下划线 可使用比较运算符>,≥,<,≤,=和≠ 其中=可以省略 排序要求

455 1. 简单查询 [例1] 查询全体学生的全部数据。 Student Sno Sname Ssex Sage Sdept P.95001
[例1] 查询全体学生的全部数据。 Student Sno Sname Ssex Sage Sdept P.95001 P. 李勇 P.男 P.20 P.CS

456 简单查询(续) 显示全部数据也可以简单地把P.操作符作用在关系名上。 P. Student Sno Sname Ssex Sage
Sdept   P.

457 2. 条件查询 (1) 简单条件 [例2] 求信息系全体学生的姓名。 Student Sno Sname Ssex Sage Sdept
(1) 简单条件  [例2] 求信息系全体学生的姓名。 Student Sno Sname Ssex Sage Sdept P. 李勇 IS

458 条件查询(续) [例3] 求年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept P.95001
[例3] 求年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept P.95001 >19

459 条件查询(与条件) [例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上 Student Sno
[例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上 Student Sno Sname Ssex Sage Sdept P.95001 >19 CS

460 条件查询(续) 方法(2):把两个条件写在不同行上,但使 用相同的示例元素值 Student Sno Sname Ssex Sage
Sdept P.95001 >19 CS

461 条件查询(续) [例5] 查询既选修了1号课程又选修了2号课程的学生的学号。 SC Sno Cno Grade P.95001 1 2

462 条件查询(续) [例6] 查询计算机科学系或者年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage
[例6] 查询计算机科学系或者年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept P.95001 P.95002 >19 CS

463 多表连接 [例7] 查询选修1号课程的学生姓名。 注意:示例元素Sno是连接属性,其值在两个表中要相同。 Cno SC Sno Grade
[例7] 查询选修1号课程的学生姓名。 注意:示例元素Sno是连接属性,其值在两个表中要相同。 SC Sno Cno Grade 95001 1 Student Sname Ssex Sage Sdept P.李勇

464 条件查询(非条件) [例8] 查询未选修1号课程的学生姓名 思路:显示学号为95001的学生名字,而该学生选修1号课程的情况为假 Cno 
[例8] 查询未选修1号课程的学生姓名 思路:显示学号为95001的学生名字,而该学生选修1号课程的情况为假 SC Sno Cno Grade 95001 1 Student Sname Ssex Sage Sdept P.李勇

465 条件查询(续) [例9] 查询有两个人以上选修的课程号 Cno 思路:查询这样的课程1,它不仅被95001选修
[例9] 查询有两个人以上选修的课程号 思路:查询这样的课程1,它不仅被95001选修 而且也被另一个学生(95001)选修了 SC Sno Cno Grade 95001 .95001 P.1 1

466 3. 集函数 常用集函数: 函 数 名 功 能 CNT 对元组计数 SUM 求 总 和 AVG 求平均值 MAX 求最大值 MIN 求最小值

467 集函数(续) [例10] 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept
[例10] 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept P.AVG.ALL. IS

468 4.对查询结果排序(续) [例11] 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。 Student Sno
[例11] 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。 Student Sno Sname Ssex Sage Sdept P.李勇 DO(2). AO(1).

469 二、修改操作 [例12] 把95001学生的年龄改为18岁。 方法(1) :将操作符“U.”放在值上 Sage Student Sno
[例12] 把95001学生的年龄改为18岁。 方法(1) :将操作符“U.”放在值上 Student Sno Sname Ssex Sage Sdept 95001 U. 18

470 修改操作(续) 方法(2): 将操作符“U.”放在关系上 Sage 码95001标明要修改的元组。“U.”标明所在的行是 修改后的新值。
由于主码是不能修改的,所以系统不会混淆要修改 的属性。 Student Sno Sname Ssex Sage Sdept U. 95001 18

471 修改操作(续) [例13]将计算机系所有学生的年龄都改为18岁 Sdept Student Sno Sname Ssex Sage
95008 U.18  CS

472 修改操作(续) [例14] 把95001学生的年龄增加1岁 Sdept 分两行分别表示改前和改后的示例元素 必须将操作符“U.”放在关系上
 [例14] 把95001学生的年龄增加1岁 分两行分别表示改前和改后的示例元素 必须将操作符“U.”放在关系上 Student Sno Sname Ssex Sage Sdept U. 95001 17 17+1

473 修改操作(续) [例15] 将计算机系所有学生的年龄都增加1岁 Sdept Student Sno Sname Ssex Sage U.
[例15] 将计算机系所有学生的年龄都增加1岁 Student Sno Sname Ssex Sage Sdept U. 95008 18 18+1  CS

474 2.插入操作 I. [例16] 把信息系女生95701,姓名张三,年龄17岁存入数据库中。 Sage Student Sno Sname
[例16] 把信息系女生95701,姓名张三,年龄17岁存入数据库中。 Student Sno Sname Ssex Sage Sdept I. 95701 张三 17 IS

475 3. 删除操作 D. Sage [例17] 删除学生95089 为保证参照完整性,删除95089学生前,先删除95089学 生选修的全部课程
[例17] 删除学生95089 为保证参照完整性,删除95089学生前,先删除95089学 生选修的全部课程 Student Sno Sname Ssex Sage Sdept D. 95089 SC Sno Cno Grade D. 95089

476 本章小结 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结

477 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第三章 关系数据库标准语言SQL

478 第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制
3.8 小结

479 SQL的产生与发展 1970年,美国IBM研究中心的E.F.Codd连续发表多篇论文,提出关系模型。
1972年,IBM公司开始研制实验型关系数据库管理系统SYSTEM R,配制的查询语言称为SQUARE (Specifying Queries As Relational Expression )语言,在语言中使用了较多的数学符号。 1974年,Boyce和Chamberlin把SQUARE修改为SEQUEL (Structured English QUEry Language )语言。后来SEQUEL简称为SQL (Structured Query Language ),即“结构式查询语言”,SQL的发音仍为“sequel”。现在SQL已经成为一个标准 。

480 SQL数据库的体系结构 用户1 用户2 用户3 用户4 视图1 基本表1 基本表2 基本表3 基本表4 存储文件1 存储文件2 存储文件3
存储文件4 图3.1 SQL数据库的体系结构 SQL用户 View Base table Stored file

481 3.1 SQL概述 SQL的特点 1. 综合统一 2. 高度非过程化 3. 面向集合的操作方式 4. 以同一种语法结构提供两种使用方法
5. 语言简洁,易学易用

482 1. 综合统一: SQL语言综合:数据定义语言DDL、数据操纵语言DML、数据控制语言DCL

483 2、高度非过程化 “怎么做” “做什么” 减轻了用户的负担,有利于提高数据独立性

484 3、面向集合的操作方式 非关系数据模型:面向记录 SQL:集合操作

485 4、以同一种语法结构提供两种使用方式 既可联机交互操作, 也可以嵌入到高级语言中去

486 5. 语言简捷,易学易用

487 第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制
3.8 小结

488 SQL模式(数据库)的创建和撤销 SQL模式的创建可用CREATE SCHEMA语句定义,其基本句法如下:
CREATE SCHEMA〈模式名〉AUTHORIZATION〈用户名〉

489 删除:DROP语句的句法如下: DROP SCHEMA〈模式名〉[CASCADE│RESTRICT] 其方式有两种: CASCADE (级联式)方式。 RESTRICT (约束式)方式。

490 3.2 数 据 定 义

491 3.2.1 定义语句格式 CREATE TABLE <表名> <表名>:所要定义的基本表的名字
(<列名> <数据类型>[ <列级完整性约束条件> ] [,<列名> <数据类型>[ <列级完整性约束条件>] ] … [,<表级完整性约束条件> ] ); <表名>:所要定义的基本表的名字 <列名>:组成该表的各个属性(列) <列级完整性约束条件>:涉及相应属性列的完整性约束条件 <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件

492 例题 [例1] 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(1) , Sage INT, Sdept CHAR(15));

493 例题 (续)

494 定义基本表(续) 常用完整性约束 主码约束: PRIMARY KEY 唯一性约束:UNIQUE 非空值约束:NOT NULL
参照完整性约束:FOREIGN KEY PRIMARY KEY与 UNIQUE的区别?

495 Primary key在建立的时候会默认地建立此field的索引,且此primary key可以作为作为另外的表的foreign key,
再者primary key跟unique得区别是Primary key 一定是not null,而unique则没有此限制

496 [例2] 建立一个“课程”表C,它由课程号Cno,课程名称Cname,教师Teacher组成,其中Cno为主码。
CREATE TABLE C( Cno CHAR(5) , Cname CHAR(10) , Teacher CHAR(10), Primary key (Cno));

497 例题 (续) [例3] 建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。
CREATE TABLE SC( Sno CHAR(5) , Cno CHAR(3) , Grade int, Primary key (Sno, Cno), FOREIGN KEY(Sno) REFERENCES S(Sno), FOREIGN KEY(Cno) REFERENCES C(Cno) );

498 基本数据类型 (1)数值型(DB2) SMALLINT 半字长二进制整数 INTEGER 全字长二进制整数
DECIMAL(P[,q])或者DEC(p[,q]) 压缩十进制数,共p位,其中小数点后q位 FLOAT 双字长浮点数

499 (2)字符串型 CHARTER(n)或CHAR(n) VARCHAR(n) (3)时间型 DATE TIME

500 (4)位串型 BIT(n)

501 回顾 CREATE TABLE <表名> <表名>:所要定义的基本表的名字
(<列名> <数据类型>[ <列级完整性约束条件> ] [,<列名> <数据类型>[ <列级完整性约束条件>] ] … [,<表级完整性约束条件> ] ); <表名>:所要定义的基本表的名字 <列名>:组成该表的各个属性(列) <列级完整性约束条件>:涉及相应属性列的完整性约束条件 <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件

502

503 二、修改基本表 ALTER TABLE <表名> <表名>:要修改的基本表 ADD子句:增加新列和新的完整性约束条件
[ DROP <完整性约束名> ] [ MODIFY <列名> <数据类型> ]; <表名>:要修改的基本表 ADD子句:增加新列和新的完整性约束条件 DROP子句:删除指定的完整性约束条件 MODIFY子句:用于修改列名和数据类型

504 例题 [例2] 向Student表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD Scome DATE; 不论基本表中原来是否已有数据,新增加的列一律为空值。 

505 [例3] 将年龄的数据类型改为半字长整数。 ALTER TABLE Student MODIFY Sage SMALLINT;
[例3] 将年龄的数据类型改为半字长整数。 ALTER TABLE Student MODIFY Sage SMALLINT; 注:修改原有的列定义有可能会破坏已有数据

506 例题 [例4] 删除学生姓名必须取唯一值的约束。 ALTER TABLE Student DROP UNIQUE(Sname);

507 语句格式(续) 删除属性列 直接/间接删除 把表中要保留的列及其内容复制到一个新表中 删除原表 再将新表重命名为原表名
直接删除属性列:(新) 例:ALTER TABLE Student Drop Scome; ALTER TABLE Student Drop COLUMN Sdept ;(sql server)

508 3.2 数 据 定 义

509 DROP TABLE <表名>;
三、删除基本表 DROP TABLE <表名>;   基本表删除后,数据、表上的视图、索引都删除。 有的系统如ORACLE,基本表删除后,在表上的视图往往仍然保留,但无法引用。

510 例题 [例5] 删除Student表 DROP TABLE Student ;

511 3.2.2 建立与删除索引 建立索引是加快查询速度的有效手段 建立索引 维护索引 使用索引 DBA或表的属主(即建立表的人)根据需要建立
建立与删除索引 建立索引是加快查询速度的有效手段 建立索引 DBA或表的属主(即建立表的人)根据需要建立 有些DBMS自动建立以下列上的索引 PRIMARY KEY UNIQUE 维护索引 DBMS自动完成  使用索引 DBMS自动选择是否使用索引以及使用哪些索引

512 在SQL86和SQL89标准中,基本表没有关键码概念,可以用索引机制来弥补。
索引属于物理存储的路径概念,而不是逻辑的概念。 在定义基本表时,还要定义索引,就把数据库的物理结构和逻辑结构混在一块了。

513 因此在SQL2中引入了主码(主键)的概念,用户在创建基本表时用主码子句Primary key直接定义主码。
但至今大多数DBMS仍使用索引机制,有索引创建和撤销语句,其功能仅限于查询时起作用。

514 一、建立索引 语句格式 CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…); 用<表名>指定要建索引的基本表名字 索引可以建立在该表的一列或多列上,各列名之间用逗号分隔 用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC UNIQUE表明此索引的每一个索引值只对应唯一的数据记录 CLUSTER表示要建立的索引是聚簇索引

515 CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名> (<列名>[<次序>] [,<列名>[<次序>] ]…);

516 例题 [例6] 为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Course(Cno); CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

517 建立索引 (续) 唯一值索引 对于已含重复值的属性列不能建UNIQUE索引
对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束

518 建立索引 (续) 聚簇索引 建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致 例: CREATE CLUSTER INDEX Stusname ON Student(Sname); 在Student表的Sname(姓名)列上建立一个聚簇索引,而 且Student表中的记录将按照Sname值的升序存放

519 建立索引 (续) 在一个基本表上最多只能建立一个聚簇索引 聚簇索引的用途:对于某些类型的查询,可以提高查询效率 聚簇索引的适用范围
很少对基表进行增删操作 很少对其中的变长列进行修改操作

520 二、删除索引 DROP INDEX <索引名>; 删除索引时,系统会从数据字典中删去有关该索引的描述。
[例7] 删除Student表的Stusname索引。 DROP INDEX Stusname; 索引一经建立,就由系统来维护它,不需要用户干预。建立索引减少查询操作的时间,但如果数据增加删改频繁,系统会花费许多时间来维护索引。所以,这时需要删除一些不必要的索引。

521 3.3 查 询 3.3.1 概述 3.3.2 单表查询 3.3.3 连接查询 3.3.4 嵌套查询 3.3.5 集合查询 3.3.6 小结

522 3.3.1 概述 语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] …
FROM <表名或视图名>[, <表名或视图名> ] … [ WHERE <条件表达式> ] [ GROUP BY <列名1> [ HAVING <条件表达式> ] ] [ ORDER BY <列名2> [ ASC|DESC ] ];

523 语句格式 SELECT子句:指定要显示的属性列 FROM子句:指定查询对象(基本表或视图) WHERE子句:指定查询条件
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。 HAVING短语:筛选出只有满足指定条件的组 ORDER BY子句:对查询结果表按指定列值的升序或降序排序

524 SELECT查询语句 (1) SELECT—FROM—WHERE句型 在关系代数中最常用的式子是下列表达式:
πA1,…,An(σF(R1×…×Rm)) 这里R1、…、Rm为关系,F是公式,A1、…、An为属性。 针对上述表达式,SQL为此设计了SELECT—FROM—WHERE句型: SELECT A1,…,An FROM R1,…,Rm WHERE F 这个句型是从关系代数表达式演变来的,但WHERE子句中的条件表达式F要比关系代数中公式更灵活。

525 示例数据库 学生-课程数据库 学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:SC(Sno,Cno,Grade)

526 5. 语言简捷,易学易用

527 3.3 查 询 3.3.1 概述 3.3.2 单表查询 3.3.3 连接查询 3.3.4 嵌套查询 3.3.5 集合查询 3.3.6 小结

528 SELECT查询语句 (1) SELECT—FROM—WHERE句型 在关系代数中最常用的式子是下列表达式:
πA1,…,An(σF(R1×…×Rm)) 这里R1、…、Rm为关系,F是公式,A1、…、An为属性。 针对上述表达式,SQL为此设计了SELECT—FROM—WHERE句型: SELECT A1,…,An FROM R1,…,Rm WHERE F 这个句型是从关系代数表达式演变来的,但WHERE子句中的条件表达式F要比关系代数中公式更灵活。

529 SELECT语句完整的句法 (1) 语句格式 SELECT [ALL|DISTINCT] <目标列表达式>
[,<目标列表达式>] … FROM <表名或视图名>[, <表名或视图名> ] … [ WHERE <条件表达式> ] [ GROUP BY <列名1> [ HAVING <条件表达式> ] ] [ ORDER BY <列名2> [ ASC|DESC ] ];

530 语句格式 SELECT子句:指定要显示的属性列 FROM子句:指定查询对象(基本表或视图) WHERE子句:指定查询条件
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。 HAVING短语:筛选出只有满足指定条件的组 ORDER BY子句:对查询结果表按指定列值的升序或降序排序

531 示例数据库 学生-课程数据库 学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:SC(Sno,Cno,Grade)

532 3.3.2 单表查询 查询仅涉及一个表,是一种最简单的查询操作 一、选择表中的若干列 二、选择表中的若干元组 三、对查询结果排序
单表查询 查询仅涉及一个表,是一种最简单的查询操作 一、选择表中的若干列 二、选择表中的若干元组 三、对查询结果排序 四、使用集函数 五、对查询结果分组

533 SELECT语句完整的句法 语句格式 SELECT [ALL|DISTINCT] <目标列表达式>
[,<目标列表达式>] … FROM <表名或视图名>[, <表名或视图名> ] … [ WHERE <条件表达式> ] [ GROUP BY <列名1> [ HAVING <条件表达式> ] ] [ ORDER BY <列名2> [ ASC|DESC ] ];

534 查询指定列 [例1] 查询全体学生的学号与姓名。 [例2] 查询全体学生的姓名、学号、所在系。 SELECT Sno,Sname
[例1] 查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student; [例2] 查询全体学生的姓名、学号、所在系。 SELECT Sname,Sno,Sdept

535 查询全部列 [例3] 查询全体学生的详细记录。 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;
[例3] 查询全体学生的详细记录。 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; SELECT *

536 3. 查询经过计算的值 SELECT子句的<目标列表达式>为表达式 算术表达式 字符串常量 函数: 列别名

537 3. 查询经过计算的值 [例4] 查全体学生的姓名及其出生年份。 Sname 2000-Sage
[例4] 查全体学生的姓名及其出生年份。 SELECT Sname,2000-Sage FROM Student;  输出结果: Sname Sage 李勇 刘晨 王名 张立

538 3. 查询经过计算的值 [例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。
[例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。 SELECT Sname,'Year of Birth: ',2000-Sage, ISLOWER(Sdept) FROM Student;

539 例题(续) 输出结果: Sname 'Year of Birth:' 2000-Sage ISLOWER(Sdept)
李勇 Year of Birth: cs 刘晨 Year of Birth: is 王名 Year of Birth: ma 张立 Year of Birth: is

540 2000-Sage BIRTHDAY,ISLOWER(Sdept) DEPARTMENT 输出结果:
[例5.1] 使用列别名改变查询结果的列标题 SELECT Sname NAME,'Year of Birth: ’ BIRTH, 2000-Sage BIRTHDAY,ISLOWER(Sdept) DEPARTMENT FROM Student; 输出结果: NAME BIRTH BIRTHDAY DEPARTMENT 李勇 Year of Birth: cs 刘晨 Year of Birth: is 王名 Year of Birth: ma 张立 Year of Birth: is

541 二、选择表中的若干元组 –投影 消除取值重复的行 查询满足条件的元组

542 1. 消除取值重复的行 在SELECT子句中使用DISTINCT短语 假设SC表中有下列数据 Sno Cno Grade

543 [例6] 查询选修了课程的学生学号。 ALL 与 DISTINCT (1) SELECT Sno FROM SC; 或(默认 ALL)
[例6] 查询选修了课程的学生学号。 (1) SELECT Sno FROM SC; 或(默认 ALL) SELECT ALL Sno  结果: Sno 95001 95002

544 例题(续) (2) SELECT DISTINCT Sno FROM SC; 结果: Sno 95001 95002

545 例题(续) 注意 DISTINCT短语的作用范围是所有目标列 例:查询选修课程的各种成绩 错误的写法 正确的写法
SELECT DISTINCT Cno,DISTINCT Grade FROM SC; 正确的写法 SELECT DISTINCT Cno,Grade FROM SC; 

546 2.查询满足条件的元组 WHERE子句常用的查询条件

547 [例8] 查询所有年龄在20岁以下的学生姓名及其年龄。
(1) 比较大小 在WHERE子句的<比较条件>中使用比较运算符 =,>,<,>=,<=,!= 或 <>,!>,!<, 逻辑运算符NOT + 比较运算符 [例8] 查询所有年龄在20岁以下的学生姓名及其年龄。 SELECT Sname,Sage FROM Student WHERE Sage < 20; 或 WHERE NOT Sage >= 20;

548 (2) 确定范围 SELECT Sname,Sdept,Sage FROM Student
使用谓词 BETWEEN … AND … NOT BETWEEN … AND … [例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;

549 例题(续) [例11] 查询年龄不在20~23岁之间的学生姓名、系别和年龄。 SELECT Sname,Sdept,Sage
[例11] 查询年龄不在20~23岁之间的学生姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;

550 (3) 确定集合 [例12]查询信息系(IS)、数学系(MA)和计 算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex
使用谓词 IN <值表>, NOT IN <值表> <值表>:用逗号分隔的一组取值 [例12]查询信息系(IS)、数学系(MA)和计 算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student WHERE Sdept IN ( 'IS','MA','CS' );

551 (3) 确定集合 [例13]查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。 SELECT Sname,Ssex
FROM Student WHERE Sdept NOT IN ( 'IS','MA','CS' );

552 (4) 字符串匹配 [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]
<匹配串>:指定匹配模板 匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时, 可以用 = 运算符取代 LIKE 谓词 用 != 或 < >运算符取代 NOT LIKE 谓词

553 通配符 % (百分号) 代表任意长度(长度可以为0)的字符串
% (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串 _ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串

554 ESCAPE 短语: 当用户要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE '<换码字符>' 短语对通配符进行转义。

555 例题 1) 匹配模板为固定字符串 [例14] 查询学号为95001的学生的详细情况。 FROM Student
[例14] 查询学号为95001的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE '95001'; 等价于: SELECT * WHERE Sno = '95001';

556 [例15] 查询所有姓刘学生的姓名、学号和性别。
例题(续) 2) 匹配模板为含通配符的字符串 [例15] 查询所有姓刘学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE ‘刘%’;

557 例题(续) 匹配模板为含通配符的字符串(续) [例16] 查询姓"欧阳"且全名为三个汉字的学生的姓名。 SELECT Sname
[例16] 查询姓"欧阳"且全名为三个汉字的学生的姓名。 SELECT Sname FROM Student WHERE Sname LIKE '欧阳__';

558 例题(续) 匹配模板为含通配符的字符串(续) [例17] 查询名字中第2个字为"阳"字的学生的姓名和学号。 SELECT Sname,Sno
[例17] 查询名字中第2个字为"阳"字的学生的姓名和学号。 SELECT Sname,Sno FROM Student WHERE Sname LIKE '__阳%';

559 例题(续) 匹配模板为含通配符的字符串(续) [例18] 查询所有不姓刘的学生姓名。 SELECT Sname,Sno,Ssex
[例18] 查询所有不姓刘的学生姓名。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE '刘%';

560 例题(续) 3) 使用换码字符将通配符转义为普通字符 [例19] 查询DB_Design课程的课程号和学分。
SELECT Cno,Ccredit FROM Course WHERE Cname LIKE 'DB\_Design' ESCAPE '\'

561 例题(续) 使用换码字符将通配符转义为普通字符(续) [例20] 查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。
SELECT * FROM Course WHERE Cname LIKE 'DB\_%i_ _' ESCAPE ' \ ';

562 (5) 涉及空值的查询 SELECT Sno,Cno 使用谓词 IS NULL 或 IS NOT NULL
“IS NULL” 不能用 “= NULL” 代替 [例21] 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL;

563 例题(续) [例22] 查所有有成绩的学生学号和课程号。 SELECT Sno,Cno FROM SC
[例22] 查所有有成绩的学生学号和课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;

564 (6) 多重条件查询 用逻辑运算符AND和 OR来联结多个查询条件 可用来实现多种其他谓词 AND的优先级高于OR 可以用括号改变优先级
[NOT] IN [NOT] BETWEEN … AND …

565 例题 SELECT Sname [例23] 查询计算机系年龄在20岁以下的学生姓名。 FROM Student
[例23] 查询计算机系年龄在20岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept= 'CS' AND Sage<20;

566 改写[例12] [例12] 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex
FROM Student WHERE Sdept IN ( 'IS','MA','CS' ) 可改写为: FROM Student WHERE Sdept= ' IS ' OR Sdept= ' MA' OR Sdept= ' CS ';

567 改写[例10] [例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23; 可改写为: SELECT Sname,Sdept,Sage WHERE Sage>=20 AND Sage<=23;

568 SELECT语句完整的句法 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] …
FROM <表名或视图名>[, <表名或视图名> ] … [ WHERE <条件表达式> ] [ ORDER BY <列名1> [ ASC|DESC ] ];  [ GROUP BY <列名2> [ HAVING <条件表达式> ] ]

569 三、对查询结果排序 使用ORDER BY子句 当排序列含空值时 可以按一个或多个属性列排序 升序:ASC;降序:DESC;缺省值为升序

570 对查询结果排序(续) [例24] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade
[例24] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade FROM SC WHERE Cno= ' 3 ' ORDER BY Grade DESC;

571 查询结果 Sno Grade ------- ------- 95010 95024 95007 92 95003 82 95010 82
95010 95024

572 对查询结果排序(续) [例25] 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。 SELECT *
[例25] 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。 SELECT * FROM Student ORDER BY Sdept,Sage DESC;

573 四、使用集函数 5类主要集函数 计数 COUNT([DISTINCT|ALL] *)
计算总和 SUM([DISTINCT|ALL] <列名>) 计算平均值 AVG([DISTINCT|ALL] <列名>)

574 使用集函数(续) 求最小值 求最大值 DISTINCT短语:在计算时要取消指定列中的重复值 ALL短语:不取消重复值 ALL为缺省值
MAX([DISTINCT|ALL] <列名>) 求最小值 MIN([DISTINCT|ALL] <列名>) DISTINCT短语:在计算时要取消指定列中的重复值 ALL短语:不取消重复值 ALL为缺省值

575 使用集函数 (续) [例26] 查询学生总人数。 [例27] 查询选修了课程的学生人数。 注:用DISTINCT以避免重复计算学生人数
[例26] 查询学生总人数。 SELECT COUNT(*) FROM Student; [例27] 查询选修了课程的学生人数。 SELECT COUNT(DISTINCT Sno) FROM SC; 注:用DISTINCT以避免重复计算学生人数

576 使用集函数 (续) [例28] 计算1号课程的学生平均成绩。 [例29] 查询选修1号课程的学生最高分数。
[例28] 计算1号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cno= ' 1 '; [例29] 查询选修1号课程的学生最高分数。 SELECT MAX(Grade) WHER Cno= ' 1 ';

577 五、对查询结果分组 使用GROUP BY子句分组 细化集函数的作用对象 未对查询结果分组,集函数将作用于整个查询结果
对查询结果分组后,集函数将分别作用于每个组

578 使用GROUP BY子句分组 [例30] 求各个课程号及相应的选课人数。 1 22 SELECT Cno,COUNT(Sno)
[例30] 求各个课程号及相应的选课人数。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;  结果 Cno COUNT(Sno)

579 对查询结果分组 (续) GROUP BY子句的作用对象是查询的中间结果表 分组方法:按指定的一列或多列值分组,值相等的为一组
使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数

580 使用HAVING短语筛选最终输出结果 [例31] 查询选修了3门以上课程的学生学号。 FROM SC GROUP BY Sno
[例31] 查询选修了3门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >3;  

581 例题 [例32] 查询有3门以上课程是90分以上的 学生的学号及(90分以上的)课程数 FROM SC WHERE Grade>=90
[例32] 查询有3门以上课程是90分以上的 学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC WHERE Grade>=90 GROUP BY Sno HAVING COUNT(*)>=3;

582 使用HAVING短语筛选最终输出结果 只有满足HAVING短语指定条件的组才输出 HAVING短语与WHERE子句的区别:作用对象不同 WHERE子句作用于基表或视图,从中选择满足条件的元组。 HAVING短语作用于组,从中选择满足条件的组。

583 SELECT语句完整的句法 (1) SELECT语句完整的句法如下: SELECT 目标表的列名或列表达式序列
FROM 基本表名和(或)视图序列 [ WHERE 行条件表达式 ] [ GROUP BY 列名序列 [ HAVING 组条件表达式 ]] [ ORDER BY 列名[ ASC|DESC ],… ]

584 SELECT语句完整的句法(2) 整个语句的执行过程如下: (1)读取FROM子句中基本表、视图的数据,执行笛卡尔积操作。
(2)选取满足WHERE子句中给出的条件表达式的元组。 (3)按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组。 (4)按SELECT子句中给出的列名或列表达式求值输出。 (5)ORDER子句对输出的目标表进行排序,按附加说明ASC升序排列,或按DESC降序排列。

585 SELECT语句完整的句法 (3) 例3.11 对教学数据库的基本表S、SC、C中数据进行查询和计算。 ①统计每一年龄选修课程的学生人数
SELECT AGE,COUNT(DISTINCT S.S#) FROM S,SC WHERE S.S#=SC.S# GROUP BY AGE; 由于要统计每一个年龄的学生人数,因此要把满足WHERE子句中条件的查询结果按年龄分组,在每一组中的学生年龄相同。此时的SELECT子句应对每一组分开进行操作,在每一组中,年龄只有一个值,统计的人数是这一组中的学生人数。

586 SELECT语句完整的句法 (4) ②求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。 SELECT AGE,COUNT(S#) FROM S WHERE SEX='M' GROUP BY AGE HAVING COUNT(*)> 50 ORDER BY 2,AGE DESC; 返回

587 SELECT语句中的限定 (1) SELECT子句中的规定 SELECT子句描述查询输出的表格结构,即输出值的列名或表达式。其形式如下:
SELECT [ ALL|DISTINCT ] <列名或列表达式序列> | * 条件表达式中的算术比较操作 条件表达式中可出现算术比较运算符(<,<=,>,>=,=,!=),也可以用“BETWEEN … AND …”比较运算符限定一个值的范围。 列和基本表的改名操作

588 SELECT语句中的限定 (2) 字符串的匹配操作 条件表达式中字符串匹配操作符是“LIKE”。在表达式中可使用两个通配符:
百分号(%):与零个或多个字符组成的字符串匹配。 下划线(_):与单个字符匹配。 集合的并、交、差操作 当两个子查询结果的结构完全一致时,可以让这两个子查询执行并、交、差操作。并、交、差的运算符为UNION、INTERSECT和EXCEPT。 空值的比较操作 SQL中允许列值为空,空值用保留字NULL表示。

589 SELECT语句中的限定 (3) 集合的比较操作 SQL提供SELECT语句的嵌套子查询机制。子查询是嵌套在另一个查询中的SELECT语句。
(1)集合成员资格的比较 (2) 集合成员的算术比较 (3) 空关系的测试 (4) 重复元组的测试 导出表的使用 SQL2允许在FROM子句中使用子查询。如果在FROM子句中使用了子查询,那么要给子查询的结果起个表名和相应的列名。 返回

590 下课了。。。 休息一会儿。。。

591 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第三章 关系数据库标准语言SQL

592 3.3 查 询 3.3.1 概述 3.3.2 单表查询 3.3.3 连接查询 3.3.4 嵌套查询 3.3.5 集合查询 3.3.6 小结

593 3.3.3 连接查询 同时涉及多个表的查询称为连接查询 比较运算符:=、>、<、>=、<=、!=
连接查询 同时涉及多个表的查询称为连接查询 用来连接两个表的条件称为连接条件或连接谓词 一般格式: [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> 比较运算符:=、>、<、>=、<=、!= [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>

594 连接查询 (续) 连接字段 连接谓词中的列名称为连接字段 连接条件中的各连接字段类型必须是可比的,但不必是相同的

595 连接操作的执行过程 嵌套循环法(NESTED-LOOP)
首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。 重复上述操作,直到表1中的全部元组都处理完毕

596 排序合并法(SORT-MERGE) 常用于=连接 首先按连接属性对表1和表2排序
对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续

597 排序合并法 找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。直接遇到表2中大于表1连接字段值的元组时,对表2的查询不再继续 重复上述操作,直到表1或表2中的全部元组都处理完毕为止

598 索引连接(INDEX-JOIN) 对表2按连接字段建立索引
对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组

599 连接查询 (续) SQL中连接查询的主要类型 等值连接(含自然连接) 非等值连接查询 自身连接查询 外连接查询 复合条件连接查询
广义笛卡尔积 等值连接(含自然连接) 非等值连接查询 自身连接查询 外连接查询 复合条件连接查询

600 一、广义笛卡尔积 不带连接谓词的连接 很少使用 例: SELECT Student.* , SC.* FROM Student, SC

601 WHERE Student.Sno = SC.Sno;
二、等值与非等值连接查询 等值连接、自然连接、非等值连接 [例32] 查询每个学生及其选修课程的情况。 SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno = SC.Sno;

602 等值连接 连接运算符为 = 的连接操作 [<表名1>.]<列名1> = [<表名2>.]<列名2> 任何子句中引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可以省略表名前缀。

603 等值连接 假设Student表、SC表分别有下列数据: Student表 Sage Sno Sname Ssex Sdept 95001
李勇 20 CS 95002 刘晨 19 IS 95003 王敏 18 MA 95004 张立

604 等值连接 SC表 Sno Cno Grade 95001 1 92 2 85 95002 3 88 90 80

605 等值连接 结果表 Student.Sno Sname Ssex Sage Sdept SC.Sno Cno Grade
刘晨 女 IS 刘晨 女 IS

606 自然连接 等值连接的一种特殊情况,把目标列中重复的属性列去掉。 [例33] 对[例32]用自然连接完成。
[例33] 对[例32]用自然连接完成。 SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno;

607 非等值连接查询 连接运算符 不是 = 的连接操作 比较运算符:>、<、>=、<=、!=
[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2> 比较运算符:>、<、>=、<=、!= [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>

608 三、自身连接 一个表与其自己进行连接,称为表的自身连接 需要给表起别名以示区别 由于所有属性名都是同名属性,因此必须使用别名前缀

609 自身连接(续) [例34] 查询每一门课的间接先修课(即先修课的先修课) SELECT FIRST.Cno,SECOND.Cpno
[例34] 查询每一门课的间接先修课(即先修课的先修课) SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = SECOND.Cno; SELECT FIRST.C#,first.CNAME,SECOND.C#,second.CNAME FROM C FIRST,C SECOND WHERE FIRST.C# = SECOND.CPno;

610 自身连接(续) FIRST表(Course表) Cno Cname Cpno Ccredit 1 数据库 5 4 2 数学 3 信息系统
3 信息系统 操作系统 6 数据结构 7 数据处理 PASCAL语言

611 自身连接(续) SECOND表(Course表) Cno Cname Cpno Ccredit 1 数据库 5 4 2 数学 3 信息系统
3 信息系统 操作系统 6 数据结构 7 数据处理 PASCAL语言

612 自身连接(续) 查询结果 cno cpno

613 四、外连接(Outer Join) 外连接与普通连接的区别 普通连接操作只输出满足连接条件的元组
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出

614 外连接(outer join) A B C D a b c d e f null g B C D b c d e a f g A B C D
S R S R S A B C D a b c d e null f g A B C D a b c d e f null R S R S

615 SELECT Student.Sno,Sname,Ssex, Sage,Sdept,Cno,Grade
外连接(续) [例 33] 查询每个学生及其选修课程的情况包括没有选修课程的学生----用外连接操作 SELECT Student.Sno,Sname,Ssex, Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno(*);

616 外连接(续) 结果: Student.Sno Sname Ssex Sage Sdept Cno Grade 李勇 男 CS 李勇 男 CS 李勇 男 CS 刘晨 女 IS 刘晨 女 IS 王敏 女 MA 张立 男 IS

617 外连接(续) 在表名后面加外连接操作符(*)或(+)指定非主体表 非主体表有一“万能”的虚行,该行全部由空值组成
虚行可以和主体表中所有不满足连接条件的元组进行连接 由于虚行各列全部是空值,因此与虚行连接的结果中,来自非主体表的属性值全部是空值

618 外连接(续) select S.S#,SNAME,SEX,C# from S,SC on S.S# *= SC.S#
左外连接 外连接符出现在连接条件的左边 右外连接 外连接符出现在连接条件的右边 select S.S#,SNAME,SEX,C# from S,SC on S.S# *= SC.S# select S.S#,SNAME,SEX,C# from S right outer join SC on S.S# = SC.S#

619 五、复合条件连接 SELECT Student.Sno, student.Sname FROM Student, SC
WHERE子句中含多个连接条件时,称为复合条件连接 [例35]查询选修2号课程且成绩在90分以上的所有学生的 学号、姓名 SELECT Student.Sno, student.Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND /* 连接谓词*/ SC.Cno= ' 2 ' AND /* 其他限定条件 */ SC.Grade > 90; /* 其他限定条件 */

620 多表连接 SELECT Student.Sno,Sname,Cname,Grade
[例36] 查询每个学生的学号、姓名、选修的课程名及成绩。 SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno = SC.Sno and SC.Cno = Course.Cno;  结果: Student.Sno Sname Cname Grade 李勇 数据库 李勇 数学 李勇 信息系统 刘晨 数学 刘晨 信息系统

621 3.3 查 询 3.3.1 概述 3.3.2 单表查询 3.3.3 连接查询 3.3.4 嵌套查询 3.3.5 集合查询 3.3.6 小结

622 嵌套查询 嵌套查询概述 嵌套查询分类 嵌套查询求解方法 引出子查询的谓词

623 嵌套查询(续) 嵌套查询概述 一个SELECT-FROM-WHERE语句称为一个查询块
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询

624 嵌套查询(续) SELECT Sname 外层查询/父查询 FROM Student WHERE Sno IN
(SELECT Sno 内层查询/子查询 FROM SC WHERE Cno= ' 2 ');

625 嵌套查询(续) 子查询的限制 不能使用ORDER BY子句 层层嵌套方式反映了SQL语言的结构化 有些嵌套查询可以用连接运算替代

626 嵌套查询分类 不相关子查询 子查询的查询条件不依赖于父查询 相关子查询 子查询的查询条件依赖于父查询

627 嵌套查询求解方法 不相关子查询 是由里向外逐层处理。即每个子查询在 上一级查询处理之前求解,子查询的结果 用于建立其父查询的查找条件。

628 嵌套查询求解方法(续) 相关子查询 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表; 然后再取外层表的下一个元组; 重复这一过程,直至外层表全部检查完为止。

629 引出子查询的谓词 带有IN谓词的子查询 带有比较运算符的子查询 带有ANY或ALL谓词的子查询 带有EXISTS谓词的子查询

630 一、带有IN谓词的子查询 此查询要求可以分步来完成 [例37] 查询与“刘晨”在同一个系学习的学生。 ① 确定“刘晨”所在系名
[例37] 查询与“刘晨”在同一个系学习的学生。 此查询要求可以分步来完成 ① 确定“刘晨”所在系名 SELECT Sdept FROM Student WHERE Sname= ' 刘晨 '; 结果为: Sdept IS

631 带有IN谓词的子查询(续) ② 查找所有在IS系学习的学生。 SELECT Sno,Sname,Sdept FROM Student
WHERE Sdept= ' IS '; 结果为: Sno Sname Sdept 刘晨 IS 张立 IS

632 构造嵌套查询 将第一步查询嵌入到第二步查询的条件中 SELECT Sno,Sname,Sdept FROM Student
WHERE Sdept IN (SELECT Sdept WHERE Sname= ‘ 刘晨 ’); 此查询为不相关子查询。DBMS求解该查询时也是分步 去做的。

633 带有IN谓词的子查询(续) 用自身连接完成本查询要求 SELECT S1.Sno,S1.Sname,S1.Sdept
FROM Student S1,Student S2 WHERE S1.Sdept = S2.Sdept AND S2.Sname = '刘晨';

634 带有IN谓词的子查询(续) 父查询和子查询中的表均可以定义别名 SELECT Sno,Sname,Sdept FROM Student S1
WHERE S1.Sdept IN (SELECT Sdept FROM Student S2 WHERE S2.Sname= ‘ 刘晨 ’);

635 带有IN谓词的子查询(续) SELECT Sno,Sname ③ 最后在Student关系中
[例38]查询选修了课程名为“信息系统”的学生学号和姓名 SELECT Sno,Sname ③ 最后在Student关系中 FROM Student 取出Sno和Sname WHERE Sno IN (SELECT Sno ② 然后在SC关系中找出选 FROM SC 修了3号课程的学生学号 WHERE Cno IN (SELECT Cno ① 首先在Course关系中找出“信 FROM Course 息系统”的课程号,结果为3号 WHERE Cname= ‘信息系统’));

636 带有IN谓词的子查询(续) 结果: Sno Sname 李勇 刘晨

637 带有IN谓词的子查询(续) 用连接查询 SELECT Sno,Sname FROM Student,SC,Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Course.Cname=‘信息系统’;

638 二、带有比较运算符的子查询 当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)。 与ANY或ALL谓词配合使用

639 带有比较运算符的子查询(续) 例:假设一个学生只可能在一个系学习,并且必须属于一个系,则在[例37]可以用 = 代替IN :
SELECT Sno,Sname,Sdept FROM Student WHERE Sdept = SELECT Sdept WHERE Sname= ' 刘晨 ';

640 带有比较运算符的子查询(续) 子查询一定要跟在比较符之后 错误的例子: SELECT Sno,Sname,Sdept
FROM Student WHERE ( SELECT Sdept FROM Student WHERE Sname= ‘ 刘晨 ’ ) = Sdept;

641 三、带有ANY或ALL谓词的子查询 谓词语义 ANY:任意一个值 ALL:所有值

642 带有ANY或ALL谓词的子查询(续) 需要配合使用比较运算符 > ANY 大于子查询结果中的某个值

643 带有ANY或ALL谓词的子查询(续) [例39] 查询其他系中比信息系任意一个(其中某一个)学生年龄小的学生姓名和年龄 SELECT Sname,Sage FROM Student WHERE Sage < ANY (SELECT Sage WHERE Sdept= ' IS ') AND Sdept <> ' IS ' ; /* 注意这是父查询块中的条件 */

644 带有ANY或ALL谓词的子查询(续) 结果 Sname Sage 王敏 执行过程 1.DBMS执行此查询时,首先处理子查询,找出 IS系中所有学生的年龄,构成一个集合(19,18) 2. 处理父查询,找所有不是IS系且年龄小于 19 或 18的学生

645 带有ANY或ALL谓词的子查询(续) ANY和ALL谓词有时可以用集函数实现 ANY与ALL与集函数的对应关系 = <>或!=
= <>或!= < <= > >= ANY IN -- <MAX <=MAX >MIN >= MIN ALL NOT IN <MIN <= MIN >MAX >= MAX

646 带有ANY或ALL谓词的子查询(续) 用集函数实现子查询通常比直接用ANY或ALL查询效率要高,因为前者通常能够减少比较次数 原因:集函数首先把需要比较的集合计算出来(通常情况下是变小的),缩小了和父查询比较的次数

647 带有ANY或ALL谓词的子查询(续) [例39']:用集函数实现[例39] SELECT Sname,Sage FROM Student
WHERE Sage < (SELECT MAX(Sage) WHERE Sdept= ' IS ') AND Sdept <> ' IS ’;

648 [例40] 查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。
带有ANY或ALL谓词的子查询(续) [例40] 查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。 方法一:用ALL谓词 SELECT Sname,Sage FROM Student WHERE Sage < ALL (SELECT Sage WHERE Sdept= ' IS ') AND Sdept <> ' IS ’; 查询结果为空表。

649 带有ANY或ALL谓词的子查询(续) 方法二:用集函数 SELECT Sname,Sage FROM Student WHERE Sage < (SELECT MIN(Sage) WHERE Sdept= ' IS ') AND Sdept <>' IS ’;

650 四、带有EXISTS谓词的子查询 1. EXISTS谓词 2. NOT EXISTS谓词 3. 不同形式的查询间的替换 4. 相关子查询的效率 5. 用EXISTS/NOT EXISTS实现全称量词 6. 用EXISTS/NOT EXISTS实现逻辑蕴函

651 带有EXISTS谓词的子查询(续) 1. EXISTS谓词 存在量词
带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。 若内层查询结果非空,则返回真值 若内层查询结果为空,则返回假值 由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义 2. NOT EXISTS谓词

652 带有EXISTS谓词的子查询(续) [例41] 查询所有选修了1号课程的学生姓名。 用嵌套查询 SELECT Sname
[例41] 查询所有选修了1号课程的学生姓名。 用嵌套查询 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC /*相关子查询*/ WHERE Sno=Student.Sno AND Cno= ' 1 '); 求解过程

653 带有EXISTS谓词的子查询(续) 思路分析: 本查询涉及Student和SC关系。
在Student中依次取每个元组的Sno值,用此值去检查SC关系。 若SC中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno= '1',则取此Student.Sname送入结果关系。

654 相关子查询 子查询的查询条件依赖于外层父查询的某个属性值,称为相关子查询。 不能一次将子查询求解出来,然后求解父查询。
内层查询由于和外层查询有关,因此必须反复求值。

655 相关子查询的一般处理过程 首先取外层查询中(Student)表的第1个元组,根据它与内层查询相关的属性值(Sno)处理内层查询,若Where子句返回值为真,则取此元组放入结果表;然后再取(Student)表的下一个元组;重复这一个过程,直至外层(Student)表全部检查完为止。

656 带有EXISTS谓词的子查询(续) 用连接运算 SELECT Sname FROM Student, SC
WHERE Student.Sno=SC.Sno AND SC.Cno= '1';

657 带有EXISTS谓词的子查询(续) [例42] 查询没有选修1号课程的学生姓名。 SELECT Sname FROM Student
∏ SNAME(S) -∏SNAMEE(σC#=‘C2’(S SC)) [例42] 查询没有选修1号课程的学生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno='1'); 此例用连接运算难于实现

658 带有EXISTS谓词的子查询(续) 3. 不同形式的查询间的替换 EXISTS 带IN谓词、比较运算符、ANY和ALL谓词
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换 所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。 EXISTS 带IN谓词、比较运算符、ANY和ALL谓词

659 带有EXISTS谓词的子查询(续) 例:[例37]查询与“刘晨”在同一个系学习的学生。可以用带EXISTS谓词的子查询替换:
SELECT Sno,Sname,Sdept FROM Student S1 WHERE EXISTS   SELECT * FROM Student S2 WHERE S2.Sdept = S1.Sdept AND S2.Sname = ' 刘晨 ';

660 带有EXISTS谓词的子查询(续) (x)P ≡  ( x( P)) 5.用EXISTS/NOT EXISTS实现全称量词(难点)
SQL语言中没有全称量词 (For all) 可以把带有全称量词的谓词转换为等价的带有存在量词的谓词: (x)P ≡  ( x( P))

661 带有EXISTS谓词的子查询(续) [例43] 查询选修了全部课程的学生姓名。 =》没有一门课是他不选修的。
∏ SNAME(S (∏ S#,C#(SC) ÷ ∏ C#(C) )) 带有EXISTS谓词的子查询(续) [例43] 查询选修了全部课程的学生姓名。 =》没有一门课是他不选修的。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course (SELECT * FROM SC WHERE Sno= Student.Sno AND Cno= Course.Cno);

662 6. 用EXISTS/NOT EXISTS实现逻辑蕴函(难点)
SQL语言中没有蕴函(Implication)逻辑运算 可以利用谓词演算将逻辑蕴函谓词等价转换为: p  q ≡  p∨q

663 带有EXISTS谓词的子查询(续) [例44] 查询至少选修了学生95002选修的全部课程的学生号码。 解题思路:
[例44] 查询至少选修了学生95002选修的全部课程的学生号码。 解题思路: 用逻辑蕴函表达:查询学号为x的学生,对所有的课程y,只要95002学生选修了课程y,则x也选修了y。 形式化表示: 用P表示谓词 “学生95002选修了课程y” 用q表示谓词 “学生x选修了课程y” 则上述查询为: (y) p  q

664 带有EXISTS谓词的子查询(续) 等价变换: (y)p  q ≡  (y ((p  q ))
变换后语义:不存在这样的课程y,学生95002选修了y,而学生x没有选。

665 带有EXISTS谓词的子查询(续) SELECT DISTINCT Sno 用NOT EXISTS谓词表示: FROM SC SCX
WHERE NOT EXISTS (SELECT * FROM SC SCY WHERE SCY.Sno = ' ' AND NOT EXISTS FROM SC SCZ WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno));

666 3.3 查 询 3.3.1 概述 3.3.2 单表查询 3.3.3 连接查询 3.3.4 嵌套查询 3.3.5 集合查询 3.3.6 小结

667 3.3.5 集合查询 标准SQL直接支持的集合操作种类 并操作(UNION) 一般商用数据库支持的集合操作种类 交操作(INTERSECT)
集合查询 标准SQL直接支持的集合操作种类 并操作(UNION) 一般商用数据库支持的集合操作种类 交操作(INTERSECT) 差操作(MINUS)

668 1. 并操作 形式 <查询块> UNION 参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同 R S A
B C a1 b1 c1 b2 c2 a2 R 1. 并操作 形式 <查询块> UNION 参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同 A B C a1 b2 c2 b3 a2 c1 S

669 并操作(续) [例45] 查询计算机科学系的学生及年龄不大于19岁的学生。 方法一: SELECT * FROM Student
[例45] 查询计算机科学系的学生及年龄不大于19岁的学生。 方法一: SELECT * FROM Student WHERE Sdept= 'CS' UNION WHERE Sage<=19;

670 并操作(续) 方法二: SELECT DISTINCT * FROM Student
WHERE Sdept= 'CS' OR Sage<=19;

671 并操作(续) [例46] 查询选修了课程1或者选修了课程2的学生。 方法一: SELECT Sno FROM SC
[例46] 查询选修了课程1或者选修了课程2的学生。 方法一: SELECT Sno FROM SC WHERE Cno=' 1 ' UNION WHERE Cno= ' 2 ';

672 并操作(续) 方法二: SELECT DISTINCT Sno FROM SC WHERE Cno=' 1 ' OR Cno= ' 2 ';

673 并操作(续) [例47] 设数据库中有一教师表Teacher(Tno, Tname,...)。查询学校中所有师生的姓名。 SELECT Sname FROM Student UNION SELECT Tname FROM Teacher; new

674 2. 交操作 标准SQL中没有提供集合交操作,但可用其他方法间接实现。 现在已经提供。 R S A B C a1 b1 c1 b2 c2

675 2. 交操作 SELECT * [例48] 查询计算机科学系的学生与年龄不大于19岁的学生的交集
[例48] 查询计算机科学系的学生与年龄不大于19岁的学生的交集 本例实际上就是查询计算机科学系中年龄不大于19岁的学生 SELECT * FROM Student WHERE Sdept= 'CS' AND Sage<=19;

676 交操作(续) [例49] 查询选修课程1的学生集合与选修课程2的学生集合的交集 本例实际上是查询既选修了课程1又选修了课程2的学生
[例49] 查询选修课程1的学生集合与选修课程2的学生集合的交集 本例实际上是查询既选修了课程1又选修了课程2的学生 SELECT Sno FROM SC WHERE Cno=' 1 ' AND Sno IN (SELECT Sno WHERE Cno=' 2 ');

677 交操作(续) [例50] 查询学生姓名与教师姓名的交集 本例实际上是查询学校中与教师同名的学生姓名
[例50] 查询学生姓名与教师姓名的交集 本例实际上是查询学校中与教师同名的学生姓名 SELECT DISTINCT Sname FROM Student WHERE Sname IN (SELECT Tname FROM Teacher); new

678 3. 差操作 现在已经提供。 标准SQL中没有提供集合差操作,但可用其他方法间接实现。 R S A B C a1 b1 c1 b2 c2

679 3. 差操作 [例51] 查询计算机科学系的学生与年龄不大于19岁的学生的差集。 本例实际上是查询计算机科学系中年龄大于19岁的学生
[例51] 查询计算机科学系的学生与年龄不大于19岁的学生的差集。 本例实际上是查询计算机科学系中年龄大于19岁的学生 SELECT * FROM Student WHERE Sdept= 'CS' AND Sage>19;

680 差操作(续) [例52] 查询学生姓名与教师姓名的差集 本例实际上是查询学校中未与教师同名的学生姓名
[例52] 查询学生姓名与教师姓名的差集 本例实际上是查询学校中未与教师同名的学生姓名 SELECT DISTINCT Sname FROM Student WHERE Sname NOT IN (SELECT Tname FROM Teacher); new

681 4. 对集合操作结果的排序 ORDER BY子句只能用于对最终查询结果排序,不能对中间结果排序
new

682 对集合操作结果的排序(续) [例53] 错误写法 SELECT * FROM Student WHERE Sdept= 'CS'
ORDER BY Sno UNION SELECT * WHERE Sage<=19 ORDER BY Sno; new

683 对集合操作结果的排序(续) 正确写法 SELECT * FROM Student WHERE Sdept= 'CS' UNION
WHERE Sage<=19 ORDER BY 1; new

684 3.3.6 SELECT语句的一般格式 SELECT [ALL|DISTINCT] FROM <表名或视图名> [别名]
<目标列表达式> [别名] [ ,<目标列表达式> [别名]] … FROM <表名或视图名> [别名] [ ,<表名或视图名> [别名]] … [WHERE <条件表达式>] [GROUP BY <列名1>[,<列名1’>] ...[HAVING <条件表达式>]] [ORDER BY <列名2> [ASC|DESC] [,<列名2’> [ASC|DESC] ] … ];

685 整条语句的含义: 根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。 如果有GROUP子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组,每个组产生结果表中的一条记录,通常会在每组中使用集函数。如果GROUP子句带HAVING短语,则只有满足指定条件的组才输出。如果有ORDER子句,则结果表还要按<列名2>的值的升序或降序排列。

686 1、子句基本应用形式 (1)SELECT 子句的形式 ①SELECT Sno,Sname ②SELECT DISTINCT Sno
④ SELECT ‘My name is’,Sname,2003-Sage,ISLOWER(Sdept) Dept ⑤SELECT AVG(Grade),MAX(Grade),COUNT(*)

687 (2)FROM ①FROM Student ②FROM Student,SC,Course

688 (3)WHERE ①WHERE Sage>=18 等价于WHERE NOT (Sage<18)
②WHERE Sage BETWEEN 19 AND 22 等价于WHERE Sage>=19 AND Sage<=22 ③WHERE Sdept In(‘IS’,’MA’) 等价于WHERE Sdept=’IS’ OR Sdept=‘MA’ ④WHERE Sdept NOT in (‘IS’,’MA’) 等价于WHERE Sdept<>’IS’AND Sdept<>’MA’ ⑤WHERE Sname NOT LIKE ‘_宇%’ ⑥WHERE Cname LIKE ‘DB\_%i_’ESCAPE ‘\’ ⑦WHERE Grade IS NOT Null

689 (4) GROUP ① GROUP BY CNO ② GROUP BY Sno HAVING COUNT(*)>=3

690 (5)ORDER ①ORDER BY Grade DESC ②ORDER BY Sdept,Sage DESC

691 2,连接查询 非等值连接(<,>) 等值连接(=) 自身连接(别名) 外连接(*)
复合条件连接:多个表的连接(多表连接)、多个条件的连接(复合条件连接)

692 3、嵌套查询 带有IN谓词的子查询 带有比较运算符的子查询(单值比较) 带有ANY或ALL的子查询 带有EXISTS谓词的子查询

693 4、集合查询 每一个SELECT语句都能获得一个或一组元组。若要把多个SELECT语句的结果合并为一个结果,可用集合操作来完成。
集合操作用UNION(并)、INTERSECT(交)和MINUS(差)。

694 作业 将上次作业的两道题目的关系代数表达式改写成SQL查询语句。

695

696

697 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第三章 关系数据库标准语言SQL

698 第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制
3.8 小结

699 3.4 数 据 更 新 插入数据 修改数据 删除数据

700 两种插入数据方式 3.4.1 插入数据 插入单个元组 插入子查询结果 S A B C a1 b2 c2 a1 b3 c2 a2 b2 c1
插入数据 两种插入数据方式 插入单个元组 插入子查询结果 A B C S a1 b2 c2 a1 b3 c2 a2 b2 c1 a2 b2 c1

701 1. 插入单个元组 语句格式 功能 将新元组插入指定表中。 INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)] VALUES (<常量1> [,<常量2>] … ) 功能 将新元组插入指定表中。

702 插入单个元组(续) INSERT [例1] 将一个新学生记录 INTO Student
[例1] 将一个新学生记录 (学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。 INSERT INTO Student VALUES ('95020','陈冬','男','IS',18);

703 插入单个元组(续) [例2] 插入一条选课记录( '95020','1 ')。 INSERT INTO SC(Sno,Cno)
[例2] 插入一条选课记录( '95020','1 ')。 INSERT INTO SC(Sno,Cno) VALUES (' ',' 1 '); 新插入的记录在Grade列上取空值

704 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致 指定部分属性列:插入的元组在其余属性列上取空值
INSERT INTO SC(Sno,Cno) VALUES (' ',' 1 '); INTO子句 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致 指定部分属性列:插入的元组在其余属性列上取空值 VALUES子句 提供的值必须与INTO子句匹配 值的个数 值的类型

705 2. 插入子查询结果 语句格式 INSERT INTO <表名> [(<属性列1> [,<属性列2>… )] 子查询; 功能 将子查询结果插入指定表中

706 插入子查询结果(续) [例3] 对每一个系,求学生的平均年龄,并把结果存入数据库。 第一步:建表 CREATE TABLE Deptage
[例3] 对每一个系,求学生的平均年龄,并把结果存入数据库。 第一步:建表 CREATE TABLE Deptage (Sdept CHAR(15) /* 系名*/ Avgage SMALLINT); /*学生平均年龄*/

707 插入子查询结果(续) 第二步:插入数据 INSERT INTO Deptage(Sdept,Avgage)
SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept;

708 插入子查询结果(续) INTO子句(与插入单条元组类似) 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致
没有指定属性列:表示要插入的是一条完整的元组 指定部分属性列:插入的元组在其余属性列上取空值 子查询 SELECT子句目标列必须与INTO子句匹配 值的个数 值的类型

709 插入子查询结果(续) DBMS在执行插入语句时会检查所插元组是 否破坏表上已定义的完整性规则 实体完整性 参照完整性 用户定义的完整性
NOT NULL约束 UNIQUE约束 值域约束

710 3.4 数 据 更 新 插入数据 修改数据 删除数据

711 3.4.2 修改数据 语句格式 UPDATE <表名> 功能 修改指定表中满足WHERE子句条件的元组
B C 修改数据 S a1 b2 c2 a1 b3 c2 语句格式 UPDATE <表名> SET <列名>=<表达式>[,<列名>=<表达式>]… [WHERE <条件>]; 功能 修改指定表中满足WHERE子句条件的元组 a2 b2 c1

712 修改数据(续) 三种修改方式 修改某一个元组的值 修改多个元组的值 带子查询的修改语句 Student Sno Sname Ssex
Sage Sdept 95001 李勇 20 CS 95002 刘晨 19 IS 95003 王敏 18 MA 95004 张立

713 1. 修改某一个元组的值 [例4] 将学生95001的年龄改为22岁。 UPDATE Student SET Sage=22
[例4] 将学生95001的年龄改为22岁。 UPDATE Student SET Sage=22 WHERE Sno=' '; Sno Sname Ssex Sage Sdept 95001 李勇 20 CS 95002 刘晨 19 IS 95003 王敏 18 MA 95004 张立 Student

714 2. 修改多个元组的值 [例5] 将所有学生的年龄增加1岁。 UPDATE Student SET Sage= Sage+1;

715 修改多个元组的值(续) [例6] 将信息系所有学生的年龄增加1岁。 UPDATE Student SET Sage= Sage+1
[例6] 将信息系所有学生的年龄增加1岁。 UPDATE Student SET Sage= Sage+1 WHERE Sdept=' IS ';

716 3. 带子查询的修改语句 [例7] 将计算机科学系全体学生的成绩置零。 UPDATE SC SET Grade=0 WHERE 'CS'=
[例7] 将计算机科学系全体学生的成绩置零。 UPDATE SC SET Grade=0 WHERE 'CS'= (SELETE Sdept FROM Student WHERE Student.Sno = SC.Sno);

717 修改数据(续) SET子句 指定修改方式 要修改的列 修改后取值 WHERE子句 指定要修改的元组 缺省表示要修改表中的所有元组
SET Sage= Sage+1 WHERE 'CS'= (SELETE Sdept FROM Student WHERE Student.Sno = SC.Sno);

718 修改数据(续) DBMS在执行修改语句时会检查修改操作 是否破坏表上已定义的完整性规则 实体完整性 用户定义的完整性 UNIQUE约束
NOT NULL约束 UNIQUE约束 值域约束

719 3.4 数 据 更 新 插入数据 修改数据 删除数据

720 3.4.3 删除数据 FROM <表名> [WHERE <条件>]; 功能 WHERE子句 DELETE
删除数据 A B C S a1 b2 c2 DELETE FROM <表名> [WHERE <条件>]; 功能 删除指定表中满足WHERE子句条件的元组 WHERE子句 指定要删除的元组 缺省表示要修改表中的所有元组 a1 b3 c2 a2 b2 c1

721 删除数据(续) 三种删除方式 删除某一个元组的值 删除多个元组的值 带子查询的删除语句

722 1. 删除某一个元组的值 [例8] 删除学号为95019的学生记录。 DELETE FROM Student
[例8] 删除学号为95019的学生记录。 DELETE FROM Student WHERE Sno='95019'; Sno Sname Ssex Sage Sdept 95001 李勇 20 CS 95002 刘晨 19 IS 95003 王敏 18 MA 95004 张立 Student

723 2. 删除多个元组的值 [例9] 删除2号课程的所有选课记录。 DELETE FROM SC; WHERE Cno='2'; [例10] 删除所有的学生选课记录。

724 3. 带子查询的删除语句 [例11] 删除计算机科学系所有学生的选课记录。 DELETE FROM SC WHERE 'CS'=
[例11] 删除计算机科学系所有学生的选课记录。 DELETE FROM SC WHERE 'CS'= (SELETE Sdept FROM Student WHERE Student.Sno=SC.Sno);

725 删除数据(续) DBMS在执行插入语句时会检查所插元组 是否破坏表上已定义的完整性规则 参照完整性 不允许删除 级联删除

726

727 第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制
3.8 小结

728 SQL数据库的体系结构 用户1 用户2 用户3 用户4 视图1 基本表1 基本表2 基本表3 基本表4 存储文件1 存储文件2 存储文件3
存储文件4 图3.1 SQL数据库的体系结构 SQL用户 View Base table Stored file

729 3.5 视 图 视图的特点 虚表,是从一个或几个基本表(或视图)导出的表 只存放视图的定义,不会出现数据冗余 基表中的数据发生变化,从视图中查询出的数据也随之改变

730 3.5 视 图 基于视图的操作 查询 删除 更新(受限) 定义基于该视图的新视图

731 3.5 视 图 定义视图 查询视图 更新视图 视图的作用

732 语句格式 1. 建立视图 CREATE VIEW <视图名> [(<列名> [,<列名>]…)]
<视图名> [(<列名> [,<列名>]…)] AS <子查询> [WITH CHECK OPTION];

733 建立视图(续) DBMS执行CREATE VIEW语句时只是把 视图的定义存入数据字典,并不执行其中 的SELECT语句。 在对视图查询时,按视图的定义从基本表 中将数据查出。

734 组成视图的属性列名 全部省略或全部指定 省略: 由子查询中SELECT目标列中的诸字段组成 明确指定视图的所有列名:
(1) 某个目标列是集函数或列表达式 (2) 目标列为 * (3) 多表连接时选出了几个同名列作为视图的字段 (4) 需要在视图中为某个列启用新的更合适的名字

735 常见的视图形式 行列子集视图 WITH CHECK OPTION的视图 基于多个基表的视图 基于视图的视图 带表达式的视图 分组视图

736 行列子集视图 [例1] 建立信息系学生的视图。 CREATE VIEW IS_Student AS
[例1] 建立信息系学生的视图。 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept= 'IS'; 从单个基本表导出 只是去掉了基本表的某些行和某些列 保留了码

737 建立视图(续) WITH CHECK OPTION 透过视图进行增删改操作时,不得破坏视 图定义中的谓词条件 (即子查询中的条件表达式)

738 WITH CHECK OPTION的视图 [例2] 建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生。
[例2] 建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生。 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept= 'IS' WITH CHECK OPTION;

739 对IS_Student视图的更新操作 修改操作:DBMS自动加上Sdept= 'IS'的条件 删除操作:DBMS自动加上Sdept= 'IS'的条件 插入操作:DBMS自动检查Sdept属性值是否为'IS' 如果不是,则拒绝该插入操作 如果没有提供Sdept属性值,则自动定义Sdept为'IS'

740 基于多个基表的视图 [例4] 建立信息系选修了1号课程的学生视图。 CREATE VIEW IS_S1(Sno,Sname,Grade)
[例4] 建立信息系选修了1号课程的学生视图。 CREATE VIEW IS_S1(Sno,Sname,Grade) AS SELECT Student.Sno,Sname,Grade FROM Student,SC WHERE Sdept= 'IS' AND Student.Sno=SC.Sno AND SC.Cno= '1';

741 基于视图的视图 [例5] 建立信息系选修了1号课程且成绩在90分以上的学生的视图。 CREATE VIEW IS_S2 AS
[例5] 建立信息系选修了1号课程且成绩在90分以上的学生的视图。 CREATE VIEW IS_S2 AS SELECT Sno,Sname,Grade FROM IS_S1 WHERE Grade>=90;

742 带表达式的视图 [例6] 定义一个反映学生出生年份的视图。 CREATE VIEW BT_S(Sno,Sname,Sbirth) AS
[例6] 定义一个反映学生出生年份的视图。 CREATE VIEW BT_S(Sno,Sname,Sbirth) AS SELECT Sno,Sname,2000-Sage FROM Student 设置一些派生属性列, 也称为虚拟列--Sbirth 带表达式的视图必须明确定义组成视图的各个属 性列名

743 建立分组视图 [例7] 将学生的学号及他的平均成绩定义为一个视图 假设SC表中“成绩”列Grade为数字型
[例7] 将学生的学号及他的平均成绩定义为一个视图 假设SC表中“成绩”列Grade为数字型 CREAT VIEW S_G(Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;

744 建立视图(续) 一类不易扩充的视图 以 SELECT * 方式创建的视图可扩充性差,应尽可能避免

745 建立视图(续) [例8]将Student表中所有女生记录定义为一个视图 缺点:修改基表Student的结构后,Student表
CREATE VIEW F_Student1(stdnum,name,sex,age,dept) AS SELECT * FROM Student WHERE Ssex='女'; 缺点:修改基表Student的结构后,Student表 与F_Student1视图的映象关系被破坏, 导致该视图不能正确工作。

746 建立视图(续) CREATE VIEW F_Student2 (stdnum,name,sex,age,dept) FROM Student
AS SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student WHERE Ssex='女'; 为基表Student增加属性列不会破坏Student表 与F_Student2视图的映象关系。

747 常见的视图形式 行列子集视图 WITH CHECK OPTION的视图 基于多个基表的视图 基于视图的视图 带表达式的视图 分组视图

748 2. 删除视图 DROP VIEW <视图名>; 该语句从数据字典中删除指定的视图定义
由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除 删除基表时,由该基表导出的所有视图定义都必须显式删除

749 删除视图(续) [例9] 删除视图IS_S1 DROP VIEW IS_S1;

750 3.5.2 查询视图 从用户角度:查询视图与查询基本表相同 DBMS实现视图查询的方法
查询视图 从用户角度:查询视图与查询基本表相同 DBMS实现视图查询的方法 实体化视图(View Materialization) 有效性检查:检查所查询的视图是否存在 执行视图定义,将视图临时实体化,生成临时表 查询视图转换为查询临时表 查询完毕删除被实体化的视图(临时表) new

751 查询视图(续) 视图消解法(View Resolution)
进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义 把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询 对基本表执行修正后的查询

752 查询视图(续) [例1] 在信息系学生的视图中找出年龄小于20岁的学生。 SELECT Sno,Sage FROM IS_Student
[例1] 在信息系学生的视图中找出年龄小于20岁的学生。 SELECT Sno,Sage FROM IS_Student WHERE Sage<20; IS_Student视图的定义 (视图定义例1): CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept= 'IS‘;

753 查询视图(续) 视图实体化法 视图消解法 转换后的查询语句为: SELECT Sno,Sage FROM Student
WHERE Sdept= 'IS' AND Sage<20;

754 查询视图(续) [例2] 查询信息系选修了1号课程的学生 SELECT Sno,Sname FROM IS_Student,SC
[例2] 查询信息系选修了1号课程的学生 SELECT Sno,Sname FROM IS_Student,SC WHERE IS_Student.Sno =SC.Sno AND SC.Cno= '1';

755 查询视图(续) 视图消解法的局限 有些情况下,视图消解法不能生成正确查询。采用视图消解法的DBMS会限制这类查询。

756 查询视图(续) SELECT * FROM S_G WHERE Gavg>=90;
CREATE VIEW S_G (Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;

757 查询转换 正确: 错误: SELECT Sno,AVG(Grade) FROM SC WHERE AVG(Grade)>=90
GROUP BY Sno; 正确: SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=90;

758 3.5 视 图 定义视图 查询视图 更新视图 视图的作用

759 3.5.3 更新视图 用户角度:更新视图与更新基本表相同 DBMS实现视图更新的方法 指定WITH CHECK OPTION子句后
更新视图 用户角度:更新视图与更新基本表相同 DBMS实现视图更新的方法 视图实体化法(View Materialization) 视图消解法(View Resolution) 指定WITH CHECK OPTION子句后 DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新

760 更新视图(续) [例1] 将信息系学生视图IS_Student中学号95002 的学生姓名改为“刘辰”。 UPDATE IS_Student
SET Sname= '刘辰' WHERE Sno= '95002'; 转换后的语句: UPDATE Student SET Sname= '刘辰' WHERE Sno= '95002' AND Sdept= 'IS';

761 更新视图(续) [例2] 向信息系学生视图IS_S中插入一个新的学生记录:95029,赵新,20岁 INSERT
INTO IS_Student VALUES(‘95029’,‘赵新’,20); 转换为对基本表的更新: INTO Student(Sno,Sname,Sage,Sdept) VALUES('95029','赵新',20,'IS' );

762 更新视图(续) [例3] 删除视图CS_S中学号为95029的记录 转换为对基本表的更新: DELETE FROM IS_Student
WHERE Sno= '95029'; 转换为对基本表的更新: FROM Student WHERE Sno= '95029' AND Sdept= 'IS';

763 更新视图的限制 一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新(对两类方法均如此)
例:视图S_G为不可更新视图。 CREATE VIEW S_G (Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;

764 更新视图(续) 对于如下更新语句: UPDATE S_G SET Gavg=90 WHERE Sno= '95001';
无论实体化法还是消解法都无法将其转换成对 基本表SC的更新

765 实际系统对视图更新的限制 允许对行列子集视图进行更新 对其他类型视图的更新不同系统有不同限制

766 3.5 视 图 定义视图 查询视图 更新视图 视图的作用

767 1. 视图能够简化用户的操作 当视图中数据不是直接来自基本表时,定 义视图能够简化用户的操作 基于多张表连接形成的视图
基于复杂嵌套查询的视图 含导出属性的视图

768 视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需要
2. 视图使用户能以多种角度看待同一数据 视图机制能使不同用户以不同方式看待同一数据,适应数据库共享的需要

769 3.视图对重构数据库提供了一定程度的逻辑独立性
例:数据库逻辑结构发生改变 学生关系Student(Sno,Sname,Ssex,Sage,Sdept) “垂直”地分成两个基本表: SX(Sno,Sname,Sage) SY(Sno,Ssex,Sdept)

770 3.视图对重构数据库提供了一定程度的逻辑独立性
通过建立一个视图Student: CREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept) AS SELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.Sdept FROM SX,SY WHERE SX.Sno=SY.Sno; 使用户的外模式保持不变,从而对原Student表的 查询程序不必修改

771 3. 视图对重构数据库提供了一定程度的逻辑独立性
物理独立性与逻辑独立性的概念 视图在一定程度上保证了数据的逻辑独立性 视图只能在一定程度上提供数据的逻辑独立性 由于对视图的更新是有条件的,因此应用程序中修改数据的语句可能仍会因基本表结构的改变而改变。

772 SQL数据库的体系结构 用户1 用户2 用户3 用户4 视图1 基本表1 基本表2 基本表3 基本表4 存储文件1 存储文件2 存储文件3
存储文件4 图3.1 SQL数据库的体系结构 SQL用户 View Base table Stored file

773 对不同用户定义不同视图,使每个用户只能看到他有权看到的数据
4. 视图能够对机密数据提供安全保护 对不同用户定义不同视图,使每个用户只能看到他有权看到的数据 通过WITH CHECK OPTION对关键数据定义操作时间限制

774 建立视图(续) CREATE VIEW IS_SC
[例3 ] 建立1号课程的选课视图,并要求透过该视图进行的更新操作只涉及1号课程,同时对该视图的任何操作只能在工作时间进行。 CREATE VIEW IS_SC AS SELECT Sno,Cno,Grade FROM SC WHERE Cno= '1' AND TO_CHAR(SYSDATE,'HH24') BETWEEN 9 AND 17 AND TO_CHAR(SYSDATE,'D') BETWEEN 2 AND 6 WITH CHECK OPTION; new

775 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第三章 关系数据库标准语言SQL

776 第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制
3.8 小结

777 3.6 数据控制 概述 授权 收回权限 小结

778 概述 数据控制亦称为数据保护,包括数据的: 安全性控制 完整性控制 并发控制 恢复

779 SQL语言的数据控制功能 SQL语言提供了数据控制功能,能够在一定程度上保证数据库中数据的完全性、完整性,并提供了一定的并发控制及恢复能力。

780 1. 完整性 数据库的完整性是指数据库中数据的正确性与相容性。 SQL语言定义完整性约束条件 CREATE TABLE语句
ALTER TABLE语句 取值唯一的列 参照完整性 其他约束条件

781 2. 并发控制 并发控制: 当多个用户并发地对数据库进行操作时,对他们加以控制、协调,以保证并发操作正确执行,保持数据库的一致性。
SQL语言并发控制能力: 提供事务、事务开始、事务结束、提交等概念

782 3. 恢复 恢复: 当发生各种类型的故障导致数据库处于不一致状态时,将数据库恢复到一致状态的功能。 SQL语言恢复功能:
提供事务回滚、重做等概念 (UNDO、REDO)

783 4. 安全性 安全性:保护数据库,防止不合法的使用所造成的数据泄露和破坏。 保证数据安全性的主要措施
存取控制:控制用户只能存取他有权存取的数据 规定不同用户对于不同数据对象所允许执行的操作

784 ①数据库元素类型:数据库、表、属性列、视图
②权限:SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、CREATETAB、ALL PRIVILEGES ③用户类型:DBA、属主、普通用户

785 DBMS实现数据安全性保护的过程 用户或DBA把授权决定告知系统 SQL的GRANT和REVOKE DBMS把授权的结果存入数据字典 当用户提出操作请求时,DBMS根据授权定义进行检查,以决定是否执行操作请求

786 安全性(续) 谁定义? DBA和表的建立者(即表的属主) 如何定义? SQL语句: GRANT REVOKE

787 3.6.1 授 权 GRANT语句的一般格式: GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>] TO <用户>[,<用户>]... [WITH GRANT OPTION]; 谁定义?DBA和表的建立者(即表的属主) GRANT功能:将对指定操作对象的指定操作权限授予指定的用户。

788 (1) 操作权限

789 (2) 用户的权限 建表(CREATETAB)的权限:属于DBA DBA授予-->普通用户
基本表或视图的属主拥有对该表或视图的一切操作权限 接受权限的用户: 一个或多个具体用户 PUBLIC(全体用户)

790 (3) WITH GRANT OPTION子句 指定了WITH GRANT OPTION子句:
获得某种权限的用户还可以把这种权限再授予别的用户。 没有指定WITH GRANT OPTION子句: 获得某种权限的用户只能使用该权限,不能传播该权限

791 例题 例1 把查询Student表权限授给用户U1 GRANT SELECT ON TABLE Student TO U1;

792 例题(续) 例2 把对Student表和Course表的全部权限授予用户U2和U3 GRANT ALL PRIVILIGES
ON TABLE Student, Course TO U2, U3; 例4

793 例题(续) 例3 把对表SC的查询权限授予所有用户 GRANT SELECT ON TABLE SC TO PUBLIC;

794 例题(续) 例4 把查询Student表和修改学生学号的权限授给用户U4 ON TABLE Student TO U4;
GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;

795 例题(续) 例5 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户 GRANT INSERT ON TABLE SC
TO U5 WITH GRANT OPTION;

796 传播权限 执行例5后,U5不仅拥有了对表SC的INSERT权限, 还可以传播此权限:
GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION; 同样,U6还可以将此权限授予U7: GRANT INSERT ON TABLE SC TO U7; 但U7不能再传播此权限。 U5--> U6--> U7

797 例题(续) 例6 DBA把在数据库S_C中建立表的权限授予用户U8 GRANT CREATETAB ON DATABASE S_C
TO U8;

798 3.6 数据控制 概述 授权 收回权限 小结

799 SQL收回权限的功能 REVOKE语句的一般格式为: REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>] FROM <用户>[,<用户>]...; 功能:从指定用户那里收回对指定对象的指定权限

800 例题 例7 把用户U4修改学生学号的权限收回 REVOKE UPDATE(Sno) ON TABLE Student FROM U4;

801 例题(续) 例8 收回所有用户对表SC的查询权限 REVOKE SELECT ON TABLE SC FROM PUBLIC;

802 例题(续) 例9 把用户U5对SC表的INSERT权限收回 REVOKE INSERT ON TABLE SC FROM U5;

803 权限的级联回收 系统将收回直接或间接从U5处获得的对SC 表的INSERT权限: -->U5--> U6--> U7
收回U5、U6、U7获得的对SC表的INSERT 权限: <--U5<-- U6<-- U7

804 小结:SQL灵活的授权机制 DBA拥有对数据库中所有对象的所有权限,并可以根据应用的需要将不同的权限授予不同的用户。
用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用GRANT语句把其中某些权限授予其他用户。 被授权的用户如果有“继续授权”的许可,还可以把获得的权限再授予其他用户。 所有授予出去的权力在必要时又都可以用REVOKE语句收回。

805 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第三章 关系数据库标准语言SQL (续4)

806 第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制
3.8 小结

807 这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充
交互式 嵌入式 为什么要引入嵌入式SQL SQL语言是非过程性语言 事务处理应用需要高级语言 这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充

808 宿主语言十嵌入式SQL 预处理程序 宿主语言十函数调用 SQL函数定义库 宿主语言编译程序 目标程序

809 3.7.1嵌入式SQL的一般形式 为了区分SQL语句与主语言语句,需要: 前缀:EXEC SQL 结束标志:随主语言的不同而不同
EXEC SQL <SQL语句>; 例:EXEC SQL DROP TABLE Student;

810 嵌入SQL语句 说明性语句 嵌入SQL语句 数据定义 可执行语句 数据控制 数据操纵
可执行语句 数据控制 数据操纵 允许出现可执行的高级语言语句的地方,都可以写可执行SQL语句 允许出现说明语句的地方,都可以写说明性SQL语句

811 将SQL嵌入到高级语言中混合编程,程序中会含 有两种不同计算模型的语句 SQL语句 负责操纵数据库 高级语言语句 负责控制程序流程
描述性的面向集合的语句 负责操纵数据库 高级语言语句 过程性的面向记录的语句 负责控制程序流程

812 工作单元之间的通信方式 1. SQL通信区 向主语言传递SQL语句的执行状态信息 主语言能够据此控制程序流程 2. 主变量 1)主语言向SQL语句提供参数 2)将SQL语句查询数据库的结果交主语言进一步处理 3. 游标 解决集合性操作语言与过程性操作语言的不匹配

813 1. SQL通信区 SQLCA: SQL Communication Area SQLCA是一个数据结构 SQLCA的用途
DBMS SQL通信区SQLCA 应用程序信息

814 SQLCA的内容 与所执行的SQL语句有关 与该SQL语句的执行情况有关

815 SQLCA的使用方法 定义SQLCA 使用SQLCA 用EXEC SQL INCLUDE SQLCA加以定义
SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE

816 2. 主变量 什么是主变量 嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据 在SQL语句中使用的主语言程序变量简称为主变量

817 主变量(续) 主变量的类型 输入主变量 由应用程序对其赋值,SQL语句引用 输出主变量 由SQL语句赋值或设置状态信息,返回给应用程序
一个主变量有可能既是输入主变量又是输出主变量

818 主变量(续) 主变量的用途 输入主变量 将数据库中的数据修改为指定值 指定执行的操作 指定WHERE子句或HAVING子句中的条件
指定向数据库中插入的数据 将数据库中的数据修改为指定值 指定执行的操作 指定WHERE子句或HAVING子句中的条件 输出主变量 获取SQL语句的结果数据 获取SQL语句的执行状态

819 主变量(续) 指示变量 一个主变量可以附带一个指示变量(Indicator Variable)

820 主变量(续) 在SQL语句中使用主变量和指示变量的方法 1) 说明主变量和指示变量 BEGIN DECLARE SECTION
(说明主变量和指示变量) END DECLARE SECTION

821 主变量(续) 2) 使用主变量 说明之后的主变量可以在SQL语句中任何一个能够使用表达式的地方出现
3) 使用指示变量 指示变量前也必须加冒号标志, 必须紧跟在所指主变量之后

822 主变量(续) 在SQL语句之外(主语言语句中)使用主变量和指示变量的方法 可以直接引用,不必加冒号

823 3. 游标(cursor) 为什么要使用游标 SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录

824 游标(续) 主语言是面向记录的,一组主变量一次只能存放一条记录 仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求

825 游标(续) 什么是游标 游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果

826 嵌入式SQL语句与主语言之间的通信(续)
小结 在嵌入式SQL中,SQL语句与主语言语句分工非常明确 SQL语句:直接与数据库打交道 主语言语句 1. 控制程序流程 2. 对SQL语句的执行结果做进一步 加工处理

827 嵌入式SQL语句与主语言之间的通信(续)
SQL语句的执行状态由DBMS送至SQLCA中 主语言程序从SQLCA中取出状态信息,据此决定下一步操作 如果SQL语句从数据库中成功地检索出数据,则通过主变量传给主语言做进一步处理 SQL语言和主语言的不同数据处理方式通过游标来协调

828 嵌入式SQL语句与主语言之间的通信(续)
例:带有嵌入式SQL的一小段C程序 EXEC SQL INCLUDE SQLCA; /* (1) 定义SQL通信区 */ EXEC SQL BEGIN DECLARE SECTION; /* (2) 说明主变量 */ CHAR title_id(7); CHAR title(81); INT royalty; EXEC SQL END DECLARE SECTION;

829 嵌入式SQL语句与主语言之间的通信(续)
main() { EXEC SQL DECLARE C1 CURSOR FOR SELECT tit_id, tit, roy FROM titles; /* (3) 游标操作(定义游标)*/ /* 从titles表中查询 tit_id, tit, roy */ EXEC SQL OPEN C1; /* (4) 游标操作(打开游标)*/

830 嵌入式SQL语句与主语言之间的通信(续)
for(;;) { EXEC SQL FETCH C1 INTO :title_id, :title, :royalty; /* (5) 游标操作(将当前数据放入主变量并推进游标指针)*/ if (sqlca.sqlcode <> SUCCESS) /* (6) 利用SQLCA中的状态信息决定何时退出循环 */ break; printf("Title ID: %s, Royalty: %d", :title_id, :royalty); printf("Title: %s", :title); /* 打印查询结果 */ } EXEC SQL CLOSE C1; /* (7) 游标操作(关闭游标)*/

831 3.7 嵌 入 式 SQL 3.7.1 嵌入式SQL的一般形式 3.7.2 嵌入式SQL语句与主语言之间的通信

832 3.7.3 不用游标的SQL语句 不用游标的SQL语句的种类 说明性语句 数据定义语句 数据控制语句 查询结果为单记录的SELECT语句
非CURRENT形式的UPDATE语句 非CURRENT形式的DELETE语句 INSERT语句

833 一、说明性语句 说明性语句是专为在嵌入式SQL中说明主变量、SQLCA等而设置的 说明主变量 说明SQLCA
1. EXEC SQL BEGIN DECLARE SECTION; 2. EXEC SQL END DECLARE SECTION; 这两条语句必须配对出现,相当于一个括号,两条语句中间是主变量的说明 说明SQLCA 3. EXEC SQL INCLUDE SQLCA

834 二、数据定义语句 例1 建立一个“学生”表Student EXEC SQL CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15));

835 三、数据控制语句 例2 把查询Student表权限授给用户U1 EXEC SQL GRANT SELECT ON
TABLE Student TO U1;

836 语句格式 四、查询结果为单记录的SELECT语句 EXEC SQL SELECT [ALL|DISTINCT]
<目标列表达式>[,<目标列表达式>]...   INTO <主变量>[<指示变量>] [,<主变量>[<指示变量>]]... FROM <表名或视图名>[,<表名或视图名>] ... [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式>]] [ORDER BY <列名2> [ASC|DESC]];

837 查询结果为单记录的SELECT语句(续)
对交互式SELECT语句的扩充就是多了一个INTO子句 把从数据库中找到的符合条件的记录,放到INTO子句指出的主变量中去。

838 查询结果为单记录的SELECT语句(续)
使用注意事项 1. 使用主变量 INTO子句 WHERE子句的条件表达式 HAVING短语的条件表达式

839 查询结果为单记录的SELECT语句(续)
2. 查询结果为空集 如果数据库中没有满足条件的记录,即查询结果为空,则DBMS将SQLCODE的值置为100 3. 查询结果为多条记录 程序出错,DBMS会在SQLCA中返回错误信息

840 查询结果为单记录的SELECT语句(续)
例3 根据学生号码查询学生信息。 假设已将要查询的学生的学号赋给了主变量givensno EXEC SQL SELECT Sno, Sname, Ssex, Sage, Sdept INTO :Hsno, :Hname, :Hsex, :Hage, :Hdept FROM Student WHERE Sno=:givensno; Hsno, Hname, Hsex, Hage, Hdept和givensno均是主变量,并均已在前面的程序中说明过了。

841 查询结果为单记录的SELECT语句(续)
例4 查询某个学生选修某门课程的成绩。 假设已将要查询的学生的学号赋给了主变量givensno,将课程号赋给了主变量givencno。 EXEC SQL SELECT Sno, Cno, Grade INTO :Hsno, :Hcno, :Hgrade:Gradeid FROM SC WHERE Sno=:givensno AND Cno=:givencno;

842 查询结果为单记录的SELECT语句(续)

843 五、非CURRENT形式的UPDATE语句
使用主变量 SET子句 WHERE子句 使用指示变量 非CURRENT形式的UPDATE语句可以操作多条元组

844 非CURRENT形式的UPDATE语句(续)
例5 将全体学生1号课程的考试成绩增加若干分。 假设增加的分数已赋给主变量Raise EXEC SQL UPDATE SC SET Grade=Grade+:Raise WHERE Cno='1';

845 非CURRENT形式的UPDATE语句(续)
例6 修改某个学生1号课程的成绩。 假设该学生的学号已赋给主变量givensno, 修改后的成绩已赋给主变量newgrade。 EXEC SQL UPDATE SC SET Grade=:newgrade WHERE Sno=:givensno;

846 非CURRENT形式的UPDATE语句(续)
例7 将计算机系全体学生年龄置NULL值 Sageid=-1; EXEC SQL UPDATE Student SET Sage=:Raise:Sageid WHERE Sdept='CS';

847 非CURRENT形式的UPDATE语句(续)
将指示变量Sageid赋一个负值后,无论主变量Raise为何值,DBMS都会将CS系所有记录的年龄属性置空值。它等价于: EXEC SQL UPDATE Student SET Sage=NULL WHERE Sdept='CS';

848 六、非CURRENT形式的DELETE语句
使用主变量 WHERE子句 非CURRENT形式的DELETE语句可以操作多条元组

849 非CURRENT形式的DELETE语句(续)
例8 某个学生退学了,现要将有关他的所有选课记录删除掉。 假设该学生的姓名已赋给主变量stdname EXEC SQL DELETE FROM SC WHERE Sno= (SELECT Sno FROM Student WHERE Sname=:stdname);

850 七、INSERT语句 非CURRENT形式的INSERT语句 非CURRENT形式的INSERT语句一次只能输入一条元组 使用主变量
VALUES子句 使用指示变量 非CURRENT形式的INSERT语句一次只能输入一条元组

851 INSERT语句(续) 例9 某个学生新选修了某门课程,将有关记录插入SC表
假设学生的学号已赋给主变量stdno,课程号已赋给主变量couno。 gradeid=-1; EXEC SQL INSERT INTO SC(Sno, Cno, Grade) VALUES(:stdno, :couno, :gr:gradeid); 由于该学生刚选修课程,尚未考试,因此成绩列为空。所以本例中用指示变量指示相应的主变量为空值。

852 3.7.4 使用游标的SQL语句 必须使用游标的SQL语句 查询结果为多条记录的SELECT语句 CURRENT形式的UPDATE语句
CURRENT形式的DELETE语句

853 一、 查询结果为多条记录的SELECT语句
使用游标的步骤 1. 说明游标 2. 打开游标 3. 移动游标指针,然后取当前记录 4. 关闭游标

854 1. 说明游标 使用DECLARE语句 语句格式 功能 EXEC SQL DECLARE <游标名> CURSOR
FOR <SELECT语句>; 功能 是一条说明性语句,这时DBMS并不执行SELECT指定的查询操作。

855 2. 打开游标 使用OPEN语句 语句格式 功能 打开游标实际上是执行相应的SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中
EXEC SQL OPEN <游标名>; 功能 打开游标实际上是执行相应的SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中 这时游标处于活动状态,指针指向查询结果集中第一条记录之前

856 使用FETCH语句 语句格式 3. 移动游标指针,然后取当前记录 EXEC SQL FETCH [[NEXT|PRIOR|
FIRST|LAST] FROM] <游标名> INTO <主变量>[<指示变量>] [,<主变量>[<指示变量>]]...;

857 移动游标指针,然后取当前记录(续) 功能 指定方向推动游标指针,然后将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。
NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式。 NEXT:向前推进一条记录 PRIOR:向回退一条记录 FIRST:推向第一条记录 LAST:推向最后一条记录 缺省值为NEXT

858 移动游标指针,然后取当前记录(续) 说明 (1) 主变量必须与SELECT语句中的目标列表达式具有一一对应关系
(2) FETCH语句通常用在一个循环结构中,通过循环执行FETCH语句逐条取出结果集中的行进行处理 (3) 为进一步方便用户处理数据,现在一些关系数据库管理系统对FETCH语句做了扩充,允许用户向任意方向以任意步长移动游标指针

859 4. 关闭游标 使用CLOSE语句 语句格式 功能 说明 游标被关闭后,就不再和原来的查询结果集相联系
EXEC SQL CLOSE <游标名>; 功能 关闭游标,释放结果集占用的缓冲区及其他资源 说明 游标被关闭后,就不再和原来的查询结果集相联系 被关闭的游标可以再次被打开,与新的查询结果相联系

860 例题 例1 查询某个系全体学生的信息(学号、姓名、性别和年龄)。要查询的系名由用户在程序运行过程中指定,放在主变量deptname中
...... EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION;

861 例题(续) ...... /* 说明主变量 deptname,HSno,HSname,HSsex,HSage等*/
EXEC SQL END DECLARE SECTION; gets(deptname); /* 为主变量deptname赋值 */

862 例题(续) EXEC SQL DECLARE SX CURSOR FOR SELECT Sno, Sname, Ssex, Sage
FROM Student WHERE SDept=:deptname; /* 说明游标 */ EXEC SQL OPEN SX /* 打开游标 */

863 例题(续) WHILE(1) /* 用循环结构逐条处理结果集中的记录 */ {
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage; /* 将游标指针向前推进一行,然后从结 果集中取当前行,送相应主变量*/

864 例题(续) }; if (sqlca.sqlcode <> SUCCESS) break; /* 若所有查询结果均已处理完或出现
  /* 若所有查询结果均已处理完或出现 SQL语句错误,则退出循环 */ /* 由主语言语句进行进一步处理 */ ...... };

865 例题(续) EXEC SQL CLOSE SX; /* 关闭游标 */ ......

866 例题(续) 例2 查询某些系全体学生的信息。 ...... EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION; /* 说明主变量 deptname,HSno,HSname,HSsex,HSage等*/

867 例题(续) EXEC SQL END DECLARE SECTION; ......
EXEC SQL DECLARE SX CURSOR FOR SELECT Sno, Sname, Ssex, Sage FROM Student WHERE SDept=:deptname; /* 说明游标 */

868 例题(续) WHILE (gets(deptname)!=NULL) /* 接收主变量deptname的值 */ {
EXEC SQL OPEN SX /* 打开游标 */

869 例题(续) WHILE (1) { /* 用循环结构逐条处理结果集中的记录 */ EXEC SQL FETCH SX
INTO :HSno, :HSname, :HSsex, :HSage; /* 将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量*/

870 例题(续) if (sqlca.sqlcode <> SUCCESS) break; /* 若所有查询结果均已处理完或出现
/* 由主语言语句进行进一步处理 */ ...... }; /* 内循环结束 */

871 例题(续) EXEC SQL CLOSE SX; /* 关闭游标 */ }; /* 外循环结束 */ ......

872 二、CURRENT形式的UPDATE语句和DELETE语句
面向集合的操作 一次修改或删除所有满足条件的记录

873 二、CURRENT形式的UPDATE语句和DELETE语句
如果只想修改或删除其中某个记录 用带游标的SELECT语句查出所有满足条件的记录 从中进一步找出要修改或删除的记录 用CURRENT形式的UPDATE语句和DELETE语句修改或删除之

874 CURRENT形式的UPDATE语句和DELETE语句(续)
步骤 (1) DECLARE  说明游标 (2) OPEN 打开游标,把所有满足查询条件的记录从指定表取至缓冲区 (3) FETCH 推进游标指针,并把当前记录从缓冲区中取出来送至主变量

875 CURRENT形式的UPDATE语句和DELETE语句(续)
(4) 检查该记录是否是要修改或删除的记录,是则处理之  (5) 重复第(3)和(4)步,用逐条取出结果集中的行进行判断和处理 (6) CLOSE 关闭游标,释放结果集占用的缓冲区和其他资源

876 CURRENT形式的UPDATE语句和DELETE语句(续)
说明游标 为UPDATE语句说明游标 使用带FOR UPDATE OF <列名>短语的DECLARE语句 语句格式 EXEC SQL DECLARE <游标名> CURSOR FOR <SELECT语句> FOR UPDATE OF <列名>; FOR UPDATE OF <列名>短语用于指明检索出的数据在指定列上是可修改的,以便DBMS进行并发控制

877 CURRENT形式的UPDATE语句和DELETE语句(续)
使用带FOR UPDATE短语的DECLARE语句 语句格式 EXEC SQL DECLARE <游标名> CURSOR FOR <SELECT语句> FOR UPDATE; FOR UPDATE短语提示DBMS进行并发控制

878 CURRENT形式的UPDATE语句和DELETE语句(续)
修改或删除当前记录 经检查缓冲区中记录是要修改或删除的记录,则用UPDATE语句或DELETE语句修改或删除该记录 语句格式 <UPDATE语句> WHERE CURRENT OF <游标名> <DELETE语句> WHERE CURRENT OF <游标名> WHERE CURRENT OF <游标名>子句表示修改或删除的是该游标中最近一次取出的记录

879 例题 例3 对某个系的学生信息,根据用户的要求修改其中某些人的年龄字段。 思路
查询某个系全体学生的信息(要查询的系名由主变量deptname指定) 然后根据用户的要求修改其中某些记录的年龄字段

880 例题(续) ...... EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION;
/* 说明主变量 deptname,HSno,HSname,HSsex,HSage,NEWAge等*/

881 例题(续) ...... gets(deptname); /* 为主变量deptname赋值 */
EXEC SQL END DECLARE SECTION; gets(deptname); /* 为主变量deptname赋值 */

882 例题(续) EXEC SQL DECLARE SX CURSOR FOR SELECT Sno, Sname, Ssex, Sage
FROM Student WHERE SDept=:deptname   FOR UPDATE OF Sage; /* 说明游标 */ EXEC SQL OPEN SX /* 打开游标 */

883 例题(续) WHILE(1) {/* 用循环结构逐条处理结果集中的记录 */
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage; /* 将游标指针向前推进一行,然后从结果集 中取当前行,送相应主变量*/

884 例题(续) if (sqlca.sqlcode <> SUCCESS) break; /* 若所有查询结果均已处理完或
  /* 若所有查询结果均已处理完或 出现SQL语句错误,则退出循环 */ printf("%s, %s, %s, %d", Sno, Sname, Ssex, Sage); /* 显示该记录 */ printf("UPDATE AGE ? "); /* 问用户是否要修改 */ scanf("%c",&yn);

885 例题(续) if (yn='y' or yn='Y') /* 需要修改 */ { printf("INPUT NEW AGE: ");
scanf("%d",&NEWAge); /* 输入新的年龄值 */ EXEC SQL UPDATE Student SET Sage=:NEWAge WHERE CURRENT OF SX; /* 修改当前记录的年龄字段 */ };

886 例题(续) ...... }; EXEC SQL CLOSE SX; /* 关闭游标 */

887 例题(续) 例4 对某个系的学生信息,根据用户的要求删除其中某些人的记录。 ...... EXEC SQL INCLUDE SQLCA;
例4 对某个系的学生信息,根据用户的要求删除其中某些人的记录。 ...... EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; /* 说明主变量 deptname,HSno,HSname,HSsex,HSage等*/

888 例题(续) ...... EXEC SQL END DECLARE SECTION;
gets(deptname); /* 为主变量deptname赋值 */

889 例题(续) EXEC SQL DECLARE SX CURSOR FOR SELECT Sno, Sname, Ssex, Sage
FROM Student WHERE SDept=:deptname FOR UPDATE; /* 说明游标 */ EXEC SQL OPEN SX /* 打开游标 */

890 例题(续) WHILE(1){ /* 用循环结构逐条处理结果集中的记录 */
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage; /* 将游标指针向前推进一行,然后从结 果集中取当前行,送相应主变量*/

891 例题(续) if (sqlca.sqlcode <> SUCCESS) break; /* 若所有查询结果均已处理完或
  /* 若所有查询结果均已处理完或 出现SQL语句错误,则退出循环 */ printf("%s, %s, %s, %d", Sno, Sname, Ssex, Sage); /* 显示该记录 */

892 例题(续) printf("DELETE ? "); /* 问用户是否要删除 */ scanf("%c",&yn);
if (yn='y' or yn='Y') /* 需要删除 */ EXEC SQL DELETE FROM Student WHERE CURRENT OF SX; /* 删除当前记录 */

893 例题(续) ...... }; EXEC SQL CLOSE SX; /* 关闭游标 */

894 3.7 嵌 入 式 SQL 3.7.1 嵌入式SQL的一般形式 3.7.2 嵌入式SQL语句与主语言之间的通信

895 3.7.5 动态SQL简介 静态嵌入式SQL 动态嵌入式SQL

896 一、静态SQL的特点 用户可以在程序运行过程中根据实际需要输入WHERE子句或HAVING子句中某些变量的值。
语句中主变量的个数与数据类型在预编译时都是确定的,只有是主变量的值是程序运行过程中动态输入的。

897 静态SQL的不足 静态SQL语句提供的编程灵活性在许多情况下 仍显得不足,不能编写更为通用的程序。

898 需求 例,对SC: 任课教师想查选修某门课程的所有学生的学号及其成绩 班主任想查某个学生选修的所有课程的课程号及相应成绩
学生想查某个学生选修某门课程的成绩 即:查询条件是不确定的,要查询的属性列也是不确定的

899 二、动态SQL 1. 什么是动态嵌入式SQL 2. 应用范围 动态SQL方法允许在程序运行过程中临时“组装”SQL语句。
在预编译时下列信息不能确定时 SQL语句正文 主变量个数 主变量的数据类型 SQL语句中引用的数据库对象(列、索引、基本表、视图等)

900 动态SQL(续) 3. 动态SQL的形式 语句可变 条件可变 数据库对象、查询条件均可变 临时构造完整的SQL语句 WHERE子句中的条件
HAVING短语中的条件 数据库对象、查询条件均可变 SELECT子句中的列名 FROM子句中的表名或视图名

901 动态SQL(续) 4. 常用动态SQL语句 使用动态SQL技术更多的是涉及程序设计方面的知识,而不是SQL语言本身
EXECUTE IMMEDIATE PREPARE EXECUTE DESCRIBE 使用动态SQL技术更多的是涉及程序设计方面的知识,而不是SQL语言本身

902 第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 数据定义 3.3 查询 3.4 数据更新 3.5 视图 3.6 数据控制
3.8 小结

903 3.8 小 结 SQL的特点 ⒈ 综合统一 2. 度非过程化 3. 面向集合的操作方式 4. 同一种语法结构提供两种使用方式
3.8 小 结 SQL的特点 ⒈ 综合统一 2. 度非过程化 3. 面向集合的操作方式 4. 同一种语法结构提供两种使用方式 5. 语言简捷,易学易用

904 小结(续) 交互式SQL 数据定义 查询 数据更新 数据控制

905 小结(续)

906 小结(续) 嵌入式SQL 与主语言的通信方式 1. SQL通信区 2. 主变量 3. 游标 向主语言传递SQL语句的执行状态信息
解决集合性操作语言与过程性操作语言的不匹配

907 小结(续) 嵌入式SQL(续) 静态SQL 不用游标 动态SQL 不需要返回结果数据的SQL语句 只返回一条结果的SQL语句 使用游标
说明游标 打开游标 推进游标并取当前记录 关闭游标 动态SQL

908 第二、三章的复习 关系数据结构:表 关系模型 关系操作(关系代数、关系演算、SQL) 完整性约束 实体完整性、 参照完整性 用户定义完整性

909 1、关系中没有行序的原因是__. 2、关系中不允许有重复元组的原因是__ 3、关系模型的基本数据结构是__ 4、实体完整性是对__(键)的约束,参照完整性是对__的约束。 5、关系代数的基本操作是____。 6、等式R∞S=R×S成立的条件是__

910 7、关系的并、差、交操作,要求两个关系具有__。
8、一般,在关系代数运算中,当查询涉及到“否定”时,就要用到__操作;当查询涉及到“全部值”时,就要用到__操作 9、在关系中,“元数”是指 A、行数 B、元组个数 C、关系个数 D、列数

911 10、在关系中,“基数”是指() A、行数 B、属性个数 C、关系个数 D、列数 11、设关系R、S、W各有10个元组,那么这3个关系的自然连接的元组个数有 A、 B、30 C、 D、不确定(与计算结果有关

912 11、设W=R∞S(条件为iθj),且W、R、S的元组个数分别为p、m、n,那么三者之间满足
A、p<(m+n) B、P≤(m+n) C、 p<(m×n) D、 P≤(m×n) 12、设关系R和S的结构相同,且各有10个元组,那么这两个关系的并操作结果的元组个数为 A、 B、小于等于10 C、 D、小于等于20

913 C、 σ1<2(R ∞ S) D、 σ1<4(R ∞ S) 14、如果两个关系没有公共属性,那么其自然连接
13、设关系R和S的属性个数分别为2和3,那么R ∞S(条件为1<2)等价于 A、 σ1<2(R×S) B、 σ1<4(R×S) C、 σ1<2(R ∞ S) D、 σ1<4(R ∞ S) 14、如果两个关系没有公共属性,那么其自然连接 A、转化为笛卡尔积操作 B、转化为连接操作 C、转化为外部并操作 D、结果为空关系

914 15、下列式子中,不正确的是 A、R-S=R-(R ∩S) B、R=(R-S)U(R ∩S) C、R ∩S=S-(S-R) D、R ∩S=S-(R-S)

915 16、关系代数中的θ连接操作由()操作组合而成。 A、 σ和π B、 σ和× C、 σ、π和× D、 π和×
17、 设四元关系R(A,B,C,D),则下面不正确的是() A、 πD,B(R)为取属性D,B的两列组成新关系 B、 π4,2(R)为取属性的值为4,2的两列组成新关系 C、 πD,B(R)与 π4,2(R)是等价的 D、 πD,B(R) π4,2(R)是相同关系

916 18、设R为K元关系,则σ 2>’4’(R)表示()
A、从R中挑选2的值大于4个分量值的元组所组成的关系 B、从R中挑选第2个分量值大于4的元组所构成的关系。 C、从R中挑选第2个分量值大于4个分量值的元组所构成的关系 D、 σ 2>’4’(R)和R相比,基数不变,元数减少

917 A、(1,2)B、(2,null)C、(3,3)D、(4,1)
6 7 2 5 D A 1 2 null 3 4 R S 19、有关系:R(A,B,C),主键=A;S(D,A),主键=D,外键=A,参照R的属性A,关系R和S的元组如下所示。指出关系S中违反关系完整性规则的元组是() A、(1,2)B、(2,null)C、(3,3)D、(4,1)

918 20、自然连接是构成新关系的有效方法。一般情况下,要求R和S含有一个或多个共有的()
A、元组 B、行 C、记录 D、属性

919 21、设有属性A,B,C,D,以下表示中不是关系的是()
A、R(A) B、R(A,B,C,D) C、R(A×B×C×D) D、R(A,B)

920 22、设关系R(A,B,C)和S(B,C,D),下列各关系代数表达式不成立的是()
A、 πA(R) ∞ πD(S) B、R ∪ S C、 πB(R) ∩ πB(S) D、R∞S

921 23、关系模式的任何属性() A、不可再分 B、可再分 C、命名在该关系模式中可以不唯一 D、以上都不是

922 24、试述等值连接和自然连接的区别。 25、在参照完整性中,外码的属性值能否为空?什么时候可以为空?

923 26、设有如下所示的两个关系E1和E2,其中E2是从E1中经过关系代数运算所形成的结果,试给出该运算的表达式。
A B C 1 2 3 4 5 6 7 8 9 D A 5 6 8 9 E1 E2

924 27、 S R A B C 3 6 7 2 5 4 A B C 3 4 5 7 2 计算:RUS,R-S,R ∩S,R×S,π3,2(S) , σB<‘5’(R), R S ,R S 2<2

925 第三章 1、在SQL中,关系模式称为___,子模式(外模式)称为___,元组称为___,属性称为___。
3、基本表中,“主键”概念应该体现其值的___和___两个特征。

926 4、操作“元组 IN (集合)”的语义是___
5、表达式中的通配符“%”表示___,“_”表示___ 6、操作“元组>SOME(集合)”的语义是___ 7、操作“元组<ALL(集合)”的语义是___

927 8、SQL有两种使用方式: ___和___。
10、为保证嵌入式SQL的实现,通常DBMS制造商提供一个___,供编译时使用。 11、SQL语句在嵌入在C语言程序中时,必须加上前缀标识___和结束标志___

928 12、在SQL中,用户可以直接进行查询操作的是
A、实表和虚表 B、基本表和实表 C、视图和虚表 D、基本表 13、SQL中,与“NOT IN”等价的操作是 A、=SOME B、<>SOME C、=ALL D、<>ALL

929 14、SQL中,谓词EXISTS可用来测试一个集合是否
A、有重复元组 B、有重复的列名 C、为非空集合 D、有空值

930 15、基本表EMP(ENO,ENAME,SALARY,DNO)表示职工的工号、姓名、工资和所在部门的编号。
基本表DEPT(DNO,DNAME)表示部门的编号和部门名。 有一SQL语句:SELECT COUNT(DISTINCT DNO) FROM EMP; 其等价的查询语句是 A、统计职工的总人数 B、统计每一部门的职工人数 C、统计职工服务的部门数目 D、统计每一职工服务的部门数目

931 EMP(ENO,ENAME,SALARY,DNO) DEPT(DNO,DNAME)
16、SELECT ENO,ENAME FROM EMP WHERE DNO NOT IN (SELECT DNO FROM DEPT WHERE DNAME=‘金工车间’); 其等价的关系代数表达式

932 17、UPDATE EMP SET SALARY= SALARY*1.05 WHERE DNO=‘D6’ AND SALARY<(SELECT AVG(SALARY) FROM EMP); 其等价的修改语句为 A、为工资低于D6部门平均工资的所有职工加薪5% B、为工资低于整个企业平均工资的职工加薪5% C、为在D6部门工资、工资低于整个企业平均工资的职工加薪5% D、为在D6部门工资、工资低于本部门平均工资的职工加薪5%

933 18、有关嵌入式SQL的叙述中,不正确的是 A、宿主语言是指C一类高级程序设计语言 B、宿主语言是指SQL语言 C、在程序中要区分SQL语句和宿主语言语句 D、SQL有交互式和嵌入式两种使用方式

934 19、允许在嵌入的SQL语句中,引用宿主语言的程序变量,在引用时
A、直接引用 B、这些变量前必须加符号* C、这些变量前必须加符号: D、这些变量前必须加符号&

935 20、如果嵌入的SELECT语句的查询结果肯定是单元组,那么嵌入时
A、肯定不涉及游标机制 B、必须使用游标机制 C、是否使用游标,由程序员决定 D、是否使用游标,由DBMS决定。

936 21、请问SQL的GRANT和REVOKE命令属于数据库保护中的()控制
A、完整性 B、安全性 C、并发控制 D、恢复机制 22、SQL语句中,实现数据检索的语句是() A、SELECT B、INSERT C、UPDATE D、FIND

937 23、下列SQL语句中,修改表结构的是() A、ALTER B、CREATE C、UPDATE D、DELETE 24、在SQL中,如果希望将查询结果排序,应在SELECT语句中使用()子句 A、ASC B、HAVING C、DESC D、ORDER BY

938 25、在SQL语言中,创建基本表应使用()语句
A、CREATE VIEW B, CREATE SCHEMA C. CREATE INDEX D,CREATE TABLE 26、在SQL语句中,用于测试子查询是否为空的谓词是() A、EXISTS B. UNIQUE C.SOME D.ALL

939 27、在SQL中,建立唯一索引要用到()保留字
A、PRIMARY B. UNIQUE C. INDEX D. DISTINCT 28、视图创建后,数据库中存放的是() A、查询语句 B、查询结果 C、视图定义 D、所引用的基本表的定义

940 29、视图是一个“虚表”,视图的构造基于()
A、基本表 B、视图 C、基本表或视图 D、数据字典 30、在视图上不能完成的操作是() A、更新视图 B、查询 C、在视图上定义新的基本表 D、在视图上定义新视图

941 31、在WHERE子句的条件表达式中,可以用()通配符与所在位置的单个字符相匹配。
A). B)% C)? D)_ 32、向基本表中增加一个新列后,原有元组在该列上的值是() A)True B)False C)空值 D)不确定

942 33、嵌入式SQL语句中引用主变量时,必须在变量名前加()标志。
A、逗号 B、冒号 C、分号 D、句号 34、在SELECT语句中,与关系代数中∏运算符对应的是()子句 A、SELECT B、FROM C、WHERE D、GROUP BY

943 35、在SELECT语句的下列子句中,通常和HAVING子句同时使用的是()
A、ORDER BY B、WHERE C、GROUP BY D、均不需要

944 36、假定学生关系是S(S#,Sname,Sex,Age),课程关系是C(C#,Cname,TEACHER),学生选课关系是SC(S#,C#,Grade)。要查找选修“数据库系统概论”课程的“男”学生学号,将涉及关系() A、S B、SC,C C、S,SC D、S,SC,C

945 37、为什么将SQL的视图称为“虚表”? 38、所有的视图是否都可以更新?为什么? 39、相关子查询和不相关子查询在执行上有什么不同?

946 40、在嵌入式SQL中是如何区分SQL语句和主语言语句的?
42、试述DELETE语句与DROP TABLE语句的区别。

947 43、SQL的集合处理方式与宿主语言的单记录处理方式之间是如何协调的?

948 S(S#,SNAME,AGE,SEX),SC(S#,C#,GRADE), C(C#,CNAME,TEACHER),
用SQL语句写出下列对S、SC、C的查询要求: 1)统计有学生选修的课程门数 2)求选修C4课程的女学生的平均成绩 3)求LIU老师所授课程的每门课的平均成绩 4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

949 5)检索学号比WANG同学大,而年龄比他小的学生姓名
6)在表SC中检索成绩为空值的学生学号和课程号 7)检索姓名以L打头的所有学生的姓名和年龄 8)求年龄大于女同学平均年龄的男生姓名和年龄

950 9)往关系C中插入一个课程元组(’C8’,’VC++’,’BAO’)
10)检索所授每门课程平均成绩均大于80分的教师姓名,并把检索到的值送往另一个已存在的表FACULTY(TNAME) 11)在SC中删除尚无成绩的选课元组 12)把MATHS课不及格的成绩全改为60分 13)在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%。

951 设有基本表R(A,B,C)和S(A,B,C),试用SQL语句表示下列关系代数表达式。
①R U S ②R ∩ S ③R-S ④R×S ⑤∏A,B(R) ∏B,C(S) ⑥∏1,6(σ3=4(R×S)) ⑦∏1,2,3((R S)) 8、R÷ ∏C(S)

952 下课了。。。 休息一会儿。。。

953 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第四章 关系系统及其查询优化

954 第四章 关系系统及其查询优化 4.1 关系系统 4.2 关系系统的查询优化 4.3 小结

955 关系系统 能够在一定程度上支持关系模型的数据库管理系统是关系系统。 由于关系模型中并非每一部分都是同等重要的
并不苛求一个实际的关系系统必须完全支持关系模型。

956 关系系统与关系模型 关系数据结构 关系操作 关系完整性 域及域上定义的关系 并、交、差、广义笛卡尔积、选择、投影、连接、除等
实体完整性、参照完整性、用户自己定义的完整性

957 关系系统的定义 一个数据库管理系统可定义为关系系统,当且仅 当它至少支持: 对关系系统的最低要求 1. 关系数据库(即关系数据结构)
系统中只有表这种结构 2. 支持选择、投影和(自然)连接运算 对这些运算不要求用户定义任何物理存取路径 对关系系统的最低要求

958 关系系统的定义 不支持关系数据结构的系统显然不能称为关系系统 仅支持关系数据结构,但没有选择、投影和连接运算功能的系统仍不能算作关系系统。
原因:不能提高用户的生产率 支持选择、投影和连接运算,但要求定义物理存取路径,这种系统也不能算作真正的关系系统 原因:就降低或丧失了数据的物理独立性 选择、投影、连接运算是最有用的运算

959 4.1.2 关系系统的分类 分类依据:支持关系模型的程度 分类 ⒈ 表式系统:支持关系数据结构(即表) ⒉ (最小)关系系统
支持:关系数据结构 选择、投影、连接关系操作 ⒊ 关系完备的系统 所有的关系代数操作 ⒋ 全关系系统 支持:关系模型的所有特征 特别是:数据结构中域的概念

960 关系系统的分类 (续) 数据结构 数据操作 完整性 表式系统 (最小)关系系统 选择、投影、连接 关系完备的系统 全关系系统

961 第四章 关系系统及其查询优化 4.1 关系系统 4.2 关系系统的查询优化 4.3 小结

962 4.2 关系系统的查询优化 4.2.1 查询优化概述 4.2.2 查询优化的必要性 4.2.3 查询优化的一般准则
4.2.4 关系代数等价变换规则 4.2.5 关系代数表达式的优化算法 4.2.6 优化的一般步骤

963 4.2.1 查询优化概述 查询优化的必要性 查询优化的可能性 查询优化极大地影响RDBMS的性能。
查询优化的可能性 关系数据语言的级别很高,使DBMS可以从关系表达式中分析查询语义。

964 用户不必考虑如何最好地表达查询以获得较好的效率
由DBMS进行查询优化的好处 用户不必考虑如何最好地表达查询以获得较好的效率 系统可以比用户程序的优化做得更好 (1) 优化器可以从数据字典中获取许多统计信息,而用户程序则难以获得这些信息

965 由DBMS进行查询优化的好处 (2)如果数据库的物理统计信息改变了,系统可以自动对查询重新优化以选择相适应的执行计划。
在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。 (3)优化器可以考虑数百种不同的执行计划,而程序员一般 只能考虑有限的几种可能性。 (4)优化器中包括了很多复杂的优化技术

966 查询优化目标 查询优化的总目标 选择有效策略,求得给定关系表达式的值 实际系统的查询优化步骤 1. 将查询转换成某种内部表示,通常是语法树
2. 根据一定的等价变换规则把语法树转换成标准 (优化)形式

967 实际系统的查询优化步骤 3. 选择低层的操作算法 4. 生成查询计划(查询执行方案) 对于语法树中的每一个操作 计算各种执行算法的执行代价
选择代价小的执行算法 4. 生成查询计划(查询执行方案) 查询计划是由一系列内部操作组成的。

968 代价模型 集中式数据库 分布式数据库 单用户系统 总代价 = I/O代价 + CPU代价 多用户系统

969 4.2.2 查询优化的必要性 例:求选修了课程C2的学生姓名 SELECT Student.Sname FROM Student, SC
查询优化的必要性 例:求选修了课程C2的学生姓名 SELECT Student.Sname FROM Student, SC WHERE Student.Sno=SC.Sno AND SC.Cno='2';

970 查询优化的必要性(续) 假设1:外存: Student:1000条,SC:10000条, 选修2号课程:50条
假设2:一个内存块装元组:10个Student, 或100个SC, 内存中一次可以存放: 5块Student元组, 1块SC元组和若干块连接结果元组 假设3:读写速度:20块/秒 假设4:连接方法:基于数据块的嵌套循环法

971 执行策略1 Q1= ПSname(бStudent.Sno=SC.Sno ∧SC.Cno='2' (Student×SC))  ① Student×SC 读取总块数= 读Student表块数 + 读SC表遍数 *每遍块数  =1000/10+(1000/(10×5)) ×(10000/100) =100+20×100=2100 读数据时间=2100/20=105秒

972 不同的执行策略,考虑I/O时间 中间结果大小 = 1000*10000 = (1千万条元组) 写中间结果时间 = /10/20 = 50000秒  ②б 读数据时间 = 50000秒  ③П 总时间 =105+50000+50000秒 = 秒 = 27.8小时

973 查询优化的必要性(续) 2. Q2= ПSname(бSC.Cno=' 2' (Student SC)) ① 读取总块数= 2100块
 ① 读取总块数= 2100块 读数据时间=2100/20=105秒 中间结果大小= (减少1000倍) 写中间结果时间=10000/10/20=50秒  ②б 读数据时间=50秒  ③П  总时间=105+50+50秒=205秒=3.4分 

974 查询优化的必要性(续) 3. Q2= ПSname(Student бSC.Cno=' 2' (SC)) ①б
读数据时间=100/20=5秒  中间结果大小=50条 不必写入外存  读Student表总块数= 1000/10=100块 ③ П  总时间=5+5秒=10秒

975 查询优化的必要性(续) 4. Q2= ПSname(Student бSC.Cno='2' (SC))
假设SC表在Cno上有索引,Student表在Sno上有索引  ①б 读SC表索引= 读SC表总块数= 50/100<1块 读数据时间  中间结果大小=50条 不必写入外存

976 查询优化的必要性(续) 读Student表索引= 读Student表总块数= 50/10=5块 读数据时间 ③ П 总时间<10秒

977 4.2.3 查询优化的一般准则 选择运算应尽可能先做 目的:减小中间关系 在执行连接操作前对关系适当进行预处理 按连接属性排序
查询优化的一般准则 选择运算应尽可能先做   目的:减小中间关系 在执行连接操作前对关系适当进行预处理 按连接属性排序 在连接属性上建立索引  投影运算和选择运算同时做 目的:避免重复扫描关系 将投影运算与其前面或后面的双目运算结合 目的:减少扫描关系的遍数

978 查询优化的一般准则 (续) 例:бStudent.Sno=SC.Sno (Student×SC) Student SC
某些选择运算+在其前面执行的笛卡尔积 ===> 连接运算 例:бStudent.Sno=SC.Sno (Student×SC)   Student SC 提取公共子表达式

979 4.2.4 关系代数等价变换规则 关系代数表达式等价 指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的
上面的优化策略大部分都涉及到代数表达式的变换

980 常用的等价变换规则 设E1、E2等是关系代数表达式,F是条件表达式 l. 连接、笛卡尔积交换律 E1× E2≡ E2×E1
E1 F E2≡E2 F E1

981 关系代数等价变换规则(续) 2. 连接、笛卡尔积的结合律 (E1×E2) × E3 ≡ E1 × (E2×E3)
2. 连接、笛卡尔积的结合律 (E1×E2) × E3 ≡ E1 × (E2×E3) (E1 E2) E3 ≡ E1 (E2 E3) (E1 E2) E3 ≡ E1 (E2 E3) F F F F

982 关系代数等价变换规则(续) 3. 投影的串接定律
π A1,A2, ,An(π B1,B2, ,Bm(E))≡ π A1,A2, ,An (E) 假设: 1) E是关系代数表达式 2) Ai(i=1,2,…,n), Bj(j=l,2,…,m)是属性名 3){A1, A2, …, An}构成{Bl,B2,…,Bm}的子集

983 关系代数等价变换规则(续) 4. 选择的串接定律 бF1 ( б F2(E))≡ бF1∧ F2(E) 选择的串接律说明 选择条件可以合并
选择的串接律说明 选择条件可以合并 这样一次就可检查全部条件。

984 关系代数等价变换规则(续) 5. 选择与投影的交换律 π A1,A2, ,An ( бF (E))≡
(1)假设: 选择条件F只涉及属性A1,…,An бF (πA1,A2, ,An(E))≡ πA1,A2, ,An(бF(E)) (2)假设: F中有不属于A1, …,An的属性B1,…,Bm π A1,A2, ,An ( бF (E))≡ πA1,A2, ,An(бF (πA1,A2, ,An,B1,B2, ,Bm(E)))

985 关系代数等价变换规则(续) 6. 选择与笛卡尔积的交换律 (1) 假设:F中涉及的属性都是E1中的属性
бF (E1×E2)≡бF (E1)×E2  (2) 假设:F=F1∧F2,并且F1只涉及E1中的属性, F2只涉及E2中的属性 则由上面的等价变换规则1,4,6可推出: бF(E1×E2) ≡б F1(E1)×бF2 (E2) 

986 关系代数等价变换规则(续) (3) 假设: F=F1∧F2, F1只涉及E1中的属性, F2涉及E1和E2两者的属性
бF(E1×E2)≡б F2(бF1(E1)×E2) 它使部分选择在笛卡尔积前先做

987 关系代数等价变换规则(续) 7. 选择与并的交换 8. 选择与差运算的交换 假设:E=E1∪E2,E1,E2有相同的属性名
бF(E1∪E2)≡ бF(E1)∪ бF(E2) 8. 选择与差运算的交换 假设:E1与E2有相同的属性名 бF(E1-E2)≡ бF(E1) - бF(E2)

988 关系代数等价变换规则(续) 9. 投影与笛卡尔积的交换 假设:E1和E2是两个关系表达式,
A1,…,An是E1的属性, B1,…,Bm是E2的属性 π A1,A2, …,An,B1,B2, …,Bm (E1×E2)≡ π A1,A2, …,An(E1)× π B1,B2, …,Bm(E2)

989 关系代数等价变换规则(续) l0. 投影与并的交换 假设:E1和E2 有相同的属性名 π A1,A2, …,An(E1∪E2)≡
π A1,A2, …,An(E1)∪ π A1,A2, …,An(E2)

990 小结 1-2: 连接、笛卡尔积的交换律、结合律 3: 合并或分解投影运算 4: 合并或分解选择运算 5-8: 选择运算与其他运算交换
1-2: 连接、笛卡尔积的交换律、结合律 3: 合并或分解投影运算 4: 合并或分解选择运算 5-8: 选择运算与其他运算交换 5,9,10: 投影运算与其他运算交换

991 4.2 关系系统的查询优化 4.2.1 查询优化概述 4.2.2 查询优化的必要性 4.2.3 查询优化的一般准则
4.2.4 关系代数等价变换规则 4.2.5 关系代数表达式的优化算法 4.2.6 优化的一般步骤

992 4.2.5 关系代数表达式的优化算法 算法:关系表达式的优化 输入:一个关系表达式的语法树。 输出:计算该表达式的程序。 方法:
(1)分解选择运算 利用规则4把形如бF1 ∧F2 ∧ … ∧ Fn (E)变换为 бF1 (бF2(… (бFn(E))… ))

993 对每一个投影利用规则3,9,l0,5中的一般形式尽可能把它移向树的叶端。
关系代数表达式的优化算法 (续) (2)通过交换选择运算,将其尽可能移到叶端 对每一个选择,利用规则4~8尽可能把它移到树的叶端。 (3)通过交换投影运算,将其尽可能移到叶端 对每一个投影利用规则3,9,l0,5中的一般形式尽可能把它移向树的叶端。

994 关系代数表达式的优化算法 (续) (4)合并串接的选择和投影,以便能同时执行或在一次扫描中完成
利用规则3~5把选择和投影的串接合并成单个选择、单个投影或一个选择后跟一个投影。 使多个选择或投影能同时执行,或在一次扫描中全部完成 尽管这种变换似乎违背“投影尽可能早做”的原则,但这样做效率更高。

995 关系代数表达式的优化算法 (续) (5)对内结点分组 把上述得到的语法树的内节点分组。
每一双目运算(×, ,∪,-)和它所有的直接祖先为一组(这些直接祖先是б,π运算)。 如果其后代直到叶子全是单目运算,则也将它们并入该组,但当双目运算是笛卡尔积(×),而且其后的选择不能与它结合为等值连接时除外。把这些单目运算单独分为一组。

996 关系代数表达式的优化算法 (续) (6)生成程序 生成一个程序,每组结点的计算是程序中的一步。
各步的顺序是任意的,只要保证任何一组的计算不会在它的后代组之前计算。

997 4.2 关系系统的查询优化 4.2.1 查询优化概述 4.2.2 查询优化的必要性 4.2.3 查询优化的一般准则
4.2.4 关系代数等价变换规则 4.2.5 关系代数表达式的优化算法 4.2.6 优化的一般步骤

998 4.2.6 优化的一般步骤 1.把查询转换成某种内部表示 2.代数优化:把语法树转换成标准(优化) 形式 3.物理优化:选择低层的存取路径
4.生成查询计划,选择代价最小的

999 优化的一般步骤 (续) (1)把查询转换成某种内部表示 例:求选修了课程C2的学生姓名 SELECT Student.Sname
FROM Student, SC WHERE Student.Sno=SC.Sno AND SC.Cno='2';

1000 join(Student.Sno=SC.Sno)
(1)把查询转换成某种内部表示 语法树 结果 project(Sname) select(SC.Cno=2) join(Student.Sno=SC.Sno) Student SC

1001 关系代数语法树 πSname SC.Cno=’2’ Student.Sno=SC.S × Student SC

1002 (2)代数优化 πSname 利用优化算法把语法树转换成标准(优化)形式 Student.Sno=SC.Sno SC.Cno=2 ×
πSname Student.Sno=SC.Sno SC.Cno=2 × Student SC

1003 (3)物理优化:选择低层的存取路径 - 优化器查找数据字典获得当前数据库状态信息 选择字段上是否有索引 连接的两个表是否有序 连接字段上是否有索引 然后根据一定的优化规则选择存取路径   如本例中若SC表上建有Cno的索引,则应该利用这个索引,而不必顺序扫描SC表。

1004 (4)生成查询计划,选择代价最小的 对两个表作排序预处理
在作连接运算时,若两个表(设为R1,R2)均无序,连接属性上也没有索引,则可以有下面几种查询计划: 对两个表作排序预处理 对R1在连接属性上建索引 对R2在连接属性上建索引 在R1,R2的连接属性上均建索引 对不同的查询计划计算代价,选择代价最小的一个。 在计算代价时主要考虑磁盘读写的I/O数,内存CPU处理时间在粗略计算时可不考虑。

1005 第四章 关系系统及其查询优化 4.1 关系系统 4.2 关系系统的查询优化 4.3 小结

1006 4.3 小结 关系系统 关系系统的定义 一个数据库管理系统可定义为关系系统,当且仅当它至少支持: 1. 关系数据库(即关系数据结构)
2. 支持选择、投影和(自然)连接运算, 且不要求用户定义任何物理存取路径

1007 小结 (续) 关系系统的分类 表式系统 (最小)关系系统 关系完备系统 全关系系统

1008 小结 (续) 关系系统的查询优化 代数优化:关系代数表达式的优化 关系代数等价变换规则 关系代数表达式的优化算法
代数优化:关系代数表达式的优化 关系代数等价变换规则 关系代数表达式的优化算法 物理优化:存取路径和低层操作算法的选择

1009 下课了。。。 休息一会儿。。。

1010 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第五章 关系数据理论

1011 第五章 关系数据理论 5.1 问题的提出 5.2 规范化 5.3 数据依赖的公理系统 *5.4 模式的分解 5.5 小结

1012 5.1 问题的提出 关系数据库逻辑设计 针对具体问题,如何构造一个适合于它的数据模式 数据库逻辑设计的工具──关系数据库的规范化理论

1013 问题的提出 一、概念回顾 二、关系模式的形式化定义 三、什么是数据依赖 四、关系模式的简化定义 五、数据依赖对关系模式影响

1014 一、概念回顾 关系:描述实体、属性、实体间的联系。 从形式上看,它是一张二维表,是所涉及属性的笛卡尔积的一个子集。 关系模式:用来定义关系。
关系数据库:基于关系模型的数据库,利用关系来描述现实世界。 从形式上看,它由一组关系组成。 关系数据库的模式:定义这组关系的关系模式的全体。

1015 二、关系模式的形式化定义 关系模式由五部分组成,即它是一个五元组: R(U, D, DOM, F) U: 组成该关系的属性名集合
D: 属性组U中属性所来自的域 DOM:属性向域的映象集合 F: 属性间数据的依赖关系集合

1016 三、什么是数据依赖 1. 完整性约束的表现形式 限定属性取值范围:例如学生成绩必须在0-100之间
定义属性值间的相互关连(主要体现于值的相等与否),这就是数据依赖,它是数据库模式设计的关键

1017 什么是数据依赖(续) 2. 数据依赖 是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系 是现实世界属性间相互联系的抽象
是数据内在的性质 是语义的体现

1018 什么是数据依赖(续) 3. 数据依赖的类型 函数依赖(Functional Dependency,简记为FD)
多值依赖(Multivalued Dependency,简记为MVD) 其他

1019 四、关系模式的简化表示 关系模式R(U, D, DOM, F) 简化为一个三元组: R(U, F)
当且仅当U上的一个关系r 满足F时,r称为关系模式 R(U, F)的一个关系

1020 五、数据依赖对关系模式的影响 例:描述学校的数据库: 学生的学号(Sno)、所在系(Sdept)
系主任姓名(Mname)、课程名(Cname) 成绩(Grade) 单一的关系模式 : Student <U、F> U ={ Sno, Sdept, Mname, Cname, Grade }

1021 数据依赖对关系模式的影响(续) 学校数据库的语义: ⒈ 一个系有若干学生, 一个学生只属于一个系; ⒉ 一个系只有一名主任;
⒈ 一个系有若干学生, 一个学生只属于一个系; ⒉ 一个系只有一名主任; ⒊ 一个学生可以选修多门课程, 每门课程有若干学生选修; ⒋ 每个学生所学的每门课程都有一个成绩。

1022 数据依赖对关系模式的影响(续) 属性组U上的一组函数依赖F: (Sno, Cname) → Grade }
F ={ Sno → Sdept, Sdept → Mname, (Sno, Cname) → Grade } Sno Cname Sdept Mname Grade

1023 关系模式Student<U, F>中存在的问题
⒈ 数据冗余太大 浪费大量的存储空间 例:每一个系主任的姓名重复出现 ⒉ 更新异常(Update Anomalies) 数据冗余 ,更新数据时,维护数据完整性代价大。 例:某系更换系主任后,系统必须修改与该系学生有关的每一个元组

1024 关系模式Student<U, F>中存在的问题
⒊ 插入异常(Insertion Anomalies) 该插的数据插不进去 例,如果一个系刚成立,尚无学生,我们就无法把这个系及其系主任的信息存入数据库。 ⒋ 删除异常(Deletion Anomalies) 不该删除的数据不得不删 例,如果某个系的学生全部毕业了, 我们在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。

1025 解决方法:通过分解关系模式来消除其中不合适
数据依赖对关系模式的影响(续) 结论: Student关系模式不是一个好的模式。 “好”的模式: 不会发生插入异常、删除异常、更新异常, 数据冗余应尽可能少。 原因:由存在于模式中的某些数据依赖引起的 解决方法:通过分解关系模式来消除其中不合适 的数据依赖。

1026 5.2 规范化 规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。

1027 5.2.1 函数依赖 一、函数依赖 二、平凡函数依赖与非平凡函数依赖 三、完全函数依赖与部分函数依赖 四、传递函数依赖

1028 一、函数依赖 定义5.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。 Y=f(x)
若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。 X称为这个函数依赖的决定属性集(Determinant)。 Y=f(x)

1029 说明: 1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
2. 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。 例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立 3. 数据库设计者可以对现实世界作强制的规定。例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。所插入的元组必须满足规定的函数依赖,若发现有同名人存在, 则拒绝装入该元组。

1030 函数依赖(续) 假设不允许重名,则有: 例: Student(Sno, Sname, Ssex, Sage, Sdept)
Sno → Ssex, Sno → Sage , Sno → Sdept, Sno ←→ Sname, Sname → Ssex, Sname → Sage Sname → Sdept 但Ssex →Sage 若X→Y,并且Y→X, 则记为X←→Y。 若Y不函数依赖于X, 则记为X─→Y。

1031 二、平凡函数依赖与非平凡函数依赖 在关系模式R(U)中,对于U的子集X和Y, 如果X→Y,但Y  X,则称X→Y是非平凡的函数依赖
例:在关系SC(Sno, Cno, Grade)中, 非平凡函数依赖: (Sno, Cno) → Grade 平凡函数依赖: (Sno, Cno) → Sno (Sno, Cno) → Cno

1032 于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖。
平凡函数依赖与非平凡函数依赖(续) 于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖。

1033 三、完全函数依赖与部分函数依赖 定义5.2 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有 X’ Y, 则称Y完全函数依赖于X,记作X f Y。 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X P Y。

1034 完全函数依赖与部分函数依赖(续) 例: 在关系SC(Sno, Cno, Grade)中, 由于:Sno →Grade,Cno → Grade, 因此:(Sno, Cno) f Grade

1035 四、传递函数依赖 定义5.3 在关系模式R(U)中,如果X→Y,Y→Z,且Y X,Y→X,则称Z传递函数依赖于X。
注: 如果Y→X, 即X←→Y,则Z直接依赖于X。 例: 在关系Std(Sno, Sdept, Mname)中,有: Sno → Sdept,Sdept → Mname Mname传递函数依赖于Sno

1036 5.2.2 码 定义5.4 设K为关系模式R<U,F>中的属性或属性组合。若K f U,则K称为R的一个侯选码(Candidate Key)。若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。 主属性与非主属性 ALL KEY

1037 外部码 定义5.5 关系模式 R 中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码 主码又和外部码一起提供了表示关系间联系的手段。

1038 5.2.3 范式 范式是符合某一种级别的关系模式的集合。 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。 范式的种类:
第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF)

1039 5.2.3 范式 各种范式之间存在联系: 某一关系模式R为第n范式,可简记为R∈nNF。

1040 5.2.4 2NF 1NF的定义 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。 但是满足第一范式的关系模式并不一定是一个好的关系模式。

1041 2NF 例: 关系模式 SLC(Sno, Sdept, Sloc, Cno, Grade)
函数依赖包括: (Sno, Cno) f Grade Sno → Sdept (Sno, Cno) P Sdept Sno → Sloc (Sno, Cno) P Sloc Sdept → Sloc

1042 2NF Sno Cno Grade Sdept Sloc SLC SLC的码为(Sno, Cno) SLC满足第一范式。
非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)

1043 SLC不是一个好的关系模式 (1) 插入异常 (2) 删除异常
假设Sno=95102,Sdept=IS,Sloc=N的学生还未选课,因课程号是主属性,因此该学生的信息无法插入SLC。 (2) 删除异常 假定某个学生本来只选修了3号课程这一门课。现在因身体不适,他连3号课程也不选修了。因课程号是主属性,此操作将导致该学生信息的整个元组都要删除。

1044 SLC不是一个好的关系模式 (3) 数据冗余度大 (4) 修改复杂
如果一个学生选修了10门课程,那么他的Sdept和Sloc值就要重复存储了10次。 (4) 修改复杂 例如学生转系,在修改此学生元组的Sdept值的同时,还可能需要修改住处(Sloc)。如果这个学生选修了K门课,则必须无遗漏地修改K个元组中全部Sdept、Sloc信息。

1045 2NF 原因 Sdept、 Sloc部分函数依赖于码。 解决方法 SC(Sno, Cno, Grade)
SLC分解为两个关系模式,以消除这些部分函数依赖 SC(Sno, Cno, Grade) SL(Sno, Sdept, Sloc)

1046 2NF Sno Cno Grade Sdept Sloc SLC SLC的码为(Sno, Cno) SLC满足第一范式。
非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)

1047 2NF 函数依赖图: SL Sno Sdept Sloc Sno Cno Grade SC

1048 2NF 2NF的定义 定义5.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。
例:SLC(Sno, Sdept, Sloc, Cno, Grade) ∈1NF SLC(Sno, Sdept, Sloc, Cno, Grade) ∈2NF SC(Sno, Cno, Grade) ∈ 2NF SL(Sno, Sdept, Sloc) ∈ 2NF

1049 第二范式(续) 采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。 将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

1050 5.2.5 3NF 函数依赖: 例:2NF关系模式SL(Sno, Sdept, Sloc)中 Sno→Sdept Sdept→Sloc
Sno→Sloc Sloc传递函数依赖于Sno,即SL中存在非主属性对码的传递函数依赖。

1051 3NF 函数依赖图: SL Sno Sdept Sloc

1052 3NF 解决方法 采用投影分解法,把SL分解为两个关系模式,以消除传递函数依赖: SD(Sno, Sdept)
DL(Sdept, Sloc) SD的码为Sno, DL的码为Sdept。

1053 3NF SD的码为Sno, DL的码为Sdept。 Sno Sdept SD Sloc DL

1054 3NF 3NF的定义 定义5.8 关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z  Y), 使得X→Y,Y → X,Y→Z,成立,则称R<U,F> ∈ 3NF。 例, SL(Sno, Sdept, Sloc) ∈ 2NF  SL(Sno, Sdept, Sloc) ∈ 3NF SD(Sno, Sdept) ∈ 3NF DL(Sdept, Sloc)∈ 3NF

1055 3NF 若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。 如果R∈3NF,则R也是2NF。
采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。 将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。

1056 BC范式(BCNF) 定义5.9 设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。 若R∈BCNF 每一个决定属性集(因素)都包含(候选)码 R中的所有属性(主,非主属性)都完全函数依赖于码 R∈3NF(证明) 若R∈3NF 则 R不一定∈BCNF

1057 BCNF 例:在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
每一教师只教一门课。每门课由若干教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称 : (S,J)→T,(S,T)→J,T→J

1058 BCNF S J T STJ

1059 BCNF STJ∈3NF (S,J)和(S,T)都可以作为候选码 S、T、J都是主属性 STJ∈BCNF
T→J,T是决定属性集,T不是候选码

1060 BCNF SJ(S,J) ∈ BCNF, TJ(T,J)∈ BCNF 解决方法:将STJ分解为二个关系模式:
没有任何属性对码的部分函数依赖和传递函数依赖 S J ST T TJ

1061 3NF与BCNF的关系 如果关系模式R∈BCNF, 必定有R∈3NF 如果R∈3NF,且R只有一个候选码, 则R必属于BCNF。

1062 BCNF的关系模式所具有的性质 ⒈ 所有非主属性都完全函数依赖于每个候选码 ⒉ 所有主属性都完全函数依赖于每个不包含它的候选码
⒊ 没有任何属性完全函数依赖于非码的任何一组属性

1063 5.2.5 多值依赖与第四范式(4NF) 例: 学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。
关系模式Teaching(C, T, B) 课程C、教师T 和 参考书B

1064 表5.1 教 员 T 参 考 书 B 课 程 C 李 勇 物理 王 军 数学 计算数学 … … … 光学原理 物理习题集 张 平 数学分析
物理 数学 计算数学 李 勇 王 军 张 平 周 峰 普通物理学 光学原理 物理习题集 数学分析 微分方程 高等代数

1065 参考书B 教员T 课程C 用二维表表示Teaching 普通物理学 光学原理 物理习题集 数学分析 微分方程 高等代数 … 李 勇 王 军
张 平 物 理 数 学 参考书B 教员T 课程C

1066 多值依赖与第四范式(续) Teaching∈BCNF: Teach具有唯一候选码(C,T,B), 即全码 Teaching模式中存在的问题
(1)数据冗余度大:有多少名任课教师,参考书就要存储多少次

1067 多值依赖与第四范式(续) (2)插入操作复杂:当某一课程增加一名任课教师时,该课程有多少本参照书,就必须插入多少个元组
例如物理课增加一名教师刘关,需要插入两个元组: (物理,刘关,普通物理学) (物理,刘关,光学原理)

1068 多值依赖与第四范式(续) (3) 删除操作复杂:某一门课要去掉一本参考书,该课程有多少名教师,就必须删除多少个元组
(4) 修改操作复杂:某一门课要修改一本参考书,该课程有多少名教师,就必须修改多少个元组 产生原因: 存在多值依赖

1069 一、多值依赖 定义5.10 例 Teaching(C, T, B) 对于C的每一个值,T有一组值与之对应,而不论B取何值
设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y,多值依赖 X→→Y成立当且仅当对R的任一关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关 例 Teaching(C, T, B) 对于C的每一个值,T有一组值与之对应,而不论B取何值

1070 一、多值依赖 在R(U)的任一关系r中,如果存在元组t,s 使得t[X]=s[X],那么就必然存在元组 w,v r,(w,v可以与s,t相同),使得w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],v[Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值所得的两个新元组必在r中),则Y多值依赖于X,记为X→→Y。 这里,X,Y是U的子集,Z=U-X-Y。 t x y z2 s x y z1 w x y z1 v x y z2

1071 多值依赖(续) 平凡多值依赖和非平凡的多值依赖 若X→→Y,而Z=φ,则称 X→→Y为平凡的多值依赖 否则称X→→Y为非平凡的多值依赖

1072 多值依赖的性质 (1)多值依赖具有对称性 (2)多值依赖具有传递性 若X→→Y,则X→→Z,其中Z=U-X-Y
多值依赖的对称性可以用完全二分图直观地表示出来。 (2)多值依赖具有传递性 若X→→Y,Y→→Z, 则X→→Z -Y

1073 多值依赖的对称性 Xi Zi1 Zi2 … Zim Yi1 Yi2 … Yin

1074 多值依赖的对称性 普通物理学 光学原理 物理习题集 李勇 王军

1075 多值依赖(续) (3)函数依赖是多值依赖的特殊情况。 若X→Y,则X→→Y。 (4)若X→→Y,X→→Z,则X→→Y Z。
(6)若X→→Y,X→→Z,则X→→Y-Z, X→→Z -Y。

1076 多值依赖与函数依赖的区别 (1) 有效性 多值依赖的有效性与属性集的范围有关
若X→→Y在U上成立,则在W(X Y  W  U)上一定成立;反之则不然,即X→→Y在W(W  U)上成立,在U上并不一定成立 多值依赖的定义中不仅涉及属性组 X和 Y,而且涉及U中其余属性Z。 一般地,在R(U)上若有X→→Y在W(W  U)上成立,则称X→→Y为R(U)的嵌入型多值依赖

1077 多值依赖与函数依赖的区别 只要在R(U)的任何一个关系r中,元组在X和Y上的值满足定义5.l(函数依赖),
则函数依赖X→Y在任何属性集W(X Y  W U)上成立。

1078 多值依赖(续) (2) 若函数依赖X→Y在R(U)上成立,则对于任何Y'  Y均有X→Y' 成立

1079 二、第四范式(4NF) (X→Y) 允许的是函数依赖(是非平凡多值依赖)
定义 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y  X),X都含有候选码,则R∈4NF。 (X→Y) 如果R ∈ 4NF, 则R ∈ BCNF 不允许有非平凡且非函数依赖的多值依赖 允许的是函数依赖(是非平凡多值依赖)

1080 第四范式(续) C→→T, C→→B是平凡多值依赖 例: Teach(C,T,B) ∈ 4NF 存在非平凡的多值依赖C→→T,且C不是候选码
CT(C, T) ∈ 4NF CB(C, B) ∈ 4NF C→→T, C→→B是平凡多值依赖

1081 5.2 规范化 5.2.1 第一范式(1NF) 5.2.2 第二范式(2NF) 5.2.3 第三范式(3NF)
5.2.4 BC范式(BCNF) 5.2.5 多值依赖与第四范式(4NF) 5.2.6 规范化

1082 5.2.6 规范化 关系数据库的规范化理论是数据库逻辑设计的工具。
一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但这只是最基本的规范化。 规范化程度可以有多个不同的级别

1083 规范化(续) 规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化

1084 规范化(续) 关系模式规范化的基本步骤 1NF ↓ 消除非主属性对码的部分函数依赖 消除决定属性 2NF
↓ 消除非主属性对码的部分函数依赖 消除决定属性 2NF 集非码的非平 ↓ 消除非主属性对码的传递函数依赖 凡函数依赖 NF ↓ 消除主属性对码的部分和传递函数依 赖 BCNF ↓ 消除非平凡且非函数依赖的多值依赖 4NF

1085 规范化的基本思想 消除不合适的数据依赖 的各关系模式达到某种程度的“分离” 采用“一事一地”的模式设计原则
让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去 所谓规范化实质上是概念的单一化

1086 规范化(续) 不能说规范化程度越高的关系模式就越好
在设计数据库模式结构时,必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式 上面的规范化步骤可以在其中任何一步终止

1087 第五章 关系数据理论 5.1 数据依赖 5.2 规范化 5.3 数据依赖的公理系统 5.4 模式的分解

1088 5.3 数据依赖的公理系统 逻辑蕴含 定义5.11 对于满足一组函数依赖 F 的关系模式R <U,F>,其任何一个关系r,若函数依赖X→Y都成立, 则称 F逻辑蕴含X →Y

1089 Armstrong公理系统 一套推理规则,是模式分解算法的理论基础 用途 求给定关系模式的码 从一组函数依赖求得蕴含的函数依赖

1090 1. Armstrong公理系统 关系模式R <U,F >来说有以下的推理规则:
Al.自反律(Reflexivity): 若Y  X  U,则X →Y为F所蕴含。 A2.增广律(Augmentation):若X→Y为F所蕴含,且Z  U,则XZ→YZ为F所蕴含。 A3.传递律(Transitivity):若X→Y及Y→Z为F所蕴含,则X→Z为F所蕴含。 注意:由自反律所得到的函数依赖均是平凡的函数依赖,自反律的使用并不依赖于F

1091 定理 5.l Armstrong推理规则是正确的
(l)自反律:若Y  X  U,则X →Y为F所蕴含 证: 设Y  X  U 对R <U,F> 的任一关系r中的任意两个元组t,s: 若t[X]=s[X],由于Y  X,有t[y]=s[y], 所以X→Y成立. 自反律得证

1092 定理5.l (2)增广律: 若X→Y为F所蕴含,且Z  U,则XZ→YZ 为F所蕴含。 证:设X→Y为F所蕴含,且Z  U。
设R<U,F> 的任一关系r中任意的两个元组t,s; 若t[XZ]=s[XZ],则有t[X]=s[X]和t[Z]=s[Z]; 由X→Y,于是有t[Y]=s[Y],所以t[YZ]=s[YZ],所以XZ→YZ为F所蕴含. 增广律得证。

1093 定理5.l (3) 传递律:若X→Y及Y→Z为F所蕴含,则 X→Z为 F所蕴含。 证:设X→Y及Y→Z为F所蕴含。
对R<U,F> 的任一关系 r中的任意两个元组 t,s。 若t[X]=s[X],由于X→Y,有 t[Y]=s[Y]; 再由Y→Z,有t[Z]=s[Z],所以X→Z为F所蕴含. 传递律得证。

1094 2. 导出规则 1.根据A1,A2,A3这三条推理规则可以得到下面三条推理规则: 合并规则:由X→Y,X→Z,有X→YZ。
伪传递规则:由X→Y,WY→Z,有XW→Z。 分解规则:由X→Y及 ZY,有X→Z。 (A1, A3)

1095 导出规则 2.根据合并规则和分解规则,可得引理5.1
引理5.l X→A1 A2…Ak成立的充分必要条 件是X→Ai成立(i=l,2,…,k)。

1096 3. 函数依赖闭包 定义5.l2 在关系模式R<U,F>中为F所逻辑蕴含 的函数依赖的全体叫作 F的闭包,记为F+。
定义 设F为属性集U上的一组函数依赖,X U, XF+ ={ A|X→A能由F 根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F 的闭包

1097 F的闭包 F+={ F={X Y,Y Z}, F+计算是NP完全问题,X A1A2...An
X φ, Y φ, Z φ, XY φ, XZ φ, YZ φ, XYZ φ, X X, Y Y, Z Z, XY X, XZ X, YZ Y, XYZ X, X Y, Y Z , XY Y, XZ Y, YZ Z, XYZ Y, X Z, Y YZ, XY Z, XZ Z, YZ YZ, XYZ Z, X XY, XY XY, XZ XY, XYZ XY, X XZ, XY YZ, XZ XZ, XYZ YZ X YZ, XY XZ, XZ XY, XYZ XZ, X ZYZ, XY XYZ, XZ XYZ, XYZ XYZ }

1098 设F为属性集U上的一组函数依赖,X,Y  U,X→Y能由F 根据Armstrong公理导出的充分必要条件是Y XF+
关于闭包的引理 引理5.2 设F为属性集U上的一组函数依赖,X,Y  U,X→Y能由F 根据Armstrong公理导出的充分必要条件是Y XF+ 用途 将判定X→Y是否能由F根据Armstrong公理导出的问题, 就转化为求出XF+ ,判定Y是否为XF+的子集的问题

1099 求闭包的算法 算法5.l 求属性集X(X  U)关于U上的函数依 赖集F 的闭包XF+ 输入:X,F 输出:XF+ 步骤:
(1)令X(0)=X,i=0 (2)求B,这里B = { A |( V)(  W)(V→WF ∧V  X(i)∧A W)}; (3)X(i+1)=B∪X(i)

1100 算法5.l (4)判断X(i+1)= X (i)吗? (5)若相等或X(i)=U , 则X(i)就是XF+ , 算法终止。
(6)若否,则 i=i+l,返回第(2)步。 对于算法5.l, 令ai =|X(i)|,{ai }形成一个步长大 于1的严格递增的序列,序列的上界是 | U |,因 此该算法最多 |U| - |X| 次循环就会终止。

1101 Define XF+ = closure of X
Algorithm Define XF+ = closure of X = set of attributes functionally determined byX Basis: XF+ :=X Induction: If Y XF+, and Y A is a given FD, then add A to XF+ End when XF+ cannot be changed. A y X+ New X+

1102 U={A, B, C, D}; F={A B, BC D}; A+ = AB. C+ = C. (AC)+ = ABCD. Example

1103 Example U={A, B, C, D}; A B, BC D. (AC)+ = ABCD. D A C B

1104 函数依赖闭包 [例1] 已知关系模式R<U,F>,其中 U={A,B,C,D,E};
F={AB→C,B→D,C→E,EC→B,AC→B}。 求(AB)F+ 。 解 设X(0)=AB; (1)计算X(1): 逐一的扫描F集合中各个函数依赖, 找左部为A,B或AB的函数依赖。得到两个: AB→C,B→D。 于是X(1)=AB∪CD=ABCD。

1105 函数依赖闭包 (2)因为X(0)≠ X(1) ,所以再找出左部为ABCD子集的那些函数依赖,又得到AB→C,B→D, C→E,AC→B,
于是X(2)=X(1)∪BCDE=ABCDE。 (3)因为X(2)=U,算法终止 所以(AB)F+ =ABCDE。

1106 4. Armstrong公理系统的有效性与完备性
建立公理系统体系目的:从已知的 f 推导出未知的f 明确:1.公理系统推导出来的 f 正确? 2. F+中的每一个 f 都能推导出来? / f 不能由F 导出, f ∈ F+ F F f

1107 4. Armstrong公理系统的有效性与完备性
有效性:由F出发根据Armstrong公理推导出来的每一个函数依赖一定在F+中 /* Armstrong正确 完备性:F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来 /* Armstrong公理够用,完全 完备性:所有不能用Armstrong公理推导出来f, 都不为真 若 f 不能用Armstrong公理推导出来, f∈ F+

1108 有效性与完备性的证明 证明: 1. 有效性 可由定理5.l得证 2. 完备性
只需证明逆否命题: 若函数依赖X→Y不能由F从Armstrong公理导出,那么它必然不为F所蕴含 分三步证明:

1109 有效性与完备性的证明 (1)引理: 若V→W成立,且V  XF+,则W  XF+
证 因为 V  XF+ ,所以有X→V成立; 因为X →V,V→W,于是X→W成立 所以W  XF+ (2)/* 若 f 不能用Armstrong公理推导出来, f∈ F+ /* 若存在r, F+中的全部函数依赖在 r上成立。 /* 而不能用Armstrong公理推导出来的f , 在r上不成立。 构造一张二维表r,它由下列两个元组构成,可以证明r必是R(U,F)的一个关系,即F+中的全部函数依赖在 r上成立。

1110 Armstrong公理系统的有效性与完备性(续)
XF U-XF+     若r不是R<U,F> 的关系,则必由于F中有函数依赖V→W在r上不成立所致。由r的构成可知,V必定是XF+ 的子集,而W不是XF+ 的子集,可是由第(1)步,W  XF+,矛盾。所以r必是R<U,F>的一个关系。

1111 Armstrong公理系统的有效性与完备性(续)
(3) )/* 若 f 不能用Armstrong公理推导出来, f∈ F+ /* 而不能用Armstrong公理推导出来的 f , 在r上不成立。 若X→Y 不能由F从Armstrong公理导出,则Y 不是 XF+ 的子集。(引理5.2) 因此必有Y 的子集Y’ 满足 Y’ U-XF+, 则X→Y在 r 中不成立,即X→Y必不为 R<U,F> 蕴含 /* 因为 F+中的全部函数依赖在 r上成立。

1112 Armstrong公理系统的有效性与完备性(续)
“蕴含” == “导出” 等价的概念 F+ ==由F出发借助Armstrong公理导出的函数依赖的集合

1113 5. 函数依赖集等价 定义5.14 如果G+=F+,就说函数依赖集 F覆盖G(F是G的覆盖,或G是F的覆盖), 或F与G等价。

1114 函数依赖集等价的充要条件 引理5.3 F+ = G+ 的充分必要条件是 F  G+ ,和G  F+ 证: 必要性显然,只证充分性。
证: 必要性显然,只证充分性。 (1)若FG+ ,则XF+  XG++ 。 (2)任取X→YF+ 则有 Y  XF+  XG++ 。 所以X→Y  (G+)+= G+。即F+  G+。 (3)同理可证G+  F+ ,所以F+ = G+。

1115 函数依赖集等价 要判定F  G+,只须逐一对F中的函数依赖X→Y,考察 Y 是否属于XG++ 就行了。因此引理5.3 给出了判断两个函数依赖集等价的可行算法。

1116 6. 最小依赖集 定义5.15 如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。
(2) F中不存在这样的函数依赖X→A,使得F与 F-{X→A}等价。 (3) F中不存在这样的函数依赖X→A, X有真 子集Z使得F-{X→A}∪{Z→A}与F等价。

1117 最小依赖集 [例2] 对于5.l节中的关系模式S<U,F>,其中: U={ SNO,SDEPT,MN,CNAME,G },
F={ SNO→SDEPT,SDEPT→MN, (SNO,CNAME)→G } 设F’={SNO→SDEPT,SNO→MN, SDEPT→MN,(SNO,CNAME)→G, (SNO,SDEPT)→SDEPT} F是最小覆盖,而F ’不是。 因为:F ’-{SNO→MN}与F ’等价 F ’-{(SNO,SDEPT)→SDEPT}也与F ’等价 F ’-{(SNO,SDEPT)→SDEPT} ∪{SNO→SDEPT}也与F ’等价

1118 7. 极小化过程 定理5.3 每一个函数依赖集F均等价于一个极小 函数依赖集Fm。此Fm称为F的最小依赖集
(1)逐一检查F中各函数依赖FDi:X→Y, 若Y=A1A2 …Ak,k > 2, 则用 { X→Aj |j=1,2,…, k} 来取代X→Y。 引理5.1保证了F变换前后的等价性。

1119 极小化过程 (2)逐一检查F中各函数依赖FDi:X→A, 令G=F-{X→A}, 若AXG+, 则从F中去掉此函数依赖。
由于F与G =F-{X→A}等价的充要条件是AXG+ 因此F变换前后是等价的。

1120 极小化过程 (3)逐一取出F中各函数依赖FDi:X→A, 设X=B1B2…Bm, 逐一考查Bi (i=l,2,…,m),
若A (X-Bi )F+ , 则以X-Bi 取代X。 由于F与F-{X→A}∪{Z→A}等价的充要条件是AZF+ ,其中Z=X-Bi 因此F变换前后是等价的。

1121 极小化过程 定理5.3的证明过程 也是求F极小依赖集的过程 由定义,最后剩下的F就一定是极小依赖集。
因为对F的每一次“改造”都保证了改造前后的两个函数依赖集等价,因此剩下的F与原来的F等价。 证毕 定理5.3的证明过程 也是求F极小依赖集的过程

1122 极小化过程 [例3] F = {A→B,B→A,B→C, A→C,C→A} Fm1、Fm2都是F的最小依赖集:
Fm1= {A→B,B→C,C→A}   Fm2= {A→B,B→A,A→C,C→A} F的最小依赖集Fm不一定是唯一的它与对各函数依赖FDi 及X→A中X各属性的处置顺序有关

1123 极小化过程 极小化过程( 定理5.3的证明 )也是检验F是否为极小依赖集的一个算法 若改造后的F与原来的F相同,说明F本身就是一个最小依赖集

1124 极小化过程 在R<U,F>中可以用与F等价的依赖集G来取代F
原因:两个关系模式R1 <U,F>,R2<U,G>,如果F与G等价,那么R1的关系一定是R2的关系。反过来,R2的关系也一定是R1的关系。

1125 第五章 关系数据理论 5.1 数据依赖 5.2 规范化 5.3 数据依赖的公理系统 5.4 模式的分解

1126 5.4 模式的分解 把低一级的关系模式分解为若干个高一级的关系模式的方法并不是唯一的
只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义

1127 ⒊ 分解既要保持函数依赖,又要具有无损连接性
关系模式分解的标准 三种模式分解的等价定义 ⒈ 分解具有无损连接性 ⒉ 分解要保持函数依赖 ⒊ 分解既要保持函数依赖,又要具有无损连接性

1128 模式的分解(续) 定义5.16 关系模式R<U,F>的一个分解:
ρ={ R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn>} U=U1∪U2∪…∪Un,且不存在 Ui  Uj,Fi 为 F在 Ui 上的投影 定义5.17 函数依赖集合{X→Y | X→Y  F+∧XY Ui} 的一个覆盖 Fi 叫作 F 在属性 Ui 上的投影

1129 模式的分解(续) 例: SL(Sno, Sdept, Sloc) F={ Sno→Sdept,Sdept→Sloc,Sno→Sloc}
SL∈2NF 存在插入异常、删除异常、冗余度大和修改复杂等问题 分解方法可以有多种

1130 模式的分解(续) SL ────────────────── Sno Sdept Sloc ──────────────────
CS A IS B MA C IS B PH B

1131 模式的分解(续) 1. SL分解为下面三个关系模式: SN(Sno) SD(Sdept) SO(Sloc)

1132 分解后的关系为: SN ────── SD ────── SO ────── Sno Sdept Sloc
────── ────── ────── CS A IS B MA C PH ───── ────── ──────

1133 模式的分解(续) 分解后的数据库丢失了许多信息
例如无法查询95001学生所在系或所在宿舍。 如果分解后的关系可以通过自然连接恢复为原来的关系,那么这种分解就没有丢失信息

1134 模式的分解(续) 2. SL分解为下面二个关系模式: NL(Sno, Sloc) DL(Sdept, Sloc) 分解后的关系为:
NL ──────────── DL ──────────── Sno Sloc Sdept Sloc ──────────── ──────────── A CS A B IS B C MA C B PH B B ──────────── ──────────

1135 模式的分解(续) NL DL ───────────── Sno Sloc Sdept 95001 A CS 95002 B IS
B PH C MA B IS B PH B IS B PH

1136 模式的分解(续) NL DL比原来的SL关系多了3个元组 无法知道95002、95004、95005 元组增加了,信息丢失了
究竟是哪个系的学生 元组增加了,信息丢失了

1137 第三种分解方法 3. 将SL分解为下面二个关系模式: ND(Sno, Sdept) NL(Sno, Sloc) 分解后的关系为:

1138 模式的分解(续) Sno Sdept Sno Sloc ──────────── ────────── 95001 CS 95001 A
ND ──────────── NL ────────── Sno Sdept Sno Sloc ──────────── ────────── CS A IS B MA C IS B PH B ──────────── ───────────

1139 模式的分解(续) ND NL ────────────── Sno Sdept Sloc 95001 CS A
IS B MA C CS A PH B 与SL关系一样,因此没有丢失信息

1140 具有无损连接性的模式分解 关系模式R<U,F>的一个分解 ρ={ R1<U1,F1>,R2<U2,F2>, …,Rn<Un,Fn>} 若R与R1、R2、…、Rn自然连接的结果相等,则称关系 模式R的这个分解ρ具有无损连接性(Lossless join) 具有无损连接性的分解保证不丢失信息 无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题

1141 模式的分解(续) 这种分解方法没有保持原关系中的函数依赖 SL中的函数依赖Sdept→Sloc 没有投影到关系模式ND、NL上
第三种分解方法具有无损连接性 问题: 这种分解方法没有保持原关系中的函数依赖 SL中的函数依赖Sdept→Sloc 没有投影到关系模式ND、NL上

1142 保持函数依赖的模式分解 设关系模式R<U,F>被分解为若干个关系模式
R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn> (其中U=U1∪U2∪…∪Un,且不存在Ui  Uj,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的(Preserve dependency)。

1143 第四种分解方法 将SL分解为下面二个关系模式: ND(Sno, Sdept) DL(Sdept, Sloc) 这种分解方法就保持了函数依赖。

1144 模式的分解(续) 如果一个分解具有无损连接性,则它能够保证不丢失信息。 如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。
分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。具有无损连接性的分解不一定能够保持函数依赖。同样,保持函数依赖的分解也不一定具有无损连接性。

1145 模式的分解(续) 第一种分解方法既不具有无损连接性,也未保持函 数依赖,它不是原关系模式的一个等价分解
第二种分解方法保持了函数依赖,但不具有无损连 接性 第三种分解方法具有无损连接性,但未持函数依赖 第四种分解方法既具有无损连接性,又保持了函数 依赖

1146 分解算法 算法5.2 判别一个分解的无损连接性 算法5.3 (合成法)转换为3NF的保持函数依赖的分解。
算法5.2 判别一个分解的无损连接性 算法5.3 (合成法)转换为3NF的保持函数依赖的分解。 算法5.4 转换为3NF既有无损连接性又保持函数依赖的分解 算法5.5 转换为BCNF的无损连接分解(分解法) 算法5.6 达到4NF的具有无损连接性的分 解P196 图5 .11

1147 分解算法 解P196 图5 .11 若要求分解具有无损连接性,那么模式分解一定能够达到4NF。
若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。 若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。

1148 从一个关系模式出发,而不是从一组关系模式出发实行分解 “等价”的定义也是一组关系模式与一个关系模式的“等价”
泛关系假设 “假设已知一个模式Sφ,它仅由单个关系模式组成,问题是要设计一个模式SD,它与Sφ‘等价’,但在某些方面更好一些” 从一个关系模式出发,而不是从一组关系模式出发实行分解 “等价”的定义也是一组关系模式与一个关系模式的“等价”

1149 小结(续) 规范化理论为数据库设计提供了理论的指南和工具 并不是规范化程度越高,模式就越好 也仅仅是指南和工具
必须结合应用环境和现实世界的具体情况合理地选择数据库模式

1150 下课了。。。 休息一会儿。。。

1151 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第六章 数据库设计

1152 第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计
第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计 6.6 数据库实施 6.7 数据库运行与维护 6.8 小结

1153 6.1 数据库设计概述 6.1.1 数据库和信息系统 6.1.2 数据库设计的特点 6.1.3 数据库设计方法简述
6.1 数据库设计概述 数据库和信息系统 数据库设计的特点 数据库设计方法简述 数据库设计的基本步骤

1154 数据库设计概述(续) 什么是数据库设计 数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求) 在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。

1155 6.1.1 数据库和信息系统 数据库是信息系统的核心和基础 数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在
数据库和信息系统 数据库是信息系统的核心和基础 把信息系统中大量的数据按一定的模型组织起来 提供存储、维护、检索数据的功能 使信息系统可以方便、及时、准确地从数据库中获得所需的信息 数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在 数据库设计是信息系统开发和建设的重要组成部分

1156 计算机科学的基础知识和程序设计的方法和技巧
数据库设计人员应该具备的技术和知识 数据库的基本知识和数据库设计技术 计算机科学的基础知识和程序设计的方法和技巧 软件工程的原理和方法 应用领域的知识

1157 6.1 数据库设计概述 6.1.1 数据库和信息系统 6.1.2 数据库设计的特点 6.1.3 数据库设计方法简述
6.1 数据库设计概述 数据库和信息系统 数据库设计的特点 数据库设计方法简述 数据库设计的基本步骤

1158 6.1.2 数据库设计的特点 数据库建设是硬件、软件和干件的结合 数据库设计应该与应用系统设计相结合 三分技术,七分管理,十二分基础数据
数据库设计的特点 数据库建设是硬件、软件和干件的结合 三分技术,七分管理,十二分基础数据 技术与管理的界面称之为“干件” 数据库设计应该与应用系统设计相结合 结构(数据)设计:设计数据库框架或数据库结构 行为(处理)设计:设计应用程序、事务处理等

1159 数据库设计的特点(续) 结构和行为分离的设计 传统的软件工程忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计的决策
早期的数据库设计致力于数据模型和建模方法研究,忽视了对行为的设计

1160 数据库设计的特点(续) 现实世界 概念模型设计 子模式设计 物理数据库设计 逻辑数据库设计 建立数据库 数据分析 功能分析 功能模型
功能说明 事务设计 程序说明 应用程序设计 程序编码调试

1161 6.1 数据库设计概述 6.1.1 数据库和信息系统 6.1.2 数据库设计的特点 6.1.3 数据库设计方法简述
6.1 数据库设计概述 数据库和信息系统 数据库设计的特点 数据库设计方法简述 数据库设计的基本步骤

1162 6.1.3 数据库设计方法简述 手工试凑法 设计质量与设计人员的经验和水平有直接关系 缺乏科学理论和工程方法的支持,工程的质量难以保证
数据库设计方法简述 手工试凑法 设计质量与设计人员的经验和水平有直接关系 缺乏科学理论和工程方法的支持,工程的质量难以保证 数据库运行一段时间后常常又不同程度地发现各种问题,增加了维护代价

1163 数据库设计方法简述(续) 规范设计法 手工设计方法 基本思想 过程迭代和逐步求精

1164 数据库设计方法简述(续) 规范设计法(续) 典型方法 新奥尔良(New Orleans)方法 将数据库设计分为四个阶段 S.B.Yao方法
将数据库设计分为五个步骤 I.R.Palmer方法 把数据库设计当成一步接一步的过程

1165 数据库设计方法简述(续) 计算机辅助设计 ORACLE Designer 2000 SYBASE PowerDesigner

1166 6.1 数据库设计概述 6.1.1 数据库和信息系统 6.1.2 数据库设计的特点 6.1.3 数据库设计方法简述
6.1 数据库设计概述 数据库和信息系统 数据库设计的特点 数据库设计方法简述 数据库设计的基本步骤

1167 6.1.4 数据库设计的基本步骤 一、数据库设计的准备工作 选定参加设计的人员 1. 数据库分析设计人员 数据库设计的核心人员
数据库设计的基本步骤 一、数据库设计的准备工作 选定参加设计的人员 1. 数据库分析设计人员 数据库设计的核心人员 自始至终参与数据库设计 其水平决定了数据库系统的质量

1168 6.1.4 数据库设计的基本步骤 2. 用户 在数据库设计中也是举足轻重的 主要参加需求分析和数据库的运行维护 用户积极参与带来的好处
数据库设计的基本步骤 2. 用户 在数据库设计中也是举足轻重的 主要参加需求分析和数据库的运行维护 用户积极参与带来的好处 加速数据库设计 提高数据库设计的质量

1169 数据库设计的基本步骤(续) 3. 程序员 在系统实施阶段参与进来,负责编制程序 4. 操作员 在系统实施阶段参与进来,准备软硬件环境

1170 数据库设计的基本步骤(续) 二、数据库设计的过程(六个阶段) ⒈需求分析阶段 准确了解与分析用户需求(包括数据与处理)
 ⒈需求分析阶段 准确了解与分析用户需求(包括数据与处理) 是整个设计过程的基础,是最困难、最耗费时间的一步

1171 数据库设计的基本步骤(续) ⒉概念结构设计阶段 是整个数据库设计的关键
 ⒉概念结构设计阶段 是整个数据库设计的关键 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型

1172 数据库设计的基本步骤(续) ⒊逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型 对其进行优化

1173 数据库设计的基本步骤(续) ⒋数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)

1174 数据库设计的基本步骤(续) ⒌数据库实施阶段 运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果 建立数据库
编制与调试应用程序 组织数据入库 并进行试运行

1175 数据库设计的基本步骤(续) ⒍数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。
在数据库系统运行过程中必须不断地对其进行评价、调整与修改。

1176 数据库设计的基本步骤(续) 设计一个完善的数据库应用系统往往是上述六个阶段的不断反复。 P206图6.2

1177 设计特点 在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来
将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计 设计过程各个阶段的设计描述:P208图6.3

1178 数 据 处 理 数据库重组和重构 设计阶 段 数据流、数据存储的描述 数据流图和判定表(判定树)、数据字典中处理过程的描述 数据字典
设 计 描 述 数 据 处 理 需求分 析 数据字典、全系统中数据项、 数据流、数据存储的描述 数据流图和判定表(判定树)、数据字典中处理过程的描述 概念模型(E-R图) 数据字典 系统说明书包括: ①新系统要求、 方案和概图 ②反映新系统信息 流的数据流图 某种数据模型 关系 非关系 系统结构图 (模块结构) 存储安排 方法选择 存取路径建立 模块设计 IPO表 实施阶段 编写模式 装入数据 数据库试运行 程序编码、 编译联结、 测试 运行、维护 性能监测、转储/恢复 数据库重组和重构 新旧系统转换、运行、维护(修正性、适应性、改善性维护) 逻辑结构设计 概念结构设计 Creat…… Load…… IPO表…… 输入: 输出: 处理: 物理设计 Main( ) …… if…… then end 分区1 分区2 ……

1179 数据库设计的基本步骤(续) 数据库各级模式的形成过程(P209图6.4) 需求分析阶段 综合各个用户的应用需求 概念设计阶段
形成独立于机器特点,独立于各个DBMS产品的概念模式(E-R图)

1180 数据库设计的基本步骤(续) 逻辑设计阶段 首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式
然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式

1181 数据库设计的基本步骤(续) 物理设计阶段 根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式

1182 第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计
第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计 6.6 数据库实施 6.7 数据库运行与维护 6.8 小结

1183 6.2 需求分析 需求分析的任务 需求分析的方法 数据字典

1184 需求分析(续) 需求分析就是分析用户的需要与要求 需求分析是设计数据库的起点
需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用

1185 6.2 需求分析 需求分析的任务 需求分析的方法 数据字典

1186 需求分析的任务 一、需求分析的任务 二、需求分析的重点 三、需求分析的难点

1187 一、需求分析的任务 通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求 在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库

1188 二、需求分析的重点 需求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。 信息要求
用户需要从数据库中获得信息的内容与性质 由用户的信息要求可以导出数据要求,即在数据库中需要存储哪些数据

1189 需求分析的重点(续) 处理要求 对处理功能的要求 对处理的响应时间的要求 对处理方式的要求(批处理 / 联机处理)
新系统的功能必须能够满足用户的信息要求、处理要求、安全性与完整性要求。

1190 三、需求分析的难点 确定用户最终需求的难点
用户缺少计算机知识,开始时无法确定计算机究竟能为自己做什么,不能做什么,因此无法一下子准确地表达自己的需求,他们所提出的需求往往不断地变化。 设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。 新的硬件、软件技术的出现也会使用户需求发生变化。

1191 需求分析的难点(续) 解决方法 设计人员必须采用有效的方法,与用户不断深入地进行交流,才能逐步得以确定用户的实际需求

1192 6.2 需求分析 需求分析的任务 需求分析的方法 数据字典

1193 需求分析的方法 调查清楚用户的实际需求并进行初步分析 与用户达成共识 进一步分析与表达这些需求

1194 一、 调查与初步分析用户需求 ⑴ 调查组织机构情况 组织部门的组成情况 各部门的职责等

1195 调查与初步分析用户需求(续) ⑵ 调查各部门的业务活动情况。调查重点之一。 各个部门输入和使用什么数据 如何加工处理这些数据 输出什么信息
输出到什么部门 输出结果的格式是什么

1196 调查与初步分析用户需求(续) ⑶ 在熟悉业务活动的基础上,协助用户明确对新系统的各种要求。调查重点之二。 信息要求 处理要求
完全性与完整性要求

1197 调查与初步分析用户需求(续) ⑷ 对前面调查的结果进行初步分析 确定新系统的边界 由计算机完成的功能就是新系统应该实现的功能。
确定哪些功能由计算机完成或将来准备让计算机完成 确定哪些活动由人工完成 由计算机完成的功能就是新系统应该实现的功能。

1198 二、常用调查方法 做需求调查时,往往需要同时采用多种方法 无论使用何种调查方法,都必须有用户的积极参与和配合
设计人员应该和用户取得共同的语言,帮助不熟悉计算机的用户建立数据库环境下的共同概念,并对设计工作的最后结果共同承担责任

1199 常用调查方法(续) 常用调查方法 ⑴跟班作业 通过亲身参加业务工作了解业务活动的情况 能比较准确地理解用户的需求,但比较耗时 ⑵开调查会
通过与用户座谈来了解业务活动情况及用户需求 ⑶请专人介绍

1200 常用调查方法(续) ⑷询问 对某些调查中的问题,可以找专人询问 ⑸设计调查表请用户填写 如果调查表设计合理,则很有效,且易于为用户接受
⑹查阅记录 查阅与原系统有关的数据记录

1201 三、进一步分析和表达用户需求 分析和表达用户的需求的常用方法
自顶向下的结构化分析方法(Structured Analysis,简称SA方法) SA方法从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并用数据流图和数据字典描述系统。

1202 进一步分析和表达用户需求(续) 1.首先把任何一个系统都抽象为: 数据流 数据 存储 信息要求 来源 处理 输出 处理要求

1203 进一步分析和表达用户需求(续) 2.分解处理功能和数据 (1)分解处理功能 (2)分解数据
将处理功能的具体内容分解为若干子功能,再将每个子功能继续分解,直到把系统的工作过程表达清楚为止。 (2)分解数据 在处理功能逐步分解的同时,其所用的数据也逐级分解,形成若干层次的数据流图 数据流图表达了数据和处理过程的关系

1204 进一步分析和表达用户需求(续) (3)表达方法 处理过程:用判定表或判定树来描述 数据:用数据字典来描述

1205 进一步分析和表达用户需求(续) 3.将分析结果再次提交给用户,征得用户的认可

1206 四、需求分析小结 P211图6.6

1207 需求分析小结(续) 实例:假设我们要开发一个学校管理系统。
1.经过可行性分析和初步需求调查,抽象出该系统最高层数据流图,该系统由教师管理子系统、学生管理子系统、后勤管理子系统组成,每个子系统分别配备一个开发小组。 2.进一步细化各个子系统。 其中学生管理子系统开发小组通过进行进一步的需求调查,明确了该子系统的主要功能是进行学籍管理和课程管理,包括学生报到、入学、毕业的管理,学生上课情况的管理。通过详细的信息流程分析和数据收集后,他们生成了该子系统的数据流图。

1208 6.2 需求分析 需求分析的任务 需求分析的方法 数据字典

1209 数据字典 一、数据字典的用途 二、数据字典的内容

1210 一、数据字典的用途 数据字典是各类数据描述的集合 数据字典是进行详细的数据收集和数据分析所获得的主要结果
数据字典在数据库设计中占有很重要的地位

1211 二、数据字典的内容 数据字典的内容 数据项是数据的最小组成单位 若干个数据项可以组成一个数据结构
数据流 数据存储 处理过程 数据项是数据的最小组成单位 若干个数据项可以组成一个数据结构 数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。

1212 ⒈ 数据项 数据项是不可再分的数据单位 对数据项的描述 数据项描述={数据项名,数据项含义说明, 别名,数据类型,长度,取值范围,
取值含义,与其他数据项的逻辑关系} 取值范围、与其他数据项的逻辑关系定义了数据的完整性约束条件

1213 ⒉ 数据结构 数据结构反映了数据之间的组合关系。
一个数据结构可以由若干个数据项组成,也可 以由若干个数据结构组成,或由若干个数据项 和数据结构混合组成。 对数据结构的描述 数据结构描述={数据结构名,含义说明, 组成:{数据项或数据结构}}

1214 ⒊ 数据流 数据流是数据结构在系统内传输的路径。 对数据流的描述 数据流描述={数据流名,说明,数据流来源,
 数据流描述={数据流名,说明,数据流来源, 数据流去向,组成:{数据结构}, 平均流量,高峰期流量} 数据流来源是说明该数据流来自哪个过程 数据流去向是说明该数据流将到哪个过程去 平均流量是指在单位时间(每天、每周、每月等)里的传输次数 高峰期流量则是指在高峰时期的数据流量

1215 ⒋ 数据存储 数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。 对数据存储的描述 数据存储描述={数据存储名,说明,编号,
 数据存储描述={数据存储名,说明,编号, 流入的数据流 ,流出的数据流 , 组成:{数据结构},数据量,存取方式} 流入的数据流:指出数据来源 流出的数据流:指出数据去向 数据量:每次存取多少数据,每天(或每小时、每周等)存取几次等信息 存取方法:批处理 / 联机处理;检索 / 更新;顺序检索 / 随机检索

1216 ⒌ 处理过程 处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息 处理过程说明性信息的描述
 处理过程描述={处理过程名,说明, 输入:{数据流},输出:{数据流}, 处理:{简要说明}}

1217 处理过程(续) 简要说明:主要说明该处理过程的功能及处理要求 功能:该处理过程用来做什么
处理要求:处理频度要求(如单位时间里处理多 少事务,多少数据量);响应时间要求等 处理要求是后面物理设计的输入及性能评价的标 准

1218 处理过程(续) 例:学生学籍管理子系统的数据字典。 数据项,以“学号”为例: 数据项: 学号 含义说明:唯一标识每个学生 别名: 学生编号
数据项: 学号 含义说明:唯一标识每个学生  别名:  学生编号 类型:  字符型 长度:   8 取值范围: 至  取值含义:前两位标别该学生所在年级, 后六位按顺序编号  与其他数据项的逻辑关系:

1219 处理过程(续) 数据结构 以“学生”为例 “学生”是该系统中的一个核心数据结构: 数据结构: 学生 含义说明: 是学籍管理子系统的主体数据结
数据结构 以“学生”为例 “学生”是该系统中的一个核心数据结构: 数据结构: 学生 含义说明: 是学籍管理子系统的主体数据结 构,定义了一个学生的有关信息 组成:   学号,姓名,性别,年龄, 所在系,年级

1220 处理过程(续) 数据流“体检结果”可如下描述: 数据流: 体检结果 说明: 学生参加体格检查的最终结果 数据流来源:体检 数据流去向:批准
数据流:  体检结果 说明:   学生参加体格检查的最终结果 数据流来源:体检 数据流去向:批准 组成:   ……  平均流量: ……  高峰期流量:……

1221 处理过程(续) 数据存储“学生登记表”可如下描述: 数据存储: 学生登记表 说明: 记录学生的基本情况 流入数据流:…… 流出数据流:……
数据存储: 学生登记表 说明:   记录学生的基本情况  流入数据流:…… 流出数据流:…… 组成:   …… 数据量:  每年3000张 存取方式: 随机存取

1222 处理过程(续) 处理过程“分配宿舍”可如下描述: 处理过程:分配宿舍 说明: 为所有新生分配学生宿舍 输入: 学生,宿舍, 输出: 宿舍安排
 处理过程:分配宿舍  说明:  为所有新生分配学生宿舍  输入:  学生,宿舍,  输出:  宿舍安排  处理:  在新生报到后,为所有新生分配学 生宿舍。要求同一间宿舍只能安排 同一性别的学生,同一个学生只能 安排在一个宿舍中。每个学生的居 住面积不小于3平方米。安排新生 宿舍其处理时间应不超过15分钟。

1223 下课了。。。 休息一会儿。。。

1224 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第六章 数据库设计(续-1)

1225 6.3 概念结构设计 6.3.1 概念结构设计概述 6.3.2 概念结构设计的方法与步骤 6.3.3 数据抽象与局部视图设计
6.3 概念结构设计 概念结构设计概述 概念结构设计的方法与步骤 数据抽象与局部视图设计 视图的集成

1226 6.3.1 概念结构 什么是概念结构设计 需求分析阶段描述的用户应用需求是现实世界的具体需求
概念结构 什么是概念结构设计 需求分析阶段描述的用户应用需求是现实世界的具体需求 将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计 概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定。 概念结构设计是整个数据库设计的关键

1227 概念结构(续) 现实世界 机器世界 信息世界 需求分析 概念结构设计

1228 概念结构(续) 概念结构设计的特点 (1)能真实、充分地反映现实世界,包括事物 和事物之间的联系,能满足用户对数据的处理 要求。是对现实世界的一个真实模型。 (2)易于理解,从而可以用它和不熟悉计算机 的用户交换意见,用户的积极参与是数据库的 设计成功的关键。

1229 概念结构(续) 概念结构设计的特点(续) (3)易于更改,当应用环境和应用要求改变时, 容易对概念模型修改和扩充。
(4)易于向关系、网状、层次等各种数据模型 转换。

1230 概念结构(续) 描述概念模型的工具 E-R模型

1231 6.3 概念结构设计 6.3.1 概念结构设计概述 6.3.2 概念结构设计的方法与步骤 6.3.3 数据抽象与局部视图设计
6.3 概念结构设计 概念结构设计概述 概念结构设计的方法与步骤 数据抽象与局部视图设计 视图的集成

1232 设计概念结构的四类方法 6.3.2 概念结构设计的方法与步骤 自顶向下 自底向上 首先定义全局概念结构的框架,然后逐步细化
概念结构设计的方法与步骤 设计概念结构的四类方法 自顶向下 首先定义全局概念结构的框架,然后逐步细化 自底向上 首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构

1233 概念结构设计的方法与步骤(续) 逐步扩张 混合策略
首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构 混合策略 将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。

1234 概念结构设计的方法与步骤(续) 自顶向下策略

1235 概念结构设计的方法与步骤(续) 自底向上策略

1236 概念结构设计的方法与步骤(续) 逐步扩张

1237 概念结构设计的方法与步骤(续) 常用策略(P215图6.8) 自底向上设计概念结构的步骤 自顶向下地进行需求分析 自底向上地设计概念结构
第1步:抽象数据并设计局部视图 第2步:集成局部视图,得到全局概念结构

1238 6.3 概念结构设计 6.3.1 概念结构设计概述 6.3.2 概念结构设计的方法与步骤 6.3.3 数据抽象与局部视图设计
6.3 概念结构设计 概念结构设计概述 概念结构设计的方法与步骤 数据抽象与局部视图设计 视图的集成

1239 数据抽象与局部视图设计 数据抽象 局部视图设计

1240 一、数据抽象 概念结构是对现实世界的一种抽象 从实际的人、物、事和概念中抽取所关心的 共同特性,忽略非本质的细节
把这些特性用各种概念精确地加以描述 这些概念组成了某种模型

1241 数据抽象(续) 三种常用抽象 1. 分类(Classification) 定义某一类概念作为现实世界中一组对象的类型
这些对象具有某些共同的特性和行为 它抽象了对象值和型之间的“is member of”的语义 在E-R模型中,实体型就是这种抽象 例:P216图6.10

1242 数据抽象(续) 2. 聚集(Aggregation) 定义某一类型的组成成分 它抽象了对象内部类型和成分之间“is part of”的语义
在E-R模型中若干属性的聚集组成了实体型,就是这种抽象 例:P217图6.11,图6.12

1243 数据抽象(续) 3. 概括(Generalization) 例:P217图6.13 定义类型之间的一种子集联系
它抽象了类型之间的“is subset of”的语义 概括有一个很重要的性质:继承性。子类继承超类上定义的所有抽象。 例:P217图6.13

1244 数据抽象(续) 注:原E-R模型不具有概括,本书对E-R模型作了扩充,允许定义超类实体型和子类实体型。 用直线加小圆圈表示超类-子类的联系
用双竖边的矩形框表示子类, 用直线加小圆圈表示超类-子类的联系

1245 数据抽象(续) 数据抽象的用途 对需求分析阶段收集到的数据进行分类、组织(聚集),形成 实体 实体的属性,标识实体的码
确定实体之间的联系类型(1:1,1:n,m:n)

1246 二、局部视图设计 设计分E-R图的步骤: ⒈选择局部应用 ⒉逐一设计分E-R图

1247 ⒈ 选择局部应用 需求分析阶段,已用多层数据流图和数据字典 描述了整个系统。
设计分E-R图首先需要根据系统的具体情况, 在多层的数据流图中选择一个适当层次的数据 流图,让这组图中每一部分对应一个局部应用, 然后以这一层次的数据流图为出发点,设计分 E-R图。

1248 选择局部应用(续) 例:由于学籍管理、课程管理等都不太复杂,因此可以它们入手设计学生管理子系统的分E-R图。如果局部应用比较复杂,则可以从更下层的数据流图入手。

1249 ⒉ 逐一设计分E-R图 任务 标定局部应用中的实体、属性、码,实体间的联系
将各局部应用涉及的数据分别从数据字典中抽取出来,参照数据流图,标定各局部应用中的实体、实体的属性、标识实体的码,确定实体之间的联系及其类型(1:1,1:n,m:n)

1250 逐一设计分E-R图(续) 如何抽象实体和属性
实体:现实世界中一组具有某些共同特性和 行为的对象就可以抽象为一个实体。对象和 实体之间是“is member of"的关系。 例:在学校环境中,可把张三、李四等对象抽 象为学生实体。

1251 逐一设计分E-R图(续) 属性:对象类型的组成成分可以抽象为实体 的属性。组成成分与对象类型之间是“is part of"的关系。
例:学号、姓名、专业、年级等可以抽象为学 生实体的属性。其中学号为标识学生实体的码。

1252 逐一设计分E-R图(续) 如何区分实体和属性
实体与属性是相对而言的。同一事物,在一种应用环境中作为“属性”,在另一种应用环境中就必须作为“实体”。 例:学校中的系,在某种应用环境中,它只是 作为“学生”实体的一个属性,表明一个学生 属于哪个系;而在另一种环境中,由于需要考 虑一个系的系主任、教师人数、学生人数、办 公地点等,这时它就需要作为实体了。

1253 逐一设计分E-R图(续) 一般原则 属性不能再具有需要描述的性质。即属性必须是不可分的数据项,不能再由另一些属性组成。
属性不能与其他实体具有联系。联系只发生在实体之间。 符合上述两条特性的事物一般作为属性对待。 为了简化E-R图的处置,现实世界中的事物凡能够作为属性对待的,应尽量作为属性。

1254 逐一设计分E-R图(续) 例1:“学生”由学号、姓名等属性进一步描述,根据准则1,“学生”只能作为实体,不能作为属性。
举例 例1:“学生”由学号、姓名等属性进一步描述,根据准则1,“学生”只能作为实体,不能作为属性。 例2:职称通常作为教师实体的属性,但在涉及住房分配时,由于分房与职称有关,也就是说职称与住房实体之间有联系,根据准则2,这时把职称作为实体来处理会更合适些。(教程P194图6-10)

1255 逐一设计分E-R图(续) 设计分E-R图的步骤 (1)以数据字典为出发点定义E-R图。
数据字典中的“数据结构”、“数据流” 和“数据存储”等已是若干属性的有意义 的聚合 (2)按上面给出的准则进行必要的调整。

1256 逐一设计分E-R图(续) 例:学籍管理局部应用中主要涉及的实体包括学生、宿舍、档案材料、班级、班主任。 实体之间的联系:
由于一个宿舍可以住多个学生,而一个学生只能住在某一个宿舍中,因此宿舍与学生之间是1:n的联系。 由于一个班级往往有若干名学生,而一个学生只能属于一个班级,因此班级与学生之间也是1:n的联系。

1257 逐一设计分E-R图(续) 由于班主任同时还要教课,因此班主任与学生之间存在指导联系,一个班主任要教多名学生,而一个学生只对应一个班主任,因此班主任与学生之间也是1:n的联系。 而学生和他自己的档案材料之间,班级与班主任之间都是1:1的联系。 学籍管理局部应用的分E-R图草图:教程P195图6-11

1258 逐一设计分E-R图(续) 接下来需要进一步斟酌该E-R图,做适当调整。
(1) 在一般情况下,性别通常作为学生实体的属性,但在本局部应用中,由于宿舍分配与学生性别有关,根据准则2,应该把性别作为实体对待。 (2) 数据存储“学生登记表”,由于是手工填写,供存档使用,其中有用的部分已转入学生档案材料中,因此这里就不必作为实体了。 最后得到学籍管理局部应用的分E-R图:教程P195如图6-12。

1259 逐一设计分E-R图(续) 该E-R图中省略了各个实体的属性描述: 学生:{学号,姓名,出生日期} 性别:{性别}
  学生:{学号,姓名,出生日期}   性别:{性别}   档案材料:{档案号,…… }   班级:{班级号,学生人数}   班主任:{职工号,姓名,性别, 是否为优秀班主任} 宿舍:{宿舍编号,地址,人数} 其中有下划线的属性为实体的码。

1260 逐一设计分E-R图(续) 同样方法可以得到课程管理局部应用的分E-R图,(图6-13) 各实体的属性分别为:
  学生:{姓名,学号,性别,年龄,所在系, 年级,平均成绩}   课程:{课程号,课程名,学分}   教师:{职工号,姓名,性别,职称}   教科书:{书号,书名,价钱}   教室:{教室编号,地址,容量}

1261 题目 设有一局部应用,包括3个实体,“科室”、“医生”和“病人”,且有以下事实:
每位医生属于且仅属于一个科室;每个科室有多位医生可接诊病人;病人根据自己的症状选择相应的科室就诊;一位病人在同一科室中多次看病时,每次可能由不同的医生为其诊断。 设科室的属性包括科室代码、科室名称,医生的属性包括工号、姓名、职称,病人的属性包括姓名、年龄、工作单位,试设计局部ER图。

1262 6.3 概念结构设计 概念结构 概念结构设计的方法与步骤 数据抽象与局部视图设计 视图的集成

1263 视图的集成 各个局部视图即分E-R图建立好后,还需要对它们进行合并,集成为一个整体的数据概念结构即总E-R图。

1264 视图的集成(续) 视图集成的两种方式 一次集成(P224图6.25(a)) 逐步累积式(P224图6.25(b)) 一次集成多个分E-R图
通常用于局部视图比较简单时 逐步累积式(P224图6.25(b)) 首先集成两个局部视图(通常是比较关键的两个局部视图) 以后每次将一个新的局部视图集成进来

1265 视图的集成(续) 集成局部E-R图的步骤 1. 合并 2. 修改与重构

1266 视图的集成(续)

1267 各分E-R图存在冲突 一、合并分E-R图,生成初步E-R图 各个局部应用所面向的问题不同 由不同的设计人员进行设计

1268 合并分E-R图,生成初步E-R图(续) 冲突的种类 属性冲突 命名冲突 结构冲突

1269 ⒈ 属性冲突 两类属性冲突 属性域冲突:属性值的类型、取值范围或取值集合不同。
例1, 由于学号是数字,因此某些部门(即局部应用)将学号定义为整数形式,而由于学号不用参与运算,因此另一些部门(即局部应用)将学号定义为字符型形式。 例2, 某些部门(即局部应用)以出生日期形 式表示学生的年龄,而另一些部门(即局部应 用)用整数形式表示学生的年龄。

1270 属性冲突(续) 属性取值单位冲突。 例:学生的身高,有的以米为单位,有的以厘米为单位,有的以尺为单位。

1271 属性冲突(续) 属性冲突的解决方法 通常用讨论、协商等行政手段加以解决

1272 ⒉ 命名冲突 两类命名冲突 同名异义:不同意义的对象在不同的局部应用中具有相同的名字 例,局部应用A中将教室称为房间
局部应用B中将学生宿舍称为房间 异名同义(一义多名):同一意义的对象在不同的局部应用中具有不同的名字 例,有的部门把教科书称为课本 有的部门则把教科书称为教材

1273 命名冲突(续) 命名冲突可能发生在属性级、实体级、联系级上。其中属性的命名冲突更为常见。 命名冲突的解决方法
通过讨论、协商等行政手段加以解决

1274 ⒊ 结构冲突 三类结构冲突 同一对象在不同应用中具有不同的抽象 例,“课程”在某一局部应用中被当作实体 在另一局部应用中则被当作属性
解决方法:通常是把属性变换为实体或把实体变换为属性,使同一对象具有相同的抽象。变换时要遵循两个准则。

1275 结构冲突(续) 同一实体在不同局部视图中所包含的属性不完全相同,或者属性的排列次序不完全相同。
产生原因:不同的局部应用关心的是该实 体的不同侧面。 解决方法:使该实体的属性取各分E-R图 中属性的并集,再适当设计属性的次序。

1276 结构冲突(续) 学生 学号 姓名 性别 平均成绩 (a)在局部应用A中

1277 结构冲突(续) 学生 姓名 学号 出生日期 所在系 年级 (b)在局部应用B中

1278 结构冲突(续) 学生 姓名 政治面貌 学号 (c)在局部应用C中

1279 结构冲突(续) 学生 学号 出生 日期 姓名 政治 面貌 所在系 平均 成绩 年级 性别 (d)合并后

1280 结构冲突(续) 实体之间的联系在不同局部视图中呈现不同的类型
例1, 实体E1与E2在局部应用A中是多对多联系,而在局部应用B中是一对多联系 例2, 在局部应用X中E1与E2发生联系,而在局部应用Y中E1、E2、E3三者之间有联系。 解决方法:根据应用语义对实体联系的类型进行综合或调整。(P226图6.27)

1281 合并分E-R图,生成初步E-R图实例 例:生成学校管理系统的初步E-R图 以合并学籍管理局部视图, 课程管理局部视图为例 这两个分E-R图存在着多方面的冲突:

1282 合并分E-R图,生成初步E-R图实例 (1) 班主任实际上也属于教师,也就是说学籍管理中的班主任实体与课程管理中的教师实体在一定程度上属于异名同义,可以应将学籍管理中的班主任实体与课程管理中的教师实体统一称为教师,统一后教师实体的属性构成为:   教师:{职工号,姓名,性别,职称, 是否为优秀班主任}

1283 合并分E-R图,生成初步E-R图实例(续)
(2) 将班主任改为教师后,教师与学生之间的联系在两个局部视图中呈现两种不同的类型,一种是学籍管理中教师与学生之间的指导联系,一种是课程管理中教师与学生之间的教学联系,由于指导联系实际上可以包含在教学联系之中,因此可以将这两种联系综合为教学联系。

1284 合并分E-R图,生成初步E-R图实例(续)

1285 合并分E-R图,生成初步E-R图实例(续)
学生:{学号,姓名,出生日期,年龄,所在系,年级,平均成绩} 解决上述冲突后,学籍管理分E-R图与课程管理分E-R图合并为P198图6-16的形式。

1286 二、修改与重构 基本任务 消除不必要的冗余,设计生成基本E-R图 分E-R图 合并 可能存在冗余的数据 初步E-R图 和冗余的实体间联系

1287 修改与重构(续) 1.冗余 2.消除冗余的方法

1288 1.冗余 冗余的数据是指可由基本数据导出的数据, 冗余的联系是指可由其他联系导出的联系。
冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难 并不是所有的冗余数据与冗余联系都必须加以消除,有时为了提高某些应用的效率,不得不以冗余信息作为代价。

1289 冗余(续) 设计数据库概念结构时,哪些冗余信息必须消除,哪些冗余信息允许存在,需要根据用户的整体需求来确定。
消除不必要的冗余后的初步E-R图称为基本E-R图。

1290 2.消除冗余的方法 分析方法 以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。

1291 消除冗余的方法(续) 例,教师工资单中包括该教师的基本工资、各种补贴、应扣除的房租水电费以及实发工资。
由于实发工资可以由前面各项推算出来,因此可以去掉,在需要查询实发工资时根据基本工资、各种补贴、应扣除的房租水电费数据临时生成。

1292 消除冗余的方法(续) 如果是为了提高效率,人为地保留了一些冗余数据,则应把数据字典中数据关联的说明作为完整性约束条件。
一种更好的方法是把冗余数据定义在视图中

1293 消除冗余的方法(续) 规范化理论 函数依赖的概念提供了消除冗余联系的形式化工具

1294 消除冗余的方法(续) 1. 确定分E-R图实体之间的数据依赖FL 。实体之间一对一、一对多、多对多的联系可以用实体码之间的函数依赖来表示。
例: 班级和学生之间一对多的联系: 学号班级号 学生和课程之间多对多的联系: (学号,课程号) 成绩

1295 消除冗余的方法(续) 2. 求FL的最小覆盖GL ,差集为 D = FL-GL。

1296 消除冗余的方法(续) 由于规范化理论受到泛关系假设的限制,应注意下面两个问题: 1.冗余的联系一定在D中,而D中的联系不一定是冗余的;
2.当实体之间存在多种联系时要将实体之间的联系在形式上加以区分。 例P229图6.30中 部门和职工之间两种联系表示为: 负责人.职工号部门号 部门号负责人.职工号

1297 泛关系假设 假设存在着一个单一的关系模式 “假设已知一个模式Sφ,它仅由单个关系模式组成,问题是要设计一个模式SD,它与Sφ‘等价’,但在某些方面更好一些” 从一个关系模式出发,而不是从一组关系模式出发实行分解 “等价”的定义也是一组关系模式与一个关系模式的“等价”

1298 泛关系假设(续) 泛关系假设是运用规范化理论时的障碍 承认了泛关系假设,就等于承认了现实世界各实体间只能有一种联系

1299 消除冗余,设计生成基本E-R图实例 教程P198图6-16的初步E-R图中存在着冗余数据和冗余联系: (1) 学生实体中的年龄属性可以由出生日期推算出来,属于冗余数据,应该去掉。这样不仅可以节省存储空间,而且当某个学生的出生日期有误,进行修改后,无须相应修改年龄,减少了产生数据不一致的机会。  学生:{学号,姓名,出生日期,所在系, 年级,平均成绩}

1300 消除冗余,设计生成基本E-R图实例(续)
(2) 教室实体与班级实体的上课联系可以由教室与课程之间的开设联系、课程与学生之间的选修联系、学生与班级之间的组成联系三者推导出来,因此属于冗余联系,可以消去。

1301 消除冗余,设计生成基本E-R图实例(续)
(3) 学生实体中的平均成绩可以从选修联系中的成绩属性中推算出来 由于应用中需要经常查询某个学生的平均成绩,每次都进行这种计算效率就会太低,因此为提高效率,保留该冗余数据 但定义一个触发器来保证学生的平均成绩等于该学生各科成绩的平均值。 任何一科成绩修改后,或该学生学了新的科目并有成绩后,就触发该触发器去修改该学生的平均成绩属性值。

1302 消除冗余,设计生成基本E-R图实例(续)
学生管理子系统的基本E-R图与教师管理子系统以及后勤管理子系统的基本E-R图合并后,生成整个学校管理系统的基本E-R图

1303 三、验证整体概念结构 视图集成后形成一个整体的数据库概念结构,对该整体概念结构还必须进行进一步验证,确保它能够满足下列条件:
整体概念结构内部必须具有一致性,不存在互相矛盾的表达。 整体概念结构能准确地反映原来的每个视图结构,包括属性、实体及实体间的联系。 整体概念结构能满足需要分析阶段所确定的所有要求。

1304 验证整体概念结构(续) 整体概念结构最终还应该提交给用户,征求用户和有关人员的意见,进行评审、修改和优化,然后把它确定下来,作为数据库的概念结构,作为进一步设计数据库的依据。

1305 数据库设计 数据库的设计过程 需求分析 概念结构设计 逻辑结构设计 物理数据库设计 实施 运行维护 设计过程中往往还会有许多反复。

1306 概念结构设计小结 什么是概念结构设计 现实世界 机器世界 信息世界 需求分析 概念结构设计

1307 概念结构设计小结 概念结构设计的步骤 抽象数据并设计局部视图 集成局部视图,得到全局概念结构 验证整体概念结构

1308 概念结构设计小结 数据抽象 分类 聚集 概括

1309 概念结构设计小结 设计局部视图 ⒈ 选择局部应用 ⒉ 逐一设计分E-R图 标定局部应用中的实体、属性、码,实体间的联系 用E-R图描述出来

1310 概念结构设计小结 集成局部视图 1.合并分E-R图,生成初步E-R图 消除冲突 属性冲突 命名冲突 结构冲突 2. 修改与重构
分析方法 规范化理论

1311 下课了。。。 休息一会儿。。。

1312 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第六章 数据库设计(续-2)

1313 第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计
第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计 6.6 数据库实施 6.7 数据库运行与维护 6.8 小结

1314 6.4 逻辑结构设计 逻辑结构设计的任务 概念结构是各种数据模型的共同基础
6.4 逻辑结构设计 逻辑结构设计的任务 概念结构是各种数据模型的共同基础 为了能够用某一DBMS实现用户需求,还必 须将概念结构进一步转化为相应的数据模型, 这正是数据库逻辑结构设计所要完成的任务。

1315 6.4 逻辑结构设计 逻辑结构设计的步骤 将概念结构转化为一般的关系、网状、层次模型
6.4 逻辑结构设计 逻辑结构设计的步骤 将概念结构转化为一般的关系、网状、层次模型 将转化来的关系、网状、层次模型向特定DBMS支持下的数据模型转换 对数据模型进行优化

1316 逻辑结构设计 概念结 构设计 数据库 物理设计 转化为一般数据模型 转化为特定DBMS支持下的据模型 逻辑 模型 优化方法如规范化理论
优化模型 概念结 构设计 数据库 物理设计 基本E-R图 转换规则 特定DBMS的特点与限制 优化方法如规范化理论 逻辑 模型

1317 6.4 逻辑结构设计 6.4.1 E-R图向关系模型的转换 6.4.2 向特定DBMS规定的模型进行转换 6.4.3 数据模型的优化
6.4 逻辑结构设计 E-R图向关系模型的转换 向特定DBMS规定的模型进行转换 数据模型的优化 设计用户子模式

1318 E-R图向关系模型的转换 转换内容 转换原则

1319 E-R图向关系模型的转换(续) 转换内容 E-R图由实体、实体的属性和实体之间的联 系三个要素组成 关系模型的逻辑结构是一组关系模式的集合

1320 E-R图向关系模型的转换(续) 转换原则 ⒈ 一个实体型转换为一个关系模式。 关系的属性:实体型的属性 关系的码:实体型的码
例,学生实体可以转换为如下关系模式:   学生(学号,姓名,出生日期,所在系, 年级,平均成绩) 性别、宿舍、班级、档案材料、教师、课程、教室、教科书都分别转换为一个关系模式。

1321 学生 学号 出生 日期 年级 所在系 平均 成绩 姓名

1322 E-R图向关系模型的转换(续) ⒉ 一个m:n联系转换为一个关系模式。 关系的属性:与该联系相连的各实体的码以及联系本身的属性
关系的码:各实体码的组合 例,“选修”联系是一个m:n联系,可以将它转换为如下关系模式,其中学号与课程号为关系的组合码:   选修(学号,课程号,成绩)

1323 E-R图向关系模型的转换(续) ⒊ 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
1) 转换为一个独立的关系模式 关系的属性:与该联系相连的各实体的码 以及联系本身的属性 关系的码:n端实体的码

1324 E-R图向关系模型的转换(续) 2) 与n端对应的关系模式合并 合并后关系的属性:在n端关系中加入1端关系的码和联系本身的属性
合并后关系的码:不变 可以减少系统中的关系个数,一般情况下更倾向于采用这种方法

1325 E-R图向关系模型的转换(续) 例,“组成”联系为1:n联系。 将其转换为关系模式的两种方法: 1)使其成为一个独立的关系模式:
  组成(学号,班级号) 2)将其学生关系模式合并: 学生(学号,姓名,出生日期,所在系, 年级,班级号,平均成绩)

1326 E-R图向关系模型的转换(续) ⒋ 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
1) 转换为一个独立的关系模式 关系的属性:与该联系相连的各实体的码 以及联系本身的属性 关系的候选码:每个实体的码均是该关系 的候选码

1327 E-R图向关系模型的转换(续) 2) 与某一端对应的关系模式合并 合并后关系的属性:加入对应关系的码和 联系本身的属性 合并后关系的码:不变

1328 E-R图向关系模型的转换(续) 例,“管理”联系为1:1联系,可以有三种转换方法: (1)转换为一个独立的关系模式: 管理(职工号,班级号)
或 管理(职工号,班级号) (2)“管理”联系与班级关系模式合并,则只需在班级关系中加入教师关系的码,即职工号:    班级:(班级号,学生人数,职工号) (3)“管理”联系与教师关系模式合并,则只需在教师关系中加入班级关系的码,即班级号: 教师:(职工号,姓名,性别,职称,班级号, 是否为优秀班主任)

1329 E-R图向关系模型的转换(续) 注意: 从理论上讲,1:1联系可以与任意一端对应的关系模式合并。
但在一些情况下,与不同的关系模式合并效率会大不一样。因此究竟应该与哪端的关系模式合并需要依应用的具体情况而定。 由于连接操作是最费时的操作,所以一般应以尽量减少连接操作为目标。 例如,如果经常要查询某个班级的班主任姓名,则将管理联系与教师关系合并更好些。

1330 E-R图向关系模型的转换(续) ⒌ 三个或三个以上实体间的一个多元联系转换为一个关系模式。
关系的属性:与该多元联系相连的各实体的码以及联系本身的属性 关系的码:各实体码的组合 例,“讲授”联系是一个三元联系,可以将它转换为如下关系模式,其中课程号、职工号和书号为关系的组合码:   讲授(课程号,职工号,书号)

1331 E-R图向关系模型的转换(续) ⒍ 同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。
教师:{职工号,姓名,性别,职称,系主任}

1332 E-R图向关系模型的转换(续) ⒎ 具有相同码的关系模式可合并。 目的:减少系统中的关系个数。
合并方法:将其中一个关系模式的全部属性加入到另一个关系模式中,然后去掉其中的同义属性(可能同名也可能不同名),并适当调整属性的次序。

1333 E-R图向关系模型的转换(续) 例,“拥有”关系模式: 与学生关系模式: 都以学号为码,可以将它们合并为一个关系模式: 拥有(学号,性别)
 拥有(学号,性别) 与学生关系模式: 学生(学号,姓名,出生日期,所在系,年级, 班级号,平均成绩) 都以学号为码,可以将它们合并为一个关系模式:  学生(学号,姓名,性别,出生日期,所在系, 年级,班级号,平均成绩)

1334 E-R图向关系模型的转换(续) 实例 按照上述七条原则,学生管理子系统中的18个实体和联系可以转换为下列关系模型:
学生(学号,姓名,性别,出生日期,所在系, 年级,班级号,平均成绩,档案号) 性别(性别,宿舍楼) 宿舍(宿舍编号,地址,性别,人数)  班级(班级号,学生人数) 教师(职工号,姓名,性别,职称,班级号, 是否为优秀班主任)  

1335 E-R图向关系模型的转换(续) 教学(职工号,学号) 课程(课程号,课程名,学分,教室号) 选修(学号,课程号,成绩)
  课程(课程号,课程名,学分,教室号)   选修(学号,课程号,成绩)   教科书(书号,书名,价钱)   教室(教室编号,地址,容量)   讲授(课程号,教师号,书号)   档案材料(档案号,……)

1336 E-R图向关系模型的转换(续) 该关系模型由12个关系模式组成。 其中:
学生关系模式包含了“拥有”联系、“组成”联系、“归档”联系所对应的关系模式 教师关系模式包含了“管理”联系所对应的关系模式; 宿舍关系模式包含了“住宿”联系所对应的关系模式; 课程关系模式包含了“开设”联系所对应的关系模式。

1337 6.4 逻辑结构设计 6.4.1 E-R图向关系模型的转换 6.4.2 向特定DBMS规定的模型进行转换 6.4.3 数据模型的优化
6.4 逻辑结构设计 E-R图向关系模型的转换 向特定DBMS规定的模型进行转换 数据模型的优化 设计用户子模式

1338 一般的数据模型还需要向特定DBMS规定的模型进行转换。
对于关系模型来说,这种转换通常都比较简单。

1339 6.4 逻辑结构设计 6.4.1 E-R图向关系模型的转换 6.4.2 向特定DBMS规定的模型进行转换 6.4.3 数据模型的优化
6.4 逻辑结构设计 E-R图向关系模型的转换 向特定DBMS规定的模型进行转换 数据模型的优化 设计用户子模式

1340 6.4.3 数据模型的优化 数据库逻辑设计的结果不是唯一的。
数据模型的优化 数据库逻辑设计的结果不是唯一的。 得到初步数据模型后,还应该适当地修 改、调整数据模型的结构,以进一步提 高数据库应用系统的性能,这就是数据 模型的优化。 关系数据模型的优化通常以规范化理论 为指导。

1341 数据模型的优化(续) 优化数据模型的方法 ⒈ 确定数据依赖
按需求分析阶段所得到的语义,分别写出每个关系模式内部各属性之间的数据依赖以及不同关系模式属性之间数据依赖。

1342 数据模型的优化(续) 例,课程关系模式内部存在下列数据依赖: 课程号→课程名 课程号→学分 课程号→教室号 选修关系模式中存在下列数据依赖:
   课程号→课程名    课程号→学分 课程号→教室号   选修关系模式中存在下列数据依赖:    (学号,课程号)→成绩

1343 数据模型的优化(续) ⒉ 对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。

1344 数据模型的优化(续) ⒊ 按照数据依赖的理论对关系模式逐一进行分析,考查是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。 例如经过分析可知,课程关系模式属于BC范式。

1345 数据模型的优化(续) ⒋ 按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解。

1346 数据模型的优化(续) 并不是规范化程度越高的关系就越优。
当一个应用的查询中经常涉及到两个或多个关系模式的属性时,系统必须经常地进行联接运算,而联系运算的代价是相当高的,可以说关系模型低效的主要原因就是做联接运算引起的,因此在这种情况下,第二范式甚至第一范式也许是最好的。

1347 数据模型的优化(续) 非BCNF的关系模式虽然从理论上分析会存在不同程度的更新异常,但如果在实际应用中对此关系模式只是查询,并不执行更新操作,则就不会产生实际影响。 对于一个具体应用来说,到底规范化进行到什么程度,需要权衡响应时间和潜在问题两者的利弊才能决定。一般说来,第三范式就足够了。

1348 数据模型的优化(续) 例:在关系模式 学生成绩单(学号,英语,数学,语文,平均成绩) 中存在下列函数依赖: 学号→英语 学号→数学
  学号→英语   学号→数学   学号→语文   学号→平均成绩 (英语, 数学, 语文)→平均成绩

1349 数据模型的优化(续) 显然有: 学号→(英语,数学,语文) 因此该关系模式中存在传递函数信赖,是2NF关系。
虽然平均成绩可以由其他属性推算出来,但如果应用中需要经常查询学生的平均成绩,为提高效率,我们仍然可保留该冗余数据,对关系模式不再做进一步分解。

1350 数据模型的优化(续) ⒌ 按照需求分析阶段得到的各种应用对数据处理的要求,对关系模式进行必要的分解或合并,以提高数据操作的效率和存储空间的利用率 常用分解方法 水平分解 垂直分解

1351 数据模型的优化(续) 水平分解 什么是水平分解 把(基本)关系的元组分为若干子集合,定义每个子集合为一个子关系,以提高系统的效率。

1352 数据模型的优化(续) 水平分解的适用范围 1. 满足“80/20原则”的应用
1. 满足“80/20原则”的应用 80/20原则:一个大关系中,经常被使用的数据只是关系的一部分,约20% 把经常使用的数据分解出来,形成一个子关系,可以减少查询的数据量。

1353 数据模型的优化(续) 水平分解的适用范围 2. 并发事务经常存取不相交的数据
如果关系R上具有n个事务,而且多数事务存取的数据不相交,则R可分解为少于或等于n个子关系,使每个事务存取的数据对应一个关系。

1354 数据模型的优化(续) 水平分解 什么是水平分解 把(基本)关系的元组分为若干子集合,定义每个子集合为一个子关系,以提高系统的效率。
水平分解的适用范围 满足“80/20原则”的应用 并发事务经常存取不相交的数据

1355 数据模型的优化(续) 满足“80/20原则”的应用 80/20原则:一个大关系中,经常被使用的数据只是关系的一部分,约20%
把经常使用的数据分解出来,形成一个子关系,可以减少查询的数据量。 并发事务经常存取不相交的数据 如果关系R上具有n个事务,而且多数事务存取的数据不相交,则R可分解为少于或等于n个子关系,使每个事务存取的数据对应一个关系。

1356 数据模型的优化(续) 垂直分解 什么是垂直分解 把关系模式R的属性分解为若干子集合,形成若干子关系模式。 垂直分解的原则

1357 数据模型的优化(续) 垂直分解的优点 可以提高某些事务的效率 垂直分解的缺点 可能使另一些事务不得不执行连接操 作,从而降低了效率。

1358 数据模型的优化(续) 垂直分解的适用范围 取决于分解后R上的所有事务的总效率是否得到了提高。 进行垂直分解的方法 简单情况:直观分解
复杂情况:用第五章中的模式分解算法 垂直分解必须不损失关系模式的语义(保持无损连接性和保持函数依赖)。

1359 6.4 逻辑结构设计 6.4.1 E-R图向关系模型的转换 6.4.2 向特定DBMS规定的模型进行转换 6.4.3 数据模型的优化
6.4 逻辑结构设计 E-R图向关系模型的转换 向特定DBMS规定的模型进行转换 数据模型的优化 设计用户子模式

1360 6.4.4 设计用户子模式 定义数据库模式主要是从系统的时间效率、空间效率、易维护等角度出发。
设计用户子模式 定义数据库模式主要是从系统的时间效率、空间效率、易维护等角度出发。 定义用户外模式时应该更注重考虑用户的习惯与方便。包括三个方面:

1361 设计用户子模式(续) (1) 使用更符合用户习惯的别名
合并各分E-R图曾做了消除命名冲突的工作,以使数据库系统中同一关系和属性具有唯一的名字。这在设计数据库整体结构时是非常必要的。 但对于某些局部应用,由于改用了不符合用户习惯的属性名,可能会使他们感到不方便,

1362 设计用户子模式(续) 因此在设计用户的子模式时可以重新定义某些属性名,使其与用户习惯一致。
当然,为了应用的规范化,我们也不应该一味地迁就用户。 例:负责学籍管理的用户习惯于称教师模式的职工号为教师编号。因此可以定义视图,在视图中职工号重定义为教师编号

1363 设计用户子模式(续) (2) 针对不同级别的用户定义不同的外模式,以满足系统对安全性的要求。

1364 设计用户子模式(续) 例: 教师关系模式中包括职工号、姓名、性别、出生日期、婚姻状况、学历、学位、政治面貌、职称、职务、工资、工龄、教学效果等属性。 学籍管理应用只能查询教师的职工号、姓名、性别、职称数据; 课程管理应用只能查询教师的职工号、姓名、性别、学历、学位、职称、教学效果数据; 教师管理应用则可以查询教师的全部数据。

1365 设计用户子模式(续) 定义两个外模式: 教师_学籍管理(职工号,姓名,性别,职称) 教师_课程管理(工号,姓名,性别,学历,
学位,职称,教学效果) 授权学籍管理应用只能访问教师_学籍管理视图 授权课程管理应用只能访问教师_课程管理视图 授权教师管理应用能访问教师表 这样就可以防止用户非法访问本来不允许他们查询的数据,保证了系统的安全性。

1366 设计用户子模式(续) (3) 简化用户对系统的使用
如果某些局部应用中经常要使用某些很复杂的查询,为了方便用户,可以将这些复杂查询定义为视图。

1367 逻辑结构设计小结 任务 逻辑结构设计的步骤 将概念结构转化为具体的数据模型 将概念结构转化为一般的关系、网状、层次模型
将转化来的关系、网状、层次模型向特定DBMS支持下的数据模型转换 对数据模型进行优化 设计用户子模式

1368 逻辑结构设计小结 E-R图向关系模型的转换内容 将E-R图转换为关系模型:将实体、实体的 属性和实体之间的联系转化为关系模式。

1369 逻辑结构设计小结 E-R图向关系模型的转换原则 ⒈ 一个实体型转换为一个关系模式。 ⒉ 一个m:n联系转换为一个关系模式。
⒊ 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。 ⒋ 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。

1370 逻辑结构设计小结 ⒌ 三个或三个以上实体间的一个多元联系转换为一个关系模式。
⒍ 同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。 ⒎ 具有相同码的关系模式可合并。

1371 逻辑结构设计小结 优化数据模型的方法 ⒈ 确定数据依赖 ⒉ 对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
⒉ 对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。 ⒊ 确定各关系模式分别属于第几范式。 ⒋ 分析对于应用环境这些模式是否合适,确定是否要对它们进行合并或分解。 ⒌ 对关系模式进行必要的分解或合并

1372 逻辑结构设计小结 设计用户子模式 1. 使用更符合用户习惯的别名 2. 针对不同级别的用户定义不同的外模式,以 满足系统对安全性的要求。
3. 简化用户对系统的使用

1373 第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计
第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计 6.6 数据库实施 6.7 数据库运行与维护 6.8 小结

1374 6.5 数据库的物理设计 什么是数据库的物理设计 数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的计算机系统。
6.5 数据库的物理设计 什么是数据库的物理设计 数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的计算机系统。 为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程,就是数据库的物理设计。

1375 6.5 数据库的物理设计 数据库物理设计的步骤 确定数据库的物理结构 对物理结构进行评价,评价的重点是时间和空间效率
6.5 数据库的物理设计 数据库物理设计的步骤 确定数据库的物理结构 对物理结构进行评价,评价的重点是时间和空间效率 如果评价结果满足原设计要求则可进入到物理实施阶段,否则,就需要重新设计或修改物理结构,有时甚至要返回逻辑设计阶段修改数据模型。

1376 数据库物理设计 确定数据库的物理结构 评价数据库的物理结构 逻辑结 构设计 数据库 实施 物理 模型 逻辑 模型

1377 6.5 数据库的物理设计 6.5.1 数据库的物理设计的内容和方法 6.5.2 关系模式存取方法选择 6.5.3 确定数据库的存储结构
6.5 数据库的物理设计 数据库的物理设计的内容和方法 关系模式存取方法选择 确定数据库的存储结构 评价物理结构

1378 6.5 数据库的物理设计 6.5.1 数据库的物理设计的内容和方法 6.5.2 关系模式存取方法选择 6.5.3 确定数据库的存储结构
6.5 数据库的物理设计 数据库的物理设计的内容和方法 关系模式存取方法选择 确定数据库的存储结构 评价物理结构

1379 设计物理数据库结构的准备工作 6.5.1 数据库的物理设计的内容和方法
数据库的物理设计的内容和方法 设计物理数据库结构的准备工作 1. 充分了解应用环境,详细分析要运行的 事务,以获得选择物理数据库设计所需参数 2. 充分了解所用RDBMS的内部特征,特别 是系统提供的存取方法和存储结构

1380 选择物理数据库设计所需参数 数据库的物理设计的内容和方法(续) 数据库查询事务 查询的关系 查询条件所涉及的属性 连接条件所涉及的属性
查询的投影属性

1381 选择物理数据库设计所需参数(续) 数据库的物理设计的内容和方法(续) 数据更新事务 被更新的关系 每个关系上的更新操作条件所涉及的属性
修改操作要改变的属性值 每个事务在各关系上运行的频率和性能要求

1382 关系数据库物理设计的内容 数据库的物理设计的内容和方法(续) 1. 为关系模式选择存取方法(建立存取路径)
2. 设计关系、索引等数据库文件的物理存储结构

1383 6.5 数据库的物理设计 6.5.1 数据库的物理设计的内容和方法 6.5.2 关系模式存取方法选择 6.5.3 确定数据库的存储结构
6.5 数据库的物理设计 数据库的物理设计的内容和方法 关系模式存取方法选择 确定数据库的存储结构 评价物理结构

1384 6.5.2 关系模式存取方法选择 数据库系统是多用户共享的系统,对同一个关系要建立多条存取路径才能满足多用户的多种应用要求。
关系模式存取方法选择 数据库系统是多用户共享的系统,对同一个关系要建立多条存取路径才能满足多用户的多种应用要求。 物理设计的第一个任务就是要确定选择哪些存取方法,即建立哪些存取路径。

1385 关系模式存取方法选择(续) DBMS常用存取方法 索引方法,目前主要是B+树索引方法 聚簇(Cluster)方法 HASH方法

1386 一、索引存取方法的选择 选择索引存取方法的主要内容 根据应用要求确定 对哪些属性列建立索引 对哪些属性列建立组合索引
对哪些索引要设计为唯一索引

1387 索引存取方法的选择(续) 选择索引存取方法的一般规则
如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引) 如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引 如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引

1388 关系上定义的索引数过多会带来较多的额外开销
索引存取方法的选择(续) 关系上定义的索引数过多会带来较多的额外开销 维护索引的开销 查找索引的开销

1389 二、聚簇存取方法的选择 什么是聚簇 为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇 许多关系型DBMS都提供了聚簇功能 聚簇存放与聚簇索引的区别

1390 建立聚簇索引 (复习) 聚簇索引 建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中元组的物理顺序一致。 例: CREATE CLUSTER INDEX Stusname ON Student(Sname); 在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放

1391 建立聚簇索引 (复习) 在一个基本表上最多只能建立一个聚簇索引 聚簇索引的用途:对于某些类型的查询,可以提高查询效率 聚簇索引的适用范围
很少对基表进行增删操作 很少对其中的变长列进行修改操作

1392 聚簇存取方法的选择(续) 聚簇的用途 1. 大大提高按聚簇属性进行查询的效率
例:假设学生关系按所在系建有索引,现在要查询信息系的所有学生名单。 信息系的500名学生分布在500个不同的物理块上时,至少要执行500次I/O操作。 如果将同一系的学生元组集中存放,则每读一个物理块可得到多个满足查询条件的元组,从而显著地减少了访问磁盘的次数。

1393 聚簇存取方法的选择(续) 2. 节省存储空间 聚簇以后,聚簇码相同的元组集中在一起了,因而聚簇码值不必在每个元组中重复存储,只要在一组中存一次就行了

1394 聚簇存取方法的选择(续) 聚簇的局限性 1. 聚簇只能提高某些特定应用的性能 2. 建立与维护聚簇的开销相当大
对已有关系建立聚簇,将导致关系中元组移动其物理存储位置,并使此关系上原有的索引无效,必须重建。 当一个元组的聚簇码改变时,该元组的存储位置也要做相应移动。

1395 聚簇存取方法的选择(续) 聚簇的适用范围 1. 既适用于单个关系独立聚簇,也适用于多个关系组合聚簇
例:假设用户经常要按系别查询学生成绩单,这一查询涉及学生关系和选修关系的连接操作,即需要按学号连接这两个关系,为提高连接操作的效率,可以把具有相同学号值的学生元组和选修元组在物理上聚簇在一起。这就相当于把多个关系按“预连接”的形式存放,从而大大提高连接操作的效率。

1396 聚簇存取方法的选择(续) 2. 当通过聚簇码进行访问或连接是该关系的主要应用,与聚簇码无关的其他访问很少或者是次要的时,可以使用聚簇。
尤其当SQL语句中包含有与聚簇码有关的ORDER BY,GROUP BY,UNION,DISTINCT等子句或短语时,使用聚簇特别有利,可以省去对结果集的排序操作

1397 聚簇存取方法的选择(续) 选择聚簇存取方法 1. 设计候选聚簇 对经常在一起进行连接操作的关系可以建立组合聚簇;
如果一个关系的一组属性经常出现在相等比较条件中,则该单个关系可建立聚簇; 如果一个关系的一个(或一组)属性上的值重复率很高,则此单个关系可建立聚簇。即对应每个聚簇码值的平均元组数不太少。太少了,聚簇的效果不明显。

1398 聚簇存取方法的选择(续) 2. 检查候选聚簇中的关系,取消其中不必要的关系 从独立聚簇中删除经常进行全表扫描的关系;
从独立/组合聚簇中删除更新操作远多于查询操作的关系; 从独立/组合聚簇中删除重复出现的关系 当一个关系同时加入多个聚簇时,必须从这多个聚簇方案(包括不建立聚簇)中选择一个较优的,即在这个聚簇上运行各种事务的总代价最小。

1399 三、HASH存取方法的选择 选择HASH存取方法的规则 当一个关系满足下列两个条件时,可以选择HASH存取方法
该关系的属性主要出现在等值连接条件中或主要出现在相等比较选择条件中 该关系的大小可预知,而且不变; 该关系的大小动态改变,但所选用的DBMS提供了动态HASH存取方法。

1400 6.5 数据库的物理设计 6.5.1 数据库的物理设计的内容和方法 6.5.2 关系模式存取方法选择 6.5.3 确定数据库的存储结构
6.5 数据库的物理设计 数据库的物理设计的内容和方法 关系模式存取方法选择 确定数据库的存储结构 评价物理结构

1401 6.5.3 确定数据库的存储结构 确定数据库物理结构的内容 1. 确定数据的存放位置和存储结构 索引 聚簇 日志 备份 2. 确定系统配置
确定数据库的存储结构 确定数据库物理结构的内容 1. 确定数据的存放位置和存储结构 关系 索引 聚簇 日志 备份 2. 确定系统配置

1402 1. 确定数据的存放位置 影响数据存放位置和存储结构的因素 硬件环境 应用需求 存取时间 存储空间利用率 维护代价
这三个方面常常是相互矛盾的 例:消除一切冗余数据虽能够节约存储空间和减少维护代价,但往往会导致检索代价的增加 必须进行权衡,选择一个折中方案。

1403 确定数据的存放位置(续) 基本原则 根据应用情况将 易变部分与稳定部分 存取频率较高部分与存取频率较低部分 分开存放,以提高系统性能

1404 确定数据的存放位置(续) 例: 数据库数据备份、日志文件备份等由于只在故障恢复时才使用,而且数据量很大,可以考虑存放在磁带上。
如果计算机有多个磁盘,可以考虑将表和 索引分别放在不同的磁盘上,在查询时, 由于两个磁盘驱动器分别在工作,因而可 以保证物理读写速度比较快。

1405 确定数据的存放位置(续) 例(续): 可以将比较大的表分别放在两个磁盘上, 以加快存取速度,这在多用户环境下特别 有效。
可以将日志文件与数据库对象(表、索引 等)放在不同的磁盘以改进系统的性能。

1406 2. 确定系统配置 DBMS产品一般都提供了一些存储分配参数 同时打开的数据库对象数 使用的缓冲区长度、个数 时间片大小 数据库的大小
同时使用数据库的用户数 同时打开的数据库对象数 使用的缓冲区长度、个数 时间片大小 数据库的大小 装填因子 锁的数目 等等

1407 6.5 数据库的物理设计 6.5.1 数据库的物理设计的内容和方法 6.5.2 关系模式存取方法选择 6.5.3 确定数据库的存储结构
6.5 数据库的物理设计 数据库的物理设计的内容和方法 关系模式存取方法选择 确定数据库的存储结构 评价物理结构

1408 评价物理结构 评价内容 对数据库物理设计过程中产生的多种方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构

1409 6.5.4 评价物理结构 评价方法 定量估算各种方案 存取时间 维护代价 对估算结果进行权衡、比较,选择出一个较优的合理的物理结构
评价物理结构 评价方法 定量估算各种方案 存储空间 存取时间 维护代价 对估算结果进行权衡、比较,选择出一个较优的合理的物理结构 如果该结构不符合用户需求,则需要修改设计

1410 第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计
第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计 6.6 数据库实施 6.7 数据库运行与维护 6.8 小结

1411 6.6 数据库的实施 数据库实施的工作内容 用DDL定义数据库结构 组织数据入库 编制与调试应用程序 数据库试运行

1412 数据库实施 定义数据库结构 数据 装载 数据库试运行 数据库物 理设计 数据库运 行和维护 物理 模型 编制与调试应用程序 数据库 系统

1413 一、定义数据库结构 确定了数据库的逻辑结构与物理结构后,就可以用所选用的DBMS提供的数据定义语言(DDL)来严格描述数据库结构。

1414 定义数据库结构(续) 例,对于前面的例子,可以用SQL语句如下定义表结构: CREATE TABLE 学生 (学号 CHAR(8),
 …………… ); CREATE TABLE 课程 ( ……………

1415 定义数据库结构(续) 接下来是在这些基本表上定义视图: CREATE VIEW .... ( …………… ); ……………
  …………… ); …………… 如果需要使用聚簇,在建基本表之前,应先用CREATE CLUSTER语句定义聚族。

1416 二、数据装载 数据库结构建立好后,就可以向数据库中装载数据了。组织数据入库是数据库实施阶段最主要的工作。 数据装载方法 人工方法
计算机辅助数据入库

1417 数据装载(续) 人工方法:适用于小型系统 步骤 1) 筛选数据。需要装入数据库中的数据通常都分散在各个部门的数据文件或原始凭证中,所以首先必须把需要入库的数据筛选出来。 2) 转换数据格式。筛选出来的需要入库的数据,其格式往往不符合数据库要求,还需要进行转换。这种转换有时可能很复杂。 3) 输入数据。将转换好的数据输入计算机中。 4) 校验数据。检查输入的数据是否有误。

1418 数据装载(续) 计算机辅助数据入库:适用于中大型系统 步骤
1) 筛选数据 2) 输入数据。由录入员将原始数据直接输入计算机中。数据输入子系统应提供输入界面。 3) 校验数据。数据输入子系统采用多种检验技术检查输入数据的正确性。

1419 数据装载(续) 5) 综合数据。数据输入子系统对转换好的数据根据系统的要求进一步综合成最终数据。
4) 转换数据。数据输入子系统根据数据库系统的要求,从录入的数据中抽取有用成分,对其进行分类,然后转换数据格式。抽取、分类和转换数据是数据输入子系统的主要工作,也是数据输入子系统的复杂性所在。 5) 综合数据。数据输入子系统对转换好的数据根据系统的要求进一步综合成最终数据。

1420 数据装载(续) 如果数据库是在老的文件系统或数据库系统的基础上设计的,则数据输入子系统只需要完成转换数据、综合数据两项工作,直接将老系统中的数据转换成新系统中需要的数据格式。 为了保证数据能够及时入库,应在数据库物理设计的同时编制数据输入子系统。

1421 三、编制与调试应用程序 数据库应用程序的设计应该与数据设计并行进行。
在数据库实施阶段,当数据库结构建立好后,就可以开始编制与调试数据库的应用程序。调试应用程序时由于数据入库尚未完成,可先使用模拟数据。

1422 四、数据库试运行 应用程序调试完成,并且已有一小部分数据入库后,就可以开始数据库的试运行。 数据库试运行也称为联合调试,其主要工作包括:
1)功能测试:实际运行应用程序,执行对数据库的各种操作,测试应用程序的各种功能。 2)性能测试:测量系统的性能指标,分析是否符合设计目标。

1423 数据库试运行(续) 数据库性能指标的测量 数据库物理设计阶段在评价数据库结构估算时间、空间指标时,作了许多简化和假设,忽略了许多次要因素,因此结果必然很粗糙。 数据库试运行则是要实际测量系统的各种性能指标(不仅是时间、空间指标),如果结果不符合设计目标,则需要返回物理设计阶段,调整物理结构,修改参数;有时甚至需要返回逻辑设计阶段,调整逻辑结构。

1424 数据库试运行(续) 数据的分期入库 重新设计物理结构甚至逻辑结构,会导致数据重新入库。
由于数据入库工作量实在太大,所以可以采用分期输入数据的方法 先输入小批量数据供先期联合调试使用 待试运行基本合格后再输入大批量数据 逐步增加数据量,逐步完成运行评价

1425 数据库试运行(续) 数据库的转储和恢复 在数据库试运行阶段,系统还不稳定,硬、软件故障随时都可能发生
系统的操作人员对新系统还不熟悉,误操作也不可避免 因此必须做好数据库的转储和恢复工作,尽量减少对数据库的破坏。

1426 第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计
第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计 6.6 数据库实施 6.7 数据库运行与维护 6.8 小结

1427 6.7 数据库运行与维护 数据库试运行结果符合设计目标后,数据库就可以真正投入运行了。 数据库投入运行标着开发任务的基本完成和维护工作的开始
6.7 数据库运行与维护 数据库试运行结果符合设计目标后,数据库就可以真正投入运行了。 数据库投入运行标着开发任务的基本完成和维护工作的开始 对数据库设计进行评价、调整、修改等维护工作是一个长期的任务,也是设计工作的继续和提高。 应用环境在不断变化 数据库运行过程中物理存储会不断变化

1428 数据库运行与维护(续) 在数据库运行阶段,对数据库经常性的维护工作主要是由DBA完成的,包括: ⒈数据库的转储和恢复
转储和恢复是系统正式运行后最重要的维护工作之一。 DBA要针对不同的应用要求制定不同的转储计划,定期对数据库和日志文件进行备份。 一旦发生介质故障,即利用数据库备份及日志文件备份,尽快将数据库恢复到某种一致性状态。

1429 数据库运行与维护(续) ⒉数据库的安全性、完整性控制 DBA必须根据用户的实际需要授予不同的操作权限

1430 数据库运行与维护(续) ⒊数据库性能的监督、分析和改进
在数据库运行过程中, DBA必须监督系统运行,对监测数据进行分析,找出改进系统性能的方法。 利用监测工具获取系统运行过程中一系列性能参数的值 通过仔细分析这些数据,判断当前系统是否处于最佳运行状态 如果不是,则需要通过调整某些参数来进一步改进数据库性能

1431 数据库运行与维护(续) ⒋数据库的重组织和重构造 1)数据库的重组织 为什么要重组织数据库
数据库运行一段时间后,由于记录的不断增、删、改,会使数据库的物理存储变坏,从而降低数据库存储空间的利用率和数据的存取效率,使数据库的性能下降。

1432 数据库运行与维护(续) 重组织的形式 全部重组织 部分重组织 只对频繁增、删的表进行重组织 重组织的目标 提高系统性能

1433 数据库运行与维护(续) 重组织的工作 按原设计要求 数据库的重组织不会改变原设计的数据逻辑结构和物理结构 重新安排存储位置 回收垃圾
减少指针链 数据库的重组织不会改变原设计的数据逻辑结构和物理结构

1434 数据库运行与维护(续) 2)数据库的重构造 为什么要进行数据库的重构造
数据库应用环境发生变化,会导致实体及实体间的联系也发生相应的变化,使原有的数据库设计不能很好地满足新的需求 增加新的应用或新的实体 取消某些已有应用 改变某些已有应用

1435 数据库运行与维护(续) 数据库重构造的主要工作 根据新环境调整数据库的模式和内模式 增加新的数据项 改变数据项的类型 改变数据库的容量
增加或删除索引 修改完整性约束条件

1436 数据库运行与维护(续) 重构造数据库的程度是有限的
若应用变化太大,已无法通过重构数据库来满足新的需求,或重构数据库的代价太大,则表明现有数据库应用系统的生命周期已经结束,应该重新设计新的数据库系统,开始新数据库应用系统的生命周期了。

1437 第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计
第六章 数据库设计 6.1 数据库设计概述 6.2 需求分析 6.3 概念结构设计 6.4 逻辑结构设计 6.5 数据库的物理设计 6.6 数据库实施 6.7 数据库运行与维护 6.8 小结

1438 6.8 小结 数据库的设计过程 需求分析 概念结构设计 逻辑结构设计 物理设计 实施 运行维护 设计过程中往往还会有许多反复。

1439 小结(续) 数据库各级模式的形成 数据库的各级模式是在设计过程中逐步形成的 需求分析阶段综合各个用户的应用需求(现实世界的需求)。
概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述。

1440 小结(续) 在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。 在物理设计阶段根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。

1441 复习题 1、ER图一般用于描述()阶段的工作成果。 A、需求分析 B、概念结构设计 C、逻辑结构设计 D、物理结构设计

1442 2、下列模型中,适宜作为设计人员与用户间交流工具的是()
A、概念模型 B、逻辑模型 C、物理模型 D、关系模型

1443 ER图的三要素是() A、实体、属性、实体集 B、实体、键、联系 C、实体、属性、联系 D、实体、域、候选键

1444 设有两个实体集A和B,A中实体可能与B中零个或多个实体相联系,而B中实体至多和A中一个实体有联系,则称A和B具有()联系
C、多对多 D、多对一

1445 先从中层数据流图出发设计系统的局部ER图,再对各局部ER图进行集成和优化,这种方法属于概念结构设计中的()方法
A、自顶向下 B、自底向上 C、自内向外 D、混合策略

1446 下列对ER图设计的说法错误的是() A、设计局部ER图中,能作为属性处理的客观事物应尽量作为属性处理 B、局部ER图中的属性均应为原子属性,即不能再细分为子属性的组合 C、对局部ER图集成时既可以一次实现全部集成,也可以两两集成,逐步进行 D、集成后所得的ER图中可能存在冗余数据和冗余联系,应予以全部清除。

1447 下列属于逻辑结构设计阶段任务的是() A、生成数据字典 B、集成局部ER图 C、将ER图转换为一组关系模式 D、确定数据存取方法

1448 若在两个局部ER图中,实体“商品”的编号一个被定义为数值型,另一个被定义为字符型,则称之为()
A、属性冲突 B、命名冲突 C、联系冲突 D、结构冲突

1449 在数据库的概念设计和逻辑设计之间起桥梁作用的是()
A、数据结构图 B、功能模块图 C、实体联系图 D、数据流图

1450 将一个一对多联系型转换为一个独立关系模式时,应取()为关键字。
A、一端实体型的关键属性 B、多端实体型的关键属性 C、两个实体型的关键属性的组合 D、联系型的全体属性

1451 将一个M对N(M>N)的联系型转换为关系模式时,应()
A、转换为一个独立的关系模式 B、与M端的实体型所对应的关系模式合并 C、与N端的实体型所对应的关系模式合并 D、以上都可以

1452 在从ER图到关系模式的转化过程中,下列说法错误的是()
A、一个一对一的联系可以转换为一个独立的关系模式 B、一个涉及到3个以上实体的多元联系也可以转换为一个独立的关系模式 C、对关系模型优化时有些模式可能要进一步分解,有些模式可能要合并 D、关系模式的规范化程度越高,查询的效率就越高。

1453 设在一个ER模型中有6个不同的实体集和9个不同的二元联系,其中包括3个一对一联系、3个一对多联系和3个多对多联系,则将此ER模型转换成关系模型时,至少得到()个关系模式。
A、6 B、9 C、12 D、15

1454 对数据库的物理设计优劣评价的重点是() A、时空效率 B、动态和静态性能 C、用户界面的友好性 D、成本和效益

1455 数据库的物理结构设计的目的是() A、找到一个有效、可实现的数据库存储结构 B、导出特定的DBMS可以处理的数据库模式和外模式 C、产生反映企业组织信息需求的数据库概念结构 D、收集支持系统目标的基础数据及其处理方法

1456 不属于数据库物理结构设计阶段任务的() A、确定选用的DBMS B、确定数据的存放位置 C、确定数据的存取方法 D、初步确定系统的配置

1457 画出ER图 设有一商业企业的局部应用,包含3个实体:“顾客”、“商品”和“厂家”,且有如下事实:顾客可以根据自己的意愿选择要购买的商品;每种商品可以有多个厂家供应。若顾客的属性包括顾客姓名、电话号码,商品的属性包括代码、品名、单价,厂家的属性包括代码、名称、地址。试画出ER图。

1458 设某百货公司下设若干连锁店,每家连锁店有若干职工,每个职工只能服务于一家连锁店,每家连锁店经营若干商品,各连锁店经营的商品不完全相同。试自行设计属性,画出该百货公司管理数据库的ER图,并将ER图转换为关系模型。

1459 设有电影放映管理系统的一个局部ER图,试将其转化为关系模型,并根据语义确定各关系模式的关键字。
影院代码 发行代号 起始日期 结束日期 电影 放映 影院 n m 所在城市 电影名称 票房总额 摄制单位

1460 作业 设某商业集团数据库中有3个实体集。一是“公司”实体集,属性有公司编号、公司名、地址等;二是“仓库”实体集,属性有仓库编号、仓库名、地址等;三是“职工”实体集,属性有职工编号、姓名、性别等。 公司与仓库间存在“隶属”联系,每个公司管辖若干仓库,每个仓库只能属于一个公司管辖;仓库与职工之间存在“聘用”联系,每个仓库可聘用多个职工,每个职工只能在一个仓库工作,仓库聘用职工有聘期和工资。 (1)试画出ER图,并在图上注明属性、联系的类型 (2)将ER图转换成关系模式集,并指出每个关系模式的主键和外键。

1461 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第七章 数据库恢复技术

1462 第三篇 系统篇 数据库系统中的数据是由DBMS统一管理和控制的,为了适应数据共享的环境,DBMS必须提供数据保护能力,以保证数据库中数据的安全可靠和正确有效。 数据保护 安全性 完整性 并发控制 数据库恢复

1463 第三篇 系统篇 第七章 数据库恢复技术 第八章 并发控制 第九章 数据库安全性 第十章 数据库完整性

1464 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1465 7.1 事务的基本概念 一、什么是事务 二、如何定义事务 三、事务的特性

1466 一、什么是事务 事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
事务和程序是两个概念 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序 一个应用程序通常包含多个事务 事务是恢复和并发控制的基本单位

1467 二、如何定义事务 BEGIN TRANSACTION BEGIN TRANSACTION 显式定义方式 隐式方式
SQL 语句 SQL 语句1 SQL 语句 SQL 语句2 。。。。。 。。。。。 COMMIT ROLLBACK 隐式方式 当用户没有显式地定义事务时, DBMS按缺省规定自动划分事务

1468 事务结束 COMMIT 事务正常结束 提交事务的所有操作(读+更新) 事务中所有对数据库的更新永久生效 ROLLBACK 事务异常终止
事务运行的过程中发生了故障,不能继续执行 回滚事务的所有更新操作 事务滚回到开始时的状态

1469 三、事务的特性(ACID特性) 事务的ACID特性: 原子性(Atomicity) 一致性(Consistency)
隔离性(Isolation) 持续性(Durability )

1470 1. 原子性 事务是数据库的逻辑工作单位 事务中包括的诸操作要么都做,要么都不做

1471 2. 一致性 事务执行的结果必须是使数据库从一个 一致性状态变到另一个一致性状态 一致性状态: 数据库中只包含成功事务提交的结果
不一致状态: 数据库中包含失败事务的结果

1472 银行转帐:从帐号A中取出一万元,存入帐号B。 定义一个事务,该事务包括两个操作
一致性与原子性 银行转帐:从帐号A中取出一万元,存入帐号B。 定义一个事务,该事务包括两个操作 这两个操作要么全做,要么全不做 全做或者全不做,数据库都处于一致性状态。 如果只做一个操作,数据库就处于不一致性状态。 B=B+1    A=A-1 B A

1473 3. 隔离性 对并发执行而言 一个事务的执行不能被其他事务干扰 一个事务内部的操作及使用的数据对其他并发事务是隔离的
并发执行的各个事务之间不能互相干扰

1474 读A=16 A←A-3 写回A=13 ① 读A=16 ③ A←A-1 写回A=15 T2 T1 T1的修改被T2覆盖了!

1475 4. 持续性 持续性也称永久性(Permanence) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
接下来的其他操作或故障不应该对其执行结果有任何影响。

1476 事务的特性 保证事务ACID特性是事务处理的任务 破坏事务ACID特性的因素 多个事务并行运行时,不同事务的操作交叉执行
事务在运行过程中被强行停止

1477 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1478 7.2 数据库恢复概述 故障是不可避免的 故障的影响 计算机硬件故障 系统软件和应用软件的错误 操作员的失误 恶意的破坏 运行事务非正常中断
7.2 数据库恢复概述 故障是不可避免的 计算机硬件故障 系统软件和应用软件的错误 操作员的失误 恶意的破坏 故障的影响 运行事务非正常中断 破坏数据库

1479 数据库恢复概述(续) 数据库管理系统对故障的对策 DBMS提供恢复子系统
保证故障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态 保证事务ACID 恢复技术是衡量系统优劣的重要指标

1480 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1481 一、事务故障 什么是事务故障 事务故障的常见原因 某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了 输入数据有误 运算溢出
违反了某些完整性限制 某些应用程序出错 并行事务发生死锁 。。。。

1482 事务故障的恢复 发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘 事务故障的恢复:撤消事务(UNDO)
强行回滚(ROLLBACK)该事务 清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样

1483 二、系统故障 什么是系统故障 整个系统的正常运行突然被破坏 所有正在运行的事务都非正常终止 内存中数据库缓冲区的信息全部丢失
外部存储设备上的数据未受影响

1484 系统故障的常见原因 操作系统或DBMS代码错误 操作员操作失误 特定类型的硬件错误(如CPU故障) 突然停电

1485 系统故障的恢复 清除尚未完成的事务对数据库的所有修改 系统重新启动时,恢复程序要强行撤消(UNDO)所有未完成事务
将缓冲区中已完成事务提交的结果写入数据库 系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务

1486 7.3 故障的种类 事务故障 系统故障 介质故障

1487 三、介质故障 硬件故障使存储在外存中的数据部分丢 失或全部丢失 介质故障比前两类故障的可能性小得多, 但破坏性大得多

1488 介质故障的常见原因 硬件故障 磁盘损坏 磁头碰撞 操作系统的某种潜在错误 瞬时强磁场干扰

1489 介质故障的恢复 装入数据库发生介质故障前某个时刻的 数据副本 重做自此时始的所有成功事务,将这些 事务已提交的结果重新记入数据库

1490 恢复操作的基本原理 恢复操作的基本原理:冗余 恢复的实现技术:复杂
利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据 恢复的实现技术:复杂 一个大型数据库产品,恢复子系统的代码要占全部代码的10%以上

1491 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1492 7.4 恢复的实现技术 恢复机制涉及的关键问题 1. 如何建立冗余数据 数据转储(backup) 登录日志文件(logging)
7.4 恢复的实现技术 恢复机制涉及的关键问题 1. 如何建立冗余数据 数据转储(backup) 登录日志文件(logging) 2. 如何利用这些冗余数据实施数据库恢复

1493 数据转储 一、什么是转储 二、转储的用途 三、转储方法

1494 一、什么是转储 转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。 这些备用的数据文本称为后备副本或后援副本。

1495 转储 正常运行 ─┼───────┼───────────── 恢复 ─┼───────┴------------→ Ta Tb Tf
故障发生点 转储 运行事务 ↓ 正常运行 ─┼───────┼───────────── Ta    Tb Tf 重装后备副本 重新运行事务 恢复 ─┼───────┴------------→

1496 三、转储方法 1.静态转储与动态转储 2.海量转储与增量转储 3.转储方法小结

1497 转储期间不允许对数据库的任何存取、修改活动
1.静态转储 在系统中无运行事务时进行转储 转储开始时数据库处于一致性状态 转储期间不允许对数据库的任何存取、修改活动 优点:实现简单 缺点:降低了数据库的可用性 转储必须等用户事务结束 新的事务必须等转储结束

1498 利用静态转储副本进行恢复 静态转储 运行事务 ↓ 正常运行 ─┼───────┼───────────── 恢复 ─┼───────┥
故障发生点 静态转储 运行事务 ↓ 正常运行 ─┼───────┼───────────── Ta    Tb Tf 重装后备副本 恢复 ─┼───────┥

1499 动态转储 转储操作与用户事务并发进行 转储期间允许对数据库进行存取或修改 优点 不用等待正在运行的用户事务结束 不会影响新事务的运行
动态转储的缺点 不能保证副本中的数据正确有效

1500 动态转储 利用动态转储得到的副本进行故障恢复 需要把动态转储期间各事务对数据库 的修改活动登记下来,建立日志文件
后备副本加上日志文件才能把数据库 恢复到某一时刻的正确状态

1501 利用动态转储副本进行恢复 动态转储 运行事务 ↓ 正常运行 ─┼───────┼───────────── 重装后备副本 利用日志文件恢复
运行事务 故障发生点 动态转储 运行事务 ↓ 正常运行 ─┼───────┼───────────── Ta    Tb Tf 重装后备副本 利用日志文件恢复 恢复 ━━━━━━╋ ━ ━ ━ ┥

1502 利用动态转储副本进行恢复 动态转储 运行事务 故障发生点 正常运行 ─┼───────┼─────────────
Ta    Tb Tf 动态转储 运行事务 故障发生点 正常运行 ─┼───────┼───────────── 登记日志文件 登记新日志文件 ─────────┼───────────── 转储日志文件 重装后备副本,然后利用转储的日志文件恢复 恢复到一 ━━━━━━┥ 致性状态

1503 2.海量转储与增量转储 海量转储: 每次转储全部数据库 增量转储: 只转储上次转储后更新过的数据 海量转储与增量转储比较
从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便 但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效

1504 3.转储方法小结 转储方法分类 转储状态 动态转储 静态转储 转储方式 海量转储 动态海量转储 静态海量转储 增量转储 动态增量转储
转储状态 动态转储 静态转储 转储方式 海量转储 动态海量转储 静态海量转储 增量转储 动态增量转储 静态增量转储

1505 转储策略 应定期进行数据转储,制作后备副本。 但转储又是十分耗费时间和资源的,不能频繁进行。
DBA应该根据数据库使用情况确定适当的转储周期和转储方法。 例: 每天晚上进行动态增量转储 每周进行一次动态海量转储 每月进行一次静态海量转储

1506 7.4 恢复的实现技术 数据转储 登记日志文件

1507 登记日志文件 一、日志文件的内容 二、日志文件的用途 三、登记日志文件的原则

1508 一、日志文件的内容 1. 什么是日志文件 2. 日志文件的格式 日志文件(log)是用来记录事务对数据库的 更新操作的文件
以记录为单位的日志文件 以数据块为单位的日志文件

1509 日志文件的内容(续) 3. 日志文件内容 日志文件中的一个日志记录 (log record)
各个事务的开始标记(BEGIN TRANSACTION) 各个事务的结束标记(COMMIT或ROLLBACK) 各个事务的所有更新操作 与事务有关的内部更新操作 日志文件中的一个日志记录 (log record)

1510 4. 基于记录的日志文件 每条日志记录的内容 事务标识 操作类型(插入、删除或修改) 操作对象(记录ID、Block NO.)
更新前数据的旧值(对插入操作而言,此项为空值) 更新后数据的新值(对删除操作而言, 此项为空值)

1511 5. 基于数据块的日志文件 每条日志记录的内容 事务标识(标明是那个事务) 更新前数据所在的整个数据块的值(对插入 操作而言,此项为空值)
操作对象(记录ID、Block NO.) 更新前数据所在的整个数据块的值(对插入 操作而言,此项为空值) 更新后整个数据块的值(对删除操作而言, 此项为空值)

1512 二、日志文件的用途 1.用途 进行事务故障恢复 进行系统故障恢复 协助后备副本进行介质故障恢复

1513 日志文件的用途(续) 2.与静态转储后备副本配合进行介质故障恢复 静态转储的数据已是一致性的数据
如果静态转储完成后,仍能定期转储日志文件,则在出现介质故障重装数据副本后,可以利用这些日志文件副本对已完成的事务进行重做处理 这样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态

1514 日志文件的用途(续) 正常运行 ─┼──────┼──────────┼── Ta Tb Tf └───────────┴──
故障发生点  静态转储 运行事务 ↓ 正常运行 ─┼──────┼──────────┼── Ta    Tb Tf 登记日志文件 └───────────┴── 重装后备副本 利用日志文件恢复事务 继续运行 介质故障恢复 ─────────┴-----─-------┴────── └──────

1515 日志文件的用途(续) 3.介质故障恢复:LOG FILE + 动态转储后备副本 动态转储数据库:同时转储同一时点的日志文件
后备副本与该日志文件结合起来才能将数据库恢复到一致性状态。 利用这些日志文件副本进一步恢复事务,避免重新运行事务程序。

1516 三、登记日志文件的原则 为保证数据库是可恢复的,登记日志文件时必须遵循两条原则 登记的次序严格按并行事务执行的时间次序
必须先写日志文件,后写数据库 写日志文件操作:把表示这个修改的日志记录 写到日志文件 写数据库操作:把对数据的修改写到数据库中

1517 登记日志文件的原则(续) 为什么要先写日志文件 写数据库和写日志文件是两个不同的操作 在这两个操作之间可能发生故障
如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了 如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性

1518 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1519 7.5 恢复策略 事务故障的恢复 系统故障的恢复 介质故障的恢复

1520 7.5.1 事务故障的恢复 事务故障:事务在运行至正常终止点前被中止 恢复方法
事务故障的恢复 事务故障:事务在运行至正常终止点前被中止 恢复方法 由恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改 事务故障的恢复由系统自动完成,不需要用户干预

1521 事务故障的恢复步骤 1. 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
2. 对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”(Befor Image, BI)写入数据库。 插入操作, “更新前的值”为空,则相当于做删除操作 删除操作,“更新后的值”为空,则相当于做插入操作 若是修改操作,则用BI 代替 AI(After Image)

1522 事务故障的恢复步骤 3. 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
4. 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。

1523 7.5.2 系统故障的恢复 系统故障造成数据库不一致状态的原因 一些未完成事务对数据库的更新已写入数据库
系统故障的恢复 系统故障造成数据库不一致状态的原因 一些未完成事务对数据库的更新已写入数据库 一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库 恢复方法 1. Undo 故障发生时未完成的事务 2. Redo 已完成的事务 系统故障的恢复由系统在重新启动时自动完成,不需要用户干预

1524 系统故障的恢复步骤 1. 正向扫描日志文件(即从头扫描日志文件) Redo队列: 在故障发生前已经提交的事务 T1, T3, T8…..
1. 正向扫描日志文件(即从头扫描日志文件) Redo队列: 在故障发生前已经提交的事务 T1, T3, T8….. Undo队列:故障发生时尚未完成的事务 T2, T4, T5, T6, T7, T9 …...

1525 系统故障的恢复步骤 2. 对Undo队列事务进行UNDO处理 反向扫描日志文件,对每个UNDO事务的更 新操作执行逆操作
T2, T4, T5, T6, T7, T9 …… 3. 对Redo队列事务进行REDO处理 正向扫描日志文件,对每个REDO事务重新 执行登记的操作 T1, T3, T8…..

1526 介质故障的恢复 1. 重装数据库, 使数据库恢复到一致性状态 2. 重做已完成的事务

1527 7.5.3 介质故障的恢复 恢复步骤 1. 装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。
介质故障的恢复 恢复步骤 1. 装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。 对于静态转储的数据库副本,装入后数据库即处于一致性状态 对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障相同的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。

1528 利用静态转储副本将数据库恢复到一致性状态
故障发生点 静态转储 运行事务 ↓ 正常运行 ─┼───────┼───────────── Ta    Tb Tf 登记日志文件 └───────────── 重装后备副本 恢复 ━━━━━━┥

1529 利用动态转储副本将数据库恢复到一致性状态
Ta    Tb Tf 动态转储 运行事务 故障发生点 正常运行 ─┼───────┼───────────── 登记日志文件 登记新日志文件 ─────────┼───────────── 转储日志文件 重装后备副本,然后利用转储的日志文件恢复 恢复到一 ━━━━━━┥ 致性状态

1530 介质故障的恢复(续) 2. 装入有关的日志文件副本,重做已完成的事务。
首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。 然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。

1531 介质故障的恢复(续) 介质故障的恢复需要DBA介入 DBA的工作 重装最近转储的数据库副本和有关的各日志文件副本 执行系统提供的恢复命令
具体的恢复操作仍由DBMS完成

1532 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1533 7.6 具有检查点的恢复技术 一、问题的提出 二、检查点技术 三、利用检查点的恢复策略

1534 一、问题的提出 两个问题 搜索整个日志将耗费大量的时间 REDO处理:重新执行,浪费了大量时间

1535 解决方案 具有检查点(checkpoint)的恢复技术 在日志文件中增加检查点记录(checkpoint) 增加重新开始文件
恢复子系统在登录日志文件期间动态地维护日志

1536

1537 二、检查点技术 检查点记录的内容 重新开始文件的内容 1. 建立检查点时刻所有正在执行的事务清单 2. 这些事务最近一个日志记录的地址
记录各个检查点记录在日志文件中的地址

1538

1539 1. 将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上。 2. 在日志文件中写入一个检查点记录。
在检查点 维护日志文件 1. 将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上。 2. 在日志文件中写入一个检查点记录。 3. 将当前数据缓冲区的所有数据记录写入磁盘的数据库中。 4. 把检查点记录在日志文件中的地址写入一个重新开始文件。

1540 按照某种规则,如日志文件已写满一半建立一个检查点
建立检查点 定期 按照预定的一个时间间隔 不定期 按照某种规则,如日志文件已写满一半建立一个检查点

1541 三、利用检查点的恢复策略 当事务T在一个检查点之前提交 T对数据库所做的修改已写入数据库
在进行恢复处理时,没有必要对事务T执 行REDO操作

1542 利用检查点的恢复策略(续) Tc (检查点) Tf(系统故障) REDO UNDO T2 T3 T4 T5 不要REDO T1

1543 利用检查点的恢复步骤 1. 从重新开始文件中找到最后一个检查点记录在日志文件中的地址 2 由该地址在日志文件中找到最后一个检查点记录

1544 利用检查点的恢复策略(续) 2.由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST 建立两个事务队列
UNDO-LIST REDO-LIST 把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。

1545 利用检查点的恢复策略(续) 3.从检查点开始正向扫描日志文件,直到日志文件结束 如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列
如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列 4.对UNDO-LIST中的每个事务执行UNDO操作, 对REDO-LIST中的每个事务执行REDO操作

1546 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1547 7.7 数据库镜像 介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性 介质故障恢复比较费时
7.7 数据库镜像 介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性 介质故障恢复比较费时 为预防介质故障,DBA必须周期性地转储数据库 提高数据库可用性的解决方案 数据库镜像(Mirror)

1548 数据库镜像(续) 数据库镜像 DBMS自动把整个数据库或其中的关键数据 复制到另一个磁盘上
DBMS自动保证镜像数据与主数据的一致性 (图7.5a)

1549 数据库镜像的用途 出现介质故障时 DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本(图7.5b) 没有出现故障时
可用于并发操作(图7.5a) 一个用户对数据加排他锁修改数据 其他用户可以读镜像数据库上的数据

1550 数据库镜像(续)

1551 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1552 7.8 Oracle的恢复技术 1. 转储 2. 登记日志文件

1553 7.8 Oracle的恢复技术:转储 转储后备副本的方法 文件拷贝 EXPORT实用程序 用SQL命令SPOOL 自己编程实现

1554 重装后备副本的方法 文件拷贝 IMPORT实用程序 SQL*LOADER实用程序 自己编程实现

1555 2. 登记日志文件 ORACLE V.5:以数据块为单位 ORACLE V.7:REDO日志 + 回滚段

1556 ORACLE V.5的恢复技术 日志文件以数据块为单位,恢复操作不是基于操作,而是基于数据块
将更新前的旧值与更新后的新值分别放在两个不同的日志文件中 记录数据库更新前旧值的日志文件称为数据库前像文件(Before Image,简称BI文件) 记录数据库更新后新值的日志文件称为数据库的后像文件(After Image,简称AI文件)

1557 OracleV.5 的恢复技术(续) BI文件是必须的,AI文件是任选的 没有AI文件:只能执行UNDO处理,不能执行REDO处理

1558 Oracle v.7的恢复技术(续) REDO日志文件:更新数据的前像和后像
回滚段(Rollback Segment):记录尚未完成的 更新事务的更新数据的前像 事务故障恢复 根据回滚段中的数据,撤消该事务的操作

1559 Oracle V.7 的恢复技术(续) 系统故障恢复 优点:只需要扫描日志文件一遍
首先扫描REDO日志文件,重做所有操作, 并对更新操作建立回滚段数据。当遇到提交 记录,取消相应回滚段中数据。 再根据回滚段中的数据,撤消未正常提交的 事务的操作(图7.6) 优点:只需要扫描日志文件一遍

1560 Oracle的恢复技术(续) 图7.6 Oracle的恢复过程 (a) 发生故障,事务非正常终止 Ta Tf T1 T3 T2 T44 时间

1561 Oracle的恢复技术(续) (b) 利用REDO文件,重做所有操作 时间 T1 T3 T2 T44

1562 Oracle的恢复技术(续) (c) 利用回滚段撤消未提交的事务数据库恢复到一致性状态 时间 T1 T2

1563 Oracle的恢复技术(续) ORACLE V.7的恢复技术(续) 介质故障恢复 重装数据库后备副本文件,恢复到转储时 的数据库一致性状态
利用在此之后转储的REDO日志文件副本 将数据库恢复到最近点(类似于系统故障 恢复)

1564 第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略
第七章 数据库恢复技术 7.1 事务的基本概念 7.2 数据库恢复概述 7.3 故障的种类 7.4 恢复的实现技术 7.5 恢复策略 7.6 具有检查点的恢复技术 7.7 数据库镜像 7.8 Oracle的恢复技术 7.9 小结

1565 7.9 小结 如果数据库只包含成功事务提交的结果,就说数据库处于一致性状态。保证数据一致性是对数据库的最基本的要求。
7.9 小结 如果数据库只包含成功事务提交的结果,就说数据库处于一致性状态。保证数据一致性是对数据库的最基本的要求。 事务是数据库的逻辑工作单位 DBMS保证系统中一切事务的原子性、一致性、隔离性和持续性

1566 小结(续) DBMS必须对事务故障、系统故障和介质故障进行恢复 恢复中最经常使用的技术:数据库转储和登记日志文件
恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库

1567 小结(续) 常用恢复技术 事务故障的恢复 系统故障的恢复 介质故障的恢复 UNDO UNDO + REDO

1568 小结(续) 提高恢复效率的技术 检查点技术 可以提高系统故障的恢复效率 可以在一定程度上提高利用动态转储备份进行介质故障恢复的效率 镜像技术
镜像技术可以改善介质故障的恢复效率

1569

1570

1571 下课了。。。 休息一会儿。。。

1572 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第八章 并发控制

1573 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1574 并发控制概述 多事务执行方式 (1)事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的特点

1575 并发控制(续) (2)交叉并发方式(interleaved concurrency) 事务的并行执行是这些并行事务的并行操作轮流交叉运行
是单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率

1576 并发控制(续) (3)同时并发方式(simultaneous concurrency)
多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行 最理想的并发方式,但受制于硬件环境 更复杂的并发方式机制

1577 事务并发执行带来的问题 可能会存取和存储不正确的数据,破坏事务的隔离性和数据库的一致性 DBMS必须提供并发控制机制

1578 8.1 并发控制概述 并发控制机制的任务 对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性

1579 数据不一致实例:飞机订票系统 T1的修改被T2覆盖了! 读A=16 A←A-3 写回A=13 ① 读A=16 ② ③ A←A-1
读A=16 A←A-3 写回A=13 ① 读A=16 ③ A←A-1 写回A=15 事务 T2 事务 T1 T1的修改被T2覆盖了!

1580 并发操作带来的数据不一致性 丢失修改(lost update) 不可重复读(non-repeatable read) 读“脏”数据(dirty read)

1581 1. 丢失修改 丢失修改是指事务1与事务2从数据库中读 入同一数据并修改 事务2的提交结果破坏了事务1提交的结果, 导致事务1的修改被丢失。

1582 2. 不可重复读 不可重复读是指事务1读取数据后,事务2 执行更新操作,使事务1无法再现前一次读 取结果。

1583 三类不可重复读 事务1读取某一数据后: 1。事务2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。
2. 事务2删除了其中部分记录,当事务1再次 读取数据时,发现某些记录神密地消失了。 3. 事务2插入了一些记录,当事务1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影现象(phantom row)

1584 3. 读“脏”数据 事务1修改某一数据,并将其写回磁盘 事务2读取同一数据后 事务1由于某种原因被撤消,这时事务1已修改过 的数据恢复原值
事务2读到的数据就与数据库中的数据不一致, 是不正确的数据,又称为“脏”数据。

1585 图8.1 三种数据不一致性 T1 T2 ① 读A=16 ③ A←A-1 写回A=15 读A=16 A←A-1 (a) 丢失修改

1586 图8.1 三种数据不一致性(续) (b) 不可重复读 读B=100 B←B*2 写回B=200 ① 读A=50 求和=150 ②
图8.1 三种数据不一致性(续) 读B=100 B←B*2 写回B=200 ① 读A=50 求和=150 ③ 读A=50 读B=200 求和=250 (验算不对) T2 T1 (b) 不可重复读

1587 图8.1 三种数据不一致性(续) (c) 读“脏”数据 读C=200 ① 读C=100 C←C*2 写回C ② ③ ROLLBACK
图8.1 三种数据不一致性(续)    读C=200 ① 读C=100 C←C*2 写回C ③ ROLLBACK C恢复为100 T2 T1 (c) 读“脏”数据

1588 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1589 8.2 封锁 一、什么是封锁 二、基本封锁类型 三、基本锁的相容矩阵

1590 一、什么是封锁 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术

1591 8.2 封锁 一、什么是封锁 二、基本封锁类型 三、基本锁的相容矩阵

1592 二、基本封锁类型 DBMS通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。 基本封锁类型
排它锁(eXclusive lock,简记为X锁) 共享锁(Share lock,简记为S锁)

1593 排它锁 排它锁又称为写锁 若事务T对数据对象A加上X锁,则只允许 T读取和修改A,其它任何事务都不能再 对A加任何类型的锁,直到T释放A上的锁

1594 共享锁 共享锁又称为读锁 若事务T对数据对象A加上S锁,则其它事 务只能再对A加S锁,而不能加X锁,直到 T释放A上的S锁

1595 8.2 封锁 一、什么是封锁 二、基本封锁类型 三、基本锁的相容矩阵

1596 三、锁的相容矩阵 Y=Yes,相容的请求 N=No,不相容的请求 T1 T2 X S - N Y

1597 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1598 8.3 封锁协议 在运用X锁和S锁对数据对象加锁时,需要约定一些规则:封锁协议(Locking Protocol) 何时申请X锁或S锁
8.3 封锁协议 在运用X锁和S锁对数据对象加锁时,需要约定一些规则:封锁协议(Locking Protocol) 何时申请X锁或S锁 持锁时间、何时释放 不同的封锁协议,在不同的程度上为并发操 作的正确调度提供一定的保证 常用的封锁协议:三级封锁协议

1599 1级封锁协议 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放 1级封锁协议可防止丢失修改
正常结束(COMMIT) 非正常结束(ROLLBACK) 1级封锁协议可防止丢失修改 在1级封锁协议中,如果是读数据,不需要加 锁的,所以它不能保证可重复读和不读“脏” 数据。

1600 1级封锁协议 没有丢失修改 T1 T2 ① Xlock A 获得 ② 读A=16 Xlock A ③A←A-1 等待 写回A=15
③A←A-1 写回A=15 Commit Unlock A    Xlock A 等待 获得Xlock A 读A=15 A←A-1 写回A=14 Unlock A  没有丢失修改

1601 1级封锁协议 读“脏”数据 T2 T1 ① Xlock A 获得 ② 读A=16 A←A-1 写回A=15 ③ 读A=15
   读A=15 ①  Xlock A 获得 ②  读A=16   A←A-1 写回A=15 ④ Rollback Unlock A T2 T1 读“脏”数据

1602 1级封锁协议 不可重复读 T2 T1 ①读A=50 读B=100 求和=150 ② Xlock B 获得 读B=100 B←B*2
    Xlock B 获得  读B=100 B←B*2 写回B=200 Commit Unlock B ①读A=50 读B=100 求和=150 ③读A=50 读B=200 求和=250 (验算不对) T2 T1 不可重复读

1603 2级封锁协议 1级封锁协议+事务T在读取数据R前必须先加S锁,读完后即可释放S锁 2级封锁协议可以防止丢失修改和读“脏”数据。

1604 2级封锁协议 不可重复读 T2 T1 T2 T1 (续) ① Sclock A 获得 读A=50 Unlock A ② Sclock B
Unlock B ③ 求和=150 Xlock B 等待 获得Xlock B B←B*2 写回B=200 Commit Unlock B T2 T1 ④Sclock A 获得 读A=50 Unlock A Sclock B 读B=200 Unlock B 求和=250 (验算不对) T2 T1 (续) 不可重复读

1605 3级封锁协议 1级封锁协议 + 事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放
3级封锁协议可防止丢失修改、读脏数据和不可重复读。

1606 3级封锁协议 可重复读 T1 T2 ① Slock A 读A=50 Slock B 读B=100 求和=150 ② Xlock B 等待
③ 读A=50 Commit Unlock A Unlock B Xlock B 等待 获得Xlock B B←B*2 写回B=200 可重复读

1607 3级封锁协议 不读“脏”数据 T1 T2 ③ ROLLBACK ① Xlock C 读C= 100 C←C*2 写回C=200 ②
③ ROLLBACK (C恢复为100) Unlock C Slock C 等待 获得Slock C 读C=100 Commit C 不读“脏”数据

1608 4.封锁协议小结 三级协议的主要区别 什么操作需要申请封锁 何时释放锁(即持锁时间)

1609 封锁协议小结(续)

1610 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1611 8.4 活锁和死锁 封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题 死锁 活锁

1612 活锁

1613 如何避免活锁 采用先来先服务的策略: 当多个事务请求封锁同一数据对象时 按请求封锁的先后次序对这些事务排队
该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。

1614 死锁 T T2 Xlock R1 . Xlock R2 等待 . Xlock R2 Xlock R1 等待

1615 解决死锁的方法 两类方法 1. 预防死锁 2. 死锁的诊断与解除

1616 1. 死锁的预防 产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。
预防死锁的发生就是要破坏产生死锁的 条件

1617 死锁的预防(续) 预防死锁的方法 一次封锁法 顺序封锁法

1618 (1)一次封锁法 要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行 一次封锁法存在的问题:降低并发度 扩大封锁范围
将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的并发度

1619 一次封锁法(续) 难于事先精确确定封锁对象
数据库中数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封锁对象,所以很难事先精确地确定每个事务所要封锁的数据对象 解决方法:将事务在执行过程中可能要封锁的数据对象全部加锁,这就进一步降低了并发度。

1620 (2)顺序封锁法 顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 顺序封锁法存在的问题 维护成本高
数据库系统中可封锁的数据对象极其众多,并且随数据的插入、删除等操作而不断地变化,要维护这样极多而且变化的资源的封锁顺序非常困难,成本很高

1621 顺序封锁法(续) 难于实现 事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。 例:规定数据对象的封锁顺序为A,B,C,D,E。事务T3起初要求封锁数据对象B,C,E,但当它封锁了B,C后,才发现还需要封锁A,这样就破坏了封锁顺序.

1622 死锁的预防(续) 结论 在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点
DBMS在解决死锁的问题上更普遍采用的是 诊断并解除死锁的方法

1623 2. 死锁的诊断与解除 允许死锁发生 解除死锁 由DBMS的并发控制子系统定期检测系统中是否存在死锁 一旦检测到死锁,就要设法解除

1624 检测死锁:超时法 如果一个事务的等待时间超过了规定的时限,就认为发生了死锁 优点:实现简单 缺点 有可能误判死锁
时限若设置得太长,死锁发生后不能及时发现

1625 等待图法 用事务等待图动态反映所有事务的等待情况
事务等待图是一个有向图G=(T,U) T为结点的集合,每个结点表示正运行的事务 U为边的集合,每条边表示事务等待的情况 若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2 并发控制子系统周期性地(比如每隔1 min)检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。

1626 死锁的诊断与解除(续) 解除死锁 选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去。

1627 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1628 8.5 并发调度的可串行性 一、什么样的并发操作调度是正确的 二、如何保证并发操作的调度是正确的

1629 8.5 并发调度的可串行性 一、什么样的并发操作调度是正确的 二、如何保证并发操作的调度是正确的

1630 一、什么样的并发操作调度是正确的 计算机系统对并行事务中并行操作的调度是的随机的,而不同的调度可能会产生不同的结果。 将所有事务串行起来的调度策略一定是正确的调度策略。 如果一个事务运行过程中没有其他事务在同时运行,也就是说它没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的或者预想的

1631 什么样的并发操作调度是正确的(续) 以不同的顺序串行执行事务也有可能会产生不同的结果,但由于不会将数据库置于不一致状态,所以都可以认为是正确的。 几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并行调度策略称为可串行化(Serializable)的调度。

1632 可串行性是并行事务正确性的唯一准则 什么样的并发操作调度是正确的(续) 例:现在有两个事务,分别包含下列操作:
  事务1:读B;A=B+1;写回A; 事务2:读A;B=A+1;写回B; 假设A的初值为2,B的初值为2。

1633 对这两个事务的不同调度策略 什么样的并发操作调度是正确的(续) 串行执行 串行调度策略1 串行调度策略2 交错执行 不可串行化的调度

1634 (a) 串行调度策略,正确的调度 T1 T2 Slock B Y=B=2 Unlock B Xlock A A=Y+1 写回A(=3)
Slock A X=A=3 Unlock A Xlock B B=X+1 写回B(=4) Unlock B Slock B Y=B=2 Unlock B Xlock A A=Y+1 写回A(=3) Unlock A

1635 (b) 串行调度策略,正确的调度 T1 T2 SlockA X=A=2 Unlock A Xlock B B=X+1 写回B(=3)
Unlock B Slock B Y=B=3 Unlock B Xlock A A=Y+1 写回A(=4) Unlock A

1636 (c) 不可串行化的调度 T1 T2 Slock B Y=B=2 Slock A X=A=2 Unlock B Unlock A
Slock A X=A=2 Unlock A Xlock B B=X+1 写回B(=3) Unlock B Slock B Y=B=2 Unlock B Xlock A A=Y+1 写回A(=3) Unlock A

1637 (c) 不可串行化的调度(续) 由于其执行结果与(a)、(b)的结果都不同,所以是错误的调度。

1638 (d) 可串行化的调度 T1 T2 Slock B Y=B=2 Unlock B Xlock A Slock A 等待 A=Y+1
Slock A 等待 X=A=3 Unlock A Xlock B B=X+1 写回B(=4) Unlock B Slock B Y=B=2 Unlock B Xlock A A=Y+1 写回A(=3) Unlock A

1639 (d) 可串行化的调度(续) 由于其执行结果与串行调度(a)的执行结果相同,所以是正确的调度。

1640 8.5 并发调度的可串行性 一、什么样的并发操作调度是正确的 二、如何保证并发操作的调度是正确的

1641 为了保证并行操作的正确性,DBMS的并行控制机制必须提供一定的手段来保证调度是可串行化的。
二、如何保证并发操作的调度是正确的 为了保证并行操作的正确性,DBMS的并行控制机制必须提供一定的手段来保证调度是可串行化的。 从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不可行的,因为它使用户不能充分共享数据库资源。

1642 保证并发操作调度正确性的方法 封锁方法:两段锁(Two-Phase Locking, 简称2PL)协议 时标方法 乐观方法
如何保证并发操作的调度是正确的(续) 保证并发操作调度正确性的方法 封锁方法:两段锁(Two-Phase Locking, 简称2PL)协议 时标方法 乐观方法

1643 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1644 8.6 两段锁协议 两段锁协议的内容 1. 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
8.6 两段锁协议 两段锁协议的内容 1. 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁 2. 在释放一个封锁之后,事务不再获得任何其他封锁。

1645 两段锁协议(续) “两段”锁的含义 事务分为两个阶段 第一阶段是获得封锁,也称为扩展阶段; 第二阶段是释放封锁,也称为收缩阶段。

1646 两段锁协议(续) 例: 事务1的封锁序列: 事务2的封锁序列: 事务1遵守两段锁协议,而事务2不遵守两段协议。
Slock A ... Slock B ... Xlock C ... Unlock B ... Unlock A ... Unlock C; 事务2的封锁序列: Slock A ... Unlock A ... Slock B ... Xlock C ... Unlock C ... Unlock B; 事务1遵守两段锁协议,而事务2不遵守两段协议。

1647 两段锁协议(续) 并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。
所有遵守两段锁协议的事务,其并行执行的结果一定是正确的 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件 可串行化的调度中,不一定所有事务都必须符合两段锁协议。

1648 两段锁协议(续) (a) 遵守两段锁协议 (b) 不遵守两段锁协议 (c) 不遵守两段锁协议 T1 Slock B 读B=2 Y=B
Xlock A A=Y+1 写回A=3 Unlock B Unlock A T2 Slock A 等待 读A=3 X=A Unlock A Xlock B B=X+1 写回B=4 Unlock B  T2    Slock A 读A=2 X=A Unlock A Xlock B 等待 B=X+1 写回B=3 Unlock B  T2 Slock A 等待 读A=3 Y=A Xlock B B=Y+1 写回B=4 Unlock B Unlock A  T1 Slock B 读B=2 Y=B Unlock B Xlock A A=Y+1 写回A=3 Unlock A T1 Slock B 读B=2 Y=B Unlock B Xlock A A=Y+1 写回A=3 Unlock A (a) 遵守两段锁协议 (b) 不遵守两段锁协议 (c) 不遵守两段锁协议

1649 两段锁协议(续) 两段锁协议与防止死锁的一次封锁法
一次封锁法要求每个事务必须一次将所有要 使用的数据全部加锁,否则就不能继续执行, 因此一次封锁法遵守两段锁协议 但是两段锁协议并不要求事务必须一次将所 有要使用的数据全部加锁,因此遵守两段锁 协议的事务可能发生死锁

1650 两段锁协议(续) 图8.7 遵守两段锁协议的事务发生死锁 T1 T2 Slock B 读B=2 Slock A 读A=2 Xlock A
图8.7 遵守两段锁协议的事务发生死锁 T1 Slock B 读B=2 Xlock A 等待 T2 Slock A 读A=2 Xlock A 等待

1651 两段锁协议(续) 两段锁协议与三级封锁协议 两类不同目的的协议 两段锁协议 三级封锁协议 遵守第三级封锁协议必然遵守两段协议
保证并发调度的正确性 三级封锁协议 在不同程度上保证数据一致性 遵守第三级封锁协议必然遵守两段协议

1652 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1653 8.7 封锁的粒度 8.7.1 封锁粒度 8.7.2 多粒度封锁 8.7.3 意向锁

1654 8.7.1 封锁粒度 一、什么是封锁粒度 二、选择封锁粒度的原则

1655 一、什么是封锁粒度 X锁和S锁都是加在某一个数据对象上的 封锁的对象:逻辑单元,物理单元 例:在关系数据库中,封锁对象:
逻辑单元: 属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等 物理单元:页(数据页或索引页)、物理记录等

1656 什么是封锁粒度(续) 封锁对象可以很大也可以很小 例: 对整个数据库加锁 对某个属性值加锁
封锁对象的大小称为封锁的粒度(Granularity) 多粒度封锁(multiple granularity locking) 在一个系统中同时支持多种封锁粒度供不同的事务选择

1657 8.7.1 封锁粒度 一、什么是封锁粒度 二、选择封锁粒度的原则

1658 二、选择封锁粒度的原则 封锁的粒度越 大,小, 系统被封锁的对象 少,多, 并发度 小,高, 系统开销 小,大, 选择封锁粒度:
封锁的粒度越 大,小, 系统被封锁的对象 少,多, 并发度 小,高, 系统开销 小,大, 选择封锁粒度: 考虑封锁机构和并发度两个因素 对系统开销与并发度进行权衡

1659 选择封锁粒度的原则(续) 需要处理多个关系的大量元组的用户事务:以数据库为封锁单位; 需要处理大量元组的用户事务:以关系为封锁单元;
只处理少量元组的用户事务:以元组为封锁单位

1660 8.7 封锁的粒度 8.7.1 封锁粒度 8.7.2 多粒度封锁 8.7.3 意向锁

1661 8.7.2 多粒度封锁 多粒度树 以树形结构来表示多级封锁粒度 根结点是整个数据库,表示最大的数据 粒度 叶结点表示最小的数据粒度

1662 多粒度封锁(续) 例:三级粒度树。根结点为数据库,数据库的子结点为关系,关系的子结点为元组。 数据库 关系Rn 关系R1 元组 ……

1663 多粒度封锁协议 允许多粒度树中的每个结点被独立地加锁 对一个结点加锁意味着这个结点的所有 后裔结点也被加以同样类型的锁
在多粒度封锁中一个数据对象可能以两 种方式封锁:显式封锁和隐式封锁

1664 显式封锁和隐式封锁 显式封锁: 直接加到数据对象上的封锁 隐式封锁: 由于其上级结点加锁而使该数 据对象加上了锁
显式封锁和隐式封锁的效果是一样的

1665 对某个数据对象加锁时系统检查的内容 该数据对象 有无显式封锁与之冲突 所有上级结点 检查本事务的显式封锁是否与该数据对象上的隐式封锁冲突:(由上级结点封锁造成的) 所有下级结点 看上面的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突。

1666 8.7 封锁的粒度 8.7.1 封锁粒度 8.7.2 多粒度封锁 8.7.3 意向锁

1667 8.7.3 意向锁 引进意向锁(intention lock)目的 提高对某个数据对象加锁时系统的检查效率

1668 什么是意向锁 对任一结点加基本锁,必须先对它的上层结点加意向锁 如果对一个结点加意向锁,则说明该结 点的下层结点正在被加锁

1669 意向锁(续) 例:对任一元组 r 加锁,先关系R加意向锁 事务T要对关系R加X锁, 系统只要检查根结点数据库和关系R是否已加了不相容的锁,

1670 常用意向锁 意向共享锁(Intent Share Lock,简称IS锁)
意向排它锁(Intent Exclusive Lock,简称IX 锁) 共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁)

1671 例:要对某个元组加S锁,则要首先对关系和数据库加IS锁
意向锁(续) IS锁 如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。 例:要对某个元组加S锁,则要首先对关系和数据库加IS锁

1672 意向锁(续) IX锁 如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。

1673 意向锁(续) SIX锁 如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。

1674 意向锁(续) 意向锁的相容矩阵 T1 T2 S X IS IX SIX - S Y N Y N N Y X N N N N N Y
IS Y N Y Y Y Y IX N N Y Y N Y SIX N N Y N N Y - Y Y Y Y Y Y

1675 意向锁(续) 锁的强度 锁的强度是指它对其他锁的排斥程度 一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然 X SIX S IX IS
- IS

1676 意向锁(续) 具有意向锁的多粒度封锁方法 例:事务T要对一个数据对象加锁,必须先对 它的上层结点加意向锁
申请封锁时应该按自上而下的次序进行; 释放封锁时则应该按自下而上的次序进行 例:事务T要对一个数据对象加锁,必须先对 它的上层结点加意向锁

1677 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1678 Oracle采用封锁技术保证并发操作的可串行性
字典锁 数据锁(亦称DML锁)

1679 1. 字典锁 ORACLE DBMS内部用于对字典表的封锁 由DBMS在必要的时候自动加锁和释放锁,用 户无权控制 字典锁类型 语法分析锁
DDL锁

1680 2. 数据锁 数据锁类型 共享锁(S锁) 排它锁(X锁) 行级共享锁(RS锁) 行级排它锁(RX锁) 共享行级排它锁(SRX锁)
其中RS锁、RX锁、SRX锁实际上就是IS锁、IX锁、 SIX锁。

1681 数据锁(续) 封锁粒度 行级 表级

1682 数据锁(续) 数据锁的相容矩阵 T1 T2 S X RS RX SRX - S Y N Y N N Y Y=Yes,表示相容的请求
X N N N N N Y RS Y N Y Y Y Y N=No,表示不相容的请求 RX N N Y Y N Y SRX N N Y N N Y Y Y Y Y Y Y

1683 数据锁(续) 数据封锁的两种方式 数据封锁由系统控制,对用户是透明的 允许用户用LOCK TABLE语句显式对封锁对 象加锁

1684 数据锁(续) ORACLE数据锁的特点 缺省情况下,读数据不加锁
ORACLE通过回滚段(Rollback Segment) 来保证用户不读“脏”数据和可重复读。 优点:提高数据的并发度

1685 数据锁(续) 死锁 采用死锁诊断与解除法 周期性诊断系统中有无死锁 存在死锁,则撤消执行更新操作次数最少 的事务

1686 第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议
第八章 并发控制 8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结

1687 8.9 小结 数据共享与数据一致性是一对矛盾 数据库的价值在很大程度上取决于它所能提供的数据共享度。
8.9 小结 数据共享与数据一致性是一对矛盾 数据库的价值在很大程度上取决于它所能提供的数据共享度。 数据共享在很大程度上取决于系统允许对数据并发操作的程度。 数据并发程度又取决于数据库中的并发控制机制 另一方面,数据的一致性也取决于并发控制的程度。施加的并发控制愈多,数据的一致性往往愈好。

1688 小结(续) 数据库的并发控制以事务为单位 数据库的并发控制通常使用封锁机制 两类最常用的封锁
不同级别的封锁协议提供不同的数据一致性保证,提供不同的数据共享度。 三级封锁协议

1689 小结(续) 并发控制机制调度并发事务操作是否正确的判别准则是可串行性 并发操作的正确性则通常由两段锁协议来保 证。
两段锁协议是可串行化调度的充分条件,但 不是必要条件

1690 小结(续) 对数据对象施加封锁,带来问题 活锁: 先来先服务 死锁: 预防方法 一次封锁法 顺序封锁法 死锁的诊断与解除 超时法 等待图法

1691 小结(续) 不同的数据库管理系统提供的封锁类型、封锁协议、达到的系统一致性级别不尽相同。但是其依据的基本原理和技术是共同的。

1692 下课了。。。 休息一会儿。。。

1693 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第九章 数据库安全性

1694 第九章 数据库安全性 问题的提出 数据库的一大特点是数据可以共享 但数据共享必然带来数据库的安全性问题
第九章 数据库安全性 问题的提出 数据库的一大特点是数据可以共享 但数据共享必然带来数据库的安全性问题 数据库系统中的数据共享不能是无条件的共享 例:军事秘密、 国家机密、 新产品实验数据、 市场需求分析、市场营销策略、销售计划、 客户档案、 医疗档案、 银行储蓄数据

1695 数据库安全性(续) 数据库中数据的共享是在DBMS统一的严格的控制之下的共享,即只允许有合法使用权限的用户访问允许他存取的数据
数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一

1696 数据库安全性(续) 什么是数据库的安全性 什么是数据的保密 数据库的安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
数据保密是指用户合法地访问到机密数据后能否对这些数据保密。 通过制订法律道德准则和政策法规来保证。

1697 第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施
第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施 9.5 小结

1698 第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施
第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施 9.5 小结

1699 9.1 计算机安全性概论 计算机系统的三类安全性问题 可信计算机系统评测标准

1700 9.1 计算机安全性概论 计算机系统的三类安全性问题 可信计算机系统评测标准

1701 什么是计算机系统安全性 9.1.1 计算机系统的三类安全性问题
计算机系统的三类安全性问题 什么是计算机系统安全性 为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。

1702 计算机安全涉及问题 计算机系统的三类安全性问题(续) 计算机系统本身的技术问题 计算机安全理论与策略 计算机安全技术 管理问题 安全管理
安全评价 安全产品

1703 计算机系统的三类安全性问题(续) 计算机安全涉及问题(续) 法学 计算机安全法律 犯罪学 计算机犯罪与侦察 安全监察 心理学

1704 计算机系统的三类安全性问题(续) 三类计算机系统安全性问题 技术安全类 管理安全类 政策法律类

1705 计算机系统的三类安全性问题(续) 技术安全 指计算机系统中采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护,当计算机系统受到无意或恶意的攻击时仍能保证系统正常运行,保证系统内的数据不增加、不丢失、不泄露。

1706 计算机系统的三类安全性问题(续) 管理安全 软硬件意外故障、场地的意外事故、管理不善导致的计算机设备和数据介质的物理破坏、丢失等安全问题

1707 计算机系统的三类安全性问题(续) 政策法律类 政府部门建立的有关计算机犯罪、数据安全保密的法律道德准则和政策法规、法令

1708 9.1 计算机安全性概论 计算机系统的三类安全性问题 可信计算机系统评测标准

1709 9.1.2 可信计算机系统评测标准 为降低进而消除对系统的安全攻击,各国引用或制定了一系列安全标准 TCSEC (桔皮书)
可信计算机系统评测标准 为降低进而消除对系统的安全攻击,各国引用或制定了一系列安全标准 TCSEC (桔皮书) TDI (紫皮书)

1710 可信计算机系统评测标准(续) 1985年美国国防部(DoD)正式颁布《 DoD可信计算机系统评估标准》(简称TCSEC或DoD85)
提供一种标准,使用户可以对其计算机系统内敏感信息安全操作的可信程度做评估。 给计算机行业的制造商提供一种可循的指导规则,使其产品能够更好地满足敏感应用的安全需求。

1711 可信计算机系统评测标准(续) 1991年4月美国NCSC(国家计算机安全中心)颁布了《可信计算机系统评估标准关于可信数据库系统的解释》( Trusted Database Interpretation 简称TDI) TDI又称紫皮书。它将TCSEC扩展到数据库管理系统。 TDI中定义了数据库管理系统的设计与实现中需满足和用以进行安全性级别评估的标准。

1712 TDI/TCSEC标准的基本内容 可信计算机系统评测标准(续) TDI与TCSEC一样,从四个方面来描述安全性级别划分的指标 安全策略 责任
保证 文档

1713 R1 安全策略(Security Policy)
可信计算机系统评测标准(续) R1 安全策略(Security Policy) R1.1 自主存取控制 (Discretionary Access Control,简记为DAC) R1.2 客体重用(Object Reuse) R1.3 标记(Labels) R1.4 强制存取控制(Mandatory Access Control,简记为MAC)

1714 R2 责任(Accountability) R3 保证(Assurance) 可信计算机系统评测标准(续) Authentication)
R2.1 标识与鉴别(Identification & Authentication) R2.2 审计(Audit) R3 保证(Assurance) R3.1 操作保证(Operational Assurance) R3.2 生命周期保证(Life Cycle Assurance)

1715 R4 文档(Documentation) 可信计算机系统评测标准(续) R4.1 安全特性用户指南(Security Features
User's Guide) R4.2 可信设施手册(Trusted Facility Manual) R4.3 测试文档(Test Documentation) R4.4 设计文档(Design Documentation)

1716 TCSEC/TDI安全级别划分 可信计算机系统评测标准(续) 定 义 A1 验证设计(Verified Design) B3
安 全 级 别 定 义 A1 验证设计(Verified Design) B3 安全域(Security Domains) B2 结构化保护(Structural Protection) B1 标记安全保护(Labeled Security Protection) C2 受控的存取保护(Controlled Access Protection) C1 自主安全保护(Discretionary Security Protection) D 最小保护(Minimal Protection)

1717 可信计算机系统评测标准(续) 四组(division)七个等级 按系统可靠或可信程度逐渐增高
C(C1,C2) B(B1,B2,B3) A(A1) 按系统可靠或可信程度逐渐增高 各安全级别之间具有一种偏序向下兼容的关系,即较高安全性级别提供的安全保护要包含较低级别的所有保护要求,同时提供更多或更完善的保护能力。

1718 D级 可信计算机系统评测标准(续) 将一切不符合更高标准的系统均归于D组 典型例子:DOS是安全标准为D的操作系统

1719 C1级 可信计算机系统评测标准(续) 非常初级的自主安全保护
能够实现对用户和数据的分离,进行自主存 取控制(DAC),保护或限制用户权限的传 播。

1720 C2级 可信计算机系统评测标准(续) 安全产品的最低档次
提供受控的存取保护,将C1级的DAC进一步 细化,以个人身份注册负责,并实施审计和 资源隔离 达到C2级的产品在其名称中往往不突出“安 全”(Security)这一特色

1721 可信计算机系统评测标准(续) 数据库 典型例子 操作系统 Microsoft的Windows NT 3.5,
数字设备公司的Open VMS VAX 6.0和6.1 数据库 Oracle公司的Oracle 7 Sybase公司的 SQL Server

1722 B1级 可信计算机系统评测标准(续) 标记安全保护。“安全”(Security)或“可信的”(Trusted)产品。
对系统的数据加以标记,对标记的主体和客 体实施强制存取控制(MAC)、审计等安全 机制

1723 可信计算机系统评测标准(续) 典型例子 操作系统 数据库 数字设备公司的SEVMS VAX Version 6.0
惠普公司的HP-UX BLS release 数据库 Oracle公司的Trusted Oracle 7 Sybase公司的Secure SQL Server version Informix公司的Incorporated INFORMIX-OnLine / Secure 5.0

1724 B2级 可信计算机系统评测标准(续) 结构化保护 建立形式化的安全策略模型并对系统内的所 有主体和客体实施DAC和MAC。

1725 可信计算机系统评测标准(续) 典型例子 操作系统 标准的网络产品 数据库
只有Trusted Information Systems公司的Trusted XENIX一种产品 标准的网络产品 只有Cryptek Secure Communications公司的LLC VSLAN一种产品 数据库 没有符合B2标准的产品

1726 可信计算机系统评测标准(续) B3级 安全域。 该级的TCB必须满足访问监控器的要求,审 计跟踪能力更强,并提供系统恢复过程。

1727 可信计算机系统评测标准(续) A1级 验证设计,即提供B3级保护的同时给出系统 的形式化设计说明和验证以确信各安全保护 真正实现。

1728 B2以上的系统 可信计算机系统评测标准(续) 还处于理论研究阶段 应用多限于一些特殊的部门如军队等

1729 可信计算机系统评测标准(续)

1730 可信计算机系统评测标准(续) 表示该级不提供对该指标的支持; 表示该级新增的对该指标的支持; 表示该级对该指标的支持与相邻低一级的
等级一样; 表示该级对该指标的支持较下一级有所增 加或改动。

1731 第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施
第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施 9.5 小结

1732 9.2 数据库安全性控制 9.2.1 数据库安全性控制概述 9.2.2 用户标识与鉴别 9.2.3 存取控制 9.2.4 自主存取控制方法
9.2 数据库安全性控制 数据库安全性控制概述 用户标识与鉴别 存取控制 自主存取控制方法 强制存取控制方法 视图机制 审计 数据加密

1733 9.2.1 数据库安全性控制概述 非法使用数据库的情况
数据库安全性控制概述 非法使用数据库的情况 用户编写一段合法的程序绕过DBMS及其授 权机制,通过操作系统直接存取、修改或备 份数据库中的数据; 直接或编写应用程序执行非授权操作;

1734 数据库安全性控制概述(续) 通过多次合法查询数据库从中推导出一些保密数据 破坏安全性的行为可能是无意的,故意的,恶意的。
例:某数据库应用系统禁止查询单个人的工资,但允许查任意一组人的平均工资。用户甲想了解张三的工资,于是他: 首先查询包括张三在内的一组人的平均工资 然后查用自己替换张三后这组人的平均工资 从而推导出张三的工资 破坏安全性的行为可能是无意的,故意的,恶意的。

1735 计算机系统中的安全模型 安全性控制层次 DB 低 高 方法: 用户标识 和鉴定 存取控制 审计 视图 操作系统 安全保护 密码存储 DBMS
应用 DBMS OS DB 安全性控制层次 方法: 用户标识 和鉴定 存取控制 审计 视图 操作系统 安全保护 密码存储

1736 数据库安全性控制概述(续) 数据库安全性控制的常用方法 用户标识和鉴定 存取控制 视图 审计 密码存储

1737 9.2 数据库安全性控制 9.2.1 数据库安全性控制概述 9.2.2 用户标识与鉴别 9.2.3 存取控制 9.2.4 自主存取控制方法
9.2 数据库安全性控制 数据库安全性控制概述 用户标识与鉴别 存取控制 自主存取控制方法 强制存取控制方法 视图机制 审计 数据加密

1738 用户标识与鉴别 用户标识与鉴别(Identification & Authentication) 系统提供的最外层安全保护措施

1739 9.2.2 用户标识与鉴别 基本方法 系统提供一定的方式让用户标识自己的名字或身份; 系统内部记录着所有合法用户的标识;
用户标识与鉴别 基本方法 系统提供一定的方式让用户标识自己的名字或身份; 系统内部记录着所有合法用户的标识; 每次用户要求进入系统时,由系统核对用户提供的身 份标识; 通过鉴定后才提供机器使用权。 用户标识和鉴定可以重复多次

1740 用户标识自己的名字或身份 用户名/口令 简单易行,容易被人窃取 每个用户预先约定好一个计算过程或者函数 系统提供一个随机数
用户根据自己预先约定的计算过程或者函数进行计算 系统根据用户计算结果是否正确鉴定用户身份

1741 9.2 数据库安全性控制 9.2.1 数据库安全性控制概述 9.2.2 用户标识与鉴别 9.2.3 存取控制 9.2.4 自主存取控制方法
9.2 数据库安全性控制 数据库安全性控制概述 用户标识与鉴别 存取控制 自主存取控制方法 强制存取控制方法 视图机制 审计 数据加密

1742 9.2.3 存取控制 存取控制机制的功能 存取控制机制的组成 定义存取权限 检查存取权限
存取控制 存取控制机制的功能 存取控制机制的组成 定义存取权限 检查存取权限 用户权限定义和合法权检查机制一起组成 了DBMS的安全子系统

1743 存取控制(续) 定义存取权限 在数据库系统中,为了保证用户只能访问他有权存取的数据,必须预先对每个用户定义存取权限。 检查存取权限
对于通过鉴定获得上机权的用户(即合法用户),系统根据他的存取权限定义对他的各种操作请求进行控制,确保他只执行合法操作。

1744 存取控制(续) 常用存取控制方法 自主存取控制(Discretionary Access Control ,简称DAC)
灵活 强制存取控制(Mandatory Access Control,简称 MAC) B1级 严格

1745 自主存取控制方法 同一用户对于不同的数据对象有不同的存取权限 不同的用户对同一对象也有不同的权限 用户还可将其拥有的存取权限转授给其 他用户

1746 强制存取控制方法 每一个数据对象被标以一定的密级 每一个用户也被授予某一个级别的许可证
对于任意一个对象,只有具有合法许可证 的用户才可以存取

1747 9.2 数据库安全性控制 9.2.1 数据库安全性控制概述 9.2.2 用户标识与鉴别 9.2.3 存取控制 9.2.4 自主存取控制方法
9.2 数据库安全性控制 数据库安全性控制概述 用户标识与鉴别 存取控制 自主存取控制方法 强制存取控制方法 视图机制 审计 数据加密

1748 自主存取控制方法 定义存取权限 存取权限 存取权限由两个要素组成 数据对象 操作类型

1749 自主存取控制方法(续) 关系系统中的存取权限 类型 数据对象 操作类型 模 式 模 式 建立、修改、删除、检索
类型  数据对象 操作类型 模 式 模 式 建立、修改、删除、检索 外模式 建立、修改、删除、检索 内模式 建立、删除、检索 数 据 表 查找、插入、修改、删除 属性列 查找、插入、修改、删除

1750 自主存取控制方法(续) 关系系统中的存取权限(续) 定义方法 GRANT/REVOKE

1751 自主存取控制方法(续) 关系系统中的存取权限(续) 例: 一张授权表 用户名 数据对象名 允许的操作类型
用户名 数据对象名 允许的操作类型 王 平 关系Student SELECT 张明霞 关系Student UPDATE 张明霞 关系Course ALL 张明霞 SC. Grade UPDATE 张明霞 SC. Sno SELECT 张明霞 SC. Cno SELECT

1752 自主存取控制方法(续) 检查存取权限 对于获得上机权后又进一步发出存取数据库 操作的用户
DBMS查找数据字典,根据其存取权限对 操作的合法性进行检查 若用户的操作请求超出了定义的权限,系 统将拒绝执行此操作

1753 自主存取控制方法(续) 授权粒度 授权粒度是指可以定义的数据对象的范围 它是衡量授权机制是否灵活的一个重要指 标。
授权定义中数据对象的粒度越细,即可以 定义的数据对象的范围越小,授权子系统 就越灵活。

1754 自主存取控制方法(续) 关系数据库中授权的数据对象粒度 数据库 属性列 能否提供与数据值有关的授权反映了授权子系统精巧程度

1755 自主存取控制方法(续) 实现与数据值有关的授权 利用存取谓词 存取谓词可以很复杂
可以引用系统变量,如终端设备号,系统时钟等,实现与时间地点有关的存取权限,这样用户只能在某段时间内,某台终端上存取有关数据 例:规定“教师只能在每年1月份和7月份星期一至星期五上午8点到下午5点处理学生成绩数据”。

1756 自主存取控制方法(续) 例:扩充后的授权表 用户名 数据对象名 允许的操作类型 存取谓词
用户名 数据对象名 允许的操作类型 存取谓词 王平 关系Student SELECT Sdept=CS 张明霞 关系Student UPDATE Sname=张明霞 张明霞 关系 Course ALL 空

1757 自主存取控制方法(续) 自主存取控制小结 定义存取权限 用户 检查存取权限 DBMS

1758 自主存取控制方法(续) 自主存取控制小结(续) 数据值粒度:存取谓词 授权粒度 数据对象粒度:数据库、表、属性列、行
授权粒度越细,授权子系统就越灵活,能够提供的安全性就越完善。但另一方面,因数据字典变大变复杂,系统定义与检查权限的开销也会相应地增大。

1759 自主存取控制方法(续) 自主存取控制小结(续) 优点 能够通过授权机制有效地控制其他用户对 敏感数据的存取

1760 自主存取控制方法(续) 自主存取控制小结(续) 缺点 可能存在数据的“无意泄露”
原因:这种机制仅仅通过对数据的存取权 限来进行安全控制,而数据本身并无安全 性标记。 解决:对系统控制下的所有主客体实施强 制存取控制策略

1761 9.2 数据库安全性控制 9.2.1 数据库安全性控制概述 9.2.2 用户标识与鉴别 9.2.3 存取控制 9.2.4 自主存取控制方法
9.2 数据库安全性控制 数据库安全性控制概述 用户标识与鉴别 存取控制 自主存取控制方法 强制存取控制方法 视图机制 审计 数据加密

1762 强制存取控制方法 什么是强制存取控制 强制存取控制(MAC)是指系统为保证更高程度的安全性,按照TDI/TCSEC标准中安全策略的要求,所采取的强制存取检查手段。 MAC不是用户能直接感知或进行控制的。 MAC适用于对数据有严格而固定密级分类的部门 军事部门 政府部门

1763 强制存取控制方法(续) 主体与客体 在MAC中,DBMS所管理的全部实体被分为主体和客体两大类 主体是系统中的活动实体
代表用户的各进程 客体是系统中的被动实体,是受主体操纵的 文件 基表 索引 视图

1764 强制存取控制方法(续) 敏感度标记 对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label) 敏感度标记分成若干级别
绝密(Top Secret) 机密(Secret) 可信(Confidential) 公开(Public)

1765 强制存取控制方法(续) 主体的敏感度标记称为许可证级别 (Clearance Level)
客体的敏感度标记称为密级(Classification Level) MAC机制就是通过对比主体的Label和客体 的Label,最终确定主体是否能够存取客体

1766 强制存取控制方法(续) 强制存取控制规则 当某一用户(或某一主体)以标记label注册 入系统时,系统要求他对任何客体的存取必 须遵循下面两条规则: (1)仅当主体的许可证级别大于或等于客体 的密级时,该主体才能读取相应的客体; (2)仅当主体的许可证级别等于客体的密级 时,该主体才能写相应的客体。

1767 强制存取控制方法(续) 修正规则: 主体的许可证级别 <=客体的密级 主体能写客体 用户可为写入的数据对象赋予高于自
己的许可证级别的密级 一旦数据被写入,该用户自己也不能再读该数据对象了。

1768 强制存取控制方法(续) 规则的共同点 禁止了拥有高许可证级别的主体 更新低密级的数据对象

1769 强制存取控制方法(续) 强制存取控制的特点 MAC是对数据本身进行密级标记 无论数据如何复制,标记与数据是一个不可分 的整体
只有符合密级标记要求的用户才可以操纵数据 从而提供了更高级别的安全性

1770 MAC与DAC DAC与MAC共同构成DBMS的安全机制 原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
先进行DAC检查,通过DAC检查的数据对 象再由系统进行MAC检查,只有通过 MAC检查的数据对象方可存取。

1771 强制存取控制方法(续) DAC + MAC安全检查示意图   SQL语法分析 & 语义检查 DAC 检 查 安全检查 MAC 检 查 继 续

1772 9.2 数据库安全性控制 9.2.1 数据库安全性控制概述 9.2.2 用户标识与鉴别 9.2.3 存取控制 9.2.4 自主存取控制方法
9.2 数据库安全性控制 数据库安全性控制概述 用户标识与鉴别 存取控制 自主存取控制方法 强制存取控制方法 视图机制 审计 数据加密

1773 9.2.6 视图机制 视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,
视图机制 视图机制把要保密的数据对无权存取这些数据的用户隐藏起来, 视图机制更主要的功能在于提供数据独立性,其安全保护功能太不精细,往往远不能达到应用系统的要求。

1774 视图机制(续) 视图机制与授权机制配合使用: 首先用视图机制屏蔽掉一部分保密数据 视图上面再进一步定义存取权限
间接实现了支持存取谓词的用户权限定义

1775 视图机制(续) 例:王平只能检索计算机系学生的信息 先建立计算机系学生的视图CS_Student AS SELECT
CREATE VIEW CS_Student AS SELECT FROM Student WHERE Sdept='CS';

1776 视图机制(续) 在视图上进一步定义存取权限 GRANT SELECT ON CS_Student TO 王平 ;

1777 9.2 数据库安全性控制 9.2.1 数据库安全性控制概述 9.2.2 用户标识与鉴别 9.2.3 存取控制 9.2.4 自主存取控制方法
9.2 数据库安全性控制 数据库安全性控制概述 用户标识与鉴别 存取控制 自主存取控制方法 强制存取控制方法 视图机制 审计 数据加密

1778 9.2.7 审计 什么是审计 启用一个专用的审计日志(Audit Log) 将用户对数据库的所有操作记录在上面
审计 什么是审计 启用一个专用的审计日志(Audit Log) 将用户对数据库的所有操作记录在上面 DBA可以利用审计日志中的追踪信息 找出非法存取数据的人 C2以上安全级别的DBMS必须具有审计功能

1779 审计(续) 审计功能的可选性 审计很费时间和空间 DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能。

1780 审计(续) 强制性机制: 用户识别和鉴定、存取控制、视图 预防监测手段: 审计技术

1781 9.2 数据库安全性控制 9.2.1 数据库安全性控制概述 9.2.2 用户标识与鉴别 9.2.3 存取控制 9.2.4 自主存取控制方法
9.2 数据库安全性控制 数据库安全性控制概述 用户标识与鉴别 存取控制 自主存取控制方法 强制存取控制方法 视图机制 审计 数据加密

1782 9.2.8 数据加密 数据加密 加密的基本思想 防止数据库中数据在存储和传输中失密的有效手段
数据加密 数据加密 防止数据库中数据在存储和传输中失密的有效手段 加密的基本思想 根据一定的算法将原始数据(术语为明文,Plain text)变换为不可直接识别的格式(术语为密文,Cipher text) 不知道解密算法的人无法获知数据的内容

1783 数据加密(续) 加密方法 置换方法 混合方法 替换方法 使用密钥(Encryption Key)将明文中的每一个字符转换为密文中的一个字符
将明文的字符按不同的顺序重新排列 混合方法 美国1977年制定的官方加密标准:数据加密标准(Data Encryption Standard,简称DES)

1784 数据加密(续) DBMS中的数据加密 有些数据库产品提供了数据加密例行程序 有些数据库产品本身未提供加密程序,但提 供了接口

1785 数据加密(续) 数据加密功能通常也作为可选特征,允许用户自由选择 数据加密与解密是比较费时的操作 数据加密与解密程序会占用大量系统资源
应该只对高度机密的数据加密

1786 第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施
第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施 9.5 小结

1787 9.3 统计数据库安全性 统计数据库的特点 允许用户查询聚集类型的信息(例如合计、平均值等) 不允许查询单个记录信息
9.3 统计数据库安全性 统计数据库的特点 允许用户查询聚集类型的信息(例如合计、平均值等) 不允许查询单个记录信息 例:允许查询“程序员的平均工资是多少?” 不允许查询“程序员张勇的工资?”

1788 统计数据库安全性(续) 统计数据库中特殊的安全性问题 隐蔽的信息通道 从合法的查询中推导出不合法的信息

1789 统计数据库安全性(续) 例1:下面两个查询都是合法的: 1.本公司共有多少女高级程序员? 2.本公司女高级程序员的工资总额是多少?
如果第一个查询的结果是“1”, 那么第二个查询的结果显然就是这个程序员的工 资数。 规则1:任何查询至少要涉及N(N足够大)个以上的记录

1790 统计数据库安全性(续) 例2:用户A发出下面两个合法查询: 规则2:任意两个查询的相交数据项不能超过M个
1.用户A和其他N个程序员的工资总额是多少? 2.用户B和其他N个程序员的工资总额是多少? 若第一个查询的结果是X,第二个查询的结果是Y, 由于用户A知道自己的工资是Z, 那么他可以计算出用户B的工资=Y-(X-Z)。 原因:两个查询之间有很多重复的数据项 规则2:任意两个查询的相交数据项不能超过M个

1791 统计数据库安全性(续) A至少需要进行1+(N-2)/M次查询 规则3:任一用户的查询次数不能超过1+(N-2)/M
可以证明,在上述两条规定下,如果想获知用户B的工资额 A至少需要进行1+(N-2)/M次查询 规则3:任一用户的查询次数不能超过1+(N-2)/M 如果两个用户合作查询就可以使这一规定失效

1792 统计数据库安全性(续) 数据库安全机制的设计目标: 试图破坏安全的人所花费的代价 >> 得到的利益

1793 第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施
第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施 9.5 小结

1794 ORACLE的安全措施: 9.4 Oracle数据库的安全性措施 用户标识和鉴定 授权和检查机制 审计技术
用户通过触发器灵活定义自己的安全性措施

1795 一、ORACLE的用户标识和鉴定 ORACLE允许用户重复标识三次 如果三次仍未通过,系统自动退出

1796 二、ORACLE的授权与检查机制 ORACLE授权和检查机制的特色 ORACLE的权限包括系统权限和数据库对象的权限 采用非集中式的授权机制
每个用户授予与回收自己创建的数据库对象的权限 DBA负责授予与回收系统权限,也可以授予与回收所有数据库对象的权限 允许重复授权,即可将某一权限多次授予同一用户,系统不会出错 允许无效回收,即用户不具有某权限,但回收此权限的操作仍是成功的。

1797 1.系统权限 80多种系统权限 创建会话 创建表 创建视图 创建用户

1798 系统权限(续) DBA在创建一个用户时需要将其中的一些权限授予该用户 角色 一组系统权限的集合,目的在于简化权限管理。
ORACLE允许DBA定义角色 ORACLE提供的预定义角色 CONNECT RESOURCE DBA

1799 系统权限(续) CONNECT角色 允许用户登录数据库并执行数据查询和操纵 ALTER TABLE CREATE VIEW / INDEX
DROP TABLE / VIEW / INDEX GRANT, REVOKE INSERT, UPDATE, DELETE SELETE AUDIT / NOAUDIT

1800 系统权限(续) RESOURCE角色 允许用户建表,即执行CREATE TABLE操作
由于创建表的用户将拥有该表,因此他具有 对该表的任何权限

1801 系统权限(续) DBA角色 允许用户执行授权命令,建表,对任何表的 数据进行操纵。

1802 系统权限(续) 例:DBA建立一用户U12后,欲将ALTER TABLE、CREATE VIEW、CREATE INDEX、DROP TABLE、DROP VIEW、DROP INDEX, GRANT,REVOKE、INSERT 、SELETE、UPDATE、DELETE、AUDIT、NOAUDIT等系统权限授予U12    GRANT CONNECT TO U12; 这样就可以省略十几条GRANT语句

1803 ORACLE的授权与检查机制(续) ORACLE的权限 系统权限 数据库对象的权限

1804 2.数据库对象的权限 ORACLE可以授权的数据库对象 基本表 视图 序列 同义词 存储过程 函数

1805 数据库对象的权限(续) 基本表的安全性级别 表级 行级 列级

1806 数据库对象的权限(续) 表级权限 DELETE:删除表记录 INDEX: 在表上建索引 INSERT: 向表中插入数据记录
ALTER: 修改表定义 DELETE:删除表记录 INDEX: 在表上建索引 INSERT: 向表中插入数据记录 SELECT:查找表中记录 UPDATE:修改表中的数据 ALL: 上述所有权限

1807 数据库对象的权限(续) 表级授权使用GRANT/REVOKE语句 例: GRANT SELECT ON SC TO U12;

1808 数据库对象的权限(续) 行级安全性 ORACLE行级安全性由视图间接实现

1809 数据库对象的权限(续) 例:用户U1只允许用户U12查看自己创建的Student表中有关信息系学生的信息,则首先创建视图信息系学生视图S_IS: CREATE VIEW S_IS AS SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student WHERE Sdept='IS'; 然后将关于该视图的SELECT权限授予U12用户: GRANT SELECT ON S_IS TO U12;

1810 数据库对象的权限(续) 列级安全性 实现方法 由视图间接实现 直接在基本表上定义

1811 数据库对象的权限(续) 列级安全性(续) 借助视图实现列级安全性 GRANT SELECT ON S_V TO U12;
CREATE VIEW S_V AS SELECT Sno.Sname FROM Student; GRANT SELECT ON S_V TO U12;

1812 数据库对象的权限(续) 列级安全性(续) 直接在基本表上定义列级安全性
例:GRANT UPDATE(Sno,Cno) ON SC TO U12;

1813 数据库对象的权限(续) 上一级对象的权限制约下一级对象的权限 例:当一个用户拥有了对某个表的UPDATE权限 相当于在表的所有列了都拥有

1814 数据库对象的权限(续) U1 ───→ U2 ───→ U3 ───→ U4 ORACLE对数据库对象的权限采用分散控制方式
允许具有WITH GRANT OPTION的用户把相应权限或其子集传递授予其他用户 ORACLE不允许循环授权    U1 ───→ U2 ───→ U3 ───→ U4 ↑ │ └───────×─────────┘

1815 ORACLE的授权与检查机制(续) ORACLE的权限信息记录在数据字典中 当用户进行数据库操作时 ORACLE首先根据数据字典中的权限信息, 检查操作的合法性

1816 ORACLE的安全措施: 9.4 Oracle数据库的安全性措施 用户标识和鉴定 授权和检查机制 审计技术
用户通过触发器灵活定义自己的安全性措施

1817 三、ORACLE的审计技术 审计分类 用户级审计 系统级审计

1818 三、ORACLE的审计技术 用户级审计 由用户设置 用户针对自己创建的数据库表或视图进行审计 审计内容
所有用户对这些表或视图的一切成功和/或不成功的访问要求 所有用户对这些表或视图的各类SQL操作

1819 ORACLE的审计技术(续) 系统级审计 DBA设置 审计对象和内容 成功或失败的登录要求 GRANT和REVOKE操作
其他数据库级权限下的操作

1820 ORACLE的审计设置 AUDIT:设置审计功能 例: AUDIT ALTER,UPDATE ON SC; 对哪些表进行审计
可以自由设置 AUDIT:设置审计功能 例: AUDIT ALTER,UPDATE ON SC; NOAUDIT:取消审计功能 例: NOAUDIT ALL ON SC; 对哪些表进行审计 对哪些操作进行审计

1821 ORACLE的审计技术(续) 与审计功能有关的数据字典表 SYS.TABLES:审计设置 SYS.AUDIT_TRAIL:审计内容
SYSTEM.AUDIT_ACTION

1822 ORACLE的审计技术(续) SYS.TABLES: TAB$NAME: 表名;
TAB$OWNER:表的拥有者(即创建者)TAB$AUDIT: 审计设置

1823 ORACLE的安全措施: 9.4 Oracle数据库的安全性措施 用户标识和鉴定 授权和检查机制 审计技术
用户通过触发器灵活定义自己的安全性措施

1824 四、用户定义的安全性措施 用数据库级触发器定义用户级安全性 例:规定只能在工作时间内更新Student表 可以定义如下触发器:

1825 用户定义的安全性措施(续) RAISE_APPLICATION_ERROR(-20506, 'You may
CREATE OR REPLACE TRIGGER secure_student BEFORE INSERT OR UPDATE OR DELETE ON Student BEGIN IF (TO_CHAR(sysdate,'DY') IN ('SAT','SUN')) OR (TO_NUMBER(sysdate,'HH24') NOT BETWEEN 8 AND 17) THEN RAISE_APPLICATION_ERROR(-20506, 'You may only change data during normal business hours.') END IF; END;

1826 用户定义的安全性措施(续) 触发器存放在数据字典中 用户每次对Student表执行INSERT、 UPDATE或DELETE自动触发该触发器
系统检查当时的系统时间,如是周六或周日, 或者不是8点至17点,系统会拒绝执行用户 的更新操作,并提示出错信息。

1827 用户定义的安全性措施(续) 利用触发器进一步细化审计规则,使审计操作的粒度更细

1828 第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施
第九章 数据库安全性 9.1 计算机安全性概论 9.2 数据库安全性控制 9.3 统计数据库安全性 9.4 Oracle数据库的安全性措施 9.5 小结

1829 9.5 小结 随着计算机网络的发展,数据的共享日益加强, 数据的安全保密越来越重要
9.5 小结 随着计算机网络的发展,数据的共享日益加强, 数据的安全保密越来越重要 DBMS是管理数据的核心,因而其自身必须具 有一整套完整而有效的安全性机制。

1830 小结(续) 《可信计算机系统评测标准》TCSEC/TDI是目 前各国所引用或制定的一系列安全标准中最重 要的一个。

1831 小结(续) 实现数据库系统安全性的技术和方法有多种,最重要的是存取控制技术和审计技术。
目前许多大型DBMS 达到了C2级,其安全版本达到了B1 C2级的DBMS必须具有自主存取控制功能和初步的审计功能 B1级的DBMS必须具有强制存取控制和增强的审计功能 自主存取控制功能一般是通过SQL 的GRANT语句和REVOKE语句来实现的

1832 下课了。。。 休息一会儿。。。

1833 An Introduction to Database System
数据库系统概论 An Introduction to Database System 第十章 数据库完整性 中国人民大学信息学院计算机系

1834 第十章 数据库完整性 什么是数据库的完整性 数据的正确性和相容性 防止不合语义的数据进入数据库。 完整性:否真实地反映现实世界
第十章 数据库完整性 什么是数据库的完整性 数据的正确性和相容性 防止不合语义的数据进入数据库。 例: 学生的年龄必须是整数,取值范围为14--29; 学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的系; 完整性:否真实地反映现实世界

1835 完整性控制机制 1.完整性约束条件定义机制 2.完整性检查机制 3.违约反应

1836 完整性约束条件定义 完整性约束条件:数据模型的组成部分 约束数据库中数据的语义
DBMS应提供定义数据库完整性约束条件, 并把它们作为模式的一部分存入数据库 中

1837 完整性控制机制 检查用户发出的操作请求是否违背了完整性约束条件

1838 违约反应 如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。

1839 第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结

1840 完整性约束条件(续) 完整性约束条件作用的对象 列:对属性的取值类型、范围、精度等的约束条件 元组:对元组中各个属性列间的联系的约束
关系:对若干元组间、关系集合上以及关系之间的联系的约束

1841 完整性约束条件(续) 静态 对静态对象的约束是反映数据库状态合理性的约束 动态 对动态对象的约束是反映数据库状态变迁的约束

1842 完整性约束条件分类 六类完整性约束条件 静态列级约束 静态元组约束 静态关系约束 动态列级约束 动态元组约束 动态关系约束

1843 完整性约束条件(续) 对象状态 动态列级约束 动态元组约束 动态关系约束 动态 ④ ⑤ ⑥ 静态列级约束 静态元组约束 静态关系约束
动态列级约束 动态元组约束 动态关系约束 动态 ④ ⑤ ⑥ 静态列级约束 静态元组约束 静态关系约束 静态 ① ② ③ 列 元组 关系 对象粒度

1844 完整性约束条件(续) 1. 静态列级约束 静态列级约束:对的取值域的说明 最常见、最简单、最容易实现的一类完整性约束

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

1846 完整性约束条件(续) 3) 取值范围或取值集合的约束 例:规定成绩的取值范围为0-100 年龄的取值范围为14-29
性别的取值集合为[男,女] 4) 对空值的约束 空值:未定义或未知的值 空值:与零值和空格不同 有的列允许空值,有的则不允许,如成绩可为空值 5) 其他约束 例:关于列的排序说明,组合列等

1847 2. 静态元组约束 完整性约束条件(续) 规定元组的各个列之间的约束关系 静态元组约束只局限在元组上 例:订货关系中发货量<=订货量
教师关系中教授的工资>=700元 静态元组约束只局限在元组上

1848 完整性约束条件(续) 3. 静态关系约束 关系的各个元组之间或若干关系之间存在的各 种联系或约束 常见静态关系约束: 1) 实体完整性约束
2) 参照完整性约束 3) 函数依赖约束 4) 统计约束

1849 函数依赖约束 关系字段间存在的函数依赖 例:在学生-课程-教师关系 SJT(S,J,T) 的函数依赖: ( (S,J)→T, T→J )

1850 统计约束 定义某个字段值一个关系多个元组的统计值之间的约束关系 例:职工平均工资的2倍<=部门经理的工资<= 职工平均工资的5倍
职工平均工资值: 统计值

1851 完整性约束条件(续) 4. 动态列级约束 动态列级约束是修改列定义或列值时应满足的约束条件

1852 完整性约束条件(续) 1) 修改列定义时的约束 2) 修改列值时的约束 修改列值时新旧值之间要满足的约束条件
例:将原来允许空值的列改为不允许空值时: 该列目前已存在空值,则拒绝这种修改 2) 修改列值时的约束 修改列值时新旧值之间要满足的约束条件 例:职工工资调整 >= 原来工资 年龄只能增长

1853 完整性约束条件(续) 5. 动态元组约束 修改元组值: 各个字段之间要满足的约束条件 例: 职工工资调整不得低于其原来工资 + 工龄*1.5

1854 完整性约束条件(续) 6. 动态关系约束 关系变化前后状态:限制条件 例:事务一致性、原子性等约束条件

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

1856 第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结

1857 10.2 完整性控制 一、DBMS的完整性控制机制 二、关系系统三类完整性的实现 三、参照完整性的实现

1858 一、DBMS的完整性控制机制 1. 定义功能 一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。

1859 DBMS的完整性控制机制(续) 2. 检查功能 语句执行完后立即检查是否违背完整性约束
立即执行的约束(Immediate constraints) 语句执行完后立即检查是否违背完整性约束 延迟执行的约束(Deferred constrainsts) 完整性检查延迟到整个事务执行结束后 进行

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

1861 DBMS的完整性控制机制(续) 3. 违约反应 拒绝该操作 其他处理方法

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

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

1864 DBMS的完整性控制机制(续) 例2:在“教授工资不得低于1000元”的约束中 D 约束作用的对象为工资Sal属性 O 插入或修改职工元组时
A Sal不能小于1000 C 职称=′教授′ (A仅作用于职称=‘教授’的记录) P 拒绝执行该操作

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

1866 三、参照完整性的实现 RDBMS实现参照完整性时需要考虑以下4方面: 例:职工-部门数据库包含职工表EMP和部门表DEPT
1 DEPT关系的主码为部门号Deptno 2 EMP关系的主码为职工号Empno, 外码为部门号Deptno 称DEPT为被参照关系或目标关系,EMP为参照关系 RDBMS实现参照完整性时需要考虑以下4方面:

1867 外码是否能够取空值:依赖于应用环境的语义 实现参照完整性:
1. 外码是否可以接受空值的问题 外码是否能够取空值:依赖于应用环境的语义 实现参照完整性: 系统提供定义外码的机制 定义外码列是否允许空值的机制

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

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

1870 删除被参照关系的某个元组(student) 而参照关系有若干元组(SC)的外码值与 被删除的被参照关系的主码值相同
2.在被参照关系中删除元组时的问题 出现违约操作的情形: 删除被参照关系的某个元组(student) 而参照关系有若干元组(SC)的外码值与 被删除的被参照关系的主码值相同

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

1872 级联删除 受限删除 2.在被参照关系中删除元组时的问题 将参照关系中外码值与被参照关系中要删除元 组主码值相对应的元组一起删除
当参照关系中没有任何元组的外码值与要删除 的被参照关系的元组的主码值相对应时,系统 才执行删除操作,否则拒绝此删除操作

1873 2.在被参照关系中删除元组时的问题 置空值删除 删除被参照关系的元组,并将参照关系 中与被参照关系中被删除元组主码值相 等的外码值置为空值。

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

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

1876 需要在参照关系中插入元组,而被参照关系不存在相应的元组 违约反应 受限插入 递归插入
3.在参照关系中插入元组时的问题 出现违约操作的情形 需要在参照关系中插入元组,而被参照关系不存在相应的元组 违约反应 受限插入 递归插入

1877 3.在参照关系中插入元组时的问题 受限插入 仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。 递归插入 首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。

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

1879 4. 修改被参照关系中主码的问题 两种策略 (1)不允许修改主码 (2)允许修改主码

1880 允许修改主码策略 违约操作 要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值
要修改参照关系中某些元组的主码值, 而被参照关系中没有任何元组的外码 值等于被参照关系修改后的主码值

1881 允许修改主码策略 违约反应 (1) 修改的关系是被参照关系:与删除类似 级联修改 受限修改 置空值修改

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

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

1884 允许修改主码策略 受限修改:只有SC中没有任何元组的 Sno=950001时,才能修改Student表中 Sno=950001的元组的Sno值改为960123。 置空值修改:将Student表中Sno=950001的 元组的Sno值改为960123。而将S表中所有 Sno=950001的元组的Sno值置为空值。 在学生选课数据库中只有第一种方法是正确 的。

1885 允许修改主码策略 违约反应 (2) 修改的关系是参照关系:与插入 类似 受限插入 递归插入

1886 参照完整性的实现 RDBMS在实现参照完整性时: 需要向用户提供定义主码、外码的机制
向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法

1887 第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结

1888 10.3 Oracle的完整性 一、Oracle中的实体完整性 二、Oracle中的参照完整性 三、Oracle中用户定义的完整性

1889 一、ORACLE中的实体完整性 ORACLE在CREATE TABLE语句中提供了PRIMARY KEY子句,供用户在建表时指定关系的主码列。 在列级使用PRIMARY KEY子句 在表级使用PRIMARY KEY子句

1890 ORACLE中的实体完整性(续) 例1:在学生选课数据库中,要定义Student表的Sno属性为主码
CREATE TABLE Student (Sno NUMBER(8), Sname VARCHAR(20), Sage NUMBER(20), CONSTRAINT PK_SNO PRIMARY KEY (Sno)); 或: (Sno NUMBER(8) PRIMARY KEY , Sage NUMBER(20));

1891 ORACLE中的实体完整性(续) CREATE TABLE SC 例2:要在SC表中定义(Sno, Cno)为主码
(Sno NUMBER(8), Cno NUMBER(2), Grade NUMBER(2), CONSTRAINT PK_SC PRIMARY KEY (Sno, Cno));

1892 ORACLE中的实体完整性(续) 用户程序对主码列进行更新操作时,系统自动进行完整性检查 违约操作 使主属性值为空值的操作
使主码值在表中不唯一的操作 违约反应 系统拒绝此操作,从而保证了实体完整性

1893 二、ORACLE中的参照完整性 定义参照完整性 FOREIGN KEY子句:定义外码列 REFERENCES子句:外码相应于哪个表的主码
ON DELETE CASCADE子语: 在删除被参照关系的元组时,同时删除参照关 系中 外码值等于被参照关系的元组中主码值的 元组

1894 ORACLE中的参照完整性(续) 例1:建立表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));

1895 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));

1896 ORACLE中的参照完整性(续) 这时EMP表中外码为Deptno,它相应于DEPT 表中的主码Deptno。
当要修改DEPT表中的DEPTNO值时,先要检查 EMP表中有无元组的Deptno值与之对应 若没有,系统接受这个修改操作 否则,系统拒绝此操作

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

1898 三、ORACLE中用户定义的完整性 ORACLE中定义用户完整性的两类方法 用CREATE TABLE语句在建表时定义用户完 整性约束 通过触发器来定义用户的完整性规则

1899 ORACLE中用户定义的完整性(续) 1. 用CREATE TABLE语句在建表时定义用户完整性约束 可定义三类完整性约束 列值非空(NOT NULL短语) 列值唯一(UNIQUE短语) 检查列值是否满足一个布尔表达式(CHECK短语)

1900 例1:建立部门表DEPT,要求部门名称Dname列 取值唯一,部门编号Deptno列为主码
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列值唯一。

1901 例2: 建立学生登记表Student,要求学号在 900000至999999之间,年龄<29,性别 只能是‘男’或‘女’,姓名非空
ORACLE中用户定义的完整性(续) 例2: 建立学生登记表Student,要求学号在 900000至999999之间,年龄<29,性别 只能是‘男’或‘女’,姓名非空 CREATE TABLE Student (Sno NUMBER(5) CONSTRAINT C1 CHECK (Sno BETWEEN 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 ('男', '女'));

1902 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));

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

1904 ORACLE中用户定义的完整性(续) 例4: 为教师表Teacher定义完整性规则 “教授的工资不得低于800元,如果低于800元,自动改为800元”

1905 ORACLE中用户定义的完整性(续) CREATE TRIGGER UPDATE_SAL
BEFORE INSERT OR UPDATE OF Sal, Pos ON Teacher FOR EACH ROW WHEN (:new.Pos='教授') BEGIN IF :new.sal<800 THEN :new.Sal:=800; END IF; END;

1906 Oracle完整性小结 ORACLE提供定义完整性约束条件 ORACLE自动执行相应的完整性检查 对于违反完整性约束条件的操作:
CREATE TABLE语句 CREATE TRIGGER语句 可以定义很复杂的完整性约束条件 ORACLE自动执行相应的完整性检查 对于违反完整性约束条件的操作: 拒绝执行或者执行事先定义的操作

1907 第十章 数据库完整性 10.1 完整性约束条件 10.2 完整性控制 10.3 Oracle的完整性 10.4 小结

1908 10.4 小结 数据库的完整性是为了保证数据库中存储的数据是正确的,所谓正确的是指符合现实世界语义的。 DBMS完整性实现的机制
10.4 小结 数据库的完整性是为了保证数据库中存储的数据是正确的,所谓正确的是指符合现实世界语义的。 DBMS完整性实现的机制 完整性约束定义机制 完整性检查机制 违背完整性约束条件时DBMS应采取的动作

1909 小结 完整性机制的实施会极大地影响系统性能 不同的数据库产品对完整性的支持策略和支持程度是不同的
许多数据库管理系统对完整性机制的支持比对安全性的支持要晚得多也弱得多 数据库厂商对完整性的支持越来越好,不仅在能保 证实体完整性和参照完整性而且能在DBMS核心定 义、检查和保证用户定义的完整性约束条件

1910 下课了。。。 休息一会儿。。。


Download ppt "An Introduction to Database System"

Similar presentations


Ads by Google