Harri Laine Helsingin yliopisto
Suosion syy? Yksinkertaisuus vähän käsitteitä helppo hahmottaa Selkeä matemaattinen perusta ei tulkintaongelmia kuten esim. UML:ssä
teoria käytäntö kaavio: R(A 1 :D 1, A 2 :D 2,, A n :D n ) ilmentymä R D 1 D 2 D n {(a,b,,c), } R A 1 A 2 A n a b c relaatio=taulu attribuutti=sarakenimi monikko=rivi D 1
Keskeistä relaatiomallissa Taulun kaikki rivit ovat keskenään erilaisia Rivien järjestyksellä ei ole merkitystä Rivit voidaan identifioida vain sisältämänsä datan avulla Taululla on aina vähintään yksi avain = rivien identifiointiin kaikissa tilanteissa riittävä sarakeyhdistelmä Taululla voi olla useita avaimia
Pääavain = taulun rivien ensisijaiseksi identifiointitavaksi valittu avain Rivejä voidaan kytkeä toisiinsa vain sisällyttämällä yhteen riviin toisen rivin identifiointitieto eli (pää)avain. Kytkennän toteuttavia sarakkeita kutsutaan viiteavaimeksi.
Relaatiotietokannan kelpoisuusvaatimukset: arvojoukkoeheys= sarakkeessa on vain sen arvojoukkoon kuuluvia arvoja avaineheys = avaimen mikään sarake ei voi sisältää tyhjäarvoja viite-eheys = viiteavaimen arvona voi olla vain tyhjäarvo tai olemassa olevan rivin avainarvo
Suunnitteluteoria pyrkimys toisteettomuuteen ja ylläpidon helppouteen perustana tietojen väliset riippuvuudet relaatiomallin taulut aina 1. normaalimuodossa funktionaalinen riippuvuus: sarakkeen arvot ovat yksikäsitteisiä suhteessa jonkin toisen sarakkeen (määrääjän) arvoihin esim. henkilönimet yksikäsitteisiä suhteessa henkilötunnuksiin
Funktionaalisiin riippuvuuksiin perustuvana ylimpänä tavoitetilana Boyce-Codd normaalimuoto: Taulu on Boyce-Codd normaalimuodossa, jos kaikissa siihen liittyvissä ei triviaaleissa funktionaalisissa riippuvuuksissa määräjä sisältää taulun avaimen, eli kaikki riippuvuudet muotoa: avain jotain Boyce-Codd normaalimuodossa olevissa tauluissa ei esiinny tiedon toistoa
Hieman lievempi 3. normaalimuoto sallii avainriippuvuuksien lisäksi riippuvuudet, joissa jokin ei-avain määrä avainsarakkeen jokin X, avain X : X avain X, avain Z : avain Z jokin
Taulurakenne saatetaan tavoitetilaan jakamalla taulun sarakkeet useaksi tauluksi (= normalisointi) Riippuvuudet ohjaavat jakoa, mutta ennen jakoon ryhtymistä tulisi riippuvuusjoukkoa analysoida ja karsia joukosta pääteltävissä olevat riippuvuudet päättelyn perustana säännöstö ns. Armstrongin aksiomat. analyysin tuloksena pitäisi saada aikaan minimipeite = minimaalinen joukko riippuvuuksia, joista voidaan päätellä samat riippuvuudet kuin alkuperäisestä riippuvuusjoukosta
Lähtökohtana normalisoinnille on yleensä käsiteanalyysin tuloksesta muunnoksen avulla tuotettu taulurakenne. Ongelmallisia voivat tällöin olla erityisesti taulut, joihin kertyy useita viiteavaimia
Normalisointi (yleensä BCNF, mutta vähintään 3NF) Määrää riippuvuuksien minimipeite (~karsi pääteltävät riippuvuudet) Jaa riippuvuudet ryhmiin yhteisen määrääjän perusteella Muodosta taulu kunkin riippuvuusryhmän attribuuteista Jos jonkin taulun kaavio on toisen osajoukko karsi taulu. Jos alkuperäisen taulun yksikään avain ei sisälly mihinkään uuteen tauluun, valitse avaimista jokin ja tee sen sarakkeista oma taulu.
lomakenumero tilaajan tunnus tilaajan nimi tilaajan osoite tilaajan puhelinnumero toimitusosoite rivinumero tavaran koodi tavaran nimi tilattu määrä tilauspäivä
Tilausrivi lomakenumero rivinumero tavaran koodi tilattu määrä Tavara tavaran koodi tavaran nimi Tilaus lomakenumero tilaajan tunnus toimitusosoite tilauspäivä Tilaaja tilaajan tunnus tilaajan nimi tilaajan osoite tilaajan puhelinnumero
Taulujen normalisointi tuottaa toisiinsa kytkettyjä tauluja Tietojen kokoamiseen tarvitaan liitosoperaatioita jos liitoksia tarvitaan kovin usein, voi olla tarpeen huonontaa rakennetta (denormalisoida)
Relaatioalgebra operaatiot tauluilla laskemiseen joukko-opista: yhdiste, erotus, ristitulo, leikkaus omat operaatiot: valinta, projektio, liitos tkhj:ssä näiden kaltaiset perusoperaatiot hoitavat kyselyn käsittelyn kyselyn optimoinnin ja kustannuslaskennan perusta
kyselyn suoritus = sarja operaatioita, jotka kohdistuvat perustauluihin tai välituloksiin optimaalinen suoritus= suoritus joka on nopein tai muuten edullisin
10100 10000 500 2000 2020 100 500 1100 100 20 500 rivi i/o 400 14530 100 100 230 60 30 30 620 osa operaatioista vaihdannaisia eli järjestys voidaan vaihtaa vaikuttamatta lopputulokseen
10000 500 2000 100 500 40000 10100 2020 10000 20 500 620 1100 eri suoritusjärjestyksillä eri kustannukset 100 100 230 60 30 30 54130 kustannuksiin vaikuttavat indeksit, algoritmit järjestelmäarkkitehtuuri puskurit
Pitäisikö kyselyn tekijän kyetä arvioimaan kyselyn kokoluokka? Pitäisikö kokoluokka kyetä arvioimaan tietämättä käytettävää optimoijaa? Mikä olisi mittari? käsiteltävien rivien vähimmäismäärä?
Arvioinnin ongelmat: SQL:n purkaminen relaatioalgebran operaatioiksi ja optimaaliseksi kyselypuuksi Operaatiosta voidaan ilman tiedostorakenne- ja algoritmioletuksia arvioida vain tuloksen koko, Esimerkiksi valinta-operaation kustannus voi olla suhteessa lähtötaulun kokoon tai tuloksen kokoon riippuen indekseistä vaihteluväli voidaan kuitenkin määrätä.