Örebro universitet
Institutionen för naturvetenskap och teknik
Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se)








Tentamen i

Databasteknik

torsdag 11 januari 2024

Gäller som tentamen för:
DT105G Databasteknik, provkod A001


Hjälpmedel: Ordbok för översättning.
Poängkrav: Maximal poäng är 40. För godkänt betyg krävs 25 poäng, varav minst fyra poäng på uppgift 1 och minst fem poäng på uppgift 2. För den som följt kursen hösten 2023 ger varje i tid inlämnad inlämningsuppgift en extra poäng. Den som inte gått kursen hösten 2023 får dessa (fem) extrapoäng ändå.
Resultat: Meddelas senast 15 arbetsdagar efter tentamensdatum.
Återlämning av tentor: Elektroniskt via webbportalen Studenttjänster.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.






LYCKA TILL!

Scenario till uppgifterna

Det är inte ovanligt med gator och hus, som Granvägen och Brickebergsvägen på den här bilden:

Satellitbild med gator och hus

Vi ska bygga en databas för att lagra data om gator och hus. Mer bestämt ska databasen innehålla:

Uppgift 1 (5 p)

Rita ett ER- eller EER-diagram för den beskrivna databasen. Använd informationen i scenariot ovan, men tänk också på att det ska gå att svara på frågorna i uppgifterna nedan.

ER- och EER-diagram kan ritas på flera olika sätt. Om du använder en annan notation än kursboken, måste du förklara den notation som du använder.

Uppgift 2 (6 p)

Implementera den beskrivna databasen i relationsmodellen, dvs översätt ER-diagrammet till tabeller.

Du behöver inte skriva create table-kommandon i SQL, men du ska ange vilka relationer som finns och vilka attribut varje relation innehåller. Ange också alla kandidatnycklar, vilken av dessa som är primärnyckel, samt vilka referensattribut som finns och vad de refererar till.

Implementationen ska vara bra.

Uppgift 3 (1 p)

Mycket i kursen handlar om relationsmodellen och relationsdatabaser. Vad är det som är "relationerna" i en relationsdatabas?

Uppgift 4 (3 p)

En sak som man kan behöva tänka på när man skapar databasen i uppgifterna ovan, och när man ställer en del av SQL-frågorna i nästa uppgift, är att om en gata sitter ihop med en annan så sitter också den andra gatan ihop med den första. Till exempel sitter Alstavägen ihop med Granvägen, och vi kanske lagrar det i databasen, men det betyder också att Granvägen sitter ihop med Alstavägen.

Vad är det för problem som detta kan leda till, och hur har du löst det i din databas?

Uppgift 5 (11 p)

Formulera följande frågor i SQL. Definiera gärna vyer eller CTE:er om det underlättar, men skapa inte nya tabeller.

a) (1p) Vad är numren på de gator som heter Granvägen?

b) (1p) Det finns bara en gata som heter Åstadalsvägen och bara en som heter Sörbyängsvägen. Vad är numren och längden på Åstadalsvägen och Sörbyängsvägen? (Som en SQL-fråga, inte två!)

c) (2p) Vad heter de gator som är längre än både Åstadalsvägen och Sörbyängsvägen?

d) (2p) Vad heter de gator som Gällerstavägen sitter ihop med?

e) (3p) Vad heter den gata som det ligger flest hus vid?

f) (2p) Finns det några gator som det inte finns några hus alls vid? Vi vill veta dessa gators namn.

Uppgift 6 (2 p)

Alla tabeller i databasen växer och blir mycket stora. Sökningarna i deluppgift 5a, 5b och 5c körs ofta, men kanske med andra konstanter än de i uppgiften, och vi vill få dem att gå snabbare. Vilka index bör vi skapa för att de sökningarna ska gå snabbare? Från början finns det inga index i databasen, inte ens på nycklar.

Uppgift 7 (3 p)

a) Vad menas, i databassammanhang, med en trigger?

b) Beskriv två olika användningsområden för triggers i databaser.

Uppgift 8 (5 p)

Här är tabellen Katter, som lagrar data om katter. Vi lagrar varje katts nummer, namn, vikt och färg. Både kolumnen Nummer och kolumnen Namn är kandidatnycklar. Vi har valt Nummer som primärnyckel.

Katter
Nummer Namn Vikt Färg
1 Pelle 2 Grå
2 Maja 2 Grå
3 Måns 2 Grå
4 Bill 2 Grå
5 Bull 3 Grå

a) Vilka ffb finns i tabellen?

b) Vilka av normalformerna 1NF, 2NF, 3NF och BCNF uppfyller tabellen? Om det är någon normalform som inte uppfylls, så förklara varför den inte uppfylls.

c) Man brukar vilja undvika redundans i databaser. Vi ser att just nu väger nästan alla katterna 2 kilo. Är det en form av redundans?

d) Vi ser också att alla katterna är grå. Är det en form av redundans?

Uppgift 9 (4 p)

Tabellen Katter ser ut som i uppgiften ovan. Vi startar tre olika klientprogram som loggar in i samma databas, och ger följande SQL-kommandon, i den angivna ordningen, i de tre klienterna.

Klient 1 Klient 2 Klient 3
START TRANSACTION;
START TRANSACTION;
START TRANSACTION;
SELECT Vikt
FROM Katter
WHERE Namn = 'Pelle';
UPDATE Katter
SET Vikt = 3
WHERE Namn = 'Pelle';
UPDATE Katter
SET Vikt = Vikt + 2
WHERE Namn = 'Pelle';
ROLLBACK;
COMMIT;
SELECT Vikt
FROM Katter
WHERE Namn = 'Pelle';
COMMIT;
SELECT Vikt
FROM Katter
WHERE Namn = 'Pelle';

a) Vi använder en databashanterare som uppfyller ACID-egenskaperna. Vad blir resultatet av de tre SELECT-frågorna ovan?

b) Vad står bokstaven "I" i ACID för, och vad innebär det?

c) Nu byter vi databashanterare till en som inte uppfyller ACID-egenskaperna, särskilt inte I:et. Beskriv något problem som kan uppstå när vi kör transaktionerna ovan!