Modul de lucru
indexat
Prin indexare se
intelege atasarea la un fisier de tip .DBF a unui fisier de tip .IDX, format
din cuplul:
(<cheie-articol>,
<pointer la articol sau grup de articole>)
Activarea indecsilor se face prin
comanda
USE INDEX
Numarul maxim de fisiere index
active la un moment dat pentru o baza de date este 7. Pentru instructiunile de
vizualizare, listare si prelucrare a informatiilor din baza de date (DISPLAY,
LIST etc.) numai primul index, considerat index principal, are importanta.
Ceilalti indecsi activati prin USE au importanta numai pentru eventualele
completari sau modificari ale bazei de date (comenzi de tipul APPEND, REPLACE,
EDIT etc.)
Definirea indecsilor, adica
crearea si asocierea unui fisier index unei baze de date se face prin comanda INDEX.
sintaxa: INDEX ON <expr> TO <fisier> [FOR <conditie>] [UNIQUE]
efect: Creaza un fisier
de indecsi, pentru a face ordonarea logica a inregistrarilor. Inregistrarile
din baza de date pentru care este creat fisierul de indecsi vor fi afisate si
accesate in ordinea precizata de index, desi ordinea fizica a inregistrarilor
nu este modificata.
Ordonarea este ascendenta,
functie de cheia de indexare. Lungimea maxima a cheii de indexare este de 100
caractere; expresia care formeaza cheia poate contine un camp sau o combinatie
de campuri ale bazei de date. Daca cheia este compusa din mai multe campuri ale
bazei de date, se va aplica principiul ordonarii lexicografice, adica primul
camp este considerat principal, iar inregistrarile vor fi ordonate dupa
valorile sale. La valori egale ale primului camp, ordonarea are in vedere al
doilea camp, etc. Cheia poate fi o expresie de tip sir de caracter, formata
prin concatenarea unor campuri de tip Character si / sau Numeric (asupra
campurilor Numeric se va aplica insa functia STR() ).
Observatii:
1.
Nu este admisa functia TRIM, deoarece aceasta modifica lungimea cheii.
2.
Parametrul "lungime" al functiilor $ si STR aplicat asupra unor campuri din
baza de date trebuie sa fie o constanta.
3.
Folosind o cheie numerica, se poate obtine si o ordonare descendenta dupa
valorile unui camp, prin specificarea cheii cu semnul - in fata.
4.
Pentru concatenarea campurilor de tip Numeric si /sau data calendaristica
cu campuri de tip caracter, se vor folosi functiile STR, respectiv DTOC.
Fisierul de indecsi creat va avea extensia
.IDX, si va fi folosit impreuna cu baza de date indexata prin intermediul sau.
<expr> : Pe baza expresiei precizate in <expr> este construita cheia de
indexare si fisierul de indecsi corespunzator bazei de date.
TO <fisier> : Se specifica numele fisierului de indecsi, cu extensia
.IDX, care va contine cheia de indexare definita anterior.
Parametri:
FOR <conditie> : Numai inregistrarile care satisfac conditia precizata
sunt indexate, fiind disponibile pentru afisare si acces ulterior.
UNIQUE : Optiunea este destinata definirii cheilor unice (adica in index va fi
inclus numai primul articol cu cheia data).
Exemplu:
Pentru a indexa baza de date PERS.DBF dupa numele pacientilor:
index on NUME_PREN to IDPERS1
Dupa aceea, orice
accesare a bazei de date se va face asupra inregistrarilor ordonate dupa
indexul definit. De exemplu, listarea bazei de date se concretizeaza intr-o
listare a inregistrarilor in ordinea alfabetica a numelor:
list
Pentru a indexa baza de date PERS.DBF dupa data nasterii fiecarui pacient,
dar numai pentru pacientii din judetul Iasi:
index on DATA_N to IDPERS2 for DOM_JUD
= 'IS'
Dupa aceea, dand comanda de listare a bazei de date, vom obtine lista
pacientilor din judetul Iasi, in ordine crescatoare a datelor de nastere aler
acestora:
list
Orice modificare a bazei de date
(a ordinii inregistrarilor) trebuie actualizata in fisierele de indecsi
asociate. Astfel, pentru a reface fisierele de indecsi (inactive la momentul
modificarii comenzii) trebuie folosita comanda REINDEX.
sintaxa: REINDEX
efect : Actualizeaza toate fisierele de indecsi deschise in
zona curenta de lucru, conform cu modificarile aparute la nivelul
inregistrarilor bazei de date.
Dupa ce se creeaza unul sau mai multi
indecsi pentru o baza de date, este necesara folosirea acestora. La inchiderea
bazei de date, fisierele de indecsi construite se inchid de asemenea, si nu se
deschid automat la o deschidere ulterioara a bazei de date. Aceste fisiere se
comporta ca niste entitati independente, cu care se lucreaza separat. Prin
urmare, pentru a putea folosi fisierele de indecsi pe care le-am definit pentru
o baza de date, sunt necesare comenzi specializate:
a) Comenzi pentru deschiderea
fisierelor de indecsi pentru o baza de date:
Deschiderea fisierelor de indecsi
se poate face in doua moduri diferite:
-
simultan cu deschiderea bazei de date: precizand fisierele de indecsi pe
care dorim sa le deschidem, ca parametri suplimentari ai comenzii USE;
- daca baza de date este deja deschisa, fisierele de indecsi pot fi
deschise cu comanda:
SET INDEX
sintaxa: SET INDEX TO [<lista fisiere
index> | ?] [ORDER <expN> | <nume fisier index> [ASCENDING |
DESCENDING]]
efect: Deschide unul sau
mai multe fisiere de indecsi pentru a fi active in baza de date curenta, in
acelasi mod ca parametrul INDEX din comanda USE (argumentele disponibile au
aceeasi semnificatie). Folosirea comenzii SET INDEX TO fara a preciza nici un
alt argument inchide toate fisierele de indecsi deschise in zona curenta de
lucru.
Exemplu: Comenzile de lucru cu indecsi prezentate anterior sunt echivalente
cu:
use PERS
set index to IDPERS1, IDPERS2
(pentru a deschide
ambele fisiere de indecsi, primul fiind in mod implicit activ)
use PERS
set index to IDPERS1, IDPERS2 order 2
sau
use PERS
set index to IDPERS1, IDPERS2 order IDPERS2
(pentru a deschide
ambele fisiere de indecsi, al doilea fiind activ)
use PERS
set index to IDPERS1, IDPERS2 order 2 DESCENDING
(pentru a deschide
ambele fisiere de indecsi; al doilea este activ, iar inregistrarile sunt
accesate in ordine descrescatoare).
- daca avem mai multe fisiere de indecsi deschise pentru aceeasi baza de
date, si dorim sa schimbam ordinea lor (sa activam un alt fisier de indecsi) se
foloseste comanda:
SET ORDER
sintaxa: SET ORDER TO [<expN> | <nume fisier index>
[ASCENDING | DESCENDING]]
efect: Precizeaza care fisier de indecsi din lista de fisiere
de indecsi disponibile sa fie activ pentru baza de date curenta (acesta va
determina ordinea in care sunt accesate inregistrarile bazei de date).
<expN> : Se va indica numarul de ordine al fisierului din lista de indecsi deschisi
care urmeaza sa devina activ (aceasta lista fiind definita prin comanda USE sau SET INDEX TO;
<nume fisier index> : Se va indica in mod explicit numele fisierului de indecsi care va deveni
activ;
ASCENDING | DESCENDING : Se precizeaza daca pentru fisierul de indecsi definit ca
activ, inregistrarile vor fi accesate in ordine crescatoare sau descrescatoare.
Exemplu:
Reluam exemplul anterior; presupunem ca baza de date a fost deschisa impreuna
cu fisierele de indecsi asociate, iar lista de indecsi a fost definita,
folosindu-se comanda:
use PERS index IDPERS1, IDPERS2
(primul fisier de
indecsi va fi in mod implicit cel activ).
Pentru a activa al doilea fisier de indecsi se poate folosi comanda:
set order to 2 sau
set order to IDPERS2
Pentru a activa al doilea fisier de indecsi, inregistrarile urmand a fi
accesate descrescator, se poate folosi comanda:
set order to 2 DESCENDING sau
set order to IDPERS2 DESCENDING
b) Comenzi pentru inchiderea fisierelor
de indecsi pentru o baza de date:
CLOSE INDEXES
sintaxa: CLOSE INDEXES
efect: Inchide toate fisierele de indecsi deschise in zona curenta de lucru.