CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

Samankaltaiset tiedostot
CS-A1150 Tietokannat CS-A1150 Tietokannat / 54

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 29

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 32

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 39

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CSE-A1200 Tietokannat

HELIA 1 (17) Outi Virkki Tiedonhallinta

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

CSE-A1200 Tietokannat

HELIA 1 (17) Outi Virkki Tiedonhallinta

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

CS-A1150 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

2. Käsiteanalyysi ja relaatiomalli

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

TIEDONHALLINTA - SYKSY Luento 7. Pasi Ranne /10/17 Helsinki Metropolia University of Applied Sciences

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

CS-A1150 Tietokannat

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Relaatiomallin peruskäsitteet Harri Laine 1. Relaatiotietokannat DONOTP

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

3. Käsiteanalyysi ja käsitekaavio

Relaatioalgebra. Kyselyt:

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

Karteesinen tulo. Olkoot A = {1, 2, 3, 5} ja B = {a, b, c}. Näiden karteesista tuloa A B voidaan havainnollistaa kuvalla 1 / 21

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

MS-A0402 Diskreetin matematiikan perusteet

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, k 2006 relaatioalgebra. Harri Laine 1

HELIA TIKO-05 1 (20) ICT03D Tieto ja tiedon varastointi O.Virkki

On autoja, henkilöitä, Henkilöllä on nimi Autolla on omistaja, joka on henkilö. Taulu AUTO(rekno, malli) Taulu HENKILO(nimi, )

Helsingin yliopisto/ tktl DO Tietokantojen perusteet, s 2000 Relaatioalgebra Harri Laine 1. Relaatioalgebra

Relaatioista TIETOJENKÄSITTELYTIETEIDEN LAITOS, JUHA IISAKKA 11-14

TIEDONHALLINTA - SYKSY Luento 2. Pasi Ranne /8/17 Helsinki Metropolia University of Applied Sciences

Nimi: Henkilötunnus: {id} {+id}

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Diskreetin Matematiikan Paja Tehtäviä viikolle 2. ( ) Jeremias Berg

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2004 Tietokannan suunnittelusta. Harri Laine 1

CS-A1150 Tietokannat

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1.

Tietokantojen suunnittelu, relaatiokantojen perusteita

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Mitä malleja olisi tarjolla? Abstraktiotasot tiedon käsittelyssä

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia

CSE-A1200 Tietokannat

Ensimmäinen induktioperiaate

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

Tietokannan suunnittelu

Tietokannat II -kurssin harjoitustyö

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokannan suunnittelusta Harri Laine 1

Ensimmäinen induktioperiaate

Helsingin yliopisto/ tktl D Tietokantojen perusteet, s 2000 Relaatioalgebra. Harri Laine 1. Relaatioalgebra.

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

joukko operaatioita, joilla relaatioista voidaan muodostaa uusia relaatioita joukko opin perusoperaatiot yhdiste, erotus, ristitulo, leikkaus

Lineaarikombinaatio, lineaarinen riippuvuus/riippumattomuus

HELIA 1 (12) Outi Virkki Tiedonhallinta

CS-A1150 Tietokannat

Sanomme, että kuvaus f : X Y on injektio, jos. x 1 x 2 f (x 1 ) f (x 2 ) eli f (x 1 ) = f (x 2 ) x 1 = x 2.

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

4.3. Matemaattinen induktio

1 Lineaariavaruus eli Vektoriavaruus

Joukot. Georg Cantor ( )

Olkoon R X Y. Sen käänteisrelaatio R 1 on joukosta Y joukkoon X määritelty relaatio, jonka laki on. yr 1 x xry.

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

Olkoon R X Y. Sen käänteisrelaatio R 1 on joukosta Y joukkoon X määritelty relaatio, jonka laki on. yr 1 x xry.

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

Tietokannat II -kurssin harjoitustyö

Tilakaaviot, sekvenssikaaviot (Haikala, Märijärvi ss , )

Opintopiiritehtävä 3: Verkkohuutokauppa

CSE-A1200 Tietokannat

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Johdatus graafiteoriaan

MS-A0401 Diskreetin matematiikan perusteet

uv n, v 1, ja uv i w A kaikilla

802320A LINEAARIALGEBRA OSA I

TIETOKANNAN NORMALISOINTI JA NORMAALIMUODOT

Transkriptio:

CS-A1150 Tietokannat 12.3.2019 CS-A1150 Tietokannat 12.3.2019 1 / 44

Oppimistavoitteet: tämän luennon jälkeen Osaat muuttaa UML-kaavion relaatiomalliin. Toisin sanoen: jos sinulla on valmis UML-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 12.3.2019 2 / 44

UML-kaavion muuttaminen relaatiokaavioiksi Mitä relaatioita määrittelisit tietokantaan tämän kaavion perusteella? Manufacturer 0..1 ID PK name phone Made-by Product number PK prodname description price Order Customer * * Belongs-to orderno PK * deliver * custno PK 1..1 name Ordered-by status born bonus address email count Countinfo CS-A1150 Tietokannat 12.3.2019 3 / 44

UML-kaavion muuttaminen relaatiokaavioiksi, jatkoa Perusperiaatteet: Jokaisesta luokasta tehdään relaatio, jolla on samat attribuutit kuin itse luokalla. Jokaisesta assosiaatiosta tehdään relaatio, jonka attribuutteina ovat assosiaation yhdistämien luokkien avaimet sekä mahdollisen assosiaatioluokan attribuutit. Erikoistapaukset (joita ei voida muuttaa suoraan em. perusperiaatteiden mukaan): Luokat, joiden avaimesta osa tulee toisen luokan attribuuteista ja näiden väliset assosiaatiot pitää käsitellä eri tavalla. Aliluokat pitää käsitellä eri tavalla. Joskus voidaan yhdistää kaksi perussääntöjen perusteella muodostuvaa relaatiota. CS-A1150 Tietokannat 12.3.2019 4 / 44

Esimerkki perustapauksesta Verkkokaupan UML-kaavion luokista muodostetaan relaatiot Customers(custNo, name, born, bonus, address, email) Products(number, name, description, price) Manufacturers(ID, name, phone) Orders(orderNo, deliver, status) Kaavion assosiaatioista tehdään relaatiot MadeBy(number, ID) BelongsTo(orderNo, number, count) OrderedBy(orderNo, custno) CS-A1150 Tietokannat 12.3.2019 5 / 44

Relaatioiden avaimista Luokasta muodostetulla relaatiolla avainattribuutit ovat samat kuin luokalla. Monesta moneen -assosiaatiosta muodostetulla relaatiolla avainattribuuteiksi tulevat assosiaation yhdistämien luokkien avainattribuutit. Monesta yhteen -assosiaatiosta muodostetulla relaatiolla avainattribuuteiksi tulevat vain monesta-puolen luokan avainattribuutit. Avainattribuutteja ei saa määritellä ylimääräisiä, koska avainattribuuttien pidetään huoli siitä, että relaatioon ei lisätä kahta monikkoa, jolla on samat arvot avaimelle. Jos esimerkiksi relaatiolla MadeBy olisi avainattribuuttina myös ID, voitaisiin relaatioon lisätä useita monikoita, joissa tuote on sama, mutta valmistaja eri. CS-A1150 Tietokannat 12.3.2019 6 / 44

Toinen esimerkki Sama luokka esiintyy assosiaatiossa kahteen kertaan: Empolyee ID PK first_name last_name born address position 0..1 0..20 Immediate superior Subordinate Luokan avainattribuutit tulevat relaatioon kahteen kertaan kuvaamaan kumpaakin assosiaation osapuolta. Assosiaatiosta muodostetaan relaatio Manages(subordinateID, superiorid) CS-A1150 Tietokannat 12.3.2019 7 / 44

Relaatioiden yhdistämisestä Ensimmäisessä esimerkissä UML-kaavion pohjalta luotiin mm. relaatiot Products(number, name, description, price) Manufacturers(ID, name, phone) MadeBy(number, ID) Relaatio MadeBy on syntynyt monesta yhteen -assosiaatiosta. 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 12.3.2019 8 / 44

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 -assosiaatiosta. 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 12.3.2019 9 / 44

Relaatioden yhdistämisestä, jatkoa Jos assosiaatio on monesta moneen, relaatioita ei voida yhdistää. Yhdistäminen johtaisi siihen, että sama tieto toistetaan moneen kertaan. Jos BelongsTo-relaatio yhdistettäisiin Orders-relaatioon, tuloksena olisi relaatio Orders(orderNo, deliver, status, custno, prodno, count) Saman tilauksen toimitustapa, tila ja tilaajan asiakasnumero olisi tallennettu tietokantaan useaan kertaan. CS-A1150 Tietokannat 12.3.2019 10 / 44

Välitehtävä Mitkä seuraavan kalvon tietokantakaavioista ovat oikein, kun alla oleva UML-kaavio muutetaan relaatioiksi? code name credits semester Course 0..1 Teaches ssno * name position Teacher department Vastaa Presemossa http://presemo.aalto.fi/tietokannat2019 CS-A1150 Tietokannat 12.3.2019 11 / 44

Välitehtävä jatkuu Vaihtoehdot: a Teachers(ssNo, name, position, department) Courses(code, name, credits, semester) Teaches(ssNo, code) b Teachers(ssNo, name, position, department) Courses(code, name, credits, semester) Teaches(code, ssno) c Teachers(ssNo, name, position, department, coursecode) Courses(code, name, credits, semester) d Teachers(ssNo, name, position, department) Courses(code, name, credits, semester, teacherssno) CS-A1150 Tietokannat 12.3.2019 12 / 44

Välitehtävän ratkaisu UML-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 12.3.2019 13 / 44

Koska relaatioiden yhdistäminen on järkevää? Monesta yhteen -assosiaatiosta 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 luokan olioista liittyy assosiaation kautta toisen luokan olioon, johtaa yhdistämineen relaatioon, jossa on useimmilla monikoilla NULL-arvoja assosiaation kautta tulevien attribuuttien paikalla. Tällöin yhdistäminen ei välttämättä kannata, koska: Assosiaation kautta tulevien attribuuttien tallentaminen vie ylimääräistä tilaa, jos lähes kaikilla monikoilla ko. attribuuttien arvo on NULL. Jos assosiaation tietoihin tehdään paljon kyselyitä, voi olla nopeampaa tehdä kyselyt pelkästään assosiaatiota kuvaavaan relaatioon, jos sen koko on selvästi pienempi kuin luokkaa kuvaavan relaation koko. (Tämä riippuu kuitenkin siitä, mitä muita relaatioita kyselyssä tarvitaan.) CS-A1150 Tietokannat 12.3.2019 14 / 44

Esimerkki 1 Lähes kaikilla tuotteilla on tieto siitä, mikä valmistaja ne on tuottanut. MadeBy-assosiaatiosta syntyneen relaation tiedot kannattaa yhdistää relaatioon Products, koska tietokantakaavio yksinkertaistuu eikä Products-relaation monikoilla juuri ole NULL-arvoja manufid-attribuutilla. CS-A1150 Tietokannat 12.3.2019 15 / 44

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 Employee Mentor number PK name occupation * MentoredBy 0..1 ID PK name firm address Koska vain pienellä osalla työntekijöistä on mentori, kannattaa assosiaatiosta MentoredBy tehdä todennäköisesti oma relaationsa eikä yhdistää sitä relaatioon Employees. CS-A1150 Tietokannat 12.3.2019 16 / 44

Kun luokan omat attribuutit eivät riitä avaimeksi size PK Version PK * 1..1 Product number PK color PK prodname description price Luokan Version avainattribuuttien lisäksi relaation Version avainattribuutiksi otetaan luokan Product avainattribuutti. Luokkien Version ja Product välisestä assosiaatiosta ei tehdä koskaan omaa relaatiota. Jos luokka Version on osallisena jossakin toisessa assosiaatiossa, niin kyseisestä assosiaatiosta muodostetun relaation täytyy sisältää sekä luokan Version että luokan Product avainattribuutit. CS-A1150 Tietokannat 12.3.2019 17 / 44

Kun luokan omat attribuutit eivät riitä avaimeksi size PK Version PK * 1..1 Product number PK color PK prodname description price Luokan Version avainattribuuttien lisäksi relaation Version avainattribuutiksi otetaan luokan Product avainattribuutti. Luokkien Version ja Product välisestä assosiaatiosta ei tehdä koskaan omaa relaatiota. Jos luokka Version on osallisena jossakin toisessa assosiaatiossa, niin kyseisestä assosiaatiosta muodostetun relaation täytyy sisältää sekä luokan Version että luokan Product avainattribuutit. Relaatiot Products(number, name, description, price) Versions(prodNo, size, color) CS-A1150 Tietokannat 12.3.2019 17 / 44

Luokka Version tavallisen assosiaation osapuolena Oletetaan, että verkkokaupassa joitakin tuotteen versioita on tarjolla vain määräaikaisissa kampanjoissa. Campaign name PK start PK Version * * size PK OfferedIn color PK PK * 1..1 Product number PK prodname end description price Kun assosiaatiosta OfferedIn muodostetaan relaatio, otetaan relaatioon mukaan luokkien Versions ja Campaigns avainattribuuttien lisäksi myös luokan Products avainattribuutti, koska se tarvitaan version tunnistamiseen. Relaatiot Products(number, name, description, price) Versions(prodNo, size, color) Campaigns(name, start, end) OfferedIn(prodNo, size, color, campaignname, start) CS-A1150 Tietokannat 12.3.2019 18 / 44

Perintähierarkian esittäminen relaatioina Miten yliluokka ja sen aliluokat esitetään relaatioina? Product number PK prodname description price artist CD author Book Computer ram Firm * Maintains * firmid PK length pages speed name harddisk address MaintenanceInfo lengthofcontract CS-A1150 Tietokannat 12.3.2019 19 / 44

Perintähierarkian esittäminen relaatioina, jatkoa UML-kaavio voidaan muuttaa relaatiomalliksi kolmella eri tavalla: 1. Tee yliluokasta ja jokaisesta aliluokasta oma relaationsa. Aliluokasta tehdyn relaation attribuutteina on yliluokan avain ja aliluokan omat attribuutit. 2. Tee yliluokasta ja jokaisesta aliluokasta oma relaationsa. Aliluokasta tehdyn relaation attribuutteiksi tulee kaikki yliluokan attribuutit ja lisäksi aliluokan omat attribuutit. 3. Tee koko perintähierarkiasta vain yksi relaatio. Niille attribuuteille, joita tietyllä oliolla ei ole, tulee arvoksi NULL. Lisäksi tehdään relaatiot tavalliseen tapaan niistä assosiaatioista, joissa yli- tai aliluokka on osallisena. CS-A1150 Tietokannat 12.3.2019 20 / 44

Esimerkki 1: aliluokista tehdyillä relaatioilla vain omat attribuutit ja yliluokan avainattribuutit Kalvon 18 yliluokasta ja aliluokista muodostetaan neljä eri relaatiota: Products(number, name, description, price) CDs(number, artist, length) Books(number, author, pages) Computers(number, speed, ram, harddisk) Lisäksi on tarvitaan relaatiot kuvaamaan assosiaatiota Maintains ja luokkaa Firm: Maintains(number, firmid, lengthofcontract) Firms(firmID, name, address) Kutakin aliluokan oliota vastaa monikko sekä aliluokkaa kuvaavassa relaatiossa että yliluokkaa vastaavassa relaatiossa. CS-A1150 Tietokannat 12.3.2019 21 / 44

Esimerkki 2: aliluokista tehdyillä relaatioilla sekä omat attribuutit että kaikki yliluokan attribuutit Kalvon 18 aliluokista tehdyillä relaatioilla on nyt enemmän attribuutteja: Products(number, name, description, price) CDs(number, name, description, price, artist, length) Books(number, name, description, price, author, pages) Computers(number, name, description, price, speed, ram, harddisk) Lisäksi Maintains(number, firmid, lengthofcontract) Firms(firmID, name, address) Aliluokan tuotetta vastaa nyt monikko vain yhdessä relaatiossa. Relaatiossa Products on vain ne monikot, jotka eivät kuulu mihinkään aliluokista tehtyihin relaatioihin. Jos kaikki monikot kuuluvat johonkin aliluokkaan, ei relaatiota Products tarvita lainkaan. CS-A1150 Tietokannat 12.3.2019 22 / 44

Esimerkki 3: vain yksi relaatio Tehdään yliluokasta ja kaikista aliluokista vain yksi yhteinen relaatio. Kalvon 18 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 relaatiot Maintains(number, firmid, lengthofcontract) Firms(firmID, name, address) CS-A1150 Tietokannat 12.3.2019 23 / 44

Lähestymistapojen vertailua Kyselyissä, jotka koskevat kaikkia tuotteita, on yleensä edullista, jos eri relaatioita vähän. Kyselyissä, jotka koskevat vain esimerkiksi kirjoja, on edullisempaa, jos kirjat ovat omassa relaatiossaan. Jos kaikki monikot kuuluvat johonkin aliluokkaan, tapa 2 on usein toimivin. Tapa 3 on järkevä lähinnä silloin, jos on paljon olioita, jotka kuuluvat samanaikaisesti useaan aliluokkaan (ei aina sallittua), esimerkiksi CD:llä oleva äänikirja. CS-A1150 Tietokannat 12.3.2019 24 / 44

Aggregaatio ja kompositio Product number PK * 0..1 ProductGroup Product groupid PK number PK * 1 ProductGroup groupid PK prodname groupname prodname groupname description description price price Aggregaatiota ja kompositota voidaan käsitellä samalla tavalla kuin vastaavia assosiaatioita. Yleensä niistä ei tehdä omaa relaatiota, vaan relaation tiedot liitetään monesta-puolen luokasta tehtyyn relaatioon. Esimerkissä Products(number, prodname, description, price, groupid) ProductGroups(groupID, groupname) Huomautus: kalvojen 17 25 esimerkeissä relaatiolla Products ei ole attribuuttia manufid, koska esimerkeissä relaatiot on tehty vain vastaavassa UML-kaaviossa näkyvien luokkien pohjalta eikä niissä ole otettu huomioon kaavion ulkopuolisia tietoja. CS-A1150 Tietokannat 12.3.2019 25 / 44

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. Jotkin niistä ovat parempia kuin toiset. Relaatiokaaviot voidaan muuttaa parempaan muotoon normalisoimalla, jossa tarvitaan tietoa relaatioiden attribuuttien funktionaalisista riippuvuuksista. CS-A1150 Tietokannat 12.3.2019 26 / 44

Esimerkki Kaksi eri tapaa esittää tuotteita ja niiden valmistajia. 1. Tiedot on tallennettu samaan relaatioon: Products1(number, prodname, description, price, manufid, manufname, phone) 2. Tiedot on jaettu kahteen relaatioon: Products(number, prodname, description, price, manufid) Manufacturers(ID, manufname, phone) CS-A1150 Tietokannat 12.3.2019 27 / 44

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 12.3.2019 28 / 44

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 12.3.2019 29 / 44

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 12.3.2019 30 / 44

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 12.3.2019 31 / 44

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. Merkitään A 1 A 2... A n B R:llä voi kuitenkin olla myös muita attribuutteja, joiden arvot voivat kahdella monikolla poiketa toisistaan, vaikka attribuuteilla A 1, A 2,..., A n ja B on samat arvot. Funktionaalisen riippuvuuden ehdon pitää päteä kaikille mahdollisille R:n monikoille, ei vain kaikille tällä hetkellä R:n instanssissa oleville monikoille. Funktionaalisia riippuvuuksia tarkastellaan saman relaation eri attribuuttien välillä, ei eri relaatioiden attribuuttien välisiä suhteita. CS-A1150 Tietokannat 12.3.2019 32 / 44

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 12.3.2019 33 / 44

Funktionaalinen riippuvuus, esimerkki Olkoon määritelty relaatio Products1(number, prodname, description, price, manufid, manufname, phone) Mitä funktionaalisia riippuvuuksia relaatiolla on? Tuotenumero yksilöi tuotteen number prodname description price manufid manufname phone Valmistajan tunnus yksilöi valmistajan Sen sijaan esim. riippuvuus manufid manufname phone manufid number prodname ei ole voimassa, koska samalla valmistajalla voi olla useita eri tuotteita. CS-A1150 Tietokannat 12.3.2019 34 / 44

Relaatioiden avaimet Yksi tai useampi attribuutti {A 1,..., A n } on relaation R avain (key), 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 12.3.2019 35 / 44

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 kahdella monikolla on samat arvot 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 12.3.2019 36 / 44

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 12.3.2019 37 / 44

Ositus/yhdistämissääntö Funktionaalinen riippuvuus A 1 A 2... A n B 1 B 2... B m 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 Ositussääntö (engl. splitting rule): jos funktionaalisen riippuvuuden oikealla puolella on useita attribuutteja, voidaan se jakaa useaksi riippuvuudeksi kuten yllä. Yhdistämissääntö (engl. combining rule): jos usealla funktionaalisella riippuvuudella on täsmälleen sama vasen puoli, voidaan ne yhdistää yhdeksi riippuvuudeksi. CS-A1150 Tietokannat 12.3.2019 38 / 44

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. Riippuvuuden oikealta puolelta voidaan aina poistaa sellaiset attribuutit, jotka esiintyvät myös sen vasemmalla puolella. CS-A1150 Tietokannat 12.3.2019 39 / 44

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. CS-A1150 Tietokannat 12.3.2019 40 / 44

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 } eli 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 X siten että Sulkeumaa merkitään A 1 A 2... A n X {A 1, A 2,..., A n } + CS-A1150 Tietokannat 12.3.2019 41 / 44

Attribuuttien sulkeuman laskeminen, algoritmi Attribuuttien joukon {A 1, A 2,..., A n } sulkeuman funktionaalisten riippuvuuksien joukon S suhteen 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. Alusta X :ksi 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 12.3.2019 42 / 44

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} +? CS-A1150 Tietokannat 12.3.2019 43 / 44

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. Voidaan päätellä, seuraako jokin riippuvuuksien joukko toisesta riippuvuuksien joukosta, tai ovatko annetut kaksi riippuvuuksien joukkoa ekvivalentteja. Voidaan myös päätellä, onko annettu attribuuttijoukko relaation yliavain. CS-A1150 Tietokannat 12.3.2019 44 / 44