主従関係と参照関係の違い:判断基準7つと多対多の作り方

このページには広告リンクを含みます。

主従関係と参照関係の違い:判断基準7つ

Trailhead の説明では、参照関係(Lookup)は緩いつながりで、各オブジェクトは独立して動きます。主従関係(Master-Detail)は強いつながりで、親が子の閲覧などを支配します。どちらの項目も子の側に作ります。

違いを7つの基準で比べます。

基準 主従関係 参照関係
1. 親の値 必須 任意にできる(必須にもできる)
2. 所有者 子に所有者の項目はなく、親の所有者が入る 子に自分の所有者がいる
3. 共有 親レコードに連動 子のオブジェクトで別に設定
4. 親の削除 子も一緒に削除 既定は参照の値をクリアして子は残る
5. 積み上げ集計 使える 使えない(標準の例外は次の節)
6. 親の変更 既定で不可([親の変更を許可] で変えられる) 値を変えれば別の親へ
7. 標準オブジェクトとの関係 標準オブジェクトはカスタムオブジェクトの子になれない 標準でもカスタムでもつなげられる
主従関係では親の削除で子も削除され所有者と共有が親に従い、参照関係では子が残り所有者も別であることを左右に並べて比べた図
主従関係は子が親に従い、参照関係は子が独立する

ミサキの依頼で考えます。訪問記録は商談なしには意味がなく、商談の担当者が見えれば足りるなら、主従関係が合います。合計の訪問回数も積み上げ集計で出せます。一方、訪問記録を別の部署の人が所有し、商談と別の公開範囲にしたいなら、参照関係にしてフローで集計します。

標準の例では、取引先と取引先責任者は参照関係の一対多です。

主従関係の子になったカスタムオブジェクトには、共有ルール、手動共有、キューを使えません。どれも所有者の項目を前提にしているためです。担当者ごとに開く要件があるなら、参照関係を選びます。

積み上げ集計:親に子の集計を出す

積み上げ集計項目(Roll-Up Summary Field)は親の側に作り、子の件数、合計、最小、最大を出します。

種類 集計できる項目
件数(COUNT) 子のレコード数
合計(SUM) 数値、通貨、パーセント
最小、最大(MIN、MAX) 数値、通貨、パーセントに加えて日付、日時

標準の組み合わせでは、取引先に関連する商談の値、商談に商談商品の値、キャンペーンにキャンペーンメンバーの値を集計する項目も作れます。

上限は1オブジェクトあたり既定で25、最大で40です。25を超えるにはサポートへの依頼が必要です。また、関連オブジェクトの項目を使う数式は積み上げ集計の対象にできません。

参照関係で同じことをするなら、レコードトリガーフローで子を集めて親の項目へ書き込みます。公式のナレッジにも手順があります。子の作成、更新に加えて、削除でも再集計が走るように作るのが要点です。大量データでの書き方は Flow の一括処理の記事を読んでください。

親を削除したときの動き

参照関係では、任意の項目なら親の削除時の動きを3つから選べます。

  • 値をクリアする(既定):子は残り、参照の項目が空になる
  • 削除を許可しない:子があると親を消せない
  • 子も削除する:カスケード削除(サポートへの依頼で有効にする。標準オブジェクトへの参照では使えない)

値のクリアは必須の参照項目では選べません。カスケード削除は既定で無効です。この動きはユーザーのセキュリティや共有の設定を飛び越えて子を消すので、使うなら慎重に判断します。子を親と一緒に消したい要件なら、まず主従関係を検討します。

主従関係では、親を削除すると子も孫も削除されます。子だけを削除するとごみ箱へ入ります。

多対多:中間オブジェクトの作り方

1人の候補者が複数の求人に応募し、1つの求人に複数の候補者が応募する。このような多対多は、間に1つカスタムオブジェクトを置き、両方に主従関係を張ります。公式の名前は連結オブジェクト(Junction Object)で、中間オブジェクトとも呼ばれます。

候補者と求人の間に応募という中間オブジェクトを置き、主従関係を2本張った多対多の図
応募が中間オブジェクト。先に作った主従関係が1本目になる

標準の商談商品も、商談と商品をつなぐ考え方は同じです。

作るときの注意点は次のとおりです。

  • 順番:先に作った主従関係が1本目で、中間レコードの所有者とディビジョンを決めます。1本目を削除するか参照関係に変換すると、2本目が1本目になります。
  • 削除:片方の親を消すと中間レコードはごみ箱へ入ります。両方の親が消えるとごみ箱にも残らず削除され、復元できません。
  • 積み上げ:片方の親に中間オブジェクトの積み上げ集計があると、もう片方の親を消せないことがあります。公式の事例は関連が200件を超える場合で、先に中間レコードを消して解決します。

カスタムオブジェクトの主従関係は2つまでなので、中間オブジェクトは主従関係の枠を使い切ります。カスタムの中間オブジェクトは、さらに子を持つ親にはなれません。

制限 値
主従関係(カスタムオブジェクト1つあたり) 2つまで
関係の合計(参照を含む) 40まで
カスタムの詳細の階層 3階層まで
積み上げ集計項目(1オブジェクト) 既定25、最大40

後から変えるときの条件

設計が変わったときに、関係を変換できます。

主従関係から参照関係へ変えるには、親の側にある積み上げ集計項目を先に削除します。変換後は親を消しても子は残り、セキュリティは親から引き継がれないので、別に設定します。カスタムオブジェクトの組織の共有設定は公開/参照・更新可能に変わるため、変換の直後に見え方を確かめてください。

参照関係から主従関係へ変えるには、すべてのレコードで参照の項目に値が入っている必要があります。空の値を埋めてから変換します。カスタムオブジェクトにすでにデータがあるときは主従関係を直接作れないので、この手順を踏みます。

この条件があるので、迷ったときは参照関係から始める方が戻しやすい、と考えられます。これは編集部のおすすめです。ただし積み上げ集計が要件にあるなら、最初から主従関係にします。

Apex で親を変える処理があるなら、API バージョン 63.0 以降は注意が必要です。[親の変更を許可](Allow reparenting)を選んでいない関係で子の親を変えると、例外になります。

依頼から設計する

判断の順番をまとめます。

  1. 子は親なしで存在できるか。できないなら主従関係を候補にする
  2. 子に親と別の所有者や公開範囲が必要か。必要なら参照関係
  3. 親に集計を出すか。必要なら主従関係、参照関係ならフロー
  4. 親が消えたら子はどうなるべきかを決める
  5. 親は標準オブジェクトか、子は標準オブジェクトか。子が標準なら参照関係

データの持ち方は、共有にも直接影響します。親に連動する共有は共有モデルの図解で確かめてください。オブジェクト全体の見取り図は基本ガイドにあります。資格で学ぶ人はPlatform App Builder の学習ガイドへ進んでください。

よくある質問

Salesforceの主従関係と参照関係の違いは何ですか?
主従関係は親が子の所有者、共有、削除を支配する強いつながりで、参照関係は互いに独立した緩いつながりです。自分で作る関係で積み上げ集計を使えるのは主従関係だけです。
参照関係で積み上げ集計はできますか?
自分で作る参照関係では積み上げ集計項目は使えません。代わりにレコードトリガーフローで子を集計して親の項目に書き込む方法があります。
中間オブジェクトとは何ですか?
中間オブジェクトとは、2つのオブジェクトを多対多でつなぐためのカスタムオブジェクトで、主従関係を2本持ちます。公式では連結オブジェクト(Junction Object)と呼びます。
主従関係は1つのオブジェクトにいくつ作れますか?
カスタムオブジェクトが持てる主従関係は2つまでです。参照関係を含めた関係の合計は40までです。
主従関係から参照関係に変換できますか?
主従関係から参照関係には変換できますが、親にある積み上げ集計項目を先に削除する必要があります。変換後は親を削除しても子は残り、カスタムオブジェクトの組織の共有設定は公開/参照・更新可能に変わります。