indexarea tabelelor
description
Transcript of indexarea tabelelor
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 ParteneriUSE Clienti && se deschide tabelul Clienti
1
INDEX ON address TAG addressINDEX ON company TAG company OF custcdx
b) Crearea unui fişier de indexImediat 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 Regularsau- se foloseşte comanda INDEX.Exemplu:USE Fa cturiINDEX ON cod_cli TAG codcli
e) Crearea indecşilor multipliIn 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 suplimentareAtunci 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ţiINDEX ON nume TAG numeINDEX 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ţiSET ORDER TO numeBROWSESecventa 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 filtratNumă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 INDEXNotă: 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 datelorEste 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.
4