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

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)
Primærnøkkel (Primary Key): Unik identifikator for hver rad i en tabell. Kan ikke være NULL og må være unik.

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

Hva er hovedformålet med normalisering i databaser?

📝Oppgave

Hvilken normalform krever at alle attributter har atomiske verdier (ikke lister)?

📝Oppgave

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.

📝Oppgave

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.

📝Oppgave

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

📝Oppgave

Hva kalles en attributt som refererer til primærnøkkelen i en annen tabell?

📝Oppgave

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


BegrepForklaring
EntitetEt objekt vi lagrer data om
NormalformNiva av normalisering (1NF/2NF/3NF)
FremmednoekkelKolonne 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.