Kardinalitet (datamodellering)

Fra Wikipedia, den frie encyklopedi

Innen datamodellering viser kardinaliteten til en skjøt (join) til den numeriske relasjonen mellom radene i en tabell og radene i en annen tabell. Noen vanlige kardinaliteter inkluderer en-til-en (ofte redundant), en-til-mange (svært vanlig), og mange-til-mange (ikke uvanlig, men krever en logikk). Mange-til-en er mindre vanlig.

Kardinalitet brukes for eksempel til å bestemme hvordan man skal knytte sammen faktatabeller og dimensjonstabeller.

  • En en-til-mange-kardinalitet brukes for eksempel noen ganger for å knytte én rad i en dimensjonstabell (som inneholder relasjonsinformasjon om dimensjonen) til en kolonne i en faktatabell (som inneholder for eksempel måleverdier). En-til-mange kardinalitet er vanlig i mange tilfeller.
  • En mange-til-mange-kardinalitet kan medføre tvetydigheter, og bør i noen tilfeller unngås.[klargjør] Er også ganske vanlig.
  • En en-til-en-kardinalitet er redundant, og tilsier i mange tilfeller at dataene istedet kunne vært samlet i én tabell.

Retning på kryssfilter (cross-filter direction)[rediger | rediger kilde]

Data kan filtreres på en eller begge sider av en relasjon, og dette kan visualiseres med en pil i datadigrammer.

Med et enveis kryssfilter (single cross-filter direction) kan bare én tabell i relasjonen brukes for å filtrere dataene, og pilen i visualiseringen vil peke i til-argumentets retning. Retningen av pilen peker ofte i retning av faktatabellen i en relasjon, hvilket for eksempel vil være mot midten i en stjernemodell. På denne måten vil filtreringen skje i den tabellen som (ofte) har flere verdier (altså faktatabellen).

Med et toveis kryssfilter (bi-directional cross filtering) kan begge av tabellene i en relasjon brukes for å filtrere den andre. Dette kan imidlertid medføre dårligere ytelse, tvetydigheter, overrepresentasjon eller uventede resultater, og bør ikke implementeres uten at man har full forståelse for alle implikasjoner dette medfører. På grunn av dette er mange-til-mange-relasjoner og/eller toveisrelasjoner kompliserte.

Eksempler[rediger | rediger kilde]

For eksempel kan en database i en elektronisk pasientjournal inneholde følgende tabeller:

  • Tabellen lege med informasjon om legene.
  • Tabellen pasient med informasjon om de som behandles.
  • Tabellen møter med oppføringer for hvert sykehusbesøk.

Det eksisterer noen naturlige relasjoner mellom disse entitetene, som for eksempel et møte mellom mange leger. Det er også en mange-til-mange-relasjon mellom oppføringene i lege og oppføringene i pasient, fordi leger har mange pasienter og pasienter kan ha mange leger. Det er en en-til-mange-relasjon mellom oppføringer i pasient og oppføringer møter, fordi pasienter kan ha mange møter og hvert møte involverer bare en pasient.

En en-til-en-relasjon brukes som regel for å dele en tabell i to slik at informasjonen skal kunne gis på en mer konsis og forståelig måte. I et sykehuseksempel kan en slik relasjon brukes for å skille en enkelt leges faglige informasjon fra administrative detaljer.

Innen datamodellering grupperes samlinger av dataelementer i tabeller som inneholder grupper av datafeltnavn kalt "databaseattributter", og tabellene er lenket sammen ved hjelp av nøkkelfelter. En primærnøkkel brukes for identifisere en oppføring, og alle relasjoner i en database skal ha en og bare en primærnøkkel. For eksempe kan feltet legens_etternavn kanskje bli tildelt som en primærnøkkel for tabellen lege, hvor alle etternavn er sortert alfabetisk i henhold til de tre første bokstavene i fornavnet.[klargjør] En tabell kan også ha en fremmednøkkel som indikerer hvilket felt som er lenket til primærnøkkelen i en annen tabell.

En kompleks datamodell kan inneholde hundrevis av tabeller med relasjoner seg imellom, og informatikeren Edgar F. Codd laget og publiserte en systematisk metode for å dekomponere og organisere relasjonsdatabaser. Codd sine steg for å organisere databasetabeller og deres nøkler kalles databasenormalisering, og er ment å unngå visse skjulte designfeil for databaser (sletteanomalier eller oppdateringsanomalier). I praksis medfører normalisering ofte at tabeller brytes opp i et større antall av mindre tabeller.

Datamodellering er kritisk fordi data lenket med nøkler etterhvert blir nødvendig for å hente ut data raskt når datamengden vokser. Dersom en datamodell er dårlig utformet kan man få uakseptabel responstid hos sluttbrukerne allerede ved en million oppføringer, og datamodellering anses derfor som en av nøkkelferdighetene som trengs hos en moderne programvareutvikler.

Teknikker for databasemodellering[rediger | rediger kilde]

En entitet–relasjonsmodell er et eksempel på en teknikk for å fremstille entitet-relasonsdiagrammer (ERD-diagrammer) som kan anvendes for å fange opp informasjon om entitetstyper, relasjoner og kardinalitet i en datamodell. Eksempelvis kan en kråkefot (crow's foot) i et slikt diagram vise en en-til-mange-relasjon. Alternativt representerer en enkelt linje en en-til-en-relasjon.

Tilnærminger til modellering for applikasjonsprogrammering[rediger | rediger kilde]

I det objektorienterte programmeringsparadigmet (som er relatert til design av databasestrukturer) kan UML-klassediagrammer brukes til objektmodellering. I så fall blir relasjonene mellom objektene modellerte ved hjelp av UML-assosiasjoner, og multiplisitet brukes på disse assosiasjonene for å betegne kardinalitet. Noen eksempler er:

Relasjon Eksempel Venstre Høyre Tolkning
En-til-en person ← → fødselsattest 1 1 En person må ha sin egen fødselsattest
En-til-en (valgfritt på den ene siden) person ← → førerkort 1 0..1 eller ? En person kan ha førerkort
Mange-til-en person ← → fødested 1..* eller + 1 Mange mennesker kan bli født på samme sted
Mange-til-mange (valgfritt på begge sider) person ← → bok 0..* eller * 0..* eller * En person kan eie bøker
En-til-mange bestilling ← → enkelt element i handlekurven 1 1..* eller + En ordre inneholder minst ett element
Mange-til-mange kurs ← → student 1..* eller + 1..* eller + Studentene tar ulike kurs

Se også[rediger | rediger kilde]

Eksterne lenker[rediger | rediger kilde]