Download presentation
Presentation is loading. Please wait.
1
数据库系统概论 An Introduction to Database Systems
湖南城市学院数学与计算科学学院 2011年 An Introduction to Database Systems
2
An Introduction to Database Systems
教材及参考书(1) 教材 萨师煊,王珊:数据库系统概论(第四版) 高等教育出版社,2006.5 A First Course in Database Systems Jeffrey.D.Ullman, Jennifer Widom Dept. Of Computer Science Stanford University 1 教材介绍: 比较经典的数据库教材 第一版中国最早的数据库教材,为众多高校计算机专业采用 2. 萨老师介绍 创建信息系,最早系主任 中国的C J, Date 3 王老师介绍 4 数据库所介绍 An Introduction to Database Systems
3
An Introduction to Database Systems
教材及参考书(2) 参考书 Date C J, An Introduction to Database System (Ed.7), Addison-Wesley,2000 上机软件 KingBase ES 教学版 系统可以从人大金仓公司的网站 An Introduction to Database Systems
4
An Introduction to Database Systems
学习方式 听课 (启发式、讨论式) 读书 (预习、复习) 报告 (综合练习) An Introduction to Database Systems
5
An Introduction to Database Systems
考试成绩 平时成绩 (书面作业、上机练习、综合练习) 期中考试 期末考试 An Introduction to Database Systems
6
An Introduction to Database Systems
内容安排(1) 基础篇 第一章 绪论 第二章 关系数据库 第三章 关系数据库标准语言SQL 第四章 数据库安全性 第五章 数据库完整性 设计与应用开发篇 第六章 关系数据理论数据库设计 第七章 数据库设计 第八章 数据库编程 与一些教材的区别 偏重理论,不去讨论某个系统的具体使用方法,但会涉及实现技术 我们的优势 虽然枯燥,但适应DBA的需要 不过时 An Introduction to Database Systems
7
An Introduction to Database Systems
内容安排(2) 系统篇 第九章 关系查询处理和查询优化 第十章 数据库恢复技术 第十一章 并发控制 * 第十二章 数据库管理系统 第一至第十一章是本科专业的基本教程(书中有*号的部分除外) 第十二至第十七章是高级教程 An Introduction to Database Systems
8
数据库系统概论 第一章 绪论 An Introduction to Database Systems
第一章 绪论 An Introduction to Database Systems
9
An Introduction to Database Systems
第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 小结 An Introduction to Database Systems
10
An Introduction to Database Systems
数据库的地位 数据库技术产生于六十年代末,是数据管理的最新技术,是计算机科学的重要分支。 数据库技术是信息系统的核心和基础,它的出现极大地促进了计算机应用向各行各业的渗透。 数据库的建设规模、数据库信息量的大小和使用频度已成为衡量一个国家信息化程度的重要标志。 An Introduction to Database Systems
11
An Introduction to Database Systems
第一章 绪论 1.1 数据库系统概述 1.1.1 四个基本概念 1.1.2 数据管理技术的产生和发展 数据库系统的特点 An Introduction to Database Systems
12
An Introduction to Database Systems
四个基本概念 数据(Data) 数据库(Database) 数据库管理系统(DBMS) 数据库系统(DBS) An Introduction to Database Systems
13
An Introduction to Database Systems
一、数据 数据(Data)是数据库中存储的基本对象 数据的定义 描述事物的符号记录 数据的种类 文本、图形、图像、音频、视频、学生的档案记录、货物的运输情况等 数据的特点 数据与其语义是不可分的 An Introduction to Database Systems
14
An Introduction to Database Systems
数据举例 数据的含义称为数据的语义,数据与其语义是不可分的。 例如 93是一个数据 语义1:学生某门课的成绩 语义2:某人的体重 语义3:计算机系2003级学生人数 语义4:请同学给出。。。 An Introduction to Database Systems
15
An Introduction to Database Systems
数据举例 学生档案中的学生记录 (李明,男,197205,江苏南京市,计算机系,1990) 语义:学生姓名、性别、出生年月、籍贯、所在院系、 入学时间 解释:李明是个大学生,1972年5月出生,江苏南京市人,1990年考入计算机系 请给出另一个解释和语义 An Introduction to Database Systems
16
An Introduction to Database Systems
二、数据库 数据库的定义 数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库的基本特征 数据按一定的数据模型组织、描述和储存 可为各种用户共享 冗余度较小 数据独立性较高 易扩展 An Introduction to Database Systems
17
An Introduction to Database Systems
三、数据库管理系统 什么是DBMS 位于用户与操作系统之间的一层数据管理软件。 是基础软件,是一个大型复杂的软件系统 DBMS的用途 科学地组织和存储数据、高效地获取和维护数据 An Introduction to Database Systems
18
An Introduction to Database Systems
数据库在计算机系统中的位置 协同软件 办公软件 软件产品 应用软件平台 中间件 应用服务器 软件基础构架平台 基础软件平台 数据库系统 操作系统 硬件平台 An Introduction to Database Systems
19
An Introduction to Database Systems
DBMS的主要功能 数据定义功能 提供数据定义语言(DDL) 定义数据库中的数据对象 数据组织、存储和管理 分类组织、存储和管理各种数据 确定组织数据的文件结构和存取方式 实现数据之间的联系 提供多种存取方法提高存取效率 An Introduction to Database Systems
20
An Introduction to Database Systems
DBMS的主要功能 数据操纵功能 提供数据操纵语言(DML) 实现对数据库的基本操作 (查询、插入、删除和修改) 数据库的事务管理和运行管理 数据库在建立、运行和维护时由DBMS统一管理和控制 保证数据的安全性、完整性、多用户对数据的并发使用 发生故障后的系统恢复 An Introduction to Database Systems
21
An Introduction to Database Systems
DBMS的主要功能 数据库的建立和维护功能(实用程序) 数据库初始数据装载转换 数据库转储 介质故障恢复 数据库的重组织 性能监视分析等 其它功能 DBMS与网络中其它软件系统的通信 两个DBMS系统的数据转换 异构数据库之间的互访和互操作 An Introduction to Database Systems
22
An Introduction to Database Systems
四、数据库系统 什么是数据库系统(Database System,简称DBS) 在计算机系统中引入数据库后的系统构成 数据库系统的构成 数据库 数据库管理系统(及其开发工具) 应用系统 数据库管理员 An Introduction to Database Systems
23
An Introduction to Database Systems
用户 用户 用户 应用系统 应用开发工具 数据库管理系统 数据库管理员 操作系统 数据库 数据库系统 An Introduction to Database Systems
24
An Introduction to Database Systems
1.1 数据库系统概述 1.1.1 四个基本概念 1.1.2 数据管理技术的产生和发展 数据库系统的特点 An Introduction to Database Systems
25
An Introduction to Database Systems
数据管理技术的产生和发展 什么是数据管理 对数据进行分类、组织、编码、存储、检索和维护 数据处理的中心问题 数据管理技术的发展过程 人工管理阶段(20世纪40年代中--50年代中) 文件系统阶段(20世纪50年代末--60年代中) 数据库系统阶段(20世纪60年代末--现在) An Introduction to Database Systems
26
An Introduction to Database Systems
数据管理技术的产生和发展(续) 数据管理技术的发展动力 应用需求的推动 计算机硬件的发展 计算机软件的发展 An Introduction to Database Systems
27
An Introduction to Database Systems
一、人工管理阶段 时期 20世纪40年代中--50年代中 产生的背景 应用需求 科学计算 硬件水平 无直接存取存储设备 软件水平 没有操作系统 处理方式 批处理 An Introduction to Database Systems
28
An Introduction to Database Systems
人工管理阶段(续) 特点 数据的管理者:用户(程序员),数据不保存 数据面向的对象:某一应用程序 数据的共享程度:无共享、冗余度极大 数据的独立性:不独立,完全依赖于程序 数据的结构化:无结构 数据控制能力:应用程序自己控制 An Introduction to Database Systems
29
应用程序与数据的对应关系(人工管理阶段)
应用程序1 数据集1 应用程序2 数据集2 应用程序n 数据集n ...… 人工管理阶段应用程序与数据之间的对应关系 An Introduction to Database Systems
30
An Introduction to Database Systems
二、文件系统阶段 时期 20世纪50年代末--60年代中 产生的背景 应用需求 科学计算、管理 硬件水平 磁盘、磁鼓 软件水平 有文件系统 处理方式 联机实时处理、批处理 An Introduction to Database Systems
31
An Introduction to Database Systems
文件系统阶段(续) 特点 数据的管理者:文件系统,数据可长期保存 数据面向的对象:某一应用程序 数据的共享程度:共享性差、冗余度大 数据的结构化:记录内有结构,整体无结构 数据的独立性:独立性差,数据的逻辑结构改变必须 修改应用程序 数据控制能力:应用程序自己控制 数据独立性差: 1。靠程序定义和解释数据的结构 2。靠程序描述数据间的联系 An Introduction to Database Systems
32
应用程序与数据的对应关系(文件系统阶段)
应用程序1 文件1 应用程序2 文件2 应用程序n 文件n 存取方法 ...… 文件系统阶段应用程序与数据之间的对应关系 An Introduction to Database Systems
33
An Introduction to Database Systems
文件系统中数据的结构 记录内有结构。 数据的结构是靠程序定义和解释的。 数据只能是定长的。 可以间接实现数据变长要求,但访问相应数据的应用程序复杂了。 文件间是独立的,因此数据整体无结构。 可以间接实现数据整体的有结构,但必须在应用程序中对描述数据间的联系。 数据的最小存取单位是记录。 An Introduction to Database Systems
34
An Introduction to Database Systems
三、数据库系统阶段 时期 20世纪60年代末以来 产生的背景 应用背景 大规模管理 硬件背景 大容量磁盘、磁盘阵列 软件背景 有数据库管理系统 处理方式 联机实时处理,分布处理,批处理 An Introduction to Database Systems
35
An Introduction to Database Systems
1.1 数据库系统概述 1.1.1 四个基本概念 1.1.2 数据管理技术的产生和发展 数据库系统的特点 An Introduction to Database Systems
36
An Introduction to Database Systems
数据库系统的特点 数据结构化 数据的共享性高,冗余度低,易扩充 数据独立性高 数据由DBMS统一管理和控制 An Introduction to Database Systems
37
An Introduction to Database Systems
数据结构化 整体数据的结构化是数据库的主要特征之一 整体结构化 不再仅仅针对某一个应用,而是面向全组织 不仅数据内部结构化,整体是结构化的,数据之间具有联系 数据库中实现的是数据的真正结构化 数据的结构用数据模型描述,无需程序定义和解释 数据可以变长 数据的最小存取单位是数据项 An Introduction to Database Systems
38
An Introduction to Database Systems
数据的共享性高,冗余度低,易扩充 数据库系统从整体角度看待和描述数据,数据面向整个系统,可以被多个用户、多个应用共享使用。 数据共享的好处 减少数据冗余,节约存储空间 避免数据之间的不相容性与不一致性 使系统易于扩充 An Introduction to Database Systems
39
An Introduction to Database Systems
数据独立性高 物理独立性 指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。当数据的物理存储改变了,应用程序不用改变。 逻辑独立性 指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,用户程序也可以不变。 数据独立性是由DBMS的二级映像功能来保证的 An Introduction to Database Systems
40
An Introduction to Database Systems
数据由DBMS统一管理和控制 DBMS提供的数据控制功能 (1)数据的安全性(Security)保护 保护数据,以防止不合法的使用造成的数据的泄密和破坏。 (2)数据的完整性(Integrity)检查 将数据控制在有效的范围内,或保证数据之间满足一定的关系。 (3)并发(Concurrency)控制 对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。 (4)数据库恢复(Recovery) 将数据库从错误状态恢复到某一已知的正确状态。 An Introduction to Database Systems
41
An Introduction to Database Systems
应用程序与数据的对应关系(数据库系统) DBMS 应用程序1 应用程序2 数据库 … 数据库系统阶段应用程序与数据之间的对应关系 An Introduction to Database Systems
42
An Introduction to Database Systems
第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 小结 An Introduction to Database Systems
43
An Introduction to Database Systems
1.2 数据模型 两大类数据模型 数据模型的组成要素 概念模型 最常用的数据模型 层次模型 网状模型 关系模型 An Introduction to Database Systems
44
An Introduction to Database Systems
数据模型 在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。 通俗地讲数据模型就是现实世界的模拟。 数据模型应满足三方面要求 能比较真实地模拟现实世界 容易为人所理解 便于在计算机上实现 An Introduction to Database Systems
45
An Introduction to Database Systems
两大类数据模型 数据模型分为两类(分属两个不同的层次) (1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计。 (2) 逻辑模型和物理模型 逻辑模型主要包括网状模型、层次模型、关系模型、面向对象模型等,按计算机系统的观点对数据建模,用于DBMS实现。 物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。 An Introduction to Database Systems
46
An Introduction to Database Systems
两大类数据模型 (续) 客观对象的抽象过程---两步抽象 现实世界中的客观对象抽象为概念模型; 把概念模型转换为某一DBMS支持的数据模型。 An Introduction to Database Systems
47
An Introduction to Database Systems
两大类数据模型 (续) 现实世界 认识 抽象 现实世界 概念模型 数据库设计人员完成 概念模型 信息世界 概念模型 逻辑模型 数据库设计人员完成 DBMS支持的数据模型 逻辑模型 物理模型 由DBMS完成 机器世界 现实世界中客观对象的抽象过程 An Introduction to Database Systems
48
An Introduction to Database Systems
1.2 数据模型 两大类数据模型 数据模型的组成要素 概念模型 最常用的数据模型 层次模型 网状模型 关系模型 An Introduction to Database Systems
49
An Introduction to Database Systems
1.2.2 数据模型的组成要素 数据结构 数据操作 完整性约束条件 An Introduction to Database Systems
50
An Introduction to Database Systems
一、 数据结构 什么是数据结构 描述数据库的组成对象,以及对象之间的联系 描述的内容 与数据类型、内容、性质有关的对象 与数据之间联系有关的对象 数据结构是对系统静态特性的描述 An Introduction to Database Systems
51
An Introduction to Database Systems
二、数据操作 数据操作 对数据库中各种对象(型)的实例(值)允许执行的 操作及有关的操作规则 数据操作的类型 查询 更新(包括插入、删除、修改) An Introduction to Database Systems
52
An Introduction to Database Systems
数据操作(续) 数据模型对操作的定义 操作的确切含义 操作符号 操作规则(如优先级) 实现操作的语言 数据操作是对系统动态特性的描述 请举例说明 An Introduction to Database Systems
53
An Introduction to Database Systems
三、数据的完整性约束条件 数据的完整性约束条件 一组完整性规则的集合。 完整性规则:给定的数据模型中数据及其联系所具有的制约和储存规则 用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。 An Introduction to Database Systems
54
An Introduction to Database Systems
数据的完整性约束条件(续) 数据模型对完整性约束条件的定义 反映和规定本数据模型必须遵守的基本的通用的完整性约束条件。例如在关系模型中,任何关系必须满足实体完整性和参照完整性两个条件。 提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。 An Introduction to Database Systems
55
An Introduction to Database Systems
1.2 数据模型 两大类数据模型 数据模型的组成要素 概念模型 最常用的数据模型 层次模型 网状模型 关系模型 An Introduction to Database Systems
56
An Introduction to Database Systems
概念模型 信息世界中的基本概念 两个实体型之间的联系 两个以上实体型之间的联系 单个实体型内的联系 概念模型的一种表示方法 一个实例 An Introduction to Database Systems
57
An Introduction to Database Systems
概念模型 概念模型的用途 概念模型用于信息世界的建模 是现实世界到机器世界的一个中间层次 是数据库设计的有力工具 数据库设计人员和用户之间进行交流的语言 对概念模型的基本要求 较强的语义表达能力 能够方便、直接地表达应用中的各种语义知识 简单、清晰、易于用户理解 An Introduction to Database Systems
58
An Introduction to Database Systems
一、信息世界中的基本概念 (1) 实体(Entity) 客观存在并可相互区别的事物称为实体。 可以是具体的人、事、物或抽象的概念。 (2) 属性(Attribute) 实体所具有的某一特性称为属性。 一个实体可以由若干个属性来刻画。 (3) 码(Key) 唯一标识实体的属性集称为码。 An Introduction to Database Systems
59
An Introduction to Database Systems
信息世界中的基本概念(续) (4) 域(Domain) 属性的取值范围称为该属性的域。 (5) 实体型(Entity Type) 用实体名及其属性名集合来抽象和刻画同类实体称为实体型 (6) 实体集(Entity Set) 同一类型实体的集合称为实体集 An Introduction to Database Systems
60
An Introduction to Database Systems
信息世界中的基本概念(续) (7) 联系(Relationship) 现实世界中事物内部以及事物之间的联系在信息世界 中反映为实体内部的联系和实体之间的联系。 实体内部的联系通常是指组成实体的各属性之间的联系 实体之间的联系通常是指不同实体集之间的联系 An Introduction to Database Systems
61
An Introduction to Database Systems
二、两个实体型之间的联系 用图形来表示两个实体型之间的这三类联系 实体型A 联系名 实体型B 1 1:1联系 n 1:n联系 m m:n联系 An Introduction to Database Systems
62
An Introduction to Database Systems
二、两个实体型之间的联系(续) 一对一联系(1:1) 实例 一个班级只有一个正班长 一个班长只在一个班中任职 定义: 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1 班级 班级-班长 班长 1 1:1联系 An Introduction to Database Systems
63
An Introduction to Database Systems
两个实体型之间的联系 (续) 一对多联系(1:n) 实例 一个班级中有若干名学生, 每个学生只在一个班级中学习 定义: 如果对于实体集A中的每一个实体,实体集B中 有n个实体(n≥0)与之联系,反之,对于实体 集B中的每一个实体,实体集A中至多只有一个 实体与之联系,则称实体集A与实体集B有一对 多联系,记为1:n 班级 组成 学生 1 n 1:n联系 An Introduction to Database Systems
64
An Introduction to Database Systems
两个实体型之间的联系 (续) 多对多联系(m:n) 实例 课程与学生之间的联系: 一门课程同时有若干个学生选修 一个学生可以同时选修多门课程 定义: 如果对于实体集A中的每一个实体,实体集B中 有n个实体(n≥0)与之联系,反之,对于实 体集B中的每一个实体,实体集A中也有m个实 体(m≥0)与之联系,则称实体集A与实体B 具有多对多联系,记为m:n 课程 选修 学生 m n m:n联系 An Introduction to Database Systems
65
An Introduction to Database Systems
三、两个以上实体型之间的联系 两个以上实体型之间一对多联系 若实体集E1,E2,...,En存在联系,对于实体集Ej(j=1,2,...,i-1,i+1,...,n)中的给定实体,最多只和Ei中的一个实体相联系,则我们说Ei与E1,E2,...,Ei-1,Ei+1,...,En之间的联系是一对多的 An Introduction to Database Systems
66
An Introduction to Database Systems
两个以上实体型之间的联系(续) 实例 课程、教师与参考书三个实体型 一门课程可以有若干个教师讲授, 使用若干本参考书, 每一个教师只讲授一门课程, 每一本参考书只供一门课程使用 课程 讲授 教师 1 m 两个以上实体型间1:n联系 参考书 n An Introduction to Database Systems
67
An Introduction to Database Systems
两个以上实体型之间的联系(续) 多个实体型间的一对一联系 两个以上实体型间的多对多联系 实例 供应商、项目、零件三个实体型 一个供应商可以供给多个项目多种零件 每个项目可以使用多个供应商供应的零件 每种零件可由不同供应商供给 供应商 供应 项目 m p 两个以上实体型间m:n联系 零件 n An Introduction to Database Systems
68
An Introduction to Database Systems
四、单个实体型内的联系 一对多联系 实例 职工实体型内部具有领导与被领导的联系 某一职工(干部)“领导”若干名职工 一个职工仅被另外一个职工直接领导 这是一对多的联系 一对一联系 请举例 职工 领导 1 n 单个实体型内部1:n联系 An Introduction to Database Systems
69
An Introduction to Database Systems
单个实体型内的联系 多对多联系 请举例 实体型1 联系名 m n 单个实体型内的m:n联系 An Introduction to Database Systems
70
An Introduction to Database Systems
五、 概念模型的一种表示方法 实体-联系方法(E-R方法) 用E-R图来描述现实世界的概念模型 E-R方法也称为E-R模型 An Introduction to Database Systems
71
An Introduction to Database Systems
E-R图 实体型 用矩形表示,矩形框内写明实体名。 属性 用椭圆形表示,并用无向边将其与相应的实体连接起来 学生 教师 学生 学号 年龄 性别 姓名 An Introduction to Database Systems
72
An Introduction to Database Systems
E-R图(续) 联系 联系本身: 用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n) An Introduction to Database Systems
73
An Introduction to Database Systems
联系的表示方法 实体型A 联系名 实体型B 1 1:1联系 n 1:n联系 m m:n联系 An Introduction to Database Systems
74
An Introduction to Database Systems
联系的表示方法示例 班级 班级-班长 班长 1 1:1联系 课程 选修 学生 m n m:n联系 组成 1:n联系 An Introduction to Database Systems
75
An Introduction to Database Systems
联系的属性 联系的属性: 联系本身也是一种实体型,也 可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来 课程 选修 学生 m n 成绩 An Introduction to Database Systems
76
An Introduction to Database Systems
六、一个实例 用E-R图表示某个工厂物资管理的概念模型 实体 仓库: 仓库号、面积、电话号码 零件 :零件号、名称、规格、单价、描述 供应商:供应商号、姓名、地址、电话号码、帐号 项目:项目号、预算、开工日期 职工:职工号、姓名、年龄、职称 An Introduction to Database Systems
77
An Introduction to Database Systems
一个实例 实体之间的联系如下: (1)一个仓库可以存放多种零件,一种零件可以存放在多个仓库中。仓库和零件具有多对多的联系。用库存量来表示某种零件在某个仓库中的数量。 (2)一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作,仓库和职工之间是一对多的联系。职工实体型中具有一对多的联系 (3)职工之间具有领导-被领导关系。即仓库主任领导若干保管员。 (4)供应商、项目和零件三者之间具有多对多的联系 An Introduction to Database Systems
78
An Introduction to Database Systems
一个实例 An Introduction to Database Systems
79
An Introduction to Database Systems
1.2 数据模型 两大类数据模型 数据模型的组成要素 概念模型 最常用的数据模型 层次模型 网状模型 关系模型 An Introduction to Database Systems
80
An Introduction to Database Systems
1.2.4 最常用的数据模型 非关系模型 层次模型(Hierarchical Model) 网状模型(Network Model) 关系模型(Relational Model) 面向对象模型(Object Oriented Model) 对象关系模型(Object Relational Model) An Introduction to Database Systems
81
An Introduction to Database Systems
1.2.5 层次模型 层次模型是数据库系统中最早出现的数据模型 层次数据库系统的典型代表是IBM公司的IMS(Information Management System)数据库管理系统 层次模型用树形结构来表示各类实体以及实体间的联系 An Introduction to Database Systems
82
An Introduction to Database Systems
一、 层次数据模型的数据结构 层次模型 满足下面两个条件的基本层次联系的集合为层次模型 1. 有且只有一个结点没有双亲结点,这个结点称为根结点 2. 根以外的其它结点有且只有一个双亲结点 层次模型中的几个术语 根结点,双亲结点,兄弟结点,叶结点 An Introduction to Database Systems
83
An Introduction to Database Systems
层次数据模型的数据结构(续) R 1 根结点 2 兄弟结点 3 叶结点 4 5 图1.16 一个层次模型的示例 An Introduction to Database Systems
84
An Introduction to Database Systems
层次数据模型的数据结构(续) 层次模型的特点: 结点的双亲是唯一的 只能直接处理一对多的实体联系 每个记录类型可以定义一个排序字段,也称为码字段 任何记录值只有按其路径查看时,才能显出它的全部意义 没有一个子女记录值能够脱离双亲记录值而独立存在 An Introduction to Database Systems
85
An Introduction to Database Systems
层次数据模型的数据结构(续) 字段 记录型系的子女结点 记录型教员的双亲结点 根结点 叶结点 叶结点 图1.17 教员学生层次数据库模型 An Introduction to Database Systems
86
An Introduction to Database Systems
层次数据模型的数据结构(续) 图1.18 教员学生层次数据库的一个值 An Introduction to Database Systems
87
An Introduction to Database Systems
二、多对多联系在层次模型中的表示 多对多联系在层次模型中的表示 用层次模型间接表示多对多联系 方法 将多对多联系分解成一对多联系 分解方法 冗余结点法 虚拟结点法 An Introduction to Database Systems
88
An Introduction to Database Systems
三、层次模型的数据操纵与完整性约束 层次模型的数据操纵 查询 插入 删除 更新 An Introduction to Database Systems
89
An Introduction to Database Systems
层次模型的数据操纵与完整性约束(续) 层次模型的完整性约束条件 无相应的双亲结点值就不能插入子女结点值 如果删除双亲结点值,则相应的子女结点值也被同时删除 更新操作时,应更新所有相应记录,以保证数据的一致性 An Introduction to Database Systems
90
An Introduction to Database Systems
四、层次数据模型的存储结构 邻接法 按照层次树前序遍历的顺序把所有记录值依次邻接存 放,即通过物理空间的位置相邻来实现层次顺序 An Introduction to Database Systems
91
An Introduction to Database Systems
层次数据模型的存储结构(续) 按邻接法存放图1.20(b)中以根记录A1为首的层次记录实例集 按邻接法存放图1.20(b) 中以根记录A1为首的层次 记录实例集 图1.20 层次数据库及其实例 … A1 A2 C8 C6 C4 B6 C9 C2 B4 C14 C7 C5 C3 B1 图1.21 邻接法 An Introduction to Database Systems
92
An Introduction to Database Systems
层次数据模型的存储结构(续) 链接法 用指引来反映数据之间的层次联系 子女-兄弟链接法 层次序列链接法 An Introduction to Database Systems
93
An Introduction to Database Systems
层次数据模型的存储结构(续) 子女-兄弟链接法 每个记录设两类指针,分别指向最左边的子女(每个记录型对应一个)和最近的兄弟 An Introduction to Database Systems
94
An Introduction to Database Systems
层次数据模型的存储结构(续) 层次序列链接法 按树的前序穿越顺序链接各记录值 An Introduction to Database Systems
95
An Introduction to Database Systems
五、层次模型的优缺点 优点 层次模型的数据结构比较简单清晰 查询效率高,性能优于关系模型,不低于网状模型 层次数据模型提供了良好的完整性支持 缺点 多对多联系表示不自然 对插入和删除操作的限制多,应用程序的编写比较复杂 查询子女结点必须通过双亲结点 由于结构严密,层次命令趋于程序化 An Introduction to Database Systems
96
An Introduction to Database Systems
1.2 数据模型 两大类数据模型 数据模型的组成要素 概念模型 最常用的数据模型 层次模型 网状模型 关系模型 An Introduction to Database Systems
97
An Introduction to Database Systems
1.2.6 网状模型 网状数据库系统采用网状模型作为数据的组织方式 典型代表是DBTG系统: 亦称CODASYL系统 70年代由DBTG提出的一个系统方案 奠定了数据库系统的基本概念、方法和技术 实际系统 Cullinet Software Inc.公司的 IDMS Univac公司的 DMS1100 Honeywell公司的IDS/2 HP公司的IMAGE An Introduction to Database Systems
98
An Introduction to Database Systems
1.网状数据模型的数据结构 网状模型 满足下面两个条件的基本层次联系的集合: 1. 允许一个以上的结点无双亲; 2. 一个结点可以有多于一个的双亲。 An Introduction to Database Systems
99
An Introduction to Database Systems
网状数据模型的数据结构(续) 表示方法(与层次数据模型相同) 实体型:用记录类型描述 每个结点表示一个记录类型(实体) 属性:用字段描述 每个记录类型可包含若干个字段 联系:用结点之间的连线表示记录类型(实体)之 间的一对多的父子联系 An Introduction to Database Systems
100
An Introduction to Database Systems
网状数据模型的数据结构(续) 网状模型与层次模型的区别 网状模型允许多个结点没有双亲结点 网状模型允许结点有多个双亲结点 网状模型允许两个结点之间有多种联系(复合联系) 网状模型可以更直接地去描述现实世界 层次模型实际上是网状模型的一个特例 An Introduction to Database Systems
101
An Introduction to Database Systems
网状数据模型的数据结构(续) 网状模型中子女结点与双亲结点的联系可以不唯一 要为每个联系命名,并指出与该联系有关的双亲记录和子女记录 R2与R3之间的联系L2 R1与R3之间的联系L1 An Introduction to Database Systems
102
An Introduction to Database Systems
网状数据模型的数据结构(续) 网状模型的例子 An Introduction to Database Systems
103
An Introduction to Database Systems
网状数据模型的数据结构(续) 多对多联系在网状模型中的表示 用网状模型间接表示多对多联系 方法: 将多对多联系直接分解成一对多联系 An Introduction to Database Systems
104
An Introduction to Database Systems
网状数据模型的数据结构(续) 例如:一个学生可以选修若干门课程,某一课程可以被多个学生选修,学生与课程之间是多对多联系 引进一个学生选课的联结记录,由3个数据项组成 学号 课程号 成绩 表示某个学生选修某一门课程及其成绩 An Introduction to Database Systems
105
An Introduction to Database Systems
网状数据模型的数据结构(续) 图1.24 学生/选课/课程的网状数据模型 An Introduction to Database Systems
106
An Introduction to Database Systems
网状数据模型的操纵与完整性约束(续) 网状数据库系统(如DBTG)对数据操纵加 了一些限制,提供了一定的完整性约束 码:唯一标识记录的数据项的集合 一个联系中双亲记录与子女记录之间是一对多联系 支持双亲记录和子女记录之间某些约束条件 An Introduction to Database Systems
107
An Introduction to Database Systems
三、网状数据模型的存储结构 关键 实现记录之间的联系 常用方法 单向链接 双向链接 环状链接 向首链接 An Introduction to Database Systems
108
An Introduction to Database Systems
网状数据模型的存储结构(续) 选课记录 学生记录 课程记录 图1.25 学生/选课/课程的网状数据库实例 An Introduction to Database Systems
109
An Introduction to Database Systems
四、网状数据模型的优缺点 优点 能够更为直接地描述现实世界,如一个结点可以有多个双亲 具有良好的性能,存取效率较高 缺点 结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握 DDL、DML语言复杂,用户不容易使用 An Introduction to Database Systems
110
An Introduction to Database Systems
1.2 数据模型 两大类数据模型 数据模型的组成要素 概念模型 最常用的数据模型 层次模型 网状模型 关系模型 An Introduction to Database Systems
111
An Introduction to Database Systems
1.2.7 关系模型 关系数据库系统采用关系模型作为数据的组织方式 1970年美国IBM公司San Jose研究室的研究员E.F.Codd首次提出了数据库系统的关系模型 计算机厂商新推出的数据库管理系统几乎都支持关系模型 An Introduction to Database Systems
112
An Introduction to Database Systems
一、关系数据模型的数据结构 在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。 属性 元组 学生登记表 学 号 姓 名 年 龄 性 别 系 名 年 级 王小明 19 女 社会学 2005 黄大鹏 20 男 商品学 张文斌 18 法律 … An Introduction to Database Systems
113
An Introduction to Database Systems
关系数据模型的数据结构(续) 关系(Relation) 一个关系对应通常说的一张表 元组(Tuple) 表中的一行即为一个元组 属性(Attribute) 表中的一列即为一个属性,给每一个属性起一个名称即属性名 An Introduction to Database Systems
114
An Introduction to Database Systems
关系数据模型的数据结构(续) 主码(Key) 表中的某个属性组,它可以唯一确定一个元组。 域(Domain) 属性的取值范围。 分量 元组中的一个属性值。 关系模式 对关系的描述 关系名(属性1,属性2,…,属性n) 学生(学号,姓名,年龄,性别,系,年级) An Introduction to Database Systems
115
An Introduction to Database Systems
关系数据模型的数据结构(续) 例1 学生、系、系与学生之间的一对多联系: 学生(学号,姓名,年龄,性别,系号,年级) 系 (系号,系名,办公地点) 例2 系、系主任、系与系主任间的一对一联系 An Introduction to Database Systems
116
An Introduction to Database Systems
关系数据模型的数据结构(续) 例3 学生、课程、学生与课程之间的多对多联系: 学生(学号,姓名,年龄,性别,系号,年级) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩) An Introduction to Database Systems
117
An Introduction to Database Systems
关系数据模型的数据结构(续) 关系必须是规范化的,满足一定的规范条件 最基本的规范条件:关系的每一个分量必须是一个不可分的数据项, 不允许表中还有表 图1.27中工资和扣除是可分的数据项 ,不符合关系模型要求 职工号 姓名 职 称 工 资 扣 除 实 发 基 本 津 贴 职务 房 租 水 电 86051 陈 平 讲 师 1305 1200 50 160 112 2283 图1.27 一个工资表(表中有表)实例 An Introduction to Database Systems
118
An Introduction to Database Systems
关系数据模型的数据结构(续) 表1.2 术语对比 关系术语 一般表格的术语 关系名 表名 关系模式 表头(表格的描述) 关系 (一张)二维表 元组 记录或行 属性 列 属性名 列名 属性值 列值 分量 一条记录中的一个列值 非规范关系 表中有表(大表中嵌有小表) An Introduction to Database Systems
119
An Introduction to Database Systems
二、关系数据模型的操纵与完整性约束 数据操作是集合操作,操作对象和操作结果都是关系 查询 插入 删除 更新 数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合 存取路径对用户隐蔽,用户只要指出“干什么”,不必详细说明“怎么干” An Introduction to Database Systems
120
An Introduction to Database Systems
关系数据模型的操纵与完整性约束(续) 关系的完整性约束条件 实体完整性 参照完整性 用户定义的完整性 An Introduction to Database Systems
121
An Introduction to Database Systems
三、关系数据模型的存储结构 实体及实体间的联系都用表来表示 表以文件形式存储 有的DBMS一个表对应一个操作系统文件 有的DBMS自己设计文件结构 An Introduction to Database Systems
122
An Introduction to Database Systems
四、关系数据模型的优缺点 优点 建立在严格的数学概念的基础上 概念单一 实体和各类联系都用关系来表示 对数据的检索结果也是关系 关系模型的存取路径对用户透明 具有更高的数据独立性,更好的安全保密性 简化了程序员的工作和数据库开发建立的工作 An Introduction to Database Systems
123
An Introduction to Database Systems
关系数据模型的优缺点(续) 缺点 存取路径对用户透明导致查询效率往往不如非 关系数据模型 为提高性能,必须对用户的查询请求进行优化 增加了开发DBMS的难度 An Introduction to Database Systems
124
An Introduction to Database Systems
第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 小结 An Introduction to Database Systems
125
An Introduction to Database Systems
1.3 数据库系统结构 从数据库管理系统角度看,数据库系统通常采用三级模式结构,是数据库系统内部的系统结构 从数据库最终用户角度看(数据库系统外部的体系结构) ,数据库系统的结构分为: 单用户结构 主从式结构 分布式结构 客户/服务器 浏览器/应用服务器/数据库服务器多层结构等 An Introduction to Database Systems
126
An Introduction to Database Systems
数据库系统结构(续) 1.3.1 数据库系统模式的概念 数据库系统的三级模式结构 1.3.3 数据库的二级映像功能与数据独立性 An Introduction to Database Systems
127
An Introduction to Database Systems
1.3.1 数据库系统模式的概念 “型” 和“值” 的概念 型(Type) 对某一类数据的结构和属性的说明 值(Value) 是型的一个具体赋值 例如 学生记录型: (学号,姓名,性别,系别,年龄,籍贯) 一个记录值: (900201,李明,男,计算机,22,江苏) An Introduction to Database Systems
128
An Introduction to Database Systems
数据库系统模式的概念(续) 模式(Schema) 数据库逻辑结构和特征的描述 是型的描述 反映的是数据的结构及其联系 模式是相对稳定的 实例(Instance) 模式的一个具体值 反映数据库某一时刻的状态 同一个模式可以有很多实例 实例随数据库中的数据的更新而变动 An Introduction to Database Systems
129
An Introduction to Database Systems
数据库系统模式的概念 (续) 例如:在学生选课数据库模式中,包含学生记录、课程记录和学生选课记录 2003年的一个学生数据库实例,包含: 2003年学校中所有学生的记录 学校开设的所有课程的记录 所有学生选课的记录 2002年度学生数据库模式对应的实例与 2003年度学生数据库模式对应的实例是不同的 An Introduction to Database Systems
130
An Introduction to Database Systems
数据库系统结构(续) 1.3.1 数据库系统模式的概念 数据库系统的三级模式结构 1.3.3 数据库的二级映像功能与数据独立性 An Introduction to Database Systems
131
An Introduction to Database Systems
1.3.2 数据库系统的三级模式结构 模式(Schema) 外模式(External Schema) 内模式(Internal Schema) An Introduction to Database Systems
132
An Introduction to Database Systems
数据库系统的三级模式结构(续) 图1.28 数据库系统的三级模式结构 An Introduction to Database Systems
133
An Introduction to Database Systems
一、模式(Schema) 模式(也称逻辑模式) 数据库中全体数据的逻辑结构和特征的描述 所有用户的公共数据视图,综合了所有用户的需求 一个数据库只有一个模式 模式的地位:是数据库系统模式结构的中间层 与数据的物理存储细节和硬件环境无关 与具体的应用程序、开发工具及高级程序设计语言无关 An Introduction to Database Systems
134
An Introduction to Database Systems
模式(续) 模式的定义 数据的逻辑结构(数据项的名字、类型、取值范围等) 数据之间的联系 数据有关的安全性、完整性要求 An Introduction to Database Systems
135
二、外模式(External Schema)
外模式(也称子模式或用户模式) 数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述 数据库用户的数据视图,是与某一应用有关的数据的逻辑表示 An Introduction to Database Systems
136
An Introduction to Database Systems
外模式(续) 外模式的地位:介于模式与应用之间 模式与外模式的关系:一对多 外模式通常是模式的子集 一个数据库可以有多个外模式。反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求 对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同 外模式与应用的关系:一对多 同一外模式也可以为某一用户的多个应用系统所使用 但一个应用程序只能使用一个外模式 An Introduction to Database Systems
137
An Introduction to Database Systems
外模式(续) 外模式的用途 保证数据库安全性的一个有力措施 每个用户只能看见和访问所对应的外模式中的数据 An Introduction to Database Systems
138
三、内模式(Internal Schema)
内模式(也称存储模式) 是数据物理结构和存储方式的描述 是数据在数据库内部的表示方式 记录的存储方式(顺序存储,按照B树结构存储, 按hash方法存储) 索引的组织方式 数据是否压缩存储 数据是否加密 数据存储记录结构的规定 一个数据库只有一个内模式 An Introduction to Database Systems
139
An Introduction to Database Systems
内模式(续) 例如学生记录,如果按堆存储,则插入一条新记录总是放在学生记录存储的最后,如右图所示 An Introduction to Database Systems
140
An Introduction to Database Systems
内模式(续) 如果按学号升序存储,则插入一条记录就要找到它应在的位置插入,如图1.29(b)所示 如果按照学生年龄聚簇存放,假如新插入的S3是16岁,则应插入的位置如图1.29(c)所示 图1.29 记录不同的存储方式示意图 An Introduction to Database Systems
141
An Introduction to Database Systems
数据库系统结构(续) 1.3.1 数据库系统模式的概念 数据库系统的三级模式结构 1.3.3 数据库的二级映像功能与数据独立性 An Introduction to Database Systems
142
An Introduction to Database Systems
1.3.3 数据库的二级映像功能与数据独立性 三级模式是对数据的三个抽象级别 二级映象在DBMS内部实现这三个抽象层次的联系和转换 外模式/模式映像 模式/内模式映像 An Introduction to Database Systems
143
An Introduction to Database Systems
一、外模式/模式映象 模式:描述的是数据的全局逻辑结构 外模式:描述的是数据的局部逻辑结构 同一个模式可以有任意多个外模式 每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系 映象定义通常包含在各自外模式的描述中 An Introduction to Database Systems
144
An Introduction to Database Systems
外模式/模式映象(续) 保证数据的逻辑独立性 当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变 应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。 An Introduction to Database Systems
145
An Introduction to Database Systems
二、模式/内模式映象 模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。 例如,说明逻辑记录和字段在内部是如何表示的 数据库中模式/内模式映象是唯一的 该映象定义通常包含在模式描述中 An Introduction to Database Systems
146
An Introduction to Database Systems
模式/内模式映象(续) 保证数据的物理独立性 当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变 应用程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性。 An Introduction to Database Systems
147
An Introduction to Database Systems
模式/内模式映象(续) 数据库模式 即全局逻辑结构是数据库的中心与关键 独立于数据库的其他层次 设计数据库模式结构时应首先确定数据库的逻辑模式 An Introduction to Database Systems
148
An Introduction to Database Systems
模式/内模式映象(续) 数据库的内模式 依赖于它的全局逻辑结构 独立于数据库的用户视图,即外模式 独立于具体的存储设备 将全局逻辑结构中所定义的数据结构及其联系按照一定的物理存储策略进行组织,以达到较好的时间与空间效率 An Introduction to Database Systems
149
An Introduction to Database Systems
模式/内模式映象(续) 数据库的外模式 面向具体的应用程序 定义在逻辑模式之上 独立于存储模式和存储设备 当应用需求发生较大变化,相应外模式不能满足其视图要求时,该外模式就得做相应改动 设计外模式时应充分考虑到应用的扩充性 An Introduction to Database Systems
150
An Introduction to Database Systems
模式/内模式映象(续) 特定的应用程序 在外模式描述的数据结构上编制的 依赖于特定的外模式 与数据库的模式和存储结构独立 不同的应用程序有时可以共用同一个外模式 数据库的二级映像 保证了数据库外模式的稳定性 从底层保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改 An Introduction to Database Systems
151
An Introduction to Database Systems
模式/内模式映象(续) 数据与程序之间的独立性,使得数据的定义和描述可以从应用程序中分离出去 数据的存取由DBMS管理 用户不必考虑存取路径等细节 简化了应用程序的编制 大大减少了应用程序的维护和修改 An Introduction to Database Systems
152
An Introduction to Database Systems
第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 小结 An Introduction to Database Systems
153
An Introduction to Database Systems
1.4 数据库系统的组成 数据库 数据库管理系统(及其开发工具) 应用系统 数据库管理员 An Introduction to Database Systems
154
An Introduction to Database Systems
数据库系统的组成(续) 硬件平台及数据库 软件 人员 An Introduction to Database Systems
155
An Introduction to Database Systems
一、硬件平台及数据库 数据库系统对硬件资源的要求 (1) 足够大的内存 操作系统 DBMS的核心模块 数据缓冲区 应用程序 An Introduction to Database Systems
156
An Introduction to Database Systems
硬件平台及数据库(续) (2) 足够大的外存 磁盘或磁盘阵列 数据库 光盘、磁带 数据备份 (3) 较高的通道能力,提高数据传送率 An Introduction to Database Systems
157
An Introduction to Database Systems
二、软件 DBMS 支持DBMS运行的操作系统 与数据库接口的高级语言及其编译系统 以DBMS为核心的应用开发工具 为特定应用环境开发的数据库应用系统 An Introduction to Database Systems
158
An Introduction to Database Systems
三、人 员 数据库管理员 系统分析员和数据库设计人员 应用程序员 用户 An Introduction to Database Systems
159
An Introduction to Database Systems
人 员(续) 不同的人员涉及不同的数据抽象级别,具有不同的数据视图,如下图所示 图1.30 各种人员的数据视图 An Introduction to Database Systems
160
An Introduction to Database Systems
1. 数据库管理员(DBA) 具体职责: 1.决定数据库中的信息内容和结构 2.决定数据库的存储结构和存取策略 3.定义数据的安全性要求和完整性约束条件 An Introduction to Database Systems
161
An Introduction to Database Systems
数据库管理员(续) 4.监控数据库的使用和运行 周期性转储数据库 数据文件 日志文件 系统故障恢复 介质故障恢复 监视审计文件 An Introduction to Database Systems
162
An Introduction to Database Systems
数据库管理员(续) 5. 数据库的改进和重组 性能监控和调优 定期对数据库进行重组织,以提高系统的性能 需求增加和改变时,数据库须需要重构造 An Introduction to Database Systems
163
An Introduction to Database Systems
2. 系统分析员和数据库设计人员 系统分析员 负责应用系统的需求分析和规范说明 与用户及DBA协商,确定系统的硬软件配置 参与数据库系统的概要设计 An Introduction to Database Systems
164
An Introduction to Database Systems
系统分析员和数据库设计人员(续) 数据库设计人员 参加用户需求调查和系统分析 确定数据库中的数据 设计数据库各级模式 An Introduction to Database Systems
165
An Introduction to Database Systems
3. 应用程序员 设计和编写应用系统的程序模块 进行调试和安装 An Introduction to Database Systems
166
An Introduction to Database Systems
4. 用户 用户是指最终用户(End User)。最终用户通过应用系统的用户接口使用数据库。 1. 偶然用户 不经常访问数据库,但每次访问数据库时往往需要不同的数据库信息 企业或组织机构的高中级管理人员 An Introduction to Database Systems
167
An Introduction to Database Systems
用户(续) 2. 简单用户 主要工作是查询和更新数据库 银行的职员、机票预定人员、旅馆总台服务员 3. 复杂用户 工程师、科学家、经济学家、科技工作者等 直接使用数据库语言访问数据库,甚至能够基于数据库管理系统的API编制自己的应用程序 An Introduction to Database Systems
168
An Introduction to Database Systems
第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 小结 An Introduction to Database Systems
169
An Introduction to Database Systems
1.5 小结 数据库系统概述 数据库的基本概念 数据管理的发展过程 数据模型 数据模型的三要素 概念模型, E-R 模型 三种主要数据库模型 An Introduction to Database Systems
170
An Introduction to Database Systems
小结(续) 数据库系统的结构 数据库系统三级模式结构 数据库系统两层映像系统结构 数据库系统的组成 An Introduction to Database Systems
171
An Introduction to Database Systems
下课了。。。 追求 休息一会儿。。。 An Introduction to Database Systems
172
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第二章 关系数据库 中国人民大学信息学院 An Introduction to Database Systems
173
An Introduction to Database Systems
关系数据库简介 提出关系模型的是美国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范式 An Introduction to Database Systems
174
An Introduction to Database Systems
第二章 关系数据库 2.1 关系数据结构及形式化定义 2.2 关系操作 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结 An Introduction to Database Systems
175
An Introduction to Database Systems
2.1 关系数据结构及形式化定义 关系 关系模式 关系数据库 An Introduction to Database Systems
176
An Introduction to Database Systems
2.1.1 关系 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二维表 从用户角度,关系模型中数据的逻辑结构是一张二维表 建立在集合代数的基础上 An Introduction to Database Systems
177
An Introduction to Database Systems
关系(续) ⒈ 域(Domain) 2. 笛卡尔积(Cartesian Product) 3. 关系(Relation) An Introduction to Database Systems
178
An Introduction to Database Systems
⒈ 域(Domain) 域是一组具有相同数据类型的值的集合。例: 整数 实数 介于某个取值范围的整数 长度指定长度的字符串集合 {‘男’,‘女’} …………….. An Introduction to Database Systems
179
2. 笛卡尔积(Cartesian Product)
给定一组域D1,D2,…,Dn,这些域中可以有相同的。 D1,D2,…,Dn的笛卡尔积为: D1×D2×…×Dn = {(d1,d2,…,dn)|diDi,i=1,2,…,n} 所有域的所有取值的一个组合 不能重复 An Introduction to Database Systems
180
An Introduction to Database Systems
笛卡尔积(续) 元组(Tuple) 笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组(Tuple) (张清玫,计算机专业,李勇)、(张清玫,计算机专业,刘晨)等都是元组 分量(Component) 笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量 张清玫、计算机专业、李勇、刘晨等都是分量 An Introduction to Database Systems
181
An Introduction to Database Systems
笛卡尔积(续) 基数(Cardinal number) 若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为: 笛卡尔积的表示方法 笛卡尔积可表示为一个二维表 表中的每行对应一个元组,表中的每列对应一个域 An Introduction to Database Systems
182
An Introduction to Database Systems
183
An Introduction to Database Systems
3. 关系(Relation) 1) 关系 D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的 关系,表示为 R(D1,D2,…,Dn) R:关系名 n:关系的目或度(Degree) An Introduction to Database Systems
184
An Introduction to Database Systems
关系(续) 2) 元组 关系中的每个元素是关系中的元组,通常用t表示。 3) 单元关系与二元关系 当n=1时,称该关系为单元关系(Unary relation) 或一元关系 当n=2时,称该关系为二元关系(Binary relation) An Introduction to Database Systems
185
An Introduction to Database Systems
关系(续) 4) 关系的表示 关系也是一个二维表,表的每行对应一个元组,表的每 列对应一个域 An Introduction to Database Systems
186
An Introduction to Database Systems
关系(续) 5)属性 关系中不同列可以对应相同的域 为了加以区分,必须对每列起一个名字,称为属性(Attribute) n目关系必有n个属性 An Introduction to Database Systems
187
An Introduction to Database Systems
关系(续) 6) 码 候选码(Candidate key) 若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码 简单的情况:候选码只包含一个属性 全码(All-key) 最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key) An Introduction to Database Systems
188
An Introduction to Database Systems
关系(续) 码(续) 主码 若一个关系有多个候选码,则选定其中一个为主码(Primary key) 主属性 候选码的诸属性称为主属性(Prime attribute) 不包含在任何侯选码中的属性称为非主属性( Non-Prime attribute) 或非码属性(Non-key attribute) An Introduction to Database Systems
189
An Introduction to Database Systems
关系(续) D1,D2,…,Dn的笛卡尔积的某个子集才有实际含义 例:表2.1 的笛卡尔积没有实际意义 取出有实际意义的元组来构造关系 关系:SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE) 假设:导师与专业:1:1, 导师与研究生:1:n 主码:POSTGRADUATE(假设研究生不会重名) SAP关系可以包含三个元组 { (张清玫,计算机专业,李勇), (张清玫,计算机专业,刘晨), (刘逸,信息专业,王敏) } An Introduction to Database Systems
190
An Introduction to Database Systems
关系(续) 7) 三类关系 基本关系(基本表或基表) 实际存在的表,是实际存储数据的逻辑表示 查询表 查询结果对应的表 视图表 由基本表或其他视图表导出的表,是虚表,不对 应实际存储的数据 An Introduction to Database Systems
191
An Introduction to Database Systems
关系(续) 8)基本关系的性质 ① 列是同质的(Homogeneous) ② 不同的列可出自同一个域 其中的每一列称为一个属性 不同的属性要给予不同的属性名 ③ 列的顺序无所谓,,列的次序可以任意交换 ④ 任意两个元组的候选码不能相同 ⑤ 行的顺序无所谓,行的次序可以任意交换 An Introduction to Database Systems
192
An Introduction to Database Systems
基本关系的性质(续) ⑥ 分量必须取原子值 这是规范条件中最基本的一条 表2.3 非规范化关系 An Introduction to Database Systems
193
An Introduction to Database Systems
2.1 关系数据结构 关系 关系模式 关系数据库 An Introduction to Database Systems
194
An Introduction to Database Systems
关系模式 1.什么是关系模式 2.定义关系模式 3. 关系模式与关系 An Introduction to Database Systems
195
An Introduction to Database Systems
1.什么是关系模式 关系模式(Relation Schema)是型 关系是值 关系模式是对关系的描述 元组集合的结构 属性构成 属性来自的域 属性与域之间的映象关系 元组语义以及完整性约束条件 属性间的数据依赖关系集合 An Introduction to Database Systems
196
An Introduction to Database Systems
2.定义关系模式 关系模式可以形式化地表示为: R(U,D,DOM,F) R 关系名 U 组成该关系的属性名集合 D 属性组U中属性所来自的域 DOM 属性向域的映象集合 F 属性间的数据依赖关系集合 An Introduction to Database Systems
197
An Introduction to Database Systems
定义关系模式 (续) 例: 导师和研究生出自同一个域——人, 取不同的属性名,并在模式中定义属性向域 的映象,即说明它们分别出自哪个域: DOM(SUPERVISOR-PERSON) = DOM(POSTGRADUATE-PERSON) =PERSON An Introduction to Database Systems
198
An Introduction to Database Systems
定义关系模式 (续) 关系模式通常可以简记为 R (U) 或 R (A1,A2,…,An) R: 关系名 A1,A2,…,An : 属性名 注:域名及属性向域的映象常常直接说明为 属性的类型、长度 An Introduction to Database Systems
199
An Introduction to Database Systems
3. 关系模式与关系 关系模式 对关系的描述 静态的、稳定的 关系 关系模式在某一时刻的状态或内容 动态的、随时间不断变化的 关系模式和关系往往统称为关系 通过上下文加以区别 An Introduction to Database Systems
200
An Introduction to Database Systems
2.1 关系数据结构 关系 关系模式 关系数据库 An Introduction to Database Systems
201
An Introduction to Database Systems
关系数据库 关系数据库 在一个给定的应用领域中,所有关系的集合构成一个关系数据库 关系数据库的型与值 An Introduction to Database Systems
202
An Introduction to Database Systems
2. 关系数据库的型与值 关系数据库的型: 关系数据库模式 对关系数据库的描述。 关系数据库模式包括 若干域的定义 在这些域上定义的若干关系模式 关系数据库的值: 关系模式在某一时刻对应的关系的集合,简称为关系数据库 An Introduction to Database Systems
203
An Introduction to Database Systems
第二章 关系数据库 2.1 关系模型概述 2.2 关系操作 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结 An Introduction to Database Systems
204
An Introduction to Database Systems
2.2.1基本关系操作 常用的关系操作 查询:选择、投影、连接、除、并、交、差 数据更新:插入、删除、修改 查询的表达能力是其中最主要的部分 选择、投影、并、差、笛卡尔基是5种基本操作 关系操作的特点 集合操作方式:操作的对象和结果都是集合,一次一集合的方式 An Introduction to Database Systems
205
An Introduction to Database Systems
2.2.2 关系数据库语言的分类 关系代数语言 用对关系的运算来表达查询要求 代表:ISBL 关系演算语言:用谓词来表达查询要求 元组关系演算语言 谓词变元的基本对象是元组变量 代表:APLHA, QUEL 域关系演算语言 谓词变元的基本对象是域变量 代表:QBE 具有关系代数和关系演算双重特点的语言 代表:SQL(Structured Query Language) An Introduction to Database Systems
206
An Introduction to Database Systems
第二章 关系数据库 2.1 关系数据结构及形式化定义 2.2 关系操作 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结 An Introduction to Database Systems
207
An Introduction to Database Systems
2.3 关系的完整性 2.3.1 关系的三类完整性约束 2.3.2 实体完整性 2.3.3 参照完整性 2.3.4 用户定义的完整性 An Introduction to Database Systems
208
An Introduction to Database Systems
关系的三类完整性约束 实体完整性和参照完整性: 关系模型必须满足的完整性约束条件 称为关系的两个不变性,应该由关系系统自动支持 用户定义的完整性: 应用领域需要遵循的约束条件,体现了具体领域中的语义约束 An Introduction to Database Systems
209
An Introduction to Database Systems
2.3 关系的完整性 2.3.1关系的三类完整性约束 2.3.2 实体完整性 2.3.3 参照完整性 2.3.4 用户定义的完整性 An Introduction to Database Systems
210
An Introduction to Database Systems
2.3.2 实体完整性 规则2.1 实体完整性规则(Entity Integrity) 若属性A是基本关系R的主属性,则属性A不能取空值 例: SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE) POSTGRADUATE: 主码(假设研究生不会重名) 不能取空值 An Introduction to Database Systems
211
An Introduction to Database Systems
实体完整性(续) 实体完整性规则的说明 (1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现 实世界的一个实体集。 (2) 现实世界中的实体是可区分的,即它们具有某种唯一性标识。 (3) 关系模型中以主码作为唯一性标识。 (4) 主码中的属性即主属性不能取空值。 主属性取空值,就说明存在某个不可标识的实体,即存在不可区 分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性 An Introduction to Database Systems
212
An Introduction to Database Systems
2.3关系的完整性 2.3.1关系的三类完整性约束 2.3.2 实体完整性 2.3.3 参照完整性 2.3.4 用户定义的完整性 An Introduction to Database Systems
213
An Introduction to Database Systems
2.3.3 参照完整性 1. 关系间的引用 2. 外码 3. 参照完整性规则 An Introduction to Database Systems
214
An Introduction to Database Systems
1. 关系间的引用 在关系模型中实体及实体间的联系都是用关系来描 述的,因此可能存在着关系与关系间的引用。 例1 学生实体、专业实体 学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名) 主码 主码 学生关系引用了专业关系的主码“专业号”。 学生关系中的“专业号”值必须是确实存在的专业的专业号 ,即专业 关系中有该专业的记录。 An Introduction to Database Systems
215
An Introduction to Database Systems
关系间的引用(续) 例2 学生、课程、学生与课程之间的多对多联系 学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩) An Introduction to Database Systems
216
An Introduction to Database Systems
关系间的引用(续) 例3 学生实体及其内部的一对多联系 学生(学号,姓名,性别,专业号,年龄,班长) “学号”是主码,“班长”是外码,它引用了本关系的“学号” “班长” 必须是确实存在的学生的学号 An Introduction to Database Systems
217
An Introduction to Database Systems
2.外码(Foreign Key) 设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码 基本关系R称为参照关系(Referencing Relation) 基本关系S称为被参照关系(Referenced Relation) 或目标关系(Target Relation) An Introduction to Database Systems
218
An Introduction to Database Systems
外码(续) [例1]:学生关系的“专业号与专业关系的主码“专业号”相对应 “专业号”属性是学生关系的外码 专业关系是被参照关系,学生关系为参照关系 An Introduction to Database Systems
219
An Introduction to Database Systems
外码(续) [例2]: 选修关系的“学号” 与学生关系的主码“学号”相对应 选修关系的“课程号”与课程关系的主码“课程号”相对应 “学号”和“课程号”是选修关系的外码 学生关系和课程关系均为被参照关系 选修关系为参照关系 An Introduction to Database Systems
220
An Introduction to Database Systems
外码(续) [例3]:“班长”与本身的主码“学号”相对应 “班长”是外码 学生关系既是参照关系也是被参照关系 An Introduction to Database Systems
221
An Introduction to Database Systems
外码(续) 关系R和S不一定是不同的关系 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上 外码并不一定要与相应的主码同名 当外码与相应的主码属于不同关系时,往往取相同的名 字,以便于识别 An Introduction to Database Systems
222
An Introduction to Database Systems
3. 参照完整性规则 规则2.2 参照完整性规则 若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为: 或者取空值(F的每个属性值均为空值) 或者等于S中某个元组的主码值 An Introduction to Database Systems
223
An Introduction to Database Systems
参照完整性规则(续) [例1]: 学生关系中每个元组的“专业号”属性只取两类值: (1)空值,表示尚未给该学生分配专业 (2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配一个不存在的专业 An Introduction to Database Systems
224
An Introduction to Database Systems
参照完整性规则(续) 〔例2〕 : 选修(学号,课程号,成绩) “学号”和“课程号”可能的取值 : (1)选修关系中的主属性,不能取空值 (2)只能取相应被参照关系中已经存在的主码值 An Introduction to Database Systems
225
An Introduction to Database Systems
参照完整性规则(续) 例3〕: 学生(学号,姓名,性别,专业号,年龄,班长) “班长”属性值可以取两类值: (1)空值,表示该学生所在班级尚未选出班长 (2)非空值,该值必须是本关系中某个元组的学号值 An Introduction to Database Systems
226
An Introduction to Database Systems
关系的完整性(续) 2.3.1关系的三类完整性约束 2.3.2 实体完整性 2.3.3 参照完整性 2.3.4 用户定义的完整性 An Introduction to Database Systems
227
An Introduction to Database Systems
2.3.4 用户定义的完整性 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能 An Introduction to Database Systems
228
An Introduction to Database Systems
用户定义的完整性(续) 例: 课程(课程号,课程名,学分) “课程号”属性必须取唯一值 非主属性“课程名”也不能取空值 “学分”属性只能取值{1,2,3,4} An Introduction to Database Systems
229
An Introduction to Database Systems
休息一会儿。。。 追求 An Introduction to Database Systems
230
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第二章 关系数据库(续) 中国人民大学信息学院 An Introduction to Database Systems
231
An Introduction to Database Systems
第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结 An Introduction to Database Systems
232
An Introduction to Database Systems
2.4 关系代数 概述 传统的集合运算 专门的关系运算 An Introduction to Database Systems
233
An Introduction to Database Systems
概 述 表2.4 关系代数运算符 运算符 含义 集合 运算 符 ∪ - ∩ × 并 差 交 笛卡尔积 比较运算符 > ≥ < ≤ = <> 大于 大于等于 小于 小于等于 等于 不等于 An Introduction to Database Systems
234
An Introduction to Database Systems
概 述(续) 表2.4 关系代数运算符(续) 运算符 含义 专门的关系运算符 σ π ÷ 选择 投影 连接 除 逻辑运算符 ∧ ∨ 非 与 或 An Introduction to Database Systems
235
An Introduction to Database Systems
2.4 关系代数 概述 传统的集合运算 专门的关系运算 An Introduction to Database Systems
236
An Introduction to Database Systems
1. 并(Union) R和S 具有相同的目n(即两个关系都有n个属性) 相应的属性取自同一个域 R∪S 仍为n目关系,由属于R或属于S的元组组成 R∪S = { t|t R∨t S } An Introduction to Database Systems
237
An Introduction to Database Systems
并(续) An Introduction to Database Systems
238
An Introduction to Database Systems
2. 差(Difference) R和S 具有相同的目n 相应的属性取自同一个域 R - S 仍为n目关系,由属于R而不属于S的所有元组组成 R -S = { t|tR∧tS } An Introduction to Database Systems
239
An Introduction to Database Systems
差(续) An Introduction to Database Systems
240
An Introduction to Database Systems
3. 交(Intersection) R和S 具有相同的目n 相应的属性取自同一个域 R∩S 仍为n目关系,由既属于R又属于S的元组组成 R∩S = { t|t R∧t S } R∩S = R –(R-S) An Introduction to Database Systems
241
An Introduction to Database Systems
交 (续) An Introduction to Database Systems
242
4. 笛卡尔积(Cartesian Product)
严格地讲应该是广义的笛卡尔积(Extended Cartesian Product) R: n目关系,k1个元组 S: m目关系,k2个元组 R×S 列:(n+m)列元组的集合 元组的前n列是关系R的一个元组 后m列是关系S的一个元组 行:k1×k2个元组 R×S = {tr ts |tr R ∧ tsS } An Introduction to Database Systems
243
An Introduction to Database Systems
交 (续) An Introduction to Database Systems
244
An Introduction to Database Systems
2.4 关系代数 概述 传统的集合运算 专门的关系运算 An Introduction to Database Systems
245
An Introduction to Database Systems
2.4.2 专门的关系运算 先引入几个记号 (1) R,tR,t[Ai] 设关系模式为R(A1,A2,…,An) 它的一个关系设为R tR表示t是R的一个元组 t[Ai]则表示元组t中相应于属性Ai的一个分量 An Introduction to Database Systems
246
An Introduction to Database Systems
专门的关系运算(续) (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}后剩余的属性组。 An Introduction to Database Systems
247
An Introduction to Database Systems
专门的关系运算(续) (3) tr ts R为n目关系,S为m目关系。 tr R,tsS, tr ts称为元组的连接。 tr ts是一个n + m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。 An Introduction to Database Systems
248
An Introduction to Database Systems
专门的关系运算(续) (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上分量的集合 An Introduction to Database Systems
249
An Introduction to Database Systems
专门的关系运算(续) x1在R中的象集 Zx1 ={Z1,Z2,Z3}, x2在R中的象集 Zx2 ={Z2,Z3}, x3在R中的象集 Zx3={Z1,Z3} 象集举例 An Introduction to Database Systems
250
An Introduction to Database Systems
专门的关系运算(续) 选择 投影 连接 除 An Introduction to Database Systems
251
An Introduction to Database Systems
专门的关系运算(续) 4) 学生-课程数据库: 学生关系Student、课程关系Course和选修关系SC Student 学号 Sno 姓名 Sname 性别 Ssex 年龄 Sage 所在系 Sdept 李勇 男 20 CS 刘晨 女 19 IS 王敏 18 MA 张立 (a) An Introduction to Database Systems
252
An Introduction to Database Systems
专门的关系运算(续) Course 课程号 Cno 课程名 Cname 先行课 Cpno 学分 Ccredit 1 数据库 5 4 2 数学 3 信息系统 操作系统 6 数据结构 7 数据处理 PASCAL语言 (b) An Introduction to Database Systems
253
An Introduction to Database Systems
专门的关系运算(续) SC 学号 Sno 课程号 Cno 成绩 Grade 1 92 2 85 3 88 90 80 (c) An Introduction to Database Systems
254
An Introduction to Database Systems
1. 选择(Selection) 1) 选择又称为限制(Restriction) 2) 选择运算符的含义 在关系R中选择满足给定条件的诸元组 σF(R) = {t|tR∧F(t)= '真'} F:选择条件,是一个逻辑表达式,基本形式为: X1θY1 An Introduction to Database Systems
255
An Introduction to Database Systems
选择(续) 3) 选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算 σ An Introduction to Database Systems
256
An Introduction to Database Systems
选择(续) [例1] 查询信息系(IS系)全体学生 σSdept = 'IS' (Student) 或 σ5 ='IS' (Student) 结果: Sno Sname Ssex Sage Sdept 刘晨 女 19 IS 张立 男 An Introduction to Database Systems
257
An Introduction to Database Systems
选择(续) [例2] 查询年龄小于20岁的学生 σSage < 20(Student) 或 σ4 < 20(Student) 结果: Sno Sname Ssex Sage Sdept 刘晨 女 19 IS 王敏 18 MA 张立 男 An Introduction to Database Systems
258
An Introduction to Database Systems
2. 投影(Projection) 1)投影运算符的含义 从R中选择出若干属性列组成新的关系 πA(R) = { t[A] | t R } A:R中的属性列 An Introduction to Database Systems
259
An Introduction to Database Systems
2. 投影(Projection) 2)投影操作主要是从列的角度进行运算 但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行) π An Introduction to Database Systems
260
An Introduction to Database Systems
投影(续) [例3] 查询学生的姓名和所在系 即求Student关系上学生姓名和所在系两个属性上的投影 πSname,Sdept(Student) 或 π2,5(Student) 结果: An Introduction to Database Systems
261
An Introduction to Database Systems
投影(续) Sname Sdept 李勇 CS 刘晨 IS 王敏 MA 张立 An Introduction to Database Systems
262
An Introduction to Database Systems
投影(续) [例4] 查询学生关系Student中都有哪些系 πSdept(Student) 结果: Sdept CS IS MA An Introduction to Database Systems
263
An Introduction to Database Systems
3. 连接(Join) 1)连接也称为θ连接 2)连接运算的含义 从两个关系的笛卡尔积中选取属性间满足一定条件的元组 R S = { | tr R∧ts S∧tr[A]θts[B] } A和B:分别为R和S上度数相等且可比的属性组 θ:比较运算符 连接运算从R和S的广义笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组 AθB tr ts An Introduction to Database Systems
264
An Introduction to Database Systems
连接(续) 3)两类常用连接运算 等值连接(equijoin) 什么是等值连接 θ为“=”的连接运算称为等值连接 等值连接的含义 从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为: R S = { | tr R∧ts S∧tr[A] = ts[B] } tr ts A=B An Introduction to Database Systems
265
An Introduction to Database Systems
连接(续) 自然连接(Natural join) 自然连接是一种特殊的等值连接 两个关系中进行比较的分量必须是相同的属性组 在结果中把重复的属性列去掉 自然连接的含义 R和S具有相同的属性组B R S = { | tr R∧ts S∧tr[B] = ts[B] } tr ts An Introduction to Database Systems
266
An Introduction to Database Systems
连接(续) 4)一般的连接操作是从行的角度进行运算。 自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。 AθB R S An Introduction to Database Systems
267
An Introduction to Database Systems
连接(续) [例5]关系R和关系S 如下所示: An Introduction to Database Systems
268
An Introduction to Database Systems
连接(续) 一般连接 R S的结果如下: C<E An Introduction to Database Systems
269
An Introduction to Database Systems
连接(续) R.B=S.B 等值连接 R S 的结果如下: An Introduction to Database Systems
270
An Introduction to Database Systems
连接(续) 自然连接 R S的结果如下: An Introduction to Database Systems
271
An Introduction to Database Systems
连接(续) 外连接 如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接(OUTER JOIN)。 左外连接 如果只把左边关系R中要舍弃的元组保留就叫做左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接 如果只把右边关系S中要舍弃的元组保留就叫做右外连接(RIGHT OUTER JOIN或RIGHT JOIN)。 An Introduction to Database Systems
272
An Introduction to Database Systems
连接(续) 下图是例5中关系R和关系S的外连接 An Introduction to Database Systems
273
An Introduction to Database Systems
连接(续) 图(b)是例5中关系R和关系S的左外连接,图(c)是右外连接 An Introduction to Database Systems
274
An Introduction to Database Systems
4. 除(Division) 给定关系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] An Introduction to Database Systems
275
An Introduction to Database Systems
除(续) 2)除操作是同时从行和列角度进行运算 ÷ R S An Introduction to Database Systems
276
An Introduction to Database Systems
除(续) [例6]设关系R、S分别为下图的(a)和(b),R÷S的结果为图(c) An Introduction to Database Systems
277
An Introduction to Database Systems
分析 在关系R中,A可以取四个值{a1,a2,a3,a4} 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} An Introduction to Database Systems
278
An Introduction to Database Systems
5.综合举例 以学生-课程数据库为例 (P56) [例7] 查询至少选修1号课程和3号课程的学生号码 首先建立一个临时关系K: 然后求:πSno,Cno(SC)÷K Cno 1 3 An Introduction to Database Systems
279
An Introduction to Database Systems
综合举例(续) 例 7续 πSno,Cno(SC) 象集{1,2,3} 象集{2,3} K={1,3} 于是:πSno,Cno(SC)÷K={ } Sno Cno 1 2 3 An Introduction to Database Systems
280
An Introduction to Database Systems
综合举例(续) [例 8] 查询选修了2号课程的学生的学号。 πSno(σCno='2'(SC)) ={ , } An Introduction to Database Systems
281
An Introduction to Database Systems
综合举例(续) [例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)) An Introduction to Database Systems
282
An Introduction to Database Systems
综合举例(续) [例10] 查询选修了全部课程的学生号码和姓名。 πSno,Cno(SC)÷πCno(Course) πSno,Sname(Student) An Introduction to Database Systems
283
An Introduction to Database Systems
小结 关系代数运算 关系代数运算 并、差、交、笛卡尔积、投影、选择、连接、除 基本运算 并、差、笛卡尔积、投影、选择 交、连接、除 可以用5种基本运算来表达 引进它们并不增加语言的能力,但可以简化表达 An Introduction to Database Systems
284
An Introduction to Database Systems
小结(续) 关系代数表达式 关系代数运算经有限次复合后形成的式子 典型关系代数语言 ISBL(Information System Base Language) 由IBM United Kingdom研究中心研制 用于PRTV(Peterlee Relational Test Vehicle)实验系统 An Introduction to Database Systems
285
An Introduction to Database Systems
第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结 An Introduction to Database Systems
286
An Introduction to Database Systems
2.5 关系演算 关系演算 以数理逻辑中的谓词演算为基础 按谓词变元不同 进行分类 1.元组关系演算: 以元组变量作为谓词变元的基本对象 元组关系演算语言ALPHA 2.域关系演算: 以域变量作为谓词变元的基本对象 域关系演算语言QBE An Introduction to Database Systems
287
An Introduction to Database Systems
2.5.1 元组关系演算语言ALPHA 由E.F.Codd提出 INGRES所用的QUEL语言是参照ALPHA语言研制的 语句 检索语句 GET 更新语句 PUT,HOLD,UPDATE,DELETE,DROP An Introduction to Database Systems
288
An Introduction to Database Systems
一、检索操作 语句格式: GET 工作空间名 [(定额)](表达式1) [:操作条件] [DOWN/UP 表达式2] 定额:规定检索的元组个数 格式: 数字 表达式1:指定语句的操作对象 格式: 关系名| 关系名. 属性名| 元组变量. 属性名| 集函数 [,… ] 操作条件:将操作结果限定在满足条件的元组中 格式: 逻辑表达式 表达式2:指定排序方式 格式: 关系名. 属性名| 元组变量. 属性名[,… ] An Introduction to Database Systems
289
An Introduction to Database Systems
一、检索操作 (1)简单检索 GET 工作空间名 (表达式1) [例1] 查询所有被选修的课程号码。 GET W (SC.Cno) [例2] 查询所有学生的数据。 GET W (Student) An Introduction to Database Systems
290
An Introduction to Database Systems
(2)限定的检索 格式 GET 工作空间名(表达式1):操作条件 [例3]查询信息系(IS)中年龄小于20岁的学生的学号和年龄 GET W (Student.Sno,Student.Sage): Student.Sdept='IS'∧ Student.Sage<20 An Introduction to Database Systems
291
An Introduction to Database Systems
(3)带排序的检索 格式 GET 工作空间名(表达式1)[:操作条件] DOWN/UP 表达式2 [例4]查询计算机科学系(CS)学生的学号、年龄,结果按年龄降 序排序 GET W (Student.Sno,Student.Sage): Student.Sdept='CS‘ DOWN Student.Sage An Introduction to Database Systems
292
An Introduction to Database Systems
(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 An Introduction to Database Systems
293
An Introduction to Database Systems
(5)用元组变量的检索 元组变量的含义 表示可以在某一关系范围内变化(也称为范围变量Range Variable) 元组变量的用途 ① 简化关系名:设一个较短名字的元组变量来代替较长的关系名。 ② 操作条件中使用量词时必须用元组变量。 定义元组变量 格式:RANGE 关系名 变量名 一个关系可以设多个元组变量 An Introduction to Database Systems
294
An Introduction to Database Systems
(6) 用存在量词的检索 操作条件中使用量词时必须用元组变量 [例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') An Introduction to Database Systems
295
An Introduction to Database Systems
用存在量词的检索(续) [例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): SCXCX (SCX.Sno=Student.Sno∧ CX.Cno=SCX.Cno∧CX.Pcno='6') An Introduction to Database Systems
296
An Introduction to Database Systems
(7)带有多个关系的表达式的检索 [例11] 查询成绩为90分以上的学生名字与课程名字。 RANGE SC SCX GET W(Student.Sname,Course.Cname): SCX (SCX.Grade≥90 ∧ SCX.Sno=Student.Sno∧ Course.Cno=SCX.Cno) An Introduction to Database Systems
297
An Introduction to Database Systems
(8)用全称量词的检索 [例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') An Introduction to Database Systems
298
An Introduction to Database Systems
(9)用两种量词的检索 [例13] 查询选修了全部课程的学生姓名。 RANGE Course CX SC SCX GET W (Student.Sname): CX SCX (SCX.Sno=Student.Sno∧ SCX.Cno=CX.Cno) An Introduction to Database Systems
299
(10)用蕴函(Implication)的检索
[例14] 查询最少选修了 学生所选课程的学生学号 RANGE Couse CX SC SCX SC SCY GET W (Student.Sno): CX(SCX (SCX.Sno=‘ '∧SCX.Cno=CX.Cno) SCY(SCY.Sno=Student.Sno∧ SCY.Cno= CX.Cno)) An Introduction to Database Systems
300
An Introduction to Database Systems
(11)聚集函数 常用聚集函数(Aggregation function)或内部函数(Build-in function) 函数名 功能 COUNT 对元组计数 TOTAL 求总和 MAX 求最大值 MIN 求最小值 AVG 求平均值 关系演算中的聚集函数 An Introduction to Database Systems
301
An Introduction to Database Systems
聚集函数(续) [例15] 查询学生所在系的数目。 GET W ( COUNT(Student.Sdept) ) COUNT函数在计数时会自动排除重复值。 [例16] 查询信息系学生的平均年龄 GET W (AVG(Student.Sage): Student.Sdept='IS’ ) An Introduction to Database Systems
302
An Introduction to Database Systems
二、更新操作 (1) 修改操作 (2) 插入操作 (3) 删除操作 An Introduction to Database Systems
303
An Introduction to Database Systems
(1)修改操作步骤 ① 用HOLD语句将要修改的元组从数据库中读到工作空间中 HOLD 工作空间名(表达式1)[:操作条件 ] HOLD语句是带上并发控制的GET语句 ② 用宿主语言修改工作空间中元组的属性 ③ 用UPDATE语句将修改后的元组送回数据库中 UPDATE 工作空间名 An Introduction to Database Systems
304
An Introduction to Database Systems
修改操作(续) [例17] 把 学生从计算机科学系转到信息系。 HOLD W (Student.Sno, Student.Sdetp): Student.Sno=‘ ' (从Student关系中读出95007学生的数据) MOVE 'IS' TO W.Sdept (用宿主语言进行修改) UPDATE W (把修改后的元组送回Student关系) An Introduction to Database Systems
305
An Introduction to Database Systems
(2)插入操作 步骤 ① 用宿主语言在工作空间中建立新元组 ② 用PUT语句把该元组存入指定关系中 PUT 工作空间名 (关系名) PUT语句只对一个关系操作,关系演算中的聚集函数 An Introduction to Database Systems
306
An Introduction to Database Systems
插入操作(续) [例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) An Introduction to Database Systems
307
An Introduction to Database Systems
(3)删除操作 步骤 ① 用HOLD语句把要删除的元组从数据库中读到工作空间中 ② 用DELETE语句删除该元组 DELETE 工作空间名 An Introduction to Database Systems
308
An Introduction to Database Systems
删除操作(续) [例19] 学生因故退学,删除该学生元组 HOLD W (Student): Student.Sno=‘ ' DELETE W An Introduction to Database Systems
309
An Introduction to Database Systems
删除操作(续) [例20] 将学号 改为 HOLD W (Student): Student.Sno=‘ ' DELETE W MOVE ‘ ' TO W.Sno MOVE '李勇' TO W.Sname MOVE '男' TO W.Ssex MOVE '20‘ TO W.Sage MOVE 'CS' TO W.Sdept PUT W (Student) An Introduction to Database Systems
310
An Introduction to Database Systems
删除操作(续) [例21] 删除全部学生 HOLD W (Student) DELETE W 为保证参照完整性 ,删除Student中元组时相应地要删除SC中的元组 HOLD W (SC) DELETE W An Introduction to Database Systems
311
An Introduction to Database Systems
小结:元组关系演算语言ALPHA 检索操作 GET GET 工作空间名 [(定额)](表达式1) [:操作条件] [DOWN/UP 表达式2] 插入操作 建立新元组--PUT 修改操作 HOLD--修改--UPDATE 删除操作 HOLD--DELETE An Introduction to Database Systems
312
An Introduction to Database Systems
2.5 关 系 演 算 元组关系演算语言ALPHA 域关系演算语言QBE An Introduction to Database Systems
313
An Introduction to Database Systems
域关系演算语言QBE 一种典型的域关系演算语言 由M.M.Zloof提出 以元组变量的分量即域变量作为谓词变元的基本对象 QBE:Query By Example 基于屏幕表格的查询语言 查询要求:以填写表格的方式构造查询 用示例元素(域变量)来表示查询结果可能的情况 查询结果:以表格形式显示 An Introduction to Database Systems
314
An Introduction to Database Systems
QBE操作框架 关系名 属性名 操作命令 元组属性值或查询条件或操作命令 An Introduction to Database Systems
315
An Introduction to Database Systems
一、检索操作 1.简单查询 [例1]求信息系全体学生的姓名 操作步骤为: (1)用户提出要求; (2)屏幕显示空白表格; An Introduction to Database Systems
316
An Introduction to Database Systems
简单查询(续) (3)用户在最左边一栏输入要查询的关系名Student; (4)系统显示该关系的属性名 Student Student Sno Sname Ssex Sage Sdept An Introduction to Database Systems
317
An Introduction to Database Systems
简单查询(续) (5)用户在上面构造查询要求 李勇是示例元素,即域变量 (6)屏幕显示查询结果 Student Sno Sname Ssex Sage Sdept P.李勇 IS Student Sno Sname Ssex Sage Sdept 李勇 张立 IS An Introduction to Database Systems
318
An Introduction to Database Systems
构造查询的几个要素 示例元素 即域变量 一定要加下划线 示例元素是这个域中可能的一个值,它不必是查询结果中的元素 打印操作符P. 实际上是显示 查询条件 可使用比较运算符>,≥,<,≤,=和≠ 其中=可以省略 An Introduction to Database Systems
319
An Introduction to Database Systems
简单查询(续) [例2] 查询全体学生的全部数据 Student Sno Sname Ssex Sage Sdept P P.李勇 P.男 P.20 P.CS An Introduction to Database Systems
320
An Introduction to Database Systems
简单查询(续) 显示全部数据也可以简单地把P.操作符作用在关系名上。 Student Sno Sname Ssex Sage Sdept P. An Introduction to Database Systems
321
An Introduction to Database Systems
2. 条件查询 [例3] 求年龄大于19岁的学生的学号 Student Sno Sname Ssex Sage Sdept P >19 An Introduction to Database Systems
322
An Introduction to Database Systems
条件查询(与条件) [例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上 Student Sno Sname Ssex Sage Sdept P >19 CS An Introduction to Database Systems
323
An Introduction to Database Systems
条件查询(与条件) 方法(2):把两个条件写在不同行上,但使用相同的示例元 素值 Student Sno Sname Ssex Sage Sdept P >19 CS An Introduction to Database Systems
324
An Introduction to Database Systems
条件查询(与条件) [例5] 查询既选修了1号课程又选修了2号课程的学生的学号。 Sc Sno Cno Grade P 1 2 An Introduction to Database Systems
325
An Introduction to Database Systems
条件查询(或条件) [例6]查询计算机科学系或者年龄大于19岁的学生的 学号。 Student Sno Sname Ssex Sage Sdept P P >19 CS An Introduction to Database Systems
326
An Introduction to Database Systems
条件查询(多表连接) [例7] 查询选修1号课程的学生姓名。 Student Sno Sname Ssex Sage Sdept P.李勇 Sc Sno Cno Grade 1 注意:示例元素Sno是连接属性,其值在两个表中要相同。 An Introduction to Database Systems
327
An Introduction to Database Systems
条件查询(非条件) [例8] 查询未选修1号课程的学生姓名 Student Sno Sname Ssex Sage Sdept P.李勇 Sc Sno Cno Grade 1 思路:显示学号为 的学生名字,而该学生选修1号课程的情况为假 An Introduction to Database Systems
328
An Introduction to Database Systems
条件查询(续) [例9] 查询有两个人以上选修的课程号。 Sc Sno Cno Grade P.1 1 思路:查询这样的课程1,它不仅被 选修 而且也被另一个学生( )选修了 An Introduction to Database Systems
329
An Introduction to Database Systems
3. 聚集函数 常用聚集函数: 函数名 功能 CNT 对元组计数 SUM 求总和 AVG 求平均值 MAX 求最大值 MIN 求最小值 QBE中的聚集函数 An Introduction to Database Systems
330
An Introduction to Database Systems
聚集函数(续) [例10] 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept P.AVG.ALL IS An Introduction to Database Systems
331
An Introduction to Database Systems
4.对查询结果排序 升序排序: 对查询结果按某个属性值的升序排序,只需在相应列中填入“AO.” 降序排序: 按降序排序则填“DO.” 多列排序: 如果按多列排序,用“AO(i).”或“DO(i).”表示,其中i为排序的优先级,i值越小,优先级越高 An Introduction to Database Systems
332
An Introduction to Database Systems
对查询结果排序(续) [例11] 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。 Student Sno Sname Ssex Sage Sdept P.李勇 男 DO(2). AO(1). An Introduction to Database Systems
333
An Introduction to Database Systems
二、更新操作 1.修改操作 [例12] 把 学生的年龄改为18岁。 方法(1) :将操作符“U.”放在值上 Student Sno Sname Ssex Sage Sdept U.18 An Introduction to Database Systems
334
An Introduction to Database Systems
修改操作(续) 方法(2): 将操作符“U.”放在关系上 码 标明要修改的元组。 “U.”标明所在的行是修改后的新值。 由于主码是不能修改的,所以系统不会混淆要修改的属性。 Student Sno Sname Ssex Sage Sdept U. 18 An Introduction to Database Systems
335
An Introduction to Database Systems
修改操作(续) [例13] 把 学生的年龄增加1岁 操作涉及表达式,必须将操作符“U.”放在关系上 Student Sno Sname Ssex Sage Sdept U. 17 17+1 An Introduction to Database Systems
336
An Introduction to Database Systems
修改操作(续) [例14] 将计算机系所有学生的年龄都增加1岁 Student Sno Sname Ssex Sage Sdept U. 18 18+1 CS An Introduction to Database Systems
337
An Introduction to Database Systems
2.插入操作 [例15] 把信息系女生 ,姓名张三,年龄 17岁存入数据库中。 Student Sno Sname Ssex Sage Sdept I. 张三 女 17 IS An Introduction to Database Systems
338
An Introduction to Database Systems
3. 删除操作 [例17] 删除学生 为保证参照完整性,删除 学生前,先删除 学生选修的全部课程 Student Sno Sname Ssex Sage Sdept D. Sc Sno Cno Grade D. An Introduction to Database Systems
339
An Introduction to Database Systems
第二章 关系数据库 2.1 关系模型概述 2.2 关系数据结构 2.3 关系的完整性 2.4 关系代数 2.5 关系演算 2.6 小结 An Introduction to Database Systems
340
An Introduction to Database Systems
2.6 小结 关系数据库系统是目前使用最广泛的数据库系统 关系数据库系统与非关系数据库系统的区别: 关系系统只有“表”这一种数据结构; 非关系数据库系统还有其他数据结构,以及对这些数据结构的操作 An Introduction to Database Systems
341
An Introduction to Database Systems
小结(续) 关系数据结构 关系 域 笛卡尔积 关系,属性,元组 候选码,主码,主属性 基本关系的性质 关系模式 关系数据库 An Introduction to Database Systems
342
An Introduction to Database Systems
小结(续) 关系操作 查询 选择、投影、连接、除、并、交、差 数据更新 插入、删除、修改 An Introduction to Database Systems
343
An Introduction to Database Systems
小结(续) 关系的完整性约束 实体完整性 参照完整性 外码 用户定义的完整性 An Introduction to Database Systems
344
An Introduction to Database Systems
小结(续) 关系数据语言 关系代数语言 关系演算语言 元组关系演算语言 ALPHA 域关系演算语言 QBE An Introduction to Database Systems
345
An Introduction to Database Systems
下课了。。。 追 求 休息一会儿。。。 An Introduction to Database Systems
346
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第三章 关系数据库标准语言SQL 中国人民大学信息学院 An Introduction to Database Systems
347
An Introduction to Database Systems
第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 An Introduction to Database Systems
348
An Introduction to Database Systems
3.1 SQL概述 SQL(Structured Query Language) 结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言 An Introduction to Database Systems
349
An Introduction to Database Systems
SQL概述(续) SQL 的产生与发展 SQL的特点 SQL的基本概念 An Introduction to Database Systems
350
An Introduction to Database Systems
SQL标准的进展过程 标准 大致页数 发布日期 SQL/ SQL/89(FIPS 127-1) 页 年 SQL/ 页 年 SQL 页 年 SQL 年 An Introduction to Database Systems
351
An Introduction to Database Systems
3.1 SQL概述 SQL 的产生与发展 SQL的特点 SQL的基本概念 An Introduction to Database Systems
352
An Introduction to Database Systems
SQL的特点 1.综合统一 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。 可以独立完成数据库生命周期中的全部活动: 定义关系模式,插入数据,建立数据库; 对数据库中的数据进行查询和更新; 数据库重构和维护 数据库安全性、完整性控制等 用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。 数据操作符统一 An Introduction to Database Systems
353
An Introduction to Database Systems
2.高度非过程化 非关系数据模型的数据操纵语言“面向过程”,必须制定存取路径 SQL只要提出“做什么”,无须了解存取路径。 存取路径的选择以及SQL的操作过程由系统自动完成。 An Introduction to Database Systems
354
An Introduction to Database Systems
3.面向集合的操作方式 非关系数据模型采用面向记录的操作方式,操作对象是一条记录 SQL采用集合操作方式 操作对象、查找结果可以是元组的集合 一次插入、删除、更新操作的对象可以是元组的集合 An Introduction to Database Systems
355
An Introduction to Database Systems
4.以同一种语法结构提供多种使用方式 SQL是独立的语言 能够独立地用于联机交互的使用方式 SQL又是嵌入式语言 SQL能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用 An Introduction to Database Systems
356
An Introduction to Database Systems
5.语言简洁,易学易用 SQL功能极强,完成核心功能只用了9个动词。 An Introduction to Database Systems
357
An Introduction to Database Systems
3.1 SQL概述 SQL 的产生与发展 SQL的特点 SQL的基本概念 An Introduction to Database Systems
358
An Introduction to Database Systems
SQL的基本概念(续) SQL支持关系数据库三级模式结构 SQL 视图2 视图1 基本表2 基本表1 基本表3 基本表4 存储文件2 存储文件1 外模式 模 式 内模式 An Introduction to Database Systems
359
An Introduction to Database Systems
SQL的基本概念(续) 基本表 本身独立存在的表 SQL中一个关系就对应一个基本表 一个(或多个)基本表对应一个存储文件 一个表可以带若干索引 存储文件 逻辑结构组成了关系数据库的内模式 物理结构是任意的,对用户透明 视图 从一个或几个基本表导出的表 数据库中只存放视图的定义而不存放视图对应的数据 视图是一个虚表 用户可以在视图上再定义视图 An Introduction to Database Systems
360
An Introduction to Database Systems
第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 An Introduction to Database Systems
361
An Introduction to Database Systems
3.2 学生-课程 数据库 学生-课程模式 S-T : 学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:SC(Sno,Cno,Grade) An Introduction to Database Systems
362
An Introduction to Database Systems
Student表 学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所 在 系 Sdept 李勇 刘晨 王敏 张立 男 女 20 19 18 CS MA IS An Introduction to Database Systems
363
An Introduction to Database Systems
Course表 课程号 Cno 课程名 Cname 先行课 Cpno 学分 Ccredit 1 2 3 4 5 6 7 数据库 数学 信息系统 操作系统 数据结构 数据处理 PASCAL语言 An Introduction to Database Systems
364
An Introduction to Database Systems
SC表 学 号 Sno 课程号 Cno 成绩 Grade 1 2 3 92 85 88 90 80 An Introduction to Database Systems
365
An Introduction to Database Systems
第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 An Introduction to Database Systems
366
An Introduction to Database Systems
3.3 数据定义 SQL的数据定义功能: 模式定义、表定义、视图和索引的定义 An Introduction to Database Systems
367
An Introduction to Database Systems
3.3 数据定义 3.3.1 模式的定义与删除 3.3.2 基本表的定义、删除与修改 3.3.3 索引的建立与删除 An Introduction to Database Systems
368
An Introduction to Database Systems
定义模式(续) [例1]定义一个学生-课程模式S-T CREATE SCHEMA “S-T” AUTHORIZATION WANG; 为用户WANG定义了一个模式S-T [例2]CREATE SCHEMA AUTHORIZATION WANG; <模式名>隐含为用户名WANG 如果没有指定<模式名>,那么<模式名>隐含为<用户名> An Introduction to Database Systems
369
An Introduction to Database Systems
定义模式(续) 定义模式实际上定义了一个命名空间 在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。 CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>] An Introduction to Database Systems
370
An Introduction to Database Systems
定义模式(续) [例3] CREATE SCHEMA TEST AUTHORIZATION ZHANG CREATE TABLE TAB1(COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) ); 为用户ZHANG创建了一个模式TEST,并在其中定义了一个表TAB1。 An Introduction to Database Systems
371
An Introduction to Database Systems
二、删除模式 DROP SCHEMA <模式名> <CASCADE|RESTRICT> CASCADE(级联) 删除模式的同时把该模式中所有的数据库对象全部删除 RESTRICT(限制) 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。 当该模式中没有任何下属的对象时 才能执行。 An Introduction to Database Systems
372
An Introduction to Database Systems
删除模式(续) [例4] DROP SCHEMA ZHANG CASCADE; 删除模式ZHANG 同时该模式中定义的表TAB1也被删除 An Introduction to Database Systems
373
An Introduction to Database Systems
3.3 数据定义 3.3.1 模式的定义与删除 3.3.2 基本表的定义、删除与修改 3.3.3 索引的建立与删除 An Introduction to Database Systems
374
An Introduction to Database Systems
3.3.2 基本表的定义、删除与修改 一、定义基本表 CREATE TABLE <表名> (<列名> <数据类型>[ <列级完整性约束条件> ] [,<列名> <数据类型>[ <列级完整性约束条件>] ] … [,<表级完整性约束条件> ] ); 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。 An Introduction to Database Systems
375
An Introduction to Database Systems
学生表Student [例5] 建立“学生”表Student,学号是主码,姓名取值唯一。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/ Sname CHAR(20) UNIQUE, /* Sname取唯一值*/ Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) ); 主码 An Introduction to Database Systems
376
An Introduction to Database Systems
课程表Course [例6] 建立一个“课程”表Course CREATE TABLE Course ( Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4) , Ccredit SMALLINT, FOREIGN KEY (Cpno) REFERENCES Course(Cno) ); 先修课 Cpno是外码 被参照表是Course 被参照列是Cno An Introduction to Database Systems
377
An Introduction to Database Systems
学生选课表SC [例7] 建立一个“学生选课”表SC CREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno,Cno), /* 主码由两个属性构成,必须作为表级完整性进行定义*/ FOREIGN KEY (Sno) REFERENCES Student(Sno), /* 表级完整性约束条件,Sno是外码,被参照表是Student */ FOREIGN KEY (Cno) REFERENCES Course(Cno) /* 表级完整性约束条件, Cno是外码,被参照表是Course*/ ); An Introduction to Database Systems
378
An Introduction to Database Systems
二、数据类型 SQL中域的概念用数据类型来实现 定义表的属性时 需要指明其数据类型及长度 选用哪种数据类型 取值范围 要做哪些运算 An Introduction to Database Systems
379
An Introduction to Database Systems
二、数据类型 数据类型 含义 CHAR(n) 长度为n的定长字符串 VARCHAR(n) 最大长度为n的变长字符串 INT 长整数(也可以写作INTEGER) SMALLINT 短整数 NUMERIC(p,d) 定点数,由p位数字(不包括符号、小数点)组成,小数后面有d位数字 REAL 取决于机器精度的浮点数 Double Precision 取决于机器精度的双精度浮点数 FLOAT(n) 浮点数,精度至少为n位数字 DATE 日期,包含年、月、日,格式为YYYY-MM-DD TIME 时间,包含一日的时、分、秒,格式为HH:MM:SS An Introduction to Database Systems
380
An Introduction to Database Systems
三、模式与表 每一个基本表都属于某一个模式 一个模式包含多个基本表 定义基本表所属模式 方法一:在表名中明显地给出模式名 Create table “S-T”.Student(......); /*模式名为 S-T*/ Create table “S-T”.Cource(......); Create table “S-T”.SC(......); 方法二:在创建模式语句中同时创建表 方法三:设置所属的模式 An Introduction to Database Systems
381
An Introduction to Database Systems
模式与表(续) 创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式 RDBMS会使用模式列表中第一个存在的模式作为数据库对象的模式名 若搜索路径中的模式名都不存在,系统将给出错误 显示当前的搜索路径: SHOW search_path; 搜索路径的当前默认值是:$user, PUBLIC An Introduction to Database Systems
382
An Introduction to Database Systems
模式与表(续) DBA用户可以设置搜索路径,然后定义基本表 SET search_path TO “S-T”,PUBLIC; Create table Student(......); 结果建立了S-T.Student基本表。 RDBMS发现搜索路径中第一个模式名S-T存在,就把该 模式作为基本表Student所属的模式。 An Introduction to Database Systems
383
An Introduction to Database Systems
四、修改基本表 ALTER TABLE <表名> [ ADD <新列名> <数据类型> [ 完整性约束 ] ] [ DROP <完整性约束名> ] [ ALTER COLUMN<列名> <数据类型> ]; An Introduction to Database Systems
384
An Introduction to Database Systems
修改基本表(续) [例8]向Student表增加“入学时间”列,其数据类型为日期型。 ALTER TABLE Student ADD S_entrance DATE; 不论基本表中原来是否已有数据,新增加的列一律为空值。 [例9]将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。 ALTER TABLE Student ALTER COLUMN Sage INT; [例10]增加课程名称必须取唯一值的约束条件。 ALTER TABLE Course ADD UNIQUE(Cname); An Introduction to Database Systems
385
An Introduction to Database Systems
五、删除基本表 DROP TABLE <表名>[RESTRICT| CASCADE]; RESTRICT:删除表是有限制的。 欲删除的基本表不能被其他表的约束所引用 如果存在依赖该表的对象,则此表不能被删除 CASCADE:删除该表没有限制。 在删除基本表的同时,相关的依赖对象一起删除 An Introduction to Database Systems
386
An Introduction to Database Systems
删除基本表(续) [例11] 删除Student表 DROP TABLE Student CASCADE ; 基本表定义被删除,数据被删除 表上建立的索引、视图、触发器等一般也将被删除 An Introduction to Database Systems
387
An Introduction to Database Systems
删除基本表(续) [例12]若表上建有视图,选择RESTRICT时表不能删除 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS'; DROP TABLE Student RESTRICT; --ERROR: cannot drop table Student because other objects depend on it An Introduction to Database Systems
388
An Introduction to Database Systems
删除基本表(续) [例12]如果选择CASCADE时可以删除表,视图也自动被删除 DROP TABLE Student CASCADE; --NOTICE: drop cascades to view IS_Student SELECT * FROM IS_Student; --ERROR: relation " IS_Student " does not exist An Introduction to Database Systems
389
An Introduction to Database Systems
删除基本表(续) DROP TABLE时,SQL99 与 3个RDBMS的处理策略比较 序 号 标准及主流数据库的处理方式 依赖基本表的对象 SQL99 Kingbase ES ORACLE 9i MS SQL SERVER 2000 R C 1. 索引 无规定 √ 2. 视图 × 保留 3. DEFAULT,PRIMARY KEY,CHECK(只含该表的列)NOT NULL 等约束 4. Foreign Key 5. TRIGGER 6. 函数或存储过程 R表示RESTRICT , C表示CASCADE '×'表示不能删除基本表,'√'表示能删除基本表,‘保留’表示删除基本表后,还保留依赖对象 An Introduction to Database Systems
390
An Introduction to Database Systems
3.3 数据定义 3.3.1 模式的定义与删除 3.3.2 基本表的定义、删除与修改 3.3.3 索引的建立与删除 An Introduction to Database Systems
391
An Introduction to Database Systems
3.3.3 索引的建立与删除 建立索引的目的:加快查询速度 谁可以建立索引 DBA 或 表的属主(即建立表的人) DBMS一般会自动建立以下列上的索引 PRIMARY KEY UNIQUE 谁 维护索引 DBMS自动完成 使用索引 DBMS自动选择是否使用索引以及使用哪些索引 An Introduction to Database Systems
392
An Introduction to Database Systems
索 引 RDBMS中索引一般采用B+树、HASH索引来实现 B+树索引具有动态平衡的优点 HASH索引具有查找速度快的特点 采用B+树,还是HASH索引 则由具体的RDBMS来决定 索引是关系数据库的内部实现技术,属于内模式的范畴 CREATE INDEX语句定义索引时,可以定义索引是唯一索引、非唯一索引或聚簇索引 An Introduction to Database Systems
393
An Introduction to Database Systems
一、建立索引 语句格式 CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…); An Introduction to Database Systems
394
An Introduction to Database Systems
建立索引(续) [例13] CREATE CLUSTER INDEX Stusname ON Student(Sname); 在Student表的Sname(姓名)列上建立一个聚簇索引 在最经常查询的列上建立聚簇索引以提高查询效率 一个基本表上最多只能建立一个聚簇索引 经常更新的列不宜建立聚簇索引 An Introduction to Database Systems
395
An Introduction to Database Systems
建立索引(续) [例14]为学生-课程数据库中的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); Student表按学号升序建唯一索引 Course表按课程号升序建唯一索引 SC表按学号升序和课程号降序建唯一索引 An Introduction to Database Systems
396
An Introduction to Database Systems
二、删除索引 DROP INDEX <索引名>; 删除索引时,系统会从数据字典中删去有关该索引的 描述。 [例15] 删除Student表的Stusname索引 DROP INDEX Stusname; An Introduction to Database Systems
397
An Introduction to Database Systems
第三章 关系数据库标准语言SQL 3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 视图 3.7 小结 An Introduction to Database Systems
398
An Introduction to Database Systems
数据查询 语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表名或视图名>[, <表名或视图名> ] … [ WHERE <条件表达式> ] [ GROUP BY <列名1> [ HAVING <条件表达式> ] ] [ ORDER BY <列名2> [ ASC|DESC ] ]; An Introduction to Database Systems
399
An Introduction to Database Systems
3.4 数据查询 3.4.1 单表查询 3.4.2 连接查询 3.4.3 嵌套查询 3.4.4 集合查询 3.4.5 Select语句的一般形式 An Introduction to Database Systems
400
An Introduction to Database Systems
单表查询 查询仅涉及一个表: 一、 选择表中的若干列 二、 选择表中的若干元组 三、 ORDER BY子句 四、 聚集函数 五、 GROUP BY子句 An Introduction to Database Systems
401
An Introduction to Database Systems
一、 选择表中的若干列 查询指定列 [例1] 查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student; [例2] 查询全体学生的姓名、学号、所在系。 SELECT Sname,Sno,Sdept FROM Student; An Introduction to Database Systems
402
An Introduction to Database Systems
2. 查询全部列 选出所有属性列: 在SELECT关键字后面列出所有列名 将<目标列表达式>指定为 * [例3] 查询全体学生的详细记录。 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; 或 SELECT * An Introduction to Database Systems
403
An Introduction to Database Systems
3. 查询经过计算的值 SELECT子句的<目标列表达式>可以为: 算术表达式 字符串常量 函数 列别名 An Introduction to Database Systems
404
An Introduction to Database Systems
查询经过计算的值(续) [例4] 查全体学生的姓名及其出生年份。 SELECT Sname,2004-Sage /*假定当年的年份为2004年*/ FROM Student; 输出结果: Sname Sage 李勇 刘晨 王敏 张立 An Introduction to Database Systems
405
An Introduction to Database Systems
查询经过计算的值(续) [例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名 SELECT Sname,‘Year of Birth: ',2004-Sage, ISLOWER(Sdept) FROM Student; 输出结果: Sname 'Year of Birth:' Sage ISLOWER(Sdept) 李勇 Year of Birth: cs 刘晨 Year of Birth: is 王敏 Year of Birth: ma 张立 Year of Birth: is An Introduction to Database Systems
406
An Introduction to Database Systems
查询经过计算的值(续) 使用列别名改变查询结果的列标题: SELECT Sname NAME,'Year of Birth: ’ BIRTH, 2000-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM Student; 输出结果: NAME BIRTH BIRTHDAY DEPARTMENT 李勇 Year of Birth: cs 刘晨 Year of Birth: is 王敏 Year of Birth: ma 张立 Year of Birth: is An Introduction to Database Systems
407
An Introduction to Database Systems
单表查询 查询仅涉及一个表: 一、 选择表中的若干列 二、 选择表中的若干元组 三、 ORDER BY子句 四、 聚集函数 五、 GROUP BY子句 An Introduction to Database Systems
408
An Introduction to Database Systems
二、选择表中的若干元组 1. 消除取值重复的行 如果没有指定DISTINCT关键词,则缺省为ALL [例6] 查询选修了课程的学生学号。 SELECT Sno FROM SC; 等价于: SELECT ALL Sno FROM SC; 执行上面的SELECT语句后,结果为: Sno An Introduction to Database Systems
409
An Introduction to Database Systems
消除取值重复的行(续) 指定DISTINCT关键词,去掉表中重复的行 SELECT DISTINCT Sno FROM SC; 执行结果: Sno An Introduction to Database Systems
410
An Introduction to Database Systems
2.查询满足条件的元组 表3.4 常用的查询条件 查 询 条 件 谓 词 比 较 =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符 确定范围 BETWEEN AND,NOT BETWEEN AND 确定集合 IN,NOT IN 字符匹配 LIKE,NOT LIKE 空 值 IS NULL,IS NOT NULL 多重条件(逻辑运算) AND,OR,NOT An Introduction to Database Systems
411
An Introduction to Database Systems
(1) 比较大小 [例7] 查询计算机科学系全体学生的名单。 SELECT Sname FROM Student WHERE Sdept=‘CS’; [例8] 查询所有年龄在20岁以下的学生姓名及其年龄。 SELECT Sname,Sage FROM Student WHERE Sage < 20; [例9] 查询考试成绩有不及格的学生的学号。 SELECT DISTINCT Sno FROM SC WHERE Grade<60; An Introduction to Database Systems
412
An Introduction to Database Systems
(2)确定范围 谓词: BETWEEN … AND … NOT BETWEEN … AND … [例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的 姓名、系别和年龄 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23; [例11] 查询年龄不在20~23岁之间的学生姓名、系别和年龄 FROM Student WHERE Sage NOT BETWEEN 20 AND 23; An Introduction to Database Systems
413
An Introduction to Database Systems
(3) 确定集合 谓词:IN <值表>, NOT IN <值表> [例12]查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student WHERE Sdept IN ( 'IS','MA','CS' ); [例13]查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。 FROM Student WHERE Sdept NOT IN ( 'IS','MA','CS' ); An Introduction to Database Systems
414
An Introduction to Database Systems
(4)字符匹配 谓词: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’] 匹配串为固定字符串 [例14] 查询学号为 的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE ‘ '; 等价于: SELECT * WHERE Sno = ' '; An Introduction to Database Systems
415
An Introduction to Database Systems
字符匹配(续) 2) 匹配串为含通配符的字符串 [例15] 查询所有姓刘学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE ‘刘%’; [例16] 查询姓"欧阳"且全名为三个汉字的学生的姓名。 SELECT Sname FROM Student WHERE Sname LIKE '欧阳__'; An Introduction to Database Systems
416
An Introduction to Database Systems
字符匹配(续) [例17] 查询名字中第2个字为"阳"字的学生的姓名和学号。 SELECT Sname,Sno FROM Student WHERE Sname LIKE ‘__阳%’; [例18] 查询所有不姓刘的学生姓名。 SELECT Sname,Sno,Ssex WHERE Sname NOT LIKE '刘%'; An Introduction to Database Systems
417
An Introduction to Database Systems
字符匹配(续) 3) 使用换码字符将通配符转义为普通字符 [例19] 查询DB_Design课程的课程号和学分。 SELECT Cno,Ccredit FROM Course WHERE Cname LIKE 'DB\_Design' ESCAPE '\‘; [例20] 查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。 SELECT * FROM Course WHERE Cname LIKE 'DB\_%i_ _' ESCAPE ' \ ‘; ESCAPE '\' 表示“ \” 为换码字符 An Introduction to Database Systems
418
An Introduction to Database Systems
(5) 涉及空值的查询 谓词: IS NULL 或 IS NOT NULL “IS” 不能用 “=” 代替 [例21] 某些学生选修课程后没有参加考试,所以有选课记录,但没 有考试成绩。查询缺少成绩的学生的学号和相应的课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL [例22] 查所有有成绩的学生学号和课程号。 WHERE Grade IS NOT NULL; An Introduction to Database Systems
419
An Introduction to Database Systems
(6) 多重条件查询 逻辑运算符:AND和 OR来联结多个查询条件 AND的优先级高于OR 可以用括号改变优先级 可用来实现多种其他谓词 [NOT] IN [NOT] BETWEEN … AND … An Introduction to Database Systems
420
An Introduction to Database Systems
多重条件查询(续) [例23] 查询计算机系年龄在20岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept= 'CS' AND Sage<20; An Introduction to Database Systems
421
An Introduction to Database Systems
多重条件查询(续) 改写[例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 '; An Introduction to Database Systems
422
An Introduction to Database Systems
单表查询 查询仅涉及一个表: 一、 选择表中的若干列 二、 选择表中的若干元组 三、 ORDER BY子句 四、 聚集函数 五、 GROUP BY子句 An Introduction to Database Systems
423
An Introduction to Database Systems
三、ORDER BY子句 ORDER BY子句 可以按一个或多个属性列排序 升序:ASC;降序:DESC;缺省值为升序 当排序列含空值时 ASC:排序列为空值的元组最后显示 DESC:排序列为空值的元组最先显示 An Introduction to Database Systems
424
An Introduction to Database Systems
ORDER BY子句 (续) [例24] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade FROM SC WHERE Cno= ' 3 ' ORDER BY Grade DESC; [例25] 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。 SELECT * FROM Student ORDER BY Sdept,Sage DESC; An Introduction to Database Systems
425
An Introduction to Database Systems
单表查询 查询仅涉及一个表: 一、 选择表中的若干列 二、 选择表中的若干元组 三、 ORDER BY子句 四、 聚集函数 五、 GROUP BY子句 An Introduction to Database Systems
426
An Introduction to Database Systems
四、聚集函数 聚集函数: 计数 COUNT([DISTINCT|ALL] *) COUNT([DISTINCT|ALL] <列名>) 计算总和 SUM([DISTINCT|ALL] <列名>) 计算平均值 AVG([DISTINCT|ALL] <列名>) 最大最小值 MAX([DISTINCT|ALL] <列名>) MIN([DISTINCT|ALL] <列名>) An Introduction to Database Systems
427
An Introduction to Database Systems
聚集函数 (续) [例26] 查询学生总人数。 SELECT COUNT(*) FROM Student; [例27] 查询选修了课程的学生人数。 SELECT COUNT(DISTINCT Sno) FROM SC; [例28] 计算1号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cno= ' 1 '; An Introduction to Database Systems
428
An Introduction to Database Systems
聚集函数 (续) [例29] 查询选修1号课程的学生最高分数。 SELECT MAX(Grade) FROM SC WHERE Cno= ‘ 1 ’; [例30]查询学生 选修课程的总学分数。 SELECT SUM(Ccredit) FROM SC, Course WHERe Sno=' ' AND SC.Cno=Course.Cno; An Introduction to Database Systems
429
An Introduction to Database Systems
单表查询 查询仅涉及一个表: 一、 选择表中的若干列 二、 选择表中的若干元组 三、 ORDER BY子句 四、 聚集函数 五、 GROUP BY子句 An Introduction to Database Systems
430
An Introduction to Database Systems
五、GROUP BY子句 GROUP BY子句分组: 细化聚集函数的作用对象 未对查询结果分组,聚集函数将作用于整个查询结果 对查询结果分组后,聚集函数将分别作用于每个组 作用对象是查询的中间结果表 按指定的一列或多列值分组,值相等的为一组 An Introduction to Database Systems
431
An Introduction to Database Systems
GROUP BY子句(续) [例31] 求各个课程号及相应的选课人数。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 查询结果: Cno COUNT(Sno) An Introduction to Database Systems
432
An Introduction to Database Systems
GROUP BY子句(续) [例32] 查询选修了3门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >3; An Introduction to Database Systems
433
An Introduction to Database Systems
GROUP BY子句(续) HAVING短语与WHERE子句的区别: 作用对象不同 WHERE子句作用于基表或视图,从中选择满足条件的元组 HAVING短语作用于组,从中选择满足条件的组。 An Introduction to Database Systems
434
An Introduction to Database Systems
下课了。。。 追 求 休息一会儿。。。 An Introduction to Database Systems
435
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第四章 数据库安全性 An Introduction to Database Systems
436
An Introduction to Database Systems
数据库安全性 问题的提出 数据库的一大特点是数据可以共享 数据共享必然带来数据库的安全性问题 数据库系统中的数据共享不能是无条件的共享 例: 军事秘密、国家机密、新产品实验数据、 市场需求分析、市场营销策略、销售计划、 客户档案、医疗档案、银行储蓄数据 数据库安全性 An Introduction to Database Systems
437
An Introduction to Database Systems
第四章 数据库安全性 4.1 计算机安全性概述 4.2 数据库安全性控制 4.3 视图机制 4.4 审计(Audit) 4.5 数据加密 4.6 统计数据库安全性 4.7 小结 An Introduction to Database Systems
438
An Introduction to Database Systems
4.1 计算机安全性概述 计算机系统的三类安全性问题 安全标准简介 An Introduction to Database Systems
439
An Introduction to Database Systems
计算机系统的三类安全性问题 计算机系统安全性 为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。 An Introduction to Database Systems
440
An Introduction to Database Systems
计算机系统的三类安全性问题(续) 三类计算机系统安全性问题 技术安全类 管理安全类 政策法律类 An Introduction to Database Systems
441
An Introduction to Database Systems
4.1 计算机安全性概论 计算机系统的三类安全性问题 安全标准简介 An Introduction to Database Systems
442
An Introduction to Database Systems
第四章 数据库安全性 4.1 计算机安全性概述 4.2 数据库安全性控制 4.3 视图机制 4.4 审计(Audit) 4.5 数据加密 4.6 统计数据库安全性 4.7 小结 An Introduction to Database Systems
443
An Introduction to Database Systems
4.2 数据库安全性控制概述 非法使用数据库的情况 编写合法程序绕过DBMS及其授权机制 直接或编写应用程序执行非授权操作 通过多次合法查询数据库从中推导出一些保密数据 An Introduction to Database Systems
444
An Introduction to Database Systems
数据库安全性控制概述(续) 计算机系统中,安全措施是一级一级层层设置 计算机系统的安全模型 An Introduction to Database Systems
445
An Introduction to Database Systems
数据库安全性控制概述(续) 数据库安全性控制的常用方法 用户标识和鉴定 存取控制 视图 审计 密码存储 An Introduction to Database Systems
446
An Introduction to Database Systems
4.2 数据库安全性控制 4.2.1 用户标识与鉴别 4.2.2 存取控制 4.2.3 自主存取控制方法 4.2.4 授权与回收 4.2.5 数据库角色 4.2.6 强制存取控制方法 An Introduction to Database Systems
447
An Introduction to Database Systems
用户标识与鉴别 用户标识与鉴别 (Identification & Authentication) 系统提供的最外层安全保护措施 An Introduction to Database Systems
448
An Introduction to Database Systems
用户标识与鉴别(续) 用户标识 口令 系统核对口令以鉴别用户身份 用户名和口令易被窃取 每个用户预先约定好一个计算过程或者函数 An Introduction to Database Systems
449
An Introduction to Database Systems
4.2 数据库安全性控制 4.2.1 用户标识与鉴别 4.2.2 存取控制 4.2.3 自主存取控制方法 4.2.4 授权与回收 4.2.5 数据库角色 4.2.6 强制存取控制方法 An Introduction to Database Systems
450
An Introduction to Database Systems
存取控制 存取控制机制组成 定义用户权限 合法权限检查 用户权限定义和合法权检查机制一起组成了 DBMS的安全子系统 An Introduction to Database Systems
451
An Introduction to Database Systems
存取控制(续) 常用存取控制方法 自主存取控制(Discretionary Access Control ,简称DAC) C2级 灵活 强制存取控制(Mandatory Access Control,简称 MAC) B1级 严格 An Introduction to Database Systems
452
An Introduction to Database Systems
4.2 数据库安全性控制 4.2.1 用户标识与鉴别 4.2.2 存取控制 4.2.3 自主存取控制方法 4.2.4 授权与回收 4.2.5 数据库角色 4.2.6 强制存取控制方法 An Introduction to Database Systems
453
An Introduction to Database Systems
自主存取控制方法 通过 SQL 的 GRANT 语句和 REVOKE 语句实现 用户权限组成 数据对象 操作类型 定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作 定义存取权限称为授权 An Introduction to Database Systems
454
An Introduction to Database Systems
自主存取控制方法(续) 关系数据库系统中存取控制对象 对象类型 对象 操 作 类 型 数据库 模式 CREATE SCHEMA 基本表 CREATE TABLE,ALTER TABLE 视图 CREATE VIEW 索引 CREATE INDEX 数据 基本表和视图 SELECT,INSERT,UPDATE,DELETE,REFERENCES, ALL PRIVILEGES 属性列 SELECT,INSERT,UPDATE, REFERENCES 关系数据库系统中的存取权限 An Introduction to Database Systems
455
An Introduction to Database Systems
4.2 数据库安全性控制 4.2.1 用户标识与鉴别 4.2.2 存取控制 4.2.3 自主存取控制方法 4.2.4 授权与回收 4.2.5 数据库角色 4.2.6 强制存取控制方法 An Introduction to Database Systems
456
An Introduction to Database Systems
4.2.4 授权与回收 一、GRANT GRANT语句的一般格式: GRANT <权限>[,<权限>]... [ON <对象类型> <对象名>] TO <用户>[,<用户>]... [WITH GRANT OPTION]; 语义:将对指定操作对象的指定操作权限授予指定的用户 An Introduction to Database Systems
457
An Introduction to Database Systems
GRANT(续) 发出GRANT: DBA 数据库对象创建者(即属主Owner) 拥有该权限的用户 按受权限的用户 一个或多个具体用户 PUBLIC(全体用户) An Introduction to Database Systems
458
An Introduction to Database Systems
WITH GRANT OPTION子句 WITH GRANT OPTION子句: 指定:可以再授予 没有指定:不能传播 不允许循环授权 An Introduction to Database Systems
459
An Introduction to Database Systems
例题 [例1] 把查询Student表权限授给用户U1 GRANT SELECT ON TABLE Student TO U1; An Introduction to Database Systems
460
An Introduction to Database Systems
例题(续) [例2] 把对Student表和Course表的全部权限授予用户U2和U3 GRANT ALL PRIVILIGES ON TABLE Student, Course TO U2, U3; An Introduction to Database Systems
461
An Introduction to Database Systems
例题(续) [例3] 把对表SC的查询权限授予所有用户 GRANT SELECT ON TABLE SC TO PUBLIC; An Introduction to Database Systems
462
An Introduction to Database Systems
例题(续) [例4] 把查询Student表和修改学生学号的权限授给用户U4 GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4; 对属性列的授权时必须明确指出相应属性列名 An Introduction to Database Systems
463
An Introduction to Database Systems
例题(续) [例5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户 GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION; An Introduction to Database Systems
464
An Introduction to Database Systems
传播权限 执行例5后,U5不仅拥有了对表SC的INSERT权限, 还可以传播此权限: [例6] GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION; 同样,U6还可以将此权限授予U7: [例7] GRANT INSERT ON TABLE SC TO U7; 但U7不能再传播此权限。 An Introduction to Database Systems
465
An Introduction to Database Systems
传播权限(续) 下表是执行了[例1]到[例7]的语句后,学生-课程数据库中的用户权限定义表 授权用户名 被授权用户名 数据库对象名 允许的操作类型 能否转授权 DBA U1 关系Student SELECT 不能 U2 ALL 关系Course U3 PUBLIC 关系SC U4 属性列Student.Sno UPDATE U5 INSERT 能 U6 U7 An Introduction to Database Systems
466
An Introduction to Database Systems
授权与回收(续) 二、REVOKE 授予的权限可以由DBA或其他授权者用REVOKE语句收回 REVOKE语句的一般格式为: REVOKE <权限>[,<权限>]... [ON <对象类型> <对象名>] FROM <用户>[,<用户>]...; An Introduction to Database Systems
467
An Introduction to Database Systems
REVOKE(续) [例8] 把用户U4修改学生学号的权限收回 REVOKE UPDATE(Sno) ON TABLE Student FROM U4; An Introduction to Database Systems
468
An Introduction to Database Systems
REVOKE(续) [例9] 收回所有用户对表SC的查询权限 REVOKE SELECT ON TABLE SC FROM PUBLIC; An Introduction to Database Systems
469
An Introduction to Database Systems
REVOKE(续) [例10] 把用户U5对SC表的INSERT权限收回 REVOKE INSERT ON TABLE SC FROM U5 CASCADE ; 将用户U5的INSERT权限收回的时候必须级联(CASCADE)收回 系统只收回直接或间接从U5处获得的权限 An Introduction to Database Systems
470
An Introduction to Database Systems
REVOKE(续) 执行[例8]到[例10]的语句后,学生-课程数据库中的用户权限定义表 授权用户名 被授权用户名 数据库对象名 允许的操作类型 能否转授权 DBA U1 关系Student SELECT 不能 U2 ALL 关系Course U3 U4 An Introduction to Database Systems
471
An Introduction to Database Systems
小结:SQL灵活的授权机制 DBA:拥有所有对象的所有权限 不同的权限授予不同的用户 用户:拥有自己建立的对象的全部的操作权限 GRANT:授予其他用户 被授权的用户 “继续授权”许可:再授予 所有授予出去的权力在必要时又都可用REVOKE语句收回 An Introduction to Database Systems
472
An Introduction to Database Systems
授权与回收(续) 三、创建数据库模式的权限 DBA在创建用户时实现 CREATE USER语句格式 CREATE USER <username> [WITH][DBA | RESOURCE | CONNECT] An Introduction to Database Systems
473
An Introduction to Database Systems
授权与回收(续) 拥有的权限 可否执行的操作 CREATE USER CREATE SCHEMA CREATE TABLE 登录数据库 执行数据查询和操纵 DBA 可以 RESOURCE 不可以 CONNECT 可以,但必须拥有相应权限 权限与可执行的操作对照表 An Introduction to Database Systems
474
An Introduction to Database Systems
4.2 数据库安全性控制 4.2.1 用户标识与鉴别 4.2.2 存取控制 4.2.3 自主存取控制方法 4.2.4 授权与回收 4.2.5 数据库角色 4.2.6 强制存取控制方法 An Introduction to Database Systems
475
An Introduction to Database Systems
4.2.5 数据库角色 数据库角色:被命名的一组与数据库操作相关的权限 角色是权限的集合 可以为一组具有相同权限的用户创建一个角色 简化授权的过程 An Introduction to Database Systems
476
An Introduction to Database Systems
数据库角色 一、角色的创建 CREATE ROLE <角色名> 二、给角色授权 GRANT <权限>[,<权限>]… ON <对象类型>对象名 TO <角色>[,<角色>]… An Introduction to Database Systems
477
An Introduction to Database Systems
数据库角色 三、将一个角色授予其他的角色或用户 GRANT <角色1>[,<角色2>]… TO <角色3>[,<用户1>]… [WITH ADMIN OPTION] 四、角色权限的收回 REVOKE <权限>[,<权限>]… ON <对象类型> <对象名> FROM <角色>[,<角色>]… An Introduction to Database Systems
478
An Introduction to Database Systems
数据库角色(续) [例11] 通过角色来实现将一组权限授予一个用户。 步骤如下: 1. 首先创建一个角色 R1 CREATE ROLE R1; 2. 然后使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限 GRANT SELECT,UPDATE,INSERT ON TABLE Student TO R1; An Introduction to Database Systems
479
An Introduction to Database Systems
数据库角色(续) 3. 将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限 GRANT R1 TO 王平,张明,赵玲; 4. 可以一次性通过R1来回收王平的这3个权限 REVOKE R1 FROM 王平; An Introduction to Database Systems
480
An Introduction to Database Systems
数据库角色(续) [例12] 角色的权限修改 GRANT DELETE ON TABLE Student TO R1 An Introduction to Database Systems
481
An Introduction to Database Systems
数据库角色(续) [例13] REVOKE SELECT ON TABLE Student FROM R1; An Introduction to Database Systems
482
An Introduction to Database Systems
4.2 数据库安全性控制 4.2.1 用户标识与鉴别 4.2.2 存取控制 4.2.3 自主存取控制方法 4.2.4 授权与回收 4.2.5 数据库角色 4.2.6 强制存取控制方法 An Introduction to Database Systems
483
An Introduction to Database Systems
自主存取控制缺点 可能存在数据的“无意泄露” 原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记 解决:对系统控制下的所有主客体实施强制存取控制策略 An Introduction to Database Systems
484
An Introduction to Database Systems
强制存取控制方法 强制存取控制(MAC) 保证更高程度的安全性 用户能不能直接感知或进行控制 适用于对数据有严格而固定密级分类的部门 军事部门 政府部门 An Introduction to Database Systems
485
An Introduction to Database Systems
强制存取控制方法(续) 主体是系统中的活动实体 DBMS所管理的实际用户 代表用户的各进程 客体是系统中的被动实体,是受主体操纵的 文件 基表 索引 视图 An Introduction to Database Systems
486
An Introduction to Database Systems
强制存取控制方法(续) 敏感度标记(Label) 绝密(Top Secret) 机密(Secret) 可信(Confidential) 公开(Public) 主体的敏感度标记称为许可证级别(Clearance Level) 客体的敏感度标记称为密级(Classification Level) An Introduction to Database Systems
487
An Introduction to Database Systems
强制存取控制方法(续) 强制存取控制规则 (1)仅当主体的许可证级别大于或等于客体的密级时,该 主体才能读取相应的客体 (2)仅当主体的许可证级别等于客体的密级时,该主体才 能写相应的客体 修正规则 主体的许可证级别 <=客体的密级 主体能写客体 An Introduction to Database Systems
488
An Introduction to Database Systems
强制存取控制方法(续) 规则的共同点 禁止了拥有高许可证级别的主体更新低密级的数 据对象 An Introduction to Database Systems
489
An Introduction to Database Systems
MAC与DAC DAC与MAC共同构成DBMS的安全机制 实现MAC时要首先实现DAC 原因:较高安全性级别提供的安全保护要包含较低级别的所有保护 An Introduction to Database Systems
490
An Introduction to Database Systems
强制存取控制方法(续) DAC + MAC安全检查示意图 SQL语法分析 & 语义检查 DAC 检 查 安全检查 MAC 检 查 继 续 先进行DAC检查,通过DAC检查的数据对象再由系统进行MAC 检查,只有通过MAC检查的数据对象方可存取。 An Introduction to Database Systems
491
An Introduction to Database Systems
第四章 数据库安全性 4.1 计算机安全性概述 4.2 数据库安全性控制 4.3 视图机制 4.4 审计(Audit) 4.5 数据加密 4.6 统计数据库安全性 4.7 小结 An Introduction to Database Systems
492
An Introduction to Database Systems
4.3 视图机制 把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护 主要功能是提供数据独立性,无法完全满足要求 间接实现了支持存取谓词的用户权限定义 An Introduction to Database Systems
493
An Introduction to Database Systems
视图机制(续) [例14]建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明 先建立计算机系学生的视图CS_Student CREATE VIEW CS_Student AS SELECT * FROM Student WHERE Sdept='CS'; An Introduction to Database Systems
494
An Introduction to Database Systems
视图机制(续) 在视图上进一步定义存取权限 GRANT SELECT ON CS_Student TO 王平 ; GRANT ALL PRIVILIGES TO 张明; An Introduction to Database Systems
495
An Introduction to Database Systems
4.2 数据库安全性控制 4.1 计算机安全性概述 4.2 数据库安全性控制 4.3 视图机制 4.4 审计(Audit) 4.5 数据加密 4.6 统计数据库安全性 4.7 小结 An Introduction to Database Systems
496
An Introduction to Database Systems
4.4 审计 什么是审计 审计日志(Audit Log) 将用户对数据库的所有操作记录在上面 DBA利用审计日志 找出非法存取数据的人、时间和内容 C2以上安全级别的DBMS必须具有 An Introduction to Database Systems
497
An Introduction to Database Systems
审计(续) 审计分为 用户级审计 针对自己创建的数据库表或视图进行审计 记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SQL操作 系统级审计 DBA设置 监测成功或失败的登录要求 监测GRANT和REVOKE操作以及其他数据库级权限下的操作 An Introduction to Database Systems
498
An Introduction to Database Systems
审计(续) AUDIT语句:设置审计功能 NOAUDIT语句:取消审计功能 An Introduction to Database Systems
499
An Introduction to Database Systems
审计(续) [例15]对修改SC表结构或修改SC表数据的操作进行审计 AUDIT ALTER,UPDATE ON SC; [例16]取消对SC表的一切审计 NOAUDIT ALTER,UPDATE An Introduction to Database Systems
500
An Introduction to Database Systems
4.2 数据库安全性控制 4.1 计算机安全性概述 4.2 数据库安全性控制 4.3 视图机制 4.4 审计(Audit) 4.5 数据加密 4.6 统计数据库安全性 4.7 小结 An Introduction to Database Systems
501
An Introduction to Database Systems
4.5 数据加密 数据加密 防止数据库中数据在存储和传输中失密的有效手段 加密的基本思想 加密方法 替换方法 置换方法 混合方法 DBMS中的数据加密 An Introduction to Database Systems
502
An Introduction to Database Systems
第四章 数据库安全性 4.1 计算机安全性概述 4.2 数据库安全性控制 4.3 视图机制 4.4 审计(Audit) 4.5 数据加密 4.6 统计数据库安全性 4.7 小结 An Introduction to Database Systems
503
An Introduction to Database Systems
4.6 统计数据库安全性 统计数据库 允许用户查询聚集类型的信息(如合计、平均值等) 不允许查询单个记录信息 统计数据库中特殊的安全性问题 隐蔽的信息通道 能从合法的查询中推导出不合法的信息 An Introduction to Database Systems
504
An Introduction to Database Systems
统计数据库安全性(续) 规则1:任何查询至少要涉及N(N足够大)个以上的记录 规则2:任意两个查询的相交数据项不能超过M个 规则3:任一用户的查询次数不能超过1+(N-2)/M An Introduction to Database Systems
505
An Introduction to Database Systems
统计数据库安全性(续) 数据库安全机制的设计目标: 试图破坏安全的人所花费的代价 >> 得到的利益 An Introduction to Database Systems
506
An Introduction to Database Systems
第四章 数据库安全性 4.1 计算机安全性概述 4.2 数据库安全性控制 4.3 视图机制 4.4 审计(Audit) 4.5 数据加密 4.6 统计数据库安全性 4.7 小结 An Introduction to Database Systems
507
An Introduction to Database Systems
4.7 小结 数据的共享日益加强,数据的安全保密越来越重要 DBMS是管理数据的核心,因而其自身必须具有一整套完 整而有效的安全性机制 TCSEC和CC An Introduction to Database Systems
508
An Introduction to Database Systems
小结(续) 实现数据库系统安全性的技术和方法 存取控制技术 视图技术 审计技术 自主存取控制功能 通过SQL 的GRANT语句和REVOKE语句实现 角色 使用角色来管理数据库权限可以简化授权过程 CREATE ROLE语句创建角色 GRANT 语句给角色授权 An Introduction to Database Systems
509
An Introduction to Database System An Introduction to Database System
数据库系统概论 An Introduction to Database System 第五章 数据库完整性 中国人民大学信息学院 An Introduction to Database System
510
An Introduction to Database Systems
数据库完整性 数据库的完整性 数据的正确性和相容性 数据的完整性和安全性是两个不同概念 数据的完整性 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据 防范对象:不合语义的、不正确的数据 数据的安全性 保护数据库防止恶意的破坏和非法的存取 防范对象:非法用户和非法操作 An Introduction to Database Systems
511
An Introduction to Database Systems
数据库完整性(续) 为维护数据库的完整性,DBMS必须: 1.提供定义完整性约束条件的机制 2.提供完整性检查的方法 3.违约处理 An Introduction to Database Systems
512
An Introduction to Database Systems
第五章 数据库完整性 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结 An Introduction to Database Systems
513
An Introduction to Database Systems
5.1 实体完整性 5.1.1 实体完整性定义 5.1.2 实体完整性检查和违约处理 An Introduction to Database Systems
514
An Introduction to Database Systems
5.1.1 实体完整性定义 关系模型的实体完整性 CREATE TABLE中用PRIMARY KEY定义 单属性构成的码有两种说明方法 定义为列级约束条件 定义为表级约束条件 对多个属性构成的码只有一种说明方法 An Introduction to Database Systems
515
An Introduction to Database Systems
实体完整性定义(续) [例1] 将Student表中的Sno属性定义为码 (1)在列级定义主码 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20)); An Introduction to Database Systems
516
An Introduction to Database Systems
实体完整性定义(续) (2)在表级定义主码 CREATE TABLE Student (Sno CHAR(9), Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno) ); An Introduction to Database Systems
517
An Introduction to Database Systems
实体完整性定义(续) [例2]将SC表中的Sno,Cno属性组定义为码 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno,Cno) /*只能在表级定义主码*/ ); An Introduction to Database Systems
518
An Introduction to Database Systems
5.1 实体完整性 5.1.1 实体完整性定义 5.1.2 实体完整性检查和违约处理 An Introduction to Database Systems
519
An Introduction to Database Systems
5.1.2 实体完整性检查和违约处理 插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括: 1. 检查主码值是否唯一,如果不唯一则拒绝插入或修改 2. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改 An Introduction to Database Systems
520
An Introduction to Database Systems
实体完整性检查和违约处理(续) 检查记录中主码值是否唯一的一种方法是进行全表扫描 An Introduction to Database Systems
521
An Introduction to Database Systems
实体完整性检查和违约处理(续) 索引 An Introduction to Database Systems
522
An Introduction to Database Systems
第五章 数据库完整性 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结 An Introduction to Database Systems
523
An Introduction to Database Systems
5.2 参照完整性 5.2.1 参照完整性定义 5.2.2 参照完整性检查和违约处理 An Introduction to Database Systems
524
An Introduction to Database Systems
5.2.1 参照完整性定义 关系模型的参照完整性定义 在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码 用REFERENCES短语指明这些外码参照哪些表的主码 An Introduction to Database Systems
525
An Introduction to Database Systems
参照完整性定义(续) 例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码 [例3] 定义SC中的参照完整性 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno, Cno), /*在表级定义实体完整性*/ FOREIGN KEY (Sno) REFERENCES Student(Sno), /*在表级定义参照完整性*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) ); An Introduction to Database Systems
526
An Introduction to Database Systems
5.2 参照完整性 5.2.1 参照完整性定义 5.2.2 参照完整性检查和违约处理 An Introduction to Database Systems
527
An Introduction to Database Systems
参照完整性检查和违约处理 可能破坏参照完整性的情况及违约处理 被参照表(例如Student) 参照表(例如SC) 违约处理 可能破坏参照完整性 插入元组 拒绝 修改外码值 删除元组 拒绝/级连删除/设置为空值 修改主码值 拒绝/级连修改/设置为空值 An Introduction to Database Systems
528
An Introduction to Database Systems
违约处理 参照完整性违约处理 1. 拒绝(NO ACTION)执行 默认策略 2. 级联(CASCADE)操作 3. 设置为空值(SET-NULL) 对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值 An Introduction to Database Systems
529
An Introduction to Database Systems
违约处理(续) [例4] 显式说明参照完整性的违约处理示例 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE /*级联删除SC表中相应的元组*/ ON UPDATE CASCADE, /*级联更新SC表中相应的元组*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE NO ACTION /*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/ ON UPDATE CASCADE /*当更新course表中的cno时,级联更新SC表中相应的元组*/ ); An Introduction to Database Systems
530
An Introduction to Database Systems
第五章 数据库完整性 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结 An Introduction to Database Systems
531
An Introduction to Database Systems
5.3 用户定义的完整性 用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求 RDBMS提供,而不必由应用程序承担 An Introduction to Database Systems
532
An Introduction to Database Systems
5.3 用户定义的完整性 5.3.1 属性上的约束条件的定义 5.3.2 属性上的约束条件检查和违约处理 5.3.3 元组上的约束条件的定义 5.3.4元组上的约束条件检查和违约处理 An Introduction to Database Systems
533
An Introduction to Database Systems
5.3.1 属性上的约束条件的定义 CREATE TABLE时定义 列值非空(NOT NULL) 列值唯一(UNIQUE) 检查列值是否满足一个布尔表达式(CHECK) An Introduction to Database Systems
534
An Introduction to Database Systems
属性上的约束条件的定义(续) 1.不允许取空值 [例5] 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT NOT NULL, PRIMARY KEY (Sno, Cno), /* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级不允许取空值的定义就不必写了 * / ); An Introduction to Database Systems
535
An Introduction to Database Systems
属性上的约束条件的定义(续) 2.列值唯一 [例6] 建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码 CREATE TABLE DEPT (Deptno NUMERIC(2), Dname CHAR(9) UNIQUE,/*要求Dname列值唯一*/ Location CHAR(10), PRIMARY KEY (Deptno) ); An Introduction to Database Systems
536
An Introduction to Database Systems
属性上的约束条件的定义(续) 3. 用CHECK短语指定列值应该满足的条件 [例7] Student表的Ssex只允许取“男”或“女”。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (‘男’,‘女’) ) , /*性别属性Ssex只允许取'男'或'女' */ Sage SMALLINT, Sdept CHAR(20) ); An Introduction to Database Systems
537
An Introduction to Database Systems
5.3 用户定义的完整性 5.3.1 属性上的约束条件的定义 5.3.2 属性上的约束条件检查和违约处理 5.3.3 元组上的约束条件的定义 5.3.4元组上的约束条件检查和违约处理 An Introduction to Database Systems
538
An Introduction to Database Systems
5.3.2 属性上的约束条件检查和违约处理 插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足 如果不满足则操作被拒绝执行 An Introduction to Database Systems
539
An Introduction to Database Systems
5.3 用户定义的完整性 5.3.1 属性上的约束条件的定义 5.3.2 属性上的约束条件检查和违约处理 5.3.3 元组上的约束条件的定义 5.3.4元组上的约束条件检查和违约处理 An Introduction to Database Systems
540
An Introduction to Database Systems
5.3.3 元组上的约束条件的定义 在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制 同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件 An Introduction to Database Systems
541
An Introduction to Database Systems
元组上的约束条件的定义(续) [例9] 当学生的性别是男时,其名字不能以Ms.打头。 CREATE TABLE Student (Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno), CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%') /*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/ ); 性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立; 当性别是男性时,要通过检查则名字一定不能以Ms.打头 An Introduction to Database Systems
542
An Introduction to Database Systems
5.3 用户定义的完整性 5.3.1 属性上的约束条件的定义 5.3.2 属性上的约束条件检查和违约处理 5.3.3 元组上的约束条件的定义 5.3.4 元组上的约束条件检查和违约处理 An Introduction to Database Systems
543
An Introduction to Database Systems
5.3.4 元组上的约束条件检查和违约处理 插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足 如果不满足则操作被拒绝执行 An Introduction to Database Systems
544
An Introduction to Database Systems
第五章 数据库完整性 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名子句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结 An Introduction to Database Systems
545
An Introduction to Database Systems
5.4 完整性约束命名子句 CONSTRAINT 约束 CONSTRAINT <完整性约束条件名> [PRIMARY KEY短语 |FOREIGN KEY短语 |CHECK短语] An Introduction to Database Systems
546
An Introduction to Database Systems
完整性约束命名子句(续) [例10] 建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。 CREATE TABLE Student (Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN AND 99999), Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK (Sage < 30), Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ( '男','女')), CONSTRAINT StudentKey PRIMARY KEY(Sno) ); 在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约束。 An Introduction to Database Systems
547
An Introduction to Database Systems
完整性约束命名子句(续) 2. 修改表中的完整性限制 使用ALTER TABLE语句修改表中的完整性限制 An Introduction to Database Systems
548
An Introduction to Database Systems
完整性约束命名子句(续) [例13] 修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40 可以先删除原来的约束条件,再增加新的约束条件 ALTER TABLE Student DROP CONSTRAINT C1; ADD CONSTRAINT C1 CHECK (Sno BETWEEN AND ), DROP CONSTRAINT C3; ADD CONSTRAINT C3 CHECK (Sage < 40); An Introduction to Database Systems
549
An Introduction to Database Systems
第五章 数据库完整性 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结 An Introduction to Database Systems
550
An Introduction to Database Systems
5.5 域中的完整性限制 SQL支持域的概念,并可以用CREATE DOMAIN语句建立一个域以及该域应该满足的完整性约束条件。 [例14]建立一个性别域,并声明性别域的取值范围 CREATE DOMAIN GenderDomain CHAR(2) CHECK (VALUE IN ('男','女') ); 这样[例10]中对Ssex的说明可以改写为 Ssex GenderDomain [例15]建立一个性别域GenderDomain,并对其中的限制命名 CONSTRAINT GD CHECK ( VALUE IN ('男','女') ); An Introduction to Database Systems
551
An Introduction to Database Systems
域中的完整性限制(续) [例16]删除域GenderDomain的限制条件GD。 ALTER DOMAIN GenderDomain DROP CONSTRAINT GD; [例17]在域GenderDomain上增加限制条件GDD。 ADD CONSTRAINT GDD CHECK (VALUE IN ( '1','0') ); 通过[例16]和[例17],就把性别的取值范围由('男','女')改为 ( '1','0') An Introduction to Database Systems
552
An Introduction to Database Systems
第五章 数据库完整性 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结 An Introduction to Database Systems
553
An Introduction to Database Systems
触发器 触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程 由服务器自动激活 可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力 An Introduction to Database Systems
554
An Introduction to Database Systems
5.6 触发器 5.6.1 定义触发器 5.6.2 激活触发器 5.6.3 删除触发器 An Introduction to Database Systems
555
An Introduction to Database Systems
5.6.1 定义触发器 CREATE TRIGGER语法格式 CREATE TRIGGER <触发器名> {BEFORE | AFTER} <触发事件> ON <表名> FOR EACH {ROW | STATEMENT} [WHEN <触发条件>] <触发动作体> An Introduction to Database Systems
556
An Introduction to Database Systems
定义触发器(续) 定义触发器的语法说明: 1. 创建者:表的拥有者 2. 触发器名 3. 表名:触发器的目标表 4. 触发事件:INSERT、DELETE、UPDATE 5. 触发器类型 行级触发器(FOR EACH ROW) 语句级触发器(FOR EACH STATEMENT) An Introduction to Database Systems
557
An Introduction to Database Systems
定义触发器(续) 例如,假设在[例11]的TEACHER表上创建了一个AFTER UPDATE触发器。如果表TEACHER有1000行,执行如下语句: UPDATE TEACHER SET Deptno=5; 如果该触发器为语句级触发器,那么执行完该语句后,触发动作只发生一次 如果是行级触发器,触发动作将执行1000次 An Introduction to Database Systems
558
An Introduction to Database Systems
定义触发器(续) 6. 触发条件 触发条件为真 省略WHEN触发条件 7. 触发动作体 触发动作体可以是一个匿名PL/SQL过程块 也可以是对已创建存储过程的调用 An Introduction to Database Systems
559
An Introduction to Database Systems
定义触发器(续) [例18] 定义一个BEFORE行级触发器,为教师表Teacher定义完整性规则“教授的工资不得低于4000元,如果低于4000元,自动改为4000元”。 CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher /*触发事件是插入或更新操作*/ FOR EACH ROW /*行级触发器*/ AS BEGIN /*定义触发动作体,是PL/SQL过程块*/ IF (new.Job='教授') AND (new.Sal < 4000) THEN new.Sal :=4000; END IF; END; An Introduction to Database Systems
560
An Introduction to Database Systems
定义触发器(续) [例19]定义AFTER行级触发器,当教师表Teacher的工资发生变化后就自动在工资变化表Sal_log中增加一条相应记录 首先建立工资变化表Sal_log CREATE TABLE Sal_log (Eno NUMERIC(4) references teacher(eno), Sal NUMERIC(7,2), Username char(10), Date TIMESTAMP ); An Introduction to Database Systems
561
An Introduction to Database Systems
定义触发器(续) [例19](续) CREATE TRIGGER Insert_Sal AFTER INSERT ON Teacher /*触发事件是INSERT*/ FOR EACH ROW AS BEGIN INSERT INTO Sal_log VALUES( new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP); END; An Introduction to Database Systems
562
An Introduction to Database Systems
定义触发器(续) [例19](续) CREATE TRIGGER Update_Sal AFTER UPDATE ON Teacher /*触发事件是UPDATE */ FOR EACH ROW AS BEGIN IF (new.Sal <> old.Sal) THEN INSERT INTO Sal_log VALUES( new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP); END IF; END; An Introduction to Database Systems
563
An Introduction to Database Systems
5.6 触发器 5.6.1 定义触发器 5.6.2 激活触发器 5.6.3 删除触发器 An Introduction to Database Systems
564
An Introduction to Database Systems
5.6.2 激活触发器 触发器的执行,是由触发事件激活的,并由数据库服务器自动执行 一个数据表上可能定义了多个触发器 同一个表上的多个触发器激活时遵循如下的执行顺序: (1) 执行该表上的BEFORE触发器; (2) 激活触发器的SQL语句; (3) 执行该表上的AFTER触发器。 An Introduction to Database Systems
565
An Introduction to Database Systems
激活触发器(续) [例20]执行修改某个教师工资的SQL语句,激活上述定义的触发器。 UPDATE Teacher SET Sal=800 WHERE Ename='陈平'; 执行顺序是: 执行触发器Insert_Or_Update_Sal 执行SQL语句“UPDATE Teacher SET Sal=800 WHERE Ename='陈平';” 执行触发器Insert_Sal; 执行触发器Update_Sal An Introduction to Database Systems
566
An Introduction to Database Systems
5.6 触发器 5.6.1 定义触发器 5.6.2 激活触发器 5.6.3 删除触发器 An Introduction to Database Systems
567
An Introduction to Database Systems
5.6.3 删除触发器 删除触发器的SQL语法: DROP TRIGGER <触发器名> ON <表名>; 触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。 [例21] 删除教师表Teacher上的触发器Insert_Sal DROP TRIGGER Insert_Sal ON Teacher; An Introduction to Database Systems
568
An Introduction to Database Systems
第五章 数据库完整性 5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结 An Introduction to Database Systems
569
An Introduction to Database Systems
5.7 小结 数据库的完整性是为了保证数据库中存储的数据是正确的 RDBMS完整性实现的机制 完整性约束定义机制 完整性检查机制 违背完整性约束条件时RDBMS应采取的动作 An Introduction to Database Systems
570
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第六章 关系数据理论 中国人民大学信息学院 An Introduction to Database Systems
571
An Introduction to Database Systems
第六章 关系数据理论 6.1 问题的提出 6.2 规范化 6.3 数据依赖的公理系统 *6.4 模式的分解 6.5 小结 An Introduction to Database Systems
572
An Introduction to Database Systems
6.1 问题的提出 关系数据库逻辑设计 针对具体问题,如何构造一个适合于它的数据模式 数据库逻辑设计的工具──关系数据库的规范化理论 An Introduction to Database Systems
573
An Introduction to Database Systems
问题的提出 一、概念回顾 二、关系模式的形式化定义 三、什么是数据依赖 四、关系模式的简化定义 五、数据依赖对关系模式影响 An Introduction to Database Systems
574
An Introduction to Database Systems
一、概念回顾 关系 关系模式 关系数据库 关系数据库的模式 An Introduction to Database Systems
575
An Introduction to Database Systems
二、关系模式的形式化定义 关系模式由五部分组成,即它是一个五元组: R(U, D, DOM, F) R: 关系名 U: 组成该关系的属性名集合 D: 属性组U中属性所来自的域 DOM: 属性向域的映象集合 F: 属性间数据的依赖关系集合 An Introduction to Database Systems
576
An Introduction to Database Systems
三、什么是数据依赖 1. 完整性约束的表现形式 限定属性取值范围:例如学生成绩必须在0-100之间 定义属性值间的相互关连(主要体现于值的相等与否),这就是数据依赖,它是数据库模式设计的关键 An Introduction to Database Systems
577
An Introduction to Database Systems
什么是数据依赖(续) 2. 数据依赖 一个关系内部属性与属性之间的约束关系 现实世界属性间相互联系的抽象 数据内在的性质 语义的体现 An Introduction to Database Systems
578
An Introduction to Database Systems
什么是数据依赖(续) 3. 数据依赖的类型 函数依赖(Functional Dependency,简记为FD) 多值依赖(Multivalued Dependency,简记为MVD) 其他 An Introduction to Database Systems
579
An Introduction to Database Systems
四、关系模式的简化表示 关系模式R(U, D, DOM, F) 简化为一个三元组: R(U, F) 当且仅当U上的一个关系r满足F时,r称为关系模式 R(U, F)的一个关系 An Introduction to Database Systems
580
An Introduction to Database Systems
五、数据依赖对关系模式的影响 [例1]建立一个描述学校教务的数据库: 学生的学号(Sno)、所在系(Sdept) 系主任姓名(Mname)、课程名(Cname) 成绩(Grade) 单一的关系模式 : Student <U、F> U ={ Sno, Sdept, Mname, Cname, Grade } An Introduction to Database Systems
581
An Introduction to Database Systems
数据依赖对关系模式的影响(续) 属性组U上的一组函数依赖F: F ={ Sno → Sdept, Sdept → Mname, (Sno, Cname) → Grade } Sno Cname Sdept Mname Grade An Introduction to Database Systems
582
关系模式Student<U, F>中存在的问题
1. 数据冗余太大 2. 更新异常(Update Anomalies) 3. 插入异常(Insertion Anomalies) 4. 删除异常(Deletion Anomalies) An Introduction to Database Systems
583
An Introduction to Database Systems
数据依赖对关系模式的影响(续) 结论: Student关系模式不是一个好的模式。 “好”的模式: 不会发生插入异常、删除异常、更新异常, 数据冗余应尽可能少 原因:由存在于模式中的某些数据依赖引起的 解决方法:通过分解关系模式来消除其中不合适 的数据依赖 An Introduction to Database Systems
584
An Introduction to Database Systems
分解关系模式 把这个单一模式分成3个关系模式: S(Sno,Sdept,Sno → Sdept); SC(Sno,Cno,Grade,(Sno,Cno) → Grade); DEPT(Sdept,Mname,Sdept→ Mname) An Introduction to Database Systems
585
An Introduction to Database Systems
第六章 关系数据理论 6.1 问题的提出 6.2 规范化 6.3 数据依赖的公理系统 *6.4 模式的分解 6.5 小结 An Introduction to Database Systems
586
An Introduction to Database Systems
6.2 规范化 规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。 An Introduction to Database Systems
587
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
588
An Introduction to Database Systems
6.2.1 函数依赖 函数依赖 平凡函数依赖与非平凡函数依赖 完全函数依赖与部分函数依赖 传递函数依赖 An Introduction to Database Systems
589
An Introduction to Database Systems
一、函数依赖 定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。 An Introduction to Database Systems
590
An Introduction to Database Systems
说明 1. 所有关系实例均要满足 2. 语义范畴的概念 3. 数据库设计者可以对现实世界作强制的规定 An Introduction to Database Systems
591
An Introduction to Database Systems
二、平凡函数依赖与非平凡函数依赖 在关系模式R(U)中,对于U的子集X和Y, 如果X→Y,但Y X,则称X→Y是非平凡的函数依赖 若X→Y,但Y X, 则称X→Y是平凡的函数依赖 例:在关系SC(Sno, Cno, Grade)中, 非平凡函数依赖: (Sno, Cno) → Grade 平凡函数依赖: (Sno, Cno) → Sno (Sno, Cno) → Cno An Introduction to Database Systems
592
An Introduction to Database Systems
平凡函数依赖与非平凡函数依赖(续) 若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。 若X→Y,Y→X,则记作X←→Y。 若Y不函数依赖于X,则记作X→Y。 An Introduction to Database Systems
593
An Introduction to Database Systems
三、完全函数依赖与部分函数依赖 定义6.2 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’ Y, 则称Y对X完全函数依赖,记作 X F Y。 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X P Y。 An Introduction to Database Systems
594
An Introduction to Database Systems
完全函数依赖与部分函数依赖(续) [例1] 中(Sno,Cno)→Grade是完全函数依赖, (Sno,Cno)→Sdept是部分函数依赖 因为Sno →Sdept成立,且Sno是(Sno,Cno)的真子集 F P An Introduction to Database Systems
595
An Introduction to Database Systems
四、传递函数依赖 定义6.3 在R(U)中,如果X→Y,(Y X) ,Y→X Y→Z, 则称Z对X传递函数依赖。 记为:X → Z 注: 如果Y→X, 即X←→Y,则Z直接依赖于X。 例: 在关系Std(Sno, Sdept, Mname)中,有: Sno → Sdept,Sdept → Mname Mname传递函数依赖于Sno 传递 An Introduction to Database Systems
596
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
597
An Introduction to Database Systems
6.2.2 码 定义6.4 设K为R<U,F>中的属性或属性组合。若K U, 则K称为R的侯选码(Candidate Key)。 若候选码多于一个,则选定其中的一个做为主码(Primary Key)。 F An Introduction to Database Systems
598
An Introduction to Database Systems
码(续) 主属性与非主属性 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute) 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute) 全码 整个属性组是码,称为全码(All-key) An Introduction to Database Systems
599
An Introduction to Database Systems
码(续) [例2] 关系模式S(Sno,Sdept,Sage),单个属性Sno是码, SC(Sno,Cno,Grade)中,(Sno,Cno)是码 [例3] 关系模式R(P,W,A) P:演奏者 W:作品 A:听众 一个演奏者可以演奏多个作品 某一作品可被多个演奏者演奏 听众可以欣赏不同演奏者的不同作品 码为(P,W,A),即All-Key An Introduction to Database Systems
600
An Introduction to Database Systems
外部码 定义6.5 关系模式 R 中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码 如在SC(Sno,Cno,Grade)中,Sno不是码,但Sno是关系模式S(Sno,Sdept,Sage)的码,则Sno是关系模式SC的外部码 主码与外部码一起提供了表示关系间联系的手段 An Introduction to Database Systems
601
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
602
An Introduction to Database Systems
6.2.3 范式 范式是符合某一种级别的关系模式的集合 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式 范式的种类: 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF) An Introduction to Database Systems
603
An Introduction to Database Systems
6.2.3 范式 各种范式之间存在联系: 某一关系模式R为第n范式,可简记为R∈nNF。 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化 An Introduction to Database Systems
604
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
605
An Introduction to Database Systems
NF 1NF的定义 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库 但是满足第一范式的关系模式并不一定是一个好的关系模式 An Introduction to Database Systems
606
An Introduction to Database Systems
2NF(续) [例4] 关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade) Sloc为学生住处,假设每个系的学生住在同一个地方 函数依赖包括: (Sno, Cno) F Grade Sno → Sdept (Sno, Cno) P Sdept Sno → Sloc (Sno, Cno) P Sloc Sdept → Sloc An Introduction to Database Systems
607
An Introduction to Database Systems
2NF(续) S-L-C Sno Sdept S-L-C的码为(Sno, Cno) S-L-C满足第一范式。 非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno) Grade Cno Sloc An Introduction to Database Systems
608
An Introduction to Database Systems
S-L-C不是一个好的关系模式(续) (1) 插入异常 (2) 删除异常 (3) 数据冗余度大 (4) 修改复杂 An Introduction to Database Systems
609
An Introduction to Database Systems
S-L-C不是一个好的关系模式(续) 原因 Sdept、 Sloc部分函数依赖于码。 解决方法 S-L-C分解为两个关系模式,以消除这些部分函数依赖 SC(Sno, Cno, Grade) S-L(Sno, Sdept, Sloc) An Introduction to Database Systems
610
An Introduction to Database Systems
2NF(续) 函数依赖图: S-L Sno Sdept Sloc Sno Cno Grade SC 关系模式SC的码为(Sno,Cno) 关系模式S-L的码为Sno 这样非主属性对码都是完全函数依赖 An Introduction to Database Systems
611
An Introduction to Database Systems
2NF(续) 2NF的定义 定义6.6 若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。 例:S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈1NF S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈2NF SC(Sno, Cno, Grade) ∈ 2NF S-L(Sno, Sdept, Sloc) ∈ 2NF An Introduction to Database Systems
612
An Introduction to Database Systems
2NF(续) 采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。 将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。 An Introduction to Database Systems
613
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
614
An Introduction to Database Systems
NF 3NF的定义 定义6.7 关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z Y), 使得X→Y,Y→Z成立, Y → X,则称R<U,F> ∈ 3NF。 若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。 An Introduction to Database Systems
615
An Introduction to Database Systems
3NF(续) 例:2NF关系模式S-L(Sno, Sdept, Sloc)中 函数依赖: Sno→Sdept Sdept → Sno Sdept→Sloc 可得: Sno→Sloc,即S-L中存在非主属性对码的传递函数依 赖,S-L ∈ 3NF 传递 An Introduction to Database Systems
616
An Introduction to Database Systems
3NF(续) 函数依赖图: S-L Sno Sdept Sloc An Introduction to Database Systems
617
An Introduction to Database Systems
3NF(续) 解决方法 采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖: S-D(Sno, Sdept) D-L(Sdept,Sloc) S-D的码为Sno, D-L的码为Sdept。 分解后的关系模式S-D与D-L中不再存在传递依赖 An Introduction to Database Systems
618
An Introduction to Database Systems
3NF(续) S-D的码为Sno, D-L的码为Sdept Sno Sdept S-D Sloc D-L S-L(Sno, Sdept, Sloc) ∈ 2NF S-L(Sno, Sdept, Sloc) ∈ 3NF S-D(Sno,Sdept) ∈ 3NF D-L(Sdept, Sloc)∈ 3NF An Introduction to Database Systems
619
An Introduction to Database Systems
3NF(续) 采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。 将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。 An Introduction to Database Systems
620
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
621
An Introduction to Database Systems
BC范式(BCNF) 定义6.8 关系模式R<U,F>∈1NF,若X→Y且Y X时X必含有码,则R<U,F> ∈BCNF。 等价于:每一个决定属性因素都包含码 An Introduction to Database Systems
622
An Introduction to Database Systems
BCNF(续) 若R∈BCNF 所有非主属性对每一个码都是完全函数依赖 所有的主属性对每一个不包含它的码,也是完全函数依赖 没有任何属性完全函数依赖于非码的任何一组属性 R ∈BCNF R ∈3NF 充分 不必要 An Introduction to Database Systems
623
An Introduction to Database Systems
BCNF(续) [例5] 关系模式C(Cno,Cname,Pcno) C∈3NF C∈BCNF [例6] 关系模式S(Sno,Sname,Sdept,Sage) 假定S有两个码Sno,Sname S∈3NF。 S ∈ BCNF An Introduction to Database Systems
624
An Introduction to Database Systems
BCNF(续) [例7]关系模式SJP(S,J,P) 函数依赖:(S,J)→P;(J,P)→S (S,J)与(J,P)都可以作为候选码,属性相交 SJP∈3NF, SJP∈BCNF An Introduction to Database Systems
625
An Introduction to Database Systems
BCNF(续) [例8]在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。 函数依赖: (S,J)→T,(S,T)→J,T→J (S,J)和(S,T)都是候选码 An Introduction to Database Systems
626
An Introduction to Database Systems
BCNF(续) S J T STJ中的函数依赖 J An Introduction to Database Systems
627
An Introduction to Database Systems
BCNF(续) STJ∈3NF 没有任何非主属性对码传递依赖或部分依赖 STJ∈BCNF T是决定因素,T不包含码 An Introduction to Database Systems
628
An Introduction to Database Systems
BCNF(续) 解决方法:将STJ分解为二个关系模式: ST(S,T) ∈ BCNF, TJ(T,J)∈ BCNF 没有任何属性对码的部分函数依赖和传递函数依赖 S J ST T TJ An Introduction to Database Systems
629
An Introduction to Database Systems
3NF与BCNF的关系 R ∈BCNF R ∈3NF 如果R∈3NF,且R只有一个候选码 充分 不必要 充分 必要 An Introduction to Database Systems
630
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
631
An Introduction to Database Systems
6.2.7 多值依赖 [例9] 学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。每个教员可以讲授多门课程,每种参考书可以供多门课程使用。 An Introduction to Database Systems
632
An Introduction to Database Systems
多值依赖(续) 非规范化关系 课 程 C 教 员 T 参 考 书 B 物理 数学 计算数学 李 勇 王 军 张 平 周 峰 普通物理学 光学原理 物理习题集 数学分析 微分方程 高等代数 ... … … … … An Introduction to Database Systems
633
An Introduction to Database Systems
多值依赖(续) 用二维表表示Teaching 普通物理学 光学原理 物理习题集 数学分析 微分方程 高等代数 … 李 勇 王 军 张 平 物 理 数 学 参考书B 教员T 课程C An Introduction to Database Systems
634
An Introduction to Database Systems
多值依赖(续) Teaching∈BCNF Teaching具有唯一候选码(C,T,B), 即全码 An Introduction to Database Systems
635
An Introduction to Database Systems
多值依赖(续) Teaching模式中存在的问题 (1)数据冗余度大 (2)插入操作复杂 (3) 删除操作复杂 (4) 修改操作复杂 存在 多值依赖 An Introduction to Database Systems
636
An Introduction to Database Systems
多值依赖(续) 定义6.9 设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖 X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关 例 Teaching(C, T, B) An Introduction to Database Systems
637
An Introduction to Database Systems
多值依赖(续) 多值依赖的另一个等价的形式化的定义: 在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。 An Introduction to Database Systems
638
An Introduction to Database Systems
多值依赖(续) 平凡多值依赖和非平凡的多值依赖 若X→→Y,而Z=φ,则称 X→→Y为平凡的多值依赖 否则称X→→Y为非平凡的多值依赖 An Introduction to Database Systems
639
An Introduction to Database Systems
多值依赖(续) [例10]关系模式WSC(W,S,C) W表示仓库,S表示保管员,C表示商品 假设每个仓库有若干个保管员,有若干种商品 每个保管员保管所在的仓库的所有商品 每种商品被所有保管员保管 An Introduction to Database Systems
640
An Introduction to Database Systems
多值依赖(续) W S C W1 S1 C1 C2 C3 S2 W2 S3 C4 C5 S4 An Introduction to Database Systems
641
An Introduction to Database Systems
多值依赖(续) 用下图表示这种对应 W→→S且W→→C An Introduction to Database Systems
642
An Introduction to Database Systems
多值依赖的性质 (1)多值依赖具有对称性 若X→→Y,则X→→Z,其中Z=U-X-Y (2)多值依赖具有传递性 若X→→Y,Y→→Z, 则X→→Z –Y (3)函数依赖是多值依赖的特殊情况。 若X→Y,则X→→Y。 (4)若X→→Y,X→→Z,则X→→Y Z。 (5)若X→→Y,X→→Z,则X→→Y∩Z。 (6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。 An Introduction to Database Systems
643
An Introduction to Database Systems
多值依赖与函数依赖的区别 (1) 多值依赖的有效性与属性集的范围有关 (2) 若函数依赖X→Y在R(U)上成立,则对于任何Y' Y均有X→Y' 成立 多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y' Y有X→→Y' 成立 An Introduction to Database Systems
644
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
645
An Introduction to Database Systems
NF 定义 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y X),X都含有码,则R∈4NF。 如果R ∈ 4NF, 则R ∈ BCNF 不允许有非平凡且非函数依赖的多值依赖 允许的非平凡多值依赖是函数依赖 An Introduction to Database Systems
646
An Introduction to Database Systems
4NF(续) 例: Teaching(C,T,B) ∈ 4NF 存在非平凡的多值依赖C→→T,且C不是码 用投影分解法把Teaching分解为如下两个关系模式: CT(C, T) ∈ 4NF CB(C, B) ∈ 4NF C→→T, C→→B是平凡多值依赖 An Introduction to Database Systems
647
An Introduction to Database Systems
6.2 规范化 函数依赖 码 范式 NF NF BCNF 多值依赖 NF 规范化小结 An Introduction to Database Systems
648
An Introduction to Database Systems
6.2.9 规范化小结 关系数据库的规范化理论是数据库逻辑设计的工具 目的:尽量消除插入、删除一场,修改复杂,数据冗余 基本思想:逐步消除数据依赖中不合适的部分 实质:概念的单一化 An Introduction to Database Systems
649
An Introduction to Database Systems
规范化小结(续) 关系模式规范化的基本步骤 1NF ↓ 消除非主属性对码的部分函数依赖 消除决定属性 2NF 集非码的非平 ↓ 消除非主属性对码的传递函数依赖 凡函数依赖 NF ↓ 消除主属性对码的部分和传递函数依赖 BCNF ↓ 消除非平凡且非函数依赖的多值依赖 4NF An Introduction to Database Systems
650
An Introduction to Database Systems
规范化小结(续) 不能说规范化程度越高的关系模式就越好 在设计数据库模式结构时,必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式 上面的规范化步骤可以在其中任何一步终止 An Introduction to Database Systems
651
An Introduction to Database Systems
第六章 关系数据理论 6.1 问题的提出 6.2 规范化 6.3 数据依赖的公理系统 *6.4 模式的分解 6.5 小结 An Introduction to Database Systems
652
An Introduction to Database Systems
6.3 数据依赖的公理系统 逻辑蕴含 定义6.11 对于满足一组函数依赖 F 的关系模式R <U,F>,其任何一个关系r,若函数依赖X→Y都成立, (即r中任意两元组t,s,若tX]=sX],则tY]=sY]),则称F逻辑蕴含X →Y An Introduction to Database Systems
653
An Introduction to Database Systems
1. Armstrong公理系统 关系模式R <U,F >来说有以下的推理规则: A1.自反律(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所蕴含。 An Introduction to Database Systems
654
An Introduction to Database Systems
定理 6.1 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成立,自反律得证 An Introduction to Database Systems
655
定理 6.l Armstrong推理规则是正确的(续)
(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所蕴含,增广律得证。 An Introduction to Database Systems
656
定理 6.l Armstrong推理规则是正确的(续)
(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所蕴含,传递 律得证。 An Introduction to Database Systems
657
An Introduction to Database Systems
2. 导出规则 1.根据A1,A2,A3这三条推理规则可以得到下面三条推理规则: 合并规则:由X→Y,X→Z,有X→YZ。 (A2, A3) 伪传递规则:由X→Y,WY→Z,有XW→Z。 分解规则:由X→Y及 ZY,有X→Z。 (A1, A3) An Introduction to Database Systems
658
An Introduction to Database Systems
导出规则 2.根据合并规则和分解规则,可得引理6.1 引理6.l X→A1 A2…Ak成立的充分必要条件是 X→Ai成立(i=l,2,…,k) An Introduction to Database Systems
659
An Introduction to Database Systems
Armstrong公理系统 Armstrong公理系统是有效的、完备的 有效性:由F出发根据Armstrong公理推导出来的每一个函数依赖一定在F+中; 完备性:F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来 An Introduction to Database Systems
660
An Introduction to Database Systems
3. 函数依赖闭包 定义6.l2 在关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫作 F的闭包,记为F+。 定义 设F为属性集U上的一组函数依赖,X U, XF+ ={ A|X→A能由F 根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F 的闭包 An Introduction to Database Systems
661
An Introduction to Database Systems
F的闭包 F={XY, YZ} F+={ Xφ, Yφ, Zφ, XYφ, XZφ, YZφ, XYZφ, XX, YY, ZZ, XYX, XZX, YZY, XYZX, XY, Y Z, XYY, XZY, YZZ, XYZY, XZ, YYZ, XYZ, XZZ, YZYZ,XYZZ, XXY, XYXY,XZXY, XYZXY, XXZ, XYYZ,XZXZ, XYZYZ, XYZ, XYXZ,XZXY, XYZXZ, XZYZ, XYXYZ,XZXYZ, XYZXYZ } F={XA1, …… , XAn}的闭包F+计算是一个NP完全问题 An Introduction to Database Systems
662
An Introduction to Database Systems
关于闭包的引理 引理6.2 设F为属性集U上的一组函数依赖,X,Y U,X→Y能 由F 根据Armstrong公理导出的充分必要条件是Y XF+ 用途 将判定X→Y是否能由F根据Armstrong公理导出的问题,转化为求出XF+ 、判定Y是否为XF+的子集的问题 An Introduction to Database Systems
663
An Introduction to Database Systems
求闭包的算法 算法6.1 求属性集X(X U)关于U上的函数依赖集F 的闭包XF+ 输入:X,F 输出:XF+ 步骤: (1)令X(0)=X,i=0 (2)求B,这里B = { A |( V)( W)(V→WF∧V X(i)∧A W)}; (3)X(i+1)=B∪X(i) (4)判断X(i+1)= X (i)吗? (5)若相等或X(i)=U , 则X(i)就是XF+ , 算法终止。 (6)若否,则 i=i+l,返回第(2)步。 An Introduction to Database Systems
664
An Introduction to Database Systems
算法6.1 对于算法6.1, 令ai =|X(i)|,{ai }形成一个步长大于1的严格递增的序列,序列的上界是 | U |,因此该算法最多 |U| - |X| 次循环就 会终止。 An Introduction to Database Systems
665
An Introduction to Database Systems
函数依赖闭包 [例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)=AB∪CD=ABCD。 (2) X(0)≠ X(1) X(2)=X(1)∪BE=ABCDE。 (3) X(2)=U,算法终止 (AB)F+ =ABCDE。 An Introduction to Database Systems
666
4. Armstrong公理系统的有效性与完备性
证明: 1. 有效性 可由定理6.1得证 2. 完备性 只需证明逆否命题: 若函数依赖X→Y不能由F从Armstrong公理导出,那么它必然不为F所蕴含 An Introduction to Database Systems
667
An Introduction to Database Systems
Armstrong公理系统完备性证明 (1) 引理: 若V→W成立,且V XF+,则W XF+ (2) 构造一张二维表r,它由下列两个元组构成,可以证明r必是R(U,F)的一个关系,即F+中的全部函数依赖在 r上成立。 XF+ U-XF+ (3) 若X→Y 不能由F从Armstrong公理导出,则Y 不是XF+ 的子集。 An Introduction to Database Systems
668
An Introduction to Database Systems
5. 函数依赖集等价 定义6.14 如果G+=F+,就说函数依赖集F覆盖G(F是G的覆 盖,或G是F的覆盖),或F与G等价。 引理6.3 F+ = G+ 的充分必要条件是F G+ ,和G F+ 证: 必要性显然,只证充分性。 (1)若FG+ ,则XF+ XG++ 。 (2)任取X→YF+ 则有 Y XF+ XG++ 。 所以X→Y (G+)+= G+。即F+ G+。 (3)同理可证G+ F+ ,所以F+ = G+。 An Introduction to Database Systems
669
An Introduction to Database Systems
6. 最小依赖集 定义6.15 如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。 (1) F中任一函数依赖的右部仅含有一个属性。 (2) F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。 (3) F中不存在这样的函数依赖X→A, X有真子集Z使得F-{X→A}∪{Z→A}与F等价。 An Introduction to Database Systems
670
An Introduction to Database Systems
最小依赖集 [例2] 关系模式S<U,F>,其中: U={ Sno,Sdept,Mname,Cno,Grade }, F={ Sno→Sdept,Sdept→Mname,(Sno,Cno)→Grade } 设F’={Sno→Sdept,Sno→Mname,Sdept→Mname, (Sno,Cno)→Grade,(Sno,Sdept)→Sdept} F是最小覆盖,而F’不是。 因为:F ’ - {Sno→Mname}与F ’等价 F ’ - {(Sno,Sdept)→Sdept}也与F ’等价 An Introduction to Database Systems
671
An Introduction to Database Systems
7. 极小化过程 定理6.3 每一个函数依赖集F均等价于一个极小函数依赖 集Fm。此Fm称为F的最小依赖集。 证明: 构造性证明,找出F的一个最小依赖集。 An Introduction to Database Systems
672
An Introduction to Database Systems
极小化过程(续) (1)逐一检查F中各函数依赖FDi:X→Y,若Y=A1A2 …Ak,k > 2, 则用 { X→Aj |j=1,2,…, k} 来取代X→Y。 (2)逐一检查F中各函数依赖FDi:X→A,令G=F-{X→A}, 若AXG+, 则从F中去掉此函数依赖。 (3)逐一取出F中各函数依赖FDi:X→A,设X=B1B2…Bm, 逐一考查Bi (i=l,2,…,m),若A (X-Bi )F+ , 则以X-Bi 取代X。 An Introduction to Database Systems
673
An Introduction to Database Systems
极小化过程(续) [例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不唯一 极小化过程( 定理6.3的证明 )也是检验F是否为极小依赖集的一个算法 An Introduction to Database Systems
674
An Introduction to Database Systems
第六章 关系数据理论 6.1 问题的提出 6.2 规范化 6.3 数据依赖的公理系统 *6.4 模式的分解 6.5 小结 An Introduction to Database Systems
675
An Introduction to Database Systems
6.4 模式的分解 把低一级的关系模式分解为若干个高一级的关系模式的方法不是唯一的 只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义 An Introduction to Database Systems
676
An Introduction to Database Systems
关系模式分解的标准 三种模式分解等价的定义: ⒈ 分解具有无损连接性 ⒉ 分解要保持函数依赖 ⒊ 分解既要保持函数依赖,又要具有无损连接性 An Introduction to Database Systems
677
An Introduction to Database Systems
模式的分解(续) 定义6.16 关系模式R<U,F>的一个分解: ρ={ R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn>} U= ∪Ui,且不存在 Ui Uj,Fi 为 F在 Ui 上的投影 定义6.17 函数依赖集合{X→Y | X→Y F+∧XY Ui} 的一个覆盖 Fi 叫作 F 在属性 Ui 上的投影 n i=1 An Introduction to Database Systems
678
An Introduction to Database Systems
模式的分解(续) 例:S-L(Sno, Sdept, Sloc) F={ Sno→Sdept,Sdept→Sloc,Sno→Sloc} S-L∈2NF 分解方法可以有多种: 1. S-L分解为三个关系模式:SN(Sno) SD(Sdept) SO(Sloc) 2. SL分解为下面二个关系模式: NL(Sno, Sloc) DL(Sdept, Sloc) 3. 将SL分解为下面二个关系模式: ND(Sno, Sdept) NL(Sno, Sloc) An Introduction to Database Systems
679
An Introduction to Database Systems
具有无损连接性的模式分解 关系模式R<U,F>的一个分解 ρ={ R1<U1,F1>,R2<U2,F2>, …,Rn<Un,Fn>} 若R与R1、R2、…、Rn自然连接的结果相等,则称关系模式R的这个分解ρ具有无损连接性(Lossless join) 具有无损连接性的分解保证不丢失信息 无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题 An Introduction to Database Systems
680
An Introduction to Database Systems
模式的分解(续) 第3种分解方法具有无损连接性 问题:这种分解方法没有保持原关系中的函数依赖 SL中的函数依赖Sdept→Sloc没有投影到关系模式ND、NL上 An Introduction to Database Systems
681
An Introduction to Database Systems
保持函数依赖的模式分解 设关系模式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) An Introduction to Database Systems
682
An Introduction to Database Systems
模式的分解(续) 4. 将SL分解为下面二个关系模式: ND(Sno, Sdept) DL(Sdept, Sloc) 这种分解方法就保持了函数依赖 An Introduction to Database Systems
683
An Introduction to Database Systems
模式的分解(续) 如果一个分解具有无损连接性,则它能够保证不丢失信息 如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况 分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。具有无损连接性的分解不一定能够保持函数依赖;同样,保持函数依赖的分解也不一定具有无损连接性。 An Introduction to Database Systems
684
An Introduction to Database Systems
模式的分解(续) 第1种分解方法既不具有无损连接性,也未保持函数依赖, 它不是原关系模式的一个等价分解 第2种分解方法保持了函数依赖,但不具有无损连接性 第3种分解方法具有无损连接性,但未持函数依赖 第4种分解方法既具有无损连接性,又保持了函数依赖 An Introduction to Database Systems
685
An Introduction to Database Systems
分解算法 算法6.2 判别一个分解的无损连接性 算法6.3(合成法)转换为3NF的保持函数依赖的分解。 算法6.4 转换为3NF既有无损连接性又保持函数依赖的分解 算法6.5 (分解法)转换为BCNF的无损连接分解 算法6.6 达到4NF的具有无损连接性的分解 An Introduction to Database Systems
686
An Introduction to Database Systems
第六章 关系数据理论 6.1 问题的提出 6.2 规范化 6.3 数据依赖的公理系统 *6.4 模式的分解 6.5 小结 An Introduction to Database Systems
687
An Introduction to Database Systems
6.5 小结 关系模式的规范化,其基本思想: An Introduction to Database Systems
688
An Introduction to Database Systems
小结(续) 若要求分解具有无损连接性,那么模式分解一定能够达到4NF 若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF 若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF An Introduction to Database Systems
689
An Introduction to Database Systems
小结(续) 规范化理论为数据库设计提供了理论的指南和工具 也仅仅是指南和工具 并不是规范化程度越高,模式就越好 必须结合应用环境和现实世界的具体情况合理地选择数据库模式 An Introduction to Database Systems
690
An Introduction to Database Systems
下课了。。。 研 究 休息一会儿。。。 An Introduction to Database Systems
691
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第七章 数据库设计 中国人民大学信息学院 An Introduction to Database Systems
692
An Introduction to Database Systems
第七章 数据库设计 7.1 数据库设计概述 7.2 需求分析 7.3 概念结构设计 7.4 逻辑结构设计 7.5 数据库的物理设计 7.6 数据库实施和维护 7.7 小结 An Introduction to Database Systems
693
An Introduction to Database Systems
数据库设计概述 数据库设计 数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。 目标:为用户和各种应用系统提供一个信息基础设施和高效率的运行环境 An Introduction to Database Systems
694
An Introduction to Database Systems
7.1 数据库设计概述 数据库设计的特点 数据库设计方法 数据库设计的基本步骤 数据库设计过程中的各级模式 An Introduction to Database Systems
695
An Introduction to Database Systems
数据库设计的特点 数据库建设的基本规律 三分技术,七分管理,十二分基础数据 管理 数据库建设项目管理 企业(即应用部门)的业务管理 基础数据 收集、入库 更新新的数据 结构(数据)设计和行为(处理)设计相结合 将数据库结构设计和数据处理设计密切结合 An Introduction to Database Systems
696
An Introduction to Database Systems
数据库设计的特点(续) 现实世界 概念模型设计 子模式设计 物理数据库设计 逻辑数据库设计 建立数据库 数据分析 功能分析 功能模型 功能说明 事务设计 程序说明 应用程序设计 程序编码调试 结构和行为分离的设计 An Introduction to Database Systems
697
An Introduction to Database Systems
7.1 数据库设计概述 数据库设计的特点 数据库设计方法 数据库设计的基本步骤 数据库设计过程中的各级模式 An Introduction to Database Systems
698
An Introduction to Database Systems
数据库设计方法 手工与经验相结合方法 设计质量与设计人员的经验和水平有直接关系 数据库运行一段时间后常常不同程度地发现各种问题,增加了维护代价 规范设计法 基本思想:过程迭代和逐步求精 An Introduction to Database Systems
699
An Introduction to Database Systems
数据库设计方法(续) 新奥尔良(New Orleans)方法 将数据库设计分为若干阶段和步骤 基于E-R模型的数据库设计方法 概念设计阶段广泛采用 3NF(第三范式)的设计方法 逻辑阶段可采用的有效方法 ODL(Object Definition Language)方法 面向对象的数据库设计方法 An Introduction to Database Systems
700
An Introduction to Database Systems
数据库设计方法(续) 计算机辅助设计 ORACLE Designer 2000 SYBASE PowerDesigner An Introduction to Database Systems
701
An Introduction to Database Systems
7.1 数据库设计概述 数据库设计的特点 数据库设计方法 数据库设计的基本步骤 数据库设计过程中的各级模式 An Introduction to Database Systems
702
An Introduction to Database Systems
数据库设计的基本步骤 数据库设计分6个阶段 需求分析 概念结构设计 逻辑结构设计 物理结构设计 数据库实施 数据库运行和维护 需求分析和概念设计独立于任何数据库管理系统 逻辑设计和物理设计与选用的DBMS密切相关 An Introduction to Database Systems
703
An Introduction to Database Systems
数据库设计的基本步骤(续) 一、数据库设计的准备工作:选定参加设计的人 1.系统分析人员、数据库设计人员 自始至终参与数据库设计 2. 用户和数据库管理员 主要参加需求分析和数据库的运行维护 3.应用开发人员(程序员和操作员) 在系统实施阶段参与进来,负责编制程序和准备软硬件环境 An Introduction to Database Systems
704
An Introduction to Database Systems
数据库设计的基本步骤(续) 二、数据库设计的过程(六个阶段) ⒈需求分析阶段 准确了解与分析用户需求(包括数据与处理) 最困难、最耗费时间的一步 An Introduction to Database Systems
705
An Introduction to Database Systems
数据库设计的基本步骤(续) ⒉概念结构设计阶段 整个数据库设计的关键 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型 An Introduction to Database Systems
706
An Introduction to Database Systems
数据库设计的基本步骤(续) ⒊逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型 对其进行优化 An Introduction to Database Systems
707
An Introduction to Database Systems
数据库设计的基本步骤(续) ⒋数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法) An Introduction to Database Systems
708
An Introduction to Database Systems
数据库设计的基本步骤(续) ⒌数据库实施阶段 运用DBMS提供的数据库语言(如SQL)及宿主语言,根据逻辑设计和物理设计的结果 建立数据库 编制与调试应用程序 组织数据入库 进行试运行 An Introduction to Database Systems
709
An Introduction to Database Systems
数据库设计的基本步骤(续) ⒍数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行 在数据库系统运行过程中必须不断地对其进行评价、调整与修改 An Introduction to Database Systems
710
An Introduction to Database Systems
数据库设计的基本步骤(续) 设计一个完善的数据库应用系统往往是上述六个阶段的不断反复(P202图7.2) 把数据库设计和对数据库中数据处理的设计紧密结合起来 将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计 An Introduction to Database Systems
711
An Introduction to Database Systems
数据库设计各个阶段的设计描述
712
An Introduction to Database Systems
7.1 数据库设计概述 数据库设计的特点 数据库设计方法 数据库设计的基本步骤 数据库设计过程中的各级模式 An Introduction to Database Systems
713
An Introduction to Database Systems
7.1.4数据库设计过程中的各级模式 数据库设计不同阶段形成的数据库各级模式 数据库的各级模式 An Introduction to Database Systems
714
An Introduction to Database Systems
第七章 数据库设计 7.1 数据库设计概述 7.2 需求分析 7.3 概念结构设计 7.4 逻辑结构设计 7.5 数据库的物理设计 7.6 数据库实施和维护 7.7 小结 An Introduction to Database Systems
715
An Introduction to Database Systems
7.2 需求分析 需求分析的任务 需求分析的方法 数据字典 An Introduction to Database Systems
716
An Introduction to Database Systems
需求分析的任务 需求分析的任务 需求分析的重点 需求分析的难点 An Introduction to Database Systems
717
An Introduction to Database Systems
需求分析的任务 详细调查现实世界要处理的对象(组织、部门、企业等) 充分了解原系统(手工系统或计算机系统) 明确用户的各种需求 确定新系统的功能 充分考虑今后可能的扩充和改变 An Introduction to Database Systems
718
An Introduction to Database Systems
需求分析的重点 调查的重点是“数据”和“处理”,获得用户对数据库要求 信息要求 处理要求 安全性与完整性要求 An Introduction to Database Systems
719
An Introduction to Database Systems
需求分析的难点 确定用户最终需求 用户缺少计算机知识 设计人员缺少用户的专业知识 解决方法 设计人员必须不断深入地与用户进行交流 An Introduction to Database Systems
720
An Introduction to Database Systems
7.2 需求分析 需求分析的任务 需求分析的方法 数据字典 An Introduction to Database Systems
721
An Introduction to Database Systems
需求分析的方法 调查需求 达成共识 分析表达需求 An Introduction to Database Systems
722
An Introduction to Database Systems
调查用户需求的具体步骤 ⑴ 调查组织机构情况 ⑵ 调查各部门的业务活动情况。 ⑶ 在熟悉业务活动的基础上,协助用户明确对新系统的各种要求。 ⑷ 确定新系统的边界 An Introduction to Database Systems
723
An Introduction to Database Systems
常用调查方法 (1)跟班作业 (2)开调查会 (3)请专人介绍 (4)询问 (5)设计调查表请用户填写 (6)查阅记录 An Introduction to Database Systems
724
An Introduction to Database Systems
进一步分析和表达用户需求 结构化分析方法(Structured Analysis,简称SA方法) 从最上层的系统组织机构入手 自顶向下、逐层分解分析系统 An Introduction to Database Systems
725
An Introduction to Database Systems
进一步分析和表达用户需求(续) 1.首先把任何一个系统都抽象为: 数据流 数据 存储 信息要求 来源 处理 输出 处理要求 An Introduction to Database Systems
726
An Introduction to Database Systems
进一步分析和表达用户需求(续) 2.分解处理功能和数据 (1)分解处理功能 将处理功能的具体内容分解为若干子功能 (2)分解数据 处理功能逐步分解同时,逐级分解所用数据,形成若干层次的数据流图 (3)表达方法 处理逻辑:用判定表或判定树来描述 数据:用数据字典来描述 3.将分析结果再次提交给用户,征得用户的认可 An Introduction to Database Systems
727
An Introduction to Database Systems
需求分析过程 需求分析过程 An Introduction to Database Systems
728
An Introduction to Database Systems
7.2 需求分析 需求分析的任务 需求分析的方法 数据字典 An Introduction to Database Systems
729
An Introduction to Database Systems
数据字典 数据字典的用途 进行详细的数据收集和数据分析所获得的主要结果 数据字典的内容 数据项 数据结构 数据流 数据存储 处理过程 An Introduction to Database Systems
730
An Introduction to Database Systems
⒈ 数据项 数据项是不可再分的数据单位 对数据项的描述 数据项描述={ 数据项名,数据项含义说明,别名, 数据类型,长度,取值范围,取值含义, 与其他数据项的逻辑关系,数据项之间的 联系 } An Introduction to Database Systems
731
An Introduction to Database Systems
⒉ 数据结构 数据结构反映了数据之间的组合关系。 一个数据结构可以由若干个数据项组成,也可以由若干个 数据结构组成,或由若干个数据项和数据结构混合组成。 对数据结构的描述 数据结构描述={数据结构名,含义说明, 组成:{数据项或数据结构}} An Introduction to Database Systems
732
An Introduction to Database Systems
⒊ 数据流 数据流是数据结构在系统内传输的路径。 对数据流的描述 数据流描述={ 数据流名,说明,数据流来源, 数据流去向,组成:{数据结构}, 平均流量,高峰期流量} An Introduction to Database Systems
733
An Introduction to Database Systems
⒋ 数据存储 数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。 对数据存储的描述 数据存储描述={数据存储名,说明,编号, 输入的数据流 ,输出的数据流 , 组成:{数据结构},数据量,存取频度, 存取方式} An Introduction to Database Systems
734
An Introduction to Database Systems
⒌ 处理过程 具体处理逻辑一般用判定表或判定树来描述 处理过程说明性信息的描述 处理过程描述={处理过程名,说明,输入:{数据流}, 输出:{数据流},处理:{简要说明}} An Introduction to Database Systems
735
An Introduction to Database Systems
数据字典举例 例:学生学籍管理子系统的数据字典。 数据项,以“学号”为例: 数据项: 学号 含义说明:唯一标识每个学生 别名: 学生编号 类型: 字符型 长度: 8 取值范围: 至 取值含义:前两位标别该学生所在年级, 后六位按顺序编号 与其他数据项的逻辑关系: An Introduction to Database Systems
736
An Introduction to Database Systems
处理过程(续) 数据结构,以“学生”为例 “学生”是该系统中的一个核心数据结构: 数据结构: 学生 含义说明: 是学籍管理子系统的主体数据结构, 定义了一个学生的有关信息 组成: 学号,姓名,性别,年龄,所在系,年级 An Introduction to Database Systems
737
An Introduction to Database Systems
处理过程(续) 数据流,“体检结果”可如下描述: 数据流: 体检结果 说明: 学生参加体格检查的最终结果 数据流来源:体检 数据流去向:批准 组成: …… 平均流量: …… 高峰期流量:…… An Introduction to Database Systems
738
An Introduction to Database Systems
处理过程(续) 数据存储,“学生登记表”可如下描述: 数据存储: 学生登记表 说明: 记录学生的基本情况 流入数据流:…… 流出数据流:…… 组成: …… 数据量: 每年3000张 存取方式: 随机存取 An Introduction to Database Systems
739
An Introduction to Database Systems
处理过程(续) 处理过程“分配宿舍”可如下描述: 处理过程:分配宿舍 说明: 为所有新生分配学生宿舍 输入: 学生,宿舍 输出: 宿舍安排 处理: 在新生报到后,为所有新生分配学生宿舍。 要求同一间宿舍只能安排同一性别的学生, 同一个学生只能安排在一个宿舍中。 每个学生的居住面积不小于3平方米。 安排新生宿舍其处理时间应不超过15分钟。 An Introduction to Database Systems
740
An Introduction to Database Systems
数据字典 数据字典是关于数据库中数据的描述,是元数据,而不是数据本身 数据字典在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善 An Introduction to Database Systems
741
An Introduction to Database Systems
需求分析小结 设计人员应充分考虑到可能的扩充和改变,使设计易于更改,系统易于扩充 必须强调用户的参与 An Introduction to Database Systems
742
An Introduction to Database Systems
下课了。。。 攀 登 休息一会儿。。。 An Introduction to Database Systems
743
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第七章 数据库设计(续1) 中国人民大学信息学院 An Introduction to Database Systems
744
An Introduction to Database Systems
第七章 数据库设计 7.1 数据库设计概述 7.2 需求分析 7.3 概念结构设计 7.4 逻辑结构设计 7.5 数据库的物理设计 7.6 数据库实施和维护 7.7 小结 An Introduction to Database Systems
745
An Introduction to Database Systems
7.3 概念结构设计 概念结构 概念结构设计的方法与步骤 数据抽象与局部视图设计 视图的集成 An Introduction to Database Systems
746
An Introduction to Database Systems
概念结构 什么是概念结构设计 将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计 概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定 概念结构设计是整个数据库设计的关键 An Introduction to Database Systems
747
An Introduction to Database Systems
概念结构(续) 现实世界 机器世界 信息世界 需求分析 概念结构设计 An Introduction to Database Systems
748
An Introduction to Database Systems
概念结构(续) 概念结构设计的特点 (1) 能真实、充分地反映现实世界 (2) 易于理解 (3) 易于更改 (4) 易于向关系、网状、层次等各种数据模型转换 An Introduction to Database Systems
749
An Introduction to Database Systems
概念结构(续) 描述概念模型的工具 E-R模型 An Introduction to Database Systems
750
An Introduction to Database Systems
7.3 概念结构设计 概念结构 概念结构设计的方法与步骤 数据抽象与局部视图设计 视图的集成 An Introduction to Database Systems
751
An Introduction to Database Systems
概念结构设计的方法与步骤 设计概念结构的四类方法 自顶向下 首先定义全局概念结构的框架,然后逐步细化 自顶向下策略 An Introduction to Database Systems
752
An Introduction to Database Systems
概念结构设计的方法与步骤 自底向上 首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构 自底向上策略 An Introduction to Database Systems
753
An Introduction to Database Systems
概念结构设计的方法与步骤(续) 逐步扩张 首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构 逐步扩张策略 An Introduction to Database Systems
754
An Introduction to Database Systems
概念结构设计的方法与步骤(续) 混合策略 将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。 An Introduction to Database Systems
755
An Introduction to Database Systems
概念结构设计的方法与步骤(续) 常用策略 自顶向下地进行需求分析 自底向上地设计概念结构 An Introduction to Database Systems
756
An Introduction to Database Systems
概念结构设计的方法与步骤(续) 自底向上设计概念结构的步骤 第1步:抽象数据并设计局部视图 第2步:集成局部视图,得到全局概念结构 An Introduction to Database Systems
757
An Introduction to Database Systems
7.3 概念结构设计 概念结构 概念结构设计的方法与步骤 数据抽象与局部视图设计 视图的集成 An Introduction to Database Systems
758
An Introduction to Database Systems
数据抽象与局部视图设计 数据抽象 局部视图设计 An Introduction to Database Systems
759
An Introduction to Database Systems
数据抽象 抽象是对实际的人、物、事和概念中抽取所关心 的共同特性,忽略非本质的细节,并把这些特性 用各种概念精确地加以描述。 概念结构是对现实世界的一种抽象 An Introduction to Database Systems
760
An Introduction to Database Systems
数据抽象(续) 三种常用抽象 1. 分类(Classification) 定义某一类概念作为现实世界中一组对象的类型 抽象了对象值和型之间的“is member of”的语义 An Introduction to Database Systems
761
An Introduction to Database Systems
数据抽象(续) An Introduction to Database Systems
762
An Introduction to Database Systems
数据抽象(续) 2. 聚集(Aggregation) 定义某一类型的组成成分 抽象了对象内部类型和成分之间“is part of”的语义 An Introduction to Database Systems
763
An Introduction to Database Systems
数据抽象(续) 聚集 An Introduction to Database Systems
764
An Introduction to Database Systems
数据抽象(续) 复杂的聚集,某一类型的成分仍是一个聚集 更复杂的聚集 An Introduction to Database Systems
765
An Introduction to Database Systems
数据抽象(续) 3. 概括(Generalization) 定义类型之间的一种子集联系 抽象了类型之间的“is subset of”的语义 继承性 An Introduction to Database Systems
766
An Introduction to Database Systems
数据抽象(续) 概括 An Introduction to Database Systems
767
An Introduction to Database Systems
局部视图设计 设计分E-R图的步骤: ⒈选择局部应用 ⒉逐一设计分E-R图 An Introduction to Database Systems
768
An Introduction to Database Systems
⒈ 选择局部应用 在多层的数据流图中选择一个适当层次的数据流 图,作为设计分E-R图的出发点 通常以中层数据流图作为设计分E-R图的依据 An Introduction to Database Systems
769
An Introduction to Database Systems
选择局部应用(续) 设计分E-R图的出发点 An Introduction to Database Systems
770
An Introduction to Database Systems
⒉ 逐一设计分E-R图 任务 将各局部应用涉及的数据分别从数据字典中抽取出来 参照数据流图,标定各局部应用中的实体、实体的属性、标识实体的码 确定实体之间的联系及其类型(1:1,1:n,m:n) An Introduction to Database Systems
771
An Introduction to Database Systems
逐一设计分E-R图(续) 两条准则: (1)属性不能再具有需要描述的性质。即属性必须是不可分的数据项,不能再由另一些属性组成 (2)属性不能与其他实体具有联系。联系只发生在实体之间 An Introduction to Database Systems
772
An Introduction to Database Systems
逐一设计分E-R图(续) 职称作为一个实体 An Introduction to Database Systems
773
An Introduction to Database Systems
逐一设计分E-R图(续) 病房作为一个实体 An Introduction to Database Systems
774
An Introduction to Database Systems
逐一设计分E-R图(续) 仓库作为一个实体 An Introduction to Database Systems
775
An Introduction to Database Systems
逐一设计分E-R图(续) [实例]销售管理子系统分E-R图的设计 销售管理子系统的主要功能: 处理顾客和销售员送来的订单 工厂是根据订货安排生产的 交出货物同时开出发票 收到顾客付款后,根据发票存根和信贷情况进行应收款处理 An Introduction to Database Systems
776
An Introduction to Database Systems
逐一设计分E-R图(续) 下图是第一层数据流图,虚线部分划出了系统边界 An Introduction to Database Systems 图7.18 销售管理子系统第一层数据流图
777
An Introduction to Database Systems
逐一设计分E-R图(续) 上图中把系统功能又分为4个子系统,下面四个图是第二层数据流图 An Introduction to Database Systems 图7.19 接收订单
778
An Introduction to Database Systems
逐一设计分E-R图(续) 图7.20 处理订单 An Introduction to Database Systems
779
An Introduction to Database Systems
逐一设计分E-R图(续) 图7.21 开发票 An Introduction to Database Systems
780
An Introduction to Database Systems
逐一设计分E-R图(续) 图7.22 支付过账 An Introduction to Database Systems
781
An Introduction to Database Systems
逐一设计分E-R图(续) 分E-R图的框架 An Introduction to Database Systems
782
An Introduction to Database Systems
逐一设计分E-R图(续) 参照第二层数据流图和数据字典,遵循两个准则,进行如下调整: (1) 订单与订单细节是1∶n的联系 (2) 原订单和产品的联系实际上是订单细节和产品的联系。 (3) 图7.21中“发票主清单”是一个数据存储,不必作为实体加入分E-R图 (4) 工厂对大宗订货给予优惠 An Introduction to Database Systems
783
An Introduction to Database Systems
逐一设计分E-R图(续) 得到分E-R图如下图所示 销售管理子系统的分E-R图 An Introduction to Database Systems
784
An Introduction to Database Systems
逐一设计分E-R图(续) 对每个实体定义的属性如下: 顾客:{顾客号,顾客名,地址,电话,信贷状况,账目余额} 订单:{订单号,顾客号,订货项数,订货日期,交货日期,工种号,生产地点} 订单细则:{订单号,细则号,零件号,订货数,金额} 应收账款:{顾客号,订单号,发票号,应收金额,支付日期,支付金额, 当前余额,货款限额} 产品描述:{产品号,产品名,单价,重量} 折扣规则:{产品号,订货量,折扣} An Introduction to Database Systems
785
An Introduction to Database Systems
7.3 概念结构设计 概念结构 概念结构设计的方法与步骤 数据抽象与局部视图设计 视图的集成 An Introduction to Database Systems
786
An Introduction to Database Systems
视图的集成 各个局部视图即分E-R图建立好后,还需要对它们进行合并,集成为一个整体的数据概念结构即总E-R图。 An Introduction to Database Systems
787
An Introduction to Database Systems
视图集成的两种方式 多个分E-R图一次集成 一次集成多个分E-R图 通常用于局部视图比较简单时 An Introduction to Database Systems
788
An Introduction to Database Systems
视图的集成(续) 逐步集成 用累加的方式一次集成两个分E-R图 An Introduction to Database Systems
789
An Introduction to Database Systems
视图的集成(续) 集成局部E-R图的步骤 1. 合并 2. 修改与重构 An Introduction to Database Systems
790
An Introduction to Database Systems
视图的集成(续) 视图集成 An Introduction to Database Systems
791
An Introduction to Database Systems
合并分E-R图,生成初步E-R图 各分E-R图存在冲突 各个分E-R图之间必定会存在许多不一致的地方 合并分E-R图的主要工作与关键 合理消除各分E-R图的冲突 An Introduction to Database Systems
792
An Introduction to Database Systems
合并分E-R图,生成初步E-R图(续) 冲突的种类 属性冲突 命名冲突 结构冲突 An Introduction to Database Systems
793
An Introduction to Database Systems
⒈ 属性冲突 两类属性冲突 属性域冲突 属性值的类型 取值范围 取值集合不同 属性取值单位冲突 An Introduction to Database Systems
794
An Introduction to Database Systems
⒉ 命名冲突 两类命名冲突 同名异义:不同意义的对象在不同的局部应用中具有相同的名字 异名同义(一义多名):同一意义的对象在不同的局部应用中具有不同的名字 An Introduction to Database Systems
795
An Introduction to Database Systems
⒊ 结构冲突 三类结构冲突 同一对象在不同应用中具有不同的抽象 同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同 实体之间的联系在不同局部视图中呈现不同的类型 An Introduction to Database Systems
796
An Introduction to Database Systems
消除不必要的冗余,设计基本E-R图 基本任务 消除不必要的冗余,设计生成基本E-R图 合并 初步E-R图 分E-R图 可能存在冗余的数据 和冗余的实体间联系 基本E-R图 消除不必要的冗余 An Introduction to Database Systems
797
消除不必要的冗余,设计基本E-R图(续)
消除冗余的方法 An Introduction to Database Systems
798
An Introduction to Database Systems
1.冗余 冗余的数据是指可由基本数据导出的数据 冗余的联系是指可由其他联系导出的联系 冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难 消除不必要的冗余后的初步E-R图称为基本E-R图 An Introduction to Database Systems
799
An Introduction to Database Systems
消除冗余的方法 分析方法 以数据字典和数据流图为依据 根据数据字典中关于数据项之间的逻辑关系 An Introduction to Database Systems
800
An Introduction to Database Systems
消除冗余的方法(续) 消除冗余 An Introduction to Database Systems
801
An Introduction to Database Systems
消除冗余的方法(续) 效率VS冗余信息 需要根据用户的整体需求来确定 若人为地保留了一些冗余数据,则应把数据字典中数据关联的说明作为完整性约束条件 Q4=∑Q5 一旦Q5修改后就应当触发完整性检查,对Q4进行修改 An Introduction to Database Systems
802
An Introduction to Database Systems
消除冗余的方法(续) 规范化理论 函数依赖的概念提供了消除冗余联系的形式化工具 An Introduction to Database Systems
803
An Introduction to Database Systems
消除冗余的方法(续) 方法 1. 确定分E-R图实体之间的数据依赖 ,并用实体码之间的函数依赖表示。 劳动人事管理的分E-R图 An Introduction to Database Systems
804
An Introduction to Database Systems
消除冗余的方法(续) 上图中, 部门和职工之间一对多的联系可表示为: 职工号→部门号 职工和产品之间多对多的联系可表示为: (职工号,产品号)→工作天数 得到函数依赖集FL An Introduction to Database Systems
805
An Introduction to Database Systems
消除冗余的方法(续) 2. 求FL的最小覆盖GL ,差集为D = FL-GL。 逐一考察D中的函数依赖,确定是否是冗余的联系,若是,就把它去掉。 (1) 冗余的联系一定在D中,而D中的联系不一定是冗余的; (2) 当实体之间存在多种联系时要将实体之间的联系在形式上加以区分。 An Introduction to Database Systems
806
An Introduction to Database Systems
支持的数据模型,它是各种数据模型的共同基础,因而比数据模型更一般、更抽象、更接近现实世界。 消除冗余,设计生成基本E-R图实例 [实例] 某工厂管理信息系统的视图集成。 书中图1.14(c)、图7.24、图7.29分别为该厂物资、销售 和劳动人事管理的分E-R图 图7.30为该系统的基本E-R图 An Introduction to Database Systems
807
消除冗余,设计生成基本E-R图实例(续)
支持的数据模型,它是各种数据模型的共同基础,因而比数据模型更一般、更抽象、更接近现实世界。 消除冗余,设计生成基本E-R图实例(续) 该厂物资管理分E-R图 图1.14(c) 工厂物资管理E-R图 An Introduction to Database Systems
808
消除冗余,设计生成基本E-R图实例(续)
支持的数据模型,它是各种数据模型的共同基础,因而比数据模型更一般、更抽象、更接近现实世界。 消除冗余,设计生成基本E-R图实例(续) 该厂销售管理分E-R图 图7.24 销售管理子系统的分E-R图 An Introduction to Database Systems
809
消除冗余,设计生成基本E-R图实例(续)
支持的数据模型,它是各种数据模型的共同基础,因而比数据模型更一般、更抽象、更接近现实世界。 消除冗余,设计生成基本E-R图实例(续) 该厂劳动人事管理分E-R图 图7.29 劳动人事管理的分E-R图 An Introduction to Database Systems
810
消除冗余,设计生成基本E-R图实例(续)
支持的数据模型,它是各种数据模型的共同基础,因而比数据模型更一般、更抽象、更接近现实世界。 消除冗余,设计生成基本E-R图实例(续) 系统的基本E-R(图7.30) 某工厂管理信息系统的基本E-R图 An Introduction to Database Systems
811
消除冗余,设计生成基本E-R图实例(续)
集成过程,解决了以下问题: 异名同义,项目和产品含义相同 库存管理中职工与仓库的工作关系已包含在劳动人事管理的部门与职工之间的联系之中,所以可以取消 职工之间领导与被领导关系可由部门与职工(经理)之间的领导关系、部门与职工之间的从属关系两者导出,所以也可以取消 An Introduction to Database Systems
812
An Introduction to Database Systems
验证整体概念结构 视图集成后形成一个整体的数据库概念结构,对该整体概念结构还必须进行进一步验证,确保它能够满足下列条件: 整体概念结构内部必须具有一致性,不存在互相矛盾的表达 整体概念结构能准确地反映原来的每个视图结构,包括属性、实体及实体间的联系 整体概念结构能满足需要分析阶段所确定的所有要求 An Introduction to Database Systems
813
An Introduction to Database Systems
验证整体概念结构(续) 整体概念结构最终还应该提交给用户,征求用户和有关人员的意见,进行评审、修改和优化,然后把它确定下来,作为数据库的概念结构,作为进一步设计数据库的依据。 An Introduction to Database Systems
814
An Introduction to Database Systems
概念结构设计小结 概念结构设计的步骤 抽象数据并设计局部视图 集成局部视图,得到全局概念结构 验证整体概念结构 An Introduction to Database Systems
815
An Introduction to Database Systems
概念结构设计小结 数据抽象 分类 聚集 概括 An Introduction to Database Systems
816
An Introduction to Database Systems
概念结构设计小结 设计局部视图 ⒈ 选择局部应用 2. 逐一设计分E-R图 标定局部应用中的实体、属性、码,实体间的联系 用E-R图描述出来 An Introduction to Database Systems
817
An Introduction to Database Systems
概念结构设计小结 集成局部视图 1.合并分E-R图,生成初步E-R图 消除冲突 属性冲突 命名冲突 结构冲突 2. 修改与重构 消除不必要的冗余,设计生成基本E-R图 分析方法 规范化理论 An Introduction to Database Systems
818
An Introduction to Database Systems
下课了。。。 攀 登 休息一会儿。。。 An Introduction to Database Systems
819
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第九章 关系查询处理和查询优化 中国人民大学信息学院 An Introduction to Database Systems
820
An Introduction to Database Systems
第九章 关系系统及其查询优化 9.1 关系数据库系统的查询处理 9.2 关系数据库系统的查询优化 9.3 代数优化 9.4 物理优化 9.5 小 结 An Introduction to Database Systems
821
An Introduction to Database Systems
关系系统及其查询优化(续) 本章目的: RDBMS的查询处理步骤 查询优化的概念 基本方法和技术 查询优化分类 : 代数优化 物理优化 An Introduction to Database Systems
822
An Introduction to Database Systems
9.1 关系数据库系统的查询处理 查询处理步骤 实现查询操作的算法示例 An Introduction to Database Systems
823
An Introduction to Database Systems
查询处理步骤 RDBMS查询处理阶段 : 1. 查询分析 2. 查询检查 3. 查询优化 4. 查询执行 An Introduction to Database Systems
824
An Introduction to Database Systems
查询处理步骤(续) An Introduction to Database Systems 查询处理步骤
825
An Introduction to Database Systems
1. 查询分析 对查询语句进行扫描、词法分析和语法分析 从查询语句中识别出语言符号 进行语法检查和语法分析 An Introduction to Database Systems
826
An Introduction to Database Systems
2. 查询检查 根据数据字典对合法的查询语句进行语义检查 根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查 检查通过后把SQL查询语句转换成等价的关系代数表达式 RDBMS一般都用查询树(语法分析树)来表示扩展的关系代数表达式 把数据库对象的外部名称转换为内部表示 An Introduction to Database Systems
827
An Introduction to Database Systems
3. 查询优化 查询优化:选择一个高效执行的查询处理策略 查询优化分类 : 代数优化:指关系代数表达式的优化 物理优化:指存取路径和底层操作算法的选择 查询优化方法选择的依据: 基于规则(rule based) 基于代价(cost based) 基于语义(semantic based) An Introduction to Database Systems
828
An Introduction to Database Systems
4. 查询执行 依据优化器得到的执行策略生成查询计划 代码生成器(code generator)生成执行查询计划的代码 An Introduction to Database Systems
829
An Introduction to Database Systems
9.1 关系数据库系统的查询处理 查询处理步骤 实现查询操作的算法示例 An Introduction to Database Systems
830
An Introduction to Database Systems
实现查询操作的算法示例 一、 选择操作的实现 二、 连接操作的实现 An Introduction to Database Systems
831
An Introduction to Database Systems
一、 选择操作的实现 [例1]Select * from student where <条件表达式> ; 考虑<条件表达式>的几种情况: C1:无条件; C2:Sno=' '; C3:Sage>20; C4:Sdept='CS' AND Sage>20; An Introduction to Database Systems
832
An Introduction to Database Systems
选择操作的实现(续) 选择操作典型实现方法: 1. 简单的全表扫描方法 对查询的基本表顺序扫描,逐一检查每个元组是否满足选择条件,把满足条件的元组作为结果输出 适合小表,不适合大表 2. 索引(或散列)扫描方法 适合选择条件中的属性上有索引(例如B+树索引或Hash索引) 通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在查询的基本表中找到元组 An Introduction to Database Systems
833
An Introduction to Database Systems
选择操作的实现(续) [例1-C2] 以C2为例,Sno=‘ ’,并且Sno上有索引(或Sno是散列码) 使用索引(或散列)得到Sno为‘ ’ 元组的指针 通过元组指针在student表中检索到该学生 [例1-C3] 以C3为例,Sage>20,并且Sage 上有B+树索引 使用B+树索引找到Sage=20的索引项,以此为入口点在B+树的顺序集上得到Sage>20的所有元组指针 通过这些元组指针到student表中检索到所有年龄大于20的学生。 An Introduction to Database Systems
834
An Introduction to Database Systems
选择操作的实现(续) [例1-C4] 以C4为例,Sdept=‘CS’ AND Sage>20,如果Sdept和Sage上都有索引: 算法一:分别用上面两种方法分别找到Sdept=‘CS’的一组元组指针和Sage>20的另一组元组指针 求这2组指针的交集 到student表中检索 得到计算机系年龄大于20的学生 算法二:找到Sdept=‘CS’的一组元组指针, 通过这些元组指针到student表中检索 对得到的元组检查另一些选择条件(如Sage>20)是否满足 把满足条件的元组作为结果输出。 An Introduction to Database Systems
835
An Introduction to Database Systems
二、 连接操作的实现 连接操作是查询处理中最耗时的操作之一 本节只讨论等值连接(或自然连接)最常用的实现算法 [例2] SELECT * FROM Student,SC WHERE Student.Sno=SC.Sno; An Introduction to Database Systems
836
An Introduction to Database Systems
连接操作的实现(续) 1. 嵌套循环方法(nested loop) 2. 排序-合并方法(sort-merge join 或merge join) 3. 索引连接(index join)方法 4. Hash Join方法 An Introduction to Database Systems
837
An Introduction to Database Systems
连接操作的实现(续) 嵌套循环方法(nested loop) 对外层循环(Student)的每一个元组(s),检索内层循环(SC)中的每一个元组(sc) 检查这两个元组在连接属性(sno)上是否相等 如果满足连接条件,则串接后作为结果输出,直到外层循环表中的元组处理完为止 An Introduction to Database Systems
838
An Introduction to Database Systems
连接操作的实现(续) 2. 排序-合并方法(sort-merge join 或merge join) 适合连接的诸表已经排好序的情况 排序-合并连接方法的步骤: 如果连接的表没有排好序,先对Student表和SC表按连接属性Sno排序 取Student表中第一个Sno,依次扫描SC表中具有相同Sno的元组 An Introduction to Database Systems
839
An Introduction to Database Systems
连接操作的实现(续) . 排序-合并连接方法示意图 An Introduction to Database Systems
840
An Introduction to Database Systems
连接操作的实现(续) 排序-合并连接方法的步骤(续): 当扫描到Sno不相同的第一个SC元组时,返回Student表扫描它的下一个元组,再扫描SC表中具有相同Sno的元组,把它们连接起来 重复上述步骤直到Student 表扫描完 An Introduction to Database Systems
841
An Introduction to Database Systems
连接操作的实现(续) Student表和SC表都只要扫描一遍 如果2个表原来无序,执行时间要加上对两个表的排序时间 对于2个大表,先排序后使用sort-merge join方法执行连接,总的时间一般仍会大大减少 An Introduction to Database Systems
842
An Introduction to Database Systems
连接操作的实现(续) 3. 索引连接(index join)方法 步骤: ① 在SC表上建立属性Sno的索引,如果原来没有该索引 ② 对Student中每一个元组,由Sno值通过SC的索引查找相应的SC元组 ③ 把这些SC元组和Student元组连接起来 循环执行②③,直到Student表中的元组处理完为止 An Introduction to Database Systems
843
An Introduction to Database Systems
连接操作的实现(续) 4. Hash Join方法 把连接属性作为hash码,用同一个hash函数把R和S中的元组散列到同一个hash文件中 步骤: 划分阶段(partitioning phase): 对包含较少元组的表(比如R)进行一遍处理 把它的元组按hash函数分散到hash表的桶中 试探阶段(probing phase):也称为连接阶段(join phase) 对另一个表(S)进行一遍处理 把S的元组散列到适当的hash桶中 把元组与桶中所有来自R并与之相匹配的元组连接起来 An Introduction to Database Systems
844
An Introduction to Database Systems
连接操作的实现(续) 上面hash join算法前提:假设两个表中较小的表在第一阶段后可以完全放入内存的hash桶中 以上的算法思想可以推广到更加一般的多个表的连接算法上 An Introduction to Database Systems
845
An Introduction to Database Systems
第九章 关系系统及其查询优化 9.1 关系数据库系统的查询处理 9.2 关系数据库系统的查询优化 9.3 代 数 优 化 9.4 物 理 优 化 9.5 小 结 An Introduction to Database Systems
846
An Introduction to Database Systems
9.2 关系数据库系统的查询优化 查询优化在关系数据库系统中有着非常重要的地位 关系查询优化是影响RDBMS性能的关键因素 由于关系表达式的语义级别很高,使关系系统可以从关系表达式中分析查询语义,提供了执行查询优化的可能性 An Introduction to Database Systems
847
An Introduction to Database Systems
9.2 关系数据库系统的查询优化 查询优化概述 一个实例 An Introduction to Database Systems
848
An Introduction to Database Systems
查询优化概述 关系系统的查询优化 非关系系统 An Introduction to Database Systems
849
An Introduction to Database Systems
查询优化概述(续) 查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好 (1) 优化器可以从数据字典中获取许多统计信息,而用户程序则难以获得这些信息 (2)如果数据库的物理统计信息改变了,系统可以自动对查询重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。 An Introduction to Database Systems
850
An Introduction to Database Systems
查询优化概述(续) (3)优化器可以考虑数百种不同的执行计划,程序员一般只能考虑有限的几种可能性。 (4)优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术 An Introduction to Database Systems
851
An Introduction to Database Systems
查询优化概述(续) RDBMS通过某种代价模型计算出各种查询执行策略的执行代价,然后选取代价最小的执行方案 集中式数据库 执行开销主要包括: 磁盘存取块数(I/O代价) 处理机时间(CPU代价) 查询的内存开销 I/O代价是最主要的 分布式数据库 总代价=I/O代价+CPU代价+内存代价+通信代价 An Introduction to Database Systems
852
An Introduction to Database Systems
查询优化概述(续) 查询优化的总目标: 选择有效的策略 求得给定关系表达式的值 使得查询代价最小(实际上是较小) An Introduction to Database Systems
853
An Introduction to Database Systems
9.2 关系数据库系统的查询优化 查询优化概述 一个实例 An Introduction to Database Systems
854
An Introduction to Database Systems
一个实例 [例3] 求选修了2号课程的学生姓名。用SQL表达: SELECT Student.Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno=‘2’; 假定学生-课程数据库中有1000个学生记录,10000个选课记录 其中选修2号课程的选课记录为50个 An Introduction to Database Systems
855
An Introduction to Database Systems
一个实例(续) 系统可以用多种等价的关系代数表达式来完成这一查询 Q1=πSname(σStudent.Sno=SC.Sno∧Sc.Cno='2' (Student×SC)) Q2=πSname(σSc.Cno='2' (Student SC)) Q3=πSname(Student σSc.Cno='2'(SC)) An Introduction to Database Systems
856
An Introduction to Database Systems
一个实例(续) 一、第一种情况 Q1=πSname(σStudent.Sno=SC.Sno∧Sc.Cno='2' Student×SC)) 1. 计算广义笛卡尔积 把Student和SC的每个元组连接起来的做法: 在内存中尽可能多地装入某个表(如Student表)的若干块,留出一块存放另一个表(如SC表)的元组。 把SC中的每个元组和Student中每个元组连接,连接后的元组装满一块后就写到中间文件上 从SC中读入一块和内存中的Student元组连接,直到SC表处理完。 再读入若干块Student元组,读入一块SC元组 重复上述处理过程,直到把Student表处理完 An Introduction to Database Systems
857
An Introduction to Database Systems
一个实例(续) 设一个块能装10个Student元组或100个SC元组,在内存中存放5块Student元组和1块SC元组,则读取总块数为 + =100+20×100=2100块 其中,读Student表100块。读SC表20遍,每遍100块。若每秒读写20块,则总计要花105s 连接后的元组数为103×104=107。设每块能装10个元组,则写出这些块要用106/20=5×104s An Introduction to Database Systems
858
An Introduction to Database Systems
一个实例(续) 2. 作选择操作 依次读入连接后的元组,按照选择条件选取满足要求的记录 假定内存处理时间忽略。读取中间文件花费的时间(同写中间文件一样)需5×104s 满足条件的元组假设仅50个,均可放在内存 An Introduction to Database Systems
859
An Introduction to Database Systems
一个实例(续) 3. 作投影操作 把第2步的结果在Sname上作投影输出,得到最终结果 第一种情况下执行查询的总时间≈105+2×5×104≈105s 所有内存处理时间均忽略不计 An Introduction to Database Systems
860
An Introduction to Database Systems
一个实例(续) 二、 第二种情况 Q2=πSname(σSc.Cno='2' (Student SC)) 1. 计算自然连接 执行自然连接,读取Student和SC表的策略不变,总的读取块数仍为2100块花费105 s 自然连接的结果比第一种情况大大减少,为104个 写出这些元组时间为104/10/20=50s,为第一种情况的千分之一 2. 读取中间文件块,执行选择运算,花费时间也为50s。 3. 把第2步结果投影输出。 第二种情况总的执行时间≈ ≈205s An Introduction to Database Systems
861
An Introduction to Database Systems
一个实例(续) 三、 第三种情况 Q3=πSname(Student σSc.Cno='2'(SC)) 1. 先对SC表作选择运算,只需读一遍SC表,存取100块花费时间为5s,因为满足条件的元组仅50个,不必使用中间文件。 2. 读取Student表,把读入的Student元组和内存中的SC元组作连接。也只需读一遍Student表共100块,花费时间为5s。 3. 把连接结果投影输出 第三种情况总的执行时间≈5+5≈10s An Introduction to Database Systems
862
An Introduction to Database Systems
一个实例(续) 假如SC表的Cno字段上有索引 第一步就不必读取所有的SC元组而只需读取Cno=‘2’的那些元组(50个) 存取的索引块和SC中满足条件的数据块大约总共3~4块 若Student表在Sno上也有索引 第二步也不必读取所有的Student元组 因为满足条件的SC记录仅50个,涉及最多50个Student记录 读取Student表的块数也可大大减少 总的存取时间将进一步减少到数秒 An Introduction to Database Systems
863
An Introduction to Database Systems
一个实例(续) 把代数表达式Q1变换为Q2、 Q3, 即有选择和连接操作时,先做选择操作,这样参加连接的元组就可以大大减少,这是代数优化 在Q3中 SC表的选择操作算法有全表扫描和索引扫描2种方法,经过初步估算,索引扫描方法较优 对于Student和SC表的连接,利用Student表上的索引,采用index join代价也较小,这就是物理优化 An Introduction to Database Systems
864
An Introduction to Database Systems
第九章 关系系统及其查询优化 9.1 关系数据库系统的查询处理 9.2 关系数据库系统的查询优化 9.3 代数优化 9.4 物理优化 9.5 小 结 An Introduction to Database Systems
865
An Introduction to Database Systems
9.3 代 数 优 化 关系代数表达式等价变换规则 查询树的启发式优化 An Introduction to Database Systems
866
An Introduction to Database Systems
关系代数表达式等价变换规则 代数优化策略:通过对关系代数表达式的等价变换来提高查询效率 关系代数表达式的等价:指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的 两个关系表达式E1和E2是等价的,可记为E1≡E2 An Introduction to Database Systems
867
An Introduction to Database Systems
关系代数表达式等价变换规则(续) 常用的等价变换规则: 1. 连接、笛卡尔积交换律 设E1和E2是关系代数表达式,F是连接运算的条件,则有 E1 × E2≡E2 × E1 E E2≡E E1 2. 连接、笛卡尔积的结合律 设E1,E2,E3是关系代数表达式,F1和F2是连接运算的条件,则有 (E1 × E2) × E3≡E1 × (E2 × E3) (E E2) E3≡E (E E3) (E1 E2) E3≡E1 (E E3) An Introduction to Database Systems
868
An Introduction to Database Systems
关系代数表达式等价变换规则(续) 3. 投影的串接定律 ( (E))≡ (E) 这里,E是关系代数表达式,Ai(i=1,2,…,n),Bj(j=1,2,…,m)是属性名且{A1,A2,…,An}构成{B1,B2,…,Bm}的子集。 4. 选择的串接定律 ( (E))≡ (E) 这里,E是关系代数表达式,F1、F2是选择条件。 选择的串接律说明选择条件可以合并。这样一次就可检查全部条件。 An Introduction to Database Systems
869
An Introduction to Database Systems
关系代数表达式等价变换规则(续) 5. 选择与投影操作的交换律 σF( (E))≡ (σF(E)) 选择条件F只涉及属性A1,…,An。 若F中有不属于A1,…,An的属性B1,…,Bm则有更一般的规则: (σF(E))≡ (σF( (E))) An Introduction to Database Systems
870
An Introduction to Database Systems
关系代数表达式等价变换规则(续) 6. 选择与笛卡尔积的交换律 如果F中涉及的属性都是E1中的属性,则 (E1×E2)≡ (E1)×E2 如果F=F1∧F2,并且F1只涉及E1中的属性,F2只涉及E2中的属性,则由上面的等价变换规则1,4,6可推出: (E1×E2)≡ (E1)× (E2) 若F1只涉及E1中的属性,F2涉及E1和E2两者的属性,则仍有 (E1×E2)≡ ( (E1)×E2) 它使部分选择在笛卡尔积前先做。 An Introduction to Database Systems
871
An Introduction to Database Systems
关系代数表达式等价变换规则(续) 7. 选择与并的分配律 设E=E1∪E2,E1,E2有相同的属性名,则 σF(E1∪E2)≡σF(E1)∪σF(E2) 8. 选择与差运算的分配律 若E1与E2有相同的属性名,则 σF(E1-E2)≡σF(E1)-σF(E2) 9. 选择对自然连接的分配律 σF(E1 E2)≡σF(E1) σF(E2) F只涉及E1与E2的公共属性 An Introduction to Database Systems
872
An Introduction to Database Systems
关系代数表达式等价变换规则(续) 10. 投影与笛卡尔积的分配律 设E1和E2是两个关系表达式,A1,…,An是E1的属性,B1,…,Bm是E2的属性,则 (E1×E2)≡ (E1)× (E2) 11. 投影与并的分配律 设E1和E2有相同的属性名,则 (E1∪E2)≡ (E1)∪ (E2) An Introduction to Database Systems
873
An Introduction to Database Systems
9.3 代 数 优 化 关系代数表达式等价变换规则 查询树的启发式优化 An Introduction to Database Systems
874
An Introduction to Database Systems
查询树的启发式优化 典型的启发式规则: 1. 选择运算应尽可能先做。在优化策略中这是最重要、最基本的一条 2. 把投影运算和选择运算同时进行 如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系 An Introduction to Database Systems
875
An Introduction to Database Systems
查询树的启发式优化(续) 3. 把投影同其前或其后的双目运算结合起来 4. 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算 5. 找出公共子表达式 如果这种重复出现的子表达式的结果不是很大的关系并且从外存中读入这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写入中间文件是合算的 当查询的是视图时,定义视图的表达式就是公共子表达式的情况 An Introduction to Database Systems
876
An Introduction to Database Systems
查询树的启发式优化(续) 遵循这些启发式规则,应用9.3.1的等价变换公式来优化关系表达式的算法。 算法:关系表达式的优化 输入:一个关系表达式的查询树 输出:优化的查询树 方法: (1) 利用等价变换规则4把形如σF1∧F2∧…∧Fn(E)变换为σF1(σF2(…(σFn(E))…))。 (2) 对每一个选择,利用等价变换规则4~9尽可能把它移到树的叶端。 An Introduction to Database Systems
877
An Introduction to Database Systems
查询树的启发式优化(续) (3) 对每一个投影利用等价变换规则3,5,10,11中的一般形式尽可能把它移向树的叶端。 注意: 等价变换规则3使一些投影消失 规则5把一个投影分裂为两个,其中一个有可能被移向树的叶端 (4) 利用等价变换规则3~5把选择和投影的串接合并成单个选择、单个投影或一个选择后跟一个投影。使多个选择或投影能同时执行,或在一次扫描中全部完成 An Introduction to Database Systems
878
An Introduction to Database Systems
查询树的启发式优化(续) (5) 把上述得到的语法树的内节点分组。每一双目运算(×, ,∪,-)和它所有的直接祖先为一组(这些直接祖先是(σ,π运算)。 如果其后代直到叶子全是单目运算,则也将它们并入该组 但当双目运算是笛卡尔积(×),而且后面不是与它组成等值连接的选择时,则不能把选择与这个双目运算组成同一组,把这些单目运算单独分为一组 An Introduction to Database Systems
879
An Introduction to Database Systems
查询树的启发式优化(续) [例4] 下面给出[例3]中 SQL语句的代数优化示例。 (1) 把SQL语句转换成查询树,如下图所示 查询树 An Introduction to Database Systems
880
An Introduction to Database Systems
查询树的启发式优化(续) 为了使用关系代数表达式的优化法,假设内部表示是关系代数语法树,则上面的查询树如下图所示。 关系代数语法树 An Introduction to Database Systems
881
An Introduction to Database Systems
查询树的启发式优化(续) (2) 对查询树进行优化 利用规则4、6把选择σSC.Cno=‘2’移到叶端,查询树便转换 成下图所示的优化的查询树。这就是9.2.2节中Q3的查询树表示 优化后的查询树 An Introduction to Database Systems
882
An Introduction to Database Systems
第九章 关系系统及其查询优化 9.1 关系数据库系统的查询处理 9.2 关系数据库系统的查询优化 9.3 代数优化 9.4 物理优化 9.5 小 结 An Introduction to Database Systems
883
An Introduction to Database Systems
9.4 物理优化 代数优化改变查询语句中操作的次序和组合,不涉及底层的存取路径 对于一个查询语句有许多存取方案,它们的执行效率不同, 仅仅进行代数优化是不够的 物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划 An Introduction to Database Systems
884
An Introduction to Database Systems
物理优化(续) 选择的方法: 基于规则的启发式优化 基于代价估算的优化 两者结合的优化方法 An Introduction to Database Systems
885
An Introduction to Database Systems
9.4 物理优化 基于启发式规则的存取路径选择优化 基于代价的优化 An Introduction to Database Systems
886
An Introduction to Database Systems
基于启发式规则的存取路径选择优化 一、 选择操作的启发式规则 二、 连接操作的启发式规则 An Introduction to Database Systems
887
An Introduction to Database Systems
基于启发式规则的存取路径选择优化(续) 一、 选择操作的启发式规则: 1. 对于小关系,使用全表顺序扫描,即使选择列上有索引 对于大关系,启发式规则有: 2. 对于选择条件是主码=值的查询 查询结果最多是一个元组,可以选择主码索引 一般的RDBMS会自动建立主码索引。 An Introduction to Database Systems
888
An Introduction to Database Systems
基于启发式规则的存取路径选择优化(续) 3. 对于选择条件是非主属性=值的查询,并且选择列上有索引 要估算查询结果的元组数目 如果比例较小(<10%)可以使用索引扫描方法 否则还是使用全表顺序扫描 An Introduction to Database Systems
889
An Introduction to Database Systems
基于启发式规则的存取路径选择优化(续) 4. 对于选择条件是属性上的非等值查询或者范围查询,并且选择列上有索引 要估算查询结果的元组数目 如果比例较小(<10%)可以使用索引扫描方法 否则还是使用全表顺序扫描 An Introduction to Database Systems
890
An Introduction to Database Systems
基于启发式规则的存取路径选择优化(续) 5. 对于用AND连接的合取选择条件 如果有涉及这些属性的组合索引 优先采用组合索引扫描方法 如果某些属性上有一般的索引 则可以用[例1-C4]中介绍的索引扫描方法 否则使用全表顺序扫描。 6. 对于用OR连接的析取选择条件,一般使用全表顺序扫描 An Introduction to Database Systems
891
An Introduction to Database Systems
基于启发式规则的存取路径选择优化(续) 二、 连接操作的启发式规则: 1. 如果2个表都已经按照连接属性排序 选用排序-合并方法 2. 如果一个表在连接属性上有索引 选用索引连接方法 3. 如果上面2个规则都不适用,其中一个表较小 选用Hash join方法 An Introduction to Database Systems
892
An Introduction to Database Systems
基于启发式规则的存取路径选择优化(续) 4. 可以选用嵌套循环方法,并选择其中较小的表,确切地讲是占用的块数(b)较少的表,作为外表(外循环的表) 。 理由: 设连接表R与S分别占用的块数为Br与Bs 连接操作使用的内存缓冲区块数为K 分配K-1块给外表 如果R为外表,则嵌套循环法存取的块数为Br+( Br/K-1)Bs 显然应该选块数小的表作为外表 An Introduction to Database Systems
893
An Introduction to Database Systems
9.4 物理优化(续) 基于启发式规则的存取路径选择优化 基于代价的优化 An Introduction to Database Systems
894
An Introduction to Database Systems
基于代价的优化 启发式规则优化是定性的选择,适合解释执行的系统 解释执行的系统,优化开销包含在查询总开销之中 编译执行的系统中查询优化和查询执行是分开的 可以采用精细复杂一些的基于代价的优化方法 An Introduction to Database Systems
895
An Introduction to Database Systems
基于代价的优化(续) 一、 统计信息 二、 代价估算示例 An Introduction to Database Systems
896
An Introduction to Database Systems
基于代价的优化(续) 一、 统计信息 基于代价的优化方法要计算各种操作算法的执行代价,与数据库的状态密切相关 数据字典中存储的优化器需要的统计信息: 1. 对每个基本表 该表的元组总数(N) 元组长度(l) 占用的块数(B) 占用的溢出块数(BO) An Introduction to Database Systems
897
An Introduction to Database Systems
基于代价的优化(续) 2. 对基表的每个列 该列不同值的个数(m) 选择率(f) 如果不同值的分布是均匀的,f=1/m 如果不同值的分布不均匀,则每个值的选择率=具有该值的元组数/N 该列最大值 该列最小值 该列上是否已经建立了索引 索引类型(B+树索引、Hash索引、聚集索引) An Introduction to Database Systems
898
An Introduction to Database Systems
基于代价的优化(续) 3. 对索引(如B+树索引) 索引的层数(L) 不同索引值的个数 索引的选择基数S(有S个元组具有某个索引值) 索引的叶结点数(Y) An Introduction to Database Systems
899
An Introduction to Database Systems
基于代价的优化(续) 二、 代价估算示例 全表扫描算法的代价估算公式 如果基本表大小为B块,全表扫描算法的代价 cost=B 如果选择条件是码=值,那么平均搜索代价 cost=B/2 An Introduction to Database Systems
900
An Introduction to Database Systems
基于代价的优化(续) 2. 索引扫描算法的代价估算公式 如果选择条件是码=值 如[例1-C2],则采用该表的主索引 若为B+树,层数为L,需要存取B+树中从根结点到叶结点L块,再加上基本表中该元组所在的那一块,所以cost=L+1 如果选择条件涉及非码属性 如[例1-C3],若为B+树索引,选择条件是相等比较,S是索引的选择基数(有S个元组满足条件) 最坏的情况下,满足条件的元组可能会保存在不同的块上,此时,cost=L+S An Introduction to Database Systems
901
An Introduction to Database Systems
基于代价的优化(续) 如果比较条件是>,>=,<,<=操作 假设有一半的元组满足条件就要存取一半的叶结点 通过索引访问一半的表存储块cost=L+Y/2+B/2 如果可以获得更准确的选择基数,可以进一步修正Y/2与B/2 An Introduction to Database Systems
902
An Introduction to Database Systems
基于代价的优化(续) 3. 嵌套循环连接算法的代价估算公式 9.4.1中已经讨论过了嵌套循环连接算法的代价 cost=Br+Bs/(K-1) Br 如果需要把连接结果写回磁盘, cost=Br+Bs/(K-1) Br +(Frs*Nr*Ns)/Mrs 其中Frs为连接选择性(join selectivity),表示连接结果元组数的比例 Mrs是存放连接结果的块因子,表示每块中可以存放的结果元组数目。 An Introduction to Database Systems
903
An Introduction to Database Systems
基于代价的优化(续) 4. 排序-合并连接算法的代价估算公式 如果连接表已经按照连接属性排好序,则 cost=Br+Bs+(Frs*Nr*Ns)/Mrs。 如果必须对文件排序 需要在代价函数中加上排序的代价 对于包含B个块的文件排序的代价大约是(2*B)+(2*B*log2B) An Introduction to Database Systems
904
An Introduction to Database Systems
第九章 关系系统及其查询优化 9.1 关系数据库系统的查询处理 9.2 关系数据库系统的查询优化 9.3 代数优化 9.4 物理优化 9.5 小 结 An Introduction to Database Systems
905
An Introduction to Database Systems
9.5 小 结 查询处理是RDBMS的核心,查询优化技术是查询处理的关键技术 本章讲解的优化方法 启发式代数优化 基于规则的存取路径优化 基于代价的优化 本章的目的:希望读者掌握查询优化方法的概念和技术 An Introduction to Database Systems
906
An Introduction to Database Systems
小 结(续) 比较复杂的查询,尤其是涉及连接和嵌套的查询 不要把优化的任务全部放在RDBMS上 应该找出RDBMS的优化规律,以写出适合RDBMS自动优化的SQL语句 对于RDBMS不能优化的查询需要重写查询语句,进行手工调整以优化性能 An Introduction to Database Systems
907
An Introduction to Database Systems
下课了。。。 攀 登 休息一会儿。。。 An Introduction to Database Systems
908
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第十章 数据库恢复技术 中国人民大学信息学院 An Introduction to Database Systems
909
An Introduction to Database Systems
第十章 数据库恢复技术 10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 10.8 小结 An Introduction to Database Systems
910
An Introduction to Database Systems
10.1 事务的基本概念 一、事务定义 二、事务的特性 An Introduction to Database Systems
911
An Introduction to Database Systems
一、事务(Transaction) 定义 一个数据库操作序列 一个不可分割的工作单位 恢复和并发控制的基本单位 事务和程序比较 在关系数据库中,一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序。 一个程序通常包含多个事务 An Introduction to Database Systems
912
An Introduction to Database Systems
定义事务 显式定义方式 BEGIN TRANSACTION BEGIN TRANSACTION SQL 语句 SQL 语句1 SQL 语句 SQL 语句2 。。。。。 。。。。。 COMMIT ROLLBACK 隐式方式 当用户没有显式地定义事务时, DBMS按缺省规定自动划分事务 An Introduction to Database Systems
913
An Introduction to Database Systems
二、事务的特性(ACID特性) 事务的ACID特性: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持续性(Durability ) An Introduction to Database Systems
914
An Introduction to Database Systems
第十章 数据库恢复技术 10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 10.8 小结 An Introduction to Database Systems
915
An Introduction to Database Systems
10.2 数据库恢复概述 故障是不可避免的 系统故障:计算机软、硬件故障 人为故障:操作员的失误、恶意的破坏等。 数据库的恢复 把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态) An Introduction to Database Systems
916
An Introduction to Database Systems
第十章 数据库恢复技术 10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 小结 An Introduction to Database Systems
917
An Introduction to Database Systems
故障的种类 事务内部的故障 系统故障 介质故障 计算机病毒 An Introduction to Database Systems
918
An Introduction to Database Systems
一、事务内部的故障 事务内部的故障 有的是可以通过事务程序本身发现的(见下面转账事 务的例子) 有的是非预期的 An Introduction to Database Systems
919
An Introduction to Database Systems
事务内部的故障(续) 例如,银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙。 BEGIN TRANSACTION 读账户甲的余额BALANCE; BALANCE=BALANCE-AMOUNT;(AMOUNT 为转账金额) 写回BALANCE; IF(BALANCE < 0 ) THEN { 打印'金额不足,不能转账'; ROLLBACK;(撤销刚才的修改,恢复事务) } ELSE 读账户乙的余额BALANCE1; BALANCE1=BALANCE1+AMOUNT; 写回BALANCE1; COMMIT; An Introduction to Database Systems
920
An Introduction to Database Systems
事务内部的故障(续) 这个例子所包括的两个更新操作要么全部完成要么全部不做。否则就会使数据库处于不一致状态,例如只把账户甲的余额减少了而没有把账户乙的余额增加。 在这段程序中若产生账户甲余额不足的情况,应用程序可以发现并让事务滚回,撤销已作的修改,恢复数据库到正确状态。 An Introduction to Database Systems
921
An Introduction to Database Systems
事务内部的故障(续) 事务内部更多的故障是非预期的,是不能由应用程序处理的。 运算溢出 并发事务发生死锁而被选中撤销该事务 违反了某些完整性限制等 以后,事务故障仅指这类非预期的故障 事务故障的恢复:撤消事务(UNDO) An Introduction to Database Systems
922
An Introduction to Database Systems
二、系统故障 系统故障 称为软故障,是指造成系统停止运转的任何事件,使得 系统要重新启动。 整个系统的正常运行突然被破坏 所有正在运行的事务都非正常终止 不破坏数据库 内存中数据库缓冲区的信息全部丢失 An Introduction to Database Systems
923
An Introduction to Database Systems
系统故障的常见原因 特定类型的硬件错误(如CPU故障) 操作系统故障 DBMS代码错误 系统断电 An Introduction to Database Systems
924
An Introduction to Database Systems
系统故障的恢复 发生系统故障时,事务未提交 恢复策略:强行撤消(UNDO)所有未完成事务 发生系统故障时,事务已提交,但缓冲区中的信息尚未完全写回到磁盘上。 恢复策略:重做(REDO)所有已提交的事务 An Introduction to Database Systems
925
An Introduction to Database Systems
三、介质故障 介质故障 称为硬故障,指外存故障 磁盘损坏 磁头碰撞 操作系统的某种潜在错误 瞬时强磁场干扰 An Introduction to Database Systems
926
An Introduction to Database Systems
介质故障的恢复 装入数据库发生介质故障前某个时刻的数据副本 重做自此时始的所有成功事务,将这些事务已提 交的结果重新记入数据库 An Introduction to Database Systems
927
An Introduction to Database Systems
四、计算机病毒 计算机病毒 一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序 可以繁殖和传播 危害 破坏、盗窃系统中的数据 破坏系统文件 An Introduction to Database Systems
928
An Introduction to Database Systems
故障小结 各类故障,对数据库的影响有两种可能性 一是数据库本身被破坏 二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。 An Introduction to Database Systems
929
An Introduction to Database Systems
第十章 数据库恢复技术 10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 10.8 小结 An Introduction to Database Systems
930
An Introduction to Database Systems
10.4 恢复的实现技术 恢复操作的基本原理:冗余 利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据 恢复机制涉及的关键问题 如何建立冗余数据 数据转储(backup) 登录日志文件(logging) 如何利用这些冗余数据实施数据库恢复 An Introduction to Database Systems
931
An Introduction to Database Systems
数据转储 一、什么是数据转储 二、转储方法 An Introduction to Database Systems
932
An Introduction to Database Systems
一、什么是数据转储 转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程,备用的数据称为后备副本或后援副本 如何使用 数据库遭到破坏后可以将后备副本重新装入 重装后备副本只能将数据库恢复到转储时的状态 An Introduction to Database Systems
933
An Introduction to Database Systems
二、转储方法 1.静态转储与动态转储 2.海量转储与增量转储 3.转储方法小结 An Introduction to Database Systems
934
An Introduction to Database Systems
静态转储 在系统中无运行事务时进行的转储操作 转储开始时数据库处于一致性状态 转储期间不允许对数据库的任何存取、修改活动 得到的一定是一个数据一致性的副本 优点:实现简单 缺点:降低了数据库的可用性 转储必须等待正运行的用户事务结束 新的事务必须等转储结束 An Introduction to Database Systems
935
An Introduction to Database Systems
动态转储 转储操作与用户事务并发进行 转储期间允许对数据库进行存取或修改 优点 不用等待正在运行的用户事务结束 不会影响新事务的运行 动态转储的缺点 不能保证副本中的数据正确有效 [例]在转储期间的某个时刻Tc,系统把数据A=100转储到磁带上,而在下一时刻Td,某一事务将A改为200。转储结束后,后备副本上的A已是过时的数据了 An Introduction to Database Systems
936
An Introduction to Database Systems
动态转储 利用动态转储得到的副本进行故障恢复 需要把动态转储期间各事务对数据库的修改活动登记 下来,建立日志文件 后备副本加上日志文件才能把数据库恢复到某一时刻 的正确状态 An Introduction to Database Systems
937
An Introduction to Database Systems
2.海量转储与增量转储 海量转储: 每次转储全部数据库 增量转储: 只转储上次转储后更新过的数据 海量转储与增量转储比较 从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便 但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效 An Introduction to Database Systems
938
An Introduction to Database Systems
3.转储方法小结 转储方法分类 转储状态 动态转储 静态转储 转储方式 海量转储 动态海量转储 静态海量转储 增量转储 动态增量转储 静态增量转储 An Introduction to Database Systems
939
An Introduction to Database Systems
10.4 恢复的实现技术 数据转储 登记日志文件 An Introduction to Database Systems
940
An Introduction to Database Systems
登记日志文件 一、日志文件的格式和内容 二、日志文件的作用 三、登记日志文件 An Introduction to Database Systems
941
An Introduction to Database Systems
一、日志文件的格式和内容 什么是日志文件 日志文件(log)是用来记录事务对数据库的更新操作的文 件 日志文件的格式 以记录为单位的日志文件 以数据块为单位的日志文件 An Introduction to Database Systems
942
An Introduction to Database Systems
日志文件的格式和内容(续) 以记录为单位的日志文件内容 各个事务的开始标记(BEGIN TRANSACTION) 各个事务的结束标记(COMMIT或ROLLBACK) 各个事务的所有更新操作 以上均作为日志文件中的一个日志记录 (log record) An Introduction to Database Systems
943
An Introduction to Database Systems
日志文件的格式和内容(续) 以记录为单位的日志文件,每条日志记录的内容 事务标识(标明是哪个事务) 操作类型(插入、删除或修改) 操作对象(记录内部标识) 更新前数据的旧值(对插入操作而言,此项为空值) 更新后数据的新值(对删除操作而言, 此项为空值) An Introduction to Database Systems
944
An Introduction to Database Systems
日志文件的格式和内容(续) 以数据块为单位的日志文件,每条日志记录的内容 事务标识(标明是那个事务) 被更新的数据块 An Introduction to Database Systems
945
An Introduction to Database Systems
二、日志文件的作用 进行事务故障恢复 进行系统故障恢复 协助后备副本进行介质故障恢复 An Introduction to Database Systems
946
An Introduction to Database Systems
利用静态转储副本和日志文件进行恢复 静态转储 运行事务 正常运行 ─┼───────┼───────────── Ta Tb Tf └──────────── 重装后备副本 利用日志文件恢复 继续运行 恢复 ─┼───────┼┈ ┈ ┈ ┈ ┈ ┈ ┈ ┈ ┼──── ↓ 登记日志文件 An Introduction to Database Systems
947
利用静态转储副本和日志文件进行恢复(续)
上图中: 系统在Ta时刻停止运行事务,进行数据库转储 在Tb时刻转储完毕,得到Tb时刻的数据库一致性副本 系统运行到Tf时刻发生故障 为恢复数据库,首先由DBA重装数据库后备副本,将数据库恢复至Tb时刻的状态 重新运行自Tb~Tf时刻的所有更新事务,把数据库恢复到故障发生前的一致状态 An Introduction to Database Systems
948
An Introduction to Database Systems
三、登记日志文件 基本原则 登记的次序严格按并行事务执行的时间次序 必须先写日志文件,后写数据库 写日志文件操作:把表示这个修改的日志记录 写到日志文件 写数据库操作:把对数据的修改写到数据库中 An Introduction to Database Systems
949
An Introduction to Database Systems
登记日志文件(续) 为什么要先写日志文件 写数据库和写日志文件是两个不同的操作 在这两个操作之间可能发生故障 如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了 如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性 An Introduction to Database Systems
950
An Introduction to Database Systems
第十章 数据库恢复技术 10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 小结 An Introduction to Database Systems
951
An Introduction to Database Systems
10.5 恢复策略 事务故障的恢复 系统故障的恢复 介质故障的恢复 An Introduction to Database Systems
952
An Introduction to Database Systems
事务故障的恢复 事务故障:事务在运行至正常终止点前被终止 恢复方法 由恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改 事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预 An Introduction to Database Systems
953
An Introduction to Database Systems
事务故障的恢复步骤 1. 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。 2. 对该事务的更新操作执行逆操作。即将日志记录中“更新前的值” 写入数据库。 插入操作, “更新前的值”为空,则相当于做删除操作 删除操作,“更新后的值”为空,则相当于做插入操作 若是修改操作,则相当于用修改前值代替修改后值 An Introduction to Database Systems
954
An Introduction to Database Systems
事务故障的恢复步骤 3. 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。 4. 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。 An Introduction to Database Systems
955
An Introduction to Database Systems
10.5 恢复策略 事务故障的恢复 系统故障的恢复 介质故障的恢复 An Introduction to Database Systems
956
An Introduction to Database Systems
系统故障的恢复 系统故障造成数据库不一致状态的原因 未完成事务对数据库的更新已写入数据库 已提交事务对数据库的更新还留在缓冲区没来得及写入数据库 恢复方法 1. Undo 故障发生时未完成的事务 2. Redo 已完成的事务 系统故障的恢复由系统在重新启动时自动完成,不需要用户干预 An Introduction to Database Systems
957
An Introduction to Database Systems
系统故障的恢复步骤 1. 正向扫描日志文件(即从头扫描日志文件) 重做(REDO) 队列: 在故障发生前已经提交的事务 这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录 撤销 (Undo)队列:故障发生时尚未完成的事务 这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录 An Introduction to Database Systems
958
An Introduction to Database Systems
系统故障的恢复步骤 2. 对撤销(Undo)队列事务进行撤销(UNDO)处理 反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作 即将日志记录中“更新前的值”写入数据库 3. 对重做(Redo)队列事务进行重做(REDO)处理 正向扫描日志文件,对每个REDO事务重新执行登记的操作 即将日志记录中“更新后的值”写入数据库 An Introduction to Database Systems
959
An Introduction to Database Systems
10.5 恢复策略 事务故障的恢复 系统故障的恢复 介质故障的恢复 An Introduction to Database Systems
960
An Introduction to Database Systems
介质故障的恢复 1.重装数据库 2.重做已完成的事务 An Introduction to Database Systems
961
An Introduction to Database Systems
介质故障的恢复(续) 恢复步骤 1. 装入最新的后备数据库副本(离故障发生时刻最近的转储副本) ,使数据库恢复到最近一次转储时的一致性状态。 对于静态转储的数据库副本,装入后数据库即处于一致性状态 对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。 An Introduction to Database Systems
962
An Introduction to Database Systems
介质故障的恢复(续) 2. 装入有关的日志文件副本(转储结束时刻的日志文件副本) ,重做已完成的事务。 首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。 然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。 An Introduction to Database Systems
963
An Introduction to Database Systems
介质故障的恢复(续) 介质故障的恢复需要DBA介入 DBA的工作 重装最近转储的数据库副本和有关的各日志文件副本 执行系统提供的恢复命令 具体的恢复操作仍由DBMS完成 An Introduction to Database Systems
964
An Introduction to Database Systems
第十章 数据库恢复技术 10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 小结 An Introduction to Database Systems
965
An Introduction to Database Systems
10.6 具有检查点的恢复技术 一、问题的提出 二、检查点技术 三、利用检查点的恢复策略 An Introduction to Database Systems
966
An Introduction to Database Systems
一、问题的提出 两个问题 搜索整个日志将耗费大量的时间 REDO处理:重新执行,浪费了大量时间 An Introduction to Database Systems
967
An Introduction to Database Systems
解决方案 具有检查点(checkpoint)的恢复技术 在日志文件中增加检查点记录(checkpoint) 增加重新开始文件 恢复子系统在登录日志文件期间动态地维护日志 An Introduction to Database Systems
968
An Introduction to Database Systems
二、检查点技术 检查点记录的内容 1. 建立检查点时刻所有正在执行的事务清单 2. 这些事务最近一个日志记录的地址 重新开始文件的内容 记录各个检查点记录在日志文件中的地址 An Introduction to Database Systems
969
An Introduction to Database Systems
检查点技术(续) 具有检查点的日志文件和重新开始文件 An Introduction to Database Systems
970
An Introduction to Database Systems
动态维护日志文件的方法 动态维护日志文件的方法 周期性地执行如下操作:建立检查点,保存数据库状态。 具体步骤是: 1.将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上 2.在日志文件中写入一个检查点记录 3.将当前数据缓冲区的所有数据记录写入磁盘的数据库中 4.把检查点记录在日志文件中的地址写入一个重新开始文件 An Introduction to Database Systems
971
An Introduction to Database Systems
建立检查点 恢复子系统可以定期或不定期地建立检查点,保存数据库状态 定期 按照预定的一个时间间隔,如每隔一小时建立一个检查点 不定期 按照某种规则,如日志文件已写满一半建立一个检查点 An Introduction to Database Systems
972
An Introduction to Database Systems
三、利用检查点的恢复策略 使用检查点方法可以改善恢复效率 当事务T在一个检查点之前提交 T对数据库所做的修改已写入数据库 写入时间是在这个检查点建立之前或在这个检查点建立之时 在进行恢复处理时,没有必要对事务T执行REDO操作 An Introduction to Database Systems
973
An Introduction to Database Systems
利用检查点的恢复策略(续) 系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略 Tc (检查点) Tf(系统故障) REDO UNDO T2 T3 T4 T5 不要REDO T1 An Introduction to Database Systems
974
An Introduction to Database Systems
利用检查点的恢复策略(续) T1:在检查点之前提交 T2:在检查点之前开始执行,在检查点之后故障点之前提交 T3:在检查点之前开始执行,在故障点时还未完成 T4:在检查点之后开始执行,在故障点之前提交 T5:在检查点之后开始执行,在故障点时还未完成 恢复策略: T3和T5在故障发生时还未完成,所以予以撤销 T2和T4在检查点之后才提交,它们对数据库所做的修改在故障发生时可能还在缓冲区中,尚未写入数据库,所以要REDO T1在检查点之前已提交,所以不必执行REDO操作 An Introduction to Database Systems
975
An Introduction to Database Systems
利用检查点的恢复步骤 1.从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录 An Introduction to Database Systems
976
An Introduction to Database Systems
利用检查点的恢复策略(续) 2.由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST 建立两个事务队列 UNDO-LIST REDO-LIST 把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。 An Introduction to Database Systems
977
An Introduction to Database Systems
利用检查点的恢复策略(续) 3.从检查点开始正向扫描日志文件,直到日志文件结束 如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列 如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列 4.对UNDO-LIST中的每个事务执行UNDO操作 对REDO-LIST中的每个事务执行REDO操作 An Introduction to Database Systems
978
An Introduction to Database Systems
第十章 数据库恢复技术 10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 10.8 小结 An Introduction to Database Systems
979
An Introduction to Database Systems
10.7 数据库镜像 介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性 介质故障恢复比较费时 为预防介质故障,DBA必须周期性地转储数据库 提高数据库可用性的解决方案 数据库镜像(Mirror) An Introduction to Database Systems
980
An Introduction to Database Systems
数据库镜像(续) 数据库镜像 DBMS自动把整个数据库或其中的关键数据复制到另一 个磁盘上 DBMS自动保证镜像数据与主数据库的一致性 每当主数据库更新时,DBMS自动把更新后的数据复制 过去(如下图所示) An Introduction to Database Systems
981
An Introduction to Database Systems
数据库镜像(续) An Introduction to Database Systems
982
An Introduction to Database Systems
数据库镜像的用途 出现介质故障时 可由镜像磁盘继续提供使用 同时DBMS自动利用镜像磁盘数据进行数据库的恢复 不需要关闭系统和重装数据库副本(如下图所示) An Introduction to Database Systems
983
An Introduction to Database Systems
数据库镜像(续) 没有出现故障时 可用于并发操作 一个用户对数据加排他锁修改数据,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁 An Introduction to Database Systems
984
An Introduction to Database Systems
数据库镜像(续) 频繁地复制数据自然会降低系统运行效率 在实际应用中用户往往只选择对关键数据和日志文件镜像,而不是对整个数据库进行镜像 An Introduction to Database Systems
985
An Introduction to Database Systems
第十章 数据库恢复技术 10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 10.8 小结 An Introduction to Database Systems
986
An Introduction to Database Systems
10.8 小结 如果数据库只包含成功事务提交的结果,就说数据库处于一致性状态。保证数据一致性是对数据库的最基本的要求。 事务是数据库的逻辑工作单位 DBMS保证系统中一切事务的原子性、一致性、隔离性和持续性 An Introduction to Database Systems
987
An Introduction to Database Systems
小结(续) DBMS必须对事务故障、系统故障和介质故障进行恢复 恢复中最经常使用的技术:数据库转储和登记日志文件 恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库 An Introduction to Database Systems
988
An Introduction to Database Systems
小结(续) 常用恢复技术 事务故障的恢复 UNDO 系统故障的恢复 UNDO + REDO 介质故障的恢复 重装备份并恢复到一致性状态 + REDO An Introduction to Database Systems
989
An Introduction to Database Systems
小结(续) 提高恢复效率的技术 检查点技术 可以提高系统故障的恢复效率 可以在一定程度上提高利用动态转储备份进行介质故障恢复的效率 镜像技术 镜像技术可以改善介质故障的恢复效率 An Introduction to Database Systems
990
An Introduction to Database Systems
下课了。。。 探 索 休息一会儿。。。 An Introduction to Database Systems
991
An Introduction to Database System An Introduction to Database Systems
数据库系统概论 An Introduction to Database System 第十一章 并发控制 中国人民大学信息学院 An Introduction to Database Systems
992
An Introduction to Database Systems
问题的产生 多用户数据库系统的存在 允许多个用户同时使用的数据库系统 飞机定票数据库系统 银行数据库系统 特点:在同一时刻并发运行的事务数可达数百个 An Introduction to Database Systems
993
An Introduction to Database Systems
问题的产生(续) 不同的多事务执行方式 (1)事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的特点 T1 T2 T3 事务的串行执行方式 An Introduction to Database Systems
994
An Introduction to Database Systems
问题的产生(续) (2)交叉并发方式(Interleaved Concurrency) 在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行 单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,提高系统的效率 An Introduction to Database Systems
995
An Introduction to Database Systems
问题的产生(续) 事务的交叉并发执行方式 An Introduction to Database Systems
996
An Introduction to Database Systems
问题的产生(续) (3)同时并发方式(simultaneous concurrency) 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行 An Introduction to Database Systems
997
An Introduction to Database Systems
问题的产生(续) 事务并发执行带来的问题 会产生多个事务同时存取同一数据的情况 可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性 An Introduction to Database Systems
998
An Introduction to Database Systems
第十一章 并发控制 11.1 并发控制概述 11.2 封锁 11.3 活锁和死锁 11.4 并发调度的可串行性 两段锁协议 封锁的粒度 小结 An Introduction to Database Systems
999
An Introduction to Database Systems
11.1 并发控制概述 并发控制机制的任务 对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性 An Introduction to Database Systems
1000
An Introduction to Database Systems
并发控制概述(续) 并发操作带来数据的不一致性实例 [例1]飞机订票系统中的一个活动序列 ① 甲售票点(甲事务)读出某航班的机票余额A,设A=16; ② 乙售票点(乙事务)读出同一航班的机票余额A,也为16; ③ 甲售票点卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库; ④ 乙售票点也卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库 结果明明卖出两张机票,数据库中机票余额只减少1 T1的修改被T2覆盖了! An Introduction to Database Systems
1001
An Introduction to Database Systems
并发控制概述(续) 这种情况称为数据库的不一致性,是由并发操作引起的。 在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的。 若按上面的调度序列执行,甲事务的修改就被丢失。 原因:第4步中乙事务修改A并写回后覆盖了甲事务的修改 An Introduction to Database Systems
1002
An Introduction to Database Systems
并发控制概述(续) 并发操作带来的数据不一致性 丢失修改(Lost Update) 不可重复读(Non-repeatable Read) 读“脏”数据(Dirty Read) 记号 R(x):读数据x W(x):写数据x An Introduction to Database Systems
1003
An Introduction to Database Systems
1. 丢失修改 两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。 上面飞机订票例子就属此类 An Introduction to Database Systems
1004
An Introduction to Database Systems
丢失修改(续) T1 T2 ① R(A)=16 ② R(A)=16 ③ A←A-1 W(A)=15W ④ A←A-1 W(A)=15 丢失修改 An Introduction to Database Systems
1005
An Introduction to Database Systems
2. 不可重复读 不可重复读是指事务T1读取数据后,事务T2 执行更新操作,使T1无法再现前一次读取结果。 An Introduction to Database Systems
1006
An Introduction to Database Systems
不可重复读(续) 不可重复读包括三种情况: (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值 An Introduction to Database Systems
1007
An Introduction to Database Systems
不可重复读(续) 例如: T1 T2 ① R(A)=50 R(B)=100 求和=150 ② B←B*2 (B)=200 ③ R(A)=50 R(B)=200 和=250 (验算不对) T1读取B=100进行运算 T2读取同一数据B,对其进行修改后将B=200写回数据库。 T1为了对读取值校对重读B,B已为200,与第一次读取值不一致 An Introduction to Database Systems 不可重复读
1008
An Introduction to Database Systems
不可重复读(续) (2)事务T1按一定条件从数据库中读取了某些数据记录后,事 务T2删除了其中部分记录,当T1再次按相同条件读取数据 时,发现某些记录消失了 (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影现象(Phantom Row) An Introduction to Database Systems
1009
An Introduction to Database Systems
3. 读“脏”数据 读“脏”数据是指: 事务T1修改某一数据,并将其写回磁盘 事务T2读取同一数据后,T1由于某种原因被撤销 这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致 T2读到的数据就为“脏”数据,即不正确的数据 An Introduction to Database Systems
1010
An Introduction to Database Systems
读“脏”数据(续) 例如 T1 T2 ① R(C)=100 C←C*2 W(C)=200 ② R(C)=200 ③ROLLBACK C恢复为100 T1将C值修改为200,T2读到C为200 T1由于某种原因撤销,其修改作废,C恢复原值100 这时T2读到的C为200,与数据库内容不一致,就是“脏”数据 读“脏”数据 An Introduction to Database Systems
1011
An Introduction to Database Systems
并发控制概述(续) 数据不一致性:由于并发操作破坏了事务的隔离性 并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性 An Introduction to Database Systems
1012
An Introduction to Database Systems
并发控制概述(续) 并发控制的主要技术 有封锁(Locking) 时间戳(Timestamp) 乐观控制法 商用的DBMS一般都采用封锁方法 An Introduction to Database Systems
1013
An Introduction to Database Systems
第十一章 并发控制 11.1 并发控制概述 11.2 封锁 11.3 活锁和死锁 11.4 并发调度的可串行性 两段锁协议 封锁的粒度 小结 An Introduction to Database Systems
1014
An Introduction to Database Systems
11.2 封锁 什么是封锁 基本封锁类型 锁的相容矩阵 An Introduction to Database Systems
1015
An Introduction to Database Systems
什么是封锁 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 An Introduction to Database Systems
1016
An Introduction to Database Systems
基本封锁类型 一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。 基本封锁类型 排它锁(Exclusive Locks,简记为X锁) 共享锁(Share Locks,简记为S锁) An Introduction to Database Systems
1017
An Introduction to Database Systems
排它锁 排它锁又称为写锁 若事务T对数据对象A加上X锁,则只允许T读取和 修改A,其它任何事务都不能再对A加任何类型的 锁,直到T释放A上的锁 保证其他事务在T释放A上的锁之前不能再读取和 修改A An Introduction to Database Systems
1018
An Introduction to Database Systems
共享锁 共享锁又称为读锁 若事务T对数据对象A加上S锁,则其它事务只能 再对A加S锁,而不能加X锁,直到T释放A上的S 锁 保证其他事务可以读A,但在T释放A上的S锁之前 不能对A做任何修改 An Introduction to Database Systems
1019
An Introduction to Database Systems
锁的相容矩阵 Y=Yes,相容的请求 N=No,不相容的请求 T1 T2 X S - N Y An Introduction to Database Systems
1020
An Introduction to Database Systems
锁的相容矩阵(续) 在锁的相容矩阵中: 最左边一列表示事务T1已经获得的数据对象上的锁的类型,其中横线表示没有加锁。 最上面一行表示另一事务T2对同一数据对象发出的封锁请求。 T2的封锁请求能否被满足用矩阵中的Y和N表示 Y表示事务T2的封锁要求与T1已持有的锁相容,封锁请求可以满足 N表示T2的封锁请求与T1已持有的锁冲突,T2的请求被拒绝 An Introduction to Database Systems
1021
An Introduction to Database Systems
使用封锁机制解决丢失修改问题 例: 没有丢失修改 T1 T2 ① Xlock A ② R(A)=16 Xlock A ③ A←A-1 等待 W(A)=15 Commit Unlock A ④ 获得Xlock A R(A)=15 A←A-1 ⑤ W(A)=14 事务T1在读A进行修改之前先对A加X锁 当T2再请求对A加X锁时被拒绝 T2只能等待T1释放A上的锁后T2获得对A的X锁 这时T2读到的A已经是T1更新过的值15 T2按此新的A值进行运算,并将结果值A=14送回到磁盘。避免了丢失T1的更新。 An Introduction to Database Systems
1022
An Introduction to Database Systems
使用封锁机制解决不可重复读问题 T1 T2 ① Slock A Slock B R(A)=50 R(B)=100 求和=150 ② Xlock B 等待 ③ R(A)=50 Commit Unlock A Unlock B ④ 获得XlockB B←B*2 ⑤ W(B)=200 可重复读 事务T1在读A,B之前,先对A,B加S锁 其他事务只能再对A,B加S锁,而不能加X锁,即其他事务只能读A,B,而不能修改 当T2为修改B而申请对B的X锁时被拒绝只能等待T1释放B上的锁 T1为验算再读A,B,这时读出的B仍是100,求和结果仍为150,即可重复读 T1结束才释放A,B上的S锁。T2才获得对B的X锁 An Introduction to Database Systems
1023
An Introduction to Database Systems
使用封锁机制解决读“脏”数据问题 例 T1 T2 ① Xlock C R(C)=100 C←C*2 W(C)=200 ② Slock C 等待 ③ ROLLBACK (C恢复为100) Unlock C ④ 获得Slock C ⑤ Commit C 不读“脏”数据 事务T1在对C进行修改之前,先对C加X锁,修改其值后写回磁盘 T2请求在C上加S锁,因T1已在C上加了X锁,T2只能等待 T1因某种原因被撤销,C恢复为原值100 T1释放C上的X锁后T2获得C上的S锁,读C=100。避免了T2读“脏”数据 An Introduction to Database Systems
1024
An Introduction to Database Systems
第十一章 并发控制 11.1 并发控制概述 11.2 封锁 11.3 活锁和死锁 11.4 并发调度的可串行性 两段锁协议 封锁的粒度 小结 An Introduction to Database Systems
1025
An Introduction to Database Systems
11.3 活锁和死锁 封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题 死锁 活锁 An Introduction to Database Systems
1026
An Introduction to Database Systems
活锁 事务T1封锁了数据R 事务T2又请求封锁R,于是T2等待。 T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。 T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求…… T2有可能永远等待,这就是活锁的情形 An Introduction to Database Systems
1027
An Introduction to Database Systems
活锁(续) 活 锁 An Introduction to Database Systems
1028
An Introduction to Database Systems
活锁(续) 避免活锁:采用先来先服务的策略 当多个事务请求封锁同一数据对象时 按请求封锁的先后次序对这些事务排队 该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁 An Introduction to Database Systems
1029
An Introduction to Database Systems
死锁 事务T1封锁了数据R1 T2封锁了数据R2 T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁 接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁 这样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁 An Introduction to Database Systems
1030
An Introduction to Database Systems
死锁(续) T1 T2 lock R1 • Lock R2 Lock R2. 等待 Lock R1 死 锁 An Introduction to Database Systems
1031
An Introduction to Database Systems
解决死锁的方法 两类方法 1. 预防死锁 2. 死锁的诊断与解除 An Introduction to Database Systems
1032
An Introduction to Database Systems
1. 死锁的预防 产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。 预防死锁的发生就是要破坏产生死锁的条件 An Introduction to Database Systems
1033
An Introduction to Database Systems
死锁的预防(续) 预防死锁的方法 一次封锁法 顺序封锁法 An Introduction to Database Systems
1034
An Introduction to Database Systems
(1)一次封锁法 要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行 存在的问题 降低系统并发度 难于事先精确确定封锁对象 An Introduction to Database Systems
1035
An Introduction to Database Systems
(2)顺序封锁法 顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 顺序封锁法存在的问题 维护成本 数据库系统中封锁的数据对象极多,并且在不断地变化。 难以实现:很难事先确定每一个事务要封锁哪些对象 An Introduction to Database Systems
1036
An Introduction to Database Systems
死锁的预防(续) 结论 在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点 DBMS在解决死锁的问题上更普遍采用的是诊断并解除 死锁的方法 An Introduction to Database Systems
1037
An Introduction to Database Systems
2. 死锁的诊断与解除 死锁的诊断 超时法 事务等待图法 An Introduction to Database Systems
1038
An Introduction to Database Systems
(1) 超时法 如果一个事务的等待时间超过了规定的时限,就认为发生了死锁 优点:实现简单 缺点 有可能误判死锁 时限若设置得太长,死锁发生后不能及时发现 An Introduction to Database Systems
1039
An Introduction to Database Systems
(2)等待图法 用事务等待图动态反映所有事务的等待情况 事务等待图是一个有向图G=(T,U) T为结点的集合,每个结点表示正运行的事务 U为边的集合,每条边表示事务等待的情况 若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2 An Introduction to Database Systems
1040
An Introduction to Database Systems
等待图法(续) 事务等待图 图(a)中,事务T1等待T2,T2等待T1,产生了死锁 图(b)中,事务T1等待T2,T2等待T3,T3等待T4,T4又等待T1,产生了死锁 图(b)中,事务T3可能还等待T2,在大回路中又有小的回路 An Introduction to Database Systems
1041
An Introduction to Database Systems
等待图法(续) 并发控制子系统周期性地(比如每隔数秒)生成事务等待图,检测事务。如果发现图中存在回路,则表示系统中出现了死锁。 An Introduction to Database Systems
1042
An Introduction to Database Systems
死锁的诊断与解除(续) 解除死锁 选择一个处理死锁代价最小的事务,将其撤消 释放此事务持有的所有的锁,使其它事务能继续运行下去 An Introduction to Database Systems
1043
An Introduction to Database Systems
第十一章 并发控制 11.1 并发控制概述 11.2 封锁 11.3 活锁和死锁 11.4 并发调度的可串行性 两段锁协议 封锁的粒度 小结 An Introduction to Database Systems
1044
An Introduction to Database Systems
11.4 并发调度的可串行性 DBMS对并发事务不同的调度可能会产生不同的结果 什么样的调度是正确的? An Introduction to Database Systems
1045
An Introduction to Database Systems
可串行化调度 可串行化(Serializable)调度 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同 可串行性(Serializability) 是并发事务正确调度的准则 一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度 An Introduction to Database Systems
1046
An Introduction to Database Systems
可串行化调度(续) [例]现在有两个事务,分别包含下列操作: 事务T1:读B;A=B+1;写回A 事务T2:读A;B=A+1;写回B 现给出对这两个事务不同的调度策略 An Introduction to Database Systems
1047
An Introduction to Database Systems
串行化调度,正确的调度 T1 T2 Slock B Y=R(B)=2 Unlock B Xlock A A=Y+1=3 W(A) Unlock A Slock A X=R(A)=3 Xlock B B=X+1=4 W(B) 假设A、B的初值均为2。 按T1→T2次序执行结果为A=3,B=4 串行调度策略,正确的调度 An Introduction to Database Systems 串行调度(a)
1048
An Introduction to Database Systems
串行化调度,正确的调度 T1 T2 Slock A X=R(A)=2 Unlock A Xlock B B=X+1=3 W(B) Unlock B Slock B Y=R(B)=3 Xlock A A=Y+1=4 W(A) 假设A、B的初值均为2。 T2→T1次序执行结果为B=3,A=4 串行调度策略,正确的调度 An Introduction to Database Systems 串行调度(b)
1049
An Introduction to Database Systems
不可串行化调度,错误的调度 T1 T2 Slock B Y=R(B)=2 Slock A X=R(A)=2 Unlock B Unlock A Xlock A A=Y+1=3 W(A) Xlock B B=X+1=3 W(B) 执行结果与(a)、(b)的结果都不同 是错误的调度 An Introduction to Database Systems 不可串行化的调度
1050
An Introduction to Database Systems
可串行化调度,正确的调度 T1 T2 Slock B Y=R(B)=2 Unlock B Xlock A Slock A A=Y+1=3 等待 W(A) Unlock A X=R(A)=3 Xlock B B=X+1=4 W(B) 执行结果与串行调度(a)的执行结果相同 是正确的调度 An Introduction to Database Systems 可串行化的调度
1051
An Introduction to Database Systems
冲突可串行化调度 可串行化调度的充分条件 一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc‘,如果Sc’是串行的,称调度Sc为冲突可串行化的调度 一个调度是冲突可串行化,一定是可串行化的调度 An Introduction to Database Systems
1052
An Introduction to Database Systems
冲突可串行化调度(续) 冲突操作 冲突操作是指不同的事务对同一个数据的读写操作和写写操作 Ri (x)与Wj(x) /* 事务Ti读x,Tj写x*/ Wi(x)与Wj(x) /* 事务Ti写x,Tj写x*/ 其他操作是不冲突操作 不同事务的冲突操作和同一事务的两个操作不能交换(Swap) An Introduction to Database Systems
1053
An Introduction to Database Systems
冲突可串行化调度(续) [例]今有调度Sc1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B) 把w2(A)与r1(B)w1(B)交换,得到: r1(A)w1(A)r2(A)r1(B)w1(B)w2(A)r2(B)w2(B) 再把r2(A)与r1(B)w1(B)交换: Sc2=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B) Sc2等价于一个串行调度T1,T2,Sc1冲突可串行化的调度 An Introduction to Database Systems
1054
An Introduction to Database Systems
冲突可串行化调度(续) 冲突可串行化调度是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。 [例]有3个事务 T1=W1(Y)W1(X),T2=W2(Y)W2(X),T3=W3(X) 调度L1=W1(Y)W1(X)W2(Y)W2(X) W3(X)是一个串行调度。 调度L2=W1(Y)W2(Y)W2(X)W1(X)W3(X)不满足冲突可串行化。但是调度L2是可串行化的,因为L2执行的结果与调度L1相同,Y的值都等于T2的值,X的值都等于T3的值 An Introduction to Database Systems
1055
An Introduction to Database Systems
第十一章 并发控制 11.1 并发控制概述 11.2 封锁 11.3 活锁和死锁 11.4 并发调度的可串行性 两段锁协议 封锁的粒度 小结 An Introduction to Database Systems
1056
An Introduction to Database Systems
11.5 两段锁协议 封锁协议 运用封锁方法时,对数据对象加锁时需要约定一些规则 何时申请封锁 持锁时间 何时释放封锁等 两段封锁协议(Two-Phase Locking,简称2PL)是最常用的一种封锁协议,理论上证明使用两段封锁协议产生的是可串行化调度 An Introduction to Database Systems
1057
An Introduction to Database Systems
两段锁协议(续) 两段锁协议 指所有事务必须分两个阶段对数据项加锁和解锁 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁 在释放一个封锁之后,事务不再申请和获得任何其他封锁 An Introduction to Database Systems
1058
An Introduction to Database Systems
两段锁协议(续) “两段”锁的含义 事务分为两个阶段 第一阶段是获得封锁,也称为扩展阶段 事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁 第二阶段是释放封锁,也称为收缩阶段 事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁 An Introduction to Database Systems
1059
An Introduction to Database Systems
两段锁协议(续) 例 事务Ti遵守两段锁协议,其封锁序列是 : Slock A Slock B Xlock C Unlock B Unlock A Unlock C; |← 扩展阶段 →| |← 收缩阶段 →| 事务Tj不遵守两段锁协议,其封锁序列是: Slock A Unlock A Slock B Xlock C Unlock C Unlock B; An Introduction to Database Systems
1060
An Introduction to Database Systems
两段锁协议(续) 事务T1 事务T2 Slock(A) R(A=260) Slock(C) R(C=300) Xlock(A) W(A=160) Xlock( C ) W(C=250) Slock(B) 等待 R(B=1000) Xlock(B) W(B=1100) Unlock(A) R(A=160) Unlock(B) W(A=210) Unlock( C ) 左图的调度是遵守两段锁协议的,因此一定是一个可串行化调度。 An Introduction to Database Systems 遵守两段锁协议的可串行化调度
1061
An Introduction to Database Systems
两段锁协议(续) 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。 若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的 若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议 An Introduction to Database Systems
1062
An Introduction to Database Systems
两段锁协议(续) 两段锁协议与防止死锁的一次封锁法 一次封锁法要求每个事务必须一次将所有要使用的数 据全部加锁,否则就不能继续执行,因此一次封锁法 遵守两段锁协议 但是两段锁协议并不要求事务必须一次将所有要使用 的数据全部加锁,因此遵守两段锁协议的事务可能发 生死锁 An Introduction to Database Systems
1063
An Introduction to Database Systems
两段锁协议(续) [例] 遵守两段锁协议的事务发生死锁 T1 Slock B R(B)=2 Xlock A 等待 T2 Slock A R(A)=2 Xlock A 等待 遵守两段锁协议的事务可能发生死锁 An Introduction to Database Systems
1064
An Introduction to Database Systems
第十一章 并发控制 11.1 并发控制概述 11.2 封锁 11.3 活锁和死锁 11.4 并发调度的可串行性 两段锁协议 封锁的粒度 小结 An Introduction to Database Systems
1065
An Introduction to Database Systems
封锁粒度 封锁对象的大小称为封锁粒度(Granularity) 封锁的对象:逻辑单元,物理单元 例:在关系数据库中,封锁对象: 逻辑单元: 属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等 物理单元:页(数据页或索引页)、物理记录等 An Introduction to Database Systems
1066
An Introduction to Database Systems
选择封锁粒度原则 封锁粒度与系统的并发度和并发控制的开销密切相关。 封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小; 封锁的粒度越小,并发度较高,但系统开销也就越大 An Introduction to Database Systems
1067
An Introduction to Database Systems
选择封锁粒度的原则(续) 例 若封锁粒度是数据页,事务T1需要修改元组L1,则T1必须对包含L1的整个数据页A加锁。如果T1对A加锁后事务T2要修改A中元组L2,则T2被迫等待,直到T1释放A。 如果封锁粒度是元组,则T1和T2可以同时对L1和L2加锁,不需要互相等待,提高了系统的并行度。 又如,事务T需要读取整个表,若封锁粒度是元组,T必须对表中的每一个元组加锁,开销极大 An Introduction to Database Systems
1068
An Introduction to Database Systems
选择封锁粒度的原则(续) 多粒度封锁(Multiple Granularity Locking) 在一个系统中同时支持多种封锁粒度供不同的事务选择 选择封锁粒度 同时考虑封锁开销和并发度两个因素,适当选择封锁粒度 需要处理多个关系的大量元组的用户事务:以数据库为封锁单位 需要处理大量元组的用户事务:以关系为封锁单元 只处理少量元组的用户事务:以元组为封锁单位 An Introduction to Database Systems
1069
An Introduction to Database Systems
多粒度封锁 多粒度树 以树形结构来表示多级封锁粒度 根结点是整个数据库,表示最大的数据粒度 叶结点表示最小的数据粒度 An Introduction to Database Systems
1070
An Introduction to Database Systems
多粒度封锁(续) 例:三级粒度树。根结点为数据库,数据库的子结点为关系,关系的子结点为元组。 数据库 关系Rn 关系R1 元组 …… 三级粒度树 An Introduction to Database Systems
1071
An Introduction to Database Systems
多粒度封锁协议 允许多粒度树中的每个结点被独立地加锁 对一个结点加锁意味着这个结点的所有后裔结点 也被加以同样类型的锁 在多粒度封锁中一个数据对象可能以两种方式封 锁:显式封锁和隐式封锁 An Introduction to Database Systems
1072
An Introduction to Database Systems
显式封锁和隐式封锁 显式封锁: 直接加到数据对象上的封锁 隐式封锁: 该数据对象没有独立加锁,是由于其上 级结点加锁而使该数据对象加上了锁 显式封锁和隐式封锁的效果是一样的 An Introduction to Database Systems
1073
An Introduction to Database Systems
显式封锁和隐式封锁(续) 系统检查封锁冲突时 要检查显式封锁 还要检查隐式封锁 例如事务T要对关系R1加X锁 系统必须搜索其上级结点数据库、关系R1 还要搜索R1的下级结点,即R1中的每一个元组 如果其中某一个数据对象已经加了不相容锁,则T必须等待 An Introduction to Database Systems
1074
An Introduction to Database Systems
显式封锁和隐式封锁(续) 对某个数据对象加锁,系统要检查 该数据对象 有无显式封锁与之冲突 所有上级结点 检查本事务的显式封锁是否与该数据对象上的隐式封锁冲突:(由上级结点已加的封锁造成的) 所有下级结点 看上面的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突 An Introduction to Database Systems
1075
An Introduction to Database Systems
意向锁 引进意向锁(intention lock)目的 提高对某个数据对象加锁时系统的检查效率 An Introduction to Database Systems
1076
An Introduction to Database Systems
意向锁(续) 如果对一个结点加意向锁,则说明该结点的下层结点正在 被加锁 对任一结点加基本锁,必须先对它的上层结点加意向锁 例如,对任一元组加锁时,必须先对它所在的数据库和关系加意向锁 An Introduction to Database Systems
1077
An Introduction to Database Systems
常用意向锁 意向共享锁(Intent Share Lock,简称IS锁) 意向排它锁(Intent Exclusive Lock,简称IX锁) 共享意向排它锁(Share Intent Exclusive Lock, 简称SIX锁) An Introduction to Database Systems
1078
An Introduction to Database Systems
意向锁(续) IS锁 如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。 例如:事务T1要对R1中某个元组加S锁,则要首先对关系R1和数据库加IS锁 An Introduction to Database Systems
1079
An Introduction to Database Systems
意向锁(续) IX锁 如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。 例如:事务T1要对R1中某个元组加X锁,则要首先对关 系R1和数据库加IX锁 An Introduction to Database Systems
1080
An Introduction to Database Systems
意向锁(续) SIX锁 如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。 例:对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别元组(所以要对该表加IX锁)。 An Introduction to Database Systems
1081
An Introduction to Database Systems
意向锁(续) 意向锁的相容矩阵 An Introduction to Database Systems
1082
An Introduction to Database Systems
意向锁(续) 锁的强度 锁的强度是指它对其他锁的排斥程度 一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然 An Introduction to Database Systems
1083
An Introduction to Database Systems
意向锁(续) 具有意向锁的多粒度封锁方法 申请封锁时应该按自上而下的次序进行 释放封锁时则应该按自下而上的次序进行 例如:事务T1要对关系R1加S锁 要首先对数据库加IS锁 检查数据库和R1是否已加了不相容的锁(X或IX) 不再需要搜索和检查R1中的元组是否加了不相容的锁(X锁) An Introduction to Database Systems
1084
An Introduction to Database Systems
意向锁(续) 具有意向锁的多粒度封锁方法 提高了系统的并发度 减少了加锁和解锁的开销 在实际的数据库管理系统产品中得到广泛应用 An Introduction to Database Systems
1085
An Introduction to Database Systems
第十一章 并发控制 11.1 并发控制概述 11.2 封锁 11.3 活锁和死锁 11.4 并发调度的可串行性 两段锁协议 封锁的粒度 小结 An Introduction to Database Systems
1086
An Introduction to Database Systems
11.7 小结 数据共享与数据一致性是一对矛盾 数据库的价值在很大程度上取决于它所能提供的数据共享度 数据共享在很大程度上取决于系统允许对数据并发操作的程度 数据并发程度又取决于数据库中的并发控制机制 数据的一致性也取决于并发控制的程度。施加的并发控制愈多,数据的一致性往往愈好 An Introduction to Database Systems
1087
An Introduction to Database Systems
小结(续) 数据库的并发控制以事务为单位 数据库的并发控制通常使用封锁机制 两类最常用的封锁 An Introduction to Database Systems
1088
An Introduction to Database Systems
小结(续) 并发控制机制调度并发事务操作是否正确的判别准则是可串行性 并发操作的正确性则通常由两段锁协议来保证。 两段锁协议是可串行化调度的充分条件,但不是必要 条件 An Introduction to Database Systems
1089
An Introduction to Database Systems
小结(续) 对数据对象施加封锁,带来问题 活锁: 先来先服务 死锁: 预防方法 一次封锁法 顺序封锁法 死锁的诊断与解除 超时法 等待图法 An Introduction to Database Systems
1090
An Introduction to Database Systems
下课了。。。 探 索 休息一会儿。。。 An Introduction to Database Systems
Similar presentations