Takk!
Mange kollegaer, studenter og andre har gjort meg oppmerksom på feil/uklarheter/forbedringsmuligheter i boken og/eller på nettsidene fra 1. utgave og fram til i dag.
I alfabetisk rekkefølge: Niels Andreas Braathen, Vidar Berg, Ketil Danielsen, Viktor Danielsen, Olav Dæhli, Stian Flage, Ole Einar Flaten, Geir Haugan, Stian Helgerud, Roy M. Istad, Steinar Opdal Iversen, Anniken Karlsen, Knut Kvaal, Jon Kvisli, Per Lauvås, Tor Lønnestad, Sigmund Hov Moen, Håvard Nordlie Mathisen, Kristine Vike Nerås, Trine Normann, Jostein Sageie, Hans Christian Sandblåst, Tomas Sandnes, 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, Uwe Egbert Wolter og Audun Østtveit.
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!
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.