Kapittel 4 · 4A · Forelesning 7 · Lærebok 6.1–6.6

ER-modellen

Tegn problemet før du skriver tabeller. ER-diagrammet fanger semantikk på et nivå som SQL ikke klarer å uttrykke direkte.

01 · Hvorfor ER

Konseptuelt før logisk

ER står for Entity-Relationship, og er en konseptuell datamodell. Den ble introdusert av Peter Chen i 1976 som et bro-språk mellom forretningsdomenet («kunder bestiller varer») og det relasjonsmodellen krever («tabell, primærnøkkel, fremmednøkkel»). Du tegner et ER-diagram før du bestemmer deg for tabeller, fordi diagrammet tvinger frem spørsmålene som ellers blir glemt.

Definisjon
Entity-Relationship-modell

En grafisk notasjon for å beskrive virkelige objekter (entiteter), deres egenskaper (attributter) og hvordan de henger sammen (relasjoner). Notasjonen sier hva som finnes, ikke hvordan det skal lagres.

Hvorfor ikke hoppe rett til SQL?

Fordi SQL gir deg svar lenge før spørsmålene er stilt. ER-diagrammet sier: «Kan en kunde ha flere telefonnumre? Må en bestilling ha minst én vare? Kan en student være innskrevet i to programmer samtidig?» Hvis du ikke svarer på det først, koder du inn forutsetninger som ingen har validert.

To planer, én database

  • Konseptuelt nivå — hva problemet handler om. ER-diagram, med entiteter, relasjoner og constraints uttrykt visuelt.
  • Logisk nivå — hvordan vi representerer det med relasjonsmodellen. Tabeller, kolonner, nøkler, fremmednøkler.
  • Fysisk nivå — hvordan tabellene lagres på disk (heap, B+-tre, klustring). Dekkes i kap 6.
Sjekk · Lett
Hvorfor lager vi et ER-diagram i stedet for å gå rett på CREATE TABLE?
For å fange forretningsregler og semantikk på et språk som er kommuniserbart med stakeholders som ikke kan SQL. Diagrammet uttrykker eksplisitt hva som er en sterk vs. svak entitet, om relasjonen er total eller partiell, og om kardinaliteten er 1:1, 1:N eller N:M — informasjon som er vanskelig å lese ut av ferdige CREATE TABLE-setninger.
02 · Entiteter og attributter

Tingene i universet ditt

Definisjon
Entitet, entitetsmengde

En entitet er et diskret, identifiserbart objekt — én bestemt student, én bestemt bok, én bestemt ordre. En entitetsmengde er settet av alle entiteter av samme type. I diagrammet tegner vi entitetsmengden som et rektangel.

Attributter

Attributter er egenskapene en entitet har. Lærebokas taksonomi:

Atomær
Enkelt verdi som ikke kan deles meningsfullt. fødselsår, karakter.
Sammensatt
Består av flere underattributter. adresse = (gate, postnr, sted).
Fler-verdig
Kan ha flere verdier samtidig. telefonnumre: én person kan ha 0, 1 eller mange. Tegnes med dobbel oval.
Derivert
Kan beregnes fra andre attributter. alder derives fra fødselsdato. Tegnes med stiplet oval.
Student studnr navn adresse gate postnr tlf-numre alder studnr understreket = nøkkelattributt · stiplet = derivert · dobbel oval = fler-verdig
En Student-entitet med atomær (navn), nøkkel (studnr), sammensatt (adresse), fler-verdig (tlf-numre) og derivert (alder) attributt.
Vanlig tabbe

Behandle fler-verdige attributter som om de var atomære. Lagrer du tre telefonnumre kommaseparert i én kolonne, har du brutt 1NF før du har fått begynt — og du kan ikke spørre etter «alle som har telefonnummer 555-…» uten LIKE-hack.

Sjekk · MCQ
Hvilket attributt er fler-verdig?
«Språk» kan ha flere verdier samtidig for samme person. Det reduseres til en egen tabell PersonSnakker(personid, sprak) i 4B.
03 · Nøkler

Hva identifiserer en entitet

Tre nøkkelbegreper

Supernøkkel: et sett attributter som er unikt på tvers av alle instanser. Kandidatnøkkel: en supernøkkel som er minimal — du kan ikke fjerne noe attributt uten å miste unikheten. Primærnøkkel: kandidatnøkkelen designeren peker på som «den offisielle».

I ER-diagrammet understrekes primærnøkkelen i sin oval: studnr. En entitet kan ha flere kandidatnøkler — fødselsnummer og e-post er begge unike for en person — men bare én utvelges som primærnøkkel.

Naturlig vs. surrogat

En naturlig nøkkel finnes allerede i domenet (fødselsnummer, ISBN). En surrogatnøkkel er en kunstig identifikator (id BIGINT som vi tildeler). Surrogater er stabile; naturlige nøkler kan endre seg (folk endrer navn, men sjelden personnummer). Praksis er å velge surrogat i tillegg til naturlige unikhet-constraints.

Sjekk · Middels
Et bibliotek har Bok(isbn, tittel, hyllenr). Tre eksemplarer har samme ISBN men forskjellige hyllenummer. Hva er primærnøkkelen?
ISBN er ikke unik her — flere fysiske eksemplarer kan dele ISBN. Vi trenger en bredere nøkkel, f.eks. en surrogat eksemplar_id eller den sammensatte (isbn, hyllenr) hvis hyllenr er unikt per eksemplar. Modellfeilen er at vi har slått sammen «verkene» og «eksemplarene» — to ulike entiteter.
04 · Relasjoner og kardinalitet

Hvordan entiteter henger sammen

Definisjon
Relasjon (relasjonsmengde)

En relasjon er en assosiasjon mellom to eller flere entiteter. I ER-diagrammet tegnes relasjonen som en rombe (diamant) som forbindes med entitetene den knytter sammen. Denne bruken av ordet «relasjon» skal ikke forveksles med en tabell i relasjonsmodellen — historisk uhell.

Aritet

  • Binær — to entiteter (langt vanligst). StudenttarEmne.
  • Ternær — tre. Studentfår-veiledning-avLærer i et bestemt Emne.
  • Rekursiv — entitet i relasjon med seg selv. Ansattrapporterer-tilAnsatt. Da må vi tegne roller.

Kardinalitet — hvor mange?

Tre kardinalitetsforhold for binære relasjoner. Tegningen viser hvor mange instanser av den ene siden som kan henge sammen med én instans av den andre.

Person eier Pass 1 1 1 : 1 én Person eier nøyaktig ett Pass Avd. har Ansatt 1 N 1 : N én Avdeling har mange Ansatte
1:1 og 1:N — kanten merkes med antallet.
Student tar Emne N M karakter eksempel Anna ↔ TDT4145 Anna ↔ TMA4115 Bjørn ↔ TDT4145 Cecilie ↔ TMA4115 Cecilie ↔ TFY4106
N:M — én student tar mange emner; ett emne har mange studenter. Attributter (som karakter) hører hjemme på selve relasjonen, ikke på noen av entitetene.
Hvor hører karakter hjemme?

Ikke hos Student (alle emnene må ha hver sin), ikke hos Emne (alle studentene må ha hver sin). Den hører hjemme på selve N:M-relasjonen. Når vi reduserer i 4B blir dette en kolonne i mellomtabellen.

Sjekk · MCQ
En kunde kan kjøpe mange produkter, og et produkt kan kjøpes av mange kunder. Hva er kardinaliteten?
Begge sider er «mange» — typisk N:M. Reduseres til mellomtabell Kjop(kunde_id, produkt_id, dato, antall, …).
05 · Deltakelse

Total vs. partiell

Kardinalitet sier hvor mange; deltakelse sier om en entitet i det hele tatt må være med.

Total deltakelse

Hver instans må være med i minst én relasjon. Tegnes med dobbel kantlinje fra entitet til relasjon.

Eks: «Hver ansatt ha en avdeling.»

Partiell deltakelse

Det er tillatt å ikke være med. Tegnes med vanlig enkel kantlinje.

Eks: «En avdeling kan ha 0 ansatte (nyopprettet).»

Avd. jobber Ansatt 1 partiell N total — dobbel kant
Hver ansatt jobbe i en avdeling (total). Avdelingen kan eksistere uten ansatte (partiell).
Min..max-notasjon

Crow's foot-notasjon (og UML) bruker (min,max). (0,N) = partiell; (1,N) = total. (1,1) = nøyaktig én. Praktisk å bruke når du diskuterer nøyaktige grenser, f.eks. «en gruppe må ha 2–8 medlemmer».

Sjekk · Lett
«Hver student har én studieprogramtilknytning, men et studieprogram kan ha 0 eller mange studenter.» Hva er kardinalitet og deltakelse?
Kardinalitet: 1:N (én Studieprogram til mange Studenter). Deltakelse: total på Student-siden («må»), partiell på Studieprogram-siden (kan være tom).
06 · Svake entiteter

Når identitet kommer fra eieren

Definisjon
Svak entitet

En entitet som ikke har sin egen primærnøkkel — den identifiseres bare i kombinasjon med en eier-entitet. Tegnes med dobbel rektangel-ramme. Relasjonen til eieren kalles identifying relationship og tegnes med dobbel rombe.

Det klassiske eksempelet: ordrelinje

Ta en Ordre med ID 1042. Den har flere Ordrelinjer. Hver ordrelinje har et linjenummer (1, 2, 3 …) som er unikt innenfor ordren — men ikke globalt. Linjenummer 1 finnes i nesten hver ordre. Linjenummer alene identifiserer ingenting; (ordrenr=1042, linjenr=1) identifiserer entydig.

Ordre ordrenr har Ordrelinje linjenr 1 N
Dobbel rektangel = svak entitet. Dobbel rombe = identifying relationship. linjenr er diskriminator: stiplet understreking. Total deltakelse på svak side er underforstått.
Når reduseres til tabell

Ordrelinje får sammensatt primærnøkkel (ordrenr, linjenr), hvor ordrenr samtidig er fremmednøkkel til Ordre. Sletter du ordren, må linjene slettes også (ON DELETE CASCADE). Detaljer i 4B.

Sjekk · MCQ
Hvilken av disse er typisk svak entitet?
Pårørende har sjelden egen unik identifikator i et HR-system. De identifiseres gjennom personen de er pårørende til, pluss et nummer eller navn — klassisk svak entitet.
07 · Generalisering / spesialisering

ISA-hierarkier

Når flere entiteter deler attributter, men noen har egne i tillegg, trekker vi opp en superklasse. Pilen leses «er en» (ISA): «en Student er en Person», «en Lærer er en Person». Personen har felles attributter (navn, fnr); subklassene har sine egne.

Person ISA Student Lærer Adminstrator
Person generaliserer Student, Lærer og Administrator. Pilene leses «ISA».

To uavhengige akser

Disjoint vs. overlapping

Disjoint: én Person kan være høyst én av subklassene (Student eller Lærer, ikke begge).

Overlapping: samme Person kan være flere subklasser samtidig (en doktorgradsstudent som også underviser er både Student og Lærer).

Total vs. partiell

Total: hver Person må være minst én av subklassene (alle på campus er Student eller Lærer eller Admin).

Partiell: en Person kan være «bare Person», ingen av subklassene.

Konsekvenser for tabelldesign

Hvilken oversettelsesstrategi du velger i 4B avhenger av aksene. Total + disjoint kan modelleres som tabell-per-subtype uten sløsing. Partiell + overlapping krever ofte én bred tabell med diskriminator-kolonner. Mer i 4B.

Sjekk · Middels
Et bibliotek skiller mellom Bok, Tidsskrift og DVD, alle subtyper av Materiale. Et eksemplar er nøyaktig én av dem. Hva er aksene?
Total (hvert eksemplar er ett av materialtypene) + disjoint (bare én — du kan ikke ha samme fysiske ting som både bok og DVD). Vanlig oversettelse: tabell per konkret subtype, eller én tabell med diskriminator-kolonne type CHAR(1).
08 · Notasjon

Boks, rombe, ellipse

I dette kurset bruker vi Chen-stilen (lærebokas notasjon). Her er den korte juksesedlen:

rektangel = entitet dobbel ramme = svak entitet oval = attributt rust ramme = nøkkel stiplet = derivert rombe = relasjon

Andre notasjoner du vil møte

  • Crow's foot — bruker «føtter» for kardinalitet i stedet for tall. Vanlig i industriverktøy.
  • UML class diagram — entiteter er klasser; assosiasjoner er linjer med multiplikasjoner. Brukes ofte i objektorientert design.
  • (min,max)-notasjon — kanten merkes (0,N), (1,N), (1,1). Mer presist enn ren 1 / N.

Notasjon er konvensjon — semantikken er det samme. Velg én og hold deg til den i ett dokument.

09 · Oppsummering

Det du trenger å huske

Entitet rektangel, identifiserbart objekt
Attributt oval; atomær / sammensatt / fler-verdig / derivert
Nøkkelattributt understreket
Relasjon rombe mellom entiteter
Kardinalitet 1:1 / 1:N / N:M
Deltakelse total = dobbel kant; partiell = enkel
Svak entitet dobbel rektangel + identifying relationship
Diskriminator stiplet understreking
ISA trekant; disjoint/overlap × total/partiell
Klar for 4B?

Med et godt ER-diagram er reduksjonen til tabeller et mekanisk arbeid. Gå videre til 4B → ER → relasjonsskjema.

Sluttsjekk · MCQ
Hvilken kombinasjon beskriver en «ordrelinje på en faktura»?
Riktig — fler-verdig attributt ville miste muligheten til å ha egne attributter (antall, pris) per linje. N:M-relasjon mellom Ordre og Vare er nær riktig, men «ordrelinje» har egen identitet (linjenummer, kommentar), så den modelleres oftest som svak entitet.