Harjoitus: ER-kaavion transformointi

Tässä ohjatussa harjoituksessa tutustutaan ER-kaavioiden transformointiin relaatiotietokantojen relaatioiksi (eli käytännössä tauluiksi). Transformointi on hyödyllinen esiaskel tietokantojen toteuttamiselle, sillä soveltavalla transformointisääntöjä saat helposti käsitteelliseen malliin sopivan relaatiotietokannan.

Harjoituksessa on useita osatehtäviä. Pääset harjoituksessa eteenpäin suorittamalla jokainen osatehtävä kerrallaan.

Tämä harjoitus on jatkoa Harjoitukselle 2.1. Tee ensin Harjoitus 2.1 ennen kuin aloitat tämän harjoituksen.

Ennen harjoituksen 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 transformointisäännöt. Tässä tehtävässä tutustutaan yleiseen transformointiprosessiin, ja tarkempi sääntöjen tarkastelu jää tämän tehtävän ulkopuolelle.

Huomautus

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

Tehtävänanto

Palataan Harjoituksessa 2.1 mallinnettuun opiskelijatietokantaan ja transformoidaan se relaatiotietokannaksi.

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

Kohdetyyppien transformointi

# openKohdetyypit

Katsotaan kertaukseksi vielä opiskelijatietokannan ER-kaavio:

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

Sovelletaan tähän ensimmäinen transformointisääntö:

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.

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 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 kuuluvat 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.

# ex31-step1
# reflect-ex31-step1

Erikoisattribuuttien transformointi

# openErikoisattribuutit

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. Näihin sopivat transformointisäännöt 4 ja 5:

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.

Huomaa, että yllä olevassa esimerkissä moniarvoiselle attribuutille luotiin relaatio F2 ja siihen lisättiin relaation F avainattribuutti f1. Relaation F2 attribuutti f1 on siis viiteavain relaatioon F. Toisin sanoin, viiteavain nimensä mukaisesti viittaa johonkin toisessa relaatiossa olevaan attribuuttiin (ks. Luku 3.1).

Relaatiokaavassa viiteavaimet voidaan merkitä seuraavalla tavalla:

F2.f1 -> F.f1

Eli: Relaation F1 attribuutti f1 on viiteavain, joka viittaa relaation F attribuuttiin f1.

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 attribuutin transformointi

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

# ex31-step2
# reflect-ex31-step2

Suhteiden transformointi

# openSuhteet

Transformoidaan lopuksi vielä suhdetyypit. Relaatiomallissa suhteiden transformointi riippuu vain suhteen maksimikardinaliteettista. Yleisesti minimikardinaliteettia ei merkitä relaatioihin millään tavalla, vaan minimikardinaliteettien käsittelystä vastaa yleensä joko tietokantaa käyttävä sovellus/henkilö tai tietokannanhallintajärjestelmä.

Tarkastellaan ER-kaaviosta, millaisia kardinaliteetteja 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 osallistuvan kohteen maksimikardinaalisuus on N
    • Opiskelijalla on N-M -suhde Kurssiin (opiskelija Tenttii useita kursseja, kurssilla voi olla montaa opiskelijaa tentittä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öä:

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.

Transformoidaan suhteet alla olevaan palautuslaatikkoon:

N-M -suhteet:

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ää relaation 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 relaatioista OPISKELIJA ja KURSSI otettujen perusavainten sekä attribuutin päivämäärä yhdistelmä perusavaimeksi.
    • Maalaa attribuutit opiskelija_id, kurssi_kurssikoodi ja päivämäärä ja paina "Merkitse perusavaimeksi" -painiketta.
    • Huom: Tässä päivämäärä otetaan poikkeuksellisesti myös perusavaimeen, sillä ER-kaaviossa se on merkitty suhteen avainattribuutiksi. Tätä valintaa perusteltiin Harjoituksessa 2.1.
  6. Merkitse lopuksi opiskelija_id ja kurssi_kurssikoodi viiteavaimeksi
    • Siirrä kursori uudelle riville ja paina "Uusi viiteavain"
    • Aseta viiteavaimeksi attribuutti TENTTII.opiskelija_id
    • Aseta viitatuksi attribuutiksi OPISKELIJA.id
    • Toista sama attribuutille kurssi_kurssikoodi
Esimerkki: N-M -suhteen transformointi

1-N -suhteet:

Tarkastellaan suhdetta Opiskellee:

  1. Siirrä kursori relaation OPISKELIJA puolelle (sillä ER-kaaviossa kohteella OPISKELIJA on "haarukka" eli N-suhde Opiskellee-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.

# ex31-step3
# reflect-ex31-step3

Lopuksi

Kun olet valmis, voit jatkaa eteenpäin muihin harjoitustehtäviin.

Voit antaa lyhyen itsearvion onnistumisestasi ja yleisesti palautteen harjoituksesta alla.

# palaute

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