Yleistä kurssista

Tämä materiaali on tarkoitettu Helsingin yliopiston tietojenkäsittelytieteen laitoksen kevään 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. Kurssiin kuuluu luentojen ja harjoitustehtävien lisäksi pienryhmissä tehtävä laajempi harjoitustyö, jossa suunnitellaan ja toteutetaan tietokantaa käyttävä web-sovellus.

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. Opiskelun tueksi kurssilla on viikoittaiset harjoitusryhmät, joihin ilmoittaudutaan WebOodin kautta. Harjoitusryhmissä käydään sekä viikon tehtäviä läpi että harjoitellaan oleellisimpia kurssin asioita. Kurssilla on viikoittaiset luennot tiistaisin klo 10:15-12:00 salissa A111.

Huom! Ei luentoa tiistaina 20.2.2018.

Harjoitusryhmät kokoontuvat Exactumin salissa B221 (mikroluokka).

  • Tiistai 12-14, Arto Hellas
  • Tiistai 14-16, Terho Uotila
  • Keskiviikko 12-14, Ville-Veikko Saari
  • Keskiviikko 16-18, Terho Uotila
  • Torstai 12-14, Dan Lindholm (vain ruotsin kieltä samanaikaisesti suorittaville)
  • Perjantai 10-12, Dan Lindholm
  • Perjantai 12-14, Ville-Veikko Saari

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

Kurssin koe järjestetään keskiviikkona 7.3. klo 16:00 Exactumin saleissa A111 ja B123. Kurssin kokeeseen ei tarvitse ilmoittautua erikseen.

Seuraavat uusinta- ja erilliskokeet järjestetään 18.4. klo 16:00 salissa B123 ja 8.6. klo 12:00 salissa CK112. Uusinta- ja erilliskokeisiin tulee ilmoittautua WebOodin kautta vähintään 10 päivää ennen tenttiä.

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 (7.3. klo 16:00 A111 / B123) 36 pistettä
Ennalta tehtävät harjoitustehtävät ja ohjelmointitehtävät 7 pistettä / viikko, 6 viikkoa, yht 42 pistettä
Läsnäolo harjoitustilaisuuksissa 1 piste / viikko, 7 viikkoa, yht 7 pistettä
Harjoitustyö 15 pistettä (6 + 9 pistettä)

Täydet pisteet viikoittaisista harjoitustehtävistä saa tekemällä niistä vähintään 90%. Aktiivisesta läsnäolosta luennoilla saa lisäksi puolikkaan pisteen luentokertaa kohden (korkeintaan 2 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

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 maanantaisin klo 23:59 mennessä. Ohjelmointitehtävät palautetaan perjantaisin klo 23:59 mennessä.

Aihealue Suunnittelu- ja käsitetehtävät Ohjelmointitehtävät
Osa 1 22.1.2018 klo 23:59 26.1.2018 klo 23:59
Osa 2 29.1.2018 klo 23:59 2.2.2018 klo 23:59
Osa 3 5.2.2018 klo 23:59 9.2.2018 klo 23:59
Osa 4 12.2.2018 klo 23:59 16.2.2018 klo 23:59
Osa 5 19.2.2018 klo 23:59 23.2.2018 klo 23:59
Osa 6 26.2.2018 klo 23:59 2.3.2018 klo 23:59
Osa 7 5.3.2018 klo 23:59 9.3.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ä kyseisestä kellosta, 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=27755. Moodlen kurssiavain on "tietokannanhallintajärjestelmä".

Tehtävänannot

Läsnätehtävät harjoitukset tehdään harjoitustilaisuuksissa. Läsnäolot kerätään harjoitustilaisuuksien aikana.

Ruotsinkielisessä ryhmässä käytettävät tehtävät

Suunnittelu- ja käsitetehtävät.

Läsnätehtävät harjoitukset.

Harjoitustyö

Kurssiin kuuluu kahdessa osassa tehtävä harjoitustyö. Harjoitustyön ensimmäisessä osassa harjoitellaan käsiteanalyysiä sekä tietokannan luomista annetusta aihealueesta. Toisessa osassa 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 tehdään joko ryhmässä (suositeltu) tai yksin. Harjoitustöiden ryhmät luodaan toisen viikon harjoitusryhmissä. Harjoitustöiden aikataulu on seuraava:

Tukiväylät

Kurssilla järjestetään harjoitustilaisuuksien lisäksi kyselytuntimuotoisia pajoja, jotka kokoontuvat maanantaisin ja perjantaisin klo 14-16 salissa B221. Kyselytunteihin saa luonnollisesti myös tulla tekemään tehtäviä tai esimerkiksi ryhmätyötä, vaikkei varsinaista kysyttävää olisikaan.

Verkon yli nopein tapa avun kysymiseen on kurssin keskustelukanava #tikape, johon pääsee helpointen kanavan Matrix-huoneen kautta: https://riot.im/app/#/room/#tikape:matrix.org. Jos et pidä modernista teknologiasta, voit myös liityä huoneeseen Ircnetin kautta seuraamalla näitä ohjeita: http://mooc.fi/courses/general/ohjelmointi/tukikanavat/irc/ohjeet/ (valitse kanavaksi #tikape).

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

Analytiikkadatan kerääminen ja arvostelu

Kurssin aikana tehdyistä tehtävistä kerätään tietoa. Kerätty tieto sisältää materiaalissa olevia kyselyitä, ohjelmointitehtävien vastauksia, sekä kurssimateriaalin käyttöä. Jos et hyväksy tiedon keräämistä, kurssin pisteytyksessä ei voida ottaa näitä suorituksia huomioon. 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.

Varmista että TMC:n asetuksissa (Valikko TMC -> Settings) kohdassa "Send snapshots of your progress for study" on ruksi. Jos et halua että työstämistäsi tehtävistä kerätään ajoittaista dataa kurssiarvostelua varten, kurssin tentissä on ylimääräinen ohjelmointiaiheinen tehtävä. Analytiikkadataa kerätään vain kurssiin liittyvistä asioista, ei muista tekemisistäsi.

Kurssilla tehtävästä tutkimuksesta

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