TIETOKANNAT kevät 2002 Itseopiskeluosio osa 2/3 Relaatiomalli tutuksi - myös käytännössä! Toisin kuin johdannossa, tässä vaiheessa lienee helpointa ottaa yksinkertainen käytännön näkökulma. Johdanossa oli käsitteiden ja ajattelutavan omaksumista, kokonaisuuksien hahmottamista kolmitasoarkkitehtuurin mukaisesti ja mallinnuksen laatua. Nyt tavoite on yksinkertaisesti osata luoda relaatiotietokanta ja käyttää sitä. (Vihje: Tästä ei kannata tehdä liian vaikeaa asiaa. Kyseessä on rajattu tapa käsitellä tietoa, joten yksinkertaisuuteen ja selkeyteen asian omaksumisessa kannattaa pyrkiä ottamalla perusteet kunnolla haltuun.) Tämä käytännön tavoite tarvitsee ensin 1) lyhyen johdannon tauluesitykseen ja niiden käsittelyyn relaatiolagebralla; mm. päivitysongelmat relaatiomallin rajoitusten ja eheyssääntöjen (constraints and intergrity rules) suhteen on hyvä sisäistää tässä vaiheessa. Miten relaatiotietokantakaava (schema) sitten suunnitellaan? Siihen antaa vastauksen 2) EERto-relation mapping ohjeet. Tämän jälkeen tutustutaan helppokäyttöiseen 3) SQL-kieleen, jonka avulla kanta luodaan (DDL) ja jolla sitä käytetään (DML). SQL-ominaisuuksiin tutustutaan myös käytännössä Access-ohjelmistolla kolmansissa demoissa. Nämä kolme osaa vaativat paljon harjoituksia. Lopuksi esitellään lyhyesti, osin lisälukemistona, toinen tapa tarkastella taulujen joukkoja eli kalkyylit ja näistä erityisesti Query-By-Example (QBE) kyselykieli mm. Accesissa. Tietokantaopiskelun kannalta on hyödyllistä nähdä QBE-näytön perusteena oleva toimintamekanismi teoriatasollakin. Relaatiomalliosuudessa käytäntö on vahvasti mukana: tietokantakyselyjä harjoitellaan Accessrelaatiotietokantaohjelmistolla. Access (tms. relaatiotietokanta) -harjoittelu on omiaan myös asioiden omaksumiseen, mutta siitä huolimatta harjoittelua olisi syytä tehdä myös käsin paperilla. Harjoittelua voi tehostaa esimerkiksi seuraavasti: Tutustu relaatioalgebraan ja SQL- ja QBE-tehtäviin. Tee vastaukset (esim. kirjan esimerkkeihin, nini että et katso vastausta) paperille, ainakin osaan niistä ja ainakin pääpiirteittäin. Jos mahdollista, testaa sen jälkeen kysely Access tms. ohjelmistolla. Jatka harjoittelua tekemällä kyselyyn variaatioita, mieti niiden vaikutus tulokseen etukäteen ja testaa jälleen. Harjoittele erilaisia käytännön tapoja tehdä yksi ja sama kysely. Välineeseen tutustumiseen on syytä varata aikaa. Muista Access-tutustumisdemo ja ohjelmiston oma Access-tutoriaali, jos et ole aiemmin välinettä käyttänyt. Edelleen ryhmätyö on myös sallittua eli voitte tehdä harjoituksia esimerkiksi samassa ryhmässä, joka tekee myös kurssin ryhmätyön.
Johdanto relaatiomalliin ja SQL-kieleen sekä tietomallin muuttaminen relaatiokaavaksi Aiheen käsittelystä ja jäsennyksestä Pyri omaksumaan keskeiset käsitteet ja asiakokonaisuudet merkityksineen sekä osien liittyminen toisiinsa (kokonaisuus). SQL-osiossa esitellään SQL2-standardin mukaan, joten pieniä eroavaisuuksia käytännön sovelluksiin löytyy. Lisäksi kielissä on yksityiskohtia enemmän, kuin pelkällä lukemalla pystyy käsittelemään, joten harjoittelu ja pääominaisuuksien omaksuminen on ensisijainen tehtävä. Runsauden ei saa antaa sekoittaa kielen perusrakenteiden haltuunottamista. Alla on ehdotettu aihealueen jäsennys: A. Relaatiomallin peruskäsitteet: taulujen eli relaatioiden olemassaolo - perusteet tauluesitykseen o relaaation käsite ja ominaisuudet o relaation rajoitukset (yl. constraints)!"arvojoukko- ja avainrajoite (constraints)!"olio- ja viite-eheys (integrity rules) o päivitysongelmat (mitä, miksi ja miten hoidetaan)!"insert, delete, modify (eli update) ja mahdolliset toimenpiteet B. Relaatiomallin käyttäytyminen - relaatioalgebran peruskäyttö o rivit (select) o sarakkeet (project) o taulujen yhdistäminen (join) o joukko-opilliset operaatiot o jakolasku ja muut ominaisuudet (mm. aggregaattifunktiot, ryhmittely jne.) C. SQL - historiakatsaus; käytännön työkalu o joukkokäsite (SQL) vs. relaatiokäsite (algebra) - kielen ominaisuudet: määrittely (DDL) ja käyttö (DML) o Data Definition Language!"käyttäjien,!"tietokantakaavan,!"taulujen ja!"rajoitusten määrittely ja hallinta huom! viiteavain ja restrict, set default, set null, cascade o Data Manipulation Language!"peruskyselyt!"taulujen liittäminen!"aggregaatit ja ryhmittely!"sisäkkäiset kyselyt ja joukkojen vertailu, exists-testaus 2
!"taulujen päivitys säännöt käyttö: insert, delete, update!"näkymät ja näkymien päivittäminen!"muut ominaisuudet (esim. lisärajoitukset assertions ) - harjoittelua! Tarvittaessa käytä Accessin tutoriaalia, opasteita ja Northwind-tietokantaa apuna. D. EER-mallista relaatiokaavaksi - hyvät, helpot säännöt ER- ja EER-rakenteiden muuttamiseksi relaatiokaavaksi o tutustu ER- ja EER-muunnossääntöihin ja esimerkkeihin o harjoittele o tehkää ryhmätyön suunnitelman muuttaminen relaatiokaavaksi - erityisesti EER-mallien muuntaminen relaatioksi on syytä omaksua kirjan esimerkkien, harjoitusten ja omien esimerkkien avulla, koska niissä on erilaisia vaihtoehtoja riippuen yli/aliluokan ominaisuuksista (esim. osittaisuus/täydellisyys) - korkean tason mallin muutaminen (tässä relaatiomalliksi) implementaatioksi on välttämätön jatkumo tietokantalähestymistavan haltuunottamiseksi. Ei riitä, että osaa abstrahoida ja mallintaa tietoa korkean tason käsitteillä, vaan on myös ymmärrettävä, miten vaatimukset muutetaan käytännön sovellukseksi o HUOM! Täytyy kuitenkin varoa, ettei tee korkean tason tietomalliin ominaisuuksia, jotka perustuvat tekniseen rajoituksisiin. Silloin malli ei kuvaa kohdetta vaan valitun toteutusvälineen (rajallisia) ominaisuuksia! Suunta on siis aina suunnitelmasta (käyttäjien vaatimuksista, tarpeista) tekniseen toteutukseen; käytäntö on sitten se, että korkean tason mallissa esitetyt vaatimukset tiedon hallinnalle täytyy toteuttaa jotenkin jollakin välineellä. E. Muita relaatiokieliä (tutustu) - tämä aihealue on pääosin tutustumisen arvoista lisälukemistoa, erityisesti QBE-kieleen liittyvä arvojoukkokalkyyli on hyödyllinen. QBE:hen tutustutaan myös demoissa. - kalkyylit (monikko ja arvojoukkokalkyyli) o tutustu erityisesti arvojoukkokalkyyliin (domain relation calculus)... o... ja sen toteutukseen QBE:hen esim. Accessissa. Tee harjoituksia. 3
Kertauskysymyksiä, osio II Seuraavat kysymykset pyrkivät liittymään aihealueeseen laajasti ja soveltavasti jaoteltuna kirjan rakenteen mukaan. Siten ne sopivat mietittäväksi demojen ja harjoitusten jälkeen. Kysymykset pyrkivät testaamaan käsitteiden ja aihealueiden tuntemista, joten niiden avulla voit myös kerrata kurssin sisältöä ennen tenttiä. Toki voit käyttää materiaalia myös omalla tavallasi. Kpl 7 Relaatioalgebra 1. Mikä on relaatio? Missä järjestyksessä instanssit (rivit, tuplat) ovat relaatiossa? 2. Mitkä ovat relaatiokannan eheyssäännöt (4 kpl) ja mitä ne tarkoittavat käytännössä? 3. Mikä on vierasavain (viiteavain)? 4. Mitä ovat relaatiotietokannan päivitysongelmat? Keksi esimerkkejä kuvaamaan eri tilanteita. Miten em. ongelmatilanteeet tulisi hoitaa? 5. Onko suoritusjärjestyksellä väliä relaatioalgebrassa? Miksi? 6. Mikä on karteesinen tulo ja mihin sitä tarvitaan? Puhdas karteesinen tulo on kovin raskas operaatio suuriin tauluihin. Mitä fiksuja tapoja on tehdä karteesinen tulo (liitos)? 7. Mikä on täydellinen joukko algebraoperaatioita? Miksi? 8. Tee kuvan 7.15 jakolaskut (a ja b) sivun 224 alalaidassa (myös kalvo nro 76) olevalla kaavalla välivaiheineen. 9. Miten rekursio voidaan käsitellä algebrassa? 10. Mitä lisää tuovat ulkoiset liitokset (OUTER JOIN ja OUTER UNION) algebraan? 11. Monissa tietokantaohjelmistoissa (myös Access) on automaattinen laskuri - ominaisuus, jolla on helppo identifioida relaation rivi toteutuksessa. Mitä on huomioitava seuraavassa toteutetussa tietokantataulussa: OPISKELIJA(LASKURI_ID, henkilötunnus, opiskelijanumero, nimi, koulutusohjelma, pääaine)? Olisiko parempia toteutusratkaisuja? Miksi? Mitä hyötyä automaattisesta laskurista on? 12. Tee kirjan (tai itseopiskelumateriaalin) tehtäviä siten, että peitä vastaus, tee oma versiosi ja vertaa tuloksia (kyselyt QUERY1-QUERY7) Kpl 8 SQL 13. Mitä datatyyppejä SQL-kielessä on? 14. Miten viiteavaimeen liittyvät relaatiotietokannan rajoitukset ja eheyssäännöt voidaan määritellä? 15. Miten kokonaista taulua tai kaavaa voidaan muuttaa SQL2-kielessä? Miten eheyssäännöt toimivat tässä tilanteessa? Miten tämä liittyy kolmitasoarkkitehtuuriin? 16. Vertaa relaatioalgebran taulu- ja joukkokäsityksiä SQL:n vastaaviin. 17. Vertaa uudelleennimeämistä relaatioalgebrassa ja SQL:ssä. 18. Miten WHERE lauseella toimii useamman taulun kanssa? Tee kysely: Hae kaikki sellaiset projektit (projektinumerot), joista vastaavan osaston konttori on Denverissä. 19. Miten toimivat päivityskomennot (insert, delete, update) ja eheyssäännöt? a. Kirjassa s. 276 on esimerkki, jossa luodaan tilapäisesti Osastoinfo -taulu, johon Insert-komenolla lisätään osastojen henkilömäärä ja kokonaispalkka. Tämä taulu ei päivity automaattisesti, toisin kuin näkymä (virtuaalinen taulu). 4
20. Mihin käytetään näkymiä (view, virtuaalitauluja)? Milloin näkymää voidaan päivittää? Miten tämä liittyy kolmitasoarkkitehtuuriin? Miten kantataulu (base table) ja näkymä (view, virtual table) eroavat toisistaan? 21. Onko keinoja, millä tietokantakaavaan voisi tehdä lisärajoituksen, että alaisen palkka ei saa olla suurempi kuin hänen osastopäällikkönsä? 22. Tee kirjan (tai itseopiskelumateriaalin) tehtäviä siten, että peitä vastaus, tee oma versiosi ja vertaa tuloksia (kyselyt QUERY0-QUERY28) Kpl 9: ER- ja EER-to-relational-mapping 23. Miten heikko entiteetti kuvataan relaatiokaavassa? 24. Miten kolmannen asteen liittymä mallinnetaan? 25. Miten M:N ja 1:1 mallinnetaan? Entä liittymän attribuutit? Entä jos osallistuminen liittymään on osittainen, pakollinen tai niiden kombinaatio? 26. Selvitä eri vaihtoehdot yli-aliluokkien mallintamiseen osittaisuuden/pakollisuuden näkökulmasta. 27. Miten kategoria mallinnetaan? (Kpl 10 Itseopiskelun tukimateriaalia) 28. Luku 10 tarjoaa relaatiotietokannoista kiinnostuneille lisälukemistoa: Oracle ja Access esitellään yleisellä tasolla. Etenkin jos (relaatio)tietokantatutkimus kiinnostaa, niin osiosta saa viitteet muutamiin olennaisiin lähteisiin. 5
Harjoitustehtäviä ja vastauksia Tehtäviin löytyy vastaukset kurssin www-sivulta pdf-tiedostosta. HUOM! Kyselytehtäviin voi olla useita oikeita vastauksia (siis eri järjestyksessä tehtyjä ja eri tavalla ryhmiteltyjä komentoja, jotka päätyvät samaan lopputulokseen). 1. Esitä itsellesi SQL-kyselyn perusidea, eli osaset, joista SQL-kysely oppikirjan mukaan muodostuu. 2. Osoita (ei muodollista todistusta), että relaatioalgebran viisi primitiivioperaattoria (Valinta, Projektio, Unioni, Erotus, Karteesinen tulo) todella ovat primitiivisiä, eli mitään niistä ei pystytä ilmaisemaan muiden neljän avulla. 3. Tarkastellaan kääntöpuolella (kirja kuva 7.19, s. 236) esitettyyn lentoyhtiön paikanvarausjärjestelmän relaatiokaavaan tehtävää päivitystä, jossa syötetään varaus tietylle lennolle (flight), sen tietylle etapille (flight leg) ja vieläpä tiettynä ajankohtana (date). a) Mitä relaatiotietokannan sääntöjä (rajoituksia, constraint) kyseisessä päivityksessä on tarkistettava ja minkä tyyppisiä nämä säännöt ovat? b) Etsi kaikki kaavassa tarvittavat viite-eheyssäännöt. 4. a) SQL:ssä on mahdollista määritellä tietokannnan viite-eheyksiin liittyvät toiminnot neljällä eri tavalla (reject, cascade, set null, set default). Miten määrittely (yleisellä tasolla) tapahtuu SQL:ssä ja mitä eri vaihtoehdot tarkoittavat? b) Oletetaan, että seuraavat päivitysoperaatiot tehdään kukin suoraan (toisistaan riippumatta; esim. (a)-kohdan lisäystä ei huomioida kohdissa (b)-(g), jne.) oppikirjan COMPANYtietokantaan (kuva 7.6 s. 205, ks. tehtäväpaperin kääntöpuoli). Selvitä kunkin operaation yhteydessä tapahtuvat tietokannan eheyssääntöjä koskevat rikkomukset. Ehdota sopivia toimenpiteitä rikkomusten välttämiseksi. (a) Lisää Employee-relaatioon tupla < 'Robert', 'F', 'Scott', 943775543', '21-jun-42', '2365 Newcastle Rd, Bellaire, TX, M, 58000, '888665555', 1 >. (b) Lisää PROJECT-relaatioon monikko < ProductA, 4, Bellaire, 2>. 6
(c) Lisää Dependent-relaatioon tupla < '453453453', 'John', M, '12-dec-60', 'SPOUSE' >. (d) Poista Works_On -relaatiosta tuplat joiden ESSN = '333445555'. (e) Poista DEPARTMENT-relaatiosta monikko, jossa DNAME = Research. (f) Muuta WORKS_ON-relaation siihen monikkoon, jossa ESSN = 999887777 ja PNO =10, attribuutin HOURS arvoksi 5.0. (g) Muuta Department-relaation tuplan, jossa DNUMBER = 5 kenttiin MGRSSN ja MGRSTARTDATE arvot '123456789' ja '01-oct-88'. 5. Tee seuraavat kyselyt relaatioalgebralla COMPANY-tietokantaan (a) Hae niiden osastolla 4 työskentelevien työntekijöiden nimet, jotka työskentelevät viikottain 20 tuntia tai enemmän 'Newbenefits' -projektissa. (b) Listaa isä-poika ja äiti-tytär suhteessa olevien työntekijöiden ja omaisten nimet. (c) Listaa jokaisesta projektista sen nimi ja siihen käytetty keskimääräinen viikottainen työaika. (d) Tee kysely joka hakee niiden työntekijöiden nimet ja osoitteet, joiden osastolla ei ole toimipistettä Bellairessa, mutta jotka silti työskentelevät Bellairessa sijaitsevassa projektissa. 6. Kirjoita seuraavat COMPANY-tietokantaan kohdistuvat kyselyt relaatioalgebralla: (a) Etsi niiden työntekijöiden nimet, jotka eivät työskentele missään projektissa. (b) Etsi kaikki isä-poika-parit, missä isä on työntekijä ja poika huollettava (dependent). Tulokseen otetaan kummankin nimet. 7. Demonstroi relaatioalgebran Jakolasku -operaation (division) hyödyllisyyttä käyttäen esimerkkinä Company-tietokantaan kohdistettavaa kyselyä: Etsi niiden työntekijöiden nimet, jotka työskentelevät jokaisessa Administration -osaston projektissa. Esitä myös myös välitulosten relaatiokaavat ja selitä mitä tuplia ne sisältävät (ei tarvitse kirjoittaa jokaista), kun operaatio kohdistetaan oppikirjan kuvan 7.6. esittämään Company tietokannan instanssiin. 7
8.a) EER-to-relational mapping harjoitus. Muunna YLIOPISTO-tietokanta (s. 84, kuva 4.7) relaatiokaavaksi (katso liite) b) Lisäharjoituksena kannattaa tehdä kuvan 4.8 AJONEUVO-rekisterin muuntaminen relaatiokaavaksi (katso liite) 9. Kirjoita oppikirjan oppien mukaan sopivat SQL:n DDL-lauseet kirjastotietokannan (kirja ss. 238, kuva 7.20) relaatioiden määrittelemiseksi. BOOK BookId, Title, PublisherName BOOK_AUTHORS BookId, AuthorName PUBLISHER Name, Address, Phone BOOK_LOANS BookId, BranchId, CardNo, DateOut, DueDate LIBRARY_BRANCH BranchId, BranchName Address BOOK_COPIES BookId, BranchId, No_Of_Copies BORROWER CardNo, Name, Address, Phone 8
10. (7.23) Pohdi KIRJASTO relaatiokaavaa (Figure 7.20), jossa esitetään kirjojen, lainaajien ja lainojen tietojenhallintaa. Kirjoita seuraavat kyselyt relaatioalgebralla KIRJASTO-tietokantaan: a. How many copies of the book titled The Lost Tribe are owned by the library branch whose name is "Sharpstown"? b. How many copies of the book titled The Lost Tribe are owned by each library branch? c. Retrieve the names of all borrowers who do not have any books checked out. d. For each book that is loaned out from the "Sharpstown" branch and whose DueDate is today, retrieve the book title, the borrower's name, and the borrower's address. e. For each library branch, retrieve the branch name and the total number of books loaned out from that branch. f. Retrieve the names, addresses, and number of books checked out for all borrowers who have more than five books checked out. g. For each book authored (or co-authored) by "Stephen King", retrieve the title and the number of copies owned by the library branch whose name is "Central". 11. (8.11) Kirjoita tehtävän 10 kyselyt SQL-kielellä KIRJASTO-tietokantaan: Kysely voidaan kirjoittaa useammalla tavalla. Alla on esitetty joissakin tapauksissa pari vaihtoehtoa. 9
10