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 expresie
– cauta 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.
Varsta
– descrescator
e.
Data nasterii –
descrescator
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.