SQL
Datamodellering
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
- Skal jeg rette den samme oplysning flere steder, hvis den ændrer sig?
- Kan der stå en fremmednøgle, der peger på noget, som ikke findes?
- Er der en kolonne, der nogle gange indeholder flere værdier?
- Har jeg kolonner som
produkt1,produkt2,produkt3? - 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
- Primærnøgler og fremmednøgler Primærnøgler og fremmednøgler forklaret på dansk med eksempler i SQL. Hvorfor de findes, hvordan de sættes op, og hvad referentiel integritet betyder.
- Normalisering Normalisering forklaret på dansk med et gennemgående eksempel gennem første, anden og tredje normalform, og hvornår man bevidst afviger fra det.
- JOIN forklaret SQL JOIN forklaret på dansk: inner join, left join og forskellen på dem. Hvorfor du pludselig får flere rækker, end du forventede, og hvordan du undgår det.
Senest gennemgået .