Harjoitustyöohje ja raporttipohja



Samankaltaiset tiedostot
Liigan taulut ja attribuutit

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

LINUX-HARJOITUS, MYSQL

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

2. Käsiteanalyysi ja relaatiomalli

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

3. Käsiteanalyysi ja käsitekaavio

SQLite selvitysraportti. Juha Veijonen, Ari Laukkanen, Matti Eronen. Maaliskuu 2010

Tietokannat II -kurssin harjoitustyö

HARJOITUS 2. Kasvattamot ja mittaukset

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Tietokantojen suunnittelu, relaatiokantojen perusteita

Ohjelmoinnin perusteet Y Python

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

TIEDONHALLINTA - SYKSY Luento 7. Pasi Ranne /10/17 Helsinki Metropolia University of Applied Sciences

HELIA 1 (17) Outi Virkki Tiedonhallinta

T harjoitustyö, kevät 2012

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

SQL - STRUCTURED QUERY LANGUAGE

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Napsauta Kurssin viikkonäkymä- näkymässä oikeassa yläreunassa sijaitsevaa Muokkaustila päälle -painiketta.

SALITE.fi -Verkon pääkäyttäjän ohje

Käsikirjan paperiversiota ei enää ylläpidetä ohjeen päivämäärän jälkeen. Viimeisimmät versiot ohjeista löydät ohjelman Help-ruudulta.

1. ASIAKKAAN OHJEET Varauksen tekeminen Käyttäjätunnuksen luominen Varauksen peruminen... 4

Tehtävän lisääminen ja tärkeimmät asetukset

INTINU13A6 Java sovellukset

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

EeNet käyttäjähallinta ohjeet

Visma Fivaldi -käsikirja Tehtävienhallinta- ohje käyttäjälle

DXL Library ja DXL-kielen olemus. Pekka Mäkinen SoftQA Oy http/

SATAKUNNAN AMMATTIKORKEAKOULU

Tik Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu KÄYTTÖOHJE. LiKe Liiketoiminnan kehityksen tukiprojekti

Testidatan generointi

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Suvi Junes Tampereen yliopisto / tietohallinto 2013

Olet tehnyt hyvän valinnan hankkiessasi kotimaisen StorageIT varmuuskopiointipalvelun.

HELIA 1 (11) Outi Virkki Tiedonhallinta

TIEDONHALLINTA - SYKSY Luento 2. Pasi Ranne /8/17 Helsinki Metropolia University of Applied Sciences

Pauliina Munter / Suvi Junes Tampereen yliopisto/tietohallinto 2013

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

HELIA 1 (14) Outi Virkki Tiedonhallinta

Visma Business AddOn Tositteiden tuonti. Käsikirja

Ohjelmoinnin perusteet Y Python

SQL Buddy JAMK Labranet Wiki

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

T harjoitustehtävät, syksy 2011

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Ohjelmoinnin perusteet Y Python

Uuden työ- tai mittavälineen luominen tietokantaan

Käyttöohje. Visy Access Net UPM

Ohjelmoinnin peruskurssi Y1

Tietokannat II -kurssin harjoitustyö

Access-kyselyt. Luetteloinnin kehittämispäivä Mia Kujala

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Versiohallinta ja Subversion Maunu Tuomainen

Suvi Junes/Pauliina Munter Tampereen yliopisto / tietohallinto 2014

OpenOffice.org Base 3.1.0

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

Opas administraattori-tason käyttäjille. MANAGERIX -ohjelman esittely... 2 Kirjautuminen... 2

Hockeyliitto - Torneopal

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

Jäsenrekisterin käytön perusteet

ARVI-järjestelmän ohje arvioinnin syöttäjälle

Ohjelmoinnin perusteet Y Python

Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Excel-taulukkoon X- ja Y-sarakkeisiin tallennettujen koordinaattien muuntaminen paikkatietokohteiksi

CSE-A1200 Tietokannat

Tietokannan luominen:

Hockeyliitto -Torneopal

PELAAJAPROFIILI Mobiilisovellus

Keskustelualue. Tampereen yliopisto/ tietohallinto 2017 Suvi Junes/Pauliina Munter

KServer Etäohjaus Spesifikaatio asiakaspuolen toteutuksille

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Hakemistojen sisällöt säilötään linkitetyille listalle.

KiMeWebin käyttöohjeet

Hops-ohjaajan ohje Opiskelijan hopsit.

Opinajan käytön aloittaminen koulussa/oppilaitoksessa

Tuomarit. 1 Järjestelmään kirjautuminen

Ensimmäisessä vaiheessa ladataan KGU tietokanta Hallitse tietokantoja toiminnon avulla.

Ohjeet. Ohjeita on kahdessa paikassa. Admin-näytön oikeassa ylänurkasta. Seura- sivuilta kohdasta Dokumentit

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A Kandidaatintyö ja seminaari

Palautuskansio moduuli, ja sen vuorovaikutukset tehtävien annossa!

Opiskelijan ohje Tutkintopalvelu

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

Transkriptio:

CT60A4301 Tietokannat Harjoitustyöohje ja raporttipohja Lappeenrannan teknillinen yliopisto Innovation and Software (IS) in LUT School of Business and Management CT60A4301 Tietokannat Ryhmä: 0000007 Olli Meikäläinen olli.meikalainen@lut.fi 0000008 Minna Teikäläinen minna.teikalainen@lut.fi 1.1.2015

Sisällys YLEISTÄ HARJOITUSTYÖSTÄ... 3 VAIHE 1: SUUNNITTELU... 6 VAIHE 2: RELAATIOMALLIKSI MUUNTAMINEN (KONVERTOINTI)... 7 VAIHE 3: KÄYTTÖLIITTYMÄN LUOMINEN... 11 PALAUTUSOHJE... 15 ESIMERKKIAIHEITA... 16 RAPORTTIPOHJA... 17 POIKKEUSTAPAUKSET: EI NYKYISEN MUOTOISEN TAI AIEMMAN OHJELMOINNIN PERUSTEET- KURSSIN SUORITUSTA EI LAINKAAN... 23 2

YLEISTÄ HARJOITUSTYÖSTÄ Harjoitustyössä suunnitellaan ja toteutetaan relaatiotietokanta kuvitteelliselle loppukäyttäjälle / asiakkaalle. Tietokannalle toteutetaan ohjelmallinen käyttöliittymä osin valmiiksi tehdyn Python-koodin (tai muun ohjelmallisen toteutuksen) avulla. Työ tehdään kahden tai yhden hengen ryhmissä. Työn osaalueet ovat: (1) Suunnittelu (tehtävänannon kuvaus ja työn rajaukset; tietokannan käsitemalli ja eheyssääännöt), (2) relaatiomalliksi konvertointi eli muuntaminen, (3) ohjelmallinen toteutus, ja 4) yhteenveto (opitut asiat ja ongelmien ratkaisut). Nämä osa-alueet toteutuvat kaikissa käytännön tietokantaratkaisuissa ja siten myös kurssin harjoitustyössä. Harjoitustyön neljä työvaihetta kuvataan tässä dokumentissa. Suorita vaiheet tässä järjestyksessä, mikäli noudatat perus tehtävänantoa. Ryhmä voi suorittaa myös vapaamuotoisen harjoitustyön, jossa se tutustuu johonkin vaihtoehtoiseen tapaan toteuttaa tietokantaratkaisu web sovellus, cloud-ympäristöt, mobiilialustat, erityyppiset sulautetut tietokannat, jne. Ota yhteys kurssin luennoijaan, mikäli vaihtoehtoinen aihe ja toteutustapa kiinnostavat. Tämän ohjemateriaalin lisäksi on harjoitustyöpaketissa toimitettu kokoelma Python-koodimoduleita ja esimerkkiohjelman muita aputiedostoja. Näistä kerrotaan lisää työvaiheessa 3. Käyttöliittymän luominen. Aikataulu ja ohjaus Kurssin viikkoharjoitusten neljännen periodin osuus on varattu HT:n tekemiselle ja ohjaamiselle. Alustava, suositeltava aikataulu kurssiviikoittain on seuraava: Viikkoaikataulu & DL:t Tehtävät Viikot 1-6 Opiskelija suorittaa itsenäisesti ViopeSQL - verkkokurssin. Tämä suoritus koskee kaikkia Tietokannat- kurssille ilmoittautuneita. Ainoa poikkeus on se, jos valitset itsenäisesti suoritettavan Stanfordin yliopiston Databaseskurssin. Varaa aikaa verkkokurssin suorittamiseen 3. periodilla ja aloita sen suoritus heti ensimmäisellä luentoviikolla. SQL- verkkokurssin suoritus on välttämätön ja pakollinen harjoitustyön ymmärtämiseksi. Verkkokurssia ohjaa kurssin luennoija Erja Mustonen-Ollila. Verkkokurssin ilmoittautumisohjeet löytyvät Nopassa kohdasta Muu materiaali. Viikot 1-6 Viikkoharjoituksia Noppa -kurssisivujen mukaisesti. Harjoitukset alkavat heti ensimmäisellä luentoviikolla. Harjoituksia pitää kurssin luennoija. 3

Viikko 6 Viikot 7-10 Viikot 7-10 Viikot 11-12 Harjoitustyön ohjaus aloitetaan harjoituksissa kurssin luennoijan johdolla. Harjoitusten pitäjä on myös kurssin luennoija. Ryhmä määrittää ja tekee oman käsitemallin, joka sitten muutetaan relaatiomalliksi. Tästä harjoitustyöstä poikkeuksen tekevät opiskelijat, jotka eivät ole suorittaneet ohjelmoinnin perusteita tai ovat suorittaneet sen jo vuosia sitten erilaisessa muodossa, mitä se on nykyään. Näissä poikkeustapauksissa opiskelija ottaa suoraan yhteyden kurssin luennoijaan ja saa häneltä oman harjoitustyön ja ohjeet sen suorittamiseen sekä palautusohjeet. HUOM! Jos kuitenkin suoritat koko Tietokannatkurssin etänä Stanfordin yliopiston Databaseskurssin avulla, niin kerro asiasta kurssin luennoijalle ennen sen aloittamista. SQLite3:n ja Python -ohjelmapohjan läpikäynti harjoituksissa. Ryhmä toteuttaa (ja korjaa) relaatiomallin SQLitella relaatiotietokannaksi (mukana kyselyt). Ryhmä sovittaa Python -ohjelmapohjan relaatiotietokantaansa ja suorittaa ohjelmallisen toteutuksen valmiiksi. Raportin viimeistely / päivitys. 29.05.2015, klo 23.59 mennessä Harjoitustyön deadline eli palautuspäivä. Katso tämän raportin lopusta tarkat palautusohjeet. Kirjallinen raportti 4 Kaikissa tapauksissa harjoitustyö palautetaan kurssin luennoijalle! Ne poikkeustapaus -opiskelijat, jotka ohjelmoinnin perusteet kurssin- esitietonsa puutteen takia ovat sopineet harjoitustyönsä suoraan luennoijan (Erja Mustonen-Ollila) kanssa palauttavat harjoitustyönsä myös hänelle. Näille poikkeustapaus -opiskelijoille luennoija on lähettänyt sähköpostin liitteenä oman palautusohjeen! Palautusaika DL on kuitenkin sama kaikilla opiskelijoilla. Raporttiin laaditaan seuraavat osiot, jotka ovat kuvattu tarkemmin alempana: 1. Tehtävänannon kuvaus ja työn rajaukset. 2. Tietokannan käsitemalli ja eheyssäännöt. 3. Raportti ohjelmallisesta toteutuksesta. 4. Yhteenveto. Mitä ongelmia jouduttiin ratkomaan tai mitä erityistä havaittiin ja opittiin tietokannan toteutuksen yhteydessä.

Ohjelmallisessa toteutuksessa käsitemallista relaatiomalliksi muunnettu malli toteutetaan relaatiotietokannaksi (= tietokanta, jota asiakas voi käyttää.) Toteutus koostuu edelleen kahdesta vaiheesta: Ensin luodaan relaatiotietokanta SQLite3 -työkalulla. Tässä vaiheessa tehdään käsitemalliin tarpeelliset korjaukset ja lisäykset, jotta tietokanta toimii oikein. Toisessa vaiheessa laaditaan tietokannalle käyttöliittymä, jonka avulla sitä voi käyttää. Tätä varten toimitetaan harjoitustyöpaketissa valmis Python -kielinen ohjelmapohja, johon ryhmä tekee oman tietokantansa vaatimat muutokset. Vaatimukset Harjoitustyön suorittamiseksi edellytetään alla olevat asiat: Suunnitteluosuus: - Käsitemallin tulee koostua ainakin noin 7 10 käsitteestä (yksilötyyppi) ja täten lopullisen tietokannan tulee koostua ainakin yhtä monesta relaatiosta eli taulusta. Relaatiomalli voi myös olla laajempi, mutta ei suppeampi. - Tietokantaan tulee toteuttaa ainakin viisi kyselyä (queries) tai näkymää (views), jotka tuottavat jonkin/joidenkin loppukäyttäjien kannalta hyödyllistä tietoa. JOIN-lausetta on käytettävä ainakin yhdessä kyselyssä. - Tietokannassa ei saa esiintyä tietorakenteita, jotka ovat relaatiomallin vastaisia. Kts. lisätietoa harjoituksissa, jotka liittyvät työn esittelyyn, viikko 2-7. Ohjelmallinen toteutus: - Tietokanta on testattavissa ja käytettävissä sekä SQLite3 että Python- (tai muunkielisen, tulkattavan tai käännetyn) sovelluskäyttöliittymän kautta. - Käyttöliittymän avulla voidaan selata tietokannassa olevia tietoja, päivittää olemassa olevia tietoja, sekä hakea ja poistaa tietoja. - Tietokantaan tehtävänannossa määritetyt kyselyt ovat ajettavissa käyttöliittymän kautta. - Käyttöoikeuksien hallinta. Käyttäjäryhmät ovat määritetty tietokannan tehtävänannossa. Käyttöoikeudet koskevat kyselyjä ja lisäys/muokkaustoimintoja. Kiittäen hyväksytty harjoitustyö Harjoitustyöstä voidaan laatia kiittäen hyväksytty versio, joka nostaa kurssin loppuarvosanaa yhdellä. Tällaisen version vaatimuksena on, että perusversion lisäksi toteutetaan jokin seuraavista kolmesta laajennuksesta. - Tietokannassa on yli 10 taulua. Tietokannassa on näkymiä ja useita JOINlauseilla rakennettuja kyselyjä. Eheyssäännöistä pidetään huolta joko ohjelmallisesti tai usein eri CHECK-lausein taulujen rakenteessa. - Itse toteutettu ohjelmallinen käyttöliittymä (tekstipohjainen, selain, työpöytäympäristö.) - SQLiten korvaaminen tietokantapalvelimella, jolloin koodipohja muutetaan asiakasohjelma-käyttöliittymäksi; tai kahden eri sulautetun tai palvelin vaihtoehdon kevyehkö vertailu ja tämän raportointi. - Harjoitustyötä raportoitaessa on opiskelijan/kahden opiskelijaryhmän kerrottava, minkä laajennuksen hän/he työlleen toteutti/toteuttivat. 5

VAIHE 1: SUUNNITTELU Aloita työ tutustumalla oheiseen raporttipohjaan, joka löytyy tämän dokumentin lopusta. Älä välitä tässä kohtaa vielä ohjelmatoteutuksesta eli relaatiomalliksi muuntamisesta (konvertointi), vaan etene seuraavaan vaiheeseen vasta kun olet täyttänyt raporrtipohjan luvut 1. Määritys ja 2. Käsitemalli. Raporttipohjan loput luvut täytetään ohjelmatoteutuksen jälkeen. 6

VAIHE 2: RELAATIOMALLIKSI MUUNTAMINEN (KONVERTOINTI) Ohjelmatoteutuksessa tuotetaan tietokantasuunnitelmasta varsinainen relaatiotietokanta, jota asiakas voi käyttää. Ensin opiskelijan on muutettava tietokannan käsitemalli ja muu suunnitelma- aineisto relaatiomallin mukaiseksi esitykseksi, ts. konkreettiseksi tietokannaksi. Tämän jälkeen relaatiotietokannalle on tarjottava ohjelmallinen käyttöliittymä, jotta asiakas voi sitä hyödyntää (lisätä tietoa, poistaa tietoa, suorittaa kyselyjä) ja jotta esimerkiksi käyttöoikeuksia voidaan hallinnoida. Tässä osiossa suoritetaan näistä työvaiheista ensimmäinen, eli muunnetaan käsitemalli relaatiomallin mukaiseksi relaatiotietokannaksi. 1. SQLite tiedonhallintajärjestelmä & Pythonohjelmointikielen SQLite3- kirjasto Suunnittelussa tehty käsitemalli muunnetaan relaatiomalliksi SQLite tiedonhallintajärjestelmän avulla, joka on tarkoitettu relaatiotietokantojen tiedonhallintaan. SQLite:ä käytetään esim. siten, että Python- ohjelmontikielellä tehdään ensin perusohjelma ja siihen ohjelmaan lisätään SQL-väittämiä ja lauseita. Tällöin puhutaan sulautetusta SQL:stä (engl. embedded SQL). Jos halutaan käyttää tietokantaa SQL-käskyjen avulla Python-ohjelmassa, käytetään yleensä hyväksi tarkoitukseen sopivaa Python-kirjastoa. Vaikka kirjastoja on monta, niin tässä harjoitustyössä käytämme kirjastoa SQLite3, jonka avulla voi käyttää SQLitenimistä tietokannan tiedonhallintajärjestelmää. SQL-käskyjä siis liitetään Python-kieliseen ohjelmaan käyttämällä hyväksi sopivia kirjastofunktioita, esimerkiksi Python-kirjastoa SQLite3. Tietokantayhteys luodaan komennolla sqlite3.connect (filename). Tarvitset myös tässä kohtaa ns. tietokantakursorin, joka on se osa ohjelmastasi, joka antaa tietokannalle käskyjä ja vastaanottaa siltä tietoa. SQLite on laajalti käytetty relaatiotietokannan tiedonhallintajärjestelmä, jonka pääasiallinen käyttötarkoitus on toimia tiedonhallintajärjestelmänä ohjelmistoille ja ympäristöille, joissa ei ole tarpeen käyttää PostgreSQL, MySQL, Firebird tms. raskaita tietokantapalvelimia. SQLite on kehitetty ohjelmointikieli- C:llä, mutta se tarjoaa rajapintoja myös useille muille ohjelmointikielille. Käytössä on lisäksi erilaisia graafisia työkaluja ja SQLitetietokantoja voi avata jopa OpenOfficella. Vastaavia sulautettuja relaatiotietokantoja ovat myös esim. HSQLDB, H2, Apache Derby, jne. (jotka ovat toteutettu Javalla, ja saattavat siten kiinnostaa eritoten Javalla työskenteleviä). SQLitella voidaan sulautettujen toteutusten ohella luoda ja manipuloida relaatiotietokantoja myös suoraan "käsin" asiakasohjelmalla tai ajamalla SQLkomentosarjoja tiedostosta, johon tietokannan käyttämä data on tallennettu. SQLite ei siis tarvitse erillistä tietokantapalvelinta toimiakseen. Käytämme tätä ominaisuutta hyödyksi kun nyt muunnamme tietokantasuunnitelman relaatiomalliski. Näin saadaan luotua tietokanta, jonka toiminta on testattu ja jota voidaan sitten käyttää minkä tahansa sovelluksen kautta, joka hyödyntää SQLite-rajapintoja. Niiden avulla ohjelmakoodiin 7

voidaan upottaa SQL-komentoja ja näin relaatiotietokannalle tarjota käyttöliittymä. Tähän palaamme työn viimeisessä vaiheessa, sillä harjoitustyössä pohdittavat loppukäyttäjät, esimerkiksi N-divarin sihteeri tai joukkueen valmentaja eivät suinkaan voi käyttää toimitettavaa tietokantaratkaisua suoraan raa'alla SQL-kielellä, joten käyttöliittymä on tarpeen. Vertailukohtana voidaan pitää vaikka yliopiston Oodia tai Noppaa, jotka ovat itseasiassa vain käyttöliittymiä relaatiotietokantaan. SQLite3 löytyy asennettuna yliopiston Linux-työasemista sekä Windowsluokan xxxx koneista. Käyttö Linux- ja Windows-ympäristöissä on tämän ohjeen kannalta yhtenevää. (SQLiten -ohjelmointikielikohtaiset kirjastot voivat olla tarpeen asentaa erikseen riippuen kehitysympäristöstä.) 2. SQLite3 käyttö Ennen kuin aletaan varsinainen muunnos, testataan, että SQLite3 on asennettu. Tämän jälkeen tutustutaan sen käyttöön komentorivi-tilan kautta. 1. Tarkistetaan, että SQLite on asennettuna ja luodaan tyhjä tietokanta. (Siirrytään UNIX-ympäristössä maax-kotihakemistoon) ~$ mkdir Tietokannat ~$ cd Tietokannat ~/Tietokannat$ sqlite3 -version 3.7.9 2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e (Huom. Käytä vähintään versiota 3.6.19 parannetun vierasavaintuen vuoksi. Aiemmissa versioissa vierasavainten eheystarkistukset tulee kirjoittaa käsin.) 2. Perustetaan tai avataan tietokanta: ~/Tietokannat$ sqlite3./testikanta SQLite version 3.7.9 2011-11-01 00:52:41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> SQLite voi nyt vastaanottaa komentoja. Tutustu.help -käskyllä käytössä oleviin komentoihin. Erityisesti:.read (lue SQL-komentosarja tiedostosta).tables (listaa taulut).schema (esitä taulun rakenne) Kehotteeseen voidaan syöttää suoraan SQL-komentoja. Komento voi muodostua useista riveistä ja sen suoritus alkaa vasta kun annetaan puolipiste. Tietokannan rakenne voidaan luoda toki näin, mutta helpompaa on kirjoittaa CREATE TABLE ja INSERT INTO -käskyt erilliseen tekstitiedostoon ja pyytää SQLitea suorittamaan tiedoston sisältö. 8

3. Suoritetaan SQL-komentosarja sqlite> PRAGMA foreign_keys=on; (Pakottaa vierasvainten eheystarkistukset päälle.) sqlite>.read N-divari_SQL-komennot.txt (Pyydetään suorittamaan SQL-komentosarja tiedostosta.) Katsotaan mitä saatiin aikaan: qlite>.tables Edustaa Huomautus Ottelu Pelipaikka Tuomaroi Edustaja Joukkue Pelaaja Toimitsija sqlite>.schema Ottelu CREATE TABLE Ottelu ( OtteluID INTEGER, KotijoukkueID INTEGER, VierasjoukkueID INTEGER, Tyyppi VARCHAR(1) NOT NULL, Tulos VARCHAR(5), Paivamaara DATE NOT NULL DEFAULT CURRENT_DATE, PelipaikkaID VARCHAR(32), 9 PRIMARY KEY(OtteluID), FOREIGN KEY(KotijoukkueID) REFERENCES Joukkue(JoukkueID), FOREIGN KEY(VierasjoukkueID) REFERENCES Joukkue(JoukkueID), FOREIGN KEY(PelipaikkaID) REFERENCES Pelipaikka(PelipaikkaID), CHECK (Tulos LIKE '%-%'), CHECK (Tyyppi IN ('V', 'E')) ); sqlite> (Ts. nähdään taulun rakenne.) 4. Operoidaan tietokantaa sqlite>.mode columns sqlite>.headers on (Asettelee tulosteita paremmin) sqlite> select * from joukkue; JoukkueID Nimi Pisteet Status ---------- ------------------------------ ---------- ------ 1 Sammonlahden Äijäpalloilijat 6 P 2 FC Puulaaki 3 P 3 Saimaan Senioriurheilijat 0 T 4 Pallon Pallopojat 11 P 5 Team Ruohosaari 16 L sqlite> sqlite> insert into joukkue values (6, 'UusiTiimi', 0, 'P'); sqlite> select * from joukkue; JoukkueID Nimi Pisteet Status ---------- ------------------------------ ---------- ------

1 Sammonlahden Äijäpalloilijat 6 P 2 FC Puulaaki 3 P 3 Saimaan Senioriurheilijat 0 T 4 Pallon Pallopojat 11 P 5 Team Ruohosaari 16 L 6 UusiTiimi 0 P sqlite> (Toisaalta, jos jätetään values pois:) sqlite> insert into joukkue (6, 'UusiTiimi', 0, 'P'); Error: near "4": syntax error sqlite> sqlite>.quit (Lopetetaan) 5. Huomaa: SQLite pitää huolta CHECK-muotoisista eheystarkistuksista. Mutta muista asettaa vierasavainten eheystarkistukset erikseen päälle, koska näin ei oletuksena ole yhteensopivuussyistä vanhojen SQLite-versioiden kanssa. Luotu tietokanta tallentuu levylle ja se voidaan avata uudestaan ja edelleen myöhemmin ottaa käyttöön esim. ohjelmallisesti rajapintojen kautta, kuten teemme harjoitustyön viimeisessä työvaiheessa. Tietokanta koostuu tästä yhdestä tiedostosta, joka SQLitella on luotu. Sitä voi siis kopioida ja siirrellä vaivatta paikasta toiseen, koska mitään palvelinyhteyttä tms. ei tarvita. 3. Työvaiheen suorittaminen Luo tietokantasuunnitelmaasi vastaava relaatiotietokanta SQLite3:lla. Luo taulut ja niiden kaikki rakenteelliset ominaisuudet, kuten esim. CHECK-tarkistukset. Vie tietokantaan jonkin verran testidataa. Tässä vaiheessa saatetaan huomata, että käsitemalli ei ole täysin oikea ja sitä pitäisi muuttaa. Tarvitaan esim. uusia tauluja, taulujen rakenne ei ole korrekti, jokin tärkeä attribuutti puuttuu, jne. Korjaa käsitemallia samalla ja päivitä raporttipohjaa vastaavasti. Kirjoita kyselyjen SELECT-lauseet muistiin ja testaa (ja korjaa) niitä tietokantaasi vastaa ajettuna. Työvaihe on suoritettu, kun kaikki toimii suunnitellusti ja tietokantasi olisi periaatteessa käytettävissä SQLite-komentorivin kautta. Älä etene viimeiseen työvaiheeseen ennen kuin tietokanta toimii! Muista: Täytä Raporttipohjan lukuun 3 Tietokantatoteutus työvaiheessa tekemiäsi havaintoja. Muista: Tallenna tietokannan luomiseksi tarvittavat SQL-komennot tekstitiedostoon, jonka pidät tallessa. Tämä tiedosto tulee voida suorittaa SQLitella.read -komennolla, kuten yllä. Se liitetään osaksi lopullista harjoitustyön -palautusta. 10

VAIHE 3: KÄYTTÖLIITTYMÄN LUOMINEN Harjoitustyön viimeisessä vaiheessa luodaan relaatiotietokannalle käyttöliittymä, jonka kautta asiakas voi sitä käyttää. Pelkästä relaatiotietokannastahan ei sellaisenaan ole asiakkaalle iloa. Tarvitaan jokin ohjelma, jonka kautta tietokantaa vastaan voidaan suorittaa ksyelyjä ilman SELECT-käskyjä. Toisaalta pitää voida suorittaa lisäyksiä, poistoja ja tietueiden päivityksiä ilman hankalia SQL-komentoja. Käyttöoikeuksia tulee myös voida valvoa. Harjoitustyöpaketissa tarjotaan yksinkertainen Python- kielinen esimerkkiohjelma, joka toteuttaa tämän työvaiheen raporttipohjan esimerkkitietokannalle (Puulaaki / N-divari) käyttäen hyväksi SQLite3 ohjelmointirajapintoja. Voit käyttää tätä koodipohjaa oman ohjelmasi perustana, mikäli et halua luoda uutta. Tällöin tässä työvaiheessa tehtävänäsi on mukauttaa koodi oman tietokantaasi ja työsi määrityksiin sopivaksi. Käymme alla läpi, miten tämä kannattaa tehdä. 1. Python-kielinen esimerkkiohjelma Python-esimerkki löytyy työpaketin alihakemistosta Ohjelmatoteutus. Koodi on mahdollisimman yksinkertaista ja sisältää vain ohjelmarakenteita ja toteutustapoja, jotka ovat tuttuja ohjelmoinnin perusteet -kurssilta. Koodissa ei siis käytetä Pythonin olio-ominaisuuksia tai muita edistyneitä menetelmiä ja sen on siten kaikkien opiskelijoiden ymmärrettävissä ja muokattavissa. Python-toteutusta ei tarvitse osata ohjelmoida itse, mikäli tyydytään harjoitustyön läpäisemiseen perustasolla. Tällöin riittää, että koodia muokataan sen verran, kuin oma tietokantatoteutus vaatii. Käytännössä tämä tarkoittaa koodissa: - INSERT komentojen ja niitä kutsuvien funktioiden muokkaamista. - Käyttöoikeustiedoston muokkaamista. - Kyselyt-tiedoston laatiminen omien kyselyiden perusteella. Käymme läpi nämä kohdat alempana. Pohja koostuu seuraavista tiedostoista, jotka kuvataan myös tarkemmin alempana: - main.py - UI.py - file_io.py - query.py - insert_alter.py main.py - class_def.py - users.data (käyttäjätunnukset sisältävä tiedosto) - puulaaki.sql (kyselyt sisältävä tiedosto) - puulaaki.db (SQLitella luotu tietokanta) Ohjelma suoritetaan Windows-ympäristössä ajamalla Python-tulkilla. Linux-ympäristössä voidaan komentaa suoraan./puulaki työhakemistossa. 11

2. Esimerkkikoodin ominaisuuksia Ohjelma on teksti- ja komentorivipohjainen. Se on monelta osin vajavainen oikeaksi tietokantasovellukseksi. Käyttöliittymä esim. on kankea ja koodin pituuden minimoiseksi virheentarkistusta on niukasti. Koodista kuitenkin nähdään, miten upotettua SQL:ää voidaan käyttää ja minkälaisia teknisiä asioita on huomioitava tällaista sovellusta kehitettäessä. Ohjelman ominaisuuksia ovat: users.data - Käyttöoikeuksien hallinta. - Kaksi eri tapaa "upottaa" SQL:ää. 2.1. Käyttöoikeudet Ohjelma lukee käyttäjien tiedot tiedostosta, joka sijaitsee oletuksena työhakemistossa. Tämä ei ole tietenkään oikeasti tieoturvallinen tapa hallita käyttöoikeuksia, mutta riittää harjoitustyön tarpeisiin. Katso tiedoston formaatti itse tiedostosta, johon se on dokumentoitu. Harjoitustyöryhmän tulee muokata tiedosto omia käyttäjäryhmiään ja käyttäjiään vastaavaksi. Käyttöoikeuksia hyödynnetään: - Tiedostosta luettavissa kyselyissä. - INSERT, UPADTE ja DELETE-käskyjä suorittavissa funktioissa (insert_alter.py, UI.py) 12 2.1.1 Käyttäjäryhmät Users.data tiedosto määrittää käyttöoikeuksia UNIX-pohjaisista järjestelmistä tutulla periaatteella, jossa on a) käyttäjäryhmiä, kuten admin, secretary, coach, joista jokaiselle on päätetty tällaiselle käyttäjätyypille tarpeelliset oikeudet; b) yksittäisillä sovelluksen käyttäjllä on käyttäjätunnus ja salasana; c) jokainen käyttäjätunnus kuuluu johonkin edellä mainituista käyttäjäryhmistä, minkä perusteella käyttäjä saa kyseisen ryhmän oikeudet. users.data:ssa esim. on useita secretary-ryhmään kuuluvia tunnuksia. Heillä on kaikilla yhtäläiset käyttöoikeudet. 2.1.2 Kyselyt ja käyttöoikeudet Tiedostosta luettavat kyselyt (puulaaki.sql) määrittävät kyselykohtaisesti, millä käyttäjäryhmillä on oikeus suorittaa kysely. Ohjelma osaa näin ajon aikana rakentaa käyttäjälle listan vain niistä kyselyistä, joihin hänellä on suoritusoikeus. Ts. coach-ryhmään kuuluva käyttäjä ei näe kyselyjä, jotka ovat tarkoitettu vain sihteerille. 2.2 Kaksi tapaa "upottaa" SQL:ää Yksinkertaisin tapa suorittaa SQL:ää on upottaa SQL-komentoja suoran osaksi Python-koodia. Kuten insert-alter.py:stä nähdään, on tämä hyvin työlästä ja tilaa vievää, joskin suoraviivaista ja helppoa. Toisaalta voidaan SQL-sarjojen

suorittamista automatisoida. Harjoitustyö -pohjassa näin tehdään kyselyjen ja osan INSERT-komentojen osalta. Meillä on siis kaksi eri lähestymistapaa SQL:n suorittamiseen. Kyselyt ovat tehty automatisoidulla tavalla. Ne luetaan tiedostosta (esim. tietokanta.sql kts. file_io.py), joka noudattaa erityistä notaatiota, jonka avulla ohjelma voi suorituksen aikana rakentaa kyselyt automaattisesti ilman koodiin upotettavaa SQL:ää. Ohjelmakoodissa ei siten tarvitse tietää, mitä kyselyjä ohjelmalla tullaan suorittamaan eikä siis myöskään SQL-lauseita tarvitse kirjoittaa ohjelmakoodiin. Tällaisen koodin ylläpito on helppoa. Uuden joukkueen ja pelaajan lisääminen (SQL INSERT) sen sijaan on tehty täysin räätälöidysti. Huomataan, että nämä kaksi aliohjelmaa olisivat työläitä toistaa jokaiselle taululle. Lisäksi kaikki tietokantaan tehtävät muutokset saattavat vaatia edelleen muutoksia näihin aliohjelmiin. Toisaalta tällöin voidaan käyttäjälle tarjota juuri halutunlainen käyttöliittymä ja tehdä varsin helposti tarkka virheentarkistus syötteitä vastaanotettaessa. Ylläpito on työläämpää ja virhalttiimpaa. Insert-alter.py:ssä loput INSERT sekä kaikki UPDATE ja DELETE komennoista ovat automatisoidut. Niihin liittyvä käyttöliittymä on siksi vähän kömpelömpi kuin räätälöityjen INSERTien kohdalla, mutta koodi on lyhyttä ja toimii kaikilla tauluilla ja rakenteilla. Vastapainona koodi on hiukan teknisempää, sillä on voitava ennakoida, miten mielivaltaisesta taulusta löydetään esim. mielivaltainen pääavainarvo(joukko) ja sen avulla rakennetaan SQL-lauseen WHERE-ehto. Kyselyissä meidän on taasen osattava sijoittaa muuttujat, kuten henkilön nimi tai tapahtuman päivämäärä SQL-lauseeseen. Python-pohja esittää näihin ongelmiin yhden ratkaisutavan. Yhtenvetona nähdään, että kumpikin tapa tuottaa halutun lopputuloksen, mutta ensimmäinen on tilaavievää ja työlästä, ja vaatii ylläpitoa aina kun kohdetietokanta muuttuu rakenteellisesti. Automatisoitu tapa on kompakti eikä vaadi ylläpitoa, mutta on puolestaan teknisesti vaativampi. 3. Esimerkkipohjan tiedostojen sisältö: class_def.py : Luokkien määritykset. Luokkia käytetään kuten esim. C:n strukteja, eli ne eivät sisällä olio-ominaisuuksia. Näitä ei tarvitse muokata. main.py : Ohjelman suoritus alkaa täältä. UI.py : Käyttöliittymään liittyviä funktioita, jotka lähinnä tulostavat valikoita, joissa käyttäjä tekee valintoja. Muuta tänne esim. ohjelman nimi ja valikoiden tekstit omaan työhösi sopiviksi. Muita muutoksia ei välttämättä tarvita. file_io.py: Tiedostonkäsittelyyn liittyvät funktiot. Katso, että ymmärrät mitä funktiot tekevät. Näitä ei tarvitse muuttaa, jos tarve on vain läpäistä työ. query.py : Aliohjelmat tekevät asioita, jotka liittyvät SQL-kyselyjen suorittamiseen. Kyselyt luetaan tiedostosta (file_io.py:ssä) ja suoritetaan automatisoidusti, joten perustoteutuksessa koodia ei välttämättä tarvitse muuttaa. Edellytyksenä on, että kyselytiedoston SELECT-komemnot ovat huolella testatut harjoitustyön toisessa työvaiheessa, eli relaatiomalliksi viennissä. 13

insert_alter.py : INSERT, UPDATE ja DELETE -komentoja suorittavat funktiot. Näistä ainakin räätälöityjä INSERT-aliohjelmia (2 kpl) on väistämättä muokattava, jotta komennot vastaavat kohdetietokannan rakennetta. Funktiot ovat dokumentoitu koodissa. Edellytyksenä on jälleen, että käytettävät komennot ovat huolella testattu harjoitustyön edellisessä työvaiheessa. Kyselyt-tiedosto (tietokannan_nimi.sql) : Tätä tiedostoa on muokattava. Määritä tietokantasi kyselyt täällä tiedostossa kuvatun formaatin avulla. Testaa kyselyt ensin huolella työvaiheessa kaksi. users.data : Tätä tiedostoa on muokattava. Määritä tietokantasi käyttäjät täällä tiedostossa kuvatun formaatin mukaisesti. 4. Työvaiheen suorittaminen Mukauta Python-koodi omaa tietokantaasi vastaavaksi. Tee yksi muutos kerrallaan: Esim ensin users.data käyttäjät. Sitten kyselyt -tiedosto. Kun ohjelma suoruttaa nämä oikein, siirry mukauttamaan esim. valikoiden tekstit ja ohjelman nimi yms. triviaalit editoinnit, joihin riittää print- ja input- funktioiden merkkijonojen tarkistaminen. Aja koodia aina muutosten jälkeen, jotta et jätä syntaksivirheitä. Lopuksi mukauta insert, update ja delete aliohjelmat yksi kerrallaan niin, että ohjelmasi suoriutuu myös näistä toiminnoista. Voit tietysti muokata ja parantaa ohjelmakoodia niin paljon kuin haluat. Muista: Täytä Raporrtipohjan lukuun 3 Tietokantatoteutus työvaiheessa tekemiäsi havaintoja. Muista: Katso palautusohje tämän dokumentin lopusta. 14

PALAUTUSOHJE A. Kaikissa tapauksissa harjoitustyö palautetaan kurssin luennoijalle! Harjoitustyö palautetaan sähköpostilla. B. Ne poikkeustapausopiskelijat, jotka ohjelmoinnin perusteet kurssin- esitietonsa puutteen takia ovat sopineet harjoitustyönsä suoraan luennoijan (Erja Mustonen- Ollila) kanssa palauttavat harjoitustyönsä myös hänelle. Harjoitustyö palautetaan sähköpostilla. Palautusaika DL on kuitenkin sekä tapauksissa A että B kaikilla sama (katso yllä). A. Palautukseen kuuluu: - Raporttipohja PDF-muodossa. (Työvaihe 1) - Tietokannan luomiseksi tarvittavat SQL-käskyt, jotka voidaan suorittaa SQLite3:lla.read -komentoa käyttäen sekä kyselyjen SELECT-lauseet. (Työvaihe 2) - Ohjelmatoteutus, johon kuuluu sekä SQLite3-muotoinen tietokanta että sovelluskäyttöliittymä, joka hyödyntää tietokantaa. (Työvaihe 3) Sähköpostipalautus: 1. Ryhmän jäsenistä yksi lähettää kurssin luennoijalle sähköpostiviestin, jonka otsikko on sukunimi1 sukunimi2. Esim. Ryhmä Matti Meikäläinen ja Minna Nieminen palauttaa viestillä Meikäläinen Nieminen. 2. Sähköpostin viestikenttään kirjoitetaan ryhmän jäsenten koko nimet ja opiskelijanumerot. 3. Mikäli kyseessä on kiittäen hyväksytty versio, kirjoita viestikenttään KIITTÄEN HYVÄKSYTTY, jotta luennoija muistaa katsoa tähän arvosanaan tarvittavat lisäosat. Jos arvosanasta ollaan erimielisiä, niin kurssin luennoija ratkaisee näissä tapauksissa harjoitustyön arvosanan. 4. Sähköpostin liitteeksi laitetaan yhdessä paketissa (esim. zip, tar.gz,...) kaikki työhön kuuluva materiaali. 5. Paketin sisältö on seuraava: - Raportti.pdf - Select.txt (sisältää kyselyt pelkkinä SELECT-lauseina) - SQL-komennot.txt (SQLite3-tietokannan luomiseksi tarvittavat komennot) - Hakemisto, jonka nimi on Ohjelmatoteutus. Tähän hakemistoon laitetaan kaikki ohjelmakoodi ja muut tiedostot, joita sovelluksen ajamiseksi tarvitaam. Laita myös jokin valmis versio SQLite3-muotoisesta tietokannasta mukaan, jolla ohjelmaa voi heti testiajaa. 15

ESIMERKKIAIHEITA Esiintyjätoimisto: Tarvittavia tietoja voivat olla esim. artisti/laulaja, soittaja, yhtyeet, (artisti esiintyy jonkin yhtyeen kanssa, yhtye koostuu soittajista), vuokrattavat instrumentit, keikkapaikat, järjestäjät, managerit, Python-koodia avstaavat käyttäjäryhmät voivat olla IT-admin, toimiston sihteeri, yhtyeen/artistin manageri. Levyarkisto: Tarvittavia tietoja voivat olla esim. albumi, tallenne (fyysinen/digitaalinen kopio albumista), artisti, kappale/raita (joka voi kuulua x eri albumiin ja/tai äänitteeseen), kaveri, lainaus, käyttäjäryhmiä voivat olla IT-ylläpitäjä, arkiston omistaja/halinnoija, kaveri/vieras. Opisto: Tietoja mm. kurssit, opettajat, muut työntekijät, opiskelijat, kurssiilmoittautumiset, kurssisuoritukset, tapahtumat, oppikirjat/prujut (kursseihin liittyvät), jne. Käyttäjäryhmät esim: IT-admin, opintotoimiston sihteeri, kurssipitäjä. [Tarpeen mukaan lisää vielä.] 16

RAPORTTIPOHJA 1 Määritys Kuvaa tässä työn aihe eli tarve, johon tietokanta kehitetään. Määritä tietokannalle käyttäjät. Kuvaa ongelma-alue sellaisella tarkkuudella, että se voidaan mallintaa tietokannaksi ja sitä verrata kriittisesti käsitenalyysiin työtä arvioitaessa. Huomaa, että tietokanta tullaan käyttämään ohjelmiston kautta, ei suoraan sellaisenaan raa'an SQL-kielen avulla. Voit määrittää tässä siten myös käyttöliittymään ja muihin ohjelmallisiin tarpeisiin liittyviä seikkoja, jos esim. aiot muokata annettua ohjelmakoodia laajemminkin tai olet sopinut omasta harjoitustyön toteutustavasta (Web-sovellus / MySQL, tms.) Esimerkki: N-divisioona N-divari -työnimellä toteutetaan tietokanta asiakkaalle, joka hallinnoi puulaaki -jalkapallodivisioonaa. Koska käyttäjä on järjestö/kerho tms. ja toiminta pienimuotoista, on tietokanta mahdollisimman kevyt. Tietokannassa tulisi voida ylläpitää tietoja liigaan osallistuvista joukkueista ja kunkin joukkueen pelaajista. Tärkeitä pelaajien tietoja ovat nimi, pelinumero ja yhteystiedot. Myös pelaajien keräämistä pisteistä kauden aikana pidetään kirjaa. Joukkueella on lisäksi aina valmentaja ja vastuu/yhteys-henkilö (manageri), ja heidän tietonsa halutaan myös helpommin sähköisesti saataville. Joukkeet pelaavat toisiaan vastaan, ja otteluiden tulokset tulee voida tallentaa tietokantaan. Otteluihin käytettävissä olevat tuomarit ovat vapaaehtoisia, joten heistä tarvitaan myös yhteystiedot sekä mahdollisia jälkiselvittelyjä varten tieto, ketkä ovat tuomaroineet kussakin pelatussa ottelussa. Lopuksi vielä tarvitaan eri pelipaikkojen tiedot (esimerkiksi katuosoite, kentästä vastaavan tahon puhelinnumero, milloin otteluja voi järjestää kyseisellä kentällä, jne.) Tietokantaa käyttävät: Ylläpitäjä, joukkueiden valmentajat ja järjestön sihteeri. Ylläpitäjä voi muokata kaikkia tietokannan perustauluja, kyselyjä, näkymiä ja luoda uutta tietoa ja tietorakenteita. Valmentajat ja joukkueiden edustajat voivat selata kaikkia tietoja ja joitain heille erityisesti laadittuja ksyelyjä. He eivät voi lisätä, poistaa tai muokata tietoja. Sihteeri voi muokata seuraavia tietoja (lista...) ja nähdä seuraavat tiedot (lista...). Sihteerin työtä helpottamaan tarvitaan joitain vakiokyselyjä (tai näkymiä), jotka kuvataan alla. Seuraavat tietokantakyselyt on vähintään toteutettava: (1) Listaa tietyn pelaajan yhteystiedot, pistetilanne ja varoitukset. (2) Esitä ottelut, joissa tuomari X on ollut toimitsijana. (3) Listaa joukkueen X otteluhistoria. (4) Esitä kentällä X pvm:nä Y pelatun ottelun valmentajien yhteystiedot. (5) Tarkista, onko kenttä X varattu tiettynä päivänä jo jollekin ottelulle ja jos on, niin anna joukkueiden yhteyshenkilöiden puhelinnumerot. Jne... Kyselyjen ei tarvitse olla monimutkaisia, mutta mukana on oltava myös kysely, joka vaatii JOIN-määritteen käytön SELECT-lauseessa. 17

2 Käsitemalli Tietokannan suunnittelu aloitetaan käsiteanalyysillä. Analyysin kohteena on koko toimintayksikkö tai sen osa (rajattu alue). Käsitenalyysin tuloksena syntyy kohdealuetta kuvaava looginen malli, jota kutsutaan käsitemalliksi. Käsitemalli esitetään graafisesti käsitekaaviona ja täydennetään tietokuvauksin. Kohdealue kuvataan pelkistetysti tietokantaa varten. Käsitemalli sisältää kohdealueen tietojen rakenteen lisäksi eheyssääntöjä. Käsitenalyysin käyttö johtaa tietokantaratkaisuihin, jotka ovat tieto- ja toteutusriippumattomia. Tässä kohdassa harjoitustyötä on tavoitteena kuvata tietokannan käsitenanalyysin avulla laadittu käsitemalli. Voit käyttää kurssin harjoituksista tuttua käsitemallia (englanninkieliseltä nimeltään Entity-Relationship model (ER-malli)) tai vaihtoehtoisesti UML (Unified Modelling Language) -malleja. Kuvaa vähintään: Yksilötyypit (käsite), yhteystyypit (eli käsitteiden välinen suhde) ja niiden suhteiden asteet (yhden suhde yhteen (1:1); yhden suhde moneen (1:m); monen suhde moneen (m:n)), ominaisuustyypit eli attribuutit. Merkitse kullekin yksilötyypille (käsitteelle) erikseen pää- ja vierasvaimet. Avainten etsiminen tehdään erikseen jokaiselle yksilötyypille (käsitteelle), jolle tulee laatia ja löytää yksilöivä perusavain sekä toisio- ja viiteavaimet. Perusavaimia ja toisioavaimia koskevat omat eheyssäännöt. Eheyssääntöihin luetaan vain sellaiset määritykset, jotka eivät automaattisesti toteudu relaatiomallia noudatettaessa. Ominaisuustyyppien kelvollisten arvojen joukkoa kutsutaan sen arvoalueeksi: pituus, muoto, vaihteluväli, yksikäsitteisyys, NULL-arvon salliminen ja mahdollinen alkuarvo. Arvoaluemäärittelyt on tehtävä myös avaimille. Perusavain eikä sen osaa saa saada NULL-arvoa, toisioavaimet voivat saada NULL-arvon. Myös yhteystyypeille laaditaan tarvittaessa eheyssäännöt. Jos yhteystyypeille syystä tai toisesta on attribuutteja, se kuvautuu tässä tapauksessa yksilötyypiksi (käsite). Esimerkki: N-divisioonan Käsitemalli (katso kuva 1 alla). 18

Kuva 1. N-divisioonan Käsitemalli. Ominaisuustyypit: Pelaaja Ominaisuustyyppi Tietotyyppi Huomautuksia PelaajaID Integer, kasvava Pääavain JoukkueID Integer, kasvava Pakollinen; Vierasavain Etunimi Teksti (15) Pakollinen Sukunimi Teksti (20) Pakollinen Pelinumero Integer (1-99) Pakollinen; Yksilöllinen arvo Osoite Osoite-tyyppi Kts. tietotyypin määrittely Puhelinnumero PuhNro-tyyppi Kts. tietotyypin määrittely......... Jne... Eheyssäännöt, esim: - Tietokannassa on vähintään aina JoukkueID 0, joka on rosteri pelaajille, jotka eivät vielä / enää kuulu mihinkään joukkueeseen, mutta joiden tiedot pidetään kannassa. 19

- Epävirallisista otteluista ei kirjata pelaajien pisteitä eikä toimitsijoita. - Joukkueella ei tarvitse olla valmentajaa, mutta edustaja on pakollinen. - Valmentaja ja joukkueen edustaja/manageri voivat olla sama henkilö. - Pelaaja voi pelata vain yhdessä joukkueessa kerrallaan. - Sama henkilö voi olla tarvittaessa selä ottelun tuomari että toimitsija. - Jos joukkueen statukseksi on merkitty pelaa sijasta lopettanut, ei se voi pelata divarissa, mutta sen tiedot voidaan säilyttää. Siihen ei voia liittää uusia pelaajia. Jos status on tauolla, ei joukkue voi pelata, mutta siihen voi liittyä pelaajia tai sen johto voi muuttua yms. - Jne... 20

3 Tietokantatoteutus Raportoi tässä, mitä muutoksia, kompromisseja, yllätyksiä jne. relaatiomalliksi vienti aiheutti käsitemalliin työvaiheen 2 aikana. Kerro, mitä koodipohjaa käytit (oma, esimerkki), miten ohjelma suoritetaan, mitä muutoksia teit käyttöliittymään ja mitä muuta huomioitavaa ohjelman testaamiseen liittyy. Tämä osio on tärkeä, jos poikkeat oletus tehtävänannosta. Esimerkki: Yleistä: Käsitemallin toteutuksessa relaatiomalliksi havaittiin, että useassa taulussa toistuville (katu)osoite- ja puhelinnumero-attribuuteille olisi hyvä luoda oma tietotyyppinsä, joka standardoi virhealttiin esitysmuodon tietokannan laajuisesti. Huomasimme myös, että tietokannan hallintaa helpottaa, mikäli luodaan kiinteä nolla joukkue, johon uusi tai orvoksi jäänyt pelaaja aina oletuksena liitetään. Tätä varten laadittiin uusi eheyssääntö. Kolmanneksi nousi esiin tarve uudelleenarvioida Joukkue, Valmentaja, Edustaja -suhde. Todettiin, että Edustaja ja Valmentaja eivät ole Organisaattorin alityyppejä, sillä sama henkilö voi sittenkin toimia sekä valmentajana että edustajana samalle joukkueelle, ja aluksi kumottu tarve erillisille tauluille palautettiin näin ollen relaatiomallissa. Näkymiin ja kyselyihin ei tehty muutoksia toteutusvaiheessa. SQL- Toteutustapa: Käytimme Python-koodipohjaa, johon tehtiin vain lausekkeiden ja tulosteiden vaatimat pakolliset muutokset. Testatessa huomioitavaa: Ei erityisiä huomioita. Koodissa huomioitavaa: Eheyssääntöihin liittyvät tarkistukset on toteutettu pääasiassa yksinkertaisin CHECK -määrityksin taulujen rakenteissa. Käyttöliittymä tekee myös joitain perussyötteiden tarkistuksia, mutta näiden tehtävänä on lähinnä estää suorituksen päättyminen SQLite-virheisiin. Käyttöoikeudet ovat toteutettu myös mahdollisimman yksinkertaisesti kutsumalla kunkin käyttöoikeusryhmän omaa funktiota, kuten koodipohja esittää malliksi. Ts. koodia ei lähdetty parantamaan. 21

4 Keskustelu Mikäli haluat mainita jotakin erityistä, jota ei ole käsitelty aiemmissa luvuissa, voit keskustella tässä näistä asioista. Tämä voi olla eritoten tarpeen vapaavalintaisen työn kohdalla. 22

POIKKEUSTAPAUKSET: EI NYKYISEN MUOTOISEN TAI AIEMMAN OHJELMOINNIN PERUSTEET- KURSSIN SUORITUSTA LAINKAAN Mikäli et ole suorittanut ohjelmoinnin perusteet kurssia ja tai olet suorittanut sen jo vuosia sitten, niin ota yhteys suoraan luennoijaan, Erja Mustonen-Ollilaan. Näissä erikoistapauksissa luennoijan kanssa on mahdollista sopia toisenlainen harjoitustyö, jonka ohjaa suoraan kurssin luennoija, ei siis kurssin assistentti. B. Palautukseen kuuluvat ohjeet saat omaan sähköpostiisi kurssin luennoijalta. 23