Eine Sache, die ich bei der Verwendung einer Objektdatenbank wie db4o immer wieder sehr verwirrend fand, ist, wie Sie komplexe Migrationen handhaben sollen, die normalerweise von SQL/PL-SQL gehandhabt werden.Umgang mit Datenpflege in Objektdatenbanken wie db4o
Stellen Sie sich zum Beispiel vor, Sie hätten eine Tabelle in einer relationalen Datenbank namens my_users. Ursprünglich hatten Sie eine Spalte namens "full_name", jetzt, da Ihre Software in V2 ist, möchten Sie diese Spalte entfernen, teilen Sie die vollständigen Namen auf ein Leerzeichen und setzen Sie den ersten Teil in eine Spalte namens "first_name" und die zweite in einer Spalte Nachname_name. In SQL würde ich einfach die Spalten "first_name" und "second_name" auffüllen und dann die ursprüngliche Spalte namens "full_name" entfernen.
Wie würde ich das in etwas wie db4o tun? Schreibe ich ein Java-Programm, das nach allen Objekten von User.class sucht, wobei full_name auf null gesetzt wird, während first_name und last_name gesetzt werden? Wenn ich meinen nächsten SVN-Commit mache, wird es keine Feld/Bean-Eigenschaft geben, die full_name entspricht, wäre das ein Problem? Es sieht so aus, als würde ich es in einer Produktionsanwendung verwenden, in der sich mein "Schema" ändert. Ich möchte ein Skript schreiben, um Daten von Version x auf Version x + 1 zu migrieren und dann in Version x + 2 die Eigenschaften, die ich versuche, zu entfernen loswerden für Version x + 1, da ich kein Java-Skript schreiben kann, um Eigenschaften zu ändern, die nicht mehr Teil meines Typs sind.
Es scheint, dass ein Teil des Problems ist, dass ein RDBMS auf Basis eines einfachen String-basierten Namens ohne Berücksichtigung der Groß-/Kleinschreibung löst, in einer Sprache wie Java Typisierung ist komplizierter als diese, Sie können nicht auf a verweisen Eigenschaft, wenn das Getter/Setter/Feld kein Mitglied der zur Laufzeit geladenen Klasse sind, so dass Sie im Grunde 2 Versionen Ihres Codes im selben Skript haben müssen (hmm, benutzerdefinierte Klassenlader klingen wie ein Schmerz), haben Sie die neue Version von Die gespeicherte Klasse gehört zu einem anderen Paket (klingt chaotisch) oder verwendet die Version x + 1 x + 2-Strategie, die ich erwähnt habe (erfordert viel mehr Planung). Vielleicht gibt es eine offensichtliche Lösung, die ich nie aus den db4o-Dokumenten entnommen habe.
Irgendwelche Ideen? Hoffentlich macht das einen Sinn.