Databasteknik: Lösningar till tentamen 2013-03-09

Observera att detta är förslag på lösningar. Det kan finnas andra lösningar som också är korrekta, och det kan hända att en del av lösningarna är mer omfattande än vad som krävs för full poäng på uppgiften. En del av lösningarna är kanske inte fullständiga, utan hänvisar bara till var man kan läsa svaret.

Uppgift 1 (4 p)

ER-diagram

För det här ER-diagrammet har det även använts en del bakgrundsinformation som inte står i scenariot, till exempel att det inte finns lösa kommuner som inte tillhör något län.

Man kan också tänka sig en lösning där Tätort inte är en svag entitetstyp, utan en vanlig stark entitetstyp. Då måste man skapa en nyckel för Tätort, till exempel en särskild tätortskod.

Uppgift 2 (4 p)

Alternativ 1

Här visas först en lösning där vi använder en extra, numerisk nyckel i varje tabell, kallad Kod.

Tabeller, med primärnyckeln understruken:

Län(Kod, Namn, Folkmängd, Residensstad)
Kommuner(Kod, Namn, Folkmängd, Län)
Tätorter(Kod, Namn, Kommun, Folkmängd);

Namn är en alternativnyckel i Län
Namn är en alternativnyckel i Kommun
Namn och Kommun bildar en sammansatt alternativnyckel i Tätorter

Län.Residensstad refererar till Tätorter.Kod
Kommuner.Län refererar till Län.Kod
Tätorter.Kommun refererar till Kommun.Kod

Alternativ 2

Här har vi en alternativ lösning, utan den extra numeriska nyckeln, utan där vi bara använt namnen på länen, kommunerna och tätorterna.

Tabeller, med primärnyckeln understruken:

Län(Namn, Folkmängd, Residensstadsnamn, Residensstadskommun)
Kommuner(Namn, Folkmängd, Län)
Tätorter(Namn, Kommun, Folkmängd);

Kommuner.Län refererar till Län.Namn
Tätorter.Kommun refererar till Kommun.Namn
I tabellen Län bildar Residensstadsnamn och Residensstadskommun en sammansatt främmande nyckel som refererar till den sammansatta nyckeln Namn och Kommun i Tätorter

Uppgift 3 (8 p)

Här har vi ställt frågorna mot schemaalternativ 1 i uppgift 2 ovan, utan extra numeriska koder.

a) Hur många människor bor det i Åre kommun?

select Folkmangd from Kommuner where Namn = 'Åre kommun';

b) Vad heter residensstaden i Kalmar län, och hur många personer bor det i den?

select Tatorter.Namn, Tatorter.Folkmangd
from Lan, Tatorter
where Lan.Residensstadsnamn = Tatorter.Namn
and Lan.Residensstadskommun = Tatorter.Kommun
and Lan.Namn = 'Kalmar län';

c) Vad heter tätorterna som finns i Kumla kommun?

select Namn
from Tatorter
where Kommun = 'Kumla kommun';

d) Vad är den sammanlagda folkmängden för alla kommuner som ligger i Örebro län?

select sum(Folkmangd)
from Kommuner
where Lan = 'Örebro län';

e) Vad heter den största tätorten i Stockholms län?

create view Stockholmsorter as
select Tatorter.Namn, Tatorter.Folkmangd
from Tatorter, Kommuner
where Tatorter.Kommun = Kommuner.Namn
and Kommuner.Lan = 'Stockholms län';

select Namn
from Stockholmsorter
where Folkmangd in (select max(Folkmangd) from Stockholmsorter);

Uppgift 4 (5 p)

a)

ER-diagram

b)

Det blir en enda tabell (med primärnyckeln understruken):

Region(Nr, Namn, Folkmängd, Tillhör)

Region.Tillhör refererar till Region.Nr

c)

select Folkmangd
from Region
where Namn = 'Norrland';

d)

select norrlands_delar.Namn
from Region as norrland, Region as norrlands_delar
where norrland.Namn = 'Norrland'
and norrlands_delar.Tillhör = norrland.Nr;

Uppgift 5 (4 p)

Se boken. Men några förslag på olika typer av redundans:

Uppgift 6 (7 p)

Se boken.


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@oru.se), 12 mars 2013