it-swarm.com.de

Wie kann eine Gruppe Änderungen am Datenbankschema verfolgen?

Welche Versionskontrollmethoden helfen Teams von Personen, Änderungen des Datenbankschemas zu verfolgen?

68
Toby

vor ein paar Minuten habe ich Folgendes überprüft: Eine Tabelle, die in allen Projekten mit einer Datenbank vorhanden sein sollte , scheint einfach genug zu sein, um sie in die Praxis umzusetzen.

Es heißt schema_version (oder Migrationen oder was auch immer zu Ihnen passt) und dient dazu, strukturelle oder Datenänderungen an der Datenbank zu verfolgen. Eine mögliche Struktur (Beispiel in MySQL) ist:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

in schema_version (key, extra) Werte einfügen ('001', 'schema version');

Ob Sie diese Tabelle von Anfang an oder kurz nach der Bereitstellung der ersten Version auf einem Staging- oder Produktionsserver hinzufügen, liegt ganz bei Ihnen.

Wenn Sie ein SQL-Skript ausführen müssen, um die Datenbankstruktur zu ändern oder eine Datenmigration durchzuführen, sollten Sie dieser Tabelle auch eine Zeile hinzufügen. Führen Sie dies über eine Einfügeanweisung am Anfang oder Ende des Skripts aus (das in das Code-Repository des Projekts übernommen wird).

45
eiefai

Ich denke, die beste Methode ist es, die Datenbank als Teil Ihres Build-Prozesses zu generieren . Behalten Sie alle Skripte in der Quellcodeverwaltung mit dem Rest des Codes, und jeder ist für seine eigenen Umgebungen verantwortlich.

Andernfalls verfügt RedGate über ein Tool zum Integrieren der Quellcodeverwaltung in SSMS und SQL Compare ist nützlich zum Vergleichen/Synchronisieren von MS SQL Server-Schemas. Visual Studio Database Edition verfügt außerdem über ein integriertes Schema-Vergleichstool .

Eine andere SO Frage führe mich zu Migrator Dot Net , die ich in meiner ausgiebigen Freizeit untersuchen werde. Es sieht nach einer guten Methode aus, ist aber möglicherweise eher eine Zeit-/Gemeinkosteninvestition, als Sie bereit sind, zu tätigen.

23
Larry Smithmier

eiefai bereits erwähnt Eine Tabelle, die in allen Projekten mit einer Datenbank vorhanden sein sollte . Dies ist ein großartiger Blog-Beitrag, aber IMO ist nur ein Teil des Weges zu einer funktionierenden Lösung für die Kontrolle von Datenbankrevisionen. Ich denke, jeder Versuch, diese Frage in der realen Welt zu "beantworten", muss einige der anderen Informationen über VCS und Datenbanken berücksichtigen:

12
TML

Ich denke, es gibt verschiedene Blickwinkel, um sich dieser Frage zu nähern. Ich glaube, der "Tool-First" -Winkel wird je nach Plattform und persönlichen Vorlieben variieren. Ein typisches Beispiel: Ich verwende ein Datenbankprojekt in MS Visual Studio, bin mir jedoch nicht sicher, ob dies eine großartige Lösung für MySQL ist. Ich kenne auch Leute von Redgate, Erwin, Embarcadero usw., die ihre Lieblingswerkzeuge ziemlich gut verkaufen.

Es gibt auch einen "Prozess-zuerst" -Winkel für diese Frage, der (hoffentlich) in nachfolgenden Fragen auf dieser Site erneut behandelt wird. Die Grundpfeiler in diesem Prozess sind die Quellcodeverwaltung Ihres Schemas und die Verwaltung von Änderungen, sodass Sie Schemaänderungen von Version "x" auf Version "y" praktisch nach Bedarf anwenden können.

Eine endgültige Antwort auf dieses Thema wird am Ende wie ein Buch aussehen, daher lohnt es sich wahrscheinlich, zunächst auf eines zu verweisen: Redgate hat kürzlich ein kostenloses eBook mit dem Titel " The Red Gate Guide to SQL Server Team-based" veröffentlicht Entwicklung ", und obwohl es viel zu diskutieren gibt, ist es ein ziemlich guter Ort, um mit der Debatte zu beginnen, IMO. Im Gegensatz zum Namen ist ein Großteil des Materials in diesem Buch allgemein genug, um auf jede Datenbank (nicht nur SQL Server) und jeden Tool-Set (nicht nur Redgate) angewendet zu werden. Wenn Sie dies noch nicht gesehen haben, ist es zumindest einen Blick wert.

Schließlich lohnt es sich wahrscheinlich, die "Legacy-Antwort" von stackoverflow zu verlinken.

8
D. Lambert

SchemaCrawler ist mein Tool zum Erstellen einer Textdatei mit allen Datenbankschemaobjekten. Ich habe diese Textausgabe so gestaltet, dass sie sowohl für Menschen lesbar als auch gegen ähnliche Ausgaben von einem anderen Server abweichbar ist.

In der Praxis habe ich festgestellt, dass die Ausgabe einer Textdatei des Datenbankschemas nützlich ist, wenn dies als Teil des Builds erfolgt. Auf diese Weise können Sie die Textdatei in Ihr Quellcodeverwaltungssystem einchecken und einen Versionsverlauf darüber erhalten, wie sich Ihr Schema im Laufe der Zeit entwickelt hat. SchemaCrawler wurde entwickelt, um dies auch über die Befehlszeile zu automatisieren.

5
Sualeh Fatehi