ER-modellering, normalisering og relasjonell algebra.
Relasjonsdatabasar – repetisjon og fordjuping
I IT 1 lærte du grunnleggjande om databasar og SQL. No skal vi fordjupe oss i korleis vi designar gode databaseløysingar frå botnen av. Ein veldesigna database gjer det enklare å hente ut data, unngår duplikat og sikrar at informasjonen er konsistent.
I dette kapittelet skal du lære å:
- Lage ER-diagram (Entity-Relationship) for å modellere røynda
- Forstå normalformer og kvifor dei er viktige
- Designe tabellar med rette primærnøklar og framandnøklar
- Identifisere og løyse databaseproblem som redundans og anomaliar
ER-modellering (Entity-Relationship)
ER-modellering er ein metode for å visualisere datastrukturen i eit system før vi lagar sjølve databasen. Vi identifiserer:
Entitetar (entities)
Objekt eller "ting" i systemet. Eksempel:
- I eit biblioteksystem: Bok, Forfattar, Utlån, Medlem
- I ein nettbutikk: Produkt, Kunde, Ordre, Kategori
Entitetar blir tabellar i databasen.
Attributt
Eigenskapar til entitetane. Eksempel for entiteten "Bok":
- ISBN (primærnøkkel)
- Tittel
- Utgivingsår
- Tal på sider
Relasjonar (relationships)
Forbindelsar mellom entitetar. Desse kan vere:
Ein-til-mange (1:N)
- Éin forfattar skriv mange bøker
- Éin kunde kan ha mange ordrar
Mange-til-mange (M:N)
- Éi bok kan ha fleire forfattarar
- Éin forfattar kan ha skrive fleire bøker
Ein-til-ein (1:1)
- Sjeldan brukt, men eksempel: Éin person har eitt pass
I eit ER-diagram teiknar vi:
- Rektangel for entitetar
- Ovalar for attributt
- Rombar for relasjonar
- Linjer som viser korleis alt heng saman
Eksempel: Biblioteksystem
La oss modellere eit enkelt biblioteksystem:
Entitetar:
- Bok (ISBN, tittel, utgivingsår)
- Forfattar (forfatterID, namn, fødeland)
- Medlem (medlemsID, namn, epost, telefon)
- Utlån (utlånID, utlånsdato, innleveringsfrist)
Relasjonar:
- Bok–Forfattar: Mange-til-mange (ei bok kan ha fleire forfattarar, ein forfattar kan ha skrive fleire bøker)
- Medlem–Utlån: Ein-til-mange (eitt medlem kan ha mange utlån)
- Bok–Utlån: Ein-til-mange (éi bok kan lånast ut mange gonger)
Denne modelleringa hjelper oss å sjå heilskapen før vi byrjar å skrive SQL-kode.
Normalformer
Normalisering er prosessen med å organisere data for å:
- Minimere redundans (unødvendige duplikat)
- Sikre dataintegritet
- Gjere det enklare å oppdatere og vedlikehalde databasen
1. Normalform (1NF)
Alle attributt må ha atomiske verdiar (ikkje lister eller sett).
Dårleg design (bryt 1NF):
Kunde (kundeID, navn, telefonnumre)
1, "Kari", "98765432, 91234567" // To nummer i ett felt!Rett design (1NF):
Kunde (kundeID, navn)
Telefon (telefonID, kundeID, nummer)2. Normalform (2NF)
Må vere i 1NF + alle ikkje-nøkkelattributt må vere fullstendig avhengige av primærnøkkelen.
Dårleg design (bryt 2NF):
Ordre (ordreID, produktID, produktnavn, antall)Her er produktnamn berre avhengig av produktID, ikkje av heile nøkkelen (ordreID, produktID).Rett design (2NF):
Ordre (ordreID, produktID, antall)
Produkt (produktID, produktnavn)3. Normalform (3NF)
Må vere i 2NF + ingen transitive avhengigheiter (ikkje-nøkkelattributt skal ikkje avhenge av andre ikkje-nøkkelattributt).
Dårleg design (bryt 3NF):
Ansatt (ansattID, navn, avdelingID, avdelingsnavn)Her avheng avdelingsnamn av avdelingID, ikkje direkte av ansattID.Rett design (3NF):
Ansatt (ansattID, navn, avdelingID)
Avdeling (avdelingID, avdelingsnavn)Framandnøkkel (Foreign Key): Attributt som refererer til primærnøkkelen i ein annan tabell. Skaper relasjonar mellom tabellar.
Redundans: Unødvendig duplisering av data. Fører til større databasar og risiko for inkonsistens.
Dataintegritet: Sikrar at data er nøyaktige og konsistente gjennom heile databasen.
Anomali: Problem som oppstår ved dårleg databasedesign (innsetjings-, oppdaterings- eller slettingsanomaliar).
Primær- og framandnøklar i praksis
La oss sjå på korleis vi definerer nøklar 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)
);Fordelar med framandnøklar:
- Sikrar referanseintegritet (du kan ikkje referere til ei rad som ikkje finst)
- Hindrar sletting av data som andre tabellar er avhengige av
- Dokumenterer relasjonar mellom tabellar
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;Kva er hovudføremålet med normalisering i databasar?
Kva normalform krev at alle attributt har atomiske verdiar (ikkje lister)?
Gitt følgjande tabell som bryt 1NF:
Student (studentID, navn, emner)
1, "Ole", "IT1, MAT1, FYS1"
2, "Kari", "IT1, KJE1"Teikn eit ER-diagram eller skildra korleis du ville normalisert denne til 1NF.
Ein database inneheld følgjande tabell:
Bestilling (bestillingID, kundeID, kundenavn, produktID, produktnavn, antall)a) Forklar kvifor denne tabellen bryt 2NF og 3NF.
b) Normaliser til 3NF ved å lage fleire tabellar.
Teikn eit ER-diagram for eit kinosystem med følgjande krav:
- Ein film blir vist på fleire visningar
- Ei visning viser éin film i éin sal
- Ein kunde kan kjøpe billettar til fleire visningar
- Ein billett er til éi visning for éin kunde
Identifiser entitetar, attributt og relasjonar (1:1, 1:N eller M:N).
Kva blir kalla eit attributt som refererer til primærnøkkelen i ein annan tabell?
// --- Samleoppgaver ---
Du skal designe ein database for eit vidaregåande skule-system. Systemet skal handtere:
- Elevar med namn, fødselsdato og klasse
- Klassar med klassenamn og trinn (VG1, VG2, VG3)
- Lærarar med namn og kva fag dei underviser i
- Fag med fagnamn og fagkode
- Karakterar som koplar elev, fag og karakter
a) Identifiser alle entitetar og attributta deira (inkluder primærnøklar)
b) Skildra relasjonane mellom entitetane (1:1, 1:N eller M:N)
c) Skriv SQL-kode for å opprette alle tabellar med rette PRIMARY KEY og FOREIGN KEY constraints
d) Normaliser designet ditt til 3NF dersom nødvendig
Oppsummering
I dette kapittelet har du lært:
- ER-modellering: entitetar, attributt og relasjonar.
- Normalformer: 1NF, 2NF og 3NF reduserer redundans.
- Primær- og framandnøklar: identifiserer rader og koplar tabellar.
- Relasjonar mellom tabellar: knyter data saman.
- Eksempel: biblioteksystem som datamodell.
Nøkkelbegrep
| Begrep | Forklaring |
|---|---|
| Entitet | Eit objekt vi lagrar data om |
| Normalform | Nivå av normalisering (1NF/2NF/3NF) |
| Framandnøkkel | Kolonne som koplar til ein annan 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.