Transformointi

Kuten osassa 2 on todettu, käsitteellinen malli kuvaa vain tietokannan kannalta olennaisia käsitteitä ja niiden suhteita. Käsitteellinen malli on hyödyllinen kartoittamaan kohdealueen tietotarpeita miettimättä vielä tarkemmin tietokannan lopullista toteutusta.

Valitettavasti käsitteellinen malli (esim. ER-kaavio) itsessään ei vielä kerro, missä muodossa data tulisi varsinaisesti tallentaa, jotta käsitteellisen mallin kaikki käsitteet, attribuutit, suhteet ja niiden kardinaliteetit pystyisi kuvamaan oikein. Edellisessä Luvussa 3.1 opimme relaatiomallista, joka on loogisen tason tietomalli: se määrittää, missä muodossa dataa voit tallentaa tietokantaan ja millä tavoin sitä voisi käsitellä.

Käsitteellisen mallin ja relaatiomallin välillä kuitenkaan ei ole suoraa 1:1 vastaavuutta. Relaatiomallissa on vain relaatiota, perusavaimia ja viiteavaimia, kun taas ER-mallissa on kohdetyyppejä, suhdetyyppejä, abstraktiorakenteita ja muita erikoisrakenteita. Käsitteellinen malli on kuitenkin muunneltavissa pelkästään relaatioita ja eheysrajoitteita käyttäväksi relaatiotietokannaksi; tätä muunnosta kutsutaan transformoinniksi.

Käsitteellisen mallin transformoinnilla tarkoitetaan Luvussa 2.2 esitellyn ER-kaavion muuntamista tietokannan loogiseksi malliksi. Transformoinnissa siis ER-kaavio muunnetaan varsinaiseksi tietokannan loogiseksi rakenteeksi.

ER-kaavion transformoinniksi relaatiomalliksi on olemassa valmis kokoelma sääntöjä, joita noudattamalla ER-kaaviosta saadaan johdettua hyvin pitkälti valmis relaatiotietokannan rakenne, valittua sopivat perusavaimet sekä viiteavaimet. Alempana esitetyt säännöt on mukailtu Elmasri ja Navathen [15] formaaleista transformointissäännöistä.

Sääntöjen tarkempi perustelu jää toistaiseksi tämän materiaalin aiheen ulkopuolelle. Mainittakoon kuitenkin, että säännöt ovat valittu niin, että niillä saa tuotettua oikeellisen relaatiotietokannan vähäisellä määrällä relaatioita (tauluja) ja attribuutteja (sarakkeita). Osassa 5 annetaan tarkempia työkaluja varmistumaan transformointisääntöjen "optimaalisuudesta".

Kohdetyyppien transformointi

Sääntö 1 (Vahvat kohdetyypit): jokaisesta vahvasta kohdetyypistä tehdään oma relaatio. Kohdetyypin tavallisista attribuuteista (eli attribuuteista, jotka eivät ole moniarvoisia, johdettuja tai koottuja) tehdään relaation attribuutteja. Kohdetyypin avainattribuuteista muodostetaan relaation perusavain.

Kuvio: Vahvan kohdetyypin transformointi.
Kuvio: Vahvan kohdetyypin transformointi.

Sääntö 2 (Heikot kohdetyypit): jokaisesta heikosta kohdetyypistä tehdään ensin oma relaatio säännön 1. mukaisesti. Relaation perusavaimeksi valitaan kohdetyypin avainattribuutit sekä tunnistavan kohdetyypin avainattribuutit.

Kuvio: Heikon kohdetyypin transformointi.
Kuvio: Heikon kohdetyypin transformointi.

Attribuuttien transformointi

Sääntö 3 (Johdetut attribuutit): jokainen johdettu attribuutti hylätään.

Kuvio: Johdettu attribuutti hylätään transformoinnissa.
Kuvio: Johdettu attribuutti hylätään transformoinnissa.

Sääntö 4 (Kootut attribuutit): jokaisesta kootusta attribuutista valitaan otetaan kokoavat (yksinkertaiset) attribuutit mukaan relaatioon. Koottava attribuutti hylätään.

Kuvio: Kootun attribuutin transformointi.
Kuvio: Kootun attribuutin transformointi.

Sääntö 5 (Moniarvoiset attribuutit): jokaisesta moniarvoisesta attribuutista tehdään oma relaatio (ns. "attribuuttirelaatio"). Attribuuttirelaation perusavaimeksi valitaan moniarvoinen attribuutti sekä sen kohdetyypin avainattribuutit, johon transformoitava moniarvoinen attribuutti kuuluu.

Kuvio: Moniarvoisen attribuutin transformointi.
Kuvio: Moniarvoisen attribuutin transformointi.

Suhdetyyppien transformointi

Huomautus

Alla olevat suhdetyyppien kardinaliteetit viittaavat kohteiden maksimikardinaliteetteihin. Eli 1-1 -suhde tarkoittaa suhdetta, jossa kummankin kohteen maksimikardinaliteetti on 1 ("henkilö voi olla aktiivisessa avioliitossa max. yhden henkilön kanssa"). Puolestaan 1-N -suhde tarkoittaa, että yhden kohdetyypin maksimikardinaliteetti on 1 ja toisen kohteen N ("henkilö omistaa monta autoa").

Relaatiomallissa minimikardinaliteettia ei siis voi mallintaa pelkästään perus- ja viiteavaimilla, vaan siihen tarvitaan erikoisempia eheysrajoitteita.

Sääntö 6 (1-1 -suhde).: jokaisesta binäärisestä 1-1 -suhdetyypistä sijoitetaan jommankumman kohdetyypin avainattribuutit viiteavaimeksi toiseen kohdetyypin relaatioon. Transformoinnin kannalta ei ole merkitystä, miten päin viiteavain asetetaan. Jos suhteella on attribuutteja, ne sijoitetaan samaan relaatioon, johon on sijoitettu viiteavain.

Kuvio: Binäärisen 1-1 -suhdetyypin transformointi. On myös OK, jos sen sijaan viiteavain lisättäisiin relaatioon G relaation H sijaan.
Kuvio: Binäärisen 1-1 -suhdetyypin transformointi. On myös OK, jos sen sijaan viiteavain lisättäisiin relaatioon G relaation H sijaan.

Sääntö 7 (1-N -suhde): jokaisesta binäärisestä 1-N -suhdetyypistä sijoitetaan 1:n puoleisen kohdetyypin avainattribuutit viiteavaimeksi N:n puoleisesta kohdetyypistä muodostettuun relaatioon. Jos suhteella on attribuutteja, sijoitetaan ne N:n puoleisesta kohdetyypistä muodostettuun relaatioon (eli sama relaatio, johon lisättiin viiteavain).

Kuvio: Binäärisen 1-N -suhdetyypin transformointi.
Kuvio: Binäärisen 1-N -suhdetyypin transformointi.

Sääntö 8 (N-M -suhde): jokaisesta binäärisestä N-M -suhdetyypistä muodostetaan oma relaatio (ns. "suhderelaatio"). Suhderelaation attribuuteiksi valitaan perusavaimeksi N-M -suhteeseen liittyvien kohdetyyppien avainattribuutit. Jos suhteella on attribuutteja, sijoitetaan ne suhderelaatioon.

Kuvio: Binäärisen N-M -suhdetyypin transformointi.
Kuvio: Binäärisen N-M -suhdetyypin transformointi.

Sääntö 9 (-ääriset suhteet): jokainen -äärinen () suhdetyyppi transformoidaan säännön 8. mukaisesti.

Kuvio: -äärisen (tässä tertiäärinen, ) N-M -suhdetyypin transformointi
Kuvio: -äärisen (tässä tertiäärinen, ) N-M -suhdetyypin transformointi

Abstraktiorakenteiden transformointi

Erilaisten abstraktiorakenteiden (osittainen tai kattava sekä leikkaava tai erillinen) transformoinnille on yleisellä tasolla neljä tapaa.

Tapa 1.: jokaisesta ali- ja ylikohdetyypistä muodostetaan oma relaatio. Alikohdetyyppien perusavaimeen lisätään ylikohdetyypin avainattribuutit sekä alikohdetyypin omat avainattribuutit. Ylikohdetyypistä perityt avainattribuuteista

Tapa 2.: jokaisesta alikohdetyypistä muodostetaan oma relaatio. Relaatioiden attribuuteiksi valitaan sekä kohdetyyppien omat attribuutit että ylikohdetyypin attribuutit.

Tapa 3.: muodostetaan yksi relaatio, jonka attribuuteiksi valitaan kaikkien ali- ja ylikohdetyyppien kaikki attribuutit sekä lisäattribuutti (yleensä nimeltään tyyppi) ilmaisemaan monikon roolia relaatiossa.

Tapa 4.: muodostetaan yksi relaatio tavan 3. mukaan, mutta lisäattribuutin sijaan käytetään totuusarvoisia lisäattribuutteja ("flageja") ilmaisemaan monikon rooleja relaatiossa (esim. onko_a, onko_b kuvaamaan, onko monikko tyyppiä A, B tai kumpaakin).

Lähtökohtaisesti kaikki neljä tapaa soveltuu kaikkien abstraktiorakenteiden normalisointiin. Käytännössä abstraktiorakenteiden transformoinnissa voi soveltaa seuraavia "nyrkkisääntöjä" eli heuristiikoita:

Heuristiikka 1 (Erillinen ja kattava): Transformoi erillinen ja kattava abstraktiorakenne yleensä tavalla 2, mutta harkitse myös seuraavat tavat:

  • Tapa 1: tuottaa enemmän relaatioita; saman monikon tiedot toistetaan kahdessa relaatiossa; toisaalta tietokannasta on helpompaa hakea kaikkien alikohdetyyppien monikot.
  • Tapa 3: tuottaa yhden taulun; helppoa tehdä eri tyyppeihin kohdistuvat kyselyt; voi olla tosi paljon NULL-arvoja samassa relaatiossa.
Kuvio: Erilliselle ja kattavalle abstraktiorakenteelle sopivia transformointitapoja ovat tapa 2, 1 ja 3.
Kuvio: Erilliselle ja kattavalle abstraktiorakenteelle sopivia transformointitapoja ovat tapa 2, 1 ja 3.

Heuristiikka 2 (Erillinen ja osittainen): Transformoi erillinen ja osittainen abstraktiorakenne yleensä tavalla 1. Silloin vältytään samojen monikoiden toistolta yli- ja alikohdetyyppien relaatioissa.

Kuvio: Erilliselle ja osittaiselle abstraktiorakenteelle sopivin transformointitapa on yleensä 1.
Kuvio: Erilliselle ja osittaiselle abstraktiorakenteelle sopivin transformointitapa on yleensä 1.

Heuristiikka 3 (Leikkaava ja kattava): Transformoi leikkaava ja kattava abstraktiorakenne yleensä tavalla 4. Silloin monikon tyyppi mallinnetaan totuusarvoilla. Jos tapa 4 ei käy, harkitse tapaa 1.

Kuvio: Leikkaavalle ja kattavalle abstraktiorakenteelle sopivia transformointitapoja ovat 4 ja 1.
Kuvio: Leikkaavalle ja kattavalle abstraktiorakenteelle sopivia transformointitapoja ovat 4 ja 1.

Yllä olevan kuvion perusteella relaatiossa opiskelijan monikolle asetetaan <OnkoOpiskelija, true>, henkilökunnalle <OnkoHenkilökunta, true>. Jos opiskelija on myös henkilökuntaa, voidaan silloin monikolle asettaa (<OnkoOpiskelija, true>; <OnkoHenkilökunta, true>).

Tapa 1 voi aiheuttaa turhaa toistoa erityisesti henkilökuntaopiskelijoiden kannalta: jos opiskelija on myös henkilökuntaan, tulee hänen tiedot tallentaa relaatioihin HENKILÖ, OPISKELIJA sekä HENKILÖKUNTA.

Heuristiikka 4 (Leikkaava ja osittainen): Transformoi leikkaava ja osittainen abstraktiorakenne yleensä tavalla 4. Harkitse myös tapaa 1: jokaiselle alikohdetyypille on oma relaatio, johon on helppoa määritellä suhteita. Toisaalta, tavassa 1 saman monikon tiedot voi joutua toistamaan useassa eri relaatiossa.

Kuvio: Leikkaavalle ja osittaiselle abstraktiorakenteelle sopivia transformointitapoja ovat tapa 4 ja 1
Kuvio: Leikkaavalle ja osittaiselle abstraktiorakenteelle sopivia transformointitapoja ovat tapa 4 ja 1

Yllä olevan kuvan perusteella tavassa 4 opiskelijan, henkilökunnan ja henkilökuntaopiskelijan määritys onnistuu heuristiikan 3 tapaisesti. Lisäksi jos henkilö ei ole opiskelija eikä henkilökuntaa, voidaan henkilön monikolle asettaa (<OnkoOpiskelija, false>; <OnkoHenkilökunta, false>).

Tässäkin tapa 1 voi aiheuttaa turhaa toistoa, joten sen käyttöä tulee harkita tarkasti.

Sääntöjen soveltaminen

Esitettyihin sääntöihin on olemassa lukuisia poikkeuksia. Monimutkaisemmissa ER-kaavioissa kohdealueissa sääntöjä täytyy soveltaa.

Yleinen lähestymistapa transformointiin on: transformoi kohdetyypit, transformoi attribuutit, transformoi suhteet. Jokaista yllä olevaa sääntöä sovelletaan järjestyksessä. Jos törmäät vastaan tilanteeseen, johon voisi päteä useampi sääntö, kokeile seuraavia heuristiikoita:

  • Kokeile soveltaa kaikki mahdollisesti sopivat säännöt peräkkäin.
  • Valitse joku sopivista säännöistä ja sovella se. Voit kokeilla soveltaa kaikki sopivat säännöt erikseen ja katsoa, mikä tulos voisi olla tietokannan datan kannalta järkevämpi (esim. tule vähemmän relaatiota, tulee selkeämpi rakenne).
  • Kaikki suhteet (paitsi tunnistavat) voidaan transformoida säännöllä 8 (N-M -suhteet) luomalla suhderelaatio. Käytä tätä tapaa silloin, jos suhteella on esimerkiksi erikoisattribuutteja, joita on vaikeaa transformoida muuten. Ota huomioon kuitenkin, että joudut mahdollisesti normalisoimaan relaatiota myöhemmin (normalisointi käsitellään osassa 5).
  • Huomaa, että abstraktiorakenteiden transformoinnissa tapa 1 käy aina riippumatta abstraktiorakenteen tyypistä! Erityisesti jos alikohdetyypeillä on suhteita eri kohteisiin, voi olla perusteltua transformoida abstraktiorakenne tavalla 1. Silloin jokaisella alikohdetyypillä on oma relaatio, joille on helppoa transformoida suhdetyypit.

Huomaa, että nämä ovat heuristiikat eikä tarkat säännöt! Pääset Harjoituksessa 3.2 kokeilemaan erikoistilanteiden transformointia.

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.