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



Tentamen i

Databasteknik
för D2 m fl

torsdag 21 mars 2019

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


Hjälpmedel: Ordbok för översättning.
Poängkrav: Maximal poäng är 37. För godkänt betyg krävs 20 poäng, varav minst fyra poäng på uppgift 1 och minst fem poäng på uppgift 2.
Resultat: Meddelas på kursens hemsida eller via e-post senast torsdag 11 april 2019.
Återlämning av tentor: Elektroniskt via Studenttjänster.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.



LYCKA TILL!

Scenario till uppgifterna

Svenska kraftnät är en myndighet som, enligt deras egen webbplats, "ansvarar för att elöverföringssystemet är säkert, miljöanpassat och kostnadseffektivt - i dag och i framtiden". Den har hand om stamnätet för elkraft. Som illustration använder vi denna bild, som visar något elektriskt:

Någon sorts transformator

Därför måste de förstås övervaka elnätet, och det gör de bland annat med hjälp av larm, som skickas in från så kallade larmsändare, som sitter i transformatorstationer, i kopplingsstationer och på andra platser. Larmen handlar om att något blivit fel ute i elnätet. Det kan vara maskiner som går sönder, bränder, inbrott och andra problem. Larmen ska sparas i en databas.

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

  1. Anläggningar av olika slag, till exempel transformatorer och kopplingsstationer. Varje anläggning har ett unikt nummer, ett unikt namn och en adress. Adressen behöver inte vara unik, för det kan till exempel finnas en transformator och en kopplingsstation på samma plats.
  2. Larmtyper. Varje larmtyp har ett unikt nummer och ett unikt namn, till exempel brandlarm. Vi vill att det ska vara enkelt att lägga till nya typer av larm, till exempel monsterattack, ifall monsterattacker skulle bli vanliga där ute i skogarna där kraftledningarna går.
  3. Larmsändare. Detta är de apparater som skickar iväg larmen, via mobilnätet, trådnätet eller på annat sätt. Varje larmsändare har ett unikt nummer, och den sitter i en viss anläggning.
  4. Larm. Varje larm har ett unikt nummer, ett datum och ett klockslag, och det kommer från en viss larmsändare. Varje larm är också av en av larmtyperna, som nämndes ovan.
  5. Operatörer. Det är de personer som sitter i kontrollrummen, läser vilka larm som kommer in, och sen beslutar om åtgärder. Varje operatör har ett unikt användarnamn, och dessutom sitt vanliga namn, som inte behöver vara unikt.
  6. Dessutom ska det gå att se vilka operatörer som tagit emot vilka larm. Ett och samma larm kan gå till flera olika operatörer, och varje operatör kan förstås ta emot flera olika larm.

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

Eftersom implementationen i uppgiften ovan ska vara bra, uppfyller alla tabellerna förmodligen BCNF. Visa hur man kunde gjort någon av tabellerna på ett sätt som bryter mot BCNF. Ange också vilken som är den högsta normalform (av 1NF, 2NF, 3NF och BCNF) som tabellen då uppfyller, och visa varför den inte uppfyller nästa högre normalform. Förklara också något problem som uppstår i tabellen, beroende på den sämre normaliseringen.

Uppgift 4 (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) Vilka olika larmtypsnamn innehåller attack? Det skulle till exempel kunna vara monsterattack, attackflygplanskrasch och skattackumulator.

b) (1p) Vad är numren på de larmsändare som är placerade i anläggningen Grythyttan 7?

c) (2p) Hur många larm har sammanlagt kommit från anläggningen Grythyttan 7?

d) (2p) Hur många larm av var och en av de olika larmtyperna har kommit från anläggningen Grythyttan 7?

e) (2p) Vilka larm har ännu inte mottagits av någon operatör? Vi vill veta de larmens nummer, larmtyp, och namnet på anläggningen som de kommer från.

f) (3p) Av vilken larmtyp har det kommit flest larm?

Uppgift 5 (3 p)

Vi vill att SQL-frågorna i uppgiften ovan ska gå snabbare att köra. Vilka index bör man skapa för att

a) fråga a
b) fråga b
c) fråga c

ska gå snabbare?

Uppgift 6 (5 p)

Förklara följande begrepp från databasområdet:

a) relation
b) referensintegritet
c) null
d) inre join
e) yttre join

Uppgift 7 (4 p)

En viss databashanterare har så kallad "auto-commit", vilket betyder att varje SQL-kommando räknas som en egen transaktion, så länge man inte uttryckligen startar en transaktion med kommandot "start transaction".

Vi startar två olika klientprogram som kopplar upp sig mot databasservern, och ger följande SQL-kommandon, i den angivna ordningen, i de två klienterna. Vad blir resultatet av var och en av de tio select-frågorna?

Klient 1 Klient 2
  create table Fåglar
(Nummer integer not null primary key,
Namn char(10) not null);
insert into Fåglar values (1, 'Örn');  
  select * from Fåglar; -- Fråga 1
select * from Fåglar; -- Fråga 2  
start transaction;
insert into Fåglar values (2, 'Falk');
select * from Fåglar; -- Fråga 3
commit;
select * from Fåglar; -- Fråga 4
 
  select * from Fåglar; -- Fråga 5
start transaction;
insert into Fåglar values (3, 'Gam');
select * from Fåglar; -- Fråga 6
rollback;
select * from Fåglar; -- Fråga 7
select * from Fåglar; -- Fråga 8  
  start transaction;
start transaction;  
  select * from Fåglar; -- Fråga 10
  commit;
rollback;