Hva er en relasjonsdatabase
En relasjonsdatabase er en database som følger relasjonsmodellen. Begrepet ble definert av Edgar Codd (1923-2003) som jobbet for IBM.
Relasjonsdatabaser kan defineres som et sett av relasjoner eller en database bygget i et RDBMS (relational database management system). I MS SQL Server
representeres relasjoner i form av tabeller der data er presentert i rader og kolonner. I en relasjonsdatabase vil all data i en kolonne ha samme datatype.
Litt mer konkret kan vi i MS SQL dele data i flere tabeller for å ivareta integritet og lettere kunne vedlikeholde og skalere databasen. En relasjonsdatabase
vil også resultere i at data tar mindre plass fordi man deler data på tvers av rader i kolonnen.
Et enkelt eksempel
Du skal sette opp en database over studenter på en skole. Du skal lagre hva hver enkelt student heter og hvilken klasse han eller hun går i.
I en helt flat database uten relasjoner ville dette sett slik ut:
Dette er en modell som fungerer helt fint til en helt enkel oversikt. Utfordringene kommer når man i tillegg skal hekte på hvilken lærer som er klasseforstander
i hver enkelt klasse og kanskje litt mer data om både læreren og klassen. For å legge inn dette i datamodellen over må vi legge til en rekke kolonner for
lagring av disse opplysningene:
Med disse tilleggsdataene ser vi tydelig at de samme dataene gjentar seg selv ofte og dersom en lærer endrer feks email adresse må man oppdatere
store mengder med data hvis det er mange elever. Med et slikt eksempel ville det vært fornuftig å lage en relasjonsdatabase der man har flere
tabeller som ivaretar deler av informasjonen som skal lagres.
I dette tilfellet burde man dele databasen opp i 3 tabeller der den første tabellen inneholder alle elevene, den andre inneholder klassene og den tredje
lagrer alle lærerne. Deretter lager vi en relasjon mellom de tabellene som skal relateres med hverandre. Det vil si at vi må fortelle databasen at
en elev er tilknyttet en klasse (tabellen Studenter får en relasjon til tabellen Klasser) og at en klasse relateres til en lærer (tabellen klasser relateres
til tabellen lærere).
I illustrasjonen over er det laget 3 tabeller (Studenter, Klasser og Lærere). Tabellene inneholder kolonner kun for selve dataene, men for å relatere
de til hverandre trenger vi kolonner som ivaretar data om selve relasjonen. For å gjøre dette trenger vi en kolonne som gir alle rader i tabellene en
unik verdi. (to studenter kan ha samme navn). Denne unike verdien legges i den kolonnen som relateres til riktig tabell. For at vi skal være sikre på at
denne kolonnen har en unik verdi kan vi sette den som primærnøkkel. Da ivaretas integriteten og vi slipper duplikater.
Nå som alle tabellene har en primærnøkkel kan vi lage de kolonnene som forteller hvilke tabeller som er reltaert vha en fremmednøkkel. (En fremmednøkkel
er en kolonne som ivaretar en relasjon mot en primærnøkkel)
I illustrasjonen er det lagt til en kolonne KlasseId i Student tabellen som forteller hvilken klasse hver student tilhører. På samme måte
er det lagt til en LærerId i klasse tabellen som forteller hvilken lærer som hører til hvilken klasse.
Vi kan da gjøre en SQL-spørring for å ta ut de samme dataene som vist i illustrasjon nummer 2:
Dataene i kolonnene Lærere og Email hentes nå fra tabellen Lærere, Klasse og Klasserom hentes fra tabellen
Klasser og navnet på hver enkelt student hentes fra tabellen Studenter og alt presenteres samlet vha en spørring i databasen.
Hvis en lærer nå skulle bytte email adresse kan denne endres ett sted i tabellen Lærere, så vil alle data oppdateres med riktig data. Relasjonene
mellom disse tabellene er såkalte en til mange relasjoner der en kolonne kan linkes til en hvilken som helst rad i en annen tabell.
Dette er et meget enkelt eksempel på en relasjonsdatabase med 3 tabeller, men prinsippe er det samme i alle relasjonsdatabaser.