Перейти до вмісту

Перетворіть модель на Salesforce

Також доступно 28 мовами

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

A white card model rising from the plan it was drawn on, built from repeated standard window pieces with one curved wooden wall, the rest of the plan still bare.
Зображення згенеровано ШІ

Модуль 6 з 6 розділу Моделювання даних заради змісту, розділ 2 курсу Data Architect. Кожен модуль самостійний. Попередній: Проєктуйте до третьої нормальної форми, а потім відступіть · Наступний: навчальний посібник до розділу, потім наступний розділ: архітектура даних Salesforce

Питання, на яке відповідає цей модуль: Як логічна модель даних стає фізичною моделлю даних Salesforce?

Нарешті ми поговоримо про Salesforce. Якщо ви стримували бажання перетворити кожен прямокутник на об’єкт, тепер можна. Але зверніть увагу на порядок, яким ми сюди прийшли: зрозуміли бізнес, описали дані, поклали кожен факт на його місце і вирішили, де свідомо від цього відступимо. Лише тепер я питаю, як Salesforce має це реалізувати. Ось послідовність, яку я хочу, щоб ви запам’ятали: концептуальна → логічна → фізична. Концептуальна модель описує бізнес. Логічна модель описує дані. Фізична модель описує, як ми насправді це збудуємо.

Сидіти, чекати, моделювати

Section titled “Сидіти, чекати, моделювати ”

Фізичний крок найлегше побачити на чомусь маленькому, тож улюбленці йдуть першими.

Хто тут компанії й люди? Заводчик — компанія, тож він стає Account із типом запису Breeder. Власник теж Account, або персональний акаунт, із типом запису Owner. Два види того самого стандартного об’єкта, поруч угорі діаграми, саме там, де вони були з модуля 1.

Що не має стандартного дому? Улюбленець, Порода, Трюк, Трюк улюбленця і Оцінка трюку стають користувацькими об’єктами. А пам’ятаєте вид, який ми скопіювали на улюбленця в модулі 5? Тут він отримує свою роботу: він стає типом запису Улюбленця — Dog чи Cat. Один об’єкт із двома типами записів, кожен із власним макетом сторінки й значеннями списків вибору, замість об’єкта Собака й об’єкта Кіт.

Які зв’язки — master-detail? Я використовую master-detail лише там, де дочірній запис ніколи не змінить батька. Трюк улюбленця належить своєму улюбленцю довічно, а кожна Оцінка трюку належить своєму Трюку улюбленця, тож обидва — master-detail. Це одразу окупається: саме master-detail дає улюбленцю змогу мати зведене поле (roll-up summary) за своїми Трюками улюбленця, тож лічильник Відомих трюків із модуля 5 сам іде в ногу. Але улюбленці змінюють домівки, тож Власник — це lookup.

Які — lookup? Salesforce не рекомендує понад 10 000 дочірніх записів на одного батька. Популярний трюк на кшталт «Сидіти», поширена порода чи великий заводчик легко перевищать цю межу, тож Трюк улюбленця посилається на свій Трюк через lookup, а улюбленець так само посилається на свою Породу і Заводчика. І уникайте поліморфних зв’язків, де можете, — тих, де одне поле може посилатися на об’єкти кількох типів. Вони зручні першого дня і складніші для всього, що має їх читати згодом: звітів, інтеграцій, а тепер і агентів.

Що лишається поза платформою? Якщо улюбленець носить GPS-нашийник, який повідомляє, де він, це місцезнаходження взагалі не треба копіювати всередину. Це може бути зовнішній об’єкт, що читається наживо із системи відстеження нашийника.

Модель улюбленців у Salesforce Модель улюбленців як об’єкти Salesforce. Угорі два Accounts: один із типом запису Owner, другий із типом запису Breeder. Pet__c під ними має типи записів Dog і Cat, номер мікрочипа як зовнішній ID, lookup до Owner, Breeder і Breed__c, а Tricks_Known__c — як зведене поле. Pet_Trick__c у зв’язку master-detail з Pet__c і має lookup до Trick__c, з рівнем навички і датою навчання. Trick_Assessment__c у зв’язку master-detail з Pet_Trick__c. Breed__c має свій вид, назву і розмір; Trick__c — назву і складність. lookup lookup lookup master detail lookup master detail Account (Owner) Id ID ЗАПИСУ Тип запису: Owner Name Phone Account (Breeder) Id ID ЗАПИСУ Тип запису: Breeder Name Pet__c Id ID ЗАПИСУ Типи записів: Dog, Cat Microchip_Number__c ЗОВНІШНІЙ ID Owner__c LOOKUP Breeder__c LOOKUP Breed__c LOOKUP Name Birth_Date__c Tricks_Known__c ЗВЕДЕННЯ Breed__c Id ID ЗАПИСУ Species__c Name Size__c Pet_Trick__c Id ID ЗАПИСУ Pet__c MASTER-DETAIL Trick__c LOOKUP Skill_Level__c Date_Learned__c Trick__c Id ID ЗАПИСУ Name Difficulty__c Trick_Assessment__c Id ID ЗАПИСУ Pet_Trick__c MASTER-DETAIL Date__c Skill_Level__c Assessed_By__c рівно один нуль або один один або багато нуль або багато © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Кожне рішення на цій діаграмі веде назад до чогось, що ми вирішили раніше, і в цьому суть. Тепер той самий крок для Steve Trucking.

Почніть із логічної моделі

Section titled “Почніть із логічної моделі ”

Наша логічна модель Steve Trucking тепер містить Роздрібного партнера, Розподільчий центр, Маніфест, Доставку, Позицію доставки, Отримувача, Маршрут, Зупинку, Бригаду, Вантажівку і Призначення бригади. Це бізнес-поняття, і тепер я можу почати відображати їх на Salesforce.

Роздрібний партнер може бути Account. Доставка може відобразитися на щось, що в Salesforce уже є для запланованої роботи в полі, або стати користувацьким об’єктом. Для маніфесту немає нічого стандартного, тож він, мабуть, стане користувацьким. А отримувач — справді складне запитання: Person Account, Contact чи просто інформація на доставці? Ми як слід відповімо на нього в наступному розділі.

Важливе слово досі — може. Не припускайте реалізацію лише тому, що бізнес-поняття звучить як об’єкт Salesforce. Ось чому ми спершу збудували логічну модель: вона дає нам, з чим порівнювати дизайн Salesforce.

Бізнес-сутність не означає автоматично користувацький об’єкт

Section titled “Бізнес-сутність не означає автоматично користувацький об’єкт ”

Ось пастка, якої я хочу, щоб адміністратори уникали: «Ми визначили одинадцять сутностей, тож нам потрібно одинадцять користувацьких об’єктів». Ні. Логічна сутність каже нам, що бізнес-поняття важливе. Вона не диктує, як Salesforce має його зберігати. Поняття може стати стандартним об’єктом, користувацьким об’єктом, зв’язком між об’єктами, полем чи кількома полями, значенням у конфігурації або даними, що взагалі живуть поза Salesforce (фото доставок Steve Trucking — добрий кандидат для цього). Фізична модель — це місце, де ухвалюють ці рішення, і саме тому ми не ухвалювали їх на першій розмові.

Атрибути стають фізичними полями

Section titled “Атрибути стають фізичними полями ”

Той самий перехід відбувається з атрибутами. Наша логічна Вантажівка має бортовий номер, VIN, марку, модель, рік випуску, номерний знак і статус. Тепер ми вирішуємо, як вони існують фізично: який об’єкт ними володіє, яких типів поля, які обов’язкові, які мають бути унікальними, які є зовнішніми ідентифікаторами, які потребують перевірки, які обчислюються, а не зберігаються, і які чутливі. На логічному рівні ми питали, що означає Вантажівка. На фізичному рівні ми питаємо, як Salesforce відобразить Вантажівку. Різні запитання.

Вантажівка: від логічної сутності до об’єкта Salesforce Дві картки, рядок у рядок. Логічна, Вантажівка, що означає Вантажівка: ID вантажівки, бортовий номер, VIN, марка, модель, рік випуску, номерний знак, статус. Фізична, Truck__c, як Salesforce її подасть: Id, ID запису Salesforce; Name, текст із бортовим номером; VIN__c, текст на 17 символів, унікальний і зовнішній ID; Make__c, список вибору; Model__c, текст на 40; Model_Year__c, чотиризначне число; License_Plate__c, текст на 10; Status__c, список вибору, обов’язковий. Примітка внизу: логічна модель питає, що означає Вантажівка; фізична питає, як Salesforce її подасть. Логічна: Вантажівка що означає Вантажівка ID вантажівки Бортовий номер VIN Марка Модель Рік випуску Номерний знак Статус Фізична: Truck__c як Salesforce її подасть Id: ID запису Salesforce Name: текст, бортовий номер VIN__c: текст(17), унікальний, зовнішній ID Make__c: список вибору Model__c: текст(40) Model_Year__c: число(4) License_Plate__c: текст(10) Status__c: список вибору, обов’язкове Логічна модель питає, що означає Вантажівка. Фізична питає, як Salesforce її подасть. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Зв’язки стають рішеннями платформи

Section titled “Зв’язки стають рішеннями платформи ”

Увесь час, витрачений на зв’язки, окупається тут. Ми вже знаємо, чи кожен із них «один до одного», «один до багатьох» чи «багато до багатьох», обов’язковий чи ні і чи важлива його історія. Тепер ми вирішуємо, як Salesforce це реалізує: lookup, master-detail чи об’єкт-з’єднувач Salesforce (Salesforce Junction Object), можливо з’єднувач із власними атрибутами, бо, як ми з’ясували, сам зв’язок може мати бізнес-зміст.

Згадайте Призначення бригади. Ми могли почати цей розділ словами «створімо об’єкт-з’єднувач Salesforce між бригадою і вантажівкою». Подивіться, що ми пропустили б: чому зв’язок існує, чи потрібні йому дата й маршрут, чи має він статус і чи потрібна його історія для претензії про пошкодження через кілька тижнів. Ці бізнес-запитання кажуть нам, чим є Призначення бригади. Лише тоді варто вирішувати, як Salesforce його збудує і чи в Salesforce уже немає чогось, що виконує цю роботу.

Тепер намалюйте фізичну модель

Section titled “Тепер намалюйте фізичну модель ”

Діаграма знову змінюється. Концептуальна модель показувала бізнес-поняття і прості лінії. Логічна модель додала атрибути, ключі, кардинальність і сутності, що ховаються у зв’язках. Тепер фізична модель починає виглядати як Salesforce: стандартні об’єкти, користувацькі об’єкти, поля, типи зв’язків і те, що живе поза платформою.

Той самий бізнес на трьох рівнях Три панелі, той самий зріз на трьох рівнях. Концептуальний, що існує: Роздрібний партнер, рітейлер, для якого ми доставляємо, надсилає Доставки, і кожна Доставка, одне замовлення одному отримувачу, містить Позиції доставки, продукт у доставці. Логічний, як структуровано дані: ті самі три з ID записів і кількома полями; Доставку також знають за номером замовлення партнера; Позиція доставки несе ID продукту і кількість. Фізичний, як це збудує Salesforce: Роздрібний партнер — стандартний Account із типом запису Retail Partner; Доставка — користувацький об’єкт Delivery__c з номером замовлення партнера як зовнішнім ID і lookup до Account; Позиція доставки — користувацький об’єкт Delivery_Item__c у зв’язку master-detail зі своєю Доставкою, з кількістю. Примітка внизу: бізнес, концептуальна, логічна, фізична; вкажіть на будь-що праворуч і простежте це назад ліворуч. КОНЦЕПТУАЛЬНА: ЩО ІСНУЄ? ЛОГІЧНА: ЯК СТРУКТУРОВАНО ДАНІ? ФІЗИЧНА: ЯК ЦЕ ЗБУДУЄ SALESFORCE? надсилає містить надсилає містить lookup master detail Роздрібний партнер рітейлер, для якого доставляємо Доставка одне замовлення одному отримувачу Позиція доставки продукт у доставці Роздрібний партнер ID роздрібного партнера ID ЗАПИСУ Назва Статус Доставка ID доставки ID ЗАПИСУ Номер замовлення партнера ТАКОЖ ВІДОМИЙ ЯК Дата доставки Статус Позиція доставки ID позиції доставки ID ЗАПИСУ ID продукту Кількість Account (стандартний) Id ID ЗАПИСУ Тип запису: Retail Partner Name Delivery__c Id ID ЗАПИСУ Partner_Order_Number__c ЗОВНІШНІЙ ID Retail_Partner__c LOOKUP Delivery_Item__c Id ID ЗАПИСУ Delivery__c MASTER-DETAIL Quantity__c Бізнес → концептуальна → логічна → фізична: вкажіть на будь-що праворуч і простежте це назад ліворуч. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Я хочу, щоб ви могли покласти ці три діаграми поруч і побачити поступ: не три непов’язані діаграми, а той самий бізнес на трьох рівнях.

Кілька слів про те, як я їх малюю, бо компонування — частина повідомлення. Я ставлю головний об’єкт посередині, трохи нижче. Якщо в нього є батьківські об’єкти, я ставлю їх трохи вище, щоб модель читалася згори донизу, зліва направо, так, як про це думає бізнес. Довідкові дані — збоку. Колір теж щось означає: Salesforce я завжди роблю синім, а для власних систем компанії обираю колір, зазвичай зелений, бо зелений — приємний дружній колір. Червоний я не використовую, а жовті трохи різкуваті. Коли модель скомпонована так, вона для мене співає. Багато діаграм, які ви знайдете, насправді про управління простором: як мені припаркувати всі машини в тісному гаражі? Я волію намалювати логічну картину, яку розум може охопити.

Фізична модель має поважати платформу

Section titled “Фізична модель має поважати платформу ”

Salesforce — не узагальнена реляційна база даних. У неї є свої погляди на зв’язки, власність, безпеку і звітність. У неї є ліміти, поведінка запитів і автоматизація, а також архітектура, що впливає на те, як модель поводиться в масштабі. Тож логічна модель, що бездоганно виглядає на дошці, може потребувати змін, стаючи фізичною. Це не Salesforce заважає. Це означає, що платформа має форму, і добрі архітектори цю форму розуміють. Саме про це наступний розділ.

Іноді фізична модель також свідомо відрізнятиметься від чистої логічної моделі через рішення про денормалізацію, які ми ухвалили в модулі 5. Це нормально, якщо ми можемо пояснити чому.

Є звичка, яку я хочу, щоб ви покинули, якщо вона у вас є: починати архітектуру даних із Setup → Object Manager → New Custom Object і з’ясовувати модель на ходу. Salesforce робить створення речей неймовірно легким; це одна з його сильних сторін і одна з причин, чому слабкі моделі даних з’являються так швидко. Кілька кліків — і в вас об’єкт, ще кілька — і поля та зв’язок. Потім надходять дані, будуються flows, створюються звіти, від нього залежать інтеграції, і об’єкт, створений за п’ять хвилин, стає дуже дорогим для змін. Це тест на зворотність із розділу 1. Тож перш ніж натиснути New Custom Object, намалюйте модель.

Фізична — не означає постійна

Section titled “Фізична — не означає постійна ”

Є ще одна причина, чому я тримаю три моделі окремо: технології змінюються. Сьогодні частина даних Steve Trucking живе в ядрі Salesforce. Завтра частина може жити в Data 360, сховищі даних чи системі, яку ми ще не обрали, а ШІ-асистентові потрібне власне відображення. Фізична архітектура може змінюватися, а бізнес-поняття лишаються напрочуд стабільними: роздрібні партнери, доставки й отримувачі досі існують. Саме це робить логічну модель цінною. Це довговічний опис бізнесу, не прив’язаний до сьогоднішньої реалізації.

Що тут вирішує архітектор

Section titled “Що тут вирішує архітектор ”

Перетворюючи логічну модель на фізичну модель Salesforce, я вирішую:

  • Які бізнес-сутності відображаються на стандартні можливості Salesforce, а яким потрібні користувацькі об’єкти чи інше відображення.
  • Як логічні атрибути стають фізичними полями і як зв’язки реалізуються на платформі.
  • Де у фізичному дизайні місце свідомій денормалізації.
  • Які дані належать до Salesforce, а які — деінде.
  • Які характеристики платформи вимагають, щоб фізична модель відрізнялася від логічної.

Найважливіше: я хочу мати змогу простежити кожне рішення назад. Якщо ви покажете на щось у моїй фізичній моделі й запитаєте «Чому це тут?», я маю провести вас назад через логічну й концептуальну моделі до чогось, що справді потрібно бізнесу: бізнес → концептуальна → логічна → фізична.

За межами іспиту: що змінює ШІ. ШІ тепер може за один стрибок пройти від документа з вимогами до об’єктів і полів Salesforce. Це робить послідовність важливішою, а не менш важливою: якщо він перескакує від вимог до конфігурації, попросіть показати, що сталося посередині: що він визнав сутністю, які ключі обрав, які зв’язки припустив і де денормалізував. Це архітектурні рішення, і архітекторові досі треба їх бачити.

Ми почали цей розділ із першої розмови, слухаючи іменники, а закінчуємо фізичною моделлю, яку можна простежити назад до бізнесу. Тепер, коли ми обрали будувати на Salesforce, наступне запитання глибше: на якій платформі даних ми насправді будуємо?

  • Designing Record Access for Enterprise Scale: Parent-Child Data Skew (opens in a new tab), Salesforce Developers, Winter ‘27 (англійською, перевірено 2026-10-02): «налаштовуйте зв’язки батьків і дочірніх записів так, щоб на один батьківський запис припадало не більше 10 000 дочірніх». Це настанова щодо перекосу даних, а не жорсткий ліміт; розділ 7 іде глибше.
  • Roll-Up Summary Field (opens in a new tab), Salesforce Help (англійською, перевірено 2026-10-12): зведене поле рахує або підсумовує записи деталей через зв’язок master-detail.