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




Tentamen i

Databasteknik

fredag 3 juni 2022

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


Hjälpmedel: Ordbok för översättning.
Poängkrav: Maximal poäng är 40. För godkänt betyg krävs 24 poäng, varav minst fyra poäng på uppgift 1 och minst fyra poäng på uppgift 2. För den som följt kursen våren 2022 ger varje i tid inlämnad inlämningsuppgift en extra poäng. Den som inte gått kursen våren 2022 får dessa (fem) extrapoäng ändå.
Resultat: Meddelas senast femton 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

Här är en robotgräsklippare som står och laddar batteriet i sin laddstation:

En robotgräsklippare

Vanliga robotgräsklippare har en ganska enkel styrdator, och är inte uppkopplade på Internet. Nu ska vi bygga en mer avancerad robotgräsklippare, med både Internet och databaser!

Alla gräsklipparna av den här nya typen ska vara anslutna till en server, och där ska det finnas en databas för att hålla reda på dem. Det som ska lagras i databasen är följande:

  1. Kunder som har köpt gräsklipparna. Varje kund har ett unikt kundnummer, och kunderna har också namn, adress, telefonnummer och e-postadress.
  2. Gräsklippare. Varje gräsklippare har ett unikt nummer. Den har också en ägare, nämligen en av kunderna, och den har också ett metertal, som anger hur många meter den kört.
  3. Fastigheter, som är de platser som gräsklipparna klipper gräs på. Många tror att ordet "fastighet" betyder hus, men det är egentligen markområdet som huset ligger på. Varje fastighet har en unik fastighetsbeteckning, till exempel Ekhov Ektorp 1:3 eller Sorsele Kronoöverloppsmarken 1:1, och en adress.
  4. Klippområden, som är en gräsyta som ska klippas. Varje klippområde har ett unikt nummer och en yta (mätt i kvadratmeter), och den hör till en viss fastighet. En fastighet kan ha flera olika klippområden, till exempel att det finns en gräsmatta på framsidan av huset och en annan på baksidan.
  5. Vilka klippområden som de olika gräsklipparna ska klippa (även om de inte är där och klipper just nu). På ett riktigt stort klippområde, till exempel en fotbollsplan, kan det behövas flera gräsklippare som klipper samma område. På en fastighet med flera klippområden kan samma gräsklippare klippa flera klippområden.
  6. På vilket klippområde varje gräsklippare befinner sig just nu.
Den här nya typen av gräsklippare kan själv navigera mellan olika klippområden.

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 (5 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 eller CTE:er om det underlättar, men skapa inte nya tabeller.

a) (2p) Här står en gräsklippare med numret 4711. Vad är telefonnumret till ägaren?

b) (2p) Ett antal gräsklippare ska klippa klippområden på fastigheten Burken 17:22. Vad är numren på de av dessa gräsklippare som har gått mer än en miljon meter?

c) (1p) Vad är den sammanlagda ytan av alla klippområden?

d) (3p) Vad heter den fastighet som har den största sammanlagda gräsytan (alltså den sammanlagda ytan av alla klippområdena på den fastigheten)?

e) (2p) Ibland blir det fel i databasen, till exempel om det står i databasen att en gräsklippare just nu befinner sig på ett klippområde som det inte är angivet att den ska klippa. Finns det några sådana gräsklippare? Vi vill veta deras nummer. (Om du skulle gjort ett databasschema i uppgift 2 som gör att detta fel inte kan uppstå, förklara då varför felet inte kan uppstå!)

Uppgift 4 (5 p)

Sökning a i uppgiften ovan, om telefonnumret till ägaren av gräsklippare 4711, körs ofta, men med olika gräsklipparnummer. Vi ser också att det inte finns några index i databasen, inte ens på nycklar.

a) Vilka index bör man skapa för att den angivna frågan ska gå snabbare att köra? Skriv create index-kommandon!

b) Ange ett index som inte skulle få den frågan att gå snabbare att köra, och förklara varför det indexet inte hjälper.

c) I vår databas fanns det inga index på nycklar, men de flesta moderna databashanterare skapar automatiskt ett index på de primärnycklar och andra kandidatnycklar som man angett. Varför gör de det?

Uppgift 5 (3 p)

Även sökning c, om den sammanlagda ytan av alla klippområden, körs ofta, och vi vill göra den snabbare. Hur skulle man kunna göra det?

Uppgift 6 (3 p)

Relationsdatabashanterare brukar ha inbyggda mekanismer för att upprätthålla de så kallade ACID-egenskaperna. Välj en av dessa egenskaper, förklara kort vad den innebär, och visa med ett exempel från gräsklippardatabasen vad som skulle kunna hända om den inte upprätthölls.

Uppgift 7 (3 p)

En av de första teknikerna för att skapa webbplatser som visar data ur en databas var så kallade CGI-skript. Hur fungerar ett CGI-skript, och varför brukar man inte längre använda dem?

Uppgift 8 (4 p)

a) Jag har glömt vad SQL-kommandona för att ge användarna rättigheter till tabeller, och sedan ta bort dem, heter. Det är inte create access right och drop access right, utan vad heter kommandona egentligen?

b) Om jag vill ge användaren Anna rätt att ändra rader i tabellen Kameler, men inte lägga till eller ta bort rader, hur skriver jag det kommandot?

c) Om jag vill ge användaren Bengt rätt se alla data i tabellen Kameler, men bara de kameler som har en vikt större än 1000 kilo, hur ska jag göra då? (Det finns en kolumn Vikt i den tabellen.)

Uppgift 9 (2 p)

Visa med ett exempel vad SQL-injektion är, och hur det fungerar!