《从类模型到数据模型_王修智.pdf》由会员分享,可在线阅读,更多相关《从类模型到数据模型_王修智.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2011.07从类模型到数据模型跟高手学编程王修智范晓平在一个应用系统中,需要持久保存的数据应该采用数据库来存储和管理。在为系统建立数据库之前,首先要对数据库进行总体设计,设计过程产生的结果就是数据模型。数据模型主要包含数据表以及数据表之间的关系。用面向对象方法建立数据模型,依据是类模型。从类模型建立数据模型,主要工作是:依次将类映射到数据表、将类属性映射到数据表的列、将类之间的关联映射到关系数据库,最后将得到的数据表、表之间的关系画在一张图上,数据模型便大功告成。1设计方法数据模型从层次上可以分为3类:概念数据模型、逻辑数据模型和物理数据模型。概念数据模型是面向用户、面向现实世界的数据模型,
2、与数据库管理系统(DBMS)无关;逻辑数据模型反映了DBMS的存储结构,是用户从数据库看到的数据模型;物理数据模型是特定的DBMS,它定义实际中的数据如何存储在持久存储设备(例如磁盘)上。项目实例要设计的数据模型是逻辑数据模型。本讲座后面提到的数据模型,除特别说明外,均指逻辑数据模型。用传统方法设计数据模型,依据是ER图。用面向对象方法设计数据模型,除依据UML类图外,其他与用传统方法设计数据模型差别不大。11UML中的实体与E-R图中的实体目前,传统的数据库设计是采用实体-关系E-R(Entuty-Relationship)图。E-R图中的实体表示系统中持久的元素。UML中的实体除表示系统中
3、持久的元素外,还具有行为特性操作。因此,可以认为,UML中的实体是E-R图中的实体所提供的内容的超集。12UML类图与E-R图由上述1可知,UML类模型的描述功能更强,它在本质上是扩展的实体-关系(E-R)模型。13建模依据由上述1.2可知,将UML类图转换为数据模型是很方便的,可以用类图为数据库中持久存在的数据结构建立模型。14选择数据库系统持久性数据库层可以是关系型的数据库,也可以是对象关系型的数据库或者对象数据库。从关系型数据库技术到对象数据库技术是一个演化过程,对象关系数据库技术是这个演化过程的中间阶段。尽管未来将属于对象数据库,但关系型数据库在目前的数据库软件市场中仍占主流。因此,仍
4、为项目实例选择关系型数据库作为持久性数据库层的数据库管理系统。对 于 关 系 数 据 库 来 说,可 以 用 类 图 描 述 数 据 库 模 式(Database Schema),用类描述数据表,用类的操作描述触发器和存储过程。将UML类图用于数据库建模可以看作是类图具体应用的一个例子。2关系数据库术语前面选择关系型数据库为项目实例建立数据模型。在建模过程中要涉及关系数据库的几个术语,本节对这几个术语进行介绍。21主键和外键主键和外键涉及关系表。关系表是由它的固定列集定义的,列具有系统内建的或用户定义的数据类型。表可以有任意多行,但没有重复的行。特定行的值可以是NULL,NULL意味着“值目前
5、不知道”或“值不明确”,NULL值不等同于零或空格。由于关系数据模型要求“没有重复的行”,所以每个表都有一个主键(Primary Key)。键是列值可以用来唯一地标识表中一行的列的最小集合(也可能只有一列)。一个表可以有多个这样的键,可以任意选择其中一个作为用户最重要的主键,其他的键则称为备用键(Alternate Keys)。22参照完整性在关系数据库中,表之间的关系不是固定的行到行的连接,而是当用户请求系统发现关系时,才去发现行到行的连摘 要:分析类模型创建数据模型的可行性,讲解类之间多重性向关系数据库的转换规则以及创建创新基金管理信息系统数据模型的过程和方法,并给出系统的数据模型。关键词
6、:UML;类模型;E-R模型;数据模型;关系数据库;主键;参照完整性;范式5实用第一智慧密集2011.07接。这种发现是通过比较一个表的主键值与另一个表的外键值来实现的。外键(Foreign Key)被定义为表中列的集合,其值或者为NULL,或者匹配同一个表或另一个表中的主键值。主、外键的一致性被称作参照完整性。参照完整性中的主键和外键必须是同一种数据类型,但可以有不同的名字。23范式在关系数据库中,表与表之间的关系要满足一定的条件,不同的范式(Normal Forms)指的是满足不同级别条件的关系。范式被分为6种:(1)第一范式(2)第二范式(3)第三范式(4)BC范式(Boyce-Codd
7、范式)(5)第四范式(6)第五范式第一范式是满足最基本条件的关系,而这个最基本条件是指表的每个列都是不可再分的数据项。对于第一范式,如果它又继续满足一定的条件,就称它属于第二范式。以此类推,可以得到其他规范程度更高的形式。高一级的范式是低一级的范式的子集,低一级的范式则包含了高一级的范式。3类之间多重性向关系数据库转换的规则数据模型是通过将关联映射到关系数据库来建立的。在将关联映射到关系数据库之前,首先介绍一下由关联的多重性向关系数据库转换的一些规则。类之间的多重性可以分为:一对一、一对多和多对多3种情况。对3种多重性的处理已经有一些一般的转换规则,如表1所示。4设计数据模型如前所述,数据模型
8、是通过将关联映射到关系数据库来建立的。现在按照前几节介绍的方法或原则,再依据第二讲设计的结果,为系统设计数据模型。41将类映射为关系数据表将类映射为关系数据表,必须遵循表的第一范式,列必须是不可再分的数据项。从类到表的映射可以是一对一,即一个类映射为一个表。但是,一对一映射可能会导致一些问题,如表太多、连接太多、表丢失以及对泛化关系处理不合理等,在设计中要灵活调整。第二讲1节2小节为本项目实例已经定义了3个类。这里将3个类分别映射为一个关系数据表。表的名称以T_打头,其后紧跟相应的类的名称,如表2所示。42将类的属性映射为表的列第二讲4节已经为3个类分别定义了属性,现在将类的属性映射为表的列。
9、421项目信息表T_Project项目信息表T_Project用于保存项目的信息。T_Project除了包含由Project类属性映射的列:项目大类、项目小类、项目经费、已报销金额、报销部门和报销人,还要插入一个主键项目号。此外,公司财务室还要求每个项目应有一个备注,用于保存项目的文字描述信息。这样,表T_Project包含的列如表3所示。42.2票据信息表T_Invoice票据信息表T_Invoice用于保存票据的信息。在表T_Invoice中,由Invoice类属性映射的列有:供应商、报销内容、报销金额、报销时间、报销人、付款方式、是类之间多重性 向关系数据库转换一对一为每个类创建一个表,
10、例如表A、表B每个表(表A、表B)的主键码也是相关表中的外键码如果关系是确定的一对可选的一,可以用关系数据库中的两个单独的表来实现。但是,如果两个实体之间的联系或者多重性是真正的一对一,则最好的解决方案是只用一个表来实现一对多为每个类创建一个表,例如表A、表B一对多中的“一”方(表A)的主键码是“多”方(表B)中的外键码多对多为每个类创建一个表,例如表A、表B创建另外一个交叉表,例如表C每个表(表A、表B)的主键码都是交叉表(表C)中的外键码交叉表中的主键码可以是单独的特殊的一列,也可以是来自另外两个表(表A、表B)的外键码的组合,或者是来自另外两个表(表A、表B)的外键码以及其他有意义的标识
11、符(角色、类型)的组合表1类之间多重性向关系数据库的转换类表ProjectT_ProjectInvoiceT_InvoiceUserT_User表2类到表的映射列说明f0项目号(主键、标识符列)f1项目大类f11项目小类f9备注f5报销人f4报销部门f3已报销金额f2项目经费表3表T_Project的列62011.07图1系统数据模型否附合同、是否附通知、凭证号和票据张数。其中“报销内容”公司财务室要求有大类、小类之分,因此将列“报销内容”拆分为“报销内容大类”和“报销内容小类”两列。为了区分票据的不同状态,还要增加一列“状态”。其次,插入一个主键票据号。最后,考虑到表T_Project与T_
12、Invoice的关系,再插入一个外键“项目号”以与表T_Project中的主键“项目号”匹配。这样,表T_Invoice包含的列如表4所示。4.2.3用户信息表T_User用户信息表T_User用于保存用户的注册信息。表T_User包含由User类属性映射的列:账户、姓名、权限、部门和密码。其中账户对每一用户都是唯一的,可以作为主键。这样,表T_User包含的列如表5所示。4.3将关联映射到关系数据库从第二讲2、3节知道,3个类中包含两种类与类之间的关系。这两种关系都是关联关系。下面分别分析这两种关系向关系数据库的转换。(1)Project与Invoice之间关系的转换Project类与Inv
13、oice类之间存在着一到0或多的双向关联。在表T_Project和T_Invoice中,可以通过表T_Invoice中外键“f7”(项目号)匹配表T_Project中的主键“f0”(项目号)来模拟类Project与Invoice之间的关系。(2)Project与User之间关系的转换Project类与User类之间存在着0或多到一或多的双向关联。从表1看到,对于类之间多对多关系向关系数据库转换,是通过创建另外一个交叉表来解决的。这里采取一种变通的办法来处理:不增加交叉表,而在表T_Project中的列“f5”(报销人)中保存多个报销人的账户,每个账户用空格 隔开。这样处理后,虽然为编码增加了一
14、点负担,但是减少了存储空间。4数据模型归纳以上设计结果,可以得到系统的数据模型如图1所示。5结语在传统方法中创建数据模型的依据是实体-关系(E-R)模型。在面向对象方法中,创建数据模型的依据是类模型。类模型在本质上是扩展的实体-关系(E-R)模型。列说明f0票据号(主键、标识符列)f1供应商f21报销内容大类f22报销内容小类f3报销金额f4报销时间f5付款方式f6凭证号f7项目号(外键)f8是否附合同f9状态f10票据张数f11报销人f12是否附通知表4表T_Invoice的列列说明f1账户(主键)f2姓名f3权限f4部门F5密码表5表T_User的列(下转第18页)7实用第一智慧密集201
15、1.07将类模型映射到数据模型时,要处理两种映射:由类映射到表(包括由类属性映射到表的列),将关联映射到关系数据库。为项目实例建立的数据模型表很简单,只包含3个数据表。回顾前面的工作,会有两点缺憾:(1)在处理类Project与User之间多对多关系的转换时,没有创建另外一个交叉表,而是采取了一种变通的办法来处理,即:在表T_Project中的列“f5”(报销人)中保存多个报销人的账户,每个账户用空格“”隔开。这样的处理虽然减少了存储空间,但是违背了第一范式:表的每个列都是不可再分的数据项。(2)公司的部门被作为用户表T_User的一个列将导致公司的部门如果有变动,系统维护会涉及修改程序代码。
16、合理的做法是:在建立类模型时,将部门识别为一个类,进而在本讲将这个类映射为一个数据表,这样,公司的部门如果有变动,系统维护只涉及修改数据。参考文献1范晓平.ASP.NET 2.0项目开发第一步UML+VB+C#+Crystal Reports.清华大学出版社,2008.2冀振燕.UML系统分析设计与应用案例.人民邮电出版社,2003.(收稿日期:2010-12-30)4结语在虚拟仿真应用领域,基于Vega Prime的应用已经很广泛了。然而,大部分应用仅起到了简单的三维演示的作用,作为高性能视景仿真软件,Vega Prime提供了一系列可以进行网络通信的模块,完全可以实现更复杂的网络交互功能,
17、不但可以拓宽基于Vega Prime开发的仿真系统的应用范围,还可以丰富其应用模式,进一步可使用由此开发的仿真系统,对各种理论算法进行验证,或者对一些技能进行训练,提高训练者的经验值。为此,基于Vega Prime2.0仿真平台,提出了一种单兵网络对抗系统的实现算法,并给出了一个红蓝对抗系统原型,为下一步扩展Vega Prime在视景仿真系统中的应用范围提供了一个好的实例。参考文献1郑淳,尚涛.Vega Prime环境下的古建筑虚拟现实系统J.武汉大学学报(工学版),2006,39(2):83-87.2刘航,王春水,王积忠.基于Creator/Vega的虚拟场景设计与实现J.计算机仿真,200
18、7,24(9):228-231.3黄伟,戴余良,王长湖,王春来.Creator/Vega Prime在船舶动力装置视景仿真系统中的应用J.系统仿真技术,2008,4(4):277-281.4褚彦军,唐硕.基于Vega Prime的通用视景仿真系统研究J.计算机工程与设计,2009,30(17):4104-4107.5张德锋,王华兵,薛原,聂孝亮.基于Vega Prime的视景仿真技术研究与应用J.计算机仿真,2006,23(7):191-195.6黄健熙,毛锋 等.基于VegaPrime的大型流域三维管理系统实现J.系统仿真学报,2006,18(10):2819-2823.7邵欣欣,王燕,张文
19、杰,赵传华.一个基于Vega的虚拟场景漫游系统J.计算机仿真,2006,23(1):191-194.8高岩,杨华民,狄超,周志成.基于CTS和Vega Prime的视景仿真研究及应用J.计算机仿真,2007,24(9):176-179.9孙科峰,李洁.基于Vega Prime的多场景仿真系统框架J.计算机仿真,2007,24(12):193-195.10张静,毛虎.地下洞室视景仿真系统关键技术研究与实现J.计算机工程,2008,34(3):250-252.11郑向平,顾文彬,唐勇.基于Creator和Vega的某防护系统可视化仿真研究J.系统仿真学报,2008,20(15):4082-4084.12王乘,李利军,周均清.Vega实时三维视景仿真技术M.武汉:华中科技大学出版社,2005,12.13 Mu ltiGen-Paradigm.Inc Vega Prime OptionsGuide(Ver-sion2.0),2005.14 MultiGen-Paradigm.Inc Vega Prime DeskTop(Version2.0),2005.15 MultiGen-Paradigm.IncVegaPrimeProgramers Guide(Ver-sion2.0),2005.(收稿日期:2011-01-13)!(上接第7页)18
限制150内