Sunteți pe pagina 1din 4

Indexarea tabelelor

Cnd se dorete operarea asupra nregistrrilor unui tabel ntr-o anumit ordine, se folosesc
indecii drept mecanisme de ordonare. Se pot crea i utiliza mai multe chei index pentru acelai tabel i
se poate lucra cu nregistrrile ordonate diferit funcie de cerinele aplicaiei. Pe baza indecilor se pot
crea legturi permanente ntre tabele care s ofere acces exact la nregistrrile dorite.
Un index n Visual FoxPro este un fiier care conine pointeri ordonai n mod logic de
ctre o cheie de indexare. Indexul nu schimb ordinea fizic a nregistrrilor n tabel (fiierul .dbf).

Tipuri de indexuri
Indexuri normale (Regular) i indexuri unice (Unique)
In cazul unui index Regular, FoxPro memoreaz valoarea generat de expresia de index,
pentru fiecare nregistrare a tabelului n index. Dac mai multe nregistrri au aceeai expresie
aceasta se memoreaz de mai multe ori cu pointeri separai pentru fiecare din nregistrri.
Indexul de tip Unique include n index numai expresii unice. Dac mai multe nregistrri
genereaz aceeai valoare a expresiei de index, Unique o memoreaz doar pe prima ntlnit.
Indexuri candidat (Candidate) i index primar (Primary)
Indexul candidat, creaz un index unic, dar indexul include toate nregistrrile din tabel.
Indexurile Candidate nu permit repetarea valorilor expresiei pentru nregistrrile tabelului.
Un tabel independent poate avea un index Candidate, dar numai tabelele dintr-un container
de baze de date pot avea un index primar (Primary)
Un tabel poate avea mai multe cmpuri care identific n mod unic fiecare nregistrare.
Indexarea dup fiecare din aceste cmpuri produce un index Candidate ndreptit la titlul de index
primar. Cu toate acestea, un tabel poate avea un singur index primar. Acesta particip la stabilirea
relaiilor ntre fiiere, i servesc ca valori de cutare n tabelele la care se face referire.

Crearea unui index


a) Crearea unei chei de index pentru un tabel
- n Table Designer se alege fila Index i se introduce informaia referitoare la o singur cheie
de index. Se alege tipul de index Regular.
Sau
- se utilizeaz comanda INDEX, cu sintaxa urmtoare:
INDEX ON Expresie TO NumeIDX | TAG NumeTag [OF NumeCDX]
[FOR Conditie] [ASC | DESC] [UNIQUE | CANDIDATE]
Exemplu:
OPEN DATABASE Parteneri
USE Clienti

&& se deschide tabelul Clienti


1

INDEX ON address TAG address


INDEX ON company TAG company OF custcdx
b) Crearea unui fiier de index
Imediat dup crearea unei chei de index pentru un table (in Table Designer), Visual FoxPro
creaz automat un fiier compus structural (.cdx) nou pentru a pstra cheia de index. Un astfel
de fiier structural are urmtoarele caracteristici:
- se deschide automat atunci cnd se deschide tabelul;
- poate conine mai multe scenarii de ordonare, sau chei de index n acelai fiier index;
- este actualizat atunci cnd se adaug, se modific sau se terg nregistrri.
c) Crearea unui index primar sau candidat
- n Table Designer se selecteaz fila Index i se alege tipul de index Primary sau Candidate
d) Crearea unui index normal
- n Table Designer se selecteaz fila Index i se alege tipul de index Regular
sau
- se folosete comanda INDEX.
Exemplu:
USE Fa cturi
INDEX ON cod_cli TAG codcli
e) Crearea indecilor multipli
In timpul lucrului cu nregistrrile unui tabel, nregistrrile pot fi accesate n succesiuni
diferite. De exemplu se poate ordona tabelul Clieni dup persoana de contact, pentru a gsi uor
un nume, sau dup localitate, pentru a crea etichete potale sortate.

Crearea unor chei de index suplimentare pentru un tabel


n Table Designer se selecteaz fila Index i se introduc informaiile referitoare la cheile de
index suplimentare
Atunci cnd se creaz o etichet index fr a se indica numele unui fiier index, eticheta este
adugat automat la fiierul index structural al tabelei.
Exemplu:
USE Angajai
INDEX ON nume TAG nume
INDEX ON prenume TAG prenume

Controlul ordinii de acces la nregistrri


Dup generarea cheilor de index pentru un tabel, datele acestuia pot fi accesate i afiate n
ordinea dorit prin simpla alegere a cheii de index potrivite. Pentru a alege o anumit cheie pe post de
cheie de sortare a tabelului se va folosi comanda SET ORDER cu sintaxa :
2

SET ORDER to nume_etichet


Exemplu:
USE Angajai
SET ORDER TO nume
BROWSE
Secventa de mai sus deschide o fereastr BROWSE care afieaz nregistrrile tabelului Angajai
n ordinea alfabetic a numelor.

tergerea unui index


Se poate renuna la indecii care nu mai sunt necesari, prin tergerea etichetei din fiierul .cdx
sau prin tergerea fiierului .idx n cazul indecilor independeni.
a) tergerea unei etichete din fiierul .cdx
- n Table Designer se deschide fila Index, se selecteaz un index i se terge (pentru fiierele
structurale, ale cror etichete apar n Table Designer)

Indexarea prin expresii


Performanele unei aplicaii se pot mbunti prin crearea unor indeci bazai pe expresii.
Acestea pot fi simple sau complexe, funcie de sarcinile pe care trebuie s le ndeplineasc.
a) Indexarea prin expresii simple
Expresiile de index simple sunt indeci bazai pe un singur cmp sau pe dou sau mai multe
cmpuri de tip Character care, prin concatenare, formeaz o cheie multi-cmp.
Exemplu: In tabelul Clieni se poate crea un index pe baza expresiei: localitate + cod_cli.
La o navigare prin tabelul sortat
dup aceast
etichet de index nregistrrile
corespunztoare clienilor vor fi ordonate dup localitate, apoi dup codul alocat clientului.
b) Folosirea valorilor null n cadrul expresiilor de index
Se pot crea indeci pentru cmpurile care conin valori null. Expresiile de index evaluate ca
.NULL sunt inserate n fiierele .cdx naintea valorilor non-null.

Filtrarea datelor
a) Filtrarea datelor prin intermediul unui index filtrat
Numrul nregistrrilor afiate poate fi limitat cu ajutorul unui index filtrat, care permite
accesul numai la nregistrrile care verific expresia filtrului.
- n Table Designer se selecteaz fila Index i se introduce o expresie de filtrare n cadrul
casetei Filter, pentru indexul care se dorete filtrat;
- se folosete clauza FOR a comenzii INDEX
Not: Clauza FOR a comenzii INDEX acioneaz ca un filtru pentru tabel, astfel nct cheile
de index sunt create n fiierul de index doar pentru acele nregistrri care verific expresia filtrului.
Exemplu:
USE Facturi
INDEX ON nrfact FOR nume="Agressione"
3

Fereastra de navigare va afia doar facturile emise ctre clientul al crui nume este Agressione.
b) filtrarea temporar a datelor
Este o metod util pentru a specifica o condiie temporar pe care nregistrrile din tabel
trebuie s le ndeplineasc pentru a fi accesibile.
Se utilizeaz comanda SET FILTER, cu sintaxa:
SET FILTER TO [Conditie]
Pentru a dezactiva filtrul din tabelul curent se lanseaz comanda SET FILTER TO fr nici o
expresie.
Exemplu:
USE Clieni
SET FILTER TO localitate="Suceava"
Not: Comanda accept pe post de filtru orice expresie logic Visual FoxPro. Dup execuia
comenzii, numai nregistrrile care ndeplinesc condiia de filtrare vor fi disponibile n tabel pentru orice
comand. Pentru fiecare tabel deschis se poate stabili un alt filtru.

S-ar putea să vă placă și