Gå til indhold

Datamodellen er skelettet

Findes også på 28 sprog

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 · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

An older room opened up mid-renovation: its timber beams exposed, a new beam held on steel props, the furniture waiting under dust sheets.
Billedet er lavet med AI

Modul 2 af 7 i kapitlet Tænk som en dataarkitekt, kapitel 1 i kurset Data Architect. Hvert modul står på egne ben. Forrige: Tænk som en arkitekt · Næste: Reversibilitetstesten

Spørgsmålet, dette modul besvarer: Hvorfor betyder datamodellen mere end alt det, der bygges oven på den, og hvordan vurderer du en?

Når jeg underviser i dataarkitektur, er der en sætning, jeg vender tilbage til igen og igen: datamodellen er skelettet.

Datamodellen er systemets skelet. Alt andet bygges omkring den, og det er den, der holder resten af kroppen sammen. Du ser ikke skelettet, når du kigger på en person, men det bestemmer, hvor rank personen står, hvordan personen bevæger sig, og hvad personen kan bære.

Tænk på alt det, vi bygger i en Salesforce-implementering. Vi bygger automatisering omkring datamodellen. Vi skriver Apex mod den og Flows, der læser og opdaterer den. Vi bygger integrationer, der sender data ind i den og henter data ud af den. Vi laver rapporter og analyser på den, og vi designer sikkerhed omkring den. Og i stigende grad bygger vi AI-agenter, der skal forstå de data og handle på dem. Det hele afhænger af strukturen nedenunder.

Derfor betyder det så meget at få datamodellen rigtig tidligt. Du kan godt ændre skelettet senere. Men det kommer nok til at gøre ondt.

En god datamodel starter med et enkelt spørgsmål: hvad har forretningen egentlig brug for at repræsentere? Ikke »hvilke Salesforce-objekter har vi?« Og bestemt ikke »hvad kan jeg bygge hurtigt?«

Vi prøver at forstå forretningen først. Hvad er de vigtige ting i denne forretning? Hvordan hænger de sammen? Hvem ejer dem? Hvordan ændrer de sig over tid? Hvad skal huskes, og hvad deles på tværs af forretningsprocesser? Først når vi forstår de ting, skal vi begynde at oversætte dem til objekter, felter og relationer.

Det lyder indlysende. I praksis er det meget nemt at gøre det baglæns. Nogen genkender noget, der ligner en salgsmulighed (Opportunity), en sag (Case) eller et aktiv (Asset), og begynder straks at designe omkring det. Nogle gange er det præcis rigtigt. Andre gange prøver vi at presse en firkantet pind ned i et rundt hul, og når der først er bygget nok omkring den beslutning, bliver det meget dyrt at få pinden ud igen.

Her er et spørgsmål, jeg hører hele tiden. En kundes forretning kan have mange leveringsadresser. Skal hver adresse være en konto (Account) eller et brugerdefineret objekt? Før du svarer, så læg mærke til, hvad du først skal vide: hvad en adresse betyder for denne forretning, og hvad der sker med den. Det er at modellere forretningen før objekterne. (Du får mit svar i kapitel 3.)

Når jeg kigger på en datamodel, vil jeg have, at den består tre test: bære forretningen, vokse med forretningen og yde.

Bære. Modellen skal bære det, forretningen faktisk prøver at opnå. Der er stor forskel på en model, der teknisk set kan gemme dataene, og en model, der faktisk repræsenterer forretningen godt. Hvis jeg hele tiden tilføjer mærkelige felter, særlige flag, kompliceret automatisering og undtagelser, fordi modellen ikke helt passer, begynder jeg at spørge, om problemet virkelig er automatiseringen. Måske er modellen forkert. En god model skal gøre forretningen nemmere at forstå, ikke sværere.

Vokse. Når jeg siger vokse, mener jeg ikke kun flere poster. Volumen betyder noget: ti tusind poster og hundrede millioner skaber meget forskellige problemer. Men virksomheder vokser også i kompleksitet. De tilføjer produkter, går ind på nye markeder, opkøber virksomheder, ændrer processer, tilføjer kanaler og forbinder nye systemer. De opdager, at noget, de troede var én ting, i virkeligheden er fem forskellige ting. En model, der fungerer smukt i dag, kan blive en fælde, hvis der ikke er plads til i morgen. Derfor foretrækker jeg designs, der vokser ved tilføjelse, frem for designs, der hele tiden ændrer det, der allerede findes. Det er som regel nemmere at tilføje noget nyt end at omdefinere noget, som snesevis af andre ting afhænger af.

Yde. Data ligger ikke bare stille. Vi skriver dem, finder dem, forespørger på dem, deler dem, rapporterer på dem og integrerer dem, og i stigende grad henter AI-systemer dem som kontekst, før de handler. En model kan se smuk ud på et diagram og alligevel være forfærdelig at drive. Så vi designer både til hvordan dataene gemmes, og hvordan dataene skal bruges.

Og den skal blive ved med at yde. Den skal yde i stor skala: når antallet af brugere stiger, når datamængden stiger, under virkelige forhold og ved spidsbelastningerne, på årets travleste dag snarere end en gennemsnitlig dag. Og den skal blive ved med at yde, når noget uventet sker.

Bære. Vokse. Yde. Vi vender tilbage til de tre test gennem hele kurset.

Bære, vokse, yde Datamodellen, systemets fundament, med tre test under sig. Bære: passer den til forretningen? Vokse: kan den vokse ved at tilføje, ikke ændre? Yde: holder den i stor skala og ved spidsbelastninger? Datamodellen systemets fundament Bære Passer den til forretningen? Vokse Kan den vokse ved at tilføje, ikke ændre? Yde Holder den i stor skala og ved spidsbelastninger? Bære. Vokse. Yde. Vi vender tilbage til de tre test igen og igen. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

For flad, for kompliceret eller bare forkert

Sektion kaldt “For flad, for kompliceret eller bare forkert ”

Jeg har set datamodeller gå galt på tre måder.

Den første er at vælge den forkerte ting fra starten. Vi bruger et standardobjekt, fordi det ser tæt nok på ud, og bruger så år på at tilføje undtagelser, fordi det aldrig passede rigtigt. Det er den firkantede pind.

Den anden er at gøre modellen for flad. Alt kommer i ét objekt, og i starten virker det vidunderligt enkelt. Så vokser forretningen, og vi opdager, at nogle af tingene har deres egen livscyklus, kan forekomme flere gange, har brug for deres egen sikkerhed eller har deres egne relationer. Lige pludselig repræsenterer vi en en-til-mange-relation med Felt 1, Felt 2 og Felt 3 eller med stadig mere komplicerede flag og automatisering. Modellen gav os ikke plads til at vokse.

Den tredje er den modsatte fejl: vi overnormaliserer. Vi laver et elegant diagram med objekt efter objekt, hvor hvert begreb er perfekt adskilt. Teknisk smukt, praktisk elendigt. Brugerne har svært ved at forstå det, og sidelayouts og Lightning-sider med den ene relaterede liste efter den anden kan begynde at føles uendeligt dybe. Forespørgsler bliver mere komplicerede, automatisering krydser flere relationer, rapportering bliver sværere, og platformen skal arbejde mere for at besvare helt almindelige forretningsspørgsmål.

Så hvad er det rigtige, flad eller normaliseret? Der er ingen formel. Du har et billede af den optimale model i hovedet og forstår afvejningerne, efterhånden som du bevæger dig væk fra den. Det er arkitekturens kunst, og vi vender tilbage til det i modul 4 og i næste kapitel, hvor vi lærer at modellere. Indtil videre skal du bare se, at selve strukturen er en arkitektonisk beslutning.

For flad, cirka rigtig, overnormaliseret Tre måder at modellere de samme godkendelser på. For flad: én tabel for salgsmuligheder med godkender 1, 2 og 3 og deres datoer som felter. Cirka rigtig: en konto har salgsmuligheder, og en salgsmulighed har godkendelser, hver med en godkender og en dato. Overnormaliseret: salgsmuligheden delt ud på seks forbundne tabeller, fra godkendelsesanmodning og godkendelsestrin til trinets godkender, godkenderrolle og godkendelsesbeslutning. FOR FLAD: ÉN RODET TABEL CIRKA RIGTIG OVERNORMALISERET har har Salgsmulighed Beløb Fase Godkender 1 Godkendelsesdato 1 Godkender 2 Godkendelsesdato 2 Godkender 3 Godkendelsesdato 3 Konto Salgsmulighed Godkendelse Godkender Godkendelsesdato Salgsmulighed Godkendelsesanmodning Godkendelsestrin Trinets godkender Godkenderrolle Godkendelsesbeslutning Der findes ingen formel. Hav et billede af den optimale model, og forstå afvejningerne, når du bevæger dig væk fra den. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Når et system først kører, bliver jeg meget forsigtig med grundlæggende ændringer i datamodellen.

Forestil dig, at et tekstfelt har eksisteret i årevis, og nogen siger: »Vi bruger det ikke rigtig på den måde længere. Lad os lave det om til et tal.« Det lyder som en feltændring. Men hvad afhænger af det felt? Flows, Apex, rapporter, integrationer, datapipelines, eksterne applikationer, AI-agenter. Og hvad sker der med de historiske data? Platformen lader dig ikke engang ændre et felts type, så længe kode eller flows stadig refererer til det, og det fortæller dig, hvor langt ændringen rækker.

Nogle gange er det rigtige svar ikke at ændre det, der allerede findes. Afhængigt af hvor stor ændringen er, vil jeg hellere lave noget nyt, migrere bevidst og udfase den gamle struktur:

Tilføj frem for at ændre. Udfas frem for at overraske.

Salesforce giver dig endda en måde at sige det på i metadataene: et felts Field Usage (feltbrug) kan sættes til DeprecateCandidate, »planned for deprecation and no longer in use« (planlagt til udfasning og ikke længere i brug). Det markerer feltet for alle, der læser objektet; det skjuler ikke feltet, så at pensionere det er stadig en beslutning, du selv skal føre ud i livet.

For når andre dele af arkitekturen først afhænger af noget, kan det være langt farligere at ændre dets betydning end at ændre dets navn. Den værste udgave er feltet, hvis navn forbliver det samme, mens indholdet ændrer sig: alt nedstrøms stoler stadig på navnet.

Udfas, ændr ikke: at udskifte et felt Den samme levering vist tre gange. Før: et felt Kolli gemt som tekst. Under: Kolli (tekst) er overstreget og markeret som udfaset, og et nyt felt Antal kolli (tal) står ved siden af, markeret som nyt, mens hvert flow, hver rapport og hver integration flytter over. Efter: kun Antal kolli (tal) er tilbage. Tilføj i stedet for at ændre; udfas i stedet for at overraske. FØR UNDER EFTER tilføj det nye felt flyt alle, der bruger det Levering Leveringsdato Status Kolli (tekst) Levering Leveringsdato Status Kolli (tekst) UDFASET Antal kolli (tal) NY Levering Leveringsdato Status Antal kolli (tal) Tilføj i stedet for at ændre. Udfas i stedet for at overraske. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Selv noget så enkelt som at sætte flueben i Required (påkrævet) på et felt kan blive en tidsindstillet bombe. Hvis du allerede har indsamlet data, vil nogle poster ikke have feltet udfyldt. Så dage, uger eller måneder senere opdaterer nogen en af de poster, og gemningen fejler på grund af det påkrævede felt, og ingen har den værdi. En simpel ændring som at gøre et felt påkrævet kan få utilsigtede og forsinkede konsekvenser. Vi vender tilbage til Required, og til hvornår en værdi faktisk er kendt, i kapitel 3.

Ud over eksamen: AI bygger også på skelettet. Bed et AI-værktøj om at bygge en applikation, og det genererer objekterne, felterne, Flows, Apex, komponenterne og testene på få minutter. Hvis den oprindelige datamodel var forkert, har vi ikke undgået konsekvenserne af en dårlig beslutning; vi har fremskyndet dem, for hvert genereret lag er endnu en ting, der afhænger af den struktur. Derfor vil jeg have en menneskelig arkitekt, der gennemgår en AI-genereret datamodel, forstår den og står til ansvar for den. Modul 7 tager det et skridt videre.

Gennem kurset kommer vi til at tale om en masse teknologi: objekter og relationer, store datamængder, forespørgsler, integration, migrering, transaktioner, sikkerhed, Data 360 og AI. Under det hele ligger datamodellen.

Hvis modellen bærer forretningen, kan vokse med forretningen og yder til de måder, vi skal bruge dataene på, har vi bygget et stærkt fundament. Hvis vi får fundamentet forkert, bliver alt bagefter sværere.

Datamodellen er skelettet. Arkitekter skal være meget omhyggelige, når de designer skelettet. Ændringer i eksisterende strukturer kan få konsekvenser, der breder sig som ringe i vandet.

  • Om modellen bærer forretningen, kan vokse med den og yder til de måder, dataene skal bruges på.
  • Om et begreb passer til et standardobjekt eller er en firkantet pind.
  • Hvor flad eller hvor normaliseret modellen skal være, og hvorfor.
  • Om en ændring i skelettet skal være en tilføjelse, en migrering eller en udfasning frem for en ændring på stedet.