维普资讯 http://www.cqvip.com
2006年9月 Sep.2006 第6卷第3期 湖南舅一卸籍学报 呈 呈 Fi堕Normal College Vo1.6 No.3 一种实体联系模型到面向对象模型的 持久化映射模式 徐长梅 (长沙大学计算机科学与技术系,湖南长沙410003) 摘要:将实体联系模型到面向对象模型的持久化映射模式用于持久层普通对象的建模,可以快速完成J2EE应用中 POJO的定义工作。在此基础上使用XDoclet标记说明映射特性,通过其他的框架(如Hibernate、Spring work、Stnlts、Display. Tag、DWR等开源框架)的集成,可以自动生成数据驱动应用所需的所有代码,加速了此类应用的开发,使得设计者摆脱繁 琐、重复的基础信息管理工作,更集中地关注业务领域的业务逻辑。 关键词:实体联系模型;面向对象模型;对象关系映射;数据持久化;模式 中图分类号:TP311.13 文献标识码:A 文章编号:1671—4369(2006)03—0154一O3 1.前言 些研究相反过程的特征。如数据库遗留系统需要在现有 (关系型)稳定数据环境下重建一个满足新型网络结构和 面向对象模型是基于数据抽象的,即对象是数据和在 操作系统的应用,L】 而数据驱动应用¨ 旨在建立一个以 其上操作的封装体,必须通过严格定义的接口访问数据。【】] 数据为中心的操作支撑环境,甚至有许多设计过程中,数据 对象具有表示、行为和状态,反映数据的抽象概念。对象模 建模和业务建模是同时进行的。它们产生了一个共同的设 型使用标识、状态、行为和封装等基本概念以及类型、类、关 计要求:在业务对象级别反映关系运算,直接使用数据库的 联和继承等高级概念来描述数据。关系模型是建立在严格 关系模型建立对象模型,并借此抽象业务逻辑。 的数学理论基础之上的,使用谓词逻辑和真值命题描述信 在J2EE领域已经形成了许多持久化框架和标准,如 息。 关系数据库得到一个逻辑模型和关于系统的真值原 Hibernate,iBatis,JDO,EJB等,它们为数据持久化提供了丰 子命题。根据这个信息模型,关系数据可以记住并返回初 富而灵活的服务,如何利用这些持久化框架建立数据对象 始信息,证明新的真值命题。关系模型使用关系、属性、域、 模型是本文的出发点,后面的叙述中将介绍一种实体联系 记录、属性值、关系值、关系变量以及数据库等概念。 模型到面向对象模型的映射模式,并基于教学信息这一经 面向对象设计的机制与关系模型的设计思想,直接形 典问题说明映射模式的适用性,最后将对映射模式在软件 成了面向对象数据模型与关系数据模型之间的阻抗。【3 面 开发中的重要作用进行阐述。 向对象模型侧重于包含数据和行为的对象来构建应用程 序;关系模型则主要针对于数据的存储。当为访问数据寻 2.实体联系模型到面向对象模型的持久化映射模式 找一种合适的方法时,这种不匹配就成为主要矛盾;使用对 持久化映射模式主要关注两个方面的内容,一是实体 象模型,常常通过对象之间的关系来进行访问;而关系理论 的对象建模,二是实体关系的对象建模。实体的对象建模 则通过表的连接、行列的复制来实施数据的存取。这种基 用来解决关系数据模型中关系与类之间的映射问题。而实 本的不同使两种机制的结合并不理想,迫使使用关系数据 体关系的对象建模则对对象之间的继承和聚合关系进行建 库的面向对象系统开发人员花费大量的时间来完成对象持 模,实体关系的描述本质上是有关关系外关键字的处理方 久化。[ ] 法。 文献[5]_[8]、[11]、[12]、[25]中讨论了有关对象 原则1:每个关系映射为一个单独的类。 建模过程中将对象持久化的工作。他们都集中讨论了面向 这个原则的适用性对于不存在关联关系的表来说 对象系统中数据访问的相关问题,给出了关系型数据库设 是无疑的,而对于存在关联关系的数据表,则需要根据其具 计和优化模式 】[7] 】[10 以及Seiralizer模式,…对对 体的关联关系进行分析。在对象到关系映射模式中,【 】类 象持久化模式进行了详细的阐述。- 】表继承自然形成了类与表的一一映射;具体表继承省略了 但是,有许多类型的应用对建模工作的需求存在与这 超类的持久化,将超类的属性映射为子类属性,因此将数据 收稿日期:2oo6—06—26 作者简介:徐长梅(1971一),女,湖南长沙人,长沙大学计算机科学与技术系讲师。 154 维普资讯 http://www.cqvip.com
表映射成为一个类不会引起语义问题;唯一的例外是单表 继承模式。 聚原则,降低了设计的复用程度。 这个问题一直是面向对象软件设计中的经典问题,在 信息系统设计中可以参照如下的原则: 原则5:主要业务一次使用多个实体时使用继承关系 单表继承模式将类的继承层次表示为一个单表,表中 的各列代表不同类中的所有域。_l6]但是这种模式的使用倍 受责难,主要的原因集中在两方面:它首先可能产生不能满 足关系数据库1NF的关系;其次产生了过多的关系域, 映射,否则最好使用聚合关系映射。 这个原则的引入主要是因为性能上的考虑,使用关联 操作获取关联表中记录的开销比单独分开查询两个(以 上)表中记录的开销小,因此在一次业务中批量获取数据既 DBMS的锁机制会严重影响单表的访问效率。基于这样的 原因,我们不考虑“单表继承”这样的不良设计。 原则2:关系的每个域都映射为一个对象属性。 在对象到关系的映射中,可能有些属性描述了业务处 减轻了数据库服务器的负担,同时也降低了通信开销。 如果不同的业务方法或者分次获取实体信息(比 如,先处理学生的用户信息,然后处理其学籍信息),因为用 理的中间结果,因此不需要持久化存储,而良好设计中的关 系域往往是对象的必须属性,因此关系中的每个域必须映 射为对象属性。 有关域类型的映射模式 ][ 已经超出了本文的范畴, 但是作为一般的设计方法,域类型映射一概遵循原则3。 原则3:除了关键字外,其他属性的类型尽量映射为简 单数据类型。 在对象持久化中,为了提高数据查询和更新的效率,关 系的主关键字一般使用与数据存储有关的标识域(简称 “数据标识域”),而不使用业务规定的记录标识关键字(简 称“业务标识域”)。 一般属性使用简单数据类型的主要原因是出于效率上 的考虑。持久化数据类一般是多层应用系统中的接口参 数,负责传递层之间的消息,简单数据类型无疑可以降低层 间通信的开销,提高层间引用的效率。原则3中的关键字 仅包含数据标识域,包括描述引用外部关系的外关键字也 使用数据标识域存储。数据标识域使用特殊数据类型(如 Integer,Long等对象类型),而不是与整型、长整型类似的简 单数据类型,这样的原则可以避免数据操作对数据语义的 依赖性。例如可以使用数据标识域是否为空来标识这个对 象是否已经存储在数据库中,而不是使用一个诸如小于O 的值标识数据的持久化特性(这种依赖于数据语义的处理 方法容易引起逻辑错误)。 外关键字的映射涉及到关系实体之间的联系,这种联 系依赖于对象持久化的关联表映射模式和依赖映射模 式。 l 外关键字是关系模型中引入的概念,在对象模型中 不再需要这样的属性,但是外关键字描述的联系是实体联 系模型到对象模型映射的必要部分。按照关联关系的划 分,有关实体间联系的映射应该遵循不同的原则。 原则4:一对一的实体联系映射为对象聚合或者继承 关系。 与一对一的联系相对应的是对象继承关系。在类表映 射和具体表映射模式 中,具有继承关系的类分解成了若 干张表,按照原则1已经可以将每个表映射成类,但是这些 类之间的关系可以使用继承和聚合两种表示法。 继承关系的类描述与对象建模的方法比较吻合,但是 由于对对象持久化的管理最终表现为数据库的管 操作, 使用继承管理的映射方法既增加了多表连接的操作,也增 加了更新过程中不必要的关联表更新。而使用聚合关系的 映射方法可以较好地解决这个问题,在懒加载 II 模式 下可以带来可观的性能提升,但是同时也引起了其他的问 题。其中一个比较严重的问题是稍稍违反了对象模型的内 户操作的随机性和关联操作的盲目性,势必会浪费数据库 服务器和网络资源,因此使用懒加载模式可以提高系统的 性能和吞吐率。 原则6:一对多的实体联系映射为1:n的对象聚合关系。 原则7:多对一的实体联系映射为1:1的对象聚合关系。 一对多的实体联系是关系模型中最常见的联 形式,也 是面向对象系统中常见的对象关联关系。原 和原则7 分别对应于一对多关系的左端和右端两个实体的映射行为, 而原则7也存在使用继承关系映射的选择,但是它更符合 ‘:包含关系总是意味着使用关系” 的面向对象设计原则。 在原则7的使用中有一个特殊的映射模式,即嵌入值 模式 的运用: 原则8:实体与分类码之间存在的多对一映射,除了应 用1:1的对象聚合关系映射外,使用“嵌入值模式”进行 1:n的对象聚合关系映射。 这个原则的使用主要考虑到在业务逻辑中经常为用户 提供分类码选择的信息更新服务,将分类码集合嵌入到实 体对象中可以减少数据库的交互次数,提高代码的清晰度。 3.教学信息的实体联系和对象关系 教学管理信息用以描述教学活动主体之间的关系,其 主要实体包括学生、教师、课程等,依照它们之间的联系建 立的模型如图1。 图1中学生和教师分别与用户形成了一对一的联系, 学生和教师又分别与课程通过教学实施活动形成了多对多 的联系。 图1教学信息数据ER图 我们应用映射原则产生了图2所示的类图。 在图2中,按照原则1分别形成了各自不同的类,类中 的属性应用原则2和原则3进行定义。依照原则6和7可 以声明Mark、Student和Teaching的类和属性。 155 维普资讯 http://www.cqvip.com
学生和教师的信息经常需要显示他们的姓名,而“姓 名”是人员的属性。因此依照原则5,Student、Teacher和 Person使用继承关系映射;同样在“教学实施”中也经常使 用“课程名称”属性,所以Teaching与Course使用继承关系 映射;相反,“教学实施”中教师信息的管理通常使用专门 的业务步骤,因此依照原则5定义Teaching和Teacher的聚 合关系。 教师和职称的关系按照原则7首先产生1:1的聚合关 联,其次为了支持教师信息的更新,需要依照规则8,使用 “嵌入值”模式形成1:n的聚合关系映射。 [1]Ramez Elmasri,Shamkant B.Navathe.数据库系统基础 [M].北京:人民邮电出版社.2002, [2]SeottW.Ambler.Mapping objects to relational databases [EV/OL].http://www一900.ibm.com/developer. Works/cn/components/mapping —eng.shtml tO/Rdb/index— [3]Joseph W.Yoder,Ralph E.Johnsond.把业务对象连接 到关系数据库[J].非程序员,2003,(5). [4]Wolfgang Kenen Mapping Objects to Tables:A Pattern Language[z].Proceedings of the 1997 European Pattern Languages of Programming Conference1997. ,[6]Wolfgang Keller.Jens Cddewey.Relational Database Ac. ces¥Layers:A Patten Lranguage[z].Collected Papers from the PLoP’96 and EuroPLOP’96 Conferences,1997. [7]Wolfgang Keler,Jens Coldewey.Accessing Relational Da. tabases:A Pattern Language[A].Robert Martin.Dirk Riehle,Frank Buschmann.Pattern Languages of Program Design 3[C].Boston:Addison—Wesley,1998. [8]Kyle Brown&Bruce Whitenack.Crossing Chasms:A Pattern Language for Object—RDBMS Integration[c], 图2教学信息对象静态结构图 4.结语 Boston:Addison—Wesley,1996. [9][14][17][21]Robert C.Martin.Designing Object—O- riented Applications Using the Booch Method[M],LOn- don:Prentice—Hall,1996. 数据驱动应用产生了根据关系型数据模型构造系统的 需求,而数据驱动应用毕竟少见。但是在所有应用中或多 或少均存在大量的数据驱动管理需求,这些应用中基础信 息(用户信息、权限、基础分类码)的维护通常表现出数据 驱动的要求。 [10][15][16][18][19]Martin Fowler.Patterns of Enter. prise Application Architecture[M].Boston:Addison— Wesley,2003. [11]Dirk Riehle,Wolf Siberski,I)irk Baeumer,DanielMegert, &Heinz Zuellighoven,Serlliazer.Pattern Languages ofPro- 我们将本文巾实体联系模型到面向对象模型的持久化 映射模式用于持久层普通对象的建模,特别是可以快速完 成J2EE应用中POJO的定义工作。在此基础上使用 XDoclet标记说明映射特性,通过其他的框架(如Hibernate、 Spring work、Struts、DisplayTag、DWR等开源框架)的集成, 可以自动生成数据驱动应用所需的所有代码,加速了此类 gramDesiu g3[c].Boston:Addison—Wesley,1998. [12]Clifton Noek.Data Access Pattern[M].北京:中国电 力出版社,2004. [13]Fred A.Cummins.Enterprise Integration[M].北京:机 械工业出版社,2003. [23]Arthur J.Rie1.Object—Oriented Design Heuristics[M]. Boston:Addison—Wesley,1996. 应用的开发,使得设计者摆脱繁琐、重复的基础信息管理工 作,更集中地关注业务领域的业务逻辑。 参考文献: [25]Wolfgang Keller.Object/Relational Access Layers—A Roadmap,Missing Liksn and More Patterns[z].EPLOP, 199R A Data Persistence Mapping from Entity——Relation Model to Oriented一0bieet model XU Chang—mei (Department of Computer Science nd aTechnology,Chm。gsha Univesirty,Changsha 410003) Abstract:In the proressg of ersearch on multi—ties distirbuted application,the method of object persistence becomes moe rnd more mature.Recentaly.it tends to construct distibuted applrication based on frameworks of persistence.This paper introduces the may ̄ping pattensr from entity—relation model to pesirstence object pattern,and naalyses the method of modeilng teaching ifnor- mation using this pattern.The esurlt can help object modeling in ifnormation system. Key Words:Object—Relation Mapping;Data Persistence [责任编辑:胡重光] 156