Demo 2
ER-kaavion transformointi relaatioiksi
Jos et ole vielä saanut tehtyä kaikkia demo1:en tehtäviä niin tee
ne loppuun ennen kuin jatkat näitä tehtäviä.
ER-kaavion muuttamiseen relaatioksi pätevät seuraavat perussäännöt:
- Jokainen tavallinen kohde muutetaan
relaatioksi (tauluksi)
- Jokainen ER-diagrammista löytyvä ominaisuus
lisätään siihen liittyvään relaatioon
- Jokainen Many-to-Many -suhde muutetaan tavalliseksi
relaatioksi.
- Määritellään relaatioon yhtä monta viiteavainta (foreign key)
kuin on suhteeseen liittyviä kohteita
- määritellään perusavaimeksi viiteavaimista tehty yhdistetty
avain
- lisätään relaatioon siihen liittyvät muut kentät.
- M-to-1-suhteet
- Ei luoda uusia relaatioita mutta lisätään ennestään olevaan
relaatioon uusi viiteavain. Lisäys tapahtuu kohteeseen, jonka
puolella on Many-merkintä.
- Suhteeseen liittyneet ominaisuudet lisätään ennestään olevaan
relaatioon
- Moniarvoisista ominaisuuksista luodaan uusi kohde josta
tehdään viittaus ominaisuuteen liittyvään kohteeseen
Opiskelijatietokanta
Muutetaan ensimmäisissä demoissa piirretty ER-kaavio
relaatioiksi
- Avaa ensimmäisissä demoissa tekemäsi Excel-tiedosto
- Ensimmäisissä demoissa listattiin taulukkomuodossa jokainen kohde ja siihen
liittyvät ominaisuudet. Kaikki nämä määritykset toimivat suoraan pohjana
relaatioiden luomiselle. Päivitetään nämä määritykset vastaamaan
suoraan tietokantaan tulevia tauluja
M-to-1-suhteet
- Tarkistetaan jokainen kohde johon liittyy M-to-1-suhteita. Kaikkiin
niihin kohteisiin joiden puolelle on M-to-1-suhteessa merkitty M täytyy
lisätä uusi attribuutti, joka viittaa suhteen toiseen osapuoleen. Tällaisia kohteita ovat:
- Opiskelija josta on M-to-1-suhde laitokseen.
- Laitos, josta on M-to-1-suhde tiedekuntaan.
- Kurssi, josta on M-to-1-suhde laitokseen.
- Opiskelijan ominaisuudet luettelevaan taulukkoon lisätään siis uusi attribuutti:
Ominaisuus | Tietotyyppi | Pakollinen | Oletusarvo | Rajoitteet |
Laitos | Integer | Kyllä | |
Arvoiksi kelpaavat vain Laitos-taulun LaitosID-kentästä löytyvät arvot.
LaitosID:n päivittymisen vyöryminen sallitaan (UPDATE CASCADE ).
LaitosID:n poistamisen vyöryminen kielletään (DELETE RESTRICT ).
|
- Uuden ominaisuuden (laitos) tietotyypin pitää olla vastaava kuin viitattavan ominaisuudenkin (laitosid).
- Rajoitteiksi voi selvennykseksi kirjoittaa viite-eheyden merkityksen tässä tietyssä tapauksessa.
Samalla voidaan merkitä näkyviin sallitaanko tietojen päivittyminen ja poistaminen viite-eheyden kautta.
- Täysin vastaavalla tavalla lisätään uudet attribuutit Laitos ja Kurssi-kohteiden ominaisuuslistauksiin.
M-to-M-suhteet
- Etsitään kaaviosta kaikki M-to-M-suhteet. Näitä ovat:
- Esimerkin M-to-M-suhteeseen liittyy jo valmiiksi
ominaisuuksia joten ne on listattu ensimmäisissä demoissa erikseen aivan samoin kuin kohteisiin liittyneet ominaisuudet. Tämä
vihjaa jo selkeästi, että kaikista M-to-M-suhteista luodaan suoraan relaatio.
- Suhteeseen suoraan liittyvien ominaisuuksien lisäksi täytyy määritellä myös
uudet attribuutit, jotka viittaavat suhteeseen liittyviin kohteisiin. Tässä tapauksessa
Tenttii-suhteen ominaisuuslistaan lisätään seuraavat:
Ominaisuus | Tietotyyppi | Pakollinen | Oletusarvo | Rajoitteet |
Opiskelija | CHAR(11) | Kyllä | |
Arvoiksi kelpaavat vain Opiskelija-taulun Sotu-kentästä löytyvät arvot.
Sotun päivittymisen vyöryminen sallitaan (UPDATE CASCADE ).
Sotu:n poistamisen vyöryminen kielletään (DELETE RESTRICT ).
|
Kurssi | CHAR(6) | Kyllä | |
Arvoiksi kelpaavat vain Kurssi-taulun Kurssikoodi-kentästä löytyvät arvot.
Kurssikoodin päivittymisen vyöryminen sallitaan (UPDATE CASCADE ).
Kurssikoodin poistamisen vyöryminen kielletään (DELETE RESTRICT ).
|
- Lisättyjen kenttien tietotyypit pitää taas määritellä samoiksi kuin niiden viittaamat perusavaimet Kurssi-
ja Opiskelija-kohteissa.
- Viite-eheysmäärityksien vyörymiset M-to-M-suhteiden yhteydessä määritellään
oletuksena aina niin, että päivitykset vyöryvät ja poistot kielletään. Nämä kuitenkin
kannattaa aina tapauskohtaisesti miettiä ja varmistaa.
1-to-1-suhteet
- 1-to-1-suhteet ovat harvinaisia. Jos näitä kuitenkin ER-kaaviossa esiintyy niin ne käsitellään samoin kuin M-to-1-suhteet.
Päätettäväksi jää vain kumpaan suhteessa olevaan kohteeseen luodaan uusi attribuutti
Moniarvoiset ominaisuudet
- Moniarvoisista ominaisuuksista pitää luoda uusi relaatio. Esimerkkitapauksessa tällaisia ominaisuuksia on yksi:
- Opiskelijaan liittyy moniarvoinen ominaisuus puhelinnumero
- Luodaan uusi taulu johon määritellään attribuuteiksi:
- Sotu-ominaisuudesta muodostetaan viite-eheys Opiskelijaan
- Molemmat ominaisuudet muodostavat yhdessä yhdistetyn avaimen
Puhelinnumero
Ominaisuus | Tietotyyppi | Pakollinen | Oletusarvo | Rajoitteet |
Sotu | CHAR(11) | Kyllä | |
Arvoiksi kelpaavat vain Opiskelija-taulun Sotu-kentästä löytyvät arvot.
Sotun päivittymisen vyöryminen sallitaan (UPDATE CASCADE ).
Sotu:n poistamisen vyöryminen sallitaan (DELETE CASCADE ).
|
Puhelinnumero | CHAR(32) | Kyllä | |
|
- Sotu-ominaisuuden tietotyyppi pitää olla sama kuin Opiskelijat-kohteen Sotu-kentän.
- Viite-eheysmäärityksien vyörymiset moniarvoisten ominaisuuksien yhteydessä määritellään
oletuksena aina niin, että päivitykset vyöryvät ja poistot vyöryvät.
Normalisointi
Varmistetaan ettei muodostetuissa relaatioissa esiinny
turhaa tietojen toistoa ja ylimäärää. Tällä estetään ongelmia
tietojen päivityksessä, lisäämisessä ja poistamisessa.
Tarkistetaan seuraavat asiat:
- Kohteen yhteyteen on talletettu vain kohteeseen välittömästi liittyviä tietoja
- Kunkin tiedon päivitys tapahtuu vain yhteen paikkaan
Opiskelijatietokannastamme löytyy seuraava ongelmallinen kohta:
- Opiskelija-taulussa oleva postitoimipaikka ei liity suoraan opiskelijaan vaan postinumeroon
- Postitoimipaikkojen päivittäminen ei tapahdu yhteen paikkaan. Esim.
Sotu | Etunimi | Sukunimi | Lähiosoite | Postinumero | Postitoimipaikka | sähköposti | Aloitus |
---|
111178-111K | Matti | Meikäläinen | Mutkatie 1 | 40700 | Jyväskylä | foobar@hotmail.com | 1999 |
111277-222K | Ville | Meikäläinen | Mutkatie 2 | 40700 | Jyväskylä | foobar2@hotmail.com | 1999 |
111176-333K | Kalle | Meikäläinen | Suorakuja 1 | 31600 | Jokioinen | foobar3@hotmail.com | 1999 |
111175-444K | Jussi | Meikäläinen | Suorakuja 2 | 31600 | Jokioinen | foobar4@hotmail.com | 1999 |
111172-999K | Maija | Meikäläinen | Mutkatie 3 | 40700 | Jyväskylä | foobar5@hotmail.com | 1999 |
- Muodostetaan uusi taulu johon siirretään postinumerot ja postitoimipaikat.
Annetaan taululle nimeksi esim. Postinumero. Postinumerosta tulee uuden taulun perusavain.
Opiskelija-taulusta poistetaan postitoimipaikka-kenttä ja jätetään pelkkä postinumero-kenttä, josta tulee samalla
viiteavain, joka osoittaa Postinumero-tauluun.
Yritystietokanta
Tehdään transformointi ensimmäisissä demoissa piirretylle yritystietokannalle.
Tee transformointi omalle versiollesi ja käytä pohjana malliratkaisua vain jos
omaa versiotasi ei ole saatavilla. Älä huolestu vaikka oma versiosi
ei ole aivan samanlainen kuin malliratkaisu.
- Käsitellään jokaista kohdetta uutena tauluna (relaationa). Jokaiseen
kohteeseen liittyvä ominaisuus-taulukko tarkoittaa nyt tietokantaan
luotavan relaation kenttiä.
- Etsi kaaviostasi ensimmäiseksi kaikki M-to-1-suhteet.
Lisää näiden suhteiden vaatimat uudet kentät (viiteavaimet) suhteessa M:n puolella
olevaan relaatioon. Varmista, että kenttien tietotyypit tulevat oikein eli
viiteavaimen tietotyyppi pitää olla sama, kuin sen viittauksen kohteena olevan kentän.
- Etsi kaaviostasi kaikki M-to-M-suhteet.
Luo jokaisesta M-to-M-suhteesta
taulu. Taulun nimenä voit käyttää suoraan suhteeseen kirjoitettua
tekstiä tai jotakin siitä johdettua.
Jos sinulla on johonkin kohteeseen liitettynä ominaisuuksia niin
sinulla on tällaisesta suhteesta jo valmis pohja taululle (Vrt. kohteet)
- Lisää jokaiseen M-to-M-suhteen pohjalta luotuun
tauluun viiteavainkenttä, jokaista suhteeseen liittyvää kohdetta varten.
Varmista, että viiteavainkenttien tietotyyppi tulee määriteltyä oikein.
Määritä uuden taulun avaimeksi yhdistetty avain viiteavaimista.
- Tarkista löytyykö kaaviostasi moniarvoisia ominaisuuksia ja luo
niitä varten uudet taulut. Poista moniarvoisen ominaisuuden maininta
kohteesta johon se oli alunperin liitetty. Nimeä moniarvoisen ominaisuuden takia
luotu taulu saman nimiseksi kuin ominaisuus.
- Määrittele viite-eheyksien vyörymissäännöt kaikkiin luomiisi
viiteavaimiin.
Normalisointi
Käy läpi jokainen yritystietokannan taulu ja mieti toteuttavatko ne
seuraavat vaatimukset:
- Kohteen yhteyteen on talletettu vain kohteeseen välittömästi liittyviä tietoja
- Kunkin tiedon päivitys tapahtuu vain yhteen paikkaan
Jos löydät ongelmallisia kohtia niin jaa ongelmallinen taulut(t)
useampaan tauluun opiskelijatietokannassa tehdyn normalisoinnin tapaan.
Futistietokanta
Muunna edellisissä demoissa piirtämäsi futistietokannan ER-kaavio
relaatioiksi vastaavalla tavalla kuin edellisetkin.
Käytä pohjana omaa kaaviotasi vaikka se eroaisikin paljon malliratkaisusta.
Transformoinnin jälkeen varmista vielä tietokantasi rakenne
normalisoinnilla. Korjaa mahdolliset ongelmakohdat.