Salesforceのオブジェクト間の1対多のリレーションについて教えてくれい。
「主従関係」と「参照関係」について説明します。
「主従関係」と「参照関係」
Salesforceにおける「主従関係(Master-Detail Relationship)」と「参照関係(Lookup Relationship)」は、オブジェクト間の1対多の関連性を定義する重要な概念です。まずは比較表で違いを見ましょう。
参照関係 | 主従関係 | |
関係性 | 緩い オブジェクト間の関連性は比較的緩やかです。オブジェクト間に直接的な依存関係はありません。 | 強い ある雑誌(主オブジェクト)と、その雑誌に掲載される記事(従オブジェクト)の関係のように、親子関係がはっきりしています。 |
親レコードとの関係 | 独立 子レコードに親レコードの指定は必須ではありません。親レコードが削除されても、子レコードは削除されません。 | 依存 従オブジェクトのレコードは、必ず主オブジェクトのレコードに依存します。主オブジェクトのレコードが削除されると、関連する従オブジェクトのレコードも自動的に削除されます。 |
セキュリティ設定 | 独立 親レコードと子レコードはそれぞれ独立したセキュリティ設定を持ちます。片方が非公開になっても、もう片方には影響しません。 | 共有 従オブジェクトのセキュリティ設定は、主オブジェクトから継承されます。親レコードが非公開になると、子レコードも非公開になります。 |
積み上げ集計項目 | 不可 積み上げ集計項目は作成できません。※ 例外的なケース(例: 取引先と商談の関係)では可能。 | 可能 積み上げ集計項目を使用して、子レコードのデータを親レコードで集約することが可能です。 |
親レコードと子レコードの関係
主従関係はデータ整合性を保ちやすいですが、参照関係はより柔軟性があります。例えば、主従関係の場合、親レコードが削除されると、それに関連する子レコードも自動的に削除されます。このため、データ間の整合性が保たれやすくなります。例えば、特定のプロジェクト(親レコード)が削除された場合、そのプロジェクトに関連するタスク(子レコード)も一緒に削除されるため、孤立したタスクのレコードが残らないという利点があります。
参照関係では、親レコードが削除されても、子レコードは削除されずに残ります。これにより、データ構造がより柔軟になります。例えば、ある従業員(子レコード)が特定の部署(親レコード)に所属しているが、その部署が廃止された場合、従業員のレコードは残り、他の部署に再割り当てすることが可能です。このように、参照関係ではデータ間の結びつきが弱いため、より多様なデータモデルの設計が可能になります。
セキュリティ
「主従関係」と「参照関係」の、主にデータの可視性とアクセス制御の違いについて説明します。
主従関係におけるセキュリティ:
- 親レコードに依存: 主従関係では、子レコード(従オブジェクト)のセキュリティ設定は親レコード(主オブジェクト)に依存します。親レコードのアクセス権限に基づいて、子レコードの可視性が決定されます。
- 所有者フィールドの欠如: 従オブジェクトには「所有者」フィールドが存在しません。これは、子レコードの所有権が親レコードによって間接的に制御されるためです。
- データの整合性保持: 強い結びつきにより、データの整合性が保たれ、セキュリティの漏洩を防ぐことができます。
参照関係におけるセキュリティ:
- 独立したアクセス制御: 参照関係では、親レコードと子レコードは独立したセキュリティ設定を持ちます。それぞれのレコードには個別の所有者フィールドがあり、それに基づいたアクセス権が設定されます。
- 柔軟な可視性の管理: 親レコードが非公開でも、子レコードを公開することが可能です(逆も同様)。これにより、より柔軟なデータアクセス制御が可能になります。
- 複雑なアクセス権設定: 参照関係は複雑なアクセス権設定が可能であり、特定のユーザーやグループに対して微細なアクセス権を設定することができます。
積み上げ集計項目
「主従関係」と「参照関係」では、積み上げ集計項目の扱いに顕著な違いがあります。これは、データの集計方法とデータモデルの設計に大きな影響を与えます。
主従関係における積み上げ集計項目:
- 使用可能性: 主従関係では、積み上げ集計項目を作成することが可能です。これにより、親レコードに対して、関連する子レコードのデータを集計した結果を表示できます。
- 集計の種類: 積み上げ集計項目では、子レコードの件数、合計、最小値、最大値などを集計することができます。例えば、顧客(親レコード)ごとの合計購買額や平均取引額、取引の件数などを計算できます。
- データ整合性: 主従関係において子レコードが削除または更新されると、それに応じて積み上げ集計項目の値も自動的に更新され、データの整合性が維持されます。
参照関係における積み上げ集計項目:
- 使用制限: 通常、参照関係では積み上げ集計項目を作成することはできません。これは、参照関係において子レコードと親レコードが緩やかに関連付けられているためです。
- 例外ケース: ただし、特定の標準オブジェクト(例えば、取引先と商談)では、参照関係であっても積み上げ集計項目を作成することが可能な場合があります。このような場合は例外的であり、Salesforceの標準オブジェクトの特定の関係性に限られます。
- 集計の代替手段: 参照関係では積み上げ集計項目が利用できないため、データ集計にはレポートやSOQLクエリなど他の手段を用いる必要があります。
まとめ
Salesforceの主従関係と参照関係の違いを簡潔に説明すると以下のようになります。
主従関係(Master-Detail Relationship)
- 強い依存性: 子レコードは親レコードに強く依存しており、親が削除されると子も削除されます。
- セキュリティと共有設定の継承: 子レコードのセキュリティと共有設定は親から継承されます。
- 積み上げ集計項目: 親レコードで子レコードのデータを集計できます。
参照関係(Lookup Relationship)
- 緩やかな依存性: 親子間の依存性は弱く、親が削除されても子は残ります。
- 個別のセキュリティ設定: 親と子はそれぞれ独立したセキュリティ設定を持ちます。
- 積み上げ集計項目の制限: 通常は子レコードのデータを親で集計することはできません(特定の例外あり)。
オブジェクト間の一対多のリレーションにおける「主従関係」と「参照関係」の違いについて説明しました。
以上になります!
コメント