Tiedonhallintajärjestelmät T-76.1143 Tentti 16.12.06 1. Esitä ODL-kuvaus seuraavasta. Henkilöillä on nimi ja osoite. Osa henkilöistä on sinkkuja, muut vihittyjä. Vihityillä on puoliso, jonka tiedot täytyy myös olla tallennettuna tietokantaan. Sinkut ovat naimattomia, leskiä tai eronneita. Niistä henkilöistä, jotka on vihitty, mutta ovat nykyisin sinkkuja talletetaan heidän aiemmat puolisot. Älä sisällytä tarpeettomia aliluokkia ODL-kuvaukseesi. 2. Olkoon annetut funktionaaliset riippuvuudet seuraavat: A->B, B->C, C->D, D->E, E->A. Jos projisoimme nämä riippuvuudet relaatioon, joka muodostuu attribuuteista ABC, niin mitkä ovat siinä voimassaolevat funktionaaliset riippuvuudet? Anna kaikki ABC:n avaimet. 3. Tarkastellaan seuraavaa tietokantakaaviota: Maalaukset (taiteilija, _työ_, päiväys, museo) Museot (_nimi_, kaupunki, intendentti) Hinnat (_työ_, arvo) Kirjoita seuraavat kyselyt relaatioalgebralla. a.) Milloin Leonardo maalasi Mona Lisan? b.) Missä kaupungissä Mona Lisa sijaitsee? c.) Etsi kaikki työt, jotka ovat museon intendentin maalaamia ja jotka ovat esillä samassa museossa, jossa intendentti työskentelee. Etsi seuraavat kyselyt SQL:llä. d.) Etsi ne museot, joiden töiden arvo yhteensä on yli 10,000,000. e.) Tulosta taulu (kaikki sarakeotsikot ovat ok), joka museokohtaisesti ilmaisee sen töiden keskihinnan. f.) Kuten (e), mutta ainoastaa niiden museoiden osalta, joissa on kaikkiaan yli 100 työtä. g.) Kirjoita alla olevan kyselyn kanssa yhtäpitävä kysely ilman alikyselyrakennetta. SELECT taiteilijat FROM Maalaukset WHERE museo IN (SELECT nimi FROM Museot WHERE kaupunki 'Lontoo') h.) Kirjoita SQL-lause, joka määrittelee seuraavan näkymän. Sellaiset (a,m) parit, joissa a ilmaisee museon m töiden keskihinnan. 4. Tarkastellaan seuraavaa ODL-kuvausta varastotietokannasta. interface Varasto (extent Varastot key tuoteID) { attribute integer tuoteID; attribute string kuvaus; attribute integer maara; attribute float hinta; relationship Tuottaja tuot inverse Tuottaja::tuotteet; }; interface Tuottaja; (extent Tuottajat keys ID, name) { attribute integer tuottajaID; attribute string nimi; attribute string osoite; relationship Set tuotteet inverse Varasto::tuot; }; Kirjoita seuraavat kyselyt OQL:llä käyttäen tätä tietokantakaaviota. a.) Etsi sen tuottajan nimi, joka valmistaa tuotetta, jonka tuoteID on 123. b.) Etsi niiden tuotteiden tuoteID:t ja määrät, jotka ovat Acme-nimisen tuottajan valmistamia. Maximum credits: task 1 (max 14), task 2 (max 12), task 3 (max 24), task 4 (max 10).