传送门

UML设计系列(1):状态机图

UML设计系列(2):类图

UML设计系列(3):时序图

UML设计系列(4):用例图

UML设计系列(5):系统依赖图

UML设计系列(6):活动图

UML设计系列(7):UML设计阶段性总结

上面讨论过常用的几种UML图,包括状态机,类图,时序图,用例图,系统依赖图,活动图

而在第7节里面提到了ER图,类似下面这种

也就是这次要讨论的主题

什么是ER图

百科的定义是

E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

这句话其实也不是很好理解,它为一种抽象的概念模型出现,但是一般在数据库设计领域用的比较多。所以在这里,把它作为描述数据库表及对应关系的模型

有什么作用

直接上代码

不知道有没有过这种经历(我肯定是有感而发,不是无的放矢,不知道这个成语用的对不对!),开发过程中,没有设计,就是业务方或者领导几句话,要搞一个XX功能,然后开发就开始写代码了。

然后就是边写边想边讨论,好不容易写好了,业务方说不对,又重新回来改。像下面这样

最后的结果是,开发疲于奔命,业务方也不满意,勉勉强强交互,甚至还会开发团队跟产品撕。

当然,后来去了大公司,流程肯定是非常规范了,各种里程碑规划,系统设计,编码规范都是有相应要求的,这种情况就有所好转。

在此过程中,接触到了ER图这个概念,当时是用做数据库设计的。

加点数据库设计

一般的系统中,几乎都会涉及到数据库,而且主要是关系型数据库,比如Oracle,Mysql,Db2等。

那在前面的过程中,在编码之前,加一点料,比如系统/模块的数据库表设计:

  • 涉及到的表有哪些
  • 表的字段,约束,类型有哪些
  • 表之间的关系

做这个的目的,在UML设计系列(7):UML设计阶段性总结

谈到了,可以以此为设计评审的材料,也可以做为后续系统的资料库

数据库关系

假设有个选课系统,学生可以选择多门课,一门课肯定有多个学生,那这种一般的设计:

有一个学生表student,一个课程表course。这里只考虑基本字段,用ER图表示出来:

  • 上面可以看到表名称:student,course
  • 列出了每个表对应的字段:比如学生表,name,age,sex,grade,remark等
  • 列出了每个字段的类型:name-varchar(255),age(integer),sex(tinyint)等
  • 标注了表的约束:比如学生表,id为主键,name为UK等

有了这个ER图,那么数据库表就一目了然了,不管是自己编码设计还是跟别人讨论都有了对象,不会光凭一张嘴,而且凸显专业!

多对多

上面的ER图,并不完整,这2个表之间还有关系,就是学生与课程的关系是多对多,理论上有个学生选课表,标注一下

当然在一些概要设计阶段,不关心细节的时候,也可以没有中间表,用连线表示

1对1

对于学生,如果要开通一卡通,肯定是一人一卡,好比骑电瓶车的一盔一戴!

1对多

学生与学校之间就是1对多,1个学校多个学生,但是学生只能在一个学校,这里就不重复举例了

由于这里主要不是讨论数据库表关联关系及设计问题,而是通过这个展现ER图,所以就不过多展开了

ER图工具

千言万语之后,当真的去实践的时候,还是会发现不是很趁手,甚至会发现加了ER图这个玩意,不适应甚至由此带来抵触与反感,所以好的工具很重要

当然,每个工具都是有学习成本的,这点无可避免。

个人觉得,VISIO,与VP(visual_paradigm)是比较好的工具,不过都需要付费,破解版本的只能自行想办法搞了。还有在线的processon也是不错的工具。

VP的使用

如果使用了VP,打开软件,可以创建一个project

然后再打开Diagram,点击New,在弹出的面板中,选择ER视图(可以通过er关键字搜索)

创建视图之后,左边菜单可以清晰的显示功能菜单了,摸索摸索熟悉就ok了

这里后续分享一个网盘的VP下载