ER-modellen
Tegn problemet før du skriver tabeller. ER-diagrammet fanger semantikk på et nivå som SQL ikke klarer å uttrykke direkte.
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.
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.
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.
CREATE TABLE?CREATE TABLE-setninger.Tingene i universet ditt
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:
fødselsår, karakter.adresse = (gate, postnr, sted).telefonnumre: én person kan ha 0, 1 eller mange. Tegnes med dobbel oval.alder derives fra fødselsdato. Tegnes med stiplet oval.Student-entitet med atomær (navn), nøkkel (studnr), sammensatt (adresse), fler-verdig (tlf-numre) og derivert (alder) attributt.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.
PersonSnakker(personid, sprak) i 4B.Hva identifiserer en entitet
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.
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.
Bok(isbn, tittel, hyllenr). Tre eksemplarer har samme ISBN men forskjellige hyllenummer. Hva er primærnøkkelen?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.Hvordan entiteter henger sammen
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).
Student— tar —Emne. - Ternær — tre.
Student— får-veiledning-av —Læreri et bestemtEmne. - Rekursiv — entitet i relasjon med seg selv.
Ansatt— rapporterer-til —Ansatt. 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.
karakter) hører hjemme på selve relasjonen, ikke på noen av entitetene.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.
Kjop(kunde_id, produkt_id, dato, antall, …).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 må 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).»
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».
Når identitet kommer fra eieren
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.
linjenr er diskriminator: stiplet understreking. Total deltakelse på svak side er underforstått.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.
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.
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.
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.
Bok, Tidsskrift og DVD, alle subtyper av Materiale. Et eksemplar er nøyaktig én av dem. Hva er aksene?type CHAR(1).Boks, rombe, ellipse
I dette kurset bruker vi Chen-stilen (lærebokas notasjon). Her er den korte juksesedlen:
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 ren1/N.
Notasjon er konvensjon — semantikken er det samme. Velg én og hold deg til den i ett dokument.
Det du trenger å huske
Med et godt ER-diagram er reduksjonen til tabeller et mekanisk arbeid. Gå videre til 4B → ER → relasjonsskjema.