Entitet–relasjonsmodell

En entitet–relasjonsmodell eller ER-modell (eng. entity-relationship model) er en konseptuell modell for data som ofte benyttes i design av relasjonsdatabaser for å lage en grafisk fremstilling (et entitet–relasjonsdiagram eller ERD-diagram) av strukturen i databasen. En ER-modell vil typisk bestå av entiteter, entitetenes attributter, og relasjoner mellom ulike entiteter. I en relasjonsdatabase vil entitetene typisk representere tabeller, attributter vil representere kolonner, og relasjoner vil representere forbindelsene som dannes av fremmednøkler. ER-modellering ble utviklet av Peter Chen.


== Begreper ==


=== Entiteter ===
Entiteter i ER-modeller er de objektene man ønsker å beskrive og representeres typisk som bokser i modellen og tabeller i en relasjonsdatabase. Entitetene kan representere fysiske objekter som f.eks personer, eller mer abstrakte objekter som f.eks hendelser. Det anbefales å gi entitetene navn i én-tall (f.eks "kunde" fremfor "kunder"). I en databasetabell vil hver rad typisk representere en forekomst av entitetstypen (f.eks at hver rad representerer én kunde av entitetstypen kunde).


=== Attributter ===
Attributter er egenskapene til entitetstypen de tilhører og vil i en relasjonsdatabase typisk fremstilles som kolonner. En entitetsforekomst av typen "kunde" vil f.eks ha attributter som navn, adresse, osv.
En identifikator er den attributten eller kombinasjonen av attributter som skal brukes til å identifisere hver enkelt forekomst av en entitetstype. F.eks en unik kunde-id som opprettes når man registrerer seg som kunde i en nettbutikk, eller et studentnummer innen utdanning.


=== Relasjoner ===
Det vil ofte være ulike relasjoner mellom flere av entitetene i domenet som ER-modellen representerer. F.eks dersom domenet er en nettbutikk og "kunde" og "ordre" er noen av entitetstypene vil det gjerne være en relasjon mellom disse. Typisk et en-til-mange relasjon dersom hver kunde kan utføre et antall ordrer (kjøp).


=== Kardinalitet ===

Kardinaliteten til en relasjon uttrykker hvor mange entitetsforekomster av en entitet som kan eller må knyttes til en entitetsforekomst av en annen entitet i relasjonen.
I et en-til-en-relasjon vil hver forekomst av entitet A maks være tilknyttet én forekomst av entitet B og omvendt. F.eks at en person har ett og bare ett pass, og at det passet tilhører kun én person.
I et en-til-mange-relasjon vil en forekomst av A kun være tilknyttet én forekomst av B samtidig som hver forekomst av B kan være tilknyttet flere forekomster av A, eller omvendt. F.eks ved at en kunde kan ha mange tilhørende ordre i en nettbutikk, men hver ordre kan bare tilhøre én kunde.
I et mange-til-mange-relasjon vil en forekomst av A kunne være tilknyttet mange forekomster av B og omvendt. F.eks ved at én student kan ta mange fag og hvert fag kan ha mange studenter som tar det. I modellering av relasjonsdatabaser er det vanlig å løse opp mange-til-mange-relasjoner ved å lage en koblingsentitet. Dette kan hindre gjentagelse av data f.eks ved at man har en entitet for student med beskrivende attributter, en for fag med beskrivende attributter for hvert fag, og deretter oppretter en tredje mellom disse hvor man kobler hver enkelt student sammen med hvert fag den tar. På denne måten kan man hindre at de beskrivende attributtene til en student ikke trengs å gjentas unødvendig (utover den identifiserende identifikator attributten).


== Modellering ==
En ER-modell kan fremstilles på flere ulike måter og det er utviklet flere ulike notasjoner for komponentene i ER. En notasjon som er vanlig og utbredt i verktøy for fremstilling av ER-modeller er såkalt kråkefotnotasjon (eng. Crow's foot notation). Kråkefotnotasjonen benyttes som merkelapp på kardinaliteten til relasjonen mellom entitetene. I tillegg til å kunne vise om relasjonen er av typen en-til-en, en-til-mange eller mange-til-mange kan kråkefot-notasjonen også vise når det er tillatt med 0 forekomster av en entitet i en relasjon.
I blant markeres også relasjonene med en tekstbasert merkelapp som sier noe om rollene i relasjonen. For eksempel ved å merke linja mellom entitetene "kunde" og "ordre" med teksten "gjennomfører" for å fremheve at en kunde gjennomfører en ordre.


== Referanser ==