论文部分内容阅读
摘要:文章提出一个对象关系数据库系统模型:在业务逻辑层和关系数据库的物理存储结构中间增加一个OR代理层,代理层为用户应用程序提供统一接口,并结合RDBMS透明地完成对象和关系数据库之间的转换,解决对象数据的存储查询等操作。文章对OR代理的关键内容即模型结构和映射规则进行了定义和描述。
关键词:面向对象;关系数据库;对象关系数据库;映射
一、前言
随着数据库技术的发展,数据库应用领域已经从传统的商务数据处理扩展到许多新的应用领域,例如处理空间数据、时间数据、工程设计数据、超文本和多媒体数据等,原有的数据库系统很难适应这些新的应用领域中的复杂对象和这些对象的复杂行为的需求。新的应用需求推动了数据库技术的研究,其中最重要的研究方向之一就是使用一种与人们认识客观事物的过程一致的方法,这就是面向对象的方法,它是面向对象技术与数据库技术相结合的产物。在适应计算机应用的现实特性和发展趋势上,面向对象的方法表现出了多方面特有的优越性,它的兴起从整体上反映和概括了计算机发展的历史。
面向对象技术能够大大提高软件开发的效率及其可靠性、可维护性、可重用性,越来越多的软件开发机构和科研人员开始使用面向对象技术进行系统分析、设计、编制程序。然而在数据库领域,面向对象数据库产品却未真正成熟,关系数据库产品依然是开发MIS的必然选择。占主导地位的关系数据库成为了面向对象系统架构中对象与关系数据库转换的“瓶颈”。将oo(object oriented)技术的优越性与成熟的关系数据库技术有机地结合起来,是一个很有应用价值的研究课题。本文提出一个对象关系数据库系统模型:在业务逻辑层和关系数据库的物理存储结构中间增加一个OR代理层,代理层为用户应用程序提供统一接口,并结合RDBMS透明地完成对象和关系数据库之间的转换,解决对象数据的存储查询等操作。
二、面向对象数据库发展
(一)面向对象数据特点
Peter Coad和Edward Yourdon这样描述面向对象:面向对象=对象+分类+继承+消息。其中对象指一组属性及这组属性上专用操作的封装体。类是一组具有相同属性和操作的对象描述。继承是类之间一种基本关系,指某个类的层次关联中不同类共享属性和操作的机制。消息是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务。此外,面向对象数据特点还有封装、信息隐蔽、消息传递、多态性等。综上所述,面向对象数据与现实世界实体对象一一对应,具有传统数据库数据不具有的两大特性,即内容海量性和结构复杂性,它们是构建新型数据库的基础。
(二)传统数据库局限性
1、不能表示客观世界复杂对象。采用二维表表示数据及其关系,语义表示能力差,无法表示客观世界复杂对象,不能揭示数据之间深层含义和内在联系,缺乏数据抽象。
2、缺少对复杂数据类型支持。只能理解、存储和处理简单数据类型,不能根据客户需要动态扩大数据集。碰到复杂问题常利用高级程序设计语言构造相应数据类型和操作,既加重用户负担,又不能保证数据一致性。
3、数据结构不能与行为相关联。对象有两方面内容,即结构和行为。传统DB把前者映射到数据库模式中,对后者没有很好实现。
4、阻抗失配和语义断层,不能与高级程序设计语言无缝集成。传统DB开发需同时使用数据库语言(SQL)和高级程序设计语言,涉及模式和结构转换问题,既容易丢失原数据结构语义,又妨碍其他工具和用户在原有语义层次上共享数据。
5、缺乏管理知识和对象的能力。传统DB处理对象是确定的、现存的,不能很好地处理和管理实际应用中的二义性、未知对象。此外,它们没有演绎和推理功能,不能很好地管理知识,无法满足MIS,DSS,OA和AI等领域进行高层管理和决策的要求。
6、不能满足巨型数据库应用需要。随着多媒体技术、空间信息科学和数据挖掘技术等学科的蓬勃兴起,处理的海量数据已非一般二维表可存储和管理,而且数据结构越来越复杂,有的还有语义动作,使传统数据库显得力不从心。
另外,传统数据库还不能主动检查和处理事件,缺乏对长事务和多重嵌套事务的响应和处理能力。
综上所述,传统数据库已不能满足复杂的实际应用需要,随着面向对象研究的深入,把面向对象设计方法和数据库技术结合形成新一代数据库系统——面向对象数据库系统,不仅是数据库学科发展需要,也是推进计算机其他分支健康发展的必然结果。
(三)面向对象数据库概念
面向对象数据库系统(OODBS)支持定义和操作OODB,应满足两个标准:首先它是数据库系统,其次它也是面向对象系统。第一个标准即作为数据库系统应具备的能力(持久性、事务管理、并发控制、恢复、查询、版本管理、完整性、安全性)。第二个标准就是要求面向对象数据库充分支持完整的面向对象(OO)概念和控制机制。
综上所述,我们将面向对象数据库简写为:面向对象数据库=面向对象系统+数据库能力。
三、面向对象数据库技术——对象关系数据库
(一)系统模型
系统模型(如图1所示),包括3个层次:业务逻辑层、OR代理层和物理存储层。
1、业务逻辑层。业务逻辑层是程序开发人员或者用户所接触的接口层,在这个层次上是完全的面向对象内容。业务逻辑层由很多接口组成,例如应用程序接口是专门为特定的应用程序开发的面向对象接口;领域接口针对具体的应用领域,它与领域有关(或垂直定向),例如有些领域接口用于健康保健上的应用程序,它们仅适用于这个领域;其他一些接口适用于金融、制造业、通信等领域。业务逻辑层还可以包括其他类型的接口,例如多领域接口表明它们适用于多个领域。
2、OR代理层。OR代理层是系统的关键层和核心层。它是与领域无关的(或水平定向的)代理层,用于完成OO和RDB的相互映射和转换。它由4个模块组成:预处理/后续处理模块;OSQL/SQL转换器;OO/RDB映射转换器;RDBMS是成熟的关系数据库管理系统。
3、物理存储层。系统的最底层是物理存储层。在数据存储的结构上,仍然采用关系数据库的形式。可见,该系统模型是对传统关系数据库的扩展,是把面向对象技术与关系数据库相结合而建立的一个对象关系数据库管理系统(ORDBMS)。其具有以下优点:(1)与纯粹的面向对象数据库管理系统(OOD2BMS)相比,系統充分考虑结合了现有RDBMS的优点,并且在当前的数据库理论和技术现状下,具有更好的可实现性;(2)与当前普遍使用的两层构架模型相比,该系统的逻辑更加清晰。同时,由于OR映射层对业务逻辑层提供了统一的面向对象接口,用户和程序员编码时可以将更多的精力放在具体领域的业务实现上而不是关系数据库与类实例的转换上。
(二)映射规则
OR映射是系统的关键功能,而OO/RDB映射转换器是实现该功能的主要模块。因此,根据面向对象理论和关系数据库的特点,重点讨论和制定映射规则。总体映射思路如表1所示:
1、没有继承关系的类映射规则:对于没有继承关系的一个类映射为一个表,其中表名取类名,对象标识符对应表的一个主键,表的对象属性对应表列且以属性名作为列名。另外,因为表中的列除了来自该对象的属性外,可能会因为关联、概括等关系而有所扩充,因此表列个数应大于或等于属性个数。同样原因,表的主码可能包括除对象标识符对应主键以外的其他键。
2、类层次映射。对于存在继承关系的3个类OA、OB和OC,不妨设OA是OB和OC的共同父类,则该类层次映射到数据表,可以根据具体情况的不同采用以下三个规则:(1)将整个类层次映射为单个数据表,表中包括所有类(基类、子类)的属性。该规则的优点是实现简单,且支持多态,而且因为表中包含了所有信息,报表操作簡单。缺点是增加了类层次中的耦合,类层次中任何类属性的更改会导致表结构的更改,即会影响到整个层次结构而不仅仅是该类的子类;浪费了大量的数据库存储空间。(2)将处于继承层次最底层的各个具体类分别映射到一个数据表,每一个表包含OID、具体类本身的属性和它继承的属性,而抽象的基类则不参与映射。该规则的优点是报表操作实现简单,表中包含了具体子类的所有信息.缺点是类的修改会导致其所有子类对应表的更改;角色的更改会造成ID的重新赋值(因为不同子类的ID可能重复);难以在支持多重角色时保持数据的完整性。(3)每个类均映射为一个数据库表,表中包含特定于该类的属性和OID,其父类的OID也作为外键存在与表中,作为指针指向该类从父类所继承属性的属性值。该规则与面向对象概念的一致性及对多态的支持最好,易于修改基类和增加新的类。缺点是映射后的数据库中存在大量的表,系统访问对象属性时要涉及多个表,需要较长的时间,对报表的支持较差。
3、类方法和类事件映射规则:方法和事件是其值不能静态存储在数据库中而只能动态执行相关程序计算得到的一种特殊的属性。在标准RDB模型中并没有支持用户自定义函数和过程的机制。可幸的是多年来一些商业化RDBMS产品已提供了这些功能,SQL标准也开始考虑包含这一功能,成为PSM子程序(包括了用户自定义函数和过程),这样就能够建立方法和事件定义到PSM子程序定义的映射中。另外,方法调用的一个显著特性就是多态,即动态捆绑。因此,仅把方法和事件调用映射为相应的PSM子程序调用是不够的,需要在方法调用被映射后的目标代码中包含PSM子程序以及该子程序调用的动态解决方案。一般的方法是将方法调用映射为case语句,在case语句中列出所有捆绑的条件和各种情况下相关PSM子程序的调用。类方法和事件的映射是与语言相关的程序翻译问题,与具体的RDBMS相关,因此需要人工来完成。
4、类间关系映射。类间关系有很多种,例如继承、组装、聚合等等。规则2处理了继承关系,对于其他的所有关系可以归结为三种类型:一对一、一对多和多对多关系。类间关系映射为一个关系表,规则如下:如果两个对象之间存在一对一关联,则在两个对象映射表中任选一个加入另一个对象映射表的主键作为自己的外键;如果两个对象之间存在一对多关联,则在“多”方对象映射表中加入“一”方对象映射表的主键作为外键;如果两个对象之间存在多对多关联,则产生对应该关联的表,它由两个对象对应表的所有主键组成,并以它们作为自己的主键。
四、结束语
对象关系数据库系统模型为OR映射提供了明确的思路和有章可循的方法,能够有效降低实际开发难度和工作量、规范映射模型、使业务逻辑部分和数据存储部分达到了松耦合。
面向对象数据库和关系数据库之间的运算转换,在多重数据库互操作研究中是一个重要的环节。本文中,讨论了对象关系数据库的体系结构及其映射规则。这些工作对于对象关系数据库的实际应用具有一定的现实意义。
参考文献:
1、王意洁.面向对象的数据库技术[M].北京:电子工业出版社,2003.
2、Ian Graham著,袁兆山译.面向对象方法原理与实践[M].北京:机械工业出版社,2003(3).
3、Scott.W.Ambler著,车皓阳、刘锐译.面向对象软件开发教程[M].北京:机械工业出版社,2003(3).
(作者单位:湖北工业大学计算机学院)
关键词:面向对象;关系数据库;对象关系数据库;映射
一、前言
随着数据库技术的发展,数据库应用领域已经从传统的商务数据处理扩展到许多新的应用领域,例如处理空间数据、时间数据、工程设计数据、超文本和多媒体数据等,原有的数据库系统很难适应这些新的应用领域中的复杂对象和这些对象的复杂行为的需求。新的应用需求推动了数据库技术的研究,其中最重要的研究方向之一就是使用一种与人们认识客观事物的过程一致的方法,这就是面向对象的方法,它是面向对象技术与数据库技术相结合的产物。在适应计算机应用的现实特性和发展趋势上,面向对象的方法表现出了多方面特有的优越性,它的兴起从整体上反映和概括了计算机发展的历史。
面向对象技术能够大大提高软件开发的效率及其可靠性、可维护性、可重用性,越来越多的软件开发机构和科研人员开始使用面向对象技术进行系统分析、设计、编制程序。然而在数据库领域,面向对象数据库产品却未真正成熟,关系数据库产品依然是开发MIS的必然选择。占主导地位的关系数据库成为了面向对象系统架构中对象与关系数据库转换的“瓶颈”。将oo(object oriented)技术的优越性与成熟的关系数据库技术有机地结合起来,是一个很有应用价值的研究课题。本文提出一个对象关系数据库系统模型:在业务逻辑层和关系数据库的物理存储结构中间增加一个OR代理层,代理层为用户应用程序提供统一接口,并结合RDBMS透明地完成对象和关系数据库之间的转换,解决对象数据的存储查询等操作。
二、面向对象数据库发展
(一)面向对象数据特点
Peter Coad和Edward Yourdon这样描述面向对象:面向对象=对象+分类+继承+消息。其中对象指一组属性及这组属性上专用操作的封装体。类是一组具有相同属性和操作的对象描述。继承是类之间一种基本关系,指某个类的层次关联中不同类共享属性和操作的机制。消息是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务。此外,面向对象数据特点还有封装、信息隐蔽、消息传递、多态性等。综上所述,面向对象数据与现实世界实体对象一一对应,具有传统数据库数据不具有的两大特性,即内容海量性和结构复杂性,它们是构建新型数据库的基础。
(二)传统数据库局限性
1、不能表示客观世界复杂对象。采用二维表表示数据及其关系,语义表示能力差,无法表示客观世界复杂对象,不能揭示数据之间深层含义和内在联系,缺乏数据抽象。
2、缺少对复杂数据类型支持。只能理解、存储和处理简单数据类型,不能根据客户需要动态扩大数据集。碰到复杂问题常利用高级程序设计语言构造相应数据类型和操作,既加重用户负担,又不能保证数据一致性。
3、数据结构不能与行为相关联。对象有两方面内容,即结构和行为。传统DB把前者映射到数据库模式中,对后者没有很好实现。
4、阻抗失配和语义断层,不能与高级程序设计语言无缝集成。传统DB开发需同时使用数据库语言(SQL)和高级程序设计语言,涉及模式和结构转换问题,既容易丢失原数据结构语义,又妨碍其他工具和用户在原有语义层次上共享数据。
5、缺乏管理知识和对象的能力。传统DB处理对象是确定的、现存的,不能很好地处理和管理实际应用中的二义性、未知对象。此外,它们没有演绎和推理功能,不能很好地管理知识,无法满足MIS,DSS,OA和AI等领域进行高层管理和决策的要求。
6、不能满足巨型数据库应用需要。随着多媒体技术、空间信息科学和数据挖掘技术等学科的蓬勃兴起,处理的海量数据已非一般二维表可存储和管理,而且数据结构越来越复杂,有的还有语义动作,使传统数据库显得力不从心。
另外,传统数据库还不能主动检查和处理事件,缺乏对长事务和多重嵌套事务的响应和处理能力。
综上所述,传统数据库已不能满足复杂的实际应用需要,随着面向对象研究的深入,把面向对象设计方法和数据库技术结合形成新一代数据库系统——面向对象数据库系统,不仅是数据库学科发展需要,也是推进计算机其他分支健康发展的必然结果。
(三)面向对象数据库概念
面向对象数据库系统(OODBS)支持定义和操作OODB,应满足两个标准:首先它是数据库系统,其次它也是面向对象系统。第一个标准即作为数据库系统应具备的能力(持久性、事务管理、并发控制、恢复、查询、版本管理、完整性、安全性)。第二个标准就是要求面向对象数据库充分支持完整的面向对象(OO)概念和控制机制。
综上所述,我们将面向对象数据库简写为:面向对象数据库=面向对象系统+数据库能力。
三、面向对象数据库技术——对象关系数据库
(一)系统模型
系统模型(如图1所示),包括3个层次:业务逻辑层、OR代理层和物理存储层。
1、业务逻辑层。业务逻辑层是程序开发人员或者用户所接触的接口层,在这个层次上是完全的面向对象内容。业务逻辑层由很多接口组成,例如应用程序接口是专门为特定的应用程序开发的面向对象接口;领域接口针对具体的应用领域,它与领域有关(或垂直定向),例如有些领域接口用于健康保健上的应用程序,它们仅适用于这个领域;其他一些接口适用于金融、制造业、通信等领域。业务逻辑层还可以包括其他类型的接口,例如多领域接口表明它们适用于多个领域。
2、OR代理层。OR代理层是系统的关键层和核心层。它是与领域无关的(或水平定向的)代理层,用于完成OO和RDB的相互映射和转换。它由4个模块组成:预处理/后续处理模块;OSQL/SQL转换器;OO/RDB映射转换器;RDBMS是成熟的关系数据库管理系统。
3、物理存储层。系统的最底层是物理存储层。在数据存储的结构上,仍然采用关系数据库的形式。可见,该系统模型是对传统关系数据库的扩展,是把面向对象技术与关系数据库相结合而建立的一个对象关系数据库管理系统(ORDBMS)。其具有以下优点:(1)与纯粹的面向对象数据库管理系统(OOD2BMS)相比,系統充分考虑结合了现有RDBMS的优点,并且在当前的数据库理论和技术现状下,具有更好的可实现性;(2)与当前普遍使用的两层构架模型相比,该系统的逻辑更加清晰。同时,由于OR映射层对业务逻辑层提供了统一的面向对象接口,用户和程序员编码时可以将更多的精力放在具体领域的业务实现上而不是关系数据库与类实例的转换上。
(二)映射规则
OR映射是系统的关键功能,而OO/RDB映射转换器是实现该功能的主要模块。因此,根据面向对象理论和关系数据库的特点,重点讨论和制定映射规则。总体映射思路如表1所示:
1、没有继承关系的类映射规则:对于没有继承关系的一个类映射为一个表,其中表名取类名,对象标识符对应表的一个主键,表的对象属性对应表列且以属性名作为列名。另外,因为表中的列除了来自该对象的属性外,可能会因为关联、概括等关系而有所扩充,因此表列个数应大于或等于属性个数。同样原因,表的主码可能包括除对象标识符对应主键以外的其他键。
2、类层次映射。对于存在继承关系的3个类OA、OB和OC,不妨设OA是OB和OC的共同父类,则该类层次映射到数据表,可以根据具体情况的不同采用以下三个规则:(1)将整个类层次映射为单个数据表,表中包括所有类(基类、子类)的属性。该规则的优点是实现简单,且支持多态,而且因为表中包含了所有信息,报表操作簡单。缺点是增加了类层次中的耦合,类层次中任何类属性的更改会导致表结构的更改,即会影响到整个层次结构而不仅仅是该类的子类;浪费了大量的数据库存储空间。(2)将处于继承层次最底层的各个具体类分别映射到一个数据表,每一个表包含OID、具体类本身的属性和它继承的属性,而抽象的基类则不参与映射。该规则的优点是报表操作实现简单,表中包含了具体子类的所有信息.缺点是类的修改会导致其所有子类对应表的更改;角色的更改会造成ID的重新赋值(因为不同子类的ID可能重复);难以在支持多重角色时保持数据的完整性。(3)每个类均映射为一个数据库表,表中包含特定于该类的属性和OID,其父类的OID也作为外键存在与表中,作为指针指向该类从父类所继承属性的属性值。该规则与面向对象概念的一致性及对多态的支持最好,易于修改基类和增加新的类。缺点是映射后的数据库中存在大量的表,系统访问对象属性时要涉及多个表,需要较长的时间,对报表的支持较差。
3、类方法和类事件映射规则:方法和事件是其值不能静态存储在数据库中而只能动态执行相关程序计算得到的一种特殊的属性。在标准RDB模型中并没有支持用户自定义函数和过程的机制。可幸的是多年来一些商业化RDBMS产品已提供了这些功能,SQL标准也开始考虑包含这一功能,成为PSM子程序(包括了用户自定义函数和过程),这样就能够建立方法和事件定义到PSM子程序定义的映射中。另外,方法调用的一个显著特性就是多态,即动态捆绑。因此,仅把方法和事件调用映射为相应的PSM子程序调用是不够的,需要在方法调用被映射后的目标代码中包含PSM子程序以及该子程序调用的动态解决方案。一般的方法是将方法调用映射为case语句,在case语句中列出所有捆绑的条件和各种情况下相关PSM子程序的调用。类方法和事件的映射是与语言相关的程序翻译问题,与具体的RDBMS相关,因此需要人工来完成。
4、类间关系映射。类间关系有很多种,例如继承、组装、聚合等等。规则2处理了继承关系,对于其他的所有关系可以归结为三种类型:一对一、一对多和多对多关系。类间关系映射为一个关系表,规则如下:如果两个对象之间存在一对一关联,则在两个对象映射表中任选一个加入另一个对象映射表的主键作为自己的外键;如果两个对象之间存在一对多关联,则在“多”方对象映射表中加入“一”方对象映射表的主键作为外键;如果两个对象之间存在多对多关联,则产生对应该关联的表,它由两个对象对应表的所有主键组成,并以它们作为自己的主键。
四、结束语
对象关系数据库系统模型为OR映射提供了明确的思路和有章可循的方法,能够有效降低实际开发难度和工作量、规范映射模型、使业务逻辑部分和数据存储部分达到了松耦合。
面向对象数据库和关系数据库之间的运算转换,在多重数据库互操作研究中是一个重要的环节。本文中,讨论了对象关系数据库的体系结构及其映射规则。这些工作对于对象关系数据库的实际应用具有一定的现实意义。
参考文献:
1、王意洁.面向对象的数据库技术[M].北京:电子工业出版社,2003.
2、Ian Graham著,袁兆山译.面向对象方法原理与实践[M].北京:机械工业出版社,2003(3).
3、Scott.W.Ambler著,车皓阳、刘锐译.面向对象软件开发教程[M].北京:机械工业出版社,2003(3).
(作者单位:湖北工业大学计算机学院)