Генерация ER-диаграммы путем обратного инжиниринга базы данных

Примечание. Первоначально этот вопрос задавался для PostgreSQL, однако ответ относится практически к любой базе данных, в которой есть драйвер JDBC, который может обнаруживать ассоциации с внешним ключом.


Запрос к словарю данных PostgreSQL для внешних ключей и связей между таблицами очень прост, но как я могу использовать эту информацию для создания графика отношений между таблицами?

Любые рекомендации по инструментам, которые могут сделать это?

РЕДАКТИРОВАТЬ: я знаю, что GraphVIZ/DOT может быть полезным, однако я не знаю, есть ли у вас представление о том, как кодировать приложение, которое будет генерировать файл направленного графа.DOT.

5 ответов

Решение

Dot является частью пакета graphviz, который является чертовски крутым / полезным инструментом. Конечно, вам нужно что-то для создания точечных файлов для Graphviz. Я использовал SchemaSpy один или два раза в прошлом, и он работает довольно хорошо, если у вас есть отношения, определенные в базе данных.

Microsoft Visio легко это сделает.

По крайней мере, для Oracle я запускаю этот запрос или прошу администратора базы данных выполнить его и выслать мне результаты. Результаты могут быть скопированы непосредственно в текстовый файл для интерпретации с помощью инструментов 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 и др.

DBVisualizer также является бесплатной и приятной альтернативой.

Точка является мультиплатформенной и может быть полезной.

Другие вопросы по тегам