参照関係と主従関係の違いについて

参照関係と主従関係の違いとは?

Salesforceでオブジェクトを作っていると、「このオブジェクト、他のデータと繋げたいな…」と思う場面、ありますよね。
そんなときに使うのが 参照関係主従関係 です。

最初はちょっとややこしく感じるかもしれませんが、この2つの違いを知っておくとSalesforceのデータ設計がグッと楽になります。

参照関係:ゆるやかなつながり

参照関係(Lookup Relationship)は、オブジェクト同士を関連づけるけど、親が削除されても子は残るという、わりと自由な関係です。

たとえば、「注文」オブジェクトが「顧客」オブジェクトを参照しているとします。
顧客データを削除しても、注文データ自体は消えません。
もちろん、顧客が不明になるのであとで見直しは必要ですが、「注文」自体は生きているのです。

この関係は、データ同士の繋がりは必要だけど、依存関係はそこまで強くしたくないときに便利です。

主従関係:親子で運命共同体

一方で、主従関係(Master-Detail Relationship)は、親オブジェクトが消えると、子も一緒に削除されるという強い依存関係を持っています。

イメージとしては、「納品書(親)」と「納品明細(子)」のようなもの。
納品書を削除したら、その明細も意味をなさないので、一緒に消えるというわけです。

また、主従関係では親の所有者(オーナー)情報や共有設定が子にも引き継がれるなど、細かいルールが決まっています。
完全に親に従う子オブジェクト、という感じですね。

📏 オブジェクト数と制限

  • 主従関係:1オブジェクトにつき最大2件まで。標準オブジェクトは子不可。
  • 参照関係:標準オブジェクトは最大25件、カスタムオブジェクトは最大40件まで可能。

⚠ パフォーマンス注意:インデックススキュー

参照関係(Lookup)では、1つの親レコードに対して多数の子レコードが紐付くと、インデックススキューと呼ばれる状態が発生することがあります。
この状態では、クエリ性能の低下や、DML操作時のレコードロック競合(Lock Timeout)の原因となる可能性があります。

そのためSalesforceでは、1つの親レコードに紐づく子レコードは 10,000 件未満に抑えることを推奨しています。

🔧 ロールアップサマリーフィールド対応

主従関係では、親レコードに対して子レコードの合計や件数を集計する「ロールアップサマリーフィールド」が標準で利用できます。
一方、参照関係(Lookup)ではこの機能は標準で使えず、代替手段として「Declarative Rollup Summary Tool(DLRS)」などの無料ツールや、Apexトリガーによるカスタム集計が必要になります。

🔐 セキュリティの継承

  • 主従関係:子レコードは親の共有設定を自動的に引き継ぐ
  • 参照関係:各レコードの共有設定は独立して制御される

どちらを選べばいいの?

私は普段、「この2つ、どっちにしよう?」と迷ったときは、こんなふうに考えています。

  • 親が消えても子を残したい → 参照関係
  • 親と子はセットで管理したい → 主従関係

たとえば、プロジェクトとタスクを関連付けるなら、主従関係にしておいた方が「プロジェクトが終わったら関連タスクも削除」でスッキリ管理できることが多いですね。

まとめ

Salesforceの設計を始めるとき、データの「繋がり方」をどうするかはすごく重要です。

参照関係と主従関係は、どちらも便利な機能ですが、役割がはっきり違います。
どれくらい強い結びつきが必要なのかを考えて選ぶと、あとからのトラブルも防げますよ。

この記事が、あなたのSalesforce設計のヒントになれば嬉しいです。

コメント

タイトルとURLをコピーしました