10. März 2023

Zwei Ansätze zur Datenbankversionskontrolle: Statusbasiert vs. Migrationsbasiert

Mit dynamischen Geschäftsanforderungen Schritt zu halten, ist eine große Herausforderung für moderne Datenbanken. Die wichtigste Anforderung besteht darin, die regelmäßige Aktualisierung der Datenbank sicherzustellen und gleichzeitig alle Daten zu erhalten. Ein gut geplanter Ansatz für die Datenbankentwicklung und -bereitstellung über zustandsbasierte oder migrationsbasierte Techniken kann eine Lösung bieten. Es ist jedoch wichtig, beide Ansätze gründlich zu verstehen, um festzustellen, welcher für Ihre spezifischen Anforderungen am besten geeignet ist.

Die Bedeutung der Datenbankaktualisierung als eigenständige Herausforderung

Die Verwaltung von Datenbanken erfordert ein ständiges Bewusstsein für die beiden unterschiedlichen Elemente, aus denen eine Datenbank besteht: die Daten, die sie speichert, und die Struktur, die zum Organisieren dieser Daten verwendet wird. Das Aktualisieren einer Datenbank erfordert eine sorgfältige Berücksichtigung mehrerer Faktoren.

Eine Datenbank besteht aus der Tabellenstruktur, dem Code in gespeicherten Prozeduren, den in diesen Tabellen gespeicherten Daten und den Wechselbeziehungen zwischen den Datenbankobjekten. Dies stellt komplexere Herausforderungen bei der Umsetzung von Änderungen dar. Die Synchronisierung ist ebenfalls entscheidend, insbesondere wenn mehrere Entwickler an demselben Objekt innerhalb der Datenbank arbeiten. Es ist wichtig, alle Geschäftsdaten und den gesamten Datenbankcode aufzubewahren und sicherzustellen, dass die Daten nach Aktualisierungen sicher bleiben.

Im Gegensatz zum Anwendungscode kann die Datenbank nicht aktualisiert werden, indem einfach die alte Version gelöscht und durch eine neue ersetzt wird. Glücklicherweise gibt es bereits getestete und zugelassene Methoden, um diese Herausforderungen anzugehen: zustandsbasierte und migrationsbasierte Datenbankbereitstellungsmodelle. Als Datenbankentwickler werden Sie je nach den Anforderungen Ihres Projekts wahrscheinlich beide Methoden verwenden.

Grundlegendes zur zustandsbasierten Datenbankbereitstellung

Bei der zustandsbasierten Datenbankbereitstellung wird das Datenbankschema in einem idealen Endzustand im Code-Repository gespeichert. Dieser Ansatz wurde von Microsoft populär gemacht und in seiner Visual Studio-Lösung implementiert.

Die Idee hinter der zustandsbasierten Bereitstellung ist einfach: Es wird eine Momentaufnahme der idealen Datenbankstruktur aufbewahrt, und das tatsächliche Datenbankprojekt wird so bearbeitet, dass es diesem Ideal entspricht. Alle Datenbankobjekte wie Tabellen, Ansichten, gespeicherte Prozeduren, Funktionen, Trigger und andere werden in ihrer endgültigen Form als zustandsbasierte Skripte in separaten SQL-Dateien gespeichert.

Wenn Datenbankentwickler das Datenbankschema aktualisieren müssen, stellen sie es auf dem lokalen Server bereit und nehmen die erforderlichen Änderungen vor. Das Vergleichstool generiert dann Skripte, um die tatsächliche Datenbank mit der idealen Datenbank zu synchronisieren. Schließlich lädt das Versionskontrollsystem diese Änderungen auf den Server hoch.

Änderungen in der zustandsbasierten Datenbankbereitstellung werden nacheinander implementiert, von niedrigeren zu höheren Umgebungen, z. B. von der Entwicklung zum Testen und dann zur Produktion.

Die zustandsbasierte Datenbankbereitstellung hat mehrere Vorteile, darunter die Möglichkeit, das Datenbankschema in der Quellcodeverwaltung zu speichern, um den Datenbankzustand einfach zu überwachen, Kompilierzeitfehler in SQL-Dateien sofort zu erkennen und die Notwendigkeit zu vermeiden, mehrere Skripts für dieselbe Entität zu erstellen . Darüber hinaus können alle an der Datenbank bereitgestellten Änderungen einfach überwacht und verwaltet werden, und spezielle Tools können automatisch ALTER-Skripte generieren und ausführen.

Der zustandsbasierte Ansatz hat jedoch auch einige Nachteile, z. B. die Notwendigkeit, für jede neue Umgebung ein neues Skript zu generieren, und die Unfähigkeit, Änderungen automatisch rückgängig zu machen, was Probleme für automatisierte Prozesse verursachen kann.

Der zustandsbasierte Ansatz ist die Standardwahl für die Entwicklung neuer Projekte, von den Anfangsphasen bis zum letzten Schritt der Freigabe der Anwendung für den Produktionsbereich.

Grundlegendes zur migrationsbasierten Datenbankbereitstellung

Die migrationsbasierte Datenbankbereitstellung funktioniert anders als der zustandsbasierte Ansatz. Anstatt einen einzelnen Snapshot einer idealen Datenbank zu haben, verwendet die migrationsbasierte Bereitstellung eine Sammlung von Migrationsskripten, die die tatsächliche Datenbank von einer Version auf eine andere übertragen.

Jedes Migrationsskript wird mit einer speziellen DDL-Anweisung und einer inkrementellen Versionsnummer erstellt, und alle Migrationsskripts werden im Repository gespeichert. Um eine Datenbank zu aktualisieren, müssen die Migrationsskripte in der richtigen Reihenfolge ausgeführt werden.

Der migrationsbasierte Ansatz wird häufig zum Testen von Datenbanken, zum Aktualisieren von Datenbanken mit neuen Funktionen und Verbesserungen oder zum Erstellen einer Datenbank aus Skripten verwendet, die im zustandsbasierten Ansatz verwendet werden. Viele Entwickler bevorzugen den migrationsbasierten Ansatz, da er eine schnellere Aufgabenerledigung und eine schnellere Skriptbereitstellung ermöglicht. Das manuelle Erstellen von Migrationsskripten kann jedoch zeitaufwändig sein.

Zu den Vorteilen der migrationsbasierten Bereitstellung gehören die Möglichkeit, sowohl das Datenbankschema als auch die Daten gleichzeitig zu ändern, eine bessere Ausrichtung an Best Practices von DevOps, die Ausführung desselben Codes in allen Umgebungen, bessere Funktionstests und -kontrolle sowie die Möglichkeit, Migrationsskripts in der Programmierung zu schreiben andere Sprachen als SQL.

Der migrationsbasierte Ansatz hat jedoch auch einige Nachteile, darunter die Notwendigkeit für Entwickler, den gesamten Migrationscode manuell zu schreiben, das Risiko, dass Code bei Synchronisierungsfehlern durch Änderungen anderer Entwickler überschrieben wird, und Ineffizienz bei der Arbeit mit gespeicherten Prozeduren und Funktionen.

Insgesamt wird der migrationsbasierte Ansatz in der Regel für vorhandene Datenbanken verwendet, die im Laufe der Zeit aktualisiert und erweitert werden müssen, wobei Änderungen über Migrationsskripts bereitgestellt werden.

Vergleich der zustandsbasierten und migrationsbasierten Datenbankbereitstellung

Der Hauptunterschied zwischen der zustandsbasierten und der migrationsbasierten Datenbankbereitstellung ist die Quelle der Wahrheit: die ideale Datenbank oder die zum Aktualisieren der Datenbank verwendeten Skripts. Die Wahl zwischen diesen Ansätzen hängt von den spezifischen Projektanforderungen und Überlegungen ab.

Einige Entwickler bevorzugen den zustandsbasierten Ansatz wegen seiner zuverlässigen Tests und Unveränderlichkeit, während sich andere für den migrationsbasierten Ansatz entscheiden, weil er für Bereitstellungsherausforderungen geeignet ist. Das manuelle Schreiben von Upgrade-Skripten kann jedoch eine komplizierte und zeitaufwändige Aufgabe sein.

Die zustandsbasierte Bereitstellung kann in 95 % der Fälle computergenerierte Upgrade-Skripts verwenden, während die migrationsbasierte Bereitstellung in den meisten Fällen benutzerdefinierte Anweisungen erfordert. Darüber hinaus kann die zustandsbasierte Bereitstellung es Teams erleichtern, an komplizierten Datenbanken mit ausgeklügelten Abhängigkeiten zu arbeiten.

In der folgenden Vergleichstabelle finden Sie weitere wichtige Unterschiede zwischen diesen beiden Ansätzen:

Datenbankentwickler müssen normalerweise sowohl zustandsbasierte als auch migrationsbasierte Ansätze verwenden. Zustandsbasiert eignet sich gut für sich entwickelnde Systeme in den frühen Phasen eines Projekts, während migrationsbasiert besser für eingeführte Systeme geeignet ist, die Updates und Verbesserungen erfordern. Zustandsbasiert ist ideal für neue Projekte oder die Wartung von Systemen mit seltenen Änderungen, während migrationsbasiert eine bessere Kontrolle über Änderungen und Möglichkeiten der Zusammenarbeit bietet. Die Wahl hängt von den Projektanforderungen ab und Entwickler sollten beide Ansätze beherrschen.

Aktualisieren der Datenbank mit Devart dbForge SQL-Tools

Devart bietet eine Reihe von dedizierten Tools, die Entwicklern helfen, verschiedene Aufgaben im Zusammenhang mit Datenbanken auszuführen, einschließlich Datenbank-Änderungsmanagement. Die Verwendung spezialisierter Tools ist entscheidend, um die Aktualisierung von Datenbanken zu automatisieren und zu vereinfachen, da die Anzahl der Releases und Updates zunimmt.

Die Quellcodeverwaltung von Devart für SQL Server, ein beliebtes Add-In für SSMS, ist eine wertvolle Komponente in der DevOps-Automatisierung, die SQL Server-Entwicklern Funktionen zur Datenbankversionskontrolle bietet. Dieses Tool arbeitet im zustandsbasierten Modus und ermöglicht es Benutzern, Änderungen einfach zu verfolgen und zu vergleichen, Datenbankversionen zu synchronisieren und Änderungen bei Bedarf rückgängig zu machen. Es bietet auch viele andere nützliche Optionen.

Wenn Ihr Projekt eine migrationsbasierte Bereitstellung erfordert, ist Schema Compare for SQL Server von Devart ein weiteres hilfreiches Tool. Es ermöglicht Entwicklern, Datenbankschemata zwischen verschiedenen SQL Server-Datenbanken und -Skripten zu vergleichen und zu synchronisieren. Dieses Tool kann Upgrade-Skripts generieren, sodass Migrationsskripts nicht mehr manuell geschrieben werden müssen.

Unabhängig von Ihrem Datenbankbereitstellungsmodell können Sie durch die Automatisierung von Routineaufgaben Zeit und Mühe sparen. Glücklicherweise sind die dbForge SQL-Tools von Devart verfügbar, um Ihnen alle notwendigen Funktionen zur Automatisierung datenbankbezogener Aufgaben bereitzustellen. Unabhängig davon, ob Sie eine zustandsbasierte oder migrationsbasierte Bereitstellung durchführen müssen, die Tools von Devart können Ihnen dabei helfen, Aufgaben wie Versionskontrolle, Schemavergleich und Synchronisierung zu automatisieren, sodass Sie den Datenbankaktualisierungsprozess rationalisieren und effizienter arbeiten können.

Fazit

Zusammenfassend sind sowohl zustandsbasierte als auch migrationsbasierte Ansätze für die Datenbankbereitstellung unerlässlich, und ihre Auswahl hängt von den spezifischen Projektanforderungen ab. Während State-based für die Entwicklung neuer Projekte geeignet ist, ist Migrations-based für vorhandene Datenbankaktualisierungen und -erweiterungen vorzuziehen.

Unabhängig vom Ansatz kann die Automatisierung von Routineaufgaben mit spezialisierten Tools wie dbForge SQL Tools Datenbankentwicklern Zeit und Mühe sparen. Diese Tools bieten die erforderlichen Funktionen für das Datenbankänderungsmanagement, die Versionskontrolle, den Schemavergleich und die Synchronisierung.

Mit einer voll funktionsfähigen kostenlosen Testversion von dbForge SQL Tools können Entwickler die Leistungsfähigkeit der Tools bewerten und das für ihre Datenbankbereitstellungsanforderungen am besten geeignete auswählen.

Technologie

Über den Autor 

Peter Hatsch


{"email": "E-Mail-Adresse ungültig", "url": "Website-Adresse ungültig", "erforderlich": "Erforderliches Feld fehlt"}