Kompatible Datenbanken
-
Hallo,
ich schreibe an einem Projekt, wo die Daten sich im Laufe der Zeit ändern und damit auch das Schema.
Ich habe eine SQLite und eine XML-Datenbank in Betracht gezogen. Wie gehe ich am besten mit neuen optionallen Parametern um? Wie erreiche ich maximale Kompatibilität?
-
Hallo,
Relationale Datenbanken sind so starr, dass es in der heutigen Zeit einfach nur noch weh tut, damit zu arbeiten. Aber was hat man schon für eine Alternative.
Ich vermute mal Du sprichst von einer Desktop-Anwendung. Im Web gibt es das Problem ja eher nicht.
Derzeit gehe ich bei einem Upgrade, den die Kunden selbständig vornehmen so vor:
Es gibt ein Tool ("Updater"), welches erstmal schaut, ob eine Vorgängerversion existiert. Falls ja wird ein Backup der Datenbank (eine Datei, Firebird) angelegt, die alte Version der Software deinstalliert und danach die neue installiert. Danach wird die Datenbank in das Datenverzeichnis der frischen Anwendung verschoben.Beim Start prüft meine Software die Datenbank auf ihre Version. Hat ein Update stattgefunden, d.h. stimmen Version von Software und Datenbank nicht mehr überein, wird das Datenschema mit der SQL Data Definition Language erweitert, evtl. Defaultwerte für neue Felder eingetragen und sonstige Anpassungen vorgenommen.
Ein Upgrade ist somit, arbeitsaufwändig, nervig, langweilig zu implementieren aber doch relativ einfach möglich. Ein Downgrade wird nicht unterstützt.
Seit dem Umstieg (in neuen Programmen) auf NHibernate als Objekt-Relationalen-Mapper steht prinzipiell eine vollautomatische Anpassung des Datenschemas zur Verfügung. Bisher musste ich es noch nicht einsetzen aber ein paar Tests sehen vielversprechend aus. Mit einem Methodenaufruf wird das Datenschema angepasst und vorgegebene Defaultwerte eingetragen.
-
µ schrieb:
Seit dem Umstieg (in neuen Programmen) auf NHibernate als Objekt-Relationalen-Mapper steht prinzipiell eine vollautomatische Anpassung des Datenschemas zur Verfügung. Bisher musste ich es noch nicht einsetzen aber ein paar Tests sehen vielversprechend aus. Mit einem Methodenaufruf wird das Datenschema angepasst und vorgegebene Defaultwerte eingetragen.
Naja, das funktioniert auch nicht in allen Fällen.
Wenn neue Felder dazukommen die triviale Defaults haben, OK. Wenn Felder wegkommen ist es natürlich auch kein Problem.
Aber was wenn Felder sich verändern?
Bzw. sich grundlegend am Schema was ändert, also z.B. Objekt-Typen in mehrere Objekte zerfallen, oder vereinheitlicht werden oder...Klar, ein Framework kann einem die lästigen Routinearbeiten abnehmen. Die "bitte Hirn einschalten" Arbeiten werden aber vermutlich bleiben. Vielleicht einfacher zum Implementieren, aber das Kopfweh bleibt vermutlich.