Idag Exempel Knyta ihop säcken Repetition av hela processen från värld till databas Kontroll av resultatet Exempel på frågor mot varuhusdatabasen Man börjar alltid med att bestämma vad man måste hålla reda på, de s.k. objektklasserna. Ofta kan man utgå från en problembeskrivning, t.ex. (gammal tentauppg från en annan kurs): Nya studentbostäder AB hyr ut rum och lägenheter till studenter.för att effektivisera verksamheten vill man skapa ett datoriserat register över studenter som står i kö för bostad, studenter som har bostad, bostäder, inventarier i lägenheterna och studiestatus hos både boende och de som står i kö. Man förmedlar både möblerade och omöblerade rum och lägenheter. Man har en speciell kö för de studenter som av olika skäl skall ha förtur till bostad. För att få stå i förturskön krävs att man har intyg som verifierar de skäl man uppgivit som grund för förtur. DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 1 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 2 / 31 Exempel... Exempel modellen (1) De uppgifter man vill ha tillgång till är: ens namn, adress, telefon (alla tänkbara), personnummer, föräldrarnas namn och adress, utbildningslinje, antal lästa poäng termin för termin, namn på studentens högskola, utbildningens längd och kontraktsperiod. Varje lägenhets adress, yta, hyra och inventarieförteckning, som ska stämma med standarden för lägenhetstypen. Samtliga boenden i en lägenhet (varje studerande som innehar kontrakt). För forskarstuderande vill man veta institution och handledarens namn samt handledarens telefonnummer. För de som köar vill man registrera önskemål om bostadsområde, lägenhetsstorlek, om man vill bo i flerpersonsbostad o.s.v. För de som köar med förtur vill man, förutom de uppgifter som man vill ha om alla köanden, veta de skäl som berättigar till särbehandling. DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 3 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 4 / 31
Exempel modellen (2) Exempel modellen (3) bestånd Nr styp styp DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 5 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 6 / 31 Exempel modellen (4) Exempel modellen (5) bestånd bestånd Nr Nr styp styp DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 7 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 8 / 31
Exempel modellen (6) Exempel modellen (7) bestånd bestånd Nr Nr styp styp Datum Studiemerit Datum DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 9 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 10 / 31 Exempel modellen (8) Exempel egenskapsmatrisen (objektklasser) bestånd Typ Namn I-termer E-termer Nr styp Obj Tfn Pnr Namn, Adress ONamn Ort Hnr Adress LghNr Yta, Hyra styp TypNr AntRum, Status INr Beskrivning Datum Datum Studiemerit Datum StandardInv DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 11 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 12 / 31
Exempel egenskapsmatrisen (sambandsklasser) Exempel modell dbstruktur Typ Namn I-termer E-termer Samb ONamn, TypNr, Pnr StartDatum Prio ONamn, TypNr, Pnr StartDatum Studiemerit Pnr, Datum KursBeteckn, Poäng Pnr, LghNr, Datum TillDatum Bestånd ONamn, Hnr LghNr, TypNr StandardInv TypNr, INr Antal LghNr, Hnr LghNr, INr Antal, Datum Följer kokboken: a. Objektklass med e-termer bildar en tabell: (Pnr, Namn, Adress) (ONamn, Ort) (Hnr, Adress) (LghNr, Yta, Hyra) styp (TypNr, AntRum, Status) (INr, Beskrivning) DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 13 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 14 / 31 Exempel modell dbstruktur Exempel modell dbstruktur b. En objektklass som inte har e-termer men finns på N-sidan av någon 1:N-sambandsklass bildar en tabell (Pnr, Namn, Adress) styp (ONamn, Ort) (Hnr, Adress) (LghNr, Yta, Hyra) (TypNr, AntRum, Status) (INr, Beskrivning) (Tfn) c. En sambandsklass av högre ordning än 2 bildar en tabell (Pnr, Namn, Adress) (ONamn, Ort) (Hnr, Adress) (LghNr, Yta, Hyra) styp (TypNr, AntRum, Status) (INr, Beskrivning) (Tfn) (ONamn, TypNr, Pnr, StartDatum) Prio (ONamn, TypNr, Pnr, StartDatum) (Pnr, LghNr, Datum, TillDatum) DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 15 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 16 / 31
Exempel modell dbstruktur d. En M:N-sambandsklass bildar en tabell (Pnr, Namn, Adress) styp Prio Studiemerit StandardInv (ONamn, Ort) (Hnr, Adress) (LghNr, Yta, Hyra) (TypNr, AntRum, Status) (INr, Beskrivning) (Tfn) (ONamn, TypNr, Pnr, StartDatum) (ONamn, TypNr, Pnr, StartDatum) (Pnr, LghNr, Datum, TillDatum) (Pnr, Datum, KursBeteckn, Poäng) (TypNr, INr, Antal) (LghNr, INr, Antal, Datum) Exempel modell dbstruktur e. En 1:N-sambandsklass försvinner men 1-sidans i-term... (Pnr, Namn, Adress) (ONamn, Ort) (Hnr, Adress, ONamn) (LghNr, Yta, Hyra, Hnr, TypNr) styp (TypNr, AntRum, Status) (INr, Beskrivning) (Tfn, Pnr) (ONamn, TypNr, Pnr, StartDatum) Prio (ONamn, TypNr, Pnr, StartDatum) (Pnr, LghNr, Datum, TillDatum) Studiemerit (Pnr, Datum, KursBeteckn, Poäng) StandardInv (TypNr, INr, Antal) (LghNr, INr, Antal, Datum) DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 17 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 18 / 31 Exempel utelämnade uppgifter, diskussion Exempel kontroll av resultatet I modellen fattas uppgifter om föräldrarnas namn och adress, utbildningslinje, namn på studentens högskola, utbildningens längd och för forskarstuderande: institution samt handledarens namn och telefonnummer. Eftersom jag byter ordning på föreläsningarna kommer det senare DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 19 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 20 / 31
Här är det bättre att ställa frågor mot varuhusdatabasen (som ju existerar) Vara Avdelning Anställd Leverantör Lager Försäljning (varunr, typ) (avd, våning) (namn, lön, chef, avd) (företag, adress) (företag, avd, varunr, volym) (avd, varunr, volym) Vad är genomsnittslönen för alla anställda? Det räcker att betrakta tabellen anställd SELECT AVG(lön) FROM anställd; DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 21 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 22 / 31 Vilka anställda arbetar på leksaksavdelningen? Det räcker att betrakta tabellen anställd SELECT namn FROM anställd WHERE avd = leksaker ; Vilka varor finns till försäljning på andra våningen? Man måste titta både i försäljning och i avdelning och matcha avd i de båda tabellerna mot varandra. Välj naturlig join SELECT varunr FROM försäljning NATURAL JOIN avdelning WHERE våning = 2; eller vanlig join: SELECT F.varunr FROM försäljning F, avdelning A WHERE F.avd = A.avd AND A.våning = 2; DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 23 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 24 / 31
Vilka varor säljs inte av någon avdelning på andra våningen? Vi kan faktiskt använda oss av resultatet från förra frågan och ta alla varor minus de vi fick fram då SELECT varunr FROM vara WHERE varunr NOT IN (SELECT varunr FROM försäljning NATURAL JOIN avdelning WHERE våning = 2); Vilka varor säljs av minst två avdelningar på andra våningen? Om vi har en tabell med alla varor och avdelningar på vån 2 så kan vi titta två gånger i den. Steg 1: CREATE VIEW avdvån2 AS SELECT avd, varunr FROM försäljning NATURAL JOIN avdelning WHERE våning = 2; Steg 2: SELECT DISTINCT A.varunr FROM avdvån2 A, avdvån2 B WHERE A.varunr = B.varunr AND A.avd <> B.avd; DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 25 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 26 / 31 Hur mycket tjänar Andersson L s chef? Det räcker att betrakta tabellen anställd två gånger, en gång för att hitta chefen och sedan en gång för chefens lön SELECT lön FROM anställd WHERE namn = (SELECT chef FROM anställd WHERE namn = Andersson L ); Vilka företag levererar varor till mer än en våning? Vi måste titta både i lager, där vi hittar företag, och i avdelning, där vi hittar våningsplan. Om vi sedan grupperar över företag och räknar våningsplan kan vi kanske hitta någon. Steg 1: CREATE VIEW fv AS SELECT företag, COUNT(DISTINCT våning) as antal FROM lager NATURAL JOIN avdelning GROUP BY företag; Steg 2: SELECT företag FROM fv WHERE antal > 1; eller, i ett steg: SELECT företag FROM lager NATURAL JOIN avdelning GROUP BY företag HAVING COUNT(DISTINCT våning) > 1; DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 27 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 28 / 31
Vilka företag levererar mer än en typ av vara till någon avdelning på 3:e våningen, och hur många typer då? Vi måste titta i tre tabeller samtidigt. I lager hittar vi företag, varunr och avdelningar. I avdelning hittar vi våningsplan för avdelningarna och i vara hittar vi varutyper. SELECT företag FROM lager NATURAL JOIN avdelning NATURAL JOIN vara WHERE våning=3 GROUP BY företag HAVING COUNT(DISTINCT typ) > 1 Vilka företag levererar pennor? Vi måste titta i både lager och vara och matcha varunr i båda tabellerna mot varandra SELECT företag FROM lager NATURAL JOIN vara WHERE typ = penna ; DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 29 / 31 DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 30 / 31 Vilka anställda tjänar mer än alla på skoavdelningen? Det räcker att titta i tabellen anställd två gånger SELECT namn FROM anställd WHERE lön > ALL (SELECT lön FROM anställd WHERE avd= skor ); DD1370 (Föreläsning 6) Databasteknik och informationssystem 7,5 hp Hösten 2008 31 / 31