通过反向工程数据库生成E-R图。

18

注意:最初这个问题是关于PostgreSQL的,但回答适用于几乎任何具有可以检测到外键关联的JDBC驱动程序的数据库。


查询 PostgreSQL 数据字典中表之间的外键和关系非常简单,但如何使用这些信息生成表之间关系的图形呢?

是否有工具推荐可以完成此操作?

编辑: 我知道GraphVIZ/DOT可能有用,然而,我不知道如何编写一个应用程序来生成有向图.DOT文件。


可能是重复问题:http://stackoverflow.com/questions/11099444/generate-er-diagram-from-existing-postgresql-database - Sualeh Fatehi
在此处可以查看Perl命令行的完整示例:https://gist.github.com/albfan/4fcf4240860fa73811b4 - albfan
5个回答

14

Dot是graphviz包的一部分,这是一个非常酷/有用的工具。当然,您需要某些东西来生成graphviz的dot文件。我过去曾经使用过SchemaSpy一两次,它表现得相当不错,前提是您在数据库中定义了关系。


4
耶,SchemaSpy 看起来是这项工作的正确工具!谢谢 :) - Camilo Díaz Repka
尽管这个工具在过去几年中没有更新,但它仍然能够正常运行。 - AlexHalkin
SchemaSpy非常棒。确认它可以与SQL Server一起使用! - David

4
微软 Visio 软件可以轻松实现这一功能。

11
从 Visio 2013 开始,它不再支持现有数据库的图表设计,已经移除了数据库图表设计功能。 - Rus
3
太遗憾了。我过去6年左右经常使用那个功能。 - Scott Herbert

2

至少对于Oracle,我会运行此查询或要求DBA运行它并将结果发送给我。可以直接将结果复制到文本文件中,以便由Graphviz的工具进行解释,从而生成数据库图表。

SELECT '"' || Source.TABLE_NAME || '" -> "' 
           || Destiny.TABLE_NAME || '";' AS For_GraphViz
FROM dba_constraints Source
JOIN dba_constraints Destiny
ON Source.owner='my_db_owner' AND Destiny.owner='my_db_owner'
AND Source.CONSTRAINT_TYPE='R'
-- theoretically this validation should be redundant
-- AND Destiny.Constraint_type = 'P'
AND Source.R_CONSTRAINT_NAME = Destiny.CONSTRAINT_NAME
ORDER BY Source.TABLE_NAME, Source.CONSTRAINT_TYPE, Source.CONSTRAINT_NAME
    , Source.R_CONSTRAINT_NAME, Source.INDEX_NAME;

可以轻松地为SQL Server创建类似的查询,不确定MySQL、PostgreSQL等是否可以。

顺便说一下,我强烈建议使用“circo”或“twopi”来绘制图表,而不是普通的“dot”甚至“neato”——至少在我的经验中,这样可以为具有数百个表的数据库产生更加愉悦的图形结果。 - Joe Pineda

1

1

Dot是跨平台的,可能会很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接