Salesforce でカスタムオブジェクトを設計する際、オブジェクトごとのリレーションが必要になる事が多くあります。
その際に「主従関係にするか、参照関係にするか」という選択で迷ってしまった経験はありませんか?
一見するとどちらも「オブジェクト同士を紐づける」機能ですが、
この選択は 後から簡単に変更できるものではなく、初期設計を誤ると、作り直しや大規模なデータ移行が必要になるケースもあります。
本記事では、Salesforce導入・改善を支援してきたコンサルティングパートナーの視点から、
主従関係と参照関係の違い、選定基準、そしてよくある落とし穴について解説します。
主従関係と参照関係の違い
主従関係と参照関係の最も大きな違いは、「関連づけられたオブジェクト同士の依存度」です。
主従関係では、子レコードは親レコードに完全に従属します。
親が削除されれば子も削除され、所有者や共有設定も親に準じ、「積み上げ集計」が使える点も特徴です。
一方、参照関係はより緩やかな関係です。
親が削除されても子レコードは残すことができ、子レコードごとに所有者や共有設定を持つことができます。
主従関係は「従(子)側の項目作成」で定義される
主従関係・参照関係はいずれも、
「従(子)にあたるオブジェクト側で項目を作成する」
ことで設定します。
具体的には、
子オブジェクトに 「主従関係」または「参照関係」型の項目を作成し、
その参照先として親オブジェクトあるいは参照オブジェクトを指定することで、リレーションが成立します。
このため、
- 親オブジェクト側に設定を追加する
- 既存の親オブジェクトから関係を後付けする
といったことはできません。
どのオブジェクトを「従」にするかを最初に誤ると、設計全体を作り直す必要が出てくる点には注意が必要です。
オブジェクト作成時に主従関係を選ぶか、参照関係を選ぶかの基準
主従関係を選ぶべきケース
- 親レコードが削除されたら、子レコードも不要になる
- 子レコードは必ず1つの親に紐づくことが業務上決まっている
- 子レコード単体では業務上の意味を持たない
- 親オブジェクト単位で権限・共有を一元管理したい
- 親側で子の件数・金額などの集計が必須
- 将来的にもデータ構造が大きく変わる可能性が低い
- レコード投入前に関係性を確定できている
参照関係を選ぶべきケース
- 親が削除されても、子レコードは残す必要がある
- 子レコードごとに所有者や共有範囲を制御したい
- 要件がまだ固まりきっておらず、後から変更が入りそう
- スモールスタートで運用を始めたい
- すでに親オブジェクトが二つある、あるいは今後必要になる
よくある落とし穴
① レコードが入った後では主従関係を設定できない
最も多い落とし穴がこれです。
すでにレコードが存在するカスタムオブジェクトには、新たに主従関係を設定することはできません。
「とりあえず参照関係で作成 → データ投入 → やっぱり主従にしたい」
という流れは、Salesforceでは通用しません。
この場合、オブジェクトの作り直しやデータ再投入が必要になり、想像以上に大きな手戻りが発生します。
② 親子を逆に設計してしまう
主従関係は「従(子)側の項目作成」で定義されるため、
どちらを主・従にするかを逆に設計してしまうと修正が困難です。
③ 集計したいだけで主従関係を選んでしまう
積み上げ集計目的だけで主従関係を選ぶと、将来の要件変更に耐えられなくなるケースがあります。
フローやレポートで代替できないか、一度検討することをおすすめします。
まとめ
主従関係と参照関係の選択は、
「今の要件」ではなく「将来どう変わりそうか」まで含めて判断することが重要です。
また、主従関係は
- 従(子)側の項目作成で定義される
- レコードが入った後では設定できない
という 設計上の強い制約があります。
初期設計の段階で迷いがある場合は、参照関係での対応が難しい理由や、代替手段を実装するために必要な手間なども考慮して設計しましょう!