SchemaShell は、スナップショットを生成ししたりデータベースのスナップショットをリストアしたりするだけでなく、スキーマオブジェクト・スキーマ SQL ダンプを生成する機能を提供します。
生成されたスキーマファイルを使用すると、データベースに依存しないスキーマを簡単に移動できます。使用しているデータベースのスキーマファイルは、次のように生成します:
$ cake schema generate
これを実行すると、 app/config/sql
ディレクトリに schema.php
ファイルが生成されます。
スキーマシェルはモデルが定義されているテーブルのみ処理します。スキーマシェルにすべてのテーブルを処理させるには、コマンドラインで
-f
オプションを指定する必要があります。
後から、すでに作成した schema.php ファイルを用いてデータベーススキーマを再構築するには、次のようにします:
$ cake schema run create
これは schema.php の内容に従ってテーブルを削除し、作成します。
スキーマファイルは SQL
ダンプファイルを生成するために使用することもできます。CREATE TABLE
ステートメントを含む SQL ファイルを生成するには、次のようにします:
$ cake schema dump filename.sql
filename.sql は SQL ダンプ用に設計されたファイル名です。filename.sql を省略した場合、SQL ダンプはコンソールに出力されますが、ファイルには書き出されません。
マイグレーションはデータベーススキーマのバージョン管理をします。これは、機能を開発した際に生じる、データベースへの変更を適用するための、簡単かつデータベース非依存の方法です。マイグレーションは、SCM 管理用スキーマファイルかスキーマスナップショットのどちらかを使います。スキーマシェルを使用してスキーマファイルをバージョン管理するのはとても簡単です。すでにスキーマファイルがある場合は、次を実行します。
$ cake schema generate
次のような選択肢が表示されます:
Generating Schema...
Schema file exists.
[O]verwrite
[S]napshot
[Q]uit
Would you like to do? (o/s/q)
[s] (snapshot) を選択すると、バージョンアップ用の schema.php が生成されます。schema.php がある場合は、schema_2.php などが生成されます。いつでも次のように実行することでこれらのスキーマファイルをリストアすることができます:
$ cake schema update -s 2
2
は実行したいスナップショットの番号です。スキーマシェルはプロンプトを表示し、
ALTER
ステートメントを実行するか確認します。その際に既存のデータベースと実行するスキーマファイルの違いを表示します。
コマンドに -dry
を指定することで、予行演習することができます。