规范化理论:通过分解关系模式来消除不合适的数据依赖,以解决增删改异常和数据冗余问题
规范化:
1函数依赖:X→Y,x值确定后y的值也确定
2非平凡的函数依赖:有X→Y,但Y不属于X
平凡的函数依赖: X→Y,但Y属于X
3 完全函数依赖:
4 传递依赖:
范式:符合某一种级别的关系模式的集合
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合 称为规范化
- 1NF:关系模式R的所有属性都是不可再分的基本数据项
- 2NF:属于1NF且每个非主属性都完全依赖于R的码。
- 3NF:不存在非主属性对码的传递函数依赖。可以采用投影分解法
- BCNF:如果对于R的每个函数依赖的决定因素都含有码
R属于3NF且R只有一个候选码则R必属于BCNF
3NF
BCNF
BCNF消除了插入和删除异常
数据依赖的公理系统:
从函数依赖中推导出新的函数依赖关系:新的关系称为逻辑蕴含
函数的闭包:
属性集的闭包:
最小依赖集(可能不唯一)
极小化过程:
模式分解等价的两个标准:保持函数依赖和无损分解
数据库设计
六个步骤及主要工作:
1需求分析:了解与分析用户的需求;关于数据的描述是元数据而不是数据本身,数据字典在此阶段建立
2概念结构设计:对用户需求进行综合、归纳、抽象,形成独立于具体DBMS的概念模型。即E-R模型设计:能作为属性尽量作为属性;属性必须不可分;属性不能与实体有联系,联系只发生在实体之间
3逻辑结构设计:将概念结构转换为某个DBMS支持的数据模型并优化
4物理结构设计:为逻辑模型选取一个最适合应用环境的物理结构
5实施:建立数据库,编写调试程序,数据入库,试运行
6运行与维护:不断对其进行评价,调整,修改
概念结构设计:
视图集成:将多个分E-R图一次或逐步集成。步骤:1、消除冲突(冲突种类:属性冲突-属性域冲突、属性取值单位冲突;命名冲突-同名异义、异名同义;结构冲突)2、消除冗余(消除不必要的冗余后的初步E-R图称为基本E-R图)
逻辑结构设计:
E-R模型向关系模型转换,据模型的优化:以规范化理论为指导
数据库恢复技术
数据库恢复:把数据库从错误状态恢复到某一已知的正确状态
事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位;是恢复和并发控制的基本单
事务的四个特性:
原子性:事务是数据库的逻辑工作单位;事务中包括的诸操作要么都做,要么都不做
一致性:事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。一致性状态:数据库中只包含成功事务提交的结果
隔离性:一个事务的执行不能被其他事务干扰
永久性:一个事务一旦提交,它对数据库中数据的改变就应该是永久的
故障的种类:
1事务故障:事务在运行过程中由于某种原因未运行至正常终止就夭折了。分为可预期的,非预期的。此类恢复:撤销事务UNDO;不影响其他事物运行的情况下强行回滚(ROLLBACK)
2系统故障:称为软故障。造成系统停止运转的事件,使系统重新启动。常见原因有硬件故障、系统断电等。此类恢复:故障时事务未提交-强行撤销UNDO未完成事务;故障时事务已提交但缓冲区信息未完全写回磁盘-重做REDO已提交事务
3介质故障:称为硬故障。常见原因有磁盘损坏,强磁场干扰。此类恢复:装入副本或重做事务
4计算机病毒
数据库恢复:基本原理-冗余
- 数据转储(即备份)DBA将整个数据库复制到另一个磁盘上,数据库被破坏后重新装入。
1静态转储:在系统无运行事务时转储,降低数据库可用性,得到的必是一致性副本
2动态转储:转储期间允许对数据库进行存取或修改、转储期间事务建立日志,不影响事务运行,不能保证副本中数据正确有效,动态转储恢复时副本加日志才是数据库的某一正确状态。
1海量转储:每次转储全部数据库
2增量转储:只转储上次转储后更新过的数据
②日志文件:记录事务对数据库更新操作的文件
作用:事务故障和系统故障必须用日志文件;动态转储副本恢复时必须用日志文件;静态转储恢复时可以用日志文件
登记日志文件原则:按事务执行的时间次序登记;先写日志文件后写数据库
并发控制
并发控制带来的三个不一致性:1丢失修改(二者同时对原数据修改导致一方的修改失效),2不可重复读(一方的操作使另一方无法再现前一次的读取结果),3读脏数据(一方修改然后回滚操作,另一方在两次操作之间读数据,读到的数据与数据库不一致)
封锁机制:排他锁X锁-其他事务不可读不可写;共享锁S锁-其他事务可读不可写
一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,可以防止丢失修改
二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后方可释放S锁,可以防止丢失修改和读脏数据
三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放,三个不一致性都能防止
活锁:事务T永远等待不断被占用的数据R。避免:多事务请求同一数据时,按请求次序排队获取
死锁:两事务互相封锁了对方需要的数据,一直等待永不结束。避免:一次封锁法,顺序封锁法(为数据规定顺序,所有事务需要按顺序进行封锁)
死锁的诊断与解除:
诊断:1超时法-事务的等待时间超过了规定的时限,就认为发生了死锁;2等待图法-事务等待图动态反映所有事务的等待情况,如果发现图中存在回路,则表示系统中出现了死锁
解除:选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去
可串行性:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果(不一定唯一)相同
两段锁协议:使用该协议产生的必是可串行化调度(运行必正确)
在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
在释放一个封锁之后,事务不再申请和获得任何其他封锁
换而言之,将事务分为了获得封锁和收缩封锁两阶段