Tillbaka till bloggen
5 min läsning

Crow's Foot ERD – så ritar jag alltid datamodeller vid datamigrering

Isak La Fleur EngdahlAv Isak La Fleur Engdahl

När jag börjar bygga en informationsmodell hos en kund är ett Crow's Foot-ER-diagram (ERD) nästan alltid det första som hamnar på whiteboarden. Det är ett kompakt sätt att rita upp vad verksamheten faktiskt menar med Kund, Order och Produkt – och, minst lika viktigt, reglerna som binder ihop dem. Har du aldrig läst ett sådant tidigare är det här den korta, praktiska introduktion jag önskar att fler intressenter hade fått.

Namnet "crow's foot" (kråkfot) kommer från den lilla treuddiga gaffeln i änden av en relationslinje. Gaffeln betyder "många" – och kan du läsa den kan du läsa de flesta datamodeller du stöter på.

De tre byggstenarna

Ett Crow's Foot-ERD innehåller bara tre saker: entiteter, attribut och relationer.

Entiteter är det verksamheten bryr sig om – objekten, händelserna eller begreppen du sparar data om: en Kund, en Order, en Produkt. I diagrammet är de helt enkelt rutor.

Attribut är de datapunkter som hör till en entitet – som Customer_FName, Order_Date eller Product_Price i bilden nedan. De listas inuti rutan, med den unika identifieraren (primärnyckeln, PK) överst – Customer_ID, Order_ID, Product_ID. Nyckeln är det som låter dig skilja en rad från alla andra.

Tre entitetsrutor – Customer, Order och Product – som var och en listar sina attribut med primärnyckeln (PK) överst
Entiteter är rutor; attribut listas inuti, med primärnyckeln överst.

Relationer är linjerna mellan rutorna. En linje säger "de här två entiteterna hör ihop" – en Kund lägger en Order. Men linjen ensam säger inte hur många. Det är vad symbolerna i varje ände är till för.

Att läsa symbolerna: kardinalitet och modalitet

Varje relationslinje bär ett par symboler i varje ände. De ser pilliga ut till en början, men regeln är enkel:

  • Symbolen närmast rutan (den inre) anger maximum – en eller många.
  • Symbolen längst från rutan (den yttre) anger minimum – noll (valfri) eller en (obligatorisk).

Grundmarkeringarna är bara tre:

  • Vinkelrät linje (ett streck tvärs över linjen) – en.
  • Kråkfot (den treuddiga gaffeln) – många.
  • Cirkelnoll, det vill säga relationen är valfri.

Du läser varje ände inifrån och ut: först maximum (närmast rutan), sedan minimum. Kombinerar du markeringarna får du de sex fallen i bilden nedan:

  • En (One) – en enkel linje.
  • En och endast en (One and only one) – dubbel linje: obligatorisk och exakt en.
  • Noll eller en (Zero or one) – linje innerst, cirkel ytterst.
  • Många (Many) – enbart kråkfot.
  • Noll eller många (Zero or many) – kråkfot innerst, cirkel ytterst.
  • En eller många (One or many) – kråkfot innerst, linje ytterst.
Crow's Foot-notationens symboler: noll-eller-en, många, en, en-och-endast-en, noll-eller-många, en-eller-många
Kardinalitets- och modalitetssymbolerna (märkta på engelska i bilden). Inre markering, närmast rutan = maximum (en/många); yttre markering = minimum (noll/en).

De fyra relationerna du faktiskt använder

Kombinera symbolerna så får du den handfull mönster som beskriver nästan vilken modell som helst:

  • En-till-en – varje instans i A hör till exakt en i B. Äkta en-till-en är ovanligare än man tror; ofta är det ett tecken på att två entiteter borde slås ihop, eller att du modellerar en valfri utvidgning av en post.
  • En-till-många – en A hör till många B, men varje B tillhör en enda A. En Kund lägger många Order; varje Order tillhör en Kund. Det här är arbetshästen i relationell design.
  • Många-till-många – många A hör till många B. Relationsdatabaser kan inte lagra detta direkt, så det bryts upp i två en-till-många-relationer via en kopplingstabell (associativ tabell). Order och Produkt är det klassiska exemplet – i bilden nedan löst med kopplingstabellen ORDERPRODUCT i mitten.
  • Noll-till-många – en A hör till noll eller många B. Den lilla cirkeln är den biten folk hoppar över, och den spelar roll: den är skillnaden mellan "varje kund måste ha en order" och "en kund får finnas utan någon order ännu".
ERD med Customer, Order, Product och kopplingstabellen ORDERPRODUCT som löser många-till-många mellan Order och Product
Customer–Order är en-till-många; Order–Product är många-till-många, upplöst via kopplingstabellen ORDERPRODUCT.

Varför jag använder det här när jag modellerar data hos företag

Ett Crow's Foot-ERD är inte bara en databasartefakt – det är ett samtalsverktyg. I migrerings- och MDM-arbete är det svåra sällan SQL:en; det är att få verksamheten att enas om vad datan betyder. Ett diagram på väggen gör det snabbare än en kravspec någonsin gör:

  • Det får fram reglerna tidigt. "Kan en order finnas utan en kund?" är en enkel symbolfråga på diagrammet, men kan bli en mycket dyr överraskning under en laddning om ingen ställde den. De där minimimarkeringarna – cirkeln mot linjen – är precis den sortens referensregel som spräcker migreringar när de upptäcks för sent.
  • Det avslöjar dolda många-till-många. Halva modelleringsarbetet är att upptäcka de kopplingstabeller verksamheten inte visste att den behövde.
  • Det ger källa och mål en gemensam karta. När du flyttar data in i ett affärssystem som SAP eller Dynamics 365 gör det gapen tydliga att jämföra källmodellen och målmodellen sida vid sida – båda i samma notation.
  • Alla kan läsa det. Till skillnad från UML eller ett rått schema kan en verksamhetsanalytiker, en utvecklare och en domänexpert alla stå vid samma whiteboard och enas.

Kom igång

Du behöver ingen särskild programvara för att börja – en whiteboard och de sex symbolerna ovan tar dig långt. När du vill ha något delbart stöder verktyg som Lucidchart och draw.io Crow's Foot-notation och kan generera schema från diagrammet.

Färdigheten som spelar roll är inte ritandet; det är att ställa rätt frågor om minimum och maximum tills modellen speglar hur verksamheten verkligen fungerar. Det samtalet är där bra informationsmodeller – och lyckade migreringar – börjar.

Vill du ha ett par extra ögon på din informationsmodell? Hör av dig – det är precis den sortens arbete jag gör.