Sunteți pe pagina 1din 4

Laboratorul nr.

Indexarea tabelelor

Când se doreşte operarea asupra înregistrărilor unui tabel într-o anumită ordine, se folosesc
indecşii drept mecanisme de ordonare. Se pot crea şi utiliza mai multe chei index pentru acelaşi tabel şi
se poate lucra cu înregistrările ordonate diferit funcţie de cerinţele aplicaţiei. Pe baza indecşilor se pot
crea legături permanente între tabele care să ofere acces exact la înregistrările dorite.
Un index în Visual FoxPro este un fişier care conţine pointeri ordonaţi în mod logic de
către o cheie de indexare. Indexul nu schimbă ordinea fizică a înregistrărilor în tabel (fişierul .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 înregistrări au aceeaşi expresie
aceasta se memorează de mai multe ori cu pointeri separaţi pentru fiecare din înregistrări.
Indexul de tip Unique include în index numai expresii unice. Dacă mai multe înregistrări
generează aceeaşi valoare a expresiei de index, Unique o memorează doar pe prima întâlnită.

Indexuri candidat (Candidate) şi index primar (Primary)


Indexul candidat, crează un index unic, dar indexul include toate înregistrările din tabel.
Indexurile Candidate nu permit repetarea valorilor expresiei pentru înregistrările 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 câmpuri care identifică în mod unic fiecare înregistrare.
Indexarea după fiecare din aceste câmpuri produce un index Candidate îndreptăţit la titlul de index
primar. Cu toate acestea, un tabel poate avea un singur index primar. Acesta participă la stabilirea
relaţiilor între fişiere, şi servesc ca valori de căutare î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 informaţia referitoare la o singură cheie
de index. Se alege tipul de index Regular.
Sau
- se utilizează comanda INDEX, cu sintaxa următoare:

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 fişier de index


Imediat după crearea unei chei de index pentru un table (in Table Designer), Visual FoxPro
crează automat un fişier compus structural (.cdx) nou pentru a păstra cheia de index. Un astfel
de fişier structural are următoarele caracteristici:
- se deschide automat atunci când se deschide tabelul;
- poate conţine mai multe scenarii de ordonare, sau chei de index în acelaşi fişier index;
- este actualizat atunci când se adaugă, se modifică sau se şterg înregistrări.

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 foloseşte comanda INDEX.
Exemplu:
USE Fa cturi
INDEX ON cod_cli TAG codcli

e) Crearea indecşilor multipli


In timpul lucrului cu înregistrările unui tabel, înregistrările pot fi accesate în succesiuni
diferite. De exemplu se poate ordona tabelul Clienţi după persoana de contact, pentru a găsi uşor
un nume, sau după localitate, pentru a crea etichete poştale sortate.

 Crearea unor chei de index suplimentare pentru un tabel


- în Table Designer se selectează fila Index şi se introduc informaţiile referitoare la cheile de
index suplimentare
Atunci când se crează o etichetă index fără a se indica numele unui fişier index, eticheta este
adăugată automat la fişierul index structural al tabelei.
Exemplu:
USE Angajaţi
INDEX ON nume TAG nume
INDEX ON prenume TAG prenume

Controlul ordinii de acces la înregistrări

După generarea cheilor de index pentru un tabel, datele acestuia pot fi accesate şi afişate î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 Angajaţi
SET ORDER TO nume
BROWSE
Secventa de mai sus deschide o fereastră BROWSE care afişează înregistrările tabelului Angajaţi
în ordinea alfabetică a numelor.

Ştergerea unui index

Se poate renunţa la indecşii care nu mai sunt necesari, prin ştergerea etichetei din fişierul .cdx
sau prin ştergerea fişierului .idx în cazul indecşilor independenţi.
a) ştergerea unei etichete din fişierul .cdx
- în Table Designer se deschide fila Index, se selectează un index şi se şterge (pentru fişierele
structurale, ale căror etichete apar în Table Designer)

Indexarea prin expresii

Performanţele unei aplicaţii se pot îmbunătăţi prin crearea unor indecşi bazaţi pe expresii.
Acestea pot fi simple sau complexe, funcţie de sarcinile pe care trebuie să le îndeplinească.
a) Indexarea prin expresii simple
Expresiile de index simple sunt indecşi bazaţi pe un singur câmp sau pe două sau mai multe
câmpuri de tip Character care, prin concatenare, formează o cheie multi-câmp.
Exemplu: In tabelul Clienţi se poate crea un index pe baza expresiei: localitate + cod_cli.
La o navigare prin tabelul sortat după această etichetă de index înregistrările
corespunzătoare clienţilor vor fi ordonate după localitate, apoi după codul alocat clientului.
b) Folosirea valorilor null în cadrul expresiilor de index
Se pot crea indecşi pentru câmpurile care conţin valori null. Expresiile de index evaluate ca
.NULL sunt inserate în fişierele .cdx înaintea valorilor non-null.

Filtrarea datelor

a) Filtrarea datelor prin intermediul unui index filtrat


Numărul înregistrărilor afişate poate fi limitat cu ajutorul unui index filtrat, care permite
accesul numai la înregistrările 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 doreşte filtrat;
- se foloseşte clauza FOR a comenzii INDEX
Notă: Clauza FOR a comenzii INDEX acţionează ca un filtru pentru tabel, astfel încât cheile
de index sunt create în fişierul de index doar pentru acele înregistrări care verifică expresia filtrului.
Exemplu: USE Facturi
INDEX ON nrfact FOR nume="Agressione"

3
Fereastra de navigare va afişa doar facturile emise către clientul al cărui nume este Agressione.

b) filtrarea temporară a datelor


Este o metodă utilă pentru a specifica o condiţie temporară pe care înregistrările 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 fără nici o
expresie.
Exemplu: USE Clienţi
SET FILTER TO localitate="Suceava"
Notă: Comanda acceptă pe post de filtru orice expresie logică Visual FoxPro. După execuţia
comenzii, numai înregistrările care îndeplinesc condiţia de filtrare vor fi disponibile în tabel pentru orice
comandă. Pentru fiecare tabel deschis se poate stabili un alt filtru.

Intrebări si exercitii

1. Pe baza analizei structurii tabelelor bazei de date create anterior, să se determine ce câmpuri
pot fi folosite pentru crearea unui index de tip:
- regular;
- candidat;
- primar.
Să se construiască aceste tipuri de indecşi.

2. Folosiţi cel puţin într-un un tabel indexarea după expresii ( expresie bazată pe minim 2
câmpuri de tip Character concatenate). Vizualizaţi rezultatele (BROWSE).

3. Creaţi un index filtrat în tabelul materiale care să realizeze afişarea în ordine alfabetică a
materialelor al căror nume începe cu literele “A”, “B”, şi “C”.
In acest scop se vor introduce înregistrări care să satisfacă aceste condiţii.
Indicaţie: selecţia unui subşir al unui şir de caractere se face cu funcţia :
SUBSTR (şir_original, poz_start, nr_caract)

4. Impuneţi şi revocaţi filtre temporare asupra datelor din tabelele “Materiale” respective
“Gestiuni”.

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