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



Tentamen i

Databasteknik för civilingenjörer

måndag 29 maj 2017

Gäller som tentamen för:
DT504G Databasteknik för civilingenjörer, provkod 0100


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 våren 2017 ger varje i tid inlämnad inlämningsuppgift en extra poäng. Den som inte gått kursen våren 2017 får dessa (fem) extrapoäng ändå.
Resultat: Meddelas på kursens hemsida eller via e-post senast måndag 19 juni 2017.
Återlämning av tentor: Elektroniskt via Studentforum.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.



LYCKA TILL!

Scenario till uppgifterna

Vi ska göra en databas över flygplan. Som illustration visar vi Airbus A380, som är världens största passagerarflygplan. Beroende på vilken inredning man valt, kan det ha plats för upp till 853 passagerare.

Airbus A380. Av: Roman Zelentsov (Rulexip). Licens: Creative Commons Attribution-Share Alike 3.0 Unported.
Airbus A380. Av: Roman Zelentsov (Rulexip). Licens: Creative Commons Attribution-Share Alike 3.0 Unported.

I databasen ska vi lagra följande:

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 uppgift 3 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 (10 p)

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

a) (1p) Vad heter de flygplatser som har en kod som innehåller bokstaven X?

b) (2p) Vilka flygbolag från USA har just nu flygplan som befinner sig på Arlanda?

c) (2p) Vilka länder har flygplanen från flygbolaget United besökt? (Man kan se det på vilka flygplatser de varit på.)

d) (2p) Vad heter de flygbolag som inte har några flygplan?

e) (3p) Vad heter det flygbolag som har flest flygplan?

Uppgift 4 (4 p)

Databasen innehåller realistiska mängder data, vilket innebär 10-20 flygplanstillverkare, tusentals flygplatser och tiotusentals flygplan. SQL-frågorna a, b och c i uppgift 3 körs väldigt ofta (men kanske med andra konstanter, till exempel att man söker efter flygplatser med Y i flygplatskoden). De tar för lång tid att köra, och behöver snabbas upp. Vi märker att det inte finns några index alls i databasen, inte ens på nycklar.

a) Fråga a kan vara svår att få att gå snabbare genom att skapa index. Varför?

b) Vilka index bör man skapa för att fråga b och c ska gå snabbare?

c) De flesta databashanterarna skapar automatiskt index på primärnycklar. Vilka anledningar finns det till att man gjort så?

Uppgift 5 (5 p)

I uppgift 2, när man ska skapa tabeller, står det att implementationen ska vara bra. Här är ett försök att skapa en av tabellerna, men tyvärr blev det inte så bra. Tabellen är inte så väl normaliserad som man helst skulle vilja.

Flygplan
ID Beteckning Tillverkare Modell Bolag Bolagsland
1 N26906 Boeing 787 United USA
2 N26907 Airbus A380 United USA
3 SE-KSG Saab 340 SAS Sverige
4 SE-AXA Saab 340 SAS Sverige
5 SE-TYH Saab 340 SAS Sverige
6 SE-KOD Saab 39 SAS Sverige

Kolumnen Beteckning är den unika registreringsbeteckningen från scenariot. ID är en extra nyckel vi skapat för att underlätta arbetet med databasen.

a) Vilka fullständiga funktionella beroenden finns i tabellen?
b) Vilken är den högsta normalform, av 1NF, 2NF, 3NF och BCNF, som tabellen uppfyller?
c) Varför uppfyller tabellen inte den närmast högre normalformen?
d) Beskriv något problem som finns i den här tabellen, och som man skulle slippa med en högre normalform.

Uppgift 6 (5 p)

Förklara kort vad följande termer från databasområdet betyder! Skriv helst inte mer än några få meningar om varje term.

a) ACID-transaktion
b) B-träd
c) cursor
d) DBA
e) ECA-regel

Uppgift 7 (5 p)

Här kommer tre påståenden om databasteknik som alla är fel. Förklara hur det egentligen är!

a) "Relationerna" i en relationsdatabas är kopplingarna mellan tabeller med främmande nycklar ("foreign keys").

b) En databas är normalt lagrad på en hårddisk eller SSD. Databashanterare kan fungera på lite olika sätt, men det vanliga är att databashanteraren läser in alla data till primärminnet när man startar den, och jobbar med dem där. När minnet är fullt, skrivs databasen tillbaka till disken. Därför är det viktigt att ha stabli strömförsörjning till datorn, så man inte blir av med alla sina data.

c) När databashanteraren kör en SQL-fråga, söker den i tabellerna i den ordning som de står i frågan. Till exempel kommer en fråga som select A, B, C from X, Y where X.D = Y.E att börja med tabell X. Olika ordningar kan ge mycket olika prestanda, och därför är det viktigt att skriva tavellerna i en lämplig ordning när man skriver SQL-frågor.