べにおブログ

学んだことを、ゆっくり深く。

主従関係とは何か:親が消えたら子も消える関係

結論:まずこれだけ覚える

主従関係は、子レコードを親レコードへ強く従属させる関係です。

  • 子レコードには親の指定が必要
  • 親を削除すると、関連する子レコードも削除される
  • 子レコードは独立した所有者を持たず、レコード共有は親に従う
  • 親側に積み上げ集計(ロールアップ集計)項目を作成できる
  • 1つのカスタムオブジェクトに作成できる主従関係は最大2つ 「親がなくても子を残したい」「子を別の所有者・共有で管理したい」という要件には、通常はルックアップ関係を検討します。

主従関係の向き

主従関係の項目は、子側のカスタムオブジェクトに作成し、親となる標準オブジェクトまたはカスタムオブジェクトを参照します。 たとえば、請求書を親、請求明細を子にする場合は、請求明細オブジェクトに請求書への主従関係項目を作成します。 カスタム主従関係では、親側は標準オブジェクトでもカスタムオブジェクトでも構いません。一方、子側はカスタムオブジェクトです。

1. 親の指定が必須

子レコードは、親レコードを指定しないと保存できません。主従関係項目を空欄にした孤立レコードは作成できません。 この性質は、次のようなデータに向いています。

  • 請求書がなければ成立しない請求明細
  • 注文がなければ成立しない注文明細
  • 研修申込がなければ成立しない参加者回答 一方、関連先が一時的に未定でもレコードを保存したい場合は、ルックアップ関係の方が適しています。

2. 親削除時のカスケード削除

親レコードを削除すると、関連する子レコードも削除されます。これをカスケード削除と呼びます。 したがって、親の削除権限を持つユーザーは、関連する子データもまとめて削除できることになります。業務上重要な子データがある場合は、削除権限、バックアップ、監査要件を確認します。 ルックアップ関係では、参照先削除時の動作として、参照項目をクリアする、参照先の削除を禁止する、対応するカスタム関係でカスケード削除を使用する、といった設定があります。ルックアップなら参照元が必ず残る、とは限りません

参照先を削除したときのルックアップの動作

削除時の動作結果
参照項目をクリアする参照元レコードを残し、ルックアップ項目を空欄にする。項目が任意の場合に使用できる
参照先の削除を許可しない関連する参照元レコードがある間、参照先レコードの削除を止める
参照元レコードも削除するカスケード削除を有効にした対応するカスタムルックアップ関係で、参照元レコードも削除する

3. 所有者と共有は親に従う

子レコードには独立した所有者項目がありません。レコードレベルの共有は[親レコードによる制御]となり、親のアクセスを継承します。 このため、次のような要件には向きません。

  • 子だけを別の担当者に所有させる
  • 子だけに独立した組織の共有設定を適用する
  • 親を見せずに子だけを共有する なお、親から継承するのはレコードレベルのアクセスです。子オブジェクトと各項目へのオブジェクト権限・項目権限は別途必要です。

4. 積み上げ集計項目を作成できる

積み上げ集計項目は、関連する子レコードを親側で集計する項目です。 主な集計方法は次のとおりです。

  • COUNT:子レコードの件数
  • SUM:数値・通貨項目の合計
  • MIN:最小値
  • MAX:最大値 条件を指定して、対象となる子レコードだけを集計することもできます。 標準の積み上げ集計項目を使うには、集計対象の子レコードが主従関係で親に関連付けられている必要があります。

5. 再親子付けは設定で制御する

主従関係項目では、[再親子付けを許可]を有効にすると、作成後の子レコードを別の親レコードへ変更できます。 この設定を有効にしない場合、子レコードの親を後から変更できません。再親子付けによって所有・共有や積み上げ集計の対象も変わるため、業務要件を確認して設定します。

6. 作成数とリレーション上限

1つのカスタムオブジェクトに作成できる主従関係は最大2つです。この上限は増加できません。 主従関係とルックアップ関係を合わせたカスタムリレーション項目は、1オブジェクトあたり既定で40件です。対象となる組織では、Salesforceへの申請により最大50件まで増加できる場合があります。 設計時は、主従関係の2件上限と、リレーション項目全体の上限を分けて確認します。

結合オブジェクトで多対多を表現する

カスタムオブジェクトに2つの主従関係を作成し、それぞれ異なる親へ関連付けると、結合オブジェクトとして多対多関係を表現できます。 たとえば、学生と講座の間に「受講登録」オブジェクトを置きます。

  • 学生 1件に対して受講登録が複数
  • 講座 1件に対して受講登録が複数
  • 受講登録は学生と講座の両方へ主従関係を持つ 受講日、成績、受講状況など、2つの親の組み合わせに固有の情報は結合オブジェクトに保存します。

ルックアップ関係との比較

観点主従関係ルックアップ関係
親・参照先の指定必須任意または必須に設定可能
親・参照先の削除子も削除参照解除、削除禁止、対応設定でカスケード削除
子・参照元の所有者独立した所有者を持たない関係による所有権継承はない
レコード共有親に従う関係による共有継承はない
標準の積み上げ集計使用できる使用できない
親・参照先の変更[再親子付けを許可]の設定に従う項目設定、権限、検証ルールなどに従う

関係を後から変換する場合

ルックアップから主従関係へ

既存のすべての参照元レコードに親が設定されていることが必要です。空欄がある場合は、先にすべてのレコードへ親を設定します。ほかの制約や依存関係も確認してから変換します。

主従関係からルックアップへ

変換すると、子レコードの所有・共有が親に従う仕組みや、親削除時のカスケード削除が変わります。積み上げ集計項目など、主従関係に依存する設定も事前に確認します。 本番環境で変換する前に、サンドボックスでデータ、共有、自動化、レポートへの影響を検証します。

選び方の判断基準

主従関係を選ぶ要件

  • 親なしの子を許可しない
  • 親削除時に子も削除する
  • 子の所有者と共有を親に従わせる
  • 親で子の件数や数値を積み上げ集計する
  • 2つの親を結ぶ結合オブジェクトを作る

ルックアップ関係を選ぶ要件

  • 参照先なしでもレコードを保存する
  • 参照元を独立して所有・共有する
  • 参照先削除時に、参照解除または削除禁止を選ぶ
  • 主従関係ほど強い従属関係を必要としない

よくある誤解

主従関係にすれば、ユーザーによる子レコードの削除を禁止できる

主従関係は親削除時に子をカスケード削除する仕組みです。ユーザーが子レコード自体を削除できるかは、子オブジェクトの削除権限などで制御します。

積み上げ集計を使いたいので、既存データがあるオブジェクトへ直接主従関係を作る

既存レコードに親が設定されていない状態では主従関係へ移行できません。まずルックアップ関係を作成して全レコードへ親を設定し、その後に変換する方法を検討します。

子レコードは親の権限だけで必ず見える

レコードレベルの共有は親に従いますが、子オブジェクトと項目への参照権限も必要です。

「削除できないようにする」の意味を分ける

要件に「レコードを削除できないようにしたい」とある場合は、何を削除させないのかを分けて考えます。

  • 親を削除したときに子を残したい:ルックアップの削除動作(参照項目をクリア)を確認する
  • 関連する子がある間、親を削除させたくない:ルックアップで[参照先の削除を許可しない]を選ぶ
  • ユーザーに子レコード自体を削除させたくない:プロファイルまたは権限セットの削除権限で制御する 関係種別だけでは、ユーザーによる子レコード自体の削除を禁止できません。

試験での判別ポイント

  • 「親を削除すると子も削除」→ 主従関係
  • 「子の所有者と共有を親に従わせる」→ 主従関係
  • 「親で子の件数・合計・最小・最大を集計」→ 積み上げ集計と主従関係
  • 「2つの親を結ぶ多対多」→ 2つの主従関係を持つ結合オブジェクト
  • 「子を別の所有者・共有で管理」→ ルックアップ関係
  • 「1カスタムオブジェクトの主従関係上限」→ 2つ
  • 「親削除時に参照だけを外す、または親削除を止める」→ ルックアップ関係の削除動作
  • 「子レコードをユーザーに削除させない」→ オブジェクトの削除権限

出典(Salesforce公式)

  • Object Relationships Overview — 主従関係で子レコードの所有・共有が親に従うこと、親削除時のカスケード削除、ルックアップ関係の削除動作を裏付けています。
  • Considerations for Relationships — カスタム主従関係の子側の制約、再親子付け、1カスタムオブジェクトあたり最大2つの主従関係などを裏付けています。
  • Roll-Up Summary Field — 主従関係で関連付けられた子レコードを親側で件数・合計・最小・最大集計できることを裏付けています。
  • Increase the Maximum Relationships Allowed per Object — 主従関係とルックアップ関係の既定上限が合計40件で、対象組織では最大50件まで増加できる場合がある一方、主従関係は最大2件であることを裏付けています。
  • Create Object Relationships — 主従関係の強い従属性、カスケード削除、2つの主従関係を使った結合オブジェクトの考え方を裏付けています。
  • Unable to Create a Master-Detail Relationship — 既存レコードがある場合に、ルックアップ関係を作成して全レコードへ親を設定してから主従関係へ変換する手順を裏付けています。