1. ホーム
  2. php

[解決済み] DBスキーマの変更を追跡する仕組み [終了しました]

2022-06-15 22:03:32

質問

DB スキーマの変更を追跡および/または自動化するための最良の方法は何でしょうか? 私たちのチームはバージョン管理に Subversion を使用しており、この方法でいくつかのタスクを自動化することができました (ビルドをステージング サーバーにプッシュし、テストしたコードを本番サーバーにデプロイする) が、データベース更新はまだ手作業で行っています。 私は、コードと DB の更新がさまざまなサーバーにプッシュされるバックエンドとして Subversion を使用し続けながら、異なる環境を持つサーバー間で効率的に作業できるソリューションを見つけるか作成したいと思います。

多くの一般的なソフトウェアパッケージは、DBのバージョンを検出し、必要な変更を適用する自動更新スクリプトを含んでいます。 これは、より大きなスケール (複数のプロジェクト、場合によっては複数の環境および言語) でさえ、これを行うための最良の方法でしょうか? もしそうなら、プロセスを簡素化する既存のコードがあるのでしょうか? 誰かが以前に似たようなものを実装し、それを Subversion のポスト コミット フックに統合しましたか、それともこれは悪い考えでしょうか?

複数のプラットフォームをサポートするソリューションが望ましいのですが、私たちの仕事の大部分はそのプラットフォーム上にあるので、Linux/Apache/MySQL/PHP スタックをサポートすることが間違いなく必要です。

どのように解決するのですか?

Railsの世界では、マイグレーションという概念があります。これは、データベース固有のSQLではなく、Rubyでデータベースへの変更を行うためのスクリプトです。Ruby のマイグレーション コードは、最終的に現在のデータベース固有の DDL に変換されます。

データベースに変更を加えるたびに、新しいマイグレーションを書きます。マイグレーションには通常、変更を適用するための "up" メソッドと、変更を取り消すための "down" メソッドの 2 つがあります。1つのコマンドでデータベースを最新の状態にし、また、データベースをスキーマの特定のバージョンにするために使用することができます。Rails では、マイグレーションはプロジェクト ディレクトリ内の独自のディレクトリに保管され、他のプロジェクト コードと同様にバージョン コントロールにチェックインされます。

Railsのマイグレーションに関するこのOracleガイド はマイグレーションをかなりよくカバーしています。

他の言語を使用する開発者もmigrationsに注目し、独自の言語固有のバージョンを実装しています。私が知っているのは Ruckusing は、RailsのmigrationsをモデルにしたPHPのmigrationsシステムで、あなたが探しているものかもしれません。