Gå til innholdet

Steve Trucking, slik ville jeg designet det

Finnes også 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 · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · 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.
Bildet er laget med KI

Modul 6 av 6 i kapitlet Masterdata og identitet, kapittel 6 i kurset Data Architect, og slutten på del 1. Forrige: Når autoriteten er delt · Neste: Del 2 begynner med Design for skala (coming soon)

Spørsmålet dette kontrollpunktet besvarer: Kan du sette sammen del 1 på et virkelig scenario?

Prøv oppgaven først. Dette er min gjennomgang av oppgaven til kontrollpunkt 1. Hvis du ikke har tegnet ditt eget design ennå, gjør det før du leser videre. Verdien ligger i å sammenligne resonnementet ditt med mitt, ikke i å lese svaret.

Dette er «slik ville jeg designet det»: en mulig, gjennomførbar løsning, ikke svaret, med avveiningene navngitt og standpunktene mine tatt. Vi har ikke dekket store datavolumer, spørringsdesign, integrasjonsmønstre, migrering eller transaksjoner ennå, og det er med vilje: arkitekturen utvikler seg etter hvert som du lærer mer. Men del 1 gir oss nok til å sette skjelettet.

Fra beskrivelsen: rundt 3 300 leveringer per arbeidsdag, én million i året, med 30 % vekst per år. Rundt 1,6 linjer per levering (1,6 millioner i året); rundt åtte statusendringer per levering (8 millioner i året); fire til fem millioner bilder i året; rundt 200 000 GPS-avlesninger om dagen; rundt 180 000 saker i året; tre detaljhandelspartnere (Retail Partners) som sender manifester på tre forskjellige måter; ni distribusjonssentre; 330 lastebiler med team på to personer. Og Steve Trucking kjører allerede én Salesforce-org med Service Cloud, Field Service og en partnerportal. Tell nullene før du tegner en eneste boks. De kommer til å avgjøre flere ting nedenfor.

Leveringene er hjertet i det hele, og Field Service håndterer allerede utsendingen. Så jeg starter med standardmodellen i Field Service, slik utsnittet i kapittel 3 gjorde:

ForretningsbegrepSalesforce-objektHvorfor
Detaljhandelspartner (Retail Partner)Konto (Account) (posttypen Retail Partner)En virksomhet Steve Trucking har kontrakt med; bærer kontrakter, saker og portaltilgang
Partnerens ansatte (DC-ledere, butikkansatte)Kontakt (Contact)Portalbrukere må være kontakter
Én levering: én mottaker, én adresse, én partnerordre, én dagArbeidsordre (Work Order)Arbeidsenheten i Field Service; planlegging, mobilappen og servicerapporter henger på den
Hver vare eller tjeneste: kjøleskapet, monteringen, bortkjøringenArbeidsordrelinje (Work Order Line Item)Deler opp arbeidet, styrer sjekklister og fakturering
Typen stopp: bare levering, med montering, med bortkjøringArbeidstype (Work Type)Bestemmer varighet, ferdigheter og monteringssjekklisten
Det planlagte besøket og tidsvinduetServiceavtale (Service Appointment)Det Field Service planlegger og teamets app viser
Team og lastebiler; DC-enes utkjøringsområderService Resource, Service Crew, Service Territory (serviceressurs, serviceteam, serviceområde)Field Service planlegger et team som én ressurs
Henvendelser fra mottakere, reklamasjoner fra partnereSak (Case)Servicekonsollen, rettigheter (entitlements), email-to-case
Partnerens liste for tirsdag ved DC-et i PhoenixManifest__c (egendefinert)Ingenting standard representerer enheten for mottak, avstemming og ny avspilling

Alt annet forblir standard. Å stå imot flere egendefinerte objekter er bevisst: spørsmålet i kapittel 1 var når en arkitekt bør stå imot enda ett, og her er svaret «nesten alltid». Partnerens ordrelinje, for eksempel, er ikke et nytt objekt. Det er arbeidsordren, identifisert med partnerens referanse.

Kontrollpunkt 1: leveringskjernen Den fysiske kjernen i kontrollpunkt 1 for Steve Trucking. På core: en detaljhandelspartner, en konto med en posttype, sender manifester, det ene egendefinerte objektet, og hver levering gjelder én partner. Et manifest lister leveringer. En levering er en arbeidsordre (Work Order) som bærer mottakeren som felter; den planlegges som avtaler, serviceavtaler (Service Appointment), inneholder leveringslinjer, arbeidsordrelinjer (Work Order Line Item), som hver beskrives av en type stopp, en arbeidstype (Work Type). Et team, et serviceteam (Service Crew), tildeles avtaler og arbeider i et DC-dispatchområde, et serviceområde (Service Territory). En forespørsel eller reklamasjon, en sak (Case), kan angå leveringer. Utenfor core: teamets GPS-ping går til datavarehuset, leveringen lenker til leveringsbilder i et bildelager, og hver avtale publiserer statushistorikken sin som hendelser til datavarehuset. Under: se til moderskipet: Field Service er leveringskjernen. PÅ CORE UTENFOR CORE sender gjelder lister angår planlegges som inneholder beskriver team arbeider i tildeles pinger lenker til publiserer Detaljhandelspartner Account · posttype Manifest Manifest__c · egendefinert Forespørsel eller reklamasjon Case Levering WorkOrder · Mottakerfelter Leveringslinje WorkOrderLineItem Avtale ServiceAppointment Type stopp WorkType DC-dispatchområde ServiceTerritory Team ServiceCrew Statushistorikk hendelser, datavarehus Leveringsbilder bildelager, lenket GPS-ping datavarehus, via referanse Se til moderskipet: Field Service er leveringskjernen. nøyaktig én null eller én én eller mange null eller mange lookup © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Den vokser ut av finalen i kapittel 3 (Design den fysiske modellen i Salesforce): de samme objektene på de samme stedene, med teamet, utkjøringsområdet, saken og det kontrollpunkt 1 holder utenfor core lagt til.

Nøkkelen som matcher en partners ordre med en levering

Section titled “Nøkkelen som matcher en partners ordre med en levering ”

Hver manifestlinje blir én arbeidsordre, koblet til manifestet sitt. Nøkkelen er spørsmålet jeg aller helst vil ha svar på: hvordan vet vi at denne linjen fra partneren er den leveringen? Mitt svar: en External ID på arbeidsordren bygd av detaljhandelspartneren og partnerens egen ordre- og leveringsreferanse (noe sånt som KEYSTONE-PHX-8843119-1), merket unique (unik). Ett felt per kilde, én-til-én. Det er partnerens identifikator, ikke vår: «flere identifikatorer for én ting» fra kapittel 2, og «partneren eier ordrereferansen sin» fra modul 1.

Hvorfor det betyr noe: manifestene kommer én til to dager i forveien og blir revidert samme dag. Med den nøkkelen blir hvert manifest som sendes på nytt eller revideres, upsertet i stedet for å lage duplikater. Revisjonen oppdaterer arbeidsordren, et felt registrerer den, og en endring i en levering som allerede er ruteplanlagt, varsler koordinatoren: partnerens endring blir gjennomført, men flagget til utsendingen bekrefter den. Det er også dette som endrer seg fra bildet i kapittel 4. I dag havner hvert manifest i RouteDesk, og koordinatorene taster rutene inn i Salesforce og fullførte stopp tilbake. I dette designet kommer manifestene rett inn i Salesforce, upsertet med partnerens nøkkel; RouteDesk pensjoneres, og den doble inntastingen tar slutt. Integrasjonskapitlet designer de tre innkommende formatene. Databeslutningen er nøkkelen.

Mottakeren: personkonto, kontakt eller ingen av delene?

Section titled “Mottakeren: personkonto, kontakt eller ingen av delene? ”

Dette er den mest interessante databeslutningen i del 1, så her er alternativene, og deretter mitt valg.

Alternativ A: personkontoer. Hver mottaker (Recipient) blir en personkonto, koblet til hver levering. For: standard, fungerer naturlig med Service Cloud, meldinger og konsollen, kjenner igjen mottakere som kommer tilbake. Mot: rundt én million nye mottakere i året, hver en personkonto med omtrent dobbelt så stor lagring som en bedriftskonto (Estimated Record Size by Object Type (opens in a new tab)), så innen to år et av de største objektene i orgen. Og mottakerne er ikke Steve Truckings kunder. De er kundene til hver enkelt detaljhandelspartner, og Steve Trucking må aldri blande én partners kunde med en annens (S2).

Alternativ B: kontakter under detaljhandelspartnerens konto. Mot: én million kontakter under tre eller fire kontoer er parent-child skew i enorm skala, langt forbi Salesforces veiledning om rundt 10 000 barn per forelder (Considerations for Object Relationships (opens in a new tab); Parent-Child Data Skew (opens in a new tab)). Dette er alternativet du viser, og forkaster.

Alternativ C: mottakeren bor på leveringen. Mottakerens navn, telefon, e-post, adresse og leveringsnotater er felt på arbeidsordren (adressefeltene er allerede standard der), hentet fra manifestet. For: ikke noe nytt stort objekt; dataene lever akkurat så lenge leveringen trenger dem; sletting skjer per levering, etter partnerens tidsplan; og isolasjonen mellom partnerne følger med gratis, fordi hver levering tilhører én partner. Mot: en mottaker som kommer tilbake, blir ikke kjent igjen som samme person.

Det er den balansen du må finne. Kommer det noen gang til å bli behov for å kjenne igjen flere leveringer som samme person, på samme sted? Gi den personen en innlogging? Det er grensen mellom en mottaker som trenger en egen post, og mottakeropplysninger som rett og slett er data om leveringen. Og det finnes en mellomvei. Ta med detaljhandelspartnerens egen kunde-ID som et felt på leveringen, en Retail Partner Customer ID (partnerens kunde-ID). Den oppretter ingen mottakerpost, men den binder sammen leveringene en partner sender for samme kunde, som er starten på en mer samlet kundeopplevelse, og den leder rett tilbake til detaljhandelspartnerens system, der den kunden egentlig bor. Det er partnerens identifikator, så den betyr bare noe sammen med partneren: én partners kunde 4417 har ingenting med en annens å gjøre.

Etter min faglige vurdering er alternativ C det riktige valget. At mottakeren ikke blir kjent igjen, er akseptabelt, til og med ønskelig: Steve Trucking har ingen relasjon til disse menneskene utover leveringen. Det er modul 1 igjen: mottakeren er partnerens kunde, og partneren er autoriteten for hvem de er. Og det er kapittel 5: personopplysninger som havner på ett sted, knyttet til én levering, er langt enklere å beskytte, oppbevare og slette. Og det holder mot normalformene i kapittel 2: mottakerens opplysninger er én-til-én med leveringen, så de hører hjemme på den. Et eget mottakerbarn ville spart noen gjentatte verdier, på bekostning av enda et objekt, enda en relasjon og kostnadene med dem, og den eneste måten det kunne spart mer på, er ved å behandle samme person som én på tvers av detaljhandelspartnere, og det gjør vi ikke. Så leveringen bærer mottakeren, med partnerens kunde-ID som veien tilbake til partnerens eget system.

Hvem er mottakeren? Tre alternativer for mottakeren, hvert med argumenter for og mot. Alternativ A, en personkonto per mottaker: stryker på relasjonen, fordi mottakeren er partnerens kunde; stryker på volum, omtrent én million i året med dobbelt så mye lagring som en bedriftskonto; består på skew, hver er sin egen konto; stryker på partnerisolasjon, fordi den blander partnernes kunder; stryker på sletting, fordi den lever lenger enn leveringen; består på å kjenne igjen tilbakevendende. Avvist. Alternativ B, kontakter under detaljhandelspartneren: stryker på relasjonen, siden de ikke er partnerens ansatte; stryker på volum; stryker på skew, én million under tre eller fire kontoer; består på isolasjon, under én partners konto; stryker på sletting; kjenner igjen tilbakevendende innenfor en partner. Vis og avvis. Alternativ C, mottakerfelter på arbeidsordren, uthevet som valget i kontrollpunkt 1: den eneste relasjonen er leveringen; ingen nye objekter; ingen ny overordnet; én partner per levering; slettes etter partnerens tidsplan; og en tilbakevendende mottaker blir ikke gjenkjent, noe som er greit. Under: modeller personen etter relasjonen du faktisk har. A: Personkonto avvist FOR Kjenner igjen en tilbakevendende mottaker Ingen overordnet skew: hver er sin egen konto MOT Partnerens kunde, ikke vår Omtrent 1 mill. i året, med dobbel lagring Blander partnernes kunder (S2) Lever lenger enn leveringen B: Kontakt under detaljhandelspartneren: vis og avvis FOR Holdes under én partner (S2) Tilbakevendende kjent innenfor en partner MOT Ikke partnerens ansatte 1 mill. under 3 eller 4 kontoer: skew Lever lenger enn leveringen C: På leveringen felter på arbeidsordren: valget FOR Den eneste relasjonen er leveringen Ingen nye objekter, ingen ny overordnet Én partner per levering (S2) Slettes etter partnerens tidsplan MOT En tilbakevendende mottaker blir ikke gjenkjent: det er greit Modeller personen etter relasjonen du faktisk har. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Ville jeg samlet mottakere på tvers av partnere?

Section titled “Ville jeg samlet mottakere på tvers av partnere? ”

John Smith, 123 Main Street, dukker opp i manifestet til Redrock og til Brightwave. Sannsynligvis samme person. Bør Steve Trucking samle dem? Nei, bevisst ikke. Å samle mottakere på tvers av detaljhandelspartnere ville bryte S2: en partner må aldri se en annen partners mottakere, og en samlet identitet er akkurat den broen som lekker. Det er kapitlets standpunkt i praksis: match for lite der sammenblanding er kostbart, og her er sammenblanding svært kostbart.

Hvis en detaljhandelspartner senere vil kjenne igjen mottakere som kommer tilbake innenfor sine egne leveringer, er det en jobb for et verktøy for identitetsoppløsning, som identitetsoppløsningen i Data 360, avgrenset til den partneren: et kart i registerstil, ikke en personkonto, og aldri på tvers av partnere. Et kart over hvem som er hvem, gir ikke eierskap, og det gir ikke tilgang.

Hva som blir i orgen, og hva som ikke gjør det

Section titled “Hva som blir i orgen, og hva som ikke gjør det ”

Kapittel 3 spurte hvor data bør bo. Nullene svarer på det her:

  • Gjeldende status bor på serviceavtalen og arbeidsordren. Historikken over statusendringer, rundt 8 millioner i året og voksende, trenger ikke å bo i core-orgen. Hver endring publiseres som en hendelse og lagres i datavarehuset, Snowflake. Orgen beholder gjeldende tilstand; historikken er der fortsatt for service, drift og analyse, bare ikke i den operative databasen.
  • Bilder (fire til fem millioner i året, noen av dem viser mennesker eller innsiden av et hjem) bor utenfor core i lagring bygd for det volumet, lastet opp rett fra teamets app. Orgen beholder bare det den trenger: en liten indekspost per bilde, eller bare et antall og et flagg for «påkrevde monteringsbilder fullført». Jeg foretrekker det lettere alternativet: hold orgen slank, og la bildelageret eie sin egen indeks og oppbevaring.
  • GPS-avlesninger (200 000 om dagen) blir i FleetLink og går til Snowflake; orgen trenger bare den siste posisjonen for sporingssiden og utkjøringskoordinatorens kart.
  • RouteDesks åtte år med historikk (rundt 5 millioner leveringer) går til datavarehuset eller et arkiv, tilgjengelig for reklamasjoner. Hva som eventuelt kommer inn i orgen, er en migreringsbeslutning for del 2.
Kontrollpunkt 1: det jeg ville arkitektert Landskapet i kontrollpunkt 1, det jeg ville arkitektert, på de samme plassene som det nåværende landskapet i kapittel 4. Mennesker til venstre: 45 koordinatorer inne i 9 partneres DC-er, omtrent 700 medlemmer av leveringsteam på 330 lastebiler, 100 personer i kundeservice og på kontoret, alle i Salesforce; omtrent 300 brukere hos 3 detaljhandelspartnere, i portalen for detaljhandelspartnere; og omtrent én million mottakere i året, som åpner en sporingsside via en lenke, uten pålogging, og ringer kundeserviceagenter. I midten én Salesforce-org i USA med Field Service, selskapets identitetsleverandør over bare for kontorpersonale, og e-post til sak som bringer saker inn. De tre detaljhandelspartnerne nederst til høyre, Redrock via REST API og webhooks, Keystone via CSV over SFTP og Brightwave via EDI gjennom et tredjepartsnettverk, sender manifester inn til ett integrasjonslag, som designes i del 2, og som gjør upserts i Salesforce etter partnerens nøkkel og sender status tilbake ut til hver partner. Til høyre: Salesforce sender statushendelser til Snowflake, som holder statushistorikken og analysen; FleetLink, der rå GPS-data blir, sender bare den siste posisjonen til Salesforce; Salesforce sender leveringsantall gjennom integrasjonen til økonomi-ERP-en, som fakturerer partnere og betaler team; bilder, 4 til 5 millioner i året, går fra teamenes app til bildelagring utenfor core; og RouteDesk fases ut til et arkiv med sine 8 års historikk. Salesforce sender meldingen dagen før, med en lenke, gjennom SMS- og e-postleverandøren. Under: samme selskap som i kapittel 4; innskrivingen på nytt og regnearket er borte; historikken og bildene bor utenfor core. OVER: IDENTITET, APPEXCHANGE, NETT MENNESKER TIL HØYRE: INTERNE SYSTEMER UNDER: KUNDEKANALER NEDERST TIL HØYRE: PARTNERE OG LEVERANDØRER Koordinatorer 45, inne i 9 partneres DC-er Leveringsteam ~700 på 330 lastebiler Kundeservice og kontorpersonale 100: service, drift, økonomi Brukere hos detaljhandelspartnere ~300 hos 3 partnere Mottakere ~1 million i året Selskapets IdP SSO bare for kontorpersonale Portal for detaljhandelspartnere Sporingsside INTEGRASJON Snowflake statushistorikk, analyse FleetLink rå GPS-data blir her Økonomi-ERP fakturerer partnere, betaler team Bildelagring 4–5 millioner i året, utenfor core RouteDesk-arkiv faset ut; 8 års historikk Telefon kundeserviceagenter E-post e-post til sak SMS- og e-postleverandør melding dagen før, med en lenke Redrock REST API, webhooks Keystone CSV over SFTP Brightwave EDI gjennom et tredjepartsnettverk Salesforce Field Service, én org i USA en lenke, uten pålogging bare kontorpersonale ringer saker inn manifester inn status ut manifester inn status ut manifester inn status ut upserts, partnerens nøkkel statushendelser bare siste posisjon leveringsantall leveringsantall bilder, fra teamenes app dagen før, med en lenke Salesforce en community mennesker identitet, apper, nett et internt system en kundekanal integrasjonslaget starter ved systemet som åpner forbindelsen; etiketten sier hva som flytter seg et delt sertifikat: tillit, ikke noe direkte kall Samme selskap som i kapittel 4. Innskrivingen på nytt og regnearket er borte; historikken og bildene bor utenfor core. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Kontrollpunkt 1: slik ville jeg designet det. Samme plasser som landskapet i kapittel 4 (Steve Truckings landskap), med den doble inntastingen og regnearket borte.

  • Detaljhandelspartnerne ser bare sine egne leveringer (S2). Hver arbeidsordre bærer detaljhandelspartneren sin; portalbrukerne ser partnerens leveringer, og DC-lederne bare leveringene til sitt eget DC.
  • Partnerbrukerne trenger en portallisens som støtter delingsregler og roller: Customer Community Plus eller Partner Community. Stadionsetene fra kapittel 3: de billigste setene får ikke den delingen dette designet trenger. Begge lisensene trenger roller for de eksterne brukerne, og Salesforce advarer om at flere roller gjør orgen tregere (Experience Cloud User Licenses (opens in a new tab)). En rolle per partner og per DC er greit; en rolle for hver butikk er det ikke.

Eksamenskunnskap. Vit hvilke eksterne lisenser som har standard deling: Customer Community Plus og Partner Community (med roller for de eksterne brukerne), ikke Customer Community, som bruker sharing sets.

  • Mottakerne trenger ingen lisens. Sporingssiden viser én levering gjennom en lenke med et token som utløper (S3), ikke en innlogging.
  • Pass på skew. Hundretusener av arbeidsordrer i året som peker på tre eller fire partnerkontoer, er account data skew. Ett alternativ er en barnekonto per DC under hver partner, som sprer barna på ni eller flere foreldre; å arkivere fullførte leveringer etter reklamasjonsfristen holder antallet aktive barn per forelder lavt. Del 2 tar fatt i det.

Jeg ville ikke opprettet en personkonto for hver mottaker fordi en mottaker er et individ. Jeg ville ikke hengt én million kontakter på tre kontoer. Jeg ville ikke bygd et egendefinert leveringsobjekt ved siden av arbeidsordren i Field Service. Jeg ville ikke samlet mottakere på tvers av partnere. Jeg ville ikke lagt millioner av bilder eller GPS-avlesninger i core-lagringen. Og jeg ville ikke kalt en samlet mottaker en golden record med mindre vi faktisk hadde tatt en mastringsbeslutning.

Del 1 satte skjelettet; del 2 tester det. LDV-linjalen i år tre (arbeidsordrer, serviceavtaler og linjer er alle i stort-volum-territorium innen to til tre år), spørringsdesign for listevisninger avgrenset per partner, de tre innkommende integrasjonene og de tre statusstrømmene, migreringen fra RouteDesk, transaksjonene på leveringsdagen, og sikkerhetsdesignet bak portalen. Steve Trucking kommer også til å endre seg. Ta vare på dette designet; du kommer tilbake til det.

  • Hvilke standardobjekter som bærer kjernen (her de fra Field Service), og hvilke egendefinerte objekter som virkelig er berettiget (her ett).
  • Nøkkelen som matcher hver partners ordrelinje med en levering, og hvorfor den tilhører partneren.
  • Hva mottakeren er, basert på relasjonen Steve Trucking faktisk har til dem.
  • Om identiteter skal samles, og hvor sammenblanding er for kostbart å risikere.
  • Hva som blir i orgen, hva som bor utenfor core, og hvilke lisenser designet er avhengig av.