Tehtävä: ER-kaavion transformointi

Tässä ohjatussa tehtävässä tutustutaan ER-kaavioiden transformointiin relaatiotietokantojen relaatioiksi (eli käytännössä tauluiksi). Transformointi on hyödyllinen esiaskel tietokantojen toteuttamiselle, sillä se on nopeaa ja mahdollistaa vielä tietokannan rakenteen helpon korjaamisen jos kohdealueen vaatimukset sitä edellyttävät.

Tehtävässä on useita osatehtäviä. Pääset tehtävässä eteenpäin suorittamalla jokainen osatehtävä kerrallaan.

Tämä tehtävä on jatkoa Tehtävälle 2.1. Tee ensin Tehtävä 2.1 ennen kuin aloitat tämän tehtävän.

Ennen tehtävän aloittamista tutustu seuraaviin lukuihin:

  • Luku 3.1, jossa esitetään relaatiotietokantojen peruskäsitteitä. Tässä tehtävässä erityisesti tulee ymmärtää, mitä on relaatio, perusavain sekä viiteavain.

  • Luku 3.2, jossa esitellään kaikki transformaatiosäännöt. Tässä tehtävässä tutustutaan yleiseen transformaatioprosessiin, ja tarkempi sääntöjen tarkastelu jää tämän tehtävän ulkopuolelle.

Jos huomaat virheitä tai sinulla on kysyttävää tehtävistä, ota yhteyttä kurssin opettajiin

Tärkeimmät muutospäivitykset listataan tähän:

15.1.: Korjattu osatehtävän "Suhteiden transformointi" mallivastaus

Tehtävänanto

Palataan Tehtävässä 2.1 mallinnettuun opiskelijatietokantaan ja transformoidaan se relaatiotietokantaksi.

Seuraa alla olevissa osioissa olevia vaiheita ja täydennä alla olevan palautuslaatikon vastauksia sen perusteella. Löydät jokaisen osion lopussa tarkistuspainikkeen, jolla voit testata vastauksesi oikeellisuuden.

Kohdetyyppien transformointi

# openOsa1

Katsotaan kertaukseksi vielä opiskelijatietokannan ER-kaavio:

Aloitetaan transformoimalla kohdetyypit ja niiden perusattribuutit. Perusattribuuteilla tarkoitetaan tässä kaikkia niitä attribuutteja, jotka eivät ole koottuja, moniarvoisia tai johdettuja.

Sovelletaan tähän seuraava transformointisääntö:

Sääntö 1.: jokaisesta vahvasta kohdetyypistä tehdään oma, ns. kohderelaatio. Kohdetyypin tavallisista attribuuteista (eli attribuuteista, jotka ovat atomisia, yksinkertaisia ja tallennettuja) tehdään relaation attribuutteja. Kohdetyypin avainattribuuteista muodostetaan relaation perusavain.

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

Relaatiotietokannalle on olemassa erilaisia merkintätapoja: relaatiot voidaan kuvata taulukkona tai vaikkapa UML-kaavioiden luokkina. Tällä kurssilla käytämme samaa merkintätapaa, joka on esitetty Luvussa 3.1:

RELAATION_NIMI(attribuutti1, attribuutti2, attribuutti3)

Perusavaimet (vastaavat pääosin avainattribuutteja ER-kaavioissa) merkitään näissä tehtävissä poikkeuksellisesti merkitsemällä avainattribuutit {| |}-sulkujen sisään. Esimerkiksi seuraavassa kaaviossa

RELAATION_NIMI({|attribuutti1, attribuutti2|}, attribuutti3)

attribuutit attribuutti1 sekä attribuutti2 määräävät relaation perusavaimen.

Lisätään siis kaikki kohdetyypit ja niiden perusattribuutit vastauslaatikkoon. Tässä vaiheessa ei vielä kannata transformoida erikoisattribuutteja, kuten koottuja, johdettua tai moniarvoisia. Määritä ensin relaatiot ja aseta niihin kaikki yksinkertaiset attribuutit:

  1. Siirrä kursori tyhjälle riville
  2. Paina "Uusi relaatio" -painiketta, joka lisää pohjan uudelle relaatiolle.
  3. Aseta relaation nimeksi Opiskelija ja lisää relaatiolle opiskelijan tavalliset attribuutit (eli kaikki attribuutit, jotka eivät ole koottuja, moniarvoisia tai johdettuja):
    • id
    • sähköpostiosoite
    • osoite
    • aloitusvuosi
  4. Merkitse avainattribuutti id perusavaimeksi
    • Maalaa attribuutti id
    • Paina "Merkitse perusavaimeksi" -painiketta
  5. Lisää uusi tyhjä rivi ja toista vaiheet 1-4 kaikille muille kohdetyypeille
Esimerkki: Kohdetyyppien ja perusattribuuttien transformointi

Voit kelluttaa kaavioeditorin Kelluta-painikkeella. Silloin teksti siirtyy oikeaan laitaan, ja editorille vapautuu tilaa oikealle.

# t31_o1

Kun olet transformoinut kohdetyypit ja perusattribuutit, tallenna vastauksesi. Voit sitten tarkistuttaa vastauksesi tarkistuskoneella ja katsoa mallivastauksen alla olevalla painikkeella.

# o1_palauta

Erikoisattribuuttien transformointi

# openOsa2

Transformoidaan seuraavaksi kaikki kohdetyypeissä olevat erikoisattribuutit. Erikoisattribuutit ovat muun muassa moniarvoiset, kootut, johdetut ja kaikki muut sellaiset, joille pätevät omat transformointisäännöt.

Opiskelijatietokannassa huomataan, että kohdetyypillä Opiskelija on kaksi erikoisattribuuttia: nimi sekä puhelinnumerot. Katsotaan näille liittyvät transformointisäännöt kurssimonisteesta:

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

Sääntö 5.: jokaisesta moniarvoisesta attribuutista tehdään oma, ns. attribuuttirelaatio. Relaation perusavaimeksi valitaan moniarvoisen attribuutin lisäksi sen kohdetyypin avainattribuutit, johon transformoitava moniarvoinen attribuutti kuuluu.

Kuvio 3.5: Kootun, johdetun ja moniarvoisen attribuutin transformointi.
Kuvio 3.5: Kootun, johdetun ja moniarvoisen attribuutin transformointi.

Huomaa, että yllä olevassa esimerkissä moniarvoiselle attribuutille luotiin relaatio D3 ja siihen lisättiin relaation D attribuutti d1. Relaation D3 attribuutti d1 on siis viiteavain relatioon D, eli näiden kahden attribuutin arvot ovat keskenään samat. Toisin sanoin, viiteavain nimensä mukaisesti viittaa johonkin toisessa relaatiossa olevaan attribuuttiin ( ks. Luku 3.1).

Relaatiokaaviossa viiteavaimet voidaan merkitä seuraavalla tavalla:

D3.d1 -> D.d1

Transformoidaan attribuutit sääntöjen mukaan alla olevaan laatikkoon:

  1. Siirrä kursori uudelle riville ja lisää uusi relaatio.
  2. Anna relaation nimeksi Opiskelija_puhelinnumerot. Tämä relaatio vastaa kohteen Opiskelija moniarvoista attribuuttia puhelinnumerot.
  3. Lisää relaatiolle Opiskelija_puhelinnumerot attribuuteiksi relaation Opiskelija perusavain id. Aseta selkeyden vuoksi sen nimeksi opiskelija_id.
  4. Lisää relaatiolle vielä uusi attribuutti puhelinnumero, joka sisältää yksittäisen puhelinnumeron.
  5. Merkitse opiskelija_id sekä puhelinnumero perusavaimeksi.
  6. Siirrä kursori uudelle riville ja lisää vielä uusi viiteavain painamalla "Uusi viiteavain".
    • Aseta viiteavaimeksi relaation Opiskelija_puhelinnumerot attribuutti opiskelija_id ja määritä se viittaamaan relaation Opiskelija attribuuttiin id.
  7. Sovella vielä sääntöä 4 attribuutille nimi.
Esimerkki: Moniarvoisen attribuuttin transformointi

Voit kelluttaa kaavioeditorin Kelluta-painikkeella. Silloin teksti siirtyy oikeaan laitaan, ja editorille vapautuu tilaa oikealle.

# t31_o2

Kun olet transformoinut erikoisavaimet, tallenna vastauksesi. Voit sitten tarkistuttaa vastauksesi tarkistuskoneella ja katsoa mallivastauksen alla olevalla painikkeella.

# o2_palauta

Suhteiden transformointi

# openOsa3

Transformoidaan lopuksi vielä suhdetyypit. Relaatiomallissa suhteiden transformointi riippuu suhteen maksimikardinaalisuudesta. Yleisesti minimikardinaalisuksia ei merkitä relaatioihin millään tavalla, vaan minimikardinaalisuuksien käsittelystä vastaa yleensä joko tietokantaa käyttävä sovellus/henkilö tai tietokantahallintajärjestelmä.

Tarkastellaan ER-kaaviosta, millaisia maksimikardinaalisuuksia on opiskelijatietokannassa:

  • yhdestä moneen (1-N) -suhteet ovat ne, jossa yhden suhteeseen osallistuvan kohteen maksimikardinaalisuus on 1 ja toisen kohteen maksimikardinaalisuus on N
    • Opiskelijalla on 1-N -suhde Laitokseen (opiskelija Opiskelee korkeintaan yhdessä laitoksessa, ja laitoksessa voi olla useita opiskelijoita)
    • Laitoksella on 1-N -suhde Tiedekuntaan (laitos Kuuluu korkeintaan yhteen tiedekuntaan, ja tiedekunnalla voi olla useita laitoksia)
    • Kurssilla on 1-N -suhde Laitokseen (kurssia Järjestää korkeintaan yksi laitos, ja laitoksella voi olla useita kursseja)
  • monesta moneen (N-M) -suhteet ovat ne, jossa kumpaankin suhteeseen osallisuvan kohteen maksimikardinaalisuus on N
    • Opiskelijalla on N-M -suhde Kurssiin (opiskelija Tenttii useita kursseja, kurssilla voi olla montaa opiskelijaa tenittävänä)
  • yhdestä yhteen (1-1) -suhteet ovat suhteellisen harvinaisia, eikä niitä ole tässä opiskelijatietokannassa

Ennen kuin jatkat, käy läpi vielä opiskelijatietokannan ER-kaavio läpi ja varmista, että ymmärrät yllä olevan luokittelun.

Koska opiskelijatietokannassa on vain 1-N ja N-N -suhteita, tarvitaan vain seuraavat kaksi transformointisääntöä kurssimonisteesta:

1-N -suhteiden transformointi:

Sääntö 7.: jokaisesta binäärisestä 1:N-suhdetyypistä sijoitetaan 1:n puoleisen kohdetyypin avainattribuutit viiteavaimeksi N:n puoleisesta kohdetyypistä muodostettuun relaatioon.

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

N-M -suhteiden transformointi:

Sääntö 8.: jokaisesta binäärisestä N:M-suhdetyypistä muodostetaan oma, ns. suhderelaatio. Relaation attribuuteiksi valitaan suhdetyypin mahdolliset attribuutit ja perusavaimeksi N:M-suhteeseen liittyvien kohdetyyppien avainattribuutit.

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

Transformoidaaan suhteet alla olevaan palautuslaatikkoon:

N-M -suhde:

Tarkastellaan ensin ainoa N-M -suhde (Tenttii), jonka transformointi on suoraviivaista

  1. Siirrä kursori tyhjälle riville ja lisää uusi relaatio "Uusi relaatio"-painikkeella.
  2. Aseta relaation nimeksi Tenttii. Tästä relaatiosta tulee suhderelaatio.
  3. Lisää reaaltion Tenttii attribuuteiksi relaatioiden Opiskelija ja Kurssi perusavaimeen kuuluvat attribuutit:
    • opiskelija_id (vastaa relaation Opiskelija perusavainta id)
    • kurssi_kurssikoodi (vastaa relaation Kurssi perusavainta kurssikoodi)
  4. Lisää relaation Tenttii attribuutteihin vielä suhteen Tenttii attribuutit
    • päivämäärä
    • arvosana
  5. Merkitse relaatioiden Opiskelija ja Kurssi sekä attribuutin päivämäärä yhdistelmä avainattribuutiksi.
    • Maalaa attribuutit opiskelija_id, kurssi_kurssikoodi ja päivämäärä ja paina "Merkitse avainattribuutiksi" -painiketta.
  6. Merkitse lopuksi opiskelija_id ja kurssi_kurssikoodi viiteavaimiksi
    • Siirrä kursori uudelle riville ja paina "Uusi viiteavain"
    • Aseta viiteavaimeksi attribuutti Tenttii.opiskelija_id
    • Aseta viitatuksi attribuutiksi Opiskelija.id
    • Toista sama attribuuttille kurssi_kurssikoodi
Esimerkki: N-M -suhteen transformointi

1-N -suhde:

Tarkastellaan suhdetta Opiskelee:

  1. Siirrä kursori relaation Opiskelija puolelle (sillä ER-kaaviossa kohdessa Opiskelija on "haarukka" eli N-suhde Opiskelee-suhteessa).
  2. Lisää relaatioon Opiskelija attribuutti laitos_id, joka vastaa Laitos-relaation id-avainattribuuttia.
  3. Merkitse laitos_id vielä viiteavaimeksi, joka osoittaa relaation Laitos attribuuttiin id
    • Siirrä kursori uudelle riville ja paina "Uusi viiteavain"
    • Aseta viiteavaimeksi Opiskelija.laitos_id
    • Aseta viitatuksi attribuutiksi Laitos.id
Esimerkki: 1-N -suhteen transformointi

Transformoi loput suhdetyypit itse käyttäen yllä olevia ohjeita.

Voit kelluttaa kaavioeditorin Kelluta-painikkeella. Silloin teksti siirtyy oikeaan laitaan, ja editorille vapautuu tilaa oikealle.

# t31_o3

Kun olet transformoinut suhdetyypit, tallenna vastauksesi. Voit sitten tarkistuttaa vastauksesi tarkistuskoneella ja katsoa mallivastauksen alla olevalla painikkeella.

# o3_palauta

Lopuksi

Kun olet valmis, arvioi lyhyesti relaatiomallin ja ER-kaavioiden transformoinnin ymmärryksesi ja anna lyhyt palaute tehtävästä.

# palaute

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