勉強日記

チラ裏

PoEAA ch12 Association Table Mapping

martinfowler.com


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を自由できないために、本来不要だが適用することがある
    • 既存のテーブルを関連付けたいが、カラムを追加する権限がない場合
      • 新たに関連テーブルを作る
    • 本来不要な関連テーブルがすでにある場合

関連テーブルには、対応するメモリ上オブジェクトがない

  • 関連テーブルが情報をもつ場合はこの限りではない
    • 例: 従業員-会社関連テーブルが雇用情報も保持している
    • 対応するドメインオブジェクトが存在する
      • 【補】この場合「雇用」か