Fiktiv tentamen för DD1370 Databasteknik och informationssystem Torsdag 4 dec 2008 Hjälpmedel: Allt inklusive kursbok, försläsningsanteckningar, gamla tentor och egna anteckningar, men inte tentalösningar och kontakt med hjälpsamma kamrater. Tänk på: Skriv högst en uppgift på varje blad. Använd endast framsidan på varje blad. Uppgifterna kommer inte i svårighetsordning. Skriv tydligt, motivera svaren endast begriplig och läsbar lösning ger poäng. Maximal poäng finns angiven inom parentes vid varje uppgift. Totalt kan tentamen ge 40 poäng varav 20 ger säkert godkänt. Lycka till, Serafim
1. Ett bokförlag har ett antal specialister (fackredaktörer) anställda. Man vill organisera alla dessa så att varje redaktör tillhör en viss avdelning vilken beror på vilket område man är verksam i. Då de utför sina uppdrag arbetar de i projektform. Varje projekt omfattar en redaktör som arbetar tillsammans med typografer och tryckare. Man vill hålla reda på alla anställda och alla projekt. Varje projekt har naturligtvis ett start- och ett publiceringsdatum. Dessutom har det en eller flera författare som via sina verk är knutna till projektet. Man har behov av en historik över alla projekt, d.v.s. att man håller reda på såväl pågående som avslutade projekt. Initialt har man gjort en datamodell över verksamheten Författare Avdelning Medverkan Anställd_på Ämnesområde Berör_område Projekt Arbetar_på Anställd Specialist_på med följande egenskapsmatris: Typ Namn I-termer E-termer Obj Författare Fnamn Projekt Pnr Projektnamn Ämnesområde Änr ÄNamn, Beskrivning Anställd Anr Namn, Adress, Tel Avdelning Avdnamn Samb Medverkan Fnamn, Pnr Berör_område Pnr, Änr Arbetar_på Pnr, Anr Anställd_på Anr, Avdnamn Specialist_på Anr, Änr a) (25p) Överför modellen till databasstruktur. Motivera varje steg i överföringen (t.ex. genom angivande av vilka regler i kokboken som använts). b) (25p) Egentligen vill man ju även veta när ett bokprojekt initierats och när den resulterande boken skall publiceras, samt när en anställd började respektive slutade arbeta på en viss avdelning (man kan sluta på en avdelning man senare återanställs på). Utöka modellen och/eller egenskapsmatrisen så att den/de representerar även detta. Vad får utbyggnaden för effekt på databasstrukturen? 1 av 2
2. Förlaget i föregående uppgift har kontakt med ett antal bokhandlare som säljer deras publicerade böcker. Man vill, månad för månad få reda på hur mycket som sålts av varje bok. Man vill även hålla reda på både förlagspris och försäljningspris för varje bok och bokhandel. Vissa (stora) kunder har dessutom rabatt på förlagspriset. Som en första anstas har man samlat alla termer i ett enda register enligt: Bokhandlare T.ex. Akademibokhandeln Adress T.ex. Mästersamuelsgatan 14 Postadress T.ex. 112 14 Stockholm FörfattarNamn En eller flera per bok BokISBN BokTitel Sålt Antal sålda en viss månad Månad År och månad Rabattsats Aktuell rabatt för denna bokhandlare a) (20p) Föreslå en bättre struktur. Du behöver inte genomföra en normalisering, men för högsta poäng är det nödvändigt att resonera kring beroenden. b) (6p) Varför kommer man att få problem om informationen lagras i ett enda register? Illustrera med exempel från det givna problemet. 3. Översätt till (begriplig?) svenska utgående från varuhuset, som har följande schema: anställd (namn, lön, chef, avd) försäljning (avd, varunr, volym) leverantör (företag, adress) lager (företag, avd, varunr, volym) avdelning (avd, våning) vara (varunr, typ) a) (5p) CREATE VIEW tmp(avd, n) AS SELECT avd, COUNT(*) FROM Försäljning GROUP BY avd; SELECT avd FROM tmp WHERE n = (SELECT MAX(n) FROM tmp NATURAL JOIN avdelning WHERE våning = 2); b) (5p) SELECT namn FROM anställd A WHERE NOT EXISTS (SELECT * FROM anställd WHERE A.lön > lön AND avd IN (SELECT avd FROM avdelning WHERE våning = 2)); c) (5p) SELECT företag FROM lager L WHERE EXISTS (SELECT * FROM lager WHERE L.företag <> företag AND L.varunr = varunr); 2 av 2
4. a) (5p) Förklara vad som menas med kandidatnyckel och varför kandidatnycklar är viktiga b) (4p) Förklara vad man menar med ett transitivt beroende 3 av 2