Indexarea tabelelor  

 

In aplicatiile practice tabelele unei baze de date sunt de dimensiuni mari, iar sortarea dupa diverse criterii este o operatie costisitoare (din punct de vedere a memoriei necesare).  Prin indexare se obtine o ordonare logica in urma careia nu se schimba fizic ordinea articolelor ci numai ordinea de acces la articole. Prin indexare i se ataseaza tabelei o structura de ordonare denumita structura index,  ce poate sa contina unul sau mai multe criterii de ordonare.

 

Indexarea poate fi simpla sau compusa.

Indecsii simpli pot contine un singur criteriu de ordonare in timp ce indecsii compusi pot contine mai multe criterii de ordonare dintre care unul singur poate fi activ.

Unui fisier dbf  i se pot atasa mai multi indecsi dintre care numai unul poate fi activ. Ultimul index este cel activ. Dupa indexare se scrie comanda LIST fara a mai activa tabela.

Indexarea folosind indecsi simpli

Comanda de indexare simpla:

INDEX ON expresie_de_ordonare TO nume_fisier [FOR conditie] [Unique]

Va avea ca rezultat obtinerea unu fisier index : nume_fisier.idx

Clauza unique determina ca in cazul in care se repeta valori ale structurii de indexare acestea sa fie luate o singura data

Observatie: ordonarea se face dupa o expresie si nu dupa o lista de campuri. Daca se doreste ca indexarea sa contina informatii din mai multe campuri trebuie gasita o expresie care sa le includa .

Spre exemplu:

tabela elevi.dbf retine:

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

Ordonarea dupa campul nume:

Index on nume to i1

List

Cautarea intr-o tabela indexata dupa o valoare din campul ordonat se face cu comanda:

seek expresie

Exemplu:

 

Accept  numele cautat   to num

Seek num

display

 

Daca se doreste indexarea dupa nume si prenume:

Index on nume+prenume to i2

List

Observatie: ordonarea se face implicit crescator fara a avea optiune pentru descrescator. Daca se doreste ordonarea descrescatoare a campurilor numerice sau data calendaristica trebue gasita o expresie de indexare potrivita.

Spre exemplu daca se doreste ordonarea descrescatoare dupa medie :

 

Index on 1/media to i3

Inchiderea unui fisier index:

a)       Prin inchiderea tabelei asociate

b)       Prin crearea unui alt index

c)       Prin comenzi explicite: SET INDEX TO [nume_index] fara parametru dezactiveaza toti indecsii, CLOSE INDEX

Deschiderea unui fisier index:

a)       Odata cu deschiderea tabelei:

USE nume_tabela INDEX nume_index

b)       Prin comenzi explicite: SET INDEX TO nume_index

Schimbarea ordinii de prioritate: SET INDEX TO nume_index

Actualizarea fisierului index activ: REINDEX

Functii standard relativ la indexare:

a)       ORDER ( ) – intoarce numele fisierului index activ

b)       KEY () – intoarce expresia cheii de indexare a fisierului index identificat prin nr_ord

Index on nume+prenume to i2

?order()

i2

?key()

            nume+prenume

Aplicatii:

 

Fie tabela stoc.dbf (cod_prod (C6), den_prod(C10), um (N3 unitatea de masura), prod (c10),  pret_unit(N6,2), cant(N6),data_liv(D, data livrarii)). Adaugati inregistrari. Se stie : cod_prod este unic, dar den_prod se poate repeta, cu semnificatia ca in tabela exista acelasi produs cu mai multe preturi, deci cu mai multe coduri. Sa se genereze coduri compuse din primele 3 caractere ale denumirii si nr articolului curent (se vor completa cu comanda replace).

 

Cod_prod

Den_prod

um

Prod

Pret_unit

cant

dataliv

Cio1

ciocolata

buc

Poiana

2.5

50

10/20/2005

Bom2

bomboane

cutie

Poiana

5.5

100

11/21/2004

Suc3

suc

litru

Coca Cola

2

125

12/10/2005

Suc4

suc

cutie

Coca Cola

2

100

9/12/2005

Bom5

bomboane

punga

Silvana

1.7

120

8/11/2004

Cio6

ciocolata

buc

Silvana

2.2

121

9/12/2005

Cio7

ciocolata

buc

Milka

2.5

150

12/07/2005

Bis8

biscuiti

buc

Silvana

1.3

120

12/06/2005

 

 

1.        Sa se ordoneze alfabetic dupa cod

2.        Sa se afiseze pretul unitar mediu al unui produs al carui nume se citeste de la tastatura.

3.        Se citeste un cod de la tastatura. Se livreaza x um din produsul respectiv(se modifica cantitatea ramasa). Sa se opereze aceasta schimbare in tabela.

4.        Se citeste un cod de la tastatura. Se primesc x um din produsul respectiv. Sa se opereze aceasta schimbare in tabela.

5.        Sa se afiseze valoarea totala a marfii din stoc.

6.        Sa se verifice daca exista produse cu stoc nul si sa se afiseze codul acestor produse.

7.        Sa se ordoneze alfabetic dupa denumire numai pentru produsele cu stoc nenul

8.        Sa se indexeze tabela, crescator dupa numele produsului. Sa se afiseze numele produselor ordonat, fara a se repeta.

9.        Indexati tabela, descrescator dupa preturile produselor. Afisati produsele de pret maxim.

10.     Sa se indexeze tabela, crescator dupa numele produsului. In cazul produselor cu acelasi nume, se vor afisa in ordinea codurilor.

11.     Sa se afiseze produsele, grupate dupa unitatea de masura.

12.     Sa se afiseze descrescator dupa data livrarii

13.     Sa se mai adauge o inregistrare. Sa se afiseze toate datele ordonate alfabetic

14.     Care este numele fisierului index activ?

15.     Care este denumirea structurii de indexare?

16.     Sa se inchida toti indecsii (fara a inchide tabela)

17.     Stiind ca produsele expira dupa un an sa se afiseze produsele expirate

18.     sa se majoreze cu 25% produsele de la Silvana

19.     se sa setemine cel mai ieftin produs de la Silvana