IP-08abctAB2G   Adatbázisok-2 gyakorlat
ELTE, 2014/2015.tanév I.félév, dr. Hajas Csilla gyak.vez.
Hétfő 12:15-13:45 PC3, 14:00-15:30 PC3, Szerda 10:15-11:45 PC9
backAB2gyak (főmenü)    AB2ea    4.gyak     6.gyak    OracleDoc
   
5.gyak. Indexstruktúrák-II.
    
G (gépes témakör)
> G7. Feladatok index szervezett táblákra (IOT)
   
E (elméleti témakör)
> E4. Hasító indexek (Tk.4.4. fejezete)
> E5. Bitmap indexek (Tk.5.4. fejezete)
  

G7. Feladatok index szervezett táblákra (IOT)

Segédanyagok:  Lásd IOT.txt - Index szervezett táblák, IOT részei (index, tábla)
>> OracleDoc: Concepts  >> 3 Overview of Index-Organized Tables
 
Állapítsuk meg ezeknek az IOT táblák a különböző tulajdonságait a katalógusokból. 
DBA_INDEXES, DBA_TABLES, DBA_OBJECTS, DBA_SEGMENTS
 
7.01. Hozzuk létre a IOT.txt segédletben szereplő cikk_iot indexszervezésű táblát.
         Adjuk meg mely felhasználók tulajdonában vannak ezek ('CIKK_IOT'-vel
         kezdődő) index-szervezett táblák. Adjuk meg a táblák és táblaterek nevét is. 
        (Melyik táblatéren vannak ezek a táblák? -> miért nem látható?)
   
7.02. Adjuk meg a fenti táblák index részét, és azt, hogy ezek az index részek (szegmensek)
         melyik táblatéren vannak? Keressük meg a szegmensek között az előző táblákat
         illetve indexeket, és adjuk meg a méretüket. Keressük meg az adatbázis objektumok
         között a fenti táblákat és indexeket, és adjuk meg az objektum azonosítójukat és
         adatobjektum azonosítójukat (DBA_INDEXES,DBA_TABLES,DBA_OBJECTS). 

 7.03. Adjuk meg a fenti táblák túlcsordulási részeit (ha van). Keressük meg
          a túlcsordulási részeket a szegmensek között és adjuk meg a méretüket.
          Keressük meg az objektum azonosítóikat és az adatobjektum azonosítóikat is.

 7.04. Adjuk meg azokat az index szervezett táblákat, amelyeknek pontosan egy
          dátum típusú oszlopa van.
 
7.05. Írjunk meg egy plsql procedúrát, amelyik a paraméterül kapott index szervezett
          tábláról kiírja a tábla méretét.
         PROCEDURE iot_meret(p_owner VARCHAR2, p_tabla VARCHAR2)
         Vigyázzunk, mert a táblának lehet index és túlcsordulási szegmense is.
   
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára  


E4. Hasító indexek (Tk.4.4. fejezete: Tördelőtáblák)
     
Segédanyagok:
Hasító index, lásd 2.előadás:  fizika.p9fizika.pp11-16 és fizika.pp17-20
Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, Panem, 2001.
4.fej. Indexstruktúrák -> 4.4. Tördelőtáblázatok dinamikus_tordeles.pdf
 
Feladatok:
E1.1 Kiterjeszthető hasító index (vagy másképp kiterjeszthető tördelőtáblázat)
        A kosártömb mérete mindig pontosan 2**i.
        Tegyük fel, hogy egy blokkba 2 rekord fér el, j értéke (a blokkok jobb oldalán)
        azt jelzi, hogy hány bit használatos a blokkhoz tartozás eldöntésére.

 i=1 
---- 0001
0 | -|---> ----1
| |
1 | -|---> 1001
---- 1100
----1
            kosártömb      blokkok
       
       Szúrjuk be az alábbi hasító értékkel rendelkező sorokat egymás után,
       és minden újabb blokk létrehozása után rajzoljuk újra a kosártömböt
       és a blokkokat.
 0011, 0110, 1011, 0111, 1110, 1111, 0100
-- Egy kis segítség a kiterjeszthető hasító indexhez:
A K kulcsú rekordot h(K) első i bitje alapján helyezzük el úgy, hogy
követjük a kosártömb ezen bejegyzéséhez tartozó mutatót.
Ha nincs hely a megtalált blokkban akkor a következőt tesszük:
1. Ha j < i akkor újabb blokkot hozunk létre és a j+1-edik bit alapján
kettéosztjuk a rekordokat a két blokk között (mindkét blokkra j+1 lesz
az új érték), majd a kosártömb szükséges mutatóit az új blokkra irányítjuk.
2. Ha j = i akkor először i-t növeljük 1-gyel, megduplázzuk a kosártömböt,
új mutatókat teszünk bele, majd alkalmazzuk 1.-et.
     
 E1.2. Lineáris hasító index
         Az előre megadott küszöbszám (rekordok száma/kosarak száma)
         legyen 2,4. (H.F.: Nézzük meg akkor is, ha a küszöbszám 1,7!)
         Készítsünk lineáris hasító indexet, tegyük fel, hogy egy blokkba
         2 rekord fér el és a kosarak az alábbi rekordokat tartalmazzák:
 i=1
n=2
r=3 
----------
0 | 0000 | |
| 1110 |
----------
1 | 0101 | |
| |
--------
       Szúrjuk be az alábbi hasító értékkel rendelkező sorokat egymás után,
       és minden újabb blokk megnyitás után rajzoljuk újra a kosarakat.
 0001, 0110, 1011, 0111, 1100, 1111, 0100
-- Egy kis segítség a lineáris hasító indexhez:
Ha n kosarunk van, akkor a K kulcsú rekordot h(K) utolsó i bitje alapján
tesszük a megfelelő kosárba (i=log2n).
Ha nincs benne hely, akkor újabb blokkot láncolunk ehhez a kosárhoz.
Ha nincs ilyen kosár, akkor az első bitben különböző kosárba tesszük.
Ha az előre megadott küszöböt átléptük, akkor új kosarat nyitunk.
Szükség esetén növeljük i-t
     
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára  



E5. Bittérképindexek  (Tk.5.4. fejezete)
   
Segédanyagok:
lásd előadáson 9ituning 83-84.o: Bitmap index  + Oracle Concepts doksi
Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, Panem, 2001.
5.4. Bittérképindexek  szakaszhossz_kodolas.pdf
>> OracleDoc: Concepts  >> 3 Overview of Indexes
>> Oracle10g Concepts/Part II. Architecture/5. Schema Objects >>Overview of Indexes
      
1.feladat: Tegyük fel, hogy a dolgozó tábla 14 sorból áll

DKOD DNEV   FIZETES  FOGLALKOZAS  BELEPES  OAZON
---------------------------------------------------
1    SMITH     800   CLERK        1980     20  
2    ALLEN    1600   SALESMAN     1981     30      
3    WARD     1250   SALESMAN     1981     30      
4    JONES    2975   MANAGER      1981     20      
5    MARTIN   1250   SALESMAN     1981     30      
6    BLAKE    2850   MANAGER      1981     30      
7    CLARK    2450   MANAGER      1981     10      
8    SCOTT    3000   ANALYST      1982     20      
9    KING     5000   PRESIDENT    1981     10      
10   TURNER   1500   SALESMAN     1981     30      
11   ADAMS    1100   CLERK        1983     20      
12   JAMES     950   CLERK        1981     30      
13   FORD     3000   ANALYST      1981     20      
14   MILLER   1300   CLERK        1982     10     

   - Tegyük fel, hogy fenti táblához a FOGLALKOZAS, a BELEPES és az OAZON
     oszlopokra létezik bitmap index (3 index). Készítsük el az alábbi lekérdezésekhez
     szükséges bitvektorokat, majd végezzük el rajtuk a szükséges műveleteket, és
     adjuk meg azt az előállt bitvektort, ami alapján a végeredmény sorok megkaphatók.
     Ellenőrzésképpen adjuk meg a lekérdezést SQL-ben is!
 
a. ) Adjuk meg azoknak a dolgozóknak a nevét, akik 1981-ben léptek be és a foglalkozásuk
      hivatalnok (CLERK), vagy a 20-as osztályon dolgoznak és a foglalkozásuk MANAGER.

b.) Adjuk meg azoknak a dolgozóknak a nevét, akik nem 1981-ben léptek be és a 10-es
     vagy a 30-as osztályon dolgoznak.

2.feladat, lásd Tankönyv 5.4.Bittérképindexek: Szakaszhossz_kodolas
   
   - Tömörítse az előző feladatban kapott bitvektorokat a szakaszhossz kódolással.

   - Fejtsük vissza a következő, szakaszhossz kódolással tömörített bitvektort:
     11101101001011
      
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára