Page 1

Læreboken tar utgangspunkt i bruk av tabeller og databasespråket SQL. Etter at denne «grunnmuren» er på plass, tar boken for seg livsløpet til et databasesystem, fra planlegging og design til implementering og daglig drift. SQL er et standardisert språk som kan brukes mot en rekke systemer, og stoffet er derfor i all hovedsak verktøyuavhengig. Læreboken inneholder likevel kommentarer og tips for bruk av følgende verktøy: MySQL, PostgreSQL, Oracle, Access og SQL Server.

• SQL: utvalgsspørringer, definisjon av tabeller og views, innsetting, sletting, oppdatering og brukeradministrasjon • relasjonsmodellen: det teoretiske grunnlaget for relasjonsdatabaser • datamodellering med ER og UML • normalisering • filer og indekser, søkealgoritmer og spørreoptimalisering • databaseadministrasjon: transaksjoner, brukeradministrasjon, sikkerhetskopiering og gjenoppbygging, overvåking og optimalisering, skydatabaser • webapplikasjoner med databaseprogrammering i PHP • lagrede rutiner og triggere • semistrukturerte data med XML og JSON • objektrelasjonelle databaser og brukerdefinerte datatyper • NoSQL-databaser med vektlegging av dokumentdatabaser og grafdatabaser

Læreboken har en egen nettside med oppgaver og annet tilleggsmateriale: www.nettressurser.no/databasesystemer BJØRN KRISTOFFERSEN er cand.scient. i informatikk fra Universitetet i Oslo.

Han er ansatt som førstelektor i informatikk ved Universitetet i Sørøst-Norge, hvor han underviser i databaser, programmering og web. ISBN 978-82-15-03251-1

5. UTGAVE

Det er foretatt en rekke endringer i 5. utgave av boken. Blant annet er det mer stoff om NoSQL-databaser, databasedesign med ER og UML har fått mer plass, og noen avanserte aggregeringsteknikker i SQL er lagt til.

Databasesystemer

Emner som presenteres, er blant annet

BJØRN KRISTOFFERSEN

Databasesystemer er skrevet for innføringskurs i databaser ved universiteter og høgskoler og gir en grundig innføring i relasjonsdatabaser, SQL, datamodellering og databaseteori. Boken forutsetter ikke forkunnskaper i informatikk.

BJØRN KRISTOFFERSEN

Databasesystemer 5. UTGAVE


Bjørn Kristoffersen

Databasesystemer 5. utgave

Universitetsforlaget


© Universitetsforlaget 2020 1. utgave 2007 2. utgave 2009 3. utgave 2012 4. utgave 2016

ISBN 978-82-15-03251-1 Materialet i denne publikasjonen er omfattet av åndsverklovens bestemmelser. Uten særskilt avtale med rettighetshaverne er enhver eksemplarfremstilling og tilgjengeliggjøring bare tillatt i den utstrekning det er hjemlet i lov eller tillatt gjennom avtale med Kopinor, interesseorgan for rettighetshavere til åndsverk. Utnyttelse i strid med lov eller avtale kan medføre erstatningsansvar og inndragning, og kan straffes med bøter eller fengsel. Henvendelser om denne utgivelsen kan rettes til: Universitetsforlaget AS Postboks 508 Sentrum 0105 Oslo www.universitetsforlaget.no Omslag: Cecilie Mohr Sats: Bjørn Kristoffersen Trykk og innbinding: 07 Media – 07.no Boken er satt med: Latin Modern 11 pkt. (brødtekst) Papir: 90 g Arctic Matt


Kapitler I 1 2 3 4 5 6

SQL og relasjonsdatabaser Introduksjon Spørringer mot én tabell Lage og bruke tabeller Spørringer mot flere tabeller Avanserte spørringer Relasjonsmodellen

II 7 8 9

Databasedesign Datamodellering med ER Fra modell til database Filer og indekser

III 10 11

Databaser i produksjon Transaksjoner Databaseadministrasjon

IV 12 13

Databaseapplikasjoner Webapplikasjoner Lagrede programmer

V 14 15

Utvalgte temaer XML og JSON Via objekter til NoSQL


Innhold

Kapitler Forord

I SQL og relasjonsdatabaser 1 Introduksjon 1.1 Databaser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Tabeller og SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2 Bruksområder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.3 Databasebrukere, verktøy og applikasjoner . . . . . . . . . . 1.1.4 Databaseobjekter og metadata . . . . . . . . . . . . . . . . . . . . . . 1.1.5 Livsløpet til et databasesystem . . . . . . . . . . . . . . . . . . . . . . 1.1.6 Personvern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Databasehåndteringssystemer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Oppgaver og arkitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Bruk av hurtigminne og disk . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 Effektiv utførelse av SQL-spørringer . . . . . . . . . . . . . . . . . 1.2.4 Transaksjoner og samtidighetskontroll . . . . . . . . . . . . . . . 1.2.5 DBHS-familiene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Digital representasjon av data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Data og informasjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Tekstlig og binær representasjon av data . . . . . . . . . . . . . 1.3.3 Måleenheter for datamengder . . . . . . . . . . . . . . . . . . . . . . . 1.3.4 Bilder og video . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.5 Fysisk organisering av databasetabeller . . . . . . . . . . . . . .

i xv

1 3 3 3 5 7 8 9 12 13 13 15 16 17 17 18 18 19 20 21 22


iv

Innhold 1.4 1.5 1.6 1.7

Databaseprodukter og litteratur . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hobbyhuset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23 26 27 28

2 Spørringer mot én tabell 2.1 Databaser og SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Databasetabeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Behovet for spørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.3 SQL utvalgsspørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.4 Databasespråket SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Enkle utvalgsspørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Velge ut kolonner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Velge ut rader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Uttrykk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Store og små bokstaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Funksjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 Operatorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.4 Logiske operatorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.5 Operatorprioritet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.6 Uttrykk i SELECT-delen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.7 Intervallsøk og jokernotasjon . . . . . . . . . . . . . . . . . . . . . . . 2.4 Sortering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Gruppering og mengdefunksjoner . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Gruppebetingelser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 Teste funksjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8 Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31 32 32 34 34 35 37 37 39 40 41 42 43 44 45 46 48 50 52 55 57 57 58

3 Lage og bruke tabeller 3.1 Datatyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Tekstdatatyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Talldatatyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3 Andre datatyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Opprette nye tabeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Primærnøkler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Autonummerering av primærnøkler . . . . . . . . . . . . . . . . . 3.2.3 Nullmerker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4 Unike kolonner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.5 Standardverdier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61 62 63 64 64 66 67 71 72 74 74


Innhold

v

3.2.6 Fremmednøkler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.7 Massesletting og masseoppdatering . . . . . . . . . . . . . . . . . 3.2.8 Forretningsregler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jobbe med innholdet i tabeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Innsettingsspørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Slettespørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Oppdateringsspørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.4 Import, eksport og overføringsformater . . . . . . . . . . . . . . 3.3.5 Transaksjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mer om databasens struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Endre og slette tabeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 Databaser og databaseobjekter . . . . . . . . . . . . . . . . . . . . . . 3.4.3 SQL-skript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75 78 79 80 80 82 82 83 84 85 85 86 87 88 89

4 Spørringer mot flere tabeller 4.1 Hvorfor så mange tabeller? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Hobbyhuset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Kryssprodukt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Indre koblinger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 Likekoblinger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2 Syntaks for likekoblinger . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.3 Likekoblinger og fremmednøkler . . . . . . . . . . . . . . . . . . . . 4.4.4 Koble tre eller flere tabeller . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.5 Gruppering og likekoblinger . . . . . . . . . . . . . . . . . . . . . . . . 4.4.6 Egenkoblinger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.7 Generelle koblinger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Mengdeoperasjoner og ytre koblinger . . . . . . . . . . . . . . . . . . . . . . 4.5.1 Venstre og høyre ytre kobling . . . . . . . . . . . . . . . . . . . . . . . 4.5.2 Vanskeligheter med ytre koblinger . . . . . . . . . . . . . . . . . . 4.5.3 Union, snitt og differanse . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.4 Full ytre kobling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7 Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

93 94 95 96 98 98 100 100 102 102 103 105 106 106 107 108 109 110 111

5 Avanserte spørringer 5.1 Valguttrykk og nullmerker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Opprette og slette views . . . . . . . . . . . . . . . . . . . . . . . . . . . .

115 115 119 119

3.3

3.4

3.5 3.6


vi

Innhold 5.2.2 Bruk av views i problemløsing . . . . . . . . . . . . . . . . . . . . . . 5.2.3 Spørringer mot views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.4 Oppdaterbarhet av views . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.5 Views og navngitte parameterspørringer i Access . . . . . Delspørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Delspørringer i betingelser . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.2 Vekselvirkende delspørringer . . . . . . . . . . . . . . . . . . . . . . . 5.3.3 Operatorer for delspørringer . . . . . . . . . . . . . . . . . . . . . . . . 5.3.4 Delspørringer i SELECT-delen . . . . . . . . . . . . . . . . . . . . . . 5.3.5 Delspørringer i FROM-delen . . . . . . . . . . . . . . . . . . . . . . . 5.3.6 Delspørringer i INSERT, UPDATE og DELETE . . . . . . Gjensyn med aggregering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Gruppering med ROLLUP og CUBE . . . . . . . . . . . . . . . . 5.4.2 Krysstabellspørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Vindusfunksjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.4 Rangering og 10 på topp . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rekursjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Generere eksempeldata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

120 121 122 124 125 125 127 128 130 131 131 132 133 136 138 140 141 142 143 144

6 Relasjonsmodellen 6.1 Representasjonsuavhengighet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Relasjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Eksempel: prosjektarbeid . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Integritetsregler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3.1 Funksjonelle avhengigheter . . . . . . . . . . . . . . . . . . . . . . . . . 6.3.2 Primærnøkler og entitetsintegritet . . . . . . . . . . . . . . . . . . . 6.3.3 Fremmednøkler og referanseintegritet . . . . . . . . . . . . . . . 6.4 Relasjonsalgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1 Seleksjon og projeksjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.2 Mengdeoperatorene union, snitt og differanse . . . . . . . . 6.4.3 Kryssprodukter og koblinger . . . . . . . . . . . . . . . . . . . . . . . 6.4.4 Divisjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.5 Sammensatte uttrykk, tilordning og omnavning . . . . . . 6.4.6 Grunnleggende og avledbare operatorer . . . . . . . . . . . . . 6.5 Databasesystemer og relasjonsmodellen . . . . . . . . . . . . . . . . . . . . 6.5.1 Rekkefølge og repetisjoner i databasetabeller . . . . . . . . . 6.5.2 SQL og relasjonsalgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

149 150 153 158 158 159 160 161 161 162 163 164 165 166 167 168 168 168 169

5.3

5.4

5.5 5.6 5.7 5.8


Innhold 6.7

vii

Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

II Databasedesign

171

7 Datamodellering med ER 7.1 ER-diagrammer og databasetabeller . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Kravanalyse og faktainnsamling . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Entiteter og attributter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Forhold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Kardinalitet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.2 Roller og navn på forhold . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.3 Primærnøkler og ikke-identifiserende forhold . . . . . . . . 7.4.4 Svake entiteter og identifiserende forhold . . . . . . . . . . . . 7.4.5 Attributter til forhold og koblingsentiteter . . . . . . . . . . . 7.4.6 Forhold mellom 3 eller flere entiteter . . . . . . . . . . . . . . . . 7.5 Datamodellering med UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5.1 Klasser, attributter og assosiasjoner . . . . . . . . . . . . . . . . . . 7.5.2 Egenskaper til forhold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5.3 Aggregering og komposisjon . . . . . . . . . . . . . . . . . . . . . . . 7.5.4 Subtyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.6 Chen-notasjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.6.1 Entiteter, attributter og forhold . . . . . . . . . . . . . . . . . . . . . . 7.6.2 Ikke-atomære attributter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7 Faseinndeling og abstraksjonsnivåer . . . . . . . . . . . . . . . . . . . . . . . 7.8 Modelleringsmønstre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.1 Entitet eller attributt? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.2 Valg av identifikator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.3 Historikk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.4 Hode/linje-mønsteret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.5 Egenforhold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.6 Hierarkier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.7 Tid og rom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.8 Stjerneskjema i datavarehus . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.9 Modelleringsfeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.10 Sjekk datamodeller med eksempeldata . . . . . . . . . . . . . . 7.9 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.10 Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

173 174 176 177 179 180 183 184 184 187 188 189 189 190 191 192 194 194 195 197 198 199 200 201 202 203 204 205 205 206 208 209 210


viii

Innhold

8 Fra modell til database 8.1 Logisk databasedesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Entiteter og attributter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.2 En-til-mange forhold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.3 Svake entiteter og identifiserende forhold . . . . . . . . . . . . 8.1.4 Mange-til-mange forhold . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.5 En-til-en forhold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.6 Håndtere minimumskardinalitet i databasen . . . . . . . . . 8.1.7 Subtyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.8 Ikke-atomære attributter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.9 Eksempel: utleie av lagerrom . . . . . . . . . . . . . . . . . . . . . . . 8.2 Normalisering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1 Redundans og funksjonelle avhengigheter . . . . . . . . . . . 8.2.2 Problemer med dårlig design . . . . . . . . . . . . . . . . . . . . . . . 8.2.3 Dekomponere tabeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.4 1NF og verdilister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.5 2NF og partielle avhengigheter . . . . . . . . . . . . . . . . . . . . . . 8.2.6 3NF og transitive avhengigheter . . . . . . . . . . . . . . . . . . . . 8.2.7 Boyce-Codd NormalForm (BCNF) . . . . . . . . . . . . . . . . . . . 8.2.8 Sammenhengen mellom normalformene . . . . . . . . . . . . . 8.2.9 Forskjell på 3NF og BCNF . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.10 Denormalisering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.11 Normalisering utover BCNF . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Bruk av views i databasedesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.1 Views som forenkling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.2 Representasjonsuavhengighet . . . . . . . . . . . . . . . . . . . . . . . 8.3.3 ANSI/SPARC 3-skjema-arkitektur . . . . . . . . . . . . . . . . . . . 8.4 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5 Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

217 218 218 219 220 222 224 226 227 230 231 235 235 236 238 240 241 242 242 243 245 246 247 248 249 250 251 252 253

9 Filer og indekser 9.1 Lagringsmedier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1.1 Egenskaper ved lagringsmedier . . . . . . . . . . . . . . . . . . . . . 9.1.2 Harddisk og SSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1.3 Overføring mellom minne og disk . . . . . . . . . . . . . . . . . . . 9.1.4 RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1.5 Utvikling innen lagringsløsninger . . . . . . . . . . . . . . . . . . . 9.1.6 En logisk modell av lagringsmedier . . . . . . . . . . . . . . . . . 9.2 Filstrukturer og søkemetoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.1 Representasjon av poster . . . . . . . . . . . . . . . . . . . . . . . . . . .

259 260 260 261 264 265 267 268 269 270


Innhold

9.3

9.4

9.5 9.6

9.2.2 Ikke-sorterte filer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.3 Sorterte filer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.4 Hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Indekser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1 Primærindekser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.2 Sekundærindekser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.3 Flernivåindekser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.4 Bitmap-indekser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.5 Opprette indekser med SQL . . . . . . . . . . . . . . . . . . . . . . . . Retningslinjer for fysisk design . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4.1 Valg av datatyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4.2 Valg av filstruktur og indekser . . . . . . . . . . . . . . . . . . . . . . Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ix 271 272 273 275 275 276 277 278 279 280 280 281 282 283

III Databaser i produksjon

285

10 Transaksjoner 10.1 Introduksjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Håndtering av feilsituasjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Definisjon av transaksjoner . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.2 Kontrollerte avbrudd og feilsituasjoner . . . . . . . . . . . . . . 10.2.3 Transaksjonsloggen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.4 Gjenoppbygging med transaksjonslogg . . . . . . . . . . . . . . 10.3 Flerbrukerdatabaser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.1 Prosesser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.2 ACID-egenskapene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.3 Les – beregn – skriv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.4 Utfordringer med samtidige brukere . . . . . . . . . . . . . . . . 10.3.5 Låsemekanismer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.6 Serialiserbare forløp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.7 Tofaselåsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.8 Vranglås . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.9 Isolasjonsnivåer og optimistisk låsing . . . . . . . . . . . . . . . . 10.4 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

287 287 289 289 291 292 294 296 296 297 297 298 300 302 303 304 307 308 309


x

Innhold

11 Databaseadministrasjon 11.1 Oppbygging av et databasesystem . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.1 Data og metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.2 Oppgavene til et DBHS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Oppgavene til databaseadministratoren . . . . . . . . . . . . . . . . . . . . 11.2.1 Sikkerhetskopiering og gjenoppbygging . . . . . . . . . . . . . 11.2.2 Brukeradministrasjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.3 Overvüking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.4 Kapasitetsplanlegging og optimalisering . . . . . . . . . . . . . 11.3 Databaseløsninger og systemarkitekturer . . . . . . . . . . . . . . . . . . . 11.3.1 Klient/tjener-arkitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3.2 Parallelle og distribuerte databaser . . . . . . . . . . . . . . . . . . 11.3.3 Minnedatabaser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 Databaser i skyen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.1 IaaS, SaaS, PaaS og DBaaS . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4.2 Opprette og skalere skydatabaser . . . . . . . . . . . . . . . . . . . 11.4.3 Sikkerhetskopiering til skyen . . . . . . . . . . . . . . . . . . . . . . . 11.5 Spørreoptimalisering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.5.1 Relasjonsalgebra og omskrivningsregler . . . . . . . . . . . . . 11.5.2 Kostnadsbasert optimalisering . . . . . . . . . . . . . . . . . . . . . . 11.5.3 Diskalgoritmer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.6 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.7 Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

311 312 312 312 315 316 318 322 323 324 324 325 327 328 328 329 330 332 333 334 335 338 339

IV

341

Databaseapplikasjoner

12 Webapplikasjoner 12.1 Webteknologi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.1 Fra hypertekst til webapplikasjoner . . . . . . . . . . . . . . . . . 12.1.2 HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.3 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Databaser og applikasjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.1 Fysisk og logisk arkitektur . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.2 Plattform og utviklingsstakker . . . . . . . . . . . . . . . . . . . . . . 12.3 Introduksjon til PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.1 Installasjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.2 Dynamiske nettsider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.3 Behandle HTML-skjemaer . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 Databaseprogrammering i PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . .

343 344 344 345 348 350 350 352 353 353 354 356 357


Innhold

xi

12.4.1 MySQLi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.2 Åpne og lukke forbindelsen til databasen . . . . . . . . . . . . 12.4.3 Inndatavalidering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.4 Utføre utvalgsspørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.5 Behandle spørreresultater og generere HTML . . . . . . . . 12.4.6 Flere typer SQL-spørringer . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.7 Autonummerering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.8 Fange opp feil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4.9 Sesjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Klientprogrammering med HTML og JavaScript . . . . . . . . . . . . 12.5.1 Inndatavalidering på klientsiden . . . . . . . . . . . . . . . . . . . . 12.5.2 AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sikring av webapplikasjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.6.1 Innlogging og kryptering av passord . . . . . . . . . . . . . . . . 12.6.2 SQL injection og cross site scripting . . . . . . . . . . . . . . . . . Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

357 358 360 360 361 362 362 364 364 366 366 367 368 368 369 372 373

13 Lagrede programmer 13.1 Lagrede rutiner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.1 Prosedyredeklarasjon og prosedyrekall . . . . . . . . . . . . . . 13.1.2 Skilletegn og skriptfiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.3 Parameteroverføring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1.4 Utføre SQL i lagrede rutiner . . . . . . . . . . . . . . . . . . . . . . . . 13.1.5 Behandle flere rader med cursors . . . . . . . . . . . . . . . . . . . . 13.1.6 Lagrede funksjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Bruke lagrede rutiner fra PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.1 Utføre SQL-spørringer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.2 Prepared statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.3 Prosedyrekall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.4 Utdata fra funksjoner og prosedyrer . . . . . . . . . . . . . . . . . 13.2.5 Spørreresultater som utdata fra lagrede prosedyrer . . . 13.2.6 Transaksjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.7 CRUD-rutiner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3 Triggere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.1 Definisjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.2 AFTER-triggere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.3 BEFORE-triggere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.4 Kontrollere forretningsregler . . . . . . . . . . . . . . . . . . . . . . . . 13.3.5 INSTEAD OF-triggere . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

375 376 376 377 378 379 381 383 384 385 385 388 389 390 391 392 393 393 394 395 397 399

12.5

12.6

12.7 12.8


xii

Innhold 13.4 13.5 13.6 13.7

Lagrede programmer i systemkatalogen . . . . . . . . . . . . . . . . . . . . Databaseprogrammering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

400 401 403 404

V Utvalgte temaer

407

14 XML og JSON 14.1 Introduksjon til XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.1 XML og HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.2 Prolog og elementer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.3 Attributter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.4 Kommentarer og prosesseringsinstruksjoner . . . . . . . . . 14.1.5 Entitetsreferanser og CDATA . . . . . . . . . . . . . . . . . . . . . . . 14.1.6 Navnerom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.7 Anvendelser av XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2 XML som hierarkisk struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.1 Generelt om trestrukturer . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.2 Dokumentobjektmodellen . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.3 Stiuttrykk og hyperlenker . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3 Stilark og spørrespråk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3.1 Generelt om stilark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3.2 XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3.3 Spørrespråk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4 Beskrive lovlig struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4.1 Dokumenttypedefinisjon . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4.2 XML Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5 Representasjon av data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5.1 XML-representasjon av tabelldata . . . . . . . . . . . . . . . . . . . 14.5.2 Normalisert datamodell for dokumenter . . . . . . . . . . . . . 14.6 JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.7 Webtjenester . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.8 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.9 Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

409 410 410 412 412 413 413 413 414 415 416 417 418 418 419 419 420 423 423 425 427 427 428 428 430 431 433

15 Via objekter til NoSQL 15.1 Motivasjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.1.1 Atomære og sammensatte verdier . . . . . . . . . . . . . . . . . . . 15.1.2 Eksempel: geografiske informasjonssystemer . . . . . . . . .

435 436 436 438


Innhold 15.2 Objekter og databaser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.1 Objektorientert programmering . . . . . . . . . . . . . . . . . . . . . 15.2.2 Klasser og objekter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.3 Objektrelasjonelle databaser . . . . . . . . . . . . . . . . . . . . . . . . 15.2.4 Datatyper i PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3 NoSQL-landskapet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.1 Stordata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.2 Karakteristiske trekk ved NoSQL-databaser . . . . . . . . . . 15.3.3 NoSQL-familiene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.4 Dokumentdatabasen MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.4.1 Dokumenter og dokumentsamlinger . . . . . . . . . . . . . . . . 15.4.2 Håndtere forhold i dokumentdatabaser . . . . . . . . . . . . . . 15.4.3 CRUD-operasjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.4.4 Aggregering og MapReduce . . . . . . . . . . . . . . . . . . . . . . . . 15.4.5 Indekser og fritekstsøk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5 Grafdatabasen Neo4j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.1 Graf = noder + kanter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.2 Problemet med “grafspørringer” i relasjonsdatabaser . 15.5.3 Enkle grafspørringer med Cypher . . . . . . . . . . . . . . . . . . . 15.5.4 WHERE-betingelser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.5 Innsetting, oppdatering og sletting . . . . . . . . . . . . . . . . . . 15.5.6 Komplekse mønstre, aggregering og grafalgoritmer . . . 15.5.7 Migrering av Hobbyhuset til Neo4j . . . . . . . . . . . . . . . . . . 15.6 Fra hierarkier via relasjoner til NoSQL . . . . . . . . . . . . . . . . . . . . . . 15.7 Oppsummering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.8 Oppgaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xiii 440 440 441 442 442 446 447 447 449 451 451 452 454 457 458 460 460 462 462 464 465 465 467 469 470 471

A SQL 473 A.1 Vanlige SQL-kommandoer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 A.2 Nyttige funksjoner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 B Hobbyhuset

477

Litteraturliste

483

Stikkordregister

487


Forord Læreboken er skrevet for innføringskurs i databaser ved universiteter og høgskoler. Den tar for seg både design, implementasjon og drift av databasesystemer, med særlig vekt på bruk av spørrespråket SQL. Boken forutsetter ikke forkunnskaper i informatikk. Jeg har valgt å starte med en innføring i SQL. Dette er konkret stoff som gir erfaring med anvendelser. Etter at denne “grunnmuren” er på plass, er det lettere å forklare mer abstrakte temaer. Stoffet er delt inn i 15 kapitler fordelt på 5 deler. SQL og relasjonsdatabaser I en relasjonsdatabase er data organisert i tabeller. Den første delen tar for seg bruk av SQL for å definere tabeller, sette inn, endre og slette data samt å hente ut data med utvalgsspørringer. Databasedesign For å utvikle en ny database lager man først en modell. Datamodellering med ER (Entity Relationship) gir en slags arkitekttegning av databasen. Normalisering brukes for å sikre at modellen gir en god tabellstruktur uten dobbeltlagring. Fysisk organisering med indekser er viktig for å sikre rask responstid. Databaser i produksjon En database kan ha mange samtidige brukere og er i produksjon over lang tid. Det blir forklart hvilke mekanismer et databasesystem har for å håndtere feilsituasjoner og flere samtidige brukere samt hvilke oppgaver en databaseadministrator utfører for å sikre stabil og effektiv drift av systemet. Databaseapplikasjoner Sluttbrukere jobber som regel med et system via spesialutviklede applikasjoner (programmer). Tema i denne delen er utvikling av webapplikasjoner med skriptspråket PHP, og bruk av lagrede rutiner og triggere på databasetjeneren.


xvi

Forord

Utvalgte temaer Vi ser først på XML og JSON som lagrings- og overføringsformat for semistrukturerte data, og deretter på NoSQL-databaser og objektrelasjonelle databaser. Hvert kapittel blir innledet med en kort liste av læringsmål og avsluttet med øvingsoppgaver og en oppsummering av viktige begreper. Flere oppgaver, løsningsforslag, eksempeldatabaser, rettelser og andre undervisningsressurser ligger på nett: www.nettressurser.no/databasesystemer. Stoffet er i all hovedsak uavhengig av databaseverktøy. Læreboken inneholder likevel kommentarer og tips for bruk av MySQL, PostgreSQL, SQL Server, Access og Oracle, både for å lette praktisk bruk, men også for å vise at SQL-kode ikke alltid fungerer på tvers av systemer. Det er fullt mulig å bruke læreboken med andre verktøy. Det er foretatt en rekke endringer i 5. utgave av boken. Det er blant annet mer stoff om NoSQL-databaser, databasedesign med ER og UML har fått mer plass, og noen avanserte aggregeringsteknikker i SQL er lagt til. Boken trykkes for første gang i farger. Jeg vil særlig takke Ketil Danielsen, Olav Dæhli, Roy M. Istad, Jon Kvisli, Per Lauvås, Håvard Myrbakken, Tomas Sandnes og Uwe Egbert Wolter for faglige kommentarer og samarbeid knyttet til dette bokprosjektet. Universitetet i Sørøst-Norge har lagt forholdene godt til rette for skrivearbeid. Universitetsforlaget med designer Cecilie Mohr, markedskonsulent Arne Veer, manuskoordinator Yngve Nordgård, produksjonskoordinator Syver Holen og forlagsredaktør Eli Valheim har gjennomført bokprosjektet på en profesjonell måte. Mange har bidratt med verdifulle innspill til manus og/eller nettsider: Egil Paulin Andersen, Niels Andreas Braathen, Vidar Berg, Viktor Danielsen, Stian Flage, Ole Einar Flaten, Geir Haugan, Espen Helgerud, Stian Helgerud, Steinar Opdal Iversen, Anniken Karlsen, Knut Kvaal, Tor Lønnestad, Sigmund Hov Moen, Håvard Nordlie Mathisen, Kristine Vike Nerås, Trine Normann, Jostein Sageie, Hans Christian Sandblåst, Jon Martin Sigvaldsen, Martin Sjursen, Connie Skjellaug, Kjell-Olaf Slagnes, Kristine Smaadal, Espen Solnørdal, Tore Svensson, Jørgen Tellnes, Bjørge Trollsås, Jørgen Tørnes, Tarald Vestbøstad, Benjamin Waltersperger, Øystein Wendelborg, Adrian Wielgosz og Audun Østtveit. En stor takk til alle! Bø i Telemark, desember 2019 Bjørn Kristoffersen


Læreboken tar utgangspunkt i bruk av tabeller og databasespråket SQL. Etter at denne «grunnmuren» er på plass, tar boken for seg livsløpet til et databasesystem, fra planlegging og design til implementering og daglig drift. SQL er et standardisert språk som kan brukes mot en rekke systemer, og stoffet er derfor i all hovedsak verktøyuavhengig. Læreboken inneholder likevel kommentarer og tips for bruk av følgende verktøy: MySQL, PostgreSQL, Oracle, Access og SQL Server.

• SQL: utvalgsspørringer, definisjon av tabeller og views, innsetting, sletting, oppdatering og brukeradministrasjon • relasjonsmodellen: det teoretiske grunnlaget for relasjonsdatabaser • datamodellering med ER og UML • normalisering • filer og indekser, søkealgoritmer og spørreoptimalisering • databaseadministrasjon: transaksjoner, brukeradministrasjon, sikkerhetskopiering og gjenoppbygging, overvåking og optimalisering, skydatabaser • webapplikasjoner med databaseprogrammering i PHP • lagrede rutiner og triggere • semistrukturerte data med XML og JSON • objektrelasjonelle databaser og brukerdefinerte datatyper • NoSQL-databaser med vektlegging av dokumentdatabaser og grafdatabaser

Læreboken har en egen nettside med oppgaver og annet tilleggsmateriale: www.nettressurser.no/databasesystemer BJØRN KRISTOFFERSEN er cand.scient. i informatikk fra Universitetet i Oslo.

Han er ansatt som førstelektor i informatikk ved Universitetet i Sørøst-Norge, hvor han underviser i databaser, programmering og web. ISBN 978-82-15-03251-1

5. UTGAVE

Det er foretatt en rekke endringer i 5. utgave av boken. Blant annet er det mer stoff om NoSQL-databaser, databasedesign med ER og UML har fått mer plass, og noen avanserte aggregeringsteknikker i SQL er lagt til.

Databasesystemer

Emner som presenteres, er blant annet

BJØRN KRISTOFFERSEN

Databasesystemer er skrevet for innføringskurs i databaser ved universiteter og høgskoler og gir en grundig innføring i relasjonsdatabaser, SQL, datamodellering og databaseteori. Boken forutsetter ikke forkunnskaper i informatikk.

BJØRN KRISTOFFERSEN

Databasesystemer 5. UTGAVE

Profile for Universitetsforlaget

Databasesystemer  

Databasesystemer er skrevet for innføringskurs i databaser ved universiteter og høgskoler og gir en grundig innføring i relasjonsdatabaser,...

Databasesystemer  

Databasesystemer er skrevet for innføringskurs i databaser ved universiteter og høgskoler og gir en grundig innføring i relasjonsdatabaser,...