Jedną z rzeczy, które ciągle uważam za bardzo mylące w używaniu bazy danych obiektów takich jak db4o jest sposób obsługi złożonych migracji, które normalnie byłyby obsługiwane przez SQL/PL-SQL.Obsługa przechowywania danych w bazach danych obiektów takich jak db4o
Na przykład wyobraź sobie, że masz tabelę w relacyjnej bazie danych o nazwie my_users. Oryginalnie miałeś kolumnę o nazwie "full_name", teraz, gdy twoje oprogramowanie jest w wersji V2, chcesz usunąć tę kolumnę, podzielić pełne nazwy na puste miejsce i umieścić pierwszą część w kolumnie o nazwie "first_name", a drugą w kolumnie o nazwie last_name. W SQL po prostu wstawiłbym kolumny "first_name" i "second_name", a następnie usunąłem oryginalną kolumnę o nazwie "full_name".
Jak to zrobić w coś w stylu db4o? Czy piszę program w Javie, który skrypty wyszukują wszystkie obiekty User.class, ustawiając full_name na null podczas ustawiania first_name i last_name? Kiedy wykonuję następną komendę svn commit, nie będzie właściwości field/bean odpowiadającej full_name, czy byłby to problem? Wygląda na to, że używając go w aplikacji produkcyjnej, gdzie mój "schemat" się zmienia, chciałbym napisać skrypt do migracji danych z wersji x do wersji x + 1, a następnie w wersji x + 2 faktycznie usunąć właściwości, które próbuję pozbyć się wersji x + 1, ponieważ nie mogę napisać skryptu Java, aby zmodyfikować właściwości, które nie są już częścią mojego typu.
Wydaje się, że częścią problemu jest to, że RDBMS postanawia co obiekt, który powołując się na podstawie niewrażliwego nazwy strun opartych na prostym przypadku, w języku, jak wpisywanie Java jest bardziej skomplikowana, niż to, że nie może odnosić się do własność, jeśli getter/setter/field nie jest członkiem klasy załadowanej w środowisku wykonawczym, więc zasadniczo musisz mieć 2 wersje kodu w tym samym skrypcie (hmm, niestandardowe programy ładujące klasy brzmią jak ból), mieć nową wersję twojego przechowywane klasy należą do innej paczki (brzmi niechlujnie), lub użyj strategii x + 1 x + 2, o której wspomniałem (wymaga o wiele więcej planowania). Być może jest jakieś oczywiste rozwiązanie, którego nigdy nie udało mi się zebrać z dokumentów db4o.
Wszelkie pomysły? Mam nadzieję, że ma to jakiś sens.