软件官网:http://www.ezdml.com/

作者邮箱:huzzz@163.com

EZDML

EZDML是一个数据库建表的软件。

可快速的进行数据库表结构设计,建立数据模型。

类似大家常用的数据库建模工具如 PowerDesigner、ERWIN、ER-Studio 和 Rational-Rose 等的超级精简版。

该软件是从 2006 年 4 月开发至今仍然在维护,最近在 2017 年 8 月 5 日 更新了 V2.15 版本。

作者的精神值得我们学习。

包含功能:

1. 表结构设计:创建表、字段、主键、外键、索引和注释;

2. 表描述:可直接编辑文字描述快速生成表结构,爱用键盘的人会喜欢这个功能;

3. 模型图:自动生成模型图;可设计和显示物理/逻辑视图,支持自动布局、平移、缩小放大等操作;

4. 导入数据库:导入数据库中的已有对象,即所谓的逆向工程(支持ORACLE、MYSQL、SQLSERVER和ODBC);

5. 生成数据库:可生成直接创建数据库的SQL脚本;也可与现有数据库比较,然后生成同步脚本的功能,不至于丢失现有数据;

6. 生成代码:目前可生成C++、Pas、C#和Java的简单类定义代码;

7. 导出EXCEL。

使用说明:

模型图中可 按加减号放大缩小,方向键平移,R复原,F居中;

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

测试表

--------

ID PK

RID FK

标题 S(200)

数量 I

单价 F(10,2)

日期 D

注释 S

外键关系目前可以在模型图上创建显示,或在字段的关联表字段里设置;

导入生成功能可支持ORACLE、MYSQL、SQLSERVER和ODBC数据库;

生成功能在未连接数据库时,生成的是创建数据库的初始化SQL;只有连接了数据库,才会与数据库进行比对生成升级SQL;

为避免数据丢失,同步数据库时不会删除字段,但仍然会生成注释形式的相应SQL;

修改INI文件自定义配置(菜单:工具|修改INI配置):

[DefaultFieldTypes] ——修改缺省数据类型对应的物理类型

1=String:VARSTR(2000) ——修改逻辑类型名为String的物理类型名为VARSTR,默认长度为2000

2=Integer:DECIMAL ——修改逻辑类型名为Integer的物理类型名为DECIMAL,无默认长度

[CustFieldTypes] ——添加额外的数据类型到类型下拉列表

1=BigInt

2=Decimal

3=TestUnk

[CustDataTypeReplaces] ——指定替换字段类型

1=VARCHAR2:NVARCHAR2 ——将VARCHAR2替换为NVARCHAR2(全字匹配)

2=NUMBER(10):DECIMAL ——将NUMBER(10)替换为DECIMAL(全字匹配)

3=%TEXT%:NCLOB ——将TEXT替换为NCLOB(模糊匹配,类似SQL中的like操作)

4=%RAW:BLOB ——将RAW替换为BLOB(左边模糊匹配,右边精确匹配,类似SQL中的like操作)

[Options]

AutoSaveMinutes=5  ——定时每5分钟自动保存,保存为同目录.tmp文件(打开时自动加载tmp,想恢复加载原始文件的话要先删除tmp),为0则不保存

FieldNameMaxDrawSize=64  ——在模型图上允许显示的最大字段名长度

FieldTypeMaxDrawSize=48  ——在模型图上允许显示的最大字段类型长度

CreateSeqForOracle=0  ——禁止为ORACLE表生成序列号

OCIDLL=D:\oracle\ora112\instantclient\oci.dll  ——指定OCI.dll的路径(用于instant client或装了多个ORACLE client时)

还有一些快捷的小操作:

/ 键 缩放至最佳大小

在一个模型内,按表名的第一个字母的键,会直接打开该表的描述界面。

接下来讲一下我认为能对我们日常开发有很大帮助的的功能,那就是他的脚本。

脚本语言是 pascal 语言,一个已经凉了的语言。所以不建议大家在上面花费精力。

而且该软件的语言似乎和普通的 pascal 语言规则不太一样,pascal是有几种版本的,这里我也懒得深入研究了。

下面这个就是 C# 的实体类脚本,在软件的默认基础上修剪改造的。大家可以简单理解一下,语言的语法都是相通的。

functionDEF_CTMETAFIELD_DATATYPE_NAMES_CSHARP(idx: TCtFieldDataType): string;begin

case Integer(idx) of

0: Result := 'unknown';1: Result := 'string';2: Result := 'int';3: Result := 'decimal';//替换double4: Result := 'DateTime?';//可空类型5: Result := 'bool';6: Result := 'enum';7: Result := 'var';8: Result := 'object';9: Result := 'List';10: Result := 'function';11: Result := 'EventHnadler';12: Result := 'type';elseResult := 'unknown';end;end;//获取属性名functiongetPublicName(N: string): string;beginResult :=N;if (Result <> '') then

if Result[1] >= 'a' then

if Result[1] <= 'z' thenResult[1] := Chr(Ord(Result[1]) - (Ord('a') - Ord('A')));end;functionGetDesName(p, n: string): string;begin

if p = '' thenResult :=nelseResult :=p;end;varI, L: Integer;

clsName, S, T, V, FT: string;

f: TCtMetaField;//获取字段名functionGFieldName(Fld: TCtMetaField): string;beginResult :=GetDesName(f.Name, f.DisplayName);end;//获取字段类型functionGFieldType(Fld: TCtMetaField): string;beginResult :=DEF_CTMETAFIELD_DATATYPE_NAMES_CSHARP(f.DataType);end;//程序开始procedureAddFieldInfo;beginS :=GetDesName(f.Name, f.DisplayName);beginFT :=DEF_CTMETAFIELD_DATATYPE_NAMES_CSHARP(f.DataType);

S := 'public' + FT + ' ' +getPublicName(S)+ '{'

+ 'get;'

+ 'set;'

+ '}' + #13#10;end;

T :=F.GetFieldComments;if T <> '' then

beginS :='/// ' + #13#10

+ '///' + T + #13#10

+ '/// ' + #13#10

+S;end;

CurOut.Add(' ' + StringReplace(S, #13#10, #13#10' ', [rfReplaceAll]));end;begin

with CurTable do

beginS :=GetTableComments;

CurOut.Add('');

CurOut.Add('using System;');

CurOut.Add('using System.Text;');

CurOut.Add('');

CurOut.Add('namespace' +Name);

CurOut.Add('{');

S :=GetTableComments;if S <> '' then

beginS := StringReplace(S, '}', '%7D', [rfReplaceAll]);

CurOut.Add('//' + StringReplace(S, #13#10, #13#10' ', [rfReplaceAll]));end;

L := 0;for I := 0 to MetaFields.Count - 1 do

beginf :=MetaFields[I];

S :=GetDesName(f.Name, f.DisplayName);if L < Length(S) thenL :=Length(S);end;//表名

clsName :=Name;

CurOut.Add('[NPoco.TableName("' + clsName + '")]');

CurOut.Add('[NPoco.PrimaryKey("Id", AutoIncrement = true)]');

CurOut.Add('public class' +clsName);

CurOut.Add('{');

CurOut.Add('');//构造函数

CurOut.Add('public' + clsName + '()');

CurOut.Add('{');

CurOut.Add('}');for I := 0 to MetaFields.Count - 1 do

beginf :=MetaFields[I];

AddFieldInfo;end;

CurOut.Add('}');

CurOut.Add('}');end;end.

mysql表结构设计工具_工具 EZDML表结构设计器相关推荐

  1. ezdml 支付mysql 吗_EZDML数据库表结构设计器_设计sql、oracle、mysql数据库表结构 V2.39 免费版...

    很多程序员或者网站站长在设计网站数据库的时候都要进行表结构设计,如果您不想操作原始的数据库工具之想简单设计一下数据库表结构,那么你不妨试试这款EZDML数据库表结构设计器,可以快速设计sql.orac ...

  2. 表结构设计器EZDML常见问题(2019年11月整理)

    EZDML常见问题 --本文最后修订日期:20191109,对应EZDML版本:2.35. 文档更新记录: 2009.11 表结构设计器EZDML1.5新版本发布,比以前改进了很多,因此重新写了个介绍 ...

  3. 表结构设计器EZDML介绍说明

    表结构设计器EZDML1.5新版本发布,下载地址:http://download.csdn.net/source/1858073 新版本比以前介绍的1.2版本改进了很多,因此重新写了以下的介绍说明. ...

  4. mysql sharding 知乎_分库分表系列(1)-shardingsphere核心概念

    欢迎关注公众号: 戏说码农职场 咱们不闲扯, 就直接入正题, 这次总结说下sharding-jdbc 分库分表的工具.整体架构 Apache ShardingSphere 是一套开源的分布式数据库中间 ...

  5. mysql join on 索引_连接查询,表关联查询join on,索引,触发器,视图

    一.连接查询 1.统计每一个部门的人数  "部门名,部门的人数" select department,count(eid) from employee group by depar ...

  6. mysql 修改表名 判断表是否存在_判断数据库表是否存在以及修改表名的方法

    一.判断数据库表是否存在: 首先要拿到数据库连接conn,调用DatabaseMetaData dbmd = conn.getDataMeta();之后调用如下方法: 代码如下: /** * 根据表名 ...

  7. 表结构设计器EZDML V2.39发布

    好久没更新了,前段时间CSDN说我没认证不让登录,最近又可以了,正好发个版本. EZDML是一个超轻量级的表结构设计工具,可快速的进行数据建模,能迅速生成代码模板.简单界面和字典等方案文档,支持脚本编 ...

  8. access工具_工具篇之pycharm小技巧-httpclient

    简介 工具中无论是测试还是开发,我们常常使用postman类似的工具来辅助我们发送http请求完成相应的工作,今天我们介绍在开发过程中使用pycharm完成http的请求发送! 1.利用request ...

  9. 同时删除两张表的数据_把数据表中对应工作表的数据首先删除,然后导入数据...

    大家好,我们今日继续讲解VBA数据库解决方案的第28讲内容:利用VBA,把数据表中对应工作表的数据首先删除,然后向数据表中导入工作表数据.数据库的讲解已经持续一段时间了,从对简单数据库的认识到利用VB ...

最新文章

  1. 从命令行使用 wget 调试网页错误
  2. 盘点我跳过的科研天坑,进坑就是半年白干
  3. Aix6.1安装openssh
  4. 小森生活一直服务器维护,《小森生活》怎么处理断线黑屏的问题 连接不上服务器解决办法...
  5. python参数传递时不构造新数据对象_关于函数的参数传递(parameter passing),以下选项中描述错误的是_学小易找答案...
  6. 服务器红帽操作系统安装,pxe无人值守安装 红帽操作系统
  7. 从bagging到dropout(deep learning笔记Ian)
  8. 高等数学中▽符号的作用
  9. 用Python实现最强大脑游戏
  10. 为伊消得人憔悴,衣带渐宽终不悔(2)
  11. 计算机技术对人脸识别的作用,人脸识别技术有什么功能特点
  12. cmake-自动识别新增子模块
  13. 高德地图获取坐标距离_计算两个坐标点之间的距离(高德地图)
  14. 计算机网络的三大功能,计算机网络的三大主要功能是什么
  15. creator 反复横跳瞄准线的实现
  16. 计算机考试ppt应用,职称计算机考试辅导:Powerpoint使用母版
  17. 魅族android不兼容Android,魅族17系列彻底跟上时代,搭载基于Android 10的Flyme 8.1系统...
  18. (附源码)APP+springboot垃圾自动分类管理系统 毕业设计 160846
  19. 使用python绘制二元函数对应的曲面
  20. 视频文件格式分析(1):avi格式

热门文章

  1. XMind6和XMind7有何不同
  2. 何文龙总经理赴京参加中搜峰会
  3. 启迪智慧的故事【老太太买李子】
  4. Linux内存管理(二)
  5. 计算机英语多层,大学专业英语:计算机英语2
  6. resultMap和resultType区别
  7. 项目管理中,项目干系人的角色和责任
  8. web性能测试:apache benchmark(ab)
  9. unity常见面试笔试题
  10. 视觉检测应用之电路板二维码读取