Institutionen för Data- och Systemvetenskap SU/KTH Maria Bergholtz och Paul Johannesson Lösningsförslag till Tentamen, 022 2I-00 Informationssystem och databasteknik För att erhålla betyget tre räcker 36 poäng För att erhålla betyget fyra räcker 42 poäng För att erhålla betyget fem räcker 48 poäng OBS att projektuppgiften kan ge två eller tre bonuspoäng
Uppgift, 0p. a) Ett flertal felaktigheter finns, några är följande: - Ingen åtskillnad görs mellan produkt och produkttyp - Man kan inte beskriva hur en kund konfigurerar en produkt vid beställning - En produkt kan bara säljas till en kund - KUND har chaufför som attribut b) KOMPONENTTYP kompnummer listpris vikt volym PRODUKTTYP produktnummer produktnamn listpris vikt volym KUND namn..* BESTÄLLNING KONFIGURATION antal KOMPONENT nummer PRODUKT serienummer inspektor inspektor2 0.. LEVERANS datum chaufför c) Ja, man kan generalisera PRODUKTTYP och KOMPONENTTYP. Uppgift 2, 6p. Uppgift 2. a) Många-till-många associationen har ej blivit en egen relation. Nycklar saknas. Associationerna mellan A och B, B och C, D och E har ej översatts. b) A(Aid) B(Bid, Aid) C(Cid, Bid)
Ass(Cid, Did) D(Did, Eid) E(Eid ) B.Aid << A.Aid C.Bid << B.Bid Ass.Cid << C.Cid Ass.Did << D.Did D.Eid << E.Eid Uppgift 3, 5p. Inget lösningsförslag ges, jämför med inlämnade och rättade uppgifter från seminarium 6. Uppgift 4, 5p. Uppgift 4 a) FALSKT. Låt D = {a b}, D2 är tomma mängden Låt r = a x x y b y z x r innehåller alltså tre tuppler. Relationen r tillhör vänsterledet, eftersom D skuret D2 är lika med tomma mängden. Men r tillhör inte högerledet, eftersom r ej uppfyller beroendet i D. b) SANT. Antag att en relation r tillhör vänsterledet. Då uppfyller den alla beroenden i D union D2, d.v.s. alla beroenden i D och i D2. Då uppfyller den alla beroenden i D. Och den uppfyller alla beroenden i D2. Så den tillhör högerledet. Antag att en relation r tillhör högerledet. Då uppfyller den alla beroenden i D. Och den uppfyller alla beroenden i D2. Därmed uppfyller den alla beroenden i D union D2. Så den tillhör vänsterledet. Uppgift 5, 6p. ART Artnamn Medelvikt Utbredning Tiger 200 Asien
Gepard NULL Afrika Lejon 250 Afrika DJUR Djurnamn Vikt Art Shere Khan 200 Tiger Simba 300 Lejon Teeny 00 Lejon Weeny 50 Lejon Rama 250 Lejon Wilma 450 Lejon ZOO ZooNamn Adress Antal_djur Kålmården Bråviken 2 London Zoo London W 4 BOENDE Znamn Dnamn Från Till Kålmården Teeny 97032 NULL Kålmården Weeny 9923 NULL London Zoo Simba 98032 NULL London Zoo Rama 9923 NULL London Zoo Wilma 98032 NULL London Zoo Shere Khan 98032 NULL London Zoo Teeny 95032 97032 London Zoo Weeny 99032 9923 London Zoo Weeny 9032 9223 Kålmården Rama 95032 9923 DJUR.Art << ART.Artnamn BOENDE.Znamn << ZOO.Zoonamn BOENDE.Dnamn << DJUR.Djurnamn π Till (σ Från<98032 (BOENDE)) a) Inte så mycket att säga om, de kolumner som har NULL i den enda utsökta kolumen ( Till ) kommer inte med. I övrigt ska villkoret på Från -kolumnen vara uppfyllt för de rader som kommer med. Till -------------------------- 9723 9223 9923 b) π DNamn (BOENDE X Zoonamn=Znamn AND Adress= LondonW ZOO) Ange hur resultatmängden kommer att se ut om uttrycket ovan exekveras. Kolumn-rubrik (-er) och resultat-tupler ska anges.
Här kan tecknet för JOIN debatteras. Eftersom jag bundit ihop mitt JOIN-tecken med ett villkor avsåg jag ett THETA-JOIN uttryck men här godtar jag välmotiverade NATURAL-JOIN tolkningar. Resultatet blir förstås alla som någonsin bott på London Zoo: DNAMN --------------- Simba Rama Wilma Teeny Weeny Shere Khan Dvs, rubbet. Weeny som bott två gånger på London Zoo kommer ändå bara med en gång eftersom relationsalgebran inte tar hänsyn till dubletter. c) Här kan man rakt av använda sig av en aggregatfunktion som den är definierad i läroboken. Dvs vi har ett grupperande attribut, Art, för vilket vi vill aggregera ihop vikterna för alla djur som tillhör den arten. Här kan man elaborera med summeringar och divisioner men enklast är att använda den redan färdiga genomsnittsfunktionen. ArtF AVG(Vikt) (DJUR) Grupp- Vald Den kolumn som Tabellen erande aggreg- som ska aggregeras attribut ering I SQL (ingår inte i frågan) skulle det bli något liknande: SELECT Art, AVG(Vikt) FROM DJUR GROUP BY Art ; --------------------------------------------------------------------------------------------------------- ART 2 --------------- ----------- Lejon 250 Tiger 200 2 record(s) selected. a) Uppgift 6, 8p.
SELECT Djurnamn, Vikt FROM DJUR WHERE Art NOT IN (SELECT Artnamn FROM ART WHERE Utbredning = Afrika ) DJURNAMN VIKT --------------- ----------- Shere Khan 200 record(s) selected. b): SELECT Djurnamn FROM DJUR WHERE NOT EXISTS (SELECT Zoonamn FROM ZOO WHERE Zoonamn NOT IN (SELECT Znamn FROM BOENDE WHERE Dnamn=Djurnamn)) Den gamla vanliga konstruktionen för att simulera en KVOT-operator i SQL. I detta fall för att ta fram alla djur som bott på alla upptänkliga Zoo:n. Detta har bara de tre nedan gjort. Jag har fimpat ev. dubletter som ev. uppstått eftersom somliga av de djur som bott på alla zoo:n bott på somliga flera gånger. DJURNAMN --------------- Rama Teeny Weeny 3 record(s) selected. c) Skriv en generell SQL-fråga som ger namn och vikt för alla djur som aldrig bott på Kålmården.
Här gäller det att ta fram de djur för vilka det är sant att de inte står på någon rad i tabellen BOENDE där ordet Kålmården finns i Znamn-kolumnen. En NOT-IN konstruktion eller ett EXCEPT mellan två mängder fungerar. SELECT Djurnamn, V ikt FROM DJUR WHERE Djurnamn NOT IN (SELECT Dnamn FROM BOENDE WHERE Znamn = Kålmården ) Alternativt SELECT Djurnamn, Vikt FROM DJUR, BOENDE WHERE Dnamn=Djurnamn EXCEPT SELECT Djurnamn, Vikt FROM DJUR, BOENDE WHERE Dnamn=Djurnamn AND Znamn= Kålmården d). Här var det meningen att man skulle skriva ett SQL-uttryck som gav antalet gånger ett visst djur bott på ett visst Zoo. Alltså t ex Djurnamn, Zoonamn och antalet gånger. Detta görs enklast via SELECT Dnamn, Znamn, count(znamn) AS ANTAL FROM BOENDE GROUP BY Dnamn, Znamn Uppgift 7, 0p. Betrakta följande relationsscheman som alla är i högre normalform än 0NF: TABELL(A, B, C, D, E, F, G) Denna tabell är i NF men inte i 2NF. Den bryter mot 2NF pga att vi har ett icke-nyckel attribut, E, som är bestämt av endast en del av primärnyckeln (det funkt. beroendet B E). (2p) TABELL2(H, I, J) Denna tabell är i 2NF men inte i 3NF. Den bryter mot 3NF pga vi har ett funktionellt beroende mellan två icke-nyckelattribut (I J). Därmed har vi också ett transitivt beroende mellan ett ickenyckelattribut och nyckeln. Däremot är vi i 2NF eftersom vi är i NF och nyckeln inte är sammansatt. (p) TABELL3(K, L, M) Denna tabell är i 3NF men inte i BCNF. Vi har två funktionella beroenden att beakta för denna tabell, KL M och M L. Den ena determinanten (KL) är förvisso en kandidatnyckel (den är tom vald till primärnyckel). Den andra determinanten, M, är dock inte en kandidatnyckel (räcker inte till för att identifiera övriga attribut unikt, vi vet t ex ingenting om hur många världen som kan finnas på K, givet ett M). Alltså är vi inte i BCNF. Bäst att undersöka 3NF också. Här får det inte finnas några transitiva beroenden mellan ickenyckelattribut och nyckeln. Och det gör det inte heller. Det finns ett funkt. ber. så att en del av nyckeln är bestämd av ett icke-nyckelattribut men detta leder inte till ett transitivt beroende i andra riktingen. För att vara säkra på att vi verkligen var i 3NF så måste vi även kolla om vi är i 2NF. Då ska alla icke-nyckelattribut vara fullständigt funkt. bestämda av nyckeln. Och det gäller för vårt enda icke-nyckelattribut M.(3p)
TABELL4(O, P, Q) Denna tabell är i BCNF. Det enda funktionella beroende vi har att beakta är O PQ. Dvs primärnyckeln bestämmer övriga attribut funktionellt. Något annat funkt. ber. som kan ge upphov till brott mot 2NF, 3NF eller BCNF finns inte. Alla ickenyckelattribut är ju fullständigt funktionellt bestämda av nyckeln, det finns inga transitiva beroenden mellan nyckeln och något icke-nyckel attribut. Alla determinanter (vi har bara en) är kandidatnycklar. (p) TABELL5(R, S, T, U) Denna tabell är i 2NF. Att den inte är i 3NF beror på att det finns ett transitivt beroende mellan ett icke-nyckel attribut, U, och nyckeln RS. Till att börja med gäller att RS TU. IR4 (ett av Armstrongs teorem) ger då att RS även bestämmer U och RS bestämmer T, dvs RS U och RS T. Vidare har vi (IR) att RS S (eftersom S RS). Vi kombinerar RS S och RS T till (IR5) RS ST. Nu har vi: RS ST ST U Eftersom ST inte är någon delmängd av primärnyckeln (eller någon kandidatnyckel) så har vi ett transitivt beroende (se t ex IR3 och sid 489 i Fundamentals) mellan RS (primärnyckeln) och U. (3p) (Primärnycklar är angivna som understrukna och med fet stil) Följande funktionella beroenden råder (inget funktionellt beroende spänner över mer än en tabell): A B C D E F G B E H I J I J KL M M L O P Q R S T U ST U Övrigt Ange Din email-adress för att underlätta kommunikation! Fyll i kursutvärderingen som kan nås från kursens hemsida!