CS-A1150 Tietokannat 6.3.2018 CS-A1150 Tietokannat 6.3.2018 1 / 54
Oppimistavoitteet: tämän luennon jälkeen Osaat muuttaa ER-kaavion relaatiomalliin. Toisin sanoen: jos sinulla on valmis ER-kaavio, niin tiedät, mitä relaatioita tietokantaan pitää määritellä ja mitä attribuutteja näillä relaatioilla pitää olla (tietokantakaavio). Osaat kertoa, miksi jokin tietokantakaavio on parempi kuin toinen samaa asiaa kuvaava tietokantakaavio. Ymmärrät joukon asioita, joita tarvitaan, kun huono tietokantakaavio muutetaan paremmaksi (tästä lisää ensi viikolla), esimerkiksi: funktionaalinen riippuvuus relaation avaimen suhde funktionaalisiin riippuvuuksiin attribuuttien sulkeuma. CS-A1150 Tietokannat 6.3.2018 2 / 54
ER-kaavion muuttaminen relaatiokaavioiksi Mitä relaatioita määrittelisit tietokantaan tämän kaavion perusteella? name phone Manufacturers name number ID deliver Made by Belongs to Products description price Orders count name custno orderno status Ordered by Customers born bonus address email CS-A1150 Tietokannat 6.3.2018 3 / 54
ER-kaavion muuttaminen relaatiokaavioiksi, jatkoa Perusperiaatteet: Jokaisesta yksilöjoukosta tehdään relaatio, jolla on samat attribuutit kuin yksilöjoukolla. Jokaisesta suhteesta tehdään relaatio, jonka attribuutteina ovat suhteen yhdistämien yksilöjoukkojen avaimet sekä mahdolliset suhteen omat attribuutit. Erikoistapaukset (joita ei voida muuttaa suoraan em. perusperiaatteiden mukaan): Heikot yksilöjoukot pitää käsitellä eri tavalla. Aliluokat ja isa-suhteet pitää käsitellä eri tavalla. Joskus voidaan yhdistää kaksi perussääntöjen perusteella muodostuvaa relaatiota. CS-A1150 Tietokannat 6.3.2018 4 / 54
Esimerkki perustapauksesta Kalvon 3 ER-kaaviossa on neljä yksilöjoukkoa: Customers, Products, Manufacturers ja Orders. Näistä kaikista muodostetaan relaatiot, joilla on samat attribuutit kuin yksilöjoukoilla: Customers(custNo, name, born, bonus, address, email) Products(number, name, description, price) Manufacturers(ID, name, phone) Orders(orderNo, deliver, status) CS-A1150 Tietokannat 6.3.2018 5 / 54
Esimerkki perustapauksesta, jatkuu Kaaviossa on kolme suhdetta, Made-by, Belongs-to ja Ordered-by. Kaikista niistä tehdään oma relaatio. Kahdella suhteella ei ole omia attribuutteja, joten näiden relaatioiden attribuuteiksi tulevat suhteen yhdistämien yksilöjoukkojen avaimet. Suhteesta Belongs-to tehdylle relaatiolle tulee lisäksi suhteen oman attribuutti. Relaatiot: MadeBy(number, ID) BelongsTo(orderNo, number, count) OrderedBy(orderNo, custno) CS-A1150 Tietokannat 6.3.2018 6 / 54
Relaatioiden avaimista Yksilöjoukoista muodostetuilla relaatioilla avainattribuutit ovat samat kuin yksilöjoukolla. Monesta moneen -suhteesta muodosteluillla relaatiolla avainattribuuteiksi tulevat suhteen yhdistävien yksilöjoukkojen avainattribuutit. Monesta yhteen -suhteesta muodosteluilla yksilöjoukolla avainattribuutiksi tulevat vain monesta-puolen yksilöjoukon avaimet. Esimerkiksi suhteesta BelongsTo tehdyn relaation avaimen muodostavat yhdessä attribuutit orderno, number, kun taas OrderedBy-suhteesta muodostetun relaation avaimeksi riittää attribuutti orderno yksin. Heikot yksilöjoukot ja perintähierarkia aiheuttavat poikkeuksia, joita käsitellään myöhemmin. CS-A1150 Tietokannat 6.3.2018 7 / 54
Toinen esimerkki Jos sama yksilöjoukko liittyy suhteeseen useammin kuin kerran, tulevat yksilöjoukon avaimet suhteesta muodostettavaan relaatioon uudelleen jokaista eri roolia kohti. Samannimiset attribuutit pitää nimetä uudelleen sekaannusten välttämiseksi. Tarkastellaan esimerkkinä seuraavaa ER-kaaviota: Artists Albums Contracts Regular company Producing company Companies Suhteesta Contracts muodostettaisiin nyt relaatio Contracts(artistName, albumname, regularcompany producingcompany) Yksilöjoukon Companies avain siis esiintyy relaatiossa kahteen kertaan eri rooleissa. CS-A1150 Tietokannat 6.3.2018 8 / 54
Relaatioiden yhdistämisestä Tarkastellaan vielä ensimmäistä esimerkkiä. ER-kaavion pohjalta luotiin mm. relaatiot Products(number, name, description, price) Manufacturers(ID, name, phone) MadeBy(number, ID) Relaatio MadeBy on syntynyt monesta yhteen -suhteesta: yhteen tuotteeseen voi liittyä korkeintaan yksi valmistaja. Relaatiot Products ja MadeBy voidaan yhdistää yhdeksi relaatioksi lisäämällä relaatioon Products tieto valmistajan tunnuksesta. Products(number, name, description, price, ID) Relaatio Manufacturers jää entiselleen. CS-A1150 Tietokannat 6.3.2018 9 / 54
Relaatioden yhdistämisestä, jatkoa Vastaavasti voidaan yhdistää relaatiot Orders ja OrderedBy. Sen sijaan relaatiota BelongsTo ei voida yhdistää toiseen relaatioon, koska se on syntynyt monesta moneen -suhteesta. Lopulliset relaatiot (joidenkin attribuuttien nimiä on muutettu selvyyden vuoksi): Customers(custNo, name, born, bonus, address, email) Products(number, prodname, description, price, manufid) Manufacturers(ID, manufname, phone) Orders(orderNo, deliver, status, custno) BelongsTo(orderNo, prodno, count) CS-A1150 Tietokannat 6.3.2018 10 / 54
Relaatioden yhdistämisestä, jatkoa Olkoon ER-kaaviossa yksilöjoukko E, josta on monesta yhteen -suhde R toiseen yksilöjoukkoon F. Jos E:n ja R:n perusteella muodostetaan relaatiot E ja R, on E :n kaaviossa attribuutit E:n avaimen muodostavat attribuutit E:n loput attribuutit R :n kaaviossa on taas attribuutit E:n avaimen muodostavat attribuutit F :n avaimen muodostavat attribuutit R:n mahdolliset omat attribuutit Koska jokaiseen E:n yksilöön liittyy suhteen kautta korkeintaan yksi F :n yksilö, määräävät E:n avainattribuuttien arvot kaikki muut R :n attribuutit. Sen vuoksi E ja R voidaan yhdistää yhdeksi relaatioksi, jonka attribuutteina ovat Kaikki E:n attribuutit F :n avainattribuutit Mahdolliset R:n omat attribuutit CS-A1150 Tietokannat 6.3.2018 11 / 54
Relaatioden yhdistämisestä, jatkoa Relaatiot voidaan yhdistää kuitenkin vain siinä tapauksessa, että suhde R on monesta yhteen. Jos R on monesta moneen, relaatioiden yhdistäminen johtaisi siihen, että sama tieto toistetaan moneen kertaan. Tarkastellaan esimerkkinä tapausta, jossa BelongsTo-relaatio yhdistettäisiin Orders-relaatioon. Tuloksena olisi relaatio Orders(orderNo, deliver, status, custno, prodno, count) Koska samaan tilaukseen voi kuulua useita tuotteita, johtaisi yhdistäminen tilanteeseen, jossa saman tilauksen toimitustapa, tila ja tilaajan asiakasnumero olisi tallennettu tietokantaan useaan kertaan. Yhdestä yhteen -suhde on monesta yhteen -suhteen erikoistapaus, joten myös yhdestä yhteen -suhteesta tehty relaatio voidaan yhdistää toiseen relaatioon. CS-A1150 Tietokannat 6.3.2018 12 / 54
Välitehtävä Mitkä seuraavan kalvon tietokantakaavioista ovat oikein, kun alla oleva ER-kaavio muutetaan relaatioiksi? name address name credits position department Teachers Teaches Courses ssno phoneno code semester Vastaa Presemossa http://presemo.aalto.fi/tietokannat CS-A1150 Tietokannat 6.3.2018 13 / 54
Välitehtävä jatkuu Vaihtoehdot: a Teachers(ssNo, name, position, department, address, phoneno) Courses(code, name, credits, semester) Teaches(ssNo, code) b Teachers(ssNo, name, position, department, address, phoneno) Courses(code, name, credits, semester) Teaches(code, ssno) c Teachers(ssNo, name, position, department, address, phoneno, coursecode) Courses(code, name, credits, semester) d Teachers(ssNo, name, position, department, address, phoneno) Courses(code, name, credits, semester, teacherssno) CS-A1150 Tietokannat 6.3.2018 14 / 54
Välitehtävän ratkaisu ER-kaavion mukaan yksi opettaja voi opettaa korkeintaan yhtä kurssia, mutta yhdellä kurssilla voi olla useita opettajia. Vaihtoehto a on oikein, koska siinä relaation Teaches avain on opettajan tunnus. Vaihtoehto b on väärin, koska siinä relaation Teaches avain on on kurssikoodi, mutta tämä ei käy, koska samalla kurssilla voi olla useita opettajia (jokaista kurssi opettaja-yhdistelmää kohti tehdään oma monikko). Vaihtoehto c on oikein, koska siinä opettajan tietoihin on yhdistetty tieto siitä, mitä kurssia opettaja opettaa (opettajalla voi olla korkeintaan yksi kurssi). Vaihtoehto d on väärin, koska siinä kurssin tietoihin on yhdistetty tieto opettajasta, mikä ei toimi, koska kurssilla voi olla useita opettajia. Oikea vastaus on siis a ja c. CS-A1150 Tietokannat 6.3.2018 15 / 54
Koska relaatioiden yhdistäminen on järkevää? Monesta yhteen -suhteesta tehty relaatio voidaan siis yhdistää monesta-puolen relaatioon. Koska näin kannattaa tehdä? Relaatioiden yhdistäminen johtaa siihen, että tietokantakaaviossa on vähemmän relaatioita. Tämä yksinkertaistaa relaatiokaaviota, mikä on yleensä toivottavaa. Usein siis yhdistäminen on järkevää. Jos kuitenkin vain hyvin pieni osa yksilöjoukon yksilöistä liittyy suhteen kautta toisen yksilöjoukon yksilöön, johtaa yhdistämineen relaatioon, jossa on useimmilla monikoilla NULL-arvoja suhteen kautta tulevien attribuuttien paikalla. Tällöin yhdistäminen ei välttämättä kannata, koska: Suhteen kautta tulevien attribuuttien tallentaminen vie ylimääräistä tilaa, jos lähes kaikilla monikoilla ko. attribuuttien arvo on NULL. Jos suhteen tietoihin tehdään paljon kyselyitä, voi olla nopeampaa tehdä kyselyt pelkästään suhdetta kuvaavaan relaatioon, jos sen koko on selvästi pienempi kuin yksilöjoukkoa kuvaavan relaation koko. (Tämä riippuu kuitenkin siitä, mitä muita relaatioita kyselyssä tarvitaan.) CS-A1150 Tietokannat 6.3.2018 16 / 54
Esimerkki 1 Verkkokauppaesimerkissä useimmilla tuotteilla on tieto siitä, mikä valmistaja ne on tuottanut. Tällöin kannattaa ilman muuta yhdistää MadeBy-suhteesta syntyneen relaation tiedot relaatioon Products, koska tietokantakaavio yksinkertaistuu ja lähes jokaisella Products-relaation monikolla on arvo tarvittavalle manufid-attribuutille. CS-A1150 Tietokannat 6.3.2018 17 / 54
Esimerkki 2 Oletetaan, että työpaikalla on mentorointiohjelma, jossa osalla työntekijöistä on nimetty mentori työpaikan ulkopuolelta. Yhdellä työntekijällä voi olla korkeintaan yksi mentori, mutta yli 90 %:lla työntekijöistä ei ole lainkaan mentoria name number name firm Employees MentoredBy Mentors address occupation ID Koska vain pienellä osalla työntekijöistä on mentori, kannattaa suhteesta MentoredBy tehdä todennäköisesti oma relaationsa eikä yhdistää sitä relaatioon Employees. CS-A1150 Tietokannat 6.3.2018 18 / 54
Heikon yksilöjoukon esittäminen relaationa Heikko yksilöjoukko muutetaan relaatioksi seuraavasti: 1. Heikon yksilöjoukon omien attribuuttien lisäksi otetaan relaatioon niiden yksilöjoukkojen avainattribuutit, joihin heikko yksilöjoukko on yhdistetty kaksinkertaisella vinonelilöllä kuvatulla suhteella. (Toisin sanoen mukaan otetaan ne heikon yksilöjoukon avainattribuutit, jotka kuuluvat toiseen yksilöjoukkoon.) 2. Jos heikko yksilöjoukko on osallisena jossakin suhteessa, niin kyseisestä suhteesta muodostetun avaimen täytyy sisältää kaikki heikon yksilöjoukon avainattribuutit. 3. Niistä suhteista, joiden kautta heikko yksilöjoukko saa osan avainattribuuteistaan (kaksinkertaisilla vinoneliöillä kuvatut suhteet) ei muodosteta lainkaan relaatioita. CS-A1150 Tietokannat 6.3.2018 19 / 54
Heikot yksilöjoukot, esimerkki Tarkastellaan viime luennolla esitetyn ER-kaavion size color name number Versions Version of Products description price muuntamista relaatioiksi. Yksilöjoukosta Products muodostetaan suoraviivaisesti relaatio Products(number, name, description, price) Kun heikosta yksilöjoukosta Versions muodostetaan relaatio, pitää siihen ottaa mukaan myös Products-joukon avainattribuutti, sillä se kuuluu heikon yksilöjoukon avainattribuutteihin. Nimetään kuitenkin attribuutti uudelleen sekaannusten välttämiseksi, joten saadaan relaatio Versions(prodNo, size, color) Suhteesta Version-of ei muodosteta lainkaan relaatiota, sillä suhteen tiedot käyvät ilmi jo Versions-relaatiosta. CS-A1150 Tietokannat 6.3.2018 20 / 54
Heikosta yksilöjoukosta muodostetun relaation attribuutit Jos W on heikko yksilöjoukko, niin W :stä muodostetaan relaatio, jolla on seuraavat attribuutit: W :n kaikki attribuutit. Avainattribuutit kaikista niistä yksilöjoukoista, joihin W on yhdistetty kaksinkertaisilla vinonelilöillä kuvatuilla suhteilla. Kaikki attribuutit niistä kaksinkertaisilla vinoneliöillä kuvatuista suhteista, joihin W on yhdistetty. CS-A1150 Tietokannat 6.3.2018 21 / 54
Heikko yksilöjoukko tavallisen suhteen osapuolena Oletetaan, että verkkokaupassa joitakin tuotteen versioita on tarjolla vain määräaikaisissa kampanjoissa. start end size color name number Campaigns OfferedIn Versions Version of Products name description price Yksilöjoukoista Products ja Versions muodostetaan samat relaatiot kuin edellä. Yksilöjoukosta Campaigns tehdään suoraviivaisesti relaatio Campaigns(name, start, end) Kun suhteesta OfferedIn muodostetaan relaatio, otetaan relaatioon mukaan yksilöjoukkojen Versions ja Campaigns avainattribuutit. Heikon yksilöjoukon Versions avainattribuutteihin kuuluun tällöin myös yksilöjoukon Products avainattribuutti. Saadaan OfferedIn(prodNo, size, color, campaignname, start) CS-A1150 Tietokannat 6.3.2018 22 / 54
Aliluokkien esittäminen relaatioina Yksilöjoukko ja sen aliluokat muodostavat hierarkian. Yksilöjoukkoa, jolla ei ole yliluokkaa, kutsutaan hierarkian juuriyksilöjoukoksi. Juuriyksilöjoukolla on avain, jonka avulla voidaan identifioida mikä tahansa hierarkiaan kuuluva yksilö (myös aliluokkien yksilö). Yksilöllä voi olla komponentteja, jotka kuuluvat mihin tahansa hierarkian alipuun yksilöjoukkoon niin kauan, kun alipuuhun kuuluu juuriyksilöjoukko. Äänikirja voi olla sekä kirja että CD. Tarkastellaan edellisen luennon esimerkkiä, johon on lisätty vielä tieto siitä, että verkkokauppa voi tarjota tietokoneen ostaville asiakkaille tietokoneen huoltosopimuksia eri yrityksiin. Samalla konemallilla voi olla useita sopimusvaihtoehtoja eri yritysten kanssa. Sopimus solmitaan määräajaksi, ja ajan pituus on suhteen attribuuttina. Yksilöjoukko Firms ei kuulu perintähierarkiaan, vaan se on mukana hierarkian ulkopuolisena joukkona, johon on suhde jostain perintähierarkian yksilöjoukosta. CS-A1150 Tietokannat 6.3.2018 23 / 54
Aliluokkien esittäminen relaatioina, jatkoa number name description price Products isa isa isa ram length address CDs Books Computers Maintains Firms artist length author pages speed harddisk firmid CS-A1150 Tietokannat 6.3.2018 24 / 54
Aliluokkien esittäminen relaatioina, jatkoa Aliluokkahierarkian muuttamiseksi relaatioiksi on kolme erilaista strategiaa (jotka siis johtavat erilaisiin relaatioihin). 1. Noudata ER-mallia. Muodosta hierarkian jokaisesta yksilöjoukosta E relaatio, joka sisältää juuriyksilöjoukon avainattribuutit ja lisäksi kaikki E:n omat attribuutit. 2. Kohtele yksilöitä olioina, jotka voivat kuulua vain yhteen luokkaan. Tee hierarkian jokaisesta mahdollisesta alipuusta, joka sisältää juuriyksilöjoukon, yksi relaatio, jonka kaavio sisältää kaikkien alipuuhun kuuluvien yksilöjoukkojen attribuutit. 3. Käytä null-arvoja. Tee yksi relaatio, joka sisältää kaikkien hierarkian yksilöjoukkojen attribuutit. Kutakin yksilöä esitetään yhdellä monikolla. Tällä monikolla on erityisarvo null niillä attribuuteilla, joita yksilöllä ei ole lainkaan. Seuraavaksi katsotaan tarkemmin näitä eri vaihtoehtoja. CS-A1150 Tietokannat 6.3.2018 25 / 54
ER-mallia noudattava muunnos Hierarkian jokaista yksilöjoukkoa kohti tehdään oma relaatio. Jos yksilöjoukko E ei ole hierarkian juuriyksilöjoukko, sitä vastaavan relaation attribuutteihin tulee E:n omien attribuuttien lisäksi juuriyksilöjoukon avainattribuutit identifioimaan yksilö. Jos yksilöjoukko E kuuluu johonkin suhteeseen, tulee tätä suhdetta kuvaavaan relaatioon juuriyksilöjoukon avainattribuutit identifioimaan suhteeseen kuuluva yksilö. Huomaa kuitenkin, että isa-suhteista ei muodosteta relaatioita. Toisin kuin muut suhteet, isa-suhde ei yhdistä kahta eri yksilöä, vaan saman yksilön komponentteja. CS-A1150 Tietokannat 6.3.2018 26 / 54
ER-mallia noudattava muunnos, esimerkki Tuotehierarkian yksilöjoukoista muodostetaan tällä tavalla neljä eri relaatiota: Products(number, name, description, price) CDs(number, artist, length) Books(number, author, pages) Computers(number, speed, ram, harddisk) Huomaa, että relaatiot CDs, Books ja Computers ovat saaneet yliluokan avainattribuutin. Lisäksi relaatioilla on niiden omat attribuutit. Lisäksi on tarvitaan relaatio kuvaamaan suhdetta Maintains. Maintains(number, firmid, length) Relaation attribuutteina ovat relaatioiden Computers ja Firms avaimet sekä lisäksi suhteen oma attribuutti. Jokainen tuoteyksilö kuuluu kaikkiin niihin relaatioihin, joihin se ominaisuuksiensa puolesta kuuluu. Esimerkiksi äänikirjalla on sitä vastaavat monikot sekä Products-, CDs- että Books-relaatioissa. CS-A1150 Tietokannat 6.3.2018 27 / 54
Oliosuuntautunut lähestymistapa Tässä lähestymistavassa luetellaan kaikki mahdolliset perintähierarkian alipuut, jotka sisältävät juuriyksilöjoukon. Jokaista mahdollista alipuuta kohti tehdään oma relaatio. Relaation kaaviossa on attribuutteina kaikki sitä vastaavassa alipuussa esiintyvät komponentit. Edellisessä esimerkissä on kahdeksan mahdollista alipuuta: 1. Products yksinään. 2. Products ja CDs 3. Products ja Books 4. Products ja Computers 5. Products, CDs ja Books 6. Products, CDs ja Computers 7. Products, Books ja Computers 8. Products, CDs, Books ja Computers CS-A1150 Tietokannat 6.3.2018 28 / 54
Oliosuuntautunut lähestymistapa, jatkoa Näistä tulee kahdeksan relaatioita, ja lisäksi yksi suhteesta Maintains: Products(number, name, description, price) ProductsCD(number, name, description, price, artist, length) ProductsB(number, name, description, price, author, pages) ProductsC(number, name, description, price, speed, ram, harddisk) ProductsCDB(number, name, description, price, artist, length, author, pages) ProductsCDC(number, name, description, price, price, artist, length, speed, ram, harddisk) ProductsBC(number, name, description, price, author, pages, speed, ram, harddisk) ProductsCDBC(number, name, description, price, artist, length, author, pages, speed, ram, harddisk) Maintains(number, firmid, length) Kutakin tuotetta vastaa monikko vain yhdessä kahdeksasta ensimmäisestä relaatiosta. CS-A1150 Tietokannat 6.3.2018 29 / 54
NULL-arvojen käyttö Kolmannessa lähestymistavassa tehdään kaikista perimyshierarkian yksilöjoukoista vain yksi yhteinen relaatio. Sillä on attribuutteina kaikki mahdolliset hierarkiassa esiintyvät ominaisuudet. Jos jollain yksilöllä ei kyseistä ominaisuutta ole, annetaan vastaavalle attribuutille tätä yksilöä edustavassa monikossa arvoksi erikoisarvo NULL, joka kertoo, että attribuutille ei ole määritelty arvoa. Esimerkkitapauksessa tehtäisiin kaikkia tuotteita edustamaan yksi relaatio Products(number, name, description, price, artist, length, author, pages, speed, ram, harddisk) Esimerkiksi tuotteilla, jotka eivät ole kirjoja, attribuuttien author ja pages arvot ovat NULL. Lisäksi suhdetta Maintains varten tehdään oma relaatio samoin kuin edellä. CS-A1150 Tietokannat 6.3.2018 30 / 54
Lähestymistapojen vertailua Kyselyissä, jotka koskevat kaikkia tuotteita, voi olla eduksi, että joudutaan käsittelemään mahdollisimman vähän eri relaatioita (yleensä kysely on hitaampi suorittaa, jos se koskee suurempaa joukkoa relaatioita). Toisaalta kyselyissä, jotka koskevat vain esimerkiksi kirjoja, on edullisempaa, jos kirjat ovat omassa relaatiossaan. Yleensä relaatioiden määrän ei haluta olevan kovin suuri, koska se tekee tietokannasta monimutkaisemman. ER-malliin perustuvan ja nolla-arvoja käyttävän lähestymistavan ero tässä ei ole kuitenkaan kovin suuri. Sen sijaan oliosuuntaunut lähestymistapa voi aiheuttaa relaatioiden määrän kasvamisen nopeasti: jos perimyshierarkiassa on n + 1 yksilöjoukkoa, on mahdollisten alipuiden määrä 2 n. CS-A1150 Tietokannat 6.3.2018 31 / 54
Lähestymistapojen vertailua, jatkuu On toivottavaa minimoida tilan käyttö ja välttää saman tiedon toistaminen. Tässä suhteessa oliosuuntautunut lähestymistapa on hyvä: kutakin yksilöä kohti on vain yksi monikko ja sillä on vain tarvittavat attribuutit. Myös nolla-arvoja käyttävässä tavassa on vain yksi monikko yksilöä kohti, mutta monikolla voi olla tarpeettomia attribuutteja. ER-malliin perustuvassa lähestymistavassa saman yksilön tiedot voivat olla useassa monikossa, mutta vain avainarvot on toistettu eri monikoissa. CS-A1150 Tietokannat 6.3.2018 32 / 54
Funktionaaliset riippuvuudet ja tietokannan normalisointi Ongelma edelleen: Mitä relaatioita tietokantaan pitäisi määritellä ja mitä attribuutteja näillä pitäisi olla? Samat tiedot voidaan esittää useilla eri tietokantakaavioilla (= tietokantaan kuuluvien relaatiokaavioiden sekä eheysehtojen yhdistelmä). Jotkin niistä ovat parempia kuin toiset. ER-kaavion tai jonkin toisen korkeamman tason suunnittelumenetelmän tuottaman tuloksen suoraviivainen muuntaminen relaatiomalliin ei aina johda parhaaseen mahdolliseen lopputulokseen. Relaatiokaaviot voidaan muuttaa parempaan muotoon normalisoimalla. Tällä tarkoitetaan relaatioiden jakamista uusiksi relaatioiksi niin, että kokonaisuus on parempi. Normalisoinnissa tarvitaan tietoa relaatioiden attribuuttien funktionaalisista riippuvuuksista. CS-A1150 Tietokannat 6.3.2018 33 / 54
Esimerkki Tarkastellaan kahta eri tapaa esittää tuotteita ja niiden valmistajia. Ensimmäisessä tavassa tiedot on tallennettu relaatioon Products1(number, prodname, description, price, manufid, manufname, phone) Toisessa tavassa tiedot on jaettu kahteen relaatioon Products(number, prodname, description, price, manufid) Manufacturers(ID, manufname, phone) CS-A1150 Tietokannat 6.3.2018 34 / 54
Esimerkki jatkuu Relaatioiden instanssit voisivat olla esim. seuraavat: Relaatio Products1 number prodname description price manufid manufname phone T-33441 Galaxy A5 cellphone 250.0 S123 Samsung 020-7300 S-65221 Brasserie 24 pan 33.50 F542 Fiskars 020-43910 T-33442 NX 300 Smart camera 399.0 S123 Samsung 020-7300 T-33455 Cyber-shot camera 463.0 L711 Sony 020-6500 R-43118 Samsung LT 24 TV 169.0 S123 Samsung 020-7300 R-27113 Sony 32 KDL TV 347.0 L711 Sony 020-6500 CS-A1150 Tietokannat 6.3.2018 35 / 54
Esimerkki jatkuu Relation Products number prodname description price manufid T-33441 Galaxy A5 cellphone 250.0 S123 S-65221 Brasserie 24 pan 33.50 F542 T-33442 NX 300 Smart camera 399.0 S123 T-33455 Cyber-shot camera 463.0 L711 R-43118 Samsung LT 24 TV 169.0 S123 R-27113 Sony 32 KDL TV 347.0 L711 Relation Manufactures ID manufname phone S123 Samsung 020-7300 L711 Sony 020-6500 F542 Fiskars 020-43910 CS-A1150 Tietokannat 6.3.2018 36 / 54
Esimerkki: tietokantakaavioiden eroja Ensimmäisessä tietokantakaaviossa tiedot valmistajien nimistä ja puhelinnumeroista esiintyvät useaan kertaan, toisessa tietokantakaaviossa vain yhteen kertaan. Jos esim. valmistajan puhelinnumeroa muutetaan, pitää päivitys ensimmäisessä kaaviossa tehdä useaan monikkoon, toisessa vain yhteen. Jos ensimmäisessä kaaviossa halutaan poistaa tieto tuotteesta S-65221, häviävät samalla kaikki tiedot valmistajasta Fiskars. Toisessa kaaviossa valmistajan tiedot säilyvät, vaikka tieto tuotteesta poistetaan. Toinen tietokantakaavio on siis selvästi parempi kuin ensimmäinen. CS-A1150 Tietokannat 6.3.2018 37 / 54
Huonon suunnittelun aiheuttamia ongelmia Tietokannan huonosta rakenteesta johtuvia tietokannan käyttäytymisen poikkeavuuksia kutsutaan anomalioiksi (anomaly). Keskeiset anomaliat: Tiedon toisteisuus (redundancy) Päivitysanomaliat (update anomalies): jos sama tieto on esitetty useaan kertaan, täytyy muutokset tehdä jokaiseen esityskohtaan. Poistoanomaliat (deletion anomalies): monikoiden poistolla voi olla sivuvaikutuksia. Jos esimerkiksi tuotteiden ja niiden valmistajien tiedot on yhdistetty samaan relaatioon, voi tuotteen poistaminen poistaa myös informaation valmistajan nimestä ja puhelinnumerosta. CS-A1150 Tietokannat 6.3.2018 38 / 54
Funktionaalisen riippuvuuden määritelmä Olkoon relaatiolla R attribuutit A 1, A 2,..., A n, B, C 1, C 2,..., C k. Attribuutit A 1, A 2,..., A n määräävät funktionaalisesti attribuutin B, jos seuraava ehto on voimassa: Jos kahdella relaation R monikolla on samat arvot kaikilla attribuuteilla A 1, A 2,..., A n, niin silloin niillä on samat arvot myös attribuutilla B. Attribuutit A 1, A 2,..., A n määräävät funktionaalisesti attribuutin B merkitään A 1 A 2... A n B Jos kahdella relaation R monikolla on samat arvot kaikilla attribuuteilla A 1, A 2..., A n, niin niillä on siis samat arvot myös attribuutilla B. Huomaa kuitenkin, että R:llä voi olla myös muita attribuutteja C 1, C 2,..., C k, joiden arvot voivat poiketa toisistaan. Funktionaalisen riippuvuuden ehdon pitää päteä kaikille mahdollisille R:n monikoille, ei vain kaikille tällä hetkellä R:n instanssissa oleville monikoille. CS-A1150 Tietokannat 6.3.2018 39 / 54
Funktionaalinen riippuvuus, määritelmä yleisemmin Olkoon relaatiolla R attribuutit A 1, A 2,..., A n, B 1, B 2,..., B m, C 1, C 2,..., C k. Attribuutit A 1, A 2,..., A n määräävät funktionaalisesti attribuutit B 1, B 2,..., B m, jos seuraava ehto on voimassa: Jos kahdella relaation R monikolla on samat arvot kaikilla attribuuteilla A 1, A 2,..., A n, niin silloin niillä on samat arvot myös kaikilla attribuuteilla B 1, B 2,..., B m. Merkitään A 1 A 2... A n B 1 B 2... B m CS-A1150 Tietokannat 6.3.2018 40 / 54
Funktionaalinen riippuvuus, esimerkki Olkoon määritelty relaatio Products1(number, prodname, description, price, manufid, manufname, phone) Tässä siis kunkin tuotteen tietojen yhteyteen on tallennettu myös tuotteen valmistajan kaikki tiedot. Mitä funktionaalisia riippuvuuksia relaatiolla on? CS-A1150 Tietokannat 6.3.2018 41 / 54
Funktionaalinen riippuvuus, esimerkki jatkuu Koska tuotteen numero yksilöi, mistä tuotteesta on kysymys, määrää se tuotteen nimen, kuvauksen, hinnan, valmistajan tunnuksen, valmistajan nimen ja valmistajan puhelinnumeron. Tämä esitetään number prodname description price manufid manufname phone Valmistajan tunnus yksiöi valmistajan, joten se määrää valmistajan nimen ja puhelinnumeron. Merkitään Sen sijaan esim. riippuvuus manufid manufname phone manufid number prodname ei ole voimassa, koska samalla valmistajalla voi olla useita eri tuotteita. CS-A1150 Tietokannat 6.3.2018 42 / 54
Relaatioiden avaimet Yksi tai useampi attribuutti {A 1,..., A n } on relaation R avain, jos 1. nämä attribuutit funktionaalisesti määräävät kaikki muut relaation R attribuutit. 2. mikään tämän attribuuttijoukon aito osajoukko ei funktionaalisesti määrää kaikkia muita relaation R attribuutteja. Edellisen kalvon esimerkissä attribuutti number on relaation Products1 avain. Sen sijaan esim. attribuutti manufid ei kelpaa tämän relaation avaimeksi, koska se ei funktionaalisesti määrää kaikkia relaation attribuutteja. CS-A1150 Tietokannat 6.3.2018 43 / 54
Relaatioiden avaimet, jatkoa Tarkastellaan relaatiota Orders1(orderNo, deliver, status, custno, productno, count). Mikä on tämän relaation avain? Attribuutit {orderno, prodno} muodostavat relaation Orders1 avaimen, koska 1. jos kaksi monikkoa yhtyvät avainattribuuttien osalta, niin niillä on samat arvot myös lopuille attribuuteille deliver, status, custno ja count 2. aidot osajoukot {orderno} ja {prodno} eivät määrää relaation kaikkia muita attribuutteja. Huom: Relaatiolla voi olla myös useampi kuin yksi mahdollinen avain. Tällöin yksi avain valitaan ensisijaiseksi avaimeksi (primary key). Yliavain (superkey) on attribuuttijoukko, joka sisältää avaimen (mutta voi sen lisäksi sisältää muitakin attribuutteja). Myös avain itse on yliavain. CS-A1150 Tietokannat 6.3.2018 44 / 54
Funktionaalisten riippuvuuksien päättelystä Funktionaaliset riippuvuudet voidaan usein esittää monella eri tavalla. Hyvien relaatiokaavioiden etsimisessä on usein olennaista tietää, mitkä riippuvuudet seuraavat toisistaan. Olkoon S ja T kaksi funktionaalisten riippuvuuksien joukkoa. Riippuvuuksien joukko S seuraa (follows) riippuvuuksista T, jos jokainen relaatioinstanssi, joka täyttää kaikki T :n riippuvuudet, täyttää myös kaikki S:n riippuvuudet. Riippuvuuksien joukot S ja T ovat ekvivalentit, jos S seuraa T :stä ja T seuraa S:stä. CS-A1150 Tietokannat 6.3.2018 45 / 54
Ositus/yhdistämissääntö Olkoon voimassa funktionaalinen riippuvuus A 1 A 2... A n B 1 B 2... B m Tämä riippuvuus on ekvivalentti seuraavan funktionaalisten riippuvuuksien joukon kanssa: A 1 A 2... A n B 1 A 1 A 2... A n B 2... A 1 A 2... A n B m Funktionaalinen riippuvuus A 1 A 2... A n B 1 B 2... B m voidaan siis korvata joukolla funktionaalisia riippuvuuksia A 1 A 2... A n B i, i = 1, 2,..., m. (Ositussääntö, splitting rule) Vastaavasti joukko funktionaalisia riippuvuuksia A 1 A 2... A n B i, i = 1, 2,..., m voidaan korvata yhdellä funktonaalisella riippuvuudella A 1 A 2... A n B 1 B 2... B m (yhdistämissääntö, combining rule). CS-A1150 Tietokannat 6.3.2018 46 / 54
Riippuvuuksien luokittelua Tarkastellaan riippuvuutta A 1 A 2... A n B 1 B 2... B m Riippuvuus on triviaali (trivial), jos kaikki B:t ovat A:iden osajoukko Riippuvuus on epätriviaali (nontrivial), jos vähintään yksi B ei sisälly A:iden joukkoon. Riippuvuus on täysin epätriviaali (completely nontrivial), jos mikään B ei sisälly A:iden joukkoon. Esimerkiksi riippuvuus orderno prodno prodno count on epätriviaali, mutta ei täysin epätriviaali. Riippuvuuden oikealta puolelta voidaan aina poistaa sellaiset attribuutit, jotka esiintyvät myös sen vasemmalla puolella. CS-A1150 Tietokannat 6.3.2018 47 / 54
Transitiivisuussääntö Tarkastellaan relaatiota R(A, B, C, D). Jos on voimassa funktionaaliset riippuvuudet A B ja B C, niin silloin on voimassa myös riippuvuus A C. Todistus: Olkoon R:n instanssissa kaksi monikkoa, joilla on samat arvot attribuutille A: (a, b 1, c 1, d 1 ) ja (a, b 2, c 2, d 2 ). Koska R:lle pätee A B, täytyy tällöin olla b 1 = b 2. Koska nyt molemmilla monikoilla on sama arvo attribuutille B ja B C, täytyy myös monikoiden C arvot olla samat: c 1 = c 2. On siis todistettu, että jos kahdella monikolla on sama arvo attribuutille A, niillä on myös sama arvo attribuutille C eli funktionaalinen riippuvuus A C pätee. CS-A1150 Tietokannat 6.3.2018 48 / 54
Attribuuttien sulkeuma Olkoon annettu attribuuttijoukko {A 1, A 2,..., A n } ja joukko funktionaalisia riippuvuuksia S. Haluamme tietää kaikki ne attribuutit, jotka jotka riippuvat funktionaalisesti joukosta {A 1, A 2,..., A n }. Näiden attribuuttien joukkoa sanotaan joukon {A 1, A 2,..., A n } sulkeumaksi riippuvuusjoukon S suhteen. Täsmällisemmin: joukon {A 1, A 2,..., A n } sulkeuma riippuvuusjoukon S suhteen on maksimaalinen attribuuttijoukko B siten että A 1 A 2... A n B Attribuuttijoukon {A 1, A 2,..., A n } sulkeumaa merkitään seuraavasti: {A 1, A 2,..., A n } + CS-A1150 Tietokannat 6.3.2018 49 / 54
Attribuuttien sulkeuman laskeminen, algoritmi Algoritmin syötteenä on attribuuttien joukko {A 1, A 2,..., A n } ja funktionaalisten riippuvuuksien joukko S. Sulkeuman voi laskea seuraavasti: 1. Jaa tarvittaessa funktionaaliset riippuvuudet käyttämällä ositussääntöä niin, että jokaisen riippuvuuden oikealla puolella esiintyy vain yksi attribuutti. 2. Olkoon X joukko, joka lopulta sisältää sulkeuman. Aseta X aluksi joukko {A 1, A 2,..., A n }. 3. Etsi jokin funktionaalinen riippuvuus B 1 B 2... B m C siten, että kaikki B 1, B 2,..., B m sisältyvät joukkoon X, mutta C ei sisälly. Lisää C joukkoon X. 4. Toista kohtaa kolme, kunnes X :ää ei enää voi kasvattaa. 5. Joukko X on nyt {A 1, A 2,..., A n } +. CS-A1150 Tietokannat 6.3.2018 50 / 54
Attribuuttien sulkeuman laskeminen, esimerkki Tarkastellaan relaatiota R(A, B, C, D, E, F ), jolla on riippuvuudet B C A D, A B C, D E ja C F B. Mikä on {A, B} +? Ratkaisu: Jaetaan ensin toinen riippuvuus kahdeksi riippuvuudeksi. Saadaan siis riippuvuudet: B C A B C D A B C D E C F B (jatkuu seuraavalla kalvolla) CS-A1150 Tietokannat 6.3.2018 51 / 54
Attribuuttien sulkeuman laskeminen, ratkaisu jatkuu Aloitetaan asettamalla X = {A, B}. Kolmannen riippuvuuden perusteella voidaan lisätä X :ään C, siis X = {A, B, C}. Toisen riippuvuuden perusteella lisätään D, jolloin X = {A, B, C, D}. Nyt neljännen riippuvuuden perusteella voidaan lisätä E, joten X = {A, B, C, D, E}. Tämän jälkeen X :n kasvattaminen ei enää onnistu minkään riippuvuuden avulla. {A, B} + on siis {A, B, C, D, E} CS-A1150 Tietokannat 6.3.2018 52 / 54
Miksi laskea attribuuttien sulkeuma? Attribuuttien sulkeuman perusteella voidaan päätellä, seuraako jokin riippuvuus A 1 A 2... A n B annetusta funktionaalisten riippuvuksien joukosta S: Lasketaan ensin {A1, A 2,..., A n } +. Jos B kuuluu sulkeumaan, niin A1 A 2... A n B seuraa S:stä, jos B ei kuulu sulkeumaan, niin tarkasteltu riippuvuus ei seuraa joukosta S. Näin voidaan päätellä, seuraako jokin riippuvuuksien joukko toisesta riippuvuuksien joukosta, tai ovatko annetut kaksi riippuvuuksien joukkoa ekvivalentteja. Sulkeuman avulla voidaan myös päätellä, onko annettu attribuuttijoukko relaation yliavain. Lasketaan attribuuttijoukon sulkeuma. Jos relaation kaikki attribuutit kuuluvat sulkeumaan, attribuuttijoukko on relaation yliavain. CS-A1150 Tietokannat 6.3.2018 53 / 54
Minimaaliset riippuvuusjoukot Joukosta riippuvuuksia voidaan johtaa uusia riippuvuuksia. Yleensä relaation osittamista varten haluaisimme mahdollisimman pienen joukon riippuvuuksia, jotka kuitenkin riittävät kuvaamaan kaiken olennaisen relaation riippuvuuksista. Riippuvuusjoukkoa, josta voidaan johtaa kaikki relaation riippuvuudet, kutsutaan relaation kannaksi (basis). Kanta B on minimaalinen kanta, jos seuraavat ehdot pätevät: 1. Kaikissa B:n riippuvuuksissa on oikealla puolella vain yksi attribuutti. 2. Jos mikä tahansa B:n riippuvuus poistetaan, B ei ole enää kanta. 3. Jos mistä tahansa B:n riippuvuuksista poistetaan vasemmalta puolelta yksi tai useampi attribuutti, B ei ole enää kanta. CS-A1150 Tietokannat 6.3.2018 54 / 54