EZDML 数据建模

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

0%

EZDML快速上手

EZDML是一款国产免费的轻量级数据建模工具,具有轻巧、快速、简便而功能强大的特点,可轻松地进行数据库表结构设计,建立界面数据模型,支持通过自定义脚本模板生成测试数据、界面原型和前后端代码文件。

更新记录(截图里新旧版本共存请谅解):
2009.11 表结构设计器EZDML1.5新版本发布,比以前改进了很多,因此重新写了个介绍。
2015.10 已经更新到2.06版本,决定再次整理重写此文档。
2019.10 已经2.32版了,再把文档改改吧。
2022.05 五一广州疫情出不去就再更新了一下,现在版本是3.36。

下载安装

这一点没什么可说的,就是下载并运行安装程序,按照向导一步步走完。

官方下载地址:http://www.ezdml.com/

也可以从gitee下载:https://gitee.com/huzgd/ezdml/releases

由于没有给微软充值,WIN10下可能提示风险,请点“更多信息”,然后选择“仍要运行”。

安装位置建议选择在非系统盘的根目录下,如D:\EZDML,避免文件被系统保护无法写入。

EZDML是用安装程序安装,但只有一个ezdml_x.exe时也可以直接当绿色版运行。

Linux版

Linux版较简单,基本上直接下载解压就可以跑了:

EZDML for linux64:

macOS版

苹果版也是下载,解压,装载,拖到应用程序里:

接下来就麻烦点,因为现在的macOS加了安全检测,会认为我这个工具是三无产品从而拦截了。

这时你需要点那个问号,然后打开通用安全设置:

回到提示窗口点取消,这时EZDML会在安全设置里出现,点“仍要打开”,再点打开:

这时启动EZDML就可以了:

启动

第一次启动程序,中文系统中会看到以下界面:

点“确定”打开示例:

英文系统会显示英文界面(可以在设置里修改语言):

本人母语是中文,所以后面说明都是以中文为主。

新建表

新建文件,再新建一个表,系统弹出新建界面:

关于EZDML的字段类型可参考这里

直接点“确定”,可以看到新建表的结果:

同一个文件中可以有多个模型,模型图中可以进行平移、缩小、放大、选择对象、拖动等操作。模型图中可以用键盘辅助操作,按加减号放大缩小,方向键平移,R复原,F居中。

左边树形列表中,可选择多个表或字段进行复制、粘贴;直接拖动可以进行排序;在左上方的“过滤条件”中输入内容可查找并列出符合条件的对象。

外键

再建一个表,在字段列表中右键添加全部系统字段:

效果如下:

接着,在模型图上先选中主表“数据表1”,再选中从表“数据表2”的“Rid”关联字段:

再点工具栏上的“连接”(或右键菜单“连接”,或按快捷键Ctrl+W),系统弹出连接界面:

设置从表的关联字段为“Rid”,然后点“确定”,即可建立外键关系:

修改表和字段属性

在模型图上双击“数据表1”,弹出该表的属性编辑界面,可以添加删除字段,或进行拖动排序等操作,可直接修改表名、逻辑名、注释和字段的物理名、逻辑名、类型、约束:

关于EZDML的字段类型可参考这里

也可以双击一个字段,弹出字段属性界面来修改字段:

至此,我们可保存一下文件以防数据丢失。

顺便说明一下,系统退出时也自动所有数据保存到临时文件目录下,启动时会自动读取并恢复。

视图切换

上述模型图中,默认显示的是物理逻辑名称视图,可执行“模型|切换物理/逻辑视图”菜单命令或点工具栏按钮切换视图:

物理视图:

逻辑视图:

默认显示表对象的字段类型是按标准SQL定义,表对象的背景色是浅蓝,可执行“模型|模型选项”进行修改:

之前物理视图的字段类型默认是标准SQL的类型(如字符串是VARCHAR),如果在模型图选项里修改为ORACLE,则自动显示为ORACLE的类型(字符串是VARCHAR2):

导出图片

在模型图上选中一个或多个对象(不选则为全部),右键“复制图像”,即可将选中的图形复制到剪贴板,可直接到画笔、WORD等地方粘贴(默认输出格式为位图,如果需要WMF矢量图可按住SHIFT键复制图像)。

导出EXCEL

在模型图上选中一个或多个对象(不选则为全部),右键“导出”,系统提示指定文件路径和类型:

选择EXCEL,指定文件路径和名称后,点“保存”,系统提示:

点“确定”,则自动打开Excel:

要注意一点是,导出EXCEL时,字段类型是跟模型图视图有关的,模型图上显示逻辑类型时导出EXCEL字段是逻辑类型(如String);模型图显示物理类型时,导出EXCEL的是物理类型(如varchar)。

现有版本支持导出markdown、word、excel、html等格式,都是用脚本生成,如有需要可自行修改相关脚本。

描述字编辑

描述字编辑功能是本软件的一大特色,即可以用直接用键盘输入快速完成建表。之所以有这个功能,是我觉得建一个表不需要用鼠标点那么多下中间还键盘输入那么麻烦,直接文本编辑是最快的。有了这个功能后方便多了,基本上我建表时也再不去用那个常规界面了。而且用这个来复制粘贴表结构也很方便。

示范如下:

点新建表,并切到“描述”页:

表的描述字中,可以输入简写字母代替数据类型,S,I,F,D,BO,E,BL,O分别代表文本,整数,浮点数,时间,真假,枚举,文件,对象。

关于EZDML的字段类型可参考这里

输入以下内容,删除或覆盖掉原有文字:

1
2
3
4
5
6
7
8
9
测试订购表
----------
ID 编号 PK
RID FK
名称 S(200) //订购的商品名称
数量 I
单价 F(10,2)
日期 D
注释

焦点离开输入框时,系统会自动识别并重新生成描述字:

点“确定”,效果如下:

双击打开属性,结果如下:

查看引用关系

关系图能方便地查看与当前表有关联引用关系的所有对象:

界面预览

新版本默认隐藏了表对象的界面预览页面,需要在右上角的”更多“中打开:

默认应该是电脑版的界面:

把配置面板打开,将名称设置成公司简称,注释设置为公司全称:

切换到平板界面看看:

手机版:

编辑界面:

单表生成代码

生成代码分两种:单表生成和批量生成。先说单表的。

在表的属性窗口中,切换到“生成”页,可生成多种代码,包括:

标准SQL

ORACLE

MYSQL

SQLSERVER

POSTGRESQL

前面几个数据库SQL是固定生成的,后面的代码是脚本生成(可以自行修改脚本):

C++

JAVA

Markdown

新版本支持生成markdown文档:

点右上角按钮可以预览:

默认包含增删改查接口说明:

Markdown是JS脚本生成的,可按需要复制出来修改(不要直接修改原有脚本,因为升级时会被覆盖):

百度Amis

基本上就是如何生成JSON了:

VueElementUI

可生成elementUI的vue代码:

也可以预览(并不是所有系统都行,需要浏览器允许跨域访问在线依赖库):

JPA实体类

这个比较简单:

Erupt实体类

这个同时也是给后面批量生成用的:

其它生成功能不一一细述了。

批量生成代码

批量生成理论上就是把多个表的代码一起生成了。不过实际上并不一样,批量生成时可以同时处理附加的依赖文件和子目录,比如生成html时可能需要引用js、css、images,生成java文件时可能需要生成相关的jsp、xml,等等。

还是以之前两个表的模型为例,点工具栏的生成代码:

默认有好几个模板,前面几个是文件夹模板,后面是文件模板:

文件模板比较简单就是对原来单表生成循环多次,这个不讲了。我们主要看文件夹的。

layuiAdmin

以layuiAdmin为例,这是一个后台管理模板(可惜已经不更新了)。这个模板的demo生成结果可在这里查看

点右边的~打开模板目录,会发现里有有几百个文件:

不过不用慌,仔细一看,绝大部分是layuiAdmin自带的,只有_dml_config.INI文件里列出的内容是脚本(参见脚本相关文档)。

回到EZDML,选定输出目录,执行生成:

生成完后,根据_dml_config.INI的配置,会自动运行目标目录下的ezhttp.cmd命令:

这个命令会启动一个小HTTP服务,并打开浏览器查看结果:

点击左边的菜单可查看各种生成页面:

注意百度Amis和elementUI的页面预览目前没有自带相关依赖库的,需要联网下载。

VueElemeAdmin

选择VueElemeAdmin再执行生成:

生成完仍然会启动一个命令窗口。刚才layuiAdmin基本上是生成各种静态html页面,这个VueElemeAdmin是生成vue-elementUI的工程,生成后需要NodeJS才能运行:

前端的开发人员应该很熟悉了,依次执行npm install:

和npm run dev:

一切顺利的话就会自动打开浏览器:

运行结果是个简单的增删改查前端界面:

SpringJpaSwagger

这个是生成JPA swagger接口示例,生成过程没什么特别的:

生成完也会运行一个命令,这个需要JDK8编译运行:

运行后可在浏览器访问、调试:

Erupt

最后看一下生成Erupt。这个框架厉害,生成一个实体类就能前后端一手包办了。

生成过程没什么可说:

生成后也是打开命令,需要JDK编译运行:

一切顺利运行成功的话,全打开登录页面:

初始用户名密码都是erupt,第一次登录后会要求改密码。

进入系统后可以看到相应的功能模块:

增删改查功能一应俱全:

是一个真正可运行的系统了:

关于批量生成以后有空再专门讲一下。

导入现有表

即常说的逆向工程了。导入前需要连接数据库,EZDML支持连接ORACLE、MYSQL、SQLSERVER、SQLITE、POSTGRESQL和ODBC、JDBC等各种数据连接,具体可参考《EZDML连接数据库》。

这里以Microsoft Access附带的“罗斯文商贸”数据库为例(这玩意应该是以前的Access自带的,现在已经找不到了,装了个OFFICE2000才弄到):

首先新建一个文件,执行“模型|导入数据库”菜单命令,系统显示导入界面并提示连接数据库:

选择ODBC并连接到MS Access MDB文件(这个是旧WIN32版的截图):

 

系统列出已有表:

其中“自动大小写”的意思是自动对表名和字段名进行首字母大小处理(如USERINFO会处理为UserInfo,系统根据字典文件dict.txt进行处理,如果对处理结果不满意,可修改字典文件增加你需要的词语);“注释转为逻辑名”意思是把表或字段的注释作为逻辑名称导入。

有些系统表(MSys开头的)无法导入,要取消勾选,不然会报错:

最终导入结果如下:

如果对布局不满,可以试试多点几次“重新排列”:

在连接了数据库的情况下,双击表查看属性,可以在“数据”页中直接查看数据:

生成数据库

为了说明生成功能,我们先找第一个表修改一下,增加文本字段“销售情况”,并把“产品销售额”由“浮点(19)”改为“浮点(10,2)”:

执行“模型|生成数据库”菜单命令,系统显示生成数据库界面:

先不连接数据库时,直接点击“生成SQL”,生成的是创建表的标准SQL:

连接数据库,再生成一次,这时生成的SQL只是发生变化的表和字段:

其中“产品销售额”由“浮点(19)”变为“浮点(10,2)”。

由于值域变小了,必须重新生成字段。为了防止数据丢失,系统生成的SQL是先把它改名,然后创建新字段,并把数据从旧的字段UPDATE到新字段中,最后删除原有字段的SQL(为防止数据丢失,删除字段的SQL默认以注释的形式生成,可手工修改将注释符去掉)——新版默认直接修改表了,需要改配置才能生成备份字段。

而销售情况是新字段,就直接生成了创建字段的SQL。

可直接修改SQL的内容,点击“执行”可以执行相应SQL生成数据库,也可以把SQL复制到管理工具的SQL窗口中执行。

生成测试数据Insert SQL

就是帮你生成一堆垃圾数据,方便测试用:

对于主键和外键,EZDML生成了获取数据库中已有ID的SQL(/ * PRE_LOAD_XX * /),同时生成了占位注释,方便查找替换。

如直接在EZDML里连数据库生成执行的话,EZDML可对外键进行抽样随机填充替换处理,对主键则自动从最大值开始往下递增(有序列号的除外)。

执行脚本

最后演示下脚本。一般来说大家不需要深入地使用脚本,但了解一点点遍历表和字段的脚本会非常有用。

EZDML支持javascript和pascal脚本。这里以javascript为例。

还是刚才那个罗斯文商贸的模型,假设我要在每个表名的前面加前缀“RS_”,操作如下:

1) 执行菜单命令“模型|执行脚本”(在模型图上右键菜单里也有)

2) 弹出的脚本窗口里应该是javascript示例脚本,如果不是,请连点几次新建New命令

3) 清空原有脚本,输入以下内容:

1
2
3
4
5
for(var i=0; i<curModel.tables.count; i++)
{
var tb=curModel.tables.getItem(i);
tb.name = 'RS_'+tb.name;
}

4) 按F9执行:

当然了,如果要稳妥起见,最好能加个判断,避免多次执行时重复添加:

1
2
3
4
5
6
for(var i=0; i<curModel.tables.count; i++)
{
var tb=curModel.tables.getItem(i);
if ( tb.name.indexOf('RS_') !=0 ) //增加判断避免重复添加
tb.name = 'RS_'+tb.name;
}

5) 关闭脚本窗口,回到模型图,按F5刷新:

6) 不好,表名是改了,但外键连接全不见了;别慌,这是因为字段的外键关联的表名没改,我们再写个脚本补救一下

7) 再次打开脚本窗口,将脚本修改如下:

1
2
3
4
5
6
7
8
9
10
for(var i=0; i<curModel.tables.count; i++)  //遍历表
{
var tb=curModel.tables.getItem(i);
for(var j=0; j<tb.metaFields.count; j++) //遍历字段
{
var f=tb.metaFields.getItem(j);
if(f.relateTable)
f.relateTable = 'RS_' + f.relateTable;
}
}

8) 按F9执行一次,然后关闭脚本窗口,回到模型图,按F5刷新,外键又回来了:

关于脚本的更多内容,可参考另一个文档《EZDML脚本快速上手》。

本文到此结束,感谢阅读!