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:
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:
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