传送门
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下载