Tilbake
5.1
Relasjonsdatabaser – repetisjon og fordypning

5.1 Relasjonsdatabaser – repetisjon og fordypning

ER-modellering, normalisering og relasjonell algebra.

65 min
7 oppgaver
ER-modellNormaliseringRelasjonerPrimærnøkler
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 7 oppgaver

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)
Primærnøkkel (Primary Key): Unik identifikator for kvar rad i ein tabell. Kan ikkje vere NULL og må vere unik.

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;
📝Oppgave

Kva er hovudføremålet med normalisering i databasar?

📝Oppgave

Kva normalform krev at alle attributt har atomiske verdiar (ikkje lister)?

📝Oppgave

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.

📝Oppgave

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.

📝Oppgave

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).

📝Oppgave

Kva blir kalla eit attributt som refererer til primærnøkkelen i ein annan tabell?

📝Oppgave

// --- 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


BegrepForklaring
EntitetEit objekt vi lagrar data om
NormalformNivå av normalisering (1NF/2NF/3NF)
FramandnøkkelKolonne 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.