データベース内のバージョン制御の一般的なオプションはありますか?
-
18-09-2019 - |
質問
私は開発プロジェクトでSVNを使用した経験が少しありますが、リレーショナルデータベースの経験はほとんどありません。私はテーブルやSQLステートメントなどの基本的な概念を知っていますが、私は専門家ではありません。
私が知りたいのは、SVNのような一般的なバージョン制御タイプのシステムがあるが、それがファイルではなくデータベースで動作するかどうかです。ブランチを作成し、タグを作成し、ブランチをマージする機能など、SVNを使用して取得するのと同じ種類の機能が欲しいです。ファイルリポジトリのバージョンに関連付けられているリビジョン番号ではなく、データベースのバージョンに関連付けられます。
実際のデータベーススキーマとは無関係に、この種の機能を追加できる一般的なソリューションはありますか? MySQLまたはMS SQL Serverで動作するソリューションに興味があります。
また、スキーマではなくデータを制御しようとしていることを明確にする必要があります。スキーマは一定のままであると思います。そのため、すべての挿入、更新、および削除要求のログを作成して、データの各バージョン間でデータベースを送信する方法が必要なようです。そうすれば、任意のバージョンは、希望バージョンに保存されたすべてのSQLステートメントを控えることで再作成できます。
解決
すべてのDDL、ストアドプロシージャなどを通常のテキストファイルにスクリプト化できます。
次に、データベースバージョンにSVNを使用できます。
他のヒント
転覆と同様に機能する解決策を見つけたことはありませんが、ここに私が行ったことがいくつかあります。
スキーマを作成し、初期データを入力するスクリプトを作成します。その後、変更ごとに更新スクリプトを作成します。かなり手動のプロセスですが、機能します。 DBのテーブルに現在のバージョン番号を保存し、スクリプトがあることを確認するのに役立つ余分なものがあります iDempotent.
完全な開発DBをSubversionに保存します。多くのデータがある場合、または頻繁に変更される場合、これは通常、私にとってあまりうまくいきません。しかし、一部のプロジェクトでは機能する可能性があります。
バージョン制御システムに作成されたスクリプトを保持し、維持します。
私が考えることができる2つのことがあります:
- http://www.liquibase.org/ - 一般的にデータベースの変更を管理する方法を提供します。ソースコントロールにコミットされるファイルを作成し、さまざまな開発データベースなどの変更を管理するのに役立ちます。
- http://www.viget.com/extend/backup-your-database-in-git/ - これは、データベースをソースコントロールにバックアップするための戦略を説明しますが、同じ戦略をスキーマで使用できます。このスキームでは、データベースはメインコードとは別の領域にあります。 (これは他のソース制御システムでも使用できます。)