db4oのようなオブジェクト データベースを使用する際に、私が非常に混乱していることの 1 つは、通常は SQL/PL-SQL によって処理される複雑な移行をどのように処理する必要があるかということです。
たとえば、my_users というリレーショナル データベースにテーブルがあるとします。もともと「full_name」という名前の列がありましたが、ソフトウェアが V2 になったので、この列を削除し、フル ネームを空白スペースで分割し、最初の部分を「first_name」という名前の列に入れ、2 番目の部分を列に入れたいと考えています。 last_name という名前です。SQL では、「first_name」列と「second_name」列にデータを入力してから、「full_name」という名前の元の列を削除します。
db4oのようなものでこれを行うにはどうすればよいですか? User.class のすべてのオブジェクトを検索し、first_name と last_name を設定しながら full_name を null に設定するスクリプトを作成する Java プログラムを作成する必要がありますか? 次の svn commit を行うと、full_name に対応するフィールド/bean-property がなくなりますが、これは問題になりますか? 私の「スキーマ」が変更される本番アプリケーションでそれを使用するように思えますが、バージョン x からバージョン x+1 にデータを移行するスクリプトを作成し、バージョン x+2 で実際にしようとしているプロパティを削除します。タイプの一部ではなくなったプロパティを変更する Java スクリプトを作成できないため、バージョン x+1 では削除してください。
問題の一部は、RDBMS が参照しているオブジェクトを単純な大文字と小文字を区別しない文字列ベースの名前に基づいて解決することのようです。Java のような言語では、型付けはこれよりも複雑です。ゲッターがプロパティを参照できない場合/setter/field は実行時にロードされるクラスのメンバーではないため、基本的に同じスクリプトに 2 つのバージョンのコードを含める必要があります (うーん、カスタム クラスローダーは苦痛のように聞こえます)。新しいバージョンのクラスを格納します。別のパッケージ (ごちゃごちゃしているように聞こえます) を使用するか、前述のバージョン x+1 x+2 戦略を使用します (さらに多くの計画が必要です)。おそらく、db4o ドキュメントから収集したことのない明白な解決策があるでしょう。
何か案は?うまくいけば、これはある程度の意味があります。