中間テーブル(連関エンティティ)に関してメモ。
以下のようなケースがあるとする
- ゲームには複数のカテゴリがある
- カテゴリは複数のゲームで使われる
- ゲーム:カテゴリ・・・多:多となる
こんな時は、「ゲームカテゴリ」という中間テーブルを作成し、 それぞれのキーの組み合わせを外部キーとして持たせる。
CakePHPでは以下のような表現となる
- ゲーム
<?php class Game extends AppModel { var $useTable = "game"; public $hasAndBelongsToMany = array( 'Category' => array( 'className' => 'Category', 'joinTable' => 'game_category', 'foreignKey' => 'game_id', 'associationForeignKey' => 'category_id' ) ); } // gameテーブル・・・id, name, category_id ?>
- カテゴリー
<?php class Category extends AppModel { var $useTable = "category"; } // categoryテーブル・・・id, name ?>
- ゲームカテゴリ
<?php class GameCategory extends AppModel { var $useTable = "game_category"; } // game_categoryテーブル・・・id, game_id, category_id ?>