(计算机应用技术专业论文)基于关系数据库的对象持久化研究.pdf_第1页
(计算机应用技术专业论文)基于关系数据库的对象持久化研究.pdf_第2页
(计算机应用技术专业论文)基于关系数据库的对象持久化研究.pdf_第3页
(计算机应用技术专业论文)基于关系数据库的对象持久化研究.pdf_第4页
(计算机应用技术专业论文)基于关系数据库的对象持久化研究.pdf_第5页
已阅读5页,还剩79页未读 继续免费阅读

(计算机应用技术专业论文)基于关系数据库的对象持久化研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 如何进行对象持久化是在面向对象分析设计中需要解决的问题。目前 虽然面向对象数据库系统已经出现,但它还很不成熟,不具备实用性。相 比之下,基于关系模型的关系数据库是目前广泛使用的进行数据存取的途 径。然而,面向对象分析设计中对象模型和关系数据库中的关系模型两者 之间存在着阻抗不必配。尽管,我们具有在数据库中引入对象数据的对象 数据类型技术来简化对象持久化操作,但是如何封装,怎样访问这些对象 使关系模型与对象模型相统一,还未能解决。本文通过对面向对象数据库 技术及对象数据模型技术的实现目的和优劣的分析,分析了面向对象技术 中的对象模型与关系数据库中的关系模型相互映射的可能性及其具体映射 的理论。除此以外,本文还依据此映射理论,分析了具体实现基于关系数 据库的对象持久层的最小化及最大化模式,并且对这两种持久层模式的组 成和各个部分的功能进行了描述。本文的理论成果及模式解决了对象、关 系模型的不匹配的问题,可以将对象映射为关系模型,做到在软件系统开 发中应用关系数据库进行对象的存储;并且,它将对象与关系的映射封装 于特久化对象及持久化层中,与业务逻辑相分离。通过对本文提出的理论 成果及模式应用,可以在软件系统的开发设计过程中充分利用面向对象分 析设计方法,使面向对象模型贯穿于包括对象持久化过程的程序开发、实 现阶段的始终成为可能。 北京工业大学工学硕士论文 关键词对象;持久化;关系数据库;映射 i i a b s 仃a c t a b s t r a c t h o wt o p e r s i s to b j e c t s i sa ni s s u e ,w h i c hi s n e e dt os o l v ei no b j e c o “e n t e da n a l y s i sa n dd e s i g n c o m p a r i n gw l m o b j e c to r i e n t e dd a t a b a s e ,w h i c h h a s a p p e a r e dn o w a d a y s b u tn o tm u c hm a t u r e a n d p r a c t i c a l l y , r e l a t i o n a l d a t a b a s ei sw i d e i yu s e dt os t o r ea n dr e t r i e v ed a t ab a s e d o nr a t i o n a lm o d e l i n g h o w e v e r t h e r ei sak i n do fu n m a t c h i n gg a pb e t w e e no b j e c to r i e n t e dm o d e l s a n dr a t i o n a lm o d e l s d e s p i t ew e h a v eo b j e c td a t at e c h n o l o g y ,w h i c hi m p o r t s o b l e c td a t ai nn o n o b o e c to r i e n t e dd a t a b a s e st os i m p l i f yp e r s i s t i n go b o e c t s ,b u t h o wt o e n c a p s u l a t eo b j e c t s , h o wt oa c c e s st h e s eo b j e c t s t o u n i f yo b j e c t o r i e n t e dm o d e l sa n dr a t i o n a lm o d e l si sn o ts o l v e dy e t t h i sp 印e ra n a l y z e d t h e g o a l s a n d a d v a n t a g e s a n d d i s a d v a n t a g e s o fo b j e c t o r i e n t e dd a t a b a s e t e c h n o l o g ya n do b j e c td a t at y p et e c h n o l o g y ,a n dt h e na r g u e d t h ep o s s i b i l i t yo f m a p p i n go b j e c tm o d e l st o r a t i o n a lm o d e l sa n dp r e s e n t e dat h e o r yt oa c h i e v e t h i sm a p p i n g b e s i d e st h i s ,t h i sp a p e ra l s op r e s e n t e d am i n i m u ma n dm a x i m u m p e r s i s tl a y e rm o d e l i n gd e s i g n b a s e do nt h et h e o r yi n c l u d i n g t h ec o n s t i t u t i n go f t h el a y e ra n dt h er e s p o n s i b i l i t i e so f e a c hc o m p o n e n t si nt h e1 a y e r t h em a p p i n g t h e o r ya n dm o d e l i n gw a y sp r e s e n t e d i nt h i sp a p e rs o l v e dt h eu n 。m a p p i n gi s s u e b e t w e e n 也eo b j e c tm o d e l sa n dr a t i o n a lm o d e i s w ec a n s t o r eo b j e c t si nt o r a t i o n a ld 眦l b a s e sa n de n c a p s u l a t et h em a p p i n gw a y si n t op e r s i s t e n to b j e c t s a n dl a y e r s t o s e p a r a t e t h e l o g i c1 a y e r s a n d p e r s i s t e n tl a y e r s i ns o f t w a r e d e v e l o p i n gb yu s i n go ft h e m b ya c h i e v i n gt h e s e ,t h eo b o e c tm o d e i i n gc a n b e u s ( 1 di np r o g r a m m i n ga n di m p l e m e n to f o b j e c t sp e r s i s t i n g ,t h e r e f o r e ,t h eo b j e c t i i i 北京工业大学工学硕士论文 o r i e n t e dd e s i g na n da n a l y s i sc a nb et h o r o u g h l yu s e di ns o f t w a r ed e s i g na n d d e v e l o p m e n t 1 ( e yw o r d s :o b j e c t ;p e r s i s t ;r e l a t i o a ld a t a b a s e ;m a p p i n g 第1 章、绪论 第1 章、绪论 1 1 关系数据库与面向对象技术 1 1 1 关系数据库概述 自从1 97o 年ibm 圣约瑟研究实验室的高级研究员埃德加考特 ( e d g a rf r a n kc o d d )在c o m m u n i c a t i o n so f a c m 上发表了大型共享数 据库数据的关系模型一文,定义了关系数据库的基本概念,引进了规范 化理论,为关系数据库全面开发奠定了基础以来,关系数据库引起了广泛 的注意和研究。 关系数据库是基于关系模型的数据库。“关系”是数学中的一个基本 概念,由集合中的任意元素所组成的若干有序偶对表示,用以反映客观事 物间的一定关系。关系模型的基本思想是把实体模型与实体模型间的联系 均归为二维表格的形式加以描述。二维表中的每一列对应实体的一个属性 ,每一行形成由多种属性组成的多元组与一个特定的实体相对应。实体和 联系均用关系描述,或者通过关系之间的关系运算建立联系。关系模型与 其它数据模型相比,首先,其数据结构简单、规范;其次,它运用了先进 的数学工具一一集合运算和谓词演算,并创造了投影、选择和联接运算, 即关系代数。使用这些运算可以把二维表进行任意的分割和组装,随机地 构造出各式各样用户所需要的关系。因此关系模型具有灵活方便,表达能 力和功能性强的优点。 北京工业大学工学硕士论文 在关系模型中用户对数据库的操作是使用非过程化的表示,用户接口 不涉及任何存储路径和存储方式,数据独立性高,因此用户对关系模型的 理解、使用更加方便。此外,关系数据库有着网状和层次数据库所没有的 数学基础,这为关系数据库的发展又提供了保证。由于以上原因,关系模 型一经提出,立即引起学术界和产业界的广泛重视,从理论与实践两方面 对数据库技术产生了强烈的冲击。在关系模型提出之后,以前的基于层次 模型和网状模型的数据库产品很快走向衰败以至消亡。一大批商品化关系 数据库系统很快被开发出来并迅速占领了市场。目前,大多数数据库系统 产品都是关系型的,关系数据库成为发展的主流。 1 1 2 面向对象技术 随着8 0 年代例如c + + ,o b j e c t i v e c ,o b j e c tp a s c a l ,c l o s ( c o m m o n l i s po b j e c ts y s t e m ) ,e i f f e l ,a c t o r 等等一系列描述能力较强、执行效 率较高的面向对象编程语言的出现,标志着面向对象的方法与技术开始走 向实用。当时就有人曾经预言,面向对象将成为9 0 年代计算机领域的主流 技术,现在这个预言已经成为无可置疑的事实。 人们对软件本身的认识,一般是以着眼于编程开始,随后逐渐形成从 分析、设计到编程、测试与维护一整套的软件工程体系。因此,在计算机 软件领域,很多新的方法与技术都是从编程阶段首先出现,进而发展到软 件生命期的各个阶段。例如大家熟悉的结构化方法,开始提出时叫做“结 构化程序设计”,它引出了一系列的结构化编程语言,然后便发展到“结构 第l 章、绪论 化分析”和“结构化设计”。面向对象方法也是如此,自8 0 年代末期到9 0 年代,人们对面向对象方法的研究与运用,不再局限于编程阶段,而是从 系统分析和系统设计阶段就开始采用面向对象方法,使面向对象的方法与 技术向着软件生命期的前期阶段发展。人们对面向对象的研究重点,从面 向对象的编程( o o p ) ,转移到面向对象的分析与设计( o o a 与o o d ) 。这标 志着面向对象方法已经发展成一种完整的方法论和系统化的技术体系。 “面向对象”是一种认识客观世界和模拟客观世界的方法。它将客观世 界看成是由许多不同种类的对象构成的;每个对象都有自己的内部状态和 运动规律;不同对象之间的相互联系和相互作用就构成了完整的客观世界 。面向对象方法学所引入的对象、方法、属性、类、实例、继承性、封装 性等一系列概念,它极大的拉近了软件世界和客观世界距离,为我们通过 设计和实现大型软件系统认识和模拟客观世界奠定了坚实的基础。 正是因为如此,面向对象的方法与技术发展到软件生命期的前期阶段 有着极为深刻的意义。因为面向对象方法的本质,就是主张从客观世界固 有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认 识、理解和描述客观事物,强调最终建立的系统能够映射问题域,即:系 统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其关 系。这恰恰是从分析和设计阶段入手才能根本解决的问题。从这个意义上 讲,软件生命期的前期阶段,正是面向对象方法最能从根本上发挥其优势 的领域。o o a 和o o d 的出现是面向对象方法发展的必然结果,也是它走向 完善,走向实用的重要标志。 北京工业大学工学硕士论文 1 2 对象持久化技术 在面向对象分析设计和实现过程中经常面临一个如何实现将对象作 为永久信息存储和访问的问题,即如何解决对象持久化问题。这是面向对 象开发和企业应用开发需要解决的重要问题。目前,实现对象持久化的方 式主要包括利用文件系统的持久化和利用数据库系统的持久化。 通过文件系统持久化对象的方式非常简单。它利用基本的对象序列化 技术就可以实现。此外,一些将对象与x m l 转换的技术,例如,j a v a 的 j a x b 技术,可以将对象序列化成x m l 文件格式。这虽然相对复杂,但它 也是通过文件系统形式持久化对象的方式。相比之下,数据库是目前保存 数据的更加有效手段。因此,通过数据库系统持久化对象是普遍采用的方 式。于是,如何在对象和数据库之间建立一种好的持久化机制成为了关键 的问题。针对此问题,目前对象持久化技术存在着两种热门的研究方向。 一个方向是把“面向对象”概念融合到数据库中去,形成了所谓“面向对 象数据库”技术;另一个方向是,应用传统数据库中引入面向对象思想的 对象数据类型( o d t ) 技术。 1 2 1 对象持久化的理想方式面向对象数据库( o o d b ) 1 2 1 1 面向对象数据库概述 对于什么是面向对象的数据库系统,目前尚缺乏权威性的统一标准。 然而,对于面向对象数据库系统应该具备的基本特性,国际数据库学术界 4 第l 章、绪论 已取得了大体一致的共同认识。 首先,面向对象数据库必须支持面向对象的数据模型,具有面向对象 的特性。这些特性主要包括:支持复杂对象,具有对简单对象运用各种对 象构造符组成复杂对象的能力;具有对象标识,对象独立于它的值而存在 ;具有封装性,数据库对象中既封装数据又封装程序,从而达到信息隐蔽 ,同时也是逻辑数据独立性的一种形式;支持类型和类的概念,类型概括 具有相同特性的一组对象的共同特性;支持类或类型的层次结构,从而支 持继承性这一有力的建模工具;允许过载,即将同一名字用于不同类型上 的数据操作;通过与现有程序设计语言的合理连接来达到计算完备性,并 具有可扩充性。 其次,面向对象数据库必须是一个数据库管理系统,具有数据库管理 系统的基本功能。主要包括:持久性,数据库中的数据是持久保存的;外 存管理,包括索引管理、数据聚集、数据缓冲、存取路径选择、查询优化 等;并发性,系统应该提供和目前的数据库管理系统同样级别的,对多个 用户并发操作数据库的支持;故障恢复,系统应该提供和目前的数据库管 理系统同样级别的,将数据库从故障后的错误状态恢复到某一正确状态的 功能:以及具有非过程化的、高效的、独立于应用的查询功能。 最后,面向对象的数据库系统除了必须具备上述面向对象特性和数据 库管理系统基本功能外,最好还能具备新应用领域所需要的一些进一步的 特性,例如模式演化、版本管理、长事务和嵌套事务、分布式计算等。 北京工业大学工学硕士论文 1 2 1 2 面向对象数据库系统的优越性 通过以上对面向对象数据库特性的描述我们可以看出它是实现对象 持久化最理想的技术。面向对象数据库具备复杂对象构造能力,采用面向 对象思想使得对于客观世界的模拟能力强、方式自然,是面向对象思想深 入到数据库领域的必然结果。和关系数据库相比,关系数据库系统强迫用 户使用多个关系的元组来表示层次数据、嵌套数据或复合数据:关系数据 库中属性的取值只能是基本数据类型;实体之间需要关系连接。这样的表 示是基于关系代数的数学模型方式,很不自然。面向对象数据库中对象属 性的取值可以是另外一个对象,实际储存的是该对象的对象标识,这样的 表示方式自然、易理解,体现了客观世界中对象的内部结构及对象之间的 联系。 1 2 1 3 面向对象数据库不足 可以说,理想的面向对象数据库从面向对象分析设计角度讲是理想的 实现对象持久化方法,因此没有什么不足可言。然而关键问题是面向对象 数据库目前是一个发展很不完善的技术,还处于很年轻的阶段。虽然面向 对象数据库系统的概念早在2 0 世纪8 0 年代就己提出,虽然目前它的应用 开发工具五花八门,但是它发展至今还没能拿出一件像样的产品。产生这 种现象的最根本的原因是其基本理论上的匮乏。首先,它的数据模型并不 是建立在完善的数学基础之上,数据库语言缺乏形式化基础。其次,与关 系数据库查询语言的s q l 标准不同,它的查询语言没有统一的标准,技术 还很不成熟。此外,各厂家的面向对象数据库系统,甚至是各应用企业间 第1 章、绪论 的1 面向对象数据库无法通用。相比之下,关系数据库成熟的一个标志正是 通用性,目前主流的关系数据库几乎都可以实现数据共享。总之,要提到 面向对象数据库的不足,那就是目前它还不是很规范,不具备应用于实践 的能力。 1 2 2 迅速发展的对象数据类型( o d t ) 技术 解决对象持久化问题一直以来朝两个方向发展,一个是对以上的面向 对象数据库的研究,另一个是利用传统的数据库系统尤其是关系数据库系 统,引入面向对象思想,将一种以对象为核心的方法应用到对象、关系映 射中,通过对象数据类型来实现对象持久化管理。 对象数据类型技术实质上是一种应用框架,在此框架之下,利用面向 对象程序设计语言的支持,将程序中的对象存储到数据库中。目前,应用 于此领域的技术,包括微软的适用于m i c r o s o f t ,n e t 环境下的0 r 映射方 式的持久性处理框架p d o ( p e r s is t e n t d a t ao b j e c t ) 及微软正在开发的 技术m i c r o s o f to b j e c ts p a c e 等。在j a v a 环境下,国际上一些在这方面 比较有经验的企业( 如s u n ,i b m 等) 联合起来制定了j d 0 规范,力求以 全新的完全面向对象的概念和业务意识来指导基于关系数据库系统开发。 以下以s u nj d o 为例简要介绍一下这种对象数据类型技术的思想。 1 2 2 1 s u nj d o 翕g 构 j a v 8 数据对象( j a v ad a t a0 b j e c t s ) 是s u nm i c r o s y s t e m s 的一项新技 北京工业大学工学硕士论文 术。尽管j d o 还有些不成熟( 刚发布1 0 规范) ,但它为对象持久性提 供了第一个标准化的、完全面向对象的方法来访问关系数据库,填补了数 据库编程领域的一大空白,因此很有发展前景。 简单的讲,j d o 是通过支持完全的对象模型,包括引用、集合、接口 、继承,采用透明的中间件存储技术,用以实现对象完全透明持久化。具 体的讲,如图l 一1 所示,在j d o 框架中,应用程序中的对象通过调用遵从 j d 0 及其a p i 规范的可持久存储类的持久对象实例实现自身的持久化。任 何需要存储的类必须是可存储的( p e r s i s t e n c ec a p a b l e ) ,而任何用到这些 类的其它类必须是存储可知的( p e r s i s t e n c ea w a r e ) 。在j d o 的透明存储技 术的支持下,开发者只需要像往常一样写一个类,然后为需要存储的类编 写的x m l 格式的描述进行存储的映射。j d o 实现厂商会提供一个增强器 ,增强器会根据描述符文件改造类代码,使之实现p e r s i s t e n c ec a p a b l e 接 口。当类被增强后,就可能使用持久性管理器对象来增加、更新、删除、 查询实现存储对象。持久性管理器负责将可持久存储的对象存储而实现成 为提供持久性的体系。同时,j d o 具有事务支持及专门的针对持久化对象 的j d o q l 查询语言进行查询的功能。 第1 章、绪论 图1 1j d o 持久化框架 f i g u r e1 1f r a m eo fj d o 1 2 2 2 j d o 技术的优点 j d o 与其它0 d t 技术一样,其最根本优点是在系统设计过程中引入 了对象模型,将对象作为可以在数据库中存储的单元,而不再局限于源于 关系数据库的实体、关系模型,使对象持久化具体过程以外的部分实现了 完全的面向对象思想、技术。正因为如此,这种技术使得分离业务逻辑操 作和数据库操作成为可能。业务逻辑和数据库操作的分离使业务逻辑的开 发者可以不必关注对象持久化的实现方式,使得业务对象完全独立于任何 数据库技术成为可能,因此具备通用持久性。也就是说,j d o 并不限于关 系数据库,如果更换数据源平台,它潜在地可以处理任何类型的数据源, 包括a s c i i 无格式文件,x m l 文件,属性文件,大机上的c o b o l 数据库等 北京工业大学工学硕士论文 现在我们可以使用的数据库作为数据源,而不是被限定在后端的关系数据 库上。 1 2 2 3 j d o 技术的不足 宏观的讲,像其它对象数据类型技术一样,j d o 只是一项正在发展还 不成熟的技术,它在很多方面还有没有解决的问题。其中最根本的问题是 ,j 1 ) o 虽然使对象作为数据库存储单元成为可能,但是它并没有提出如何 将对象与数据库中数据模型例如关系模型进行映射的理论和方法,更谈不 上对这些映射的理论和方法进行必要的支持。 在微观上,由于j d o 通过持久化管理器操作对象持久化过程,使得它 的对象持久化过程与业务逻辑还存在一定耦合。如果你应用j d o 实现对象 的持久化,那么有关j d o 的管理操作会出现在业务逻辑层,使得业务逻辑 不能完全独立出来。此外,由于其宏观上的不足,j d o 在对象持久化实现 上缺乏灵活性。它只能将简单的对象进行存储,当对象就有复杂的关系, 如继承,聚集,组合关系时,由于没有映射理论,j d 0 不能实现高效的, 简洁的持久化方式。例如,它在实现复杂的对象的存储时非常繁琐。此外 ,在对象查询方面,它虽然引用了j d o q l 语言进行类似s q l 实现的对象查 询功能,但它功能有限,还不支持比如m a x ,m i n ,s u m 等这些聚合操作。 1 3 基于关系数据库的对象持久化研究及应用的必要性 在当今信息爆炸的时代,一个软件系统必须要有数据库子系统提供存 第l 章、绪论 储,快速检索数据的功能。对于目前我们广泛应用的面向对象技术而言, 我们当然希望能够具有存储,检索对象的数据库系统帮助我们的软件系统 进行对象的持久存储。由于目前我们没有成熟的面向对象数据库开发应用 理论和工具。况且关系数据库技术是理论成熟并被广泛应用的解决方案。 因此,我们在众多的软件系统应用开发中应用关系数据库进行对象的存储 。这里就出现了一种不协调,不匹配。 关系数据库虽然具有数据结构化、最低冗余度、较高的程序与数据独 立性、易于扩充、易于编制应用程序等优点,但是它是基于关系数据模型 ,建立在结构化的分析设计之上的。相比之下,在进行大型软件设计时, 我们应用的面向对象开发方法是基于对象模型,建立在对象化的分析设计 之上。它们两者之间一个基于关系模型,一个基于对象模型;一个应用结 构化方法建立模型;一个应用面向对象方法建立模型。这使得在我们的系 统分析设计中虽然应用了面向对象的分析设计方法,但是在解决对象的存 储时因为不得不应用关系数据库而面l 临窘境。我们面对的是不同的模型, 需要用不同的思维方法进行系统的设计。因此,对于应用了关系数据库的 软件系统设计,例如信息系统的设计,面向对象思想好像贯彻的不很彻底 。要知道,对大型系统设计开发而言,它需要一种完整的系统模型;需要 一整套针对分析与设计阶段的方法、策略与技巧;还需要一套便于分析人 员设计人员、编程人员、管理人员以及用户彼此沟通的一致的基本表示 。因此,两种思想,两种方法应用于一个系统的设计开发中是非常糟糕的 事情。这是目前有关子面向对象技术讨论的焦点,也是面向对象分析设计 方法在推广实践过程中的一大阻力。这使得,一方面由于上述对象关系机 北京工业大学工学硕士论文 制的不匹配给对象持久化带来的阻碍,许多面向对象的设计者声称不应使 用关系数据库。但事实是9 9 的开发环境是面向对象的开发方法和关系数 据库的存储机制,它是常用的实现标准;另一方面,许多人抛弃面向对象 的分析设计方法,回归到自软件工程产生以后首先提出来的方法一一结构 化方法,将其作为实用的方法。 总之,基于关系数据库的对象持久化问题正是以上的矛盾、隔阂的集 中体现了。尽管许多面向对象开发环境提供了初级的访问关系数据库的机 制,即使我们利用一个典型的分层式架构,建立从商业逻辑中分离出来的 数据访问层( d a t a a c c e s s l a y e r ) ,在数据访问层使用常用的m i c r o s o f t 的开 放数据库连接( o d b c ) 机制和j a v a 数据库连接( j d b c ) 提供的编程接 口中的对象进行关系数据库操作,但是它们只是提供了封装访问数据库机 制的类库,仅仅是开始,也只是一个开始;尽管,我们具有对象数据类型 ,例如上文提到的j d o 来简化对象持久化操作,将对数据库的访问封装在 某些对象中。但是如何封装,怎样访问这些封装使它们与我们的面向对象 的分析设计相统一,将关系模型与对象模型相统一,还未能解决。因此, 我们需要一种理论将实体关系与对象模型相互转换、统一;并且需要一种 基于这种理论的软件设计模式利用关系数据库解决对象持久化问题并且尽 量弥合面向对象分析方法和结构化方法之间的隔阂。这就是本文论述的重 点。 1 2 第2 章、对象模型与关系模型之间的映射理论 第2 章、对象模型与关系模型之间的映射理论 如上文所述,一方面,面向对象技术是应用于软件系统开发的最常见 的技术。另一方面,关系数据库仍然是许多人都青睐的进行持久信息存储 方法,并且在较长时问内这种情况不会改变。因此,目前我们通常需要将 对象存入关系型数据库之中以实现对象持久化。 要实现在关系数据库中的对象持久化,从理论上讲,首先要解决将关 系数据库中关系模型与对象模型相互映射和转换的问题。对象模型基于软 件工程的一些原理,例如耦合、聚合和封装。而关系模型则基于数学原理 ,特别是集合论的原理。两种不同的理论基础导致两者各自有所不同。例 如,对象模型侧重于从包含数据和行为的对象中构建应用程序,而关系模 型则主要针对数据的存储;使用对象模型,是通过它们的关系来访问对象 ,而使用关系模型,则通过复制数据来联接表中的行。可以说两者之间存 在一种不匹配。因此,为避免对象和关系之间的阻抗不匹配,一个将对象 存入关系型数据库的系统需要提供一个减少这个阻抗不匹配的映射理论。 2 1 对象和实体关系之间的联系 关系数据库的数据模型和记录集与面向对象的类和实例之间有相似 之处,这是两者之间可以映射的基础。简单地说,一个关系数据库中的一 个表好似一个类,表中的每列可以看作是类的属性。而表中的各个纪录就 好似这个类中的实例化的对象。一个类的对象不但有属性而且有方法,对 北京工业大学工学硕士论文 于对象的方法因为其持久化于程序之中并且具有一致性,也就是说它不会 被更改。因此对象的方法没有必要利用数据库进行持久化。如下图2 1 至2 3 ,一个p e o p l e 类是一个需要持久化的对象类( 2 一l 图中用u m l 类 图表示) 。它可以与一个关系数据库逻辑模式中的实体相映射( 2 2 图中 i d e f l x 实体符号表示) ,而关系数据库实体对应数据库物理模式的表,如 图2 3 。 p e o p l e i d n a m e a g e p e o p l e i d n a m e a g e 图表2 - 2p e o p l e 实体i d e f l x 实体 图表2 - 1p e 。p i e 类u m l 类图 图 f i g u r e2 - 1c l a s sv i e w 。fp e 。p i e f i g u r e2 2e rl d e f l xv i e w 。f p e o d l e 图表2 3p e o p l e 实体物理表 f i g u r e2 3p h y s i c a it a b i e0 fp e o p i e 据此,我们完全可以利用这种联系将对象和关系数据库中的实体进行 第2 章、对象模型与关系模型之间的映射理论 映射。然而因为在两种模型间存在的阻抗不匹配非常复杂。因此,映射并 不是这么简单。以下,我们将在如何在对象和实体,对象和关系之间这两 方面如何映射进行细致的讨论。 2 2 对象和实体之间的映射 2 2 1 属性类型映射成域 首先,讨论一下最简单的映射。即如何将类的属性类型映射成表中列 的域。在关系数据库中,域的使用提高了设计的一致性,而且优化了应用 的移植性。简单的域映射是非常容易实现的,仅仅需要替换相对应的数据 类型和数据的尺寸。对基本的数据类型如整形,浮点来说,基本上面向对 象语言和关系数据库中的数据域有着一一对应的关系。并且像j d b c 这类 与关系数据库操作的接口来说都存在着固定的通用数据类型以帮助转换。 目前唯一不好解决的是枚举类型的转换。因为枚举域限定了域允许取值的 集合,因此,枚举域比简单域的实现更复杂。一般我们有以下几种实现映 射的方式: 首先,可以在类中利用字符串( s t r i n g ) 代替枚举,在字符串映射为 枚举时进行s q l 语句的约束。这是我们常用的方法,它的优点是简单,易 用,但是对于枚举集合数量很大时将显得非常麻烦。 其次,可以为每个枚举值定义布尔字段标志。例如,对于星期的枚举 可以定义星期一至星期日七个布尔值。这样可以解决在枚举值之间并发关 北京工业大学工学硕士论文 系,例如可以表示上课时间为星期一、三、五。这种方式解决了多枚举值 同日寸出现问题,但是它很冗长,每个取值均需要一个布尔字段,如星期的 枚举需要7 个布尔值组成的字段。 再次,可以建立一个枚举表,在表中存储枚举值的定义。可采用为每 个枚举定义单独表或多个枚举定义共用单个表的方法。它有效地控制了数 量大的枚举值,适合于大数量的枚举值和开放式枚举值的情况的定义。这 种方法可以在不改变应用代码的前提下,扩充枚举值,但比较而言对于偶 尔发生的应用显得笨重。 最后,可以对枚举值进行编码将枚举值编码为通常的数字。和第一种 方式相区别的是,它一般在类中定义数字常量,在类中进行枚举值和数字 的转换。这种方式可以减少磁盘空间并且实现多语言处理。但同时它复杂 化了维护和调试,一般仅在处理多语言应用下使用。 2 2 2 属性映射成列 就像上文我们讲述的那样,由于一个实体与类的属性存在对应关系, 我仍可以将类属性映射成关系数据库中实体的属性。这里要注意的是,并 不是所有属性都是持久的。例如,对于帐单类会有总价格属性,这个属性 由其实例在计算时使用,它并不需要保存到数据库中,因此没有必要进行 映荆。而且,某些对象属性本身就是对象,体现了对象之间的关联、聚合 、组合的复杂关系。例如,课程对象有多个作为属性的教材实例,对于这 种情况,如果教材实例不是一个需要持久化的对象我们不需进行映射;如 第2 章、对象模型与关系模型之间的映射理论 果教材实例也是需要持久化的对象,我们会将它映射到一个教材实体。有 关如何进行体现了对象之间的关联、聚合、组合的复杂关系的列映射的具 体研究我们在下文有关对象之间关系的映射中讨论。 2 2 3 类映射成实体 通过以上属性类型映射成域及类属性映射成列的方法我们可以将非 常简单的,不存在复杂关系的持久对象类与实体之间进行一一对应映射。 但是在面向对象思想中,类与类之间存在着继承、关联、聚合、组合的复 杂关系。其中如何在关系数据模型中实现继承与如何将类映射成实体密切 相关。因此,以下将针对这个问题具体讨论。 如果类a 具有类b 的全部属性和全部服务,而且具有自己特有的某些 属性或服务,则a 为b 的特殊类,b 叫a 的一般类。这就是我们所说的继 承关系。 在将对象保存到关系数据库中时,继承问题从根本上归结为如何解释 在持久模型中组织继承的属性的问题。解决这个问题所用的方法会对系统 设计有很大影响。将继承映射到关系数据库中有三种基本解决策略:整个 类层次结构使用一个数据实体;或者将每个具体类使用一个数据实体;再 者将每个类使用个数据实体。为更好地理解它们,我将讨论在图2 4 中显示的类利用以上三种映射方法进行映射的优缺点。 北京工业大学工学硕士论文 图表2 4 简单类层次结构的u m l 类示意图 f i g u r e2 4c i a s s v i e wo fi n h e r e n c e 2 2 3 1 整个类层次映射为单个数据库表 使用将整个类层次映射为单个数据库表这种方法,需要将一个完整类 层次结构映射成一个数据实体,而层次结构中所有类的所有属性都存储在 这个实体中。图2 5 描述了采取这个方法时,图2 4 的类层次结构所 映射的实体模型。 p e r s o n lp e r s o n o i d fo b j ec t t y p e fn a m e ! s t u d e n t n u m b e r | ! sa l a r v l 。 图表2 5p e r s o n 实体模型 1 8 第2 章、对象模型与关系模型之间的映射理论 f i g u r e2 5e n t i t ym o d e l o fp e r s o n 图2 5 中,表的主键为一个p e r s o n o i d 列,它是一个o b j e c ti d ,一 方面可以作为表的主键,另一方面它作为解决类与类之间复杂关系的一种 机制而引入。我们会在下文中具体讨论o b j e c tl d 的作用。此外,在映射 过程中必须添加o b j e c tt y p e 列来表明行代表的是学生、教授还是其它类 型的人员。 这种映射方法的优点是简单。因为所有人员数据都可以在一张表中找 到,所以在人们更改角色时支持多态性,也就是说一个人可以既是教授又 是学生,可以兼顾两种身份的属性。此外,使用这种方法进行有关所有具 有继承关系的类属性的操作也非常简单,因为只要查一个表,再根据 o b j e c tt y p e 就可迅速做出。而且,因为表中包含了所有信息,因此对于 整个继承类的统一操作实现也很简单,不必找到每个子类所映射的实体分 别操作。这种策略的缺点在于每次在类层次结构的任何地方添加一个新属 性时,例如子类增加了一个新属性,都必须将新属性添加到整个表中。这 增加了类层次结构中的耦合。例如,如果在添加一个属性时有任何错误, 除获得新属性的类的子类外,还可能影响到继承层次结构中的所有类。此 外,它还可能浪费数据库中的许多空间。而且,虽然从属性上讲它支持多 态性,但是由于0 b j e c tt y p e 只能表示为单一角色,因此这种策略不能真 正实现多重继承。 北京工业大学工学硕士论文 2 2 3 2 每个具体子类映射成单个数据库表 使用这种方法,每个数据实体既包含属性又包含它所继承的父类的属 性。图2 6 描述了采取这个方法时图2 4 的类层次结构的实体模型。 在图中,由于s t u d e n t 和p r o f e s s o r 是具体类,因此,即有与s t u d e n t 类 对应的数据实体又与p r o f e s s o r 类对应的数据实体。对于p e r s o n 类,因 为它是父类,没有将其进行映射,它的属性只体现在子类之中。每个数据 实体都分别分配了自己的主键,也是o b j e c ti d ,s t u d e n t o i d 和 p r o f e s s o r o i d 。 s t u d e n t s t u d e n t o i d i in a m e | s t u d e n t n u m b e r p r o f es s o r p r o f es s o r o i d n a m e f s a l a r y 图表2 - 6 将每个具体类映射成单个数据实体 f i g u r e2 - 6m a p p i n gi n d l v i d u a ic i a s st os i n g i ee n t i t y 这种映射方法最大的好处是,它将所需的有关单一类的所有数据都只 存储在一张表中,表中包含了具体子类的所有信息,因此对于具体子类的 操作实现简单。这种影射方法的缺点在于:第一,当修改祖先类时,必须 修改它的表和它所有子类的表。例如,如果要向p e r s o n 类添加高度和重 量,就需要同时更新两个表,它会涉及很多工作。第二,无论何时,只要 第2 章、对象模型与关系模型之间的映射理论 对象更改了它的角色,例如,可能一个刚毕业的学生当了教授,则需要将 数据复制到相应的表中,并为它指定一个新的o i d 。这又涉及到很多工作 。第三,很难在支持多个角色的同时仍维护数据完整性。例如,没有办法 存储既是学生又是教授的入的姓名。 2 2 3 3 每个类均映射为数据库表 这种映射方法为每个类创建一张表,它的属性是o i d 和特定于该类 的属性。图2 7 描述了采取这个方法时图2 4 的类层次结构的持久模 型。这里生成了三个表,将p e r s o n o i d 作为所有三个数据实体的主键。对 于s t u d e n t 和p r o f e s s o r 实体的p e r s o n o i d 既是表的主键又是与p e r s o n 联 系的外键,这样就利用了关系代数中关系模型解决了继承。 s t u d e n t p e r s o n r、 fp e r s o n o i d ( f 的。 s t u d e n t n u m b e r 、 一 p r o f ess o r 、 p e r s o n o i d ( f 的、 s a l a r y 、 一 图表2 - 7 每个类均映射为数据库表 2 l 北京工业大学工学硕士论文 f i g u r e2 7m a p p i n ge v e r yc i a s s t od a t a b a s et a b i e 这种方法的最大好处就是它能够最好地适应面向对象的概念。它能够 很好地支持多态性,对于对象可能有的每个角色,只需要在相应的表中保 存记录。修改父类和添加新的子类也非常容易实现,因为只需要修改或添 加一张表。这种方法也有几个缺点:第一,数据库中有大量的表,实际上 每类都有一个表,而且还会有许多维护关系的表。第二,因为必须访问多 个表,使用这种技术读取和写入数据的时间比较长。第三,有关所有继承 类的统一数据库操作很困难,除非添加一些视图来映射有继承关系的所有 类。 2 2 3 4 以上三种类映射策略的比较 以上的每个映射策略会映射产生不同的实体模型。要理解三种策略之 间的设计优缺点,我们利用图2 8 中显示的添加了从p r o f e s s o r 中继承 的终身教授t e n u r e dp r o f e s s o r 类的类层次结构,比较一下以上三种策略 在模型在继承关系上需要更新,并且变得比较复杂时的优劣。 第2 章、对象模型与关系模型之间的映射理论 图表2 8 添加了终身教授t e n u r e dp r o f e s s o r 类的类层次结构 f i g u r e2 - 8c l a s si n h e r e n c e a d d e dt e n u r e dp r o f e s s o r 图2 9 显示了更新过的利用整个类层次映射为单个表的实体模型, 它添加了t e n u r e a n n i v e r s a r y 字段用于将更改的类层次结构映射成一个数 据实体。尽管数据库中的空间浪费增加了,但是按照这种策略操作只需花 非常小的代价就可以更新模型。 北京工业大学工学硕士论文 p e r s o n p e r s o n o i d o b j ec t t y p e n a m e s t u d e n t n u m b e r s a l a r y t e n u r e a n n i v e r s a r y 图表2 9 将扩展的层次结构映射成单一数据实体 f i g u r e2 - 9m a p p i n ge x t e n d e dc i a s si n h e r e n c et os i n g i ee n t i t y 图2 1 0 显示了将每个具体类映射成数据实体时的实体模型。使用这 个策略,只需要在s t u d e n t 和p r o f e s s o r 实体外添加一个新实体t e n ur e d p r o f e s s o r 。 s t u d e n t s t u d e n t o i d n a m e s t u d e n t n u m b e r 2 4 p r o f es s o r p r o f es s o r o i d n a m e s a l a r v 第2 章、对象模型与关系模型之间的映射理论 t e n u r e d p r o f es s o r t e n u r e d p r o f es s o r o i d n a m e s a l a r y t e n u r e a n n i v e r s a r y 图表2 1 0 将扩展的层次结构的具体类映射成数据实体 f i g u r e2 1om a p p i n g t h ei n d i v i d u a ic i a s so fe x t e n d e dc i a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论