Frage Verwalten meiner Datenbank in der Quellcodeverwaltung


Da ich mit einem neuen Datenbankprojekt arbeite (innerhalb von VS2008), und ich nie eine Datenbank von Grund auf neu entwickelt habe, begann ich sofort zu untersuchen, wie man eine Datenbank innerhalb der Quellcodeverwaltung (in diesem Fall Subversion) verwaltet.

Ich habe einige Informationen zu SO gefunden, einschließlich dieses Beitrags: Entwicklungsdatenbanken in mehreren Umgebungen synchron halten. Eine der Antworten im Besonderen wies auf eine Reihe von Links hin, die alle gute, nützliche Informationen enthielten.

Ich habe gelesen Reihe von Posts von K. Scott Allen, die beschreiben, wie er Datenbankänderungen verwaltet. Aus meiner Lektüre (und bitte entschuldigen Sie die Noobishness meiner Frage) scheint es, als ob die Datenbank selbst nie in ein Repository eingecheckt wird. Stattdessen werden Skripts, mit denen die Datenbank erstellt werden kann, zusammen mit Testdaten (die auch aus Skripts aufgefüllt werden) in das Repository eingecheckt. Letztendlich bedeutet dies, dass wenn ein Entwickler seine App testet, diese Skripts, die Teil des Build-Prozesses sind, ausgeführt werden. Dies stellt sicher, dass die Datenbank auf dem neuesten Stand ist, wird aber auch lokal von jedem Entwicklercomputer aus ausgeführt.

Das macht für mich Sinn (wenn ich das wirklich richtig lese). Wenn ich jedoch etwas vermisse, würde ich mich über eine Korrektur oder zusätzliche Anleitung freuen. Außerdem wollte ich noch eine Frage stellen - heißt das auch, dass ich sollte NICHT check in die MDF oder ldf Dateien, die von Visual Studio erstellt werden?

Danke für jede Hilfe und zusätzliche Einblicke. Immer geschätzt.


8
2018-05-05 19:01


Ursprung


Antworten:


Das ist richtig, Sie sollten Skripte einchecken, nicht die Datenbankdatei selbst.

Ich bin kein Fan davon, aus Testdaten zu bauen, es sei denn, die Daten selbst werden die Größe von Daten nachahmen, die die Produktion hat (oder, im Fall von neuen Datenbanken, haben soll). Warum? Weil das Schreiben von Code gegen eine Tabelle mit 100 Datensätzen Ihnen nicht sagt, ob es bei 10.000.000 Datensätzen rechtzeitig ausgeführt wird. Ich habe viel zu viele schlechte Design-Entscheidungen von Leuten getroffen, die denken, dass ein kleiner Datensatz für die Entwicklung in Ordnung ist.

Hier erlauben wir den Entwicklern nicht, eine separate Datenbank auf ihrer Box zu haben (was normalerweise die Größe der Datenbank begrenzt, da sie kein an das SAN angeschlossener Server ist), stattdessen müssen sie gegen die Dev-Datenbank arbeiten, die regelmäßig aktualisiert wird prod (und dann laufen alle neuen Dev-Skripte), um die Daten in der richtigen Größe zu halten. Ich denke, es ist wichtig, dass Ihre dev-Datenbank so gut wie möglich mit der Gerätekonfiguration, der Größe der Datenbank usw. zusammenpasst. Nichts frustrierender als lange Zeit damit zu verbringen, etwas zu entwickeln, das entweder gar nicht funktioniert oder sein muss sofort abgebaut, weil es das System zu sehr verlangsamt.

Ich sprang jetzt von meiner Seifenkiste herunter.


6
2018-05-05 19:36



Das Einchecken von Skripts ist eine gute Idee, da die Quellcodeverwaltung am besten für die Arbeit mit Textdateien und nicht für Binärdateien geeignet ist. Unterschiede in den Skriptdateien können einfach als Teil der restlichen Codeänderungen im Zusammenhang mit der Datenbankänderung überprüft werden. Zusätzlich zum Einchecken der Datenbankskripts checken wir auch einen Datenbankschema-Snapshot ein. Mit diesem Datenbankschema-Snapshot können wir überprüfen, ob das Schema in der Produktion mit dem erwarteten Schema für die jeweilige Version des Produkts übereinstimmt. Außerdem ist der Snapshot des Datenbankschemas ein praktischer Weg, um mit einem einfachen Texteditor nach Spalten und Tabellen zu suchen.


2
2018-05-06 00:34



Ich benutze DataConstructor, bin aber voreingenommen, weil ich es geschrieben habe.


1
2018-05-05 19:22



Versuchen Sie SQL Examiner: Wie Sie Ihre Datenbank unter Versionskontrolle halten


0
2018-05-12 14:36



Du könntest ein Werkzeug wie verwenden Liquibase um die Datenbankskripte zu verwalten. Es ist wirklich ein Datenbank-Upgrade-Framework, damit es die bereits ausgeführten Schritte nachverfolgen kann. Wenn Sie beispielsweise die Produktion aktualisieren möchten, werden nur die neuen Schritte ausgeführt.


0
2017-10-09 16:00