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




Tentamen i

Databasteknik

måndag 3 juni 2019

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



LYCKA TILL!

Scenario till uppgifterna

EU-flaggan

Det har nyligen varit val till Europaparlamentet, och vi vill lagra resultaten från det och andra EU-val. Vi behöver förstås en databas för det!

Det som ska lagras i databasen är följande:

  1. Länder som är med i EU, och som har partier som medborgarna i landet kan rösta på. Varje land har ett unikt namn, till exempel Sverige eller Tyskland.
  2. Partier som väljarna kan rösta på. Varje parti har ett unikt namn, till exempel Socialdemokraterna eller Moderaterna. Varje parti hör till ett land, till exempel att Socialdemokraterna hör till Sverige.
  3. Partigrupper är sammanslutningar av partier. Varje partigrupp har ett unikt namn, som EPP, ECR eller ENF, och den kan innehålla ett eller flera partier. Ett parti kan bara vara med i en partigrupp, men det finns partier som inte är med i någon partigrupp alls.
  4. Val, till exempel det nyligen hållna valet 2019. Varje val har ett unikt år, som 2014 eller 2019.
  5. Partierna deltar i valen. Till exempel kan Socialdemokraterna ha deltagit i valet 2014 och valet 2019, så varje parti kan delta i flera val. I varje val är det förstås flera partier som deltar. I varje val får partiet ett antal röster.
För enkelhets skull tänker vi oss att partier aldrig ändrar vilken partigrupp de tillhör. Partierna flyttar inte heller till andra länder.

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 (9 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) (2p) Vilka partier finns i Sverige och Tyskland? Vi vill alltså veta namnen på alla partier från Sverige och från Tyskland.

b) (2p) Vilka partier från Sverige är med i partigruppen EPP?

c) (2p) Totalt hur många röstade i Sverige i EU-valet 2019?

d) (3p) Vad heter den partigrupp som fick flest röster i EU-valet 2019?

Uppgift 4 (2 p)

Man kanske vill ha med inte bara antalet röster som varje parti fick, utan också hur många procent av rösterna de fick. Hur skulle man kunna lösa det med en vy? Om du inte vill skriva SQL-kod, kan du i stället förklara hur det skulle fungera.

Uppgift 5 (5 p)

Här är ett försök att lösa uppgift 2 ovan, med en databas som bara består av en enda tabell. Den ser ganska rimlig ut, och skulle man visa valresultatet som en tabell i en tidning skulle den mycket väl kunna se ut så här.

Valresultat
Parti Land Grupp År Röster
Vänsterpartiet Sverige GUE/NGL 2019 267949
Socialdemokraterna Sverige S&D 2019 940131
Miljöpartiet Sverige G/EFA 2019 454336
Kristdemokraterna Sverige EPP 2019 344884
Centerpartiet Sverige Alde 2019 429811
Liberalerna Sverige Alde 2019 163169
Moderaterna Sverige EPP 2019 670931
Sverigedemokraterna Sverige ECR 2019 614699

a) Om vi betraktar tabellen som en tabell i en relationsdatabas, och inte en tabell som är tryckt i en tidning, vilka kandidatnycklar finns i tabellen?

b) Vilka fullständiga funktionella beroenden finns i tabellen?

c) Vilka av de fyra normalformerna 1NF, 2NF, 3NF och BCNF uppfyller tabellen?

d) Motivera svaret i c-uppgiften ovan!

Uppgift 6 (4 p)

a) Vad skulle transaktioner kunna behövas till i EU:s valdatabas?

b) Databashanterare brukar använda en loggfil. Vad är det som lagras på loggfilen, och vad har man för nytta av den i samband med transaktioner?

Uppgift 7 (5 p)

a) (3p) Visa med ett par enkla exempel vad man har SQL-kommandona grant och revoke till. Glöm inte att förklara vad som händer!

b) (2p) Visa hur man kan kombinera grant och revoke med vyer för att ge en mer finkornig kontroll av vad användarna får göra med databasen.

Uppgift 8 (3 p)

Förklara vad ett B-träd är, och särskilt hur B-träd skiljer sig från binära träd. Varför används B-träd ofta i databashanterare?

Uppgift 9 (4 p)

I databaser kan det förekomma redundans av olika slag. Förklara vad som menas med redundans. Beskriv också två olika typer av redundans som kan förekomma, och i vilka sammanhang de förekommer. Vilka fördelar och nackdelar finns med de olika typerna av redundans?