Versionskontrolle der Datenbank für MySQL

Welche Methode verwenden Sie zur Versionskontrolle Ihrer Datenbank? Ich habe alle unsere Datenbanktabellen als separate .sql-Skripte in unser Repository (mercurial) geschrieben. Wenn ein Mitglied des Teams beispielsweise eine Änderung an der Mitarbeitertabelle vornimmt, weiß ich sofort, welche bestimmte Tabelle geändert wurde, als ich mein Repository aktualisierte.

Eine solche Methode wurde beschrieben in:Was sind die Best Practices für Datenbankskripten unter Codekontrolle?. Gegenwärtig schreibe ich ein Python-Skript, um alle .sql-Dateien im Datenbankordner auszuführen. Das Problem der Abhängigkeiten aufgrund von Fremdschlüsseleinschränkungen stellt jedoch sicher, dass wir die .sql-Dateien nicht einfach in beliebiger Reihenfolge ausführen können.

Das Python-Skript generiert eine Datei in der Reihenfolge, in der die .sql-Dateien ausgeführt werden. Die SQL-Dateien werden in der Reihenfolge ausgeführt, in der sie in der Datei tableorder.txt aufgeführt sind. Eine Tabelle kann erst ausgeführt werden, wenn ihre Fremdschlüsseltabelle ausgeführt wurde. Beispiel:

tableorder.txt

table3.sql
table1.sql
table7.sql und so weiter

Ich habe bereits die Abhängigkeitsliste für jede Tabelle aus Code generiert, indem ich das Ergebnis des mysql-Befehls "show create table" analysiert habe. Die Abhängigkeitsliste kann folgendermaßen aussehen:

tblstate: tblcountry //tblcountry.sql must be executed before tblstate.sql etc
tblemployee: tbldepartment, tblcountry

Um den Inhalt der tableorder.txt zu generieren, benötige ich einen Algorithmus, der so aussieht:

function print_table(table):
  foreach table in database:
    if table.dependencies.count == 0
      print to tableorder.txt
    if table.dependencies.count > 0
      print_table(dependency) //print dependency first
end function

Wie Sie sich vorstellen können, handelt es sich dabei um eine Menge Rekursion. Ich beginne mich zu fragen, ob es die Mühe wert ist? Gibt es da draußen ein Werkzeug? Welches Tool (oder welcher Algorithmus) gibt es, um eine Liste der Reihenfolge zu generieren, in der separate SQL-Tabellen und -Sichten unter Berücksichtigung von Abhängigkeiten ausgeführt werden? Ist es besser, eine separate .sql-Datei für jede Tabelle / Sicht zu versionieren oder die gesamte Datenbank in einer einzigen .sql-Datei zu versionieren? Ich freue mich über jede Antwort, da dies so viele Tage gedauert hat. Vielen Dank.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage