导图社区 数据库系统概论框架
定义:需求分析的任务是通过详细调查现实世界要处理的对象,充分了解原系统的工作情况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
编辑于2022-04-09 20:17:34数据库系统概论
绪论
数据库系统概述
数据库的四个基本概念
数据:数据是数据库中存储的基本对象;是描述事物的符号记录。描述事物的符号可以是数字,也可以是文字、图形、图像、音频、视频等,数据有多种表现形式;它们都可以经过数字化后存入计算机。
数据库DB:数据库是长期存储在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度,较高的数据独立性和可扩展性,并可为各种总用户共享。概括地说,数据库数据具有永久存储、可组织和可共享三个基本特点。
数据库管理系统DBMS:数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据,高效地获取和维护数据。其主要功能包括:数据定义功能、数据组织、存储和管理功能、数据操纵功能、数据库的事务管理和运行管理、数据库的建立和维护功能、其他功能(包括数据库管理系统与网络中其他软件系统的通信功能,一个数据库管理系统与另一个数据库管理系统或文件系统的数据转换功能,异构数据库之间的互访和互操作功能等。)
数据库系统DBS:在计算机系统中引入数据库后的系统,由数据库、数据库管理系统(及其开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。
注意三者之间的关系,其中DB和DBMS的关系:DBMS在DB建立、运用和维护时对DB进行统一控制,以保证数据的完整性和安全性,并在多用户同时使用DB时进行并发控制,在发生故障后对DB进行恢复。
数据库管理技术的产生和发展
人工管理阶段
①数据不保存
②应用程序管理数据
③数据不共享
④数据不具有独立性
文件系统阶段
①数据可以长期保存
②由文件系统管理数据
③数据共享性差、冗余度大
④数据独立性差
数据库系统阶段
①数据结构化:数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。所谓“整体”结构化是指数据库中的数据不再仅仅针对某一应用,而是面向整个组织或企业;不仅数据内部是结构化的,而且整体是结构化的,数据之间是具有联系的。
②数据的共享性高,冗余度低且易扩充:数据库系统从整体角度看待和描述数据,数据不再面向某个应用而是面向整个系统,因此数据可以被多个用户、多个应用共享使用。数据共享可以大大减少数据冗余,节约存储空间。 由于面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这就是的数据库系统弹性大,易于扩充。
③数据独立性高:数据独立性是借助数据库管理数据的一个显著优点,包括数据的物理独立性和逻辑独立性。
物理独立性:是指用户的应用程序与数据库中的数据的物理存储是相互独立的。也就是说,数据在数据库中怎样存储是由数据库管理系统管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变时,应用程序不用改变。
逻辑独立性:是指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变时用户程序也可以不变。
数据由数据管理系统统一管理和控制:数据库的共享是并发的共享,即多个用户可以同时存取数据库中的数据,甚至可以同时存取数据库中同一个数据。为此,数据库管理系统还必须提供以下几个方面的数据控制功能:数据的安全性保护、数据的完整性检查、并发控制、数据库恢复。
数据库系统的特点
数据模型
数据模型也是一种模型,它是对现实世界数据特征的抽象,就是现实世界的模型,数据模型是数据库系统的核心和基础。
两类数据模型
数据模型的要素(3个)
①能比较真实地模拟现实世界
②容易为人所理解
③便于在计算机上实现
数据模型的类型(2个)
①概念模型:也成为信息模型,是按照用户的观点来对数据和信息建模,主要用于数据库设计。
②逻辑模型和物理模型
逻辑模型;主要包括层次模型、网状模型、关系模型、面向对象数据模型、关系对象数据模型、半结构化数据模型等。它是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。
物理模型:是对数据最底层的抽象,是描述数据在系统内部的表示方法和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
为了把现实世界中的具体事物抽象、组织为某一数据库管理系统支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界。从现实世界到概念模型的转换是由数据库设计人员完成的;从概念模型到逻辑模型的转换可以由数据库设计人员完成,也可以由数据库设计工具辅助设计人员完成;从逻辑模型到物理模型的转换主要是由数据库管理系完成的。
数据模型的组成要素(4个)
①数据结构:数据结构描述的是数据库的组成对象以及对象之间的联系,数据结构是所描述的对象类型的集合,是对系统静态特性的描述。
②数据操作:是对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。是对系统动态特性的描述。数据库的主要操作有查询和更新(包括插入、删除、修改)两大类操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则以及实现操作的语言。
③数据的完整性约束条件:是一组完整性规则,完整性规则给定的数据模型中数据及其联系所具有的制约和一村规则,用以限定符合模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。
常用的数据模型
逻辑模型
①层次模型
②网状模型
格式化模型:在格式化模型中实体用记录表示,实体的属性对应记录的数据项(或字段)。实体之间的联系在格式化模型中转换成记录之间的两两联系。在格式化模型中数据结构的单位是基本层次联系。所谓基本层次联系是指两个记录以及它们之间的一对多(包括一对一)的联系。
③关系模型
④面向对象数据模型
⑤对象关系数据模型
⑥半结构化数据模型
层次模型
定义:在层次模型中,每个结点表示一个记录类型,记录类型之间的联系用结点之间的连线(有向边)表示,这种联系是父子之间的一对多的联系,这就使得层次数据库系统只能处理一对多的实体联系。 每个记录类型可包含若干个字段,这里记录类型描述的是实体,字段描述实体的属性,各个记录类型及其字段都必须命名。 层次模型的一个基本的特点是,任何一个给定的记录值只能按其层次路径查看,没有一个子女记录值能够脱离双亲记录值而独立存在。
数据结构(2个)
①有且只有一个结点没有双亲结点,这个结点称为根结点。
②根以外的其他结点有且只有一个双亲结点。
满足这两个条件的基本层次联系的集合为层次结构。
层次模型的数据操纵与完整性约束
主要有查询、插入、删除、更新;进行插入、删除、更新操作时要满足层次模型的完整性约束。进行插入操作时,如果没有相应的双亲结点就不能插入它的女结点值。进行删除操作时,如果删除双亲结点值,则相应的子女节点将被同时删除。
优点(3个)
①层次模型的数据结构比较简单清晰。
②层次数据库的查询效率高。
③层次数据模型提供了良好的完整性支持。
缺点(4个)
①现实世界中很多联系是非层次性的,如果结点之间具有多对多联系,不适合用层次模型表示。
②如果一个结点具有多个双亲结点等,用层次模型表示这类联系就很笨拙,职能通过引入冗余数据或创建非自然的数据结构来解决,对插入和删除操作的限制比较多,因此应用程序的编写比较复杂。
③查询子结点必须通过双亲子结点。
④由于结构严密,层次命令趋于程序化。
可见,层次模型对具有一对多的层次联系的部门描述非常自然,直观,容易理解,这是层次数据库的突出优点。
网状模型
定义:是一种比层次模型更具有普遍性的结构,它去掉了层次模型的两个限制,允许多个结点没有双亲结点,允许结点有多个双亲结点;此外它还允许两个结点之间有多种联系。因此,网状模型可以更直接地描述现实世界,而层次模型实际上是网状模型的一个特例。
从定义可以看出,层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一。
数据结构(2个)
①允许一个以上的结点无双亲。
②一个结点
满足这两个条件的基本层次联系集合即为网状模型
优点
①能够更为直接地描述现实世界,如一个结点可以有多个双亲,结点之间可以有多种联系。
②具有良好的性能,存取效率较高。
缺点
①结构比较复杂,随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握。
②网状模型的DDL、DML复杂,并且要嵌入某一种高级语言中,用户不容易掌握,不利于最终用户掌握。
③由于记录之间的联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此用户必须了解系统结构的细节,加重了编写应用程序的负担。
关系模型
定义:从用户观点看,关系模型由一组关系组成。每个关系的数据结构是一张规范化的二维表。关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。
相关概念
①关系:一个关系对应通常说的一张表。
②元组:表中的一行即为一个元组。
③属性:表中的一列即为一个属性,给每一个个属性起一个名称即属性名。
④码:也成为码键;表中的某个属性组,它可能唯一确定一个元组。
⑤域:是一组具有相同数据类型的值的集合。
⑥分量:元组中的一个属性值。
关系模型的数据操纵与完整性约束
①关系模型的数据操纵主要包括查询、插入、删除和更新数据。这些操作必须满足关系的完整性约束条件。关系的完整性约束条件包括:实体完整性、参照完整性、用户定义完整性。
②观念系模型中的数据操作是集合操作,操作对象和操作结果都是关系,关系模型存取路径向用户隐蔽起来,用户只要指出“干什么”或“找什么”,不必详细说明“怎么干”或“怎么找”。从而大大地提高了数据的独立性,提高了用户生产效率。
优点
①关系模型与格式化模型不同,它是建立在严格的数学概念的基础上的。
②关系模型的概念单一。无论实体还是实体之间的联系都是用关系来表示,对数据的检索和更新结果也是关系;所以其数据结构简单、清晰、用户易懂易用。
③关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据开发建立工作。
缺点
由于存取路径对用户是隐蔽的,查询效率往往不如格式化数据模型。为了提高性能,数据库管理员必须对用户的查询请求进行优化,因此增加了开发数据库管理系统的难度。
数据库系统的结构
数据库系统模式的概念
①在数据模型中有“型”和“值”的概念。型是指对某一类型数据的结构和属性的说明;值是型的一个具体赋值。
②模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅设计型的描述,不涉及具体的值。模式的一个具体值称为模式的一个实例;同一个模式可以有很多实例。
③模式是相对稳定的,而实例是相对变动的,因为数据库中的数据是在不断更新的。模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态。
数据库系统的三级模式结构
①模式:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。它是数据库系统模式结构的中间层,既不涉及数据的物理存储的细节和硬件环境,又与具体的应用程序、所使用的应用开发工具及高级程序设计语言无关。模式实际上是数据库数据在逻辑上的视图。一个数据库只有一个模式。
②外模式:也称子模式或用户模式,它是数据库用户能够看得见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。 外模式通常是模式的子集;一个数据库可以有多个外模式;同一个外模式也可以为某一用户的多个应用系统所使用,但一个应用系统只能使用一个外模式。
③内模式:也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
数据库二级映像功能与独立性
①外模式/模式映像:模式描述的是数据的全局逻辑结构,外模式描述的是数据的内部逻辑结构。一个模式可以有任意多个外模式。对于每一个外模式,数据库系统都有一个外模式/模式映像,它定义了该外模式与内模式之间的对应关系,当模式改变时,由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变。应用程序是依据外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
②模式/内模式影响:数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。当数据库的存储结构改变时,由数据库管理员对模式/内模式做出相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称数据的物理独立性。
数据库系统的组成
①硬件平台及数据库(3个要求)
①足够大的内存,存放操作系统、数据库管理系统的核心模块、数据缓冲区和应用程序。
②足够大的磁盘或磁盘阵列存放数据库,足够大的磁带或光盘作数据备份。
③要求系统有较高的通道能力,以提高数据传送率。
②软件(5个)
①数据库管理系统;
②支持数据库管理系统运行的操作系统;
③具有与数据库接口的高级语言及其编译系统,便于开发应用程序;
④以数据库管理系统为核心的应用开发工具;
⑤为特定应用环境开发的数据库应用系统。
③人员(5个)
①数据库管理员(5个职责)
①决定数据库中的信息内容和结构,数据库中要存放哪些信息,数据库管理员要参与决策设计;
②决定数据库的存储结构和存取策略;
③定义数据的安全性要求和完整性约束条件;
④监控数据的使用和运行;
⑤数据库的改进和重组、重构。
②系统分析员:负责应用系统的需求分析和规范说明,要和用户及数据库管理员相结合,确定系统的硬件软件配置,并参与数据库系统的概要设计。
③数据库设计人员:负责数据库中数据的确定及数据库各级模式的设计;数据库设计人员必须参加用户需求调查和系统分析,然后进行数据库设计;在很多情况下,数据库设计人员就由数据库管理员担任。
④应用程序员(面向用户):负责设计和编写应用系统的程序模块,并进行调试和安装。
⑤用户:这里指最终用户;通过应用系统的用户接口使用数据库,最终可以分为偶然用户、简单用户、复杂用户。
关系数据库
关系数据结构及形式化定义
关系
在用户看来,关系模型中的数据的逻辑结构是一张扁平的二维表。现实世界的实体以及实体间的各种联系均单一的结构,即用关系来表示。
定义:关系是笛卡尔积的有限子集,所以关系也是一张二维表,表中的每行对应一个元组,一列对应一个域。
相关概念
域:是一组具有相同数据类型的值的集合。一个域允许的不同取值的个数称为基数。
笛卡尔积:可以表示为一张二维表。表中的每一行对应一个元组,每一列的值来自一个域。
属性:由于域可以相同,为了加以区分,必须对每列取一个名字,称为属性,n目关系必有n个属性。
候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
主码:若一个关系有多个候选码,则选定其中一个为主码。
主属性:候选码的诸属性。
非主属性或非码属性:不包含在任何候选码中的属性。
全码:在最简单的情况下,候选码只包含有一个属性;在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,即全码。
分类(3个)
①基本关系(基本表、基表)
定义:是实际存在的表,是实际存储数据的逻辑表示。
性质(6个)
①列是同质的,即每一列中的分量是同一类型的数据,来自于同一个域。
②不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
③列的顺序无所谓,即列的次序可以任意交换。
④任意两个元组的候选码不能取相同值。
⑤行的顺序无所谓,即行的次序可以任意交换。
⑥分量必须取原子值,即每一个分量都必须是不可分的数据项。
②查询表:是查询结果对应的表。
③视图表:是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
关系模式:即关系的描述;可以形式化地表示为R(U,D,DOM,F),其中,R为关系名,U为组成该关系的属性名集合,D为U中属性来自的域,DOM为熟悉那个向域的映像集合,F为属性间数据的依赖关系集合。
关系和关系模式的区别:关系是关系模式在某一时刻的状态或内容;关系模式是静态的、稳定的、而关系是动态的、随时间不断变化的。在实际工作中,人们常把关系模式和关系都笼统地称为关系,要从上下文中加以区别。
关系数据库:在一个给定的应用领域中,所有关系的集合构成一个关系数据库。关系数据库也有型和值之分;关系数据库的型也称为关系数据库模式,是对关系数据库的描述。关系数据库包括若干域的定义,以及在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某一时刻对应关系的集合,通常就称为关系数据库。
关系模型的存储结构
关系操作
基本的关系操作
特点是集合操作方式,即操作的对象和结果都是集合,这种操作方式也成为一次一集合方式。
①查询
查询表达能力很强,是关系操作中的最主要部分。
①选择
②投影
③并
④差
⑤笛卡尔积
五种基本操作,其他操作可以用基本操作来定义和导出。如连接、除、交等。
②插入
③删除
④修改
关系数据语言的分类(3个)
①关系代数语言:用对关系的运算来表达查询要求。
②关系演算语言:用谓词来表达查询要求。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。
③结构化查询语言:具有关系代数和关系演算双重特点的语言。
关系的完整性
实体完整性
定义:实体完整性规则指若属性(一个或一个属性组)A是基本关系R的主属性,则A不能取空值。按照实体完整性规则的规定,如果主码由若干属性组成,则所有这些主属性都不能取空值。
对实体完整性规则的说明(4个)
①实体完整性规则是针对基本关系而言的,一个基本表通常对应现实世界的一个实体集。
②现实世界中的实体是可区分的,即它们具有某种唯一性标识。
③相应地,关系模型中以主码作为唯一性标识。
④码中的属性即主属性不能取空值。
参照完整性
定义:参照完整性规则就是定义外码与码之间的引用规则,指若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应(基本关系R和基本关系S不一定是不同关系),则对于其中每个元组在F上的值必须或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。
相关概念:设F是基本关系R的一个或一组属性,但不是关系R的码,K是基本关系S的主码。如果F与K相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。
需要指出,外码并不一定要与主码同名,不过,在实际应用中为了便于识别,当外码与相应的主码属于不同关系时,往往给它们取相同的名字。
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应由关系系统自动支持。
用户定义的完整性:是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求;关系模型应提供定义和检验这些完整性的机制,以便用统一的系统的方法处理他们,而不需由应用程序承担这一功能。
用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询,运算对象是关系,运算结果也是关系。
传统的集合运算:将关系看成元组的集合,其运算是从关系的“水平”方向,即行的角度来进行;
①并
②差
③交
④笛卡尔积
专门的关系运算:不仅涉及行,还涉及列。
①选择
②投影
③连接
④除运算
关系数据库标准语言SQL
SQL概述
SQL的产生与发展
SQL的特点(5个)
①综合统一
②高度非过程化
③面向集合的操作方式
④以同一种语法结构提供多种使用方式
⑤语言简洁,易学易用
SQL的基本概念
①基本表:是本身独立的表,在关系数据库管理系统中一个关系就对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以带若个索引,索引也存放在存储文件中。
②存储文件:逻辑结构组成了关系数据库的内模式;存储文件的物理结构对最终用户是隐蔽的。
③视图:是从一个或几个基本表导出的表,它本身不独立存储在数据库中,即数据库中存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表,视图在概念上与基本表等同,用户可以在视图上再定义视图。
外模式包括若干视图和部分基本表,模式包括若干基本表,内模式包括若干存储文件。
学生课程数据库
数据定义
模式的定义与删除
基本表的定义、删除与修改
索引的建立与删除
索引的类型(4个)
①顺序文件上的索引:是针对按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成。
②B+树索引:是将索引组织成B+树形式,B+树的叶节点为属性值和相应的元组指针,B+树索引具有动态平衡的优点。
③散列索引:是建立若干个桶,将索引属性按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针。散列索引具有查找快速的特点。
④位图索引:是用位向量记录索引属性中可能出现的值,每个位向量对应一个可能值。
数据字典
数据查询
单表查询
连接查询
嵌套查询
集合查询
基于派生表的查询
SELECT语句的一般格式
数据更新
插入数据
修改数据
删除数据
空值的处理
定义:所谓空值,就是“不知道”、“不存在”、“无意义”的值。SQL语言中允许某些元组的某些属性在一定情况下取空值。一般有以下几种情况即该属性应该有一个值,但目前不知道它的具体值;该属性不应该有值,由于某种原因不便于填写。
空值的判断:判断一个属性的值是否为空值,用IS NULL或IS NOT NULL来表示。
空值的约束条件(3个)
①属性定义(或域定义)中有NOT NULL约束条件的不能取空值;
②加了UNIQUE限制的属性不能取空值;
③码属性不能取空值;
空值的运算(2个)
①空值与另外一个值(包括另外一个空值)的算数运算的结果为空值;
②空值与另外一个值(包括另外一个空值)的比较运算结果为UNKNOW,有了UNKNOW后,传统的逻辑运算中的二值逻辑就扩展成了三值逻辑。
视图
定义视图
查询视图
更新视图
视图的作用(5个)
①简化用户的操作关系:视图机制使用户可以将注意力集中在所关心的数据上。如果这些数据不是直接来自基本表则可以通过定义视图使数据库看起来结构简单、清晰,并且可以简化用户的数据查询操作。
②使用户能以多种角度看待统一数据:当许多不同种类的用户共享同一数据库时,这种灵活性十分重要。
③对重构数据库提供了一定程度的逻辑独立性:指当数据库重构造时,用户的应用程序不会受到影响。而物理独立性指用户的应用程序不依赖于数据库的物理结构。
④能够对机密数据提供安全保护:有了视图机制,就可以在设计数据库应用系统时对不同的用户定义不同的视图,使机密数据不出现在不应看到这些数据的用户视图上,这样视图机制就自动提供了对机密数据的安全性保护功能。
⑤适当利用视图可以更清晰地表达查询。
数据库安全性
数据库安全性概述
数据的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
数据库的不安全因素(3个)
①非授权用户对数据库的恶意存取和破坏:提供措施有用户身份鉴别、存取控制和视图等。
②数据库中重要或敏感的数据被泄露:提供措施有强制存取控制、数据加密存储、加密传输等。
③安全环境的脆弱性
安全标准简介
数据库安全性控制
用户身份鉴别
定义:是数据库管理系统提供的最外层安全保护措施。系统鉴别是指由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供使用数据库管理系统的权限。
常用方法(4个)
①静态口令鉴别:是当前常用的,静态口令一般由用户自己设定,鉴别时只要按要求输入正确的口令,系统将允许用户使用数据库管理系统,这些口令是静态不变的,很容易被破解,虽然简单,但容易被攻击,安全性较低。
②动态口令鉴别:是目前比较安全的方式,这种方式的口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法,与静态口令相比,这种认证方式加大了口令被窃取或破解的难度,安全性相对高一些。
③生物特征鉴别:是一种通过生物特征进行认证的技术,其中,生物特征是指生物唯一具有的、可测量的、识别和验证的稳定生物特征。这种方式通过采用图像处理和模式识别等技术实现了基于生物特征的认证,与传统的口令相比,无疑产生了质的飞跃,安全性较高。
④智能卡鉴别:智能卡是一种不可复制的硬件、内置集成电路的芯片,具有硬件加密功能,智能卡由用户随身携带,登录数据库管理系统时用户将智能卡插入专用的读卡器进行身份验证,实际应用一般采用给个人身份识别码和智能卡相结合的方式。
存取控制
定义:存取控制机制主要包括定义用户权限和合法权限检查两部分。定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统。
类型(2个)
①在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以将其拥有的存取权限转授给其他用户。因此自主存取控制非常灵活。
②在强制存取控制方法中,每一个对数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。
自主存取控制方法
用户权限:由数据库对象、操作类型两个要素组成,定义一个用户的存取权限就是要定义这个用户可以在哪些数据库对象上进行哪些类型的操作。在数据库系统中定义存取权限称为授权。
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身。但在关系系统中,存取控制的对象不仅有数据本身(基本表中的数据),还有数据库模式(包括模式、基本表、视图、索引的创建)。
授权:授权与回收:SQL中使用GRANT和REVOKE语句向用户授予或收回对数据的操作权限。
数据库角色:是被命名的一组与数据库操作相关的权限,角色是权限的集合。因此,可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。
强制存取控制方法
强制存取控制:指系统为保证更高程度的安全性,按照TDI/TCSEC标准中安全策略的要求所采取的强制存取检查手段。它不是用户能直接感知或进行控制的,强制存取控制适用于那些对数据有严格而固定密集分类的部门。
强制存取控制方法的意义:自主存取控制机制下,仍可能存在数据的“无意泄露”。而且这种机制仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记,因此就需要对系统控制下的所有主客体实施强制存取控制策略。
相关概念
主体:是系统中的活动实体,既包括数据库管理系统所管理的实际用户,也包括代表用户的各进程。
客体:是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。
敏感度标记:被分为若干等级,例如绝密TS、机密S、可信C、公开P,密集的次序为TS>S>C>P。
许可证级别:即主体的敏感度标记。
密级:即客体的敏感度标记。
在强制存取过程中,数据库管理系统所管理的全部实体被分为主体和客体两大类。对于主体和客体,数据库管理系统为它们每个实例指派一个敏感度标记。强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体。
规则(2个)
①仅当主体的许可证等级大于或等于客体的密级时,该主体才能读取相应的客体;
②仅当主体的许可证等级小于或等于客体的密级时,该主体才能写相应的客体;
视图机制:通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。视图机制间接地实现支持存取谓词的用户权限定义。
审计
定义:审计功能就是数据库管理系统达到C2以上安全等级必必不可少的一项指标。审计功能把用户对数据库的所有操作自动记录下来放入审计日志中,审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。还可以通过对审计日志分析,对潜在的威胁提前采取措施加以防范。
语句:AUDIT用来设置审计功能;NO AUDIT语句则取消审计功能。
分类(2个)
①用户级审计:是任何用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一系列成功或不成功的访问要求以及各种新类型的SQL操作。
②系统级审计:只能由数据库管理员设置,用以监测成功或失败的登录要求、检测授权和收回操作以及其他数据库级权限下的操作。
数据加密:是防止数据库数据在存储和传输中失密的有效手段。加密的基本思想是根据一定的算法将原始数据—明文变换为不可直接识别的格式—密文,从而使得不知道解密算法的人无法获知数据的内容,数据加密主要包括存储加密和传输加密。
其他安全性保护
①推理控制处理:是强制存取控制未解决的问题。用来避免用户和利用其能访问的数据推理得知更高密级的数据。
②隐蔽信道:也是强制存取控制未解决的问题。
③数据隐私:是控制不愿被他人知道或他人不便知道的个人数据的能力。
数据库完整性
数据库的完整性
定义:指数据的正确性和相容性。正确性是指数据是符合现实世界语义、反映当前实际状况的;相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。
数据库管理系统维护数据的完整性的必要功能(3个)
①提供定义完整性约束条件的机制:完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束的条件。它表达了给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符号和数据模型的数据库状态及其变化,以保证数据的正确、有效和相容。
②提供完整性检查的方法:数据库管理系统中检查数据是否满足完整性约束条件的机制称为完整性检查,检查用户发出的操作请求是否违背了完整性约束条件。
③进行违约处理:数据库管理系统若发现用户的操作违背了完整性约束条件将采取一定的动作,进行违约处理以保证数据的完整性。
实体完整性
定义实体完整性
用PRIMART KET定义码。
①定义列级约束条件
②定义表级约束条件
注意,多个属性构成的码只能由表级约束条件定义。
实体完整性检查和违约处理
检查方面(2个)
①检查主码值是否唯一,如果不唯一则拒绝插入或修改;
检查记录中主码值是否唯一的一种方法是进行全表扫描,依次判断表中每一条记录的主码值与将插入记录的主码值(或修改的新主码值)是否相同。全表扫描是十分耗时的,为了避免对基本表进行全表扫描,关系数据库管理系统一般都在主码上自动建立一个索引,通过索引查找基本表中是否已经存在新的主码值将大大提高效率。
②检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
参照完整性
定义参照完整性:FOREIGN KEY定义外码,REFERENCES指明这些外码参照哪些表的主码。
参照完整性检查和违约处理:一般的,当对参照表和被参照表的操作违反了参照完整性时,系统选用默认策略,即拒绝执行。如果想让系统采用其他策略,则必须在创建参照表时显示地加以说明。
用户定义的完整性
定义:用户定义完整性就是针对某一具体应用的数据必须满足的语义要求,关系数据库管理系统都提供了定义和检验这类完整性的机制,使用了和实体完整性、参照完整性相同的技术和方法来处理它们,而不必由应用程序承担这一功能。
属性上的约束条件
定义方法:NOT NULL、UNIQUE、检查用CHECK。
检查和违约处理:当往表中插入元组或修改属性的值时,关系数据库管理系统将检查属性的约束条件是否被满足,如果不满足则操作拒绝被执行。
元组上的约束条件
定义方法:与属性的约束类似,而且元组级的限制可以设置不同属性之间的取值的相互约束条件。
检查和违约处理:当往表中插入元组或修改属性时,关系数据库管理系统将检查元组上的约束条件是否被满足,如果不满足则操作被拒绝执行。
完整性约束命名子句
断言
触发器
定义:触发器是用户定义在关系表上的一类由事件驱动的特殊过程,任何用户对增删改操作均由服务器自动激活相应的触发器,触发器类似于约束,但是比约束更加灵活,可以施加更为复杂的检查和操作,具有更精细和更强大的数据控制能力。
定义触发器
激活触发器
删除触发器
数据的完整性和安全性的关系:数据的完整性和安全性是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据防止恶意破坏和非法存取。因此,完整性检查和控制的防范对象是不和语义的、不正确的数据,防止他们进入数据库。安全性控制的防范对象是非法用户和非法操作,防止他们对数据库的非法存取。
关系数据理论
问题的提出
规范化
函数依赖
码
范式
1NF
2NF
3NF
BCNF
4NF
数据库设计
数据库设计概述
数据库设计的特点(2个)
①数据库建设的基本规律:“三分技术、七分管理、十二分基础数据”,在数据库建设中,不仅要涉及技术,还要涉及管理。要建好一个数据库应用系统,开发技术固然重要,但相比之下管理更加重要。
②结构(数据)设计和行为(处理)设计相结合:整个设计过程中要把数据库结构设计和对数据的处理设计紧密结合起来。
数据库设计方法
①手工与经验相结合
②新奥尔良法
③基于E-R模型的设计方法
④3NF设计方法
⑤面向对象的数据库设计方法
⑥统一建模语言方法
数据库设计的基本步骤(6个)
结构化系统设计方法
①需求分析阶段:进行数据库设计首先必须准确了解与分析用户需求。需求分析是整个设计过程的基础,是最困难和最耗费时间的一步。
②概念结构设计阶段:是整个数据库设计的关键,它通过对用户需求进行综合、归纳、抽象,形成一个独立于具体数据库管理系统的概念模型。
③逻辑结构设计阶段:是将概念模型转换程某个数据库管理系统所支持的数据模型,并对其进行优化。
④物理结构设计阶段:是为逻辑数据模型选取一个最适合应用环境的物理结构。
⑤数据库实施阶段:在数据库实施阶段,设计人员用数据库管理系统提供的语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编写与调试应用程序,组织数据入库,并进行试运行。
⑥数据库运行和维护阶段:数据库应用系统经过试运行后即可投入正式运行,在数据库系统运行过程中必须不断地对其进行评估、调整、修改。
在数据库设计之前,首先必须要选定参加设计的人员,包括系统分析人员、数据库设计人员、应用开发人员、数据库管理员和用户代表。系统分析和数据库设计人员是数据库的核心人员,将自始至终参与数据库设计,其水平决定了数据库系统的质量。用户和数据库管理员主要参加需求分析和数据库的运行和维护,其积极参加不但能加速数据库设计,而且也是决定数据库设计质量的重要因素。应用开发人员(包括程序员和操作员)分贝负责编制程序和准备软硬件环境,他们在系统实施阶段参与进来。
数据库设计过程中的各级模式
①需求分析阶段:综合各个用户的应用需求
②概念结构设计阶段:E-R图
③逻辑结构设计阶段:关系模型,基本表,视图,外模式
④物理结构设计阶段:物理存储安排,建立索引,内模式
需求分析
定义:就是分析用户的要求;是数据库设计的起点,需求分析的结果是否准确反映用户的实际要求将直接影响到后面各阶段的设计,并影响到设计结果是否合理和实用。
需求分析的任务
定义:需求分析的任务是通过详细调查现实世界要处理的对象,充分了解原系统的工作情况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
获得用户对数据库的要求(3个)
①信息要求:指用户需要从数据库中获得信息的内容与性质,由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。
②处理要求:指用户要完成的数据处理功能,对处理性能的要求。
③安全性与完整性要求
确定用户的最终需求是一件很困难的事,这是因为一方面缺少计算机知识,开始时无法确定计算机究竟能为自己做什么,不能做什么,因此往往不能准确地表达自己的需求,所提出的需求往往不断地变化。另一方面,设计人员缺乏用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。因此设计人员必须不断深入地与用户交流才能逐渐确定用户的实际需求。
需求分析的方法
调查用户需求的步骤(4个)
①调查组织机构情况
②调查各部门的业务活动情况
③在熟悉业务活动的基础上,协助用户明确对新系统的各种要求、包括下信息要求、处理要求、安全性与完整性要求,这是调查的又一个重点
④确定新系统的边界,确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成
常用的调查方法(6个)
①跟班作业
②开调查会
③请专人介绍
④询问
⑤设计调查表请用户填写
⑥查阅记录
数据字典
定义:数据字典是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善的。它在数据库设计中占有很重要的地位。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程几部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流,数据存储的逻辑内容。
组成(5个)
①数据项:数据项是不可再分的数据单位。
数据项={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}
②数据结构:数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
数据结构={数据结构名,含义说明,组成:(数据项或数据结构)}
③数据流:数据流是数据结构在系统内传输的路径。
数据流={数据流名,说明,数据流来源,数据流去向,组成(数据结构),平均流量,高峰期流量}
④数据存储:数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。
数据存储={数据存储名,说明,编号,输入的数据流,输出的数据流,组成:(数据结构),数据量,存取频度,存取方式}
⑤处理过程:处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息即可。
处理过程={处理过程名,说明,输入:(数据流),输出:(数据流),处理:(简要说明)}
概念结构设计
概念模型(4个特点)
①能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真实模型。
②易于理解,可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库设计成功的关键。
③易于更改,当应用环境和应用要求改变时容易对概念模型修改和扩充。
④易于向关系、网状、层次等各种数据模型转换。
E-R模型:是用E-R图来描述现实世界的概念模型,包括实体、属性、实体之间的联系等。
概念结构设计
定义:第一步就是对需求分析阶段收集到的数据进行分类、组织,确定实体、实体的属性、实体之间的联系类型,形成E-R图。
实体与属性的划分原则(3个)
①为了简化E-R图的处置,现实世界的事物能作为属性对待的尽量作为属性对待。
②作为属性,不能再具有描述的性质,即属性必须是不可分的数据项,不能包含其他属性。
③属性不能与其他实体有具体联系,即E-R图中所表示的联系是实体之间的联系。
满足这两条,一般均可作为属性对待。
E-R图集成
定义:在开发一个大型信息系统时,最经常采用的策略是自顶向下的地进行需求分析,然后再自底向上地设计概念结构。即首先设计各子系统的分E-R图,然后将它们集成起来,得到全局E-R图。
步骤(2个)
①合并。合并E-R图,生成初步E-R图
定义:各个局部所面向的局部不同,且通常是由不同的设计人员进行局部视图设计,这就导致各个子系统的E-R图之间必定会存在许多不一致的地方,称之为冲突。合理消除各E-R图之间的冲突是合并的关键所在。
E-R图之间的冲突(3个)
①属性冲突(2个)
①属性域冲突:即属性值的类型、取值范围或取值集合不同;
②属性取值单位冲突;
属性冲突理论上好解决,但实际上需要各部门讨论协商,解决起来并非易事。
②命名冲突(2个)
①同名异义
②异名同义
命名冲突可能发生在实体、联系级上,也可能发生在属性一级上。处理命名冲突通常也像处理属性冲突一样,通过讨论、协商等行政手段加以解决。
③结构冲突(3个)
①同一对象在不同应用中具有不同的抽象:解决方法是把属性变换为实体或把实体变换为属性,使同一对象具有相同的抽象。
②同一实体在不同子系统的E-R图中所包含的属性个数和属性排列次序不完全相同:原因是不同的局部应用关心的是该实体的不同侧面,解决方法是使该实体的属性取各个子系统的E-R图中属性的并集,再适当调整属性的次序。
③实体间的联系在不同的E-R图中为不同的类型:解决方法是根据应用的语义对实体联系的类型进行综合或调整。
②修改和重构。消除不必要的冗余,设计基本E-R图
定义:在初步E-R图中可能存在有一些冗余数据和实体间的冗余联系。所谓冗余数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难,应当予以消除。消除了冗余后的初步E-R图成为基本E-R图。
解决方法(2个)
①分析方法:即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。但并不是所有的冗余数据与冗余联系都必须加以消除,有时为了提高效率,不得不以冗余信息作为代价。因此在设计数据库概念结构时,哪些冗余数据必须消除,哪些冗余信息允许存在,需要根据用户的整体需求来确定。
②规范化理论
具体方法
①确定分E-R图实体之间的数据依赖。
②求Fl的最小覆盖Gl,差集为D=Fl-Gl
注意问题(2个)
①冗余的联系一定在D中,而D中的联系不一定是冗余的。
②当实体之间存在多种联系时,要将实体之间的联系在形式上加以区分。
逻辑结构设计
定义:逻辑结构设计的的任务是把概念结构设计阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。
E-R图向关系模型的转换
①一个1:1联系可以转换成一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换成一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一段实体对应的关系模式合并,则需要在该关系模式的属性中加入另外一个关系模式的码和联系本身的属性。
②一个1:n联系可以转换成一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
③一个m:n联系转换为一个关系模式,与该联系相连的各实体的码以联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
④三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的哥哥实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
⑤具有相同码的关系模式可合并。
数据模型的优化
定义:数据逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该根据应用需要适当修改、调整数据模型的结构。
方法(5个)
①确定数据依赖
②对于各个关系模型之间的数据依赖进行极小化处理,消除冗余的联系。
③按照数据依赖的理论对关系模式进行逐一分析,考察是否存在部分函数依赖,传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。
④根据需求分析阶段得到的处理要求分析对于这样的应用环境这些模式是否合适,确定是否要对这些模式进行合并或分解。
⑤对于模式进行必要分解,提高数据操作效率和卡存储空间利用率。
①水平分解
②垂直分解
设计用户子模式
①使用更符合用户习惯的别名
②可以对不同级别的用户定义不同的视图,以保证系统的安全性
③简化用户对系统的使用
物理结构设计
定义:数据库在物理设备上的存储结构与存储方法称为数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。
数据库物理设计的内容和方法
方法
①首先,对要运行的事务进行详细分析,获得选择物理数据库设计所需要的参数;
②其次,要充分了解所用关系数据库管理系统的内部特征,特别是系统提供的存取方法和存储结构
③作为数据查询事务需要得到的信息
①查询的关系
②查询条件所涉及的属性
③连接条件所涉及的属性
④确定取值依据查询的投影属性
④作为数据更新事务需要得到的信息
①被更新的关系
②每个关系上的更新操作条件所涉及的属性
③修改操作要改变的属性值
⑤每个事务在各个关系运行的频率和性能要求
关系模式存取方法选择
①索引
①B+树索引
②Has索引:等值连接多。
②聚簇
定义:为了提高某个属性的查询速度,把这个或这些属性上具有相同值的元组集中存放在连续的物理块中称为聚簇。该属性称为聚簇码。聚簇功能可以大大提高按聚簇码进行查询的效率。聚簇功能不但适用于单个关系,也适用于经常进行连接操作的多个关系。即把多个连接关系的元组按连接属性值聚集存放,从而大大提高连接操作的效率。一个数据库可以建立多个聚簇,一个关系只能加入一个聚簇。选择聚簇存取方法,即确定需要建立多少个聚簇,每个聚簇中包括哪些关系。
步骤
①确定数据库的存储结构
①确定数据的存放位置:为了提高系统性能,应该根据应用情况将数据的异变部分与稳定部分、经常存取部分和存取频率较低部分分开存放。
②确定系统配置:关系数据库管理系统产品一般都提供了一些系统配置变量和存储分配参数,供设计人员和数据库管理员对数据库进行物理优化。
②评价物理结构:数据库设计人员必须对这些方案进行细致的评价。从中选择一个较优的方案作为数据的物理结构。评价物理数据库的方法完全依赖于所选用的关系数据库管理系统,主要是从定量估计各种方案的存储空间,存储时间和维护代价入手对估算结果进行权衡、比较,选择出一个较优的,合理的物结构。如果该结构不符合用户需求,则需要修改设计。
数据库的实施和维护
数据的载入和应用程序的调试:数据库实施阶段包括两项重要的工作,一个是数据的载入,一个是应用程序的编码。数据库应用程序的设计应该与数据库设计同时进行,因此在组织数据入库的同时还要调试应用程序。
数据库的试运行
①在原有系统的数据有一小部分已输入数据库后,就可以开始对数据库系统进行联合调试了。这又成为数据库的试运行。这一阶段要实际运行数据库应用程序,执行对数据库的各种操作,测试应用程序的功能是否满足设计要求,如果不满足,对应用程序部分则要修改、调整,直到达到设计要求为止。
②在数据库试运行时,还要测试系统的性能指标,分析其是否达到设计目标。如果测试的结果与设计目标不符,则要返回物理设计阶段重新调整物理结构,修改系统参数,某些情况下甚至要返回逻辑设计阶段修改逻辑结构。
注意
①应分期分批地组织数据库入库,先输入小批量数据做调试用,待试运行基本合格后再大批量输入数据,逐步增加数据量,逐步完成运行评价。
②在数据库试运行阶段,由于系统还不稳定,硬、软件故障随时都可能发生,而系统的操作人员对新系统还不熟悉,误操作不可避免,因此要做好数据库的转储和恢复工作。
数据库的运行和维护
维护(4个)
①数据库的转储和恢复
②数据库的安全性、完整性控制
③数据库性能的监督、分析和改造
④数据库的重组织与重构造
数据库运行一段时间后,由于记录不断增删改,将会使数据库的物理存储变坏,降低数据的存取效率,使数据库性能下降,这时数据库管理员就要对数据库进行重新组织。关系数据库管理系统一般都提供重组织用的实用程序。再重组织的过程中,按原设计要求重新安排存储位置、回收垃圾、减少指针链等。提高系统性能,数据库的重组织并不修改原设计的逻辑和物理结构,而数据库的重构造则不同,它是指部分修改数据库的模式和内模式。
数据库编程
嵌入式SQL
定义:嵌入式SQL是将SQL语句嵌入程序设计语言中,被嵌入的程序设计语言,如C、C++等称为宿主语言,简称主语言。
嵌入式SQL的处理过程:对嵌入式SQL数据库管理系统一般采用预编译方法处理,即由数据库管理系统的预处理程序对源程序进行扫描,识别出嵌入式SQL语句,把它们转换成主语言调用语句。以使主语言编译程序能识别它们,然后由主语言的编译程序将纯的主语言程序编译成目标码。
嵌入式SQL语句与诸语言之间的通信
①向主语言传递SQL语句的执行状态信息,使主语言能够据此信息控制程序流程,主要用SQL通信区实现。
②主语言向SQL语句提供参数,主要用主变量实现。
③将SQL语句查询数据库的结果交主语言处理,主要用主变量和游标实现。
不用游标的SQL语句
使用游标的SQL语句
动态SQL
过程化SQL
过程化SQL的块结构:过欧城话SQL是对SQL的扩展,使其增加了过程化语句功能。过程化SQL程序的基本结构是块。所有的过程化SQL程序都是由块组成的。这些块之间可以相互嵌套,每个块完成一个逻辑操作。
变量和常量的定义
流程控制
存储过程和函数
存储过程
定义:存储过程是由SQL语句书写的过程,这个过程经编译和优化后存储再数据库服务器中,使用时只要调用即可。
①由于存储函数不像解释执行的SQL语句那样在操作请求时才进行语法分析和优化工作,因而运行效率高,它提供了在服务器端快速执行SQL语句的有效途径。
②存储过程降低了客户机和服务器之间的通信量。
③方便实施企业规则。
函数
ODBC编程
ODBC概述
ODBC工作原理概述
ODBC API 基础
ODBC的工作流程
关系查询处理和查询优化
关系数据库系统的查询处理
查询处理步骤(4个)
①查询分析:首先对查询语句进行扫描,词法分析和语法分析。从查询语句中识别出语言符号,进行语法检查和语法分析,如果没有语法错误就转入下步处理,否则便报告语句中出现的语法错误。
②查询检查:对合法的查询语句进行语义检查,即根据数据字典中有关的模式定义检查语句中的数据库对象。检查通过后便把SQL查询语句转换程内部表示,关系数据库管理系统一般都用查询树,也称为语法分析树来表示扩展的关系代数表达式。
③查询优化:查询优化就是选择一个高效执行的查询执行策略。按照优化的层次一般可将查询优化分为代数优化和物理优化。
④查询执行:依据优化器得到的执行策略生成查询执行计划,由代码生成器生成执行这个查询计划的代码。然后加以执行,回送查询结果。
实现查询操作的算法示例
①选择操作的实现
①简单的全表扫描算法
②索引扫描算法
②连接操作的实现
①嵌套循环法
②排序-合并算法
③索引连接算法
④hash join算法
关系数据库系统的查询优化
查询优化概述
查询优化的重要性:关系系统的查询优化既是关系数据库管理系统实现的关键技术,又是关系系统的优点所在。它减轻了用户选择存取路径的负担。用户只要提出“干什么”,而不必指出“怎么干”。
查询优化的可能性和优点
①优化器可以从数据字典中获取许多统计信息。
②如果数据库的物理统计信息改变了,系统该可以自动对查询进行重新优化以选择相适应的执行计划。在非关系系统中则必须重写程序,而重写程序在实际应用中往往不太可能的。
③优化器可以考虑数百种不同的执行计划,而程序员一般只能考虑有限的几种可能性。
④优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术。
一个实例
代数优化
指关系代数表达式的优化
关系代数表达式等价变换原则:代数优化策略是通过对关系代数表达式的等价变换来提高查询效率。所谓关系代数表达式的等价是指用相同的关系代数两个表达式中相应的关系所得到的结果是相同的,两个关系表达式E1和E2是等价的,可记为E1=E2。
查询树的启发式优化(5个规则)
①选择运算应尽可能先做。在优化策略中这是最重要的、最基本的一条。
②把投影运算和选择运算同时进行。
③把投影同其前后的双目运算结合起来。
④把某些选择同在它面前要执行的笛卡尔积结合起来成为一个连接运算。
⑤找出公共子表达式。
物理优化
指通过存储路径和底层操作算法的选择进行的优化
基于启发式规则的存取路径选择优化
①选择操作的启发式规则
①对于小关系,使用全表顺序扫描,即使选择列上有索引。
②对于大关系的启发规则(5个)
①对于选择是“主码=值”的查询,查询结果最多是一个元组,可以选择主码索引。一般的关系数据库管理系统会自动建立主码索引。
②对于选择条件是“非主属性=值”的查询,并且选择列上有索引。则要估算查询结果的元组数目,如果比例较小可以使用索引扫描方法,否则是使用全表顺序扫描。
③对于选择条件是属性上的非等值查询或者范围查询,并且选择列上有索引,同样要估算查询结果的元组数目,如果选择率小于10%可使用索引扫描方法,否则还是使用全表顺序扫描。
④对于用AND连接的合取选择条件,如果有涉及这些属性的组合索引,则优先采用组合索引扫描方法,如果某些属性上有一般索引,则可以用索引扫描方法,否则使用全表顺序扫描。
⑤对于用OR连接的析取选择条件,一般使用全表顺序扫描。
②连接操作的启发式规则(4个)
①如果两个表都已经按照连接属性排序,则选用顺序-合并算法。
②如果一个表在连接属性上有索引,则可以选用索引连接算法。
③如果上面两个规则都不适用,其中一个表较小,则可以选用hash join算法。
④最后可以选用嵌套循环法,并选择其中较小的表,确切的讲是占用的块数B较少的表,作为外表。
原因:设连接表R与S分别占用的块数为BR和BS,连接操作使用的内存缓区块数为K,分配K-1块给外表。如果R为外表,则嵌套循环法存取的块数为BR+BRBS/(K-1),显然应选择块数小的表作为外表。
基于代价估算的优化
①统计信息:基于代价的优化方法要计算各种操作算法的执行代价,它与数据库的状态密切相关,为此数据字典中存储了优化器需要的统计信息。
②代价估算示例
①全表扫描算法的代价估算公式
②索引扫描算法的代价估算公式
③嵌套循环连接算法的代价估算公式
④排序-合并连接算法的代价估算公式
启发式规则优化是定性的选择,比较粗糙,但是实现简单而且优化本身的代价较小,适合解释执行的系统。因为解释执行的系统,其优化开销包含在查询总开销之中。在编译执行的系统中,一次编译优化,多次优化,查询优化和查询执行是分开的。因此,可以采用精细复杂一些的基于代价的优化方法。
数据库恢复技术
事务的基本概念
事务:是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务和程序的比较:在关系数据库中一个事务是一条SQL语句、一组SQL语句或整个程序。事务和程序是两个概念。一般地讲,一个程序中包含多个事务。
定义事务:SQL中定义事务地语句一般有BEGIN TRANSACTION、COMMIT、ROLLBACK三条。事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBAC结束。COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。ROLLBACK表示回滚,即在事务运行过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。
事务的ACID特性
事务是恢复和并发控制的基本单位。保证事务ACID特性是事务管理的重要任务。
①原子性A:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
②一致性C:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
③隔离性I:一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
④持续性D:也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
事务ACID特性可能遭到破坏的原因(2个)
①多个事务并行运行时,不同事务的操作交叉执行
②事务在运行过程中被强行停止
数据库恢复概述:计算机系统中的故障、软件的错误、操作员的失误以及恶意的破坏仍是不可避免的,这是故障轻则造成运行事务非正常终端,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失。因此数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(也成为一致状态或完整状态)的功能。数据库系统所采用的恢复技术是衡量系统性能优劣的重要指标。
故障的种类(4种)
①事务内部的故障:有的是可以通过事务程序本身发现的,有的是非预期的。不能由事务程序处理。事务故障意味着事务没有达到预期的终点,因此,数据库可能处于不正确状态。恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已作出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作称为事务撤销。
②系统故障:是指造成系统停止运行的任何事件,使得系统要重新启动。这类故障影响正在运行的所有事务,但不破坏数据库。恢复子系统必须在系统重新启动时让所有非正常终止的事务回滚,强行撤销所有未完成事务。另一方面,发生系统故障时,有些已完成的事务可能有一些部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失,这也会使数据库处于不一致状态,因此应将这些事务已提交的结果重新写入数据库。所以系统重新启动后,恢复子系统除需要撤销所有未完成的事务外,还需要重做(REDO)所有已提交的事务,以将数据库真正恢复到一致状态。
软故障
③介质故障:指外存故障,这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务,这类故障比前两类故障发生的可能性小得多,但破坏性最大。
硬故障
④计算机病毒:计算机病毒是一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序。
总结各类故障对数据库的影响有两种可能性一是数据库本身被破坏,二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。恢复的基本原理十分简单,可以用一个词来概括:冗余。这就是说,数据库中任何一部分被破坏或不正确的数据可以根据存储在系统别处的冗余数据来重建。
恢复的实现技术
数据转储
定义:转储即数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程。这些备用的数据称为后备副本或后援副本。当数据库遭到破坏后可以将后备副本重新装入,但重装后备副本只能将数据库恢复到转储时的状态,要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。
分类
两种状态
①静态转储:是在系统中无运行事务时进行的转储操作。即转储操作开始的时刻数据库处于一致性状态,而转储期间不允许对数据库的任何存取、修改活动。显然,静态转储得到的一定是一个数据一致性的副本。静态转储简单,但转储必须等待正运行的用户事务结束才能进行。同样,新的事务必须等待转储结束才能执行。显然,这会降低数据库的可用性。
②动态转储:是指转出期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。动态转出可以克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。但是,转储结束时后援副本上的数据并不能保证正确有效。为此,必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件。这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。
两种方式
①海量存储:是指每次转储全部数据库,使用海量存储进行恢复一般更加方便。
②增量存储:指每次只转储上一次转储后更新过的数据,如果数据库很大,事务处理又十分频繁,增量转储会更加实用。
4种转储方式
①动态海量转储
②动态增量转储
③静态海量转储
④静态增量转储
登记日志文件
定义:日志文件是用来记录事务对数据库的更新操作的文件。
格式(2个)
①以记录为单位的日志文件
日志文件需要登记的内容
①各个事务的开始标记
②各个事务的结束标记
③各个事务的所有更新操作
每个日志记录包括
①事务标识
②操作的类型
③操作对象
④更新前数据的旧值
⑤更新后数据的新值
②以数据块为的单位的日志文件:内容包括事务标识和被更新的数据块。
作用(3个)
①事务故障恢复和系统故障恢复必须用日志文件。
②在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库。
③在静态转储方式中也可以建立日志文件,当数据库毁坏后可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。这样不必重新运行那些完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态。
登记原则(2个)
①登记的次序严格按并发事务执行的时间次序。
②必须先写日志文件,后写数据库。
是对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。所以为了安全,一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。这就是“先写文件”原则。
恢复策略
事务故障的恢复
定义:指事务在运行至正常终点前被终止,这时恢复子系统应利用日志文件撤销(UNDO)此事务已对数据库进行的修改。事务故障的恢复是由系统自动完成的,对用户是透明的。
步骤(4个)
①反向扫描日志文件,即从最后向前扫描日志文件,查找该事务的更新操作。
②对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
③继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
④如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
系统故障的恢复
定义:系统故障造成数据库不一致状态的原因有两个,一是未完成事务对数据库的更新可能已写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。因此恢复操作就是要撤销故障发生时未完成的事务,重做已完成的事务。系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。
步骤(3个)
①正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标记入重做队列。同时找出故障发生时尚未完成的事务,将其事务标记入撤销队列。
②对撤销队列中的各个事务进行撤销处理。进行撤销处理的方法是,反向扫描日志文件,对每个撤销事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
③对重做队列中的各个事务进行重做处理。进行重做处理的方法是,正向扫描日志文件,对每个重做事务重新执行日志文件登记的操作,即将日志记录中“更新后的值”写入数据库。
介质故障的恢复
定义:恢复方法是重装数据库,然后重做已经完成的事务。
步骤(2个)
①装入最新的数据库后备副本(离故障发生时最近的转储副本),使数据库恢复最近一次转储时的一致性状态。对于动态转储的数据库副本,还需同时装入转储开始时刻的日志文件副本,利用恢复系统故障的方法,才能将数据库恢复到一致性状态。
②装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。即首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列,然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。
介质故障的恢复需要数据管理员介入,但数据库管理员只需要重装最近转储的数据库副本和有关的各日志文件副本,然后执行系统提供的恢复命令即可,具体的恢复操作仍由数据库管理系统完成。
具有检查点的恢复技术
定义:这种技术在日志文件中增加了一类新的记录—检查点记录,增加一个重新开始文件,并让恢复子系统在登录日志文件期间动态地维护日志。
优点:利用日志技术进行数据库恢复时,恢复子系统必须搜索日志文件,确定哪些事务需要做,哪些事务需要撤销。一般来说,需要检查所有日志记录。这样做有两个问题,一是搜索整个日志将耗费大量的时间,二是很多需要重做处理的事务实际上已经将它们的更新操作结果写到了数据库中,然而恢复子系统又重新执行了这些操作,浪费了大量时间,为了解决这些问题,又发展了具有检查点的恢复技术。
记录步骤(4个)
①将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上。
②在日志文件中写入一个检查点记录。
③把当前数据库缓冲区的所有数据记录写入磁盘的数据库中。
④把检查点记录在日志文件中的地址写入一个重新开始文件。
恢复步骤(4个)
①从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。
②由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。
①UNDO-LIST:需要执行UNDO操作的事务集合
②REDO-LIST:需要执行REDO操作的事务集合
③把ACTIVE-LIST暂时放入UNDO-LIST的队列,REDO队列暂为空。
③从检查点开始正向扫描日志文件,有新事物则暂时放入UNDO-LIST,有提交事务则将其从UNDO-LIST转移到REDO-LIST;直到日志文件结束。
④对UNDO-LIST中的每个事务执行UNDO操作,对REDO-LIST中的每个事务执行REDO操作。
数据库镜像
定义:根据数据库管理员的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,每当主数据库更新时,数据库管理系统自动把更新后的数据复制过去,由数据库管理员系统自动保证镜像数据与主数据库的一致性。
用途(2个)
①用户数据库恢复:一旦出现介质故障,可由镜像磁盘继续提供使用,同时数据库管理系统自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。
②提高数据库的可用性:在没有出现故障时,数据库镜像还可以用于并发操作,即当一个用户对数据加排他锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。
并发控制
并发控制概述
定义:事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务。为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度。这些就是数据库管理系统中并发控制机制的责任化。
并发操作都带来的不一致性类型(3个)
①丢失修改:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。
②不可重复读
定义:指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取的结果。
情况(3个)
①事务T1读取某一数据,事务T2对其进行修改,当事务T1再次读该数据时,得到与前一次不同的值。
②事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。
③事务T1按一定条件从数据库中读取数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。
幻影现象
③脏数据:指事物T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这是被T1修改过地数据恢复原值,T2读到地数据就与数据库中地数据不一致,则T2读到地数据就为脏数据,即不正确的数据。
这三种数据不一致性的主要原因是并发操作破坏了事务的隔离性。并发控制机制就是也要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而造成数据的不一致性。并发控制的主要技术有封锁、时间戳、乐观控制法、多版本并发控制等。
封锁
定义:就是事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。
类型(2个)
①排他锁X:又称写锁,若事务T对数据对象A加上了X锁,则只允许T读取和修改A,其他任何事物都不能再对A加任何类型的锁,直到T释放A上的锁为止。这就保证其他任何事务在T释放A上的锁之前不能再读取和修改A。
②共享锁S:又称读锁,若事务T对数据的对象A加上了S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁为止。这就保证了其他事务可以读取A,但在T释放A上的S锁之前不能对A做任何修改。
三级封锁协议
①一级封锁协议:指事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,事务结束包括正常结束和非正常结束。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。
②二级封锁协议:指在一级封锁协议上增加了事务T在读取数据R之前必须对其加S锁,读完后即可释放S锁。二级封锁协议除防止了丢失修改,还可进一步防止读脏数据。
③三级封锁协议:指在一级封锁的协议上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议除了防止丢失修改和读脏数据外,直到事务结束才释放。三级封锁协议除了防止丢失修改和读脏数据外,还能进一步防止不可重复读。
活锁和死锁
活锁
定义:若干事务前后申请封锁同一数据,导致其中某个事务可能永远等待,即活锁情形。
产生原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
应对措施:先来先服务策略,即当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
死锁
定义:两个事务分别封锁了两个数据对象,然后又请求封锁对方已经封锁的数据对象,出现了两个事务互相等待对方释放封锁,从而陷入永久等待的情况。
死锁的预防(2个)
①一次封锁法
定义:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
缺陷(2个)
①一次就将以后要用到的数据全部加锁,势必扩大了封锁的范围,从而降低了系统的并发度。
②数据库中的数据是不断变化的,原来不要求封锁的数据在执行过程中可能会变成封锁对象,所以很难事先精确地确定每个事务所要封锁的数据对象,为此只能扩大封锁范围,将事务在执行过程中可能要封锁的数据对象全部加锁,这就进一步降低了并发度。
②顺序封锁法
定义:是预先对数据对象规定一个封锁顺序,所有事务都按照这个顺序实施封锁。
缺陷(2个)
①数据库系统中封锁的数据对象极多,并且随数据的插入删除等操作而不断变化,要维护这样的资源的封锁顺序非常困难,成本很高。
②事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每个事务要封锁哪个对象,因此也就很难按规定的顺序去施加封锁。
死锁的诊断与解除(2个)
①超时法
定义:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。
缺陷(2个)
①有可能误判死锁
②时限若设置得太长,死锁发生后不能及时发现
②等待图法
定义:事务等待图动态地反映了所有事务的等待情况,并发控制子系统周期性地生成事务等待图,并进行检测。如果发现图中存在回路,则表示系统中出现了死锁,数据库管理系统的并发控制子系统一旦检测到系统中存在死锁,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的锁,使其他事务得以继续运行下去。
并发调度的可串行性
可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化调度。可串行性是并发事务正确调度的准则。按照这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。
冲突可串行化调度
冲突操作:指不同的事物对同一数据的读写操作和写写操作。其他操作是不冲突操作。不同事务的冲突操作和同一事务的两个操作是不能交换的。
定义:一个调度SC在保证冲突操作的次序不变的情况下通过交换两个事务不冲突操作的次序得到另一个调度SC',如果SC'是串行的,称调度SC为冲突可串行化的调度。
性质:若一个调度是冲突可串行化,则一定是可串行化的调度。因此可以用这个方法来判断一个调度是否是冲突可串行化的。
冲突可串行化调度是可串行化调度的充分条件,不是必要条件。
两段锁协议
定义:指所有事务必须分两个阶段对数据项加锁和解锁。
①在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;
②在释放一个封锁之后,事务不再申请和获得任何其他封锁;
两段锁的含义
①第一阶段是获得封锁,也称为扩展阶段,在这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁;
②第二阶段是释放封锁,也称为收缩阶段,在这个阶段事务可以释放任何数据项上的任何类型给的锁,但是不能再申请任何锁。
可以证明,若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。需要说明的是,事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。也就是说,若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的;但是,若并发事务的一个调度是可串行化的,不一定所有事物都符合两段所协议。
两段锁协议和防止死锁的一次封锁法的异同之处:一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。因此一次封锁法遵守两段锁协议;但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。
封锁的粒度
相关概念
①封锁粒度:封锁对象的大小
②封锁对象:可以是逻辑单元,也可以是物理单元。以关系数据库为例,封锁对象可以是这样一些逻辑单元,即属性值、属性值的集合、元组、关系、索引项、整个索引直至整个数据库;也可以是物理单元,即页、物理记录等。
封锁粒度与并发控制的关系:封锁粒度与系统的并发度和并发控制的开销密切相关,直观地看,封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度越小,系统开销也越小;反之,封锁的粒度越小,并发度较高,但系统开销也就越大。
多粒度封锁
定义:一个系统中同时支持多种封锁粒度供不同的事务选择。选择粒度时应该同时考虑封锁开销和并发度两个因素,适当选择封锁粒度以求最优的效果。一般来说,需要处理某个关系的大量元组的事务可以以关系为封锁粒度;需要处理多个关系的大量元组的事务可以以数据库为封锁粒度;而对于一个处理少量元组的用户事务,以元组为封锁粒度就比较合适了。
多粒度树:多粒度树的根节点是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。
三级粒度树:根节点是数据库,数据库的子节点是关系,关系的子节点是元组。四级粒度树:数据库、数据分区、数据文件、数据记录。
多粒度封锁协议:允许多粒度树中的每个结点被独立地加锁。对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁。因此,在多粒度封锁中一个数据对象可能以两种方式封锁,显式封锁和隐式封锁。
①显式封锁:是应事务的要求直接加到数据对象上的锁;
②隐式封锁:是该数据对象上没有被独立加锁,是由于其上级结点加锁而使该数据对象加上了锁;
意向锁
为什么要加意向锁:多粒度封锁方法中,显式封锁和隐式封锁的效果是一样的,因此系统检查封锁冲突时不仅要检查显式封锁还要检查隐式封锁。一般地,对某个数据对象加锁,系统要检查该数据对象上有无显式封锁与之冲突;再检查其所有上级结点,看本事务的显式封锁是否与该数据对象上的隐式封锁(即由于上级结点已加的封锁造成的)冲突;还要检查其所有下级结点,看它们的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突。显然,这样的检查方法效率很低。为此,人们引进了一种新型锁,称为意向锁。
定义:如果对一个结点加意向锁,则说明该结点的下层结点正被加锁;对任一个结点加锁时,必须先对它的上层结点加意向锁。
类型(3个)
①意向共享锁IS:如果对一个数据对象加IS锁,表示它的后裔结点拟加S锁。
②意向排他锁IX:如果对一个数据对象加IX锁,表示它的后裔结点拟加X锁。
③共享意向锁SIX:如果对一个数据对象加SIX锁,表示对它加S锁再加IX锁,即SIX=S+IX。
锁的强度:指它对其他锁的排斥成都。一个事务在申请封锁时加以强锁代替弱锁是安全的,反之不然。
规则:在具有意向锁的多粒度封锁方法中,任意事务T要对一个数据对象加锁,必须先对它的上层结点意向锁。申请封锁时应该按自上而下的次序进行,释放封锁时则应该按自下而上的次序进行。