数据库系统概论

第一章

数据库的基本概念

  1. 数据(data)

    描述事物的符号记录为数据

    数据的含义称为数据的语义,数据及其语义是密不可分的

  2. 数据库(DB)

    数据库具有永久存储、有组织和可共享三个特点

  3. 数据库管理系统(DBMS)

    是计算机的基础软件

    可以定义数据之间的联系

    具有DDL和DML,可操作库和数据

  4. 数据库系统(DBS)

    数据库系统是由数据库,数据库管理系统,应用程序和数据库管理员组成的储存、管理、处理和维护数据的系统


数据模型的组成要素

数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成

  1. 数据结构

    数据结构描述数据库的组成对象以及对象之间的联系

  2. 数据操作

    数据操作是指数据库中各种对象的实例允许执行的操作的集合,包括操作有关的操作规则

  3. 数据的完整性约束条件

    数据的完整性约束条件是一条完整性规则


数据系统的三级模式结构

数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级构成

  1. 模式

    模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图

  2. 外模式

    外模式也称子模式或用户模式,他是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据用户的数据视图,是与某一应用有关的数据的逻辑表示

  3. 内模式

    内模式又称存储模式,一个数据库只有一个内模式。他是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式

注:个人理解,模式就是数据库的逻辑结构,内模式就是数据库的物理结构


数据库的二级映像功能与数据独立性

  1. 外模式/模式映像

    当模式改变时,由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性

  2. 模式/内模式映像

    当数据库的存储结构发生改变时,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称数据的物理独立性

  3. 数据独立性

    数据与程序之间的独立性使得数据的定义和描述可以从应用程序中分离出去。由于数据的存取由数据库管理系统管理,从而简化了应用程序的编制,大大减少了应用程序的维护和修改


第二章

关系代数

传统的集合运算

传统的集合运算是二目运算,包括并、交、差和笛卡尔积4种运算

专门的关系运算

专门的关系运算包括选择、投影、链接、除运算等

  1. 选择(σ)

    σ字段条件(表名)

  2. 投影(Π)

    Π想要显示的列(表名)

  3. 连接(⨝)

    自然连接:关系1⨝关系2

注:关系代数中,选择相当于sql语句中的where,投影相当于sql语句中的select

一般流程为:将表自然连接后,用选择筛出符合条件的表,再用投影筛出自己想要的列


第三章

SQL大致分为:QL(查询语言)DML(数据操纵语言)DDL(数据定义语言)DCL(数据控制语言)TC(事务控制)


QL

SELECT
DISTINCT 列名|*|表达式 别名
FROM
表名|试图名|子查询 别名
WHERE
条件表达式  >   <   >=   <=   <>(不等于!=仍可用)
in    between……and……    like     or     not     is null
GROUP BY
列名|表达式
sum()   avg()    count()   max()   min()
HAVING
限制组的条件表达式
ORDER BY 
列名|别名|列序号 desc倒序 
CASE expr WHEN 值1 THEN 返回值1
                WHEN 值2 THEN 返回值2
                ……
                ELSE 返回值
END

CASE WHEN 条件1 THEN 返回值1
          WHEN 条件2 THEN 返回值2
          ……
          ELSE 返回值
END

连接标准写法

from a left  join b
on a.col = b.col

自链接

select q.ename,l.ename
from emp w,emp l
where w.领导号=l. 员工号

子查询(嵌套查询) 单行子查询 < > >= <= = <> 多行子查询 in any all 相关子查询 查询工资比其所在部门平均工资还高的员工

select ename,salary,dept_id
from emp e
where salary>(select avg(salary)
                    from emp
                    where dept_id=e.dept_id)

思路就是 ,查询第一个人的部门为参数,计算这个部门的平均工资,在对比。以此循环 相关子查询的改写

select ename,salary,dept_id
from emp e,(select dept_id ,avg(salary) avgsal
                 from emp
                 group by dept_id) a                                                     
where e.dept_id=a.dept_id
and e.salary>a.avgsal

改写的思路是,分组部门获取每一个部门平均工资作为新表,把新旧表链接,在对比

集合运算 并 交 差 union/union all(不去重,不排序) intersect minus

交 与 差 两种集合运算符在MySql无效,需通过相关子查询实现

select …… union select ……


DDL

create

alter

drop

tuncate table 表名


DML

insert into 表名
values (值1,值2,值3……)

delete 表名
where 条件

update 表名
set 列=值,列=值,……
where 条件

DCL

grant 权限
on 对象
to 用户|角色

revoke 权限
on 对象
from 用户|角色

第五章

完整性约束

  1. 实体完整性

    实体完整性约束就是对事物进行区分的唯一属性,在数据库中通常通过非空主键(primary key)来体现

  2. 参照完整性

    参照完整性指的是关系与关系之间的联系,即表与表之间的联系,通常对应表中的外键约束或外键引用(Foreign Key)

  3. 用户自定义完整性

    用户定义的完整性,针对的是某一个具体使用的数据库中的约束条件。反映的是具体应用、具体业务或场景,涉及的数据必须满足的要求。

    这类约束的实现,可以放在应用层完成检查校验;也可以由关系数据库管理系统,提供对这类完整性定义、实现和检验的机制,由数据库系统层统一管理和处理,减少应用程序的负担

    例如电话号码,身份证的有效性检验


第六章

范式

关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式

一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化

个人理解:范式的存在就是为了消除数据冗余

  1. 第一范式:无重复的列

  2. 第二范式:属性完全依赖于主键

    注:如果出现了联合主键(例如:学号和学生姓名,课程号和课程名)同时出现一张表中,存在部份依赖,不符合第二范式

  3. 第三范式:要求一个数据库表中不包含已在其它表中已包含的非主关键字信息

  4. BC范式:

    与2NF,3NF的定义不同,BCNF的定义直接建立在1NF的基础上。但实质上BCNF是3NF的改进形式。3NF仅考虑了非主属性对键的依赖情况,BCNF把主属性对键的依赖情况也包括进去。BCNF要求满足的条件比3NF所要求的更高。如果关系模式R是BCNF的,那么R必定是3NF,反之,则不一定成立。


模式的分解

模式分解的三个定义:

  1. 分解具有无损连接性
  2. 分解要保持函数依赖
  3. 分解既要保证无损连接性,也要保持函数依赖

这三个定义是实行分解的三条不同的准则。按照不同的分解准则,模式所能达到的分离程度各不相同,各种范式就是对分离程度的测度


第七章

数据库的设计中分为以下五个步骤

  1. 需求分析
  2. 概念结构设计
  3. 逻辑结构设计
  4. 物理结构设计
  5. 数据库的实施与维护

需求分析

需求分析的任务

调查的重点是“数据”和“处理”,通过调查、收集与分析,获得用户对数据库的如下要求

  1. 信息要求
  2. 处理要求
  3. 安全性与完整性要求
需求分析的方法

调查步骤

  1. 调查组织机构情况
  2. 调查各部门的业务活动情况
  3. 在熟悉业务活动的基础上,协助用户明确对新系统的各种要求
  4. 确定新系统的边界

调查方法

  1. 跟班作业
  2. 开调查会
  3. 请专人介绍
  4. 询问
  5. 设计调查表请用户填写
  6. 查阅记录
数据字典

关于数据库中数据的描述,即元数据,而不是数据本身。数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善的。它在数据库设计中占有很重要的地位

  1. 数据项
  2. 数据结构
  3. 数据流
  4. 数据存储
  5. 处理过程

概念结构设计

ER模型

实体之间的联系:

  1. 一对一联系
  2. 一对多联系
  3. 多对多联系
ER图

E-R 图提供了表示实体型、属性和联系的方法

  1. 实体型用矩形表示,矩形框内写明实体名
  2. 属性用椭圆形表示,并用无向边将其与相应的实体型连接起来
  3. 联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来在无向边旁标上联系的类型(1:1、1:n或m:n)

各子系统的 E-R图之间的冲突主要有三类:属性冲突、命名冲突和结构冲突


逻辑结构设计

逻辑结构设计的任务就是把概念结构设计阶段设计好的基本 E-R 图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构

设计步骤:

  1. 一个实体型转换为一个关系模式
  2. 一个 1:1 联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并
  3. 一个 1:n 联系可以转换为一个独立的关系模式,也可以与 n 端对应的关系模式合并
  4. 一个 m:n 联系转换为一个关系模式
  5. 三个或三个以上实体间的一个多元联系可以转换为一个关系模式
  6. 具有相同码的关系模式可合并

注:数据库逻辑设计的结果不是唯一的,且并不是规范化程度越高的关系就越优


物理结构设计

为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计

设计步骤:

  1. 确定数据库的物理结构
  2. 对物理结构进行评价

数据库的实施与维护

数据库应用程序的设计应该与数据库设计同时进行

要注意两点:

  1. 在数据库试运营时,先输入小批量数据做调试用,待试运行基本合格后再大批量输入数据,逐步增加数据量,逐步完成运行评价
  2. 要做好数据库的转储和恢复工作

第十章

故障的种类

  1. 事务内部的故障

    一小部分由事务程序发生的故障是可以由程序本身发现的,会直接让事物回滚(ROLLBACK)

    绝大多数的事务内部故障是非预期的,是不能由应用程序处理的(一般都指的是此类故障)

    事物撤销(UNDO)

  2. 系统故障

    系统故障是指造成系统停止运转的任何事件,使得系统要重新启动

    重做(REDO)

各类故障对数据库的影响有两种可能性:

  1. 数据库本身被破坏
  2. 数据库没有被破坏,但数据可能不正确

恢复的基本原理就是利用冗余


恢复的实现技术

建立冗余数据最常用的技术是数据转储和登记日志文件 (logging)

数据转储

数据转储有两种方式,分别可以在两种状态下进行,因此数据转储方法可以分为4类:动态海量转储、动态增量转储、静态海量转储和静态增量转储

个人理解:数据转储就是整盘备份,可以恢复到备份时间点后在运行所有更新事务

日志文件

日志文件是用来记录事务对数据库的更新操作的文件

日志文件中需要登记的内容包括:

  • 各个事务的开始(BEGINTRANSACTION)标记
  • 各个事务的结束(COMMIT或ROLLBACK)标记
  • 各个事务的所有更新操作

为保证数据库是可恢复的,登记日志文件时必须遵循两条原则:

  • 登记的次序严格按并发事务执行的时间次序
  • 必须先写日志文件,后写数据库

第十一章

并发控制概述

事务是并发控制的基本单位

并发控制机制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性

发控制的主要技术有封锁(locking)、时间戳(timestamp)、乐观控制法(optimisticscheduler)和多版本并发控制(multi-version concurrency control,MVCC)等


封锁

排他锁又称为写锁

共享锁又称为读锁

个人理解:写锁只能有一把,但是读锁可以由多把


活锁与死锁

活锁

活锁最简单的解决方法就是使用队列

死锁

出现T1在等待 T2,而T2又在等待T1的局面,T1和T2,两个事务永远不能结束,形成死锁

数据库系统中诊断死锁有两种方法

  1. 超时法

  2. 事务图等待法

    如果事务图形成回路,则发生死锁

死锁的情况可以多种多样,死锁解决的方法就是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的锁,使其他事务得以继续运行下去


两端锁协议

两段锁 (TwoPhase Locking,简称2PL)

第一阶段是获得封锁,也称为扩展阶段

第二阶段是释放封锁,也称为收缩阶段

事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件


封锁的粒度

封锁对象的大小称为封锁粒度(granularity)

封锁对象可以是逻辑单元,也可以是物理单元

封锁粒度与系统的并发度和并发控制的开销密切相关