CS-A1150 Tietokannat CSE-A1150 Tietokannat / 29

Samankaltaiset tiedostot
CS-A1150 Tietokannat CSE-A1150 Tietokannat / 32

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 39

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 54

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

CS-A1150 Tietokannat

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

CS-A1150 Tietokannat

CS-A1150 Tietokannat

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

CS-A1150 Tietokannat

HELIA 1 (17) Outi Virkki Tiedonhallinta

CSE-A1200 Tietokannat

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi.

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

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

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

Relaatioalgebra. Kyselyt:

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

Kyselyn yleisrakenne:

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

TIETOKANNAN NORMALISOINTI JA NORMAALIMUODOT

SQL - STRUCTURED QUERY LANGUAGE

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

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

Helsingin yliopisto/ tktl D Tietokantojen perusteet, s 2000 Relaatioalgebra. Harri Laine 1. Relaatioalgebra.

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

Helsingin yliopisto/tktl Kyselykielet, s 2006 Optimointi Harri Laine 1. Kyselyn optimointi. Kyselyn optimointi

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

SELECT-lauseen perusmuoto

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

HELIA TIKO-05 1 (20) ICT03D Tieto ja tiedon varastointi O.Virkki

Relaatioista TIETOJENKÄSITTELYTIETEIDEN LAITOS, JUHA IISAKKA 11-14

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

OUTER JOIN se vanha kunnon kaveri

joukko operaatioita, joilla relaatioista voidaan muodostaa uusia relaatioita joukko opin perusoperaatiot yhdiste, erotus, ristitulo, leikkaus

3. Käsiteanalyysi ja käsitekaavio

NORMALISOINTI TIETOJEN MALLINNUS JOUNI HUOTARI & ARI HOVI

Tietokannat II -kurssin harjoitustyö

Nimi: Henkilötunnus: {id} {+id}

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

HELIA 1 (17) Outi Virkki Tiedonhallinta

Tällä viikolla. Kotitehtävien tarkistus Upotettu SQL Indeksi-harjoitus täydennetään pelifirman tietokantamallia SQL-tehtäviä

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Helsingin yliopisto/ tktl DO Tietokantojen perusteet, s 2000 Relaatioalgebra Harri Laine 1. Relaatioalgebra

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Normalisointi. Jouni Huotari & Ari Hovi. kirjan Hovi, Huotari, Lahdenmäki: Tietokantojen suunnittelu & indeksointi, Docendo (2003, 2005) luku 5

Tietokantakurssit / TKTL

Liitokset - haut useaan tauluun

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokannan suunnittelusta Harri Laine 1

Ohjelmoinnin peruskurssi Y1

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

ITKA204 Tietokannat ja tiedonhallinnan perusteet

Ohjelmistojen mallintaminen, kesä 2009

D B. Tietokannan hallinta kertaus

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Tietokantojen suunnittelu, relaatiokantojen perusteita

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Relaatiomalli ja -tietokanta

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

Ohjelmoinnin peruskurssi Y1

18 LIITTYMÄT MUIHIN JÄRJESTELMIIN

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

HELIA 1 (19) Outi Virkki Tietokantasuunnittelu

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Transkriptio:

CS-A1150 Tietokannat 20.5.2019 CSE-A1150 Tietokannat 20.5.2019 1 / 29

Kertausluento Tällä luennolla kerrataan lyhyesti tenttivaatimuksissa esitettyjä asioita ja samalla tarkastellaan sitä, mitä niistä voidaan kysyä tentissä. Huomaa kuitenkin, että kaikki kurssialueen asiat asiat kuuluvat tenttivaatimuksiin, jos ei ole erikseen mainittu, että ne eivät kuulu. Kysymyksiä voi olla myös erilaisia kuin mitä tässä on esitetty esimerkkeinä. Vierailuluennon (NoSQL-tietokannat) asiat eivät kuulu tenttivaatimuksiin. Tämän luennon kalvot eivät sovellu niillä mainittujen asioiden itseopiskeluun, koska asiat on esitetty niillä liian lyhyesti. Asiat on selitetty tarkemmin vastaavien luentojen kalvoissa. Voit luennon aikana lähettää kysymyksiä ja kommentteja myös sivulla http://presemo.aalto.fi/tietokannat2019 CSE-A1150 Tietokannat 20.5.2019 2 / 29

Tärkeä käytännön asia Ensimmäiseen tenttiin ei tarvitse ilmoittautua erikseen, jos on ilmoittautunut kurssille. Rästitentteihin pitää ilmoittautua viimeistään viikko ennen tenttiä WebOodissa. Toukokuun tentin jälkeen on vielä kolme rästitenttiä, joissa keväällä 2019 tehty ja hyväksytty harjoitustyö sekä harjoitustehtävistä saatavat lisäpisteet ovat voimassa. Todennäköiset päivät ovat 5.9.2019, 25.10.2019 ja 21.2.2020. (Tarkista päivät, kun tiedot on julkaistu WebOodissa, sillä näihin voi vielä tulla muutoksia.) CSE-A1150 Tietokannat 20.5.2019 3 / 29

Mitä tämän kurssin jälkeen? CS-C3170 Web Software Development Ei varsinaisesti tietokantakurssi, mutta kurssilla tehdään harjoitustyönä web-ohjelma, joka käyttää tietokantaa. Harjoitustyössä käytetään Django-kehitysympäristöä. CS-E4640 Big Data Platforms Kurssi sisältää lisätietoa NoSQL-tietokannoista Muita kursseja, kun alan professoritilanne CS-laitoksella vakiintuu. CSE-A1150 Tietokannat 20.5.2019 4 / 29

Esimerkkitietokanta Tämän luennon esimerkit käsittelevät aikaisempien luentojen esimerkkitietokantaa, joka koostuu seuraavista relaatioista Customers(custNo, name, born, bonus, address, email) Products(number, prodname, description, price, manufid) Manufacturers(ID, manufname, phone) Orders(orderNo, deliver, status, custno) BelongsTo(orderNo, productno, count) CSE-A1150 Tietokannat 20.5.2019 5 / 29

Esimerkkitenttikysymyksiä tietokannoista ja tietokannan hallintajärjestelmästä yleisesti Mitä etuja tietokannan hallintajärjestelmä tarjoaa siihen verrattuna, että dataa säilytettäisiin tavallisissa tekstitiedostoissa. Tietokannan hallintajärjestelmän osat ja niiden tehtävät. CSE-A1150 Tietokannat 20.5.2019 6 / 29

UML-mallinnus UML-kaavio on graafinen tapa tietokannan mallintamiseen. Keskeisiä käsitteitä: luokka, assosiaatio, assiosiaatioluokka aliluokka, kompositio ja aggregaatio. Huomaa erot silloin, kun UML-kaaviolla mallinnetaan tietokantaa vs. UML-kaaviolla mallinnetaan olio-ohjelmaa. CSE-A1150 Tietokannat 20.5.2019 7 / 29

Mahdollisia tenttikysymyksiä UML-kaavioista Laadi UML-kaavio annettua kuvausta vastaavaan tilanteeseen. Muunna laatimasi tai tehtävässä annettu UML-kaavio relaatiokaavioiksi. Vastaa annetusta UML-kaaviosta esitettyihin kysymyksiin. (Esim. onko tämän kaavion perusteella mahdollista, että...?) CSE-A1150 Tietokannat 20.5.2019 8 / 29

Tyypillisiä virheitä UML-kaavioita koskevissa vastauksissa UML-kaaviossa luokalla on ylimääräisiä attribuutteja, esimerkiksi assosiaation kautta tulevia tietoja (toisin kuin olio-ohjelmia mallinnettaessa, assosiaation kautta tulevia tietoja ei merkitä luokan omiksi attribuuteiksi). Assosiaatio on useamman kuin kahden luokan välinen (UML-kaavioissa assosiaatio on aina kahden luokan välinen). Avaimia ei ole merkitty tai ne on merkitty väärin. Ei ole merkitty oikein, että avaimeen tarvitaan myös toisen luokan avainattribuutti. Assosiaatioluokalla on avainattribuutteja (tällöin siitä pitäisi tehdä tavallinen luokka). Assosiaation valitsevuutta ei ole merkitty (tällöin se on tasan yksi) tai se on merkitty väärin. Jotain asiaa on kuvattu attribuuttina, vaikka sen arvo on joukko tai lista. CSE-A1150 Tietokannat 20.5.2019 9 / 29

Tyypillisiä virheitä UML-kaavioita koskevissa vastauksissa, jatkuu Kun luokkia ja assosiaatioita on muutettu relaatioiksi, niin attribuutteja on joko liikaa tai liian vähän (osa avainattribuuteista puuttuu relaatiosta tai sitten assosiaatiosta tehdyssä relaatiossa on mukana ylimääräisiä attribuutteja). Osaa avaimeen kuuluvista attribuuteista ei ole alleviivattu tai on alleviivattu liikaa attribuutteja. Monesta moneen -assosiaatiosta ei ole tehty omaa relaatiota, kun UML-kaavio on muunnettu relaatioiksi. CSE-A1150 Tietokannat 20.5.2019 10 / 29

Avaimella on väliä! Mitä eroa on relaatioilla Products(number, prodname, description, price, manufid) ja Products(number, prodname, description, price, manufid) CSE-A1150 Tietokannat 20.5.2019 11 / 29

Avaimella on väliä! Mitä eroa on relaatioilla Products(number, prodname, description, price, manufid) ja Products(number, prodname, description, price, manufid) Jälkimmäisessä sama tuote (tuotenumero) voi esiintyä relaatiossa Products monta kertaa, jos sillä on joka monikossa eri valmistaja. CSE-A1150 Tietokannat 20.5.2019 11 / 29

Funktionaaliset riippuvuudet ja tietokannan normalisointi Ongelma: Mitä relaatioita tietokantaan pitäisi määritellä ja mitä attribuutteja näillä pitäisi olla? Samat tiedot voidaan esittää useilla eri tietokantakaavioilla. Jotkin niistä ovat parempia kuin toiset. Keskeisiä huonojen relaatiokaavioiden aiheuttamia ongelmia: Tiedon toisteisuus (redundancy) Päivitysanomaliat (update anomalies) Poistoanomaliat (deletion anomalies) Huonot relaatiokaaviot voidaan muuttaa parempaan muotoon normalisoimalla. Normalisoinnissa tarvitaan tietoa relaatioiden attribuuttien funktionaalisista riippuvuuksista. CSE-A1150 Tietokannat 20.5.2019 12 / 29

Boyce-Codd-normaalimuoto Jos relaatio on Boyce-Codd-normaalimuodossa (Boyce-Codd normal form, BCNF), siinä ei ole lainkaan funktionaalisista riippuvuuksista johtuvaa toisteista tietoa. Relaatio R on BCNF:ssä (Boyce-Codd-normaalimuodossa) jos ja vain jos kaikille R:ssä voimassa oleville epätriviaaleille funktionaalisille riippuvuuksille A 1 A 2... A n B 1 B 2... B m pätee se, että {A 1, A 2,..., A n } on relaation R yliavain. Esimerkki: relaatio Products1(number, prodname, description, price, manufid, manufname, phone) ei ole BCNF:ssä, koska relaatiolle pätee riippuvuus manufid manufname phone mutta riippuvuuden vasen puoli ei ole relaation yliavain, vaan relaation avain on {number} CSE-A1150 Tietokannat 20.5.2019 13 / 29

Relaation osittaminen Boyce-Codd-normaalimuotoon Laske annettujen epätriviaalien riippuvuuksien vasempien puolten sulkeumat. Jos yksikin sulkeumista ei sisällä relaation kaikkia attribuutteja (eli vasen puoli ei ole relaation yliavain), relaatio ei ole BCNF:ssä, ja se pitää osittaa. Valitse yksi niistä riippuvuuksista, jossa vasen puoli ei ole relaation yliavain ja ota tämän riippuvuuden vasemman puolen sulkeuma. Jaa ositettava relaatio kahdeksi uudeksi relaatioksi: Ensimmäiseen tulee em. sulkeuma. Toiseen tulee edellä valitun riippuvuuden vasen puoli ja lisäksi ne ositettavan relaation attribuutit, jotka eivät kuulu vasemman puolen sulkeumaan. Tutki, mitkä riippuvuudet ovat voimassa uusissa relaatioissa. Laske uusien relaatioiden riippuvuuksien vasempien puolien sulkeumat. Jos jokin sulkeuma ei sisällä uuden relaation kaikkia attribuutteja, uusi relaatio ei ole BCNF:ssä ja se pitää osittaa samalla tavalla. CSE-A1150 Tietokannat 20.5.2019 14 / 29

Mahdollisia tenttikysymyksiä funktionaalisesta riippuvuudesta ja BCNF:stä Tämä on erittäin tärkeä asia, ja on hyvin todennäköistä, että asiasta kysytään jokaisessa tentissä. Todennäköisin tehtävätyyppi: on annettu relaatio ja siinä esiintyvät funktionaaliset riippuvuudet. Kysytään, onko relaatio BCNF:ssä (perustelut) ja pyydetään osittamaan se tarvittaessa BCNF:ään. Myös moniarvoiset riippuvuudet ovat mahdollisia tenttitehtävien aiheita. Tästä aihepiiristä mahdollinen tehtävä on sellainen, jossa vaaditaan moniarvoisen riippuvuuden käsitteen ymmärtämistä. Tehtävissä ei kysytä mitään 4. normaalimuodosta. CSE-A1150 Tietokannat 20.5.2019 15 / 29

BCNF-tehtävä toukokuun 2018 tentistä Tarkastellaan relaatiota R(A, B, C, D, E), jossa on voimassa riippuvuudet A B, C B ja C D E. Perustele, miksi relaatio ei ole BCNF:ssä. Osita relaatio BCNF:ään käyttämällä kurssilla (ja oppikirjassa) esitettyä algoritmia. Perustele lyhyesti jokainen muodostamasi uusi relaatio. Jatka osittamista niin pitkälle, että jäljellä on vain BCNF:ssä olevia relaatioita. Perustele, miksi lopulliset relaatiosi ovat BCNF:ssä. Ratkaisu esitetään luennolla. CSE-A1150 Tietokannat 20.5.2019 16 / 29

Tyypillisiä virheitä tenttivastauksissa BCNF-tehtävissä Kun on kysytty, onko relaatio BCNF:ssä, ei ole laskettu funktionaalisten riippuvuuksien vasempien puolien sulkeumia, vaan on annettu jokin erikoinen perustelu, joka on joko selvästi väärä tai sitten liian ylimalkainen. Relaatiota ei ole ositettu annetulla algoritmilla, vaan jollain itse keksityllä tavalla (esimerkiksi yhteen uuteen relaatioon on aina otettu kaikki yhdessä riippuvuudessa esiintyvät attribuutit), joka voi johtaa informaation katoamiseen On annettu aivan oikeat uudet relaatiot, mutta ei ole kunnolla perusteltu sitä, miten niihin on päädytty tai miksi uudet relaatiot ovat BCNF:ssä. Katso MyCoursesin Luennot-sivulta esimerkki vastauksesta, jossa on kaikki vaaditut asiat, mutta ei mitään turhaa. Relaatio on ositettu aivan oikein yhden kerran, mutta ei ole huomattu sitä, että toinen tai molemmat ositetuista relaatioista ei vielä ole BCNF:ssä ja ositusta pitäisi jatkaa. CSE-A1150 Tietokannat 20.5.2019 17 / 29

Mahdollisia tenttikysymyksiä relaatioalgebrasta Pyydetään esittämään kysely relaatioalgebran lausekkeilla. On annettu relaation instanssi ja relaatioalgebran lauseke. Kysytään, mikä on lausekkeen tulos. Pyydetään selvittämään jotain yleisempää relaatioalgebran operaatioista, esim. miten jonkin operaation voi korvata toisilla operaatioilla tai miten monta monikkoa voi esiintyä lausekkeen tulosrelaation instanssissa, jos monikoiden määrät lähtörelaatioiden instansseissa tunnetaan. CSE-A1150 Tietokannat 20.5.2019 18 / 29

Tyypillisiä virheitä relaatioalgebran tenttivastauksissa Lausekkeissa on käytetty luonnollista liitosta, vaikka attribuutit, joiden yhtäsuuruuden mukaan liitos tehdään, ovat erinimisiä. Samaan ehtoon on yritetty sisällyttää liikaa. Esimerkiksi: haettava niiden asiakkaiden asiakasnumerot, joilla on tilaus, jonka tila on in post, mutta ei yhtään tilausta, jonka tila on delivered. Lauseke π custno (σ status= in post AND status delivered (Orders)) ei tuota haluttua vastausta, koska se tarkastelee vain yhden tilauksen tietoja kerrallaan. Ehto ei estä sitä, että asiakkaalla olisi toinen tilaus, jonka status on delivered. CSE-A1150 Tietokannat 20.5.2019 19 / 29

SQL: yksinkertaiset kyselyt ja liitokset Esimerkki 1 SELECT prodname, description FROM Products WHERE price > 100.0; Esimerkki 2: SELECT Customers.custNo, name FROM Customers, Orders WHERE Customers.custNo = Orders.custNo AND status = returned ; CSE-A1150 Tietokannat 20.5.2019 20 / 29

SQL: Alikyselyt SQL-kyselyn sisään voi kirjoittaa WHERE- tai FROM-osan sisään toisen kyselyn. Tällaista kyselyä sanotaan alikyselyksi (subquery). Esimerkki relaation tuottavista alikyselystä: SELECT DISTINCT orderno FROM BelongsTo WHERE productno IN (SELECT number FROM Products WHERE description = camera ); CSE-A1150 Tietokannat 20.5.2019 21 / 29

SQL: koosteoperaattorit SQL tarjoaa koosteoperaattorit SUM, AVG, MIN, MAX ja COUNT, joiden avulla voidaan laskea tilastoja jonkin relaation jonkin attribuuttien arvoista. Koosteoperaattoreita käytettäessä monikoita voidaan ryhmitellä GROUP BY-operaattorin avulla. Ryhmille voidaan antaa myös jokin koosteoperaattoria käyttävä ehto HAVING-osan avulla. Esimerkki: SELECT manufid, manufname, AVG(price) FROM Products, Manufacturers WHERE id = manufid GROUP BY manufid HAVING MAX(price) > 100; CSE-A1150 Tietokannat 20.5.2019 22 / 29

SQL: mahdollisia tenttikysymyksiä Tyypillisessä tenttikysymyksessä pyydetään kirjoittamaan jokin SQL-kysely. Kyselyissä voi tarvita mitä tahansa niistä ominaisuuksista, joita kurssin luentokalvoissa ja harjoitustehtävissä on käytetty. Myös taulujen luomiseen, monikoiden lisäämiseen ja tietojen päivittämiseen tarvittavia käskyjä voi tarvita, vaikka niitä ei olekaan tällä kertausluennolla esitelty. Eheysehtojen kirjoittamisesta tarvitsee osata niin paljon kuin luentokalvoilla ja harjoitustehtävissä on esitetty. Tentissä ei pyydetä kirjoittamaan laukaisimia, mutta on tunnettava laukaisimien toimintaperiaate ja ymmärrettävä, mikä ero on FOR EACH ROW-tyyppisillä ja FOR EACH STATEMENT-tyyppisillä laukaisimilla. CSE-A1150 Tietokannat 20.5.2019 23 / 29

SQL: mahdollisia tenttikysymyksiä (jatkuu) Myös näkymien määrittely ja niiden käyttö on osattava siinä laajudessa kuin mitä luentomateriaalissa on määritelty. SQL-käskyjen liittämistä muulla kielillä kirjoitettuun ohjelmaan (joko kirjastofunktioita tai sulautettua SQL:ää käyttämällä) ei kysytä tentissä. CSE-A1150 Tietokannat 20.5.2019 24 / 29

Tyypillisiä virheitä SQL-tenttitehtävissä Liitosehdot tai osa niistä puuttuu. Alikyselyn edessä on käytetty IN-operaattorin sijasta yhtäsuuruusmerkkiä, vaikka alikyselyn tuloksena on relaatio eikä yksittäinen arvo. Ei ole ymmärretty sitä, että WHERE-osassa oleva ehto käsittelee aina yhtä FROM-osassa olevien relaatioiden karteesisen tulon monikkoa kerrallaan. On kirjoitettu ehtoja, joiden pitäisi tutkia samalla kerralla useita monikoita. Kyselyssä pitäisi laskea koostefunktioiden arvoja tietyille ryhmille (esim. kunkin valmistajan tuotteiden hintojen keskiarvo), mutta GROUP BY-osa puuttuu kyselystä. Koostefunktiota koskeva ehto on kirjoitettu WHERE-osaan, vaikka se pitäisi olla HAVING-osassa. On käytetty sellaisia operaattoreita, joita kurssilla ei ole opetettu, mutta ei ole ymmärretty, mitä ne tarkoittavat. Esimerkiksi LEFT JOIN tarkoittaa oikeasti samaa kuin LEFT OUTER JOIN. Monessa vastauksessa tätä on kuitenkin käytetty silloinkin, kun tarkoituksena CSE-A1150 Tietokannat 20.5.2019 25 / 29

Hakemistot, tenttitehtävätyyppejä Tentissä voi olla tehtävä, jossa joutuu arvioimaan, mitä hakemistoja kuvatulle tietokannalle kannattaa luoda. Tentissä voidaan myös pyytää selostamaan yleisemmin, millaisia asioita pitää ottaa huomioon, kun päätetään tietokantaan tulevista hakemistoista. B-puusta ei tentissä tarvitse osata muuta kuin pystyä arvioimaan se, miten hakemiston käyttö vaikuttaa levyhakujen määrään kyselyissä ja päivityksissä. CSE-A1150 Tietokannat 20.5.2019 26 / 29

Transaktiot (tapahtumat) Ohjelmoija voi suojata tietokannan monilta erilaisilta häiriöiltä, esimerkiksi sähkökatkoilta, laiterikoilta ja muiden samanaikaisten käyttäjien aiheuttamilta häiriöiltä määrittelemällä transaktioita, jotka voivat koostua useista tietokantaoperaatioista. Kun ohjelmoija on määritellyt joidenkin operaatioiden muodostavan transaktion, niin tietokannan hallintajärjestelmä pitää huolen siitä, että tietokanta toteuttaa seuraavalla kalvolla mainitut transaktioilta vaaditut ominaisuudet. CSE-A1150 Tietokannat 20.5.2019 27 / 29

Transaktioilta vaadittavat ominaisuudet Atomicity (atomisuus): kaikki transaktion sisältämät käskyt suoritetaan tai mitään niistä ei suoriteta. Consistency (eheys): jos tietokannassa määritellyt eheysehdot ovat voimassa ennen transaktion suoritusta, niin ne ovat voimassa myös sen jälkeen. Isolation (serializability, sarjallistuvuus): transaktio suoritetaan niin kuin muita transaktioita ei suoritettaisi samaan aikaan. Toisin sanoen: jos useita transaktioita suoritetaan samanaikaisesti, niin lopputulos on sama kuin jos samat transaktiot olisi suoritettu jossain järjestyksessä peräkkäin yksi kerrallaan. Durability (pysyvyys): Jos transaktiot on suoritettu onnistuneesti loppuun (on suoritettu transaktion commit-operaatio), niin sen vaikutukset eivät katoa tietokannasta. Näitä ominaisuuksia kutsutaan usein ACID-ominaisuuksiksi. CSE-A1150 Tietokannat 20.5.2019 28 / 29

Transaktioihin liittyviä tenttikysymyksiä Transaktiot on tärkeä aihe tentissä. Tentissä voidaan suoraan kysyä transaktioilta vaadittavia ominaisuuksia ja pyytää selittämään niitä tai osaa niistä tarkemmin. Tentissä voidaan myös kysyä, mitä muita eristyvyystasoja SQL:ssä on mahdollista määritellä transaktioille sarjallistuvuuden sijasta. CSE-A1150 Tietokannat 20.5.2019 29 / 29