1.1 数据管理技术与数据库系统
1.1.1 数据管理技术
数据库技术源于对数据的管理技术。数据管理就是指人们对数据进行收集、组织、存储、定位、加工、传播和利用等的一系列活动,它是数据处理的中心问题。数据管理技术大致经历了人工管理、文件系统、数据库管理系统三个发展阶段。
20世纪50年代中期以前,计算机主要用于科学计算,用户需要针对不同的问题编制不同的应用程序,并提供各自所需的数据,程序和数据是一个不可分割的整体。这一时期,程序的数据不能单独保存,也不能被别的程序所共享,数据完全由用户负责管理,这就是数据的人工管理阶段。
20世纪50年代后期至60年代中期,出现了以操作系统为核心的系统软件,操作系统提供了文件系统的管理功能。在文件系统中,数据以文件形式组织和保存,不同内容、不同结构和不同用途的数据分别保存在不同的文件中。所谓文件,就是以一个具体的名称保存在一定存储介质上的一组具有相同结构的记录的集合,而相同结构的记录是指各条记录都具有相同的相关数据项,且相同的数据项具有相同的数据类型、宽度、取值范围等。文件系统提供了文件的建立、打开、读/写和关闭等操作或功能,用户可通过文件系统提供的操作命令建立和使用相应的数据文件,而不必关心数据的物理存储的具体实现细节,数据可以与处理它的程序相分离而单独存在。文件系统的缺点是:独立文件中的数据往往只表示客观世界中单一事物的相关数据,没有提供数据的查询和修改功能,不能反映各种相关事物之间的联系,容易导致数据的冗余和不一致性。
20世纪60年代后期,出现了数据库管理系统(Data Base Management System,DBMS)。DBMS是一种大型的数据处理软件,支持对大量或超大量数据的存储、管理和控制,为用户或应用程序提供了良好的数据库语言。数据库语言包括数据定义语言和数据操纵语言,数据定义语言用于定义数据模式、建立新的数据库,而数据操纵语言用于实现数据的查询、插入、删除和修改等功能。数据库是为了满足某些应用的需要,而在计算机系统中建立起来的相互关联的数据的集合,这些数据按照一定的数据模型组织与存储,并能为所有的应用业务所共享。DBMS使数据真正独立于应用程序,把数据作为一种共享资源为各种应用系统提供服务,从而将数据管理水平提高到一个崭新高度。DBMS是当前数据管理的主要形式。
数据库是20世纪60年代末发展起来的一项重要技术,它的出现使数据的处理进入一个崭新的时代。20世纪60年代末出现了被称为第一代数据库的网状数据库和层次数据库,20世纪70年代则出现了被誉为第二代数据库的关系数据库。自20世纪70年代提出关系数据库模型和关系数据库后,数据库技术便得到蓬勃发展。同时,由于关系数据库结构简单且易于在计算机上实现,已逐渐淘汰第一代数据库,成为当今最流行的商用数据库系统。SQL Server、MySQL、Oracle等关系数据库是当前数据库市场的主流。
进入21世纪以来,人们对数据库技术的研究一刻也没有放松,面向对象的数据库、分布式数据库、多媒体数据库、工程数据库、并行数据库、Web数据库等大量的新型数据库系统不断涌现,数据库技术已成为计算机信息处理以及管理信息系统的核心技术。
1.1.2 数据库与数据库系统
1.数据库的概念
数据库是为满足某一组织中许多用户的不同应用的需要,而在计算机系统中建立起来的相互关联的数据的集合,这些数据按照一定的数据模型组织、描述与存储,具有较小的冗余度、较高的数据独立性和可扩展性,并能为各用户或所有的应用业务所共享。这里的组织是指一个独立存在的单位,可以是学校、公司、银行、工厂、部门或机关等;数据的集合是指组织运行的各种相关数据,如订单数据、库存数据、经营决策数据、计划数据、生产数据、销售数据、成本核算数据等,这些数据的集合以相应的名称进行分类组织和存储,就构成该组织的一个庞大的数据库。
因此,也可以认为,数据库是指长期存储在计算机硬件平台上的、有组织的、可共享的相关数据集合。
2.数据库系统的组成
数据库系统是指一个完整的、能为用户提供信息服务的系统,由计算机系统和计算机网络、数据库和数据库管理系统、数据库应用软件系统、数据库开发管理人员和用户四大部分组成。
(1)计算机系统和计算机网络
数据库是针对各种应用需要而在计算机系统中建立起来的相关数据的集合,数据的组织、查询和管理都离不开计算机系统的支持,加之现代数据库系统要实现网络环境下的远程数据共享、传递和利用,计算机网络也成为现代数据库系统的必备要素。计算机系统和计算机网络中相关的硬件设施和系统软件,构成了数据库系统的基本物质基础。
(2)数据库和数据库管理系统
数据库由数据库管理系统(DBMS)统一管理和控制。DBMS是数据库建立、使用、维护和配置的软件系统,是一种由专业计算机公司提供的、介于数据库与用户应用系统之间的、通用的管理软件,是数据库系统的核心。市场上流行的DBMS包括Oracle、Sybase、SQL Server、MySQL、Informix、Access、Visual FoxPro等。
DBMS通常由三部分组成,即数据描述语言(Data Description Language,DDL)、数据操纵语言(Data Manipulation Language,DML)、数据库管理例行程序。DDL是提供给数据库管理员和应用程序员使用的,如SQL语言的create、alter、drop等语句,用于对数据库中的数据对象进行定义和管理,包括建立数据库、定义或修改数据模式(模式或全局逻辑数据结构、子模式或局部逻辑数据结构、存储模式或物理存储结构)、定义数据保密码以及有关安全性、完整性的规定。DML也称为数据子语言DSL,是提供给用户或应用程序员使用的,如SQL语言的insert、delete、update、select等语句,用于完成对数据库中数据的插入、删除、修改或查询等操作。数据库管理例行程序随系统而异,一般包括系统运行控制程序、语言翻译处理程序及DBMS的公用程序,其中,系统运行控制程序包括系统控制、数据存取、并发控制、数据更新、合法性检验、完整性控制、通信控制等程序;语言翻译处理程序包括DDL翻译、DML处理、终端查询语言解释、数据库控制语言解释等程序;公用程序包括定义公用程序(模式定义、子模式定义、保密定义、信息格式定义等公用程序)和维护公用程序(如数据库重构、故障恢复、统计分析、信息格式维护、日志管理、转存编辑打印等公用程序)。
由此可见,DBMS主要实现数据库定义功能、数据操纵功能、数据库运行管理功能、数据库的建立和维护功能。一般来说,大型DBMS功能较强、较全,小型DBMS功能较弱。
(3)数据库应用软件系统
数据库应用软件系统是一种基于数据库的应用软件系统,它是针对广大用户的某种特殊应用需要,利用某种DBMS建立和开发的数据库应用软件,如读者借阅系统、学生信息系统、通讯录系统等。
(4)数据库开发管理人员和数据库用户
数据库应用系统开发人员是对数据库应用系统进行设计与开发的高级专业软件人员,包括系统分析员、系统程序员,系统分析员负责系统的需求分析和规范说明,而系统程序员负责设计系统程序和编码。
数据库管理员(即DBA)是专业的数据库设计与维护人员,其职责是负责全面管理和控制数据库系统,具体包括定义和存储数据库数据、定义数据的安全性要求和完整性约束条件、监督和控制数据库的使用和运行、数据库的维护和系统性能的改进。
数据库用户则是指通过计算机终端查询和使用数据库中数据的人,其职责就是在规定的权限内安全地使用系统的数据资源,并允许向DBA提出改进和完善数据库系统的合理化建议,通过使用系统更好地发挥数据库的作用。
3.数据库系统的特点
(1)数据结构化
数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。
(2)数据的共享性高,冗余度低,易扩充
数据库的数据不再面向某个应用而是面向整个系统,因此可以被多个用户、多个应用以多种不同的编程语言共享使用。由于数据面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这就使得数据库系统弹性大,易于扩充。
(3)数据独立性高
数据独立性包括数据的物理独立性和数据的逻辑独立性。DBMS具有三级模式结构和二级映象功能,使得内模式改变时概念模式不变、概念模式改变时外模式不变,保证了数据库中的数据具有很高的物理独立性和逻辑独立性。
(4)数据由DBMS统一管理和控制
数据库的共享是并发的共享,即多个用户可以同时存取数据库中的数据,甚至可以同时存取数据库中同一个数据。为此,DBMS必须提供统一的数据控制功能,包括数据的安全性保护、数据的完整性检查、并发控制和数据库恢复。
1.1.3 关系数据库
1.关系数据库的基本概念
关系数据库是以二维表的形式来描述实体及实体间联系的数据库,一个关系就是一张二维表,所以又被称为关系表。作为二维表,不允许出现表中套表的情况。作为关系表,表中不允许出现完全相同的行,也不能出现完全相同的列,但行的顺序或列的顺序无关紧要。表的行称为元组或记录,列称为属性或字段。
在关系表中能唯一标识元组的属性集称为超键。在一个表的全部属性中至少存在一个这样的属性或最小属性集,元组在该属性或最小属性集上取特定的值可以唯一标识一个特定的元组,具有这种特征的属性或最小属性集称为候选键,也称候选关键字或候选码,可以说是不含有多余属性的超键。需要选择某个候选键作为主键,主键也称为主关键字或主码,是被选作元组标识的一个候选键。如果候选键只有一个,那么候选键就是主键。包含在候选键和主键中的属性称为主属性,不包含在任何候选键和主键中的属性称为非主属性。
在有的数据表中存在这样的属性集,该属性集内的属性是由另外两个或多个数据表的全部主键组成的,像这样在数据表中由来自其他数据表的主键构成的属性集称为外键。外键也称为外码,用于描述不同表之间元组的联系。
例如,读者借阅数据库中存在4个二维表,分别是读者表、图书表、借阅表、留言表,如表1-1至表1-4所示,其中,“读者编号”、“图书编号”分别是读者表、图书表的主键,它们都是借阅表的外键,而“读者编号,姓名”可以当作读者表的超键,“图书编号,图书名称”则是图书表的超键;“留言标题,留言内容,留言时间”可作为留言表的主键,“留言人读者编号”则是留言表的外键。这些二维表中,没有完全相同的行和列,也不存在表中套表的情况,各表中列的顺序不影响对各记录的理解,行的顺序也不影响各表对相关信息的表达。因此,该读者借阅数据库属于关系数据库的范畴,数据库中的4个表对应于4个关系。
表1-1 读者表(读者编号为主键)
表1-2 图书表(图书编号为主键)
表1-3 借阅表(读者编号、图书编号为外键)
表1-4 留言表
2.关系数据库设计
(1)数据存储的规范化
规范化是指在一个数据结构中没有重复出现的组项,第一范式是数据存储规范化的最基本的要求,而范式表示的是关系模式的规范化程度。数据存储的逻辑结构一般按第三范式的要求进行设计,通常要将第一范式和第二范式的关系转换为第三范式。
第一范式(First Normal Form,1NF)是指关系中元组的每一个分量(或每一列)都是不可分割的数据项。不符合1NF的关系如表1-5所示,符合1NF的关系如表1-6所示。
表1-5 不符合1NF的关系
(续)
表1-6 符合1NF的关系
第二范式(2NF)是指满足第一范式,且所有非主属性完全依赖于其主键的关系。如果在一个关系R(A,B,C)中,数据元素B的取值依赖于数据元素A的取值,则称B函数依赖于A(简称B依赖于A),或称A决定B,用A→B表示。假如A是由若干属性组成的属性集,且A→B,但B不依赖于A的任何一个真子集,则称B完全函数依赖于A。主键是关系中能唯一标识每个元组(或记录)的最小属性集。2NF同时满足如下两个条件:一是元组中的每一个分量都必须是不可分割的数据项(满足1NF);二是所有非主属性完全依赖于其主键。在表1-7所示的关系中,主键为“读者编号,图书编号”,但由于“图书编号”→“图书名称”,存在非主属性“图书名称”部分依赖于主键的情况,因而不符合2NF。可将该关系分解为表1-8至表1-10所示的3个符合2NF的关系。如果一个规范化的数据结构,其主键仅由一个数据项组成,那么它必然属于第二范式。
表1-7 不符合2NF的关系
表1-8 符合2NF的“读者”关系
表1-9 符合2NF的“图书”关系
表1-10 符合2NF的“读者借阅”关系
第三范式(3NF)是指满足第二范式,且任何一个非主属性都不传递依赖于候选键或主键的关系。假设A,B,C分别是同一个关系R中的3个数据元素,或分别是R中若干数据元素的集合,如果C函数依赖于B,B又函数依赖于A,则C也函数依赖于A,称C传递依赖于A,说明关系R中存在传递依赖。3NF同时满足如下3个条件:一是元组中的每一个分量都必须是不可分割的数据项(满足1NF);二是所有非主属性完全函数依赖于其主键(满足2NF);三是任何一个非主属性都不传递依赖于主键或候选键。表1-11所示的关系中,“图书编号”是主键,满足2NF,由于存在函数依赖关系“图书编号”→“出版社”和“出版社”→“出版社地址”,所以存在非主属性对主键的传递依赖,不符合3NF。可将其分解为表1-12和表1-13所示的消除了传递依赖关系的两个3NF关系。
表1-11 不符合3NF的关系
表1-12 符合3NF的“图书”关系
表1-13 符合3NF的“出版社”关系
除1NF、2NF、3NF外,还有BCNF(Boyce-Codd Normal Form,即鲍依斯-科得范式)、4NF、5NF。但从应用的角度看,建立3NF的数据存储结构(或关系)就可以基本满足应用要求,因此一般按3NF的要求对数据存储的逻辑结构进行设计。与1NF、2NF及非规范化的数据存储结构相比,3NF由于实现按“一事一地”的原则存储,提高了访问及修改的效率,提高了数据组织的逻辑性、完整性和安全性。
若要将非规范化的数据结构转换为3NF形式的数据结构(或关系),可采用以下步骤:首先,去掉重复的组项,转换成1NF,将原数据结构转换为符合1NF的关系;其次,去掉部分函数依赖,转换成2NF,将非主属性部分依赖于主键的关系分解为若干符合2NF的关系;然后,去掉传递依赖,转换成3NF,将具有传递依赖的关系转换成若干符合3NF的关系。
数据存储规范化具有以下作用:首先,使数据冗余度减小,节约数据的存储空间;其次,3NF的数据结构(或关系)能保证数据的一致性,避免出现数据插入异常、更新异常、删除异常等问题,提高数据组织的逻辑性、完整性和安全性,便于数据的修改和维护;再次,按照3NF的要求以尽可能简单的形式表达数据项之间的关系,将有助于对数据及其关系的理解,有助于系统设计阶段的物理设计。
(2)数据库概念结构设计
概念结构设计的任务是根据用户需求,并结合有关数据存储的规范化理论,设计出数据库的概念数据模型(简称概念模型)。概念模型是一个面向问题的数据模型,它明确表达了用户的数据需求,反映了用户的现实环境,与数据库的具体实现技术无关。
概念模型最常用的表示方法是实体-联系方法(Entity-Relationship Approach,E-R方法),E-R方法用E-R图(Entity-Relationship Diagram,ERD)描述某一组织的信息模型(即概念数据模型)。用E-R图表示的概念数据模型称为E-R模型,或称为实体-联系模型。E-R模型中涉及以下几个极为重要的概念。
1)实体。实体是观念世界中描述客观事物的概念。实体可以是人,也可以是物或抽象的概念;可以指事物本身,也可以指事物之间的联系。如读者借阅系统中,一个读者、一本图书、一本期刊等都可以是实体。
2)属性。实体是由若干属性组成的,属性是指实体具有的某种特性。如读者实体可由读者编号、姓名、性别、出生日期、单位、是否学生、会员类别、电话号码、E-mail、密码等属性来刻画,图书实体可以有图书编号、图书名称、内容提要、作者、出版社、定价、类别、ISBN、版次、库存数、在库数、在架位置等属性。
3)联系。现实世界的事物总是存在这样或那样的联系,这种联系必然在信息世界中得到反映。信息世界中,事物之间的联系可分为两类,即实体内部的联系(如组成实体的各属性之间的联系)和实体之间的联系。如读者和图书之间的“借阅”联系就属于实体之间的联系。
4)关键字。关键字也称为键,是实体集中能唯一标识每个实体的属性或属性集合的最小集,如果只有一个这样的属性或属性集合,则称为主关键字或主键;如果存在几个这样的属性或属性集合,则应选择其中一个属性或属性集合为主键,其他能够唯一标识每个实体的属性或最小属性集称为候选关键字或候选键。如“读者编号”“图书编号”属性分别是“读者”“图书”实体的主键。
E-R图是描述实体与实体间联系的图,使用的基本图形符号包括矩形、椭圆、菱形、线段。其中,矩形代表实体,矩形框内标注实体名称;椭圆代表属性,椭圆内标明属性名;菱形代表实体间的联系,菱形内标注联系名;线段用于将属性与实体相连、属性与联系相连或实体与联系相连,实体与联系相连的线段上还要标明联系的类型,即一对一联系(1:1)、一对多联系(1:n)或多对多联系(m:n)。
例如,班级管理系统中,学生、班级、班长为实体,一个班级有多名学生,一名学生只能属于一个班级,班级与学生之间是一对多联系;另外,一个班级仅有一个班长,一个班长只能是一个班的班长,班级与班长之间又构成一对一联系,如图1-1所示。
又如,读者借阅系统中,“读者”“图书”“留言”分别为实体,“借阅”和“发布”为联系,一个读者可以借多本图书,一本图书可以被不同的读者所借阅,“借阅”联系为多对多联系;同样,一个读者可以发布多条留言,一条留言只能由一个读者发布,“发布”联系是1对多联系,其E-R图如图1-2所示。这里为了节省空间和减少图的复杂性,改用椭圆表示属性集,椭圆内标明实体或联系的所有相关属性,标有*号的属性表示实体的主键,即“读者编号”“图书编号”分别是“读者”“图书”实体的主键,而“留言标题,留言内容,留言时间”则可作为“留言”关系的主键。
图1-1 班级管理系统的E-R模型
图1-2 读者借阅系统的E-R模型
(3)数据库逻辑结构设计
逻辑结构设计的任务是把E-R图表达的概念数据模型按一定的方法转换为某个具体的DBMS所能接受的形式,或者说把E-R图表达的概念数据模型转换为由若干个对应的“关系”所构成的关系模型(或称逻辑数据模型)。
为便于描述,这里把关系表示为“关系名(主键*,非主属性1,非主属性2,…,非主属性n,外键)”的形式。其中,主键在关系模型中也称为主码、主关键字等,是能够唯一标识每个元组或每条记录的属性或属性集合的最小集;外键也称为外码、外部关键字,用于将两个或多个实体联系起来。如果一个关系R的某个属性集,是由另外两个或多个关系的所有主键的属性组成的,则这个属性集称为关系R的外键。将E-R图转换为关系模型的基本方法如下。
1)对应E-R图中的每一个实体,分别建立一个关系,实体名作为关系名,实体的属性作为对应关系的属性,实体的主键作为关系的主键。图1-2中3个实体分别对应3个关系:
● 读者(读者编号*,姓名,性别,出生日期,单位,是否学生,会员类别,电话号码,E-mail,密码)
● 图书(图书编号*,图书名称,内容提要,作者,出版社,定价,类别,ISBN,版次,库存数,在库数,在架位置)
● 留言(留言标题*,留言内容*,留言时间*,留言状态)
应当注意,上述“留言”关系不是最终的结果,请留意后面的分析过程。
2)对应E-R图中每个m:n联系,分别建立一个关系,联系名作为对应的关系名,关系的属性包括与该联系连接的所有“多”方实体的关键字及该联系自身的全部属性,与联系有关的各“多”方实体的关键字作为外键。如图1-2中,联系“借阅”对应的关系为:
借阅(读者编号,图书编号,借阅日期,归还日期,还书标记)
3)对E-R图中每个1:1联系,可以在两个实体类型转换成的两个关系的任意一个关系中,加入另外一个关系的关键字和联系的属性。图1-1所示的E-R图对应两个关系:
● 班长(班长号*,学号,任职年月,班号)
● 班级(班号*,班级名称)
图1-1所示的E-R图也可对应以下两个关系:
● 班长(班长号*,学号,任职年月)
● 班级(班号*,班级名称,班长号)
4)对E-R图中每个1:n联系,分别让“1”的一方的关键字及“联系”的属性插入“n”的一方,“1”方的关键字作为“n”方的外键。对于图1-1,应将“班级”实体的关键字“班号”插入到“学生”实体对应的关系中,最终形成如下的“学生”关系:
学生(学号*,姓名,性别,出生日期,电话号码,班号)
而对于图1-2,应将“读者”实体的关键字“读者编号”,以及“发布”联系的属性“回复人读者编号”“回复内容”“回复时间”,插入到“留言”实体对应的关系中,其中“读者编号”作为外键。但为便于区分“回复人读者编号”,将这个作为外键的“读者编号”改名为“留言人读者编号”。因此,读者借阅系统中的“留言”关系对应如下:
留言(留言标题*,留言内容*,留言时间*,留言状态,留言人读者编号,回复人读者编号,回复内容,回复时间)
3.数据表的基本操作
对于关系数据库,有3种最基本的数据操作,即选择、投影和连接。从表中选择若干行或元组的操作称为选择,选择若干列的操作称为投影,而从多个表中按照主键与外键的值相等来选择相关列并生成一组新的元组的操作称为连接。例如,从读者表(表1-1)中选择女性读者的元组如表1-14所示,从读者表(表1-1)中选择读者编号、姓名、性别、电话号码、E-mail的投影操作如表1-15所示,将读者表(表1-1)、图书表(表1-2)、借阅表(表1-3)进行连接和投影操作生成的新表如表1-16所示。
表1-14 选择操作
表1-15 投影操作
表1-16 连接和投影操作
4.数据库的完整性和安全性
(1)数据库的完整性
数据库中的数据应该是完整、正确和彼此相容的,这称为数据库的完整性,完整性靠定义数据的约束规则来实现。数据的约束规则包括属性、元组和数据库(表间)约束。
属性约束就是指定字段的数据类型、宽度、小数位数、字段有效性规则等,例如,性别属性的数据类型为字符型、宽度为1,字段有效性规则为:性别=“男”.OR.性别=“女”。
元组约束就是指定表中各元组都应遵循的记录有效性规则,这种记录有效性规则就是由于元组的各属性之间相互制约关系使得元组应满足的限制条件,例如,借阅表中,各元组应满足以下记录有效性规则:归还日期>=借阅日期。
数据库(表间)约束就是指定在一个数据库表中插入、修改或删除数据时由于受其他表中数据的影响而使数据库遵循的参照完整性约束规则,这种规则包括级联更新、级联删除、限制更新、限制删除和限制插入规则,一般在建立表间永久关系时设置。建立永久关系时,将包含主键(不含外键)、用于描述实体信息的表称为父表或主表,而含有外键、与父表建立关联的表称为子表或相关表。级联更新(或删除)规则规定了在父表中更新关键字值(或删除记录)时,子表中会自动更新相关联记录的相应外键的值(或自动删除相关记录);限制更新(或删除)规则规定了子表中有相关记录存在时不能修改父表中相关记录的关键字值(或删除父表的相关记录);限制插入规则规定了子表中增加记录或修改外键的值时必须保证父表中存在相关记录(即主键值与外键值相等的记录)。例如,对于读者借阅数据库,在借阅表(子表)中插入记录时,读者编号必须存在于读者表(父表)中,表明读者是合法读者,同样,图书编号必须存在于图书表(父表)中,表明图书已登记,否则,读者不能借书(可设置为限制插入);又如,在读者表中删除记录时,要求在借阅表中不能有该读者编号的记录存在,否则不允许删除(设置为限制删除即可)。
(2)数据库的安全性
数据库中的数据应该是安全的,应保护数据库以防止不合法使用,这称为数据库的安全性。安全性靠系统提供的访问控制机制来保证。
访问控制机制一般包括登录验证及规定数据访问权限。登录验证机制是指用户使用系统前必须先注册为合法用户,主要确定用户名、密码及其他身份信息;注册成功后,用户便可通过用户名和密码登录并使用系统,未注册的用户不能正常登录和使用系统。规定数据访问权限是指数据库系统对各用户赋予数据浏览或更新权限;用户对数据只能进行权限内的操作,一切越权操作将被系统拒绝。
(3)数据恢复
1)事务恢复。事务是一组不可分割的操作,这组操作要么全执行,要么一个也不执行,向数据库表中添加一个新的元组就可以理解为一个事务。事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性/永久性(Durability)。原子性指事务中包括的各操作要么全做,要么全不做;一致性指事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状态;隔离性指一个事务的执行不被其他事务干扰;持续性指事务一旦提交,它对数据库中数据的改变就是永久性的。当一个作用于数据库的事务已经开始,但因某种原因尚未完成时,就应撤销该事务,使数据库恢复到事务开始前的状态,这称为事务恢复。事务恢复的主要目的是防止未完成的事务对数据库的数据进行不完整的修改,保证事务的原子特性。一般来说,事务通常以BEGIN TRANSACTION开始,如果要修改数据库中的数据,可先把修改的所有操作存储在一个临时表中,然后作为一个事务提交(COMMIT)到正式的数据库中,当事务未能完成时,发布回滚(ROLLBACK)命令,完成回滚操作,从而使数据库恢复到事务开始前的数据状态。事务恢复有两种方式:一是显式方式,采用系统和用户的交互作用来进行,由用户负责发布提交命令和回滚命令;二是隐含方式,事务恢复的一切过程都是由数据库系统自动完成的。
2)介质恢复。当数据库遇到不能被恢复的故障时,需要用备份系统来恢复当前系统。这就要求经常(或定期)进行系统备份,将相关数据备份到相关的存储介质上,以便恢复系统时使用。这种利用存储介质上备份的数据来恢复当前系统的方式称为介质恢复。介质恢复的基本思想就是进行系统备份。
3)日志文件恢复。日志文件是用来记录对数据库每一次更新活动的文件,文件中一般包含执行更新操作的事务标识、更新前数据的旧值、更新后数据的新值等内容。建立日志文件,并结合使用备份的系统副本才能有效恢复数据库。当数据库发生故障或遭到破坏后,可利用备份的系统副本把数据库恢复到系统数据被备份时的正确状态,然后利用日志文件把已完成的事务重做处理,对故障发生时尚未完成的事务进行撤销处理,即可把数据库恢复到故障发生前某一时刻的正确状态。
(4)并发操作与并发控制
并发操作是指两个或多个事务同时作用于一个数据库。这里的“同时”是一个相对的概念,表示自一个事务从开始操作数据库到该事务终止期间,其他事务也在这个时间段的某个时刻操作该数据库。并发操作可能会发生以下问题:丢失更新、未提交依赖、不能重复读、不一致性分析。
1)丢失更新。丢失更新指两个事务同时对一个数据库表的同一个元组进行有条件修改,其中一个事务对元组的修改被另一事务对元组的修改所覆盖。例如,读者编号为D0002的读者借图书编号为T0001的图书,对于表1-1至表1-3所示的数据库表,以下操作序列构成第一个事务:将图书表中T0001号图书的在库数减1;在借阅表中增加一条读者编号为D0002、图书编号为T0001、借阅日期为当前日期、还书标记为0的借阅记录。同样,读者编号为D0003的读者借图书编号为T0001的图书,以下操作序列构成第二个事务:将图书表中T0001号图书的在库数减1;在借阅表中增加一条读者编号为D0003、图书编号为T0001、借阅日期为当前日期、还书标记为0的借阅记录。假设t1时刻,D0002号读者借书,读出图书表中T0001号图书的在库数为10,第一个事务还未完成;在t2时刻,D0003号读者通过另一终端借书,读出图书表中T0001号图书的在库数为10,第二个事务也未完成;在t3时刻,第一个事务修改图书表,将D0002号读者借书的数据反映到图书表中,即T0001号图书在库数改为9;在t4时刻,第二个事务修改图书表,由于t2时刻读出的T0001号图书的在库数为10,所以第二个事务将D0003号读者借书后的T0001号图书的在库数改为9;在其他时刻,第一个事务、第二个事务分别将D0002、D0003号读者的借阅数据添加到借阅表中。按理说,两人借书后,图书表中T0001号图书的在库数应为8,但由于并发操作,使第二个事务获得的实施修改前的数据(10)和实际数据(9)不一致,而第一个事务在t3时刻对数据库的修改被第二个事务在t4时刻的修改所覆盖,从而造成更新丢失。这样,图书表中最终T0001号图书的在库数为9也就不足为怪了。如表1-17所示。
2)未提交依赖。未提交依赖也称读“脏”数据,即两个事务同时作用于一个数据库表,第一个事务进行数据更新时,第二个事务正好检索到此数据,但紧接着又撤销了第一个事务的更新操作,使第二个事务检索到一个数据库中不存在的数据(“脏”数据)。对于表1-2所示的图书表,未提交依赖举例如表1-18所示。
3)不能重复读。不能重复读是指第一个事务读取某一数据,第二个事务读取并修改了同一数据,第一个事务为了校对目的再读此数据,得到不一致的结果,即不能重复读原数据。对于表1-2所示的图书表,不能重复读举例如表1-19所示。
表1-17 丢失更新
表1-18 未提交依赖
表1-19 不能重复读
(续)
4)不一致性分析。不一致性分析是指两个事务同时作用于一个数据库表,第一个事务对数据库进行求和统计后,第二个事务对该数据库进行了更新,造成第一个事务的统计结果和实际情况不符。对于表1-2所示的图书表,不一致性分析举例如表1-20所示。
表1-20 不一致分析
要解决上述并发操作所引发的问题,就必须进行并发控制。并发控制就是用正确的方式调度并发操作,避免造成数据的不一致性,使一个事务的执行不受其他事务的干扰。并发控制的基本策略就是数据封锁,即在正式更新数据前,先封锁记录或整个数据表,使数据更新期间其他事务暂时无法访问该记录或数据表,数据更新完成后再撤销数据封锁。这样,便可保证并发操作结果的正确性。
1.1.4 数据模型与数据模式
1.数据模型
数据模型是描述现实世界中客观对象及其相互联系的工具,是一组严格定义的概念的集合。它强调数据库的框架、数据结构的格式,但不关心具体对象的数据。
数据模型由数据结构、数据操作和数据的完整性约束规则三部分组成,这三个组成部分称为数据模型的三要素。数据结构主要描述系统中客观对象的数据组织形式(如各对象的数据项组成、数据类型、关键字等)及数据之间的相互联系,是对系统静态特性的描述;数据操作描述对各种对象的实例允许进行的操作(数据的查询、插入、删除、修改等)及有关的操作规则,是对系统动态特性的描述;完整性约束规则主要描述数据及其联系应满足的约束条件和依存规则。
针对不同的数据对象和应用目的,将数据模型分为概念(数据)模型、逻辑(数据)模型和物理(数据)模型三类。概念模型描述一个单位的概念化结构,将现实世界抽象为信息世界,如实体-联系模型(E-R模型)、面向对象模型(OO模型)等,这类模型与DBMS无关,不依赖于具体的计算机系统,仅用于数据库的设计。逻辑模型反映数据的逻辑结构,包括字段、记录、文件等,如关系数据模型、层次数据模型、网状数据模型,这类模型与DBMS有关,通常需要严格的形式化定义,以便在计算机上实现。物理模型反映数据的存储结构,包括存储介质的物理块、指针、索引等,它不仅与DBMS有关,而且与计算机系统的硬件和操作系统有关。
2.数据模式
数据模式是指以选定的某种数据模型为工具,对一个具体系统被处理的具体数据进行描述,反映了一个系统内各种事务的结构、属性、联系和约束。数据模式的取值称为实例,反映数据库在特定时刻的状态。
数据模式按层次级别由低到高划分为内模式、概念模式和外模式,称为三级数据模式结构,如图1-3所示。数据库中描述数据物理结构的为内模式(或存储模式),描述全局逻辑数据结构的为概念模式(或模式),描述局部逻辑数据结构的为外模式(或子模式)。内模式是用物理数据模型对数据进行的描述,规定了数据项、记录、数据集、指引元、索引和存取路径等一切数据的物理组织,以及记录的位置、虚拟数据、块的大小与溢出区等,一个数据库只有一个内模式。概念模式是数据库中全部数据的逻辑表示和特性描述,是数据库的框架和结构,主要定义记录、数据项、数据完整性约束及记录之间的联系,整个数据库只有一个概念模式。外模式是用逻辑数据模型对用户用到的那部分数据进行的描述,是数据库用户看到的数据视图,用户的不同应用需求对应有不同的外模式,每个外模式中的记录型都是概念模式中的记录型的子集。这三种数据模式均由DBMS实现。
图1-3 数据库三级数据模式结构二级映像功能
DBMS提供了这三级数据模式结构的二级映像功能,保证了程序与数据的独立性。首先,概念模式与内模式之间有概念模式/内模式映像,如果内模式或存储模式改变,可通过修改此映像使概念模式保持不变,从而不必修改程序,这称为程序与数据的物理独立性。其次,外模式与概念模式之间有外模式/概念模式映像,如果概念模式改变,可通过修改此映像使外模式保持不变,从而不必修改程序,这称为程序与数据的逻辑独立性。