1. Mitä erilaisia vaihtoehtoja on tietueen (monikon) sisäiselle
esitysmuodolle? Tarkastele esimerkkinä relaation
   henkilo(nimi, osoite, henkilotunnus, ammatti, puolison_hetu)
monikkoja.							 8 p

Ratk.: Ks.  luennot, luku 2, s.  11-12.  Esimerkkitietueessa on
vaihtuvanmittaisia tietoja (nimi, osoite, mahdollisesti ammatti), joiden
takia vaihtoehto 1 (= kiinteänmittaiset kentät) ei ole käytännössä hyvä. 
Muita vaihtoehtoja:

2. vaihtuvanmittaiset kentät esitetään erottimin (alla "*"):

 |190171-1234|150270-4321|Mattila Matti K*Nimikatu 3, 00100 Hki*myyja|
 ---------------------------------------------------------------------

3. vaihtuvanmittaiset kentät esitetään pareina (pituus, sisältö):

 |190171-1234|150270-4321|15|Mattila Matti K|21|Nimikatu 3, 00100 ...
 ----------------------------------------------------------------
   ...	Hki|5|myyja|	
	------------

4. Oraclen tapa: kaikki kentät esitetään kolmikolla
	(attribuutin tunniste, pituus, sisältö):

 |1|11|190171-1234|2|11|150270-4321|3|15|Mattila Matti K|4|21|  ...
 -------------------------------------------------------------
   ...	Nimikatu 3, 00100|5|5|myyja|
	----------------------------

NULL-arvoa ei esitetä ollenkaan (tunnisteet mahdollistavat tämän).


- Lisäksi tulee kaikissa vaihtoehdoissa hallintatietoa: tietueen numero,
poistomerkintä, tietueen pituus yms.

Arvostelu: Vaihtoehdot 1-4: puuttuminen -2 p, vastauksen selkeys vaikuttaa.


2.  Oletetaan, että henkilo-relaation (vrt.  tehtävä 1) monikoita
säilytetään henkilötunnuksen mukaan järjestettynä peräkkäistiedostona. 
Esitä a) harvan ja b) tiheän ISAM-hakemiston idea henkilo-relaatiota
esimerkkinä käyttäen.  Jakson koko on 4 KB, tietueen pituus 100 merkkiä
ja tietueita 800 000 kpl. (Muut oletukset voit tehdä itse.) Anna
kummassakin tapauksessa esimerkki kyselystä, jonka toteutukseen
hakemistoratkaisu sopii hyvin.					12 p


Ratk.: Ks. luennot, luku 3. 
a) Harva hakemisto muodostetaan henkilötunnuksen mukaan. Sen rakenne
esimerkkiluvut huomioon ottaen seuraava:

Kun perustiedoston jaksot täytetään vain puoliksi, 800 000 tietuetta
vaatii 40 000 jaksoa.  Hakemistotietue olkoon 20 merkkiä (hetu 11
merkkiä, loppu jakso-osoitteelle ym.). Alimmalle hakemistotasolle tulee
siten 40 000 hakemistotietuetta eli 800 000 merkkiä, mikä vaatii 200
jaksoa. Toisella hakemistotasolla ovat näiden 200 jakson osoitteet,
jotka mahtuvat juuri yhteen jaksoon.

Esim.
select * from henkilo where henkilotunnus= '221222-2345';
select * from henkilo where henkilotunnus like '2212%';

b) Tiheä hakemisto muodostetaan esim.  nimen mukaan.  Se on siis
luonteeltaan oheishakemisto.  Alimmaksi tasoksi tulee pareista (nimi,
osoitin) muodostuva tiedosto, jossa osoitin osoittaa perustiedostoon ja
jokaiselle henkilölle on oma hakemistotietue. Ylemmät tasot rakennetaan
kuten harvan hakemiston tapauksessa. Rakenne on siis seuraava:

Tiheän hakemiston perustasolla on hakemistotietue jokaiselle
perustiedoston tietueelle. Olkoon nimeen perustuvassa hakemistossa
hakemistotietue 40 merkkiä (30 merkkiä nimelle, loppu jakso-osoitteelle,
tietueen osoitteelle ym.). Näillä oletuksilla perustasolla on 800 000 *
40 = 32 000 000 merkkiä eli 8000 jaksoa (kun jaksot pakataan täyteen).
Ensimmäisellä varsinaisella hakemistotasolla on siis 8000 * 20 = 160 000
merkkiä eli 40 jaksoa. Toisella tasolla on yhdessä jaksossa osoitteet
mainittuihin 40 jaksoon.

select nimi, osoite from henkilo order ny nimi;
select nimi, osoite from henkilo where nimi = 'Laine';

Arvostelu: periaatteet yhdessä 5 p, esimerkkiin liittyvät tarkennukset 5
p, kyselyesimerkit 2 p

 
3.  Selitä lyhyesti, mitä vaihtoehtoja on yleisesti liitosoperaation
toteuttamisessa ja arvioi niiden tehokkuutta kyselyn
	select h.nimi, p.nimi
	from henkilo h, henkilo p
	where h.puolison_hetu = p.henkilotunnus; (tehtäväpaperissa hetu!)
kannalta. (Esitä vaihtoehtojen pääperiaatteet ja edellytykset;
henkilo-relaatio on tässäkin tehtävän 1 mukainen.)

Ratk.: Ks. luennot, luku 3, s. 16-23. 
1) sisäkkäiset silmukat	
	sopii periaatteessa, mutta on tässä yhtä tehoton kuin aina
	(eli mitään hyötyä ei ole esim. siitä, että liitetään saman
	relaation instansseja
2) hakemistoliitos
	sopii, jos on henkilotunnus-hakemisto; siitä, että perustiedosto
	on henkilotunnus-järjestyksessä ei ole hyötyä	
3) lomitusliitos
	ei sovi ollenkaan, koska on kysymyksessä saman relaation kaksi 
	instanssia (vaikka samat avainten arvot): toinen relaatio on
	monikkojen yhteenliittämisen kannalta väärässä järjestyksessä
4) hajautusliitos
	sopii: puolison monikko saadaan hajauttamalla samalla
	hetu-hajauttimella sekä henkilön hetun että saman monikon 
	puolison_hetu-attribuutin perusteella.

Arvostelu: 3 p/vaihtoehto, riittävä periaatteen selitys: 2 p, arvio 1 p


4. Esitä kaaviona transaktion suoritusta koskeva tilasiirtymämalli ja
selitä sen osat.						 6 p

Ratk.: Ks. luennot: luku 5, s. 8-9.

Arvostelu: tilojen / selitysten puutokset tai virheet: n. -1 p/kpl


5. Oletetaan, että järjestelmän romahdettua lokitiedoston sisältö on
seuraava: 

100: [start, T1]
101: [start, T2]
102: [write, T1, A, 10, 20]
103: [write, T2, B, 11, 22]
104: [commit, T1]
105: [start, T3]
106: [write, T3, A, 20, 30]
107: [abort, T2]
108: [checkpoint]
109: [start, T4]
110: [write, T3, B, 11, 33]
111: [write, T3, A, 30, 40]
112: [write, T4, C, 15, 25]
113: [commit, T3]
114: [write, T4, C, 25, 35]

a) Mitä operaatioita sisältyy tästä tilanteesta alkavaan elvytykseen?
Oletetaan, että tietoalkion A sisältävän sivun PageLSN = 106,
tietoalkion B sisältävän sivun PageLSN = 110 ja tietoalkion C sisältävän
sivun PageLSN = 112. 
b) Oletetaan, että tarkistuspistettä (checkpoint) ei olisi otettu
ollenkaan. Mikä on tällöin se toiminnan vaihe, jossa elvytys saattaa
vaatia eniten toimenpiteitä? 
 

Ratk.: (harj.tehtävä 5.3; algoritmi, ks. luennot, luku 5, s. 23-25):

Sitoutumattomat transaktiot: T4
Sitoutuneet transaktiot: T3

a)

1) Peruutetaan T4:n operaatiot 114, 112. Koska PageLSN(c) = 112,
viimeistä
operaatiota ei tarvitse peruuttaa koska se ei ole vielä levyllä.
Siis lokitietueen 112 perusteella asetetaan C <- 15.

2) Uusitaan T3:n operaatiot 106, 110, 111 tässä järjestyksessä.
- 106: ei tarvitse toteuttaa, koska tehty ennen tarkistuspistettä
- 110: ei tarvitse, koska PageLSN(b)=110
- 111: pitää toteuttaa: asetetaan A <- 40.

b) Undo- ja redo-ketjuista voi tulla hyvinkin pitkiä. Tämän tehtävän
osalta vaihe 114 tuottaa eniten operaatioita.

Arvostelu: a) 8 p, b) 4 p  PageLSN-merkitys tuntematon: - 2p
(muuten tämä tehtävä joko osattiin hyvin tai ei ollenkaan)


6. Selitä lyhyesti käsitteet:
a) lukon granulaarisuus,
b) kaksivaiheinen lukituskäytäntö (2PL),
c) toistokelvoton luku (esimerkki mukaan).			10 p

Ratk.:
a) Ks. luennot, luku 5, s.  44.  (lukituksen kohteen koko: tietoalkio,
rivi, sivu, ...)

b) Ks. luennot, luku 5, s. 45.   (lukkojen varaus kasvuvaiheessa,
vapautus kutistumisvaiheessa; erilaisia muotoja)

c) Ks. luennot, luku 5, s. 31 (määritelmä), s. 29 tai 48 (esimerkkejä).

Arvostelu: a: 3p   b: 3p   c: 4p