Scheur de antwoordvellen doormidden. Maak elke vraag op een ander vel. Tentamen Databases voor iku 17 april 2013 13:30-16:30, Educatorium-Gamma Vermeld op elk vel je naam en studentnummer. Indien één van deze zaken ontbreekt, wordt het vel niet nagekeken. Toon bij het inleveren je collegekaart. Schrijf en formuleer duidelijk. Je mag een A4 met aantekeningen raadplegen. Het tentamen duurt 3 uur en bestaat uit 6 opgaven. Gebruikte afko s: 2PL = Two-phase locking 2PC = Two-phase commit BCNF = Boyce-Codd normaalvorm COORD = Coordinator DP = Dependency preserving FD = functional dependency RA = Relationele algebra SQL = SQL (Structured Query Language) Vergeet niet de vakevaluatie in te vullen. Zie de education pagina. Succes! Puntentelling: 1: 20 punten 2: 20 punten 3: 20 punten 4: 20 punten 5: 10 punten 6: 10 punten 1
1 Algemeen Geef van de volgende beweringen aan of deze correct zijn of niet. Een simpel JA of NEE volstaat. Er hoeft geen toelichting gegeven te worden, maar het mag wel, mits je het kort houdt. 1. De key-eigenschap is een speciaal geval van een FD. 2. De foreign key-eigenschap is een speciaal geval van een FD. 3. In een ER-diagram moet je altijd foreign keys vermelden. 4. Twee goede ontwerpers zullen voor dezelfde casus altijd hetzelfde ER-diagram opleveren. 5. Als een schema in 3NF is, is dit schema ook in BCNF. 6. Als een schema in 4NF is, is dit schema ook in BCNF. 7. Niet voor elk relatieschema is een verliesvrije DP BCNF decompositie mogelijk. Bovendien is deze in het algemeen moeilijk te vinden. 8. Als de recoverymanager werkt volgens het UNDO-mechanisme, dan mag deze nooit database-data naar disk schrijven nadat commitment heeft plaatsgevonden. 9. Voor elke database-toepassing is concurrency control noodzakelijk. 10. Als data uit een database wordt geanonimiseerd voordat deze openbaar wordt gemaakt, dan is de privacy van de personen in de database gegarandeerd. 2
2 Functional dependencies We hebben het volgende relatieschema met gegevens betreffende films. IMDB (filmid, genre, company, director, actorid, year, title, character) Voor elke film bestaat een unieke, identificerende code. Hetzelfde geldt voor acteurs. Een film kan mogelijk passen bij verschillende genres. Elke film wordt uitgebracht door een filmmaatschappij (company) en heeft een titel en een regisseur (director). Binnen een film speelt een acteur een karakter. Een karakter kan in meerdere films terugkomen. Denk aan Tarzan of Q en miss Moneypenny in James Bond-films. Geef van de volgende FD s aan of deze wel of niet geldig zijn. Geef een korte toelichting. 1. filmid genre 2. filmid company 3. filmid year 4. title company 5. director company 6. filmid, actorid company 7. actorid character 8. character actorid 9. character, f ilmid actorid 10. actorid, f ilmid character 3
3 Normalisatie Gegeven zijn R = (ABCDEG) en F = {A BC, CD E, AC DE, E D} (i) Bereken een minimal cover voor F. Licht de stappen die u maakt kort toe. (ii) Geef een verliesvrije, 3NF, DP decompositie van R met behulp van het daartoe geschikte algoritme. (iii) Is het hierboven gevonden schema ook in BCNF? Licht toe. 4 Queries Een bedrijf dat gegevens bijhoudt over 1-daagse wielrenklassiekers heeft een database met daarin een tabel waarin gegevens van renners worden bijgehouden, een tabel waarin gegevens van wedstrijden worden bijgehouden en een tabel waarin de deelname van renners aan wedstrijden wordt bijgehouden. Elke renner heeft een uniek rennernummer. Daarnaast wordt van elke renner de naam, het geslacht en het gewicht bijgehouden. Van elke wedstrijd wordt de naam, de datum en de lengte van het parcours bijgehouden. Eveneens heeft elke wedstrijd een uniek wedstrijdnummer. De registratie van de deelname van een renner aan een wedstrijd gaat vergezeld van de tijd waarin de renner de wedstrijd verreden heeft, de finish positie (1 voor de winnaar) en het aantal punten dat de renner in de wedstrijd behaald heeft. R ( rnr, naam, geslacht, gewicht ) WR ( wnr, rnr, tijd, positie, punten ) W ( wnr, naam, datum, lengte ) We hebben de volgende queries: Q1: Geef de namen van de vrouwelijke winnaars. Q2: Geef de namen van de renners die aan tenminste twee wedstrijden hebben deelgenomen. Q3: Geef de nummers en het aantal wedstrijden van de renners die aan tenminste twee wedstrijden hebben deelgenomen. Q4: Geef de nummers, namen en het aantal punten van de renners die tenminste 100 punten hebben gescoord. Hieronder volgen expressies in de RA of in SQL. Geef aan welke queries corresponderen met welke expressies. Efficiëntie is hier niet relevant. De relatie tussen queries en expressies is many-to-many en optioneel. 4
E1: W R2 := W R; π naam (R W R W R2) E2: π naam ((π wnr σ positie=1 (W R)) σ geslacht=v R) E3: π naam (σ positie=1,geslacht=v (W R R) E4: E5: E6: E7: E8: SELECT R.naam FROM R WHERE geslacht = V AND rnr IN (SELECT WR.rnr FROM WR WHERE positie = 1) SELECT R.naam FROM R WHERE geslacht = V AND EXISTS (SELECT WR.rnr FROM WR WHERE positie = 1) SELECT R.naam WHERE geslacht = V AND positie = 1 SELECT R.naam WR1, WR WR2 WHERE R.rnr = WR1.rnr AND R.rnr = WR2.rnr AND WR1.wnr <> WR2.wnr SELECT R.rnr, R.naam, COUNT(WR.punten) WHERE R.rnr = WR.rnr GROUP BY R.rnr, R.naam HAVING COUNT(WR.punten) >= 100 5
E9: SELECT R.rnr, R.naam, SUM(WR.punten) WHERE R.rnr = WR.rnr GROUP BY R.rnr, R.naam HAVING SUM(WR.punten) >= 100 E10: SELECT R.naam, COUNT(*) WHERE R.rnr = WR.rnr GROUP BY R.naam HAVING COUNT(*) >= 2 E11: SELECT R.naam, COUNT(WR.punten) WHERE R.rnr = WR.rnr GROUP BY R.naam HAVING COUNT(WR.punten) >= 2 6
5 Recovery We beschouwen nonquiescent recovery met UNDO logging. Hieronder vind je een log met before images. <START T1> <T1, A, 5> <START T2> <T2, B, 10> <COMMIT T1> <START T3> <T3, C, 10> <START CKPT (T2, T3)> <T2, D, 15> <START T4> <START T5> <T4, F, 25> <T5, H, 12> <COMMIT T2> <COMMIT T5> <COMMIT T3> <END CKPT> <T4, G, 30> Stel dat een crash optreedt direct na <T4, G, 30>. (i) Welk gedeelte van de log file wordt gescand? (ii) Welke transacties worden undone? (iii) Welke transacties worden redone? 7
6 Concurrency Hieronder zijn twee schedules gegeven. (i) Geef aan of deze schedules serializeerbaar zijn of niet. Zo ja, geef dan alle equivalente serieële schedules. Zo nee, geef dan een cycle in de precedentiegraaf. (ii) Geef van beide schedules aan of deze door een 2PL-scheduler getolereerd zouden worden. Licht toe. S1 T1 T2 T3 T4 w[x] r[y] r[x] r[y] w[x] w[z] w[z] S2 T1 T2 T3 T4 w[x] w[y] r[x] r[y] w[z] w[z] Einde 8