



DBMS的主要组成部分如图1-6所示。
图1-6 DBMS的主要组成部分
图1-6的最上方,是三种类型的DBMS输入。
(1)查询。对数据的查询有两种生成方式。一是通过通用的查询接口,比如关系数据库管理系统允许用户输入SQL查询语句,然后将查询指令传给查询处理程序,并给出回答;二是通过应用程序的接口,典型的DBMS允许程序员通过应用程序调用DBMS来查询数据库。
(2)更新。对数据的插入、修改和删除等操作统称为更新。对数据的更新和对数据的查询一样,也可以通过通用接口或应用程序接口来提出。
(3)模式更新。所谓数据库的模式,就是指数据的逻辑结构。模式更新命令一般只能由数据库管理员下达。比如图书馆系统要求能提供书籍的出版社编号,数据库管理员就要在书籍关系中加入一个新的属性——出版社编号,这就是对模式的更新。
查询处理程序的功能是在接收到一个操作请求后,为其找到一个最优的执行方式,然后向存储管理程序发出命令,使其执行。存储管理程序的功能是从数据库中获得上层想要查询的数据,并根据上层的更新请求更新相应的信息。由此可见,查询处理程序不仅负责查询,也负责发出更新数据或模式的请求。
在简单的数据库系统中,存储管理程序可能就是底层操作系统的文件系统。但有时为了提高效率,DBMS往往直接控制磁盘存储器。存储管理程序包括两个部分:文件管理程序和缓冲区管理程序。
文件管理程序负责跟踪文件在磁盘上的位置、取出一个或几个数据块,数据块中含有缓冲区管理程序所要求的文件。磁盘通常划分成一个个连续存储的数据块,每个数据块的内存从4KB到16KB不等。
缓冲区管理程序控制着主存的使用。它通过文件管理系统从磁盘取得数据块,并选择主存的一个页面来存放它。如果有另一个数据块想要使用这个页面,就把原来的数据块写回磁盘。假如事务管理程序发出请求,缓冲区管理程序也会把数据块写回磁盘。
事务管理程序负责系统的完整性。它必须保证同时运行的若干个数据库操作互相不冲突,保证系统在出现故障时不丢失数据。事务管理程序要和查询处理程序互相配合,因为它必须知道当前将要操作的数据,以免出现冲突。为了避免冲突,还可能需要延迟某些操作。事务管理程序也要和存储管理程序互相配合,因为数据库恢复一般需要一份日志文件来记录每一次数据的更新,这样做即使系统出现故障,也能有效而可靠地进行恢复。
为实现对数据库统一的管理和控制,数据库管理系统提供了数据定义、数据操作、数据库的运行管理、数据组织与存储管理、数据库的保护、数据库的维护、通信等功能。
(1)数据定义。DBMS提供数据定义语言,供用户定义数据库的三级模式结构、两层映像以及完整性约束和保密限制等约束。数据定义语言主要用于建立、修改数据库的库结构。DDL所描述的库结构给出了数据库的框架,该框架信息被保存在数据字典中。
(2)数据操作。DBMS提供数据操作语言(Data Manipulation Language,DML),使用户实现对数据的追加、删除、更新、查询等操作。
(3)数据库的运行管理。数据库的运行管理功能是DBMS的运行控制、管理功能,包括多用户环境下的并发控制、安全性检查和存取限制控制、完整性检查和执行、运行日志的组织管理、事务的管理和自动恢复(保证事务的原子性),这些功能保证了数据库系统的正常运行。
(4)数据组织与存储管理。DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等,需要确定以何种文件结构和存取方式在存储级上组织这些数据以及确定如何实现数据之间的联系。数据组织和存储的基本目标是提高存储空间利用率,选择合适的存取方法以提高存取效率。
(5)数据库的保护。数据库中的数据是信息社会的战略资源,所以数据的保护至关重要。DBMS对数据库的保护通过四个方面来实现:数据库的恢复、数据库的并发控制、数据库的完整性控制、数据库的安全性控制。DBMS的其他保护功能还有系统缓冲区的管理以及数据存储的某些自适应调节机制等。
(6)数据库的维护。这一部分包括数据库的数据载入、转换、转储,数据库的重组重构以及性能监控等功能,这些功能分别由各个使用程序来完成。
(7)通信。DBMS具有与操作系统的联机处理、分时系统及远程作业输入的相关接口,负责传送数据。网络环境下的数据库系统,应该还包括DBMS与网络中其他软件系统的通信功能以及数据库之间的互操作功能。
为了使用上述数据库管理系统的七大功能,数据库管理系统为用户维护和操作数据库中的数据提供了丰富的数据库语言,数据库语言是数据库系统完成数据描述、操纵和控制的重要工具。
数据定义语言是描述数据库中的数据、数据的逻辑结构、数据的物理结构以及两者间映射的工具。按照数据库系统的模式、外模式和内模式的三级模式结构,数据定义语言也相应地分为三级:
①模式数据定义语言:描述数据库的全局逻辑结构,主要供数据库管理员使用。
②内模式数据定义语言:即存储定义语言,描述数据实际存储方式。
③外模式数据定义语言:即子模式数据定义语言,描述数据库的局部逻辑结构,供用户使用。
模式数据定义语言是独立于数据库应用程序设计语言的语言,外模式数据定义语言和选作宿主语言的程序设计语言有相容的语法。
数据操纵语言是对数据库中的数据进行存储、检索、修改和删除等功能的语言,是使用数据库必需的工具。任何数据库管理系统至少提供一种数据操纵语言。
DML一般有自含式和宿主式两种使用方法:
①自含式数据操纵语言可以被独立使用,一般是数据库管理员在DBMS应用环境中直接使用,可以完成查询、修改和删除等功能,通常是非过程化语言。
②宿主式数据操纵语言需要嵌入其他程序设计语言(如COBOL、FORTRAN、PL/I、汇编语言)中使用。被嵌入的语言称为宿主语言,嵌入的语言称为子语言。数据库应用程序用宿主语言和子语言书写而成,操纵语言和宿主语言要有相容的语法,宿主式数据操纵语言通常是过程化语言。
关系数据库管理系统所提供的数据库语言,如System R的SQL语言,具有定义、操纵和控制一体化的特征,既可嵌入宿主语言,也可独立用作查询语言。
数据控制语言是数据库语言中提供数据控制功能的语句的总和,如控制用户对数据的存取权、控制数据完整性等的语言成分。这些语句包括GRANT、DENY、REVOKE等。
在对数据库的系统结构和数据库管理系统的体系结构有了初步的了解后,下面介绍应用程序查询数据库数据的过程,了解数据库系统是如何运行的。
一个典型的DBMS工作过程如图1-7所示。
图1-7 DBMS的工作过程
在应用程序运行时,数据库管理系统将开辟一个数据库系统缓冲区,用于数据的传输和格式的转换。数据库系统三层结构的描述放在数据字典(DD)中。
假设用户在应用程序中有如下的SQL查询语句:
SELECT*
FROM Book_Information
该查询语句由两个子句组成,其中,FROM子句给出所要查询的关系,这里是图书信息关系Book_Information;SELECT子句给出所要查询的属性的名字,星号“*”表示所有的属性,即整个元组。
该查询语句的具体执行过程如下:
①当计算机执行该语句时,启动DBMS。
②DBMS首先对该语句进行语法检查,然后从数据字典中找出该应用程序对应的外模式(相当于关系数据库中的视图),检查是否存在所要查询的关系,并进行权限检查,即检查该操作是否在合法的授权范围内。如有问题,则返回出错信息。
③在决定执行该语句后,DBMS从数据字典中调出相应的模式描述,并从外模式映像到模式,从而确定所需要的逻辑数据。
④DBMS从数据字典中调出相应的内模式描述,并从模式映像到内模式,从而确定应读入的物理数据和具体的地址信息。在查询过程中,DBMS的查询处理程序将根据数据字典中的信息进行查询优化,并把查询命令转换成一串单记录(元组)的读出操作序列,随后DBMS执行读出操作序列。
⑤DBMS在查看内模式决定从哪个文件、用什么方式读取哪个物理记录之后,向操作系统OS发出从指定地址读取物理记录的命令,同时在系统缓冲区记下运行记录。当物理记录全部读完时,转到瑏瑢。
⑥OS执行读出的命令,按指定地址从数据库中把记录读入OS的系统缓冲区,随后读入数据库的系统缓冲区。
⑦DBMS根据查询命令和数据字典的内容把系统缓冲区中的记录转换成应用程序所要求的记录格式。
⑧DBMS把数据记录从系统缓冲区传送到应用程序的用户工作区。
⑨DBMS把执行成功与否的状态信息返回给应用程序。
⑩DBMS把系统缓冲区中的运行记录记入运行日志,以备后续查阅或在发生意外时用于系统恢复。
⑪DBMS系统缓冲区中查找下一记录,若找到就转到⑦,否则转到⑤。
⑫查询语句执行完毕,应用程序做后续处理。