2006年07月21日

データベーステーブル間の関連付け/ORM/オブジェクト・リレーショナル・マッピング/Table Association

Excel であれば、1枚の上にすべての情報を載せてゆきます。でも、データベースの場合には、効率的に管理するために“正規化”という作業を行ないます。すると少ない労力で大量のデータを管理できるようになりますが、副作用としてテーブルの数が増えてしまいます。ですので、実際のデータベース・アプリケーションを作成する場合には、この部分をどうやって効率的に管理するかが一つのポイントになります。

正規化したために数の増えたテーブル管理を、フレームワークが面倒を見てくれたっていいはずです。

というわけで、今日は、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" を参照。)

と、きっちりサポートされています。
ラベル:cakephp framework PHP
posted by SDozono at 15:50| ロサンゼルス ☁| Comment(0) | TrackBack(0) | CakePHP Model | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
手(パー)To make a comment: Please type your name and comment. at the validation field box, type 'cakephp'. And there two glay buttons. "Preview"/"Submit". Thank you!