Relasjonsmodellen



Relasjonsmodellen

av Ole Petter den 7. januar 2020

Sist oppdatert: 19 februar, 2020 kl 15:01

Contents

Om relasjonsmodellen

Relasjonsmodellen ble opprettet av Edgar Frank Codd i 1970, og består av tre deler

  1. Datastruktur
  2. Integritetsregler
  3. Relasjonsalgebra

I SQL blir data lagret som relasjoner, slik at de er enklere å vedlikeholde enn hvis dataene var fysisk avhengige av hverandre.

1 Datastruktur

Representasjonsuavhengighet

Datastruktur handler om relasjoner mellom ulike tabeller. Databasetabeller har en mer abstrakt lagringsstruktur hvor man unngår den tette koblingen mellom datastruktur og programkode.

Et viktig begrep i databaser er representasjonsuavhengighet. Det betyr at forskjellige tabeller har ulike navn og ulike kolonner, og rekkefølgen av kolonnene og radene har ikke noen betydning.

Rekkefølgen av rader og kolonner skal ikke påvirke spørringen, og selv om dataene kan være lagret i tilfeldig rekkefølge, er det viktig at hver rad i en tabell har en unik kolonne som identifiserer raden. Dette kan være en primærnøkkel, som for eksempel bruker fødselsnummer for å skille personer, eller registreringsnummer for å skille mellom ulike kjøretøy.

Relasjoner

Relasjonsmodellen i databaser bygger på mengdelære. Mengdelære er matematisk teori om mengder, som kan defineres som en representasjon av samlinger av abstrakte objekter eller elementer.

Disse elementene kan være tall eller tekststrenger.

2 Integritetsregler

Integritetsreglene i relasjonsmodellen dreier seg om kontroll med primærnøkler og fremmednøkler.

Funksjonelle avhengigheter

En relasjon med attributter A1, A2, …., An består av en mengde tupler (a1, a2,….,an) hvor hver verdi ai er hentet fra domenet for tilhørende attributt Ai. Relasjoner kan visualiseres som tabeller, der hvert tuppel svarer til en rad.

En funksjon f fra A til B, skrevet f:A–>B, er en relasjon over A og B der vi legger på et tilleggskrav: Hvis (a1, b1) og (a2,b2) er to par med i f og a1=a2, så er b1=b2.

Med andre ord så er det for en bestemt verdi a med i A, nøyaktig en verdi b med i B, slik at (a,b) er med i f. Man skriver da gjerne f(a)=b.

Primærnøkler og entitetsintegritet

Hvis man har en relasjon R(A1, … , An), en samling attributter K snitt A1,…,An er en supernøkkel for R hvis vi for hvert attributt Ai har at K->Ai.

Dette vil si at K bestemmer alle andre attributter i R.

En kandidatnøkkel for R er en minimal supernøkkel for R.

Hvis K er en kandidatnøkkel for R, vil altså ingen ekte delmengde L snitt K være en supernøkkel for R.

PNr er en kandidatnøkkel i relasjonen Prosjekt. Alle kombinasjoner av atrributter som inneholder PNr, for eksempel PNr og Budsjett, vil være en supernøkkel. I noen relasjoner kan det være flere kandidatnøkler, for eksempel:

Student(FNr, SNr, Fornavn, Etternavn, Epost)

Her vil da FNr og SNr være kandidatnøkler. I disse tilfellene velger vi en av dem som primærnøkkel. Enhver relasjon skal ha nøyaktig en primærnøkkel, og primærnøkkelen skal ikke inneholde nullmerker. Den skal heller ikke inneholde to like verdier. Disse to kravene kalles entitetsintegritet, og det er opp til DBHS å sjekke at de er oppfylt til enhver tid.

Entitetsintegritet må sjekkes i to situasjoner:

1 Når ny rad settes inn
2 Når en primærnøkkelverdi blir oppdatert

Fremmednøkler og referanseintegritet

To attributter er unionskompatible dersom de har samme domene. En fremmednøkkel er et attributt A som er unionskompatibel med en primærnøkkel B, slik at alle verdier i A også er verdier i B. Verdiene i A er altså en delmengde av verdiene i B. Dette kravet kalles referanseintegritet.

Fremmednøkler kan være sammensatte, og kan også inneholde nullmerker. For sammensatte fremmednøkler må et tuppel enten inneholde bare skikkelige verdier for attributtene som inngår i fremmednøkkelen, eller bare nullmerker.

Fremmednøkler har ofte samme navn som tilhørende primærnøkkel, men det er ikke noe krav. Det er også mulig at en fremmednøkkel og primærnøkkelen den peker på er attributter i samme tabell. Regeranseintegritet blir sjekket i følgende situasjoner:

  • Innsetting av nye verdier i fremmednøkkelen
  • Sletting av verdier i tilhørende primærnøkkel

Tabell Ansatt

AnsNrFornavn
1Per
2Lise
3Anders
4Johanne

Tabell Arbeid

PNrAnsNrAntTimer
10120
10212
1115
1217
1243
13135
13217
14130
14415
15120
16125
16442

Tabell Prosjekt

PNrBudsjettStartDatoSluttDatoLeder
10750002015-12-72015-15-71
11 75000 2015-12-7 2015-15-7 1
12 75000 2015-12-7 2015-15-7 2
13 75000 2015-12-7 2015-15-7 5
14 75000 2015-12-7 2015-15-7 3
15 75000 2015-12-7 2015-15-7 2
16 75000 2015-12-7 2015-15-7 4

3 Relasjonsalgebra

Relasjonsalgebra er et formelt matematisk språk som brukes for å beskrive matematiske relasjoner og til å lage nye relasjoner mellom de eksisterende relasjonene. Disse relasjonene er bygd opp fra et lite antall operatorer.

På samme måte som man konstruerer nye tabeller ved utvalgsspørringer i SQL, så produserer disse operatorene nye relasjoner fra eksisterende relasjoner. De er på en måte egne programmer som tar relasjoner som inndata, og returnerer relasjoner som utdata.

Ved å kombinere operatorer og navngitte relasjoner kan man lage nye kompliserte uttrykk, slik som man kan bygge talluttrykk fra aritmetiske operatorer og tall.

Seleksjon

Seleksjon – ved hjelp av en betingelse kan man velge ut såkalte tupler fra en relasjon. Et eksempel hvor man får oversikt over alle varer med en pris over 1000 kr:

σPris>1000(Varer)

En tuppel er et matematisk begrep som omhandler ordnede lister over en sekvens av elementer.

Ved hjelp av matematiske setninger skrives uttrykk i relasjonsalgebra. Symbolet σ er betegnelsen for operatoren i uttrykket, med betingelsen pris>1000. Relasjonen pris er inndata til seleksjonen, som er skrevet i parentes som et argument.

Mengdeoperatorer, union, snitt og differanse

Relasjoner er mengder, og relasjonsalgebra inneholder mengdeoperatorer for union, snitt og differanse. De kan defineres som nedenfor, gitt at R og S er to unionskompatible relasjoner.

  • Union: R union S = { t | t ε R v t ε S }
  • Snitt: R snitt S = { t | t ε R Λ t ε S }
  • Differanse: R – S = { t | t ε R Λ t /ε S }

Alle disse operatorene er binære, altså kombinerer de to relasjoner til en ny relasjon. Selv om to relasjoner bruker forskjellige navn på attributtene, kan de likevel være unionskompatible. For alle tre operatorer vil resultatet i så fall arve attributtnavn fra den venstre relasjonen.

SQL har mengdeoperatorer UNION, INTERSECT og EXCEPT for å håndtere disse.

Kryssprodukter og koblinger

Kryssprodukt danner alle mulige kombinasjoner av tupler fra to relasjoner. Kontorer x Ansatte blir for eksempel et kryssprodukt. Og hvis man har 4 kontorer og 10 ansatte blir kryssproduktet 4 * 10 = 40.

En likekobling med hensyn på et par av koblingsattributter inneholder delmengden av tilsvarende kryssprodukt med samme verdi for koblingsattributtene.

I en likekobling vil de to koblingsattributtene ofte ha samme navn, og vi ønsker som regel å kun ta med ett av attributtene i sluttresultatet. Slike likekoblinger kalles naturlige koblinger.

Legg igjen en kommentar