正規化したために数の増えたテーブル管理を、フレームワークが面倒を見てくれたっていいはずです。
というわけで、今日は、ORM(オブジェクト・リレーショナル・マッピング)についてです。これは、“関連し合っている複数データベーステーブルを、まるで1枚の Excel の表を扱っているように簡単に扱うための手法”と言ってもよいかもしれません。
これまでの単純PHPプログラミングで正規化したテーブルを扱う場合には、
1)複数回(テーブルの数だけ)、Query を呼ぶ!
2)SQL の"JOIN"をうまく使う。
という方法がありました。ただし、問題点として、1)の場合にはもちろんコード(作業)量が増えます。また、2)の場合には、JOIN であちこちをつなげてしまうと、データベースの種類によっては、“データベースサーバを複数に分けて運用することが難しくなる”場合がありました。
このあたりを、フレームワークがうまく働いてくれればよいのですが、現状としてはこんな具合でした。(最新状況が変わったり、記述が間違っていたりしたらコメントしてください。)
・Ruby on Rails(言語:Ruby) …… ORM(テーブル間の関連付け) をサポート。
(日本語情報としては、http://www.goodpic.com/mt/archives2/2005/10/railsdbor.html など。)
・Ethna …… データベース関連は Ethna_DB_PEAR,Ethna_DB_PDO など。関連付けなどはない?
(http://dozo.matrix.jp/pear/index.php?Framework%2FEthna%2FPDO)
・Maple …… BaseDAO(超α版) 関連付けのできるモジュールを作った方はいるようです。正式サポートではない?
(http://www.wikihouse.com/hacking/index.php?%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8BaseDAO)
・Code Igniter …… ORM があったらいいなぁという議論はあるが、将来的にもライブラリの1ファイル程度になりそう。
⇒ http://www.codeigniter.com/forums/viewthread/569/
・Symfony …… 自前でサポートするのではなく、propel/creole という別のOSSプロジェクトの成果を組み込む。xml か yml で記述する必要がある。
(http://www.symfony-project.com/content/book/page/model.html)
・PHP on Trax …… ORM を自前でサポート。ちょっと意外。ただし、ActiveRecord のファイルが 96.5KBもあるのは大きすぎ?
(http://svn.phpontrax.com/wiki/ActiveRecordTableAssociationUsage)
・ちなみに Django(言語:python)…… ORM のサポートあり。
(http://www-128.ibm.com/developerworks/linux/library/l-django/index.html など。)
というわけで、CakePHP の場合には?
・CakePHP …… ORM を自前でサポート。PHP4用モジュール 40KB PHP5用モジュール 39KB。
(http://manual.cakephp.org/chapter/6 の Section 4 "Associations" を参照。)
と、きっちりサポートされています。