博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工具 EZDML表结构设计器
阅读量:6852 次
发布时间:2019-06-26

本文共 4701 字,大约阅读时间需要 15 分钟。

软件官网: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# 的实体类脚本,在软件的默认基础上修剪改造的。大家可以简单理解一下,语言的语法都是相通的。

function DEF_CTMETAFIELD_DATATYPE_NAMES_CSHARP(idx: TCtFieldDataType): string;begin  case Integer(idx) of    0: Result := 'unknown';    1: Result := 'string';    2: Result := 'int';    3: Result := 'decimal';//替换double    4: 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';  else    Result := 'unknown';  end;end;//获取属性名function getPublicName(N: string): string;begin  Result := N;  if (Result <> '') then    if Result[1] >= 'a' then      if Result[1] <= 'z' then        Result[1] := Chr(Ord(Result[1]) - (Ord('a') - Ord('A')));end;function GetDesName(p, n: string): string;begin  if p = '' then    Result := n  else    Result := p;end;var  I, L: Integer;  clsName, S, T, V, FT: string;  f: TCtMetaField;//获取字段名function GFieldName(Fld: TCtMetaField): string;begin  Result := GetDesName(f.Name, f.DisplayName);end;//获取字段类型function GFieldType(Fld: TCtMetaField): string;begin    Result := DEF_CTMETAFIELD_DATATYPE_NAMES_CSHARP(f.DataType);end;//程序开始procedure AddFieldInfo;begin  S := GetDesName(f.Name, f.DisplayName);  begin      FT := DEF_CTMETAFIELD_DATATYPE_NAMES_CSHARP(f.DataType);    S := 'public ' + FT + ' ' + getPublicName(S)      + '{
' + 'get;' + 'set;' + '}' + #13#10; end; T := F.GetFieldComments; if T <> '' then begin S :='/// ' + #13#10 + '///' + T + #13#10 + '/// ' + #13#10 + S; end; CurOut.Add(' ' + StringReplace(S, #13#10, #13#10' ', [rfReplaceAll]));end;begin with CurTable do begin S := 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 begin S := StringReplace(S, '}', '%7D', [rfReplaceAll]); CurOut.Add(' //' + StringReplace(S, #13#10, #13#10' ', [rfReplaceAll])); end; L := 0; for I := 0 to MetaFields.Count - 1 do begin f := MetaFields[I]; S := GetDesName(f.Name, f.DisplayName); if L < Length(S) then L := 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 begin f := MetaFields[I]; AddFieldInfo; end; CurOut.Add(' }'); CurOut.Add('}'); end;end.

 

转载于:https://www.cnblogs.com/Aaxuan/p/8617816.html

你可能感兴趣的文章
db2缓冲池调优
查看>>
Sicily_How can I go
查看>>
NYOJ_456_邮票分你一半
查看>>
NYOJ_44_子串和
查看>>
kafka整理笔记笔记
查看>>
The Zip, GZip, BZip2 and Tar Implementation For .NET
查看>>
BZOJ4521:[CQOI2016]手机号码(数位DP)
查看>>
C/C++ rand()产生随机数 模拟 掷骰子 小游戏代码
查看>>
openfire 访问 user service 插件 访问不到
查看>>
linux 下 easy_install 安装
查看>>
生成唯一编码
查看>>
C# Directory.GetFiles()获取文件时如果是根目录时有隐藏文件则报错的处理
查看>>
POJ 3320 (尺取法+Hash)
查看>>
名校公开课网站汇总
查看>>
CodeForces 620E New Year Tree
查看>>
ZOJ 2059 The Twin Towers
查看>>
阿里云系列——5.网站云解析快速配置(简单+免费+详细+最新)
查看>>
python简单爬虫爬取百度百科python词条网页
查看>>
分享git的常用命令
查看>>
《代码大全》阅读笔记-13-不常见的数据类型
查看>>