Bei uns ist das so gelöst + das klappt gut:
- Es gibt in der Software eine Konstante DB_VERSION, zB 12
- Es gibt weiter eine Klasse, die Änderungsscripts auf die
DB loslassen kann. Die Änderungsscripts sind an eine
DB-Version gebunden + vergleichen diese Version mit der Konstanten. So kann die Klasse erkennen, welche Scripts ausgeführt werden müssen und schreiben die
DB Version in die Datenbank. An der Stelle können auch Datenänderungen durchgeführt werden, wenn nötig. Weil die Klasse zusätzlich auch eine Info in der
DB ablegt, kann man sich dann versionsbezogen eine History ansehen.
- Über die DB_VERSION kann der Client abgleichen, ob die
DB-Version der
DB mit seiner eigenen übereinstimmt. Wenn nicht --> Meldung bzw Ende.
- In Multiuser-Umgebung funktioniert das auch - der erste Client updatet die
DB, uns für die anderen passt es dann schon.
- Bei der Auslieferung der Software stimmten die beiden
DB Versionen natürlich überein + ab dann funktioniert obiges Schema.
Aurelius hat einen automatischen Strukturabgleich, aber der ergänzt nur + löscht keine Felder bzw migriert Daten.
Und: Wir haben da gleiche Schema auch für reine Datenänderungen ohne Strukturänderungen (zB Umkodieren etc). Alles, was nur 1x gemacht werden soll, kann so abgebildet werden.