EZDML 数据建模

超轻量级的免费数据建模工具

0%

EZDML逆向工程导入数据库分析实操教程

从已有数据库导入数据表模型进行分析,又称逆向工程,可以说是大家最常用到的功能之一了。导入数据库是所有的建模工具都具备的标准功能,其实没什么好说的,没必要专门写一篇;不过EZDML在导入后进行各种补充、分析这方面有值得一提的地方。最近研究了一下章鱼师兄的MES(生产制造管理系统),本文就以此项目为例,从零开始用EZDML导入数据库,并进行相应的分析处理。

初始化

既然说是从零开始,我们就把初始化也说一下。老手可以忽略此节。

先从拉代码开始。章鱼师兄MES是一个开源项目,源码地址为:

1
https://gitee.com/wangziyangyang/MES-Springboot

直接git克隆到本地:

mes下为java工程,我们用idea打开导入设置,并编译通过。不过这时是跑不起来的,因为数据库还没准备好:

scripts下为MYSQL数据库的初始化脚本:

我在本机MYSQL数据库创建了一个mes用户,并执行初始化脚本,创建表和导入初始数据(嗯,没搞明白idea这SQL工具怎么执行,我其实是用EZDML的SQL工具执行的):

然后把JAVA工程的数据库连接配置修改一下,让它连我本机的数据库:

然后编译运行,看到“Tomcat started on port(s): 9090”应该就是启动成功了:

打开浏览器看看:

熟悉LayUI界面,看上去还是挺亲切的:

初始化完成,接下来我们开始导入。

导入数据库

打开EZDML(我用的是win64版),连接数据库:

连接成功列出所有表:

我们全部导入:

补全表字段逻辑名

我们观察到,导进来的大部分表和字段都已经有中文逻辑名了,只有sp_order和sp_sys_department这两个表和部分字段没有逻辑名。我们来给它们补充一下。

sp_order下面有工单编号、工单描述、计划时间之类的字段,猜测应该就是工单了。在系统里翻了下,有个工单计划下达的模块:

嗯,应该就是它了,我们给它取名为“工单计划”吧:

sp_sys_department表又是什么呢?英文不好猜不出来(英文好的请配合一下不要剧透),双击打开表属性,点右上解下拉菜单切换到“数据”一栏:

嗯,从数据我们能看出来了,是组织机构部门,取名为“组织部门”吧,并顺便把几个字段的逻辑名也改一下:

有同学可能会说我的数据库里怎么看不到部门数据?好吧,这些数据其实是我为了方便演示用EZDML临时生成的,原始项目中是没有的。

不过,演示嘛,不要纠结于不重要的细节,我们最终得到结果如下图:

重建外键关系

不知从什么时候开始,大佬们编程流行不建外键了。不过,对于我们做设计分析的同学来说,关系是非常重要的,因此在进一步分析前,我们需要重建外键关系连接。

我之前尝试过写脚本自动识别外键关联关系,不过效果不太好。所以我们还是手工操作吧,好在这个系统表字段都有注释,重建应该不难。

我们观察这几张表:

1
2
3
4
5
sp_sys_user(用户信息表)
sp_sys_menu(系统菜单表)
sp_sys_role(角色表)
sp_sys_role_menu(角色对应的菜单表)
sp_sys_user_role(用户对应的角色表)

看起来像是用户权限相关的吧,我们把它们复制一份,左边列表树右键创建一个新的“用户权限”的模型图,并粘贴:

显然,用户对应角色表的user_id和role_id分别与用户和角色相关,我们选中用户主表,再按住SHIFT键选中用户角色对应表的user_id字段,右键“连接”:

在弹出窗口中确认关联:

关联结果:

用户权限模型

接下来继续完善这个模型。把角色也关联一下,可以在选中主表(角色表)、从表字段(按住SHIFT键点选 用户对应的角色表.role_id)后,直接按Ctrl+W关联:

接着对菜单和角色关联表作同样的处理:

按F11隐藏列表树,然后我调了下位置,我觉得更好理解点:

其中用户、角色、菜单三个是实表,另两个是关系表,我们给三个实表赋上不同颜色(选择表,右键设置实体颜色):

回到所有表,可以看到这几张表的颜色、关系都有了:

不过,我突然发现,用户信息表里还有一个dept_id(部门ID),显然它对应的是刚才那个组织部门表,我把它给漏了。我们再次复制部门表到“用户权限”模型图,设置颜色并关联到用户表,最终结果如下:

生产制造模型

回到所有表,按F8显示缩略图,观察剩下的表对象:

除了主数据开头的表,剩下的应该都跟生产制造有点关系,我们将这些表选中,右键复制:

然后新建“生产制造”模型,并粘贴:

跟之前类似地,通过观察表结构和表数据,我们可以大概分析猜测表之间的各种关联关系:

具体过程不细述了,反正一顿操作之后,结果如下:

执行工具栏上的“重新排列”,关系最多的表会放到中间,没有关联的表会排到下边:

显然,基础物料表是比较重要的,我们给它们都标上颜色:

整体数据结构分析

从前面两节我们可以看出来,我们分析时需要按功能模块把相关的表对象分别组织在一起,形成多个模型图。但大部分情况下一个总的模型图仍然是有用的。

我们回到所有表,并执行重新排列:

重新排列结果如下:

把“所有表”拖到最后(我习惯所有表在最后面),按F8查看缩略图:

基本关系很清晰了。

生成WORD概要设计

这个功能我们可用于生成各种验收文档,也算是日常操作了,毕竟项目计划时间没有不紧急的,我们可能会经常有时是项目做完了要验收了才来弄文档的。当然了,如果你的项目都是文档齐全的,或者写文档的人比写程序还多的,并且水平还很高,就不会有这需求了。然而现实和理想总是有差距,有些文档可能没什么用,但验收时是必须要有的。就算给自己写文档,能让工具生成个大概也是省事很多。

执行菜单“模型|导出”,在弹出窗口中选择导出类型为WORD(注意EZDML是选了对象就只导选中的对象,无选择就导出全部):

导出结果:

基本上就是个概要设计了:

EZDML的导出功能基本上都是用脚本生成的,如有需要可自行修改。导出WORD的脚本模板为Templates目录下的export_doc_html_xxx.ps_(嗯,是的,其实是生成HTML再转成WORD)。

生成EXCEL数据字典

基本上跟导出WORD操作差不多,只是导出类型选EXCEL。导出结果如下:

导出EXCEL的脚本模板为Templates目录下的export_xls_xxx.ps_(嗯,也是生成HTML再转成EXCEL,所以打开时可能会有个警告)。

导出Markdown接口文档

导出时可选择Markdown file,导出Markdown格式的接口文档,结果包含了模型图:

数据字典:

增删改查接口:

导出Markdown的脚本模板为Templates目录下的export_markdown.js_。

生成规范数据格式

上面接口JSON数据是默认生成的,比较难看,比如系统菜单表的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"id": "7fed7caaa551658e",
"code": "code1",
"name": "菜单名称1",
"url": "菜单URL1",
"parent_id": "父菜单ID1",
"grade": "层级1",
"sort_num": 846,
"type": "类型1",
"permission": "授权1",
"icon": "菜单图标1",
"descr": "描述1",
"create_time": "2022-07-08 00:08:06",
"create_username": "创建人1",
"update_time": "2022-07-10 00:08:06",
"update_username": "最后更新人1"
}

很山寨吧?EZDML能生成“正式”一点的数据,我们双击“系统菜单表”,先看下它在数据库里的数据:

可以看到,它在数据库里是有正规数据的。点右上角“更多”菜单打开“界面”配置页:

对菜单名称,我们设置其生成类型,从数据库获取:

EZDML会执行数据库SQL获取(默认取500条,你可以自己修改SQL):

下一步:

直接“确定”完成,菜单名称就变得很“正式”了:

接着,我们对菜单URL、菜单图标也作类似处理:

然后,我们把code、父菜单ID、层级、类型都设置生成类型为整数:

结果如下:

通过观察数据库,我们发现层级最大不超过3,类型基本上不超过1,所以我们改一下层级、类型的数据生成规则,设置一下最大最小值:

对于授权字段,我们写文档时一般是设置是否可以访问以及读写增删改之类的,这个EZDML也提供了模板:

最后,创建人和更新人,我们设置为中文姓名:

经过这么一番设置后,我们再生成文档时,就好看很多了:

看上去就专业多了,不会给人批量“造假”的感觉了:

生成界面原型

这MES是LayUI的,正好EZDML也能生成LayUI原型界面,因此我们简单作个对比,就以系统菜单为例,这个是MES系统运行界面:

下面这个是EZDML生成的:

大家可自行对比一下。

生成可运行系统

EZDML还能直接生成可运行的Erupt系统代码:

明细表单:

嗯,对了,上面的测试数据也是用EZDML生成的:

这里就不细述了。

结束

最后,贴一下整理的模型全图作为总结:

缩略图:

从表结构分析我们也能看出来,这个MES的功能应该还有不少需要完善的地方。