Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




FIsĂ DE LUCRU "INDEXAREA, OPERAŢII CU TABELE INDEXATE"

sql


FIsĂ DE LUCRU

"INDEXAREA, OPERAŢII CU TABELE INDEXATE"



Indexarea tabelelor

Indexarea este o metoda de accesare rapida a continutului unei tabele, fara a duplica datele īntr-o alta tabela. Indexarea presupune un set de pointeri ordonati logic prin valoarea unei chei.

Exemplu: ELEVI.DBF (nume,pren,clasa,absn)

Parcurgerea ordonata dupa nume se poate face prin construirea unui index care sa retina numarul īnregistrarii din tabela si criteriul "nume". Liniile acestui index sunt ordonate dupa valorile cheii. Solicitarea de a accesa tabela ELEVI prin cheia "nume" va impune parcurgerea indexului. Pentru fiecare linie din index pointer-ul ajunge la articolul cu datele propriu-zise.

Indexarea realizeaza o legatura logica īntre index si fisierul de date prin numarul articolului. Se observa īn desenul alaturat:

Nume

Pren

Cls

Absn

Popescu

Teodor 19219r1722t

11b

Albulet

George

11a

Stan

Anca

11c

Marin

Corina

11a

Popescu

Angela

11b

Cheie

11a

11a

11b

11b

11c

Cheie

Albulet

Marin

Popescu

Popescu

Stan

Indecsii pot fi depusi īn fisiere index (.CDX) asociate tabelei, au acelasi nume si se deschid/īnchid odata cu tabela, orice operatie de actualizare asupra acesteia reflectāndu-se automat si asupra tuturor indecsilor membri. Se mai numesc fisiere index structurale.

O tabela paote avea mai multi indecsi dar numai unul este, la un moment dat, activ si determina criteriul de parcurgere.

Tipuri de indecsi:

Regular index - este folosit pentru selectarea ordinii de parcurgere din campurile non-cheie;

Unique index - este folosit pentru selectarea ordinii de parcurgere bazata pe prima aparitie a valorii īn cāmpul specificat;

Candidate index - este folosit īn tabelele incluse īntr-o baza de date care au deja fixat indexul primar dar care doresc verificarea valorilor unice si īn alt cāmp decāt īn cāmpul cheie. Se pot folosi, desigur, si īn tabelele libere.

Primary index - este folosit īn contextul unei tabele incluse īntr-o baza de date si asigura introducerea valorilor unice pentru cheie articolelor.O tabela are un singur index primar.

Crearea unui index

INDEX ON<exp> TAG <tag> [UNIQUE] [DESCENDING] [ASCENDING] [FOR<cond>]

Comanda INDEX permite crearea unui reper index cu numele <nume-tag>. Reperul se depune īn fisierul structurat asociat tabelei. Criteriul de indexare este dat de expresia din clauza ON<exp>. Clauzele A/D pot indica sensul ordonarii, implicit fiind cel crescator.

Exemplu: fie tabela ELEVI.DBF cu urmatorul continut

Nume

Prenume

Clasa

Absn

Admis

Data_n

Popescu

Teodor 19219r1722t

11b

.T.

Albulet

George

11a

.T.

Stan

Anca

11c

.T.

Marin

Corina

11a

.F.

Popescu

Angela

11b

.F.

index on clasa tag clasa unique | creare tag clasa īn fisierul structural elevi.cdx

list    | se permite accesul la primul articol al fiecarei clase

Activarea si precizarea indexului principal

SET ORDER TO TAG <tag> USE <bd> ORDER <tag>

Exemplu: use elevi order nume    && activ este tag-ul nume din Elevi.cdx

set order to tag unu    && activ este tag-ul nume din Elevi.cdx

set order to 0 && se considera tabela neordonata

stergerea unui index

Comanda DELETE TAG <tag> se foloseste pentru stergerea unui reper.

Exemplu delete tag nume

Definirea vizuala a indecsilor

Realizarea interactiva a indecsilor pentru o tabela presupune deschiderea ferestrei Table Designer ( care se deschide cu comanda Modify Structure ).

Cautare rapida si pozitionare īn tabela indexata

Una dintre functiile importante ale unei baze de date (SGBD - Sistem de Gestiune a Bazelor de Date) este accesarea rapida a tabelei. Conditia impusa este ca tabela sa fie indexata dupa expresia de cautare.

1.Comanda FIND <expC>| '<expC>' - cauta īn tabela printre valorile de indexare prima valoare care este egala cu <expC> de cautare. Expresia de cautare este o constanta si trebuie īncadrata obligatoriu de delimitatorii de sir daca espresia de cautare īncepe cu spatii.

2.Comanda SEEK <exp>    - cauta īn tabela activa prima valoare a cheii de indexare care este egala cu expresia de cautare. Cautarea de opreste la primul articol din tabela care are cheia de indexare egala cu valoarea expresiei, daca o astfel de īnregistrare exista. Īn cazul īn care cautarea nu a avut succes se muta pointerul de fisier pe EOF sau pe BOF In functie de modul de setare a calculatorului - cu comanda SET NEAR ON | OFF - care determina unde se va situa pointerul dupa cautarea cu SEEK fara succes: pentru ON se pozitioneaza pe BOF, pentru OFF (implicit) se pozitioneaza pe EOF.

Exemplu : efectul comenzii SET NEAR ON/OFF

use elevi

index on cls tag cls

set near off

seek '12B' &&cautati o valoare care nu exista

?found()

.F. &&se afiseaza false pentru cautare esuata

set near on

seek '12A' &&cautati o valoare care exista

?recno() && va afisa numarul īnregistrarii unde a gasit valoarea cautata

display nume && va afisa numele elevului cautat

3.Functiile de test asupra succesului sau insuccesului cautarii sunt:

FOUND() care īntoarce .T. daca articolul s-a gasit;

EOF() care īntoarce .T. daca articolul cautat nu s-a gasit

4.Functia de cautare SEEK (<exp>[,<nr-zona>/<alias>]) - cauta prima īnregistrare pentru care cheia de indexare este egala cu <exp>. Daca se gaseste, functia īntoarce .T. iar indicatorul de īnregistrari se va pozitiona pe īnregistrarea gasita; altfel īntoarce .F. si pointerul de fisier va fi pozitionat dupa ultimul articol. Cautarea se realizeaza īn fisierul identificat prin <alias> sau numarul zonei īn care este deschis.

ExempluL1: pentru tabela ELEVI.DBF

use elevi order nume

find 'popescu' && se cauta persoana cu numele Popescu

?found() && functia FOUND va īntoarce .T.

var='popescu' && se poate face cautarea cu o variabila var

find var && dar se apeleaza la macrosubstitutie

?recno() && functia va īntoarce numarul curent al īnregistrarii cautate

var='popescu' &&alta metoda de cautare - cu seek

seek var

?found()

brow

ExempluL2: efectul comenzii SET EXACT ON/OFF - comanda se foloseste pentru compararea a 2 siruri de caractere de lungimi diferite. Argumentul ON cere specificarea a sirului de caractere integral pentru cautarea unei īnregistrari, iar argumentul OFF (implicit) cere specificarea primelor caractere sin sirul cautat

set exact on

seek 'popescu'

set exact off &&asigura cautarea cu o parte a cheii de indexare

seek 'pop '

Exercitiu: Fie tabela MECIURI.dbf care retine toate meciurile din campionat.

cod

e1

e2

localitate

data_desf

ora

Dinamo

Farul

Constanta

Poli

Corvinul

Iasi

Rapid

Dinamo

Bucuresti

Steaua

Rapid

Bucxuresti

Cerinta:completati "codul" fiecarui meci cu o informatie care sa identifice pozitia meciului īn programul competitional, cronologic, pentru aceeasi data, īn ordinea alfabetica a locului de desfasurare si, daca sunt meciuri īn aceeasi zi, īn acelasi loc, le vom aranja īn functie de ora.

use meciuri

sort on data_desf,localitate, ora to man

use man

replace all cod with recno()

list

use

erase meciuri.dbf

rename man.dbf to meciuri.dbf

Concatenarea fisierelor. Comanda JOIN

Crearea unui nou fisier prin preluarea structurii si a continutului din 2 tabele de date existente se realizeaza prin comanda:

JOIN WITH <alias> TO <fis.dbf> FOR <cond> [FIELDS <lista_campuri> /LIKE <sablon> /EXCEPT <sablon>]

Comanda permite concatenarea a 2 fisiere cu generarea altuia precizat īn clauza TO <fis.dbf> . Un fisier este deschis īn zona de lucru curenta si este numit fisier principal. Celalalt fisier este specificat īn clauza WITH prin aliasul lui si este fisier secundar. Comanda se executa astfel:

se parcurge īn īntregime fisierul principal, pentru fiecare articol al acestuia se verifica īntreg fisierul secundar;

daca conditia specificata īn clauza FOR este īndeplinita atunci se va genera un articol nou īn tabela destinatie.

ExempluL: Fie o tabela cu personalul unei unitati si o alta cu toti abonatii telefonici din Braila. Se doreste crearea altei tabele cu datele personale a ale salariatilor firmei avānd si numarul lor de telefon. Secventa de comenzi este:

select 1

use pers alias a

select 2

use telefon alias b

select 1

join with b to rez for a->nume=b->nume

use rez

list

PERS.DBF

nume

adresa

popa

braila

baciu

iasi

albu

cluj

david

arad

REZ.DBF

Nume

Telefon

Adresa

Popa

Braila

Baciu

Iasi

Albu

Cluj

TEL.DBF

nume

telefon

popa

albu

baciu

rosca


Document Info


Accesari: 3257
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )