Краткий ответ

Качественная модель данных в Salesforce — это не самая теоретически идеальная модель, а та, которая одновременно поддерживает три аспекта: бизнес-процессы, модель разрешений и необходимую отчетность. Большинство неудачных моделей строились только вокруг первого аспекта.

Отличие решения по модели данных от других проектных решений заключается в стоимости изменений. Изменение Flow занимает день; изменение типа связи между объектами после двух лет накопленных данных, автоматизации и интеграций — это отдельный проект. Поэтому инвестиции на этапе планирования здесь окупаются больше, чем где-либо еще.

Первое правило: начинать со стандартных объектов

Account, Contact, Lead, Opportunity, Case и Product обладают возможностями, которые не доступны бесплатно для пользовательского объекта: процессы продаж, прогнозирование, права, Omni-Channel, мобильное приложение и встроенная интеграция с другими продуктами платформы.

Организация, которая создает Customer__c вместо Account, на начальном этапе получает более чистую модель, но затем обнаруживает, что каждая стандартная функция требует самостоятельной реализации. Правило: отступать от стандарта следует только при наличии причины, которую можно сформулировать одним предложением.

Когда требуется пользовательский объект

СитуацияТребуется ли пользовательский объектОбоснование
Контракт/подписка с собственным жизненным цикломДаОтдельные статусы, продление, владение и отчетность
Установленное оборудование у клиентаДа (или стандартный Asset)Самостоятельная сущность с историей обслуживания
Дополнительный "потенциальный клиент"НетЭто Lead или Account с Record Type
Отдел в организацииНетДанные о пользователе, а не отдельная сущность
Сложные ценовые позицииЗависитПеред созданием рассмотреть Quote Line или CPQ

Нормализация против денормализации: решение, влияющее на отчетность

В классических базах данных нормализация является достоинством. В Salesforce она обменивается на удобство отчетности: каждый дополнительный уровень связи усложняет построение отчета без внешнего инструмента, поскольку стандартная отчетность ограничена глубиной связей.

Принятый компромисс — нормализация там, где данные изменяются и дублируются, и контролируемая денормализация часто используемых полей запросов в объект, из которого формируются отчеты, при условии, что дублирование управляется автоматически, а не вручную. Поле, дублирование которого обновляется вручную, становится некорректным в течение нескольких месяцев.

Разрешения — часть модели, а не последующий этап

Вопрос "кто что видит" должен задаваться на этапе проектирования объектов. Модель, в которой конфиденциальные данные находятся в том же объекте, что и операционные данные, впоследствии заставляет использовать обходные решения — теневой объект, зашифрованные поля или предоставление слишком широкого доступа.

Практическая проверка: для каждого нового объекта пишется одна строка — кто владелец, кто читает, кто изменяет и что происходит в иерархии. Если ответ требует более четырех строк, структура, вероятно, смешивает две сущности.

Более подробная информация об источниках данных и полномочиях по обновлению представлена в статье Source of Truth в организации, а об управлении основными данными — в Управление основными данными (MDM).

Сценарий: компания-разработчик ПО, построившая модель вокруг отделов

Средняя SaaS-компания построила модель с четырьмя пользовательскими объектами — по одному для каждой команды продаж — потому что каждая команда имела свой собственный процесс. Полтора года спустя произошло объединение команд, и тогда потребовались: унификация отчетов, параллельная автоматизация в четырех местах и внутренняя миграция 60 тысяч записей между объектами.

Перестройка основывалась на одном Opportunity с Record Types для разных процессов. Та же бизнес-логика была сохранена — разные процессы продаж, разные поля, разные Page Layouts — но на уровне конфигурации, а не структуры. Следующее организационное изменение потребует изменения Record Type, а не миграции.

Правило, вытекающее из этого: структура представляет сущности; конфигурация представляет организацию. То, что, как ожидается, будет меняться раз в два года, не должно быть частью структуры.

Производительность и объем — что действительно важно

Проблемы с производительностью в модели данных в основном возникают из трех источников: Data Skew (один родитель с десятками тысяч дочерних записей, например, Account "частные клиенты"), вложенные формулы, вычисляемые в реальном времени по связям, и совместное использование на основе Apex Sharing, созданное в большом объеме. Все три могут быть идентифицированы на этапе проектирования, если задать вопрос о предполагаемом количестве записей под каждым родителем.

Типичные риски и превентивные меры

РискКак он проявляется на практикеПревентивные меры
Избыточный пользовательский объектСтандартные функции реализуются вручнуюПроверка стандартных объектов перед созданием нового
Master-Detail слишком раноКаскадные удаления и неизменяемая структураНачинать с Lookup, если не требуется Roll-Up
Модель, отражающая структуру организацииКаждое организационное изменение становится миграциейRecord Types вместо объектов
Data SkewБлокировки и замедление при массовых обновленияхРаспределение родительских объектов, оценка объема на этапе планирования
Разрешения как запоздалая мысльОбходные решения и слишком широкий доступМатрица доступа для каждого объекта на этапе планирования

Как измерять успех

ОбластьЧто измеряетсяЧастота проверки
Использование полейПроцент заполнения для каждого поляЕжеквартально
ОтчетностьПроцент отчетов, требующих ручной консолидацииЕжеквартально
Стабильность структурыКоличество структурных изменений за полгодаРаз в полгода
ПроизводительностьВремя массового обновления и блокировкиЕжемесячно

Проектирование модели данных как части общей архитектуры осуществляется в рамках услуг интеграции и данных.

Контрольный список перед фиксацией модели

  • ☐ Для каждого пользовательского объекта существует однословное обоснование
  • ☐ Проверен альтернативный стандартный объект для каждой сущности
  • ☐ Тип связи явно выбран с обоснованием для Master-Detail
  • ☐ Оценочный объем для каждого родительского объекта (проверка на Skew)
  • ☐ Матрица доступа: владелец, читатель, редактор, иерархия
  • ☐ Проверено, что каждый центральный отчет может быть построен в модели
  • ☐ Дублированные поля обновляются только автоматически
  • ☐ Ожидаемые организационные изменения обрабатываются в конфигурации
  • ☐ Существует актуальная и документированная ERD
  • ☐ Определен ответственный за утверждение изменений структуры в будущем

Профессиональные источники