Erstellen Sie Skripte unter Versionskontrolle und kontinuierlicher Integration, um sie zu überprüfen
Ein Ansatz, der für mich funktioniert hat, war, dass jeder Entwickler mit seinem eigenen Schema arbeitet, mit dem er machen kann, was er will. Ihr Schema war zerstörbar und mit Testdaten gefüllt, die aus einem versionskontrollierten Satz von Skripten stammen, zu denen alle Entwickler beigetragen haben.
Bei der nächtlichen kontinuierlichen Integrationserstellung wurde die neueste Version aller Skripts verwendet und versucht, eine zusammenhängende Testdatenbank daraus zu erstellen. Die Anwendung wurde dann einer Reihe von Integrations- und Funktionstests unterzogen, um sicherzustellen, dass das aktuelle Schema mit dem aktuellen Release-Kandidaten übereinstimmt.
Bevor wir diesen Weg eingeschlagen haben, gab es ein ziemlich solides Datenbankdesign und ein DBA hat immer ein Auge auf die Dinge geworfen, um zu verhindern, dass Entwickler durch Denormalisierung und andere Schrecken verrückt werden.
Die Versionskontrolle hat hier immens geholfen, da Änderungen an den Skripten sofort erkennbar waren. Wir haben auch eine Datenbanktabelle verwendet VERSION
, um den Gesamtstatus der Datenbank zu ermitteln. Dies war eine einfache Ganzzahlsequenz, die keiner bestimmten Anwendung zugeordnet war.
Insgesamt hat es gut funktioniert und bedeutet, dass Entwickler keine Angst mehr davor haben, die Persistenzstufen zu ändern, da sie ihre eigenen Schemata immer zurücksetzen konnten, ohne andere zu beeinträchtigen.
Der Ansatz, den ich verwende, besteht darin, eine Tabelle für Parameter bereitzustellen. Diese Tabelle enthält ein Name / Wert-Paar für die Version, in der sich die Datenbank befindet. Dies bietet mir zwei Vorteile: Ich kann überprüfen, ob ein Datenbank-Fix über die Anwendung angewendet wurde, und ich kann diesen Wert für meine SQL-Skripten verwenden.
Das SQL-Skript erstellt neue Tabellen, ändert Spalten und die erforderliche Arbeit in der Datenbank, um das Skript aus der vorherigen Version zu promoten. Idealerweise hätte ich auch ein Rollback-Skript, aber meistens nicht.
Übrigens wurde dieser gesamte Ansatz im Rahmen von Ruby on Rails einschließlich der Rollback-Skripte automatisiert. Ich mag die Idee davon, aber nicht alle Frameworks tun das. Wenn ich Ruby on Rails nicht verwende, verwende ich den oben beschriebenen Ansatz.
quelle