Entitet (informatikk)

I datamodellering er en **entitet** et klart definert objekt hvis informasjon skal lagres eller behandles. Objektetet som modelleres kan være materielt eller immateriell, konkret eller abstrakt. Noen eksempler kan være et kjøretøy, en konto, en person eller en tilstand.

## Entitetstype
Entiteter er *individuelt* identifiserbare objekter, personer osv. Disse kan tildeles individuelle egenskaper (som for eksempel farge = rød, fødselsdato = 28. august 1749, høyde = 2962 meter, temperatur = -4,5 celsius). *Entitetstyper* (noen ganger kalt entitetsklasser) kan utledes ved å skrive (gjenkjenne de samme attributtene/karakteristikkene til entiteter); flere personer blir for eksempel "kunder". De enkelte kundene regnes som *entiteter*, altså *konkrete manifestasjoner* (instanser) og har en identitet (for eksempel naturlig nøkkel).

Mengden entiteter av en entitetstype kalles entitetsmengden - som (avhengig av utvalget) kan inkludere alle, bare visse eller ingen entiteter. Entiteter som elementer i en entitetsmengde kjennetegnes ved deres egenskaper (attributtverdier). Hver entitet av en entitetstype identifiseres fra de andre entitetene av samme entitetstype gjennom en unik verdi av en identifiserende attributt eller kombinasjon av attributter (for eksempel rammenummeret for en individuell bil eller kjøretøyets registreringsnummer for en individuell registrering). Denne attributten eller attributtkombinasjonen kalles for kort for identifikasjon, identifikator eller ID.

En entitet kan være i relasjon med andre entiteter så vel som med seg selv. For eksempel: Person X  kjøretøy Y, person A  person B, hvor  = betydning/navn på relasjonen.

Typifiseringen av entiteter og mulige relasjoner mellom entiteter (til relasjonstyper) skjer gjennom abstraksjon. Dette skillet mellom instanser og typer er nødvendig for å komme frem til en datamodell. I modellen blir entitetene entitetstyper, og relasjonene deres blir relasjonstyper, som kan representeres grafisk i et entitet-relasjon-diagram. I dagligtale brukes av og til det kortere ordet «entitet» i stedet for det korrekte uttrykket «entitetstype», selv om konteksten vanligvis viser om det menes en objektinstans (entitet) eller dens typifisering (entitetstype).

For eksempel for å lage en relasjonsdatabase implementeres en entitetstype som en tabell i databasen, basert på datamodellen. Hver tabellrad i denne tabellen (også kalt en oppføring eller tuppel) vil representere en entitet, mens identifikatoren blir primærnøkkelen, og relasjoner blir fremmednøkkelen.

## Generalisering/spesialisering
Hvis attributter og/eller relasjonstyper som er identiske for samme entitet forekommer i ulike entitetstyper, kan disse administreres og oppsummeres under en ny entitetstype, som omtales som generalisering. Den resulterende entitetstypen inneholder de vanlige attributtene. De opprinnelige entitetstypene forblir; de arver attributtene til den nye entitetstypen. Dermed kan for eksempel entitetstypene *kunde* og *leverandør* slås sammen til den generaliserte entitetstypen *forretningspartner*, hvor for eksempel navn, adresse, bankinformasjon, med mer kan brukes både for *kunder* og *leverandører*. Det omvendte (at attributter for en entitetstype bare vises i visse situasjoner/roller) kan også resultere i en ny entitetstype (for eksempel *privatkunde*) og omtales som spesialisering.

Generalisering, spesialisering og arv av attributtene tilsvarer den grunnleggende ideen om objektorientert programmering .

## Eksempler
Noen eksempler på entitetstyper er:

* Varer, for eksempel med EAN som identifiserende attributt
* Bok, med identifiserende attributt ISBN og beskrivende attributt *lagermengde*
* Bok, med identifiserende attributt ISBN pluss kopinummer (for et bibliotek)
* Konto, med identifiserende attributt kontonummer
* Kunde, med identifiserende attributt kundenummer

## Sammenligning av grunnleggende begreper

## Forskjellen mellom entitet og objekt
Entitetsbegrepet er knyttet til objektbegrepet i objektorientert programmering. Imidlertid har begrepene ulik betydning i sine respektive konseptuelle verdener, datamodellering og objektorientert programmering. De korresponderer i hovedsak med hverandre, men er verken identiske eller synonyme:

* En entitet er ganske enkelt en datarelatert konstruksjon som imøtekommer/gir de spesifikke verdikarakteristikkene for attributtene og relasjonene som er definert i den respektive entitetstypen, for eksempel "15. mars 1994" som "fødselsdato" for en bestemt kunde. Enkelt sagt tilsvarer en entitet til syvende og sist en datamengde - hvorved "entiteter" ikke bare opprettes for formålet med programvareutvikling, men for eksempel kan "bare" beskrive terminologien til et selskap.
* I motsetning til dette har et objektorientert objekt også en rekke av sine egne dynamiske ''funksjoner''*, [[Dynamisk operator|operasjoner]] og [[Dynamisk metode|metoder]]*. Dette betyr at en dynamisk objekttype kan defineres som en programmatisk representasjon av entitetstypen *pluss* tilhørende redigeringsfunksjoner. Videre refererer metodene til objektorientert programmering ofte ikke bare til entitetstyper fra en datamodell, men også for eksempel til objekter av brukergrensesnitt (GUI) så vel som til "objekter" som vises i tekstbehandlingsapplikasjoner eller dataspill.

Begge begrepene (entitet og objekt) har én ting til felles: De kan identifiseres, struktureres, avledes til entitets-/objekttyper og dokumenteres - vanligvis som en del av programvareutviklingsprosesser. Spesifikasjonene blir teknisk implementert i dataprogrammene gjennom deklarasjoner og datarelaterte behandlingskommandoer, og eksisterer til sist som innholdet i datasett. Den metodisk mer detaljerte objektorienterte modelleringen er ofte basert på klassisk datamodellering med dens entiteter, attributter og relasjoner.

## Se også
* Informasjonssystem

## Referanser