Erstellen Sie ein Skript, das die korrekten Fremdschlüsselbeziehungen erstellt, führen Sie das Diagrammwerkzeug aus, und führen Sie dann ein zweites Skript aus, das die Fremdschlüssel löscht.
Dies würde Ihnen erlauben, Ihr Werkzeug zu benutzen, ohne die Datenbank zu sehr zu stören. Wenn das erste Skript fehlschlägt, wissen Sie, dass auch etwas mit den Daten nicht stimmt.
[EDIT] Wenn es eine Regel gibt, wie fremde Schlüsselspalten benannt werden, können Sie eine Skriptsprache verwenden, um das SQL für Sie zu generieren.
Wenn dies ebenfalls fehlschlägt, sollten Sie mit einem Design-Tool die fehlenden Beziehungen erstellen können. Das bedeutet, dass Sie wahrscheinlich auf Dateninkonsistenzen stoßen werden. Die Lösung besteht darin, einen Snapshot der Tabellendefinitionen zu erstellen und die Datenbank (ohne die Daten) auf einem privaten Datenbankserver neu zu erstellen. Dort können Sie sich so viel mit dem Design anlegen, wie Sie möchten, ohne das ursprüngliche System zu stören.
Wenn Sie mit der Konstruktion fertig sind, können Sie die Befehle zum Erstellen der Fremdschlüssel extrahieren und auf das reale System anwenden - wenn Sie möchten. Auf diese Weise können Sie ein Gefühl dafür bekommen, wie groß das Chaos in der Datenbank bereits ist. Wenn nicht, können Sie einfach die neue Kopie behalten, Änderungen an den Entwürfen vornehmen und nach der Überprüfung die Änderungen in die Produktionsdatenbank migrieren.
In meinen eigenen Systemen habe ich immer Skripte, um schnell einen Klon der aktuellen Entwicklungs- und Produktionsdatenbank zu erstellen. Normalerweise verwende ich eine eingebettete Datenbank wie Derby oder HSQL. Wenn Sie dem Prozess jedoch einen Filter hinzufügen, können Sie $(SCHEMA)
in den DDL-Dateien verwenden und dieselbe Datenbank in verschiedenen Schemas auf demselben Server installieren. Wir haben dies mit großem Erfolg während eines Datenmigrationsprojekts verwendet, bei dem die Ergebnisse jedes Migrationstests in einem neuen Schema gespeichert wurden (TABLE_DATE_XX
, wobei XX
eine zweistellige Zahl ist, sodass Sie mehr als einen Test pro Tag erstellen können).
Das erlaubte uns, die verschiedenen Fixes zu überprüfen, zwei Migrationen zu vergleichen, usw. Da der ganze Prozess 100% automatisiert war, wurde es billiger ein neues Schema zu erstellen als ein existierendes Schema zu reparieren.
Ich würde gerne die Antwort auf diese Frage auch wissen. Ich beschäftige mich mit einer kommerziellen Produktdatenbank (in diesem Fall IBM DB2) mit etwa tausend Tabellen und ohne Fremdschlüsseldefinitionen. Da die Spalten jedoch konsistent benannt werden, sollte es für ein Tool möglich sein, Spalten-IDs zu vergleichen und Rückschlüsse auf Beziehungen zu ziehen. –