首页 百科知识 面向对象数据库

面向对象数据库

时间:2022-10-17 百科知识 版权反馈
【摘要】:我们将从面向对象的数据模型、面向对象数据库语言、面向对象数据库管理系统等方面来介绍面向对象数据库技术。将前面所介绍的面向对象方法应用于数据库系统及数据模型中即可得到面向对象数据库系统与面向对象数据模型。在面向对象数据库系统管理系统中的对象控制与传统数据库管理系统中的控制功能很接近,它包括完整性约束、安全性、事务处理与并发控制、故障恢复等内容,面向对象数据库管理系统与程序间用消息进行

10.2.2 面向对象数据库

下面介绍面向对象数据库技术。面向对象数据库技术是数据库技术与面向对象方法结合的产物,它与传统数据库有着很大的区别:

(1)从数据模型上看,面向对象数据库以对象数据模型为基础,对象数据模型是由类、对象和消息建立起来的,这和传统的数据库有着本质的区别。

(2)从数据库系统本身来说,面向对象数据库直接支持创建和管理具有面向对象语义的对象应用需要,可以直接支持面向对象的程序设计语言在其上开发应用系统,而传统数据库则做不到。

(3)从应用角度看,传统数据库主要用于事务处理,所处理的事务规模较小。而对于计算机辅助设计、计算机辅助软件工程、多媒体数据管理等就显得无能为力或力不从心了。而面向对象数据库处理这些问题却相当的自然,更加成功,相应的功能也更加强大。

我们将从面向对象的数据模型、面向对象数据库语言、面向对象数据库管理系统等方面来介绍面向对象数据库技术。

一、面向对象数据模型

介绍面向对象数据库技术,首先要建立面向对象的数据模型。将前面所介绍的面向对象方法应用于数据库系统及数据模型中即可得到面向对象数据库系统与面向对象数据模型(OOB Model)。一个数据库的数据模型一般由数据模式(数据结构)、建立在模式上的操作和数据的完整性约束三部分组成。我们现在用面向对象方法建立数据模型,在建立过程中我们还用关系数据模型与之比较。

(1)数据模式。在关系数据模型中其基本数据模式是关系,这相当于面向对象方法中的类,当然,类中还包括方法,而关系中的数据元组相当于面向对象方法中的实例(当然也还包括方法)。此外,关键字相当于OID,而外关键字则与类的合成有关。在关系数据模型中其概念数据模型是E-R图。在这种图示方法中基本单元是“实体集”,而实体集间的关联可用“联系”表示,E-R方法即是以“实体集”为单位通过“联系”建立起一个现实世界的抽象模型,并可用图示法E-R图表示。在面向对象方法中,概念模型相当于类层次结构图,其中类是其基本单元,而类间关联则是继承与合成,这种模型称为类层次结构模型。用对象结构以及类间继承和组合关系建立数据间的复杂结构关系,这种模式结构的语义表示能力远比E-R方法要强。

(2)数据操作。在类层次结构模型中的操作分两部分,一部分是封装在类内的操作,即方法,另一部分是类间沟通的操作,即消息。因此,在面向对象数据模型中的“建立在模式上的操作”即是方法与消息,而在关系数据模型上的操作则是查询、增、删、改等。面向对象模式上操作的语义范围远比传统数据模型要广。如可以构造一个圆形类,它的操作除查询、修改外,还可以有图形的放大/缩小、图形的移动、图形的拼接等。

(3)数据约束。数据模型中的完整性约束条件一般来说均可以用消息或方法表示,为表示明显起见,这些方法与消息可称为完整性约束方法与完整性约束消息,并在它们前冠以特殊标识。

由上述讨论可以看出,面向对象数据模型即是面向对象方法中的类层次结构图。

二、面向对象数据库语言

在OODB中,与对象模型密切相关的是面向对象数据库语言(OODB语言)。OODB语言用于描述面向对象数据库模式,说明并操纵类定义与对象实例。OODB语言主要包括对象定义语言(ODL)和对象操纵语言(OML),对象操纵语言中一个重要子集是对象查询语言(OQL)。OODB语言一般应具备下列功能:

■ 类的定义与操纵

面向对象数据库语言可以操纵类,包括定义、生成、存取、修改与撤销类,其中类的定义包括定义类的属性、操作特征、继承性与约束等。

■ 操作/方法的定义

面向对象数据库语言可用于对象操作/方法的定义与实现。在操作实现中,语言的命令可用于操作对象的局部数据结构。对象模型中的封装性允许操作/方法由不同程序设计语言来实现,并且隐藏不同程序设计语言实现的事实。

■ 对象的操纵

面向对象数据库语言可以用于操纵(即生成、存取、修改与删除)实例对象。

自面向对象数据库兴起以后有关系统的数据库语言的研究以及标准化工作也紧跟着发展起来,到目前为止比较有名的语言是SQL-3与OQL(ODL),其中SQL-3是1993年的美国国家标准(ANSI)以及1999年的ISO国际标准,它又称SQL:1999。OQL(ODL)是ODMG (1997年)标准,这两个标准反映了两种不同风格的标准。

(1)SQL-3

SQL-3是以关系数据库系统为基础在其上做适当的扩展而成,它具有明显的SQL特征,适合于做数据库的模式定义与操纵。SQL-3是一种特色明显的对象关系数据库语言,它可以嵌入某些宿主语言(如C、C++等),并且可以为熟悉传统关系数据库操作的人员使用。

(2)OQL/ODL

OQL/ODL是对象数据管理小组(Object Data Management Group)国际组织(简称ODMG)于1997年制订的对象数据查询语言与对象数据语言,它们分别简称为OQL和ODL。该语言是以面向对象程序设计语言为基础,适当做持久性扩充而形成的面向对象数据库语言。此种语言具有类似SQL的形式,且具有面向对象的特征与风格。该语言最大的特色是它与面向对象程序设计语言联合构成一个面向对象统一环境,同时将对象分成临时性对象与持久性对象两种,由面向对象程序设计语言处理临时性对象,而OQL则处理持久性对象。做了这种处理后,面向对象程序设计语言与OQL(ODL)混合成一种形式。当然这两种语言在性质上还是有区别的,面向对象程序设计语言实际上是一种过程性语言,而OQL则是一种非过程的说明语言。

这里只是简单地介绍了面向对象数据库的两种语言,读者要想进一步了解具体内容可以参考相关的书籍。

三、面向对象数据库管理系统

由前面的介绍我们可以看出,面向对象数据库管理系统应该在保持传统数据库管理系统的基本功能的基础上,扩充和改变下面一些功能:

■ 类管理

面向对象数据库管理系统以类为基本数据管理实体,类管理包括类以及类层次结构的定义,它还包括类层次结构的删除以及相应的物理级定义,此外类管理还包括对类层次结构的变更,称为模式演化。在面向对象数据库系统中类管理由如下几部分组成:类层次结构定义、扩充的数据类型与抽象数据类型、类模式演化、类层次结构的字典以及其他类管理功能。

■ 对象管理

在面向对象数据库管理系统中对象管理既是对类中实例的管理,它包括基于类层次结构上的对象的查询、增添、删除以及修改等功能。对象管理的主要内容包括:查询模型、实例查询和实例的增加、删除、修改操作。

■ 对象控制

在面向对象数据库系统管理系统中的对象控制与传统数据库管理系统中的控制功能很接近,它包括完整性约束、安全性、事务处理与并发控制、故障恢复等内容,

但是对象控制还增加了在工程领域中常用的版本控制内容。

一个面向对象数据库管理系统一般可以由下面五个部分组成:

(1)消息处理器子系统

面向对象数据库管理系统与程序间用消息进行沟通。消息将应用的要求通知给面向对象数据库管理系统中的消息处理器,处理器分析消息要求并将其发送到其他子系统,因此消息处理器是进入系统的门户。

(2)对象子系统

对象子系统负责管理系统的日常处理,主要包括:模式管理器,主要负责管理类模式以及模式演化,并负责相应的数据字典维护;查询处理器,负责对象的查询以及增加、删除、修改的实现;版本管理器,负责对象和类的版本控制;完整性管理器,负责对象的安全性以及完整性管理。

(3)事务子系统

事务子系统保证系统以事务为单位按可串行化方式进行工作,并处理并发控制与故障恢复。该子系统由下面几部分组成:事务管理器,负责有关事务处理语句的执行如COMM IT、ROLL BACK等;锁管理器,负责事务间执行时的封锁机制,包括锁设置与解锁等功能;死锁管理器,负责死锁的检测和处理,目前一般采用简单的超时检测法,即对每一个锁设置一个固定等待时限,一事务在等待时,当时间已到达时尚未解锁则认为已产生死锁,此时则撤销等待锁的事务以解除死锁;日志管理器,管理日志相关的日志记录;恢复管理器,用于系统恢复,当面向对象数据库系统发生故障后,利用日志进行恢复。

(4)存储子系统

存储子系统主要管理系统的内存、外存资源以及对它的有效存取,它包括以下内容:① 内存管理。在面向对象数据库管理系统中内存管理主要负责系统内部的内存缓冲区的管理,一般系统缓冲区分为页面缓冲区与对象缓冲区。为了存取一个对象,以取为例,首先将包含该对象的那个页面调入缓冲区,然后定位、检索该对象,最后将其放入对象缓冲区中,用相同的方法也可以存一个对象。内存管理中有两个模块,即页面缓冲管理器、对象缓冲管理器,它们分别管理页面缓冲区和对象缓冲区。② 存储管理器。它主要负责对磁盘空间的管理以及存放和追踪磁盘中的对象,同时还实现类层次中的相关索引。③ 查询优化器。它主要负责对查询做代价评估,并最终给出一个最优的查询路径。

(5)通信与进程子系统

该子系统主要负责客户机与服务器间的通信与进程同步,以建立两者的数据传递。

上述五个子系统构成了完整的面向对象数据库管理系统结构。

四、面向对象数据库的优势

我们已经简要地介绍了面向对象数据库技术,那么面向对象数据库与传统的关系数据库相比具有哪些优势?

(1)面向的复杂对象构造能力增强了对客观世界的模拟能力。

在关系数据库系统中,层次数据、嵌套数据或复合数据需要用多个关系的元组表示,且关系中的属性只能采用简单数据类型。这样,当要查询层次数据、嵌套数据或复合数据时,就需要多个关系的连接,不仅表示能力差,而且影响查询速度。在面向对象数据库系统中,对象的属性可以是另外一个对象,对象的这种复合结构不仅能自然地表示层次数据、嵌套数据或复合数据之间的关系,并易于理解,而且可以提高查询速度。

(2)面向对象的封装屏蔽了实现细节和复杂性,降低了数据库应用系统开发和维护的难度。

对象封装将程序和数据封装在一起作为存储和管理的单位,也是用户使用的单位,从外部只能看到接口,而看不到实现细节,对象内部实现的修改并不影响对对象的使用,因此使系统的开发和维护变得更加容易。

(3)面向对象的继承性使数据库应用程序的可重用成为可能。

在面向对象数据库系统中,类的定义和类库的层次结构体现了客观世界中对象的内部结构及对象之间的关系。同时,类定义中的封装的方法保存了数据库应用的编程的结果。应用开发人员可以在已建的类库的基础上派生出新的类,继承已存在的类和属性、方法,重用应用变成的结果。这种重用对于复杂的数据库应用系统的开发具有重要意义。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈