UML类图与ER数据库图的区别

3
我有点困惑,我正在开发一个程序,这个程序由服务器和客户端两部分组成。在服务器中存储了群组、位置、消息等内容,客户端需要与之连接。我已经设计了用例图、活动图,并且也设计了类图。
问题在于,我想将服务器实现在mysql表中,以存储用户、群组、位置等信息,还要存储用户在群组中的关系。因此,我设计了一个包含6个表的E-R图。但是问题在于,我觉得我的类图和ER图看起来太相似了,我的意思是,我认为我做得不对,因为我几乎为每个表都创建了一个类。当我需要提取系统中的所有用户时,我是否需要首先将所有行转换为对象,并为每个修改后的对象编写到数据库中?
对我来说,最简单的选择是仅基于数据库构建整个应用程序,并创建一个类来提取和插入数据。但是,我必须遵循UML规范,我有点困惑该如何处理类图,因为我读过的书籍都说我必须为程序中的每个“实体”创建一个类。
抱歉我的英语不好。
谢谢。

我设计了一个包含6个表的E-R图。ER图不包含“表”,而是“实体”。除了ER图之外,您似乎还定义了一个显示数据库模式(表、键)的图表。 - Jordi Cabot
1个回答

2
我之前已经解决过这个问题,我的解决方案如下:
1.从Vector继承(根据你所使用的语言),选择以下结构(它存储了所有具有标准类的行):
ID(对于标识你的选择非常有用)
Select的所有元素是一个在Vector类中的子项,其中包含了所有的行。
rowNumber: int
columnNumber: int usedFilter: String usedGroupBy: String usedHavingClause: String usedOrderBy: String
tableName: String
getID()
getRowNumber(): int
getColumnNumber(): int
getUsedFilter(): String
getUsedGroupBy(): String
getUsedHavingClause(): String
getUsedOrderBy(): String
getTableName(): String
Select(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:String):boolean
delete(tableName: String, filter: String):int(删除了多少行,-1表示发生异常,或者只是简单地将异常抛到更高的层次)
//创建/删除表/视图/数据库/约束也可以实现,我只是太懒了,因为我相信你已经理解了这个想法。
DataAccessLayer()
在前两个步骤发生之后,你可以使用这两个类处理任何数据库查询(实际上Select的功能也可以放入DataAccessLayer中,使这两个类成为一个类,但这样更加优雅),但是,你可能需要为一些表处理一些额外的东西。解决方案很简单,当你发现用这些方法难以处理某个表时,你只需从DataAccessLayer继承并重新定义你想要重新定义的内容,所以在DataAccessLayer中,你应该只使用protected和public修饰符,并忘记private修饰符。因此,它们之间的关系如下:
Select 1 < - > n DataAccessLayer ClassInheritedFromDataAccessLayer extends DataAccessLayer

前端使用从数据访问层继承的类1,...,从数据访问层继承的类n,数据访问层。

这样你的项目将会: - 可管理 - 有序 - 易于计划 - 易于实现 - 易于修改 - 容易被其他人理解

希望这能帮到你,

祝好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接