Salesforceのデータ管理において、オブジェクトリレーション(関連性)の概念、とりわけ「主従関係」と「参照関係」はとても重要です。
しかし、実際にカスタムオブジェクトや項目を作成する際には、「主従と参照」のどちらを使用するのか、なんとなく選択してしまいがちです。
この記事では、参照と主従の概念を分かりやすく解説し、どちらを選んだらよいのか判断軸を提供します。
さらに、具体的な設定手順や、主従関係を利用した「積み上げ集計」の設定も紹介していきます。
オブジェクトリレーションの全体像
Salesforceのリレーションとはどんなものなのか、まずは確認してみましょう。
オブジェクトのリレーションとは、異なるオブジェクト間において、お互いの関連性を表すものです。
リレーションの全体像としては以下の種類が存在しますが、代表的かつ最も使用頻度が高いのが参照関係と主従関係になります。
- 主従関係
- 参照関係
- 外部参照関係
- 間接参照関係
- 階層関係
- 多対多関係
Salesforceリレーションにおける親子関係
参照関係や主従関係といったオブジェクト間のリレーションにおいては必ず「親子関係」があります。
例えば主従関係においてどちらが親でどちらが子なのかというと、主従項目に入力されているレコード側が「親」、そして主従項目が設置されている側が「子」になります。これは参照項目でも同様です。
下図は実際のSalesforceの取引先から、当該取引先に関連する商談の一覧を閲覧している画面です。
一つの「親」取引先に対して、複数の「子」商談が紐づいています。これにより、取引先A社の9月、10月、翌年2月の商談といったデータ構造を表現することが出来るようになります。
これは取引先と取引先責任者でも同様です。取引先A社に所属する、Bさん、Cさんのような関係性ですね。
このようなリレーションがあれば、レポートで複数オブジェクトのデータをまとめて表示したり、数式でデータを引っ張って表示したり、Lightningレコードページに関連レコード(子レコード)を一覧で表示したりと、様々な便利機能を使用することが出来ます。
参照関係と主従関係
参照と主従はどちらも別のオブジェクトレコードを「参照する・関連付ける」という点で同等の機能を持っています。それでは、それぞれの違いや、作成時の選定基準はどうすればよいでしょうか。
参照と主従、それぞれの特性を比較したのち、積み上げ集計や活動の積み上げといった具体的な機能ベースでの比較を行っていきます。
Salesforceの参照関係とは
Salesforceの参照関係は、異なるオブジェクト間のリレーションを定義するための機能です。
参照を設定するには、参照元(子オブジェクト)側に参照のデータ型で項目を作成し、参照先(親オブジェクト)を参照させます。
このリレーションにより、一方のオブジェクト(例えば「取引先責任者」)が、他方のオブジェクト(例えば「取引先」)を参照できるようになります。
これは、オブジェクト間での緩やかなつながりを表現し、参照される側のレコードが削除されても、参照する側のレコードは残ります。例えば取引先を削除しても取引先責任者は残ります。
また、標準・カスタムオブジェクトなど一つのオブジェクトに作成できる参照項目の数に上限はありません。
Salesforceの主従関係とは
Salesforceの主従関係とは、親レコード(主)と子レコード(従)の間に強い依存関係を持たせるリレーションの持たせ方です。親レコードが削除されると、子レコードも一緒に削除されます。また、子レコードは独立して存在できず、必ず親レコードに関連付けられます。また、従オブジェクトのアクセス権限や共有設定は主オブジェクトに依存し、主オブジェクトの設定に従います。
主従関係における最も分かりやすい機能として、積み上げ集計があります。主オブジェクト上に積み上げ集計フィールドを設定して、従オブジェクトの集計データを表示することが可能です。
主従関係の上限として、1オブジェクトの中で主従項目は2つまで持てます。ただしこれは飽くまでも1オブジェクト内の項目数の上限なので、1つの親オブジェクトに対して主従関係のリレーションを3つ以上にすることは可能です。
参照関係と主従関係の比較
リレーションを司る項目として参照と主従は非常に似ていますので、カスタムオブジェクトを作成する際など、どちらを選んだらよいのか迷ってしまう場合があります。そこで、以下にそれぞれの違いをまとめました。
一般的には参照を使っておけば無難であり、主従を使うと後々不都合が生じる場合があります。主従は、主従関係という型にデータモデルをがっちりと嵌めることになります。そのデータモデル自体にメリットを見いだせない場合には、それがデメリットになり得ます。
機能差分 | 参照関係 | 主従関係 | 主従を使う理由 |
---|---|---|---|
親レコードの必須入力 | 入力は任意 | 入力必須 | データ構成に一貫性を持たせる |
親レコード削除時の子レコードの挙動 | 親レコードが削除されても子レコードは削除されない | 親レコードが削除されると子レコードも削除される | データがクリーンで整理された状態に保たれる |
リレーションの設定制限 | 複数設定可能 | 1オブジェクトにつき2つのみ設定可能 | 依存関係の整合性をとる |
子オブジェクトのデータ集計 | 集計不可 | 積み上げ集計が使える | 子レコードを親レコード上で一括集計できる |
共有設定 | 親と子は独立した共有設定が可能 | 主レコードの共有設定に依存し、従レコードは独立した設定ができない | 関連レコード間で一貫したアクセスを保証 |
データ型の選定は慎重に行いたいですが、制限はあるものの、主従でつくったデータ型を後から参照にすることも可能です。
主従関係で使用できる「積み上げ集計」とは
積み上げとは、主従関係でのみ使⽤できる特別な機能です。複数存在する⼦レコードの特定の項目を、親レコード上で一まとめに集計することが可能です。
たとえば、ある取引先(親)が複数の商談(⼦)を持っているとします。各商談には「⾦額」フィールドがあります。
積み上げ集計を使⽤すると、取引先レコードに「合計商談⾦額」という新しいフィールドを作成し、その取引先に関連するすべての商談の⾦額を⾃動的に合計することができます。
積み上げ集計機能で実現できる計算
・合計:⼦レコードの数値フィールドの値を合計します。
・平均:⼦レコードの数値フィールドの値の平均を計算します。
・最⼤値:⼦レコードの数値フィールドの値の中で最⼤のものを⾒つけます。
・最⼩値:⼦レコードの数値フィールドの値の中で最⼩のものを⾒つけます。
積み上げ集計には、⼀定の条件を満たすレコードのみを集計対象とする検索条件機能があります。⼤変便利な機能ですが、条件には固定値しか設定できませんので、直近1年間の商談のみを集計し続ける、という条件は実現できません。
※今日から過去1年、のような動的な設定が出来ません。無理やりやろうとすると条件を毎月自分で変更しなくてはならないのでツラいです。
積み上げ集計の設定方法
設定>オブジェクトマネージャー>該当の親オブジェクトを選択する>項目とリレーション>新規ボタンを押す
データ型は積み上げ集計を選択します。
次に、以下の画面が開きます。表示ラベルや項目名(API参照名)を入力していきます。
すると下図のとおり、集計対象の選択画面が開きます。合計値を表示するのか、最大・最小値なのか?などを選択し、集計対象とする項目を選択します。ここでは商談の金額の合計値を設定しています。
他にも、日付型の項目を集計対象とし、「最小」を選択すると最も古い日付が表示されるので、初回取引日を表示するというユースケースも検討出来ます。
また前述の通り、集計対象となるレコードを絞り込むことも可能です。評価対象の項目に対してテキストが一致するか、であったり、数値や日付が以上以下、などの設定をおこないます。
主従関係では活動が主オブジェクトの活動タイムラインに集約される
主従関係を語るうえで外せない要素として、活動のタイムラインへの自動積み上げ機能が挙げられます。
実は活動の積み上げは、おそらく皆さんもよく使っており、取引先責任者や商談で活動を作成すると、取引先の活動タイムラインですべての活動が時系列で連なって確認できることをご存知かと思います。
主従関係ではこの機能を特別な設定は全くなしで使用することができます。
例えば、製品販売後のオンボーディングを担当する部門が使用するオンボーディングオブジェクトがあるとします。参照で作ってしまうと、オンボーディング中の活動はオンボーディングOBJに行かないとみることが出来ません。
主従にしておけば、活動はすべて取引先のタイムラインで一望できますので、営業やオンボーディング後の保守チームが取引先だけを見れば直近のやり取りが把握できる、という状態にすることが出来ます。
この機能は主従を使用する理由になり得る強力機能です。
ただし、主オブジェクトがカスタムオブジェクトの場合にはこの機能は使えません。
参照関係・主従関係の作り方
参照関係と主従関係の設定は、どこかでそのリレーションを選択するというわけではなく、それぞれの項目を実際にカスタム項目で作成することによって定義されます。
例えば、「物件」というカスタムオブジェクトがあるとして、取引先と主従関係を結びたいとします。その場合には、物件オブジェクトに取引先を参照する主従項目を作成することで、取引先を主、物件を従とする主従関係を定義することが出来ます。
参照関係と主従関係の項目を作成する方法は以下の通りです。設定画面のオブジェクトマネージャーから、対象のオブジェクトを選択します。左側のサイドメニューで「項目とリレーション」を押し、「新規」ボタンを押します。
データ型選択の画面が開きますので、参照か主従かを選択します。この解説では主従関係を例に進めていきます。
参照先のオブジェクトを選択し、次へを押します。
次に表示ラベルや項目名(API参照名)を入力します。
「子リレーション名」をどのように命名したらよいのか悩む場合がありますが、「親オブジェクトからみた子オブジェクトの関係性」を意図する表記になっていれば大丈夫です。つまり、物件オブジェクトの場合は「Properties」となります。親オブジェクトに対して子は複数存在するので、複数形にするのが一般的です。
子リレーション名の下の部分で、主従関係を定義する際の個別の設定がありますので補足します。
「共有設定」は、子レコード側を作成、編集、削除するために主レコード側でどんな共有権限を満たしていればよいのかを設定します。主従関係では、親側の共有設定が子側に影響を及ぼすため、その影響の強度を決めるイメージですね。
「親の変更を許可」も同様に、子レコードを作成後に別の親レコードの子に変更できるかどうかという点で、親から子への影響度を定めます。
以降は通常のカスタム項目作成と同様です。
まとめ
最後に、リレーション設定の注意点をおさらいします。
- データの整合性の確保:リレーション設定時にデータの整合性が維持されるようにする。
- 適切なリレーションの選択:ビジネス要件に基づいて、主従関係と参照関係のどちらを選択するか検討する。
- カスケード削除の影響を理解する:主従関係では親レコードの削除が子レコードに影響することを理解しておく。
- アクセス権と共有設定の管理:リレーションによってアクセス権や共有設定がどのように影響を受けるかを考慮する。
Salesforceでのデータ管理では、オブジェクトリレーションの適切な選択が重要です。特に「主従関係」と「参照関係」は、それぞれ独自の特性を持っています。
主従関係は積み上げ集計機能を活用できる一方で、データの整合性と強い依存関係が特徴です。参照関係はより柔軟なデータ構成と、独立したアクセス権設定を実現します。
これらの違いを理解し、ビジネス要件に合わせたリレーションタイプを選定していきましょう。