Tietokannan hallinta, kevät 2001, Harjoitus 4 (23.-26.4.)

Läsnäolo: 3 tehtävää        (**)-merkitty tehtävä lasketaan kahdeksi

1. Tarkastellaan yritystietokantaan kohdistuvaa kyselyä

select n.DEPENDENT_NAME, e.LNAME  
from EMPLOYEE e, DEPARTMENT d, DEPENDENT n 
where e.SSN = n.ESSN and e.DNO = d.DNUMBER and d.DNAME = 'Research' 
and n.RELATIONSHIP='SPOUSE'. 
a) Anna kyselyä suoraan vastaava projektio-valinta-tulo-tyyppinen relaatiolauseke ja tätä vastaava kaavapuu. Assosioi karteesiset tulo-operaatiot tavalla, jonka arvelet tuottavan parhaan optimointituloksen.
b) Optimoi kysely käyttäen heuristiikkaa "suorita valinnat mahdollisimman aikaisin". Anna optimoitua kyselyä vastaava kaavapuu ja relaatiolauseke.
c) Voidaanko tehdä vielä muita optimointitoimenpiteitä?

2. Miten lasket edellisen tehtävän kyselyn, kun relaatioon EMPLOYEE on hakemisto attribuutilla SSN ja relaatioon DEPARTMENT on hakemisto attribuutilla DNAME? Onko hakemistojen ominaisuuksilla merkitystä? Voisiko kyselyn suoritusta tehostaa paremmin jollakin muilla hakemistoilla?

3. Tarkastellaan relaatiokaavioita (avaimet lihavoitu):

Henkilö(Sotu, Etunimi, Sukunimi),
Kuollut(Sotu, Kuolinpäivä),
Aviopari(Miehensotu, Vihkipäivä, Vaimonsotu),
Eronnut(Miehensotu, Vihkipäivä, Eropäivä).

a) Esitä kysely 'Melanie Griffithin aviomiesten nimet ja asianomaiset vihkipäivät' relaatioalgebran operaatioina.
b) Millaisia tiedosto- ja hakemistorakenteita loisit tietokantaan? Vaatimuksena on, että a-kohdan kysely on tehokkaasti toteutettavissa. Selosta kyselyn toteutusperiaate hakemistoja käytettäessä.

4. Tarkastellaan kyselyä

select FNAME, LNAME, PNO, HOURS
from EMPLOYEE, WORKS_ON
where ESSN=SSN and HOURS > 20;
Arvioi kyselyn suorituksessa tarvittavien levyhakujen määrän ylä- ja alarajoja erilaisilla toteutustavoilla ja tiedosto/hakemistorakenteilla. EMPLOYEE-relaatiossa on 10000 kpl 100 merkin rivejä ja WORKS_ON-relaatiossa 30000 kpl 20 merkin rivejä. Jakson koko on 2KB. (Ei ole tarkoitus käydä kaikkia vaihtoehtoja tarkasti läpi; riittää, kun löytyy joitakin hyvin hyviä ja hyvin huonoja vaihtoehtoja.)

5. Liitosoperaation toteutusvaihtoehdoille on esitetty mm. seuraavat ohjeet (luennot, ss. 19, 21): Sisäkkäisten silmukoiden menetelmässä kannattaa pienempi relaatioista käsitellä ulommassa silmukassa. Hakemistoliitoksen ainoassa silmukassa kannattaa käsitellä pienempi relaatio tai relaatio, jonka liitososallistuvuus on suurempi.

Ovatko nämä ohjeet aina päteviä? Löydätkö vastaesimerkkejä?

6. a) Esitä kaksi olennaisesti erilaista tapaa toteuttaa seuraava kysely. (Mieti, millaisia hakemistoja voi käyttää.)

select * from EMPLOYEE where SALARY < 20000 or DNO = 3;
b) Luentojen sivulla 39 (luku 4) on esitetty sisäkyselyrakenteisen SQL-lauseen muunnos (Oraclessa) liitokseksi. Onko muunnos aina mahdollinen?