导图社区 数据库系统概论(第六版)——王珊,杜小勇,陈红
这是一篇关于数据库系统概论(第六版)的思维导图,涵盖了数据库系统的各个方面,从基础概念到设计方法,从系统实现到新技术发展,形成了一个完整的知识体系。适合考研华中师范大学信息资源管理专业的学子。
编辑于2026-03-09 12:25:52这是一篇关于信息分析理论、方法与应用的思维导图,内容涵盖了信息分析的各个方面,从基础理论到具体方法,再到实际应用,适合考研华中师范大学信息资源管理专业的学子。
这是一篇关于数据库系统概论(第六版)的思维导图,涵盖了数据库系统的各个方面,从基础概念到设计方法,从系统实现到新技术发展,形成了一个完整的知识体系。适合考研华中师范大学信息资源管理专业的学子。
这是一篇关于管理信息系统思维导图,MIS战略规划是从组织的宗旨、目标和发展战略出发,对组织内外信息资源进行统一规划、管理和应用,从而规范组织内部管理,提高工作效率和服务对象满意度。适合考研华中师范大学信息资源管理专业的学子。
社区模板帮助中心,点此进入>>
这是一篇关于信息分析理论、方法与应用的思维导图,内容涵盖了信息分析的各个方面,从基础理论到具体方法,再到实际应用,适合考研华中师范大学信息资源管理专业的学子。
这是一篇关于数据库系统概论(第六版)的思维导图,涵盖了数据库系统的各个方面,从基础概念到设计方法,从系统实现到新技术发展,形成了一个完整的知识体系。适合考研华中师范大学信息资源管理专业的学子。
这是一篇关于管理信息系统思维导图,MIS战略规划是从组织的宗旨、目标和发展战略出发,对组织内外信息资源进行统一规划、管理和应用,从而规范组织内部管理,提高工作效率和服务对象满意度。适合考研华中师范大学信息资源管理专业的学子。
第一章 绪论
一、 数据库系统概述
数据库的四个基本概念
数据
描述事物的符号记录
数据的含义称为数据的语义,数据与其语义是不可分的
数据库
长期存储在计算机内、有组织、可共享的大量数据的集合。数据库中中点的数据按一定的数据模型组织、描述和存储,具有较小冗余度、较高的数据独立性和易扩展性,并可为各种用户共享
概括地说,数据库数据具有永久存储、有组织和可共享三个基本特点
数据库管理系统
是位于用户和操作系统之间的一层数据管理软件。数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。
数据库管理系统主要功能
1. 数据定义功能
数据库管理系统提供数据定义语言DDL,用户通过它可以方便地对存储在数据库中的数据对象的组成和结构进行定义
SQL的数据定义功能包括模式定义、表定义、视图和索引的定义
2. 数据组织、存储和管理
数据库管理系统要分类组织、存储和管理各种数据,包括数字字典、用户数据、数据存储路径等。要确定以何种文件结构和存取方式在存储器上组织这些数据,以及如何实现数据之间的联系。
数据组织和存储基本目标是提高存储空间利用率和方便存取,提供多种存取方法,如索引查找、哈希查找、顺序查找等来提高存取效率
3. 数据操纵功能
数据库管理系统提供数据操纵语言,用户可以使用它操纵数据,实现对数据库的基本操作,如查询、插入、删除、修改等
4. 数据库的事务管理和运行管理
数据库在建立、运行和维护时由数据库管理系统统一管理和控制,以保证事务的正常运行、数据的安全性和完整性、多用户对数据的并发使用,以及发生故障后的系统回复
5. 数据库的建立和维护功能
数据库的建立和维护功能包括数据库初始数据的输入和转换功能,数据库的存储和恢复功能,数据库的重组、性能监视和数据分析等功能。这些功能通常由一些实用程序或管理工具完成
6. 其他功能
数据库系统
是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统
数据管理技术的产生和发展
人工管理阶段
特点
数据不保存
应用程序管理数据
数据不共享
数据不具有独立性
文件系统阶段
特点
数据可以长期保存
数据由专门的软件进行管理
缺点
数据共享性弱,冗余高
数据独立性弱
数据库系统阶段
从文件系统到数据库系统标志着数据管理技术的飞跃
特点
1. 整体数据的结构化
是数据库系统阶段与文件系统阶段的本质区别
2. 数据的共享性强、冗余度低且易于扩充
3. 数据的独立性强
数据的独立性由数据库管理系统提供的二级映像功能保证
物理独立性
是指用户的应用程序与数据库中数据的物理存储是相互独立的
逻辑独立性
用户的应用程序与数据库的逻辑结构是相互独立的
4. 数据由数据库管理系统统一管理和控制
数据库管理系统提供的数据管理功能
数据的安全性保护
数据的完整性检查
数据的并发性控制
数据库的恢复
数据库系统的特点
数据结构化
数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别
所谓整体结构化是指数据库中的数据不在仅仅针对某一个应用,而是面向整个组织或企业;不仅数据内部是结构化的,而且整体是结构化的,数据之间是具有联系的。也就是说,不仅要考虑某个应用的数据结构,还要考虑整个组织的数据结构
数据的共享性高、冗余度低且易扩展
数据共享可以大大减少数据冗余,节约存储空间,数据共享还能够避免数据之间的不相容性与不一致性
由于数据面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这就是得数据库系统弹性大,易于扩充,可以适应各种用户的要求。
数据独立性高
数据独立性是借助数据库管理数据的一个显著优点
包括
物理独立性
是指用户的应用程序与数据库中数据的物理存储是相互独立的,
也就是说,数据在数据库中怎样存储是由数据系统管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变时应用程序不用改变
逻辑独立性
是指用户的应用程序与数据库的逻辑结构是相互独立的
也就是说哦,数据的逻辑结构改变是用户程序也可以不变
数据的独立性是由数据库管理系统提供的二级映像功能来保证的
数据与程序的独立把数据的定义从程序中分离出去,加上存取数据的方法又由数据库管理系统负责提供,从而简化了应用程序的编制,大大减少了应用程序的维护和修改
数据由数据库管理系统统一管理和控制
数据的安全性保护
是指保护数据以防止不合法使用造成的数据泄露和破坏
数据的完整性检查
指数据的正确性、有效性和相容性
完整性检查把数据控制在有效的范围内,并保证数据之间满足一点关系
并发控制
当多个用户的并发进程同时存取、修改数据库时,可能会因相互干犹而得到错误的结果或使数器库的完整性道到肢坏。因此,必须对多用户的并发操作加以控制和协调,以保证一个用户事务的执行不受其他事务的干抗,从而强免造成数据的不一致性。
数据库恢复
数据库管理系统必须具有将数据库从错误状态恢复早某一已知的正确状态(亦称完整状态或一致状态)的功能,这就是数据库的恢复功能
综上所述,数据库是长期存储在计算机内有组织、大量、共享的数据集合。它可以供各种用户共享,具有最小冗余度和较高的数据独立性。数据库管理系统在数据库建立、运行和维护时对数据库进行统一控制,以保证数据的完整性和安全性,并在多用户同时使用数据库时进行并发控制,在发生故障后对数据库进行恢复
数据库系统的出现使信息系统从以加工数据的程序为中心转向围绕共享的数据库为中心的新阶段, 这样即便于数据的集中管理,又能简化应用程序的研制和维护,提高了数据的利用率和相容性,提高了决策的可靠性
二、 数据模型
数据模型也是一种模型,他是对现实世界数据特征的抽象。也就是说数据是用来数据模型是用来描述数据、组织数据和对数据进行操作的
数据模型是对现实世界的模拟。现有的数据库系统均是基于某种数据模型的。数据模型是数据库系统的核心和基础
两类数据模型
数据模型应满足三方面要求
一是能比较真实地模拟现实世界
二是容易为人所理解
三是便于在计算机上实现
根据模型应用的不同目的,可以将这些模型分为两大类,他们分别属于不同层次
第一类是概念模型
也称信息模型,是按用户观点来对数据和信息建模,主要用于数据库设计
第二类是逻辑模型和物理模型
逻辑模型包括层次模型、网状模型、关系模型、面向对象数据模型和对象关系数据模型、半结构化数据模型等,它是按计算机系统的观点来对数据建模,主要用于数据库管理系统的实现
物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方式的存取方法,活在磁盘或磁带上的存储方法和存取方法,是面向计算机系统的。
物理模型的具体实现是数据库管理系统的任务,数据库设计人员要了解和选择物理模型,最终用户则不必考虑物理级的细节
数据模型是数据库系统的核心和基础
为了把现实世界中的具体事物抽象、组织为某一数据库管理系统支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换成机器世界
数据建模
1. 建立概念模型
首先将现实世界抽象为信息世界
概念模型是按用户的观点来对数据建模,主要用于数据设计
2. 将概念模型转换为数据模型
接下来将信息世界转换为机器世界,即将概念模型转换成计算机上某一数据库管理系统支持的数据模型
数据模型是按计算机系统的观点对数据建模,是数据库管理系统支持的,用于数据库管理系统的实现
从概念模型到数据模型的转换由数据库设计人员完成,也可以通过数据库设计人具辅助设计人员完成
概念模型
概念模型实际上是现实世界到机器世界的中间层次
概念模型用于信息世界的建模。是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有利工具,也是数据库设计人员和用户之间进行交流的语言。因此,概念模型一方面一应该具有较强的语义表达能力、能够方便、直接地表达应用中的各种语义知识,另一方面它还应该简单、清晰、易于用户理解
信息世界中的基本概念
实体
客观存在并可相互区别的事物
实体可以使具体的人事物,也可以是抽象的概念或联系
属性
实体所具有的某一特性
一个实体可以用若干属性来刻画
码
唯一标识实体的属性集称为码
实体型
具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性集合来抽象和可画同类实体,称为实体型
实体集
同一类型实体的集合称为实体集
联系
实体(型)内部的联系和实体(型)之间的联系
实体内部的联系通常是指实体的各属性之间的联系,实体之间的联系通常是指不同实体集之间联系
实体之间的联系有一对一、一对多、多对多等多种类型
概念模型的一种表示方法:实体-联系方法
E-R方法,详见第七章
数据模型的三要素
一般地讲,数据模型是严格定义的一组概念的集合。这些概念精确地描述了系统的静态特征、动态特性和完整性约束条件。
数据结构、数据操作、数据的完整性约束条件这三个方面的内容完整地描述了一个数据模型,其中数据结构是刻画模型性质的最基本方面
数据结构
数据结构描述数据库的组成对象以及对象之间的联系。也就是说,数据结构描述的内容有两类:
一类是与对象的类型、内容、性质有关的,如网状模型中的数据项、记录,关系模型中的域、属性、关系等;
一类是与数据之间联系有关的对象,如网状模型中的系型
数据结构是刻画一个数据模型性质最重要的方面。因此在数据库系统中,人们通常按照其数据结构的类型来命名数据模型。
数据结构是所描述的对象类型的集合,是对系统静态特性的描述
数据结构是刻画模型性质的最基本的内容
数据操作
是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则
数据库主要用查询和更新(包括插入、删除、修改)两大类操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言
数据操作是对系统动态特性的描述
数据的完整性约束条件
数据的完整性约束条件是一组完整性规则。
完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容
数据模型应该反映和规定其必须遵守的基本的和通用的完整性约束条件。数据模型还应该提供定义完整性约束规则的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件
常见的数据模型
数据库领域中主要的逻辑数据模型
层次模型
网状模型
格式化模型
在格式化模型中,实体用记录表示,实体的属性对应记录的数据项(或字段)。实体之间的联系在格式化模型中转换成记录之间的两两联系
在格式化模型中数据结构的单位是基本层次联系。所谓基本层次联系是指两个记录以及他们之间的一对多(包含一对一)的联系
关系模型
面向对象数据模型
对象关系数据模型
半结构化数据模型
层次模型
层次模型用树形结构来表示各类实体以及实体间的联系
层次模型的数据结构
在数据库中定义满足下面两个条件的基本层次联系的集合为层次模型
有且只有一个结点没有双亲结点,这个结点称为根节点
根以外的其他结点有且只有一个双亲节点
基本特点
任何一个给定的记录值只能按其层次路径查看,没有一个子女记录值能够脱离双亲记录值而独立存在
层次模型的数据操纵与完整性约束条件
层次模型的数据操纵主要有查询插入、删除和更新。进行插入、删除、更新操作时要满足层次模型的完整约束性条件
进行插入操作时,如果没有相应的双亲节点值就不能插入它的子女结点值
进行删除操作时,如果删除双亲结点值,则相应的子女结点值也将被同时删除
层次模型的优缺点
优点
1. 层次模型的数据结构比较简单清晰
2. 层次数据库的查询效率高。因为层次模型中记录之间的联系用有向边表示,这种联系DBMS中常常用指针实现。因此这种联系也就是记录之间的存取路径。当要存取某个结点的记录值,DBNS就沿着这一条路径很快找到该记录值,所以层次数据库的性能优良,存取效率高
3. 层次数据模型提供了良好的完整性约束条件
用层次模型对具有一对多的层次联系的部门描述非常自然、直观,容易理解
缺点
1. 现实世界中很多联系是非层次的,如结点之间具有多对多联系,不适合用层次模型来表示
2. 如果一个结点具有多个双亲结点等,用层次模型表示这类联系就很笨拙,只能通过冗余数据(易产生不一致性)或创建非自然的数据结构(引入虚拟结点)来解决。对插入和删除操作的限制比较多,因而应用程序的编写比较复杂
3. 查询子女结点必须通过双亲节点
4. 由于结构严密,层次命令趋于程序化
网状模型
采用网状模型作为数据的组织方式。 网状数据模型的典型代表是DBTG系统,亦称CODASY系统
网状模型的数据结构
在数据库中,把满足以下两个条件的基本层次联系集合称为网状模型
允许一个以上的结点无双亲
一个结点可以有多于一个的双亲
网状模型是一种必层次模型更具普遍性的结构。它去掉了层次模型的两个限制,允许多个结点没有双亲节点,允许结点有多个双亲结点;允许两个结点之间有多种联系(称之为复合关系)。因此,网状模型可以更直接地去描述现实世界。而层次模型实际上是网状模型的一个特例
层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一
网状模型的数据操纵与完整性约束
网状模型一般来说咩有层次模型那样严格的完整性要约束条件,但具体的网状数据库系统对数据操纵都加了一些限制,提供了一定的完整性约束
支持记录码的概念,码即唯一识别记录的数据项的集合
保证一个联系中双亲记录和子女记录之间是一对多关系
可以支持双亲记录和子女记录之间的某些约束条件
网状模型的优缺点
优点
1. 能够更为直接地描述现实世界
2. 具有良好的性能,存取效率较高
缺点
1. 结构比较复杂,而且随着应用环境的扩大,数据库的结果就变得越来越复杂,不利用最终用户掌握
2. 网状模型的DDL、DML复杂,并且要嵌入某一种高级语言,用户不容易掌握,不容易使用
3. 由于记录之间的联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此用户必须了解系统结构的细节,加重了编写应用程序的负担
关系模型
关系模型的数据结构
术语
1. 关系
一个关系对应通常所说的一张表
2. 元组
表中的一行即为一个元组
3. 属性
表中的一列即为一个属性,给每一个属性起一个名即为属性名
4. 码
也称为码键。表中的某个属性组,它可以唯一确定一个元组
5. 域
域是一组具有相同数据类型的值的集合。属性的取值范围来自某个域、
6. 分量
元组中的一个属性值
7. 关系模式
对关系的描述
关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是,关系中的每一个分量必须是不可分的数据项,也就是所,不允许表中还有表
关系模型的数据操纵与完整性约束
1. 关系模型的数据操纵主要包括查询、插入、删除和更新数据。这些操作必须满足关系的完整性约束条件。
2. 关系的完整性要约束条件包括三大类
(1) 实体完整性
(2) 参照完整性
(3) 用户定义的完整性
3. 关系模型中的数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合,而不像格式化模型中那样单记录的操作方式。
4. 另一方面,关系模型把存取路径向用户屏蔽起来,用户只要指出“干什么”或“找什么”,不必详细说明“怎么干”或“怎么找”,从而大大提高了数据的独立性,提高了用户生产率
优缺点
优点
这因为这些优点,关系模型诞生后发展迅速,深受用户的喜爱
(1) 关系模型与格式化模型不同,它是建立在严格的数学概念的基础上的
(2) 关系模型的概念单一。无论实体还是实体之间的联系都用关系来表示,对数据的检查和更新结果也是关系,所以其数据结构简单、清晰,用户易懂易用
(3) 关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好地安全保密性,也简化了程序员的工作和数据库开发建立的工作
缺点
(1) 由于存取路径对用户是屏蔽的,查询效率往往不如格式化数据模型(层次模型和网状模型)
(2) 为了提高性能,数据库管理系统必须对用户的查询请求进行优化,因此增加了开发数据库管理系统的难度。不过用户不必考虑这些系统内部的优化技术细节
三、 数据库系统的三级模式结构
数据库系统中模式的概念
在数据模型中有“型”和“值”的概念
“型”是指对某一类数据的结构和属性的说明,
“值”是型的一个具体赋值
模式,也称为逻辑模式,是数据库中全体数据的逻辑结构的特征的描述,它仅仅涉及型的描述,不涉及具体的值。模式的一个具体值称为模式的一个实例。同一个模式可以有很多实例
模式是相对稳定的,而实例是相对变动的。因为数据库中的数据是在不断更新。模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态
数据库系统的三级模式结构
数据库系统的三级模式是数据的三个抽象级别,它把数据的具体组织留给数据库管理系统管理,使用户能逻辑地、抽象地处理数据,而不必关系数据在计算机中的具体表示方式与存储方式
模式
也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图
它是数据库系统模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,又与具体的应用程序、所使用的应用开发工具及高级程序设计语言无关
模式实际上是数据库数据在逻辑级上的视图。一个数据库只有一个模式。数据库模式以某一种数据模型为基础,统一综合地考虑地所有用户的需求,并将这些需求有机地结合成一个逻辑整体。
定义模式时不仅要定义数据的逻辑结构;而且要定义数据之间的联系,定义与数据有关的安全性、完整性要求
数据库管理系统提供模式数据定义语言(模式DDL)来严格地定义模式
外模式
也称子模式或用户模式
它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
外模式通常是模式的子集。一个数据库可以用多个外模式。由于它是各个用户的数据视图,外模式的描述可以是不同的;另一方面,同一外模式也可以为某一用户的多个应用系统所使用,但一个应用程序只能使用一个外模式
外模式是保证数据库安全性的一个有力措施
数据库管理系统提供外模式数据定义语言(外模式DDL)来严格定义外模式
内模式
也称存储模式或物理模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式
数据库的二级映像功能与数据独立性
为了能够在系统内部实现这三个抽象层次(外模式。模式,内模式)的联系和转换,数据库管理系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。 正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性
外模式/模式映像
模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。 对于同一个模式可以有任意多个外模式。对于每一个外模式,数据库系统都有一个一个外模式/模式映像,它定义了该外模式与模式之间的对应关系。这些映像定义通常包含正在各自外模式的描述中
当模式改变时(如增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变。应用程序是依据模式的外模式编写的,从而应用程序不必修改,保证数据与程序的逻辑独立性,,简称数据的逻辑独立性
模式/内模式映像
数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。
当数据库的存储结构改变时,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称数据的物理独立性
在数据库的三级模式结构中,数据库模式即全局逻辑结构是数据库的中心与关键,它独立于数据库的其他层次。因此设计数据库模式结构时应首先确定数据库的逻辑模式
数据库的内模式依赖于它的全局逻辑结构,但独立于数据库的用户视图,即外模式,也独立于具体的存储设备。它是将全局逻辑结构中所定义的数据结构及其联系按照一定的物理存储策略进行组织,以达到较好的时间和空间效率
数据库的外模式面向具体的应用程序,它定义在逻辑模式上,但独立于存储模式和存储设备。当应用需求发生较大变化,相应的外模式不能满足其视图要求时,该外模式就得做相应改动,所以设计外模式应充分考虑应用的扩充性
数据库的二级映像保证了数据库外模式的稳定性,从而从底层上保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改
数据与程序之间的独立性使得数据的定义和描述可以从应用程序中分离出去。另外,由于数据的存取由数据库管理系统管理,从而简化了应用程序的编制,大大减少了应用程序的维护和修改
四、 数据库系统的组成
硬件平台及数据库
要有足够大的内存,存放操作系统、数据库管理系统的核心模块、数据缓冲区和应用程序
有足够大的磁盘或磁盘阵列等设备存放数据库,有足够大的磁带(或光盘)作数据备份
要求系统有较高的通道能力,以提高数据传送率
软件
数据库管理系统
支持数据库管理系统运行的操作系统
具有与数据库接口的高级语言及其编译系统,便于开发应用程序
以数据库管理系统为核心的应用开发工具
为特定应用环境开发的数据库应用系统
人员
数据库管理员
1. 职责
旧版书
1||| 决定数据库中的信息内容和结构
2||| 决定数据库的存储结构和存取策略
3||| 定义数据的安全性要求和完整性约束条件
4||| 监控数据库的使用和运行
5||| 数据库的改进和重组、重构
新版书
1||| 设计和定义数据库
数据库管理员必须参与数据库设计的全过程,与最终用户、应用程序员、系统分析员密切结合,设计概念模式、数据库模式以及各个应用的外模式;还要熟悉所使用的数据库管理系统产品,决定数据库的存储结构和存储策略,设计数据库的内模式
2||| 帮助最终用户使用数据库系统
数据库管理员要担负起培训最终用户的责任,并负责解答最终用户日常使用数据库的系统时遇到的问题
3||| 负责数据库系统的运维工作
数据库管理员负责监视数据库系统的运行情况,及时处理运行过程中出现的问题,控制不同用户访问数据库的权限,收集数据库的审计信息,保障数据库的安全性和完整性
4||| 改进和重组数据库系统,调优数据库系统的性能
DBA负责监视、分析数据库的性能,包括空间利用率和处理效率。虽然在系统设计时已经充分考虑了性能要求,但性能好坏只能通过实际运行效果来检验,所以数据库管理员必须对运行情况进行记录、统计和分析,并根据实际应用环境不断改进数据库设计,例如根据实际情况修改某些系统参数和环境变量值来改善系统性能。另一方面,数据库运行过程会不断地插入、删除、修改数据,这样在一段时间后必然会影响数据的物理布局,导致系统性能下降,因此数据库管理员要定期或按一定策略对数据库进行重组
5||| 转储和恢复数据库
为了减少硬件、软件或人为故障对数据库吸引的破坏,数据库管理员必须定义和实施适当的后援和恢复策略。
例如,周期性地转储数据、维护日志文件等。一旦系统发生故障,数据库管理员必须能够在最短时间内把数据库恢复到某一正确状态,并且尽可能不影响或少影响计算机系统其他部分的正常运行
6||| 重构数据库
当用户的应用需求增加或改变时,数据库管理员需要对数据库进行较大的改造,包括修改内模式或模式,即重新构造数据库
系统分析员和数据库设计人员
其主要职责为应用系统的需求分析与规范说明,进行总体设计。因此他们必须与用户及数据库管理员相结合,进行数据各级模式的设计,确定系统的软硬件配置
应用程序员
其主要职责为以外模式为基础开发应用系统,编制具体的应用程序。数据库的两级映像保证了他们不必考虑数据的存储细节
最终用户
分类
偶然用户
简单用户
复杂用户
主要职责是为具体操作应用系统,通过应用系统客户端的用户界面使用数据库已完成业务活动
五、 数据库系统的体系结构
分类
从数据最终用户角度看
集中式数据库系统
数据库管理系统、数据库和应用程序都在一台计算机上。
在小型机和大型机上的集中式数据库系统一般是多用户系统,即多个用户通过各自的终端运行不同的应用系统,共享数据库。微型计算机上的数据库系统一般是单用户的
客户——服务器数据库系统
并行数据库系统
分布式数据库系统
云计算环境下的数据库系统
六、 小结
第二章 关系数据库
一、 关系模型的数据结构及形式化定义
关系
关系模型是建立在集合代数的基础上
域
是一组具有相同数据类型的值的集合
笛卡尔积
是域上的一种集合运算
可表示为一张二维表。表中的每行对应一个元组,表中的每一列来自一个域
关系
是笛卡尔积的有限子集,所以关系也是一张二维表,表中的每行对应一个元组,表中的每列对应一个域
若属性中的某一属性组能唯一地标识一个元组,而其子集不能,则称该属性组为候选码
若一个关系有多个候选码,则选定其中一个为主码。候选码的诸属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。
在最简单情况下,候选码只包含一个属性。在最极端情况下,关系模式的所有属性是这个关系模式的候选码,称为全码
关系可以由三种类型:基本关系(通常又称为基本表或基本表)、查询表和视图表
基本关系的性质
1. 列是同质的,即每一列中的分量是同一类型的数据,来自同一个域
2. 不同的列可出自同一个域,称其中每一列为一个属性,不同的属性要给予不同的属性名
3. 列的顺序无所谓,即列的次序可以任意交换。由于列顺序是无关紧要的,因此在许多实际关系数据库产品中增加新属性时,永远是插至最后一列
4. 任意两个元组的码不能取相同的值
5. 行的顺序无所谓,即行的次序可以任意交换
6. 分量必须取原子值,即每一个分量都必须是不可分的数据项
关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件。这些规范条件中最基本一条就是,关系的每一个分量必须是不可分的数据项。
规范化的关系简称为范式。详见第六章
关系可以有三种类型
1. 基本关系
通常又称为基本表或基表
2. 查询结果
3. 视图
是由基本表或其他视图导出的表,是虚表
关系模式
在关系模型中,关系是元组的集合,关系是值,关系模式是对关系的描述,关系模式是型
关系的描述称为关系模式。可以形象化地表示为R(U, D, DOM,F) R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合
属性间的依赖关系详见第六章
关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据
关系数据库
在一个给定的应用领域中,所有关系的几个构成一个关系数据库
关系数据库也有型和值之分。关系数据库的型也成为关系数据库模式,是对关系数据库的描述。关系数据库模式包括若干域的定义,以及这些域上定义的若干关系模式
关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库
支持关系模型的数据库系统称为关系数据库系统
关系模型的存储结构
关系模型是关系数据的逻辑结构,用关系数据定义语言描述
二、 关系操作
基本的关系操作
1. 查询
选择
投影
并
差
笛卡尔积
基本操作
连接
除
交
可以用基本操作来定义和导出
2. 插入 删除 修改
3. 关系操作的特点是集合操作,即操作的对象和结果都是集合,这种操作方式也称为一次一集合的方式。相应地,非关系数据模型的数据操作方式是一次一记录的方式
关系数据语言的分类
关系代数
用对关系的运算来表达查询要求
关系演算
用谓词来表达查询需求
分类
按谓词变元的基本对象
元组关系演算语言
域关系演算语言
具有关系代数和关系演算双重特点的语言
SQL,结构化查询语言
高度非过程化
三、 关系的完整性
实体完整性
实体完整性规则
实体完整性约束
若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。
所谓空值是“不知道”或“不存在”或“无意义”的值
规则说明
1. 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集
2. 现实世界中的实体是可区分的,即他们具有某种唯一标识性
3. 相应地,关系模型中以主码作为唯一标识
4. 主码中的属性不能取空值,如果取了空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第二条是相矛盾的,因此这个规则被称为实体完整性
参照完整性
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持
参照完整性规则
定义
若F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。关系S和R不一定是不同的关系
参照完整性就是定义外码与主码之间的引用规则
现实世界中的实体往往存在某种联系,在关系模型中实体及实体间的关系用关系来描述,这样就存在着关系与关系间的引用
参照完整性就是定义外码与主码之间的引用规则
显然,目标关系S的主码Ks和参照关系R的外码F必须定义在同一个(一组)域上
参照完整性约束
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R与S不一定是不同关系),则对于R中每个元组在F上必须
或者取空值(F的每个属性值均为空值)
或者等于S中某个元组的主码值
在参照完整性约束中,R和S可以使同一个关系
空值,表示该门课程不存在先修课
非空值,这时该值必须是本关系中某个元组的课程号
用户定义的完整性
就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求
四、 关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
关系代数的运算对象是关系,运算结果也是关系。关系代数用到的运算符包括两类:集合运算符和专门的关系运算符
按运算符不同分为
传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡尔积四种运算
将关系看作元组的集合,其运算是从关系的“水平”方向,即行的角度来进行
专门的关系运算
包括投影、选择、连接、除运算等
投影
查询学生的学号和主修专业,即求关系Student在“学号”和“主修专业”两个属性上的投影。
∏ sno, Smajor( Student)
不仅涉及行,而且设计列
比较运算符和逻辑运算符用于辅助专门的关系运算符进行操作
五、 关系演算
关系演算是以数理逻辑中的谓词演算为基础的。 按谓词变元的不同,分为元组关系演算和域关系演算
元组关系演算语言ALPHA
基本格式
操作语句 工作空间名(表达式):操作条件
检索操作
1. 简单检索(即不带条件的检索)
2. 限定的检索(即带条件的减速)
3. 带排序的检索
4. 指定返回元组的条数的减速
5. 用元组变量的检索
元组变量的用途
1. 简化关系名
2. 操作条件中使用量词时必须用元组变量
6. 用存在量词的检索
7. 带有多个关系的表达式的检索
8. 用全称量词的检索
9. 用两种量词的检索
10. 用蕴涵的检索
11. 聚集函数
更新操作
修改操作
插入操作
删除
元组关系演算
以元组变量作为谓词变元的基本对象
域关系演算语言QBE
检索操作
检查查询
条件查询
聚集函数
对查询结果排序
更新操作
修改操作
插入操作
删除操作
六、 小结
第三章 关系数据库标准语言SQL
一、 SQL概述
SQL的产生与发展
SQL特点
1. 功能综合且风格统一
数据库系统的主要功能是通过数据库支持的数据语言来实现的
层次模型和网状模型的数据语言一般分为模式数据定语言(DDL)、外模式数据定义语言、数据存储描述语言、数据操纵语言等。它们分别用于定义模式、外模式、内模式和进行数据的存取与处置。当用户数据投入运行后,如果需要修改模式,必须停止现有数据库的运行,转储数据库、修改模式并编译后重装数据库,十分麻烦
SQL集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括以下系列操作要求
旧版
定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库
对数据库中的数据进行查询和更新
数据库重构和维护
数据库安全性、完整性控制,以及事务空值
嵌入式SQL和动态SQL定义
新版
创建和删除数据库模式
创建基本表,创建视图
使用数据库,如查询、增、删、改数据、事务处理等
数据库控制,如安全性控制、完整性控制和并发控制等
数据库维护和重构,如修改和删除基本表、数据库备份与恢复等
这就为数据库系统提供良好的环境。例如,用户在数据库投入运行后,还可以根据需要随时或逐步创建模式,并不影响数据库整体的运行,从而使系统具有良好的可扩展性
另外,在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一性,查找、插入、删除、更新等每一种操作都只需要一种操作符,从而克服了层次模式和王张模式由于信息表示方式的多样性带来的操作符造型
2. 数据操纵过程高度非过程化
层次模型和网状模型的数据操纵语言是面向过程的语言,用过程化语言完成某项请求必须指定存取路径。
而用SQL进行数据操纵时只要提出“做什么”,无须指明“怎么做”,因此不需要了解存取路径,而存取路径的选择以及SQL的操作过程由系统自动完成。
这不但大大减轻了用户负担,而且当数据存储结构变化时,数据操纵语句一般不用改变,提高了数据独立性
3. 面向集合的操作方式
层次模型和网状模型采用的面向记录的操作方式,操作对象是一条记录。
而SQL采用集合操作方式,不仅操作对象、查询结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的结合
4. 以统一的语法结构提供多种使用方式
SQL既是独立的语言,又是嵌入式语言。作为独立的语言,它能够独立用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;
作为嵌入式语言,SQL语句能够嵌入高级语言(如C、C++、Java、Ptyhon等)程序,供程序员设计程序时使用。
在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供多种不同使用方式的做法,提高了易用性与方便性
5. 语言简洁,易学易用
SQL的功能极强,但由于其设计巧妙,语言十分简洁,即可使用完成核心功能
9个动词
数据定义
CREATE、DROP、ALTER
数据查询
SELECT
数据操纵
INSERT、UPDATE、DELETE
数据控制
GRANT、REMOVE
SQL基本概念
SQL同样支持数据库系统的三级模式结构,
外模式是使用能够看见和使用的数据结构,对应视图和部分基本表
模式对应基本表
内模式对应存储文件
二、 学生-课程数据库
三、 数据定义
模式的定义与删除
定义模式
CREATE SCHMEA [<模式名>] AUTHORIZATION <用户名>
删除模式
DELETE SCHEMA <模式名><CASCADE | RESTRICT>
CASCADE | RESTRICT两者必选其一
CASCADE(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除
RESTRICT(限制),表示该模式中已经定义了数据库对象(如表、视图等),则拒绝该删除语句的执行;只有当该模式中没有任何数据库对象时才能执行DROP SCHEMA语句
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义改模式包含的数据库的对象
基本表的定义、删除与修改
定义基本表
一般格式
CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件]] [,<表级完整性约東条件>];
建表的同时,通常还可以定义与该表有关的完整性约束,这些完整性约束被存入系统的数据字典。当用户操作表中数据时,由关系数据库管理系统自动检查该操作是否违背这些完整性约束。如果完整性约束涉及该表的多个属性列,则必须定义在表级上,否则则可以定义在列级也可以在表级
数据类型
CHAR(n), CHARACTER(n)
长度为n 的定长字符串
VARCHAR(n), CHARACTERVARYING(n)
最大长度为 n的变长字符串
CLOB
字符串大对象
BLOB 二进制大对象
INT, INTEGER )
长整数 (4 字节
SMALLINT
短整数 (2 字节)
BIGINT
大整数 (8 字节)
NUMERIC(p ,d)
定点数,由 p位数字(不包括符号、小数点)组成,小数点后面有d 位数字
DATE
日期
TIME
时间
FLOAT(n)
可选精度的浮点数,精度至少为n位数字
TIMESTAMP
时间戳类型
INTERVAL
时间间隔类型
模式与表
每一个基本表都属于一个模式,一个模式包含多个基本表
当定义基本表时,一般可以有三种方法定义它所属的模式
在表名中明显地给出模式名
在创建模式语句中同时创建表
设置所属的模式,
修改基本表
ALTER TABLE<表名> [ADD[COLUMN]<新列名><数据类型>[完整性约束]] [ADD<表级完整性约束>] [DROP [COLUMN]<列名>[CASCADE] RESTRICT]] [DROP CONSTRAINT<完整性约束名>[RESTRICTICASCADE][ALTER COLUMN<列名><数据类型>];
其中<表名>是要修改的基本表,ADD 子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。
DROP COLUMN子句用于删除表中的列,如果指定了CASCADE短语,则自动删除引用了该列的其他对象,比如视图;
如果指定了RESTRICT短语,则如果该列被其他对象引用,RDBMS将拒绝删除该列。
DROP CONSTRAINT子句用于删除指定的完整性约束条件
ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型。
删除基本表
DROP TABLE<表名>[RESTRICT ICASCADE];
索引的建立与删除
数据库索引有多种类型,常见索引包括顺序文件上的索引、B+树索引、散列索引、位图索引等
分类
顺序文件上的索引是针对按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成
B+树索引是将索引属性组织成B+树形式,B+树的叶节点为属性值和相应的元组指针。B+树索引具有动态平衡的有点
散列索引是建立若干个桶,将索引属性按照其散列函数值映射到相应的桶中,桶中存放索引属性值和相应的元组指针。散列索引具有查找速度高的特点
位图索引是用位向量记录索引属性中可能出现的值,每个位向量对应一个可能值
索引虽然能够加快数据库查询,但需要占用一定的存储空间,当基本表更新时,索引要进行相应的维护,这些都会增加数据库的负担,因此要根据实际应用的需要有选择地创建索引
索引是关系数据库管理系统的内部实现技术,属于内模式的范畴
建立索引
CREATE [UNIQUE][CLUSTER]INDEX <索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);
其中,<表名>是要建索引的基本表的名字。索引可以建立在该表的一列或多列上,各列名之间用逗号分隔。每个<列名>后面还可以用<次序>指定索引值的排列次序,可选ASC(升序)或DESC(降序),默认值为ASC。
UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER 表示要建立的索引是聚簇索引。有关聚索引的概念在第7章7.5.2小节关系模式存取方法选择中介绍。
修改索引
ALTER INDEX<旧索引名>RENAME TO<新索引名>;
删除索引
DROP INDEX<索引名>;
数据字典
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据字典表中的对应信息
关系数据库管理系统在执行SQL的数据定义语句时,实际上就是把这些定义信息存入系统的数据字典以更新其中的相应信息。在进行查询处理和查询优化时,关系数据库管理系统要根据数字字典中的信息执行处理算法和优化算法,因此数据字典是关系数据库管理系统运行的重要依据
在进行查询优化和查询处理时,数据字典中的信息是其重要依据
四、 数据查询
单表查询
仅涉及一个表的查询
1. 选择表中的若干列
选择表中的全部或部分列即关系代数的投影运算
1||| 查询指定列
通过SELECT的<目标表达式>子句实现
2||| 查询全部列
将<目标表达式>指定为*
3||| 查询经过计算的值
SELECT子句的<目标表达式>不仅可以是表中的属性列,也可以是表达式
可以是算数表达式,字符串常量、函数等
2. 查询表中的若干元组
(1) 消除取值重复的行
两个本来并不完全相同的元组在投影到指定的某些列上后,可能会变成相同的行
可以用DISTINCT消除它们
(2) 查询满足条件的元组
通过WHERE子句实现
1||| 比较大小
2||| 确定范围
BETWEEN后是范围的下限(即低值),AND后是反问的上限(即高值)
3||| 确定集合
谓词IN可以用来查找属性值属于指定集合的元组
与谓词IN对应的是NOT IN
4||| 字符匹配
谓词LIKE可以用来进行字符串的匹配
语法格式如
[NOT] LIKE '<匹配串>' [ESCAPE'换码字符']
%代表任意长度(可以是0)的字符串 _(下划线)代表任意单个字符
5||| 涉及空值的查询
6||| 多重条件查询
逻辑运算AND和OR可用来连接多个查询条件。AND的优先级高于OR,但可以用括号改编优先级
3. ORDER BY子句
用该子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序
对于空值,排序时显示的次序由具体系统实现来决定
各个系统的实现可以不同,只有保持一致就行
4. 聚集函数
当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值。
COUNT(*)是对元组进行计数,某个元组的一个或部分列取空值不影响COUNT的统计结果
WHERE子句是不能用户聚集函数作为条件表达式的。聚集函数只能用于SELECT子句和GROUP BY中的HAVING子句
类型
COUNT(*)
统计元组个数
COUNT( [DISTINCTALL]<列名>)
统计一列中值的个数
SUM( [DISTINCTIALL]<列名>)
统计一列值的总和(此列必须是数值型)
AVG( [DISTINCT|ALL]<列名>)
计算一列值的平均值(此列必须是数值型)
MAX( [DISTINCT|ALL]<列名>)
求一列值中的最大值
MIN( [DISTINCT|ALL]<列名>)
求一列值中的最小值
例句
查询学生总体人数
SELCET COUNT(*) FROM Student
查询选修了课程的学生人数
SELCECT COUNT(DISTINCT Sno) FROM SC
计算选修8100号课程的学生平均成绩
SELECT AVG(Grade) FROMSC WHERE Cno='8100'
查询选修8100号课程的学生最高分数
SELECT MAX(Grade) FROM SC WHRER Cno='8100'
查询学号为20180003的学生学生选修课程的总学分数
5. GROUP BY子句
将查询结果按某一列或多列的值分组,️值相等的为一组
分组后聚集函数将作用于每一组,即每一组都有一个函数值
6. LIMIT子句
用于限制SELECT语句查询结果(元组)的数量
LIMIT <行数1>[OFFSET<行数2>]
例句
查询选修数据库系统概论课程且成绩排名在前10的学生的学号
SELECT Sno FROM SC.Course WHERE Couser .Cname='数据库系统概论' AND SC.Cno=Course.Cno ORDER BY GradeDESC LIMIT 10;
查询平均成绩排名在第3-7名的学生的学号和平均成绩
SELECT 学号, 平均成绩 FROM ( SELECT 学号, AVG(成绩) AS 平均成绩, ROW_NUMBER() OVER (ORDER BY AVG(成绩) DESC) AS 排名 FROM 成绩表 GROUP BY 学号 ) AS 子查询 WHERE 排名 BETWEEN 3 AND 7;
连接查询
若一个查询同时涉及两个以上的表,则称之为连接查询
1. 等值与非等值连接查询
连接查询的WHERE子句用来连接两个表的条件称为连接条件或连接谓词
当连接运算符为=时,称为等值连接。使用其他运算符称为非等值连接
连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的,但各名字不必相同
若在等值连接中把目标列中重复的属性列去则为自然连接
一条SQL语句可以同时完成选择和连接,这时WHERE子句是由连接谓词和选择谓词组成的复合条件
2. 自然连接查询
把表中结果列中重复的属性列出掉的等值连接查询则为自然连接查询
3. 复合条件连接查询
试用一条SQL语句可以同时完成选择和连接查询,这时WHERE子句是由连接谓词和选择谓词组成的复合条件。
WHERE子句中有多个条件的连接查询,称为复合条件连接查询
例句
查询选修81002号课程且成绩在90分以上的所有学生的学号和姓名
SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno='81002' AND SC.Grade>90;
4. 自身连接
一个表与其自身进行连接
例句
查询每一门课的间接先修课
SELECT FIREST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST Cpno=SECOND.Cno and SECOND.Cpno IS NOT NULL
5. 外连接查询
左外连接
列出左边关系中所以的元组
LEFT JOIN 左连接 左表是主表,左表全都有 “保左全”
右外连接
列出右边关系中所有的元组
RIGHT JOIN 右连接 右表是主表,右表全都有 “保右全”
6. 多表连接
两个以上的表进行连接
(2) 查询选修操作系统的学生姓名、课程号和成绩。 -
SELECT s.sname, sc.cno, sc.grade FROM stu s JOIN SC ON s.sno = sc.sno JOIN course c JOIN sc.cno=c.cno WHEREc.cname ="操作系统';
SELECT S.sname, SC.cno sc.grade: 选择查询结果中的列,包括学生姓名(来自 stu 表的sname字段)、课程号(来自sC表的cno字段)和成绩(来自 sc表的grade字段)。 F ROM stu s JOIN SC ON S.sno=sc.sno:使用内连接(JOIN)将学生表(stu,别名为s)与选修关系表(SC)通过学号(sno)进行匹配,确保只返回有选修记录的学生。 JOIN course c ON sc.cno =c.cno:进一步内连接课程表(cOurse,别名为c)与选修关系表(SC)通过课程号(cno) 进行匹配,以获取课程信息。 WHEREc.cname ="操作系统':添加条件筛选,只选择课程名(cname)为“操作系统” 的记录。
查询选修“ computer”课程的“女”学生的姓名及成绩。
SELECT s.sname, sc.grade FROM stu s JOIN sC ONs.sno = Sc.sno JOIN course cON sc.cno= c.cno WHERE c.cname='computer' AND S.sex- 女:
嵌套查询
在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
上层的查询块称为外层查询或父查询下层的查询块称为内层查询或子查询
子查询的SELECT语句不能中不能使用ORDER BY子句,ORDER BY子句只能对最终查询结果排序
1. 嵌套查询使用户可以用多个简单查询构成复杂的查询,从而增强SQL的查询能力。以层层嵌套的方式来构造程序正是SQL“结构化”的含义所在
2. 带有IN谓词的子查询
子查询的查询条件不依赖于父查询,称为不相关查询
如果子查询的查询条件依赖于父查询,这类子查询称为相关子查询
数据库性能调优技术
有些嵌套查询可以用连接查询替代,有些不能替代
例句
查询“刘晨”的主修专业名
SELECT Smajor FROM Student WHRER Smajor IN (SELECT Smajor FROM Student WHERE Sname='刘晨');
SELECT S1.Sno,S1.Sname,S1.Smajor FROM Student S1,Student S2 WHERE S1.Smjor=S2.Samjor AND S2.Sname='刘晨';
查询课程名为信息系统的学生的学号和姓名
SELECT Student.Sno,Sname FROM Student,SC,Course WHERE Studnet.Sno=SC.Sno AND SC.Cno=Course.Cno AND COurse.Cname='信息系统概论';
3. 带有比较运算符的子查询
求解相关子查询不能像求解不相关子查询那样一次将子查询求解出来,然后求解父查询。内层查询由于与外层查询有关,因此必须反复求值
例句
找出每个学生超过他自己选修课平均成绩的课程号
SELECT Sno,Cno FROM SC x WHERE Grade>=(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno);
4. 带有ANY(SOME)或ALL谓词的子查询
子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。而使用ANY或ALL谓词时必须同时使用比较运算符
例句
查询非计算机科学与技术专业中比计算机科学与技术专业 任意一个年龄小的学生的姓名、出生日期和主修专业
SELECT Sname,Sbirthday,Smajor FROM Student WHERE Sbirthday>ANY(SELECT Sbirthday FROM Student WHERE Smajor='计算机科学与技术') AND Smajor<>'计算机科学与技术'
SELECT Sname,Sbirthday,Smajor FROM Student WHERE Sbirthday> (SELECT MIN(Sbirthday) FROM Student WHERE Smajor='计算机科学与技术') AND Smajor<>'计算机科学与技术'
5. 带有EXISIS谓词的子查询
带有EXISIS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换,但所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换
SQL中没有全称量词,但是可以把带有全称量词的谓词转换为等价的带有存在量词的谓词
例句
查询所有选修了8100号课程的学生姓名
SELECT Sname FROM Student WHERE EXISTIS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno='8100');
查询选修了全部课程的学生姓名
SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno =Course.Cno));
查询至少选修了学生2108002选修的全部课程的学生的学号
SELECT Sno FROM Student WHERE NOT EXISTS (SELECT * FORM SC SCX WHERE SCX.Sno='2108002' AND NOT EXISTS (SELECT * FROM SC SCY WHERE SCY.Sno=Student.Sno AND SCY.Cno=SCX.Sno))
集合查询
集合操作主要包括并操作UNION、交操作INTERSECT和差操作EXCEPT
参加集合操作的各查询结果的列数必须相同;对应箱的数据类型也必须相同
例句
查询计算机科学与技术专业的学生及年龄不大于19岁(包括等于19岁)的学生
SELECT * FROM Student WHERE Smajor='计算机科学与技术' UNION SELCET * FROM Student WHERE (extract (year from current_date)- extract(year form Sbirthdate))<=19
查询2020年第2个学期选修了课程8100或课程8200的学生
SELECT Sno FROM SC WHERE Semeter='2022' AND Cno='81001' UNION SELECT Sno FROM SC WHERE Semester='2022' AND Cno='81002'
查询计算机科学与技术专业的学生与年龄不大于19岁的学生的交集
SELECT * FROM Student WHERE Smajor='计算机科学与技术' INTERSECT SELECT * FROM WHERE (extractt (year from current_date)-extract(year from Sbirthdate))<=19;
基于派生表的查询
子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表称为主查询的查询对象
例句
找出每个学生超过他自己选修课程平均成绩的课程号
子主题
SELECT语句的一般格式
目标列表达式的可选格式
查询所有比“王华”年龄大的学生姓名、年龄和性别。
聚集函数的一般格式
WHERE子句的条件表达式的可选格式
五、 数据更新
插入数据
插入元组
INSERT INTO <表名> [(<属性列 I>[,<属性列2>]…)] VALUES (<常量 1>[,<常量 2>]…);
其功能是将新元组插入指定表中。其中新元组的属性列1的值为常量1,属性列2的值为常量2,…。INTO 子句中没有出现的属性列,新元组在这些列上将取空值。但必须注意的是,在表定义时说明了NOTNULL的属性列不能取空值,否则会出错。 如果INTO子句中没有指明任何属性列名,则新插入的元组必须在每个属性列上均有值。
例子
将一个新学生元组(学号:2018009,姓名:陈东,性别:男。出生日期:2000-5-22,主修专业:信息管理与信息系统)插入student表
INSERT INTO Student(Sno,Sname,Ssex.Smajor,Sbirthdate) VALUES('2018009','陈东','男','信息管理与信息系统','200-5-22')
插入子查询结果
INSERT INTO <表名>[(<属性列 1>[,<属性列 2>…] 子查询;
例句
对每一个专业,求学生的平均年龄,并把结果存入数据库
子主题
修改数据
1. 修改某一个元组的值
UPDATE<表名> SET<列名>=<表达式>[,<列名>=<表达式>]… [WHERE<条件>];
2. 修改多个元组的值
例句
将2020年第1学期选修81002课程所有学生的成绩减少5分
UPDATE SC SET Grade=Grade-5 WHERE Semester='20201' AND Cno='81002'
3. 带子查询的修改语句
删除数据
DELETE删除的是表中的数据,而不是表的定义
对基本表中数据的增、删、改操作有可能会破坏参照完整性
1. 删除某一个元组的值
DELETE FROM<表名> [WHERE<条件>];
DELETE 语句的功能是从指定表中删除满足 WHERE子句条件的所有元组。如果省略WHERE子句则表示删除表中全部元组,但表的定义仍在字典中。也就是说,DELETE语句删除的是表中的数据,而不是关于表的定义。
即表达式里没有属性名
2. 删除多个元组的值
3. 带子查询的删除语句
子查询同样也可以嵌套在 DELETE 语句中,用以构造执行删除操作的条件。
对某个基本表中数据的增、删、改操作有可能会破坏参照完整性
六、 空值的处理
空值的产生
SQL允许出现空值,一般有以下情况
1. 该属性应该有一个值,但目前还不知道它的值
2. 该属性不应该有值
3. 由于某种原因不便于填写
空值的判断
用IS NULL或IS NOT NULL来表示
空值的约束条件
属性定义(或者域定义)中有NOT NULL约束条件的不能取空值,码属性不能取空值
空值的算术运算、比较运算和逻辑运算
有了UNKNOWN后,传统的逻辑运算中二值(TRUE,FALSE)逻辑就扩展为了三值逻辑
例句
找出选修8100号课程且成绩不及格的学生以及缺考的学生
SLELECT Sno FROM SC WHERE Grade<60 AND Cno='8100' UNION SELECT Sno FROM SC WHERE Grade IS NULL AND Cno='8100';
SELECT Sno FROMSC WHERE Cno='8100' AND (Grade < 60 OR Grade IS NULL);
七、 视图
定义视图
建立视图
视图不仅可以建立在一个或多个基本表上,也可以建立在一个或多个已定义好的视图上,或建立在基本表与视图上
CREATE VIEW <视图名>[(<列名>[,<列名>]…)] AS<子查询> [WITH CHECK OPTION]:
分类
带表达式的视图
即带虚拟列的视图
分组视图
带有聚集函数和GRUOP BY子句的查询
带有聚集函数的GRUP BY子句的查询来定义视图,这种视图称为分组视图
例子
子主题
删除视图
DROP VIEW<视图名>[CASCADE];
视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其他视图,则使用CASCADE级联删除语句把该视图和由它导出的所有视图一起删除。基本表删除后,由该基本表导出的所有视图均无法使用了,但是视图的定义没有从字典中清除。删除这些视图定义需要显式地使用 DROP VIEW 语句。
查询视图
关系数据库管理系统执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为视图消解
像对基本表的操作一样
更新视图
由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换成对基本表的更新
视图的作用
1. 旧版书
视图能够简化用户的操作
视图使用户能以多种角度看待同一数据
视图对重构数据库提供了一定程度的逻辑独立性
视图能够对机密数据提供安全保护
适当利用视图可以更清晰地表达查询
2. 新版书说法
(1) 视图能够对机密数据提供安全保护
有了视图机制,就可以在设计数据库应用系统时对不同用户定义不同的视图,使机密数据不出现在不用看到这些数据的用户试图上。
这样视图机制就自动提供了对机密数据的安全保护功能
(2) 视图对重构数据库提供了一定程度的逻辑独立性
数据的物理独立性是指用户的应用程序不依赖与数据库的物理结构。
数据的逻辑独立性是指当数据库重构时,如增加新的关系或对原有关系增加新的字段时,用户的应用程序不会受影响。
层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性则不能完全地支持
在关系数据库中,数据库的重构是不可避免的。重构数据库最常见的是将一个基本表“垂直”地分成多个基本表
这样尽管数据库的逻辑结构改变了,变为SX和SY两个基本表,但不必修改应用程序。因为我们可以建立视图Student,它和用户原来创建的STudent表一模一眼
视图使用户的外模式保持不变,同时无需修改用户的应用程序就能和原来一样进行数据操作
(3) 视图能够简化用户的操作
视图机制使用户可以将注意力集中在所关系的数据上。通过定义视图使数据库看起来结构更加简单、清晰,并且可以简化用户的数据查询操作
适当利用视图可以更清晰地表达查询
(4) 视图使用户能以多种角度看待同一数据
用户可以在基本表上定义自己感兴趣的视图,直接对这些视图进行查询。当许多不同类型的用户共享数据库时,这种灵活性是非常重要的
八、 小结
九、 练习
试论述SQL的特点
说明在DROP TABLE时,RESTRICT和CASCADE的区别
RESTRICT表示表的删除是有限制条件的。要删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象则表不能被删除。
CASCADE表示表的删除没有限制条件,在删除基本表的同时,相关的依赖对象(如视图)都将被删除。
什么是基本表?什么是视图?两者之间有什么关系?
基本表是本身独立存在的表,在SOL中一个关系就对应一个基本表。
视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中
视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。
哪类视图是可更新的,哪类视图是不可更新的,请举一例子
基本表的行列子集视图一般是可更新的。
若视图的属性来自聚集函数、表达式,则该视图肯定是不可以更新的。
第四章 数据库安全性
一、 数据库安全性概述
数据库安全性是指保护数据库,以防不合法使用所造成的数据泄露、篡改或破坏
数据库的不安全因素表现
1. 非授权用户对数据库的恶意存取和破坏
2. 数据库中重要或敏感的数据被泄露
3. 安全环境的脆弱性
安全标准简介
可信计算机系统评价标准TCSEC
TCSEC又称桔皮书
分为四组七个等级
D级 最小保护
该级是最低级别。保留D级的目的是将一切不符合更高标准的系统都归于D组
C1级 自主安全保护
该组只提供非常初级的自主安全保护,能够实现对用户和数据的分离,进行自主存取空值(DAC),包括或限制用户权限的传播
C2级 受控的存取保护
该级是安全产品的最低档,提供受控的存取保护,即将C1级的DAC进一步细化,以个人身份注册负责,并实施审计和资源隔离
C2级的数据库管理系统支持自主存取控制
B1级 标记安全保护
标记安全保护。对系统的数据加以标记,并对标记的主体和课题实施强制存取控制(MAC)以及审计等安全机制。
B1级别的产品才被认为是真正意义上的安全产品,满足此级别的产品前一般多冠以“安全”或“可信的”字样,作为区别普通产品的安全产品出售
B1级的数据库管理系统支持强制存取控制
B2级 结构化保护
结构化保护。
建立形式化的安全策略模型,并对系统内的所有主体和客体实施DAC和MAC
B3级 安全域
该级的可信计算基(TCB)必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程
A1级验证设计
即在提供B3级别保护的同时,给出系统的形式化设计说明和验证,以确信各安全保护真正实现
IT安全通用准则CC
TCSEC/TDI,即紫皮书,将TCSEC扩展到数据库管理系统
定义了数据库管理系统的设计与实现中需满足和用以进行安全性级别评估的标准, 从四个方面来描述安全性级划分的指标
每个方面又细分为若干项
安全策略
责任
保证
文档
二、 数据库安全性控制
数据库安全性控制
1. 事前控制
通过身份鉴别和简单入侵检测共同实现事前的访问保护
2. 事中控制
数据库管理系统在SQL层提供多层存取控制策略,包括自助存取控制、强制存取控制推理控制等。用户只能按照被授予的权限和安全规则存取合法数据
3. 事后控制
为监控恶意访问,可根据具体安全需求配置审计规则,对用户访问行为和系统关系操作进行审计,及时发现可疑攻击者,把有关信息返回入侵监测系统,对异常用户行为进行处理和阻拦
4. 存储保护
在数据层,对敏感数据、重要的存储过程定义加密存储。数据库管理系统不仅存放用户数据,还存储与安全有关的审计文档,并进行加密存储
5. 传输保护
用户身份信息、、SQL语句和数据等频繁地在客户端与服务器端进行传输,若采用明文方式传输很容易被截获或篡改,存在安全隐患。为了保证这些信息能够安全地进行交换和传输,数据库管理系统提供了数据加密功能
用户身份鉴别
是数据库管理系统提供的最外层安全保护措施
1. 静态口令鉴别
2. 动态口令鉴别
3. 生物特征鉴别
4. 智能卡鉴别
5. 入侵检测
检查前,管理员按实际需求定义检查规则。在检查过程中,依据预先设置的检测规则实时进行入侵检测。若发现入侵情况,实时进行处理
处理方式包括通过邮件报警和断开会话连接、锁定用户进行处罚等
存取控制
1. 数据库安全空值最重要的一点就是,确保只授权给有资格用户访问数据库的权限,同时令所有未被授权的用户无法接近数据。这主要通过数据库系统的存取控制机制实现。
2. 存取控制机制主要包括
定义用户权限,,并将用户权限登记到数据字典中。
用户对某一数据对象的操作权利称为权限。
某个用户应该具有各种权限是管理和决策方面的问题,而不是技术问题。数据库管理系统的功能是保这些决定的执行。
为此,数据库管理系统必须提供适当的语言来定义用户权限,这些定义经过编译后存储在数据字典中,被称为安全规则或授权规则
合法权限检查
每当用户发出存取数据库的操作请求后(请求一般应包括操作类型、操作对象和操作用户等信息),数据库管理系统查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超过了定义的权限,系统将拒绝此操作
3. 定义用户权限和合法性检查一起组成了数据库管理系统的存取控制子系统
4. 两类方法的定义
自主存取控制(C2级支持)
在该方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将拥有的存取权限转授给其他用户。
因此,自主存取空值非常灵活
强制存取控制(B1级支持)
在该方法中,每一个数据库对象都被标以一定的密级,每一个用户也被授予某一级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。
强制存取空值因此相对比较严格
自主存取控制法
用户权限由两个要素组成:数据对象和操作类型
定义一个用户的存取权限就是要定义这个用户可以在哪些数据对象上进行哪些类型的操作。在数据库系统中,定义存取权限称为授权
在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括模式、基本表、视图和索引的创建等)
授权:授予与收回
1. GRANT
GRANT<权限>[,<权限>… ON<对象类型><对象名>[,<对象类型><对象名>] TO<用户>[,<用户>]… [WITH GRANT OPTION];
如果指定了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。如果没有指定WITHGRANTOPTION子句,则获得某种权限的用户只能使用该权限,不能传播该权限。
2. REVOKE
3. 创建数据库模式的权限
强制存取控制方法
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类
主体是系统中的活动实体,既包括数据库管理系统所管理的实际用户,也包括用户的各进程。
客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。
对于主体和客体,数据库管理系统为他们的每个实例(值)指派一饿敏感度标记
敏感度标记被分为若干级别(密级)
绝密级
机密级
秘密级
公开
……
主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级
强子存取控制就是通过对比主体和客体的敏感度标记,最终确定主体是否能够存取客体
强制存取空值是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体
数据库角色
1. 是被命名的一组与数据库操作相关的权限,角色是权限的集合
2. 角色的创建
3. 给角色授权
4. 将一个角色授权其他角色或用户
5. 角色权限的收回
数据库角色
强制存取控制方法
三、 视图机制
四、 审计
审计功能是把用户对数据的所有操作作自动记录下来放入审计日志中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等
审计通常是很费时间和空间的,所以数据库管理系统往往都将审计设置为可选特征,允许数据库管理员根据具体应用对安全性要求零火地打开或关闭审计功能
审计事件
类别
服务器事件
审计数据库服务器发生的事件
包括
数据库服务器的启动、停止
数据库服务器配置文件的重新加载等
系统权限
审计对系统拥有的结构或模式对象进行的操作,要求该操作的权限是通过系统权限获得的
语句设置
审计SQL语句,如DDL、DML、及DCL语言
模式对象数据
审计特定模式对象上进行的SELECT或DML操作。
模式对象包括
表、视图、存取过程、函数等,但不包括依附于表的索引、约束、触发器、分区表等
审计功能
基本功能
提供多种审计查阅方式:基本地、可选地、有限的,等等
提供多套审计规则
审计规则一般在数据库初始化时设定,以方便审计员管理
提供审计分析和报表功能
审计日志管理功能
包括为防止审计员误删设计记录,审计日志必须先转储后删除;对转储的审计记录文件提供完整性和保密性保护;只允许审计员查阅和转储审计记录,不允许任何用户新增和修改审计记录德国
系统提供查询审计设置及审计记录信息的专门视图。对于系统权限级别、语句级别及模式对象级别的审计记录也可通过相关的系统表直接查看
AUDICT语句和NOAUDICT语句
AUDICT语句用来设置审计功能
NOAUDICT语句用来取消审计功能
数据库安全设计系统提供了一种事后检查的安全机制
五、 数据加密
加密的基本思想是根据一定的算法将原始数据——明文变换成不可直接识别的格式——密文,从而使得解密算法的人无法获知数据的内容
包括
存储加密
方式
透明
透明存储加密是内核集加密保护方式,对用户完全隐蔽
是数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密。
用于数据加密对用户隐蔽,即用户不知道数据是被加密的密文,数据库的应用程序不需要做任何修改,只需在创建表语句中说明加密的字段即可。当对数据进行增加、删除、修改和查询操作时,数据库管理系统将自动对数据进行加密、解密工作。基于数据库内核的数据存储加密、解密方法性能较好,安全性较高
非透明
非透明存储加密是通过多个加密函数实现的
传输加密
常用的传输加密方式
端到端
链路加密
基于安全套接层协议
实现思路
1. 确认通信双方端点的可靠性
2. 协商加密算法和密钥
3. 可信数据传输
六、 其他安全性保护
推理控制
处理的事强制存取控制未解决的问题
例如
利用属性之间的函数依赖关系,用户能从低安全等级信息推导出其无权访问的高安全等级信息,进而导致信息泄露
数据库推理控制机制用来避免用户利用其能够访问数据推至更高密级的数据,即用户利用其被允许的多次查询结果,结合相关领域背景知识以及数据之间的约束,推导出其不能访问的数据。
在推理控制方面,常用的方法如基于函数依赖的推理控制和基于敏感关联的推理控制等
隐蔽通道
处理的内容也是强制存取控制未解决的问题。
数据隐私
是指控制不愿被他人知道或他人不便知道的个人数据的能力
“三权分立”的安全管理机制
七、 小结
八、 练习
试述实现数据库安全性控制的常用方法和技术。
第五章 数据库完整性
数据库的完整性是指数据的正确性和相容性
一、 概况
数据的完整性是指数据的正确性和相容性
数据的正确性
是指数据库数据是否符合现实世界语义、反映当前实际状况的
数据的相容性
是指数据库同一对象在不同关系表中的数据是否符合逻辑
是指数据库统一对象在不同关系表中的数据是相同的,一致的
为维护数据库的完整性,数据库管理系统要实现以下功能
1. 提供定义完整性约束条件的机制
完整性约束也称为完整性规则,是数据库中的数据必须满足的语义约束。
它表达了给定的数据库模型中数据及其来联系所居的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容
SQL标准使用了一系列概念来描述完整性约束,包括关系模型的实体完整性、参照完整性和用户自定义的完整性。这些完整性约束一般️SQL的数据定义语句来实现。他们作为数据库模式的一部分存入数据字典
2. 提供检查完整性约束的方法
关系数据库管理系统中检查数据是否满足完整性约束的机制称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查,检查这些操作执行后数据库中的数据是否违背了完整性约束
3. 提供完整性的违约处理方法
关系数据库管理系统若发现用户的操作违背了完整性约束,就采取一定的动作,如拒绝(NO ACTION)执行该操作或级联(CASCADE)执行其他操作,进行违约处理以保证数据的完整性。
二、 实体的完整性
定义实体完整性
实体完整性检查和违约处理
三、 参照完整性
定义参照完整性
参照完整性检查和违约处理
1. 拒绝执行
2. 级联操作
3. 设置为空值
四、 用户定义的完整性
属性上的约束条件
属性上约束条件的定义
1. 不允许取空值
2. 子主题
3. 列值唯一
4. yongCHECK短语支出列值应该满足的条件
属性约束条件的检查和违约处理
元组上的约束条件
五、 完整性约束命名语句
六、 域中的完整性限制
七、 断言
八、 触发器
触发器是用户定义在关系表上的一类由事件驱动的特殊过程
定义触发器
触发器又叫事件-条件-动作规则
当特定的系统事件(如对一个表的增、删、改操作,事务的结束等)发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作。规则中的动作体可以很复杂,可以涉及其他表和其他数据库对象,通常是一段 SOL存储过程。
一般格式
CREATE TRIGGER<触发器名> {BEFOREI | AFTER}<触发事件>ON<表名> {REFERENCING NEWOLD | ROW AS<变量> FOR EACH {ROWISTATEMENT} [WHEN<触发条件>]<触发动作体>
激活触发器
删除触发器
DROP TRIGGER<触发器名>ON<表名>;
第六章 关系数据理论
一、 问题的提出
数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值的相等与否体现出来的数据间相互关系。它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现
函数依赖和多值依赖
二、 规范化
函数依赖
函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖
码
码是关系模式中的一个重要概念
范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。
满足最低要求的叫第一方式,简称NF
一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程叫规范化
如果关系模式R的每一个分量是一个不可分的数据项,R是满足最低要求的关系模式,则REINF
2NF
若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则RE2NF
3NF
每一个非主属性既不传递依赖码,也不部分依赖于码
BCNF
由BCNF的定义可以得到结论,一个满足BCNF的关系模式有: 1所有非主属性对每一个码都是完全函数依赖。 所有主属性对每一个不包含它的码也是完全函数依赖。 没有任何属性完全函数依赖于非码的任何一组属性。 由于R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF。严 的证明留给读者完成。但是若RE3NF,R未必属于BCNF。
多值依赖
4NF
规范化小结
规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”,即“一事一地”的模式设计原则
所谓规范化实质上是概念的单一化
三、 数据依赖的公理系统
四、 模式的分解
模式分解的三个定义
分解的无损连接性和保持函数依赖性
模式分解的算法
五、 小结
第七章 数据库设计
一、 数据库设计概述
数据库设计的特点
旧版书
数据库建设的基本规律
“三分技术、七分管理、十二分基础数据”,是数据库设计的的特点之一
结构(数据)设计和行为(处理)设计相结合
新版书
重视基础数据
“三分技术、七分管理、十二分基础数据”
数据库设计和数据处理设计相结合
数据库设计应该和应用系统设计相结合。也就是说,整个设计过程中要把数据库模式设计和数据处理设计密切结合起来。这是数据库设计的第二个特点。
早期的数据库设计致力于数据模型和数据库建模方法的研究,着重结构设计而忽视了行为设计,这种方法也是不完善的。
我们强调在数据库设计中要把结构特性和行为特性结合起来。
数据库设计方法
数据库设计基本步骤
1. 需求分析阶段
进行数据库设计首先必须了解与分析用户的应用需求(包括数据与处理).需求分析是整个设计过程的基础,也是最困难和最耗费时间的一步。作为“地基”的需求分析是否做得充分和准确,决定了在其上构建数据库“大厦”的速度和质量。需求分析做得不好,可能会导致整个数据设计返工重做
2. 概念结构设计阶段
概念结构设计是整个数据库设计的基础,它通过对用户需求进行综合、归纳和抽象,形成一个独立于数据库管理系统的概念模型
3. 逻辑结构设计阶段
逻辑结构设计是按某种转换规则将概念结构设计转换为某个数据库所支持的数据模型,并对其进行优化
4. 物理结构设计
是为逻辑模型选取一个最适合开发应用环境的物理结构,包括存储结构和存取方法
5. 数据库实施
在数据库实施阶段,设计人员应用数据库管理系统提供的数据库语言及高级语言,根据逻辑结构设计和物理结构设计的结果创建数据库,编写和调试应用程序,组织数据入库并进行试运行
6. 数据库运行和维护
数据库应用系统经过试运行后即可投入正式运行,。在数据库运行过程中必须不断地对其进行评估、调整和修改
数据库设计过程中的各级模式
二、 需求分析
需求分析的任务
通过详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在其基础上确定新系统的功能。新系统必须充分考虑到今后可能的扩充和改变,不能仅仅按当前应用需求来设计社局开
调查的重点是“数据”和“处理”
方法
常见调查方法
跟班作业
开调查法
请专人介绍
询问
问卷调查
查阅记录
调查用户需求的具体步骤
调查组织结构的总体情况
熟悉各部门的业务活动情况
协助用户明确对新系统的各种要求
确定新系统的边界
作用
明确地把需求分析作为数据库设计的第一阶段是十分重要的。这一阶段产生基础数据(用数招字典来表达)是下一步进行概念设计的基础。
最后,要强调两点:
需求分析阶段的一个重要而困难的任务是收集将来应用所涉及的数据,数据库设计员应充分考虑到可能的扩充和改变,使设计易于更改、系统易于扩充。
必须强调用户的参与,这是数据库应用系统设计的特点。数据库应用系统和广泛的用户有密切的联系,许多人要使用数据库,数据库的设计和建立又可能对更多人的工作环境
数据字典
数据字典是进行详细的数据收集和数据分析所获得的主要成果,它是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善的。它在数据库设计中占有很重要的地位
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程5部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
包括
1. 数据项
是不可再分的数据单位
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围, 取值含义,与其他数据项的逻辑关系,数据项之间的联系 其中,“取值范围”和“与其他数据项的逻辑关系”(如该数据项是其他几个数据项的和、 该数据项值等于另一数据项的值等)义了数据的完整性约束条件,是设计数据检验功能的依据。
可以用关系规范化理论为指导,用数据依赖的概念分析和表示数据项之间的联系。即按实际语义写出每个数据项之间的数据依赖,它们是数据库逻辑设计阶段优化数据模型的依据。
2. 数据结构
反映数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构组成
数据结构描述={数据结构名,含义说明,组成:1数据项或数据结构}
3. 数据流
是数据结构在系统内传输的路径
4. 数据存储
是数据结构停留或保存的地方,也是数据流的来源和去向之一
5. 处理过程
具体处理逻辑一般用判定表或判定树来描述。数据字典只需要描述处理过程的说明性信息即可
三、 概念结构设计
概念模型
概念模型特点
1. 能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真实模型
2. 易于理解,可以用它和不熟悉计算机的用户交流意见。用户的积极参与是数据库设计成功的关键
3. 易于更改,当应用环境和应用要求改变时容易对概念模型修改和扩充
4. 易于向关系、网状、层次等各种数据模型转换
概念模型是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定。描述概念模型的有利工具是E-R模型
E-R模型
实体之间的联系
1. 两个实体型之间的联系
一对一联系
如果对于实体型A中的每一个实体,实体型B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体型A与实体型B具有一对一联系,记为1:1。
一对多联系
如果对于实体型A中的每一个实体,实体型B中有n个实体(n≥0)与之联系;反之,对于实体型B中的每一个实体,实体型A中至多只有一个实体与之联系,则称实体型A与实体型B有一对多联系,记为1:n
多对多联系
如果对于实体型A中的每一个实体,实体型B中有n个实体(n≥0)与之联系;反之,对于实体型B中的每一个实体,实体型A中也有m个实体(m≥0)与之联系,则称实体型A与实体型B具有多对多联系,记为m:n。
2. 两个以上的实体型之间的联系
3. 单个实体型内的联系
E-R图
提供了实体型、属性和联系的方法
描述
1. 实体用矩形表示,矩形框内写明实体名
2. 属性用椭圆形表示,并用无向边将其与相应的实体型连接起来
3. 联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁注上联系的类型
一个实例
扩展的E-R模型
ISA联系
分类属性
不相交约束和可重叠约束
完备性约束
基数约束
Part-of联系
UML,统一建模语言
实体型
在UML中用类表示实体型。矩形框中实体名放在上部,下面列出属性名。
实体中的主码
在类图中的某一个或若干个属性后面加“PK”《primaykey)表示实体的主码属性。
联系
4基数约束
UML 中的子类
如何用UML中的类图建立概念模型(即E-R图)
概念结构设计
概念结构设计的第一步就是对需求分析阶段收集到的数据进行分类、组织,确定实体、实体的属性、实体之间的联系类型,形成E-R图。其中,如何确定实体和属性这个看似简单的问题常常会困扰设计人员,因为实体与属性之间并没有形式上可以截然划分的界限。本节介绍在设计E-R图的过程中如何确定实体与属性,以及在集成E-R图时如何解决冲突等关键技术。
实体与属性的划分原则
为了简化E-R图的处置,现实世界中能作为属性对待的尽量作为属性带带
符合什么条件的事物可以作为属性对待?准则
作为属性,不能再具有需要描述的性质,即属性还不再分的数据项,不能包含其他属性
属性不能与其他实体具有联系,即E-R图中所表示的联系是实体之间的联系
E-R图的集成
在开发一个大型信息系统时最常采用的策略是自顶向下地进行需求分析,然后再自底向上地设计概念结构。即首先设计各子系统的分E-R图,然后将它们集成起来,得到全局E-R 图。E-R图的集成一般需要分两步走,如图7.27所示,第一步是合并,即解决各分E-R图之间的冲突,将分E-R图合并起来生成初步E-R图。第二步是修改与重构,即消除不必要的冗余,生成基本E-R图。
各子系统的E-R图之间的冲突分为三类
属性冲突
属性域冲突
即属性值的类型、取值范围或取值集合不同
属性取值单位冲突
例如,出生日期有的精确到年,有的精确到月,有的精确到日。
理论上好解决,但实际上需要各部门讨论协商,解决起来绝非易事
命名冲突
同名异义
不同意义的对象在不同的局部应用中具有相同的名字
异名同义
即同一意义的对象在不同的局部应用中具有不同的名字
结构冲突
四、 逻辑结构设计
概况
概念结构是独立于任何一种数据模型的信息结构。逻辑结构设计的任务是把概念结构阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构
E-R图向关系模型的转换
E-R图向关系模型的转换要解决的间题是,如何将实体型和实体间的联系转换为关系模模式E-R图中各实体的属性,以及如何确定这些关系模式的属性和码。
对于实体型间的联系有以下不同的情况:
一个一对一联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
一个一对多联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
一个多对多联系可以转换为一个关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
三个或三个以上实体间的一个多元联系可以转换为一个关系模式。
具有相同码的关系模式可合并。
数据模型的优化
关系数据模型的优化通常以规范化理论为指导,方法如下
1. 确定数据依赖
按需求分析阶段所得到的语义,分别写出每个关系模式内部各属性之间的数据依赖以及不同关系模式属性之间的数据依赖。
2. 对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系,
3. 按照数据依赖的理论对关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。
4. 根据需求分析阶段得到的处理要求,分析对于这样的应用环境这些模式是否合适,确定是否要对某些模式进行合并或分解。
设计用户外模式
1. 使用更符合用户习惯的别名
2. 对不同级别的用户定义不同的视图
3. 简化用户对系统的使用
五、 物理结构设计
数据库物理设计的内容和方法
数据库的物理结构设计通常分为两步;
①确定数据库的物理结构。在关系数据库中主要指存取方法和存储结构。
②对物理结构进行评价。评价的重点是时间和空问效率。
选择关系模式存取方法
1. .B+树索引方法的选择
2. 哈希索引方法的选择
如果一个关系的属性主要出现在等值连接条件或等值比较选择条件中,而且满足下列两个 条件之一,则此关系可以选择哈希索引方法。
①一个关系的大小可预知,而且不变。
②关系的大小动态改变,但数据库管理系统提供了动态哈希索引方法。
3. 聚簇方法的选择
为了提高某个属性(或属性组》的查询速度,把这个或这些属性上具有相同值的元组集中存放在连续的物理块中称为聚簇。该属性(或属性组)称为聚簇码。
聚簇功能可以大大提高按聚簇码进行查询的效率。
聚簇功能不但适用于单个关系,也适用于经常进行连接操作的多个关系,即
一个数据库可以建立多个聚簇,而一个关系只能加人一个聚簇。
必须强调的是,聚簇只能提高某些应用的性能,而且建立与维护聚簇的开销是相当大的。对已有关系建立聚簇将导致关系中元组移动其物理存储位置,并使此关系上原来建立的所有索引无效,必须重建。当一个元组的聚簇码值改变时,该元组的存储位置也要做相应移动,聚码值要相对稳定,以减少修改聚簇码值所引起的维护开销。因此,当通过聚簇码进行访问或连接是该关系的主要应用,而与聚簇码无关的其他访问很少或者是次要应用时可以使用聚簇。尤其当SOL语句中包含有与聚簇码有关的ORDER BY 、GROUP BY、UNION、DISTINCT等子句或短语时,使用聚簇特别有利,可以省去对结果集的排序操作;否则很可能会适得其反。
确定数据库的存储结构
1. 确定数据的存放位置
确定数据库的物理结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、聚簇、日志、备份等的存储安排和存储结构,确定系统配置等。
为了提高系烧性能,应根据应用情况将数据的易变部分与稳定部分、经常存取部分和存取 元组,从面显著地减少了访间磁盘的次数。 频率较低部分分开存放。
2. 确定系统配置
关系数据库管理系统产品一般都提供了一些系统配置变量和存储分配参数,供设计人员和数据库管理员对数据库进行物理优化。初始情况下,系统都为这些变量赋予了合理的默认值。但是这些值不一定适合每一种应用环境,在进行数据库物理结构设计时需要重新对这些变量赋值,以改善系统的性能。
系统配置变量很多,例如同时使用数据库的用户数,同时打开的数据库对象数,内存分配参数,缓冲区分配参数(使用的缓冲区长度、个数),存储分配参数,物理块的大小,物理块装填因子,时间片大小,数据库大小,锁的数目等。这些参数值影响了存取时间和存储空间的分配,在物理结构设计时就要根据应用环境确定这些参数值,以使系统性能最佳。
在物理结构设计时对系统配置变量的调整只是初步的,在系统运行时还要根据实际运行情况做进一步调整,以期切实改进系统性能。
评价数据库的物理结构
数据库的物理结构设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案。数据库设计人员必须对这些方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构。
评价数据库物理结构设计的方法完全依赖于所选用的关系数据库管理系统,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的、合理的物理结构。如果该结构不符合用户需求,则需要修改设计,
六、 数据库的实施和维护
数据的载入和应用程序的调试
数据库的试运行
数据库的运行和维护
1. 数据库的转储和恢复
数据库的转储和恢复是系统正式运行后最重要的维护工作之一。数据库管理员要针对不同的应用要求制定不同的转储计划,以保证一旦发生故障能尽快将数据库恢复到某种一致的状态,并尽可能减少对数据库的破坏。
2. 数据库的安全性、完整性控制
在数据库运行过程中,由于应用环境的变化,对安全性的要求也会发生变化,比如有的数据原来是机密的,现在则可以公开查询,而新加入的数据又可能是机密的;系统中用户的密级也会改变。这些都需要数据库管理员根据实际情况修改原有的安全性控制。同样,数据库的完整性约束条件也会变化,也需要数据库管理员不断修正,以满足用户要求
3. 数据库性能的监督、分析和改造
在数据库运行过程中,监督系统运行、对监测数据进行分析、找出改进系统性能的方法是数据库管理员的又一项重要任务。目前有些关系数据库管理系统提供了监测系统性能参数的工具,数据库管理员可以利用这些工具方便地得到系统运行过程中一系列性能参数的值。数据库管理员应仔细分析这些数据,判断当前系统运行状况是否为最佳以及应当做哪些改进,例如调整系统物理参数或对数据库进行重组或重构等。
4. 数据库的重组织与重构造
数据库运行一段时间后,由于记录不断更新,将会使数据库的物理存储情况变坏,降低数据的存取效率和数据库性能,因此数据库管理员就要对数据库进行重组或部分重组(只对频繁增删的表进行重组)。
关系数据库管理系统一般都提供数据库重组用的实用程序。在重组的过程中,按原设计要求重新安排存储位置、回收垃圾、减少指针链等,提高系统性能。
数据库的重组不修改原设计的逻辑和物理结构,而数据库的重构则不同,它是指部分修改数据库的模式和内模式。
由于数据库应用环境发生变化,如增加了新的应用或新的实体,取消了某些应用,有的实体与实体间的联系也发生了变化等,使原有的数据库设计不能满足新的需求,因此需要调整数据库的模式和内模式。例如,在表中增加或删除某些数据项、改变数据项的类型、增加或删除某个表、改变数据库的容量、增加或删除某些索引等。当然数据库的重构也是有限的,只能做部分修改。如果应用变化太大,重构也无济于事,说明此数据库应用系统的生命周期已经结束,应该设计新的数据库应用系统了
七、 简答
什么是数据库的重组和重构?为什么要进行数探库的重组和重构?
第八章 数据库编程
一、 嵌入式SQL
不用游标的SQL
使用游标的SQL
动态SQL
二、 过程化SQL
过程化SQL的块结构
变量和常量的定义
流程控制
游标的定义和使用
三、 存储过程和函数
存储过程
创建存储过程
执行存储过程
修改存储过程
删除存储过程
存储过程的优点
存储函数
存储函数也称为自定义函数,以区别于关系数据库管理系统的内置函数。存
创建存储函数
执行存储函数
修改存储函数
四、 JDBC编程
JDBC编程,即如何使用Java语言调用JDBC来进行数据库应用程序的设计。
JDBC工作原理概述(构成)
用户应用程序
JDBC驱动程序管理器
数据源
数据源是用户最终需要访间的数据,包含数据库位置、数据库类型、访问数据库的用户名和密码等信息,实际上是一种数据连接的袖象。
JDBC APIs 基础
JDBC中的常用类
数据类型
使用 JDBC操纵数据库的工作流程
加载驱动程序
建立与数据库的连接
执行SQL语句
处理结果集
五、 基于MVC框架的数据库应用开发
MvC(model-viow-contoler,横型-视图-控制器模式)是一种使用业务模型(Nodd)、用户结果呈现(Vicm)以及业务模型控制器(Conolr)来进行Web数据库应用开发的编程框架
基 于MVC框架进行Web数据库应用开发,其核心思想在于功能的解耦以及功能的模块化
用户结果呈现是用户看到并与之交互获得结果展示的界面
六、 ODBC编程
七、 OLE DB
第九章 关系数据库存储管理
数据组织
数据库的逻辑组织方式与物理组织方式
数据库数据存放的基础是文件,对数据库的任何操作最终部要转化为对文件的操作
在数据库的物理组织中,基本问题就是如何利用操作系统提供的基本文件组织来设计数器库数据存放方法,这实际上也就对应了数据存储管理的两种方式。
记录表示
定长记录存储
变长记录存储
块的组织
定长记录存储的块组织
变长记录存储的块组织
关系表的组织
1. 堆组织
2. 顺序存储
3. 多表聚簇存储
4. B+树存储
5. 哈希存储
是用哈希函数计算表中指定属性的哈希值,以此确定相应记录存储在哪个块中。
哈希存储有两个关键要素:哈希函数和哈希表
哈希表由B个哈希桶组成,每个桶对应一个或多个物理块
索引结构
顺序表索引
1. 稠密索引
2. 稀疏索引
3. 多级索引
辅助索引
B+树索引
B+树索引的结构
B+树索引的查询
B+树索引的维护
哈希索引
静态哈希索引
动态哈希索引
简答
试述关系表有哪些组织方式,并分析各自的优缺点。
试述数据库索引机制的优点。
试述稠密索引和稀硫案引的优块点。
第九章 关系查询处理和查询优化
关系数据管理系统的查询处理
查询处理步骤
1. 查询分析
首先对查询语句进行扫描、词法分析和语法分析。
从查询语句中识别出语言符号,如SOL关键字、属性名和关系名等,进行语法检查和语法分析,即判断查询语句是否符合SOL语法规则。如果没有语法错误就转入下一步处理,否则便报告语句中出现的语法错误。
2. 查询检查
对合法的查询语句进行语义检查和分析,即根据数据字典中有关的模式定义,检查语句中的数据库对象(如关系名、属性名)是否存在和有效
3. 查询优化
每个查询都会有许多可供选择的执行策略和操作算法,查询优化就是选择一个高效的 查询处理策略。
查询优化有多种方法,按照优化的层次一般可将查询优化分为代数优化和物理优化。
分类
按照优化的层次
代数优化
概念
是指关系代数表达式的优化,即按照一定的规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询执行更加高效
物理优化
概念
是指存取路径和底层操作算法的选择
选择的基于可以是基于规则的,也可以是基于代价的,还可以是基于语义的
4. 查询执行
依据查询优化器得到的执行策略生成查询执行计划,由代码生成器生成执行这个查询计划的代码,然后加以执行,回送查询结果。
实现查询操作的算法示例
选择操作的实现
考虑<表达式>的集中情况
简单的全表扫描算法
索引扫描算法
连接操作的实现
连接操作是查询处理中最常用也是最耗时的操作之一
分类
嵌套循环算法
排序-合并算法
索引连接算法
hash join算法
关系数据库管理系统的查询优化
查询优化概述
查询的优点不仅在于用户不必考虑如何最好地表达查询以获得较高的效率,而且在于系统可以比用户程序的“优化”做得更好
查询优化优点的原因
1. 优化器可以从数据字典中获取许多统计信息,例如每个关系表中的元组数、关系中每个属性值的分布情况、哪些属性上已经建立了索引等。优化器可以根据这些信息做出正确的估算,选择高效的执行计划,而用户程序则难以获得这些信息。
2. 如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化以选择相适应的执行计划。在非关系数据库管理系统中则必须重写程序,而重写程序在实际应用中往往是不太可能的。
3. 优化器可以考虑数百种甚至数千种不同的执行计划,而程序员一般只能考虑有限的几种可能性。
4. 优化器中包含很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握系统的自动优化相当于使得所有人都拥有这些优化技术。
查询优化的总目标是:
选择有效的策略,求得给定关系表达式的值,使得查询代价较小。因为查询优化的搜索空间有时非常大,实际系统选择的策略不一定是最优的,而是较优的。
一个实例
求选修了81003课程的学生姓名。
SELEGT Sudem,Sname FROM Sadent,SC WHERE Somt Sm=SC.So AND Sc.Cao=81000';
代数优化
关系代数表达式等阶变换规则
代数优化策略是通过对关系代数表达式的等价变换来提高查询效率。
语法树的启发式优化
查询树的启发式优化
物理优化
代数优化改变查询语句中操作的次序和组合,但不涉及底层的存取路径。
简答
试述查询优化在关系数据库系统中的重要性和可能性,
重要性:关系系统的查询优化既是RDBMS实现的关键技术,又是关系系统的优点所在,它减轻了用户选择存取路径的负担,用户只要提出“干什么”,不必指出“怎么干”。 查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好 可能性: ①优化器可以从数据字典中获取许多统计信息,例如各个关系中的元组数,关系中每个属性值的分布情况,这些属性上是否有索引、是什么索引(B+树索引、Hash索引、唯一索引还是组合索引),等等。优化器可以根据这些信息选择有效的执行计划,而用户程序则难以获得这些信息。 ②)如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太 可能的。③优化器可以考虑数十甚至数百种不同的执行计划,从中选出较优的一个,而程序员一般只能考虑有限的几种可能性。 ④优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术。
试述关系数据库管理系统查询优化的一般准则。
试述关系数据库管理系统查询优化的一般步骤。
第十章 数据库恢复技术
一、 事务的基本概念
概念
所谓事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
在关系数据库中,一个事务可以是SQL语句,一组SQL语句或整个程序
事务和程序是两个概念。一般地讲,一个程序包含多个事务
事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。COMMI表示提交,即提交事务的所有操作,具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束。ROLLBACK表示回滚,即在事务运行的过程中发生了某利故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,回滚到事务开始时的状态。
事务的ACID特性
1. 原子性
事务是数据库的逻辑工作单位,事务中包括的诸操作要么做要么都不做
2. 一致性
事务执行结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。
事务的一致性指在事务间没有干扰的情况下,如果数据库只包含成功事务提交的结果时,数据库就是处于致性状态的。换句话说,一个事务在一致性的数据库状态开始执行,在没有其他事务干扰的情况下成功提交后数据库仍处于一致性状态。如果在数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所做的修改有一部分已写人物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
3. 隔离型
一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰
4. 持续性
也称永久性,指一个事务一旦提交,它对数据库中数据的改变是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响
事务是恢复和并发控制的基本单位。保证事务的ACID特性是事务管理的基本任务。
事务ACID特性可能遭到破坏的因素有
多个事务并行运行时,不同事务交叉执行
事务在运行过程中被强行停止
这些就是数据库管理系统中恢复机制和并发控制的责任
二、 数据库恢复概述
三、 故障的种类
事务内部故障
事务撤销(UNDO)
事务故障意味着事务没有达到预期的重点,因此数据库可能处于不正确状态恢复程序要在不影响其他事务运行的情况下强行回滚该事务,即撤销该事务已做出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作称为事务撤销
事务内部的故障有些是可以通过事务程序本身发现的,有些则是非预期的,不能由事务程序处理
系统故障,称为软故障
系统故障是指造成系统停止运转的任何事件,使得系统要重新启动
情况
1||| 特定类型的硬件错误(CPU故障)
2||| 操作系统故障
3||| DBMS代码错误
4||| 系统断电
5||| ……
做法
撤销所有未完成的事务
重组所有已提交的事务,以使数据库恢复到一致状态
介质故障,称为硬故障
硬故障指外存故障
情况
1||| 磁盘损坏
2||| 磁头碰撞
3||| 瞬时强磁场干扰
4||| 破坏硬盘数据的计算机病毒
5||| ……
做法
需要借助存储在其他地方的数据备份来恢复数据库
计算机病毒
做法
需要借助存储在其他地方的数据备份来恢复数据库
总结
各类故障对数据的影响有两种可能
1||| 数据库本身被破坏
2||| 数据库没有被破坏,但数据可能不正确
由于事务的运行被非正常终止造成
恢复的基本原理
冗余
也就是说,数据库中任何一部分被破坏或不正确的正确可以根据存储在系统别处的冗余数据来重建。尽管恢复的基本原理很简单,但实现技术的细节却相当复杂
四、 恢复的实现技术
恢复技术涉及两个关键问题,即如何建立冗余数据,以及利用这些冗余数据实施数据库恢复
数据转储
转储方式
按数据库的状态
1||| 静态转储
是系统中无运行事务时进行的转储操作。即转储操作开始的时刻数据库处于一致性状态,而转储期间不运行(不存在)对数据库的任何存取、修改活动。
静态转储得到的一定是一个数据一致性的副本
静态转储简单,但转储必须等正运行的用户事务结束后才能进行。同时,新的事务必须等待转储结束才能执行。这样会降低数据库的可用性
2||| 动态转储
动态转储概念
指转储期间允许对数据进行存取或修改。即转储和用户事务可以并发执行
优点
可以克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行
缺点
转储结束的后援副本上的数据并不能保证正确有效
为此,必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件。这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态
分类2
1||| 海量转储
指每次转储全部数据库
2||| 增量转储
每次只转储上一次转储后更新过的数据
数据转储方法(转储状态)
分类
1. 动态海量转储
2. 动态增量转储
3. 静态海量转储
4. 静态增量转储
数据转储是数据恢复中采用的基本数据。所谓数据转储,即数据库管理员定期将整改数据库复制到磁带、磁盘或其他存储介质上保存的过程,这些备用的数据称为后备副本或后援副本。
登记日志文件
日志文件的格式和内容
日志文件是用来记录事务对数据库的更新操作的文件
格式分类
以记录为单位的日志文件
登记内容
1||| 各个事务的开始标记
2||| 各个事务的结束标记
3||| 各个事务的所有更新操作
这里每个事务的开始标记、每个事务的结束标记和每个更新操作均作为日志文件的一个日志记录
每个日志记录的内容包括
1||| 事务标识(标明哪个是事务)
2||| 操作的类型(插入、删除和修改)
3||| 操作对象(记录内部标识)
4||| 更新前数据的旧值(对插入操作而言,此项为空值)
5||| 更新后的数据(对删除操作而言,此项为空值)
以数据块为单位的日志文件
登记内容
1||| 事务标识
2||| 被更新后的数据库
日志文件的作用
1. 事务故障恢复和系统故障恢复必须用日志文件
2. 在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库
3. 在静态转储方式中也可以建立日志文件,当时数据库毁坏后可重新装入后援副本,把数据库恢复到转储结束时刻的正确状态,然后利用日志文件把已完成的事务进行重做处理,对故障发生尚未完成的事务进行撤销处理
登记日志文件
原则
登记的次序严格按并发事务执行的时间次序
必须写日志文件,后写数据库
建立冗余数据的方法
五、 恢复策略
事务故障的恢复
事务故障是指事务在运行至终点前被停止,这时恢复子系统应利用日志文件撤销此事务对数据库进行的修改。事务故障的恢复是由系统自动完成的,对用户隐蔽。
恢复步骤
1||| 反向扫描日志文件(即从最后向前扫描日志文件),查找该事务的更新操作
2||| 对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库
3||| 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理
4||| 如此扫描下去,直至读到此事务的开始标记,事务故障恢复就完成了
系统故障的恢复
由系统在重新启动时自动完成,不需要用户干预
系统故障造成数据库不一致的原因
一是为完成事务对数据库的更新可能已写入数据
二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库
因此,系统故障的恢复操作就是要撤销故障发生时未完成的事务,重做已完成的事务
恢复步骤
1||| 正向扫描日志文件(即从头扫描日志文件),找出故障发生前已经提交的事务,将其事务标识计入重做队列。同时找出故障发生时尚未完成的事务记录,将其事务标识计入撤销队列
2||| 对撤销队列中的各个事务进行撤销处理
撤销处理方法
反向扫描日志文件,对每个撤销事务的更新操作做执行逆操作,即将日志文件中"更新前的值"写入数据库
3||| 对重做队列中的各个事务进行重做处理
重做处理方法
正向扫描日志文件,对每个重做事务重新执行日志文件登记的操作,即将日志记录中“更新后的值”写入数据库
介质故障的恢复
磁盘上的物理数据和日志文件被破坏,是最严重的故障
步骤
装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态
装入相应的日志文件副本,重做已完成的事务
六、 具有检查点的恢复技术
七、 数据库镜像
八、 小结
九、 简答
登记日志文作时为什么必须先写日志文件,后写数据库?
试述事务的概念及事务的4个特性。数摆库恢复技术能保证事务的哪然符性?
什么事务非正箭姑束时金影响数据库数摆的正确性?请择例说明之。
针对不间的故障类理(事务故障、系统放障、介质故障),试给出恢复的策略和方法
数据库故障分为三类,其恢复策略和方法如下: 1. 事务故障 恢复策略:撤销(UNDO)未完成事务,消除其对数据库的影响。 方法:通过事务日志反向扫描该事务的更新操作,执行逆操作(如删除插入的记录、恢复修改前的旧值),直至事务开始标记,使数据库恢复到事务执行前的状态。 2. 系统故障(软故障) 恢复策略:重做(REDO)已提交事务,撤销(UNDO)未完成事务,确保数据一致性。 方法:利用日志文件和检查点,从检查点开始: REDO:正向扫描日志,重新执行已提交事务的更新; UNDO:反向扫描日志,撤销未提交事务的操作。 3. 介质故障(硬故障) 恢复策略:依赖数据库备份和事务日志进行完全恢复。 方法:重装最近的数据库备份副本; 利用事务日志重做备份后所有已提交的事务,将数据库恢复到故障前状态。 核心技术:事务日志(记录操作)、数据转储(备份)、检查点(优化恢复效率)。
第十一章 并发控制
一、 并发控制概述
事务是并发控制的基本单位
并发操作带来的数据不一致性情况
1. 丢失修改
丢失修改是指两个事务T1和T2读入同一数据,各自进行修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失,
2. 读“脏”数据
脏读(dirty read),俗称读“脏”数据,是指事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时被T1修改过的数据恢复原值,T2读到的数据就数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。
3. 不可重复读
不可重复读是指事务T1读取数据后,事务T2执行更新操作,当事务T1再次读该数据时得到与前一次不同的值。
4. 幻读
幻读也称作幻影(phantom)现象,是指事务T1读取数据后,事务T2执行插人或删除操作,使得T1无法再现前一次读取结果。
幻读包括两种情况
事务 T1按一定条件从数据库中读取某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录“神秘地”消失了
事务 T1按一定条件从数据库中读取某些数据记录后,事务 T2插入了一些记录,当T再次按相同条件读取数据时,发现多了一些记录。
5. 本章重点讨论前三类数据不一致性。读者如果对幻读有兴趣,可以参考相关文献。
产生上述三类数据的主要原因
并发控制破坏了事务的隔离性
并发控制机制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。
主要技术
1. 封锁
2. 时间戳
3. 乐观控制法
4. 多版本并发控制
二、 封锁
基本的封锁类型
1. 排他锁/X锁
又称写锁
2. 共享锁/S锁
又称读锁
三、 一级封锁协议
事务结束分为正常结束和非正常结束
是指事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放
四、 封锁协议
分类
一级封锁协议
一级封锁协议是指事务T在修改数据 R 之前必须先对其加X锁,直到事务结束才释放。
一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
在一级封锁协议中,如果仅读数据而不对其进行修改是不需要加锁的,所以它不能保证可重复读和脏读。
二级封锁协议
是指在一级封锁协议基础上增加事务T在读取数据R之前必须先对其加S锁,读完即可释放S锁
二级封锁协议除防止了丢失修改,还可进一步防止脏读
在二级封锁协议中,由于读完数据后即可释放 S 锁,所以它不能保证可重复读。
三级封锁协议
是指在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束后才释放
三级封领协议除了防止丢失修改和脏读外,还进一步防止了不可重复读
上述三级协议的主要区别在于什么操作需要申请封锁,以及何时释放锁(即持续时间)
五、 活锁和死锁
活锁
事务有可能永远等待
避免活锁的简单方法是采用先来先服务的策略
死锁
T1和T2两个事务永远不能结束
解决方法
死锁的预防
一次封锁法
一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
存在的问题
一次就将以后要用到的全部数探加锁,势必扩大了封镇的范围,从而降低了系统的并发度。
顺序封锁法
顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实施封领
顺序封锁法可以有效地防止死锁,但也同样存在间题
数据库系统中封领的数据对象极多,并且随数据的插人、删除等操作而不断地变化, 要维护这样的资源的封锁顺序非常困难,成本很高。
事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就得难按规定的顺序去施加封锁
死锁的诊断与解除
超时法
如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。
超时法实现简单,但其不足也很明显,
二是时限若设置得太长,死锁发生后不能及时发现。
一是误判
事务等待图法
事务等待图动态地反映了所有事务的等待情况。
发控制子系统周期性地(比如每隔数秒)生成事务等待图并进行检测,如果发现图中存在回路,则表示系统中出现了死模。
六、 并发调度的可串行性
可串行调度
冲突可串行调度
冲突操作是指不同的事务对同一个数据的读写操作和写写操作:
七、 两段锁协议
所谓两段锁协议,是指所有事务必须分两个阶段对数据项加铁和解锁。
在对任何数据进行读、写操作之前,首先要中请并获得对该数据的封镇。
②在释放一个封锁之后,事务不再中请和获得任何其他封锁。
八、 封锁的粒度
概述
封锁对象的大小称为封锁粒度
封锁对象可以是逻辑对象,也可以是物理单元
封锁粒度与系统的并发度和并发控制的开销密切相关
多粒度封锁
首先定义多粒度树。
多粒度树的根结点是整个数据库,表示最大的数据粒度。
根结点为数据库。数据库的子结点为关系,关系的子结点为元祖。
意向锁
如果对一个结点加意向领,则说明该结点的后商结点正在被加锁
例如,对任一元组加锁时,必须先对它所在的数据库和关系加意向领
三种常用的意向锁
意向共享型锁(inehredlock,简称S锁)
意向排他性锁
共享意向派他型锁
九、 其他并发控制机制
十、 小结
第十二章 数据库管理系统
一、 数据库管理系统的基本功能
1. 数据库定义和创建
创建数据库主要是用数据定义语言定义和创建数据库模式、外模 式、内核式等数据库对象。
2. 数据存取
数据库管理系统提供用户对数据的操作功能,实现对数据库数据的插入 删除 修改。一个好的数据库管理系统应该提供功能强且易学易用的数据操作语言去方便的操作方式和较高的数据存取效率。数据操作语言分为两类:宿主型语言和自立(独立型)语言
3. 数据组织、存储和管理
数据库管理系统要分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等;要确定以何种文件结构和存取方式在存错器上组织这些数据,以及如何实现数据之间的联系。 数据组织和存储的基本目标是提高存储空间利用率和方便存取,提供多种存取方法
4. 数据库事务管理和运行管理
这是指数据库管理系统的运行控制和管理功能,包括多用户环境下的事务管理功能和安全性、完整性控制功能,故障恢复、并发控制和死锁检测(或死锁预防)、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理等。这些功能保证了数据库系统的正常运行,保证了事务的ACID特性。
5. 数据库的建立和维护
此项功能包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组和重构以及性能监测分析等。
6. 其他功能
数据库管理系统还包括与网络中其他软件系统的通信功能、一个数据库管理系统与另一个数据库管理系统或文件系统的数据转换功能、异构数据库之间的互访和互操作功能等。随着技术的发展,许多新的应用对数据库管理系统提出了新的需求。数据库管理系统要不断发展新的数据管理技术,例如 XML数据、流数据、空间数据、多媒体数据等管理技术。
二、 数据库管理系统的系统结构
数据库管理系统的层次结构
1. 应用层
最上层,位于关系数据库管理系统的核心之处
2. 语言处理层
处理对象是数据库语言,如SQL
3. 数据存取层
处理对象是单个原组,把上层第二节这操作转换为单记录操作
4. 数据存储层
该层处理的对象是数据项和系统缓冲区
5. 操作系统
操作系统是关系数据库管理系统的基础。该层处理的对象是数据文件的物理块。执行物理 系梳结构及语言处理层、数据存取层、媛冲区管理及数据库的物理组织。 文件的读写操作,保证关系数据库管理系统对数据逻辑上的读写真实地映射到物理文件上。操 作系统提供的存取原语和基本存取方法通常作为关系数据库管理系统数据存储层的接口
关系数据库管理系统的运行过程示例
关系数据库管理系统是一个复杂而有序的整体,应该用动态的观点看待其备个功能模块。
三、 语言处理层
语言处理层的任务和工作步骤
1. 语盲处理层的主要任务如下:把用户在各种方式下提交的数据库语句转换成对关系数据库管理系统内层可执行的基本存取模块的调用序列。
2. 数据库语言通常包括三类:数据定义语言、数据操纵语言和数据控制语言。
关系数据库管理系统对数据定义语言语句的处理相对独立和简单,面对数据操纵语言语句和数据控制语言语 句的处理则较为复杂。
3. 数据字典是数招操纵语言语句的处理、执行以及关系数据库管理系统运行管理的基本依据。
4. 在关系数据库管理系统中,数据字共通常采用和普通数据同样的表示方式,即也用关系表示
数据操纵语言语句的处理过程如下;
1. 对数据操纵语言语句进行词法分析和语法分析,并把外部关系名、属性名转换为内部名
外部名便于用户记忆和使用,内部名则整齐划一。
符号名转换过程中需存取数据字典,
词法分析和语法分析通过后便生成语法树。
2. 根据数据字典中的内容进行查询检查,包括语义检查、审核用户的存取权限、完整性检查和枧图消解。
查询检查还包括视图消解,也称为视图转换。
3. 对查询进行优化。
优化分为代数优化和物理优化(存取路径优化)。
解决方法
预编译方法
四、 数据存取层
数据存取层介于语言处理层和数据存储层之间
数据存取层所涉及的主要数据结构为 逻 辑数据 记录、逻辊块、适辑存取路径。
数据存取层的任务主要包括以下几个方面。
数据存取层的功能子系统
记录存取、事务管理子系统
数据存取层的系统结构
q数据存取层的功能子系统
五、 缓冲区管理层
六、 数据库的物理组织
第十三章 数据库技术发展概述
主题
主题
主题
第十四章 大数据管理
主题
主题
主题
第十四章 数据库发展概述
数据库系统发展概述
应用需求是数据库系统产生和发展的源动力
数据模型是数据库发展的主线
计算机技术是数据库发展的基础
数据库系统发展简史
第一代数据库系统
层次、网状数据库系统,以数据的组织、存储和检索为主要功能
第二代数据库系统
支持关系模型的数据库系统
关系数据库系统的扩展
从数据库到数据仓库,从事务型应用到分析型应用
关系模型的扩展
面向对象数据模型和对象关系数据模型
XML数据模型
大数据时代的数据库系统
SQL数据库系统与NoSQL数据库系统
NewSQL数据库系统
计算机技术对数据库系统发展的支撑作用
高速网络与分布式数据库
新硬件和内存数据库
人工智能和数据技术
数据库发展展望
多数据模型并存
新硬件驱动
云原生数据库
支持混合事务分析处理型应用
面向人工智能的数据管理技术
第十五章 内存数据库系统
主题
主题
主题
第十六章 数据仓库与联机分析处理技术
主题
主题
主题
第十八章 区块链与数据库
区块链的概念与工作原理
区块链的定义
是借助密码学保护内容的自增长的串接教育记录列表,又称去区块。每一个区块都包含前一个区块的哈希值、本区块的时间戳和交易数据,这样的设计使得区块内容具有难以篡改的特性。区块链能让多方有效记录交易,且可永久查验此交易。
区块的数据结构
父区块的哈希值
Merkle根
难度系数和随机数
区块链的工作机制
区块链的分布式网络架构
区块链的工作机制
区块链的共识协议
区块链与比特币
区块链的发展进程
区块链系统的技术架构与关键技术
区块链系统的技术架构
基础设施层
基础组件层
账本层
共识层
智能合约层
接口层
系统管理层
操作运维层
应用层
区块链技术
区块链技术的难点
应用开发门槛高,技术储备不足
底层性能无法支持高并发
跨链通信问题
区块链技术的“不可能三角”
去中心化
安全
效率
区块链与数据库
区块链与数据库的对比
设计目标上的差异
从设计目标上看,大部分区块链系统考虑的是安全问题。这是因为区块链系统大多面对开放的网络环境,系统中可能存在恶意节点,因而安全是其最关心的指标。而关系数据库管理系统虽然安全也是重要指标,但关系数据库管理系统面向比较封闭的运行环境,其安全威胁相对容易控制和处理,因此系统功能呢、性能指标(如响应时间和吞吐量)通常更为重要
功能上的差异
从功能上看,区块链系统支持智能合约,即图灵完备的程序语言,因此除了存储功能外,还可以看作是是分布式的计算环境。
关系数据库管理系统则只支持运行SQL脚本。区块链中的数据以键值对模式存储在状态数据库中,关系数据库管理系统中的数据则采用关系模式。
区块链系统支持对数据的增加和查询操作,但不能更改或删除。关系数据库管理系统则支持增删改操作
区块链要求所有事务串行执行,不支持事务的并发,关系数据库管理系统则支持事务并发。
架构上的差异
从架构上看,区块链系统中的每个节点存储完整的数据副本,而分布式关系数据库管理系统中的每个节点只存储部分数据。
区块链系统没有中心节点,分布式关系数据库管理系统有中心节点。
区块链与数据库的融合
将数据库技术应用到区块链中
融合区块链特征的新型数据库