Yleistä kurssista

Tämä materiaali on tarkoitettu Helsingin yliopiston tietojenkäsittelytieteen laitoksen syksyn 2018 kurssille Tietokantojen perusteet (TKT10004, 5 op). Kurssilla oletetaan, että osallistuja tuntee Helsingin yliopiston kurssien Ohjelmoinnin perusteet (TKT10002, 5 op) ja Ohjelmoinnin jatkokurssi (TKT10003, 5 op) sisällön. Kurssilla käytetään ohjelmointikielenä em. kursseilla opittua Java-kieltä.

Tietokantojen perusteet -kurssilla tutustutaan tietokantojen suunnitteluun. Tämä kattaa ongelma-alueen (tai järjestelmän) tietosisällön mallintamisen (käsiteanalyysi, luokkakaaviot), tiedon esittämisen (luokkakaaviot, relaatiokaaviot), tiedon tallentamisen ja tiedon hakemisen (SQL-kieli). Kurssilla tutustutaan lisäksi tiedon tallentamiseen liittyvään lainsäädäntöön sekä henkilötietolakiin, tietokantojen historiaan, tietokantaa käyttävien sovellusten luomiseen sekä tietokannan toiminnan kannalta oleellisiin käsitteisiin kuten indeksit, transaktiot ja eheys. Kurssin pääpaino on relaatiotietokannoissa, mutta kurssilla tutustutaan pintapuolisesti myös muihin tietokantajärjestelmiin.

Alla kuvatut osaamistavoitteet päivittyvät kurssin edetessä..

Viikko Osaamistavoitteet
Esitiedot Tuntee olio-ohjelmoinnin peruskäsitteet kurssien Ohjelmoinnin perusteet (TKT-10002) ja Ohjelmoinnin jatkokurssi (TKT-10003) laaajuudessa.
1 Tuntee käsitteet digitalisaatio, tietokannanhallintajärjestelmä ja tietokanta. Ymmärtää tietokantojen roolin digitalisaatiossa. Tuntee ongelmia, joita tietokannanhallintajärjestelmät pyrkivät ratkaisemaan. Ymmärtää että tietoa voidaan käsitellä ja esittää erilaisilla abstraktiotasoilla ja tuntee termeinä käsitteellisen abstraktiotason, rakenteellisen abstraktiotason sekä fyysisen abstraktiotason. Osaa määritellä luokkia ja yhteyksiä sisältävän UML-luokkakaavion. Osaa luoda luokkakaavion annetun ohjelman lähdekoodista ja osaa luoda annetussa luokkakaaviossa kuvatut luokat. Osaa käsitellä tietoa ohjelmallisesti. Tuntee käsiteanalyysin askeleet. Osaa luoda ongelma-alueen kuvauksesta luokkakaavion.
2 Osaa luoda luokkakaaviosta relaatiokaavion ja osaa muuntaa luokkakaavion assosiaatiot tarvittaessa tietokannalle sopivampaan muotoon. Tuntee käsitteen oliokaavio. Tuntee käsitteet relaatio, relaatiomalli, pääavain ja viiteavain. Osaa luoda SQL-kielellä useampia tietokantatauluja sisältävän tietokannan, lisätä tietokantaan tietoa ja hakea tietokannasta tietoa. Tekee kyselyitä yhteen tietokantatauluun.
3 Osaa hakea useammasta tietokantataulusta tietoa JOIN-kyselyiden avulla. Osaa luoda ohjelman, joka kommunikoi tietokannanhallintajärjestelmän kanssa valmiin rajapinnan kautta. Osaa luoda ohjelman, joka hyödyntää useamman tietokantataulun sisältävää tietokantaa ja tuntee data access object (DAO) -suunnittelumallin. Osaa esittää tietoa JSON-kielellä. Osaa luoda web-sovelluksen, joka näyttää käyttäjälle tietokannasta haettua tietoa JSON-muodossa.
4 Osaa esittää tietoa XML ja HTML-kielellä. Osaa luoda yhtä tietokantataulua käyttävän ja muokkaavan web-sovelluksen, jota voi käyttää selaimella. Tuntee sekvenssikaaviot. Osaa luoda useampaa tietokantataulua käyttävän ja muokkaavan web-sovelluksen.
5 Osaa siirtää web-sovelluksen verkkoon, missä se on kaikkien nähtävillä. Tuntee käsitteen SQL-injektio. Tietää menetelmiä SQL-injektioon perustuvien hyökkäysten tekemiseen ja osaa toisaalta puolustautua niiltä. Tietää käsitteet tietokannan normalisointi ja tietokannan denormalisointi. Tuntee tietokannan normalisointiin liittyvät ensimmäisen, toisen ja kolmannen normaalimuodon. Osaa perustella noudattaako annettu tietokanta em. normaalimuotoja.
6 Osaa tehdä yhteenvetokyselyitä SQL-kielellä. Osaa selvittää miten tietokannanhallintajärjestelmä hakee annetun SQL-kyselyn tuloksen. Tietää mitä indeksit ovat ja tietää milloin tietokantatauluun tulee määritellä indeksejä. Tuntee käsitteet tietokannan eheys ja tietokantatransaktio, ja tietää tilanteita milloin transaktioita kannattaa käyttää. Tietää tietokannanhallintajärjestelmältä vaadittuja ominaisuuksia, joita tarvitaan tietokantatransaktioiden toimintaan. Tuntee CAP-teoreeman ja tietää GDPR-lainsäädännön olemassaolon sekä ainakin muutamia siihen liittyviä säännöksiä.
7 Tietää joitakin kirjastoja yksinkertaisten SQL-kyselyiden automatisointiin ja osaa käyttää yhteenvetokyselyjä osana web-sovellusta. Tuntee pinnallisesti muutamia NoSQL- ja NewSQL-tietokantoja.

Kurssin suorittaminen ja aikataulu

Kurssiin kuuluu viikoittaisia tehtäviä, viikoittaiset harjoitusryhmät, ryhmätyö sekä tentti.

Kurssin suorittaminen perustuu vahvasti itse- ja ryhmäopiskeluun. Opiskeluun kuuluu oleellisena osana viikoittaiset harjoitusryhmät, joihin ilmoittaudutaan WebOodin kautta. Harjoitusryhmissä käydään sekä viikon tehtäviä läpi että harjoitellaan oleellisimpia kurssin asioita. Kurssin ainoa luento on periantaina 7.9. klo 12:15-14:00 Kumpulan Exactumin salissa A111.

Harjoitusryhmät kokoontuvat Exactumin salissa B221 (mikroluokka).

  • Keskiviikko 12-14, Arto Hellas
  • Keskiviikko 14-16, Dan Lindholm
  • Torstai 10-12, Harri Kähkönen
  • Torstai 14-16, Terho Uotila
  • Torstai 16-18, Dan Lindholm
  • Perjantai 10-12, Harri Kähkönen

Huom! Harjoitusryhmät kokoontuvat jo kurssin ensimmäisellä viikolla!

Harjoitusryhmien lisäksi kurssilla on viikoittainen paja tiistaisin klo 14-16 salissa B221.

Kurssin koe järjestetään verkkotenttinä kurssin Moodlessa koeviikolla. Kokeen jälkeen järjestetään muutamia uusintakokeita myöhemmin ilmoitettavina ajankohtina.

Arvostelu

Kurssin arvostelu perustuu kurssikokeeseen, ennalta harjoitustilaisuuksia varten tehtäviin harjoitustehtäviin sekä ohjelmointitehtäviin, läsnä tehtäviin harjoitustehtäviin, harjoitustyöhön, sekä läsnäoloon harjoitustilaisuuksissa. Kurssin aktiviteeteista voi saada yhteensä 100 pistettä.

Kurssin aktiviteeteista saatavat pisteet jakautuvat seuraavasti:

Osa Pistemäärä (korkeintaan)
Kurssikoe 50 pistettä
Viikoittain tehtävät harjoitus- ja ohjelmointitehtävät 27 pistettä (4.5 pistettä / viikko, 6 viikkoa)
Läsnäolo harjoitustilaisuuksissa 7 pistettä (1 piste / viikko)
Harjoitustyöt 16 pistettä (8p + 8p)

Harjoitustehtävien arvostelu on lineaarista tehtyjen tehtävien suhteen. Esimerkiksi ensimmäisellä viikolla on kuusi tehtävää (kolme käsite- ja suunnittelutehtävää, kolme ohjelmointitehtävää), jolloin kyseiselle viikolle yhden tehtävän arvo on 0.75 pistettä. Kurssilla on lisäksi koeleikkuri, eli kurssin läpäisemiseksi tulee saada vähintään puolet kokeen pisteistä. Harjoitustilaisuudesta, johon on saapunut myöhässä, saa korkeintaan puolet läsnäolopisteistä.

Kurssin arvosana muodostuu seuraavasti.

Pisteet Arvosana
< 51 Hylätty
51-60 1
61-70 2
71-80 3
81-90 4
91-100 5

Kurssin voi halutessaan suorittaa myös erillistentillä, jolloin arvostelu perustuu vain tenttimenestykseen. Erillistentit sekä niihin ilmoittautuminen löytyy WebOodista.

Tehtävät

Kurssin tehtäviä julkaistaan kurssin edetessä. Tehtävät tulee palauttaa viikoittain annettuun määräaikaan mennessä. Suunnittelu- ja käsitetehtävät palautetaan aina tiistaisin klo 23:59 mennessä. Ohjelmointitehtävät palautetaan perjantaisin klo 23:59 mennessä.

Alla on kuvattuna tehtävien palautusaikataulu.

Aihealue Suunnittelu- ja käsitetehtävät Ohjelmointitehtävät
Osa 1 11.9.2018 klo 23:59 14.9.2018 klo 23:59
Osa 2 18.9.2018 klo 23:59 21.9.2018 klo 23:59
Osa 3 25.9.2018 klo 23:59 28.9.2018 klo 23:59
Osa 4 2.10.2018 klo 23:59 5.10.2018 klo 23:59
Osa 5 9.10.2018 klo 23:59 12.10.2018 klo 23:59
Osa 6 16.10.2018 klo 23:59 19.10.2018 klo 23:59
Osa 7 23.10.2018 klo 23:59 26.10.2018 klo 23:59

Huomaathan, että viimeiset palautusajat määritellään suomen ajassa olevan tehtäväpalvelimen kellon mukaan. Mikäli palautuksesi on myöhässä, sitä ei hyväksytä. Sähköpostitse tapahtuvia tehtäväpalautuksia ei hyväksytä.

Seitsemännen osan suunnittelu- ja käsitetehtävät sekä ohjelmointitehtävät vaikuttavat arvosteluun bonuspisteinä. Niillä voi paikata esimerkiksi väliin jäänyttä viikkoa.

Suunnittelu- ja käsitetehtävät sekä harjoitustöiden dokumentaatiot palautetaan sähköisessä muodossa kurssin Moodleen osoitteessa https://moodle.helsinki.fi/course/view.php?id=29387. Moodlen kurssiavain on "tikape-s18".

Tehtävänannot

Läsnätehtävät harjoitukset tehdään harjoitustilaisuuksissa ja niitä ei voi esimerkiksi palauttaa etänä. Läsnäolot kerätään harjoitustilaisuuksien aikana.

Ohjelmointitehtävien tehtävänannot löydät kurssimateriaalista aina kunkin osan kohdalta.

Harjoitustyö

Kurssiin kuuluu kaksi hieman laajempaa harjoitustyötä. Ensimmäisessä harjoitellaan käsiteanalyysiä sekä tietokannan luomista annetusta aihealueesta. Toisessa toteutetaan hieman laajempi tietokantaa käyttävä web-sovellus, joka tulee verkkoon kaikkien nähtäville. Harjoitustöihin kuuluu myös muiden töiden vertaisarviointi.

Harjoitustyöt tulee palauttaa yksin, mutta niitä saa tehdä ryhmässä -- jokaisen tulee siis tehdä oma työ, mutta töitä saa ideoida ja työstää yhdessä. Ryhmäytyminen tapahtuu toisen viikon harjoitusryhmissä. Harjoitustöiden aikataulu on seuraava:

Tukiväylät

Kurssilla järjestetään harjoitustilaisuuksien viikoittainen pajatilaisuus tiistaisin klo 14-16 salissa B221. Pajaan saa tulla tekemään tehtäviä vaikkei kurssin tehtäviin liittyen olisikaan mitään kysyttävää. Näiden lisäksi kurssin Moodlessa voi kysyä apua tehtäviin.

Kurssilla on myös verkossa toimiva epävirallinen kurssikanava, jonka osallistujat ovat kurssin muita opiskelijoita. Telegram-kanavan nimi on tkt-tikape, ja siihen pääsee joko tämän linkin kautta tai ylälaidassa olevaa Chat-nappia painamalla.

Yhteistyö

Hyvä yhteistyö keskittyy jokaisen osapuolen oppimiseen ja parantaa oppimistuloksia. Yhteistyö on kurssin tehtäviä pohtiessa sallittua ja suositeltavaa.

Kurssilla noudatetaan Gilligan's Island -sääntöä:

The Gilligan's Island Rule: You are free to meet with fellow students(s) and discuss an assignment with them. Writing on a board or shared piece of paper during the meeting is acceptable; however, you should not take any written (electronic or otherwise) record away from the meeting. Everything that you derive from the collaboration should be in your head. After the meeting, engage in at least a half-hour of mind-numbing activity (like watching an episode of Gilligan's Island), before starting to work on the assignment. This will assure that you are able to reconstruct what you learned from the meeting by yourself.

Jos teet tehtäviä yhdessä muiden kanssa, sinun tulee tehdä ja palauttaa omat ratkaisusi itse. Pidä yhteistyörupeaman jälkeen ainakin puolen tunnin tauko, jolloin teet jotain täysin muuta (esim. katsot jakson Gilligan's Islandia tai Salattuja elämiä), ja aloita omien tehtäviesi työstäminen vasta sitten. Kirjoita myös tehtävien palautuksen yhteyteen kommenteissa niiden kurssikavereidesi nimet, joiden kanssa teit yhteistyötä.

Opintovilpistä

Kurssilla seurataan Helsingin yliopiston opintokäytäntöjä. Plagiarismi ja opintovilppi, eli esimerkiksi netissä olevien tai kaverilta saatujen vastausten kopiointi ja niiden palauttaminen omana työnä on kurssilla kiellettyä.

Todettu opintovilppi johtaa kurssisuorituksen hylkäämiseen ja toistuva opintovilppi voi johtaa opinto-oikeuden määräaikaiseen menettämiseen. Lue lisää osoitteesta http://blogs.helsinki.fi/alakopsaa/opiskelijalle/.

Kurssin työvälineet ja tunnukset

Kurssille tarvitset TMC-tunnukset, NetBeans with TMC:n sekä SQLiten. Näiden lisäksi kurssilla tarvitaan myöhemmin Github-tunnusta, jonka lisäksi harjoitustyössä käytetään Herokua.

Ohjelmointitehtävissä käytetään Mavenia ohjelmointiprojektien käyttämien kirjastojen hallintaan. Mavenin käyttöön on liittynyt muutamia haasteita, joihin liittyen tähän on lisätty korjausehdotuksia:

Maveniin liittyviä ongelmia ja ratkaisuja

Mavenin käyttöönottoon on liittynyt kurssilla ongelmia. Tässä lyhyt ongelmanratkaisuopas.

Linux ja Mac

Ongelma: Maven-binäärin suoritusoikeudet puuttuvat. Mavenin virhe on (esimerkiksi) muotoa.

Cannot run program
  /Applications/tmcbeans.app/Contents/Resources/tmcbeans/java/maven/bin/mvn"
  (in directory "/Users/[nimi]/NetBeansProjects/hy-[kurssi]/[tehtava]"):
  error=13,
  Permission denied

Ratkaisu: lisää maven-binäärille suoritusoikeudet. Suorita terminaalissa (pääte) komento.

chmod +x /Applications/tmcbeans.app/Contents/Resources/tmcbeans/java/maven/bin/mvn

Huomaa, että edellä polku on sama kuin virheviestin "Cannot run program"-polku.

Windows

Ongelma: Ympäristömuuttuja JAVA_HOME ei ole asetettu. Käytännössä Maven yrittää etsiä Javaa, mutta ei löydä sitä.

Ratkaisu: Lisää Windowsiin JAVA_HOME ympäristömuuttuja (esim.) osoitteessa https://confluence.atlassian.com/doc/setting-the-java_home-variable-in-windows-8895.html olevia ohjeita seuraamalla. Huomaa, että kansion tulee olla jdk, ei jre.

Analytiikkadatan keräämisestä ja kurssilla tehtävästä tutkimuksesta

Kurssin aikana tehdyistä tehtävistä kerätään tietoa. Kerätty tieto sisältää materiaalissa olevia kyselyitä, ohjelmointitehtävien vastauksia, sekä kurssimateriaalin käyttöä. Tallennettu tieto sisältää henkilökohtaisen tunnisteen, jonka perusteella ei voida suoraan päätellä henkilöllisyyttäsi. Tieto ei esimerkiksi siis sisällä nimeäsi tai sähköpostiosoitettasi.

Kurssilla tehdään oppimiseen liittyvää tutkimusta. Tällä tutkimuksella on useampia tavoitteita: (1) lähestyä tilannetta, missä oppimateriaali ja tehtävät osaavat ottaa oppijoiden yksilölliset erot paremmin huomioon ja reagoida niihin tarjoten kohdennetumpaa opetusta, (2) kehittää digitaalisissa ympäristöissä tapahtuvaan oppimiseen liittyvää ymmärrystä ja tietoa, sekä (3) tukea tutkimustiedon kautta muita oppimaterialien kehittäjiä ja oppimisen tutkijoita. Tutkimusdatan hallinnasta vastaa Helsingin yliopiston tietojenkäsittelytieteen laitoksen Agile Education Research -ryhmän Arto Hellas. Anonymisoimattomaan tutkimusdataan eivät pääse käsiksi muut tutkijat. Voit myös pyytää milloin tahansa sinusta kerätyn datan poistamista lähettämällä sähköpostin osoitteeseen arto.hellas@cs.helsinki.fi

Työskentelystä kerättyä tietoa käytetään tutkimuksessa jos sallit. Tutkimuksemme päätavoitteena on osaamisen kehittymisen arviointi tekemisen arvioinnin sijaan, mikä mahdollistaisi yksilöllistä osaamista parhaiten kehittävien vinkkien ja tehtävien tarjoamisen. Tutkimustuloksista ei pystytä tunnistamaan yksittäisiä opiskelijoita. Jos et salli kurssin aikana kerättyjen tietojen käyttämistä tutkimuksessa, siitä ei tule minkäänlaisia seuraamuksia.

Kurssilla saatetaan tehdä lisäksi tutkimusta, joka voi vaikuttaa kurssikokemukseen (esim. kurssisisältö). Jos osallistut tutkimukseen, saatat saada esimerkiksi uusia ominaisuuksia materiaaliin. Jos et halua osallistua tutkimukseen, saat kurssin sisällöstä perusversion. Tutkimukseen osallistuminen ei vaikuta loppuarvosanaan.

Kurssimateriaalin tekijät ja lisenssi

Kurssimateriaalin ovat tehneet Arto Hellas (né Vihavainen) ja Matti Luukkainen.

Tämä materiaali on lisensoitu Creative Commons BY-NC-SA-lisenssillä, joten voit käyttää ja levittää sitä vapaasti, kunhan alkuperäisten tekijöiden nimiä ei poisteta. Jos teet muutoksia materiaaliin ja haluat levittää muunneltua versiota, se täytyy lisensoida samanlaisella vapaalla lisenssillä. Materiaalien käyttö kaupalliseen tarkoitukseen on ilman erillistä lupaa kielletty.

Linkit kurssin sisältöön löytyvät tämän materiaalin ylälaidasta. Kurssimateriaalia julkaistaan kurssin edetessä.

Sisällysluettelo