Tilbake
6.1
Introduksjon til databaser

6.1 Introduksjon til databaser

Lær hva databaser er, forskjellen mellom ulike typer, og grunnleggende begreper.

50 min
7 oppgaver
DatabaseDBMSTabellPrimærnøkkel
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 7 oppgaver

Introduksjon til databaser

Tenk deg at du skal holde oversikt over alle elevene på en skole. Du trenger navn, fødselsdato, klasse, adresse, telefonnummer og karakterer for hundrevis av elever. Du kunne lagret alt i et regneark, men hva skjer når rektor vil vite hvilke elever i 2A som har mer enn 4 i snitt? Eller når en elev bytter klasse og du må oppdatere informasjonen overalt? Med et enkelt regneark blir dette fort uoversiktlig og feilutsatt.

Databaser løser akkurat dette problemet. En database er en organisert samling av data som er strukturert slik at den kan søkes i, oppdateres og administreres effektivt. Databaser er ryggraden i nesten all moderne programvare. Når du logger inn på Instagram, søker på Google, bestiller en vare på Komplett.no eller sjekker bussruter på Ruter, kommuniserer applikasjonen med en database i bakgrunnen.

I dette kapittelet skal du lære hva databaser er, hvorfor de er så viktige, og bli kjent med de grunnleggende begrepene du trenger for å jobbe med dem.

Database

En database er en organisert samling av strukturerte data som lagres elektronisk i et datasystem. Dataene er organisert slik at de enkelt kan opprettes, leses, oppdateres og slettes – dette kalles CRUD-operasjoner (Create, Read, Update, Delete). En database administreres av et databasehåndteringssystem (DBMS – Database Management System), som er programvaren som håndterer all kommunikasjon mellom brukere/applikasjoner og de fysiske dataene.

Før databaser ble vanlige, lagret organisasjoner data i vanlige filer – tekstfiler, regneark eller papirbaserte arkiver. Denne tilnærmingen hadde mange problemer:

Redundans og inkonsistens: Samme data ble ofte lagret flere steder. Hvis en elev byttet adresse, måtte endringen gjøres på mange forskjellige steder, og det var lett å glemme noen.

Vanskelig tilgang: For å finne spesifikk informasjon måtte man ofte gå gjennom store mengder data manuelt eller skrive spesialtilpassede programmer.

Sikkerhet: Det var vanskelig å kontrollere hvem som hadde tilgang til hvilke data. En lærer burde for eksempel se karakterene til sine elever, men ikke lønnsopplysninger til andre ansatte.

Samtidig tilgang: Når flere personer prøvde å oppdatere de samme dataene samtidig, kunne data bli ødelagt eller gå tapt.

Databaser løser alle disse problemene gjennom:

- Strukturert lagring – Data organiseres i tabeller med klare regler for format og sammenhenger
- Effektive søk – SQL gjør det enkelt å finne nøyaktig den informasjonen du trenger
- Dataintegritet – Regler (constraints) sikrer at dataene alltid er gyldige og konsistente
- Tilgangskontroll – DBMS-et styrer hvem som kan lese, skrive og endre data
- Transaksjonshåndtering – Flere brukere kan jobbe med databasen samtidig uten å ødelegge for hverandre
- Backup og gjenoppretting – Data kan sikkerhetskopieres og gjenopprettes hvis noe går galt

Det finnes mange typer databaser, men de to viktigste kategoriene er relasjonsdatabaser og ikke-relasjonelle databaser (NoSQL).

Relasjonsdatabaser (SQL)

Relasjonsdatabaser organiserer data i tabeller med rader og kolonner, der tabellene kan kobles sammen gjennom relasjoner. Dette er den mest brukte databasetypen og har vært standarden siden 1970-tallet. Relasjonsdatabaser bruker SQL (Structured Query Language) for å håndtere data.

Eksempler på relasjonsdatabaser:
- MySQL – Verdens mest brukte åpen kildekode-database, brukes av WordPress, Facebook og YouTube
- PostgreSQL – Avansert åpen kildekode-database kjent for pålitelighet og standardoverholdelse
- SQLite – Lettvekts-database som lagres i én enkelt fil, brukes i mobilapper og nettlesere
- Oracle Database – Kommersiell enterprise-database brukt av store organisasjoner
- Microsoft SQL Server – Microsofts relasjonsdatabase for Windows-baserte systemer

Ikke-relasjonelle databaser (NoSQL)

NoSQL-databaser bruker andre strukturer enn tabeller for å lagre data. De er ofte bedre egnet for ustrukturerte eller semi-strukturerte data, og for systemer som trenger svært høy ytelse eller skalerbarhet.

De vanligste typene NoSQL-databaser er:
- Dokumentdatabaser (f.eks. MongoDB) – Lagrer data som JSON-lignende dokumenter
- Nøkkel-verdi-databaser (f.eks. Redis) – Lagrer data som enkle nøkkel-verdi-par, ekstremt raske
- Grafdatabaser (f.eks. Neo4j) – Optimalisert for data med mange relasjoner, som sosiale nettverk
- Kolonnebaserte databaser (f.eks. Cassandra) – Lagrer data i kolonner i stedet for rader

I dette kurset fokuserer vi på relasjonsdatabaser og SQL, fordi dette er den mest grunnleggende og utbredte teknologien.

Databasehåndteringssystem (DBMS)

Et databasehåndteringssystem (DBMS – Database Management System) er programvare som fungerer som et mellomledd mellom brukere, applikasjoner og den fysiske databasen. DBMS-et håndterer opprettelse av databaser, lagring og henting av data, sikkerhetskontroll, backup, samtidig tilgang fra flere brukere, og optimalisering av spørringer. Brukere og programmer kommuniserer med DBMS-et via SQL, og DBMS-et tar seg av de tekniske detaljene for hvordan dataene faktisk lagres på disken.

I en relasjonsdatabase er tabellen den grunnleggende byggesteinen. En tabell representerer én type informasjon – for eksempel elever, lærere, fag eller karakterer.

Hver tabell har:
- Kolonner (felt/fields) som definerer hvilke egenskaper som lagres
- Rader (poster/records) som inneholder de faktiske dataene

La oss se på et konkret eksempel. Tenk deg en database for en skole. Vi lager en tabell som heter elever:

elev_idfornavnetternavnfodselsdatoklasse
1EmmaHansen2008-03-1510A
2OliverJohansen2008-07-2210A
3NoraOlsen2008-01-1010B
4JakobLarsen2008-11-0310B
5SofieBerg2008-05-2810A

Her har tabellen fem kolonner (elev_id, fornavn, etternavn, fodselsdato, klasse) og fem rader (én for hver elev). Kolonnen elev_id er primærnøkkelen – den unikt identifiserer hver elev.

Datatyper


Hver kolonne har en definert datatype som bestemmer hva slags verdier den kan inneholde:
DatatypeBeskrivelseEksempel
INTEGERHeltall1, 42, -7
TEXT / VARCHARTekst'Emma', 'Hansen'
REAL / FLOATDesimaltall3.14, 4.5
DATEDato'2008-03-15'
BOOLEANSant/usantTRUE, FALSE

Valg av riktig datatype er viktig fordi det sikrer at bare gyldige data lagres i databasen. Du kan for eksempel ikke lagre teksten «hei» i en INTEGER-kolonne.

Primærnøkkel (Primary Key)

En primærnøkkel er en kolonne (eller kombinasjon av kolonner) som unikt identifiserer hver rad i en tabell. Primærnøkkelen har to ufravikelige krav: den kan ikke inneholde duplikater (to rader kan ikke ha samme verdi), og den kan ikke inneholde NULL-verdier (hver rad må ha en verdi). Den vanligste løsningen er å bruke et automatisk økende heltall (auto-increment) som primærnøkkel, ofte kalt id. Primærnøkkelen er fundamental for å koble tabeller sammen gjennom fremmednøkler.

✏️Eksempel: En enkel skoledatabase

La oss tenke oss en enkel database for en skole med tre tabeller:

Tabell: elever

elevidfornavnetternavnklasse
1EmmaHansen10A
2OliverJohansen10A
3NoraOlsen10B

Tabell: fag
fagidfagnavnlærer
1MatematikkKari Nordli
2NorskPer Haugen
3NaturfagLise Vik

Tabell: karakterer
karakteridelevidfag_idkaraktertermin
1115H2024
2124H2024
3213H2024
4336H2024

Legg merke til hvordan tabellen karakterer bruker elev_id og fag_id for å koble karakterer til riktig elev og fag. Disse kolonnene kalles fremmednøkler fordi de refererer til primærnøkler i andre tabeller. Denne strukturen unngår at vi må gjenta elevnavn og fagnavn for hver karakter – vi lagrer informasjonen bare én gang og peker til den.

Alt arbeid med databaser kan kokes ned til fire grunnleggende operasjoner, kjent som CRUD:

- Create (opprette) – Legge til nye data i databasen
- Read (lese) – Hente ut og vise data fra databasen
- Update (oppdatere) – Endre eksisterende data i databasen
- Delete (slette) – Fjerne data fra databasen

I SQL utføres disse operasjonene med følgende kommandoer:

CRUD-operasjonSQL-kommandoEksempel
CreateINSERT INTOLegg til en ny elev
ReadSELECTHent alle elever i klasse 10A
UpdateUPDATEEndre en elevs klasse
DeleteDELETEFjern en elev som har sluttet

Vi skal lære alle disse kommandoene i detalj i kapittel 6.3.

Databaser har en fascinerende historie som henger tett sammen med utviklingen av datamaskiner:

1960-tallet: De første databasesystemene ble utviklet. IBM laget IMS (Information Management System) for NASAs Apollo-program. Disse tidlige systemene brukte hierarkiske eller nettverksbaserte modeller som var kompliserte å jobbe med.

1970: Edgar F. Codd, en forsker ved IBM, publiserte artikkelen «A Relational Model of Data for Large Shared Data Banks». Denne artikkelen la grunnlaget for relasjonsdatabaser ved å foreslå at data burde organiseres i tabeller med relasjoner mellom dem. Codds ideer var revolusjonerende, men IBM var treg med å implementere dem.

1974: IBM begynte å utvikle System R, den første implementasjonen av en relasjonsdatabase, og skapte spørrespråket SEQUEL (senere omdøpt til SQL).

1979: Oracle lanserte den første kommersielle relasjonsdatabasen.

1995: MySQL ble lansert som åpen kildekode og ble raskt den mest populære databasen for webapplikasjoner.

2000-tallet: NoSQL-databaser som MongoDB og Redis ble utviklet for å håndtere de enorme datamengdene som oppsto med sosiale medier og stordata.

I dag er relasjonsdatabaser fortsatt den mest brukte typen, og SQL er et av de viktigste verktøyene enhver utvikler bør mestre.

📝Oppgave 6.1.1

Hva er en database?

📝Oppgave 6.1.2

Hva er en primærnøkkel i en databasetabell?

📝Oppgave 6.1.3

Hvilken av disse er IKKE en fordel med å bruke en database fremfor et vanlig regneark?

📝Oppgave 6.1.4

Hva står CRUD for i databasesammenheng?

📝Oppgave 6.1.5

Du skal lage en database for et skolebibliotek. Beskriv hvilke tabeller du ville opprettet, hvilke kolonner hver tabell ville hatt, og hva du ville valgt som primærnøkkel for hver tabell. Tenk også på hvordan tabellene henger sammen.

📝Oppgave 6.1.6

Hvilken påstand om SQLite er korrekt?

📝Oppgave 6.1.7

Forklar forskjellen mellom relasjonsdatabaser og NoSQL-databaser. Gi eksempler på situasjoner der hver type er best egnet, og nevn konkrete databasesystemer for begge kategoriene.

Oppsummering

I dette kapittelet har du lært:

- Database: organisert samling av strukturerte data.
- SQL vs. NoSQL: relasjons- mot ikke-relasjonelle databaser.
- DBMS: programvare som håndterer databasen.
- Tabell, rad og kolonne: grunnstrukturen i relasjonsdatabaser.
- Primaernoekkel: unik identifikator for hver rad.

Noekkelbegreper


BegrepForklaring
DatabaseOrganisert samling av strukturerte data
DBMSDatabasehaandteringssystem
PrimaernoekkelKolonne som unikt identifiserer hver rad

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.