CSE-A1200 Tietokannat

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

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 39

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 29

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CSE-A1200 Tietokannat

CS-A1150 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

CSE-A1200 Tietokannat

CS-A1150 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

CS-A1150 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

CS-A1150 Tietokannat CS-A1150 Tietokannat / 54

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

CSE-A1200 Tietokannat

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

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

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

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

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

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

Relaatioalgebra. Kyselyt:

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

CSE-A1200 Tietokannat

Tietokanta (database)

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

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

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

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

HELIA 1 (17) Outi Virkki Tiedonhallinta

HELIA 1 (21) Outi Virkki Tietokantasuunnittelu

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

Tietokannan hallintajärjestelmän (DBMS) palvelut ja rakenne

CS-A1150 Tietokannat

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

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

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

HELIA 1 (17) Outi Virkki Tiedonhallinta

SQL - STRUCTURED QUERY LANGUAGE

Kyselyn yleisrakenne:

HELIA 1 (14) Outi Virkki Tiedonhallinta

SELECT-lauseen perusmuoto

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

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

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

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

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

Relaatioista TIETOJENKÄSITTELYTIETEIDEN LAITOS, JUHA IISAKKA 11-14

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

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

Relaatiomalli ja -tietokanta

Tietokantakurssit / TKTL

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

XML kielioppi. Elementtien ja attribuuttien määrittely. Ctl230: Luentokalvot Miro Lehtonen

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Relaatiomallin peruskäsitteet Harri Laine 1. Relaatiotietokannat DONOTP

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

Yhteentoimivuutta edistävien työkalujen kehittäminen

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

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

Hohde Consulting 2004

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

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

TIETOKANNAT JOHDANTO

Tietokannat II -kurssin harjoitustyö

TIETOKANNAN NORMALISOINTI JA NORMAALIMUODOT

Tietokantojen suunnittelu, relaatiokantojen perusteita

On autoja, henkilöitä, Henkilöllä on nimi Autolla on omistaja, joka on henkilö. Taulu AUTO(rekno, malli) Taulu HENKILO(nimi, )

Tietokantojen perusteet

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

NORMALISOINTI TIETOJEN MALLINNUS JOUNI HUOTARI & ARI HOVI

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

Tietohakemisto ja Transaktionkäsittely

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

OUTER JOIN se vanha kunnon kaveri

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

IIO30220 Database Management / Tietokannan hallinta TAPAHTUMIEN HALLINTA JOUNI HUOTARI ( )

Luento 3 Tietokannan tietosisällön suunnittelu

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

TIETOKANNAT JOHDANTO JOUNI HUOTARI & ARI HOVI

XML / DTD / FOP -opas Internal

Transkriptio:

CSE-A1200 Tietokannat 10.5.2016 CSE-A1200 Tietokannat 10.5.2016 1 / 50

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. CSE-A1200 Tietokannat 10.5.2016 2 / 50

Tärkeä käytännön asia Muista ilmoittautua tenttiin ajoissa! Ilmoittautumisaika päättyy viikko ennen tenttiä (24.5. tenttiin ilmoittautumisaika päättyy 17.5.) Tenttiin ei voi osallistua, jos ei ole ilmoittautunut. Vaikka onnistuisi pääsemään tenttiin, niin ei-ilmoittautuneiden tenttipapereita ei arvostella. Tenttiin ei voi jälki-ilmoittautua mitenkään. Toukokuun tentin jälkeen on vielä kolme rästitenttiä, joissa keväällä 2016 tehty ja hyväksytty harjoitustyö on voimassa. Todennäköiset päivät ovat 8.9.2016, 26.10.2016 ja 17.2.2017. (Tarkista päivät, kun tiedot on julkaistu WebOodissa.) Harjoitustehtävistä saatavat lisäpisteet ovat voimassa vuonna 2016 pidettävissä tenteissä. CSE-A1200 Tietokannat 10.5.2016 3 / 50

Mitä tämän kurssin jälkeen? CS-E4230 Transaction Management in Databases Tarkastelee esim. tarkemmin tietokannan toteutusta tietokannan hallintajärjestelmän toteuttajan näkökulmasta (esim. miten tietokannan hallintajärjestelmä pitää huolen ACID-ominaisuuksista) CS-E4630 Hajautetut tietokannat Tietoa hajautetuista tietokannoista ja niiden toteutuksen eroista keskitettyihin tietokantoihin verrattuna. 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-E4120 Scalable Cloud Computing Kurssi sisältää lisätietoa NoSQL-tietokannoista CSE-A1200 Tietokannat 10.5.2016 4 / 50

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-A1200 Tietokannat 10.5.2016 5 / 50

Tietokanta ja tietokannan hallintajärjestelmä Tietokanta (database) on kokoelma jollain tavalla yhteen kuuluvaa tietoa. Tietokannan hallintajärjestelmä (database management system, dbms) Mahdollistaa uusien tietokantojen määrittelyn tukemalla jotain tiedonmäärittelykieltä (data-definition language). Mahdollistaa tietokantakyselyt ja -päivitykset tukemalla jotain kyselykieltä ja tiedonkäsittelykieltä (query language, data-manipulation language) Varmistaa suurien tietomäärien (teratavuja tai enemmän) säilymisen pitkän ajanjakson niin, että samalla kuitenkin kyselyt ja päivitykset ovat mahdollisia. Varmistaa tiedon säilymisen myös erilaisissa virhe- ja häiriötilanteissa. Varmistaa sen, että samanaikaiset käyttäjät eivät "häiritse" toisiaan. CSE-A1200 Tietokannat 10.5.2016 6 / 50

Tietokannan hallintajärjestelmän osat Tietokanta (data and metadata) Sisältää varsinaisen tiedon (data) sekä kuvauksen tiedon rakenteesta (metadata). Muistinhallitsija (storage manager) Huolehtii tiedonsiirrosta keskusmuistin ja esim. kovalevyllä olevan tietokannan välillä. Kyselynkäsittelijä (query processor) Etsii mahdollisimman tehokkaan tavan kyselyiden ja päivitysten suorittamiseksi. Tapahtumankäsittelijä (transaction manager) Kontrolloi samanaikaisten käyttäjien operaatioiden lomittumista (samanaikaisuuden hallinta, concurrency control), varmistaa päivitysten atomisuuden ja muutenkin ACID-ominaisuuksien toteutumisen. CSE-A1200 Tietokannat 10.5.2016 7 / 50

Relaatio Relaatiotietokanta koostuu kaksiulotteisista tauluista (table), joita kutsutaan relaatioiksi (relation). Jokaisella relaatiolla on joukko nimettyjä attribuutteja (attribute). Kullakin taulun rivillä eli monikolla (tuple) on arvot eri attribuuteille. Attribuuttien arvojen tulee olla atomisia (esim. yksittäinen lukuarvo tai merkkijono, ei esimerkiksi joukko tai monikko). Arvoilla on tyyppi. Relation Customers number name born bonus address email 112233 Teemu Teekkari 1995 55 Servinkuja 3 tteekkari@gmail.com 554422 Riina Raksalainen 1993 43 Otaranta 8 riinar@yahoo.com 37856 Antti Virta 1970 12 Aaltokatu 4 antti@hotmail.com CSE-A1200 Tietokannat 10.5.2016 8 / 50

Relaatioalgebra Relaatioalgebralla voidaan muodostaa uusia relaatioita olemassa olevista relaatioista. Käytännössä relaatioalgebran lausekkeet vastaavat yleensä kyselyitä, jotka ovat muutettavissa suoraan SQL-kielelle. Relaatioalgebran lausekkeessa operandeina ovat relaatiot operaattoreina ovat relaatioalgebran operaatiot CSE-A1200 Tietokannat 10.5.2016 9 / 50

Relaatioalgebran operaatiot Lähtörelaatioita pienentävät operaatiot valintaoperaatio σ C (R), esimerkiksi σ bonus>40 (Customers) projektio-operaatio π A1,A 2,...,A n (R), esimerkiksi π number,name,bonus (Customers) Relaatioiden monikkoja yhdistävät operaatiot karteesinen tulo R S liitosoperaatiot Luonnollinen liitos R S Theta-liitos R C S, esimerkiksi U A<D V Uudelleen nimeäminen ρ S(A1,A 2,...,A (R) n) ei muuta relaatiota lainkaan, mutta voi olla tarpeellinen toisten operaatioiden kannalta CSE-A1200 Tietokannat 10.5.2016 10 / 50

Relaatioalgebran operaatiot, jatkuu Joukko-operaatiot: yhdiste R S leikkaus R S erotus R S CSE-A1200 Tietokannat 10.5.2016 11 / 50

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-A1200 Tietokannat 10.5.2016 12 / 50

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-A1200 Tietokannat 10.5.2016 13 / 50

ER-mallinnus ER-kaavio on graafinen tapa tietokannan mallintamiseen. Kaavio sisältää kolmenlaisia peruskomponentteja: Yksilöjoukot (entity sets) Yksilö (entity) vastaa suunnilleen olio-ohjelmointikielen oliota ilman olioon liittyviä metodeita. Yksilöjoukko vastaa suunnilleen olio-ohjelmointikielen luokkakäsitettä ilman luokassa määriteltyjä metodeita. Attribuutit (attributes) Kuvaavat yksilön ominaisuuksia. Suhteet (relationships) Yhdistävät kaksi tai useampia yksilöjoukkoa. CSE-A1200 Tietokannat 10.5.2016 14 / 50

Esimerkki ER-kaaviosta name phone Manufacturers name number ID deliver Made by Belongs to Products description price Orders count name custno orderno status Ordered by Customers born bonus address email CSE-A1200 Tietokannat 10.5.2016 15 / 50

Heikot yksilöjoukot ER-kaavioissa Yksilöjoukkoa sanotaan heikoksi (weak entity set), jos kaikki tai osa sen avainattribuuteista kuuluu toiseen yksilöjoukkoon size color name number Versions Version of Products description price CSE-A1200 Tietokannat 10.5.2016 16 / 50

Mahdollisia tenttikysymyksiä ER-kaavioista Laadi ER-kaavio annettua kuvausta vastaavaan tilanteeseen. Muunna annettu ER-kaavio relaatiokaavioiksi. Vastaa annetusta ER-kaaviosta esitettyihin kysymyksiin. (Esim. onko tämän kaavion perusteella mahdollista, että...?) CSE-A1200 Tietokannat 10.5.2016 17 / 50

Tyypillisiä virheitä ER-kaavioita koskevissa tenttivastauksissa ER-kaaviossa yksilöjoukoilla on ylimääräisiä attribuutteja, esimerkiksi esimerkkikaaviossa Orders-yksilöjoukolla olisi myös asiakkaan tai tuotteen attribuutteja, vaikka kaaviossa on erikseen yksilöjoukot Customers ja Products. Kaksi yksilöjoukkoa on yhdistetty suoraan toisiinsa ilman, että niiden välissä on suhde. Yksilöjoukkoa, jonka avainattribuuteista osa tulee toisesta yksilöjoukosta, ei ole merkitty heikoksi yksilöjoukoksi ja / tai näiden kahden yksilöjoukon välistä suhdetta ei ole merkitty kaksinkertaisella vinoneliöllä. Suhteen valitsevuutta ei ole merkitty oikein (nuolia puuttuu tai on liikaa tai ne ovat vääränlaisia tai nuolet on piirretty viivan väärään päähän). CSE-A1200 Tietokannat 10.5.2016 18 / 50

Tyypillisiä virheitä ER-kaavioita koskevissa tenttivastauksissa, jatkuu Samaan suhteeseen on yhdistetty asioita, jotka eivät kuulu kaikki yhteen. Esim. esimerkkikaaviossa Products, Manufacturers ja Orders olisi yhdistetty samaan suhteeseen. Yleensä kannattaa suosia kaksijakoisia suhteita ja käyttää useampijakoisia suhteita vain perustellusta syystä. Kun yksilöjoukkoja ja suhteita on muutettu relaatioiksi, niin attribuutteja on joko liikaa tai liian vähän (osa avainattribuuteista puuttuu relaatiosta tai sitten suhteesta tehdyssä relaatiossa on mukana ylimääräisiä attribuutteja, esim. esimerkin Belongs-to-relaatiossa tilauksen tila tai tuotteen hinta). Monesta moneen -suhteesta ei ole tehty omaa relaatiota, kun ER-kaavio on muunnettu relaatioiksi. CSE-A1200 Tietokannat 10.5.2016 19 / 50

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-A1200 Tietokannat 10.5.2016 20 / 50

Funktionaalinen riippuvuus ja relaation avain, määritelmä Olkoon relaatiolla R attribuutit A 1, A 2,..., A n, B 1, B 2,..., B m, C 1, C 2,..., C k. Attribuutit A 1, A 2,..., A n määräävät funktionaalisesti attribuutit B 1, B 2,..., B m, jos seuraava ehto on voimassa: Jos kahdella relaation R monikolla on samat arvot kaikilla attribuuteilla A 1, A 2,..., A n, niin silloin niillä on samat arvot myös kaikilla attribuuteilla B 1, B 2,..., B m. Merkitään A 1 A 2... A n B 1 B 2... B m Yksi tai useampi attribuutti {A 1,..., A n } on relaation R avain, jos 1. nämä attribuutit funktionaalisesti määräävät kaikki muut relaation R attribuutit. 2. mikään tämän attribuuttijoukon aito osajoukko ei funktionaalisesti määrää kaikkia muita relaation R attribuutteja. CSE-A1200 Tietokannat 10.5.2016 21 / 50

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-A1200 Tietokannat 10.5.2016 22 / 50

Relaation osittaminen Boyce-Codd-normaalimuotoon, rautalankaohjeet Laske annettujen epätriviaalien riippuvuuksien vasempien puolien 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-A1200 Tietokannat 10.5.2016 23 / 50

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-A1200 Tietokannat 10.5.2016 24 / 50

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ä. 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-A1200 Tietokannat 10.5.2016 25 / 50

SQL: kyselyn perusmuoto Perusmuoto SELECT <attribuuttilista> FROM <relaatiolista> WHERE ehto Esimerkki 1 SELECT prodname, description FROM Products WHERE price > 100.0; Esimerkki 2: SELECT prodname, price FROM Products WHERE (description = cellphone OR description = tablet ) AND price < 400.0 CSE-A1200 Tietokannat 10.5.2016 26 / 50

SQL: liitokset ehtojen avulla Esimerkki 1: SELECT prodname, manufname FROM Products, Manufacturers WHERE manufid = ID; Esimerkki 2: SELECT Customers.custNo, name FROM Customers, Orders WHERE Customers.custNo = Orders.custNo AND status = returned CSE-A1200 Tietokannat 10.5.2016 27 / 50

SQL: esimerkki rivimuuttujien käytöstä SELECT C1.name, C2.name FROM Customers AS C1, Customers AS C2 WHERE C1.address = C2.address AND C1.name < C2.name CSE-A1200 Tietokannat 10.5.2016 28 / 50

SQL: tulosrelaation esitysjärjestyksen määrääminen SELECT FROM Customers WHERE bonus > 30 ORDER BY bonus DESC, born CSE-A1200 Tietokannat 10.5.2016 29 / 50

SQL: joukko-operaatioita Käytössä on joukko-operaatiot UNION, INTERSECT ja EXCEPT (erotus). Esimerkki: SELECT manufname FROM Manufacturers, Products WHERE manufid = ID and description = camera INTERSECT SELECT manufname FROM Manufacturers, Products WHERE manufid = ID and description = cellphone ; CSE-A1200 Tietokannat 10.5.2016 30 / 50

SQL: Alikyselyt SQL-kyselyn sisään voi kirjoittaa WHERE- tai FROM-osan sisään toisen kyselyn. Tällaista kyselyä sanotaan alikyselyksi (subquery). Esimerkki skalaarisen arvon tuottavasta alikyselystä: SELECT manufname, phone FROM Manufacturers WHERE ID = (SELECT manufid FROM Products WHERE number = T 77445 ); CSE-A1200 Tietokannat 10.5.2016 31 / 50

SQL: esimerkkejä relaation tuottavista alikyselyistä SELECT DISTINCT orderno FROM BelongsTo WHERE productno IN (SELECT number FROM Products WHERE description = camera ); Esimerkki alikyselystä, jossa viitataan ulommassa kyselyssä käytettyyn monikkoon SELECT DISTINCT number, prodname, description, price FROM Products AS Cheap WHERE price <= ALL (SELECT price FROM Products WHERE description = Cheap.description ); CSE-A1200 Tietokannat 10.5.2016 32 / 50

SQL: ulkoliitos Liitosta tehdessä alkuperäisissä relaatiossa on usein monikoita, joille ei löydy yhtään vastinparia toisesta liitokseen osallistuvasta relaatiosta. Jos myös tällaiset monikot halutaan tulokseen mukaan, on käytettävä ulkoliitosta, esimerkiksi SELECT FROM Products LEFT OUTER JOIN Manufacturers ON manufid = ID; listaa myös ne tuotteet, joiden valmistajaa ei löydy Manufacturers-relaatiosta. CSE-A1200 Tietokannat 10.5.2016 33 / 50

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-A1200 Tietokannat 10.5.2016 34 / 50

SQL: Eheysehdot ja laukaisimet Ohjelmoija voi määritellä SQL-tietokantaan erilaisia eheysehtoja (integrity constraints), jotka määrittelevät tietokannan sallittuja tiloja, esimerkiksi Määrätty attribuuttijoukko on relaation avain (relaation kahdella monikolla ei saa olla samaa arvoa tälle attribuuttijoukolle) Yhden relaation jonkin attribuutin arvon pitää esiintyä toisen relaation jonkin monikon avainarvona (viite-eheys) Attribuutin arvon on oltava määrätyllä välillä Monikon kahden tai useamman attribuutin arvon pitää toteuttaa toisiinsa nähden annettu ehto. Useamman relaation välillä täytyy olla voimassa jokin ehto. Lisäksi tietokantaan voi määritellä laukaisimia (triggers). Ne ovat toimenpiteitä, jotka tietokannan hallintajärjestelmä käynnistää automaattisesti, kun määrätty tapahtuma sattuu. CSE-A1200 Tietokannat 10.5.2016 35 / 50

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-A1200 Tietokannat 10.5.2016 36 / 50

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-A1200 Tietokannat 10.5.2016 37 / 50

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. CSE-A1200 Tietokannat 10.5.2016 38 / 50

Hakemistot Ilman hakemistoja tavalliseen SQL-kyselyyn vastaaminen vaatii usein koko relaation läpikäymisen. Hakemiston avulla voidaan löytää nopeasti monikot, joiden määrätyllä attribuutilla on haluttu arvo. Hakemistoja voidaan tehdä myös useamman attribuutin arvojen yhdistelmien suhteen. Hakemistoa on kuitenkin päivitettävä, kun relaatioon lisätään uusia monikoita, relaatiosta poistetaan monikoita tai monikoiden attribuuttien arvoja päivitetään. Hakemisto siis usein lisää päivityksiin kuluvaa aikaa. On siis valittava huolella ne hakemistot, joista on enemmän hyötyä kuin mitä aiheutuu lisätyötä niiden vaatimista päivityksistä. Yleensä ratkaiseva tekijä arvioinnissa on tyypillisten operaatioiden vaatima levyhakujen määrä. CSE-A1200 Tietokannat 10.5.2016 39 / 50

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-A1200 Tietokannat 10.5.2016 40 / 50

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-A1200 Tietokannat 10.5.2016 41 / 50

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-A1200 Tietokannat 10.5.2016 42 / 50

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-A1200 Tietokannat 10.5.2016 43 / 50

XML XML (Extensible Markup Language) on kuvauskieli, jonka avulla voidaan esittää puolirakenteista tietoa sisältäviä dokumentteja. XML-dokumentit koostuvat elementeistä (elements) koostuvat kulmasuluilla merkityistä alku- ja loppumerkinnöistä (tags) ja niiden välissä olevasta leipätekstistä. elementit voivat olla sisäkkäisiä elementin alkumerkintään voidaan liittää attribuutteja, jotka koostuvat avain-arvo-pareista. CSE-A1200 Tietokannat 10.5.2016 44 / 50

Esimerkki XML-dokumentista <?xml version = "1.0" encoding = "utf-8" standalone = "yes"?> <StarMovieData> <Star> <Name>Carrie Fischer</Name> <Address> <Street>123 Maple St.</Street> <City>Hollywood</City> </Address> <Address> <Street>5 Locust Ln.</Street> <City>Malibu</City> </Address> </Star> <Star> <Name>Mark Hamill</Name> <Street>456 Oak Rd.</Street> <City>Brentwood</City> </Star> <Movie> <Title>Star Wars</Title> <Year>1977</Year> </Movie> </StarMovieData> CSE-A1200 Tietokannat 10.5.2016 45 / 50

Validi XML Hyvämuotoista XML:ää tiukempi vaatimus on se, että dokumentti on validia XML:ää (valid XML). Sillä tarkoitetaan sitä, että dokumentin rakenteen pitää olla jonkin erikseen annetun kuvauksenn mukainen. Kuvauksessa voidaan määritellä, mitä elementtejä dokumentissa voi esiintyä, ja miten ne voivat sijaita suhteessa toisiinsa (esim. Movie-elementin pitää sisältää yksi Title-elementti ja yksi Year-elementti). Dokumentteja käsittelevät ohjelmat voivat käyttää hyväkseen tietoa dokumenttien sallitusta rakenteesta. Rakenteen määrittelyyn on eri vaihtoehtoja. DTD (document type definition) on vanhempi kieli XML Schema on uudempi tapa, joka sisältää enemmän mahdollisuuksia kuin DTD. CSE-A1200 Tietokannat 10.5.2016 46 / 50

Esimerkki DTD-tiedostosta <!DOCTYPE Stars [ <!ELEMENT Stars (Star*)> <!ELEMENT Star (Name, Address+, Movies)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Address (Street, City)> <!ELEMENT Street (#PCDATA)> <!ELEMENT City (#PCDATA)> <!ELEMENT Movies (Movie*)> <!ELEMENT Movie (Title, Year)> <!ELEMENT Title (#PCDATA)> <!ELEMENT Year (#PCDATA)> ]> Esimerkki attribuuttien määrittelystä: <!ELEMENT Movie EMPTY> <!ATTLIST Movie title CDATA #REQUIRED year CDATA #REQUIRED genre (comedy drama scifi teen) #IMPLIED > CSE-A1200 Tietokannat 10.5.2016 47 / 50

Esimerkki XML Schema -määrittelystä <?xml version = "1.0" encoding = "utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:complextype name = "movietype"> <xs:sequence> <xs:element name = "Title" type = "xs:string" /> <xs:element name = "Year" type = "xs:integer" /> </xs:sequence> </xs:complextype> <xs:element name = "Movies"> <xs:complextype> <xs:sequence> <xs:element name = "Movie" type = "movietype" minoccurs = "0" maxoccurs = "unbounded" /> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> CSE-A1200 Tietokannat 10.5.2016 48 / 50

Toinen esimerkki XML Schema -määrittelystä <?xml version = "1.0" encoding = "utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:complextype name = "movietype"> <xs:attribute name = "title" type = "xs:string" use = "required" /> <xs:attribute name = "year" type = "xs:integer" use = "required" /> </xs:complextype> <xs:element name = "Movies"> <xs:complextype> <xs:sequence> <xs:element name = "Movie" type = "movietype" minoccurs = "0" maxoccurs = "unbounded" /> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> CSE-A1200 Tietokannat 10.5.2016 49 / 50

Tenttitehtäviä XML:stä Tentissä ei tarvitse kirjoittaa itse XML-dokumentteja eikä DTD- tai XML Schema -määrittelyjä. On kuitenkin ymmärrettävä annettuja XML-dokumentteja sekä DTDtai XML Schema -määrittelyjä. Tentissä ei pyydetä kirjoittamaan XPath-kyselyjä, mutta siinä voidaan antaa XPath-kysely ja kysyä, mikä on sen tulos annetussa XML-dokumentissa. Tällöin on syytä muistaa, että myös alku- ja loppumerkinnät (tagit) pitää olla mukana vastauksessa, jos ne kuuluvat kyselyn tulokseen. Aiheesta tarvitsee osata vain ne asiat, joita on käsitelty luennoilla ja / tai harjoituksissa. Esimerkiksi avainten ja viiteavainten määrittelystä XML-dokumentissa ei tarvitse tietää. CSE-A1200 Tietokannat 10.5.2016 50 / 50