Lær hva databaser er, forskjellen mellom ulike typer, og grunnleggende begreper.
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.
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.
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_id | fornavn | etternavn | fodselsdato | klasse |
|---|---|---|---|---|
| 1 | Emma | Hansen | 2008-03-15 | 10A |
| 2 | Oliver | Johansen | 2008-07-22 | 10A |
| 3 | Nora | Olsen | 2008-01-10 | 10B |
| 4 | Jakob | Larsen | 2008-11-03 | 10B |
| 5 | Sofie | Berg | 2008-05-28 | 10A |
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:
| Datatype | Beskrivelse | Eksempel |
|---|---|---|
INTEGER | Heltall | 1, 42, -7 |
TEXT / VARCHAR | Tekst | 'Emma', 'Hansen' |
REAL / FLOAT | Desimaltall | 3.14, 4.5 |
DATE | Dato | '2008-03-15' |
BOOLEAN | Sant/usant | TRUE, 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.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.
La oss tenke oss en enkel database for en skole med tre tabeller:
Tabell: elever
| elevid | fornavn | etternavn | klasse |
|---|---|---|---|
| 1 | Emma | Hansen | 10A |
| 2 | Oliver | Johansen | 10A |
| 3 | Nora | Olsen | 10B |
Tabell: fag
| fagid | fagnavn | lærer |
|---|---|---|
| 1 | Matematikk | Kari Nordli |
| 2 | Norsk | Per Haugen |
| 3 | Naturfag | Lise Vik |
Tabell: karakterer
| karakterid | elevid | fag_id | karakter | termin |
|---|---|---|---|---|
| 1 | 1 | 1 | 5 | H2024 |
| 2 | 1 | 2 | 4 | H2024 |
| 3 | 2 | 1 | 3 | H2024 |
| 4 | 3 | 3 | 6 | H2024 |
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-operasjon | SQL-kommando | Eksempel |
|---|---|---|
| Create | INSERT INTO | Legg til en ny elev |
| Read | SELECT | Hent alle elever i klasse 10A |
| Update | UPDATE | Endre en elevs klasse |
| Delete | DELETE | Fjern en elev som har sluttet |
Vi skal lære alle disse kommandoene i detalj i kapittel 6.3.
I dette kurset bruker vi SQLite som databasesystem. SQLite er en lettvekts relasjonsdatabase som lagrer hele databasen i én enkelt fil. Den krever ingen separat serverinstallasjon og er perfekt for læring og mindre prosjekter. SQLite er innebygd i Python (via modulen sqlite3), i alle nettlesere, og i de fleste mobiltelefoner. Til tross for sin enkelthet støtter SQLite standard SQL og brukes i produksjon av selskaper som Apple, Google og Mozilla.
For å eksperimentere med SQL kan du bruke:
- DB Browser for SQLite – Et gratis grafisk program for å opprette, redigere og spørre SQLite-databaser (sqlitebrowser.org)
- SQLite Online – Kjør SQL direkte i nettleseren uten installasjon (sqliteonline.com)
- Python med sqlite3 – Bruk Python-programmering til å jobbe med databaser programmatisk
- phpMyAdmin – Webbasert verktøy for MySQL-databaser
Vi anbefaler å starte med DB Browser for SQLite eller en online-editor slik at du kan fokusere på å lære SQL uten å bekymre deg for oppsett.
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.
Hva er en database?
Hva er en primærnøkkel i en databasetabell?
Hvilken av disse er IKKE en fordel med å bruke en database fremfor et vanlig regneark?
Hva står CRUD for i databasesammenheng?
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.
Hvilken påstand om SQLite er korrekt?
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
| Begrep | Forklaring |
|---|---|
| Database | Organisert samling av strukturerte data |
| DBMS | Databasehaandteringssystem |
| Primaernoekkel | Kolonne 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.