注意:最初这个问题是针对 PostgreSQL 提出的,但是,答案几乎适用于任何具有可以检测外键关联的 JDBC 驱动程序的数据库。
查询 PostgreSQL 数据字典中的外键和表之间的关系非常简单,但是我如何使用这些信息来生成表之间的关系图呢?
关于可以做到这一点的工具有什么建议吗?
编辑:我知道 GraphVIZ/DOT可能很有用,但是,我不知道如何编写会生成有向图 .DOT 文件的应用程序。
注意:最初这个问题是针对 PostgreSQL 提出的,但是,答案几乎适用于任何具有可以检测外键关联的 JDBC 驱动程序的数据库。
查询 PostgreSQL 数据字典中的外键和表之间的关系非常简单,但是我如何使用这些信息来生成表之间的关系图呢?
关于可以做到这一点的工具有什么建议吗?
编辑:我知道 GraphVIZ/DOT可能很有用,但是,我不知道如何编写会生成有向图 .DOT 文件的应用程序。
Microsoft Visio 很容易做到这一点。
至少对于 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 等。
Dot是多平台的,可能很有用。
DBVisualizer也是一个免费且不错的选择。