Генерация ER-диаграммы путем обратного инжиниринга базы данных
Примечание. Первоначально этот вопрос задавался для PostgreSQL, однако ответ относится практически к любой базе данных, в которой есть драйвер JDBC, который может обнаруживать ассоциации с внешним ключом.
Запрос к словарю данных PostgreSQL для внешних ключей и связей между таблицами очень прост, но как я могу использовать эту информацию для создания графика отношений между таблицами?
Любые рекомендации по инструментам, которые могут сделать это?
РЕДАКТИРОВАТЬ: я знаю, что GraphVIZ/DOT может быть полезным, однако я не знаю, есть ли у вас представление о том, как кодировать приложение, которое будет генерировать файл направленного графа.DOT.
5 ответов
Dot является частью пакета graphviz, который является чертовски крутым / полезным инструментом. Конечно, вам нужно что-то для создания точечных файлов для Graphviz. Я использовал SchemaSpy один или два раза в прошлом, и он работает довольно хорошо, если у вас есть отношения, определенные в базе данных.
По крайней мере, для 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 также является бесплатной и приятной альтернативой.