2008-10-09 11 views
17

Hinweis: Ursprünglich wurde diese Frage für PostgreSQL gestellt. Die Antwort gilt jedoch für fast jede Datenbank mit einem JDBC-Treiber, der Fremdschlüsselzuordnungen erkennen kann.Generieren eines E-R-Diagramms durch Reverse-Engineering einer Datenbank


Abfragen von PostgreSQL Data Dictionary für Fremdschlüssel und die Beziehung zwischen den Tischen ist sehr einfach, aber wie kann ich diese Informationen verwenden, um eine grafische Darstellung der Beziehungen zwischen Tabellen zu generieren?

Irgendwelche Empfehlungen über Werkzeuge, die das tun können?

EDIT: Ich weiß graphviz/DOT kann nützlich sein, aber ich kenne keine Ahnung haben, wie eine App Code, der die gerichteten Graphen .DOT Datei erzeugen würde.

+0

Mögliche dupe: http://stackoverflow.com/questions/11099444/generate-er-diagram-from-existing-postgresql-database –

+0

Siehe ein komplettes Beispiel aus der Befehlszeile auf Perl hier https: //gist.github. com/albfan/4fcf4240860fa73811b4 – albfan

Antwort

14

Dot ist Teil des Pakets, das ein ziemlich verdammt cooles/nützliches Werkzeug ist. Natürlich benötigen Sie etwas, um die Punktdateien für graphviz zu generieren. Ich habe SchemaSpy einmal oder zweimal in der Vergangenheit verwendet, und es funktioniert ziemlich gut, vorausgesetzt, Sie haben die Beziehungen in der Datenbank definiert.

+4

Yay, SchemaSpy sieht wie das richtige Werkzeug für den Job aus! Danke :) –

+0

Obwohl es in den letzten Jahren keine Updates gab, funktioniert dieses Tool immer noch gut. – AlexG

+0

SchemaSpy ist ziemlich beeindruckend. Bestätigen, dass es mit SQL Server funktioniert! – David

4

Microsoft Visio wird dies leicht tun.

+11

Ab Visio 2013 ist es nicht mehr, sie haben das Datenbankdiagramm aus einer vorhandenen DB entfernt. – Rus

+3

So eine Schande. Ich benutze diese Funktion in den letzten 6 Jahren oder so regelmäßig. –

1

Dot ist Multiplattform und kann nützlich sein.

+0

PLZ Senden Sie mir den Code? –

2

Zumindest für Oracle ich führe diese Abfrage oder bitten Sie den DBA, es auszuführen und mir die Ergebnisse zu senden. Die Ergebnisse können direkt in eine Textdatei kopiert werden, um von den Werkzeugen von Graphviz interpretiert zu werden, was zu einem Datenbankdiagramm führt.

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; 

Eine ähnliche Abfrage kann leicht für SQL Server erstellt werden, nicht wissen, über MySQL, PostgreSQL et al.

+0

Übrigens schlage ich vor, "circo" oder "twopi" zu verwenden, um das Diagramm im Gegensatz zu einfachem "Punkt" oder sogar "neato" zu zeichnen - zumindest in meiner Erfahrung erzeugt viele angenehme grafische Ergebnisse für DBs mit mehreren hundert Tabellen. –