Kapittel 1 · Forelesning 1 · Lærebok kap. 1

Introduksjon til databaser

Hva er en database, hvorfor trenger vi et DBMS, og hvilke deler av systemet sørger for at det hele fungerer — uten at applikasjonen må tenke på det.

01 · Helhetsbilde

Hva er en database

En database er en samling sammen­hengende data som beskriver en virksomhet — kunder og kontoer i en bank, studenter og emner ved et universitet, brukere og innlegg på et sosialt nettverk. Et databasebehandlingssystem (DBMS) er et programvarelag som lar mange brukere lagre, oppdatere og hente disse dataene samtidig, effektivt, og uten å miste dem.

Definisjon
Et DBMS er en samling sammenhengende data og et sett med programmer for å aksessere disse dataene. Hovedmålet er å gi en lagringsmekanisme som er både praktisk og effektiv.

Tre kjennetegn på data som hører hjemme i en database

  • Verdifulle — virksomheten kan ikke fungere uten dem.
  • Store — vesentlig større enn det som får plass i hovedminnet.
  • Delte — flere brukere og applikasjoner aksesserer dem samtidig.

Hvor møter du databaser?

BANK
Kontoer & lån
Saldoer, transaksjoner, kreditt­kort­oppgjør
EDU
Universitet
Studenter, emner, karakterer
WEB
Sosiale medier
Brukere, koblinger, innlegg
SHOP
Netthandel
Ordre, lager, anbefalinger
FLY
Reservasjoner
Setekart i sann tid
TLF
Telekom
Samtaler, fakturering, forbruk
GIS
Navigasjon
Veier, ruter, stedsdata
DOC
Dokument­arkiv
Patenter, artikler, forskning
To bruks­modi

OLTP (online transaction processing) — mange brukere, hver henter/oppdaterer små datamengder. Bank, butikk, registrering. Dette er hoved­fokus i dette kurset.

OLAP / data analytics — færre brukere, hver leser store datamengder for å oppdage mønstre og lage prediksjoner. Lånevurdering, anbefalings­motor, business intelligence. Dekkes kort i F10.

Sjekk forståelsen · Lett
En liten Excel-fil på din egen PC med fem rader om venners bursdager — er dette en database i kursets forstand?
Nei. Det er strukturerte data, men det er ikke verdifullt for en virksomhet, ikke stort, og ikke delt mellom mange brukere. En database er noe DBMS-en hjelper til med å håndtere — samtidighet, integritet, recovery — og en regneark­fil trenger ingenting av dette.
02 · Motivasjon

Hvorfor ikke bare bruke filer

Før relasjons­databasenes inntog ble bedrifter drevet av hjemme­snekrede fil­basert systemer: Hvert program leste og skrev sine egne filer i sitt eget format. Det fungerer for små problemer. Det havarerer i stor skala — av seks bestemte grunner.

1. Redundans og inkonsistens

Samme student lagres både i musikk-instituttets fil og i matematikk-instituttets fil. Endrer hun adresse, oppdateres bare den ene. Nå er adressen feil — i én av filene.

2. Vanskelig dataaksess

«Finn alle studenter i postnummer 7491 som har tatt over 60 studiepoeng» — finnes det ikke et program for, så må noen skrive ett. Hvert nytt spørsmål krever ny kode.

3. Dataisolering

Data er spredt over filer i ulike formater. Å samle dem i én rapport krever mye lim-kode.

4. Integritets­problemer

Regelen «konto­saldoen kan ikke gå under null» må kodes inn i hvert eneste program som rører saldoen. Glemmer ett program det, brytes regelen.

5. Atomicity-problemer

Pengeoverføring er to skritt: trekk fra A, legg til B. Hvis maskinen krasjer mellom dem, er pengene borte. Et fil­system har ingen «alt-eller-ingenting».

6. Samtidighets­anomalier

To kasserere trekker fra samme konto samtidig. Begge leser saldoen først, regner uavhengig, og overskriver hverandre. Pengene «forsvinner». Se simulator under.

7. Sikkerhets­problemer

Ikke alle skal se alt. I et fil-system er tilgangs­kontroll ad hoc og lett å glemme. DBMS-en sentraliserer det.

Lost update — en konkret race condition

Konto A har 10 000 kr. To kasserere skal samtidig trekke fra: kasserer T₁ skal ta 500 kr, T₂ skal ta 100 kr. Riktig svar er 9 400 kr. Klikk gjennom for å se hva som faktisk kan skje.

Kasserer T₁ — trekker 500 kr
venter…
KONTO A
10 000
Kasserer T₂ — trekker 100 kr
venter…
// Klikk knappene over i den rekkefølgen du vil. Prøv f.eks. T₁ les → T₂ les → T₁ skriv → T₂ skriv.
Lærdom

Begge kasserererne tror de har gjort jobben riktig. Men siden T₂ leste saldoen før T₁ rakk å skrive, baserer T₂ seg på en utdatert verdi. Bankens 500 kr forsvinner i tynn luft. DBMS-en løser dette med transaksjoner og låser (Kap. 8).

Sjekk forståelsen · Middels
I race condition-eksempelet over — hvilket av filsystem-problemene fra lista løser DBMS-en når den hindrer dette?
Samtidighets­anomalier (lost update). DBMS-en bruker concurrency control — typisk to-fase låsing — for å sikre at to transaksjoner som leser og skriver samme data, ikke kan flette operasjonene sine slik at en oppdatering går tapt.
Sjekk forståelsen · Lett
Hvorfor er atomicity umulig å sikre i et naivt filsystem-basert oppsett?
Et filsystem garanterer ikke at flere relaterte skrivinger enten alle slår igjennom eller ingen gjør det. Hvis maskinen krasjer mellom skriving til fil A og fil B, kan halve operasjonen ha lykkes. DBMS-en løser dette ved å logge intensjoner i en WAL (Kap. 8) og spille inn / rulle tilbake ved oppstart etter krasj.
03 · Konseptuell ramme

Hva er en datamodell

En datamodell er et begreps­apparat for å beskrive data, sammenhengene mellom dem, og hvilke regler som må gjelde. Modellen gir oss et språk å snakke om data i, uavhengig av lagrings­detaljer.

Relasjonsmodellen — tabeller med navngitte kolonner

Edgar Codd, 1970. Data lagres som relasjoner (tabeller) med faste kolonner. Hver rad er én oppføring. Sammenhenger uttrykkes ved at en kolonne i én tabell refererer til en kolonne i en annen.

instructor                        department
+-------+------------+----------+ +-----------+----------+--------+
| ID    | name       | dept     | | dept      | building | budget |
+-------+------------+----------+ +-----------+----------+--------+
| 22222 | Einstein   | Physics  | | Physics   | Watson   |  70000 |
| 76766 | Crick      | Biology  | | Biology   | Watson   |  90000 |
| 10101 | Srinivasan | Comp.Sci.| | Comp.Sci. | Taylor   | 100000 |
+-------+------------+----------+ +-----------+----------+--------+

Dominerende modell i dag. Hele Del 1 av kurset handler om denne. Detaljer: Kap. 2.

ER-modellen — bokser, romber, linjer

Brukes til design, ikke til lagring. Entiteter er ting (Student, Emne), relasjoner er sammenhenger (Student tar Emne). Tegnes som diagram, oversettes deretter til tabeller. Detaljer: Kap. 4.

  ┌──────────┐         ┌────────┐         ┌──────┐
  │ Student  │────◇────│  tar   │────◇────│ Emne │
  └──────────┘         └────────┘         └──────┘

Semi-strukturerte data — JSON, XML

Hver post kan ha sitt eget sett med attributter. Bra for løs struktur, vanskelig for konsistente spørringer. Eksempel:

{ "id": 22222, "name": "Einstein", "dept": "Physics" }
{ "id": 76766, "name": "Crick",
  "dept": "Biology", "office": "Watson 305",
  "publications": ["dna-1953", "..."] }

Objekt-basert

Inspirert av OOP. Klasser, arv, metoder lagret i databasen. I dag stort sett integrert som «object-relational» utvidelser av relasjons­databaser snarere enn som egen modell.

Sjekk forståelsen · Lett
Hva er hoved­forskjellen mellom relasjons­modellen og en semi-strukturert modell som JSON?
I relasjons­modellen har alle rader i en tabell samme sett attributter — strukturen er fast og deklarert i skjemaet. I semi-strukturerte modeller kan hver post ha sitt eget sett attributter. Det gir fleksibilitet, men gjør spørringer og integritets­sjekker vanskeligere.
04 · Tre nivåer

Lag av abstraksjon

Et DBMS skjuler implementasjons­detaljer. Bruker som kjører en SQL-spørring trenger ikke vite at radene ligger som komprimerte byte i 8 KB-blokker på en SSD, eller at det finnes en B+-tre-indeks som gjør oppslaget raskt. Denne separasjonen organiseres i tre lag.

View

Visningsnivå — hva brukeren får se

Skreddersydd delmengde av databasen. Sekretæren ser ikke lønninger; lønnings­avdelingen ser ikke karakterer. Flere visninger over samme logiske skjema.

Logisk

Logisk nivå — hva som lagres og hvordan det henger sammen

Tabeller, kolonner, fremmednøkler, integritets­krav. Programmerer­nes hverdag. SQL opererer her. DBA-en designer dette nivået.

Fysisk

Fysisk nivå — hvordan det virkelig ligger på disk

Heap-filer, blokk­størrelser, indekser, kompresjon, plassering på SSD/HDD. Skjult bak det logiske skjemaet.

Sentralt begrep

Fysisk dataindependence — hvis du bytter ut en heap-fil med en B+-tre-organisert fil for å gjøre range-spørringer raskere, skal ingenting på det logiske nivået trenge å endres. Applikasjonen merker det ikke (utover at den blir raskere).

Sjekk forståelsen · Middels
Du legger til en B+-tre-indeks på instructor.dept_name. Hvilket lag endres, og hvilke applikasjoner må skrives om?
Bare det fysiske nivået endres. Det logiske skjemaet (tabellene, kolonnene, integritets­kravene) er det samme, og dermed trenger ingen applikasjon å skrives om. Optimizer­en merker indeksen og bruker den hvor den hjelper. Dette er presist det physical data independence kjøper oss.
05 · Statisk vs. dynamisk

Skjema og instans

Skjemaet er designet — strukturen, typene, reglene. Det er som type­deklarasjonene i et program. Instansen er innholdet i øyeblikket — det som ligger i tabellene akkurat nå. Den endres for hver INSERT, UPDATE, DELETE; skjemaet endres knapt.

Skjema (sjelden endret)
CREATE TABLE instructor (
  ID        CHAR(5)        PRIMARY KEY,
  name      VARCHAR(20)    NOT NULL,
  dept_name VARCHAR(20),
  salary    NUMERIC(8, 2)
);
Instans kl. 12:00
22222  Einstein    Physics    95000
12121  Wu          Finance    90000
10101  Srinivasan  Comp.Sci.  65000
...
Instans kl. 12:01 (etter en INSERT)
22222  Einstein    Physics    95000
12121  Wu          Finance    90000
10101  Srinivasan  Comp.Sci.  65000
99999  Hopper      Comp.Sci.  88000   ← ny
...

Analogi: I et Java-program er class Instructor { ... } skjemaet, og den faktiske List<Instructor> i minnet er instansen — samme kode, ulik tilstand fra øyeblikk til øyeblikk.

Sjekk forståelsen · Lett
Du legger til en ny rad i instructor. Hva endres — skjemaet, instansen, eller begge?
Bare instansen. Skjemaet ville bare endret seg om du f.eks. hadde lagt til en ny kolonne via ALTER TABLE.
06 · DDL og DML

Database­språk

SQL er to språk i ett. DDL (Data Definition Language) brukes til å definere skjemaet — CREATE, ALTER, DROP. DML (Data Manipulation Language) brukes til å lese og endre data — SELECT, INSERT, UPDATE, DELETE.

DDL — definere strukturen

CREATE TABLE department (
  dept_name VARCHAR(20) PRIMARY KEY,
  building  VARCHAR(15),
  budget    NUMERIC(12, 2) CHECK (budget >= 0)
);

ALTER TABLE instructor
  ADD CONSTRAINT fk_dept
  FOREIGN KEY (dept_name) REFERENCES department(dept_name);

DDL-utdata legges i data dictionary — en intern tabell med metadata om alle tabeller, kolonner, og constraints. DBMS-en konsulterer denne før hver eneste spørring.

DML — manipulere innholdet

SELECT instructor.name
FROM   instructor
WHERE  instructor.dept_name = 'History';

Resultatet er en ny tabell med én kolonne (name) og radene til alle historikere. SQL er deklarativt: vi sier hva vi vil ha, ikke hvordan den skal hentes. Optimizer­en velger plan.

Deklarativ vs. prosedurell

Prosedurelt: «Åpne fila, gå til posisjon 0, les 1024 byte, finn kolonne dept, sammenlign med 'History', skriv ut name, gjenta…». Brukeren forteller hvordan.

Deklarativt (SQL): «Gi meg navnet på instruktørene i historie». Brukeren forteller hva. DBMS-en velger den effektive planen — og kan velge en annen plan i morgen, hvis dataene har endret seg.

Integritets­krav som DDL kan uttrykke

  • Domene­krav — kolonnen er NUMERIC(8,2), kan ikke inneholde tekst.
  • Referansiell integritetinstructor.dept_name må finnes i department.dept_name.
  • Autorisasjon — hvem får read, insert, update, delete?
Sjekk forståelsen · Middels
Hvorfor er en deklarativ DML som SQL bedre enn et prosedurelt bibliotek av C-funksjoner for de fleste applikasjoner?
To grunner: (1) Optimizing — siden brukeren bare sier hva, kan DBMS-en velge en effektiv plan basert på indekser, statistikk, og blokk­layout. Brukeren slipper å vite om disse. (2) Fysisk uavhengighet — endrer fysisk lagring seg, eller blir det lagt til en indeks, fortsetter samme SQL å virke uten kode­endring. Et prosedurelt API er låst til implementasjonen.
07 · Transaksjons­garantier

Fire bokstaver, fire garantier

En transaksjon er en logisk arbeidsenhet — én eller flere SQL-setninger som hører sammen. DBMS-en garanterer fire egenskaper for enhver transaksjon. Klikk en bokstav for detaljer.

A
Atomicity
C
Consistency
I
Isolation
D
Durability

Atomicity — alt eller ingenting

Hver transaksjon er udelelig. Enten utføres alle skritt, eller ingen. Hvis maskinen krasjer halvveis, ryddes det halv­utførte vekk under recovery.

Eksempel: pengeoverføring fra A til B er to skritt — trekk fra A, legg til B. Krasjer maskinen mellom dem, ruller atomicity tilbake debiteringen.

Recovery-manager (Kap. 8) sørger for atomicity og durability ved å skrive en logg-post for hver endring før selve datasiden flushes. Concurrency-control-manager sørger for isolation ved bruk av låser eller multiversioning.

Sjekk forståelsen · Middels
To brukere registrerer seg samtidig på det siste ledige seminar­emnet. Hvilken ACID-egenskap forhindrer at begge får plass når det egentlig bare er én ledig?
Isolation. Hver transaksjon skal kjøre som om den var alene. Med riktig isolering vil den ene transaksjonen «se» den andres oppdatering først etter at den er ferdig — slik at bare én av dem leser «1 ledig» og oppdaterer til «0», og den andre tvinges til å se «0» og avvises. (I den underliggende mekanismen handler det om låser eller serializability — men på papiret er det isolation.)
08 · DBMS-en innenfra

Database­motorens komponenter

Et DBMS er ikke ett program — det er et knippe samarbeidende moduler. Tre hoved­komponenter: query processor (forstår SQL), storage manager (snakker med disk), og transaction manager (lover ACID).

Naive brukere webskjema Application progr. JDBC / ODBC Sofistikerte SQL-konsoll DBA admin-verktøy QUERY PROCESSOR DDL-interpreter CREATE TABLE… DML-kompilator SQL → plan Query evaluation kjører plan STORAGE MANAGER Buffer manager RAM ↔ disk File manager heap, indekser Authorization & integrity CHECK / FK / GRANT TRANSACTION MGR Concurrency ctrl låser, MVCC Recovery manager WAL, ARIES DISK · datafiler · indekser · datakatalog · logg
DBMS-arkitektur. Klienter snakker med query processor; lagring og transaksjon­håndtering er skjult bak.
Query processor Storage manager Transaction manager

Hva gjør hver komponent?

  • DDL-interpreter — leser CREATE TABLE osv. og legger metadata i datakatalogen.
  • DML-kompilator — oversetter SQL til en kostnads­basert spørreplan; gjør spørrings­optimalisering.
  • Query evaluation engine — kjører planen; ber storage manager om data og lar transaction manager gjøre gjeldende.
  • Buffer manager — holder de heteste blokkene i RAM så de ikke må leses fra disk hver gang.
  • File manager — vet hvilke blokker som er ledige, hvor radene ligger, hvilke indekser som peker hvor.
  • Concurrency control — sørger for at parallelle transaksjoner ikke ødelegger for hverandre.
  • Recovery manager — skriver logg, ruller tilbake aborterte transaksjoner, gjenoppretter etter krasj.
Sjekk forståelsen · Middels
Når du kjører en SELECT i SQL, hvilken komponent gjør først om SQL-teksten til en plan?
DML-kompilatoren. Den parser SQL-en, sjekker mot datakatalogen at tabellene/kolonnene finnes, lager flere alternative spørreplaner (rekkefølge på joins, valg av indekser, valg av algoritmer) og velger den med lavest estimert kostnad. Først da overleverer den planen til query evaluation engine.
09 · Hvor sitter logikken

To-tier vs. tre-tier

Når en applikasjon snakker med databasen, kan den enten gjøre det direkte fra klienten (to-tier) eller gå via en applikasjonsserver (tre-tier). Moderne web- og mobil-applikasjoner er nesten alltid tre-tier.

To-tier

Klient (med SQL-kall)
↓ nettverk
DBMS
Enkelt. Brukes i interne verktøy. Sårbart for sikkerhet — klienten har DB-passord.

Tre-tier

Klient (front-end)
↓ HTTP
Applikasjonsserver
↓ JDBC/ODBC
DBMS
Forretnings­logikk samlet i midten. Bedre sikkerhet, ytelse og skalering. Standard for web og mobil.

Sentralisert, parallell, distribuert

  • Sentralisert — én maskin, eventuelt med flere CPU-er som deler minne.
  • Parallell — en klynge av maskiner samarbeider om en database for å håndtere store volum.
  • Distribuert — data ligger geografisk spredd på flere maskiner.
10 · Personae

Hvem bruker en database

Naive brukere
Studenten som registrerer seg
Møter databasen via et web­skjema. Vet ikke at det finnes en database der bak. Behovet: én oppgave skal gå glatt.
Application programmers
Utvikleren av studweb
Skriver applikasjonen som tar imot skjema-data, kaller SQL via JDBC eller ORM, og presenterer resultatet i HTML.
Sophisticated users
Analytikeren med ad-hoc-spørsmål
Skriver SQL eller bruker BI-verktøy direkte mot databasen. Ingen forhåndslagde grensesnitt.
DBA
Database­administratoren
Ansvar: skjemadesign, indekser, autorisering, backup, ytelses­overvåkning, oppgraderinger.
Sjekk forståelsen · Lett
Når en student logger inn i Inspera og leverer en oppgave, hvilken brukertype er hun?
Naiv bruker. Hun har ingen anelse om hvilken tabell som oppdateres når hun klikker «Lever», og det er hele poenget — view-laget skjuler alt det.
11 · Et halvt århundre

Database­systemenes historie

Det er nyttig å se hvor relasjons­modellen kom fra — og hva som finnes ved siden av den i dag.

1950–60-tall
Magnetbånd og sekvensielle data
Lønn ble kjørt ved at to bånd ble lest synkront og et tredje skrevet. Ingen direkte oppslag — alt sekvensielt. Punche­kort var fortsatt viktig.
Sent 1960–70-tall
Harddisken endrer alt
Med disk kunne data nås direkte uavhengig av rekkefølge. Network- og hierarchical-modellene tillot lister og trær på disk — men programmereren måtte navigere strukturen for hånd.
1970
Codd publiserer relasjons­modellen
«A Relational Model for Large Shared Data Banks». Én datatype (tabellen), én operasjon-familie (relasjons­algebra). Programmereren slipper å vite hvordan dataene er lagret. Codd får senere Turing-prisen.
1970–80-tall
System R og Ingres beviser ytelsen
IBMs System R og Berkeleys Ingres gjør relasjons­ideen praktisk. SQL kommer fra System R. Tidlig 80-tall: relasjons­databaser har kjørt forbi nettverk- og hierarkiske systemer i ytelse — og de er mye enklere å bruke. Oracle, DB2 og Ingres-produktet etableres.
1990-tall
Webben kommer
Databaser må håndtere langt høyere transaksjons­volum, 24/7-tilgjengelighet, web-grensesnitt. Beslutningsstøtte og data warehousing blomstrer. PostgreSQL og MySQL blir populære som åpen kildekode.
2000-tall
Semi-strukturert & NoSQL
XML, JSON, sosiale grafer presser nye datatyper inn i databasene. NoSQL-bevegelsen — Cassandra, MongoDB, Redis — bytter bort konsistens­garantier mot skalerbarhet. Column-stores og map-reduce dukker opp for analytics.
2010-tall
Skyen og NewSQL
Bedrifter outsourcer database­drift til skyen. NoSQL-systemene legger gradvis tilbake konsistens­garantier; relasjons­databaser legger til skalerings­funksjoner. «NewSQL» (Spanner, CockroachDB) tilbyr SQL og ACID over et distribuert system.
I dag
Mer SQL enn noen gang
SQL er fremdeles bransjens lingua franca for strukturert data. Vector-databaser (LLM-embeddings), tids­serie-databaser og graf-databaser dekker spesielle nisjer. Men når en startup spør «hvilken database», er svaret nesten alltid PostgreSQL.

Test deg selv

Et siste sett spørsmål som dekker hele kapittelet — fra terminologi til hvor­for-spørsmål.

Spørsmål 1 · Lett
Definer kort: hva er forskjellen mellom en database og et DBMS?
Databasen er dataene — de lagrede fakta om en virksomhet. DBMS-en er programvaren som lar brukerne lagre, hente og oppdatere disse dataene effektivt og konsistent. PostgreSQL er et DBMS; tabellene i din applikasjon utgjør én database.
Spørsmål 2 · Lett
Hva står ACID for?
Atomicity — alt-eller-ingenting. Consistency — bevarer integritets­krav. Isolation — som om transaksjonen var alene. Durability — etter commit overlever data krasj.
Spørsmål 3 · Middels
Forklar fysisk dataindependence med ett eksempel.
Fysisk dataindependence er evnen til å endre den fysiske lagringen uten å måtte endre det logiske skjemaet eller applikasjonene. Eksempel: Du legger til en B+-tre-indeks på order(customer_id). Tabellens skjema er uendret, eksisterende SQL fortsetter å virke uten endring; optimizer­en bruker bare indeksen når den hjelper. Applikasjonen merker ingenting — annet enn at noen spørringer går raskere.
Spørsmål 4 · Middels
Nevn tre konkrete problemer med å oppbevare bedrifts­data i flat-fil-systemer som DBMS-er løser.
Velg blant: data­redundans (samme info i flere filer som kommer ut av synk), vanskelig ad-hoc-aksess (krever ny kode for hvert nytt spørsmål), integritets­problemer (regler må kodes i hvert program), atomicity-problemer (krasj kan etterlate halv­utførte multi-fil-oppdateringer), samtidighets­problemer (tap-av-oppdatering når flere skriver samtidig), sikkerhets­problemer (vanskelig å begrense tilgang granular).
Spørsmål 5 · Middels
Hvorfor er SQL deklarativt et viktig prinsipp — sett fra et yte- og vedlikeholds­perspektiv?
Fordi DBMS-en, ikke applikasjonen, velger hvordan spørringen kjøres. Det betyr (1) optimaliseren kan velge en bedre plan i morgen — f.eks. bruke en ny indeks som DBA-en la til — uten at applikasjonen røres, og (2) den fysiske lagringen kan endres (B-trær, hashing, kompresjon, partisjonering) uten at SQL-en skrives om. Dette gir både ytelse og vedlikeholdbarhet.
Spørsmål 6 · Middels
Hva er forskjellen mellom skjema og instans? Gi en analogi til et programmerings­språk.
Skjema = struktur/blueprint (tabeller, kolonner, typer, integritets­krav). Instans = innholdet i øyeblikket (de faktiske radene). Analogt med Java: class Person { String name; int age; } er skjemaet; den konkrete List<Person> i minnet med Ada og Linus er instansen. Skjemaet endres sjelden, instansen endres for hver INSERT/UPDATE/DELETE.
Spørsmål 7 · Vanskelig
To brukere kjører samtidig en transaksjon som leser kontosaldoen, regner ny verdi og skriver tilbake. Begge transaksjonene har egen «logikk» som er korrekt isolert sett. Hvorfor er konsistens­kravet «sum av saldoer skal være uforandret etter en intern overføring» likevel ikke nok til å garantere riktig resultat? Hvilken ACID-egenskap kommer i tillegg?
Consistency krever bare at hver enkelt transaksjon, kjørt alene, transformerer en gyldig databasetilstand til en annen gyldig tilstand. Hvis to transaksjoner flettes vilkårlig, kan begge oppfylle sin egen konsistens­regel og likevel etterlate en sum som er feil. Det er Isolation som garanterer at parallelle transaksjoner gir samme resultat som om de hadde kjørt etter hverandre — derfor er C og I gjensidig nødvendige, ikke overlappende.
Spørsmål 8 · Vanskelig
Hva er forskjellen mellom to-tier og tre-tier-arkitektur, og hvorfor velger moderne webapplikasjoner tre-tier?
To-tier: klienten snakker direkte med databasen via SQL. Forretnings­logikken ligger i klienten. Tre-tier: klienten snakker med en applikasjons­server (HTTP), som så snakker med databasen. Forretnings­logikken er sentralisert i app-serveren. Tre-tier vinner fordi (a) klienten trenger ingen database­legitimasjon, (b) man kan ha mange klient­typer (web, mobil, …) mot samme logikk, (c) lettere å skalere ved å legge til flere app-servere bak en lastbalanserer, (d) bedre sikkerhet og auditabilitet.
Spørsmål 9 · Middels
Hvilken DBMS-komponent er ansvarlig for at en commit-et transaksjon overlever en strøm­svikt?
Recovery manager. Den skriver en logg-post (Write-Ahead Logging) for hver endring til en seig logg på disk før dataselve sidene flushes. Etter krasj leser den loggen og spiller om/ruller tilbake slik at alle commit-ede transaksjoner vises i databasen, og alle uavsluttede ryddes vekk. Dette dekkes i Kap. 8.
Spørsmål 10 · Vanskelig
Hvorfor oppsto NoSQL-systemer i 2000-tallet, og hva tilbød de som tradisjonelle SQL-databaser ikke gjorde?
Web-applikasjoner med eksplosive data­volum (sosiale medier, e-handel) hadde to behov tradisjonelle relasjons­databaser strevde med: (1) horisontal skalering over mange maskiner, og (2) fleksible, ofte semi-strukturerte data. NoSQL-systemer (Cassandra, MongoDB, …) byttet bort streng konsistens (CAP-teoremet — valgte tilgjengelighet og partisjons­toleranse over konsistens) og deklarative spørringer mot enklere skalering, eventual consistency, og skjema-flexibilitet. I dag har mange NoSQL-systemer beveget seg tilbake mot sterke garantier, og NewSQL-systemer prøver å gi det beste av begge.

Når du synes disse spørsmålene sitter, er du klar for Kapittel 2 — Relasjonsmodellen.