Databaser: ein oversikt.

1 Februar 2015

Ein database er ein måte å organisera data på slik at det blir effektiv og sikkert å lagra, henta fram, endre og sletta data. Ein database består av to deler: eit program som kallast eit databasehåndteringssystem (DBMS), og sjøve databasen, dvs data. DBMSen organiserer dataene og styrer all lesing og skriving til databasen. Kommunikasjonen med databasen går via databasehåndteringssystemet, og til dette brukes et såkalt spørrespråk.

Det finnes ulike sorter databasesystemer. Metoden ein bruker for å organisere data kalles en datamodell. Det fins fleire typar datamodellar. Før var mange av typen nettverksdatabase / hierarkisk database, mens no er det som regel relasjonsdatabaser, som vi skal jobba med, eller såkalte objektrelasjonelle databaser som også er basert på relasjonsmodellen.

Les meir: Wikipedia databaser

Relasjonsdatabaser

Ein relasjonsdatabase er bygd på tabellar som er kobla saman med henvisninger, som vi kallar nøkler, mellom seg, relasjonar. Relasjoner blir brukt ma. for å hindre dobbeltlagring (redundans) av data. Vi skal sjå på et enkelt eksempel.

Anta at vi skal laga ein enkel biblioteksdatabase med oversikt over alle bøkene våre, og for kvar bok vil vi lagra opplysningar om forfattaren (kan vera alder, nasjonalitet osv). Då kan vi tenkja oss dette lagre i ein enkelt tabell slik:

Tittel Forfattar Diverse
Markens grøde Knut Hamsun fekk nobelprisen i litteratur i 1920
Sult Knut Hamsun fekk nobelprisen i litteratur i 1920
Min bortekamp Karl Ove Knausgård skriv alt for langt, har ikkje fått nobelprisen
Min omkamp Karl Ove Knausgård skriv alt for langt, har ikkje fått nobelprisen
Fandens ordbok Gunnar Øyro artig, men lite produktiv

Men vi ser fort at ein slik måte å lagra data på er ganske uhensiktsmessig. Vi ser at same data er lagra fleire gonger. Dette kallast dobbeltlagring eller redundans, og medfører for det første at dataene tar meir plass, og for det andre at det blir tyngre å vedlikehalda data, og større sjanse for inkonsistens. Hvis vi vil endra omtalen av herr Knausgård, så må vi gjera det for alle bøkene hans. Det er vanskeligare, og det kan fort bli feil. Derfor kan vi heller gjera det på denne måten:

Forfattar (tabell)

FNR Fnavn Enavn Diverse
1 Knut Hamsun fekk nobelprisen i litteratur i 1920
2 Karl Ove Knausgård skriv alt for langt, har ikkje fått nobelprisen
3 Gunnar Øyro artig, men lite produktiv

Bok (tabell)

BNR Tittel Forfattarnr
1 Markens grøde 1
2 Sult 1
3 Min bortekamp 2
4 Min omkamp 2
5 Fandens ordbok 3

Her har vi skilt ut forfattarane i ein egen tabell og kobla den til boktabellen ved hjelp av forfattarnummer. Vi seier at vi har oppretta ein relasjon mellom dei. Vi kan navngi denne relasjonen ved å sei at Forfattar har skrive bok. Relasjonen er altså "har skrive". I boktabellen har vi eit felt (dvs kolonne) Forfattarnr som unikt identifiserer ein post (rad). Dette kallast for primærnøkkel. Når vi kjenner primærnøkkelen (FNR) kan vi finna riktig forfattar. I boktabellen er feltet BNR som er primærnøkkel. Men denne tabellen har også eit felt Forfattarnr som peikar til FNR i Forfattartabellen. Vi seier at Forfattarnr er fremmednøkkel i boktabellen.

REF: Hva er en relasjonsdatabase

SQL

For å laga og bruka ein relasjonsdatabase bruker vi spørrespråket SQL som står for Structured Query Language. Det kan brukast for å

For å laga tabellane forfattar og bok kan vi bruka SQL-kommandoen CREATE. Når det er gjort må tabellane fyllast. Det kan gjerast via ein kommando som heiter INSERT. Først då er vi klare for å søkja etter data. Det kan gjerast via kommandoen SELECT. Hvis vi for eksempel vil ha ut alle forfattarar som heiter Knut til fornavn i vår lille leikedatabase, så kan vi skriva:

SELECT Enavn FROM Forfattar WHERE Fnavn = 'Knut'

Forhåpentlig får vi då ut "Hamsun" som svar.

REF:
Wikipedia SQL
w3schools: SQL Tutorial

Datamodellering

Men før vi begynner å konstruera dei tabellane vi treng i databasen er det vanlig å laga ein datamodell som viser samanhengen mellom data. Dette gjer vi vha av ER-diagram (Entitet - Relasjon). Slik kan det sjå ut for den enkle biblioteksdatabasen:

bibliotek

Her kan vi merka oss at vi har to entitetar (som svarar til dei to tabellane) forfattar og bok, og mellom dei har vi tegna relasjonen "har skrive". Dette er ein såkalt ein-til-mange relasjon. Vi tolkar dette som at ein forfattar kan skriva mange bøker, men ei bok har bare ein forfattar. Av og til er det ein eintydig samanheng mellom to entitetar. Då snakkar vi om ein ein-til-ein relasjon.

I eksempelet over har vi gløymt antologiane. Ein antologi er ei bok sett saman av tekstar frå fleire forfattarar. Anta at vi fekk inn følgande bok i biblioteket vårt: "Pizzasult" av Knut Hamsun & Gunnar Øyro. No har vi plutselig både bøker som har fleire forfattarar og forfattar som har fleire bøker. Dette kallar vi ein mange til mange-relasjon. Dette kunne vi tegna slik:

bibliotek

Merk at når vi skal realisera ein slik kobling blir vi nødt til å introdusera ein tabell imellom forfattar og bok. Meir om dette seinare.

mySQL

Det fins mange forskjellige relasjonsdatabaser som SQL Server, Access, Oracle, Sybase, DB2 og MySQL. Vi skal bruka den siste. MySQL er populært for webapplikasjonar som Wikipedia, og ein av hovedgrunnane er at dei fleste programmeringsspråk kan kobla til MySQL-databaser, som bl.a.C, C++, Java, og ikkje minst PHP, som vi skal bruka. Til dette skal vi bruka pakken WAMP (Apache, MySQL og PHP for Windows).

REF:
Wikipedia mySQL (engelsk)
Last ned mySQL

LENKER

Introduksjon til relasjonsdatabaser, datamodellering og ER-modellen