Tietokannan hallinta, syksy 2000, Harjoitus 4 (9.-12.10.)

Läsnäolo: 3 tehtävää

1. Tarkastellaan yritystietokantaan kohdistuvaa kyselyä

select e.LNAME, s.LNAME
from EMPLOYEE e, EMPLOYEE s, DEPARTMENT d
where e.SUPERSSN = s.SSN and e.DNO = d.DNUMBER and d.DNAME = "Research"
and e.SALARY > 30000.

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ä?

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. Kyselyllä

select lname, fname, dep_name, relationship
from employee, dependent
where essn=ssn and lname='Smith';

tulostetaan Smith-nimisten työntekijöiden perheenjäsenet.

Arvioi kyselyn suorituksessa tarvittavien levyhakujen määrän ylä- ja alarajoja erilaisilla toteutustavoilla ja tiedosto/hakemistorakenteilla. Oletetaan, että employee-relaatiossa on 20000 kpl 100 merkin rivejä ja dependent-relaatiossa 50000 kpl 50 merkin rivejä. Jakson koko on 4KB.
(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. 17, 19): Sisäkkäisten silmukoiden menetelmässä kannattaa pienempi relaatioista käsitellä ulommassa silmukassa. Hakemistoliitoksen ainoassa silmukassa kannattaa käsitellä relaatio, jonka liitososallistuvuus on suurempi.

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

6. Tarkastellaan relaatiolausekkeen

        P  (r * s * t)      (P on projektio, * on luonnollinen liitos)
         BD
laskentaa, kun relaatiot r(AB), s(BC) ja t(CD) ovat seuraavansisältöisiä:

r = {(i,1) | i = 1,...,n},
s = {(1,j) | j = 1,...,n},
t = {(k,2) | k = 1,...,n}.

Mikä on tuloksen koko, so. kuinka monta monikkoa lausekkeen arvo sisältää? Entä minkä kokoisia välitulosrelaatioita syntyy, kun lauseke lasketaan muodossa

a)      P  (r * P  (s * t)),    b)   P  (P  (r * s) * t)
         BD      BD                   BD  BC
Oletetaan, että tietokannan hallintajärjestelmän kyselynoptimoijalla on käytettävissään relaatioiden koot ja attribuuttien arvojoukkojen koot (äskettäin suoritetun analyysi/tilastointi-ajon jäljiltä). Millä perusteella optimoija pystyisi tässä tapauksessa valitsemaan kyselyn kahdesta laskentatavasta tehokkaamman?