Indexarea multipla a tabelelor

In cazul indexarii compuse structura de ordonare poate contine mai multi indecsi (denumiti TAG-uri), adica informatii despre mai multe criterii de ordonare pentru tabela respectiva.  Tag-urile vor fi grupate intr-un fisier cu extensia .cdx.

 

Comanda de indexare multipla:

INDEX ON expresie_cheie TAG nume_tag [OF nume_fisier.cdx] [UNIQUE] [FOR conditie] [ASCENDING | DESCENDING]

 

                Dupa cum clauza OF nume_fisier.cdx este specificata  sau nu indecsii compusi se impart in doua categorii:

-          daca aceasta optiune nu este specificata, este creat un index compus structural care va avea acelasi nume cu tabela si care se activeaza automat la activarea tabelei. Fisierul va fi deci: nume_tabela.cdx.

-          daca aceasta optiune este specificata, este creat un index compus nestructural care va fi stocat in fisierul  nume_fisier.cdx. Acesta trebuie reactivat in mod explicit

 

Inchiderea unui fisier index:

a)       Prin inchiderea tabelei asociate

b)       Prin comenzi explicite: SET INDEX TO, CLOSE INDEX

 

Deschiderea unui fisier index:

Un fisier index  se deschide folosind  comanda explicita:

SET INDEX TO nume_fis_index ORDER TAG nume_tag

 

Spre exemplu:

tabela elevi.dbf retine:

Nume(C10), Prenume(C10), prent(C10),clasa (C10), media(N5,2)

1. Comanda:

INDEX ON NUME TAG t_nume

Va avea ca rezultat un index compus structural cu numele elevi.cdx care contine tag-ul (structura de ordonare) t_nume

2. Comanda:

INDEX ON NUME+PRENUME TAG t_n_p

Va avea ca rezultat adaugarea tag-ului t_n_p la indexul compus structural elevi.cdx

3. Comanda:

INDEX ON media TAG t_media OF dex Descending

Va avea ca rezultat un index compus nestructural cu numele dex.cdx care contine tag-ul (structura de ordonare) t_media

4. Comanda:

 INDEX ON clasa TAG t_clasa OF dex

Va avea ca rezultat adaugarea tag-ului t_clasa la indexul compus nestructural dex.cdx

5. Comanda:

Set index to elevi.cdx order tag t_nume

Va avea ca rezultat reactivarea structurii de indexare t_nume din fisierul index structural elevi.cdx

6. Comanda:

Set index to dex.cdx order tag t_clasa

Va avea ca rezultat reactivarea structurii de indexare t_clasa din fisierul index nestructural dex.cdx

7. Comanda:

Set index to elevi.cdx order tag t_nume

Va avea ca rezultat reactivarea structurii de indexare t_nume din fisierul index structural elevi.cdx

 

Stergerea unui reper index

            Set Index To nume_fis_index

DELETE  TAG nume_tag

 

 

Functii standard relativ la indexare:

a)       KEY ( ) – intoarce expresia cheii de indexare a etichetei index cu numarul nr_ord

? key

afiseaza expresia de indexare activa:

clasa

b)       ORDER ( )returneaza numele reperului (tag-ului) index activ

? order ( )

afiseaza:

t_clasa

 

Cautarea rapida intr-o tabela indexata

a)       FIIND expresiecauta printre valorile de indexare prima valoare egala cu expresia de cautare

b)       SEEK expresie – pozitionarea pointerului de inregistrare se face pe primul articol care are valoarea cheii de indexare expresie

c)       Pentru a afla rezultatul comenzii se folosesc functiile FOUND( ) si EOF ( )

Obs: Pentru a cauta intr-o tabela indexata o expresie folosind comenzile FIIND si SEEK, tabela trebuie sa fie indexata dupa expresia de cautare

 

Concluzie:

Unei tabele i se pot atasa:

-          mai multi indecsi simpli (extensia idx )

-          Un index simplu poate retine o singura structura de ordonare

-          Mai multi indecsi compusi nestructurali (extensia cdx)

-          Un index compus nestructural poate contine unul sau mai multe tag-uri

-          Un singur index compus structural (cu acelasi nume ca si tabela si extensia cdx)

-          Un index compus structural poate contine unul sau mai multe tag-uri

 

Indecsi simpli                                                                        indecsi compusi nestructurali

 

 

 

 

 

 

 

 

 

 

 

 

 


                                                                Index compus structural

 

Probleme:

Fie tabela agenda avand campurile: nume(C12), pren(C12), telef (C10), datan(D), adresa(C15), varsta (N2).

 

Sa se completeze campul varsta. (in ani, aproximativ)

Sa se indexeze tabela agenda.dbf  folosind un index compus structural, dupa urmatoarele criterii:

a.        Numele persoanelor (persoanele cu acelasi numai vor aparea in ordinea prenumelor) – alfabetic

b.       Schimbati numele unei persoane. Afisati

c.        Grupati numerele de telefon dupa furnizorul de servicii (Conex, Orange etc)

d.       Varstadescrescator

e.        Data nasteriidescrescator

f.         Sa se activeze pe rand doi indecsi si sa se afiseze apoi continutul tabelei.

g.       Sa se caute in tabela indexata la punctul d) prima persoana de 25 de ani si sa se afiseze numarul ei de telefon.

h.        Sa se stearga reperul index referitor la varsta.

i.          Care este numele reperului index activ? Care este  expresia cheii de indexare pentru acest reper?

j.          Sa se caute in tabela o persoana pentru care numele si prenumele se citesc de la tastatura. Sa se afiseze datele acestei persoane. Sa se determine daca aceasta persoana si-a sarbatorit anul acesta ziua de nastere. Se va afisa adevarat sau fals

k.        Sa se inchida toti indecsii;

Sa se indexeze dupa aceleasi criterii utilizand doi indecsi compusi nestructurali.