ER-modellering, normalisering og relasjonell algebra.
Relasjonsdatabaser – repetisjon og fordypning
I IT 1 lærte du grunnleggende om databaser og SQL. Nå skal vi fordype oss i hvordan vi designer gode databaseløsninger fra bunnen av. En veldesignet database gjør det enklere å hente ut data, unngår duplikater og sikrer at informasjonen er konsistent.
I dette kapittelet skal du lære å:
- Lage ER-diagrammer (Entity-Relationship) for å modellere virkeligheten
- Forstå normalformer og hvorfor de er viktige
- Designe tabeller med riktige primærnøkler og fremmednøkler
- Identifisere og løse databaseproblemer som redundans og anomalier
ER-modellering (Entity-Relationship)
ER-modellering er en metode for å visualisere datastrukturen i et system før vi lager selve databasen. Vi identifiserer:
Entiteter (entities)
Objekter eller "ting" i systemet. Eksempler:
- I et biblioteksystem: Bok, Forfatter, Utlån, Medlem
- I en nettbutikk: Produkt, Kunde, Ordre, Kategori
Entiteter blir tabeller i databasen.
Attributter
Egenskaper til entitetene. Eksempel for entiteten "Bok":
- ISBN (primærnøkkel)
- Tittel
- Utgivelsesår
- Antall sider
Relasjoner (relationships)
Forbindelser mellom entiteter. Disse kan være:
En-til-mange (1:N)
- Én forfatter skriver mange bøker
- Én kunde kan ha mange ordrer
Mange-til-mange (M:N)
- Én bok kan ha flere forfattere
- Én forfatter kan ha skrevet flere bøker
En-til-en (1:1)
- Sjelden brukt, men eksempel: Én person har ett pass
I et ER-diagram tegner vi:
- Rektangler for entiteter
- Ovaler for attributter
- Romber for relasjoner
- Linjer som viser hvordan alt henger sammen
Eksempel: Biblioteksystem
La oss modellere et enkelt biblioteksystem:
Entiteter:
- Bok (ISBN, tittel, utgivelsesår)
- Forfatter (forfatterID, navn, fødeland)
- Medlem (medlemsID, navn, epost, telefon)
- Utlån (utlånID, utlånsdato, innleveringsfrist)
Relasjoner:
- Bok–Forfatter: Mange-til-mange (en bok kan ha flere forfattere, en forfatter kan ha skrevet flere bøker)
- Medlem–Utlån: En-til-mange (ett medlem kan ha mange utlån)
- Bok–Utlån: En-til-mange (én bok kan lånes ut mange ganger)
Denne modelleringen hjelper oss å se helheten før vi begynner å skrive SQL-kode.
Normalformer
Normalisering er prosessen med å organisere data for å:
- Minimere redundans (unødvendige duplikater)
- Sikre dataintegritet
- Gjøre det enklere å oppdatere og vedlikeholde databasen
1. Normalform (1NF)
Alle attributter må ha atomiske verdier (ikke lister eller sett).
Dårlig design (bryter 1NF):
Kunde (kundeID, navn, telefonnumre)
1, "Kari", "98765432, 91234567" // To nummer i ett felt!Riktig design (1NF):
Kunde (kundeID, navn)
Telefon (telefonID, kundeID, nummer)2. Normalform (2NF)
Må være i 1NF + alle ikke-nøkkelattributter må være fullstendig avhengige av primærnøkkelen.
Dårlig design (bryter 2NF):
Ordre (ordreID, produktID, produktnavn, antall)Her er produktnavn bare avhengig av produktID, ikke av hele nøkkelen (ordreID, produktID).Riktig design (2NF):
Ordre (ordreID, produktID, antall)
Produkt (produktID, produktnavn)3. Normalform (3NF)
Må være i 2NF + ingen transitive avhengigheter (ikke-nøkkelattributter skal ikke avhenge av andre ikke-nøkkelattributter).
Dårlig design (bryter 3NF):
Ansatt (ansattID, navn, avdelingID, avdelingsnavn)Her avhenger avdelingsnavn av avdelingID, ikke direkte av ansattID.Riktig design (3NF):
Ansatt (ansattID, navn, avdelingID)
Avdeling (avdelingID, avdelingsnavn)Fremmednøkkel (Foreign Key): Attributt som refererer til primærnøkkelen i en annen tabell. Skaper relasjoner mellom tabeller.
Redundans: Unødvendig duplisering av data. Fører til større databaser og risiko for inkonsistens.
Dataintegritet: Sikrer at data er nøyaktige og konsistente gjennom hele databasen.
Anomali: Problem som oppstår ved dårlig databasedesign (innsettings-, oppdaterings- eller slettingsanomalier).
Primær- og fremmednøkler i praksis
La oss se på hvordan vi definerer nøkler i SQL:
-- Tabell med primærnøkkel
CREATE TABLE Forfatter (
forfatterID INTEGER PRIMARY KEY,
navn TEXT NOT NULL,
fødeland TEXT
);
-- Tabell med primær- og fremmednøkkel
CREATE TABLE Bok (
ISBN TEXT PRIMARY KEY,
tittel TEXT NOT NULL,
utgivelsesår INTEGER,
forfatterID INTEGER,
FOREIGN KEY (forfatterID) REFERENCES Forfatter(forfatterID)
);Fordeler med fremmednøkler:
- Sikrer referanseintegritet (du kan ikke referere til en rad som ikke finnes)
- Forhindrer sletting av data som andre tabeller er avhengige av
- Dokumenterer relasjoner mellom tabeller
Eksempel på integritetssikring:
-- Dette vil feile hvis forfatterID 99 ikke finnes:
INSERT INTO Bok VALUES ('978-82-000-0000-0', 'Min bok', 2024, 99);
-- Dette vil også feile (kan ikke slette forfatter hvis bøker refererer til den):
DELETE FROM Forfatter WHERE forfatterID = 1;Hva er hovedformålet med normalisering i databaser?
Hvilken normalform krever at alle attributter har atomiske verdier (ikke lister)?
Gitt følgende tabell som bryter 1NF:
Student (studentID, navn, emner)
1, "Ole", "IT1, MAT1, FYS1"
2, "Kari", "IT1, KJE1"Tegn et ER-diagram eller beskriv hvordan du ville normalisert denne til 1NF.
En database inneholder følgende tabell:
Bestilling (bestillingID, kundeID, kundenavn, produktID, produktnavn, antall)a) Forklar hvorfor denne tabellen bryter 2NF og 3NF.
b) Normaliser til 3NF ved å lage flere tabeller.
Tegn et ER-diagram for et kinosystem med følgende krav:
- En film vises på flere visninger
- En visning viser én film i én sal
- En kunde kan kjøpe billetter til flere visninger
- En billett er til én visning for én kunde
Identifiser entiteter, attributter og relasjoner (1:1, 1:N eller M:N).
Hva kalles en attributt som refererer til primærnøkkelen i en annen tabell?
// --- Samleoppgaver ---
Du skal designe en database for et videregående skole-system. Systemet skal håndtere:
- Elever med navn, fødselsdato og klasse
- Klasser med klassenavn og trinn (VG1, VG2, VG3)
- Lærere med navn og hvilke fag de underviser i
- Fag med fagnavn og fagkode
- Karakterer som kobler elev, fag og karakter
a) Identifiser alle entiteter og deres attributter (inkluder primærnøkler)
b) Beskriv relasjonene mellom entitetene (1:1, 1:N eller M:N)
c) Skriv SQL-kode for å opprette alle tabeller med riktige PRIMARY KEY og FOREIGN KEY constraints
d) Normaliser designet ditt til 3NF hvis nødvendig
Oppsummering
I dette kapittelet har du lært:
- ER-modellering: entiteter, attributter og relasjoner.
- Normalformer: 1NF, 2NF og 3NF reduserer redundans.
- Primær- og fremmednøkler: identifiserer rader og kobler tabeller.
- Relasjoner mellom tabeller: knytter data sammen.
- Eksempel: biblioteksystem som datamodell.
Noekkelbegreper
| Begrep | Forklaring |
|---|---|
| Entitet | Et objekt vi lagrer data om |
| Normalform | Niva av normalisering (1NF/2NF/3NF) |
| Fremmednoekkel | Kolonne som kobler til en annen tabell |
Oppgaver
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.