Martin Fowler schrieb meinen Lieblingsartikel zum Thema, http://martinfowler.com/articles/evodb.html. Ich entscheide mich dagegen, Schema-Dumps unter Versionskontrolle zu stellen, wie es alumb und andere vorschlagen, weil ich einen einfachen Weg möchte, um meine Produktionsdatenbank zu aktualisieren.
Für eine Webanwendung, bei der ich eine einzelne Produktionsdatenbankinstanz haben werde, verwende ich zwei Techniken:
Datenbank-Upgrade-Skripte
Eine Sequenz von Datenbank-Upgrade-Skripten, die das DDL enthalten, das erforderlich ist, um das Schema von Version N auf N+1 zu verschieben. (Diese werden in Ihrem Versionskontrollsystem abgelegt.) Eine _version_history_ Tabelle, etwas wie
create table VersionHistory (
Version int primary key,
UpgradeStart datetime not null,
UpgradeEnd datetime
);
erhält jedes Mal einen neuen Eintrag, wenn ein Upgrade-Skript ausgeführt wird, das der neuen Version entspricht.
Dies stellt sicher, dass es einfach ist zu erkennen, welche Version des Datenbankschemas existiert und dass Datenbank-Upgrade-Skripte nur einmal ausgeführt werden. Nochmals, dies sind keine Datenbankdumps. Vielmehr repräsentiert jedes Skript die Änderungen, die erforderlich sind, um von einer Version zur nächsten zu gelangen. Es sind die Skripte, die Sie auf Ihre Produktionsdatenbank anwenden, um sie zu "aktualisieren".
Entwickler-Sandbox-Synchronisierung
- Ein Skript zum Sichern, Säubern und Verkleinern einer Produktionsdatenbank. Führen Sie dies nach jedem Upgrade in die Produktions-DB aus.
- Ein Skript zum Wiederherstellen (und Anpassen, falls erforderlich) des Backups auf dem Entwicklungsrechner. Jeder Entwickler führt dieses Skript nach jedem Upgrade auf die Produktionsdatenbank aus.
Eine Einschränkung: Meine automatisierten Tests laufen gegen eine schema-korrekte, aber leere Datenbank, sodass dieser Ratschlag nicht perfekt für Ihre Anforderungen geeignet ist.