[toc]
软件设计师笔记09_数据库技术基础_精简考点
科目一考试有6分左右。科目二考试占一道大题。
知识点结构图 
基本概念
数据库管理系统的分类
- 关系型数据库系统(RDBS):是指采用关系模型作为数据组织的数据库系统,如MySQL、Oracle、SQL Server等。
- 面向对象的数据库系统(OOBS):是指采用面向对象模型作为数据组织的数据库系统,如ObjectDBMS、VisualFoxPro等。
- 对象关系数据库系统(ORDBS):是指采用对象关系模型作为数据组织的数据库系统,如PostgreSQL、Oracle等。
数据库三级模式两级映像
数据库体系结构大多采用"三级模式和两级映像"。
如图所示 
三级模式
外模式-视图;概念模式-基本表;内模式-物理文件。
- 概念模式(也称模式)。它是数据库中全体数据的逻辑结构和特征的描述,它由若干个概念记录类型组成,只涉及类型的描述,不涉及具体的值。概念模式反映的是数据库的结构和特征。
- 外模式(也称用户模式或子模式)。它是用户与数据库系统的接口,是用户用到的那部分数据的描述,由若干个外部记录类型组成。用户使用数据操作语言对数据进行操作,实际上是对外模式的外部记录进行操作。
- 内模式(也称存储模式),它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式以及数据控制方面的细节。
简而言之,外模式是对接用户的,内模式是对接数据库系统的,而概念模式连接这两者的中间层,它是是用户和数据库系统之间的桥梁。

两级映像
- 外模式-概念模式映射,保证数据逻辑独立性,即数据的逻辑结构发生变化后,用户程序也可以不修改。只需要修改外模式和概念模式之间的映像。
- 概念模式-内模式映射,保证数据物理独立性,即当数据的物理结构发生改变时,应用程序不用改变。只需要修改概念模式和内模式之间的映像。
数据模型
数据模型是对现实世界数据特征的抽象。
数据模型的三要素是数据结构、数据操作、数据的约束条件。
- 数据结构:是所研究的对象类型的集合,是对系统静态特性的描述。
- 数据操作:是对数据库中各种对象(型)的实例(值)允许执行的操作集合,包括操作及操作规则。例如操作有检索、插入、删除和修改,操作规则有优先级别等。
- 数据的约束条件:是一组完整性规则的集合。也就是说,对于具体的应用数据必须遵循特定的语义约束条件,以保证数据的正确、有效、相容。
E-R 模型图
E-R 模型图
E-R模型图,所采用的3个主要概念是实体、联系和属性。
- 实体:用矩形表示,每个实体由一组属性表示,包括主键、候选键、外键。
- 联系:用菱形表示,分为一对一(1:1)、一对多(1:n)、多对多(m:n)。
- 属性:用椭圆表示,是实体某方面的特性。E-R 模型中的属性分为:①简单和复合属性;②单值和多值属性;③null 属性;④派生属性

两个不同实体集之间的3种联系类型
如图所示 
两个以上不同实体集之间的联系类型
两个以上不同实体集之间存在 1:1:1、1:1:n、1:m:n 和 r:m:n 的联系。
如图表示了3个不同实体集之间的联系。例如图(b)表示病房、病人和医生之间一对多对多(1∶n:m)的联系,联系名为PD。表示了一个病房有多个病人和多个医生,一个医生只负责一个病房,一个病人只属于一个病房的语义 
例题: 假设学校有若干个系,每个系有若干名教师和学生;每个教师可以担任若干门课程,并参加多个项目;每个学生可以同时选修多门课程。请设计该学校教学管理系统的E-R模型,要求给出每个实体、联系的属性。
解题:该学校教学管理系统的E-R模型应该有5个实体,即系、教师、学生、项目和课程。
- (1)设计各实体属性如下:
- 系(系号,系名,主任名)
- 教师(教师号,教师名,职称)
- 学生(学号,姓名,年龄,性别)
- 项目(项目号,名称,负责人)
- 课程(课程号,课程名,学分)
- (2)各实体之间的联系如下:
- 教师担任课程的 1∶n“任课”联系;
- 教师参加项目的 n:m“参加”联系;
- 学生选修课程的n:m“选修”联系;
- 教师、学生与系之间所属关系的1:n:m“领导”联系。其中“参加”联系有一个排名属性,“选修”联系有一个成绩属性。
则对应的E-R模型图如下所示。 
关系模型
关系模型是最常用的数据模型之一。
属性和域
- 属性: 在现实世界中,要描述一个事物,常常取其若干特征来表示。这些特征称为属性。
- 域: 每个属性的取值范围的集合,称为该属性的域。
关系的三种类型
- 基本关系(又称基本表、基表):这是实际存在的表,它是实际存储数据的逻辑表示。
- 查询表:它是查询结果对应的表。
- 视图表:它是由基本表或其他视图表导出的表。由于它本身不独立存储在数据库中,数据库中只存放它的定义,所以常称为虚表。
5种基本的关系代数运算
5种基本的关系代数运算分别为 并,差,笛卡尔积,投影,选择。其他运算包括可以通过基本的关系运算导出。

自然连接关系运算符
属性列数 = 二者之和 - 重复的列数
范式
- (1)1NF:每个分量(属性)不可分割。
- (2)2NF:满足 1NF,而且消除非主属性对候选键的部分依赖。
- (3)3NF:满足 2NF,而且消除非主属性对候选键的传递依赖。
第一范式(1NF):原子性
第一范式要求表中的所有字段值都是不可分解的原子值,即每个字段都是最小的数据单位,不可再分。
第二范式(2NF):唯一性
在满足第一范式的基础上,第二范式进一步要求表中的每个字段都必须与主键完全相关,而不能仅与主键的一部分相关。这主要针对联合主键的情况,即一个表中只能保存一种数据类型,不可以将多种数据类型保存在同一张表中。
第三范式(3NF):独立性
第三范式要求表中的每个字段都必须直接与主键相关,而不能间接相关。也就是说,非主键字段之间不能存在依赖关系,它们必须直接依赖于主键。
SQL语言
普通查询


分组查询
GROUPBY子句:在WHERE子句后面加上GROUPBY子句可以对元组进行分组,保留字GROUPBY后面跟着一个分组属性列表。最简单的情况是,FROM子句后面只有一个关系,根据分组属性对其元组进行分组。SELECT子句中使用的聚集操作符仅用在每个分组上。
HAVING子句:假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,则在GROUPBY子句后面跟一个HAVING子句即可。
当元组含有空值时,应注意以下两点:
- a、空值在任何聚集操作中都被忽略。它对求和、求平均值和计数都没有影响,也不能是某列的最大值或最小值
- b、NULL值可以在分组属性中看作一个一般的值。
SQL访问控制(授权与收回权限)
SQL访问控制是指控制用户对数据访问的权限。应具有以下功能:
- 通过 GRANT 和 REVOKE 将授权通知系统,并存入数据词典。
- 当用户提出请求时,根据授权情况检查是否执行操作请求。
GRANT 授权语句

REVOKE 收回权限语句

事务并发
事务特性
事务具有原子性、一致性、隔离性和持久性。这4个特性也称事务的 ACID 性质。
- 原子性(Atomicity):一个事务中的所有操作在数据库中要么全做,要么全都不做
- 一致性(Consistency):一个事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。
- 隔离性(Isolation):事务与事务之间相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
- 持久性(Durability):一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也将永久有效。
事务恢复的3个步骤
- 反向扫描文件日志,查找该事务的更新操作
- 对事务的更新操作执行逆操作
- 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志
数据库故障和备份
数据库一般遭遇的故障类型如下
- 事务内部故障:事务内部的故障有的可以通过事务程序本身发现。例如运算故障,事务发生死锁等。
- 系统故障:通常称为软故障,是指造成系统停止运行的任何事件,使得系统要重新启动。例如系统崩溃、操作系统死机等。
- 介质故障:通常称为硬故障,如磁盘损坏、磁头碰撞和瞬时强磁干扰。此类故障发生的几率小,但破坏性最大
- 计算机病毒:是一种人为的故障和破坏,是在计算机程序中插入的破坏,计算机功能或者数据可以繁殖和传播的一组计算机指令或程序代码。
数据库的备份方法
恢复的基本原理是“建立冗余数据”(重复存储)。建立冗余数据的方法是进行数据转储和登记日志文件。
数据的转储分为静态转储和动态转储、海转储和增量转储、日志文件。
- 静态转储和动态转储:
- 静态转储是指在转储期间不允许对数据库进行任何存取、修改操作
- 动态转储是指在转储期间允许对数据库进行存取、修改操作
- 海量转储和增量转储:
- 海量转储是指每次转储全部数据
- 增量转储是指每次只转储上次转储后更新过的数据
- 日志文件。在事务处理的过程中,把对数据库的插入,删除和修改的每一次操作写入日志文件。一旦发生故障,利用日志文件回退到事务的初始状态。
数据库的并发控制的问题
并发操作带来的数据不一致性有三类:丢失修改、不可重复读和读脏数据。如图 9-30 所示。

丢失修改
如图 9-30(a)所示,事务T1、T2都是对数据 A 做减1操作。事务 T1 在时刻t5 把 A 修改后的值 15 写入数据库,但事务T2 在时刻t7再把它对 A 减1后的值 15 写入。两个事务都是对A的值进行减1操作并且都执行成功,但 A 中的值却只减了 1。
例如火车售票系统,T1与T2各售出了一张票,但数据库里的存票却只减了一张,造成数据的不一致。原因在于T1事务对数据库的修改被T2事务覆盖而丢失了,破坏了事务的隔离性。
不可重复读
如图 9-30(b)所示,事务T1 读取 A、B 的值后进行运算,事务T2在 t6 时刻对 B的值做了修改以后,事务T1又重新读取 A、B的值再运算,同一事务内对同一组数据的相同运算结果不同,显然与事实不相符。同样是事务T2干扰了事务T1的独立性。
读脏数据。
如图 9-30(c)所示,事务T1 对数据C 修改之后,在t3时刻事务T2读取修改后的 C 值做处理,之后事务 T1 回滚,数据C恢复了原来的值,事务T2对C所做的处理是无效的,它读的是被丢掉的垃圾值。
在上面的例子中,在事务并行处理的过程中对相同数据进行访问会导致了数据的不一致性,解决该问题可以从保证事务的隔离性入手。并发控制技术
有多种技术用来解决并发操作带来的数据不一致性问题,主要有封锁等。
并发控制的主要技术是封锁。封锁的类型有排它锁(简称X锁或写锁)和共享锁(简称S锁或读锁)。
封锁的类型
- 排他锁(X/写锁)。若事务T对数据对象 A加上X锁,则只允许事务T读取和修改 A,其他事务都不能再对 A 加任何类型的锁,直到事务T释放 A上的锁。
- 共享锁(S/读锁)。若事务T对数据对象 A 加上S锁,则只允许事务T读取 A,但不能修改 A,其他事务只能再对A加S锁,直到事务T释放A 上的S锁。这就保证了其他事务可以读 A,但在事务 T 释放A上的S锁之前不能对A进行任何修改。
三级封锁协议
- (1)一级:修改数据前先加 X 锁,事务结束后释放,可解决丢失修改问题。
- (2)二级:在一级基础上,读数据之前加 S 锁,读完后释放即可解决读脏数据问题。
- (3)三级:在一级基础上,读数据之前加 S 锁,直到事务结束后释放 S 锁,即可解决丢失修改、读脏数据、不可重复读三个数据不一致的问题。
真题
采用三级模式结构的数据库系统中,如果对一个表创建聚簇索引,那么改变的是数据库的( 内模式 )。
数据的物理独立性和逻辑独立性分别是通过修改( 模式与内模式之间的映像、外模式与模式之间的映像 )来完成的。
数据库系统通常采用三级模式结构:外模式、模式和内模式。这三级模式分别对应数据库的视图、基本表和存储文件。
以下关于数据库两级映像的叙述中,正确的是( 模式/内模式映像实现了概念模式到内模式之间的相互转换 )。
采用三级结构/两级映像的数据库体系结构,如果对数据库的一张表创建聚簇索引,改变的是数据库的( 内模式 )。
