Skriftlig eksamen i Datalogi Databaser Sommer 2001 Dette eksamenssæt består af 4 nummererede sider (incl. denne). Der er 4 opgaver, som ved bedømmelsen tillægges følgende vægte: Opgave 1: 20% Opgave 2: 30% Opgave 3: 30% Opgave 4: 20% Alle sædvanlige hjælpemidler er tilladt. Side 1 af 5
Eksamensopgaver, Databaser, Juni 2001 2 timers skriftlig prøve. Opgave 1 (20%) Med bogens (Jeff Ullman & Jennifer Widom: A First Course in Database Systems, Prentice-Hall, 1997) udgave af ER-notation er der herunder skitseret en database. a b c d e f A AB B BC C ISA ISA CD B1 B2 D g h i j Både B og D er knyttet til C igennem sammenhænge. Hvad er forskellen i måden de er knyttet på? B er uafhængig, mens D er svag, dvs. den er identificeret igennem C s attributter. Angiv et relationelt databaseskema, der kan omfatte en database svarende til den skitserede. Noter skemaet på den simple form relationsnavn(attributnavn1, attributnavn2, ). Nøgler skal angives ved understregning. A(a,b) AB(a,c) B(c,d,e,f) C(e,f) B1(c,g) B2(c,h) D(e,f,i,j) Hvilke af følgende afhængigheder må gælde i den skitserede database: 1) d -> c 2) c -> d 3) a -> d 4) a c -> b d 5) a c -> e f 6) g -> c 7) c -> g 8) c -> e f 9) i -> e f Svar 3 2) c -> d, 4) a c -> b d, 5) a c -> e f, 7) c -> g, 8) c -> e f Side 2 af 5
Opgave 2 (30%) Givet en database til et såkaldt GIS (Geografisk Informationssystem) med et relationelt databaseskema, hvori følgende indgår. punkt(punktnr,x,y) linie(linienr, punktnr1, punktnr2) område(områdenr) områdepunkt(områdenr,sekvensnr,punktnr) Relationen punkt indeholder punkter angivet ved koordinater x og y og identificeret ved punktnr. I relationen linie gemmes linier identificeret ved linienr og med punktnr1 og punktnr2 som start- og slut-punkt, idet de refererer til punkter i punkt-relationen, mens områder er angivet ved et entydigt nummer i område. Relationen områdepunkt definerer, for hvert område, hjørnepunkterne i et antal områdepunkt-tupler (der også igen refererer til punkter i punkt-relationen). F.eks. vil de tre områdepunkt-tupler {(17,1,7), (17,2,35), (17,3,22)} definere et område afgrænset af linierne, der forbinder første og andet punkt (punktnr 7 og 35), andet og tredje punkt (punktnr 35 og 22), samt tredje og første punkt (22 og 7). Bemærk områdepunkt-relationens sekvensnummer til fortløbende nummerering af punkter som angivelse af rækkefølgen for punkterne (i eksemplet 1, 2, 3). Skitser denne database i form af et ER-diagram med bogens notation. punknr x y punkt start slut linie linienr sekvens områdepunkt områdenr område Hvis der i område-relationen findes områder med kun 1 eller 2 punkter er de jo ikke rigtige områder (men blot punkter eller linier). Vi kan således definere en begrænsning, der siger at et område skal have tilknyttet mindst 3 punkter. Angiv her et SQL-udtryk (en forespørgsel), hvormed det kan undersøges om databasen overholder denne begrænsning. Følgende bør have tomt svar: select områdenr from områdepunkt group by områdenr having count(sekvensnr)<3 Relationen linie indeholder som nævnt linier med reference til endepunkter i punkt, hvori punkters koordinater er registreret. Skriv en forespørgsel, der finder den længste linie i relationen linie. Tip: En linies længde er afstanden imellem endepunkterne, og afstanden imellem to punkter med koordinater (x1,y1) hhv. (x2,y2) er ( x2 y 2 2 x1) + ( y2 1), hvilket kan formuleres i SQL ved sqrt(power(x2-x1,2)+power(y2-y1,2)) Side 3 af 5
Svar 3 select max(sqrt(power(p2.x-p1.x,2)+power(p2.y-p1.y,2))) længde from linie l,punkt p1,punkt p2 where l.punktnr1=p1.punktnr and l.punktnr2=p2.punktnr Opgave 3 (30%) Skemaet herunder dækker et registreringsbehov i bilbranchen. bil(mærke, model, motortype, motorydelse, forhandler, omsætning) Antag at forhandler er funktionelt afhængig af mærke, at motorydelse er funktionelt afhængig af motortype og, at omsætning er funktionelt afhængig af forhandler. Find et skema som svarer til bil normaliseret til Boyce-Codd normalform. bil(mærke, model, motortype) mærke(mærke, forhandler) forhandler(forhandler, omsætning) motor(motortype, motorydelse) Angiv nu et algebra-udtryk der samler resultatet fra spørgsmål 1 i én relation, der er identisk med den oprindelige relation bil. bil mærke forhandler motor Formuler hvad en flerværdi-afhængighed: mærke ->> model, ville svare til. (OBS: den gælder næppe i praksis). Svar 3 At model og motortype er uafhængige: Et givent mærke har et antal modeller og et antal motortyper og findes således i samtlige kombinationer af model og motortype. Spørgsmål 4 Normaliser skemaet fra spørgsmål 1 til fjerde normalform udfra mærke ->> model. Svar 4 bilmodel(mærke, model) bilmotor(mærke, motortype) mærke(mærke, forhandler) forhandler(forhandler, omsætning) motor(motortype, motorydelse) Opgave 4 (20%) Et engros-firma administrerer køb fra leverandører og salg til kunder i en relationel database. Skemaet for basen er følgende: kunde(knr, navn) vare(vnr, navn, salgspris) leverandør(lnr, navn) salgsordre(sonr, knr, vnr, santal, rabat) købsordre(konr, lnr, vnr, kantal, købspris) Primærnøgler er understreget. Engros-firmaet har registreret kunder med nummer (knr) og navn i kunde, varer med nummer (vnr), navn og salgspris i vare samt leverandører med nummer (lnr) og navn i leverandør. En salgsordre er registreret i salgsordre med salgsordrenummer (sonr), Side 4 af 5
kundenummer (knr), varenummer (vnr), antal styk (santal) og en rabat i procent. En købsordre er registreret i købsordre med købsordrenummer (konr), leverandørnummer (lnr), varenummer (vnr), antal styk (kantal) og en købspris pr. styk. Formuler følgende forespørgsler i SQL: a) Angiv samlet pris for alle salgsordrer fra kunden med navn "Jensen". Rabat er angivet i procent. b) Angiv avance (forskel imellem købs-og salgspris) før rabat for hver købsordre hos leverandøren med navn "Petersen". a) select sum(salgspris * (100-rabat) / 100) from salgsordre kunde k, so, vare v where k.navn= Jensen and k.knr=so.knr and so.vnr=v.vnr b) select konr,kantal*(salgspris-købspris) avance from købsordre ko, leverandør l, vare v where l.navn='petersen' and l.lnr=ko.lnr and v.vnr=ko.vnr Forklar hvad svaret udgør på SQL-forespørgslen: select navn from kunde where knr in (select knr from salgsordre where vnr in (select vnr from vare where navn="vaskepulver"))) og omskriv denne så "in"-operatoren ikke anvendes. Navne på kunder som har bestilt vaskepulver. Uden in-operator: select navn from kunde k, salgsordre so, vare v where v.navn= vaskepulver and k.knr=so.knr and so.vnr=v.vnr Side 5 af 5