Gibt es etablierte Vorgehensweisen für die erfolgreiche Migration von Datenbanksichten in einer Umgebung mit mehreren Entwicklern / mehreren Zweigen (VCS)?
Wir haben eine Datenbankmigrationsbibliothek für alle unsere Schemaänderungen verwendet, aber es sind Probleme aufgetreten, wenn verschiedene Entwickler in verschiedenen Zweigen des Codes dieselbe Ansicht ändern, aber ihr Ausgangspunkt ist derselbe.
Jeder Entwickler hat seine eigene Kopie der Datenbank, aber da Sichten normalerweise erfordern, dass die gesamte Definition in der Migration angegeben wird, bedeutet dies, dass, wenn wir die Migrationen gegen die Staging- oder Produktionsdatenbank ausführen, welche Ansichtsmigration auch immer ausgeführt wird überschreibt zuletzt alle Änderungen, die bei vorherigen Migrationen von Ansichten vorgenommen wurden.
Beispiel:
SELECT 'x'
. SELECT 'x', 'y'
. SELECT 'x', 'z'
. SELECT 'x', 'z'
aus. SELECT 'x', 'y'
aus und die Änderungen von Entwickler 2 sind verloren gegangen. Für Ansichten oder jedes Datenbankobjekt, das jederzeit neu definiert werden kann (z. B. Funktionen), besteht die bewährte Methode darin, die aktuelle Definition der Funktion in einer eigenen Datei zu speichern, z. B. db/views/your_stuff.view.sql
; Wann immer ein Entwickler diese Ansicht ändern möchte, ändert er diese Datei und fügt dann eine Standardmigration hinzu, die die Sicht von der letzten Version einfach neu definiert (ich weiß nicht, ob Sie in Rails sind oder nicht), aber die Idee sollte hier sein sei ziemlich klar):
Beachten Sie, dass die tatsächliche Ansichtsdatei wie folgt aussehen sollte:
%Vor%Dies löst Ihr Problem, denn der Workflow ist jetzt:
SELECT 'x' FROM foos
. db/views/your_stuff.view.sql
, um diese Änderung widerzuspiegeln. Ihre Migration führt einfach die neue Ansicht aus. Wenn sie in verschiedenen Code-Zweigen arbeiten, sollten sie unterschiedliche Datenbanken verwenden; und wenn die Zweige zusammengeführt werden, sollten die Unterschiede aufgelöst werden.
Das heißt, ich bin der Meinung, dass ein Schema als eigenes "Projekt" behandelt werden sollte. Sie erwähnen mehrere Entwickler, die eine geteilte VIEW ändern, wenn dies nicht weniger wichtig ist als eine Änderung der Signatur einer häufig verwendeten Funktion in einer gemeinsamen DLL.
Meine Antwort ist (wenn es nicht zu spät in der Entwicklung ist), dass Standard-Client-Code unter einem MySQL-Benutzer verbunden wird, der nicht berechtigt ist, die Datenbank mehr als nötig zu ändern; und haben eine "Migration" -Anwendung / Skript / was auch immer, die mit einer Verbindung unter einem Benutzerkonto mit den erforderlichen Berechtigungen ausgeführt wird, um Tabellen, Ansichten, Prozeduren usw. zu ändern.
Tags und Links code-first-migrations mysql database database-migration doctrine