Avaimet, tietotyypit, kardinaalisuudet - Demo 2
Luentotaltiointi
Ongelmia videon katselussa?Tee ensin edellisistä demoista reseptitietokantaosuus valmiiksi. Jalkapalloturnaukseen liittyviä tehtäviä ei tarvitse välttämättä tehdä.
Tällä demokerralla jatketaan edellisellä kerralla aloitettujen ER-kaavioiden parissa. Nyt merkitään kaavioihin perusavaimet, ominaisuuksien tietotyypit ja määritellään kohteiden väliset kardinaalisuudet.
Kardinaalisuudet
Kardinaalisuus kertoo, kuinka moneen suhteeseen kohde voi tai tulee osallistumaan. Vaihtoehdot ovat:
- Yhden suhde yhteen (1-to-1) esim. avioliitto (henkilö ja henkilö)
- Yhden suhde moneen (1-to-M) / Monen suhde yhteen (M-to-1) esim. kuntalaiset (kunta ja henkilö)
- Monen suhde moneen (M-to-M) esim. kirjastokirjan lainaaminen (kirja ja henkilö)
- Monta Opiskelijaa voivat tenttiä yhtä tai useampaa kurssia. Kyseessä on siis selkeä M-to-M-suhde.
- Jokainen opiskelija kuuluu yhteen laitokseen (pääaine). Yhdellä laitoksella voi olla useita opiskelijoita. Kyseessä on siis M-to-1-suhde (Opiskelija, Laitos)
- Jokainen laitos kuuluu yhteen tiedekuntaan. Yhdessä tiedekunnassa voi olla useita laitoksia. Kyseessä on siis M-to-1-suhde (Laitos, Tiedekunta)
- Laitoksella järjestetään useita kursseja. Jokainen kurssi on yhden tietyn laitoksen alaista opetusta. Kyseessä on siis 1-to-M-suhde (Laitos, Kurssi)
Tehtävät
- Käynnistä Erkka valinnalla Start | All Programs | Erkka.
- Avaa edellisellä kerralla tallentamasi ER-kaavio opiskelijarekisteri.erkka
- Piirrä opiskelijatietokantakaavioon kardinaalisuudet ER-kaavioon merkitsemällä jokaisen suhteen ja kohteen väliin 1 tai M suhteen kardinaalisuudesta riippuen. Kardinaalisuuksia pääset Erkassa muuttamaan napauttamalla suhteen ja kohteen välisen viivan keskipistettä.
Avaimet
Ominaisuuksien joukosta pitää valita avaimet eli ne ominaisuudet, jotka yksilöivät kunkin kohteen. Yksilöimiseen voi riittää yksi ominaisuus tai voi joutua tekemään yhdistetyn avaimen useammasta ominaisuudesta.
Joidenkin kohteiden tai ominaisuuksia sisältävien suhteiden yksilöimiseen eivät aina välttämättä riitä niiden omat ominaisuudet vaan mukaan on otettava niihin liittyviä kohteita. Opiskelijatietokannassa on seuraavat avainehdokkaat (joissain useampi vaihtoehtoja):
- Opiskelija
- Hetu tai Sähköpostiosoite
- Kurssi
- Nimi tai Kurssikoodi
- Laitos
- Nimi
- Tiedekunta
- Nimi
- Tenttii
- Opiskelija, Kurssi ja päivämäärä yhdistettynä
- Opiskelija
- Hetu, koska kiinteämittaisena (aina 11 merkkiä) on mitä todennäköisimmin aina lyhyempi kuin sähköpostiosoite. Kiinteämittaisen kentän käsittely on usein myös hieman tehokkaampaa kuin vaihtuvamittaisen. Hetu on myös aina varmasti uniikki.
- Kurssi
- Kurssikoodi, koska se on lyhyempi kuin nimi ja myös varmasti uniikki.
- Laitos
- Nimi-ominaisuus vie turhan paljon tilaa ollakseen hyvä perusavain. Luodaan uusi ominaisuus (attribuutti), LaitosID, pelkästään avaimeksi.
- Tiedekunta
- Nimi-ominaisuus on turhan pitkä hyväksi perusavaimeksi. Luodaan uusi ominaisuus, TiedekuntaID, pelkästään avaimeksi.
- Tenttii
- Muodostetaan yhdistetty avain Opiskelija, Kurssi ja päivämäärä yhdistettynä. Pelkkä päivämäärä ei riitä yksilöintiin, koska samana päivänä voi olla useita tenttejä. Myöskään päivämäärä + kurssi eivät riitä koska samana päivänä voi samaa kurssia tenttiä useampi opiskelija. Kaikki kolme yhdessä riittävät yksilöintiin, koska sama opiskelija ei voi samana päivänä tenttiä samaa kurssia useampaan kertaan. ER-kaavioon riittää, kun merkitsee pelkän päivämäärän perusavaimeksi. Varsinainen yhdistetyn avaimen luominen tehdään vasta, kun muunnetaan ER-kaavio tietokannan relaatioiksi.
Tehtäviä
- Merkitse avaimet ER-kaavioon valitsemalla ominaisuus ja ruksaamalla Primary key -valinta. Erkka ei mitenkään erityisesti korosta avainkenttiä, mutta muilla työkaluilla avainkentät voidaan näyttää alleviivattuina ohjeisen kuvan mukaisesti.
Tietotyypit
Jokaiselle ominaisuudelle pitää määrittää tietotyyppi. Tietotyyppiä valittaessa pitää usein määritellä myös tietoa varten varattava tila. Tilanvarausta miettiessä pitää olla erityisen tarkka, koska mikään ei ole ärsyttävämpää, kuin esim. sukunimi-kenttä johon ei mahdu kirjoittamaan pitkää sukunimeään.
Tietotyyppi voi olla:
- Numeerinen
- Kokonaisluku
INTEGER
esim. numero 13
- Reaaliluku
NUMERIC(pituus, desimaalit)
- tarkka reaaliluku
- Kokonaisluku
- Merkkijono
- Kiinteämittainen merkkijono
CHAR(pituus)
esim. henkilötunnus, joka on aina 11 merkkiä pitkä
- Vaihtuvamittainen merkkijono
VARCHAR(maksimipituus)
esim. sukunimi
- Kiinteämittainen merkkijono
- Aika
- Päivämäärä (vuosi, kuukausi ja päivä)
DATE
esim. 2002-03-14
- Kellonaika (tunti, minuutti ja sekunti)
TIME
esim. 18:30:25
- Aikaleima (vuosi, kuukausi, päivä, tunti, minuutti ja sekunti)
TIMESTAMP
esim. 2002-03-14 18:30:25
- Päivämäärä (vuosi, kuukausi ja päivä)
Tehtäviä
- Avaa viime demossa tallentamasi Excel-taulukko, jossa on ominaisuuksiin liittyviä rajoitteita. Taulukosta voi olla hyötyä tietotyyppien määrittämisessä.
- Valitse Erkassa jokainen ominaisuus vuorollaan ja valitse alasvetovalikosta jokaiseen ominaisuuteen parhaiten sopiva tietotyyppi. Itsekeksityt perusavaimet (ID-kentät) kannattaa yleensä määritellä kokonaisluvuiksi (INTEGER).
- Jos valitse tietotyypiksi NUMERIC, CHAR tai VARCHAR niin merkitse lisäkenttään tietotyyppiin
liittyvä rajoite.
- NUMERIC => numeroiden kokonaismäärä, desimaalien määrä
- CHAR => merkkien kiinteä määrä
- VARCHAR => merkkien maksimimäärä
- Huom. Microsoft Access ei hyväksy Erkan avulla luodun tietokannan CHAR/VARCHAR -kenttiin suurempaa kokoa kuin 255. Ongelman voi kiertää muuttamalla kentän kokoa myöhemmin suoraan Accessilla.
- Merkitse samalla myös kenttien pakollisuudet jos et niitä vielä ole merkinnyt. Pakolliset kentät merkitään valinnalla NOT NULL, ei-pakolliset valinnalla NULL. Kenttiin, joihin voi keksiä oletusarvon, kannattaa valita DEFAULT-arvo. Arvon voit syöttää VALUE-kenttään.
- Pyydä ohjaajaa tarkistamaan määrittelysi.
- Tallenna ER-kaaviosi U:-asemalle tiedonhallinta-hakemistoon nimellä opiskelijarekisteri.erkka.
Tietokannan luominen
- Varmista että ER-kaaviossasi ei ole missään kohdassa käytetty skandinaavisia merkkejä (å,ä tai ö).
- Valitse Erkasta Query-välilehti. Jos kaikki on kunnossa niin Erkka
tekee tietokannan
luomiseen tarvittavat SQL-lauseet. Jos SQL-lauseiden tekeminen ei onnistu niin palaa ER-kaaviovälilehdelle ja varmista että kaikki kardinaalisuudet ovat paikoillaan ja jokaisella kohteella
on määriteltynä perusavain (primary key). Kokeile sitten taas uudelleen
Query-välilehteä. F5-näppäimellä saat päivitettyä SQL-näkymän.
Jos saat virheilmoituksen jossa valitetaan temp.tmp-tiedostosta niin Erkka ei jostain syystä onnistu luomaan tarvitsemaansa väliaikaistiedostoa. Jos olet yliopiston koneella voit kiertää ongelman kopioimalla c:\program files\Erkka -kansion omalle U:-levyllesi ja käynnistämällä Erkan tästä kansiosta (Erkka.jar).
- Voit tarkistella ja järjestellä tietokantasi relaatiokuvaa Relation-välilehdellä.
- Tässä vaiheessa täytyy luoda uusi tietokanta johon voimme luoda Erkalla määritellyt relaatiot
- Käynnistä Microsoft Access (Start|Programs|Microsoft Office|Microsoft Office Access 2007)
- Valitse File|New
- Valitse oikean laidan palkista Blank database
- Valitse tietokannan tallennuspaikaksi C:\Mytemp ja nimeksi opiskelijarekisteri.mdb. Accessin tietoturvarajoituksista johtuen tietokantaa ei voida käyttää verkkolevyltä (U-asema). Käyttäessäsi 2010 versiota MDB-tiedostotyypin saat Save and Publishin kautta File-valikossa valiten Access 2002 - 2003 Database (*.mdb).
- Sulje tietokanta hetkeksi, mutta älä sulje Accessia. Palaa takaisin Erkka-ohjelmaan.
- Siirry Erkka-ohjelmassa Query-välilehdelle.
- Valitse File | Open Database.
- Etsi C:\MyTemp-kansiosta edellä luomasi
opiskelijarekisteri.mdb-tiedosto.
Jos saat kummallisen jet.dsn-aiheeseen liittyvän virheilmoituksen niin varmista, että Access on suljettuna ja yritä uudelleen.
- Nyt voit avata tietokannan takaisin auki Accessiin. Yleensä sulkemista ei tarvitse tehdä, ongelma lienee Access-tietokantaajureissa tai Erkassa.
- Nyt sinulla on yhteys tietokantaan ja voidaan luoda tietokantaan suunnittelemamme relaatiot (taulut).
- Valitse Execute
- Results-paneeliin pitäisi ilmestyä tiedot SQL-lauseiden suorittamisesta ja myös mahdolliset virheet
SQL-virheet tietokannan luomisessa
- Aina ensimmäisenä suorita SQL-lauseesi kahteen (2) kertaan. Jos toisenkin suorituskerran jälkeen tulee vielä virheilmoituksia niin tutki sitten tarkemmin seuraavia vinkkejä.
-
Älä pelästy vaikka
ensimmäiset rivit ilmoittavatkin virheistä seuraavaan tapaan:
Error in query DROP TABLE tarvii : [Microsoft][ODBC Microsoft Access Driver] Table 'tarvii' does not exist.
Ensimmäiseksi yritetään poistaa jo olemassaolevia tauluja eikä niitä tietenkään tässä vaiheessa vielä löydy. DROP TABLE -komentoihin liittyvistä virheilmoituksista ei siis tarvitse välittää - Älä saa paniikkia virheiden määrästä vaan korjaa virheet yksi kerrallaan Aloittaen ensimmäisestä virheestä (poislukien edellämainitut DROP TABLE -virheet). Aina yhden virheen korjaamisen jälkeen päivitä SQL-lauseet (F5) ja kokeile suorittaa (execute) ne uudelleen. Yksi virhe voi aiheuttaa monta muuta ja samoin yhden virheen korjaaminen voi korjata samantien kaikki.
-
Jos ongelmana on
Error in query CREATE: Syntax error in field definition.
niin tarkista, että minkään kentän tietotyyppinä ei lue sana error. Jos löydät tälläisen kentän niin käy er-kaaviossa muuttamassa kentän tyyppiä, klikkaa välillä piirtoaluetta ja muuta tyypiksi oikea. Virhe johtuu Erkassa olevasta bugista jota ei ole vielä saatu korjattua.Toinen vaihtoehto tälle virheelle on luultavasti ongelma length- tai value-kentän arvoissa (liittyvät NUMERIC- tai DEFAULT-valintoihin).
-
Jos saat virheen muotoa:
Error in query CREATE Table foo : [Microsoft][ODBC Microsoft Access Driver] Size of field 'testi' is too long.
Tarkista, että et ole määrittänyt ominaisuuden pituudeksi yli 255 merkkiä. Jos oikeasti tarvitset tätä enemmän tilaa (esim. reseptin ohjerivi voi helposti olla pitempi) niin joudut myöhemmin muuttamaan kentän ominaisuuksia Accessin kautta. Tähän palataan myöhemmissä demoissa.
-
Jos Results-paneeliin tulee valitus
Error in query CREATE: Cannot find table or constraint.
niin tällöin Erkka on luonut SQL-lauseet väärän järjestykseen. Järjestä leikepöydän avulla CREATE TABLE-käskyt niin että viitteet toisiin tauluihin menevät oikein.- Esimerkiksi Laitos-taulu pitää olla Tiedekunnan jälkeen (Tiedekunnasta viittaus Laitokseen), mutta ennen Opiskelijaa (Opiskelijasta viittaus laitokseen).
- Siirry Microsoft Accessiin ja tarkista mitä näkyy Tables-välilehdellä. Saat päivitettyä välilehden sisällön F5-näppäimellä. Jos kaikki meni oikein niin listassa pitäisi näkyä Kurssi, Laitos, Opiskelija, Tenttii ja Tiedekunta.
- Jos jokin tauluista ei ilmestynyt Accessiin niin tarkista SQL-lauseiden oikeellisuus yhdessä demo-ohjaajan kanssa ja yritä sen jälkeen uudelleen Execute-painiketta..
- Valitse Accessissa Tools | Relationships. Järjestele taulut parempaan järjestykseen. Vertaa Accessin relaatiokuvaa Erkan Relation-välilehden kuvaan ja katso, että ne ovat samansisältöisiä.
- Sulje Relationships-ikkuna ja tallenna siihen tehdyt muutokset. Kopioi opiskelijarekisteri.mdb C:\Mytemp-hakemistosta U:\tiedonhallinta-hakemistoon.
Reseptitietokanta
- Tee opiskelijatietokannan tapaan kardinaalisuuksien, perusavainten ja tietotyyppien määrittely edellisissä demoissa aloittamallesi reseptitietokannalle.
- Pyydä ohjaajaa tarkistamaan määrittelysi.
- Tee Accessilla resepti.mdb ja luo tähän tiedostoon tietokantasi taulut SQL-lauseilla opiskelijatietokannan tapaan.
Jalkapalloturnaus
- Jos sinulle jäi vielä aikaa niin tee kardinaalisuuksien, perusavainten ja tietotyyppien määrittely myös jalkapalloturnausta käsittelevään ER-kaavioon.
- Luo myös jalkapallotietokanta Accessiin.
Käyttäjien kommentit