Spring til indhold
Academi.dk

SQL

Datamodellering

Let øvet DA↔EN-ordliste

Datamodellering er at oversætte en beskrivelse i ord til tabeller. Du finder de ting, der skal gemmes, giver hver sin tabel, finder deres egenskaber, som bliver kolonner, og beskriver hvordan de hænger sammen. Det er den vigtigste beslutning i hele projektet.

Fra tekst til tabeller

Start med opgavebeskrivelsen og understreg navneordene. De er kandidater til tabeller. Understreg udsagnsordene mellem dem. De er relationerne.

“En kunde kan afgive flere ordrer. Hver ordre indeholder et eller flere produkter i et bestemt antal.”

Tre navneord, altså tre tabeller: kunde, ordre, produkt. To relationer: kunde afgiver ordre, ordre indeholder produkt.

Egenskaberne bliver kolonner

For hver tabel: hvad skal vi vide om den?

kunde(id, navn, email, oprettet)
ordre(id, kunde_id, dato, status)
produkt(id, navn, pris)

Hver tabel har en primærnøgle: en kolonne, der entydigt udpeger rækken, næsten altid id. Se nøgler.

De tre slags relationer

En-til-mange er langt den mest almindelige. Én kunde har mange ordrer; én ordre har én kunde. Løsningen: læg en fremmednøgle i “mange”-siden. Altså kunde_id i tabellen ordre.

En-til-en er sjælden. Ofte er det et tegn på, at de to burde være samme tabel

  • medmindre der er en god grund til at dele, for eksempel at den ene halvdel er følsomme oplysninger.

Mange-til-mange kan ikke laves direkte. En ordre indeholder mange produkter, og et produkt findes i mange ordrer. Det løses med en tredje tabel:

ordrelinje(ordre_id, produkt_id, antal, pris_paa_koebstidspunktet)

Den tabel er ikke bare teknik. Den er ofte der, de mest interessante oplysninger hører hjemme. Antallet og prisen på købstidspunktet giver hverken mening i ordre eller i produkt.

Kan I forklare den tredje tabel og hvorfor prisen skal gemmes der, har I svaret på et af de spørgsmål, der oftest stilles til den mundtlige eksamen.

Fem spørgsmål, der afslører en dårlig model

  1. Skal jeg rette den samme oplysning flere steder, hvis den ændrer sig?
  2. Kan der stå en fremmednøgle, der peger på noget, som ikke findes?
  3. Er der en kolonne, der nogle gange indeholder flere værdier?
  4. Har jeg kolonner som produkt1, produkt2, produkt3?
  5. Kan jeg svare på opgavens spørgsmål uden at gætte?

Et ja til de fire første eller et nej til det sidste betyder, at modellen skal laves om, og det er meget billigere at gøre nu end i maj.

Skriv begrundelserne ned med det samme

Rapporten skal indeholde, hvorfor modellen ser sådan ud: hvilke alternativer I overvejede, og hvad I valgte fra. De overvejelser husker I ikke i maj. Skriv fem linjer, hver gang I træffer en beslutning.

Kort opsamling

  • Navneord bliver tabeller, udsagnsord bliver relationer.
  • En-til-mange løses med en fremmednøgle i mange-siden.
  • Mange-til-mange kræver en tredje tabel.
  • Én værdi pr. felt, altid.

Læs videre

Senest gennemgået .