Fiktiv tentamen för 1370 atabasteknik och informationssystem Hösten 2011 Hjälpmedel: Allt man kan tänka sig, men ingen kontakt med hjälpsamma kamrater och inga elektroniska hjälpmedel. 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 100 poäng varav 50 ger säkert godkänt. Lycka till, Serafim
1. En tidningsdistributör, Tiddist AB, sköter, åt några tidskriftsförlag, utbärning av tidningar och tidskrifter till deras prenumeranter i en kommun. Kommunen är indelad i ett antal utdelningsdistrikt och för varje sådant distrikt finns ett antal utdelare. Man har en modell över verksamheten Tidning Prenumeration Prenumerant Tillhör Utdelare istribution istrikt agtyp med följande egenskapsmatris: Typ Namn I-termer E-termer Obj Tidning Namn Prenumerant Pnr Namn, Adress, Tel Utdelare Pnr Namn, Adress, Tel istrikt I Adress agtyp Typ Samb Prenumeration Namn, Pnr Tillhör Pnr, I istribution Pnr, Typ, I där agtyp är vardag eller helgdag och där distriktets adress är adressen dit förlagen levererar levererar tidskrifter och tidningar som sedan Tiddist AB vidaredistribuerar till prenumeranterna. Tiddist AB hoppas, genom bättre service, kunna slå sig in på marknaden och ta en bit av distributionen från posten, som man alltså konkurerar med. a) (10p) Ö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) Man vill också ha förslag på hur modellen skall utökas för att tillåta prenumeranter att få sina tidningar och tidskrifter vidareskickade under semestern, d.v.s. att under en period (med startoch slut-datum) få det man prenumererar på skickat till en tillfällig adress. itt förslag ska omfatta både ändringar i modellen, i egenskapsmatrisen och vad det kommer att få för inverkan på databasstrukturen. 2. Tvärvetenskapliga projektarbeten på högskolan involverar oftast studenter från olika studieinriktningar. För att hålla reda på alla sådana projektarbeten och de studenter som arbetar med dem vill man ha en databas. 1 av 3
Varje projekt har naturligtvis ett start- och ett slutdatum. En institution ger kursen (projektarbetet, men varje kurs omfattar mer än ett projekt). 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 samlat alla termer i en enda tabell. INamn Institutionens namn KNr Kursnummer KNamn Kursnamn PNr Projektets id PNamn Projektets namn Start Projektets startdatum Slut Projektets slutdatum Snr Students id SNamn Students namn SAdress Students adress SINamn Namn på den institution som studenten tillhör a) (15p) Föreslå en bättre struktur. u behöver inte genomföra en formell normalisering men bör för högsta poäng resonera med hjälp av beroenden. u ska inte rita en modell utan föra ett resonemang avseende hur tabellen ska delas upp och redovisa den databasstruktur som du anser vara resultatet av ditt resonemang. b) (8p) Vilka problem kommer får man om informationen lagras i en enda tabell? Ange specifika problem för den här ovan givna strukturen. 3. Utgå från varuhuset, som har följande schema: anställd försäljning leverantör lager avdelning vara (namn, lön, chef, avd) (avd, varunr, volym) (företag, adress) (företag, avd, varunr, volym) (avd, våning) (varunr, typ) Formulera på hyfsad svenska de frågor som leder till följande SQL-satser: (OBS! Vi vill inte ha en uppräkning av allt som utförs av SQL-satserna utan snarare vad någon kan ha ställt som fråga på vardagsspråk, t.ex. kan SQL-frågan select namn from anställd natural join avdelning where våning in (2, 3); komma från att någon frågat vilka jobbar på andra och tredje våningarna? ) a) (4p) create view A(b,c) as select chef, count(namn) from Anställd group by chef; select b from A where b > (select avg(b) from A); 2 av 3
b) (8p) create view A(b,c) as select våning, count(namn) from Anställd natural join avdelning group by våning order by våning; create view (b,e) as select våning, sum(lön) from Anställd natural join avdelning group by våning order by våning; select b, e/c from A natural join ; Formulera en SQL-sats för att besvara följande fråga: c) (10p) Hur många arbetar på de olika avdelningar som säljer bröd? 4. Betrakta modellerna nedan A B C A B C a) (12p) Många menar att det inte är någon skillnad mellan de två tillvägagångssätten och att det nedre är att föredra. Man får tabeller som är lika utom att, i det nedre fallet, man har en extra I-term. Låt I A, I B, I C, I stå för I-termerna i de fyra tabellerna Övre fallet ger en tabell med Nedre fallet ger I A I B I C I I A I B I C Men vilka är skillnaderna? Utred detta med hjälp av kokboken (förel. 3 & 5) samt hur man hanterar I-termerna i SQL (förel.4) b) (8p) Visa hur man kan få båda fallen att fungera exakt likadant (utom med avseende på den extra I-termen (I ) i det senare fallet) med hjälp av SQL (förel.4). 3 av 3