Also generell sollte eine Applikation seine Datenbank aktualisieren können. Dazu versioniert man das Schema ebenfalls und hat dann idealerweise Changescripts, die eine Datenbank aktualisieren.
Ob die Applikation die Datenbank selbst aktualisiert (Das findet man bei viel Software für die Massen. Da gibt man dann eine Datenbankverbindung an und dann macht die Software alles selbst) oder ob das über eigene Methoden geht, ist dabei erst einmal egal.
Microsoft hat ein Databank Projekt entwickelt (Bestandteil der SQL Server Data Tools), welches Schema Abgleichs durchführen kann und dann automatische Change Scripts erstellt. Aber davon halte ich nicht sehr viel, denn man will oft deutlich mehr, also solche Tools bereit stellen.
Und natürlich muss ein Kunde eine Datenbank nicht ständig neu erzeugen. Das findet einmal statt (Oder wenn er mehrere Instanzen haben will, dann eben mit mehreren Instanzen) und danach wird die Datenbank gepflegt. Wie soll das auch anders gehen. Ich muss nur an gewisse Datenbanken im TB Bereich denken. Das lässt sich nicht mehr so ohne weiteres neu aufsetzen.
Aber nicht desto trotz muss der Entwickler das natürlich aufsetzen können. Und das ist dann auch ein guter Test bei mehreren Entwicklern.
Bei meinen Scripts habe ich:
- Methoden für neue, leere Datenbanken
- Scripts für gewisse Testdaten
- Scripts für produktionsnahe Daten (Helfen beim nachstellen von Problemen).
Und wenn ich etwas brauche, dann ist das sehr schnell erledigt. Generell sind alle Daten in der Sourceverwaltung. Mein Rechner ist nebensächlich. Sprich: Ich habe auch mehrere Entwicklungssysteme: Windows/Linux und zwei Macs. Und wo ich gerade entwickeln will, da reicht ein Abrufen der letzten Version und ich kann loslegen.
Derzeit arbeite ich mit Cuba Studio/Platform, was ich recht interessant finde. Hat auch einige Probleme wie ich meine, aber das ist jetzt nur ein Beispiel: Da werden auch alle Dinge in SQL Scripten angelegt. Man hat mehrere create scripte und dann ganz viele update scripte. Und man kann dann konfigurieren, ob die Updates automatisch eingespielt werden sollen oder manuell. Kann ganz gut sein, wenn man dann einfach eine neue Version deployed und der Rest geht automatisch.
Also Wege gibt es viele und ich würde empfehlen, mit einfachen Create Scripten anzufangen. Und dann Change-Scrite zu pflegen. Die kann man dann am Anfang manuell ausführen. So haben wir auf Arbeit angefangen, ehe wir unseren eigenen DatabaseLoader geschrieben haben.