Entitet–relasjonsmodell

Innen databaser er en **entitet–relasjonsmodell** eller **ER-modell** en konseptuell modell for data som kan brukes for å designe og opprette relasjonsdatabase. Modellen viser hvordan ulike deler av en datamodell virker med hverandre (samhandler). Den består av 3 typer elementer som er entiteter, entitetenes attributter, og relasjoner mellom ulike entiteter. For en relasjonsdatabase er det typisk at:

* Entitetene («firkanter» i Chen-notasjon) representerer tabeller
* Attributtene («sirkler» i Chen-notasjon) representerer kolonner
* Relasjonene («diamanter» i Chen-notasjon) representerer forbindelsene som dannes av fremmednøkler.

Resultatet av ER-modellering er en grafisk fremstilling, et såkalt «entitet–relasjonsdiagram» eller «ERD-diagram», som viser strukturen til databasen.

## Historie
ER-modellering ble utviklet av taiwansk-amerikaneren Peter Chen, som publiserte den i en artikkel i 1976. Chen var imidlertid ikke den første som hadde kommet på denne idéen, og etter publiseringen av artikkelen hans ble konseptet også endret noe.

## ER-modellering

I en ER-model er det 3 ulike typer objekter:

* Entitet: Noe som eksisterer i den virkelige verden, for eksempel en ansatt som heter Ole, eller et prosjekt med nummer 1234
* Relasjon: Hvordan to entiteter relateres til hverandre
* Attributter: Nyttig informasjon om enten en entitet eller en relasjon. Både entiteter og relasjoner kan ha attributter

Siden databasen må være i stand til å finne en entitet eller relasjon, må den være i stand til å identifisere seg med en mengde av attributter som er unike.

Denne mengden attributter kalles vanligvis primærnøkkel. Etter at relasjoner har blitt avbildet går man typisk gjennom dem for å inkludere kardinalitetene; en kardinalitet spesifiserer antaller entiteter som er relaterte i en relasjon. Denne informasjonen trengs når en database skal opprettes. Avhengig av kardinaliteten og graden av normalisering kan det være nødvendig å introdusere ytterligere entiteter og relasjoner.

## Opprettelse av en database
Når alt har blitt beskrevet er det enkelt å opprette en relasjonell database som følger:

* Hver type entitet kan avbildes direkte til en relasjon ("databasetabell")
* Hver type attributt kan direkte avbildes til attributter ("kolonner" i databasetabellen)
* Attributter kan direkte avbildes til attributter ("kolonner" i databasetabellen)

## Begrensninger
En ER-modell beskriver relasjonene mellom entiteter. Den er apdaptert for å representere relasjonelle data. Data som ikke enkelt kan beskrives på denne formen bør ikke modelleres med en ER-modell. ER-modellering tar sikte på å designe en database fra bunn; bruk av en ER-modell for å beskrive og endre en database som allerede eksisterer kan være vanskelig å gjøre.

Selv i tilfeller hvor ER-modellering i prinsippet skal være anvendelig brukes ER-modellering sjelden som en separat aktivitet. En grunn for dette er at det i relasjonelle databasehåndteringssystem (DBMS) ofte er mange verktøy for å lage diagrammer og annen innebygd designstøtte. Disse verktøyene kan trekke ut database-diagrammer som er veldig nært hva ER-diagrammer fra eksisterende databaser ville vært, og tilbyr alternative visninger av informasjonen i disse diagrammene.

I en undersøkelse fant MIchael J. Brodie og J. T. Liu ingen eksempler på bruk av ER-modellering ved prøvetaking av 10 stykk Fortune 100-selskaper. Antonio Badia og Daniel Lemire begrummet den lave bruken med manglende veiledning, men også manglende fordeler, slik som mangel på støtte for dataintegrasjon.

## 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 (for eksempel "kunde" fremfor "kunder"). I en databasetabell vil hver rad typisk representere en forekomst av entitetstypen (for eksempel 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. For eksemep 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 (**mange-til-en**-relasjon). 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).

## Notasjon
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 (engensk: *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 linjen mellom entitetene "kunde" og "ordre" med teksten "gjennomfører" for å fremheve at en kunde gjennomfører en ordre.

## Se også
* Attributt–verdi-system, en tabell med kolonner som angir attributter og rader som designerer objekter (også kjent som entiteter)

## Referanser


## Eksterne lenker
*