« "THE END OF SOFTWARE(ジ・エンド・オブ・ソフトウェア)―IT経営の常識が変わる" (ブレインワークス) | メイン | Prototype、IEだとAjax.Request-GETでキャッシュしちゃう »

Catalystのスキーマを何処に置こうか

現在はNavicatでテーブルを作成してます。
InnoDBでForeign Keysを設定し、DBIx::Class::Schema::Loaderで動的に読み込み
DBIx::Class::Schema::Loader::RelBuilderでリレーションを自動生成します。

ただ、これが最適だとはちっとも思っていません。
どうしよっかな。

候補は・・・

  1. Navicat + DBIx::Class::Schema::Loader (現状)
  2. DBIx::Class::Schema + SQL::Translator::Parser::DBIx::Class
  3. DBDesigner4 + FabForce::DBDesigner4

結論は2に決定。

1は、バージョンアップが大変。
なので、初期立ち上げまではよいが、ブランチを切るときに面倒。

また、might_haveやhas_oneはRelBuilderでは作れないので
別に書かなくてはならない。
よって、DBのテーブルとDBIxのSchemaクラス両方にORMの情報が分散してしまう。

2は特に弱点なしか。
ORMの情報はDBIxのSchemaクラスのみに集約される。
バージョンアップも

sqlt-diff --to MySQL Schema1=MySQL Schema2=MySQL > SchemaUpdate.mysql.sql

のようにできるので、事の面倒さ相応の対応で済みそう。
リレーションの図式的な把握も、sqlt-graph(SQL::Translator::Producer::GraphViz)があるのでなんとかなる。
ただ、やってみたが、出来たpngは白黒でとても簡素だ・・・

3もORMの情報が分散されてしまう。

トラックバック

このエントリーのトラックバックURL:
http://bokut.in/mt4/mt-tb.cgi/16

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)