9

あちこちの記事をいくつか読んだ後、開発チームにおけるデータベースのバージョン管理が実際に非常に重要であることに気付きました。

これまでdump whole database、更新があるたびに単純なものを使用してきました.1つのテーブルのみが変更された場合、単一のテーブルをダンプしてから再インポートするだけで済む場合があります. 最高ではありませんが、追加の変更については非常にうまく機能しており、まだ問題はありません.

ここで、.mwb (Mysql Workbench diagram)作業中のプロジェクトの git リポジトリにファイルを保存します。次に、git と一緒にdbv forも使用しますschema management。各ブランチはプロジェクトに基づいて名前が付けられており、非常にうまく機能しています。これにより、元に戻すまたはロールバックする機能を使用して回路図の変更をバージョン管理できます。

ただし、テーブルに含まれるデータはどうでしょうか。これはどのように維持できますか?たぶん、私は古い方法に固執する方が良いでしょう。DB 構造が同じでデータが異なるプロジェクトについては理解していますが、バージョン管理と管理が必要な特定のデータベース データを含むサイトについてはどうでしょうか。

また、データベースの変更が必要な既に展開されているサイトのベースについてはどうでしょうか。これをシームレスにするにはどうすればよいでしょうか。update/alter スクリプトの使用を提案する人もいますが、これはデフォルト値などで問題なく動作します。しかし、すべての Web サイト データベースを変更する必要がある Web サイト プラットフォームに変更を加え、データをそのまま維持した場合はどうなるでしょうか。

4

2 に答える 2

0

コード バージョンに同期されたデータモデルでトランザクションのジャーナルを保持する必要があります。情報 (つまり、新しいフィールド) を追加する更新ごとに、'ALTER TABLE x ADD COLUMN y ...' のようなステートメントを入力し、更新スクリプトで (おそらく関数を使用して) DEFAULT VALUE を指定するだけです。そして、ダウンデート スクリプトの「ALTER TABLE x REMOVE COLUMN y ...」。テーブル内の情報を切り捨てる前に、データをエクスポートする必要があります。これらを使用して不足している情報を追加できるように、ダンプされたテーブル データを逆トランザクション用の SQL に変換できます。

データモデル内で「ジャーナル」テーブルを使用して、適用されたスクリプトを示す単純な序数を使用してこれらのトランザクションを追跡できます。ソフトウェアがインストールされるたびに、これらの数値を比較して、データを失うことなくデータベースを状態 N から状態 X に前後に移動するために再生するトランザクションのリストを作成できます。

于 2014-01-21T22:09:55.340 に答える