In Zeiten starker Entwicklung ändert sich das Datenbankschema schnell und kontinuierlich, und bis unser wöchentlicher Push für die Betaversion eintritt, hat sich das Schema so stark geändert, dass die einzig sinnvolle Option darin besteht, alle Tabellen, die ich kann und kann, zu nuklearisieren Kopieren Sie die neuen Versionen aus meiner Entwicklerdatenbank. Offensichtlich wird dies nach dem Start nicht funktionieren, da das Löschen von Produktionsdaten ein Rezept für eine Katastrophe ist. Daher habe ich mich gefragt, welche Strategien es gibt, um Datenbankschemaänderungen von einer Version / Revision zu einer anderen zu verwalten.
Einige, die ich gefunden oder erlebt habe:
- Nuke-and-Dump von einer Datenbank in eine andere (was ich gerade mache)
- Verwalten einer UPDATE.sql-Datei mit SQL-Anweisungen, die entweder per Skript oder von Hand ausgeführt werden.
- Verwalten einer update.php-Datei mit einem entsprechenden Wert für "db-schema-version" in der aktiven Datenbank
Die dritte Option scheint die sinnvollste zu sein, es besteht jedoch weiterhin die Möglichkeit, dass eine schlecht konstruierte SQL-Abfrage mitten im Skript fehlschlägt und die Datenbank in einem halb aktualisierten Zustand bleibt, sodass eine Sicherung wiederhergestellt werden muss.
Es scheint kein Problem zu sein, aber es passiert, da wir als Team phpMyAdmin verwenden und ich mich nicht einmal darauf verlassen kann, dass ich die ausgeführte SQL-Anweisung kopiere, um sie in die Datei update.php einzufügen. Wenn Sie zu einer anderen Seite navigieren, muss ich die SQL-Anweisung von Hand neu schreiben oder meine Änderung rückgängig machen und erneut ausführen.
Ich vermute, ich erhoffe mir eine Lösung, die sich nicht auf unseren etablierten Entwicklungsworkflow auswirkt.
update.php
oderupdate.sql
-Datei in einer Testumgebung testen, bevor Sie sie auf die aktive Datenbank anwenden, oder? Und PHPMyAdmin wird für die möglichen Probleme verantwortlich gemacht, die beispielsweise bei Skripten auftreten können. Vielleicht ist es an der Zeit, ein anderes / besseres Tool zu suchen?