Ö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.
|
-
Skriv tydligt och klart. Lösningar som inte går att läsa kan
naturligtvis inte ge några poäng.
Oklara och tvetydiga formuleringar kommer att misstolkas.
-
Skriv den personliga tentamenskoden på varje inlämnat blad.
Skriv inte namn eller personnummer på bladen.
-
Skriv bara på en sida av papperet.
Använd inte röd skrift.
-
Antaganden utöver de som står i uppgifterna måste anges. Gjorda
antaganden får inte förändra den givna uppgiften.
-
Skriv gärna förklaringar om hur du tänkt.
Även ett svar som är fel kan ge poäng,
om det finns med en förklaring som visar att huvudtankarna var rätt.
LYCKA TILL!
Scenario till uppgifterna
Det är inte ovanligt med gator och hus,
som Granvägen och Brickebergsvägen på den här bilden:
Vi ska bygga en databas för att lagra data om gator och hus.
Mer bestämt ska databasen innehålla:
-
Gator,
som till exempel just Granvägen och Brickebergsvägen.
Varje gata har ett namn, men det är inte säkert att namnen är unika.
Till exempel finns det en Granvägen i Örebro och en i Lindesberg.
Därför får varje gata också ett unikt nummer.
Vi vill också lagra längden på varje gata.
-
Hur gatorna hänger ihop med varandra,
via olika vägkorsningar.
Till exempel sitter Granvägen i Örebro ihop med
Alstavägen,
Barkvägen,
Barrstigen
och Backavägen.
(Man kan förstås komma till många fler gator,
om man går via andra gator.
Här bryr vi oss bara om gator som sitter ihop direkt.)
Som ett annat exempel sitter
Alstavägen ihop med
Granvägen och
Brickebergsvägen.
-
Hus
som ligger vid gatorna.
Varje hus har ett husnummer, som 17C,
och om man vet vilken gata huset ligger vid kan man med hjälp av husnumret
unikt identifiera huset.
Det kan vara praktiskt att ändå ge varje hus ett nummer som är unikt i hela landet.
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!