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

| コメント(0)

現在は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の情報が分散されてしまう。

コメントする