(5)数据库的建立和维护 包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组织和重构造以及有性能监测分析等功能。
(6)其它功能 包括DBMS与网络中其它软件系统的通信功能;一个DBMS与另一个DBMS或文件系统的数据转换功能等。 3.DBMS与操作系统 通常DBMS是建立在操作系统环境之上的。根据具体操作系统的特点,DBMS可以用不同的方法利用操作系统的基本功能来实现DBMS。一般有下面3类方法: (1)共享模块法 (2)分离进程法 (3)和操作系统融合 4.DBMS程序模块的组成 作为一个庞大的系统软件,DBMS由众多程序模块组成,它们分别实现DBMS复杂而繁多的功能。数据库定义方面 有DDL翻译处理程序(包括外模式、模式、存储模式处理程序)、保密定义处理程序(如授权定义处理程序)、完整性约束定义处理程序等。这些程序接收相应的定义,进行语法、语义检查,把它们翻译为内部格式存储在数据字典中。DDL翻译程序还根据模式定义负责建立数据库的框架(即形式一个空库),等待装入数据。数据库操纵方面 有DML处理程序、终端查询语言解释程序、数据存取程序、数据更新程序等。DML处理程序或终端查询语言解释程序对用户数据操纵请求进行语法、语义检查、由数据存取或更
46 / 254
新程序完成对数据库的存取操作。数据库运行管理方面 有系统初启程序,负责初始化DBMS、建立DBMS的系统缓冲区、系统工作区 打开数据字典等等。还有安全性控制、完整性检查、并发控制、事务管理、运行日志管理等程序模块,在数据库运行过程中监视着对数据库的所有操作,控制管理数据库资源,处理多用户的并发操作等。它们一方面保证用户事务的正常运行,一方面保证数据库的安全性和完整性。数据库组织、存储和管理方面 有文件读写与维护程序、存取路径(如索引)管理程序、缓冲区管理程序(包括缓冲区读、写、淘汰等模块),这些程序负责维护数据库的数据和存取路径,提供有效的存取的方法。数据库建立、维护和其它。有数据库初始数据装入程序、转储程序、恢复程序、数据库重构造程序、数据转换程序、通信程序等。DBMS的这些组成模块互相联系,互相依赖,共同完成DBMS复杂的功能。这些模块之间的联系有一定的层次关系。 5.DBMS的层次结构 和操作系统一样,可以也应该将DBMS划分成若干层次。许多DBMS实际上就是分层实现的。最上层是应用层,位于DBMS核心之处。它处理的对象包括各种各样的数据库应用,如用宿主语言编写的应用程序、终端用户通过应用接口(如FORMS)发出的事务请求等。该层是DBMS的最终用户和应用程序的界面层。第二层是语言翻译处理层。它处理的对象是数据库语言,如SQL。提供的数据接口是关系、视图,即元组的集合。其功能是对数据库语言的各类语句进行语法分析、视图转换、授权检查、完整性检查、查询优化等。通过对下层基本模块的调用,生成可执行代码。这些代码的运行,即可完成数据库语句的功能要求。第三层是数据存取层。该层处理的对象是单个元组。它把上层的集合操作转化为单记录操作。执行扫描、排序、元组的查找、插入、修改、删除、封锁等基本操作。完成数据记录的存取、存取路径维护、并发控制、事务管理等工作。第四层是数据存储层。该
47 / 254
层处理的对象是数据页和系统缓冲区,执行文件的逻辑打开、关闭、读页、写页、缓冲区读和写、页面淘汰等操作,完成缓冲区管理、内外存交换、外存管理等功能。操作系统是DBMS的基础,它处理的对象是数据文件的物理块。执行物理文件的读写操作,保证DBMS对数据逻辑上的读写真实地映射到物理文件上。操作系统提供的存取原语和基本的存取方法通常作为和DBMS存储层的接口。 6.语言处理 语言翻译处理层的任务就是把用户在这两种方式下提交给DBMS的数据库语句转换成对DBMS内层可执行的基本存取模块的调用序列。数据库语言通常包括DDL,DML,DCL三部分语句。DDL语句处理相对独立和简单。DML和DCL则较为复杂。具体来说,对DDL语句,语言翻译处理层首先把它翻译成内部表示,然后把它存储在系统的数据字典中。对DCL语句的定义部分,如安全保密定义、存取权限定义、完整性约束条件定义等处理与DDL相同。在RDBMS中数据字典通常采用和普通数据同样的表示方式。数据字典包括关系定义表、属性表、视图表、视图属性表、视图表达式表、用户表、存取权限表、??。
(1)解释方法一些数据库系统(如dBASEⅢ)对上述方法进行了改进,通过尽量推迟聚束过程来赢得数据独立性。具体做法是:直到执行前,数据库DML语句都以原始字符串的形式保存。随着数据库系统的发展,这种方法已逐步为预编译技术所取代。 (2)预编译方法已经看到,将聚束过程提前,固然可达到系统的高效率,但失去了数据库的一个主要优点———数据独立性;将聚束时间推迟,赢得了数据性,却增加了执行高效率的代价。预编译方法就是为了克服它们的缺点,保持两者的优点而提出的。其基本思想是,在用户提供了DML语句后,在运行前对它进行翻译处理,保存产生好的执行代码,运行时加以执行。但是,
48 / 254
使用这种方法会遇到这样的问题:在聚束过程中进行优化所依据的条件可能在运行前已不存在,或者数据结构被修改,因而导致已作出的规划在执行时不再有效。例如,假设在聚束过程中决定使用某一索引来加快存取速度,而在程序编译完成之后,运行之前,该索引被删除了。那么,运行时就会出现不可预测的现象。为了解决这类问题,采用了重编译方法。即当数据库中某些成分的改变而使一些程序的编译结果无效时,再对它们执行一次编译。重编译可在不同时刻进行。为了提高整个系统的效率,不应在数据库某一成分改变后就马上对受影响的那些源程序重编译,较好的方法是将受影响的编译结果置“无效”标志,在其被执行时才进行自动重编译。自动重编译技术使得编译方法既拥有了编译时进行束缚所带来的高效率,又具备了执行时束缚所带来的数据独立性。实践证明,预编译方法的效率比其它方法高两倍以上。 7.数据存取层 数据存取层介于语言处理层和数据存储之间。它向上提供单元组接口,即导航式的一次一个元组的存取操作。向下则以系统缓冲区的存储器接口作为实现基础。
(1)提供一次一个元组的查找、插入、删除、修改等基本操作。
(2)提供元组查找所循的存取路径以及对存取路径的维护操作。如对索引记录的查找、插入、删除、修改。 (3)对记录和存取路径的封锁、解锁操作。 (4)日志文件的登记和读取操作。
(5)辅助操作。如扫描、合并/排序,其操作对象有关系、有序表、索引等。为了完成上述功能,通常把存取层又划分为若干
49 / 254
功能子系统加以实现。 8.缓冲区管理 数据存取层的下面是数据存储层(简称存储层)。存储层的主要功能是存储管理。包括缓冲区管理、内外存交换、外存管理等。其中缓冲管理是最主要的。存储层向存取层提供的接口是由定长页面组成的系统缓冲区。系统缓冲区的设立是出于两方面的原因:一是它把存储层以上各系统成分和实在的外存设备隔离。外存设备的变更不会影响其它系统成分,使DBMS具有设备独立性。二是提高存取效率。DBMS利用系统缓冲区滞留数据。当存取层需要读取数据时存储子系统首先到系统缓冲区中查找。只有当缓冲区不存在该数据时才真正从外存读入该数据所在的页面。当存取层写回一元组到数据库中时,存储子系统并不把它立即写回外存,仅把该元组所在的缓冲区页面作一标志,表示可以释放。只有当该用户事务结束或结束缓冲区已满需要调入新页时才按一定的淘汰策略把缓冲区中已有释放标志的页面写回外存。这样可以减少内外存交换的次数,提高存取效率。系统缓冲区可由内存或虚存组成。由于内存空间紧张,缓冲区的大小、缓冲区内存和虚存部分的比例要精心设计。针对不同的应用和环境按一定的模型进行调整。既不能让缓冲区占据太大内存空间,也不能因空间太小而频频缺页调页,造成“抖动”,影响效率。缓冲区由控制信息和若干定长页面组成。缓冲区管理模块向上层提供的操作是缓冲区的读(READBUF)、写(WRITEBUF)。缓冲区内部的管理操作有:查找页、申请页、淘汰页。缓冲区管理调用OS的操作有:读(READ)、写(WEITE)。 9.数据库的物理组织 数据库是大量数据的有结构的综合性的集合,如何将这样一个庞大的数据集合以最优的形式组织起来存放在外存上是一个非常
50 / 254
全国计算机四级数据库考试复习资料
一、数据模型 1.数据模型的三要素 (1)数据结构 数据结构是所研究的对象类型(Object Type)的集合。这些对象和对象类型是数据库的组成成分。一般可分为两类:一类是与数据类型、内容和其它性质有关的对象;一类是与数据之间的联系有关的对象。前者如网状模型中的数据项和记录,关系模型中的域、属性和关系等。后者如网状模型中的关系模型(set type)。在数据库领域中,通常按照数据结构的类型来命名数据模型,进而对数据库管理系统进行分类。如层次结构、网状结构和关系结构的数据模型分别称作为层次模型、网状模型和关系模型。相应地,数据库分别称作为层次数据库、网状数据库和关系数据库。
(2)数据操作 数据操作是指对各种对象类型的实例(或值)所允许执行的操作的集合,包括操作及有关的操作规则。在数据库中,主要的操作有检索和更新(包括插入、删除、修改)两大类。数据模型定义了这些操作的定义、语法(即使用这些操作时所用的语言)。数据结构是对系统静态特性的描述,而数据操作是对系统动态特性的描述。两者既有联系,又有区别。 (3)数据的约束条件 数据的约束条件是完整性规则的集合。完整性规则是指在给定的数据模型中,数据及其联系所具有的制约条件和依存条件,用以限制符合数据模型的数据库的状态以及状态的变化,确保数据的正确性、有效性和一致性。 2.概念模型 数据模型是数据库系统的核心和基础。每个DBMS软件都是基于某种数据模型的。为了把现实世界中的具体事物或事物之间的联
1 / 254
系表示成DBMS所支持的数据模型,人们首先必须将现实世界的事物及其之间的联系进行抽象,转换为信息世界的概念模型;然后将信息世界的概念模型转换为机器世界的数据模型。也就是说,首先把现实世界中的客观对象抽象成一种信息结构。这种信息结构并不依赖于具体的计算机系统和DBMS。然后,再把概念模型转换为某一计算机系统上某一DBMS所支持的数据模型。因此,概念模型是从现实世界到机器世界的一个中间层次。现实世界的事物反映到人的大脑之中,然后人们开始认识这些事物,经过选择、命名、分类和组织等抽象工作之后形成概念模型,并进入到信息世界。
?用户(user) 关心的是现实世界中的事物、事物的属性及其相互关系。例如,用户可能关心他的顾客及其属性,如顾客地址、银行帐号等等。用户也关心自己的定货帐目,如谁订的货、订的什么和订多少等等。
?系统分析员(analyst) 同样也关心现实世界,但是系统分析员需要分析用户的信息需求。作为需求分析的结果,分析员必须以文档的形式对需求进行结构化的描述;这个文档就是信息模型。
?实体(Entity) 实体是构成数据库的基本元素。实体是指一个存在的东西以区别这个东西所具有的属性和这个东西与其它东西的联系。实体可以是人,也可以是物;可以是实际对象,也可以是概念;可以是事物本身,也可以是指事物之间的联系。 ?属性(Attribute) 一个实体可以由若干个属性来刻画。属性是相对实体而言的,是实体所具有的特性。 ?关键字(Key) 能唯一地标识实体的属性的集合称为关键字(或码)。 ?域(Domain) 属性的取值范围称作域。
?实体型(Entity Type) 一类实体所具有的共同特征或属性的集合称为实体型。一般用实体名及其属性来抽象地刻画一类实体
2 / 254
的实体型。
?实体集(Entity Set) 同型实体的集合叫实体集。例如,学生就是一个实体集。实体集的名即是实体型。对于学生和(学号,姓名,年龄,系,年级)均是实体型,而学生是对实体型(学号,姓名,年龄,系,年级)所起的名称,两者是指同一客观对象。但本科生和研究生可以为相同实体型,而实体集不同。
?联系(Relationship) 现实世界的事物之间是有联系的。一般存在两类联系:一是实体内部的组成实体的属性之间的联系,二是实体之间的联系。在考虑实体内部的联系时,是把属性看作为实体。一般来说,两个实体之间的联系可分为三种:
(1)一对一(1∶1)联系 若对于实体集A中的每一个实体,实体集B中至多有唯一的一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记作1∶1。
(2)一对多(1∶n)联系 若对于实体集A中的每个实体,实体集B中有n个实体(n≥0)与之联系;反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1∶n。相应地有多对一(n∶1)联系 多对一联系,从本质上说,是一对多联系的逆转。其定义同一对多联系类似,不再赘述。
(3)多对多(m∶n)联系 若对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系;反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之对应,则称实体集A与实体集B具有多对多联系,记作m∶n。实质上,多对多联系是任意一种联系。另外,同一实体集内的各个实体间也可以有各种联系。概念模型的表示方法最常用的是实体一联系方法(Entity-Relationship Approach),简称E-R方法。该方法是由P.P.S.Chen在1976年提出的。E-R方法用E-R图来描
3 / 254
述某一组织的概念模型。在这里仅介绍E-R图的要点。在E-R图中: a)长方形框表示实体集,框内写上实体型的名称。
b)用椭圆框表示实体的属性,并用有向边把实体框及其属性框连接起来。
c)用菱形框表示实体间的联系,框内写上联系名,用无向边把菱形框及其有关的实体框连接起来,在旁边标明联系的种类。如果联系也具有属性,则把属性框和菱形框也用无向边连接上。 3.三种主要的数据模型 实际DBMS所支持的数据模型主要有三种: ?层次模型(Hierarchical Model) ?网状模型(Network Model)
?关系模型(Relational Model)其中,关系模型是当前DBMS所支持的数据模型的主流。90年代运行的DBMS几乎都是基于关系模型的。层次模型和网状模型统称为非关系模型。非关系模型的结构可以和图论中的图相对应,比较直观,但在理论上不完备,实现效率较低,故此目前很少用。但是最近,层次模型在研究面向对象的DBMS中已得到重视。在关系模型中,数据在用户的观点中(或在用户视图中)的逻辑结构是一张二维表(Table)。 ?关系(Relation),对应于平常讲的一张表。 ?元组(Tuple),表中的一行。
4 / 254
?属性(Attribute),表中的一列称为一个属性,给每一列起一个名,称为属性名。这一列或这个属性所有可能取的值的集合称为这个属性的值域(Domain),值域中的一个元素叫做这个属性的值。
?主关键字(Primary Key Attribute或Primary Key),是指能唯一标识一个元组的一个或一组属性。 ?分量(Attribute value),是指元组中的一个属性值。
?关系模式(Relational Schema),是对关系的描述,一般用关系名(属性名1,属性名2,?,属性名n)来表示。同层次模型和网状模型相比较,关系模型具有下列特点:
(1)概念单一 在关系模型中,无论是实体还是实体之间的联系都用关系来表示。在关系模型中,在用户的观点中,数据的逻辑结构就是表,也只有这唯一的概念。在非关系模型中,用户要区分记录型与记录型之间的联系两个概念;当环境复杂时,数据结构异常复杂,难以掌握。而关系模型,由于概念单一,可以变复杂为直观、简单,易学易用。
(2)规范化 所谓关系规范化是指在关系模型中,每一个关系都要满足一定的条件要求。这些条件被称为规范条件。对于关系,一个最基本的规范条件是,要求关系中的每一个属性(或分量)均是不可分的数据项;也就是说不允许表中有表,表是不可嵌套的。
(3)在关系模型中,用户对数据的操作的输入和输出都是表,也就是说,用户通过操作旧表而得到一张新表。总之,关系模型概念简单,结构清晰,用户易学易用,有严格的以数学为基础的关系理论作指导,便于DBMS的实现。基于关系的DBMS简化了应用程序员的工作,便于数据库应用系统的设计和维护。故此,关系模型自诞生以后就得到了迅速的发展,成为应用最为广泛
5 / 254
法,使这三方面的性能都较好。折衷有时是必须的。
(2)存取路径的选择和调整 数据库必须支持多个用户的多种应用,因而必须提供对数据库的多个存取入口,也就是对同一数据存储要提供多条存取路径。物理设计的任务应确定建立哪些存取路径。设计者应该进行定量的分析,根据计算结果确定存取路径。
(3)确定数据存放位置 首先按数据的应用情况划分为不同的组,然后确定存放位置。一般的应把数据的易变部分和稳定部分分开,把经常存取和不常存取的数据分开。经常存取或存取时间要求高的记录应存放在高速存储器上,如硬盘。存取频率小或存取时间要求低的放在低速存储器上,如软盘磁带。对于同一数据文件也可根据情况进行水平划分或垂直划分。
(4)确定存储分配 许多DBMS提供了存储分配的参数供设计者物理优化处理用。例如溢出空间的大小和分布参数,块的长度,块因子的大小,装填因子,缓冲区的大小和个数等等,它们都要在物理设计中确定。这些参数的大小影响存取时间和存储空间的分配。物理设计过程需要对时间、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案。在实施数据库前对这些方案进行方案进行细致的评价,以选择一个较优的方案是十分必要的。 6.数据库应用系统的实施和维护 对数据库的物理设计初步评价完成后就可建立数据库了。数据库应用系统实施对应于软件工程的编码、调试阶段。设计人员运用DBMS提供的数据定义语言将逻辑设计和物理设计的结果严格地描述出来,成为DBMS可接受的源代码。经过调试产生目标模式。然后组织数据入库。组织数据入库是数据库应用系统实施阶段最主要的工作。
41 / 254
(1)数据库数据的载入和应用程序的开发由于数据库数据量一般都非常大,并且这些数据来源于一个组织的各个部门,分散在各种数据文件或原始凭证中。这些数据的结构和格式一般也不符合数据库的要求,还要进行转换。因此组织数据入库是一件耗费大量人力物力的工作。数据的转换和组织对于小系统可以用人工方法完成。但是,人工转换效率低、质量差。一般来说,应设计一个数据输入子系统让计算机完成这个工作。输入子系统的主要功能是:原始数据的输入、抽取、校验、分类、转换和综合,最终把数据组织成符合数据库结构的形式。然后把数据存入数据库中。数据的转换、分类和综合常常要经过多次才能完成,因而输入子系统的设计和实施亦是比较复杂的,要编写许多应用程序。输入子系统的设计不能等物理设计完成后才动手,应该和数据库设计工作并行开展。为了保证数据库数据正确无误,必须高度重视数据的检验工作。在输入子系统进行数据转换的过程中应该进行多次检验,每次检验的方法亦不要相同。对于重要数据的校验更应该反复多次,确认正确后方可入库。数据库应用系统中应用程序的设计应该和数据库模式设计并行。数据库应用系统的实施阶段的另一项工作便这是这些应用程序的编码、调试工作。有了装载实际数据的数据库和应用程序,就建立了数据库应用系统,可以试运行了。
(2)数据库应用系统的试运行在完成上述工作之后,便可进入数据库的试运行阶段,或者称联合调试阶段。这阶段的主要工作是:
①实际运行应用程序,执行对数据库的各种操作,测试应用程序的功能。
②测量系统的性能指标,分析是否符合设计目标。虽然已在物理设计过程中进行了性能预测,但是仅仅估价了时间和空间指标,而且在性能估价的过程中作了许多简化和假设,忽略了许多次要因素,因而估价是粗糙的并可能失真。必须在试运行阶段进行
42 / 254
实际测量和评价。有些参数的最佳值往往是经过运行调试后才找到的。如果实际结果不符合设计目标,则需返回物理设计阶段,调整物理结构,修改参数。有时,也许还需要返回逻辑设计阶段,调整逻辑结构。最后还须指出两点。
第一,上面已看到组织数据入库是十分费事的,如果运行调试后又要修改数据库设计则又要重新组织数据入库。因此应分批分期输入数据,逐步完成运行评价。
第二,数据库的实施和调试不是一朝一夕能完成的,在此期间软硬件的错误随时可能发生。加上数据库刚刚建立,工作人员对系统还不熟悉,对其规律更缺乏深入了解,容易发生操作错误。因此必须做好数据库的转储和恢复工作,这就要求设计人员了解DBMS的这个功能,并根据调试方式和特点首先实施,尽量减少对数据库的破坏并简化故障恢复。
(3)数据库应用系统的运行和维护数据库应用系统投入运行标志着开发任务的基本完成和维护工作的开始,但并不意味着设计过程结束。任何数据库应用系统只要它存在一天,它的设计就得不断地进行评价、调整、修改,甚至完全改革。因此数据库应用系统的维护不仅是维护其正常活动而且是设计工作的继续和提高。维护阶段的主要工作是: ①数据库的安全性、完整性控制及系统的转储和恢复; ②性能的监督、分析和改进;
③数据库的重组织和重构造。下面简单介绍数据库的重组织和重构造。数据库运行一段时间后,由于记录的不断增、删、改,会使数据库的物理存储变坏。例如,逻辑上属于同一记录型或同一关系的数据被分散到了不同的文件或文件的多个碎片上。从而降低了数据库存储空间的利用率和数据的存取效率,数据库的性能下降。这时,DBA就要进行数据库的重组织,DBMS一般都
43 / 254
提供重组织用的实用程序。在重组过程中,按原设计要求重新安排记录的存储位置,调整数据区和溢出区,回收“垃圾”,减少指针链等。数据库的重组织不改变原设计的数据逻辑结构和物理结构。而数据库的重构造则不同。部分修改原数据库的模式或内模式称为数据库的重构造。由于数据库应用环境的变化,数据库重构的程度是有限的。只能作部分的修改和调整。若应用变化太大,重构也无济于事了,则表明数据库应用系统生命周期的结束,应该重新设计数据库应用系统。新的数据库应用系统新的生命周期开始了。
九、数据库管理系统的设计与实现 1.DBMS的目标 (1)用户界面友好 对一个实用DBMS来说,用户界面的质量直接影响其生命力。DBMS的用户接口应面向应用,采用适合最终用户的交互式、表格式、菜单式、窗口式等界面形式,以方便使用和保持灵活性。一般地说,用户界面应具有可靠性、简单性、灵活性和立即反馈等特性。
(2)功能完备 DBMS功能随系统的规模的大小而异。大型DBMS功能齐全,小型DBMS功能弱一些。DBMS主要功能包括数据定义、数据库数据存取、事务控制、数据库组织和存储管理、数据库安全保护等等。我们在下面讨论这些功能的内容。
(3)效率高 系统效率包括三个方面:一是计算机系统内部资源的使用效率。能充分利用资源(包括存储空间、设备、CPU等),并注意使各种资源负载均衡以提高整个系统的效率,二是DBMS本身的运行效率。三是用户的生产率。这是指用户学习、使用
44 / 254
DBMS和在DBMS基础上开发的应用系统的效率。 2.DBMS的基本功能 (1)数据库定义 对数据库的结构进行描述,包括外模式、模式、内模式的定义;数据库完整性的定义;安全保密定义(如用户口令、级别、存取权限);存取路径(如索引)的定义。这些定义存储在数据字典(亦称为系统目录)中,是DBMS运行的基本依据。为此,提供数据定义语言DDL。
(2)数据存取 提供用户对数据的操纵功能,实现对数据库数据的检索、插入、修改和删除。一个好的DBMS应该提供功能强易学易用的数据操纵语言(DML)、方便的操作方式和较高的数据存取效率。DML有两类:一类是宿主型语言,一类是自含型语言。前者的语句不能独立使用而必须嵌入某种主语言,如C语言、COBOL语言中使用。而后者可以独立使用,通常以供终端用户交互使用和批处理方式两种形式使用。
(3)数据库运行管理 这是指DBMS运行控制、管理功能。包括多用户环境下的并发控制、安全性检查和存取权限控制、完整性检查和执行、数据加密、运行日志的组织管理、事务的管理和自动恢复(保证事务的正确性),这些功能保证了数据库系统的正常运行。
(4)数据组织、存储和管理 DBMS要分门别类地组织、存储各类数据,包括数据字典(亦称系统目录)、用户数据、存取路径等等。要确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系。数据组织和存储的基本目标是提高存储空间利用率,选择合适的存取方法确保较高存取(如随机查找、顺序查找、增、删、改)效率。
45 / 254
2.完整性 数据库的完整性是指数据的正确性和相容性。DBMS必须提供一种功能来保证数据库中数据的完整性。这种功能亦称为完整性检查,即系统用一定的机制来检查数据库中的数据是否满足规定的条件。这种条件在数据库中称为完整性约束条件。数据的约束条件是语义的体现,这些完整性约束条件将作为模式的一部分存放数据字典中。数据的完整性和安全性是两个不同的概念。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garbage In Garbage Out)所造成的无效操作和错误结果。而后者是保护数据库防止恶意的破坏和非法的存取。当然,完整性和安全性是密切相关的。特别从系统实现的方法来看,往往是一种机制常常既可用于安全性保护亦可用于完整性保证。完整性约束条件可以分类如下:(1)值的约束和结构的约束前者指对数据的值的限制,后者指对数据之间联系的限制。关于对数据值的约束 这类约束条件是指对数据取值类型、范围、精度等的规定。关于数据之间联系的约束 数据库中同一关系的不同属性之间可以有一定的联系,从而也应满足一定的约束条件。同时,由于数据库中数据是结构化的,不同的关系之间也可以有联系,因而不同关系的属性之间也可满足一定的约束条件。
(2)静态约束和动态约束所谓静态约束是指对数据库每一确定状态的数据所应满足的约束条件。以上所讲的约束都属静态约束。动态约束是指数据库从一种状态转变为另一种状态时新、旧值之间所应满足的约束条件。
(3)立即执行约束和延迟执行约束立即执行约束是指在执行用户事务时,对事务中某一更新语句执行完后马上对此数据所应满足的约束条件进行完整性检查。延迟执行是指在整个事务执行结束后方对此约束条件进行完整性检查,结果正确方能提交。完
31 / 254
整性的实现应包括两个方面,一是系统要提供定义完整性约束条件的功能,二是提供检查完整性约束条件的方法。对于数据值的那类完整性约束条件通常在模式中定义。例如在模式中定义属性名、类型、长度、码属性名并标明其值是唯一的、非空的等等。另外的那些约束条件就要用专门的方式加以定义。 3.并发控制 数据库是一个共享资源,可以由多个用户使用。这些用户程序可以一个一个地串行执行,也可以并行执行。在单CPU计算机上,为了充分利用数据库资源,应该允许多个用户程序并行的存取数据。这样就会产生多个用户程度并发地存取同一数据的情况。若对并发操作不加控制就会存取和存储不正确的数据,破坏数据库的完整性(这里也称为一致性)。在多CPU计算机或多计算机网络环境下,并发控制尤为重要。
(1)事务的概念 事务(Transaction)是并发控制的基本单位。所谓事务是一个操作序列。这些操作作为一个序列形成一个整体要么都做,要么都不做,是一个不可分割的工作单位。事务通常以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK操作结束。COMMIT即提交,提交事务中所有的操作,事务正常结束。ROLLBACK即撤消已作的所有操作,滚回到事务开始时的状态。这里的操作指对数据库的更新操作。滚回即相当于所有操作均未执行。事务和程序是两个概念。一般地讲,一个程序可包括多个事务,由于事务是并发控制的基本单位,所以下面的讨论均以事务为对象。
(2)数据一致性级别的概念。所谓并发控制就是要用正确的方式调度并发操作,避免造成数据的不一致性,使一个用户事务的执行不受其它事务的干扰。
32 / 254
4.封锁 封锁(Locking)就是事务T可以向系统发出请求,对某个数据对象(最常用的是记录)加锁。于是事务T对这个数据对象就有一定的控制。例如,其它事务不能更新此数据直到T释放(unlock)它的锁为止。确切的控制由封锁的类型决定。基本的封锁类型有两种:排它锁(Exclu sive locks简记为X锁)和共享锁(Share locks简记为S锁)。若事务T对数据R加上X锁,则只允许T读取和修改R;其它一切事务对R的任何(包括封锁)请求都不成功,直至T释放R上的X锁为止。这就保证了其它事务不能再读取和修改R,直到T释放X锁。若事务T对数据R加上S锁,则其它事务对R的X锁请求不能成功,而对R的共享请求可以得到。这就保证了其它事务以读取R但不能修改R,直至T释放S锁为止。 5.可串行性 定义 当且仅当某组事务的一定交叉调度产生的结果和这些事务的某一串行调度的结果相同,则这个交叉调度是可串行化的。可串行性(Serializability)是并行事务正确性的准则。这个准则规定,一给定的交叉调度,当且仅当它是可串行化的,才认为是正确的。 6.两段锁协议 两段锁协议规定所有的事务应遵守下列规则:
(1)在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁,而且:
(2)在释放一个封锁之后,事务不再获得任何其它锁。所谓“两段”锁的含义是:事务分为两个阶段。第一阶段是获得封锁,
33 / 254
也称为扩展阶段。第二阶段是释放封锁,也称为收缩阶段。定理 若所有事务均遵守两段锁协议,则这些事务的所有交叉调度都是可串行化的(证明略)。为了确保事务并行执行的正确性,许多系统采用两段锁协议。同时系统设有死锁检测机制,发现死锁后按一定的算法解除死锁。 7.恢复 尽管系统中采取了各种保护措施来保证数据库的安全性和完整性不被破坏,保证并行事务的正确执行,但是计算机系统中硬件的故障、软件的错误、操作员的失误以及故意的破坏仍是不可避免的。这些故障轻则造成运行事务非正常地中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失。因此数据库管理系统必须具有把数扰库从错误状态恢复到某一已知的正确状态(亦称为完整状态或一致状态)的功能,这就是数据库的恢复。恢复子系统是数据库管理系统的一个重要组成部分,而且还相当庞大,常常占整个系统代码的10%以上(如IMS,DB2)。故障恢复是否考虑周到和行之有效,是数据库系统性能的一个重要指标。大型的数据库应用对故障恢复的要求更加强烈。有时甚至采用双工制。
(1)故障的种类数据库系统中可能发生各种各样的故障,大致可以分以下几类:①事务内部的故障;②系统范围内的故障;③介质故障;④计算机病毒。
(2)转储和恢复转储是数据库恢复中经常采用的基本技术。所谓转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本为后备副本或后援副本。当数据库遭到破坏后就可以利用后备副本把数据库恢复。这时,数据库只能恢复到转储时的状态,从那以后的所有更新事务必须重新运行才能恢复到现时的正常状态。转储是十分耗费时间和
34 / 254
资源的,不能频繁进行。DBA应该根据数据库使用情况确定一个适当的转储周期。转储可分为静态转储和动态转储。静态转储是指转储期间不允许(或不存在)对数据库进行任何存取、修改活动。动态转储是指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。静态转储简单,但转储必须等待用户事务结束才能进行。同样,新的事务必须等待转储结束才能执行。显然,这会降低数据库的可用性。动态转储可克服静态转储的缺点。但是,转储结束时后援副本上的数据并不能保证正确有效。例如,在转储期间的某时刻t 1 系统把数据A=100转储到了磁带上,而在时刻t 2 ,某一事务对A进行了修改使A=200转储结束,后援副本上的A已是过时的数据了。为此,必须把转储期间事务对数据库的修改活动登记下来,建立日志文件(log file)。这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。转储还可以分为海量转储和增量转储。海量转储是指每次转储全部数据库。增量转储则指每次只转储上次转储后更新过的数据。如果数据库很大,事务处理又十分频繁,则增量转储方式是很有效的。(3)日志文件日志文件是用来记录对数据库每一次更新活动的文件。在动态转储方式中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。在静态转储方式中,也可以建立日志文件。当数据库毁坏后可重新装放后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤消处理。这样不必重新运行那些在转储前已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态。
八、数据库应用系统的设计 35 / 254
1.数据库应用系统的设计步骤 按规范设计的方法可将数据库设计分为以下六个阶段 (1)需求分析; (2)概念结构设计; (3)逻辑结构设计; (4)数据库物理设计; (5)数据库实施; (6)数据库运行和维护。 2.需求分析 需求收集和分析是数据库应用系统设计的第一阶段。明确地把它作为数据库应用系统设计的第一步是十分重要的。这一阶段收集到的基础数据和一组数据流图(Data Flow Diaˉgram———DFD)是下一步设计概念结构的基础。概念结构对整个数据库设计具有深刻影响。而要设计好概念结构,就必须在需求分析阶段用系统的观点来考虑问题、收集和分析数据及其处理。如何分析和表达用户需求呢?在众多的分析方法中,结构化分析(Structured Analysis,简称SA方法)是一个简单实用的方法。SA方法用自顶向下、逐层分解的方式分析系统。用数据流图,数据字典描述系统。然后把一个处理功能的具体内容分解为若干子功能,每个子功能继续分解,直到把系统的工作过程表达清楚为止。在处理功能逐步分解的同时,它们所用的数据也逐级分解。
36 / 254
形成若干层次的数据流图。数据流图表达了数据和处理过程的关系。处理过程的处理逻辑常常用判定表或判定树来描述。数据字典(Data Dictionary,简称DD)则是对系统中数据的详尽描述,是各类数据属性的清单。对数据库应用系统设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。数据字典是各类数据描述的集合,它通常包括以下5个部分: (1)数据项,是数据最小单位。
(2)数据结构,是若干数据项有意义的集合。
(3)数据流,可以是数据项,也可以是数据结构。表示某一处理过程的输入输出。 (4)数据存储,处理过程中存取的数据。常常是手工凭证、手工文档或计算机文件。 (5)处理过程。 3.概念结构设计 如同软件工程中重视需求分析与规范说明的思想一样,数据库设计中同样十分重视数据分析、抽象与概念结构的设计。概念结构的设计,是整个数据库设计的关键之一。概念结构独立于数据库逻辑结构,独立于支持数据库的DBMS,也独立于具体计算机软件和硬件系统。归纳总结,其主要特点是:
(1)能充分地反映现实世界,包括实体和实体之间的联系,能满足用户对数据处理的要求,是现实世界的一个真实的模型,或接近真实的模型。
(2)易于理解,从而可以和不熟悉计算机的用户交换意见。用户的积极参与是数据库应用系统设计成功与否的关键。
37 / 254
(3)易于更动。当现实世界改变时容易修改和扩充,特别是软件、硬件环境变化时更应如此。
(4)易于向关系、网状或层次等各种数据模型转换。概念结构是各种数据模型的共同基础,它比任意一种数据模型更独立于机器,更抽象,从而更加稳定。描述概念结构的有力工具是E-R模型。P.P.S.Chen把用E-R模型定义的概念结构称为组织模式。设计概念结构的策略有3种:
(1)自顶向下 首先定义全局概念结构的框架,然后逐步细化。
(2)自底向上 首先定义各局部应用的概念结构,然后将它们集成,得到全局概念结构。
(3)混合策略 自顶向下和自底向上相结合的方法。用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。现介绍自底向上设计概念结构的策略。按照这种策略,概念结构的设计可按下面步骤进行。 (1)数据抽象与局部视图设计
E-R模型是对现实世界的一种抽象。一般地讲,所谓抽象是对实际的人、物、事和概念的人为处理。它抽取人们关心的共同特性,忽略非本质的细节,并把这些特性用各种抽象的概念精确地加以描述。这些概念组成了现实世界的一种模型表示。有3种抽象方法形成了抽象机制,来对数据进行组织:①分类(Classification) 定义某一概念作为现实世界中一组对象的类型。这些对象具有某些共同的特性和行为。它抽象了对象值和型之间的“is a member of”的语义。在E-R模型中,实体型就是这种抽象。②聚集(Aggregation) 定义某一类型的组成成分。它抽象了对象内部属性类型和整体与部分之间“is a part of”的语义。在E-R模型中若干属性的聚集组成了实体型,就是这种抽象。③概括(Generalization) 定义类型之间的一种子集联系。
38 / 254
它抽象了类型之间的“is a subset of”的语义。概括具有一个很重要的性质:继承性。子类继承超类上定义的所有抽象性质。当然,子类可以增加自己的某些特殊属性。概念结构设计的第一步就是利用上面介绍的抽象机制对需求分析阶段收集到的数据进行组织,形成实体、实体的属性,标识实体的码,确定实体之间的联系类型(1∶1,1∶n,n∶m),设计成部分E-R图。 (2)视图的集成视图集成就是把上一步得到的各个部分E-R图综合成一个总体的E-R图。视图集成可以有两种方式: ①多个部分E-R图一次集成。
②逐步集成。用累加的方式一次集成两个部分E-R图。无论哪种方式,每次集成可分两步走。第一步是合并,解决各部分E-R图之间的冲突问题,生成初步E-R图。第二步是修改和重构,消除不必要的冗余,生成基本E-R图。 4.逻辑结构设计 逻辑结构设计的任务就是把概念结构转换为选用的DBMS所支持的数据模型的过程。设计逻辑结构按理应选择对某个概念结构最好的数据模型,然后对支持这种数据模型的各种DBMS进行比较,选出最合适的DBMS。但实际情况常常是已给定了某台机器,设计人员没有选择DBMS的余地。现行的DBMS一般只支持关系、网状或层次三种模型中的某一种,对某一种数据模型,各个机器系统又有许多不同的限制,提供不同的环境与工具。因而我们把设计过程分三步进行。首先把概念结构向一般的关系模型转换,然后向特定的DBMS支持下的数据模型转换,最后进行模型的优化。
(1)E-R图向关系数据模型的转换下面给出把E-R图转换为关系模型的转换规则。 ①一个实体转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
39 / 254
②一个联系转换为一个关系模式,与该联系相连的各实体的码以及联系的属性转换为关系的属性。该关系的码则有三种情况:若联系为1∶1,则每个实体的码均是该关系的候选码。若联系为1∶n,关系的码为n端实体的码。若联系为n∶m,则关系的码为诸实体码的组合。具有相同码的关系模式可合并。形成了一般的数据模型后,下一步就向特定的DBMS规定的模型转换。设计人员必须熟知所用DBMS的功能及限制。这一步转换是依赖于机器的,不能给出一个普遍的规则。转化后的模型必须进行优化。对数据模型进行优化是指调整数据模型的结构,以提高数据库应用系统的性能。性能有动态性能和静态性能两种。静态性能分析容易实现。根据应用要求,选出合适的模型是一项复杂的工作。
(2)规范化理论的应用规范化理论是数据库逻辑设计的指南和工具,具体地讲可应用在下面几个具体的方面:第一,在数据分析阶段用数据依赖的概念分析和表示各数据项之间的关系。第二,在设计概念结构阶段,用规范化理论为工具消除初步E-R图中冗余的联系。第三,由E-R图向数据模型转换过程中用模式分解的概念和算法指导设计。现在,不管选用的DBMS是支持哪种数据模型的,均先把概念结构向关系模型转换。然后,充分运用规范化理论的成果优化关系数据库模式的设计。 5.数据库的物理设计 物理设计的内容主要包括:
(1)确定数据的存储结构 从DBMS所提供的存储结构中选取一种合适的加以实现。确定存储结构的主要因素是存取时间、存储空间利用率和维护代价三个方面。设计者常常要对这些因素进行权衡。一般的DBMS也总是具有一定灵活性供你选择。例如,若引入某些冗余数据,则可能减少物理I/O次数提高检索效率。相反节约存储空间检索代价就会增加。当然应该尽量寻找优化方
40 / 254
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库全国计算机等级考试四级数据库工程师笔试试卷在线全文阅读。
相关推荐: