用于自动生成和布置实体关系图的工具?


7

我已经看到很多工具可以从现有的数据库中对ERD进行逆向工程,但是我找不到能够以合理的方式自动布局图的工具。他们中的大多数只是将所有实体放在彼此之上并称之为一天。有些人试图组织实体,但他们并没有做得很好。

是否有任何工具可以对现有数据库的结构进行逆向工程,然后以易于理解的方式自动布局并显示数据库的组织?如果我要制作这样一个工具,我会让它最小化连接实体的线的长度,最小化相互交叉的线的数量,并使相关实体组彼此脱颖而出。我还试图推断出哪些表是查找表,哪些是mana-to-many中间表等,并且布置实体使得这些角色对于查看图表的人来说是显而易见的。

我没有足够的资金来完成上述工作,但我确实有一些资金购买这样的工具,如果它是好的。

编辑:我应该提一下,我正在尝试绘制一个包含100多个表的数据库,所以我想尽可能多地自动化。数据库不是我非常熟悉的数据库,因此我希望从查看图表中学习,而不是将我所知道的内容转储到图表中(这似乎是大多数图表工具的设计目的)。


是否有人知道通过加权图或类似算法排列图表以减少重叠的工具?
克里斯纳瓦

Answers:


2

只要你的数据库中有外键,我就发现Visio做得非常好。我有一个postgresql数据库,包含来自四个不同合并项目的约150个表,这些表通过各种外键连接,并且它提取了一个很棒的工作,即提取所有关系并将表分组在一起。尽管有大量外键,但该图只有几条重叠线。此外,由于外键逻辑元素很好地组合在一起,很明显大多数表的源自哪些数据库。


1
我也试过过viso。也许我的问题是,数据库中的关系实际上是一个混乱的混乱,并准确表示我得到的乱七八糟的混乱...
user18352

1
我也使用visio来做这个(仅限ms访问文件)这个过程很简单,但如果你的源数据库很乱,正如你所说,我不确定任何软件会自动为你排序完美。关于visio的好处是,你可以修改ER图并使用VBA重现数据库:eggheadcafe.com/software/aspnet/32121825 / ...
DaveParillo

2

SchemaCrawler使用GraphViz自动从数据库生成图表。SchemaCrawler的真正力量就是这样

  1. 您可以使用正则表达式来限制图中的表和列,使其在浏览不熟悉的数据库时非常有用
  2. 您可以使用“弱关联”功能发现未表示为外键的表之间的关系

只需下载SchemaCrawler,将其放在java路径中的某个位置并按如下方式运行:

java -classpath $(echo ../../_schemacrawler/lib/*.jar | tr ' ' ':') schemacrawler.Main -server=mysql -database=your_database_in_localhost -user=your_user -password=your_password -infolevel=maximum -command=graph -outputformat=pdf -outputfile=my_database_diagram.pdf $*

另请注意,您可以选择不同的文件格式

  • PNG
  • JPG
  • SVG

和许多其他人。

您还可以通过在SchemaCrawler配置文件schemacrawler.config.properties中设置以下属性来决定是否应显示外键名称,列序号和模式名称。

  • schemacrawler.format.show_ordinal_numbers =真
  • schemacrawler.format.hide_foreignkey_names =真
  • schemacrawler.format.show_unqualified_names =真

http://schemacrawler.sourceforge.net/diagramming.html上有更多信息和示例


0

可能取决于您使用的数据库。我已经尝试使用Microsoft SQL Server Management Studio,它创建并列出了图表。我不能说它是否符合您的要求,但快递版是免费的,因此总是可以尝试一下。


管理工作室创建的数据库图表可能是我见过的最好的数据库图表,但它仍然无法很好地处理100多个表格。它最终成了乱七八糟的混乱。
user18352

0

我过去常常使用德鲁伊,并且非常满意。它是开源/免费的,您可以移动图中的对象。但是,UI可能需要相当多的习惯。


从描述来看,它听起来并不像德鲁伊那样自动布局。
user18352

您打算如何将表信息加载到程序中?
流行于

1
从现有数据库进行反向工程。
user18352

是的,我在原来的问题中看到了,但是如何?导入Access文件?告诉程序登录信息到数据库?目前尚不清楚“逆向工程师”是什么意思。
流行于

1
对不起 通过逆向工程,我的意思是让程序登录数据库以检索表结构和约束。
user18352
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.