Hoppa till innehåll

Steve Trucking, så skulle jag designa det

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 row of plain white delivery trucks ready at the loading doors at first light, a clipboard on the front of the nearest one.
Bilden är skapad med AI

Modul 6 av 6 i kapitlet Masterdata och identitet, kapitel 6 i kursen Data Architect, och slutet på Del 1. Föregående: När auktoriteten delas · Nästa: Del 2 börjar med Designa för skala (coming soon)

Frågan den här kontrollpunkten besvarar: Kan du sätta ihop Del 1 i ett verkligt scenario?

Gör uppgiften först. Det här är min genomgång av uppgiften för Kontrollpunkt 1. Om du inte har ritat din egen design än, gör det innan du läser vidare. Värdet ligger i att jämföra ditt resonemang med mitt, inte i att läsa svaret.

Det här är ”Så skulle jag designa det”: en möjlig, fungerande lösning, inte det rätta svaret, med avvägningarna namngivna och mina hållningar tydliga. Vi har inte gått igenom stora datavolymer, frågedesign, integrationsmönster, migrering eller transaktioner än, och det är med flit: arkitekturen utvecklas när du lär dig mer. Men Del 1 ger oss tillräckligt för att sätta skelettet.

Från beskrivningen: ungefär 3 300 leveranser per arbetsdag, en miljon per år, med en tillväxt på 30 % per år. Ungefär 1,6 rader per leverans (1,6 miljoner per år); ungefär åtta statusändringar per leverans (8 miljoner per år); fyra till fem miljoner foton per år; ungefär 200 000 GPS-avläsningar per dag; ungefär 180 000 ärenden per år; tre detaljhandelspartner som skickar manifest på tre olika sätt; nio distributionscentraler; 330 lastbilar med team på två personer. Och Steve Trucking kör redan en Salesforce-org med Service Cloud, Field Service och en partnerportal. Räkna nollorna innan du ritar en enda ruta. De kommer att avgöra flera saker nedan.

Leveranserna är hjärtat i det hela, och Field Service sköter redan trafikledningen. Så jag börjar med standardmodellen i Field Service, som utsnittet i kapitel 3 gjorde:

AffärsbegreppObjekt i SalesforceVarför
Detaljhandelspartner (Retail Partner)Konto (Account) (posttypen Retail Partner)Ett företag som Steve Trucking har avtal med; bär avtal, ärenden och portalåtkomst
Partnerns personal (DC-chefer, butikspersonal)Kontakt (Contact)Portalanvändare måste vara kontakter
En leverans: en mottagare, en adress, en partnerorder, en dagArbetsorder (Work Order)Arbetsenheten i Field Service; schemaläggning, mobilappen och servicerapporter hänger på den
Varje artikel eller tjänst: kylskåpet, installationen, bortforslingenArbetsorderrad (Work Order Line Item)Delar upp arbetet, styr checklistor och fakturering
Typen av stopp: bara leverans, med installation, med bortforslingArbetstyp (Work Type)Sätter tidsåtgång, kompetenser och installationschecklistan
Det schemalagda besöket och dess tidsfönsterServicebesök (Service Appointment)Det som Field Service schemalägger och teamets app visar
Team och lastbilar; DC:ernas trafikledningsområdenService Resource, Service Crew, Service TerritoryField Service schemalägger ett team som en resurs
Mottagarnas frågor, partnernas reklamationerÄrende (Case)Servicekonsolen, tjänsteavtal (entitlements), email-to-case
Partnerns lista för tisdag vid DC:t i PhoenixManifest__c (anpassat)Inget standardobjekt representerar enheten för mottagning, avstämning och omkörning

Allt annat förblir standard. Att stå emot fler anpassade objekt är medvetet: frågan i kapitel 1 var när en arkitekt ska stå emot ännu ett, och här är svaret ”nästan alltid”. Partnerns orderrad, till exempel, är inget nytt objekt. Det är arbetsordern, identifierad av partnerns referens.

Kontrollpunkt 1: leveranskärnan Kontrollpunkt 1:s fysiska kärna för Steve Trucking. På core: en detaljhandelspartner, ett konto med en posttyp, skickar manifest, det enda anpassade objektet, och varje leverans gäller en partner. Ett manifest listar leveranser. En leverans är en arbetsorder (Work Order) som bär mottagaren som fält; den schemaläggs som besök, servicebesök (Service Appointment), innehåller leveransrader, arbetsorderrader (Work Order Line Item), som var och en beskrivs av en typ av stopp, en arbetstyp (Work Type). Ett team, ett serviceteam (Service Crew), tilldelas besök och arbetar i ett DC-utsändningsområde, ett serviceområde (Service Territory). En förfrågan eller reklamation, ett ärende (Case), kan röra leveranser. Utanför core: teamets GPS-pingar går till datalagret, leveransen länkar till leveransfoton i ett fotolager, och varje besök publicerar sin statushistorik som händelser till datalagret. Under: titta på moderskeppet: Field Service är leveranskärnan. PÅ CORE UTANFÖR CORE skickar gäller listar rör schemaläggs som innehåller beskriver team arbetar i tilldelas pingar länkar till publicerar Detaljhandelspartner Account · posttyp Manifest Manifest__c · anpassat Förfrågan eller reklamation Case Leverans WorkOrder · Mottagarfält Leveransrad WorkOrderLineItem Besök ServiceAppointment Typ av stopp WorkType DC-utsändningsområde ServiceTerritory Team ServiceCrew Statushistorik händelser, datalager Leveransfoton fotolager, länkat GPS-pingar datalager, genom referens Titta på moderskeppet: Field Service är leveranskärnan. exakt en noll eller en en eller många noll eller många lookup © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Den växer fram ur finalen i kapitel 3 (Designa den fysiska modellen i Salesforce): samma objekt på samma platser, med teamet, trafikledningsområdet, ärendet och det som Kontrollpunkt 1 håller utanför core tillagt.

Nyckeln som matchar en partners order mot en leverans

Section titled “Nyckeln som matchar en partners order mot en leverans ”

Varje rad i manifestet blir en arbetsorder, länkad till sitt manifest. Nyckeln är den fråga jag helst vill ha besvarad: hur vet vi att den här raden från partnern är den där leveransen? Mitt svar: ett External ID på arbetsordern byggt av detaljhandelspartnern och partnerns egen order- och leveransreferens (ungefär KEYSTONE-PHX-8843119-1), markerat som unikt. Ett fält per källa, ett-till-ett. Det är partnerns identifierare, inte vår: ”flera identifierare för en sak” från kapitel 2, och ”partnern äger sin orderreferens” från modul 1.

Varför det spelar roll: manifesten kommer en till två dagar i förväg och revideras under dagen. Med den nyckeln gör varje omskickat eller reviderat manifest en upsert i stället för att skapa dubbletter. Revideringen uppdaterar arbetsordern, ett fält registrerar den, och en ändring av en leverans som redan har ruttplanerats larmar koordinatorn: partnerns ändring tillämpas, men flaggas tills trafikledningen bekräftar den. Det är också det som ändras jämfört med bilden i kapitel 4. I dag landar varje manifest i RouteDesk, och koordinatorerna knappar in rutterna i Salesforce och de klara stoppen tillbaka. I den här designen kommer manifesten direkt in i Salesforce, med upsert på partnerns nyckel; RouteDesk avvecklas, och inknappandet upphör. Kapitlet om integration designar de tre inkommande formaten. Databeslutet är nyckeln.

Mottagaren: personkonto, kontakt eller ingetdera?

Section titled “Mottagaren: personkonto, kontakt eller ingetdera? ”

Det här är det mest intressanta databeslutet i Del 1, så här är alternativen, och sedan mitt val.

Alternativ A: personkonton. Varje mottagare (Recipient) blir ett personkonto, länkat till varje leverans. För: standard, fungerar naturligt med Service Cloud, meddelandetjänster och konsolen, känner igen återkommande mottagare. Emot: ungefär en miljon nya mottagare per år, vart och ett ett personkonto som tar ungefär dubbelt så mycket lagring som ett företagskonto (Estimated Record Size by Object Type (opens in a new tab)), så inom två år ett av de största objekten i orgen. Och mottagarna är inte Steve Truckings kunder. De är varje detaljhandelspartners kunder, och Steve Trucking får aldrig blanda ihop en partners kund med en annans (S2).

Alternativ B: kontakter under detaljhandelspartnerns konto. Emot: en miljon kontakter under tre eller fyra konton är föräldra-barn-skew i enorm skala, långt över Salesforce vägledning om ungefär 10 000 barn per förälder (Considerations for Object Relationships (opens in a new tab); Parent-Child Data Skew (opens in a new tab)). Det här är alternativet att visa, och förkasta.

Alternativ C: mottagaren bor på leveransen. Mottagarens namn, telefon, e-post, adress och leveransanteckningar är fält på arbetsordern (adressfälten finns redan som standard där), hämtade från manifestet. För: inget nytt stort objekt; data lever exakt så länge som leveransen behöver dem; raderingen sker per leverans, enligt partnerns schema; och isoleringen mellan partner kommer gratis, eftersom varje leverans tillhör en partner. Emot: en återkommande mottagare känns inte igen som samma person.

Det är balansen som ska hittas. Kommer det någonsin att finnas ett behov av att känna igen flera leveranser som samma person, på samma plats? Att ge den personen en inloggning? Det är gränsen mellan en mottagare som behöver en egen post och mottagaruppgifter som helt enkelt är data om leveransen. Och det finns en mellanväg. Bär detaljhandelspartnerns eget kund-ID som ett fält på leveransen, ett Retail Partner Customer ID. Det skapar ingen mottagarpost, men det knyter ihop de leveranser som en partner skickar för samma kund, vilket är början på en mer enhetlig kundupplevelse, och det leder raka vägen tillbaka till detaljhandelspartnerns system, där kunden verkligen bor. Det är deras identifierare, så den betyder bara något tillsammans med partnern: en partners kund 4417 har ingenting att göra med en annans.

Enligt min professionella bedömning är alternativ C rätt val. Att mottagaren inte känns igen är acceptabelt, till och med önskvärt: Steve Trucking har ingen relation med de här personerna utöver leveransen. Det är modul 1 igen: mottagaren är partnerns kund, och partnern är auktoriteten för vem kunden är. Och det är kapitel 5: personuppgifter som hamnar på ett ställe, knutna till en leverans, är mycket lättare att skydda, bevara och radera. Och det håller mot normalformerna i kapitel 2: mottagarens uppgifter är ett-till-ett med leveransen, så de hör hemma på den. Ett separat barnobjekt för mottagaren skulle spara några upprepade värden till priset av ännu ett objekt, ännu en relation och dess overhead, och det enda sättet det skulle spara mer är genom att behandla samma person som en över detaljhandelspartnerna, vilket vi inte tänker göra. Så leveransen bär mottagaren, med Retail Partner Customer ID som vägen tillbaka till partnerns eget system.

Vem är mottagaren? Tre alternativ för mottagaren, var och en med sina skäl för och emot. Alternativ A, ett personkonto per mottagare: faller på relationen, eftersom mottagaren är partnerns kund; faller på volymen, ungefär en miljon per år med dubbelt så mycket lagring som ett företagskonto; klarar skew, var och en är ett eget konto; faller på partnerisolering, eftersom det blandar partnernas kunder; faller på radering, eftersom det lever längre än leveransen; klarar att känna igen återkommande. Avvisat. Alternativ B, kontakter under detaljhandelspartnern: faller på relationen, eftersom de inte är partnerns personal; faller på volymen; faller på skew, en miljon under tre eller fyra konton; klarar isolering, under en partners konto; faller på radering; känner igen återkommande inom en partner. Visa och avvisa. Alternativ C, mottagarfält på arbetsordern, markerat som valet i kontrollpunkt 1: den enda relationen är leveransen; inget nytt objekt; ingen ny förälder; en partner per leverans; raderas enligt partnerns schema; och en återkommande mottagare känns inte igen, vilket går bra. Under: modellera personen efter den relation du faktiskt har. A: Personkonto avvisat FÖR Känner igen en återkommande mottagare Ingen förälder-skew: var och en är ett eget konto EMOT Partnerns kund, inte vår Ungefär 1 miljon per år, med dubbel lagring Blandar partnernas kunder (S2) Lever längre än leveransen B: Kontakt under detaljhandelspartnern: visa och avvisa FÖR Hålls under en partner (S2) Återkommande kända inom en partner EMOT Inte partnerns personal 1 miljon under 3 eller 4 konton: skew Lever längre än leveransen C: På leveransen fält på arbetsordern: valet FÖR Den enda relationen är leveransen Inget nytt objekt, ingen ny förälder En partner per leverans (S2) Raderas enligt partnerns schema EMOT En återkommande mottagare känns inte igen: det går bra Modellera personen efter den relation du faktiskt har. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Skulle jag förena mottagare över partnerna?

Section titled “Skulle jag förena mottagare över partnerna? ”

John Smith, 123 Main Street, finns i både Redrocks och Brightwaves manifest. Förmodligen samma person. Ska Steve Trucking förena dem? Nej, medvetet inte. Att förena mottagare över detaljhandelspartnerna skulle bryta mot S2: en partner får aldrig se en annan partners mottagare, och en enhetlig identitet är exakt den bro som läcker. Det är det här kapitlets hållning i praktiken: matcha för lite där sammanblandning är dyr, och här är sammanblandning väldigt dyr.

Om en detaljhandelspartner senare vill att återkommande mottagare ska kännas igen inom sina egna leveranser är det ett jobb för ett verktyg för identitetsupplösning, som det i Data 360, avgränsat till den partnern: en karta i registerstil, inte ett personkonto, och aldrig över partnerna. En karta över vem som är vem ger inget ägarskap, och den ger ingen åtkomst.

Vad som stannar i orgen, och vad som inte gör det

Section titled “Vad som stannar i orgen, och vad som inte gör det ”

Kapitel 3 frågade var data ska bo. Nollorna besvarar det här:

  • Aktuell status bor på servicebesöket och arbetsordern. Historiken över statusändringar, ungefär 8 miljoner per år och växande, behöver inte bo i core-orgen. Varje ändring publiceras som en händelse och sparas i datalagret, Snowflake. Orgen behåller det aktuella tillståndet; historiken finns fortfarande där för service, drift och analys, bara inte i den operativa databasen.
  • Foton (fyra till fem miljoner per år, en del som visar människor eller insidan av ett hem) bor utanför core i lagring som är byggd för den volymen, uppladdade direkt från teamets app. Orgen behåller bara det den behöver: en liten indexpost per foto, eller bara ett antal och en flagga för ”obligatoriska installationsfoton klara”. Jag föredrar det lättare alternativet: håll orgen slimmad, och låt fotolagringen äga sitt index och sin lagringstid.
  • GPS-avläsningar (200 000 per dag) stannar i FleetLink och går till Snowflake; orgen behöver bara den senaste positionen för spårningssidan och trafikledarens karta.
  • RouteDesks åtta års historik (ungefär 5 miljoner leveranser) går till datalagret eller ett arkiv, nåbar för reklamationer. Vad som eventuellt kommer in i orgen är ett migreringsbeslut för Del 2.
Kontrollpunkt 1: det jag skulle arkitektera Landskapet i kontrollpunkt 1, det jag skulle arkitektera, på samma platser som det nuvarande landskapet i kapitel 4. Människor till vänster: 45 utsändningskoordinatorer inne i 9 partners DC:n, ungefär 700 medlemmar i leveransteam på 330 lastbilar, 100 personer i kundtjänst och på kontor, alla i Salesforce; ungefär 300 användare hos 3 detaljhandelspartner, i portalen för detaljhandelspartner; och ungefär en miljon mottagare per år, som öppnar en spårningssida via en länk, utan inloggning, och ringer kundtjänstagenter. I mitten en Salesforce-org i USA med Field Service, företagets identitetsleverantör ovanför bara för kontorspersonal, och e-post till ärende som för in ärenden. De tre detaljhandelspartnerna nere till höger, Redrock via REST API och webhooks, Keystone via CSV över SFTP och Brightwave via EDI genom ett tredjepartsnätverk, skickar manifest in till ett integrationslager, som designas i del 2, som gör upserts till Salesforce med partnerns nyckel och skickar status tillbaka ut till varje partner. Till höger: Salesforce skickar statushändelser till Snowflake, som håller statushistoriken och analysen; FleetLink, där rå GPS-data stannar, skickar bara den senaste positionen till Salesforce; Salesforce skickar leveransantal genom integrationen till ekonomi-ERP:n, som fakturerar partner och betalar team; foton, 4 till 5 miljoner per år, går från teamens app till fotolagring utanför core; och RouteDesk avvecklas till ett arkiv med sina 8 års historik. Salesforce skickar meddelandet dagen före, med en länk, genom sms- och e-postleverantören. Under: samma företag som i kapitel 4; inmatningen på nytt och kalkylarket är borta; historiken och fotona finns utanför core. OVANFÖR: IDENTITET, APPEXCHANGE, WEBB MÄNNISKOR TILL HÖGER: INTERNA SYSTEM NEDANFÖR: KUNDKANALER NERE TILL HÖGER: PARTNER OCH LEVERANTÖRER Utsändningskoordinatorer 45, inne i 9 partners DC:n Leveransteam ~700 på 330 lastbilar Kundtjänst och kontorspersonal 100: service, drift, ekonomi Användare hos detaljhandelspartner ~300 hos 3 partner Mottagare ~1 miljon per år Företagets IdP SSO bara för kontorspersonal Portal för detaljhandelspartner Spårningssida INTEGRATION Snowflake statushistorik, analys FleetLink rå GPS-data stannar här Ekonomi-ERP fakturerar partner, betalar team Fotolagring 4–5 miljoner per år, utanför core RouteDesk-arkiv avvecklat; 8 års historik Telefon kundtjänstagenter E-post e-post till ärende Sms- och e-postleverantör meddelande dagen före, med en länk Redrock REST API, webhooks Keystone CSV över SFTP Brightwave EDI via ett tredjepartsnätverk Salesforce Field Service, en org i USA en länk, ingen inloggning bara kontorspersonal ringer ärenden in manifest in status ut manifest in status ut manifest in status ut upserts, partnerns nyckel statushändelser bara senaste position leveransantal leveransantal foton, från teamens app dagen före, med en länk Salesforce en community människor identitet, appar, webb ett internt system en kundkanal integrationslagret börjar vid systemet som öppnar anslutningen; etiketten säger vad som flyttas ett delat certifikat: förtroende, inget direkt anrop Samma företag som i kapitel 4. Inmatningen på nytt och kalkylarket är borta; historiken och fotona finns utanför core. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Kontrollpunkt 1: så skulle jag designa det. Samma platser som landskapet i kapitel 4 (Steve Truckings landskap), utan inknappandet och kalkylarket.

  • Detaljhandelspartnerna ser bara sina egna leveranser (S2). Varje arbetsorder bär sin detaljhandelspartner; portalanvändarna ser sin partners leveranser, och DC-cheferna bara sitt DC:s.
  • Partneranvändarna behöver en portallicens som stöder delningsregler och roller: Customer Community Plus eller Partner Community. Arenans platser från kapitel 3: de billigaste platserna får inte den delning som den här designen behöver. Båda licenserna behöver roller för de externa användarna, och Salesforce varnar för att fler roller gör orgen långsammare (Experience Cloud User Licenses (opens in a new tab)). En roll per partner och per DC går bra; en roll för varje butik gör det inte.

Provkunskap. Känn till vilka externa licenser som har standarddelning: Customer Community Plus och Partner Community (med roller för de externa användarna), inte Customer Community, som använder delningsuppsättningar (sharing sets).

  • Mottagarna behöver ingen licens. Spårningssidan visar en leverans genom en länk med en token som slutar gälla (S3), inte en inloggning.
  • Se upp för skew. Hundratusentals arbetsorder per år som pekar på tre eller fyra partnerkonton är account data skew. Ett alternativ är ett barnkonto per DC under varje partner, vilket sprider barnen på nio eller fler; att arkivera klara leveranser efter reklamationsfönstret håller nere antalet aktiva barn per förälder. Del 2 tar sig an det.

Jag skulle inte skapa ett personkonto för varje mottagare bara för att en mottagare är en individ. Jag skulle inte hänga en miljon kontakter på tre konton. Jag skulle inte bygga ett anpassat leveransobjekt bredvid arbetsordern i Field Service. Jag skulle inte förena mottagare över partnerna. Jag skulle inte lägga miljontals foton eller GPS-avläsningar i core-lagringen. Och jag skulle inte kalla en förenad mottagare för en golden record om vi inte faktiskt hade fattat ett beslut om masterdata.

Del 1 satte skelettet; Del 2 prövar det. LDV-linjalen vid år tre (arbetsorder, servicebesök och rader hamnar alla i området för stora volymer inom två till tre år), frågedesign för listvyer avgränsade per partner, de tre inkommande integrationerna och de tre statusflödena, migreringen från RouteDesk, transaktionerna under dagen och säkerhetsdesignen bakom portalen. Steve Trucking kommer också att förändras. Behåll den här designen; du kommer att återvända till den.

  • Vilka standardobjekt som bär kärnan (här de i Field Service), och vilka anpassade objekt som verkligen är motiverade (här ett).
  • Nyckeln som matchar varje partners orderrad mot en leverans, och varför den tillhör partnern.
  • Vad mottagaren är, utifrån den relation som Steve Trucking faktiskt har med mottagarna.
  • Om identiteter ska förenas, och var sammanblandning är för dyr att riskera.
  • Vad som stannar i orgen, vad som bor utanför core, och vilka licenser designen är beroende av.