UML类图与ER数据库图

时间:2010-06-01 22:33:13

标签: database uml class-diagram entity-relationship

我有点困惑,我正在开发一个程序,该程序包含两部分,服务器和客户端,有组,地点,消息......存储在服务器中,客户端必须与它连接。我设计了用例图,活动图,我也设计了类图。

问题是我想在mysql表中实现服务器,用于存储用户,组,地点......组中的用户......所以我设计了一个包含6个表的ER图,但问题是我认为我的类图和我的ER图看起来太相似了,我的意思是,我认为我做得不对,因为我实际上每个表都有一个类,当我必须提取系统上的所有用户时,我是否必须首先将所有行转换为对象,并在数据库中为每个修改过的对象写入?

对我来说,最简单的选择是将我的整个应用程序仅基于数据库,并创建一个类来提取和插入数据,但我必须遵循UML规范,我有点困惑该做什么使用类图,因为我读过的书说我必须为我的程序的每个“实体”创建一个类。

抱歉我的英语不好。

谢谢。

1 个答案:

答案 0 :(得分:2)

我之前已经解决过这个问题几次,我已经用这种方式解决了这个问题:

1。)选择(从Vector继承,它根据您使用的语言存储标准类的所有行)结构:

ID(以及用于识别您的选择的ID) (Select的所有元素,也就是Vector类的子元素都是行)

rowNumber:int

columnNumber:int

usedFilter:String

usedGroupBy:String

usedHavingCaluse:String

usedOrderBy:String

tableName:String

的getID()

getRowNumber():int

getColumnNumber():int

getUsedFilter():String

getUsedGroupBy():String

getUsedHavingClause():String

getUsedOrderBy():String

getTableName():String

选择(tableName:String,filter:String,groupBy:String,havingCaluse:String,orderBy:String,columns:Vector)

2。)我有一个与数据库直接通信的类,我们称之为DataAccessLayer。让我们看看这个类的结构:

DataAccessLayer

connect(...):boolean

disconnect(...):boolean

use(databaseName:String):boolean

selectedData:Vector(实际上这是一组Select的)

createSelect(tableName:String,filter:String,groupBy:String,havingCaluse:String,orderBy:String,columns:Vector):boolean(以确定它是否成功)

deleteSelect(ID):boolean

insert(tableName:String,columns:Vector,values:Vector):boolean

update(tableName:String,columnsToSet:Vector,values:Vector,filter: 字符串):布尔值

delete(tableName:String,filter:String):int(删除了多少行,如果是,则为-1) 发生异常,或者只是简单地将异常抛到更高级别)

//创建/删除表/视图/数据库/约束也可以实现,我只是懒得去做,因为我确定你已经理解了这个想法

DataAccessLayer()

在前两个步骤发生之后,你可以处理任何带有两个类的数据库查询(事实上,Select的功能也可以放入DataAccessLayer,制作两个类中的一个,但这样更优雅),但是,你可能想为几张桌子处理一些额外的东西。解决方案很简单,只要您发现难以使用这些表,您只需继承DataAccessLayer并重新定义要重新定义的内容,因此在DataAccessLayer中,您应该只使用protected和public修饰符并忘记private修饰符。所以,关系将是:

选择1< - > n DataAccessLayer

ClassInheritedFromDataAccessLayer扩展了DataAccessLayer

前端使用ClassInheritedFromDataAccessLayer1,...,ClassInheritedFromDataAccessLayern,DataAccessLayer。

这样你的项目将是: - 可管理的 - 订购 - 易于计划 - 易于实施 - 易于修改 - 其他人容易理解

我希望这有帮助,

问候。