既存のデータベース

次のトピックは既にデータベースを稼働させているが、データを連携させるためにPropelを使いたい開発者をターゲットにしたものです。

Propelはいくつかのターゲットを提供します。ターゲットは既存のデータと連携させることを簡単にするために、Phing (XML)ビルドファイルで必用不可欠な機能です。

始める前に

存在するデータベースをインポートすることを試す前に、Propelが適切にインストールされているか確認して下さい。User Guideのインストレーションの章で段階的にPropelをインストールする方法が説明されています。

このドキュメントではPEARインストール形式(デフォルトと仮定します)のPropelを使用している場合に存在するデータベースと連携する方法を説明します。これらのインストラクションを他のより高度なPropelのインストレーション(例えばSVNから)に確実に応用することが出来ます。

このドキュメントでの例はUnix/Linuxオペレーションシステムのための例です; しかしながら、これらのインストラクションは容易にWindowsに翻訳されます。

データベース構造に取り組む

Propelはデータベースを表現する抽象的なXMLスキーマファイルを使用します。Propelはこのスキーマに基づいたデータベース固有のSQLをビルドします。Propelはデータベースのメタデータに基づいた一般的なスキーマファイルをリバースエンジニアする方法も提供します。Propelはこのタスクのために機能をリバースエンジニアするCreoleパッケージを使用します。

DB後続からXMLスキーマを作成する

Propelビルドファイルのcreoleターゲットはとりわけ既存のデータベース上のスキーマを生成するために設計されています。このターゲットはデータベースに関する情報を提供するためにCreoleデータベース抽象化レイヤーからメタデータクラスを使用します。

注: Creoleメタデータクラスはすべてのデータベースに関する詳細な内容の同じレベルを提供できないかもしれません。とりわけ、SQLiteはタイプレスのデータベースなのでSQLiteに関するメタデータ情報はしばしとても基本的です。

スキーマファイルを生成するために、プロジェクトのために新しいディレクトリを作成してbuild.propertiesファイルで接続情報を指定して下さい。例えば、新しいプロジェクト、legacyappを作成するために、次のステップに従います:

  1. legacyappプロジェクトディレクトリをファイルシステムのどこかに作成します:
    $> mkdir legacyapp
    $> cd legacyapp
    
  2. legacyappディレクトリに既存のデータベースのためのDB接続パラメータ付きでbuild.propertiesファイルを作成して下さい、例です:
    propel.project = legacyapp
    propel.database = mysql
    propel.database.url = mysql://root@localhost/legacyapp
    
  3. schema.xmlを生成するためにcreoleターゲットを実行して下さい:
    $> propel-gen ./ creole
    
  4. ターゲットが実行されている間Phingによって発行されたエラー/警告に注意を払い、必要な訂正をするためにschema.xmlファイルを検査して下さい。
  5. 出来ました! これでlegacyappプロジェクトディレクトリにschema.xmlファイルを持つことになります。すべてのクラスを生成するデフォルトのPropelビルドを実行することが出来ます。

生成されたschema.xmlファイルはファイナルアンサーとしてではなくガイドとして使うべきです。Propelにはなじみのないデータタイプがいくつかあります; データタイプの中にはPropelによってサポートされないものがあります(例えば PostgreSQLの配列)。テーブルで多くのRDBMS特有の機能を使用している場合、Propelが正しい解決方法であるのか再考して頂くようお願いします。

=== 構造を新しいRDBMSに移動する(マイグレイトする)===

Propelは既存のデータベース構造上でXMLスキーマファイルを作成しXMLスキーマファイルからRDBMS特有のDDL SQLを作成する能力があるので、Propelは一つのデータベースを他のものに変換するためにPropelを使用することが出来ます。

上記のことを実現するために次のことを行います:

  1. 既存のDBからschema.xmlファイルを作成するために上記のステップに従います。
  2. それからターゲットデータベースタイプを変更し新しいデータベースのためにプロジェクトのbuild.propertiesファイルで接続URLを指定します。
    propel.database = pgsql
    propel.database.url = pgsql://unix+localhost/newlegacyapp
    
  3. そして新しいDDLを生成するためにsqlビルドターゲットを実行します:
    $> propel-gen ./ sql
    
  4. 新しいデータベースを作成するために(オプションとして)insert-sqlターゲットを追加して下さい:
    $> propel-gen ./ insert-sql
    

データベースデータに取り組む

Propelはデータベースのデータとの連携に役立ついくつかのターゲットを提供します。これらの中でもっとも重要なものはdatadumpdatasqlです。一番目はデータをXMLにダンプして2番目はXMLデータをインサートの準備が出来ているSQLファイルにダンプします。

重要: これらのターゲットの両方は既にデータベースのために生成されたschema.xmlがあることを要求します。

データをXMLにダンプする

一旦schema.xmlを作成(もしくはリバースエンジニア)すると、データをデータベースからdata.xml ファイルにダンプするためにdatadumpタスクを実行することが出来ます。

例えば、bookstore-test.phpスクリプトの実行過程において、データはデータベースに追加されます。もしクリーンアップオペレーションが起こる前にスナップショットを取得したとしたら、テーブルにデータを持っていたことでしょう。データをdata.xml に出力するために、次のことを実行します:

$> propel-gen ./ datadump

publisherテーブルにおいて、次のような列があります:

publisher_idname
1William Morrow

生成されたdata.xmlファイルにおいて、列は次のように表現されます:

<dataset name="all">
 ...
  <Publisher PublisherId="1" Name="William Morrow"/>
 ...
</dataset>

XMLからSQLを作成する

XMLからSQLファイルを作成するために、datasqlタスクを実行して下さい:

$> propel-gen ./ datasql

生成されたSQLはbuild/sql/ ディレクトリに設置されinsert-sqlターゲットを実行するときにインサートされます。