Takk!
Jeg vil særlig takke Ketil Danielsen, Olav Dæhli, Espen Helgerud, Stian Helgerud, 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.
Mange har bidratt med verdifulle forslag og rettelser til manus og/eller nettsider: Egil Paulin Andersen, Niels Andreas Braathen, Vidar Berg, Viktor Danielsen, Antonin De Jesus, Stefan Olav Ekehaug, Stian Flage, Ole Einar Flaten, Cathrine Marie Haga, Geir Haugan, Steinar Opdal Iversen, Lawrence Kamara, Anniken Karlsen, Hyojung Kim, Knut Kvaal, Ala Mehersia, Tor Lønnestad, Sigmund Hov Moen, Håvard Nordlie Mathisen, Kristine Vike Nerås, Trine Normann, Anja Heggen Rotevatn, Jostein Sageie, Hans Christian Sandblåst, Jon Martin Sigvaldsen, Martin Sjursen, Connie Skjellaug, Kjell-Olaf Slagnes, Kristine Smaadal, Espen Solnørdal, Lars Andreas Strand, Tore Svensson, Jørgen Tellnes, Ida Katrine Børstad Thoresen, Bjørge Trollsås, Jørgen Tørnes, Tarald Vestbøstad, Benjamin Waltersperger, Øystein Wendelborg, Adrian Wielgosz, Audun Østtveit og Mari Aarak.
Utgivelsen av 1. utgave fikk støtte fra Lærebokutvalget for høyere utdanning. Universitetet i Sørøst-Norge har lagt forholdene godt til rette for skrivearbeid. Universitetsforlaget har gjennomført bokprosjektet på en profesjonell måte.
En stor takk til alle!
5. utgave
2. opplag
Trykkfeilene fra 1. opplag er rettet opp. Ingen nye feil er funnet.
1. opplag
- Side 91: I oppgave 4 skal tabellen Utleie ha kolonner (KNr, MNr, KopiNr, TidUt, TidInn).
- Side 223: Koblingsentiteten i figur 8.9 skal hete ProsjektDeltakelse.
- Side 226: Koblingsentiteten i figur 8.14 skal hete Kontorplass.
- Side 253: I oppgave 2 skal kolonnen Utlån.EksNr være fremmednøkkel og merkes med stjerne.
- Side 452–454 Alle navn i de fire JSON-eksemplene skal omsluttes av apostrofer ("VNr" og ikke bare VNr), på samme måte som i listing 14.4 på side 429.
4. utgave
- Side 6: Det burde vært kommentert at figur 1.3 er en variant av det som blir kalt DIKW-pyramiden (Data - Information - Knowledge - Wisdom), rett nok uten et lag for visdom.
- Side 66: I tilknytning til ALTER TABLE kommandoen burde det vært lagt til en MySQL-kommentar: I MySQL fjernes primærnøkler ved (f.eks.) ALTER TABLE Vare DROP PRIMARY KEY. Det er også en tilsvarende syntaks for fjerning av fremmednøkler (DROP FOREIGN KEY), se under ALTER TABLE i referansemanualen.
- Side 74 og 445: InnoDB er standard databasemotor i siste versjoner av MySQL. Det er dermed ikke lenger nødvendig å skrive ENGINE=InnoDB for å oppnå fremmednøkkelkontroll slik det står i faktaboksen.
- Side 143, nest siste avsnitt: "ariteten" skal være "kardinaliteten".
- Side 153, siste avsnitt: Skal starte med "Vi sier at disse seks er grunnleggende operatorer".
- Side 174, figur 7.20: Utleie.KNr bør være merket med PK (primary key) og FK (foreign key). Alternativt kunne man innført et utleienummer som primærnøkkel i dette eksemplet, men det ville medført ytterligere noen endringer.
- Side 175: I avsnitt 7.6.2 burde det vært nevnt at man med Chen-notasjon kan knytte attributter til forhold. Figur 7.21 kunne f.eks. vært tegnet på denne måten, der altså Utlån er modellert som et mange-til-mange forhold med to attributter UtlånsDato og ErLevert (entiteten Forlag er hoppet over).
- Side 230: Minnehierarkiet vist på figur 9.1 plasserer optiske medier (CD, DVD) sammen med magnetbånd nederst i pyramiden. Det er greit nok med hensyn på aksesstid i den forstand at de er tregere enn harddisk, men det blir feil hvis vi ser på lagringskapasitet (jf. setningen "Bredden på pyramiden antyder lagringskapasitet" øverst på siden). Det finnes nå (vår 2016) harddisker med lagringskapasitet opp mot 10 TB, godt over kapasiteten til CD og DVD.
- Side 334: I PHP-koden øverst skal første linje slettes og SQL-spørringen endres til: INSERT INTO Ordre(Dato, KNr) VALUES (CURDATE(), 5002)
3. utgave
- Side 60: I boksen står det feilaktig at man kan bruke funksjonen CURDATE() som standardverdi i MySQL. Som hovedregel kan man ikke bruke funksjoner som standardverdi i MySQL. Hvis en kolonne er gitt datatype TIMESTAMP kan man få til noe lignende ved å skrive:
Dato TIMESTAMP DEFAULT CURRENT_TIMESTAMP
I Access kan man bruke DATE() som standardverdi, forutsatt at systemet er satt opp med ANSI SQL syntaks.
- Side 103: Egenkoblingen må skrives om til å bruke ytre koblinger for å få med besteforeldre for de personene der ikke alle 8 besteforeldre er registrert.
- Side 181: Det er vanskelig å finne en god tolkning av diagrammet til oppgave 2 slik det er tegnet. Entiteten Reservasjon bør utvides med et attributt DagNr, som også tas med i identifikatoren. I så fall bør også løsningsforslaget bli oppdatert: DagNr bør da legges til som en kolonne i tabellen Reservasjon, og tas med i primærnøkkelen. Dessuten er det nok naturlig å sette alle minimumsskrankene inn mot Reservasjon til 0.
- Side 249: Det er to feil i avsnittet nederst på siden. 1) Man kan tildele rettigheter på kun utvalgte kolonner i en tabell, f.eks. GRANT UPDATE(Antall) ON Vare TO ola. 2) For at utsnittet Varebeholdning skal tjene hensikten må man legge til WITH CHECK OPTION som siste linje i definisjonen.
- Side 309: Avsnittet om bruk av funksjonene mysql_real_escape_string og mysqli_real_escape_string som et mottrekk til SQL-planting (SQL injection) er for bastant. Selv om disse funksjonene kan stoppe en del angrep, så er det ikke en vanntett løsning. Den anbefalte løsningen er å bruke såkalte prepared statements (for øvrig omtalt i avsnitt 14.2.2 på side 321-323).
2. utgave
- Side 38, linje 1 skal være: vår eksempelspørring over, så blir AND utført først fordi den har høyere presedens enn OR.
- Side 322, setningen før nederste kodeeksempel skal være: Ved seinere forespørsler kan man hente ut verdien til informasjonskapselen fra den assosiative tabellen $_COOKIE, og på den måten finne ut hvilken bruker som blir behandlet:
$bruker = $_COOKIE['bruker'];
- Side 337, første linje: cross-side scripting skal være cross-site scripting.
- Side 430, listen med operatorpresedens bør være:
- *, /, %
- +, -
- <, <=, =, >, >=, <>, !=
- NOT
- AND
- ALL, ANY, BETWEEN, IN, LIKE, OR, SOME
- Alle forekomster av "personnummer" skal være "fødselsnummer", og forekomsten av "fødselsnummer" på s. 197 skal være "fødselsdato". Fødselsnummer er altså er den 11-sifrede koden som består av fødselsdato (6 siffer) og personnummer (5 siffer). Fødselsnummer (11 siffer) er en mulig primærnøkkel for personer; personnummer (5 siffer) kan ikke brukes til dette.