TIETOKANTOJEN PERUSTEET OSIO 8 MARKKU SUNI
Tarkastellaan Loogista tietokannan suunnittelua vaihe 2 Taulujen määrittely loogisen tietomallin perusteella
2 Suunnittele ja tarkista taulut joka loogisesta tietomallista Tavoite: Suunnitella jokaista loogista tietomallia vastaavat taulut ja tarkistaa niiden rakenne Tarkoituksena on tuottaa kuvaus edellisen vaiheen loogista tietomallia vastaavista tauluista Taulut esittävät tietokohteita, suhteita ja attribuutteja
2 Suunnittele ja tarkista taulut joka loogisesta tietomallista Tehtävät: 1. Suunnittele paikallisen loogisen tietomallin taulut 2. Tarkista taulujen rakenteet normalisoimalla 3. Tarkista että taulut tukevat tapahtumia 4. Määrittele eheyssäännöt 5. Tarkista looginen tietomalli käyttäjien kanssa
2.1 Suunnittele paikallisen loogisen tietomallin taulut Tavoite: Suunnitella ne taulut Taulujen rakenne saadaan tietomallista. Tietokohteiden esittäminen: Jokaista tietomallin tietokohdetta kohti määrittelemme taulun, jossa ovat kaikki kohteen yksinkertaiset attribuutit Yhdistettyjen attribuuttien kohdalla lisää kunkin osat Mahdollisuuksien mukaan määrittele sarakkeet, jotka sisältävät pääavaimen
2.1. Paikallisen logisen tietomallin taulut tietokohteiden esittäminen alustavat taulut
2.1 Suunnittele paikallisen loogisen tietomallin taulut Miten esittää suhteita? tietokohteiden väliset suhteet esitetään niiden pääavain vierasavain mekanismilla minne vierasavain talletetaan: päätä kunkin suhteen vanhempi ja lapsi vanhempi luovuttaa pääavaimensa kopion lapsen vierasavaimeksi lapseen talletetaan vierasavaimeksi vanhemman pääavain
2.1 Suunnittele paikallisen loogisen tietomallin taulut Miten esittää suhteita? tarkastellaan vanhempi/lapsi suhteen tunnistusta eri tyypin suhteissa yhdestä moneen ( 1:* ) binaariset suhteet yhdestä moneen ( 1:* ) rekursiiviset suhteet yhdestä yhteen ( 1:1 ) binaariset suhteet yhdestä yhteen ( 1:1 ) rekursiiviset suhteet tässä vaiheessa on jo poistettu monesta moneen suhteet
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä moneen ( 1:* ) binaariset suhteet suhteen ykköspuolen tietokohde on vanhempi ja moneenpuolen kohde lapsi lapseen talletetaan vierasavaimeksi vanhemman pääavain Esimerkkinä Branch Has Staff Branch Has Staff branchno 1..1 1..* staffno Branch (branchno,street,city,state,zipcode) Staff(staffNo,position,salary,branchNo)
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä moneen ( 1:* ) binaariset suhteet Esimerkkinä Branch Has Staff Vastaavia suhteita on tässä esimerkissä useita, esim. Director Directs Video Member Requests RentalAgreement Actor Plays Role Branch IsAllocated VideoForRent
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä moneen ( 1:* ) binaariset suhteet Jos 1:* suhteella on attribuutteja, näiden tulisi seurata pääavaimen mukana Esimerkkinä Branch Has Staff ja tähän liittyy työsuhteen alkupäivämäärä (datestart) tämä attribuutti tulee tallettaa myös Staff-tauluun Branch-taulun pääavaimen (branchno) kanssa
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä moneen ( 1:* ) rekursiiviset suhteet Tällaisten esittäminen tapahtuu samaan tapaan kuin edellä Esimerkkinä Staff Supervises Staff Vanhempana ja lapsena toimii taulu Staff Suhteen esittämiseksi viedään vanhempi-taulun (Staff) pääavain (staffno) lapsitauluun (Staff) vierasavaimeksi Vaan nyt tämä uusi vierasavain nimetään uudelleen esimerkiksi supervisorstaffno osoittamaan tarkoitusta
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä moneen ( 1:* ) rekursiiviset suhteet Esimerkkinä Staff Supervises Staff Supervisee Supervises Staff staffno Supervisor Staff(staffNo,name,position,salary,branch,supervisorStaffNo) Pääavain: staffno Vierasavain: branchno viittaa tauluun Branch(branchNo) Vierasavain: supervisorstaffno viittaa tauluun Staff(staffNo)
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) binaariset suhteet Tapaus 1:1 on hiukan mutkikkaampi Vanhemmuuden päättämiseen ei voi käyttää lukumäärää On mietittävä osallistumista sen selvittämiseksi tulisiko kohteet yhdistää yhteen tauluun tulisiko tehdä kaksi taulua ja viedä toisen pääavain toiseen
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) binaariset suhteet Osallistumisen vaihtoehtoja pakollinen (mandatory) osallistuminen suhteen lolemmilla puolilla pakollinen osallistuminen suhteen toisella puolella valinnainen (optional) osallistuminen suhteen molemmilla puolilla
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) binaariset suhteet Pakollinen (mandatory) osallistuminen molemmilla puolilla Tässä tapauksessa kohteet tulisi yhdistää yhteen tauluun ja valita alkuperäisten kohteiden pääavaimista toinen taulun pääavaimeksi ja toinen vaihtoehtoiseksi avaimeksi Jos suhteella on attribuutteja, ne pitää viedä kohteita ja suhdetta esittävään tauluun (alkupäivämäärä tms.)
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) binaariset suhteet Esimerkki: suhde Staff Uses Car - jokaisella on auto Staff Uses Car staffno 1..1 1..1 licenseno StafgCar (staffno,name,position,salary,branchno,supervisorstaffno, licenseno,make,model) pääavain: staffno vaihtoeht.avain: licenseno vierasavain: branchno vierasavain: supervisorstaffno
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) binaariset suhteet Pakollinen (mandatory) osallistuminen toisella puolella Tässä tapauksessa vanhemmuus löytyy: tietokohde, jolla on valinnainen osallistuminen, on vanhempi ja pakollisen osallistumisen puoli on lapsi Jälleen vanhemman pääavain viedään lapseen vierasavaimeksi Jos suhteella on attribuutteja, ne pitää viedä avaimen mukana lapsi tauluun (alkupäivämäärä tms.)
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) binaariset suhteet - valinnaisuus Esimeskki: suhde Staff Uses Car - kaikilla ei autoa Staff Uses Car staffno 1..1 0..1 licenseno Staff (staffno,name,position,salary,branchno,supervisorstaffno) Car ( licenseno,make,model, staffno) pääavain: staffno vierasavain: branchno vierasavain: supervisorstaffno pääavain: licenseno vierasavain: staffno vaihtoeht.avain: staffno
Yhdestä yhteen ( 1:1 ) binaariset suhteet - valinnaisuus Esimerkki: suhde Staff Manages Branch Branch Has Staff branchno 1..1 0..* staffno 0..1 Manages 1..1 Branch(branchNo,street,city,state,zipCode,mgrStaffNo) Staff (staffno,name,position,salary,supervisorstaffno,branchno) pääavain: branchno vierasavain: mgrstaffno pääavain: staffno vierasavain: branchno vierasavain: supervisorstaffno
2.0 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) binaariset suhteet Valinnainen (optional) osallistuminen molemmilla puolilla Tässä tapauksessa vanhemmuuden päättäminen on valinnaista. Viedään toisen taulun pääavain toiseen vierasavaimeksi suht. mielivaltaisesti. Suhteesta voi löytyä jotain lisätietoa, joka auttaa päätöksenteossa. Tällöin päätetään tämän lisätiedon nojalla
2.1 Suunnittele paikallisen loogisen tietomallin taulut Tähä pe Valinnainen osallistuminen molemmilla puolilla Esimerkiksi 1:1 suhde Staff Uses Car ja molemmilla puolilla valinnaisuus: toisilla on auto, toisilla ei Havaitaan: useimmat autot, ei kaikki, osoitettu tietylle henkilölle vain pieni vähemmistö henkilöistä käyttää autoja Nyt vohdaan sanoa, että kohde Car on lähempänä pakollista kuin kohde Staff. Staff on vanhempi ja Car on lapsi avaimet sen mukaan
2.1 Suuonittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) binaariset suhteet - valinnaisuus Esimerkki: suhde Staff Uses Car - kaikilla ei autoa Staff Uses Car staffno 0..1 0..1 licenseno Staff (staffno,name,position,salary,branchno,supervisorstaffno) Car ( licenseno,make,model, staffno) pääavain: staffno vierasavain: branchno vierasavain: superwisorstaffno pääavain: licenseno vierasavain: staffno vaihtoeht.avain: staffno
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) rekursiiviset suhteet Näissä seurataan edellä esitettyjä ohjeita 1:1 suhteista Tämä on erikoistapaus; molemmilla puolilla sama kohde Rekursiivinen suhde 1:1, pakollinen molemmin puolin esitetään suhde yhtenä tauluna, jossa pääavaimesta kaksi kopiota (toinen on vierasavain ja nimi muutettu)
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhdestä yhteen ( 1:1 ) rekursiiviset suhteet Rekursiivinen suhde 1:1, pakollinen toiselta puolen esitetään suhde yhtenä tauluna, jossa pääavaimesta kaksi kopiota (toinen on vierasavain ja nimi muutettu) luodaan uusi taulu esittämään suhdetta uudessa taulussa on vain kaksi saraketta kumpikin pääavaimen kopio (nimi muutettu)
2.1 Suunnittele paikallisen loogisen tietomallin taulut Yhteenveto Suhde miten 1:* binaarinen vanhempi: 1-puoli, lapsi: *-puoli 1:* rekursiivinen v: 1-puoli, l: *-puoli 1:1 binaarinen pakollinen molemmille yhdistä yhteen tauluun pakollinen toiselle v: valinnainen, li: pakollinen valinnainen mol. mielivaltaisesti ellei muuta tietoa 1:1 rekursiivinen pakollinen molemmille yhdistä yhteen tauluun, avainkopio pakollinen toiselle edellinen tapa tai uusi taulu valinnainen mol. uusi taulu esittämään suhdetta
2.1 Suunnittele paikallisen loogisen tietomallin taulut Dokumentoi taulut ja vierasavainattribuutit Vaiheen 2 lopuksi dokumentoidaan kaikki näin määritellyt taulut Kun joka taulussa on kaikki sarakkeet, voidaan tunnistaa uudet pää- tai vierasavaimet tärkeää heikoille kohteille kohteella Role on pääavaimena yhdistelmä
2.1 Suunnittele paikallisen loogisen tietomallin taulut
2.2 Tarkista taulut normalisoimalla Tavoite Tarkistaa normalisointisääntöjen nojalla, että taulut ovat rakenteellisesti oikein Korjataan mallia ja tauluja 2.3 Tarkista, että taulut tukevat käyttäjien tapahtumia Vaiheessa 1.8 tehtiin vastaava tarkistus ER-mallille. Tehdään sama uudelleen sen pohjalta luoduille tauluille Tarkistetaan, että tapahtuman tarvitsemat tiedot löytyvät jostakin taulusta tai tauluista Jos tapahtuman tiedot vaativat useita tauluja, tarkistetaan, että taulujen välillä on avainten muodostama yhteys
2.3 Tarkista, että taulut tukevat käyttäjien tapahtumia
2.3 Tarkista, että taulut tukevat käyttäjien tapahtumia
2.4 Määrittele eheyssäännöt Eheyssäännöt ovat toiminnallisia rajoituksia, joita asetetaan, noudatetaan ja valvotaan sen estämiseksi ettei tietokanta joudu epäkonsistenttiin tilaan Valittu tietokantajärjestelmä voi tukea tai olla tukematta tarvittavia eheyssääntöjä. Tällä ei ole nyt väliä Tässä vaiheessa kiinnostuksen kohteena ovat säännöt itse mitä pitäisi noudattaa liiketoiminnan kannalta miten se tehdään, selvitetään myöhemmin Tämän jälkeen on looginen tietomalli valmis fyysinen suunnittelu voidaan aloittaa, esim. luoda prototyyppi
2.4 Määrittele eheyssäännöt Eheyssäännöt ovat eri tyyppiä vaadittu tieto joillakin sarakkeilla on aina oltava arvo (ei NULL) sarakkeen arvoaluerajoitukset sarakkeen arvoalue on rajoitettu ja vain tietyt arvot kelpaavat tietokohteen eheys pääavain ei saa olla NULL
2.4 Määrittele eheyssäännöt Eheyssäännöt ovat eri tyyppiä viite-eheys vierasavain liittää lapsitaulun rivit vanhempi-tauluun jokaisen vierasavaimen arvon on esiinnyttävä pääavaimen arvona vanhempi-taulussa sallitaanko NULL-arvot vierasavaimilla? jos lapsen osallisuus suhteeseen on valinnainen, voidaan sallia jos lapsen osallisuus suhteeseen pakollinen, ei voida liiketoiminnalliset säännöt
2.4 Määrittele eheyssäännöt Eheyssäännöt ovat eri tyyppiä viite-eheys viite-eheyden takaamiseksi olemassaolosäännöt (existence constraints) ehdot, joiden vallitessa pääavain tai vierasavain voidaan lisätä, muuttaa tai poistaa liiketoiminnalliset säännöt päivityksiin voi liittyä liiketoiminnan asettamia sääntöjä asiakas saa kerrallaan lainata max 10 videota, tms.
2.4 Määrittele eheyssäännöt Viite-eheys esimerkki: taulut Staff (lapsi) ja Branch (vanhempi) 1. Lisää rivi lapsi-tauluun (Staff) tarkista, että vierasavain (branchno) on joko NULL tai vastaa olemassaolevaa toimistoa 2. Poista rivi lapsi-taulusta (Staff) lapsi-taulun rivin poistamioeo ei vaikuta viiteeheyteeo 3. Päivitä vierasavaiota lapsi-taulussa (Staff) Samanlainen kuin tapaus 1 4. Lisää rivi vanhempi-tauluun (Branch) Rivin lisääminen ei vaikuta viite-eheyteen
2.4 Määrittele eheyssäännöt Viite-eheys esimerkki: taulut Staff (lapsi) ja Branch (vanhempi) 5. Poista rivi vanhempi-taulusta (Branch) VYÖRYTÄ poistetaan vanhempi-rivin mukana kaikki siihen viittaavat lapsi-rivit ja jos ne toimivat vanhempana muulle suhteelle, vyörytetään edelleen; usein vaarallinen toimintatapa ASETA NULL kun vanhempi-rivi poistetaan, kaikki siihen viittaavat vierasavaimet asetetaan NULL
2.4 Määrittele eheyssäännöt Viite-eheys esimerkki: taulut Staff (lapsi) ja Branch (vanhempi) 5. Poista rivi vanhempi-taulusta (Branch) ANNA OLETUS kun vanhempi-rivi poistetaan, kaikki siihen viittaavat vierasavaimet saavat määritellyn oletusarvon EI TARKISTUSTA sen kun poistetaan - äärimmäisen vaarallinen toimintamalli - (Laissez-faire)
2.4 Määrittele eheyssäännöt Viite-eheys esimerkki: taulut Staff (lapsi) ja Branch (vanhempi) 6. Päivitä vanhempi-taulun pääavainta (Branch) Tällöin voi lapsi-taulusta katketa yhteys Oikea toimenpide on vyörytys lapsitauluun
2.5 Tarkista looginen tietomalli käyttäjien kanssa Tavoite Varmistaa, että looginen tietomalli ja sitä kuvaava dokumentointi on käyttäjänäkymän oikea tulkinta. Nyt pitäisi olla valmista yhden käyttäjänäkökulman kanssa. Varmuuden välttämiseksi tarkastetaan aikaansaannos yhdessä käyttäjien kanssa. Tietokannassa, jossa on vain yksi näkökulma, ollaan nyt valmiita siirtymään fyysiseen suunnitteluun Jos on useita käyttäjänäkökulmia, käydään muutkin läpi ja yhdistetään.
I m just a wand ring on the face of this earth Meeting so many people who are try n to befree And while I m trav lin I hear so many words Language barriers broken, now we ve found the key And if you want the wind of change to blow about you And you re the only other person to know, don t tellme I m just a singer in a rock and roll band The Moody Blues