2008-10-09 15 views
17

Nota: Originalmente esta pregunta fue hecha para PostgreSQL, sin embargo, la respuesta se aplica a casi cualquier base de datos que tenga un controlador JDBC que pueda detectar asociaciones de clave externa.Genere un Diagrama E-R mediante ingeniería inversa de una base de datos


diccionario de datos PostgreSQL para Consulta-claves externas y relaciones entre tablas es muy sencillo, pero ¿cómo puedo usar esa información para generar un gráfico de las relaciones entre las tablas?

¿Alguna recomendación sobre las herramientas que pueden hacer esto?

EDIT: Sé Graphviz/DOT puede ser útil, sin embargo, no sé tiene ninguna idea acerca de cómo codificar una aplicación que genere el archivo gráfico .DOT dirigido.

+0

Posible engaño: http://stackoverflow.com/questions/11099444/generate-er-diagram-from-existing-postgresql-database –

+0

Vea un ejemplo completo de la línea de comandos en perl aquí https: //gist.github. com/albfan/4fcf4240860fa73811b4 – albfan

Respuesta

14

Dot es parte del paquete graphviz, que es una herramienta muy buena/útil. Por supuesto, necesitarás algo para generar los archivos de puntos para graphviz. He usado SchemaSpy una o dos veces en el pasado, y funciona bastante bien, siempre que tenga las relaciones definidas en la base de datos.

+4

¡Sí, SchemaSpy parece la herramienta adecuada para el trabajo! Gracias :) –

+0

Aunque no hay actualizaciones durante los últimos años, esta herramienta todavía funciona bien. – AlexG

+0

SchemaSpy es bastante impresionante. ¡Confirmando que funciona con SQL Server! – David

4

Microsoft Visio hará esto fácilmente.

+11

A partir de Visio 2013 ya no funciona, han eliminado la diagramación de la base de datos de un DB existente. – Rus

+3

Qué pena. He estado usando esa función regularmente durante los últimos 6 años más o menos. –

1

Dot es multiplataforma y puede ser útil.

+0

Por favor envíeme el código? –

2

Al menos para Oracle, ejecuto esta consulta o le pido al DBA que la ejecute y me envíe los resultados. Los resultados se pueden copiar directamente a un archivo de texto para ser interpretados por las herramientas de Graphviz, lo que da como resultado un diagrama de base de datos.

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; 

Una consulta similar se pueden crear fácilmente para SQL Server, no saber acerca de MySQL, PostgreSQL y col.

+0

Por cierto, yo * fuertemente * sugiero usar "circo" o "twopi" para trazar el diagrama en oposición al simple "punto" o incluso "neato" - al menos en mi experiencia produce resultados gráficos muy agradables para DB con varios cientos mesas. –

Cuestiones relacionadas