Databasteknik 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för: Tentamen NDA01G Öppen för alla Tentamenskod: Tentamensdatum: 2017-11-02 Tid: 14:00-19:00 Hjälpmedel: Inga hjälpmedel är tillåtna Totalt antal poäng på tentamen: 40 poäng För att få respektive betyg krävs: G >= 20, VG >= 32 Allmänna anvisningar: Skriv tentamenskod på varje blad du lämnar in. Skriv tydligt (oläsliga svar kan ej bedömas = 0 poäng) och motivera dig svar väl. Numrera sidorna och börja varje ny uppgift på ett nytt blad. Om du anser att en fråga är svår att förstå eller felaktigt ställd, skriv ner din tolkning av frågan tillsammans med svaret. Nästkommande tentamenstillfälle: 2017-12-13 Rättningstiden är i normalfall 15 arbetsdagar, till detta tillkommer upp till 5 arbetsdagar för administration, annars är det detta datum som gäller: Viktigt! Glöm inte att skriva Tentamenskod på alla blad du lämnar in. Lycka till! Ansvariga lärare: Telefonnummer: 1
ALLMÄNT 1. Varför valde man att byta från filbaserade system till databassystem? (2p) 2. Vad är en databashanterare (DBMS) och vilken funktionalitet (service) bör varje (3p) databashanterare erbjuda? Enligt Codd skall varje DBMS erbjuda 8 olika typer av funktionalitet. 3. Redogör noggrant för innehållet i de tre nivåerna i ANSI-SPARC arkitekturen, (3p) samt vad de tre nivåerna kallas. Redogör också för logiskt- och fysiskt dataoberoende och vad detta innebär. RELATIONSMODELLEN 4. Relationsmodellen består av 3 delar; en strukturell del, en integritetsdel och en (3p) manipulationsdel. Redogör för integritetsdelen i relationsmodellen och ge exempel på minst 4 olika begräsningar. 5. Förklara nedanstående begrepp. (3p) a) Kandidatnyckel b) Alternativ nyckel c) Intension d) Tupel e) Basrelation f) Vy REALISERING 6. Redogör för en transaktions ACID-egenskaper. (2p) 7. Du jobbar som databasadministratör på ett företag och märker att nedanstående (2p) transaktion (SELECT-satsen) tar alldeles för lång tid. Vad kan du göra för att snabba upp denna transaktionen? Ge åtminstone ett par olika förslag. 2
MODELLERING 8. Redogör för var och en av följande entitetstyper med ett exempel samt (1+1p) förklara hur de skrivs i relationsdatamodellen. a) Objektifiering av sambandstyp. b) Svaga entiteter. 9. Det kommunala bussbolagets affärsidé är att erbjuda allmänheten (4+2p) transportering i sin mellanstora stad i sydliga Sverige. Det mesta rullar på bra för bussbolaget, man har gott om förare som bemannar bussarna och passagerarna är nöjda med tjänsten som bussbolaget levererar. Vid en granskning av det gamla systemet har man upptäckt att det finns diverse problem med databasen och behöver uppdatera dess design för att lämpa sig till hur den aktuella verksamheten ser ut idag. Företaget har många förare som alla delar på de bussar som finns. Ett vanligt arbetspass för en förare är att denne har sedan tidigare blivit inplanerat på en rutt. Under dagens rutt behöver föraren göra vissa stop, till exempel kan en förare börja sin avfärd vid Adolfsbergskolan och avsluta sin rutt vid Slottet och där emellan kommer bussföraren göra ytterligare stop på de hållplatser som är bestämda. Hållplatsstoppen görs efter ett tidsschema under rutten. Till exempel så har rutten mellan Marieberg och Almby flera stopp. Sedan vänder föraren och kör samma rutt, fast baklänges, och på detta vis fortsätter förarens dag tills arbetspasset är slut. Nästa dag kan denne förare ha en helt ny rutt. På dessa bussar finns det ett linjenummer och slutdestination som visas under färd. Till er hjälp finns två tidtabeller på nästa sida som kan vara till nytta (se tabell 1 och 2). a) Skapa en konceptuell datamodell med attributlista utifrån beskrivningen ovan. Ni får själva fylla i med fler attribut än de som nämns ovan om det behövs och antaganden ska uttryckas skriftligt, till exempel sambandstyper (1:1, 1:* eller *:*). b) Skapa, baserat på den konceptuella datamodellen i uppgift a), en logisk datamodell med attributlista. Ni behöver inte skriva modellen som relationsschema, utan UML-diagram räcker. Främmande nycklar skall inte markeras och ni skall inte heller normalisera modellen. 3
Tabel 1. Tidtabell för linje 300, avfärd ifrån Adolfsberg till Slottet. Linje 300 Adolfsberg - Slottet Linjens hållplatser: Adolfsbergsskolan Halltorpsvägen Smedstorpsvägen Björkdalsvägen Hällebovägen Slottet Måndag-Fredag Från Adolfsbergsskolan Tid 5.48 6.45 7.35 5.50 6.47 7.37 6.00 6.57 7.47 6.04 7.01 7.51 6.15 7.12 8.02 6.20 7.17 8.07 17.31 17.33 17.43 17.47 17.58 18.03 Tabel 2. Tidtabell för linje 300, avfärd ifrån Slottet till Adolfsberg. Linje 300 Slottet - Adolfsberg Linjens hållplatser: Slottet Hällebovägen Björkdalsvägen Smedstorpsvägen Halltorpsvägen Adolfsbergsskolan Måndag-Fredag Från Slottet Tid 5.50 6.50 5.52 6.52 6.02 7.02 6.06 7.06 6.18 7.17 6.22 7.22 7.40 7.42 7.52 7.56 8.07 8.12 17.36 17.38 17.48 17.52 18.03 18.08 4
NORMALISERING 10. Nedanstående extension (instans) av en relation är given. Relationen (2p) representerar order (inklusive orderdatum) som kunder har beställt, där en varje order innehåller en mängd produkter med tillhörande beskrivning och enhetspris samt antalet beställda enheter av respektive produkt i varje order. Vilka funktionella beroenden finns i relationen (dvs oavsett instans)? orderid datum kundid förnamn efternamn adress postnummer ort produktid beskrivning enhetspris antal 6 2017-02-18 3 Peter Svensson Ågatan 3 50330 Borås 5 Stol 200 4 6 2017-02-18 3 Peter Svensson Ågatan 3 50330 Borås 7 Bord 400 1 7 2017-02-20 3 Peter Svensson Ågatan 3 50330 Borås 3 Duk 100 2 8 2017-02-23 9 Fredrik Axelberg Övägen 5 21111 Malmö 14 Ficklampa 50 1 8 2017-02-23 9 Fredrik Axelberg Övägen 5 21111 Malmö 2 Batteri 10 4 Följande attribut finns i relationen: orderid - unikt nummer för en order (beställning) datum - beställningsdatum för en order (orderdatum) kundid - unikt nummer för en kund förnamn - en kunds förnamn efternamn - en kunds efternamn adress - en kunds gatuadress postnummer - en kunds postnummer ort - en kunds ort produktid - unikt nummer för en produkt beskrivning - en produkts beskrivning enhetspris - enhetspriset för en produkt antal - antal beställda enheter av en produkt för en viss order 11. Relationen R innehåller 3 funktionella beroenden (och inga andra beroenden). (2p) Vilka kandidatnycklar finns i relationen? R(A,B,C,D,E) fd1: A B fd2: B,C E fd3: E,D A 12. Relationen R innehåller 3 funktionella beroenden (och inga andra beroenden). (2p) R(A,B,C,D,E) fd1: A B,D fd2: D A fd3: C E Relationens kandidatnycklar är: (C,A) och (C,D). Normalisera stegvis relationen till BCNF enligt den generella metoden (dvs där samtliga kandidatnycklar beaktas och inte endast primärnyckeln då normaliseringsreglerna appliceras). För varje normalform som ej uppfylls, ange vilket eller vilka beroenden som strider mot normalformen och vilka åtgärder som vidtas i form av nya relationer och förändringar i existerande relationer. 5
SQL Den här tentans SQL-uppgifter utgår från en databas ni känner till, nämligen Djuriska Försäkringar (=er SQL-labb). Den som händelsevis inte känner till labben behöver inte misströsta, för här kommer en kort förklaring/repetition. Tabeller som berörs av denna tenta: Kund Kunden, med kundid, förnamn, efternamn, adressuppgifter och rabattsats Djur Kundens djur (noll-till-många för varje kund). Ett djur har namn och som främmande nycklar både kundid och rasid. Ras Rasen som ett visst djur har, t.ex. labrador. Tabellen innehåller rasid, namn och även ett artid. Tabellstrukturen ser alltså ut så här: Här är några poster från alla tre tabeller: Kund Djur Ras 6
13. Skapa en topp-tio-lista över raser i registret! (3p) Som bilden nedan visar, hitta alla rasnamn och antalet djur för de tio vanligaste raserna (oavsett ras) och sortera i fallande ordning (dvs börja med flest antal djur). 14. Uppdatera Kundtabellen så att alla som äger en islandshäst får (ytterligare) tio (3p) procents rabatt. Utgå från att användaren inte vet vad islandshäst har för rasid, utan måste ange rasen (islandshäst). 15. Vyer (2p) a) Skapa en vy som visar alla kunder som har någon form av rabatt, dvs mer än noll i rabatt. b) Skriv sedan koden för att köra vyn (dvs visa vyns resultat). Vyn ska sortera på rabattsats fallande (dvs högst rabatt först) se bilden nedan. 7