【问题标题】:UML class diagram vs ER database diagramUML 类图 vs ER 数据库图
【发布时间】:2010-06-01 22:33:13
【问题描述】:

我有点迷茫,我正在开发一个程序,程序由服务器和客户端两部分组成,有组、地点、消息......存储在服务器中,客户端必须与它联系。我设计了用例图、活动图,还设计了类图。

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

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

对不起,我的英语不好。

谢谢。

【问题讨论】:

  • “我设计了一个包含 6 个表的 E-R 图”-> ER 图不包含“表”而是“实体”。不仅仅是 ER 图,您似乎还定义了一个显示数据库架构(表、键)的图

标签: database uml class-diagram entity-relationship


【解决方案1】:

这个问题我之前解决过几次,都是这样解决的:

1.) 选择(继承自 Vector,它使用标准类存储所有行,具体取决于您使用的语言)结构:

ID(以及有助于识别您的选择的 ID) (作为 Vector 类的子类的 Select 的所有元素都是行)

行号:整数

列号:整数

usedFilter: 字符串

usedGroupBy: 字符串

usedHavingCaluse: 字符串

usedOrderBy: 字符串

表名:字符串

getID()

getRowNumber(): int

getColumnNumber(): int

getUsedFilter(): 字符串

getUsedGroupBy(): 字符串

getUsedHavingClause(): 字符串

getUsedOrderBy(): 字符串

getTableName(): 字符串

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

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

数据访问层

connect(...): 布尔值

断开连接(...):布尔值

使用(数据库名称:字符串):布尔值

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

createSelect(tableName: String, filter: String, groupBy: String, havingCaluse: String, orderBy: String, columns: Vector): boolean(判断是否成功)

deleteSelect(ID): 布尔值

插入(表名:字符串,列:向量,值:向量):布尔值

更新(tableName:字符串,columnsToSet:向量,值:向量,过滤器: 字符串):布尔值

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

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

DataAccessLayer()

前两步完成后,你可以用两个类来处理任何数据库查询(其实Select的功能也可以放到DataAccessLayer中,做一个类,但是这样更优雅),但是,您可能想为几张桌子处理一些额外的事情。解决方案很简单,每当你发现一个表难以与这些一起使用时,你只需要从 DataAccessLayer 继承并重新定义你想要重新定义的内容,因此在 DataAccessLayer 中你应该只使用 protected 和 public 修饰符而忘记 private 修饰符。因此,关系将是:

选择 1 n DataAccessLayer

ClassInheritedFromDataAccessLayer 扩展 DataAccessLayer

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

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

希望对你有帮助,

问候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2011-11-25
    • 2011-05-03
    • 2011-12-11
    相关资源
    最近更新 更多