6 Stimmen

Wie lässt sich die Datenbankstruktur in einer Webanwendung auf dem neuesten Stand halten?

Wenn sich Ihre Daten nach der Bereitstellung der Anwendung ändern, wie halten Sie dann die Datenbank auf dem neuesten Stand?

Ich meine, Sie können Tabellen hinzufügen oder entfernen, das ist eine einfache Aufgabe. Auch das Ändern einer bestehenden Tabelle kann trivial sein. Aber wenn Sie die Struktur häufig ändern, wie halten Sie das unter Kontrolle?

Früher habe ich eine Tabelle mit der aktuellen Datenbankversion in der Datenbank geführt. Dann war jedes Upgrade eine SQL-Datei, die ihre Arbeit machte - eine neue Tabelle erstellen, eine Spalte hinzufügen oder die Daten verschieben. Die Dateien wurden nach diesen Versionen benannt - wenn also mein Upgrade-Skript die Datenbankversion 10 erhielt, nahm es einfach alle Dateien von 11.sql bis N.sql und wendete jede einzelne davon an, wobei es die Datenbankversionsnummer gleichzeitig erhöhte.

Das scheint ganz gut zu funktionieren, aber ich frage mich, was ist Ihre Strategie für solche Aufgaben?
Außerdem scheint dieses System nicht perfekt zu sein, wenn ich eine Tabelle in einem "Patch" normalisiere und sie danach aus irgendwelchen Gründen wieder denormalisiere. Dann wird es zweimal gemacht.

Aber jedes Mal, wenn ich etwas ändere, ein komplettes Upgrade-Skript zu schreiben, scheint mühsam und fehleranfällig zu sein. Zumindest mehr als solche atomaren Änderungen.

Außerdem kann ich davon ausgehen, dass verschiedene Kunden zu jeder Zeit unterschiedliche Datenbankversionen verwenden, so dass ich wirklich eine Möglichkeit haben sollte, von jedem Punkt aus aufzusteigen.

0 Stimmen

Diese Frage ist sehr ähnlich: stackoverflow.com/questions/308/

1voto

MikeJ Punkte 14301

Sie sollten vielleicht den Artikel lesen, den Atwood vor einiger Zeit über DB-Versionskontrolle auf Coding Horror geschrieben hat: Ist Ihre Datenbank unter Versionskontrolle?

0voto

Wim Punkte 11852

Verwenden Sie ein Tool wie SQLCompare von RedGate oder xSQL Object von xSQL Software, um Ihre T-SQL-Skripte für den Vergleich bzw. das Delta zu erstellen.

Wenn Sie möchten, können Sie es sogar in Ihren Build-Prozess integrieren.

Für verschiedene Kunden mit unterschiedlichen Datenbanken haben Sie einfach verschiedene Referenzdatenbanken, mit denen Sie sie vergleichen. Sobald Sie ein Update für einen Kunden freigeben, aktualisieren Sie Ihre eigene Referenzseite mit demselben Diff-Skript.

Das ist es in Kürze.

0voto

Damo Punkte 11210

Ich mache es fast genauso wie Sie. Ich führe eine Datei mit Versionshinweisen in der Datenbank, in der alle Änderungen aufgelistet sind, wobei die jüngste mit der Subversion-Revisionsnummer an erster Stelle steht. Sie enthält auch das SQL, das zur Anwendung dieser Änderung ausgeführt wurde.

Parallel dazu pflege ich ein Datenbankmodell (ich verwende Azzurri-Ton in Eclipse), so dass ich mein Modell jederzeit neu generieren kann. Alle erforderlichen Änderungen nehme ich zunächst am Modell vor und aktualisiere dann meine Versionshinweise. Azzurri kann allerdings keine ALTERations erzeugen, sondern nur CREATEs.

Das alles ist unter Subversion gespeichert, so dass ich bei Bedarf ein Rollback durchführen kann. Ich sollte wahrscheinlich eine Art von Link zwischen der svn Revision meiner App und der Revision meines Modells halten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X