私は多くの Delphi アプリケーションに取り組んでおり、新しいバージョンがリリースされたときや、ユーザーが追加モジュールをインストールすることを選択したときに、現場で独自のデータベース構造をアップグレードする必要があります。アプリケーションはさまざまな組み込みデータベースを使用しています (現在 DBISAM と Jet ですが、これは変更される可能性があります)。
過去に、各テーブルに格納できるユーザー バージョン番号を使用して、DBISAM でこれを実行しました。追加の空のデータベース ファイル セットを出荷し、起動時に FieldDefs を使用して各テーブルのバージョン番号を比較し、必要に応じてインストールされたテーブルを更新しました。これはうまくいきましたが、データベースの予備のコピーを出荷しなければならないのは不器用であることがわかりました。新しいバージョンの DBISAM ではテーブルの再構築方法が変更されているため、とにかくこれを書き直す必要があります。
これを実装する方法は 2 つあります。データベースにバージョン番号を格納する方法と、DDL スクリプトを使用して古いバージョンから新しいバージョンに移行する方法と、データベース構造の参照バージョンをアプリケーション内に格納して、開始時にデータベースへの参照を比較する方法です。アップし、アプリケーションで DDL コマンドを生成してデータベースをアップグレードします。
おそらく両方の部分を実装する必要があると思います。アプリケーションが起動するたびに (遅すぎる) データベースを参照構造と比較したくないので、ユーザーが古い構造を使用しているかどうかを検出するために、データベース構造のバージョン番号が必要です。ただし、データベースが過去に部分的に更新された可能性がある場合、またはユーザー自身がデータベース構造を変更した可能性がある場合、事前に作成されたスクリプトを使用して構造をアップグレードできるかどうかはわかりません。実際の更新については diff を参照してください。
質問を調査すると、データベースのバージョン管理ツールがいくつか見つかりましたが、それらはすべて SQL Server を対象としており、実際のアプリケーションの外部に実装されているようです。アプリケーションに緊密に統合され、さまざまなデータベース要件に適応できるプロセスを探しています (さまざまな DDL の違いを処理するために、アダプター、カスタム子孫クラス、またはイベント コードを作成する必要があることはわかっています)。データベース、それは私を悩ませません)。
これを行う、またはそれを失敗させる既製のものを知っている人はいますか?
ジェネリック リレーショナル データベース構造の参照バージョンをアプリケーション内に格納する最良の方法。
参照を実際のデータベースと比較する最良の方法。
データベースを更新するための DDL を生成する最良の方法。