dbsys.info

Løsningsforslag til kapittel 1

Oppgave 1

Eksempler på hva man kan bruke SQL til:

Oppgave 2

Lagringsplass for databasen til Hobbyhuset?

For å svare på denne oppgaven tar vi utgangspunkt i tabelldefinisjonene i vedlegg B. Basert på datatypene til kolonnene kan vi regne ut plassbehovet for én enkelt rad. Deretter anslår vi antall rader i hver tabell for å beregne samlet plassbehov for databasen.

Vi må først finne plassbehovet for enkeltverdier i ulike datatyper. Vi tar utgangspunkt i dokumentasjonen for MySQL, og setter opp følgende forenklede tabell for de datatypene som brukes i Hobbyhuset:

DatatypeAntall byter
SMALLINT2
INTEGER4
CHAR(n)n
VARCHAR(n)n+1
DECIMAL(8,2)8
DATE3

Vi antar her at hvert tegn lagret som tekst krever 1 byte. Dette avhenger av hvilke tegnsett som er valgt. Hvis slike data lagres som Unicode vil hvert tegn kreve minst 2 byter, og noen tegn som mye som 4 byter.

Plassbehovet for verdier i datatypen DECIMAL(p,s) avhenger av totalt antall siffer p og antall plasser etter desimalpunktum s. I Hobbyhuset blir denne datatypen kun brukt for å lagre beløp og da hele veien som DECIMAL(8, 2). Vi går ikke nærmere inn på hvordan plassbehovet for denne datatypen er generelt, og antar bare at DECIMAL(8, 2) krever 8 byter.

Vi antar videre at data blir lagret "tett", ved at vi multipliserer plassbehovet for én rad med anslått antall rader for å finne plassbehovet for en tabell. Dette er ikke realistisk – forklaring følger i kapittel 9.

TabellAntall raderByter pr. radPlassbehov
Poststed4 0004 + 51 = 55220 000
Ansatt502 + 51 + 51 + 101 + 4 + 3 + 1 + 51 + 8 = 27213 600
Kategori302 + 51 = 531 590
Kunde5004 + 51 + 51 + 101 + 4 = 211105 500
Vare2 0005 + 51 + 8 + 2 + 4 + 3 = 73146 000
Prishistorikk10 0005 + 3 + 8 = 16160 000
Ordre5 0004 + 3 + 3 + 3 + 4 = 1785 000
Ordrelinje20 0004 + 5 + 8 + 4 = 21420 000
Totalt  1 151 690

Totalt vil databasen dermed kreve ca. 1 151 690 byter ≈ 1.2 MB.

Oppgave 3

Eksempeltabeller for universitetsdatabase.

Også på denne oppgaven er det mange mulige svar. Løsningen under fokuserer på ansatte, studenter og kurs, men et universitet må også lagre mange andre typer av informasjon. Vi nøyer oss med noen få eksempelrader for hver tabell.

Merk hvordan visse verdier går igjen i flere tabeller, f.eks. finner vi igjen både studentnumre og kurskoder i tabellen Karakter. Dette gjøres for at tabellene skal henge logisk sammen.

Tabell Ansatt

AnsNr Fornavn Etternavn Stilling
20 Knuth Ullmann Professor
21 Martin Abel Amanuensis
22 Lise Fahrenheit Professor
23 Celcius Morgenstierne Universitetslektor

 

Tabell Studium

StudKode Navn Studiepoeng
701902 Sivilingeniør IKT 300
701933 Bachelor sykepleie 180
701055 Bachelor friluftsliv 180

 

Tabell Kurs

KursKode Navn Studiepoeng
INF208 Databaser II 15
MAT001 Matematikk 10
INF001 Grunnkurs IKT 10
INF230 Objektorientert systemutvikling 10
INF382 Automatateori 10
INF399 Parallellprogrammering 10

 

Tabell KursStudium

StudKode KursKode Årstrinn Semester
701902 MAT001 1 H
701902 INF208 4 V
701933 MAT001 1 H

 

Tabell Student

StudNr Fornavn Etternavn Adresse PostNr
19201 Per Zachariassen Bjerggata 2 3400
19217 Karianne Brandt Lovisenbergveien 17 3200
19333 Birgitte Lorentzen Bergenveien 237 3200

 

Tabell Karakter

StudNr KursKode Dato Karakter
19201 MAT001 10.12.2019 C
19201 INF208 04.05.2020 B
19333 MAT001 08.06.2020 D

 

Oppgave 4

Oversett 10000111 fra totallsystemet til titallsystemet.

1 × 27 + 0 × 26 + 0 × 25 + 0 × 24 + 0 × 23 + 1 × 22 + 1 × 21 + 1 × 20
= 128 + 0 + 0 + 0 + 0 + 4 + 2 + 1
= 135

 

Oppgave 5

Oversett 204 fra titallsystemet til totallsystemet.

Boken gir ingen oppskrift på hvordan man går fram, så her måtte man enten slå opp i en gammel matte-bok, søke på nettet, eller tenke ut en framgangsmåte selv.

Framgangsmåte: Heltallsdivider tallet på 2 og sjekk om det gir (1 til) rest. I så fall skal siste siffer være 1, og ellers 0. Fortsett på samme måte med toerplassen, firerplassen, åtterplassen osv., helt til resultatet av divisjonen blir 0.

TitallsystemetResultatRestTotallsystemet
204 / 210200
102 / 251000
51 / 2251100
25 / 21211100
12 / 26001100
6 / 230001100
3 / 2111001100
1 / 20111001100
0   

204 i titallsystemet blir altså 11001100 i totallsystemet, som vi kan dobbeltsjekke ved å oversette tilbake: 128 + 64 + 8 + 4 = 204.

Oppgave 6

Meningen med denne oppgaven var at man skulle finne fram til representasjonen av egen e-postadresse i form av Unicode tallkoder.

Min adresse er bjorn.kristoffersen@usn.no og det gir følgende tallsekvens:

98 106 111 114 110 46 107 114 105 115 116 111 102 102 101 114 115 101 110 40 117 115 110 46 110 111

Her er f.eks. 46 tallkoden til punktum og 40 tallkoden til @.

Oppgave 7

Hvordan blir data representert i en relasjonsdatabase?

I en relasjonsdatabase blir alle data lagret i tabeller. Ordet relasjon er hentet fra matematikk og, som vi skal se i kapittel 6, er i en viss forstand det samme som en tabell. Slik sett kan man kalle relasjonsdatabaser for "tabelldatabaser".

Oppgave 8

Noen av oppgavene til et databasehåndteringssystem:

Oppgave 9a

Hvilke egenskaper gjelder?

Personene til venstre for venstre hånd er sortert alfabetisk, og de er alle alfabetisk mindre enn resten.

Oppgave 9b

Maksimalt antall ombyttinger?

Hvis rekken er sortert synkende (omvendt sortert) blir det bytter for hver eneste sammenligning. Følgende viser første "gjennomløp" med høyre hånd for en rekke med fire tall (venstre hånd peker på plass 1 hele tiden):

8 - 5 - 4 - 2
5 - 8 - 4 - 2
4 - 8 - 5 - 2
2 - 8 - 5 - 4

Når N=4 får vi altså N-1=3 bytter for å få på plass det minste tallet i plass 1. Merk at tallene fra og med posisjon 2 er omvendt sortert (5 - 4 - 2). Deretter må vi bruke N-2=2 bytter for å få riktig tall i plass 2, og N-3=1 bytter for å få riktig tall i plass 3. Det siste tallet er da nødvendigvis også korrekt plassert. Det betyr (N-1) + (N-2) + ... + 1 = N ×(N-1)/2 bytter. Dette er for øvrig en meget ineffektiv sorteringsalgoritme.