Ga naar inhoud

Zet het model om naar Salesforce

Ook beschikbaar in 28 talen

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · العربية · עברית · Українська · हिन्दी · Русский · 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.
Afbeelding gegenereerd met AI

Module 6 van 6 in het hoofdstuk Data modelleren naar betekenis, hoofdstuk 2 van de cursus Data Architect. Elke module staat op zichzelf. Vorige: Ontwerp tot de derde normaalvorm en doe dan een stap terug · Volgende: de studiegids bij dit hoofdstuk, daarna het volgende hoofdstuk: Salesforce-data-architectuur

De vraag die deze module beantwoordt: Hoe wordt een logisch datamodel een fysiek Salesforce-datamodel?

Eindelijk gaan we het over Salesforce hebben. Als je de neiging hebt weerstaan om van elk blok een object te maken, mag het nu. Maar let op de volgorde waarin we hier kwamen: we begrepen de business, beschreven de data, zetten elk feit waar het hoort, en besloten waar we daar bewust van afwijken. Pas nu vraag ik hoe Salesforce het moet implementeren. Dat is de volgorde die ik wil dat je onthoudt: conceptueel → logisch → fysiek. Het conceptuele model beschrijft de business. Het logische model beschrijft de data. Het fysieke model beschrijft hoe we het echt gaan bouwen.

De fysieke stap is het makkelijkst te zien bij iets kleins, dus de huisdieren gaan eerst.

Wie zijn de bedrijven en de mensen? De fokker is een bedrijf, dus die wordt een account (Account) met het recordtype Fokker. De eigenaar is ook een account, of een persoonsaccount, met het recordtype Eigenaar. Twee soorten van hetzelfde standaardobject, naast elkaar bovenaan het diagram, precies waar ze sinds module 1 staan.

Wat heeft geen standaardplek? Huisdier, Ras, Kunstje, Huisdierkunstje en Kunstjebeoordeling worden aangepaste objecten. En weet je nog de soort die we in module 5 naar het huisdier kopieerden? Hier krijgt die zijn taak: het wordt het recordtype van het huisdier, Hond of Kat. Eén object met twee recordtypes, elk met een eigen pagina-indeling en eigen keuzelijstwaarden, in plaats van een object Hond en een object Kat.

Welke relaties zijn hoofd-detail? Ik gebruik hoofd-detail alleen waar het child nooit een andere parent krijgt. Een huisdierkunstje hoort zijn hele leven bij zijn huisdier, en elke kunstjebeoordeling hoort bij haar huisdierkunstje, dus beide zijn hoofd-detail. Dat betaalt zich meteen uit: hoofd-detail is wat het huisdier een samenvattingsveld (roll-up summary) van zijn huisdierkunstjes laat bijhouden, zodat de telling Aantal kunstjes uit module 5 vanzelf klopt. Huisdieren verhuizen wel eens naar een ander thuis, dus de eigenaar is een lookup.

Welke zijn lookups? Salesforce raadt niet meer dan 10.000 children op één parent aan. Een populair kunstje als Zit, een veelvoorkomend ras of een grote fokker kan daar makkelijk overheen gaan, dus Huisdierkunstje verwijst met een lookup naar zijn Kunstje, en het huisdier verwijst op dezelfde manier naar zijn Ras en Fokker. En vermijd polymorfe relaties waar je kunt, het soort waarbij één veld naar meerdere objecttypes kan verwijzen. Ze zijn handig op dag één en lastiger voor alles wat ze later moet lezen: rapporten, integraties, en nu ook agents.

Wat blijft buiten het platform? Als het huisdier een gps-halsband draagt die doorgeeft waar het is, hoeft die locatie helemaal niet naar binnen gekopieerd te worden. Het kan een extern object zijn, live gelezen uit het volgsysteem van de halsband.

Het huisdiermodel in Salesforce Het huisdiermodel als Salesforce-objecten. Bovenaan twee accounts: één met het recordtype Eigenaar, één met het recordtype Fokker. Pet__c, eronder, heeft de recordtypes Hond en Kat, het chipnummer als externe ID, opzoekrelaties naar de Eigenaar, de Fokker en Breed__c, en Tricks_Known__c als samenvattingsveld (roll-up summary). Pet_Trick__c staat in een hoofd-detailrelatie met Pet__c en heeft een opzoekrelatie naar Trick__c, met het vaardigheidsniveau en de datum geleerd. Trick_Assessment__c staat in een hoofd-detailrelatie met Pet_Trick__c. Breed__c heeft diersoort, naam en grootte; Trick__c naam en moeilijkheid. opzoeken opzoeken opzoeken hoofd detail opzoeken hoofd detail Account (Eigenaar) Id RECORD-ID Recordtype: Eigenaar Naam Telefoon Account (Fokker) Id RECORD-ID Recordtype: Fokker Naam Pet__c Id RECORD-ID Recordtypes: Hond, Kat Microchip_Number__c EXTERNE ID Owner__c OPZOEKEN Breeder__c OPZOEKEN Breed__c OPZOEKEN Naam Birth_Date__c Tricks_Known__c SAMENVATTING Breed__c Id RECORD-ID Species__c Naam Size__c Pet_Trick__c Id RECORD-ID Pet__c HOOFD-DETAIL Trick__c OPZOEKEN Skill_Level__c Date_Learned__c Trick__c Id RECORD-ID Naam Difficulty__c Trick_Assessment__c Id RECORD-ID Pet_Trick__c HOOFD-DETAIL Date__c Skill_Level__c Assessed_By__c precies één nul of één één of veel nul of veel © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Elke beslissing in dat diagram is terug te voeren op iets wat we eerder besloten, en daar gaat het om. Nu dezelfde stap voor Steve Trucking.

Ons logische model van Steve Trucking bevat nu Retailpartner, Distributiecentrum, Vrachtlijst, Levering, Leveringsitem, Ontvanger, Route, Stop, Bezorgploeg, Vrachtwagen en Ploegtoewijzing. Dat zijn bedrijfsconcepten, en nu kan ik ze aan Salesforce gaan koppelen.

Een retailpartner zou een account kunnen zijn. Een levering zou kunnen passen op iets wat Salesforce al heeft voor ingepland werk in het veld, of een aangepast object kunnen worden. Voor een vrachtlijst past niets standaards, dus die wordt waarschijnlijk aangepast. En de ontvanger is een echt lastige vraag: een persoonsaccount, een contactpersoon, of gewoon informatie op de levering? Die beantwoorden we goed in het volgende hoofdstuk.

Het belangrijke woord is nog steeds zou. Neem de implementatie niet aan alleen omdat een bedrijfsconcept klinkt als een Salesforce-object. Daarom bouwden we eerst het logische model: het geeft ons iets om het Salesforce-ontwerp tegen te toetsen.

Een bedrijfsentiteit betekent niet automatisch een aangepast object

Section titled “Een bedrijfsentiteit betekent niet automatisch een aangepast object ”

Hier is een valkuil die ik admins wil laten vermijden: “We hebben elf entiteiten gevonden, dus we hebben elf aangepaste objecten nodig.” Nee. Een logische entiteit vertelt ons dat het bedrijfsconcept ertoe doet. Ze schrijft niet voor hoe Salesforce het moet opslaan. Een concept kan een standaardobject worden, een aangepast object, een relatie tussen objecten, een veld of een paar velden, een waarde die in configuratie wordt beheerd, of data die helemaal buiten Salesforce staat (de leveringsfoto’s van Steve Trucking zijn daar een goede kandidaat voor). Het fysieke model is waar die keuzes gemaakt worden, en precies daarom maakten we ze niet in het eerste gesprek.

Dezelfde overgang gebeurt met attributen. Onze logische Vrachtwagen heeft een eenheidsnummer, VIN, merk, model, bouwjaar, kenteken en status. Nu beslissen we hoe ze fysiek bestaan: welk object er eigenaar van is, welke veldtypen ze gebruiken, welke verplicht zijn, welke uniek moeten zijn, welke externe identificatoren zijn, welke validatie nodig hebben, welke afgeleid worden in plaats van opgeslagen, en welke gevoelig zijn. Op logisch niveau vroegen we wat Vrachtwagen betekent. Op fysiek niveau vragen we hoe Salesforce Vrachtwagen gaat weergeven. Verschillende vragen.

Vrachtwagen: van logische entiteit naar Salesforce-object Twee kaarten, regel voor regel. Logisch, Vrachtwagen, wat Vrachtwagen betekent: vrachtwagen-ID, eenheidsnummer, VIN, merk, model, bouwjaar, kenteken, status. Fysiek, Truck__c, hoe Salesforce het vastlegt: Id, het Salesforce-record-ID; Name, tekst, met het eenheidsnummer; VIN__c, tekst van 17 tekens, uniek en een externe ID; Make__c, een keuzelijst; Model__c, tekst van 40; Model_Year__c, een getal van vier cijfers; License_Plate__c, tekst van 10; Status__c, een keuzelijst, verplicht. Een notitie eronder: logisch vraagt wat Vrachtwagen betekent; fysiek vraagt hoe Salesforce het vastlegt. Logisch: Vrachtwagen wat Vrachtwagen betekent Vrachtwagen-ID Eenheidsnummer VIN Merk Model Bouwjaar Kenteken Status Fysiek: Truck__c hoe Salesforce het vastlegt Id: het Salesforce-record-ID Name: tekst, het eenheidsnummer VIN__c: tekst(17), uniek, externe ID Make__c: keuzelijst Model__c: tekst(40) Model_Year__c: getal(4) License_Plate__c: tekst(10) Status__c: keuzelijst, verplicht Logisch vraagt wat Vrachtwagen betekent. Fysiek vraagt hoe Salesforce het vastlegt. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Alle tijd die we aan relaties besteedden, betaalt zich hier uit. We weten al of elke relatie een-op-een, een-op-veel of veel-op-veel is, verplicht of optioneel, en of haar historie ertoe doet. Nu beslissen we hoe Salesforce haar implementeert: een lookup, een master-detail of een Salesforce-koppelobject, en misschien een koppelobject met eigen attributen, omdat, zoals we ontdekten, de relatie zelf betekenis voor de business kan hebben.

Denk terug aan de ploegtoewijzing. We hadden dit hoofdstuk kunnen beginnen met: “Laten we een Salesforce-koppelobject maken tussen ploeg en vrachtwagen.” Kijk wat we dan hadden overgeslagen: waarom de relatie bestaat, of ze een datum en een route nodig heeft, of ze een status heeft, en of een schadeclaim weken later haar historie nodig heeft. Die bedrijfsvragen vertellen ons wat een ploegtoewijzing is. Pas daarna moeten we beslissen hoe Salesforce haar bouwt, en of Salesforce al iets heeft dat het werk doet.

Het diagram verandert weer. Het conceptuele model toonde bedrijfsconcepten en eenvoudige lijnen. Het logische model voegde attributen, sleutels, kardinaliteit en de entiteiten in relaties toe. Nu begint het fysieke model op Salesforce te lijken: standaardobjecten, aangepaste objecten, velden, relatietypen, en wat buiten het platform staat.

Dezelfde business op drie niveaus Drie panelen, dezelfde uitsnede op drie niveaus. Conceptueel, wat bestaat er: een retailpartner, de retailer voor wie we leveren, stuurt leveringen, en elke levering, één order naar één ontvanger, bevat leveringsitems, een product op een levering. Logisch, hoe is de data gestructureerd: dezelfde drie met record-ID’s en een paar velden; de levering is ook bekend onder het ordernummer van de partner; het leveringsitem draagt de product-ID en een aantal. Fysiek, hoe bouwt Salesforce het: de retailpartner is een standaard Account met een recordtype Retail Partner; de levering is een aangepast object, Delivery__c, met het ordernummer van de partner als externe ID en een opzoekrelatie naar de Account; het leveringsitem is een aangepast object, Delivery_Item__c, in een hoofd-detailrelatie met zijn levering, met een aantal. Een notitie eronder: business, conceptueel, logisch, fysiek; wijs iets rechts aan en volg het terug naar links. CONCEPTUEEL: WAT BESTAAT ER? LOGISCH: HOE IS DE DATA GESTRUCTUREERD? FYSIEK: HOE BOUWT SALESFORCE HET? stuurt bevat stuurt bevat opzoeken hoofd detail Retailpartner de retailer voor wie we leveren Levering één order naar één ontvanger Leveringsitem een product op een levering Retailpartner Retailpartner-ID RECORD-ID Naam Status Levering Levering-ID RECORD-ID Ordernummer partner OOK BEKEND ALS Leverdatum Status Leveringsitem Leveringsitem-ID RECORD-ID Product-ID Aantal Account (standaard) Id RECORD-ID Recordtype: Retailpartner Naam Delivery__c Id RECORD-ID Partner_Order_Number__c EXTERNE ID Retail_Partner__c OPZOEKEN Delivery_Item__c Id RECORD-ID Delivery__c HOOFD-DETAIL Quantity__c Business → conceptueel → logisch → fysiek: wijs iets rechts aan en volg het terug naar links. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Ik wil dat je die drie diagrammen naast elkaar kunt leggen en de voortgang ziet: geen drie losse diagrammen, maar hetzelfde bedrijf op drie niveaus.

Een woord over hoe ik deze teken, want de indeling is deel van de boodschap. Ik zet het primaire object in het midden, iets naar beneden. Als het parent-objecten heeft, zet ik die iets erboven, zodat je het model van boven naar beneden en van links naar rechts leest, zoals de business erover denkt. Referentiedata gaat opzij. Kleur betekent ook iets: Salesforce maak ik altijd blauw, en voor de eigen systemen van het bedrijf kies ik een kleur, meestal groen, omdat groen een fijne, vriendelijke kleur is. Rood gebruik ik niet, en geel is een beetje fel. Als een model zo is ingedeeld, zingt het voor me. Veel diagrammen die je tegenkomt zijn eigenlijk ruimtebeheer: hoe parkeer ik al mijn auto’s in mijn volle garage? Ik schilder liever een logisch beeld dat het verstand kan vatten.

Het fysieke model moet het platform respecteren

Section titled “Het fysieke model moet het platform respecteren ”

Salesforce is geen generieke relationele database. Het heeft opvattingen over relaties, eigenaarschap, beveiliging en rapportage. Het heeft limieten, querygedrag en automatisering, en een architectuur die bepaalt hoe een model zich op schaal gedraagt. Dus een logisch model dat er op een whiteboard perfect uitziet, moet misschien veranderen als het fysiek wordt. Dat is niet Salesforce dat in de weg zit. Het betekent dat het platform een vorm heeft, en goede architecten begrijpen die vorm. Het volgende hoofdstuk gaat precies daarover.

Soms wijkt het fysieke model ook bewust af van het schone logische model, vanwege de denormalisatiebeslissingen die we in module 5 namen. Dat is prima, zolang we kunnen uitleggen waarom.

Er is een gewoonte die ik je wil laten afleren als je haar hebt: je data-architectuur beginnen bij Setup → Object Manager → New Custom Object en het model gaandeweg uitvogelen. Salesforce maakt het ongelooflijk makkelijk om dingen te maken; dat is een van zijn sterke punten, en een van de redenen waarom zwakke datamodellen zo snel ontstaan. Een paar klikken en je hebt een object, nog een paar en je hebt velden en een relatie. Dan komt er data binnen, worden er flows gebouwd, rapporten gemaakt, gaan integraties ervan afhangen, en is het object dat je in vijf minuten maakte heel duur om te veranderen. Het is de omkeerbaarheidstest uit hoofdstuk 1. Dus voordat je op New Custom Object klikt, teken het model.

Er is nog een reden waarom ik de drie modellen gescheiden houd: technologie verandert. Vandaag staat een deel van de data van Steve Trucking op Salesforce core. Morgen staat een deel misschien in Data 360, een warehouse of een systeem dat we nog niet gekozen hebben, en heeft de AI-assistent een eigen weergave nodig. De fysieke architectuur kan veranderen, terwijl de bedrijfsconcepten opmerkelijk stabiel blijven: retailpartners, leveringen en ontvangers bestaan nog steeds. Dat maakt het logische model waardevol. Het is een duurzame beschrijving van de business die niet vastzit aan de implementatie van vandaag.

Als ik een logisch model omzet in een fysiek Salesforce-model, beslis ik:

  • Welke bedrijfsentiteiten passen op standaardmogelijkheden van Salesforce, en welke aangepaste objecten of een andere weergave nodig hebben.
  • Hoe logische attributen fysieke velden worden, en hoe relaties op het platform geïmplementeerd worden.
  • Waar bewuste denormalisatie in het fysieke ontwerp hoort.
  • Welke data in Salesforce hoort, en welke ergens anders.
  • Welke eigenschappen van het platform vragen dat het fysieke model afwijkt van het logische.

En vooral wil ik elke beslissing terug kunnen volgen. Als je naar iets in mijn fysieke model wijst en vraagt “Waarom staat dat daar?”, moet ik je kunnen terugleiden via het logische model en het conceptuele model naar iets wat de business echt nodig heeft: business → conceptueel → logisch → fysiek.

Voorbij het examen: wat AI verandert. AI kan nu een eisendocument in één sprong omzetten naar Salesforce-objecten en -velden. Dat maakt de volgorde belangrijker, niet minder belangrijk: als het van eisen naar configuratie springt, vraag het dan te laten zien wat er tussenin gebeurde: wat het als entiteit zag, welke sleutels het koos, welke relaties het aannam en waar het denormaliseerde. Dat zijn architectuurbeslissingen, en de architect moet ze nog steeds zien.

We begonnen dit hoofdstuk in een eerste gesprek, luisterend naar zelfstandige naamwoorden, en we eindigen met een fysiek model dat we kunnen terugvoeren naar de business. Nu we ervoor gekozen hebben op Salesforce te bouwen, gaat de volgende vraag dieper: op wat voor dataplatform bouwen we eigenlijk?