基本概念
数据库系统的特点
数据库(Database):有组织、冗余度小,可共享、数据独立性高、易扩展的数据集合。
� 数据长期存储
� 数据由DBMS统一管理
� 数据共享程度高
� 数据独立性高
� 数据整体结构化,冗余小
DBMS的基本功能
1. 数据库定义:定义外模式、 模式、 内模式、 数据库完整性、 安全保密、 存取路径等
2. 数据存取:提供数据的操纵语言以便对数据进行查找和增删改
3. 数据库运行管理:事务管理、 自动恢复、 并发控制、 死锁检测或防止、 安全性检查、 存取控制、 完整性检查、 日志记录等
4. 数据组织、 存储和管理:数据字典、 用户数据、 存取路径的组织存储和管理, 以便提高存储空间利用率, 并方便存取
5. 数据库的建立和维护:数据转换、 数据库初建、 转储、 恢复、 重组、 重构以及性能检测等
6. 网络通信、 数据转换等
DBMS的体系结构
• 事务管理器
– 将关于事务动作的消息传给日志管理器
– 将关于何时可以或必须将缓冲区拷回磁盘的消息传给缓冲区管理器
– 将数据库查询等操作消息传给查询处理器
• 恢复管理器
– 当系统崩溃时, 恢复管理器被激活
– 它检查日志并在必要时利用日志恢复数据
• 日志管理器
– 维护日志, 记录所有对数据库的修改操作
– 必须与缓冲区管理器打交道, 因为对磁盘的访问是通过缓冲区管理器来进行的
• 缓冲区管理器
– 分配、 管理和回收缓冲区
– 决定何时将缓冲区的数据写回磁盘( 立即修改/延迟修改)
数据库系统结构
数据库的三级模式结构
外模式(所有用户的公共数据视图)、模式(数据库用户的数据视图,是与某一应用有关的数据的逻辑表示)、内模式(数据物理存储和存储方式的描述)
通过三级模式结构实现了数据独立性
关系模型
关系模型的组成要素及其优缺点
组成要素
数据结构:关系(二维表)
数据操作:查询 / 增 / 删 / 改
完整性约束条件:实体 / 参照 / 用户自定义
优点
关系模型是建立在严格的数学概念的基础上的。无论实体还是实体之间的联系都用关系来表示。对数据的查询结果也是关系(表),因此概念单一,其数据结构简单、清晰。
关系模型的存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
缺点
由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的负担。
关系模型的完整性约束条件及违约处理策略
实体完整性、参照完整性、用户自定义完整性
违约处理
1. 实体完整性检查和违约处理
插入元组或修改主码列操作时, DBMS自动检查和处理:
• 主码值是否唯一, 如果不唯一则拒绝操作
• 主码各属性是否为空, 只要有一个为空就拒绝操作
2. 可能破坏参照完整性的情况及违约处理
3. 用户定义的约束条件检查和违约处理
– 插入元组或修改属性的值时, DBMS检查属性上的
约束条件是否被满足
– 如果不满足则操作被拒绝执行
关系操作
关系代数
特点
– 运算对象和运算结果均关系
– 关系代数运算符包含集合运算符和专门的关系运算符
– 传统的集合运算是从关系的行的角度进行,专门的关系运算不仅涉及行而且涉及列
专门的关系运算:选择、投影、连接(等值连接、自然连接、外连接)、除运算
SQL语句
关系数据理论
如何评判数据库设计的好坏?(数据冗余、 操作异常)
数据冗余、 插入异常、 删除异常、 更新异常
1NF、 2NF、 3NF(定义、 判断)
数据依赖的公理系统(Armstrong公理、 最小函数依赖集 )
最小函数依赖集是指没有任何冗余的函数依赖集
性质: 函数依赖集F的最小函数依赖集不一定唯一, 它与求解的次序有关
定理: 每一个函数依赖集F均等价于一个最小依赖集F'
数据库设计
数据库设计的步骤及各阶段完成的任务
各阶段的具体任务
• 需求分析阶段 : 准确、 全面和深入地了解和分析用户需求, 包括数据需求和处理需求。
• 概念结构设计阶段 : 通过对用户需求进行综合、归纳和抽象, 形成一个独立于具体数据库管理系统的概念模型。
• 逻辑结构设计阶段 : 将概念结构转换为某个数据库管理系统所支持的数据模型, 并对其进行优化。
• 数据库物理设计阶段 : 为逻辑数据模型选取一个最适合应用环境的物理结构。
• 数据库实施阶段: 运用数据库管理系统提供的数据语言及其宿主语言, 根据逻辑设计和物理设计的结果建立数据库, 编制和调试应用程序, 组织数据入库, 并进行试运行。
• 数据库运行和维护阶段 : 数据库系统在运行过程中必须不断地对其进行评价、 调整和修改。
E-R图设计及其到关系模式的转换
– 实体——矩形
– 属性——椭圆形
– 联系——菱形
– 关键字—下划线
E-R 模型向关系模型的转换规则
• 一个实体型转换为—个关系模式
• 一个1:1联系可以转换为一个独立的关系模式,也可以与任意对应的关系模式合并
• 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并
• 一个m:n联系转换为一个关系模式
• 三个或三个以上实体间的一个多元联系可以转换为一个关系模式
• 具有相同码的关系模式可以合并
存储与索引
计算机系统的存储体系及工作原理
查询处理与优化
关系查询处理的步骤
事务及其ACID特性
事务( Transaction)
– 用户定义的一个对数据库读写操作序列
– 是数据库中不可分割的执行单位
– 是数据库恢复和并发控制的基本单位
– 数据库系统中通常有多个事务并行运行
ACID特性
• 原子性(Atomicity)
– 事务中的操作要么都做, 要么都不做 (All or None)
• 一致性(Consistency)
– 事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态
– 与原子性密切相关
• 隔离性(Isolation)
– 并发执行的各事务不能相互干扰
• 持久性(Durability)
– 事务一旦提交, 它对数据库的更新不再受后继操作或故障的影响
★ DBMS中事务处理必须保证其ACID特性, 这样才能保证数据库中数据的安全和正确
★ 保证事务正确执行是事务管理器的工作
数据库恢复
故障种类及其可能对数据库造成的影响
故障种类
• 事务故障
– 错误输入、 运算溢出等导致事务中断
– 这些错误有些是不可检测(如电话号码输错了1位), 有些是可以检测(如电话号码输漏了1位)
– 通过用户定义约束、 DBMS检查约束并启动触发器的方法可以捕捉并处理那些可被检测的错误
• 介质故障
– 若只是局部的故障, 通常能通过磁盘扇区的奇偶校验检测到
– 若磁头损坏, 将使整个磁盘无法访问, 常采用的解决方法是某种RAID模式、 备份、 冗余分布拷贝等
• 系统故障
– 由于系统重启、 OS软件故障、 DBMS代码错误、 掉电等造成
– 导致正在执行的事务状态丢失, 原因是内存的易失性
– 解决方法是在分离的、 非易失性的日志中记录所有数据库更新, 必要时进行恢复
可能对数据库造成的影响
• 数据库本身被破坏, 使数据库中全部或部分数据丢失
– 如系统故障、 介质故障等
• 数据库没有被破坏, 但因事务的运行被非正常终止而使数据库数据失去一致性(正确性)
– 如事务内部故障、 系统故障等
恢复的实现技术(转储、 日志、 检查点)
• 数据库恢复的基本原理
– 利用存储在系统别处的冗余数据来重建
• 冗余数据包括
– 日志文件
– 数据备份
事务的原子性与日志
• 事务的原子性: 事务要么作为一个整体被执行, 要么根本不执行。
• 日志是一个日志记录的序列, 每个日志记录记录这某个事务的重要操作( 开始、 更新、 提交或中止等) 。 日志的增长速度非常快。
• 事务的交错执行使日志更复杂, 仅在事务结束后记录事务的全过程是不够的。
• 在数据库恢复时, 对故障发生时已提交的事务进行重做(Redo), 对未提交的事务进行撤销(Undo), 从而保证所有事务的原子性。
• 恢复管理器的第一个任务就是将所有事务划分为已提交事务和未提交事务两类。
支持Undo和Redo的日志记录
Undo日志规则
(1) 对每一个更新操作都生成一条undo日志记录
(2) 如果事务改变了数据库元素x, 那么日志记录必须在
x的新值写回磁盘之前写到磁盘 (write aheadlogging,WAL);
(3) 如果事务提交, 则其Commit日志记录必须在事务改变的所有数据库元素已写到磁盘后再写磁盘。
推断: 如果事务T的Commit日志记录已到达磁盘,该事务一定已经完成。
使用Undo日志的恢复
系统故障的恢复策略
系统故障( 造成主存中的临时数据丢失)
介质故障( 造成磁盘中的数据丢失)
解决方法: 数据库备份( archive) , 即维护一个与数据库本身分离的数据库拷贝。
前提: 备份以来的日志被保存, 且日志自身在故障后仍存在。
并发控制
并发操作可能造成的数据不一致现象及其原因
• 导致数据库状态不一致的可能原因
– 故障发生
– 并发事务对数据的共享
• 并发操作可能引起的数据不一致
– 现象: 丢失修改、 不可重复读、 读脏数据
– 原因: 事务的隔离性被破坏, 事务间相互干扰
可串行化调度的定义
• 可串行性: 多个事务的并发执行是正确的, 当且仅当其结果与按某一次序串行地执行它们时的结果相同。
• 可串行性是并发事务操作是否正确的判别准则。
• 为了保证并发执行的事务能保持数据库的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。
• 并发控制的思想: 调度器可能推迟一些操作的执行, 甚至可能中断一个事务。
冲突可串行化调度的定义及判断方法
• 冲突的操作: 涉及同一数据元素, 且至少有一个写操作
• 如果通过一系列相邻动作的非冲突交换能将他们中的一个转换为另一个, 我们说两个调度是冲突等价的。
• 如果一个调度冲突等价于一个串行调度, 我们说该调度是冲突可串行化的。
• 冲突可串行化调度是可串行调度的充分条件,是商用系统中的事务调度器在需要保证可串行性时通常使用的条件。
封锁协议及事务隔离程度
• 一级封锁协议
– 事务T在修改数据R之前须先对其加X 锁, 直至事务结束
– 可解决丢失修改问题
• 二级封锁协议
– 读数据前加S锁, 读完即释放
– 写数据前加X锁直至事务结束
– 可解决丢失修改和读脏数据问题
• 三级封锁协议
– 读数据前加S锁直至事务结束
– 写数据前加X锁直至事务结束
– 可解决丢失修改、 读脏数和不可重复读问题