Lopputyö

Lopputyössä tehtäväsi on suunnitella ja optimoida SQLite-relaatiotietokanta itse valitsemallesi kohdealueelle.

Ennen lopputyön aloittamista, tutustu lopputyön ohjeisiin:

Lopputyön ohjeet

Tiivistetysti:

  • Lopputyö arvioidaan arvosanalla 1-5. Arvosanaan vaikuttaa työn laajuus, oikeellisuus ja tarkoituksenmukaisuus.
  • Lopputyö on yksilösuoritus! Voit kuitenkin kysyä vinkkejä opettajilta ja opiskelutovereilta.
  • Lopputyö voidaan palauttaa arvioitavaksi vain kerran.

Tehtävä 1: Tietokannan vaatimusmäärittely

Ensimmäisenä tehtävänä on valita itse lopputyön aihe ja kirjoittaa sen perusteella tietokannalle vaatimusmäärittely.

Lopputyössä suunnitellaan ja toteutetaan relaatiotietokanta johonkin (toivottavasti oikeaan) käyttötarkoitukseen. Mieti siis alkuun, millaiselle kohdealueelle haluaisit suunnitella tietokannan. Voit vaikkapa ottaa jonkun valmiin sovelluksen (WhatsApp, Spotify, Discord) tai alustan (Facebook, X, Instragram) ja mallintaa sen toimintaan tarvittavan yksinkertaisen tietokannan. Jos sinulla on toisaalta jokin peli tai oma ohjelma, jonka olet tehnyt, voit suunnitella relaatiotietokannan sille. Jos kaipaat apua tai inspiraatiota, tutustu valmiiseen kohdealueen kuvaukseen lopputyön ohjeista!

Muista pitää asiat yksinkertaisena! Tällä kurssilla harjoitellaan tietokantojen suunnittelua, joten tietokannan ei tarvitse olla heti alkuun valtava.

Kun olet valinnut kohdealueen, kirjoita lyhyt kohdealueen kuvaus ja määrittele, mitä tietoja tietokantaan tulee tallentaa täyttäkseen kohdealueen tietokannan tarpeita.

Voit muokata vaatimusmäärittelyä milloin tahansa! Lopputyön edetessä saatat haluta ehkä tarkentaa kohdealuetta tai tietokannan sisältöä, jos vaikkapa huomaat puutteita tai haluat yksinkertaistaa työsi. Tärkeintä on, että kuvauksesi on ajan tasalla.

# t1

Tehtävä 2: Käsitteellinen mallintaminen

Piirrä seuraavaksi ER-kaavio, joka käsitteellisesti mallintaa tehtävän 1 vaatimusmäärittelyssä esitettyä tietokantaa.

Ota huomioon kaikki vaatimusmäärittelyssä esitetyt kohteet, ominaisuudet ja suhteet ja mallinna ne ER-kaaviossa vastaaviksi kohdetyypeiksi, attribuuteiksi ja suhdetyypeiksi. Mieti ER-kaaviota piirtäessä kohdealuetta, ja tarpeen mukaan käy tarkentamassa tehtävän 1 tietokannan vaatimusmäärittelyä. Olennaista on, että tietokanta palvelee kohdealueen tarpeita mahdollisimman hyvin.

Voit piirtää ER-kaavion joko käsin, erillisellä piirto-ohjelmalla tai käyttämällä kurssin ER-kaavioeditoria. Huomaa, että tällä hetkellä kurssin ER-kaavioeditorilla on rajoitetusti piirtotilaa. Sopivia piirto-ohjelmia ovat esimerkiksi ERDPlus ja DrawIO.

# t2_erd
# t2_kuva

Tehtävä 3: Transformointi relaatioksi

Seuraavaksi ota tehtävässä 2 piirrettyä ER-kaaviota ja transformoi se relaatiotietokannan kaavaksi.

Sovella transformoinnissa Luvussa 3.2 määriteltyjä transformointisääntöjä. Merkitse relaatiokaavoihin relaatioiden nimet, relaatioihin kuuluvat attribuutit ja relaatioiden perusavaimet.

Merkitse relaatiot alla olevaan tekstilaatikkoon. Käytä seuraavia merkintöjä:

R ({|a|}, b, c)            - Relaatio R, jolla on perusavain a sekä attribuutit b, c
S ({|a, b|}, c)        - Relaatio S, jolla on perusavaimet a, b sekä attribuutti c
Kissa ({|nimi|}, ikä)  - Relaatio Kissa, jolla on perusavain nimi ja attribuutti ikä

Sen jälkeen luettele myös relaatioiden viiteavaimet ja mihin relaatioihin ne viittaavat. Viiteavaimet määrittävät relaatioiden väliset suhteet (Luku 3.1, alaluku 3.1.2). Eli määritä, mitkä relaation attribuutit ovat peräisin toisesta relaatiosta.

Merkitse viiteavaimet relaatiokaavan jälkeen seuraavasti:

R.a -> S.a                - Relaation R attribuutti a viittaa relaation S attribuuttiin a
R.b -> S.b                - Relaation R attribuutti b viittaa relaation S attribuuttiin b
Eläin.nimi -> Kissa.nimi  - Relaation Eläin attribuutti nimi viittaa relaation Kissa attribuuttiin nimi
# t3_transformointi

Tehtävä 4: Tietokannan määrittäminen SQL-kielellä

Kun ER-malli on transformoitu relaatiotietokannan kaavaksi, voidaan kaavan perusteella luoda tietokanta ja tallentaa siihen dataa.

Määrittele relaatiotietokannan kaavasi perusteella SQLite-tietokanta käyttäen SQL:n tietokannan rakenteen määrityskieltä (DML, Luku 4.4). Jokaiselle relaatiokaavassa olevalle relaatiolle tulee määrittää oma tietokantataulu. Ota huomioon tietokantataulujen määrittelyssä attribuuttien tyypit, pääavaimet, viiteavaimet sekä mahdolliset muut eheysrajoitteet.

Tämän jälkeen lisää tietokantaasi mallidataa (Luku 4.3, alaluku 4.3.6). Mallidataa kannattaa olla sen verran riittävästi, että saat hyvin tehtyä tehtävän 5.

Kirjoita SQL-lauseet alla olevaan palautuslaatikkoon. Huomaa, että tehtävälaatikkoon on jo lisätty apukoodia, joka alustaa tietokannan ennen koodisi suorittamista.

Voit myös samalla testata, että data tuli lisätyksi suorittamalla yksinkertaisia SELECT * FROM taulu; -komentoja. Huomaa, että oletuksella TIM tulostaa No result, jos et suorita mitään hakukomentoja.

# t3_ddl

Tehtävä 5: Olennaiset SQL-hakulauseet

Seuraavaksi esitä 1-5 esimerkkiä kohdealueen kannalta olennaisesta SQL-kyselystä, jolla dataa haetaan tietokannasta.

Mieti, millaisia käyttötapauksia tietokannalle olisi kohdealueessa. Kirjoita sitten näille käyttötapauksille oleelliset SQL-kyselyt. Voit kirjoittaa haku- (SELECT), poisto- (DELETE), ja muokkauskyselyjä (UPDATE). Vähintään yhden esimerkin on oltava hakukysely (eli SELECT-kysely). Datan hallintaan liittyviä SQL-kyseilyiden syntaksia on kuvattu Luvussa 4.3.

Esitä esimerkkikyselyt alla olevissa palautuslaatikoissa (1 esimerkki/laatikko). Lisää samalla lyhyt kuvaus siitä, mitä SQL-kysely tekee ja mikä on sen käyttötarkoitus.

Vinkkejä:

  • Hakulauseissa pyri palauttamaan vain ne sarakkeet, jotka ovat käyttötapauksen oleellisia. Jos palautat taulun kaikki sarakkeet, perustele kommenteissa valintasi.
  • Huomaa, että hakulauseissa voit tehdä laskuja ja ryhmitellä tuloksia. Näin voit rakentaa monipuolisia kyselyitä.
  • Muista, että poisto- ja muokkauslauseissa voidaan käyttää ehtoja. Tällä tavoin voi muodostaa kohdealueen kannalta hyviä massamuokkaus- ja massapoistokyselyitä.
  • Voit alustaa tietokantasi takaisin perustilaan painamalla Aja tehtävässä 4 olevassa palautuslaatikossa. Tämä palauttaa tietokantasi takaisin oletustilaan.

Lisää esimerkki 1

Lisää esimerkki 2

Lisää esimerkki 3

Lisää esimerkki 4

Lisää esimerkki 5

Tehtävä 6: Relaatioiden normalisointi

Palataan vielä tehtävässä 3 muodostettuun relaatiotietokannan kaavasi.

Tarkastele relaatiotietokantasi normalisointia ja selvitä, missä normaalimuodossa tietokantasi on. Esitä relaatiossa olevat funktionaaliset riippuvuudet, jos ne eivät ole triviaaleja (eli suoraan pääteltävissä päättelysäännöillä). Tämän kurssin kannalta riittää, että normaalimuodoista tarkastelet 1NF, 2NF, 3NF, BCNF sekä 4NF (Luku 5.3).

Jos relaatiotietokantasi ei ole 4. normaalimuodossa, normalisoi tietokantasi siihen. Esitä vielä lopullinen normalisoitu relaatiotietokannan kaavasi.

Voit kirjoittaa vastauksesi alla olevaan tekstilaatikkoon. Voit myös ladata vastausta tukevan kuvan tai voit palauttaa vastauksesi kuvana.

Bonustehtävä (voi nostaa lopputyön arvosanaa): Muokkaa tehtävän 3, tehtävän 4 sekä tarvittaessa tehtävän 5 vastauksesi käyttämään normalisoitua tietokantaa (ellei se ole jo normalisoitu 4NF:ään).

# t6
# t6_kuva

Tehtävä 7: Tiedonhallinnan tarkastelu

Tässä vaiheessa sinulla pitäisi olla käyttövalmis, oikeaoppisesti luotu relaatiotietokanta, jossa datan toisteisuutta on optimoitu pois. Mahtavaa!

Tietokantojen käyttöön liittyy myös tiedonhallintaa koskevia kysymyksiä, kuten infrastruktuuri (esim. hajauttamisen tarve), tietovarastointi (esim. erilainen analytiikka) ja tietomallin pohdinta. Tässä tehtävässä tarkoituksena on pohtia nämä asiat kohdealueen kannalta.

Tutustu Osassa 6 oleviin tiedonhallinnan perusaiheisiin, kuten tietovarastointiin (Luku 6), hajautukseen (Luku 7) sekä katsaukseen erilaisista tietokantaparadigmoista (Luku 8). Tämän jälkeen pohdi vielä sinun lopputyösi kohdealuetta ja tietokannan käyttötarvetta, ja vastaa perustellusti seuraaviin kysymyksiin:

  • Missä kohdealueesi tietokannan olisi parasta sijaita?
    • Riittääkö esimerkiksi, että tietokanta tallennetaan sovellukseen, vai tarvitaan tietokannalle keskitetty paikka (jokin palvelin)? Sopisiko joku kurssilla esitetty arkkitehtuuri.
    • Onko tarvetta hajauttaa tietokantaa eri laitteille?
  • Sisältääkö tietokanta mitään sellaista dataa, jota voisi olla hyödyllistä tallentaa erilliseen tietovarastoon ja analysoida?
  • Onko relaatiotietokanta itsessään sopiva kohdealueen tarpeeseen?
    • Jos ei, millainen tietokantaparadigma sopisi mielestäsi paremmin? Olisiko jokin NoSQL-tietokanta selkeämpi tai yksinkertaisempi kuin relaatiotietokanta?

Vastaa kysymyksin lyhyesti alla olevaan vastauslaatikkoon. Ehdoton yläraja vastaukselle on 500 sanaa. Voit käyttää perusteluissa avuksi kurssin materiaaleja tai netistä saatua tietoa. Jos haet tietoa netistä, lisää vastaukseen viitetiedot.

# t7

Lopputyön palautus ja arviointi

Huomaa, että kurssin aikana voit palauttaa lopputyösi vain kerran. Ennen palauttamista:

  • Varmista, että olet vastannut tehtäviin tehtävänannon mukaisesti. Voit vapaasti muuttaa kohdealueen kuvauksen sekä tietokannan vaatimukset ennen työn palauttamista.
  • Tutustu vielä lopputyön arviointiperusteisiin ja varmista, että lopputyösi täyttää mielestäsi vähintään arvosanan 1 kriteerit.
  • Voit pyytää opettajaa antamaan palautetta ja alustavan arvion lopputyösi laadusta viikottaisissa ohjauksissa.
  • Palauta työ arvioitavaksi vasta, kun uskot sen olevan täysin valmis. Et voi enää muokata lopputyötä palauttamisen jälkeen.
  • Työ pyritään arvioimaan noin kahden viikon sisällä palautuksen jälkeen. Arviointi ja loppuarvosana kirjataan ylös tälle sivulle. Saat ilmoituksen, kun työ on arvioitu.

Kun olet mielestäsi valmis palauttamaan, paina alla olevaa painiketta.

# palautaLopputyo

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