【システムエンジニア】主従関係と参照関係について学ぼう

はじめに

Salesforceの資格勉強をしている際によく目にするワードで主従関係と参照関係がある。

なんとなく主従関係は親に依存して参照関係は親に依存しないということは理解しているつもりだが、
実際に説明してと言われると難しいことに気づいた。

ということで本日のテーマは、「主従関係」と「参照関係」について学ぼう。について紹介していきます。

主従関係とは?

Salesforceで一つのオブジェクト(親)が複数の別のオブジェクト(子)を管理する関係です。
親オブジェクトのレコードが削除されると、子オブジェクトのレコードも削除される。


主従関係を学校の教室に例えて説明してみよう。

教室の関係:

1.教師(クラスの先生): 教室を管理する先生です。

2.生徒(クラスの生徒たち): 教室にいる生徒たちです。

主従関係の特性:

教師がいなくなると生徒もいなくなる:
もし教師が転任して教室を離れると、その教室の生徒たちも教室を離れる。
つまり、教師(親)がいなくなると、その教室の生徒(子)もいなくなります
これが「親が削除されると子も削除される」という特性です。

生徒は教師に依存している:
生徒たちは特定の教師のクラスに所属しており、その教師がいないと、そのクラスの生徒たちも他のクラスに移動する必要がある。
生徒たちは教師に依存しており、教師がいないとそのクラスの生徒たちは存在できないという関係です。

このように、主従関係は教師と生徒のように、親(教師)がいなくなると子(生徒)もいなくなる関係を示している。

参照関係とは?

Salesforceで一つのオブジェクトが別のオブジェクトを参照する関係です。
親オブジェクトのレコードは削除されても、子オブジェクトのレコードは削除されない。
参照関係は、オブジェクト間の関連を保持しつつ、親子の削除に影響しない。

参照関係を学校のクラスと生徒の関係で説明してみよう。

クラスと生徒の関係:

1.クラス(教室):
学校にあるいくつかの教室の一つです。

2.生徒(生徒たち):
それぞれの教室にいる生徒たちです。

参照関係の特性:

クラスがなくても生徒は別のクラスに移れる:
もし教室が取り壊されてなくなったとしても、その教室にいた生徒たちは別の教室に移ることができる。
つまり、クラス(親)がなくなっても、生徒たち(子)はまだ存在する

生徒はクラスに関連しているが独立している:
生徒たちは特定のクラスにいるけれど、そのクラスがなくなっても、生徒たち自体は他のクラスに移って存在し続けることができる。
生徒はクラスに「参照」しているけれども、クラスがなくなっても生徒が直接影響を受けるわけではない。

このように、参照関係は、クラス(親)がなくなっても生徒(子)が別のクラスで存在し続けるように、親が削除されても子が独立して存在できる関係を示している。

主従関係と参照関係の使い分けは?

主従関係と参照関係の使い分けは、以下のようにします。

主従関係:

親子の削除連動:
親レコードが削除されると、子レコードも自動的に削除されます。

親オブジェクトに依存:
子オブジェクトは親オブジェクトに必ず関連付けられ、親がないと存在できません。

例:
取引先とその取引先に関連する連絡先。

参照関係:

削除の影響なし: 親レコードが削除されても、子レコードは削除されません。

親オブジェクトへの依存が緩やか: 子オブジェクトは親オブジェクトに関連付けられていても、親が削除されても子はそのままです。

 例: 取引先と商談、または商品と注文。

つまり、主従関係はデータの一貫性が重要な場合に使い、参照関係は親子の独立性が求められる場合に使います

問題を基に解説してみる

このままだと、わかりづらいと思うので、問題と解説を基に説明していきます。

問題:

企業は、候補者と面接をモデル化する求人アプリを求めています。各候補者レコードの面接の総数を表示します。
面接レコードのセキュリティを、候補レコードのセキュリティとは独立して定義します。開発者はこのタスクを達成するために何をしますか。2つ選びなさい。

A.面接レコードをカウントする候補オブジェクトに積み上げ集計項目を作成します
B.候補オブジェクトと面接オブジェクトの間に主従関係を作成します
C.候補オブジェクトと面接オブジェクトの間に参照関係を作成します
D.候補オブジェクトの項目を更新するトリガーを面接オブジェクトに作成します

答え:

C.候補オブジェクトと面接オブジェクトの間に参照関係を作成します
D.候補オブジェクトの項目を更新するトリガーを面接オブジェクトに作成します 

解説:

このタスクを達成するための正しい選択肢は以下となる。
C.候補オブジェクトと面接オブジェクトの間に参照関係を作成します
D.候補オブジェクトの項目を更新するトリガーを面接オブジェクトに作成します 

C. 参照関係を作成する
参照関係を使用することで、面接レコードのセキュリティ設定を候補レコードから独立させることができます。
これにより、面接レコードのアクセス権が候補レコードのアクセス権に依存しないようにします。

D. トリガーを作成する
トリガーを作成することで、面接が作成、更新、削除されたときに、対応する候補レコードの面接の総数を動的に更新できます。これにより、積み上げ集計項目が不要になります。


不正解の選択肢:

A. 積み上げ集計項目を作成する
積み上げ集計項目は主従関係でのみ使用可能です。参照関係では使用できません。

B. 主従関係を作成する
主従関係を作成すると、面接レコードのセキュリティが候補レコードのセキュリティに依存するようになります。

問題の要件では、面接レコードのセキュリティを候補レコードから独立させる必要があるため、この選択肢は適切ではありません。

問題のポイント:

企業の求人アプリで、候補者の面接数を表示し、面接レコードのセキュリティを候補レコードから独立させるための最適な方法を問われている。

補足(参照関係について):

参照関係を使うと、面接レコードと候補レコードのセキュリティ設定が別々に管理できます。
面接レコードと候補レコードの関係を「学校のノートとカレンダー」にたとえると、

1. ノート(面接レコード): 学校での面接やテストの記録が書かれたノートです。
2. カレンダー(候補レコード): 生徒のスケジュールや予定を書いたカレンダーです。

参照関係の使い方:

別々の管理: ノート(面接レコード)とカレンダー(候補レコード)は、個別に管理されます。
つまり、ノートを見れる人がカレンダーを見れるわけではなく、逆も同様です。

セキュリティ: ノートのアクセス(誰が見れるか)をカレンダーのアクセスに影響されることなく設定できます。
たとえば、カレンダーを見れない生徒でも、ノートの情報を見られることができます。

これにより、ノートとカレンダーの情報を別々に管理し、必要な情報だけを適切な人に見せることができる。

まとめ

主従関係と参照関係の使い分けについての説明をブログでまとめるととても分かりやすくなった。
主従関係は親オブジェクトが削除されると子オブジェクトも削除されるため、一貫性が保たれる反面、セキュリティやデータ管理に制約があり、
参照関係は親オブジェクトの削除が子オブジェクトに影響しないため、データの独立性を保ちつつ柔軟な管理が可能となる。

では、また次の記事でお会いしましょう。

おすすめの記事