数据的共享性高,冗余度低且易扩充
数据的独立性高
数据由数据库管理系统统一管理和控制
数据库管理系统提供以下几个方面的数据控制功能:
数据模型是数据库系统的核心和基础
概念模型
也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计
逻辑模型
物理模型
......
数据模型通常由数据结构、数据操作和完整性约束条件三部分组成
数据库的二级映像功能和数据的独立性
外模式/模式映像:模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。当模式改变时(增加新的关系,新的属性,改变属性的数据类型等),由数据库管理员对各个外模式/模式映像作相应的改变,可以使外模式保持不变。应用程序是以据数据的外模式编写的,从而应用程序不必修改,保证了输一局与程序的逻辑独立性。
模式/内模式映像:当数据库的存储结构改变时(选用了另一种存储结构),由数据库管理员对模式/内模式映像作相应的改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据云程序的物理独立性,剪成数据的物理独立性。
数据与程序之间的独立性使得数据的定义和描述可以从应用程序中分离出去。由于数据的存取由数据库管理系统管理,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。
关系的描述称为 关系模式,可以表示为 R(U,D,DOM,F)
关系的每一个分量必须是一个不可分的数据项
实体完整性
参照完整性
参照完整性定义
一个关系的外码或者取空值或者等于它所参照的关系的主码值
在CREAT TABLE中用FOREIGN KEY短语定义哪些列为外码
用REFERENCES短语指明这些外码参照哪些表的主码
表级定义、列级定义参照完整性,具体代码实例看资料
在参照完整性检查和违约处理
对参照表和被参照表进行增删改操作时进行完整性检查和违约处理
拒绝执行(NO ACTION)
级联操作(CASCADE)
设置空值(SET-NULL)
用户定义完整性
针对某一具体应用的数据必须满足的语义要求
CREAT TABLE 时定义属性上的约束条件
列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个条件表达式(CHECK)
CHECK (条件)
属性上的约束条件检查和违约处理(只涉及单个属性)
元组上的约束条件定义(涉及多个属性)
完整性约束名子句
断言
创建断言的语句格式
每个断言都被赋予一个名字
<CHECK子句>中的约束条件与WHERE子句的条件表达式类似。
DROP ASSERTION<断言名>删除断言
触发器
前言:为什么要学习关系数据理论
不好的设计中关系模式存在的问题(数据依赖引起):
好的关系模式
不会发生插入异常、删除异常、更新异常、数据冗余应尽可能少
什么是数据依赖
数据依赖的主要类型
数据依赖对关系模式得影响
关系模式的形式化定义
R(U,D,DOM,F)
简化表示:R<U,F>
规范化
函数依赖
定义:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等则称为“X函数确定Y"或”Y函数依赖于X“,记作X—>Y。
X称为这个函数依赖的决定属性组,也称为决定因素
函数依赖是指关系模式R在任何时刻的盥洗室里均要满足的约束条件。不是指某个或某些关系实例r满足的约束条件,而是指R的所有关系实例r均要满足的约束条件(学号—>姓名,但姓名不能确定学号)
平凡函数依赖与非平凡函数依赖
完全函数依赖
部分函数依赖
传递函数依赖
定义
主属性与非主属性
外部码-外码
范式
各级范式之间的关系
第二范式(2NF)
定义:弱关系模式R∈1NF,并且每一个非主属性都完全函数依赖与R的码,则R∈2NF.
1NF进行模式分解使变成完全函数依赖,变成2NF.
第三范式(3NF)
在分解后的关系模式中既没有非主属性对码的部分函数依赖,也没有非主属性对码的传递函数依赖
BC范式(BCNF|修正的的第三范式|扩展的第三范式)
所有非主属性对每一个码都是完全函数依赖
所有主属性对每一个不包含它的码也是完全函数依赖
没有任何属性完全函数依赖与非码的任一组属性
1NF——>消除非主属性对码的部分函数依赖——>
2NF——>消除非主属性对码的传递函数依赖——>
3NF——>消除主属性对码的部分和传递函数依赖——>
BCNF——>消除非平凡且非函数依赖的多值依赖——>
4NF
*多值依赖
*第四范式(4NF)
数据依赖的公理系统 (了解,不在考试范围)
逻辑蕴含
Armstrong公理系统
合并规则
伪传递规则
分解规则
函数依赖闭包
求属性集X关于F的闭包
模式的分解(了解,不在考试范围)
数据库建设的基本规律
三分技术,七分管理,十二分基础数据
管理:1、数据库建设项目管理 2、企业(即应用部门)的业务管理
基础数据:数据的收集、整理、组织和不断更新
结构(数据)设计和行为(处理)设计相结合
将数据库结构设计和数据处理设计相结合
数据库设计的方法
手工设计法
规范设计方法
典型方法——新奥尔良方法
按设计规程用goon工程化方法设计数据库
基于E-R模型的设计方法
3NF的设计方法
ODL方法
UML方法
数据库设计工具
SYBASE PowerDesigner
Rational rose
CA ERWin
数据字典是关于数据库中数据的描述,成为元数据
他不是数据本身,而是数据的数据
数据字典是进行详细的数据收集和分析所获得的主要成果。
数据项是不可再分的数据单位
数据结构
数据结构反映了数据之间的组合关系
一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
数据流
是数据结构在系统内部的传输路径
数据存储
处理过程
具体处理逻辑一般用判定表或判定树来描述。
实体之间的联系
一对多联系(一个实体集中的一个实体与另一个实体集多个实体相联系,反之不成立。例如班级和学生)
多个实体型存在以上三种关系,单个实体型内的联系也存在一对一、一对多和多对多的联系
把参与联系的实体型的数目称为联系的度
两个实体型之间联系度为2,也称为二元关系
三个实体型之间的联系度为3,也成为三元关系
N个实体型之间的联系度为N,也称为N元联系
E-R图
做一些例题,掌握画E-R图的方法| 先画出各个实体,然后画出实体之间的联系(包括联系名、联系类型)然后画出实体的属性
ISA联系
例如:学生实体型可以分为研究生实体型和本科生实体型(三者之间用🔺加无向边连接)
不相交约束和可重叠约束
不相交约束:描述父类中的一个实体不能同时属于多个子类中的实体集。即一个父类中的实体最多只属于一个子类实体集。
用ISA联系符号三角形的一个❌来表示。
可重叠约束:父类中的一个实体能同时属于多个子类中的实体集,子类符号中没有❌表示是可重叠的。
完备性约束:1、描述父类中的一个实体是否必须是一个子类中的实体(如果是,叫做完全特化|如果不是,叫做部分特化) 2、完全特化用父类到子类的双线连接表示 3、部分特化用父类到子类的单线连接表示
基数约束
PART-OF联系
所谓事务就是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
原子性
一致性
隔离性
持续性(永久性)
事务是恢复和并发控制的基本单位
事务ACID特性可能遭到破坏的因素:
事物内部的故障
事务撤销(UNDO)
系统故障
介质故障
系统故障称为 软故障,介质故障称为 硬故障
计算机病毒
1、数据库本身被破坏
2、数据不正确
恢复的基本原理:冗余
建立冗余数据的最常用的技术就是 数据转储和 登记日志文件
后备副本的概念
数据转储
静态转储
动态转储
转储方式分为海量转储和增量转储,转出状态分为静态转储和动态转储,所以转储方法分为四类(2*2)(海量静态转储.....)
登记日志文件
等记日志文件遵循的原则
事务故障是指事务运行至正常终止点前被终止,这时恢复子系统利用日志文件撤销(UNDO)此事务已对数据库进行修改。事务故障的恢复是由系统自动完成的,对用户是透明的。
恢复步骤:见课本P300
撤销故障发生时未完成的事务,重做已完成的事务
恢复步骤:见课本P300
重装数据库,然后重做已完成的事务
恢复步骤:见课本P301
在发生介质故障后,原有的数据库已破坏,需要从最近的副本(最近的完全备份加此后所有的动态备份),根据事务日志,对于备份时正在执行的而未完成的事务做Undo操作,要想使数据库处于一致性状态,则先需重做从最近的备份开始到故障前的所有事务,数据库即恢复至故障前的一致性状态。装载数据备份-》执行UNDO操作-》执行REDO操作
检查点记录的内容:
重新开始文件用来记录各个检查点记录在日志文件中的地址。
动态维护日志文件的方法是,周期性地执行建立检查点、保存数据库状态的操作。
使用检查点方法可以改善恢复效率
系统使用检查点方法进行恢复的步骤:
P303
sql server数据库提供了三种恢复模式:完整,简单和大容量日志,这些模式决定了sql server如何使用事务日志,如何选择它要记录的操作,以及是否截断日志。截断事务日志是删除己执行事务并把该日志空间让给新事务的过程,下面是各种恢复模式的定义:1,完整sql server恢复模式:数据库引擎把所有操作都记录到事务日志上,并且数据库引擎绝对不会截断日志,完整恢复模式能使数据库恢复到故障时间点。2,简单sql server恢复模式:数据库引擎最低限度地记录大多数操作,并在每个检查点之后截断事务日志。它不能备份或还原事务日志,也不能还原单独的数据页。3,大容量日志模式:数据库引擎对大容量操作(select into和bulk insert)进行最小记录。如果一个日志备份包含任何大容量操作,就可以使数据库恢复到日志备份的结尾,但不能恢复到某个时间点,它仅用于大容量操作期间。在生产环境下建议使用完整恢复模式,因为它提供了最可恢复的配置。如果通过大容量机制定期导入数据,则可以临时将数据库的恢复模式改变为大容量日志模式,以获得更好的大容量负载性能,在导入过程结束后,应将数据库恢复为完整恢复模式。
1、完全备份这可能是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但是呢,它也需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。2、事务日志备份事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。3、差异备份也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。4、文件备份数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。
多处理机系统中,每个处理机可以运行一个事务,实现真正的事务并发运行,称为 同时并发方式
并发控制是衡量一个数据库管理系统性能的重要标志。
并发控制: 所谓并发控制,是指多用户共享的系统中,许多用户可能同时对同一数据进行操作。
调度: 指的是事务的执行次序。
串行调度: 多个事务依次串行执行,且只有当一个事务的所有操作都执行完后才执行另一个事务的所有操作。只要是串行调度,执行的结果都是正确的。
并行调度: 利用分时的方法同时处理多个事务。但是并行调度的调度结果可能是错误的,可能产生不一致的状态,包括有:丢失修改,不可重复读和读脏数据。
串行调度和并行调度的区别:其实比较明显的是虽然串行调度能够保证调度结果的正确性,但是却限制了系统并行性的发挥,不能有效利用资源,但是并行调度的调度结果又可能出现错误,而且可能不具有串行,正是因为这样,有一个具有串行调度效果的并行调度方法,而两段锁协议就是保证并行事务可串化的方法。
限定读取和修改数据对象
不能修改但是可以读取
Y=YES(相容请求)||N=NO(不相容请求)
1、事务T在修改数据R之前必须先对其加X锁,知道事务结束才释放。
2、一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
3、不能保证可重复读和不读“脏”数据。
1、在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其进行加S锁,读完后即可释放S锁。
2、二级封锁协议除防止了丢失修改之外,还可进一步防止读“脏”数据,读完数据之后即可释放S锁,所以不能保证可重复读。
1、在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,知道事务结束才释放。
2、三级封锁协议可防止丢失修改,读“脏”数据和不可重复读。
课本P314
避免活锁的简单方法就是采用 先来先服务策略
数据库管理系统在解决死锁问题上普遍采用诊断并解除死锁的方法
定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。
可串行性是并发事务正确调度的准则。
冲突操作是指不同的事务对同一个数据的读写操作和写写操作
冲突可串行化调度是可串行化调度的充分条件,不是必要条件
两段锁协议: 是指所有的事务必须分两个阶段对数据项加锁和解锁。即事务分两个阶段,第一个阶段是获得封锁。事务可以获得任何数据项上的任何类型的锁,但是不能释放;第二阶段是释放封锁,事务可以释放任何数据项上的任何类型的锁,但不能申请。
第一阶段是获得封锁的阶段,称为扩展阶段:其实也就是该阶段可以进入加锁操作,在对任何数据进行读操作之前要申请获得S锁,在进行写操作之前要申请并获得X锁,加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。就是加锁后就不能解锁了。
第二阶段是释放封锁的阶段,称为收缩阶段:当事务释放一个封锁后,事务进入封锁阶段,在该阶段只能进行解锁而不能再进行加锁操作。
事务遵循两段锁协议是可串行化调度的充分条件,而不是必要条件。
一次封锁法与两段锁协议区别:一次封锁法要求每个事务必须依次将所有要使用的数据全部加锁,否则就不能继续执行。因此一次封锁法遵守两段锁协议;但是两段锁协议并不要求事务必须一次将所有哦要使用的数据全部加锁,因此,遵循两段锁协议的事务可能发生死锁。
数据库中为了实现并发控制而采用封锁技术。
封锁对象的大小称为封锁粒度(Granularity)
封锁的对象可以是逻辑单元,也可以是物理单元。以关系数据库为例子,封锁对象可以是这样一些逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引项直至整个数据库;也可以是这样的一些物理单元:页(数据页或索引页)、物理记录等。
锁定的粒度与系统的并发度和并发控制的开销密切相关。一般地,锁定的粒度越大,需要锁定的对象就越少,可选择性就越小,并发度就越小,开销就越小;反之,锁定的粒度越小,需要锁定的对象就越多,可选择性就越大,并发度就越大,开销就越大。
当事务T对给定粒度数据对象实施IS锁时,表明T的一项就是读取该粒度数据对象的部分(而不是全部)下级颗粒度数据对象;
当事务T对给定粒度数据对象实施IX锁时,表明T的一项就是更新该粒度数据对象的部分(而不是全部)下级颗粒度数据对象;
当事务T对给定粒度数据对象实施SIX锁时,表明T的一项就是读取该粒度数据对象的全部下级颗粒度数据对象并更新部分(而不是全部)下级粒度数据对象。
数据锁的相容矩阵
数据结构化
数据的共享性高,冗余度低且易扩充
数据的独立性高
数据由数据库管理系统统一管理和控制
数据库管理系统提供以下几个方面的数据控制功能:
数据模型通常由数据结构、数据操作和完整性约束条件三部分组成
因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。
恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)。
一级封锁协议
1、事务T在修改数据R之前必须先对其加X锁,知道事务结束才释放。
2、一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
3、不能保证可重复读和不读“脏”数据。
二级封锁协议
1、在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其进行加S锁,读完后即可释放S锁。
2、二级封锁协议除防止了丢失修改之外,还可进一步防止读“脏”数据,读完数据之后即可释放S锁,所以不能保证可重复读。
三级封锁协议
1、在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,知道事务结束才释放。