我见过很多工具可以从现有数据库中逆向生成 ERD,但我还没能找到一个能够以合理方式自动布局图表的工具。大多数工具只是将所有实体放在一起,然后就完事了。有些工具尝试组织实体,但做得不是很好。
有没有一种工具可以对现有数据库的结构进行逆向工程,然后自动以易于理解的方式布局,并揭示数据库的组织结构?如果我要制作这样的工具,我会让它尽量缩短连接实体的线的长度,尽量减少相互交叉的线的数量,并使相关实体组彼此突出。我还会尝试推断哪些表是查找表,哪些表是多对多中间表等,并布局实体,以便查看图表的人可以清楚地看到这些角色。
我没有足够的资金来实现上述目标,但如果它很好的话,我确实有一些资金可以购买这样的工具。
编辑:我应该提到,我正在尝试绘制一个包含 100 多个表的数据库图表,所以我想尽可能地自动化。我对这个数据库不是很熟悉,所以我希望通过查看图表来学习,而不是将我所知道的内容转储到图表中(这似乎是大多数图表工具的设计目的)。
答案1
我发现,只要数据库中有外键,Visio 就能很好地完成工作。我有一个 postgresql 数据库,其中包含来自四个不同合并项目的大约 150 个表,这些表通过各种外键连接在一起,它在提取所有关系并将表分组在一起方面做得非常出色。尽管有大量外键,但图表只有几条重叠线。此外,由于外键,逻辑元素被很好地分组在一起,因此可以清楚地知道大多数表来自哪个数据库。
答案2
SchemaCrawler使用 GraphViz 自动从数据库生成图表。SchemaCrawler 的真正强大之处在于
- 您可以使用正则表达式来限制图表中的表和列,这在探索不熟悉的数据库时非常有用
- 您可以使用“弱关联”功能发现未表示为外键的表之间的关系
只需下载 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
- 图片
- 点
- SVG
以及其他许多人。
您还可以通过设置 SchemaCrawler 配置文件 schemacrawler.config.properties 中的以下属性来决定是否显示外键名称、列序数和模式名称。
- schemacrawler.格式.显示序号=true
- schemacrawler.format.hide_foreignkey_names=true
- schemacrawler.格式.显示未限定名称=true
有更多信息和示例http://schemacrawler.sourceforge.net/diagramming.html
答案3
DBeaver能够将数据库结构视为实体关系图。
答案4
我用过德鲁伊过去我曾为此使用过,并且非常满意。它是开源/免费的,您可以移动图表中的对象。不过,用户界面可能需要一段时间才能习惯。