数据库原理2

    技术2022-07-10  128

    Lesson 6 规范化理论

    关系模式设计中存在的问题

    1.关系数据库逻辑设计:针对具体问题,如何构造一个适合于它的数据模式 工具:关系数据库的规范化理论。规范化理论是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。

    2.三元组:R<U,F> 当且仅当U上的一个关系r满足F时,r称为关系模式R<U,F>的一个关系 作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)

    3.数据依赖 是一个关系内部属性与属性之间的一种约束关系,通过属性间值的相等与否体现出来的数据间相互联系。 分为函数依赖,多值依赖,其他。

    函数依赖

    1.函数依赖: 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或“Y函数依赖于X”,记作X→Y。 若X→Y,并且Y→X, 则记为X←→Y。若Y不函数依赖于X, 则记为X→\Y。 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件

    2.平凡函数依赖与非平凡函数依赖 在关系模式R(U)中,对于U的子集X和Y, 如果X→Y,但Y不是X真子集,则称X→Y是非平凡的函数依赖 若X→Y,但Y是X真子集,则称X→Y是平凡的函数依赖 若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素 在任一关系模式上平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖。

    3.完全函数依赖与部分函数依赖 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X′,都有 X′ →\ Y, 则称Y完全函数依赖于X,记作X →F Y X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X →P Y。

    4.传递函数依赖的概念 在R(U)中,如果X→Y,(Y 不是X真子集),Y→\X, Y→Z, 则称Z对X传递函数依赖。记为:X →传递 Z 注: 如果Y→X, 即X←→Y,则Z直接依赖于X

    关系模式的范式

    1.范式是符合某一种级别的关系模式的集合。 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。 范式的种类: 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)、第五范式(5NF) 某一关系模式R为第n范式,可简记为R∈nNF。 一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化 (normalization)

    2.1NF 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。 但是满足第一范式的关系模式并不一定是一个好的关系模式。

    3.2NF 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF 一个关系模式不属于2NF,会产生:插入异常、删除异常、修改复杂 解决方法: 用投影分解把关系模式分解成两个关系模式

    3NF——只消除非主属性对主属性的传递依赖; BCNF——消除所有属性对主属性的传递依赖。

    关系模式的分解

    合并规则:由X→Y,X→Z,有X→YZ。 伪传递规则:由X→Y,WY→Z,有XW→Z。 分解规则:由X→Y 及 Z属于Y,有X→Z。

    求闭包的算法 算法6.1求属性集X(X 属于U)关于U上的函数依赖集F 的闭包XF+ 输入:X,F 输出:XF+ 步骤: (1)令X(0)=X,i=0 (2)求B,这里B = { A |( V)(  W)(V→WF ∧ V  X(i)∧ A W)}; (3)X(i+1)=B∪X(i) (4)判断X(i+1)= X (i)吗? (5)若相等或X(i)=U , 则X(i)就是XF+ , 算法终止。 (6)若否,则 i=i+l,返回第(2)步。

    已知关系模式R<U,F>,其中 U={A,B,C,D,E}; F={AB→C,B→D,C→E,EC→B,AC→B}。 求(AB)F+ 。 解 设X(0)=AB; (1) X(1)=AB∪CD=ABCD。 (2) X(0)≠ X(1) X(2)=X(1)∪BCDE=ABCDE。 (3) X(2)=U,算法终止 (AB)F+ =ABCDE

    Lesson 7 数据库设计

    数据库系统设计:

    数据库设计:设计数据库结构特性,为特定应用环境构造出最优的数据模型 数据库应用系统设计:设计数据库的行为特性,建立能满足各种用户对数据库应用需求的功能模型

    结构特性设计: 将现实世界中的事物、事物间的联系用E-R图表示 将各个分E-R图汇总,得出数据库的概念结构模型 将概念结构模型转化为数据库的逻辑结构模型表示

    行为特性设计: 首先要将现实世界中的数据及应用情况用数据流程图和数据字典表示,并详细描述其中的数据操作要求(即操作对象、方法、频度和实时性要求),进而得出系统的功能模块结构和数据库的子模式。

    物理模式设计: 根据库结构的动态特性(即数据库应用处理要求),在选定的DBMS环境下,把数据库的逻辑结构模型加以物理实现,从而得出数据库的存储模式和存取方法

    规范化设计

    概念结构设计 整个数据库设计的关键。设计者要对用户需求进行综合、归纳、抽象,形成一个独立于具体计算机和DBMS的概念模型。 逻辑结构设计 主要任务是将概念结构转换为某个DBMS所支持的数据模型,并进行优化。关系型数据库就是将ER概念模型转换成关系表。 数据库物理设计 主要任务是为逻辑数据模型选取一个最适合应用环境的物理结构,包括数据存储结构和存取方法。 数据库实施 系统设计人员要运用DBMS提供的数据操纵语言和宿主语言,根据数据库的逻辑设计和物理设计的结果建立数据库、编制与调试程序、组织数据入库并进行系统测试。 数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中,必须不断地对其结构性能进行评测、调整和修改。

    数据字典

    数据项 数据项 = {数据项名,数据项含义说明,别名,类型,长度,取值范围,与其他数据项的逻辑关系} 数据结构 数据结构 = {数据结构名,含义说明,组成,{数据项或数据结构}}。 数据流 数据流是数据结构在系统内传输的路径。数据流的描述通常为: 数据流 = {数据流名,说明,流出过程,流入过程,组成:{数据结构},平均流量,高峰期流量}。 数据存储 数据存储是数据及其结构停留或保存的地方,也是数据流的来源和去向之一。 数据存储 = {数据结构名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构}数据量。存取频度,存取方式}。 处理过程 处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息。 处理过程 = {处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}。 三种数据抽象方法 分类(Classification) 聚集(Aggregation) 概括(Generalization)

    Lesson 8 数据库保护

    DBMS对数据库的安全保护功能是通过四方面实现的,即安全性控制、完整性控制、并发性控制和数据库恢复。

    数据库安全性

    数据库安全性是防止非法用户的恶意破坏。保护数据库,以防止非法使用所造成数据的泄露、更改或破坏。

    对有意的非法活动用加密存取数据的方法控制; 对有意的非法操作用用户身份验证、限制操作权来控制; 对无意的损坏可采用提高系统的可靠性和数据备份等方法来控制。 用户标识和鉴定 、用户存取权限控制 、定义视图 、数据加密 、审计、SQL注入。

    完整性控制

    数据库完整性是防止合法户的善意破坏。保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。

    安全性是保护数据库,以防止非法使用所造成数据的泄露、更改或破坏,安全性措施的防范对象是非法用户和非法操作; 完整性是防止合法用户使用数据库时向数据库中加入不符合语义的数据,完整性措施的防范对象是不合语义的数据。

    完整性规则

    触发条件:规定系统什么时候使用规则检查数据; 约束条件:规定系统检查用户发出的操作请求违背了什么样的完整性约束条件; 违约响应:规定系统如果发现用户的操作请求违背了完整性约束条件,应该采取一定的动作来保证数据的完整性,即违约时要做的事情。

    分为立即执行约束(Immediate Constraints)和延迟执行约束(Deferred Constrainsts)。 立即执行约束是指在执行用户事务过程中,某一条语句执行完成后,系统立即对此数据进行完整性约束条件检查。 延迟执行约束是指在整个事务执行结束后,再对约束条件进行完整性检查,结果正确后才能提交

    并发控制

    为了充分利用数据库资源,很多时候数据库用户都是对数据库系统并行存取数据,这样就会发生多个用户并发存取同一数据块的情况,如果对并发操作不加控制可能会产生不正确的数据,破坏数据的完整性,并发控制就是解决这类问题,以保持数据库中数据的一致性,即在任何一个时刻数据库都将以相同的形式给用户提供数据。 事务是并发控制的基本单位

    并发控制是为了防止多个用户同时存取同一数据,造成数据库的不一致性。事务是数据库的逻辑工作单位,并发操作中只有保证系统中一切事务的原子性、一致性、隔离性和持久性,才能保证数据库处于一致状态。实现并发控制的方法主要是封锁技术,基本的封锁类型有排它锁和共享锁两种。三封锁协议用于解决并发操作的一致性问题;两段锁协议用于解决并发调度的正确性问题。对数据对象施加封锁,会带来死锁问题,并发控制机制可以通过采取一次加锁法或顺序加锁法预防死锁的产生。

    事务

    事务是用户定义的数据操作系列,这些操作作为一个完整的工作单元. 一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。 一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。

    原子性(Atomic):是指一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”的原则,即不允许事务部分的完成。 一致性(Consistency):是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。例如前面的转帐如果只执行其中一个操作,则数据库处于不一致状态,帐务会出现问题。也就是说,两个操作要么全做,要么全不做,否则就不能成为事务。 隔离性(Isolation):指数据库中一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。并发控制就是为了保证事务间的隔离性。 持久性(Durability):指一个事务一旦提交,它对数据库中数据的改变就应该是持久的,即使数据库因故障而受到破坏,DBMS也应该能够恢复。

    并发操作异常(数据的不一致性)

    主要原因就是并发操作破坏了事务的隔离性。

    丢失修改(Lost Update) 当两个事务T1和T2读入同一数据做修改,并发执行时, T2把T1或T1把T2的修改结果覆盖掉。 读脏(Dirty Read) 事务T1更新了数据R,事务T2读取了更新后的数据R,事务T1由于某种原因被撤消,修改无效,数据R恢复原值。事务T2得到的数据与数据库的内容不一致,这种情况称为“读脏”。 不可重读(Unrepeatable Read) 事务T1读取了数据后,事务T2更新了T1读取的数据,当事务T1再读取数据以进行相同操作时,得到的两次值不一致,这种情况称为“不可重读”。 产生“幽灵”数据 当事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中的部分记录,或者在其中添加了部分记录,则当T1再次按相同条件读取数据时,发现其中莫名其妙地少了(对删除)或多了(对插入)一些记录。这样的数据对T1来说就是“幽灵”数据或称“幻影”数据。

    并发控制的措施

    技术:封锁、时间戳、乐观控制法和多版本控制。 方式:封锁机制,即加锁(Locking) 加锁就是事务T在对某个数据操作之前,先向系统发出请求,对其加锁。加锁后事务T对其要操作的数据具有了一定的控制权,在事务T释放它的锁之前,其他事务不能操作这些数据。

    封锁机制

    封锁可以保证合理的进行并发控制,保证数据的一致性。 排它锁(X锁) 其采用的原理是禁止并发操作。 事务T对数据对象A加了X锁,则允许T读取和修改A,但不允许其它事务再对A加任何类型的锁和进行任何操作。

    共享锁(S锁) 其采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。 事务T对数据对象A加了S锁,则事务T可以读A,但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放了A上的S锁。 这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。

    封锁协议

    在封锁时,要考虑一定的封锁规则,例如,何时开始封锁、封锁多长时间、何时释放等,这些封锁规则称为封锁协议。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。 封锁协议在不同程度上对正确控制并发操作提供了一定的保证。

    一级封锁协议——防止丢失修改 事务T在修改数据对象之前必须对其加X锁,直到事务结束时才释放锁。 二级封锁协议——防止丢失修改,防止读“脏”数据。 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。 三级封锁协议——防止更新丢失问题和“污读”数据、防止不可重读数据 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才释放。

    活锁和死锁

    活锁 如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放R上的锁后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放R上的锁后系统又批准了T4的请求…… T2有可能永远等待,这就是活锁。 避免活锁的简单办法是采用先来先服务。

    死锁 在同时处于等待状态的两个或多个事务中,其中的每一个在它能够进行之前,都等待着某个数据、而这个数据已被它们中的某个事务所封锁,这种状态称为死锁

    一次封锁法:每个事务一次将所有要使用的数据全部依次加锁,并要求加锁成功,只要一个加锁不成功,表示本次加锁失败,则应该立即释放所有已加锁成功的数据对象,然后重新开始从头加锁。 顺序封锁法:是预先对所有可加锁的数据对象规定一个加锁顺序,每个事务都需要按此顺序加锁,在释放时,按逆序进行

    可串行化调度和两段锁协议

    将所有事务串行起来的调度策略一定是正确的调度策略。 一次封锁法要求每个事物必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议;但两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。

    封锁粒度:封锁对象的大小 封锁粒度与系统的并发度和并发控制的开销密切相关。封锁粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;反之,封锁粒度越小,并发度较高,但系统开销就越大。 在一个系统中同时支持多种封锁粒度供不同的事务选择的封锁方法称为多粒度封锁。 多粒度树 多粒度树的根结点是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。 多粒度封锁协议允许多粒度树中的每个节点被独立地加锁,对一个节点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁。因此,在多粒度封锁中一个数据对象可能以两种方式封锁,显式封锁和隐式封锁。 显式封锁是应事务的要求直接加到数据对象上的封锁; 隐式封锁是该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上锁。

    数据库恢复

    1.数据库恢复概述

    数据库管理系统对故障的对策 保证故障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态 保证事务ACID DBMS提供恢复子系统

    恢复技术是衡量系统优劣的重要指标

    2.故障分类
    事务故障

    某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了。发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘。

    原因: 输入数据有误、运算溢出、违反了某些完整性限制、某些应用程序出错、并行事务发生死锁

    事务故障的恢复的本质:撤消事务(UNDO) 预期故障: 通过在程序中加判断条件来实现。执行回滚(ROLLBACK)语句来撤销事务。 非预期的故障: 如由于死锁、运算溢出而被迫撤销的事务等,由系统来撤销事务

    系统故障

    整个系统的正常运行突然被破坏;所有正在运行的事务都非正常终止;内存中数据库缓冲区的信息全部丢失;外部存储设备上的数据未受影响

    原因:操作系统或DBMS代码错误、操作员操作失误、特定类型的硬件错误(如CPU故障)、突然停电

    系统故障的恢复 清除尚未完成的事务对数据库的所有修改 系统重新启动时,恢复程序要强行撤消(UNDO)所有未完成事务 将缓冲区中已完成事务提交的结果写入数据库 系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务

    介质故障

    硬件故障,使存储在外存中的数据部分丢失或全部丢失。介质故障比前两类故障的可能性小得多,但破坏性大得多。

    原因:磁盘损坏、磁头碰撞、操作系统的某种潜在错误、瞬时强磁场干扰

    介质故障的恢复 装入数据库发生介质故障前某个时刻的数据副本 重做自此时开始的所有成功事务,将这些事务已提交的结果重新记入数据库

    3.数据库恢复

    系统必须具有检测故障并把数据库从错误状态中恢复到某一正确状态的功能,这就是数据库恢复。数据库恢复的基本原理就是利用存储在系统其他地方的冗余数据来修复。

    数据库恢复的技术: 数据转储 、日志文件

    4.数据库转储和日志文件
    数据库转储

    定期或不定期地对数据库数据进行复制,可以将数据复制到本地机器上,也可以复制到其它机器上,备份的介质可以是磁带也可以是磁盘

    备份内容 备份数据库应备份数据库中的表(结构)、数据库用户(包括用户和用户操作权)、用户定义的数据库对象和数据库中的全部数据。而且还应该备份数据库日志等内容。

    静态转储 静态转储是在系统中无运行事务时进行的转储操作。得到的一定是一个数据一致性的副本。 动态转储 动态转储是指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。转储结束时后援副本上的数据并不能保证正确有效。 为此,必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件(Log File)。这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。 海量转储:指每次转储全部数据库。 增量转储:每次只转储上一次转储后更新过的数据。、、

    组合出数据转储四类形式: 动态海量转储、动态增量转储;静态海量转储和静态增量转储。

    日志文件

    日志文件是用来记录事务对数据库的更新操作的文件。 日志文件主要有两种格式: ①以记录为单位的日志文件 ②以数据块为单位的日志文件。

    日志文件在数据库恢复中起着非常重要的作用。可以用来进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。 事务故障恢复和系统故障必须用日志文件。

    记日志文件 为保证数据库可恢复,登记日志文件时必须遵循两条原则: 登记的次序严格按并发事务执行的时间次序。   必须先写日志文件,后写数据库。

    5.恢复策略

    事务故障的恢复 事务故障是指事务在运行到正常结束前被终止,这时恢复子系统可以利用日志文件撤消此事务对数据库已进行的修改。 日志文件是用来记录事务对数据库的更新操作的文件。日志文件内容包括事务标识(标明是哪个事务)、操作类型(插、删或改)、 操作前后的数据值等。目的是为数据库的恢复保留详细的数据。 恢复的过程为:反向扫描日志文件并执行相应操作的逆操作;由系统自动完成的,对用户是透明的。

    系统故障的恢复 系统故障是指系统在运行过程中,由于某种原因,造成系统停止运转,致使所有正在运行的事务都以非正常方式终止,要求系统重新启动 引起系统故障的原因可能有:硬件错误如CPU故障、操作系统或DBMS代码错误、突然断电等 系统故障造成数据库不一致状态的原因有两个: 未完成事务对数据库的更新可能已写入数据库 已提交事务对数据库的更新可能还留在缓冲区中未写入数据库 系统故障的恢复是系统在重启时自动完成的,不需用户干预。 恢复过程为:正向扫描日志文件,找出故障发生前已提交的事务,将其重做;同时找出故障发生时未完成的事务,并撤消这些事务。

    介质故障的恢复 介质故障是指系统在运行过程中,由于辅助存储器介质受到破坏,使存储在外存中的数据部分丢失或全部丢失。 介质故障发生后,磁盘上的物理数据和日志文件均遭到破坏 恢复的方法是首先重装数据库,使数据库管理系统能正常运行,然后利用介质损坏前对数据库已做的备份或利用镜像设备恢复数据库。

    6.恢复方法

    (1)利用备份技术 由DBA定期对数据库进行备份,生成数据库瞬时正确状态的副本(备份)。当发生错误时,利用备份将数据库恢复到备份完成时的数据库状态。 (2)利用事务日志 利用事务日志可以恢复非完整事务:从非完整事务当前值按事务日 志记录的顺序反做(Undo),直到事务开始时的数据库值为止。 (3)利用镜像技术 所谓镜像就是在不同的设备上同时存有两份数据库,把其中的一个设备称为主设备,把另一个称为镜像设备。主设备与镜像设备互为镜像关系。每当主数据库更新时,DMBS自动把更新后的数据复制到另一个镜像设备上,保证主设备上的数据库与镜像设备上的数据库一致。数据库镜像功能可用于有效地恢复磁盘介质的故障。

    Processed: 0.013, SQL: 9