数据库系统原理-笔记

c4bQgg.jpg

数据库基本概念

数据

数据(Data)是描述事物的符号记录

数据库

数据库(Database, DB)是长期存储在计算机内、有组织的、可共享的大量数据集合

数据库管理系统

数据库管理系统(Database Management System, DBMS)是位于用户与操作系统之间的一层数据管理软件

主要功能

  1. 数据库的定义功能
    • 提供数据定义语言(DDL)定义数据库中的数据对象
  2. 数据库的操纵功能
    • 提供数据操纵语言(DML)操纵数据实现对数据库的基本操作
  3. 数据库的运行管理
  4. 数据组织、存储和管理
  5. 数据库的建立和维护
  6. 数据通信接口

数据库系统

数据库系统(Database System, DBS)是指在计算机中引入数据库技术之后的系统, 通常一个完整的数据库系统包括数据库、数据库管理系统及相关实用工具、应用程序、数据库管理员和用户

数据库管理员(Database Administrator, DBA)专门负责对数据库进行维护, 并保证数据库正常、高效运行

数据库管理技术的发展

数据管理技术发展的三个阶段

阶段共享程度冗余程度独立性结构化
人工管理阶段无共享冗余度极大不独立记录内无结构, 整体无结构
文件系统阶段共享性差冗余度大独立性差, 数据的逻辑结构改变必须修改应用程序记录内有结构, 整体无结构
数据库系统阶段共享性高冗余度低数据独立性高整体结构化

数据库系统阶段的特点

  1. 数据集成
  2. 数据共享性高
  3. 数据冗余度低
  4. 数据一致性
  5. 数据独立性高
  6. 实施统一管理与控制
  7. 减少应用程序开发与维护的工作量

数据库系统的结构

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

  1. 模式
    • 模式也称为概念模式或逻辑模式它是数据库中全体数据的逻辑结构和特征的描述, 是所有用户的公共数据视图
  2. 外模式
    • 外模式也称为子模式或用户模式它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述
  3. 内模式
    • 内模式也称为存储模式, 它是对数据库中数据物理结构和存储方式的描述, 是数据在数据库内部的表示形式
  4. 三级模式结构的两层映像与数据独立性
    1. 外模式/模式映像(逻辑独立性)
    2. 模式/内模式映像(物理独立性)
    3. 数据独立性是指保证了逻辑独立性与物理独立性

数据模型

数据模型组成三要素

  1. 数据结构
  2. 数据操作
  3. 数据完整性约束条件

数据模型的分类

概念层数据模型

  1. 实体
    • 客观存在并可相互区别的事务称为实体, 可以是具体的人、事、物或抽象的概念
  2. 属性
    • 实体所具有的某一特性称为属性, 一个实体可以由若干个属性来刻画
    • 唯一表示实体的属性集称为码
    • 属性的取值范围称为属性的域
  3. 实体型
    • 用实体名及其属性名集合来抽象和刻画, 同类实体称为实体型
  4. 实体集
    • 同型实体的集合称为实体集
  5. 联系
    • 现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系(1:1、1:N、M:N)

概念模型的表示方法

概念模型: 用来描述现实世界的事物, 与具体的计算机系统无关

最典型的概念模型实体联系(E-R)

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

逻辑层数据模型

逻辑模型按数据结构不同分为

  • 层次模型(树形结构)
  • 网状模型(图结构)
  • 关系模型(规范化的二维表)
  • 面向对象模型

物理层数据模型

物理层数据模型, 也称为数据的物理模型, 其描述数据在存储介质上的组织结构, 是逻辑模型的物理实现, 即每一种逻辑模型在实现时都有与其相对应的物理模型

关系数据库

关系数据库是建立在关系模型基础上的数据库

关系数据库的基本特征是: 使用关系数据模型组织数据

关系数据结构

关系: 规范化的二维表

基本术语

  1. 表(关系)
  2. 列(字段、属性)
  3. 行(元组、记录)
  4. 分量: 元组中的一个属性值
  5. 码(键): 表中的某个属性组, 它可以唯一确定一个元组
  6. 候选码(候选键): 能唯一标识一个元组最小的属性组
  7. 主码(主键): 如果一个关系有多个候选键, 则选定其中的一个作为主键, 主键可以包含多个属性
  8. 主属性: 候选键中的各个属性称作主属性
  9. 非主属性: 不包含在任何候选键中的属性称为非主属性或非码属性
  10. 外码(外键): 某个属性不是这个关系的主码或候选码, 而是另一关系的主码
  11. 关系数据库: 关系数据库是以关系模型作为数据的逻辑模型的一类数据库

关系操作集合

特点: 集合操作方式

基本的关系操作

  • 查询: 选择、投影、连接、除、并、交、差、笛卡尔积
    • 选择、投影、并、差、笛卡尔积是5种基本操作
  • 数据更新: 插入、删除、修改

  • 关系操作的特点

    • 集合操作方式: 操作的对象和结果都是集合, 一次一集合的方式

关系数据语言的分类

  • 代数方式: 关系代数
  • 逻辑方式: 关系演算
关系代数的运算符
运算符含义
集合运算符$\cup$
$-$
$\cap$
$\times$笛卡尔积
专门的关系运算符$\sigma$选择
$\pi$投影
$\Join$连接
$\div$
连接
  • 等值连接: 任意属性列做相等运算, 不去掉重复的属性列

  • 自然连接: 在公共的属性上做等值连接, 并去掉重复的属性列

  • 左外连接: 在自然连接的基础上加上左边表上不包含自然连接中所含元组的元组, 没有属性的列补空值
  • 右外连接: 在自然连接的基础上加上右边表上不包含自然连接中所含元组的元组, 没有属性的列补空值
  • 全连接: 左连接 + 右连接

关系的三类完整性约束

三类完整性约束

  • 实体完整性
    • 主码唯一且不能为空, 主属性不能取空值
  • 参照完整性
    • 外键可以为空, 或等于被参照关系中某个元组的主码值
  • 用户定义的完整性
    • 用户针对某一具体关系数据库的约束条件, 反映某一具体应用所涉及的数据必须满足语义要求

关系模型必须满足实体、参照完整性约束条件

SQL

SQL 的特点

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

SQL 语言的命令分类

  1. 数据定义语言(DDL)
    • create 创建对象
    • alter 更新数据对象的定义
    • drop 删除数据
  2. 数据操作语言(DML)
    • select 数据检索
    • insert 插入数据行
    • update 修改数据
    • delete 删除数据行
  3. 数据控制语言(DCL)
    • grant 授予权限
    • revoke 收回权限

SQL 语言的数据控制功能

SQL 语言提供了数据控制功能, 能够在一定程度上保证数据库中数据的:

  • 完整性
    • 指数据库中数据的有效性、正确性、相容性
  • 并发控制
    • 当多个用户并发地对数据库进行操作时, 对他们加以控制、协调, 以保证并发操作正确执行, 并保持数据库的一致性
  • 恢复
    • 当发生各种类型的故障, 使数据库处于不一致状态时, 将数据库恢复到一致状态的功能
    • SQL 语言提供了恢复的功能, 支持事物、提交、回滚等概念
  • 安全性
    • 保护数据库, 防止不合法的使用所造成的数据泄露和破坏
    • 数据库系统保证数据安全性的主要措施: 进行存储控制

DMBS 实现存储控制的过程

用户或 DBA 把授权决定告知系统, 这是由 SQL 的grantrevoke语句来完成的

DBMS 把授权的结果存入数据字典

当用户提出操作请求时, DBMS 根据授权情况进行检查, 以决定是否执行操作请求

视图的特点

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

索引

建立索引是加快查询速度的有效手段

primary keyunique都会自动建立索引

索引类型:

  1. 普通索引
  2. 唯一索引
  3. 主键索引

数据库设计

数据库设计的 5 个阶段

  1. 需求分析阶段
  2. 结构设计阶段(其中包括概念结构设计、逻辑结构设计、物理结构设计)
  3. 行为设计阶段(其中包括功能设计、事务设计、程序设计)
  4. 数据库的实施阶段
  5. 数据库的运行和维护阶段

需求分析的工作步骤

  1. 分析用户活动, 产生业务流程图
  2. 确定系统范围, 产生系统关联图
  3. 分析用户活动涉及的数据, 产生数据流图
  4. 分析系统数据, 产生数据字典

关系数据库的规范化理论

函数依赖

定义: 设 R 为任一给定关系, 如果对于 R 中属性 $X$ 的每一个值, R 中的属性 $Y$ 只有唯一值与之对应, 则称 $X$ 函数决定 $Y$ 或称 $Y$ 函数依赖于 $X$, 记作 $X\to Y$

其中, $X$ 称为决定因素

  1. 部分函数依赖
    • 设 R 为任一给定函数, $X$、$Y$ 为其属性集, 若 $X\to Y$, 且 $X$ 中存在一个真子集 $X’$ 满足 $X’\to Y$, 则称 $Y$ 部分函数依赖于 $X$
  2. 传递函数依赖
    • 设 R 为任一给定关系, $X$、$Y$、$Z$ 为其不同属性子集, 若 $X\to Y$, $Y\not\to X$, $Y\to Z$, 则有 $X\to Z$, 称为 $Z$ 传递函数依赖于 $X$

范式

第一范式(1NF): 存在部分函数依赖

  • 如果一个关系模式 R 的所有属性都是不可再分的基本数据项, 则 R 属于 1NF

第二范式(2NF): 消除非主属性对码的部分函数依赖

  • 若关系模式 R 属于 1NF, 且不存在非主属性对码的部分函数依赖, 则 R 属于 2NF

第三范式(3NF): 消除非主属性对码的传递函数依赖

  • 若关系模式 R 属于 2NF, 且不存在非主属性对码的传递函数依赖, 则称 R 属于 3NF

BCNF: 消除主属性对码的部分和传递函数依赖

  • 若关系模式 R 属于 3NF, 且每一个决定属性集都包含候选码, 则 R 属于 BCNF

1NF/2NF/3NF 可能产生的问题:

  1. 数据冗余
  2. 更新异常: 应该更新的数据未能更新
  3. 插入异常: 应该插入的数据未能插入
  4. 删除异常: 应该删除的数据未能删除

并发控制

事务

事务是用户定义的一个数据库操作序列, 这些操作要么全做, 要么不做, 是一个不可分割的工作单位

事务和程序是两个概念:

  • 在关系数据库中, 一个事务可以是一条 SQL 语句, 一组 SQL 语句或整个程序
  • 一个应用程序通常包含多个事务

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

事务的 ACID 特性:

  • 原子性
    • 事务中包括的所有操作要么全做, 要么都不做
  • 一致性
    • 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
  • 隔离性
    • 一个事务的执行不能被其他事务干扰
  • 持续性(永久性)
    • 一个事务一旦提交, 它对数据库中数据的改变就应该是永久性的

commit 和 rollback 的区别

commit

  • 事务正常结束
  • 提交事务的所有操作
  • 事务中所有对数据库的更新永久生效

rollback

  • 事务异常终止
  • 事务运行的过程中发生了故障, 不能继续执行, 回滚事务的所有更新操作
  • 事务回滚到开始时的状态

并发操作与数据的不一致

并发操作带来的数据不一致性问题

  • 丢失更新
  • 不可重复读
  • 读”脏”数据

可串行化的调度

当且仅当其结果与按某一次序串行地执行它们时的结果相同, 称这种调度策略为可串行化调度

可串行性是并行事务正确性的唯一准则

封锁

封锁是事务T在对某个数据对象(例如表、记录等)操作之前, 先向系统发出请求, 对其加锁

加锁后事务T就对该数据对象有了一定的控制, 在事务T释放它的锁之前, 其他的事务不能更新此数据对象

封锁类型

  • 排它锁(X 锁、写锁)
  • 共享锁(S 锁、读锁)

封锁粒度

封锁对象的大小称为封锁的粒度

  • 对整个数据库加锁
  • 对某个属性值加锁

三级封锁协议

  • 1 级封锁协议
    • 事务 T 在修改数据 R 之前必须先对其加 X 锁, 直到事务结束才能释放
    • 可防止丢失更新, 并保证事务 T 是可恢复的, 但不保证可重复读不读“脏”数据
  • 2 级封锁协议
    • 1 级封锁协议加上事务 T 在读取数据 R 之前必须先对其加 S 锁, 读完后即可释放 S 锁
    • 可防止丢失更新读“脏”数据, 但不保证可重复读
  • 3 级封锁协议
    • 1 级封锁协议加上事务 T 在读取数据 R 之前必须先对其加 S 锁, 直到事务结束才释放
    • 可防止丢失更新、读“脏”数据、不可重复读

两段锁协议

两段锁协议是指每个事务的执行可以分为两个阶段: 生长阶段(加锁阶段)和衰退阶段(解锁阶段)

加锁阶段: 在该阶段可以进行加锁操作, 在对任何数据进行读操作之前要申请并获得 S 锁, 在进行写操作之前要申请并获得 X 锁, 加锁不成功则事务进入等待状态, 直到加锁成功才继续执行

解锁阶段: 当事务释放了一个封锁以后, 事务进入解锁阶段, 在该阶段只能进行解锁操作, 不能再进行加锁操作

活锁和死锁

活锁

系统可能使某个事务永远处于等待状态, 得不到封锁的机会, 这种现象称为“活锁”

如何避免活锁?

  • 采用先来先服务的策略
    • 当多个事务请求封锁同一数据对象时, 封锁子系统按请求封锁的先后次序对这些事务排队
    • 该数据对象上的锁一旦释放, 首先批准申请队列中第一个事务获得锁

死锁

系统中有两个或两个以上的事务都处于等待状态, 并且每个事务都在等待其中另一个事务解除封锁, 它才能继续执行下去, 结果造成任何一个事务都无法继续执行, 这种现象称为系统进入了“死锁”状态

解决死锁的两类方法

  1. 死锁的预防
    • 一次封锁法
    • 顺序封锁法
    • 序列化处理
    • 资源剥夺
  2. 死锁的诊断与解除
    • 超时法
    • 等待图法

故障和恢复

数据库的可恢复性

故障恢复: 系统能把数据库从被破坏、不正确的状态恢复到最近一个正确的状态

事务故障的类型

  • 事务故障
    • 某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了
  • 系统故障
    • 由于某种原因造成整个系统的正常运行突然停止, 致使所有正在运行的事务都以非正常方式终止
  • 介质故障
    • 硬件故障使存储在外存中的数据部分丢失或全部丢失

恢复的实现技术

恢复方法: 数据库备份 + 数据库日志

  • 事务故障: 回滚到事务之前的一致性状态

  • 系统故障: 撤销未完成事务,重做已完成事务

  • 介质故障: 重新安装,重做所有事务

恢复技术的原理

  • 利用存储在系统其它地方的冗余数据来修复或重建数据库中被破坏的或不正确的数据

存储过程的基本概念

存储过程是一组为了完成某项特定功能的 SQL 语句, 其实质上就是一段存储在数据库中的代码, 它可以由声明式的 SQL 语句和过程式的 SQL 语句组成

使用存储过程的优点:

  1. 高性能
  2. 增强 SQL 的功能和灵活性
  3. 减少网络流量
  4. 良好的封装性
  5. 可作为一种安全机制来确保数据库的安全性和数据的完整性

存储过程存储函数的区别:

  • 存储过程没有返回值类型, 存储函数有返回值类型
  • 存储过程不能使用return返回值, 存储函数可以使用return返回值
  • 存储过程声明用procedure,存储函数声明用function
  • 使用call语句来调用存储过程, 存储函数可直接调用

注: 存储函数和存储过程都可以使用 outin/out 返回值, 所以存储过程也可以有返回值

存储过程体

局部变量

声明局部变量必须使用declare语句

为局部变量赋值使用set关键字

触发器

触发器的特点:

  • 在触发器的创建中, 每个表每个事件每次只允许一个触发器

  • 在删除一个表的同时, 会自动地删除该表上的触发器

  • 触发器不能更新或覆盖(若要修改, 必须先删除后, 再重新创建)

  • 表发生增(insert)、删(delete)、改(update)时触发器被触发

  • 一个表最多有6个触发器

触发器是保证数据完整性的一种方法,它的执行不是由程序调用,也不是手工启动,而是由事件来触发

随笔

数据库的生命周期分为数据库设计阶段数据库实现与操作阶段

WAMP: 即使用 windows 作为操作系统, apache 作为 web 服务器, mysql 作为数据库管理系统, php 或 python 语言作为服务器端脚本语言解释器

数据冗余是产生数据不一致的根本原因

实体属性分为标识属性说明属性两类

SQL 调用包括 SQL 例程调用规则, 以便提高 SQL 的灵活性、有效性、共享性以及使 SQL 具有更多的高级语言的特征

定义事务的三条语句:

  • begin transaction: 开始
  • commit: 正常结束
  • rollback: 异常结束

在 MySQL 中, 可以使用declare cursor_name cursor for语句创建游标

  1. 游标只能用于存储过程存储函数中, 不能单独在查询操作中使用
  2. 存储过程存储函数中可以定义多个游标, 但是在一个begin...end语句块中每一个游标的名字必须是唯一的
  3. 游标不是一条select语句, 是被select语句检索出来的结果集
  4. 使用open cursor_name打开游标, 一个游标可以多次打开
  1. 第一代数据库
    • IMS, 层次模型
    • CODASYL, 网状模型
  2. 第二代数据库
    • 关系数据库
  3. 第三代数据库
    • OODB, 面向对象模型

数据仓库的特征

  1. 面向主题
  2. 集成性
  3. 数据的非易失性
  4. 数据的时变性

OLTP

  • 主要用于操作处理
  • 面向事务、应用

OLAP

  • 主要用于信息处理
  • 面向分析、主题

数据仓库三个重要概念: 粒度、分割、维

数据挖掘具备的功能:

  1. 概念描述
  2. 关联分析
  3. 分类与预测
  4. 聚类
  5. 孤立点检测
  6. 趋势和演变分析
-------------本文结束感谢阅读-------------