注意:最初这个问题是关于PostgreSQL的,但回答适用于几乎任何具有可以检测到外键关联的JDBC驱动程序的数据库。
查询 PostgreSQL 数据字典中表之间的外键和关系非常简单,但如何使用这些信息生成表之间关系的图形呢?
是否有工具推荐可以完成此操作?
编辑: 我知道GraphVIZ/DOT可能有用,然而,我不知道如何编写一个应用程序来生成有向图.DOT文件。
注意:最初这个问题是关于PostgreSQL的,但回答适用于几乎任何具有可以检测到外键关联的JDBC驱动程序的数据库。
查询 PostgreSQL 数据字典中表之间的外键和关系非常简单,但如何使用这些信息生成表之间关系的图形呢?
是否有工具推荐可以完成此操作?
编辑: 我知道GraphVIZ/DOT可能有用,然而,我不知道如何编写一个应用程序来生成有向图.DOT文件。
至少对于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;