Типы связей в Salesforce между объектами

Relationships в Salesforce предоставляют возможность связывать объекты между собой. Вы не можете изменить стандартные связи, но можете создавать собственные, с помощью custom fields указывая необходимый вам тип. Разница между типами заключается в их поведении при создании, удалении, обращении к ним, а так же они имеют разные лимиты.

Виды связей:

1. Master-detail
2. Lookup
3. External lookup
4. Indirect lookup
5. Hierarchical
6. Many-to-many

Master-detail

Master-detail может быть 1 ко многим(1:n) и многие ко многим(n:n). При использовании этой связи объекты делятся на Detail(дочерний) и Master(родительский).
Имеет ряд своих ограничений:

  • Удаление

    • Когда запись основного объекта удаляется, его связанные записи также удаляются.
    • При удалении detail записи master запись остается.
    • При восстановлении master записи восстанавливается также и detail запись.
    • Если удалить Detail, а потом Master запись, то восстановить detail связь уже не удастся.
    • Вы не можете удалить кастомный объект если он является Master.
    • Если удалить кастомный объект, который является Detail, то отношение конвертируется в Lookup.
  • Создание

    • Каждая detail обязана иметь master запись.
    • Поле связи master-detail обязательное на “page layout” detail записи.
    • Стандартный или кастомный объект может быть Master. Но стандартный объект не может быть Detail.
    • Кастомный объект может иметь до двух master-detail связей.
    • По умолчанию нельзя переназначать Master для Detail записи. Однако администратор может включить «Allow reparenting» при создании связи;
    • Поле «Owner» не доступно на detail записи и автоматически получает значение из Master.
    • Вы не можете создать связь Master-Detail если кастомный объект уже содержит данные. Вы можете создать Lookup связь, и потом конвертировать её в master-detail при условии что все дочерние записи имеют родителя.
  • Доступ

    • Detail запись наследует все настройки доступа из Master. Если у вас нет доступа к Master записи, то и к Detail обратиться не получится.

Так же, только на Master объекте вы можете создать Roll-up поле.

Преобразование Master-detail в LookUp

Существуют некоторые условия которые нужно выполнить, чтобы произвести преобразование.
Для конвертации Master-detail в LookUp нужно чтобы на объекте Master не было Roll-up summary полей.

Для конвертации LookUp в Master-detail нужно:

  • Все дочерние записи в Lookup связи должны иметь родителя. Так как в Master-detail не существует дочерних записей без родителя.

Junction object

Junction object - это “Custom object” который используют для связи двух объектов в отношении многие ко многим. Этот объект имеет две связи master-detail на два разных объекта.

Руководство по созданию Master-Detail relationship: Создание Master-detail связи

Lookup

Lookup связь связывает два объекта, как и master-detail, но не влияет на удаление и доступ detail записи. В отличие от master-detail записей, родитель в Lookup не является обязательным для заполнения. Когда вы определяете Lookup, то на родительском объекте в настройке “page layout” появится возможность добавить “related list” зависимых записей.
Создавая Lookup вы можете:

  • Связать два разных объекта.
  • Связать объект с самим собой за исключением объекта User.

Lookup связь самая распространенная связь в Salesforce.

External lookup

External lookup - это связь между внешним объектом и объектом Salesforce, где объекты сопоставляются по уникальному полю.
Когда вы создаете external lookup связь она связывает “standart objet” или “custom objects” с внешним объектом, где внешний объект будет в роли родительского объекта, а Salesforce объект в роли дочернего. Поля внешнего объекта сопоставляются с полями Salesforce объекта, значения которых заполняются из внешнего источника.
Более детально про External Relationships : External Object Relationships.
Работа с External Object : Знакомство с External object

Indirect lookup

Indirect lookup связь связывает внешний объект с “standart objet” или “custom objects” в Salesforce. Иными словами Indirect lookup связь похожа на External lookup только теперь Salesforce объект является родительским объектом, а внешний дочерним объектом. Когда вы создаете поле Indirect lookup на внешнем объекте, вы указываете уникальное поле родительского объекта и уникальное поле дочернего объекта, чтобы сопоставить записи. Значения полей внешнего объекта в отличие от External lookup заполняются значениями из Salesforce объекта.

Hierarchical

Hierarchical - это специальная Lookup связь которая доступна только для объекта User. Он позволяет пользователям использовать поле Lookup, чтобы связать одного пользователя с другим, который прямо или косвенно не ссылается на него. Например, вы можете создать иерархию пользователей организации.

Many-to-many

Вы можете использовать связь master-detail для моделирования отношений «многие-ко-многим» между любыми двумя объектами. Отношение «многие ко многим» позволяет каждой записи одного объекта связываться с несколькими записями от другого объекта и наоборот.
Чтобы реализовать связь многие ко многим между двумя объектами в Salesforce создают третий объект который называется Junction. Он будет иметь ссылки на эти два объекта.
Junction Object: в Salesforce объект Junction - это кастомный объект с двумя master-detail полями для двух разных типов записей.

3 Likes