Association Table Mapping
Saves an association as a table with foreign keys to the tables that are linked by the association.
-
多対多ではForeign Key Mappingを適用できない
- single-valuedな関連端がないため
-
RDBで多対多を表現するには、関連テーブルが必要
- 数十年来の定番の手法
- Association Table Mappingは、多値のフィールドと関連テーブルとのマッピングを行う
How It Works
- 関連テーブルには、対応するメモリ上オブジェクトがない
-
したがってIDもない
- 主キーはFKの複合主キー
-
データの読み込み方
-
2クエリ
- 簡単だがコスト高い
-
JOINして1クエリ
- コスト低いが、オブジェクトとのマッピングが少し複雑
-
-
関連の更新
- 本来、多値フィールドの更新は、多くの問題をはらむ厄介なものである
- 幸いにして、関連テーブルは多くの場合Dependency Mappingとして扱えるため、難なく生成・破棄できる
When to Use It
-
多対多の関連の表現
- 他にすべはなし
-
他の関連にも適用できるが、普通は正しい選択ではない
- Foreign Key Mappingよりも複雑
- 余計なJOINを要する
-
DBを自由できないために、本来不要だが適用することがある
-
既存のテーブルを関連付けたいが、カラムを追加する権限がない場合
- 新たに関連テーブルを作る
-
本来不要な関連テーブルがすでにある場合
- DBリファクタリングするより楽
-
関連テーブルには、対応するメモリ上オブジェクトがない
-
関連テーブルが情報をもつ場合はこの限りではない
- 例: 従業員-会社関連テーブルが雇用情報も保持している
-
対応するドメインオブジェクトが存在する
- 【補】この場合「雇用」か