Hoppa till innehåll

Gör modellen till Salesforce

Finns även på 28 språk

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

Modul 6 av 6 i kapitlet Modellera data för mening, kapitel 2 i kursen Data Architect. Varje modul står på egna ben. Föregående: Designa till tredje normalformen, backa sedan · Nästa: kapitlets studieguide, sedan nästa kapitel: Dataarkitektur i Salesforce

Frågan den här modulen besvarar: Hur blir en logisk datamodell en fysisk datamodell i Salesforce?

Äntligen ska vi prata om Salesforce. Om du har stått emot frestelsen att göra varje ruta till ett objekt får du göra det nu. Men lägg märke till ordningen vi kom i: vi förstod verksamheten, beskrev data, lade varje faktum där det hör hemma och bestämde var vi medvetet skulle böja på det. Först nu frågar jag hur Salesforce ska implementera det. Det är förloppet jag vill att du kommer ihåg: konceptuell → logisk → fysisk. Den konceptuella modellen beskriver verksamheten. Den logiska modellen beskriver data. Den fysiska modellen beskriver hur vi faktiskt ska bygga det.

Det fysiska steget är lättast att se på något litet, så husdjuren får gå först.

Vilka är företagen och människorna? Uppfödaren är ett företag, så den blir ett konto (Account) med posttypen Uppfödare. Ägaren är också ett konto, eller ett personkonto, med posttypen Ägare. Två sorter av samma standardobjekt, sida vid sida högst upp i diagrammet, precis där de har funnits sedan modul 1.

Vad har inget standardhem? Husdjur, Ras, Trick, Husdjurstrick och Trickbedömning blir anpassade objekt. Och minns du arten vi kopierade till husdjuret i modul 5? Här får den sitt jobb: den blir husdjurets posttyp, Hund eller Katt. Ett objekt med två posttyper, var och en med egen sidlayout och egna plocklistvärden, i stället för ett Hund-objekt och ett Katt-objekt.

Vilka relationer är master-detail? Jag använder master-detail bara där barnet aldrig kommer att byta förälder. Ett husdjurstrick hör till sitt husdjur hela livet, och varje trickbedömning hör till sitt husdjurstrick, så båda är master-detail. Det lönar sig direkt: master-detail är det som låter husdjuret ha ett sammanställningsfält (roll-up summary) över sina husdjurstrick, så att räknaren Kända trick från modul 5 håller jämna steg av sig själv. Husdjur byter däremot hem ibland, så ägaren är en lookup-relation.

Vilka är lookup-relationer? Salesforce rekommenderar inte fler än 10 000 barn på en enda förälder. Ett populärt trick som Sitt, en vanlig ras eller en stor uppfödare kan lätt gå över det, så husdjurstricket pekar på sitt trick med en lookup, och husdjuret pekar på sin ras och sin uppfödare på samma sätt. Och undvik polymorfa relationer där du kan, den sort där ett fält kan peka på flera objekttyper. De är bekväma första dagen och svårare för allt som måste läsa dem senare: rapporter, integrationer och nu agenter.

Vad stannar utanför plattformen? Om husdjuret bär ett GPS-halsband som rapporterar var det är behöver den positionen inte kopieras in alls. Den kan vara ett externt objekt, som läses live från halsbandets spårningssystem.

Husdjursmodellen i Salesforce Husdjursmodellen som Salesforce-objekt. Överst två konton: ett med posttypen Ägare, ett med posttypen Uppfödare. Pet__c, under dem, har posttyperna Hund och Katt, chipnumret som externt ID, lookups till ägaren, uppfödaren och Breed__c, och Tricks_Known__c som sammanställningsfält. Pet_Trick__c är i en master-detail-relation med Pet__c och har en lookup till Trick__c, med sin färdighetsnivå och sitt inlärningsdatum. Trick_Assessment__c är i en master-detail-relation med Pet_Trick__c. Breed__c har sin art, sitt namn och sin storlek; Trick__c sitt namn och sin svårighetsgrad. lookup lookup lookup master detail lookup master detail Konto (Ägare) Id POST-ID Posttyp: Ägare Namn Telefon Konto (Uppfödare) Id POST-ID Posttyp: Uppfödare Namn Pet__c Id POST-ID Posttyper: Hund, Katt Microchip_Number__c EXTERNT ID Owner__c LOOKUP Breeder__c LOOKUP Breed__c LOOKUP Namn Birth_Date__c Tricks_Known__c SAMMANSTÄLLNING Breed__c Id POST-ID Species__c Namn Size__c Pet_Trick__c Id POST-ID Pet__c MASTER-DETAIL Trick__c LOOKUP Skill_Level__c Date_Learned__c Trick__c Id POST-ID Namn Difficulty__c Trick_Assessment__c Id POST-ID Pet_Trick__c MASTER-DETAIL Date__c Skill_Level__c Assessed_By__c exakt en noll eller en en eller många noll eller många © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Varje beslut i det diagrammet går att spåra tillbaka till något vi bestämde tidigare, och det är poängen. Nu samma steg för Steve Trucking.

Vår logiska modell för Steve Trucking innehåller nu detaljhandelspartner, distributionscentral, manifest, leverans, leveransrad, mottagare, rutt, stopp, team, lastbil och teamtilldelning. Det är affärsbegrepp, och nu kan jag börja mappa dem till Salesforce.

En detaljhandelspartner kanske är ett konto (Account). En leverans kanske motsvarar något som Salesforce redan har för schemalagt arbete ute på fältet, eller så blir den ett anpassat objekt. Ett manifest har inget standardobjekt som passar, så det blir troligen anpassat. Och mottagaren är en genuint svår fråga: ett personkonto (Person Account), en kontakt (Contact) eller helt enkelt information på leveransen? Den besvarar vi ordentligt i nästa kapitel.

Det viktiga ordet är fortfarande kanske. Anta inte implementationen bara för att ett affärsbegrepp låter som ett Salesforce-objekt. Det är därför vi byggde den logiska modellen först: den ger oss något att testa Salesforce-designen mot.

En affärsentitet betyder inte automatiskt ett anpassat objekt

Section titled “En affärsentitet betyder inte automatiskt ett anpassat objekt ”

Här är en fälla jag vill att admins undviker: ”Vi identifierade elva entiteter, så vi behöver elva anpassade objekt.” Nej. En logisk entitet säger oss att affärsbegreppet spelar roll. Den bestämmer inte hur Salesforce måste lagra det. Ett begrepp kan bli ett standardobjekt, ett anpassat objekt, en relation mellan objekt, ett fält eller några fält, ett värde som förvaltas i konfigurationen, eller data som bor helt utanför Salesforce (Steve Truckings leveransfoton är en bra kandidat för det). Den fysiska modellen är där de valen görs, och det är precis därför vi inte gjorde dem vid det första samtalet.

Samma övergång sker med attributen. Vår logiska lastbil har enhetsnummer, VIN, märke, modell, årsmodell, registreringsnummer och status. Nu bestämmer vi hur de fysiskt ska finnas: vilket objekt som äger dem, vilka fälttyper de använder, vilka som är obligatoriska, vilka som måste vara unika, vilka som är externa ID:n, vilka som behöver validering, vilka som härleds i stället för att lagras, och vilka som är känsliga. På logisk nivå frågade vi vad en lastbil betyder. På fysisk nivå frågar vi hur Salesforce ska representera en lastbil. Olika frågor.

Lastbil: från logisk entitet till Salesforce-objekt Två kort, rad för rad. Logisk, Lastbil, vad Lastbil betyder: lastbils-ID, enhetsnummer, VIN, märke, modell, årsmodell, registreringsnummer, status. Fysisk, Truck__c, hur Salesforce kommer att representera den: Id, Salesforce post-ID; Name, text, med enhetsnumret; VIN__c, text på 17 tecken, unikt och ett externt ID; Make__c, en plocklista; Model__c, text på 40; Model_Year__c, ett fyrsiffrigt tal; License_Plate__c, text på 10; Status__c, en plocklista, obligatoriskt. En anteckning under: logisk frågar vad Lastbil betyder; fysisk frågar hur Salesforce kommer att representera den. Logisk: Lastbil vad Lastbil betyder Lastbils-ID Enhetsnummer VIN Märke Modell Årsmodell Registreringsnummer Status Fysisk: Truck__c hur Salesforce kommer att representera den Id: Salesforce post-ID Name: text, enhetsnumret VIN__c: text(17), unikt, externt ID Make__c: plocklista Model__c: text(40) Model_Year__c: tal(4) License_Plate__c: text(10) Status__c: plocklista, obligatoriskt Logisk frågar vad Lastbil betyder. Fysisk frågar hur Salesforce kommer att representera den. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

All tid vi lade på relationer lönar sig här. Vi vet redan om var och en är en-till-en, en-till-många eller många-till-många, obligatorisk eller valfri, och om dess historik spelar roll. Nu bestämmer vi hur Salesforce implementerar den: en lookup-relation, en master-detail-relation eller ett kopplingsobjekt i Salesforce (Salesforce Junction Object), och kanske en koppling med egna attribut, eftersom, som vi upptäckte, själva relationen kan ha en affärsmässig betydelse.

Tänk tillbaka på teamtilldelningen. Vi kunde ha börjat det här kapitlet med att säga: ”Vi skapar ett kopplingsobjekt i Salesforce mellan team och lastbil.” Titta på vad vi då skulle ha hoppat över: varför relationen finns, om den behöver ett datum och en rutt, om den har en status, och om ett skadeärende några veckor senare behöver dess historik. De affärsfrågorna säger oss vad en teamtilldelning är. Först då ska vi bestämma hur Salesforce bygger den, och om Salesforce redan har något som gör jobbet.

Diagrammet ändras igen. Den konceptuella modellen visade affärsbegrepp och enkla linjer. Den logiska modellen lade till attribut, nycklar, kardinalitet och entiteterna som gömde sig i relationerna. Nu börjar den fysiska modellen se ut som Salesforce: standardobjekt, anpassade objekt, fält, relationstyper och det som bor utanför plattformen.

Samma verksamhet på tre nivåer Tre paneler, samma utsnitt på tre nivåer. Konceptuell, vad finns: en detaljhandelspartner, återförsäljaren vi levererar åt, skickar leveranser, och varje leverans, en order till en mottagare, innehåller leveransrader, en produkt på en leverans. Logisk, hur är data strukturerade: samma tre med post-ID:n och några fält; leveransen är också känd under partnerns ordernummer; leveransraden bär produkt-ID:t och ett antal. Fysisk, hur kommer Salesforce att bygga det: detaljhandelspartnern är ett standardkonto (Account) med posttypen Detaljhandelspartner; leveransen är ett anpassat objekt, Delivery__c, med partnerns ordernummer som externt ID och en lookup till kontot; leveransraden är ett anpassat objekt, Delivery_Item__c, i en master-detail-relation till sin leverans, med ett antal. En anteckning under: verksamhet, konceptuell, logisk, fysisk; peka på vad som helst till höger och spåra det bakåt till vänster. KONCEPTUELL: VAD FINNS? LOGISK: HUR ÄR DATA STRUKTURERADE? FYSISK: HUR KOMMER SALESFORCE ATT BYGGA DET? skickar innehåller skickar innehåller lookup master detail Detaljhandelspartner återförsäljaren vi levererar åt Leverans en order till en mottagare Leveransrad en produkt på en leverans Detaljhandelspartner Detaljhandelspartner-ID POST-ID Namn Status Leverans Leverans-ID POST-ID Partnerns ordernummer OCKSÅ KÄND SOM Leveransdatum Status Leveransrad Leveransrads-ID POST-ID Produkt-ID Antal Konto (standard) Id POST-ID Posttyp: Detaljhandelspartner Namn Delivery__c Id POST-ID Partner_Order_Number__c EXTERNT ID Retail_Partner__c LOOKUP Delivery_Item__c Id POST-ID Delivery__c MASTER-DETAIL Quantity__c Verksamhet → konceptuell → logisk → fysisk: peka på vad som helst till höger och spåra det bakåt till vänster. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Jag vill att du ska kunna lägga de tre diagrammen sida vid sida och se förloppet: inte tre orelaterade diagram, utan samma verksamhet på tre nivåer.

Några ord om hur jag ritar de här, för layouten är en del av budskapet. Jag lägger det primära objektet i mitten, en bit ned. Om det har föräldraobjekt lägger jag dem en bit ovanför, så att du läser modellen uppifrån och ned, från vänster till höger, så som verksamheten tänker på den. Referensdata hamnar vid sidan. Färg betyder också något: jag gör alltid Salesforce blått, och jag väljer en färg för företagets egna system, oftast grönt, för grönt är en trevlig, vänlig färg. Jag använder inte rött, och gula färger är lite skarpa. När en modell är upplagd så, då sjunger den för mig. Många av diagrammen du hittar handlar egentligen om platshantering: hur parkerar jag alla mina bilar i mitt överfulla garage? Jag målar hellre en logisk bild som hjärnan kan greppa.

Den fysiska modellen måste respektera plattformen

Section titled “Den fysiska modellen måste respektera plattformen ”

Salesforce är ingen generisk relationsdatabas. Den har åsikter om relationer, ägarskap, säkerhet och rapportering. Den har gränser, frågebeteende och automatisering, och en arkitektur som påverkar hur en modell beter sig i stor skala. Så en logisk modell som ser perfekt ut på en whiteboard kan behöva ändras när den blir fysisk. Det är inte Salesforce som står i vägen. Det betyder att plattformen har en form, och bra arkitekter förstår den formen. Nästa kapitel handlar om precis det.

Ibland kommer den fysiska modellen också medvetet att skilja sig från den rena logiska modellen på grund av denormaliseringsbesluten vi fattade i modul 5. Det är helt okej, så länge vi kan förklara varför.

Det finns en vana jag vill att du gör dig av med om du har den: att börja din dataarkitektur i Setup → Object Manager → New Custom Object och räkna ut modellen under tiden. Salesforce gör det otroligt enkelt att skapa saker; det är en av dess styrkor, och ett av skälen till att svaga datamodeller uppstår så snabbt. Några klick och du har ett objekt, några till och du har fält och en relation. Sedan kommer data, flöden byggs, rapporter skapas, integrationer blir beroende av det, och objektet du skapade på fem minuter blir väldigt dyrt att ändra. Det är reversibilitetstestet från kapitel 1. Så innan du klickar på New Custom Object, rita modellen.

Det finns ett annat skäl till att jag håller de tre modellerna separata: tekniken förändras. I dag bor en del av Steve Truckings data på Salesforce core. I morgon kan en del av dem bo i Data 360, ett datalager eller ett system vi inte har valt än, och AI-assistenten behöver sin egen representation. Den fysiska arkitekturen kan ändras, medan affärsbegreppen förblir anmärkningsvärt stabila: detaljhandelspartner, leveranser och mottagare finns fortfarande. Det är det som gör den logiska modellen värdefull. Den är en hållbar beskrivning av verksamheten som inte är bunden till dagens implementation.

När jag gör en logisk modell till en fysisk modell i Salesforce bestämmer jag:

  • Vilka affärsentiteter som motsvaras av standardfunktioner i Salesforce, och vilka som behöver anpassade objekt eller en annan representation.
  • Hur logiska attribut blir fysiska fält, och hur relationer implementeras på plattformen.
  • Var medveten denormalisering hör hemma i den fysiska designen.
  • Vilka data som hör hemma i Salesforce, och vilka som hör hemma någon annanstans.
  • Vilka egenskaper hos plattformen som kräver att den fysiska modellen skiljer sig från den logiska.

Viktigast av allt: jag vill kunna spåra varje beslut bakåt. Om du pekar på något i min fysiska modell och frågar ”Varför finns det där?” ska jag kunna ta dig tillbaka genom den logiska modellen och den konceptuella modellen till något som verksamheten faktiskt behöver: verksamhet → konceptuell → logisk → fysisk.

Bortom provet: vad AI förändrar. AI kan nu ta ett kravdokument hela vägen till Salesforce-objekt och fält i ett enda hopp. Det gör ordningen viktigare, inte mindre viktig: om den hoppar från krav till konfiguration, be den visa vad som hände däremellan: vad den bestämde var en entitet, vilka nycklar den valde, vilka relationer den antog och var den denormaliserade. Det är arkitekturbeslut, och arkitekten behöver fortfarande se dem.

Vi började det här kapitlet vid ett första samtal, där vi lyssnade efter substantiv, och vi avslutar det med en fysisk modell som vi kan spåra tillbaka till verksamheten. Nu när vi har valt att bygga på Salesforce går nästa fråga djupare: vilken sorts dataplattform bygger vi egentligen på?