連結オブジェクト
データモデルを検討していると、多対多の関係にしたい場合がでてきます。
多対多の関係の例
「学生と講座」
・学生は複数の講座を受講する
・講座は複数の学生が受講する
リレーショナルデータベースでは、多対多の関係を表せないので、
連結テーブルを間に挟んで、「1対多」と「多対1」の関係にします。
学生 ―1対多― 受講 ―多対1― 講座
上記のデータモデルにすることで、学生が受講している各講座の成績などを受講テーブルで管理できるようになります。
さて、これをSalesforceで実現するにはどうするかというと、
RDBと同じように連結テーブルならぬ連結オブジェクトを
多対多の関係にしたいオブジェクトの間に挟みます。
このときに重要なのは、連結オブジェクトから親オブジェクトへのリレーションは主従関係で結ぶということ。
上記の例で言うと、「受講 ⇒ 学生」「受講 ⇒ 講座」と2つの主従関係を結びます。
片方でも参照関係で結んでしまうと、連結オブジェクトになりませんので、注意してください。
前回の記事で、主従関係は2つまでしか結べないという制限をご紹介しましたが、この制限内で多対多のリレーションを実現することができます。
連結オブジェクトのデータモデルにすると、
通常は子オブジェクトの項目しか表示できない関連リストに、
連結先のオブジェクトの項目を表示できて、とても便利です。
上記の例で言うと、学生オブジェクトの受講関連リストに、受講オブジェクトの項目(受講番号、評価)だけでなく、講座オブジェクトの項目(講座名、区分、分類、担当、単位数)を表示できます(↓の画像を参照のこと)。
この機能によって、まさに多対多の関係を実現できていることが分かるかと思います。
もちろん同様に連結先からも連結元のオブジェクトの項目を表示できます。
上記の例で言うと、講座オブジェクトの受講関連リストに学生オブジェクトの項目(学生名、性別、生年月日、入学日)を表示できます(↓の画像を参照のこと)。
最後に、連結オブジェクトの注意点ですが、
連結オブジェクトを主とした主従関係は結べないようになっています。
なので、連結オブジェクトで子オブジェクトの積み上げ集計項目を作ったりはできません。この制限が無くなれば、より便利になるんですけどね。
コメント