Sunteți pe pagina 1din 239

Ioan Mocian

Baze de date
- pentru uzul studenilor -

- 2008 -

Tehnoredactare computerizat: Ioan Mocian


Tiparul executat la Atelierul de multiplicare al Universitii Petru Maior
Copyright Ioan Mocian

Cuvnt nainte
O carte despre bazele de date nu e uor de scris, cel puin din dou motive: sunt
foarte multe astfel de cri i sunt foarte muli cunosctori ai domeniului. Pe de
alt parte sunt i multe persoane care ar dori s se iniieze n domeniu, dar crile
pe care le-au deschis i-au descurajat, datorit nivelului ridicat de prezentare.
Acestora li se adreseaz aceast carte, oameni cu pregtire academic ntr-un
domeniu conex, dar care au nevoie de cunotine pentru a nelege bazele de date,
fie pentru cultura general, fie pentru necesiti profesionale.
Pentru a nelege i utiliza bazele de date nu trebuie s fii informatician, trebuie s
ai dorina de a studia i s ai o carte bun, orientat spre scopul imediat i uurat
de balastul greoi al explicaiilor teoretice de strict specialitate, care oricum nu
vor fi nelese de un nceptor i nu le va folosi niciodat. n acest spirit a fost
scris aceast carte, pentru oameni care doresc s aplice imediat cunotinele
dobndite.
Cartea e structurat pe 5 capitole ntr-o cronologie logic, de la explicarea
noiunilor i conceptelor pn la conceperea de aplicaii n ACCESS.
Capitolul 1 este axat pe prezentarea domeniului bazelor de date relaionale unde
se folosesc i la ce sunt folosite acestea.
Capitolul 2 se ocup cu prezentarea termenilor i conceptelor folosite n bazele
de dare relaionale, pentru ca acestea s fie corect nelese i folosite.
Capitolul 3 este consacrat iniierii n proiectarea bazelor de date relaionale,
avnd n vedere c muli specialiti i manageri sunt implicai n proiectarea de
baze de date i sisteme informatice fr s aib un minim de pregtire n domeniu.
Se pleac de la constatarea c proiectarea bazelor de date nu are legtur cu
implementarea lor (pe care o fac specialitii n informatic), iar cei care dau, n
ultim instan, specificaiile sunt chiar utilizatorii finali. De fapt, sunt aceia care
formuleaz cerinele i obiectivele bazei de date, prin intermediul caietului de
sarcini.
Capitolul 4 este dedicat iniierii n limbajul SQL, un limbaj apropiat de limbajul
uman i uor de neles. Practica mi-a demonstrat c limbajul SQL este repede
asimilat i folosit pentru interogarea bazelor de date de ctre nceptori.
Exemplele prezentate aici sunt foarte sugestive, bine alese i pot fi folosite ca
modele pentru situaii concrete.
Capitolul 5 este dedicat iniierii n sistemul de gestiune a bazelor de date
ACCESS, folosind cunotinele dobndite n capitolele anterioare. Aici se nva
crearea tabelelor, formularelor, interogrilor i rapoartelor.

Exemplele prezentate sunt inspirate din situaii concrete, reale, care sunt bune
modele pentru propriile aplicaii. Expresiile SQL vor fi acum testate pe viu
putndu-se verifica imediat corectitudinea lor i rezultatele obinute.
Tot aici sunt prezentate modalitile de transpunere a rapoartelor n format HTML
pentru a fi publicate pe Internet.
Lucrarea se adreseaz studenilor facultilor de inginerie, dar este util i
persoanelor care au nvat bazele de date din mers i doresc s-i verifice i si sistematizeze cunotinele.
Dup ce ai parcurs acest curs, trebuie s dobndii capacitatea:

de a proiecta baze de date simple la nceput, a cror complexitate


s creasc odat cu experiena acumulat;
de a implementa aplicaii de baze de date n ACCESS, la nivelul
firmelor mici i instituiilor;
de a avea o baz de plecare pentru un viitor job ntr-o echip
profesionist de dezvoltare a aplicaiilor de baze de date.
Dac aceast carte a reuit s v mbogeasc bagajul de cunotine
generale, dac ai reuit s nelegei ce este o baz de date i la ce este
bun, dac ai reuit s creai o baz de date ACCESS i s o folosii ntrun scop util, dac ai reuit s publicai pe Internet cel puin un raport din
baza de date pe care ai creat-o sau din alta, nseamn c efortul depus
pentru scrierea ei nu a fost zadarnic.

Tg. Mure, 2008


Autorul

Cuprins
Cuvnt nainte ............................................................................................... 3
Capitolul 1. Noiuni de baz despre bazele de date ................................... 11
Modelul de baz de date relaional .......................................................... 12
Regsirea datelor ....................................................................................... 13
Sisteme de gestiune a bazelor de date relaionale ..................................... 14
Dincolo de modelul relaional ................................................................... 15
ntrebri pentru autoevaluare .................................................................... 16
Capitolul 2. Terminologia bazelor de date relaionale ............................. 17
Importana terminologiei .......................................................................... 17
Termeni referitori la valoare ..................................................................... 18
Date i informaii ................................................................................. 18
Valoare nul ......................................................................................... 19
Termeni referitori la structur ................................................................... 20
Tabel .................................................................................................... 20
Cmp .................................................................................................... 22
nregistrare ........................................................................................... 23
Vedere .................................................................................................. 24
Chei ...................................................................................................... 26
Index .................................................................................................... 28
Termeni referitori la relaie ....................................................................... 29
Relaii ................................................................................................... 29
Relaii unu cu unu ................................................................................ 30
Relaii unu cu mai muli ....................................................................... 31
Relaii mai muli cu mai muli ............................................................. 32
Tipuri de participare ............................................................................. 34
Gradul de participare ............................................................................ 35
Termeni referitori la integritate ................................................................. 36
Specificaie de cmp ............................................................................ 36
Integritatea datelor ............................................................................... 36
ntrebri pentru autoevaluare .................................................................... 37
Capitolul 3. Proiectarea bazelor de date relaionale ................................. 39

Etapa 1 Definirea unei declaraii de intenie i a obiectivelor misiunii .. 40


Compunerea unei declaraii de intenie ................................................ 41
Definirea obiectivelor misiunii ............................................................. 42
ntrebri pentru autoevaluare ................................................................ 43
Etapa 2 - Analiza bazei de date curente .................................................... 44
ntrebri pentru autoevaluare ................................................................ 46
Etapa 3 - Crearea structurilor de date ........................................................ 46
Definirea listei finale de tabele ............................................................. 47
Asocierea cmpurilor fiecrui tabel ...................................................... 50
Utilizarea unui cmp ideal pentru rezolvarea anomaliilor .................... 52
Stabilirea cheilor pentru fiecare tabel ................................................... 53
ntrebri pentru autoevaluare ................................................................ 56
Revizuirea structurilor iniiale de tabel ................................................ 57
Specificaii de cmp ............................................................................. 58
Anatomia unei specificaii de cmp .................................................. 60
ntrebri pentru autoevaluare ............................................................... 66
Etapa 4 - Determinarea i instituirea relaiilor ntre tabele ...................... 67
Diagrama relaiilor unu cu unu ............................................................ 67
Diagrama relaiilor unu cu mai muli ................................................... 70
Diagrama relaiilor mai muli cu mai muli ......................................... 73
Relaii cu autoreferire .......................................................................... 77
Identificarea relaiilor existente ........................................................... 80
Stabilirea caracteristicilor relaiilor ..................................................... 87
Definirea unei reguli de tergere ....................................................... 87
Identificarea tipului de participare a fiecrui tabel ........................... 88
Identificarea gradului de participare a fiecrui tabel ........................ 90
Integritatea la nivel de relaie .............................................................. 92
Etapa 5 - Determinarea i definirea regulilor de desfurare a activitii

93

Reguli specifice cmpurilor ................................................................. 93


Reguli specifice relaiilor ..................................................................... 96
Tabele de validare ................................................................................ 97
Etapa 6 - Determinarea i definirea vederilor .......................................... 98
Etapa 7 - Revizuirea integritii datelor ................................................... 102
Revizuirea i mbuntirea integritii datelor ................................... 103

Alctuirea documentaiei bazei de date ............................................... 105


Studiu de caz. Proiectarea unei baze de date ............................................ 106
Declaraia de intenie ........................................................................... 106
Obiectivele misiunii ............................................................................. 106
Analiza bazei de date curente .............................................................. 106
Crearea structurilor de date ................................................................. 107
Determinarea i instituirea relaiilor ntre tabele ................................. 110
Determinarea i definirea regulilor de desfurare a activitii ........... 111
Determinarea i definirea vederilor ..................................................... 115
Verificarea integritii datelor ............................................................. 118
Concluzii privind proiectarea bazelor de date relaionale ................... 118
Capitolul 4. Iniiere n limbajul SQL ......................................................... 120
Prezentare general ................................................................................... 120
Operaiuni simple folosind limbajul SQL ................................................. 122
Regsirea datelor ............................................................................... 122
Sortarea datelor ................................................................................. 123
Filtrarea datelor ................................................................................. 124
Operatorii clauzei WHERE .................................................. 125
Filtrare avansat ................................................................... 126
Operaiuni avansate folosind limbajul SQL .............................................. 132
Cmpuri calculate ............................................................................. 132
Funcii pentru manipularea datelor ................................................... 134
Gruparea datelor ............................................................................... 137
Crearea grupurilor ................................................................ 137
Filtrarea grupurilor ............................................................... 139
Lucrul cu subselecii ......................................................................... 141
Unirea tabelelor ................................................................................ 147
Crearea unei uniri simple ..................................................... 147
Uniri avansate ...................................................................... 138
Compunerea interogrilor ................................................................. 151
Inserarea, actualizarea i tergerea datelor ........................................ 155
Inserarea datelor ................................................................... 155
Actualizarea datelor ............................................................. 157
tergerea datelor .................................................................. 159

Principii privind actualizarea i tergerea datelor ................ 160


Crearea i manipularea tabelelor ....................................................... 162
Elemente performante ale limbajului SQL ................................................ 164
Concluzii ........................................................................................... 167
Capitolul 5. Utilizarea programului ACCESS .......................................... 168
Prezentare general ................................................................................... 168
Interfaa programului Access ..................................................................... 170
Crearea tabelelor ....................................................................................... 172
Relaii ntre tabele ............................................................................. 174
Crearea relaiilor cu Lookup Wizard ................................................ 177
Introducerea datelor n tabele ........................................................... 179
Formulare .................................................................................................. 181
Crearea unui formular ....................................................................... 181
Crearea automat a unui formular ......................................... 182
Crearea manual a unui formular ......................................... 185
Formulare cu subformulare ............................................................... 189
Interogri ................................................................................................... 195
Crearea interogrilor folosind limbajul SQL .................................... 195
Crearea interogrilor cu aplicaia Wizard(Design view) .................. 196
Legarea permanent a dou tabele .................................................... 200
Interogri cu parametri ...................................................................... 203
Rapoarte .................................................................................................... 206
Crearea unui raport simplu ................................................................ 206
Crearea unui raport cu Report Wizard .............................................. 208
Particularizarea unui raport ............................................................... 214
Macro-uri ................................................................................................... 217
Crearea macrocomenzilor cu o singur aciune ................................. 218
Crearea macrocomenzilor cu mai multe aciuni ................................ 220
Rularea macrocomenzilor .................................................................. 221
Rularea unei macrocomenzi din fereastra Database ............ 222
Rularea unei macrocomenzi dintr-un grup ........................... 222
Utilizarea aciunii RunMacro ............................................... 222
Macrocomenzi ataate evenimentelor .................................. 223
Utilizarea macrocomenzilor AutoExec i AutoKeys ........... 223

Metod rapid de pornire a aplicaiilor ............................... 224


Publicarea datelor pe Internet ................................................................... 225
Pagini Web statice ............................................................................ 226
Pagini Web dinamice ........................................................................ 228
Crearea unei pagini dinamice de date cu AutoPage .......... 228
Crearea paginilor dinamice cu Page Wizard ....................... 229
Comunicarea ntre aplicaiile pachetului Office ....................................... 231
Exportul i importul de date ............................................................. 232
Recomandri privind crearea aplicaiilor Access ..................................... 232
Anexe ............................................................................................................. 235
Anexa A. Administratorul de baz de date .......................................... 235
Anexa B. Sintaxa instruciunilor SQL ................................................. 237
Bibliografie ..................................................................................................... 239

Pagin goal

10

Baze de date

Capitolul 1

Noiuni de baz despre bazele de date


Sintagma baz de date este folosit att n viaa de zi cu zi, n mijloacele de
comunicare n mas, ct i de specialitii din domeniul tehnologiei informaiei. E
greu s ne gndim la un domeniu de activitate care s nu foloseasc, ntr-un fel
sau altul, baze de date. Astfel, cnd scoatem bani de la bancomat, parola noastr
este verificat cu o baz de date, medicul ne identific dintr-o baz de date cu
pacieni, cnd ne prezentm la vot suntem identificai dintr-o baz de date, iar
exemplele pot continua.
Exist mai multe definiii ale bazelor de date, dar cea mai simpl pentru aceast
faz de studiu este: baza de date este un set de date stocate ntr-un mod organizat.
nelegerea acestei definiii va fi uurat de un exemplu. Astfel, crile dintr-o
bibliotec nu sunt puse la ntmplare, ele sunt aezate pe rafturi, dup o anumit
logic, mprite pe domenii, pentru ca atunci vrem s ajungem la o carte, ea s
poat fi localizat uor. Prin urmare, este clar c atunci cnd cutm o carte n
biblioteca personal, o gsim mai uor dac este ordine i o gsim greu sau deloc
dac ne inem crile n dezordine. Aceast idee o s fie aplicat n proiectarea
bazelor de date, unde este foarte important organizarea corect a informaiilor.
Termenul de baz de date este folosit de multe ori n mod eronat, confundndu-se
cu softul pentru baz de date care este utilizat. n realitate, softul pentru baze de
date este numit sistem de gestiune a bazelor de date (SGBD), iar baza de date este
recipientul care conine informaiile, recipient creat i manipulat prin intermediul
SGBD. Coninutul acestui recipient se schimb foarte des, atunci cnd se lucreaz
cu baza de date (adugri, tergeri i modificri de informaii).
Baza de date este perceput de multe persoane ca fiind un simplu tabel. Acest
lucru nu este greit, atta vreme ct la studiul limbajului Excel am descoperit
tabele la care le spuneam i baze de date. ntr-adevr, acele tabele erau baze de
date foarte simple care aveau nite comenzi i funcii cu care le putem sorta, filtra
i chiar fceam unele calcule cu ele. Cu aceste baze de date puteam rezolva multe
probleme de gestionare a unor informaii.
Bazele de date clasice conin mai multe tabele care sunt legate ntre ele prin relaii
care vor fi studiate mai trziu. Exist mai multe modele de baze de date clasice:
Model de baz de date ierarhic
Model de baz de date reea

11

Baze de date

Capitolul 1

Model de baz de date relaional


Primele dou modele au numai valoare istoric, se mai folosesc foarte puin sau
deloc, aa c nu ne vom opri asupra lor. Modelul relaional este cel care se
folosete astzi datorit avantajelor pe care l prezint i care va fi studiat n
aceast carte.

Modelul de baz de date relaional


Baza de date relaional a fost conceput n anul 1969 i este azi cel mai folosit
model de baze de date n gestiunea bazelor de date. Acest model este fundamentat
pe dou ramuri ale matematicii teoria mulimilor i logica predicatelor de
ordinul nti. ntr-adevr, numele modelului provine de la termenul relaie, care
constituie o parte a teoriei mulimilor.
O concepie greit, larg rspndit, este aceea c modelul relaional i-ar fi
preluat numele de la faptul c ntre tabelele unei baze de date relaionale exist
relaii.
O baz de date relaional stocheaz datele n relaii, pe care un utilizator le
percepe ca pe nite tabele. Fiecare relaie este compus din nregistrri i cmpuri,
iar ordinea fizic a nregistrrilor sau a cmpurilor dintr-un tabel este complet
lipsit de importan, iar fiecare nregistrare a tabelului este identificat, nu dup
locul unde se afl, ci dup un cmp care conine o valoare unic. Prin urmare,
utilizatorul nu este obligat s cunoasc locaia fizic a unei nregistrri aa cum se
ntmpl la celelalte modele de baz de date (ierarhic i reea), pentru regsirea
datelor.
Modelul relaional clasific relaiile ca fiind de tip: unu la unu, unu la mai muli i
mai muli la mai muli. Aceste relaii vor fi studiate n detaliu mai trziu. O relaie
dintre dou tabele este stabilit n mod implicit prin intermediul valorilor
echivalente ale unui anumit cmp. n figura 1, tabelele tblStudenti i
tblSectii sunt corelate prin intermediul cmpului SectiaID; un anumit
student este corelat cu o secie prin intermediul unui identificator de secie identic.
Atta timp ct utilizatorul cunoate relaiile dintre tabelele incluse ntr-o baz de
date, poate avea acces la date ntr-un mare numr de moduri. De exemplu, dup
cum se vede n figura 1.1, prin intermediul acelei relaii, putem afla numele seciei
i crei faculti aparine. Dac tabelul ar conine mai multe coloane, am avea
acces la toate coloanele, aa cum vom vedea mai trziu.

12

Baze de date

Capitolul 1
tblSectii
SectiaID
1
2
3
4

Denumire
TCM
IEI
Informatica
Istorie

tblStudenti
StudentID
1
2
3
4

Facultate
Inginerie
Inginerie
Stiinte
Stiinte

Nume
Pop
Ban
Pop
Lazar

Prenume
Ioan
Lucia
Dorin
Liviu

SectiaID
1
2
3
2

Telefon
234675
234375
234076
233777

Fig. 1.1. Exemplu de tabele corelate

Regsirea datelor
Datele stocate ntr-o baz de date trebuie regsite rapid ori de cte ori este nevoie
de ele. Datele dintr-o baz de date relaional se regsesc prin intermediul unui
limbaj specializat de interogare numit SQL(Structured Query Language). SQL
este limbajul standard folosit pentru crearea, modificarea, ntreinerea i
interogarea bazelor de date relaionale. n figura 1.2 este prezentat un exemplu de
interogare SQL pe care o putem utiliza pentru a obine o list cu studenii de la
IEI.
SELECT Nume, Prenume, Telefon
FROM tblStudenti
WHERE SectiaID = 2
ORDER BY Nume, Prenume
Fig. 1.2. Exemplu de instruciune de interogare SQL

Aceast instruciune s-ar putea traduce astfel: extrage din tabelul tblStudenti
cmpurile Nume, Prenume i Telefon, nregistrrile care au valoarea
cmpului SectiaID egal cu 2, ceea ce corespunde seciei IEI. Ordoneaz lista
dup cmpul Nume.

13

Baze de date

Capitolul 1

Cele trei componente fundamentale ale unei interogri SQL le reprezint


instruciunea SELECTFROM, clauza WHERE i clauza ORDER BY. Dar
despre toate acestea vom discuta detaliat n capitolul 4.

Sistemele de gestiune a bazelor de date relaionale


Un sistem de gestiune a bazelor de date relaionale (SGBDR) este un program
software folosit pentru crearea, ntreinerea, modificarea i manipularea unei baze
de date relaionale. Numeroase programe SGBDR furnizeaz i instrumentele
necesare pentru a putea crea aplicaii destinate utilizatorilor finali care lucreaz cu
datele din baza de date. Numeroasele faciliti oferite de diferii productori
evolueaz foarte rapid, devenind din ce n ce mai performante.
Primele SGBDR-uri au fost concepute pentru sisteme de tip desktop. Acestea
presupun existena unei copii a bazei de date pe fiecare calculator care nu este un
mare avantaj, n ceea ce privete actualizarea datelor. n acest context a aprut
necesitatea amplasrii n mod centralizat a ntregii baze de date care s fie
accesat de toi utilizatorii. Aa au aprut SGBDR-urile de tip client-server n
care bazele de date se stocheaz pe un server de baze de date, iar utilizatorii
interacioneaz cu datele prin intermediul unor aplicaii rezidente pe propriul
calculator numit clientul bazei de date.
Creatorul de baze de date folosete programul client-server SGBDR pentru a crea
i ntreine programele de aplicaie de baze de date i programele accesorii pentru
utilizatorul final. Acesta implementeaz integritatea i securitatea datelor din
serverul de baze de date, avnd astfel posibilitatea de a fundamenta o diversitate
de aplicaii utilizator pe acelai set de date, fr a afecta integritatea i securitatea
datelor.
Cele mai cunoscute SGBDR-uri sunt:
Microsoft Access
Microsoft SQL Server
Oracle
MySQL
PostgreSQL
Microsoft Access este un SGBDR comercial de tip desktop, folosit pentru
gestionarea bazelor de date de dimensiuni mici i medii. Poate acoperi fr
probleme segmentul firmelor mici i mijlocii. Este sistemul de gestiune pe care l
vom studia i noi n aceast carte.

14

Baze de date

Capitolul 1

Microsoft SQL Server este un SGBDR de tip client-server care accept baze de
date foarte mari i un numr foarte mare de tranzacii i ruleaz numai pe
sistemele de operare Windows. Este soluia ideal pentru firmele mari, la un pre
de cost relativ sczut.
Oracle este liderul mondial al pieei SGBDR-urilor de tip client-server. Oracle
accept baze de date enorme i un numr imens de tranzacii. Oracle ruleaz pe
numeroase sisteme de operare, este un SGBDR complex a crui operare i
ntreinere trebuie fcute de un administrator special instruit pentru acest scop. Se
ntlnete la marile companii transnaionale, deoarece preul su este pe msura
performanelor.
MySQL este un SGBDR din categoria open-source(codul surs este pus gratuit la
dispoziia utilizatorilor) fiind unul din liderii pieei. MySQL este rapid, stabil i
accept baze de date de mari dimensiuni, dar i lipsesc cteva din caracteristicile
importante ale limbajului SQL. Versiunile viitoare i propun includerea acestor
caracteristici. Ruleaz pe mai multe sisteme de operare i este gratuit pentru
utilizarea n scopuri personale(care nu aduc un ctig).
PostgreSQL este un SGBDR din categoria open-source, fiind unul din liderii
pieei. Accept baze de date de mari dimensiuni, este recunoscut pentru setul su
bogat de caracteristici.

Dincolo de modelul relaional


Programele SGBDR au fost acceptate pe scar larg fiind utilizate n aplicaii de
afaceri concrete, precum inventarele, gestiunea pacienilor, a materialelor i
pieselor, n domeniul bancar, dar s-au dovedit a lipsi n aplicaii de genul
proiectrii asistate de calculator (CAD), sisteme informaionale geografice (GIS)
i sisteme de stocare multimedia. Ca rspuns la aceast problem au aprut dou
noi modele de baz de date: modelul orientat spre obiect i modelul relaional
obiect.
Modelul orientat spre obiect ncorporeaz toate caracteristicile unui limbaj de
programare orientat spre obiect, iar baza de date relaional este retrogradat la
statutul de magazie de date. Ideea fundamental este c dezvoltatorul bazei de
date trateaz fiecare aspect al acesteia, inclusiv setul de operaiuni care
manipuleaz datele din baza de date, din interiorul limbajului de programare a
bazei de date orientat obiect. Nu mai exist o diferen clar ntre programul de
baz de date i programul de realizare a aplicaiilor.
Dei este un pas nainte, modelul orientat spre obiect nu ntrunete consensul
tuturor specialitilor din domeniu. Viitorul va da ns verdictul n aceast
problem delicat.

15

Baze de date

Capitolul 1

Modelul relaional obiect a extins modelul bazei de date relaionale prin


ncorporarea a diferite elemente i caracteristici orientate spre obiect, precum
clase, ncapsulare i motenire. Ideea era ca aceste extensii s permit unei baze
de date relaionale s gestioneze i s manipuleze tipuri de date complexe, precum
secvene audio sau video i desene sau reprezentri grafice.
Modelul relaional obiect nc nu a fost definitivat, se mai lucreaz la el,
majoritatea specialitilor consider c aceasta este direcia corect. El este
exploatat i rafinat n continuare.
Internetul exercit o mare influen asupra modului de utilizare a bazelor de date
n cadrul organizaiilor. Multe companii i afaceri folosesc Web-ul pentru a-i
extinde baza de consumatori, iar o bun parte din datele oferite acestor
consumatori, respectiv pe care le preiau de la acetia, sunt stocate ntr-o baz de
date. Internetul a generat un limbaj numit XML (eXtensible Markup Language)
capabil s partajeze date din diferite sisteme eterogene. Muli productori de
SGBDR se orienteaz spre ncorporarea a ct mai multe caracteristici XML n
propriile produse.
Cu toate noile orientri prezentate, bazele de date relaionale pe care le vom studia
nu vor dispare n viitorul apropiat.

ntrebri pentru autoevaluare


De unde vine termenul de baz de date relaional?
Cum se stocheaz datele ntr-o baz de date relaional?
Denumii cele trei tipuri de relaii existente ntr-o baz de date relaional.
Indicai cteva avantaje ale bazelor de date relaionale.
Ce este un sistem de gestiune a bazelor de date relaionale?
Care sunt cele mai cunoscute sisteme de gestiune a bazelor de date
relaionale?

16

Baze de date

Capitolul 2

Capitolul 2. Terminologia bazelor de date relaionale


n acest capitol vom clarifica termenii folosii n teoria i practica bazelor de date
relaionale, pentru a evita confuziile fcute de unii membri implicai n procesul
de proiectare sau exploatare.

Importana terminologiei
Este important s nelegem termenii prezentai n acest capitol nainte de a
ncepe studiul bazelor de date relaionale. Proiectarea bazelor de date are
un set de termeni specifici ca, de altfel, orice profesie, meserie sau
disciplin.
Iat cteva motive care justific importana nvrii acestor termeni:
Termenii respectivi sunt utilizai pentru a exprima i defini ideile i
conceptele speciale ale modelului de baze de date relaionale. O bun
parte din terminologie deriv din ramurile matematice ale teoriei
mulimilor i respectiv logicii predicatelor de ordinul nti.
Termenii respectivi sunt utilizai pentru a exprima i defini nsui
procesul de proiectare a bazelor de date. Procesul de proiectare devine
mai clar i mult mai simplu de neles, dup ce v-ai familiarzat cu aceti
termeni.
Termenii respectivi sunt utilizai oriunde se discut despre o baz de date
relaional sau despre un program SGBDR. Vei ntlni aceti termeni n
publicaii cum ar fi reviste de comer, manuale de programare SGBDR,
suporturi de cursuri etc. De asemenea, vei auzi aceti termeni n
conversaiile ntre diferite categorii de profesioniti din domeniul bazelor
de date.

Exist patru categorii de termeni de care o s ne ocupm n acest capitol,


termeni referitori la: valoare, structur, relaie i integritate.

17

Baze de date

Capitolul 2

Termeni referitori la valoare


Date i informaii
Valorile pe care le stocm n bazele de date se numesc date. Acestea sunt
statice n sensul c rmn aceleai pn nu intervine o modificare manual
sau automat. n figura 2.1 este prezentat un exemplu de date.
George Fodor 6582421 12/05/2004
57.50
Fig. 2.1. Exemplu de date elementare

La prima vedere, aceste date sunt lipsite de sens pentru c nu ne putem da


seama ce reprezint numrul 6582421 sau celelalte, chiar dac observm c
una din valori este o dat calendaristic iar ultima este un numr zecimal.
Nu ne putem da seama pn nu prelucrm datele.
Informaiile reprezint date pe care le prelucrm ntr-un mod care le
confer semnificaie i utilitate pentru noi atunci cnd lucrm cu
Fodorsunt
6582421
12/05/2004
respectivele date.George
Informaiile
dinamice,
n sensul c se modific n
57.50
permanen dup cum se modific datele din baza de date, dar i n sensul
c pot fi prelucrate ntr-un numr nelimitat de moduri. Ideea care trebuie
reinut este c trebuie s prelucrm datele pentru a le putea transforma n
informaii cu sens.
Figura 2.2 demonstreaz un mod n care datele din exemplul precedent pot
fi prelucrate i transformate n iformaii. Datele respective au fost
manipulate nct au ajuns ntr-o factur pentru un pacient nct acum au
sens pentru oricine le citete.
George Fodor 6582421 12/05/2004
57.50
Spitalul Municipal Tg. Mures
Str. Clinicilor nr.66
Sectia Cardiologie

Consultaii

x
x

Pacient:
Cod pacient:
Data consultaiei:
Medic:

Analize

General

30.00

Snge

EKG

27.50

Urina

Ultrasunete

George Fodor
6582421
12/05/2004
dr. Hipocrate B.

Glicemie

Total plat: 57.50

George Fodor 6582421 12/05/2004


57.50
Total plat:
Fig. 2.2. Exemplu de date transformate n informaii
57.50
18
Total plat:
57.50

Baze de date

Capitolul 2

Este foarte important s nelem diferena dintre date i informaii. O baz


de date este proiectat astfel nct s furnizeze informaii semnificative
pentru orice persoan abilitat din cadrul unei firme sau organizaii. Aceste
informaii pot fi puse la dispoziie numai dac datele corespunztore exist
n baza de date i dac aceasta din urm este astfel structurat nct s
permit obinerea informaiilor respective.
Dac uitai vreodat care este diferena dintre date i informaii, reinei
urmtoarea axiom:
Datele se stocheaz, iar informaiile se regsesc.
Din pcate, exist cri comerciale n care se confund datele cu
informaiile.
Valoare nul
O valoare nul reprezint o valoare care lipsete sau care nu este
cunoscut. Deseori, valoarea nul se confund cu un zero sau unul sau mai
multe spaii albe, ceea ce este total greit, din urmtoarele motive:
Un zero poate avea mai multe semnificaii cum ar fi nivelul stocului unui
anumit produs, numrul de apariii a unui cod etc.
Dei un ir text format din unul sau mai multe spaii albe nu nseamn
nimic pentru cei mai muli dintre noi, reprezint categoric semnificaie
pentru un limbaj de interogare cum ar fi SQL. Un spaiu alb este un
caracter ca oricare altul cum ar fi a.
Un ir de lungime zero adic dou ghilimele consecutive fr spaiu ntre
ele , este de asemenea o valoare acceptabil pentru limbaje precum SQL
i poate fi semnificativ n anumite circumstane.

De menionat faptul c n practic, apar multe cazuri cnd la completarea


unui cmp al unui tabel este mpiedicat de necunoaterea, pe moment, a
valorii respective i n acest caz va apare o valoare nul. Acest cmp poate
fi completat ulterior, dup ce se afl valoarea respectiv (ex., un numr de
telefon, un cod etc.).
Principalul dezavantaj al valorilor nule este acela c pot avea efect negativ
asupra calculelor matematice, tiut fiind c rezultatul unei operaii
matematice n care este implicat o valoare nul, este o valoare nul.
Problema valorilor absente, necunoscute, precum i faptul c vor fi folosite
19

Baze de date

Capitolul 2

sau nu n expresii matematice sau funcii agregat, vor fi luate n


considerare n decursul procesului de proiectare a bazelor de date
relaionale.

Termeni referitori la structur


Tabel
n conformitate cu modelul relaional, datele dintr-o baz de date
relaional sunt stocate n relaii, care sunt percepute de utilizator sub
form de tabele. Fiecare relaie este alctuit din nregistrri (tupluri) i
cmpuri (atribute). n figura 2.3 este prezentat o structur de tabel
caracteristic.
StudentID
5001
5002
5012
5065
5032

Nume
Pop
Ban
Lazr
Ban
Pop

Prenume
Mariana
Ioan
Ana
Lucia
Dorin

Sectia
TCM
TCM
IEI
IMPI
MEC

<<alte cmpuri>>

nregistrri

Cmpuri
Fig. 2.3. O structur de tabel

Tabelele reprezint structurile eseniale dintr-o baz de date, iar fiecare


tabel reprezint ntotdeauna un singur subiect concret, cum ar fi studeni,
produse, vnzri etc. Ordinea logic a nregistrrilor i a cmpurilor din
cadrul unui tabel nu are nici o importan, iar fiecare tabel conine cel puin
un cmp cunoscut sub numele de cheie primar care identific n mod
unic fiecare nregistrare a tabelului. n figura 2.3, StudentID este cheia
primar a tabelului tblStudenti.
Datele dintr-o baz de date relaional pot exista independent de modul n
care sunt stocate fizic n calculator, datorit acestor ultime dou
caracteristici ale unui tabel. Pentru utilizator acest lucru este foarte bun,
deoarece acesta nu mai trebuie s cunoasc locaia fizic a unei nregistrri
pentru a putea regsi datele.

20

Baze de date

Capitolul 2

Subiectul pe care l reprezint un tabel dat poate fi un obiect sau un


eveniment. Cnd subiectul este un obiect, tabelul reprezint o cantitate
palpabil, precum o persoan, un produs sau un lucru oarecare. Indiferent
de tipul su, un obiect are caracteristici care pot fi stocate sub form de
date, care vor putea fi prelucrate ulterior ntr-un numr mare de moduri.
Cnd subiectul unui tabel este un eveniment, nseamn c tabelul
reprezint ceva care se produce la un anumit moment de timp i care are
caracteristici pe care dorii s le nregistrai. Exemplul clasic care se poate
da aici este tabelul cu consultaiile inute de un medic de familie. n figura
2.4 este prezentat un astfel de tabel.
PacientID
92001
97004
98023
93034
94001

Data cons.
12-1-2005
12-1-2005
12-1-2005
12-1-2005
12-1-2005

Ora cons.
8:30
9:00
9:30
10:30
11:45

Medic
Avram I.
Avram I.
Popescu D.
Popescu D.
Avram I.

Tensiune
120/80
125/80
130/82
145/90
132/86

<<alte cmpuri>>

Fig. 2.4. Tabel care reprezint un eveniment

Tabelele pot fi, ntr-o alt clasificare, de dou tipuri:


Tabele de date care furnizeaz date folosite pentru furnizarea de informaii
i reprezint tipul de tabel cel mai frecvent ntlnit ntr-o baz de date.
Datele din acest tip de tabel sunt dinamice deoarece se pot manipula
(modificare, tergere) i converti n informaii ntr-o anumit form sau
manier. Cu astfel de tabele vei lucra foarte frecvent n decursul lucrului
cu baza de date.
Tabele de validare care stocheaz date pe care le vei folosi cu scopul
precis de a implementa integritatea datelor. De obicei, un tabel de validare
conine nume de localiti, coduri de produse, categorii de activiti etc.
Datele din acest tip de tabel sunt statice, adic se modific foarte rar.

n figura 2.5 este prezentat un tabel de validare pentru seciile facultii de


inginerie.
SectieID

Denumire

11
13
12
15
19

TCM
IEI
Mecatronica
Ingineria mediului
Design

Fig. 2.5. Tabel de validare

21

Baze de date

Capitolul 2

n loc s introducem greit ntr-un alt tabel, numele unei secii, vom
introduce codul su, asigurnd n acest fel integritatea datelor.
Cmp
Un cmp reprezint cea mai mic structur din baza de date i reprezint o
caracteristic a subiectului tabelului cruia i aparine. Cmpurile sunt
structurile care stocheaz efectiv datele, care apoi pot fi regsite i
prezentate ca informaii n aproape orice configuraie pe care o putei
imagina.
Calitatea informaiilor pe care o vei obine din datele pe care le avei este
direct proporional cu timpul dedicat asigurrii integritii structurale i de
date a cmpurilor nsei.
Fiecare cmp dintr-o baz de date corect proiectat conine singur
valoare, iar numele su va identifica tipul de valoare admis. Astfel,
procesul de introducere a datelor devine foarte intuitiv. Dac vedei
cmpuri cu nume precum Nume, Prenume, Judet, Localitate, Telefon sau
Cod postal, atunci vei ti exact ce tipuri de date vei introduce n fiecare
cmp. De asemenea, va fi foarte simplu s sortai datele n funcie de jude
ori s cutai persoanele dintr-o anumit localitate a unui jude.
ntr-o baz de date slab proiectat sau proiectat inadecvat, vei ntlni n
mod caracteristic alte trei tipuri de cmpuri, dup cum urmeaz:
Un cmp multiplu (numit i cmp cu mai multe pri) care conine dou sau
mai multe elemente distincte n cadrul valorii acestuia.
Un cmp cu valori multiple (numit i cmp cu mai multe valori) care
conine mai multe apariii ale aceluiai tip de valoare.
Un cmp calculat, care conine o valoare de text concatenat sau rezultatul
unei expresii matematice.

n figura 2.6 este prezentat un tabel care conine cte un cmp din fiecare
tip amintit mai sus.

22

Baze de date

Capitolul 2

Cmp calculat

Cmp multiplu

ProdusID
5001
6023

Denumire
Planetara
Rulment

Furnizor
SC Lion
SC RPA

Pret
900
23

Cant
5
10

Valoare
4500
230

6034

Acumulat
or

500

2000

5098
5067

Bujie
Antigel

SC
Rulment
ul
SC ARC
SC Lion

12
10

100
40

1200
400

Valori multiple

Loc, Judet
Dej, Cluj
Brasov,Bra
sov
Bistrita,
Bistrita

Agent
Pop, Rusu
Danciu

Cluj,Cluj
Dej, Cluj

Danciu, Pop
Pop, Rusu

Danciu

Fig. 2.6. Tabel cu cmpuri normale, calculate, multiple

nregistrare
O nregistrare reprezint o instan unic a subiectului unui tabel.
nregistrarea este alctuit din ntregul set de cmpuri dintr-un tabel,
indiferent dac respectivele cmpuri conin sau nu valori. Datorit
modalitii de definire a unui tabel, fiecare nregistrare este definit n baza
de date prin intermediul unei valori unice a cmpului cheie primar a
nregistrrii respective. Astfel, dac avem un tabel de persoane, o
nregistrare din tabel trebuie s identifice fiecare persoan din tabel, care
este un unicat.
n figura 2.6, fiecare nregistrare reprezint un produs unic din cadrul
tabelului, iar cmpul ProdusID este folosit pentru a identifica un produs
din cadrul bazei de date. La rndul su, fiecare nregistrare include toate
cmpurile din tabel, iar fiecare cmp descrie un aspect al produsului
reprezentat de nregistrare.
nregistrrile reprezint un element cheie pentru nelegerea relaiilor dintre
tabele, deoarece va trebui s cunoatei relaia dintre o nregistrare a unui
tabel i alte nregistrri din alt tabel.

23

Baze de date

Capitolul 2

Vedere
O vedere este un tabel virtual compus din cmpuri dintr-unul sau mai
multe tabele ale bazei de date; tabelele care alctuiesc vederea sunt
cunoscute sub numele de tabele de baz. Modelul relaional i atribuie unei
vederi atributul de virtual deoarece i preia datele din tabele de baz, nui stocheaz propriile sale date. De fapt, singurele informaii referitoare la o
vedere care sunt stocate n baza de date se refer la structura vederii
respective. Numeroase programe SGBDR principale lucreaz cu vederi,
dar unele (precum Microsoft Access) le denumesc interogri salvate.
Programul SGBDR pe care l utilizai va determina dac obiectul respectiv
va fi denumit interogare sau vedere.
Vederile permit privirea informaiilor din baza dumneavoastr de date din
diferite unghiuri, furniznd o mare flexibilitate n lucrul cu datele. Putei
crea vederi ntr-o varietate de moduri, iar o vedere este util mai ales cnd
se bazeaz pe mai multe tabele corelate. ntr-o baz de date cu orare
colare, de exemplu, putei crea o vedere care sintetizeaz date din tabelele
ELEVI, CURSURI i ORARE CURSURI.
n figura 2.7 este prezentat o vedere cu situaia mprumuturilor de cri,
ale crei date au fost extrase din trei tabele: Studenti, Imprumuturi, Carti.

24

Baze de date

Capitolul 2

Studenti
StudentID
60001
60002
60003
60004

Nume
Crian
Lazr
Mocean
Mocean

Prenume
Ovidiu
Denisa
Gabriel
Olimpiu

Imprumuturi
StudentID CarteID
60001
1001
60002
1001
60003
1099
60004
1099

Carti
CarteID
1001
1099
1023
1009

Denumire
PUC
Baze de date
Fizica
Chimie

Telefon
0745-328092
0722-7575823
0744-7575939
0723-6564321

<<alte cmpuri>>
..
..
..
..

Data
3/10/2004
3/10/2004
5/10/2004
5/11/2004

Categorie
P1
P1
F1
F1

<<alte cmpuri>>
......
......
.....
..

Situatie mprumuturi (vedere)


Nume
Crian
Lazr
Mocean
Mocean

Prenume
Ovidiu
Denisa
Gabriel
Olimpiu

Denumire
PUC
PUC
Baze de date
Baze de date

Data
3/10/2004
3/10/2004
5/10/2004
5/11/2004

Fig. 2.7. Un exemplu de vedere caracteristic

Exist trei motive majore care confer importan vederilor:


Vederile permit lucrul simultan cu date preluate din mai multe tabele, ntre
care exist relaii.
Vederile permit mpiedicarea anumitor utilizatori de a vedea sau manipula
anumite cmpuri dintr-un tabel sau grup de tabele. Aceast posibilitate se
poate dovedi foarte avantajoas din punctul de vedere al securitii datelor.

25

Baze de date

Capitolul 2

Vederile se pot utiliza pentru implementarea integritii datelor, numite n


acest caz vederi de validare.

Chei
Cheile sunt acele cmpuri speciale care ndeplinesc roluri foarte bine
determinate n cadrul unui tabel, iar tipul cheii definete rolul acesteia n
interiorul tabelului. Un tabel poate conine numeroase tipuri de chei, dar
cele mai importante sunt cheia primar i cheia extern.
O cheie primar este un cmp sau un grup de cmpuri care identific n
mod unic fiecare nregistrare din cadrul unui tabel; dac o cheie primar
este compus din dou sau mai multe cmpuri, este cunoscut sub numele
de cheie primar compozit. O valoare a unei primare identific o anumit
nregistrare din ntreaga baz de date. Cheia primar impune integritatea la
nivel de tabel i faciliteaz stabilirea relaiilor cu alte tabele din baza de
date.
Reinei faptul c o cheie primar are valori unice n cadrul unui, aceasta
fiind cea mai important proprietate a acesteia. De regul, cheile primare
vor fi nite coduri numerice, uneori generate chiar de sistemul de gestiune
a bazei de date, cum ar fi sistemul Access, pe care o s-l studiem n cadrul
acestui curs i care tipul de dat AutoNumber, special gndit pentru
generarea cheilor primare.
O cheie extern dintr-un tabel este acea cheie care este cheie primar n alt
tabel. Ea nu trebuie s fie unic dup cum vei observa n urmtorul
exemplu, rolul ei este, n special, de a asigura legtura cu alt tabel. n
figura 2.8 se pot vedea o cheie primar i o cheie extern.

26

Baze de date

Capitolul 2

Cheie primar

Cheie primar
Sportivi
SportivID
8001
8002
8003

Impresari
ImpresarID
100
101
102

ImpresarID
100
101
100

Nume
Becali
Popescu
Becali

Nume sportiv
Mutu Adrian
Neaga Ioan
Chivu Cristian

Prenume
Ioan
Gic
Victor

Telefon

Telefon
0745-655482
0745-658312
0744-547212
<<alte cmpuri>>

0745-657329
0744-768432
0723-546291

Cheie extern
Fig. 2.8. Exemplu de cmpuri cheie primar i cheie extern

Se observ cum cmpul ImpresarID este cheie primar pentru tabelul


Impresari i cheie extern pentru tabelul Sportivi. Acolo unde este cheie
extern, valoarea ei se poate repeta, ceea ce este firesc, deoarece un
impresar poate avea mai muli sportivi. Cmpul ImpresarID din cele dou
tabele asigur legtura dintre ele, asigurnd n acelai timp i integritatea
datelor, adic fiecare sportiv are un impresar valabil.
Cnd determinai c ntre dou tabele exist o relaie, n mod caracteristic
stabilii relaia respectiv prelund o copie a cheii primare din primul tabel
i ncorpornd-o n structura celui de-al doilea tabel, unde devine cheie
extern. Numele de cheie extern deriv din faptul c al doilea tabel are
deja o cheie primar proprie, iar cheia primar pe care o introducei din
primul tabel este extern pentru al doilea tabel.
Dincolo de facilitatea stabilirii relaiilor dintre perechi de tabele, cheile
externe contribuie i la implementarea i asigurarea integritii la nivel de
relaie. Aceasta nseamn c nregistrrile din ambele tabele vor fi
ntotdeauna corelate n mod adecvat, deoarece valorile unei chei externe
trebuie s fie identice cu valorile existente ale cheii primare la care face
referire. O greeal frecvent care se face de ctre nceptori, este c dau
tipuri de dat diferite unor cmpuri pe care doresc s le foloseasc pentru
legtura a dou tabele.
De asemenea, integritatea la nivel de relaie permite evitarea periculoaselor
nregistrri orfane, un exemplu clasic n acest sens reprezentndu-l
27

Baze de date

Capitolul 2

nregistrarea unei comenzi fr un client asociat. Dac nu tii cine a emis


comanda, nu o putei prelucra i, evident, nu o putei factura, iar asta o s
v duc de rp vnzrile trimestriale.
Cmpurile cheie joac un rol important ntr-o baz de date relaional, iar
dumneavoastr trebuie s nvai s le creai i s le utilizai.
Index
Un index este o structur pe care un program SGBDR o pune la dispoziie pentru
mbuntirea procesului de prelucrare a datelor. Un index nu are nici o legtur
cu structura logic a bazei de date. Unicul motiv pentru care discutm despre
termenul index n acest capitol este faptul c oamenii l confund deseori cu
termenul cheie.
Index i cheie reprezint o alt pereche de termeni folosii eronat n mod frecvent
i pe scar larg n industria bazelor de date. (Mai inei minte deosebirile dintre
date i informaii?). Vei sesiza ntotdeauna diferena dintre cei doi termeni dac
reinei c, n timp ce cheile sunt structuri logice pe care la identificarea
nregistrrilor dintr-un tabel, indecii reprezint structuri fizice utilizate la
optimizarea procesului de prelucrare a datelor.
Prin folosirea indecilor, sortrile i filtrrile unei baze de date se face ntr-un
timp mult mai scurt.

28

Baze de date

Capitolul 2

Termeni referitori la relaie


Relaii
ntre dou tabele exist o relaie atunci cnd nregistrrile din primul tabel
pot fi asociate cu nregistrrile din al doilea tabel. Relaia se poate stabili
prin intermediul unui set de chei primare i chei externe sau cu ajutorul
unui al treilea tabel, numit tabel de legtur (cunoscut i sub numele de
tabel asociativ).
Figura 2.8 ilustreaz o relaie stabilit prin intermediul cheilor primare i al
cheilor externe, iar figura 2.9 exemplific o relaie stabilit cu ajutorul unui
tabel de legtur.
Studenti
StudID
6001
6002
6003
6004
6004

Nume
Pop
Szabo
Costea
Timocea
Mocean

Prenume
Remus
Zoltan
Florian
Sebastian
Vasile

Orar student(table de legtur)


StudID
6001
6002
6002
6001
6002
6003
6003
6001
6003
6001

CursID
C001
C213
C001
C213
C015
C001
C213
C015
G001
G001

OrasStudent
Reghin
Oradea
Zalau
Brasov
Fagaras

Cursuri
CursID Denumire
C001
PUC
C213
Baze de date
C032
SIM
C015
GD
G001
AutoCAD
G004
Inventor
G007
Intellicad

<<alte cmpuri>>
........
........
........
........
........
Credite
5
5
4
5
4
5
4

ProfesorID
25461
25461
56821
12843
32584
3212
25461

Fig.2.9. O relaie stabilit ntre dou tabele prin intermediul


unui tabel de legtur

29

Baze de date

Capitolul 2

O relaie este o component important a unei baze de date relaionale. O


relaie permite crearea de vederi din tabele multiple i este crucial pentru
integritatea datelor, ntruct contribuie la cantitii de date redundante i la
eliminarea datelor duplicate. Putei caracteriza o relaie n trei moduri: n
funcie de tipul relaiei dintre tabele, de maniera n care fiecare tabel
particip la relaie i de gradul de participare al fiecrui tabel.
Relaii unu cu unu
Dou tabele au o relaie unu cu unu cnd o singur nregistrare din primul
tabel este corelat cu o singur nregistrare din al doilea tabel i o singur
nregistrare din al doilea tabel este corelat cu o singur nregistrare din
primul tabel. n figura 2.10 este reprezentat o astfel de relaie.
ntr-o asemenea relaie, un tabel servete ca tabel printe, iar cellalt
ndeplinete rolul de tabel copil. Relaia se stabilete prin preluarea unei
cpii a cheii primare a tabelului printe i ncorporarea acesteia n structura
tabelului copil, unde devine o cheie extern. Acesta este un tip special de
relaie, deoarece este unicul n cadrul cruia ambele tabele pot folosi
efectiv aceeai cheie primar.
n figura 2.10 este prezentat un exemplu clasic de relaie unu la unu. n
acest caz SALARIAI este tabelul printe, iar SALARIU este tabelul
copil. Se observ c fiecare salariat din primul tabel are un singur
corespondent din al doilea tabel.
Salariai
SalariatID
100
101
102
103

Nume
Ban
Pop
Lazr
Crian

Prenume
Ioan
Dorin
Liviu
Ovidiu

Telefon
0745-646321
0723-548211
0264-542138
0740-764282

<<alte cmpuri>>
..
..
..
..

Salariu
SalariatID
100
101
102
103

Salar orar
34.50
23.00
17.45
16.00

Sporuri
10%
5%
20%
18%

30

<<alte cmpuri>>
..
..
..
..

Baze de date

Capitolul 2
Fig. 2.10. Exemplu de relaie unu la unu

Relaia unu la unu poate fi imaginat ca o rupere n dou a tabelului.


Dei cmpurile din aceste tabele pot fi combinate ntr-un singur tabel,
proiectantul bazei de date a ales s plaseze n tabelul SALARIAI
cmpurile ce pot fi vzute de orice membru al organizaiei i n tabelul
SALARIU cmpurile ce pot fi vzute doar de personalul autorizat, tiut
fiind c salariile sunt, de obicei, confideniale.
Relaii unu cu mai muli
ntre dou tabele exist o relaie unu cu mai muli cnd o nregistrare din
primul tabel poate fi corelat cu una sau mai multe nregistrri din al doilea
tabel, n timp ce o nregistrare din al doilea tabel poate fi corelat cu o
singur nregistrare din primul tabel. S studiem un exemplu generic
pentru acest tip de relaie.
Modelul printe/copil pe care l-am utilizat pentru a descrie o relaie unu
cu unu se aplic i n acest caz, partea unu a relaiei este tabelul printe,
iar tabelul din partea mai muli este tabelul copil. O relaie de tipul unu cu
mai muli se stabilete prin preluarea unei cpii a cheii primare a tabelului
printe i ncorporarea acesteia n structura tabelului copil, unde devine o
cheie extern.
Exemplul din figura 2.11 ilustreaz o relaie de tip unu cu mai muli
caracteristic.
Clienti
ClientID
9001
9002
9003
9004
9005

Nume
Pop
Ban
Lazr
Buzan
Beldean

Prenume
Dorin
Ion
Ana
Maria
Vian

<alte cmp.>
.......
.......
.......
.......
.......

Imprumuturi
ClientID
9002
9001
9004
9003
9003
9003
9002
9005
9005

Fig. 2.11. Exemplu de relaie unu cu mai muli

31

CarteID
5648
690423
6563
65323
09542
64823
75001
10045
76100

Data
....
....
....
....
....
....
....
....
....

Baze de date

Capitolul 2

O singur nregistrare din tabelul CLIENTI poate fi corelat cu una sau


mai multe nregistrri din tabelul IMPRUMUTURI, dar o nregistrare din
tabelul IMPRUMUTURI este corelat cu o singur nregistrare din tabelul
CLIENTI. Dup cum probabil ai dedus, cmpul ClientID este o cheie
extern n tabelul IMPRUMUTURI.
Relaia unu cu mai muli este cea mai obinuit relaie care exist ntre
dou tabele dintr-o baz de date i este cea mai uor de identificat. Relaia
este extrem de important din punct de vedere al integritii datelor,
deoarece ea v ajut s eliminai datele duplicate.
Relaii de tip mai muli cu mai muli
ntre dou tabele exist o relaie de mai muli cu mai muli cnd o
nregistrare din primul tabel poate fi corelat cu una sau mai multe
nregistrri din al doilea tabel i o nregistrare din al doilea tabel poate fi
corelat cu una sau mai multe nregistrri din primul tabel. O relaie din
aceast categorie se stabilete cu ajutorul unui tabel de legtur. Un tabel
de legtur faciliteaz asocierea nregistrrilor dintr-un tabel cu
nregistrrile din cellalt tabel i asigur lipsa oricror probleme la
operaiile de adugare, tergere sau modificare a datelor corelate.
Un tabel de legtur se definete prin preluarea unor cpii ale cheii primare
din fiecare tabel i utilizarea lor pentru a forma structura noului tabel. n
realitate, aceste cmpuri ndeplinesc dou roluri distincte: mpreun
formeaz cheia primar compozit a tabelului de legtur, iar separat,
fiecare poate fi asimilat unei chei externe.
O relaie de tip mai muli cu mai muli care nu este stabilit n mod
corespunztor se numete nerezolvat. Figura 2.12 prezint un exemplu
clasic i clar de relaie de tip mai muli cu mai muli nerezolvat. n acest
exemplu, o nregistrare din tabelul STUDENTI poate fi corelat cu mai
multe nregistrri din tabelul CURSURI, n timp ce o singur nregistrare
din tabelul CURSURI poate fi corelat cu mai multe nregistrri din tabelul
STUDENTI.

32

Baze de date

Capitolul 2

Studenti
StudID
6001
6002
6003
6004
6004

Nume
Pop
Szabo
Costea
Timocea
Mocean

Prenume
Remus
Zoltan
Florian
Sebastian
Vasile

<<alte cmpuri>>
........
........
........
........
........

OrasStudent
Reghin
Oradea
Zalau
Brasov
Fagaras

Cursuri
CursID
C001
C213
C032
C015
G001
G004
G007

Denumire
PUC
Baze de date
SIM
GD
AutoCAD
Inventor
Intellicad

Credite
5
5
4
5
4
5
4

ProfesorID
25461
25461
56821
12843
32584
3212
25461

Sala
208
208
209
207
207
208
208

<<alte cmpuri>>
........
........
........
........
........
........
........

Fig. 2.12. Un exemplu tipic de relaie mai muli cu mai muli


nerezolvat

Aceast relaie este nerezolvat datorit particularitii intrinseci a relaiei


de tip mai muli cu mai muli. Principala problem este urmtoarea: cum se
pot asocia cu uurin nregistrri din primul tabel cu nregistrrile din al
doilea tabel? Pentru a reformula ntrebarea folosind tabelele din figura
2.12, cum se asociaz un student cu mai multe cursuri sau un anumit curs
cu mai muli studeni? Se insereaz cteva cmpuri Student n tabelul
CURSURI sau mai multe cmpuri Curs n tabelul STUDENTI? Oricare
din aceste metode va ngreuna lucrul cu datele i va afecta n mod negativ
integritatea datelor. Cea mai bun metod const n din crearea i utilizarea
unui tabel de legtur, care va rezolva relaia de tip mai muli cu mai muli
n maniera cea mai adecvat i mai eficient. Figura 2.13 prezint
implementarea practic a cestei soluii.
Este important ca dumneavoastr s cunoatei tipul de relaie care exist
ntre tabelele dintr-o pereche, deoarece acesta determin modul n care sunt
corelate tabelele, dac nregistrrile din tabele sunt interdependente sau nu,
precum i numrul minim i maxim de nregistrri corelate care pot exista
n cadrul relaiei.

33

Baze de date

Capitolul 2

Studenti
StudID Nume
6001 Studenti
Pop
6002
Szabo
6003
Costea
6004
Timocea
6004
Mocean

Prenume
Remus
Zoltan
Florian
Sebastian
Vasile

Orar
StudID
6001
6002
6002
6001
6002
6003
6003
6001
6003
6001

CursID
C001
C213
C001
C213
C015
C001
C213
C015
G001
G001

OrasStudent
Reghin
Oradea
Zalau
Brasov
Fagaras
Cursuri
CursID
C001
C213
C032
C015
G001
G004
G007

<<alte cmpuri>>
........
........
........
........
........

Denumire
PUC
Baze de date
SIM
GD
AutoCAD
Inventor
Intellicad

Credite
5
5
4
5
4
5
4

ProfID
25461
25461
56821
12843
32584
3212
25461

Fig.2.13. Rezolvarea unei relaii de tip mai muli cu mai muli


cu ajutorul unui tabel de legtur

Tipuri de participare
Cnd stabilii o relaie ntre dou tabele, fiecare tabel particip la relaie
ntr-o manier particular. Tipul de participare pe care l atribuii unui
tabel dat determin dac n respectivul tabel trebuie s existe o nregistrare
nainte de a putea introduce nregistrri n tabelul corelat. Exist dou
tipuri de participri:
Obligatorie - tabelul trebuie s conin cel puin o nregistrare nainte de a
putea introduce nregistrri n tabelul corelat.
Opional nu este obligatoriu ca tabelul s conin vreo nregistrare
nainte de a putea introduce nregistrri n tabelul corelat.

34

Baze de date

Capitolul 2

De obicei, pentru majoritatea tabelelor, vei determina tipul de participare


dup ce definii regulile de lucru cu baza de date. n majoritatea cazurilor,
tipul de participare este evident, este de bun sim sau este n concordan
cu un anumit set de standarde.
S examinm perechea de tabele din figura 2.11, care se gsesc ntr-o
relaie unu cu mai muli. Ne propunem s stabilim tipul de participare a
celor dou tabele n aceast relaie. Pentru aceasta trebuie s rspundem la
cteva ntrebri. Putem introduce nregistrri n tabelul CLIENTI dac nu
avem nici o nregistrare n tabelul IMPRUMTURI? Rspunsul este DA,
pentru c tabelul cu potenialii clieni se completeaz la nceput, deci
tabelul IMPRUMUTURI are un tip de participare opional, pentru aceast
relaie. La ntrebarea dac putem introduce nregistrri n tabelul
IMPRUMTURI dac nu avem nici o nregistrare n tabelul CLIENTI,
rspunsul este NU, pentru c trebuie s avem cel puin un client la care s
mprumutm, deci tabelul CLIENTI are un tip de participare obligatorie,
pentru aceast relaie.
Gradul de participare
Gradul de participare determin numrul minim de nregistrri existente
ntr-un tabel al unei relaii, asociate cu o singur nregistrare a unui tabel
corelat, respectiv numrul maxim de nregistrri care pot exista ntr-un
tabel al unei relaii, asociate cu o singur nregistrare din tabelul corelat.
S lum n considerare, o relaie dintre dou tabele A i B. Se stabilete
gradul de participare pentru tabelul B prin indicarea numrului minim,
respectiv maxim de nregistrri din tabelul B, prin indicarea numrului
minim, respectiv maxim de nregistrri din tabelul B care pot fi corelate cu
o singur nregistrare din tabelul A. Dac o nregistrare din tabelul A poate
fi corelat cu minimum o nregistrare din tabelul B, respectiv cu maximum
10 nregistrri din tabelul B, atunci gradul de participare al tabelului B, la
respectiva relaie, este 1,10. (Gradul de participare se noteaz cu numrul
minim n stnga i numrul maxim n dreapta, separate prin virgul). Putei
stabili gradul de participare pentru tabelul A, n acelai mod. Putei
identifica gradul de participare, pentru fiecare tabel al unei relaii prin
determinarea modului de corelare a datelor din fiecare tabel, precum i a
modului de utilizare a datelor respective.
S lu din nou exemplul din figura 2.11, care reprezint dou tabele care se
gsesc ntr-o relaie unu cu mai muli. Dac se impune (de ctre conducere)
35

Baze de date

Capitolul 2

ca un cititor (client) s poat mprumuta ntre 1 i 4 cri, atunci gradul de


participare al tabelului IMPRUMUTURI este 1,4. Dac dorii s impunei
ca un cititor s poat mprumuta numai o carte, atunci vei indica gradul de
participare ca fiind 1,1.

Termeni referitori la integritate


Specificaii de cmp
O specificaie de cmp reprezint toate elementele unui cmp. Fiecare
specificaie de cmp ncorporeaz trei tipuri de elemente: generale, fizice i
logice.
Elementele generale reprezint informaiile fundamentale
referitoare la cmp i includ elemente precum numele cmpului,
descrierea i tabelul printe.
Elementele fizice determin modul de construire a unui cmp i
modul de reprezentare a acestuia pentru persoana care l
utilizeaz. Aceast categorie include elemente precum tipul de
date, lungimea i formatul de afiare.
Elementele logice descriu valorile stocate ntr-un cmp i includ
articole precum valoarea obligatorie, intervalul de valori i
valoarea prestabilit.
Aceste specificaii de cmp o s le completai folosindu-v de nite
formulare, care vor fi descrise n detaliu n capitolul urmtor.
Integritatea datelor
Prin integritatea datelor se nelege validitatea, consecvena i acurateea
datelor incluse ntr-o baz de date. Nu pot accentua suficient faptul c
nivelul de acuratee al informaiilor pe care le regsii din baza de date este
direct proporional cu nivelul de integritate al datelor pe care l impunei
bazei de date. Integritatea datelor reprezint unul dintre cele mai
importante aspecte ale procesului de proiectare a bazelor de date i nu v
este permis s-l subestimai, s-l trecei cu vederea i nici mcar s-l
neglijai parial. Trebuie s fii contient de faptul c dac nu respectai
regulile de integritate, suntei pasibili de a obine informaii cu grave erori,
care sunt greu de depistat. Gndii-v numai la implicaiile posibile atunci
36

Baze de date

Capitolul 2

cnd baza dumneavoastr de date e folosit pentru tranzacii comerciale


sau financiare.
Exist patru tipuri de integritate a datelor pe care le vei implementa pe
durata procesului de proiectare a bazelor de date. Trei dintre acestea se
bazeaz pe diferite aspecte ale structurii bazei de date i sunt denumite n
conformitate cu zona (nivelul) la care opereaz. Cel de-al patrulea tip de
integritate a datelor se bazeaz pe modul n care o organizaie i percepe i
i utilizeaz datele.
n continuare vor fi prezentate descrierile fiecrui tip de integritate.
Integritatea la nivel de tabel asigur lipsa nregistrrilor duplicate
n interiorul tabelului i faptul c acel cmp care identific fiecare
nregistrare din tabel este unic i nu are niciodat valoare nul.
Integritatea la nivel de cmp asigur faptul c structura fiecrui
cmp este solid, c valorile din fiecare cmp sunt valide,
consecvente i precise, precum i c se asigur o definire
consecvent, n ntreaga baz de date, a cmpurilor de acelai tip
(Cod postal, de exemplu).
Integritatea la nivel de relaie (cunoscut i sub numele de
integritate referenial) asigur soliditatea relaiei dintre dou
tabele, precum i faptul c nregistrrile din tabele sunt
sincronizate ori de cte ori se introduc, se actualizeaz sau se
terg date din oricare dintre cele dou tabele.
Reguli de desfurare a activitii impun restricii sau limitri
asupra anumitor aspecte ale bazei de date, pe baza modalitilor
n care o organizaie i percepe i i actualizeaz datele. Aceste
restricii pot afecta aspecte ale proiectrii bazelor de date, precum
i intervalul i tipurile de valori stocate ntr-un cmp, tipul i
gradul de participare a fiecrui tabel n cadrul unei relaii, precum
i tipul de sincronizare utilizat pentru integritatea la nivel de
relaie, n anumite relaii.
ntrebri pentru autoevaluare
1. De ce este important terminologia?
2. Care sunt cele patru mari categorii de termeni?
3. Care este diferena dintre date i informaii?
4. Ce reprezint valoarea nul i de ce este important?
37

Baze de date

Capitolul 2

5. Care sunt principalele structuri ale unei baze de date?


6. Denumii cele dou tipuri de tabele?
7. Ce este o vedere?
8 .Care este diferena dintre o cheie i un index?
9. Care sunt cele trei tipuri de relaii care pot exista ntre dou tabele?
10. Ce este o specificaie de cmp?
11. Care sunt cele trei grupe de elemente ale unei specificaii de cmp?
12. Ce este integritatea datelor? Care sunt tipurile de integritate?

38

Baze de date

Capitolul 3

Capitolul 3. Proiectarea bazelor de date relaionale


Acest capitol va defini paii prin care trebuie s trecem pentru a proiecta corect o
baz de date relaional. Cunotinele dobndite v vor permite s putei proiecta
singuri o astfel de baz de date.

Acum cnd am vzut din ce e format o baz de date, cnd cunoatem i


nelegem termenii bazelor de date relaionale, e momentul s trecem la
proiectarea acestora. A nelege cum se proiecteaz o baz de date
relaional nu este foarte complicat, e cu mult mai simplu dect ne
imaginm. Totui, este foarte important s avei o idee de ansamblu cu
privire la procesul de proiectare a bazelor de date relaionale, precum i o
imagine general a etapelor pe care le implic procesul respectiv.
nainte de a implementa o baz e date, aceasta trebuie proiectat, chiar
dac este una mai simpl. De menionat faptul c indiferent de baza de date
proiectat, trebuie parcuri aceeai pai sau etape. Acestea sunt:
Etapa 1 Definirea unei declaraii de intenie i a obiectivelor misiunii;
Etapa 2 Analiza bazei de date curente;
Etapa 3 Crearea structurilor de date;
Etapa 4 Determinarea i instituirea relaiilor ntre tabele;
Etapa 5 Determinarea i definirea regulilor de desfurare a activitii;
Etapa 6 Determinarea i definirea vederilor;
Etapa 7 Verificarea integritii datelor.

Trebuie s mai menionez faptul c ntregul proces de proiectare se face


fr ajutorul vreunui program, calculatorul este folosit numai la editarea
documentelor acestui proces, aa cum vom vedea mai departe i la orele de
laborator.
n continuare se vor detalia etapele de proiectare a unei baze de date
relaionale.
39

Baze de date

Capitolul 3

Etapa 1 Definirea unei declaraii de intenie i a


obiectivelor misiunii
Prima faz n procesul de proiectare a bazelor de date const din definirea
unei declaraii de intenie i a obiectivelor misiunii bazei de date. Aceast
declaraie stabilete finalitatea bazei de date i ofer o orientare distinct
pentru activitatea de proiectare.
Fiecare baz de date este creat cu un anumit rost, fie pentru rezolvarea
unei anumite probleme de afaceri, gestiunea unor tranzacii zilnice,
gestiunea unei magazii, fie pentru a fi utilizat ca parte a unui sistem
informaional. Destinaia bazei dumneavoastr de date este identificat i
definit ntr-o declaraie de intenie. Aceasta contribuie la asigurarea
dezvoltrii unei structuri de baze de date adecvate, precum i identificarea
acelor date care duc la atingerea scopului propus.
Pe lng declaraia de intenie, n aceast etap trebuie definite i
obiectivele misiunii. Obiectivele misiunii sunt declaraii care reprezint
sarcinile generale pe care utilizatorii le pot ndeplini folosind baza de date.
Aceste obiective sprijin i completeaz declaraia de intenie, determinnd
n acelai timp diferitele aspecte ale structurii bazei de date. Obiectivele
misiunii se mai pot numi i caiet de sarcini, termen nc folosit pentru
definirea cerinelor beneficiarului.
Declaraia de intenie i obiectivele misiunii fiind documente foarte
importante n proiectarea unei baze de date se pune ntrebarea, cine
elaboreaz aceste documente?
Declaraia de intenie este elaborat de dezvoltatorul bazei de date (Dvs.)
mpreun cu conductorul(patronul) firmei i personalul de conducere
care este responsabil de definirea acesteia. Este necesar participarea
celor dou pri pentru a se putea ajunge la o exprimare corect care
s fe neleas la fel att de dezvoltator ct i de beneficiar, altfel s-ar
putea ajunge la situaii de genul nu asta am cerut sau eu altceva
am neles din aceast fraz.
Obiectivele misiunii sunt elaborate de dezvoltatorul bazei de date (Dvs.)
mpreun cu personalul de conducere i utilizatorii finali (cei care vor
lucra efectiv cu aplicaia). Aceast componen este necesar pentru
c utilizatorii finali pot avea idei valoroase pentru proiectarea corect
a bazei de date.

40

Baze de date

Capitolul 3

Compunerea unei declaraii de intenie


O declaraie de intenie bun este succint i la obiect. Declaraiile vagi sau
ambigui nu fac altceva dect, mai degrab, s ascund scopul bazei de
date.
Iat o declaraie de intenie bun:
Rolul bazei de date Clieni/Furnizori este de a ine la zi situaiile de pli i
ncasri, precum i de a furniza situaii concrete referitoare la un anume
client sau furnizor, ntr-un anumit interval de timp sau la o anumit dat.
Aceast declaraie este foarte general, nu conine date inutile, este scurt
i se vede clar la ce va fi folosit: s furnizeze informaii despre starea unui
client sau furnizor, att de importante n activitatea unei firme. Facei
analogia dintre o declaraie de intenie i o lumnare cu care traversm un
tunel ntunecos, adic lumnarea nu ne d amnunte despre cum s
traversm tunelul dar ne ghideaz spre captul lui.
Iat un exemplu de declaraie de intenie formulat defectuos:
Rolul bazei de date a firmei SC AZUR SRL const din a pstra evidena
aplicaiilor pentru utilizarea terenurilor, pstrarea datelor cu privire la
solicitani, pstrarea unei nregistrri a tuturor audierilor, a tuturor
deciziilor, a tuturor apelurilor, pstrarea datelor referitoare la angajaii
departamentului i ntreinerea datelor n vederea utilizrii generale n
cadrul biroului.
Aceast declaraie de intenie are urmtoarele neajunsuri:
este prolix, adic nu este succint i la obiect;
finalitatea bazei de date nu este clar; este astfel scris nct este
dificil de identificat finalitatea bazei de date;
descrie numeroase operaii concrete, care nu-i au rostul.
Cum am putea corecta aceast declaraie de intenie? Iat un exemplu:
Rolul bazei de date a firmei SC AZUR SRL const din a pstrarea datelor
utilizate de biroul judectorului de instrucie pentru luarea de decizii
privind solicitrile de utilizare a terenurilor trimise de cetenii judeului X.

41

Baze de date

Capitolul 3

Se observ c finalitatea bazei de date a devenit mult mai clar, s-au


eliminat operaiile i nu d impresia c ar fi incomplet.
Compunerea unei declaraii de intenie presupune din partea
dumneavoastr, a dezvoltatorului purtarea de discuii cu patronul sau
managerul societii respective, pentru aflarea de informaii despre aceasta,
profilul ei de activitate etc. Deci, prima discuie cu patronul apoi cu ceilali
membrii ai conducerii sau ali specialiti indicai de patron. Ai putea s v
ntrebai de ce atta zarv pentru una sau dou fraze pe care le conine
declaraia de intenie? Nu uitai c declaraia de intenie este sinteza unor
discuii, preri contradictorii, opinii ale mai multor persoane i c ea
trebuie s fie lumina cluzitoare pentru finalizarea proiectului bazei de
date.
Cel mai important aspect care trebuie reinut este acela c declaraia de
intenie trebuie s fie logic pentru dumneavoastr (dezvoltatorul bazei de
date) i beneficiarii bazei de date. Tipul de declaraii difer de la un grup
de persoane la altul, iar formularea depinde mult de terminologia specific
domeniului de activitate. Declaraia dumneavoastr de intenie este
complet atunci cnd conine o propoziie care descrie finalitatea concret
a bazei de date, care este neleas i aplicat de toate prile implicate.
Definirea obiectivelor misiunii
Obiectivele misiunii sunt declaraii care reprezint sarcinile generale
acceptate de datele pstrate n baza de date. Fiecare obiectiv reprezint o
singur sarcin. Obiectivele misiunii furnizeaz informaii pe care le vei
folosi n decursul procesului de proiectare a bazei de date. De exemplu,
obiectivele misiunii permit definirea structurii tabelelor, a specificaiilor de
cmp, a caracteristicilor de relaie i a vederilor. De asemenea, v ajut s
impunei integritatea datelor i s definii regulile de desfurare a
activitii. n final, obiectivele misiunii sunt de natur s ndrume
demersurile de dezvoltare i asigur faptul c structura final a bazei de
date permite ndeplinirea declaraiei de intenie.
Un obiectiv de misiune bine scris reprezint o propoziie cu caracter
declarativ, care definete fr echivoc o sarcin de ordin general i care
este lipsit de detalii inutile. Un obiectiv se exprim n termeni generali,
succint, la obiect i fr ambiguiti. Iat cteva exemple de obiective de
misiune caracteristice:
42

Baze de date

Capitolul 3

Dorim s pstrm informaii complete despre studeni.


Dorim s pstrm evidena tuturor facturilor emise.
Dorim s pstrm evidena tuturor recepiilor.
Dorim s ne asigurm c un agent de vnzri nu rspunde de mai mult
de 15 clieni.
Dorim s pstrm evidena tuturor reparaiilor mainilor din dotare.
Dorim s generm agende cu numerele de telefon ale angajailor.

Dup cum se observ, obiectivele prezentate sunt foarte clare i uor de


neles. Fiecare obiectiv reprezint o sarcin unic de ordin general i
definete clar sarcina respectiv, fr detalii inutile. De exemplu, ultimul
obiectiv de misiune prezentat n lista anterioar indic faptul c se dorete
generarea unor liste cu angajai nu i modul n care vor fi generate. Nu este
necesar indicarea modalitii de generare a listelor de angajai, deoarece
acest aspect face parte din procesul de dezvoltare a aplicaiei.
De reinut c finalitatea unui obiectiv de misiune const din definirea
diferitelor structuri din compoziia bazei de date i din orientarea direciei
generale a dezvoltrii bazei de date.
Dac un obiectiv de misiune reprezint mai multe sarcini generale, acesta
va trebui descompus n dou sau mai multe obiective de misiune.
n concluzie, aceast etap are ca rezultat un document care ne spune de ce
trebuie s proiectm baza de date (declaraia de intenie) i cam ce
probleme rezolvm cu ea (obiectivele misiunii).
ntrebri pentru autoevaluare
1. Ce este o declaraie de intenie ?
2. Indicai dou caracteristici ale unei declaraii de intenie bine scrise.
3. Dai exemple de declaraii de intenie.
4. Cnd se consider finalizat o declaraie de intenie?
5. Ce este un obiectiv de misiune?
6. Indicai dou caracteristici ale unui obiectiv de misiune bine scris.
7. Dai exemple de obiective de misiune.
8. Cine concepe declaraia de intenie i obiectivele misiunii?
43

Baze de date

Capitolul 3

Etapa 2 - Analiza bazei de date curente


nainte de a ncepe proiectarea noii noastre baze de date trebuie s fim contieni
c nu suntem pe un pmnt virgin, c naintea noastr s-au mai folosit baze de
date, s-au manipulat informaii, aa c este nelept s vedem ce exist pentru a
putea prelua unele informaii. De multe ori chiar exist o baz de date care a fost
proiectat dup posibilitile de atunci. Aceast baz de date poate fi folosit ca
resurs pentru noua baz de date.
Fiind n etapa 2-a de proiectare, deja tii obiectivele pe care trebuie s le
ndeplineasc noua baz de date. Pentru v face o imagine despre organizaie
(firm) i informaiile cu care lucreaz, va trebui s rspundei la urmtoarele
ntrebri:

Ce tipuri de date folosete organizaia?


Cum folosete organizaia datele respective?
Cum gestioneaz i pstreaz organizaia datele respective?
Rspunsurile la aceste ntrebri, v ofer informaii vitale, pe care le putei
utiliza eficient n proiectarea bazei de date care rspunde cel mai bine
cerinelor organizaiei. Actorii acestei etape sunt, pe de o parte
dezvoltatorul bazei de date (cel care pune ntrebri i prelucreaz
rspunsurile) i beneficiarii (cei care rspund la ntrebri). Este foarte
probabil ca organizaia s utilizeze un tip sau altul de baz de date care ar
putea fi asociat cu una din urmtoarele categorii:
Baze de date pe suport de hrtie sunt formate din diferite formulare i
documente manuscrise stocate n dosare. Dosarele sunt identificate cu
ajutorul unor coduri scrise pe ele, apoi sunt puse n fiete prin intermediul
unei scheme de codificare, n funcie de dimensiunea bazei de date. Aceste
baze de date sunt mai dificil de neles, de aceea este necesar conlucrarea
cu persoane din firm care lucreaz efectiv cu aceste informaii.
Baze de date motenite sunt acele baze de date care au existat i au fost
folosite mai muli ani. Ele sunt alctuite din diferite tipuri de structuri de
date i ecrane de interfa cu utilizatorul, care se gsesc toate ntr-un
calculator personal. Randamentul, funcionalitatea i eficiena structurilor
i ecranelor sunt extrem de dependente de limbajul de programare i
programele de gestiune a bazelor de date folosit. n general, structurile i
44

Baze de date

Capitolul 3

ecranele sunt nefinisate conform standardelor moderne, deoarece au fost


create atunci cnd aceste standarde nu existau.
Baze de cunotine umane se bazeaz pe memoria unuia sau mai multor
angajai din cadrul organizaiei. Aceste persoane posed un anumit volum
de informaii (de exemplu date despre clieni, furnizori sau detalii despre
un anumit produs) care sunt foarte importante pentru derularea activitii
organizaiei respective. Aceste informaii trebuie interceptate n vederea
introducerii lor n baza de date pe care o proiectai.
Obiectivul analizei dumneavoastr const n a determina tipul de date pe
care le folosete organizaia, modul n care le gestioneaz i pstreaz,
modul n care le vizualizeaz i le utilizeaz. n decursul analizei vei trece
n revist diferitele moduri n care organizaia i colecteaz i prezint
datele, dup serii de discuii purtate cu utilizatorii direci i cu personalul
de conducere.
Cum se procedeaz? Informaiile pe care le-ai adunat le folosii pentru a
sintetiza o list iniial de cmpuri. Apoi rafinai aceast list pentru
eliminarea cmpurilor duplicate i a celor calculate i plasarea acestora din
urm ntr-o list separat, care va fi folosit mai trziu n procesul de
proiectare. Lista rafinat constituie necesitile informaionale ale
organizaiei respective i furnizeaz un punct de nceput pentru proiectarea
unei noi baze de date.
Dup cum se tie, nimic nu este niciodat finalizat, aa c nici lista noastr
de cmpuri, orict de rafinat ar fi, va fi modificat de multe ori. Dup ce
ai finalizat lista de cmpuri, trimitei-o utilizatorilor i personalului de
conducere, pentru o examinare succint i posibile modificri. ncurajai
opiniile celorlali i luai n considerare sugestiile lor de modificare.
n concluzie, aceast etap se va ncheia cu un document care conine o
list preliminar de cmpuri i o list de cmpuri calculate.

ntrebri pentru autoevaluare


1. n ce const analiza bazei de date curente?
2. Care sunt cele trei surse pe care le analizm?
3. Care este rolul dezvoltatorului i al beneficiarului?
45

Baze de date

Capitolul 3

4. Cum se finalizeaz aceast etap?

Etapa 3 - Crearea structurilor de date


n aceast etap se definesc tabelele cu cmpurile lor, se stabilesc cheile i
se stabilesc specificaii pentru fiecare cmp.
Tabelele sunt primele structuri care se definesc ntr-o baz de date.
Determinarea diferitelor subiecte pe care le vor reprezenta tabelele se
execut pe baza obiectivelor misiunii, pe care le-ai determinat n timpul
primei faze a procesului de proiectare i a necesitilor de date pe le-ai
adunat pe durata celei de-a doua faze. n principiu, un subiect trebuie s se
regseasc ntr-un tabel, care la rndul su conine un numr de cmpuri
care definesc complet acel subiect.
Cum se procedeaz? Iat paii care vor trebui parcuri:
Se face o list preliminar cu toate tabelele identificate;
Fiecrui tabel i se definesc cmpurile;
Se stabilesc cheile adecvate pentru fiecare tabel, principala grij
fiind aceea ca fiecare tabel s aib cheie primar corect definit.
Aceast cheie identific n mod unic fiecare nregistrare din tabel;
Pasul final al acestei etape const n stabilirea specificaiilor de
cmp aferente fiecrui cmp al bazei de date.
Dup ce au fost parcuri aceti pai se vor purta discuii cu utilizatorii i
personalul de conducere pentru a verifica nc o dat specificaiile de cmp
stabilite. n aceast faz pot apare mici modificri, fie la componena
cmpurilor unui tabel sau la specificaiile de cmp.

Definirea listei finale de tabele


Dup analizarea listei de tabele i a discuiilor cu viitorii utilizatori ai bazei
de date pe care o proiectai, vei putea defini o list final de tabele.
Aceast list trebuie s conin nou noi elemente i anume:
46

Baze de date

Capitolul 3

Tipul tabelului tabel de date, tabel de legtur, tabel subset sau


tabel de validare;
Descrierea tabelului care cuprinde o definire clar a subiectului
reprezentat de tabel i precizeaz de ce este important acest
subiect pentru organizaia care utilizeaz baza de date. Exist
cteva principii de baz care v ghideaz n descrierea tabelului.
n continuare vor fi prezentate cteva principii sau linii directoare legate de
numele pe care l dai tabelelor i cmpurilor.

Iat cteva linii directoare care v vor ajuta s alegei numele tabelelor:
Creai un nume unic, descriptiv, care s fie semnificativ pentru
ntreaga organizaie. Utilizarea numelor unice v ajut s v
asigurai c fiecare tabel reprezint clar un subiect diferit i c
toat lumea va nelege ce reprezint tabelul. Alegei nume
suficient de descriptive pentru a fi nelese de la sine. ntretinere
aparate este un nume bun i descriptiv.
Creai un nume care identific cu precizie, clar i fr
ambiguiti subiectul tabelului. Numele vagi sau ambigue indic
de obicei faptul c tabelul reprezint mai mult de un subiect, ceea
ce nu este de dorit. Cnd ntlnii astfel de nume, identificai
subiectele reprezentate cu adevrat de tabel, apoi tratai fiecare
subiect ca tabel separat. Date este un exemplu de nume de tabel
ambiguu, care poate nsemna orice fel de date, referitoare la
facturi, persoane, aparate, parametri tehnologici etc.
Utilizai numrul minim de cuvinte necesar comunicrii
subiectului tabelului. Orice persoan din organizaie trebuie s
poat nelege ce reprezint un tabel, fr a citi descrierea
acestuia. Cu toate c obiectivul dumneavoastr este de a crea un
nume ct mai scurt, nu este indicat s folosii un nume ca de
exemplu TD_1, care este exagerat de scurt i genereaz
neclaritate.
Nu folosii cuvinte care comunic anumite caracteristici fizice. n
numele tabelelor evitai folosirea unor cuvinte ca fisier, tabel,
cmp, deoarece ele ar putea introduce un grad de confuzie de
care nu avei nevoie.
47

Baze de date

Capitolul 3

Nu folosii acronime i abrevieri. Acronimele sunt greu de


descifrat, abrevierile rareori reuesc s comunice subiectul unui
tabel, iar mpreun ncalc primul principiu prezentat.
Folosii forma de plural a numelui. Dup cum tii, un tabel
reprezint un singur subiect, care poate fi un obiect sau
eveniment. Putei extinde aceast definiie spunnd c un tabel
reprezint o colecie de obiecte sau evenimente similare. Prin
urmare, putei da nume de tabel de forma Calculatoare sau
Consultatii.
Evitai folosirea diacriticelor n numele de tabele. Diacriticele ,
, , , pot influena negativ dezvoltarea aplicaiilor de baz de
date, deoarece unele funcii ar putea s nu neleag aceste
caractere speciale, caracteristice numai limbii romne.
Pentru descrierea unui tabel inei seam de urmtoarele principii:
Includei un enun care s defineasc cu exactitate tabelul. Din
descrierea tabelului oricine ar trebui s poat determina uor
identitatea acestuia, fr confuzii sau ambiguiti. Iat o definiie
de tabel cruia i lipsete precizia:
Furnizori companii care ne livreaz materii prime i
materiale.
Ce se ntmpl dac firma (o brutrie) primete ingrediente i de
la fermierii locali, care nu sunt companii? Iat o definiie
corespunztoare:
Furnizori persoane i organizaii care ne livreaz materii
prime i materiale.
Acest enun poate fi utilizat ca definiie de tabel n descrierea
unui tabel.
Includei un anun care explic de ce acest tabel este important
pentru organizaie. Un tabel conine date ce sunt adunate,
ntreinute, manipulate i preluate de ctre organizaie pentru un
anumit motiv. Enunul trebuie s explice de ce respectivele date
sunt importante pentru organizaie.
Compunei o descriere care s fie clar i succint. Evitai
greeala obinuit de a enuna din nou sau reformula numele
tabelului n descrierea acestuia, ca n exemplul urmtor:
48

Baze de date

Capitolul 3

Orar Student orarul unui student.


Evitai s fii laconic. Prin orar se pot nelege multe. Descrierea
de mai sus nu este de mare folos pentru oricine din organizaie.
Iat un exemplu de descriere, care este destul de lung i ofer
mai mult informaie dect e necesar:
Orar Student toate cursurile care vor fi urmate de ctre un
student (inclusiv zile, ore i titularul de curs) pe parcursul
unui an colar. Datele din acest tabel sunt importante deoarece
permit studentului s cunoasc numele, momentul i locul n
care se presupune c se va desfura cursul. De asemenea,
studentul va cunoate att durata cursului, ct i numele
profesorului care l pred.
Toat aceast definiie poate fi reformulat mai clar i mai
succint, astfel:
Orar Student cursurile pe care studentul trebuie s le
urmeze n anul colar curent. Informaia oferit de acest tabel
ajut studentul la gestionarea timpului iar colii s realizeze
statistici despre cursuri, studeni, sli i profesori. Prima
propoziie din acest tabel ofer definiia tabelului, iar a doua de
ce este important pentru organizaie (coal).
n descrierea tabelului nu includei informaii care in de
implementare, ca de exemplu modul n care sau locul unde este
folosit tabelul. Evitai enunuri care indic modul specific de
utilizare a tabelului sau cum l vei accesa fizic.
Nu realizai o descriere care face trimitere la descrierea unui alt
tabel. Fiecare tabel trebuie s aib o descriere proprie i
independent de orice alt descriere a unui alt tabel.
Dup ce ai definitivat lista de tabele, urmeaz, n mod firesc, ca fiecrui
tabel s i se asocieze un numr de cmpuri.
Asocierea cmpurilor fiecrui tabel
Etapa 2-a s-a finalizat cu o list de cmpuri. Atribuirea cmpurilor la un
tabel este un proces relativ simplu: determinai care cmpuri reprezint cel
mai bine caracteristicile subiectului unui tabel i atribuii aceste cmpuri
49

Baze de date

Capitolul 3

respectivului tabel. Repetai aceast procedur pentru toate tabelele din


lista final de tabele. Se poate ntmpla ca un cmp sau un set de cmpuri
s fie cerut de mai multe tabele, aceasta este un lucru acceptat.
Observaie important!! Suntei n faza de proiectare a bazei de date i nu
avei nevoie dect de hrtie i creion pentru a v face treaba. Cnd lucrai
la un proiect de baze de date, primul lucru pe care trebuie s-l facei este
achiziia unui dosar plic n care s inei toate listele pe care le-ai scris,
schiele i notaiile care se vor aduna. Se va trece la calculator numai
dup ce avei proiectul complet al bazei de date. De altfel, n cadrul
acestui curs o s gsii un studiu de caz n care se proiecteaz o baz de
date.
ncepei acest proces lund o foaie de hrtie (A4) aezat culcat
(landscape). n partea de sus a foii scriei numele fiecrui tabel din lista
final de tabele, avnd grij s lsai suficient spaiu pentru a ncape
numele cmpurilor pe care le vei scrie sub ele (figura 3.1).

Studenti
Nume
Prenume
Data nasterii
.........

Discipline
Denumire
Credite
Profesor
........

Profesori
Nume
Prenume
Grad didactic
........

.....

Fig. 3.1. Crearea unei foi pentru scrierea structurilor de tabel

Practica spune c n aceast faz tabelele nu au nc o structur definitiv,


de aceea trebuie analizat n continuare aceast structur, mai ales c avem
imaginea de ansamblu a tuturor tabelelor. O prim problem ar fi
verificarea numelor cmpurilor care au primit nume dup inspiraia de
moment, de aceea trebuie s dm nume cmpurilor dup nite criterii sau
principii.
Iat cteva principii pe care le putei folosi pentru crearea numelor de
cmpuri:
Creai un nume unic, descriptiv, care s aib sens pentru
ntreaga organizaie. Un nume de cmp trebuie s apar o
50

Baze de date

Capitolul 3

singur dat n toat baza de date; singura excepie de la aceast


regul apare n cazul n care cmpul servete la stabilirea unei
relaii ntre dou tabele. Asigurai-v c numele este suficient de
descriptiv pentru a comunica exact nelesul cmpului pentru
oricine l vede.
Creai un nume care s identifice cu precizie, clar i fr
ambiguiti caracteristica reprezentat de cmp. Numr de
telefon este un exemplu clasic de nume de cmp ambiguu pentru
c nu tim la ce telefon se refer, la cel de acas, de la birou sau
la telefonul mobil. nvai s fii exact. Acest nume de cmp ar
putea s fie foarte exact dac ar avea numele Numar telefon
acasa sau Numar telefon birou.
Utilizai numrul minim de cuvinte necesar comunicrii
nelesului caracteristicii reprezentate de cmp. Este bine s
evitai numele de cmpuri lungi, dar n acelai timp ar fi bine s
evitai utilizarea unui singur cuvnt ca nume de cmp, dac acel
cuvnt este necorespunztor. De exemplu Angajare este prea
scurt pentru un nume de cmp, iar Data la care a fost angajata
persoana este mult prea lung! ns Data angajarii este un nume
de cmp foarte bun.
Nu folosii acronime, iar abrevierile trebuie utilizate judicios.
Acronimele pot fi greu de descifrat i deseori duc la nenelegeri.
Imaginai-v un cmp CAD-UPM. Ce ai nelege din aceast
denumire? Abrevierile se pot folosi doar dac mbuntesc
numele cmpului, o abreviere nu trebuie s fac ambiguu un
nume de cmp.
Utilizai forma de singular a numelor. Un cmp cu nume de
plural, cum ar fi Functii, implic faptul c acel cmp ar putea
conine dou sau mai multe valori pentru o nregistrare dat, ceea
ce nu e de loc o idee bun. Un nume de cmp este la singular
deoarece el reprezint o singur caracteristic a subiectului
tabelului cruia i aparine.
innd cont de aceste principii, reluai fiecare tabel i vedei dac nu
cumva putei aduce mbuntiri la vreunul din numele de cmpuri.
Mai departe se vor prezenta elementele unui cmp ideal pentru a ne ajuta
s rezolvm anomaliile legate de cmpuri.
51

Baze de date

Capitolul 3

Utilizarea unui cmp ideal pentru rezolvarea anomaliilor


Cu toate c n lista preliminar de cmpuri ai identificat cu atenie
cmpurile, este foarte posibil s fi creat cteva cmpuri ce ar putea pune
probleme n structura tabelului. Cmpurile definite neglijent pot duce la
apariia datelor duplicate sau a datelor redundante i ele pot fi dificil de
utilizat. Dac nu cunoatei semnele de avertizare, v va fi dificil s v dai
seama dac vreunul dintr-un tabel va provoca probleme.
Cea mai bun cale de identificare a cmpurilor ce ar putea crea probleme
este s determinai dac respectivele cmpuri respect elementele
cmpului ideal. Aceste elemente constituie un set de principii pe care le
putei utiliza pentru a crea structuri solide de cmpuri i pentru a depista
uor cmpurile neglijent proiectate.
Iat elementele cmpului ideal:
Reprezint o caracteristic distinct a subiectului tabelului. Dup
cum tii, un tabel reprezint un anumit subiect, care poate fi un
obiect sau un eveniment. Cmpul ideal reprezint o caracteristic
distinct a respectivului obiect sau eveniment.
Conine doar o singur valoare. Un cmp care poate stoca dou
sau mai multe apariii ale aceleiai valori este cunoscut cmp cu
mai multe valori. Cmpul ideal nu conine dect o singur
valoare.
Nu poate fi descompus n elemente mai mici. Un cmp care poate
stoca dou sau mai multe elemente distincte n interiorul unei
valori este cunoscut drept cmp cu mai multe pri. Similar
cmpului cu mai multe valori, acest tip de cmp provoac
probleme atunci cnd ncercai s editai sau s sortai datele din
interiorul lui. Aceste probleme nu apar la cmpul ideal deoarece
acesta reprezint o caracteristic unic, distinct a subiectului
tabelului cruia i aparine.
Nu conine o valoare calculat sau concatenat. Valorile
cmpurilor dintr-un tabel trebuie s fie independente, adic
valoarea unui cmp anumit cmp s nu depind de valoarea altor
cmpuri. Un cmp a crui valoare depinde de valorile altor
cmpuri se numete cmp calculat. Un astfel de cmp nu se
actualizeaz automat cnd se schimb o valoare a unui cmp
implicat, ceea ce devine o responsabilitate nedorit a
52

Baze de date

Capitolul 3

utilizatorului sau programului aplicaiei de baz de date s


actualizeze aceste cmpuri. Din aceast cauz trebuie s v
ocupai separat de cmpurile calculate, n cadrul rapoartelor.
Este unic n interiorul structurii ntregii baze de date. Singurele
cmpuri duplicate care apar ntr-o baz de date corect proiectat
sunt cele care stabilesc relaiile dintre tabele.
Stabilirea cheilor pentru fiecare tabel
Suntem n situaia n care am creat structurile de tabele, respectnd anumite
principii care sunt garania unui proiect bun. Dup cum se tie, fiecare
tabel trebuie s aib o cheie primar. Imediat vei afla c exist tipuri
diferite de chei, fiecare dintre acestea avnd un rol particular n interiorul
bazei de date. n timpul acestei etape vor fi atribuite toate cheile, mai puin
una (care o vei stabili ulterior cnd stabilii relaiile ntre tabele).
Cheile sunt importante pentru o structur de tabel din urmtoarele motive:
Cheile ne asigur c fiecare nregistrare dintr-un tabel este
identificat cu precizie. Dup cum se tie, un tabel reprezint o
colecie unic de obiecte sau evenimente asemntoare. Colecia
este compus din setul complet de nregistrri din interiorul
tabelului, iar, n interiorul acestei colecii, fiecare nregistrare
reprezint o instan unic a subiectului tabelului. Avei nevoie de
un mijloc de identificare cu precizie a fiecrei instane, iar o cheie
este instrumentul care v permite s facei acest lucru.
Cheile ajut la stabilirea i impunerea diferitelor tipuri de
integritate. Cheile sunt o component major a integritii la nivel
de tabel i a integritii la nivel de relaie. De exemplu, ele v
permit s v asigurai c un tabel are nregistrri unice i c acele
cmpuri pe care le utilizai la stabilirea relaiilor ntre dou tabele
conin ntotdeauna valori corespondente.
Cheile servesc la stabilirea relaiilor ntre tabele. Asigurai-v
ntotdeauna c ai definit chei corespunztoare pentru fiecare
tabel.
Pentru stabilirea cheilor pentru fiecare tabel, ne reamintim c exist dou
tipuri principale de chei: chei primare i chei externe.

53

Baze de date

Capitolul 3

ntr-un paragraf anterior (Cap 1/Chei), am vzut c fiecare tabel trebuie s


aib o cheie, altfel nu putem spune c acesta este corect definit. De
asemenea, tim c rolul de cheie poate fi ndeplinit de un anume cmp al
tabelului sau o combinaie de cmpuri. Am spus un anume cmp, deoarece
nu orice cmp poate fi cheie ntr-un tabel, acesta trebuie s ndeplineasc
anumite condiii.
Iat condiiile pe care trebuie s le ndeplineasc o cheie primar:
Nu poate fi un cmp cu mai multe pri.
Trebuie s conin valori unice.
Nu poate conine valori nule.
Valoare ei nu trebuie s conin date confideniale cum ar fi cod
numeric personal, vreun cod de acces etc.
Valoare ei nu poate fi opional, adic trebuie neaprat introdus.
Conine numrul minim de cmpuri necesar definirii unicitii.
Valorile ei trebuie s identifice n mod unic i exclusiv fiecare
nregistrare din tabel.
Valoarea ei trebuie s identifice exclusiv valoarea fiecrui cmp
dintr-o nregistrare dat.
Valoarea ei nu poate fi modificat dect n cazuri rare sau
extreme.
Cum se procedeaz efectiv?
Se ia un tabel n care se introduc un eantion de date.
Se ia pe rnd cte un cmp i se verific dac acesta ndeplinete
condiiile pentru a fi cheie primar, alctuindu-se o list care se
numete lista cheilor candidate.
Dintre cheile candidate se va alege cheia cea mai potrivit (ceva
asemntor cu alegerea preedintelui din lista de candidai). Este
adevrat c aici, un rol important l are experiena dumneavoastr
anterioar.
Se poate ntmpla ca lista dumneavoastr de chei candidate s fie goal,
adic nici un cmp al tabelului nu poate fi cheie primar. n acest caz, se
poate utiliza o cheie candidat artificial care nu este altceva dect un
cmp introdus forat, care nu apare n mod natural n tabel. Fiind un
54

Baze de date

Capitolul 3

cmp artificial care nu are nici o legtur cu tabelul, putem s-i impunem
foarte uor condiiile pentru a fi cheie primar.
Iat un astfel de caz, prezentat n figura 3.2.
Nume piesa schimb
Curea ventilator
Acumulator
Bujie
Curea ventilator
Maneta viteza
Bucsa directie

Model
XP-035
TR-78-02

Producator
Auto Service SRL
ROMBAT SA

GF-25
Dacia

Dacia SA

Pret cu amanuntul
34.75
1250
16.90
29.35
23.85
12.55

Fig. 3.2. Tabel fr cheie candidat

Dup cum se poate vedea nici un cmp nu ndeplinete condiiile de a fi


cheie candidat:
Cmpul NUME PIESA SCHIMB nu poate fi ales deoarece ar
putea conine valori duplicat.
Cmpul MODEL nu poate fi ales deoarece ar putea avea valori
nule.
Cmpul PRODUCATOR nu poate fi ales pentru c ar putea avea
valori nule (lips).
Cmpul PRET CU AMANUNTUL nici nu poate fi luat n discuie.
Pentru a rezolva problema, introducem un cmp nou numit NUMAR
PIESA SCHIMB, care va deveni cheie primar. n figura 3.3 este prezentat
tabelul completat cu cmpul respectiv.
Nr piesa
schimb
4100
4105
4158
4198
4122
4108

Nume
piesa
schimb
Curea ventilator
Acumulator
Bujie
Curea ventilator
Maneta viteza
Bucsa directie

Model

Producator

Pret cu amanuntul

XP-035
TR-78-02

Auto Service SRL


ROMBAT SA

GF-25
Dacia

Dacia SA

34.75
1250
16.90
29.35
23.85
12.55

Fig. 3.3. Tabel cu cheie candidat artificial

55

Baze de date

Capitolul 3

Din practic pot spune (nu numai eu) c pentru a avea ct mai puine
probleme cu cheile primare, este nelept s introducem de la nceput o
cheie candidat artificial, imediat ce avem dubii c un anumit cmp vizat
ar putea nclca regulile. Pentru aceasta muli proiectani de baze de date
aleg pentru cheia primar un cmp introdus artificial care are un nume
compus din literele ID i numele tabelului.
Iat cteva sugestii pentru alegerea cheii primare artificiale (figura 3.4):

Nume tabel

Nume cheie artificial

Profesori

ProfesorID

Studenti

StudentID

Discipline

DisciplinaID

Plan de nvatanint

PlanInvID
Fig. 3.4. Exemple de chei artificiale

n acest moment ai finalizat o etap important a procesului de proiectare


n care ai definitivat structura tabelelor i ai atribuit fiecruia chei
primare.
ntrebri pentru autoevaluare
1. Ce este lista final de tabele?
2. Enunai trei principii pentru crearea numelor de tabel.
3. Enunai dou principii pentru compunerea descrierilor de tabel.
4. Cum se atribuie cmpuri tabelelor din lista final de tabele?
5. Enunai trei principii pentru crearea numelor de cmpuri.
6. Enunai trei elemente ale cmpului ideal.
7. Enunai trei motive pentru care sunt importante cheile.
8. Ce este lista cheilor candidate?
9. Ce este o cheie artificial? Dai un exemplu.
10. Ce este o cheie primar?
56

Baze de date

Capitolul 3

11. Care sunt elementele unei chei primare?


12. Ce este o cheie extern? Dai exemple.

Revizuirea structurilor iniiale de tabel


Ca n orice activitate omeneasc, este bine s ne oprim, s ne evalum
stadiul n care suntem i s verificm dac suntem pe drumul cel bun. E ca
ntr-o cltorie cnd din cnd n cnd verificm harta sau ntrebm pe
cineva dac suntem pe traseu bun.
Acum avem deja tabelele i nainte de a merge mai departe vom arunca o
privire peste ce am lucrat pn acum. Primul lucru de care trebuie s avem
grij este integritatea la nivel de tabel. Acest tip de integritate este o
component major a integritii generale a datelor.
Verificai urmtoarele aspecte:
ntr-un tabel nu exist nregistrri duplicat;
Cheia primar identific exclusiv fiecare nregistrare din tabel;
Orice cheie primar este unic;
Valorile cheilor primare nu sunt nule.
Pentru revizuirea structurilor de tabel este bine s stai de vorb cu
beneficiarul i mpreun vei ndeplini urmtoarele sarcini:
Asigurai-v c n baza de date sunt reprezentate toate subiectele.
Dei n aceast faz de proiectare este puin probabil s fi uitat
vreun de vreun subiect, totui acest lucru se poate ntmpla. Dac
se ntmpl, identificai subiectul i transformai-l n tabel cu
tehnica pe care ai mai folosit-o.
Asigurai-v c numele de tabele i descrierile acestora sunt
potrivite i semnificative pentru toat lumea. Dac un nume sau o
descriere pare a fi ambigu pentru mai multe persoane, lucrai cu
aceste persoane pentru clarificarea lucrurilor.
Asigurai-v c numele de cmpuri sunt potrivite i semnificative
pentru toat lumea. Alegerea numelor de cmpuri genereaz de
57

Baze de date

Capitolul 3

obicei multe discuii, care vor duce n final la armonizarea


acestora.
Verificai dac la fiecare tabel au fost atribuite toate cmpurile
corespunztoare. Acum avei cea mai bun oportunitate de a v
asigura c toate caracteristicile necesare, referitoare la subiectul
unui tabel se gsesc la locul lor. Nu este neobinuit s descoperii
c ai uitat una sau dou caracteristici. Dac s-a ntmplat,
identificai respectivele caracteristici i transformai-le n cmpuri
adugate tabelului.
Dup ce ai terminat consultrile cu viitorii beneficiari ai bazei de date,
trecei la pasul urmtor, n care vei stabili specificaii de cmp pentru
fiecare cmp din baza de date.
Specificaii de cmp
Cmpurile sunt fundaia bazei de date, ele reprezentnd caracteristicile
subiectelor importante pentru o organizaie. Cmpurile stocheaz date
vitale pentru organizaia respectiv, de care depind att succesul ct i
dezvoltarea sa ulterioar.
Dei au o importan aa de mare, paradoxal, cmpurilor din baza de date li
se acord cea mai mic importan, se pierde cel mai puin timp pentru
asigurarea integritii lor structurale i logice. Se consider c se pierde
prea mult timp pentru a stabili integritatea datelor, dar se pierde timp
nzecit pentru repararea bazelor de date prost proiectate.
n acest paragraf vei nva cum s stabilii integritatea datelor prin
definirea specificaiilor de cmp pentru fiecare cmp al bazei de date.
Timpul folosit pentru stabilirea acestor specificaii nu este un timp pierdut
ci un timp ctigat, dac ne referim la necazurile aprute datorit datelor
inconsecvente i eronate, a cror consecine negative sunt greu de estimat.
Exist mai multe motive pentru care specificaiile de cmp sunt
importante:
Specificaiile de cmp v ajut s stabilii i s impunei
integritatea la nivel de cmp. Implementarea acestor specificaii
v permite s garantai c datele din fiecare cmp sunt
consecvente i valide.
58

Baze de date

Capitolul 3

Definirea specificaiilor de cmp pentru fiecare mbuntete


integritatea general a datelor. Nu uitai c integritatea la nivel
de cmp este una din cele patru componente ale integritii
generale a datelor.
Definirea specificaiilor de cmp v oblig s ajungei la o
nelegere total a naturii i scopului datelor din baza de date.
nelegerea datelor nseamn c putei hotr dac anumite date
sunt cu adevrat necesare i importante pentru organizaie i
putei nva cum s le utilizai n avantajul dumneavoastr.
Specificaiile de cmp constituie dicionarul de date al bazei
de date. Fiecare specificaie de cmp stocheaz date despre
caracteristicile unui cmp dintr-o baz de date. Acest dicionar de
date este util, n special la implementarea bazei de date ntr-un
program SGBDR l putei folosi drept ghid pentru crearea
cmpurilor i stabilirea proprietilor fundamentale. De
asemenea, aceste specificaii v ajut s stabilii ce tip de
proceduri de introducere i validare a datelor trebuie s
implementai n orice tip de aplicaie de interfa cu utilizatorul
pe care o creai pentru baza de date.
Trebuie s avei n vedere faptul c nivelurile de consecven, calitate i
acuratee a datelor din baza de date (respectiv a informaiei scoase din
aceste date) sunt direct proporionale cu gradul de completare a acestor
specificaii.
Un cmp atinge integritatea la nivel de cmp dup ce ai definit un set
complet de specificaii de cmp pentru respectivul cmp. Integritatea la
nivel de cmp asigur urmtoarele:
Identitatea i scopul unui cmp sunt clare i toate tabelele n care
apare respectivul cmp sunt identificate corect;
Definiiile cmpurilor sunt consecvente n ntreaga baz de date;
Valorile unui cmp sunt consecvente i valide;
Tipurile de modificri, comparaiile i operaiile ce pot fi aplicate
valorilor din cmp sunt clar identificate.
n continuare vor fi prezentate toate informaiile de care avei nevoie
pentru a putea completa o specificaie de cmp.
59

Baze de date

Capitolul 3

Anatomia unei specificaii de cmp

O specificaie de cmp ncorporeaz diferite elemente care definesc


atributele unui cmp. Elementele dintr-o specificaie sunt mprite n
categoriile:
Elemente generale
Elemente fizice
Elemente logice
Practic, scrierea specificaiilor pentru fiecare cmp se face ntr-un
formular, aa cum se vede n figura 3.5. Dei pare un document birocratic,
nu este de loc aa, deoarece este foarte util, mai ales n faza de
implementare cnd nu mai trebuie s analizm fiecare cmp n parte, ci
consultm numai dosarul.
Se observ clar cele trei grupe de specificaii, fiecare cu specificaiile sale.
Variantele pe care le putei alege, acolo unde e cazul, sunt puse ntr-un
dreptunghi, ceea ce face ca formularul s aib claritate.
Toi parametrii care apar n formularul cu specificaiile de cmp vor fi
explicate tabelar, ceea ce ne ajut s gsim relativ uor explicaiile despre o
specificaie pe care am uitat-o.

60

Baze de date

Capitolul 3
Specificaii de cmp

Elemente generale
Nume cmp:
StatComer
Tip specificaie:
Unic
Generic
Copie
Tabel printe: Comercianti
Specificaie surs: Stat
Eticheta:
Stat
Partajat de:
Alias(-uri):
Descriere:
Statul in care se afla cartierul general al producatorului.Aceasta informatie este o
componenta a adresei postale generale a producatorului.

Elemente fizice
Tip de date:Alfanumeric
Lungime : 2

Suport caractere:

Litere(A-Z)
Cifre (0-9)

Numar de cifre zecimale:

De pe tastatura (., /, $, #, %)
Speciale (, , , )

Masca de introducere: AA
Format de afisare: Ambele litere trebuie sa fie majuscule.
Elemente logice
Tip cheie:

Structur cheie:
Unicitate:
Suport valori nule:

Non-Cheie
Extern
Simpl
Non-unic
Se accept

Reguli de editare:
Primar
Se introduce imediat,
Alternativ permite
editarea
Compus Se introduce imediat, nu
permite editarea
Unic
Se introduce ulterior,

Nu se accept

valori nule
Valori introduse de:
Valoare obligatore:

valori nule

Utilizator
Nu

Valoare prestabilit:

WA

Interval de valori:

CA, ID, MT, OR, WA

se
se

permite editarea

Sistem
Da

se

Se introduce ulterior, nu se
permite editarea
Reguli nedeterminate n acest
moment

Comparaii permise:

Acelai cmp
Toate
Alt cmp
Toate
Valoare de expresie Toate

=
=
=

>
>
>

>=
>=
>=

<
<
<

+
+
+

x
x
x

<=
<=
<=

Operatii premise:

Acelai cmp
Toate
Alt cmp
Toate
Valoare de expresie Toate

Fig. 3.5. Formular


61 Specificaie cmp

Concatenare
Concatenare
Concatenare

Baze de date

Capitolul 3

Elementele generale reprezint atributele fundamentale ale cmpului. Ele


ofer informaii despre scopul cmpului, numele tabelului n care apare
cmpul etc. n tabelul 3.1 sunt prezentate aceste elemente generale.
Tab. 3.1. Elemente generale
Denumire
element
Nume de cmp
Tabel printe

Eticheta

Partajat de

Alias(-uri)

Descriere

Tip specificaie

Explicaii
Un numr minim de cuvinte care identific n mod unic un anumit
cmp n ntreaga baz de date.
Tabelul care conine n structura sa cmpul respectiv. Acesta este
singurul tabel n care va aprea cmpul, cu excepia cazului n care
cmpul particip la stabilirea unei relaii.
Este un nume alternativ (de obicei, o form scurt a numelui
cmpului) prin care putei identifica respectivul cmp n interfaa
aplicaiei cu utilizatorul final pe care o creai pentru baza de date.
De exemplu, cmpul PRET UNITAR poate avea ca etichet PU sau
PUNIT. Etichetele sunt utile, n special, cnd dorim s economisim
spaiu, sau s nghesuim ct mai multe cmpuri ntr-un raport.
Indic numele celorlalte tabele (dac exist) care conin cmpul
respectiv. Singurele nume de tabel care trebuie s apar aici sunt
cele care au o relaie explicit cu tabelul printe al cmpului.
Este un nume pe care l utilizai pentru acel cmp, n situaii extrem
de rare. Una din situaiile n care trebuie s utilizai un alias este
cnd n acelai tabel trebuie s existe dou apariii ale cmpului.
Aceasta este o explicaie complet a cmpului. Compunerea unei
descrieri de cmp este extrem de benefic deoarece v oblig s v
gndii cu atenie la natura datelor care vor fi stocate n cmpul
respectiv. Dac avei dificulti n descrierea unui cmp, putei fi
sigur c acel cmp necesit mbuntiri suplimentare.
Elementele pe care le stabilii pentru un cmp dat depind de tipul
de specificaie pe care l definii pentru acel cmp. O specificaie
poate fi definit n 3 moduri:
Unic este specificaia prestabilit pentru toate cmpurile,
excepia celor care servesc ca ablon pentru alte cmpuri sau a
celor care particip drept chei externe ntr-o relaie ntre tabele.
n acest tip de specificaie putei include toate elementele, mai
puin specificaia surs, iar parametrii de element pe care i precizai se vor aplica doar asupra cmpului indicat elementul
Nume cmp.
Generic aceast specificaie servete ca ablon pentru alte
specificaii de cmp i v ajut s asigurai definiii
consecvente pentru cmpurile care au acelai neles general.
De exemplu, putei crea acest tip de specificaie pentru un
cmp generic numit JUDET, pe care s o utilizai apoi ca baz
pentru orice alt cmp JUDET din baza de date, cum ar fi
JUDET_CLIENT, JUDET_ANGAJAT, JUDET_FURNIZOR.
Copie este specificaia prestabilit pentru un cmp bazat pe

62

Baze de date

Specificaie surs

Capitolul 3
un cmp generic sau pentru un cmp care joac rol de cheie
extern ntr-o relaie ntre tabele i ea preia majoritatea
parametrilor de element dintr-o specificaie existent. Putei include elementele care nu sunt ncorporate n specificaia surs
i putei altera orice parametri de element preluai din
specificaia surs.
Acest element este precizat doar ntr-o specificaie copie i indic
numele specificaiei unui anumit cmp pe care se bazeaz
specificaia curent.

Elementele fizice se refer la structura unui cmp. Ele sunt exprimate n


termeni generali, deoarece fiecare program SGBDR le implementeaz ntrun mod uor diferit. Stabilirea acestor elemente n timpul acestei faze a
procesului de proiectare v ajut s asigurai definiii consecvente ale
cmpurilor n ntreaga baz de date i reduce timpul necesar
implementrilor structurilor de cmp ntr-un program SGBDR. n tabelul
3.2 sunt prezentate aceste elemente.
Tab. 3.2. Elemente fizice
Tip de date

Lungime
Numr de zecimale
Masc
de

Acest element indic natura datelor stocate de cmp. Standardul


SQL definete cteva tipuri majore de date i fiecare tip de date
are una sau mai multe variante unice. Iat o scurt definire a lor:
Character acest tip de dat stocheaz un ir alfanumeric de
lungime fix sau variabil.
Bit acest tip de date stocheaz iruri cu secvene binare, cum
ar fi imagini digitizate sau secvene audio.
Exact Numeric stocheaz numere ntregi sau zecimale.
Majoritatea programelor SGBDR implementeaz acest tip sub
numele de NUMERIC, ZECIMAL i INTEGER.
Approximate Numeric stocheaz numere cu zecimale i
numere exponeniale. Majoritatea programelor SGBDR
implementeaz acest tip sub numele de FLOAT, REAL i
DOUBLE.
Date/Time stocheaz date calendaristice, de timp i
combinaia lor. De menionat faptul c acest tip de dat difer
destul de mult de la un SGBDR la altul. Va trebui s studiai
documentaia SGBDR pentru a afla cum gestioneaz programul
datele i orele.
Boolean se folosete pentru valorile TRUE i FALSE.
Currency se folosete pentru indicarea monedei.
Precizeaz numrul total de caractere ce pot fi introduse de un
utilizator pentru o valoare oarecare de cmp. Se folosete numai
pentru datele de tip Character.
Precizeaz numrul de zecimale ale unui numr.
Precizeaz modul n care utilizatorul trebuie s introduc data

63

Baze de date
introducere

Format de afiare

Suport
caractere

de

Capitolul 3
calen-daristic n cmp. Exist mai multe moduri de introducere a
unei date calendaristice, cum ar fi 01/03/05, 01-03-05 i 01mar-2005. Utilizarea unei mti de introducere v ajut s v
asigurai c un utilizator va introduce valorile n cmp n mod
unitar. Iat un exemplu de introducere a unei mti: zz/ll/aa,
pentru o dat de forma 01/03/05.
Acest element gestioneaz aspectul valorii cmpului atunci cnd
este afiat pe ecran sau este tiprit ntr-un raport. Un format de
afiare v permite s afiai valorile ntr-un mod mai firesc, mai
lizibil, ca de exemplu 18/04/05 ar putea fi afiat 18 aprilie
2005 care este mult mai uor de citit i neles.
Acest element indic tipul de caractere pe care un utilizator le
poate introduce ntr-o valoare de cmp dat. Stabilirea i
impunerea acestui element v ajut s v asigurai c utilizatorul
nu poate introduce n cmp date lipsite de sens, iar prin acest lucru
mbuntii integritatea la nivel de cmp. Putei opta pentru
includerea sau excluderea oricruia dintre urmtoarele tipuri de
caractere:
Litere toate literele alfabetului inclusiv cele speciale , , , .
Cifre de la 0 la 9.
Caractere de pe tastatur - &, ^, =, virgula, !, (, ), %, $ etc.
Caractere speciale orice caracter pe care l putei produce
prin combinaii specifice de taste standard i tastele Ctrl, Alt i
Shift.

Elementele logice se refer n special la valorile din interiorul unui


cmp. Elementele ei stabilesc lucruri cum ar fi unicitatea unei valori, cnd
trebuie introdus o valoare, dac o valoare poate fi editat sau nu, tipurile
de comparaii i operaii ce pot fi efectuate cu fiecare valoare. Precizarea
acestor elemente v ajut s stabilii i s impunei mare parte din
integritatea la nivel de cmp. n tabelul 3.3 sunt prezentate aceste elemente.
Tab. 3.3. Elemente logice
Denumire element
Tip cheie
Structur cheie

Unicitate

Suport valori nule

Explicaii
Acest element indic rolul cmpului ntr-un tabel, rol pe care l-ai
identificat cnd ai stabilit cheia primar pentru tabel.
Acest element precizeaz dac un cmp desemnat cheie primar
este o cheie primar simpl (un singur cmp) sau o cheie primar
compus (cu mai multe cmpuri).
Acest element precizeaz dac valorile cmpului sunt unice. i
atribuii valoare Unic atunci cnd elementul Tip cheie are
valoarea Primar; n caz contrar acest element primete valoarea
Non-unic.
Acest element precizeaz dac un cmp accept sau nu valori nule.
Recitii paragraful Valoare nul din capitolul 1 pentru a v
reaminti ce sunt valorile nule. Pentru a verifica decizia luat, gn-

64

Baze de date

Valori introduse de

Valoare obligatorie
Valoare
prestabilit
Interval de valori

Reguli de editare

Comparaii
permise

Operaii permise

Capitolul 3
dii-v ce urmri ar avea necompletarea acelui cmp (valoare
nul). Utilizai judicios valorile nule i nu folosii spaii goale.
Acest element indic sursa valorilor cmpului. Aceast surs poate
fi un operator, fie programul de aplicaie al bazei de date care l
completeaz automat.
Acest element precizeaz dac utilizatorul este obligat s
introduc o valoare pentru cmpul respectiv.
Aceasta este valoare pe care utilizatorul o poate introduce ntr-un
cmp atunci cnd nu este disponibil o valoare mai bun i cnd
nu sunt permise valorile nule.
Acest element precizeaz toate posibilele valori valide pentru un
cmp. Acest lucru se poate face prin mai multe ci, ca de exemplu
cu un interval (1-999) sau cu ajutorul unei liste (CJ, MS, BN, AB).
Acest element precizeaz n ce moment utilizatorul poate introduce o valoare ntr-un cmp i dac poate modifica respectiva
valoare. Momentul de referin este momentul cnd se creeaz o
nou nregistrare.
Acest element indic tipurile de comparaii pe care utilizatorul le
poate aplica asupra unei valori de cmp date, atunci cnd preia
informaie din cmp. Exist 6 tipuri de comparaii, =, diferit de, >,
<, >=, <=, aa cum se poate observa din formular. De asemenea,
se indic dac un utilizator poate compara o valoare de cmp dat
cu una din urmtoarele:
Alt valoare din acelai cmp.
Valoarea unui alt cmp din tabelul printe sau dintr-un alt tabel
al bazei de date.
O valoare de expresie, care este o operaie oarecare n care este
inclus valoarea cmpului.
Controlul asupra tipului de comparaii l mpiedic pe utilizator s
fac anumite comparaii lipsite de sens.
Acest element precizeaz tipurile de operaii pe care utilizatorul le
poate efectua cu valorile unui cmp. Exist 5 tipuri de operaii:
adunare, scdere, nmulire, mprire i concatenare. De
asemenea, acest element indic dac o operaie poate include
vreuna din urmtoarele:
Alt valoare din acelai cmp.
Valoarea unui alt cmp din tabelul printe sau dintr-un alt tabel
al bazei de date.
Rezultatul unei expresii n care este implicat valoarea
cmpului.
Controlul asupra tipului de operaii previne efectuarea unor
operaii fr sens, limitnd tipurile de operaii care se pot face cu
valorile unui cmp.

Aceast faz este o mare consumatoare de timp, de aceea tentaia de a


economisi timp este foarte mare, ceea ce este o mare greeal. Timpul
65

Baze de date

Capitolul 3

astfel economisit este iluzoriu, deoarece pierderile cu repararea mai trziu a


bazei de date va fi nzecit. Acordai acestei faze importana cuvenit, altfel
tot efortul dumneavoastr de pn acum va fi zadarnic.

ntrebri pentru autoevaluare


1. Enunai dou motive majore pentru care sunt importante specificaiile
de cmp.
2. Ce ctigai prin stabilirea integritii la nivel de cmp?
3. Care sunt cele trei categorii de elemente dintr-o specificaie de cmp?
4. Numii trei tipuri de specificaii.
5. Ce indic elementul Tip de date?
6. Ce indic elementul Suport de caractere?
7. Care este scopul elementului Format de afiare?
8. Care este semnificaia elementului Interval de valori?
9. Care este scopul unei reguli de editare?
10. Care este scopul elementului Comparaii permise? Cine l folosete
efectiv?
11. Ce este o valoare de expresie?
12. Cnd se utilizeaz o specificaie generic? Dai un exemplu.
13. Explicai formularul de specificaii.

66

Baze de date

Capitolul 3

Etapa 4 - Determinarea i instituirea relaiilor ntre


tabele
Suntem n faza n care avem tabelele definitivate, completate cu cmpurile
lor bine definite i cu cheile lor primare. Sarcina noastr urmtoare este de
a stabili relaiile existente ntre aceste tabele. Ne reamintim c ntre dou
tabele poate exista NUMAI o relaie. De asemenea, un tabel poate avea
relaii cu mai multe tabele, aa cum s vedem n studiile de caz viitoare.
n capitolul 2, la paragraful Termeni referitori la relaie au fost prezentate
pe scurt cele trei tipuri de relaii care pot exista ntre dou tabele. V
recomand s revedei acel paragraf pentru a v remprospta memoria.
n aceast etap vei nva cum s identificai i s stabilii relaii ntre
tabelele unei baze de date i apoi cum s stabilii caracteristicile fiecrei
relaii. De asemenea, vei nva cum s creai diagrame cu tabele i relaii,
lucru care v va permite s realizai o reprezentare grafic a structurii
ntregii baze de date.
Despre importana relaiilor nu mai trebuie s vorbim, dect c ele sunt
capitale pentru funcionarea corect a bazei de date. Ele asigur conexiuni
ntre tabelele corelate logic, ajut la mbuntirea structurilor de tabel i
permit extragerea datelor din mai multe tabele simultan.
n continuare vor fi prezentate pe larg cele trei tipuri de relaii cunoscute.
Stabilirea relaiilor unu cu unu
Dou tabele au o relaie unu cu unu cnd o singur nregistrare din primul
tabel este corelat cu o singur nregistrare din al doilea tabel i o singur
nregistrare din al doilea tabel este corelat cu o singur nregistrare din
primul tabel. Figura 3.6 prezint un exemplu generic de relaie unu cu
unu.
Tabel A

Tabel B

Fig. 3.6. Exemplu generic de relaie unu la unu

67

Baze de date

Capitolul 3

Dup putei vedea, o nregistrare din TABELUL A este corelat cu o


singur nregistrare din TABELUL B, iar o nregistrare din TABELUL B
este corelat cu o singur nregistrare din TABELUL A. O relaie unu cu
unu implic de obicei un tabel subset. Figura 3.7 prezint un exemplu de
relaie unu cu unu tipic pe care o putei gsi ntr-o baz de date pentru
departamentul Personal al unei organizaii.
Angajati
SalariatID
100
101
102
103

Nume
Ban
Pop
Lazr
Crian

Prenume
Ioan
Dorin
Liviu
Ovidiu

Telefon
0745-646321
0723-548211
0264-542138
0740-764282

<<alte cmpuri>>
..
..
..
..

Retributii
SalariatID
100
101
102
103

Salar orar
34.50
23.00
17.45
16.00

Sporuri
10%
5%
20%
18%

<<alte cmpuri>>
..
..
..
..

Fig. 3.7. Exemplu de relaie unu la unu

Dei cmpurile din aceste tabele pot fi combinate ntr-un singur tabel,
proiectantul bazei de date a ales s plaseze n tabelul ANGAJATI
cmpurile ce pot fi vzute de orice membru al organizaiei i n tabelul
RETRIBUTII cmpurile ce pot fi vzute doar de personalul autorizat.
Pentru stocarea datelor privitoare la retribuia unui angajat dat este
necesar doar o singur nregistrare, deci ntre o nregistrare din tabelul
ANGAJATI i una din tabelul RETRIBUTII exist o relaie distinct unu
cu unu.
Figura 3.8 prezint un exemplu generic al modului n care se creeaz o
diagram de relaie pentru o relaie unu la unu.

68

Baze de date

Capitolul 3

Aceast linie arat c o nregistrare din


TABELUL B este corelat cu o singur
nregistrare din TABELUL A

Aceast linie arat c o nregistrare din


TABELUL A este corelat cu o singur
nregistrare din TABELUL B

Tabel B

Tabel A

Tabel normal

Tabel subset

Fig. 3.8. Realizarea unei diagrame generice pentru o


relaie unu la unu

Observai c tabelul din stnga este un tabel normal (simbolizat printr-un


dreptunghi), iar cel din dreapta este un tabel subset (simbolizat printr-un
dreptunghi cu colurile rotunjite). Linia care apare ntre tabelele din
diagram indic tipul de relaie i pentru fiecare tip de relaie vei utiliza un
anumit tip de linie. Aici fiecare capt are o liniu pentru relaia unu la
unu.
Aceast
linie arat
o
Observai
c tabelul
dincstnga
este un tabel normal (simbolizat printr-un
nregistrare
din
TABELUL
dreptunghi), iar cel din dreapta B
este un tabel subset (simbolizat printr-un
este corelat
cu o singur
dreptunghi
cu colurile
rotunjite). Linia care apare ntre tabelele din
nregistrare
din TABELUL
diagram
indic tipul
de relaie i pentru fiecare tip de relaie vei utiliza un
A tip de linie. Aici fiecare capt are o liniu pentru relaia unu la
anumit
unu.
n figura 3.9 este prezentat diagrama relaiei dintre tabelele ANGAJATI i
RETRIBUTII.

Angajati

Retributii

Nume tabel

Fig. 3.9. Diagrama relaiei dintre


tabelele SALARIATI i SALARIU

Nume tabel

69

Nume tabel

Baze de date

Capitolul 3

Observai c cele dou tabele sunt simbolizate diferit, un dreptunghi i un


dreptunghi cu colurile rotunjite, primul fiind considerat tabel de date iar al
doilea este considerat tabel subset.
Stabilirea relaiilor unu cu mai muli
ntre dou tabele exist o relaie unu cu mai muli cnd o nregistrare din
primul tabel poate fi corelat cu una sau mai multe nregistrri din al doilea
tabel, n timp ce o nregistrare din al doilea tabel poate fi corelat cu o
singur nregistrare din primul tabel. S studiem un exemplu generic
pentru acest tip de relaie.
S presupunem c lucrai cu dou tabele TABEL A i TABEL B, ntre care
exist o relaie unu cu mai muli. Datorit relaiei, o nregistrare din
TABEL A poate fi corelat cu una sau mai multe nregistrri din TABEL
B. De asemenea, n sens invers, o nregistrare din TABEL B poate fi
corelat cu singur nregistrare din TABEL A
Figura 3.10 prezint acest tip de relaie.

Tabel A

Tabel B

Tabel A

Tabel B

Fig. 3.10. Exemplu generic de relaie unu cu mai muli

70

Baze de date

Capitolul 3

Relaia unu cu mai muli este cea mai obinuit relaie care exist ntre
dou tabele dintr-o baz de date i este cea mai uor de identificat. Relaia
este extrem de important din punct de vedere al integritii datelor,
deoarece ea v ajut s eliminai datele duplicate. Figura 3.11 prezint un
exemplu obinuit de relaie unu cu mai muli pe care o putei ntlni la o
secie de mprumut a unei biblioteci.
Imprumuturi
Clienti
ClientID
9001
9002
9003
9004
9005

Nume
Pop
Ban
Lazr
Buzan
Beldean

Prenume
Dorin
Ion
Ana
Maria
Vian

<<alte cmp.>>
.......
.......
.......
.......
.......

ClientID
9002
9001
9004
9003
9003
9003
9002
9005
9005

CarteID
5648
690423
6563
65323
09542
64823
75001
10045
76100

Data
....
....
....
....
....
....
....
....
....

Fig. 3.11. Exemplu de relaie unu cu mai muli

Un client al bibliotecii poate mprumuta oricte cri, deci o nregistrare


din tabelul CLIENTI poate fi corelat cu una sau mai multe nregistrri din
tabelul MPRUMUTURI. ns o carte este asociat, n orice moment, doar
cu un singur client, deci o nregistrare din tabelul MPRUMUTURI este
corelat doar cu o singur nregistrare din tabelul CLIENTI. Evident, am
introdus o ipotez, cum c o carte se gsete ntr-un singur exemplar.
n figura 3.12 este prezentat un exemplu generic pentru modul de creare a
diagramei de relaie unu cu mai muli.

71

Baze de date

Capitolul 3
Aceast linie arat c o nregistrare din
TABELUL B este corelat cu o singur
nregistrare din TABELUL A

Tabel A

Tabel B

Nume tabel Aceast lab de gsc arat c o Nume tabel


nregistrare din TABELUL A este corelat
cu mai multe nregistrri din TABELUL B

Fig. 3.12. Realizarea diagramei pentru


o relaie unu cu mai muli

Nume tabel

Observai c simbolul lab de gsc este ntotdeauna localizat n dreptul


tabelului din partea muli a relaiei. Figura 3.13 prezint diagrama
relaiei dintre Aceast
tabelelelinie
CLIENTI
arat c i
o MPRUMUTURI din figura 3.11.
Reinei acestenregistrare
notaii pentru
c le vei Bfolosi n prezentarea structurii
din TABELUL
Nume
tabel
bazelor de date
pe
care
le
vei
proiecta.
este corelat cu o singur
nregistrare din TABELUL A
Imprumuturi
Imprumuturi

Clienti

Nume
tabelDiagrama relaiei dintre tabelele Clienti
Numeitabel
Fig. 3.13.
Imprumuturi
Acest tip de relaie cel mai reprezentativ dintre dou
tabele a unei baze de
Nume
date, este uor de identificat i de neles.
tabel(B)
Nume tabel

Nume tabel
Nume tabel
Nume
tabel(A)

72
Aceast linie arat c o

Baze de date

Capitolul 3

Stabilirea relaiilor mai muli cu mai muli


ntre dou tabele exist o relaie de mai muli cu mai muli cnd o
nregistrare din primul tabel poate fi corelat cu una sau mai multe
nregistrri din al doilea tabel i o nregistrare din al doilea tabel poate fi
corelat cu una sau mai multe nregistrri din primul tabel.
S presupunem c lucrai cu dou tabele, TABEL A i TABEL B i ntre
ele exist o relaie de mai muli cu mai muli. Datorit relaiei, o
nregistrare TABEL A poate fi corelat cu una sau mai multe nregistrri
din TABEL B i o nregistrare din TABEL B poate fi corelat cu una sau
mai multe nregistrri din TABEL A, aa cum se poate vedea n figura
3.14.
Tabel A

Tabel B

Tabel A

Tabel B

Tabel A

Tabel B

Tabel A
Tabel A

Tabel B
Tabel B

Fig. 3.14. O relaie mai muli cu mai muli din perspectiva ambelor tabele

Tabel A
Tabel B
Tabel
A
Tabel
B ntre dou tabele
Acest tip de relaie este al doilea ca frecven de
apariie
dintr-o baz de date. Ea este ceva mai dificil de identificat dect o relaie
unu cu mai muli, deci trebuie s v asigurai c ai examinat tabelele cu
atenie.
Tabel A
Tabel B
Tabel
A
Figura 3.15 prezint un exemplu tipic de relaie
maiB muli cu mai muli
Tabel
pe care o putei ntlni n baza de date a unei instituii de nvmnt,
respectiv tabelul cu studenii i tabelul cu toate cursurile care se in n acea
universitate.
Tabel A
Tabel B
Tabel A
Tabel B
73
Tabel A

Tabel B

Baze de date
Studenti
StudentID
6001
6002
6003
6004
6005

Capitolul 3
Nume
Pop
Szabo
Costea
Timocea
Mocean

Prenume
Remus
Zoltan
Florian
Sebastian
Vasile

<<alte cmpuri>>
.....

OrasStudent
Reghin
Oradea
Zalau
Brasov
Fagaras

.....
.....
.....
.....

Cursuri
CursID
C001
C213
C032
C015
G001
G004
G007

Denumire
PUC
Baze de date
SIM
GD
AutoCAD
Inventor
IntelliCAD

Credite
5
5
4
5
4
5
5

ProfesorID
2001
2001
2045
2014
2009
2006
2032

Sala
208
208
208
207
207
209
209

<<alte cmpuri>>
.....
.....
.....
.....
.....
.....
.....

Fig. 3.15. Exemplu tipic de relaie mai muli cu mai muli

Pe parcursul unui an colar, un student poate participa la unul sau mai


multe cursuri, deci o nregistrare din tabelul STUDENTI poate fi corelat
cu una sau mai multe nregistrri din tabelul CURSURI. n sens invers, la
un curs pot participa unul sau mai muli studeni, deci o nregistrare din
tabelul CURSURI poate fi corelat cu una sau mai multe nregistrri din
tabelul STUDENTI.
Figura 3.16 prezint un exemplu generic al modului de creare a diagramei
de relaie mai muli cu mai muli. n acest caz, lng fiecare tabel exist
un simbol lab de gsc.
Figura 3.17 prezint diagrama relaiei dintre tabelele STUDENTI i
CURSURI din figura 3.15.

74

Baze de date

Capitolul 3

Aceast lab de gsc arat c o


nregistrare din TABELUL B este corelat cu
mai multe nregistrri din TABELUL A

Tabel B

Tabel A

Aceast lab de gsc arat c o


nregistrare din TABELUL A este corelat cu
mai multe nregistrri din TABELUL B

Fig. 3.16. Realizarea diagramei pentru o relaie mai


muli cu mai muli

Studenti

Cursuri

Fig. 3.17. Diagrama relaiei dintre tabelele STUDENTI


i CURSURI

O astfel de relaie este una nerezolvat, adic nu se poate stabili o legtur


coerent ntre nregistrrile celor dou tabele, neputndu-se efectua o
interogare n care s fie implicate cele dou tabele. Dup cum vedei, ntre
cele dou tabele nu exist o legtur real, deci nu avei cum s asociai
nregistrrile dintr-un tabel cu nregistrrile din cellalt tabel. O metod cu
care ai putea stabili o legtur ntre cele dou tabele ar fi preluarea unui
cmp dintr-unul din tabele i introducerea lui de un numr de ori n cellalt
tabel. Aceast idee este prima care ne vine n minte, dar nu este o idee
bun, deoarece mrete nejustificat unul din tabele, fr a rezolva ns, n
totalitate problema.
O alt metod pentru a stabili o legtur coerent, este introducerea unui
tabel de legtur ntre cele dou tabele.
75

Baze de date

Capitolul 3

Un tabel de legtur faciliteaz asocierea nregistrrilor dintr-un tabel cu


nregistrrile din cellalt tabel i asigur lipsa oricror probleme la
operaiile de adugare, tergere sau modificare a datelor corelate. Un tabel
de legtur se definete prin preluarea unor cpii ale cheii primare din
fiecare tabel i utilizarea lor pentru a forma structura noului tabel. n
realitate, aceste cmpuri ndeplinesc dou roluri distincte: mpreun
formeaz cheia primar compozit a tabelului de legtur, iar separat,
fiecare poate fi asimilat unei chei externe.
S relum tabelele din figura 3.15, i ne punem ntrebarea cum putem
asocia cu uurin nregistrri din primul tabel cu nregistrri din al doilea
tabel? Altfel spus, cum putem asocia un student cu mai multe cursuri sau
un anumit curs cu mai muli studeni? Cea mai bun metod este de crea i
utiliza un tabel de legtur care va rezolva relaia de tip mai muli cu mai
muli n maniera cea mai adecvat i mai eficient. Figura 3.18 prezint
rezolvarea practic a acestei soluii.
Studenti
StudID
6001
6002
6003
6004
6005

Nume
Pop
Szabo
Costea
Timocea
Mocean

Prenume
Remus
Zoltan
Florian
Sebastian
Vasile

OrasStudent
Reghin
Oradea
Zalau
Brasov
Fagaras

<<alte cmpuri>>
.....
.....
.....
.....
.....

Orar(tabel de legtur)
StudID
6001
6002
6002
6001
6002
6003
6004
6001
6003
6001
6005

CursID
C001
C213
C032
C213
C015
C001
C213
C015
G001
G004
G007

Cursuri
CursID
C001
C213
C032
C015
G001
G004
G007

Denumire
PUC
SIM
Baze de date
GD
AutoCAD
Inventor
IntelliCAD

Credite
5
5
4
5
4
5
5

ProfID
2001
2001
2045
2014
2009
2006
2032

Fig.3.18. Rezolvarea unei relaii de tip mai muli cu mai


muli cu ajutorul unui tabel de legtur

76

Baze de date

Capitolul 3

Se observ c tabelul de legtur are mai multe nregistrri dect oricare


din tabelele pe care le leag. De asemenea, ntre fiecare din cele dou
tabele i tabelul de legtur exist o relaie de tip unu cu mai muli. Prin
urmare, o relaie de tip mai muli cu mai muli s-a transformat n dou
relaii unu cu mai muli, aa cum se poate vedea n figura 3.19.

Orar

Studenti

StudentID
CursID

StudentID
Nume
Prenume
OrasStudent
--------

Cursuri
CursID
Denumire
Credite
ProfesorID
Sala
--------

Fig. 3.19. Diagrama de relaie a


problemei rezolvate

Observai din figura 3.19 reprezentarea tabelului de legtur, cu cel dou


linii verticale, n stnga i dreapta dreptunghiului.
Relaii cu autoreferire
Acest tip particular de relaie nu exist ntre dou tabele, motiv pentru care
nu a fost amintit la tipuri de relaii. Acest tip de relaie exist ns
nregistrrile dintr-un tabel. Pe parcursul procesului de proiectare o vom
considera, totui, ca fiind o relaie ntre tabele.
Un tabel are cu el nsui o relaie cu autoreferire (cunoscut i sub numele
de relaie recursiv) dac o anumit nregistrare din tabel este corelat cu
alte nregistrri din acelai tabel. Similar tipului echivalent de relaie pentru
perechi de tabele, o relaie cu autoreferire poate fi unu cu unu, unu cu
mai muli i mai muli cu mai muli.
Relaia unu cu unu exist cnd o nregistrare dat dintr-un tabel poate
fi corelat cu o singur nregistrare din acelai tabel. Tabelul MEMBRII
din figura 3.20 este un exemplu de tabel care are acest tip de relaie. Astfel,
un membru dat poate sponsoriza un singur alt membru din organizaie;
cmpul SponsorID stocheaz numrul de identificare al membrului care
77

Baze de date

Capitolul 3

joac rolul de sponsor. Observai c Mocean Pavel sponsorizeaz pe


Obdu Anica.
Membrii
MembruID
1001
1002
1003
1004
1005

Nume
Pop
Mocean
Ban
Ban
Obdu

Prenume
Dorin
Pavel
Ionel
Lucia
Anica

SponsorID
1001
1003
1002

<<alte cmpuri>>
--------------------------

Fig. 3.20. Relaie cu autoreferire unu cu unu

Diagrama unei astfel de relaii se poate vedea n figura 3.21.


Membrii

Aceast linie lateral a tabelului


arat natura de auto-referiere a
relaiei i tipul relaiei.

Fig. 3.21. Diagrama unei relaii cu


auto-referire unu cu unu

Relaia unu cu mai muli cu autoreferire exist atunci cnd o


nregistrare dat din tabel poate fi corelat cu una sau mai multe
nregistrri din acelai tabel. Figura 3.22 arat un exemplu n care un
angajat poate fi eful mai multor angajai. Observai c Pop Dorin este
eful la ali trei angajai.
Personal
AngajatID
1001
1002
1003
1004
1005

Nume
Mocean
Pop
Ban
Ban
Obdu

Prenume
Pavel
Dorin
Ionel
Lucia
Anica

Sef
1002

1002
1002

<<alte cmpuri>>
--------------------------

Fig. 3.22. Relaie cu autoreferire unu cu mai muli

78

Baze de date

Capitolul 3

Figura 3.23 arat diagrama acestei relaii.

Personal
Fig. 3.23. Diagrama
relaiei cu auto-referire
unu cu mai muli

Relaia mai muli cu mai muli cu autoreferire exist cnd o


nregistrare dat dintr-un tabel poate fi corelat cu una sau mai multe
nregistrri din acelai tabel i una sau mai multe nregistrri pot fi corelate
cu nregistrarea dat. La nceput, acest lucru poate aprea confuz, dar
exemplul care urmeaz o s v ajute s clarificai problema (figura 3.24).
n acest caz, o anumit subansamblu poate fi compus din mai multe piese
componente diferite i poate fi la rndul lui component al unui alt
subansamblu.
Piese
PiesaID
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011

Denumire piesa
Clema superioar
Clema inferioar
urub de strngere
Piulit
Ansamblu clem
Scaun
Ansamblu scaun
Corp tubular
Suport spate
Ansamblu cadru
a

<<alte cmpuri>>
.....

.....
.....
.....
.....
.....
.....
.....
.....
.....
.....

Fig. 3.24. Exemplu de relaie cu autoreferire mai muli


cu mai muli

Subansamblu clem (7005) este compus din patru piese (7001, 7002, 7003,
7004), deci nregistrarea respectiv poate fi corelat cu 4 nregistrri din
acelai tabel. n plus, subansamblu clem intr n componena ansamblului
79

Baze de date

Capitolul 3

scaun (7007) i al ansamblului cadru (7010), deci 2 nregistrri din tabel


pot fi corelate cu ea. Figura 3.25 prezint diagrama pentru acest tip de
relaie.
Piese
Fig. 3.25. Diagrama unei
relaii cu autoreferire mai
muli cu mai muli

Pasul urmtor pe care trebuie s-l facem este identificarea relaiilor care
exist n mod curent ntre tabelele dintr-o baz de date.
Identificarea relaiilor existente
n aceast faz avem structura final a tabelelor, mpreun cu descrierea
lor. Am vzut n paragrafele anterioare care sunt cele trei relaii care pot
exista ntre tabele. Problema care se pune acum este aceea de a afla tehnica
prin care vei identifica relaiile dintre tabelele bazei de date la proiectarea
creia lucrai, tiut fiind c aceast activitate nu este simpl. Experiena
personal joac aici un rol important deoarece nu exist reguli foarte clare
pe cale s le aplicai.
n analiza pe care ai fcut-o n timpul proiectrii bazei de date, ai stat de
vorb cu multe persoane din organizaia beneficiar, att din conducere ct
i din compartimentele care vor folosi nemijlocit baza de date. Ei bine,
aceste persoane v vor fi de un real folos n identificarea relaiilor dintre
tabele, chiar dac ele nu au o viziune complet asupra problemei n cauz.
ncepei procesul de identificare a relaiilor prin crearea unei matrice cu
toate tabelele bazei de date. Pentru aceasta putei folosi o foaie de hrtie, o
tabl sau programul Excel. De exemplu, s presupunem c lucrai cu
urmtoarele tabele:
CLADIRI
CURSURI
INDEMNIZATIE
CATEDRA
80

Baze de date

Capitolul 3

SALI
PERSONAL
STUDENTI
Scriei tabelele n partea de sus a matricei i nc o dat n partea stng a
matricei, ca n figura 3.26.

Cladiri

Cursuri

Indemnizatie

Catedra

Sali

Personal

Studenti

Cladiri
Cursuri
Indemnizatie
Catedra
Sali
Personal
Studenti
Fig. 3.26. Realizarea unei matrice de tabele pentru stabilirea relaiilor

Selectai cte un tabel din partea stng a matricei i verificai dac el are
vreo relaie cu vreunul din tabelele din partea de sus, parcurgnd matricea
pe linie. inei minte c nu cutai dect relaiile directe ntre tabelele
care particip la relaie trebuie s existe o conexiune specific. De
exemplu, tabelul CURSURI are o relaie direct cu tabelul STUDENTI,
deoarece cursurile exist ca s fie urmate de studeni. Tabelul CURSURI
are o relaie indirect cu tabelul PERSONAL, prin intermediul tabelului
CATEDRA; un curs este predat de un membru al catedrei, nu de un
membru al personalului. Nu trebuie s v ocupai nc de relaiile indirecte.
Dac nu vedei de la nceput relaia dintre dou tabele, o bun metod este
de a popula tabelele cu cteva nregistrri care v vor ajuta n depistarea
acestor relaii. n edina de lucru pentru stabilirea relaiilor ntre tabele vei
pune ntrebri de genul:
Poate o nregistrare din CURSURI s fie asociat cu una sau mai
multe nregistrri din tabelul CLADIRI?
Se poate gsi o legtur ntre PERSONAL i STUDENTI?
Reinei c pentru a stabili relaia corect dintre dou tabele, vei pune dou
ntrebri, una din perspectiva primului tabel i una din perspectiva celuilalt
tabel. Rspunsurile la aceste dou ntrebri vor identifica tipul de relaie
care exist ntre cele dou tabele.

81

Baze de date

Capitolul 3

Dup ce ai identificat relaia, indicai tipul relaiei n celula aflat la


intersecia dintre liniile celor dou tabele. Pentru tipurile de relaii folosii
urmtoarele prescurtri:
1:1 - pentru relaia unu cu unu.
1:M - pentru relaia unu cu mai multi.
M:M - pentru relaia mai muli cu mai muli.
n figura 3.27 este artat matricea de tabele cu completat cu relaiile
tabelului CURSURI.
Cladiri
Cladiri
Cursuri
Indemnizatie
Catedra
Sali
Personal
Studenti

Cursuri
1:M

Indemnizatie

1:1

Catedra
1:M

Sali
1:M
1:1

Personal

Studenti

Fig. 3.27. Intrrile n matricea de tabele, pentru tabelele CLADIRI i CURSURI

Iat cum putem comenta notaiile din figura 3.21, ncepnd din stnga sus:
1:M - ntr-o cldire se pot ine mai multe cursuri.
1:M - o cldire are mai multe sli.
1:1 - un curs se poate ine numai ntr-o cldire.
1:M - un curs poate aparine mai multor catedre
1:1 - un curs se ine numai ntr-o sal.
Dac ntre tabele nu exist nici un fel de relaie, lucru perfect normal,
celula corespunztoare va fi goal. Deseori, relaiile ntre dou tabele vor
diferi de la o perspectiv la alta (depinde din ce parte privesc) i trebuie s
tii cum s determinai tipul oficial de relaie dintre fiecare pereche de
tabele din matrice. Vei stabili acest lucru utiliznd urmtorul set de
formule:
1:1 + 1:1 = 1:1
1:M + 1:1 = 1:M
1:M + 1:M = M:M
82

Baze de date

Capitolul 3

Iat, n rezumat, procedura specific pe care o vei utiliza la identificarea


relaiei oficiale ntre dou tabele din matrice, procedura incluznd
formulele de relaie de mai sus:
1. Selectai o pereche de tabele i notai intrarea de la intersecia dintre
linia primului tabel i coloana celui de-al doilea.
2. Localizai al doilea tabel pe aceeai parte a matricei pe care lucrai i
notai intrarea de la intersecia liniei acestuia cu coloana primului
tabel.
3. Asupra celor dou intrri aplicai una din formulele de mai sus i
stabilii relaia oficial dintre cele dou tabele.
4. Construii diagrama relaiei n mod corespunztor.
5. Tiai ambele intrri din matrice.
Pentru cazul concret al perechii de tabele CLADIRI i CURSURI,
rezultatul se vede n figura 3.28.
Cladiri
Cladiri
Cursuri
Indemnizatie
Catedra
Sali
Personal
Studenti

Cursuri
1:M

Indemnizatie

1:1

1:1

Catedra
1:M

Sali
1:M
1:1

Personal

Studenti
1:M

1:1
1:1

1:M
1:M
1:1

1:1

1:M

1:M

Fig. 3.28. Identificare relaiei oficiale pentru perechea CLADIRI i CURSURI

Relaia oficial rezultat este 1:M unu cu mai muli, rezultat din
compunerea relaiilor din cele dou sensuri.
Relaia unu cu unu poate fi identificat observnd c un tabel joac rol
de tabel printe i cellalt joac rol de tabel copil (subordonat). n tabelul
printe trebuie s existe cel puin o nregistrare nainte s putei introduce
n tabelul copil o nregistrare corelat, adic un copil nu poate exista fr
printe, nu-i aa?
Atribuirea rolului de printe i copil nu este totdeauna un lucru foarte clar,
existnd cazuri cnd aceast atribuire se face arbitrar. Un lucru trebuie s
v fie clar: relaia unu cu unu poate fi asemuit cu un tabel mare rupt n
dou, iar ntr-unul dintre ele s-a copiat cmpul cheie primar, care devine
83

Baze de date

Capitolul 3

cheie extern. De fapt, acesta este i mecanismul cu care se relaiile unu cu


unu.
Iat un caz concret de construcie a unei relaii unu cu unu (figura 3.29).
Presupunem c avem tabelul Personal, care conine toate cmpurile legate
de descrierea unui angajat. Acest tabel se va rupe n dou pentru a separa
datele confideniale de cele publice.

Personal-1
AngajatID
ChP
Nume
Prenume
Data nasterii
Data angajarii
Specializare
Adresa
Telefon acasa
Mobil
E-mail
Web

Personal
AngajatID ChP
Nume
Prenume
Data nasterii
Data angajarii
Specializare
Adresa
Telefon acasa
Mobil
E-mail
Web
Salariu
Indemnizatie
Asigurare
Tip plan medical

Personal-2
AngajatID
ChE
Salariu
Indemnizatie
Asigurare
Tip plan medical

Fig. 3.29. Exemplu de creare a unei relaii unu cu unu

ntre PERSONAL-1 i PERSONAL-2 exist o relaie unu cu unu foarte


clar i uor de depistat. Cheia primar n primul tabel, AngajatID a
devenit cheie extern n al doilea tabel, dup cum se vede n figur.
n unele cazuri, mai pot fi forate unele relaii unu cu unu, fr ca aceste
tabele sa aib altceva comun dect cheia primar a unuia copiat n cellalt
tabel. Practica o s v scoat n cale i un astfel de caz.
Relaia unu cu mai muli poate fi stabilit ntr-un mod asemntor cu
relaia unu cu unu. Vei lua, pur i simplu, o copie a cheii primare din
84

Baze de date

Capitolul 3

tabelul aflat n partea unu a relaiei i o vei include n structura tabelului


din partea mai muli, unde va deveni cheie extern.
Pentru exemplificare, fie relaia unu cu mai muli dintre tabelele
CLADIRI i SALI, prezentat n figura 3.30.

Sali

Cladiri

SalaID
ChP
Tip sala
Nr locuri
Acces Intrenet

CladireID
ChP
Numar etaje
Acces lift
Acces parcare

Fig. 3.30. Relaia de tip unu cu mai muli existent ntre


tabelele CLADIRI i SALI

Relaia logic ntre aceste tabele este c o cldire are mai multe sli, dar o
sal se gsete numai ntr-o cldire. Utiliznd procedura anterioar, vei
stabili aceast relaie lund o copie a cheii primare (CladireID) din tabelul
CLADIRI pe care o includei drept cheie extern n tabelul SALI.
Diagrama revizuit trebuie s fie ca cea prezentat n figura 3.31.
Sali
Cladiri
SalaID
ChP
CladireID ChE
Tip sala
Nr locuri
Acces Intrenet

CladireID
ChP
Numar etaje
Acces lift
Acces parcare

Fig. 3.31. Stabilirea relaiei unu cu mai muli


ntre tabelele CLADIRI i SALI

Relaia mai muli cu mai muli se stabilete cu ajutorul unui tabel de


legtur. Deci, va trebui s creai un nou tabel n baza de date, parcurgnd
urmtorii pai:
85

Baze de date

Capitolul 3

Se definete tabelul de legtur lund cpii ale cheii primare din


fiecare tabel al relaiei i utiliznd aceste chei pentru a forma
structura tabelului. n tabelul de legtur, aceste cmpuri au dou
scopuri distincte: mpreun ele constituie cheia primar compus
a tabelului i fiecare este o cheie extern unic care ajut la
stabilirea unei relaii unu cu mai muli ntre tabelul su printe i
tabelul de legtur.
Se d tabelului de legtur un nume care s reprezinte natura
relaiei dintre cele dou tabele. De exemplu, ntre tabelele
STUDENTI i CURSURI, numele tabelului de legtur ar putea
fi CURSURI STUDENT sau ORAR STTUDENT.
Se adaug tabelul de legtur n lista final de tabele i se
completeaz rubricile Tip tabel i Descriere tabel.
Figura 3.32 v arat cum stabilii o relaie mai muli cu mai muli ntre
tabelele STUDENTI i CURSURI. (Observai noul simbol de diagram
pentru tabelul de legtur.)
Studenti
StudentID
ChP
Nume
Prenume
Data nasterii
Adresa
Telefon
E-mail

Cursuri
Cursuri Student
StudentID ChPC/ChE
CursID
ChPC/ChE

CursID
ChP
Denumire
Credite
ProfesorID
Categorie

Fig. 3.32. Stabilirea unei relaii mai muli cu mai muli


ntre tabelele STUDENTI i CURSURI

Observai c mecanismul de stabilire a relaiei mai muli cu mai muli nu


face altceva dect s transforme aceast relaie n dou relaii unu cu mai
muli, adugnd n acelai timp un tabel nou n baza de date.
Relaiile cu autoreferire se stabilesc relativ simplu deoarece se aplic
aceleai proceduri ca i la cele 3 relaii dintre dou tabele diferite. Pentru
rezolvarea elegant a relaiilor cu autoreferire, o idee bun e s evitm
aceste relaii prin regndirea structurii tabelului i crearea altor tabele
subset. Este o idee pe care o aplic curent i a dat rezultate bune.
86

Baze de date

Capitolul 3

Astfel, cazul tabelului prezentat la paragraful Relaii cu autoreferire, cel


din figura 3.22, se poate rezolva mai simplu dac introducem n baza de
date un nou tabel numit SEFI, cu care s stabilim o relaie unu cu mai
muli. n acest fel cmpul SEF ar putea deveni cheie extern, numindu-se
SefID.

Stabilirea caracteristicilor relaiilor


Dup ce ai stabilit toate relaiile care se gsesc ntre tabelele bazei
dumneavoastr de date, urmeaz s stabilii caracteristicile fiecrei relaii.
Aceste caracteristici arat ce se ntmpl atunci cnd tergei o nregistrare,
care este tipul de participare i gradul de participare a fiecrui tabel n
relaie.
Definirea unei reguli de tergere

Prima caracteristic pe care o stabilii pentru relaie este o regul de


tergere. Aceast regul stabilete ce trebuie s fac programul SGBDR
cnd cerei s tearg o anumit nregistrare din tabelul printe al relaiei.
Regulile de tergere sunt extrem de importante pentru integritatea la nivel
de relaie deoarece ele v protejeaz mpotriva nregistrrilor orfane
nregistrri din tabelul copil care nu au nici un fel de relaie cu nici o
nregistrare din tabelul printe.
Putei defini 5 tipuri de reguli de tergere, iar aciunile pe care le va efectua
programul SGBDR, n cazul fiecrei reguli sunt urmtoarele:
Interdicie. Programul SGBDR nu va terge nregistrarea din
tabelul printe, ci o va pstra i o va desemna ca inactiv.
Restricie. Programul SGBDR nu va terge nregistrarea din
tabelul printe dac n tabelul copil exist nregistrri corelate.
Programul SGBDR trebuie s tearg toate nregistrrile corelate
din tabelul copil nainte s poat terge nregistrarea din tabelul
printe.
n cascad. Programul SGBDR va efectua dou aciuni specifice:
va terge nregistrarea din tabelul printe, apoi automat, va terge
toate nregistrrile corelate din tabelul copil.
Anulare. Programul SGBDR va terge nregistrarea din tabelul
printe apoi va actualiza la valoare nul valorile cheii externe ale
87

Baze de date

Capitolul 3

nregistrrilor corelate din tabelul copil. Dac intenionai s


utilizai aceast regul de tergere, trebuie s modificai
specificaia de cmp a cheii externe i s atribuii elementul logic
Suport valori nule, valoarea Se accept valori nule.
Folosire valoare prestabilit. Programul SGBDR va terge
nregistrarea din tabelul printe apoi va actualiza valoarea cheii
externe ale nregistrrilor corelate din tabelul copil la valoarea
curent a elementului logic Valoare prestabilit din specificaia
de cmp a cheii externe. Evident, ca s putei utiliza aceast
regul, trebuie s fi introdus o valoare la elementul Valoare
prestabilit.
n general, este recomandabil s utilizai regula de tergere Restricie i
celelalte reguli, dup necesiti.
Identificarea tipului de participare a fiecrui tabel

Dup cum se tie de la capitolul 1, cnd stabilii o relaie ntre dou tabele,
fiecare tabel particip la relaie ntr-o manier particular. Tipul de
participare pe care l atribuii unui tabel dat determin dac n respectivul
tabel trebuie s existe o nregistrare nainte de a putea introduce nregistrri
n tabelul corelat. Exist 2 tipuri de participri:
Obligatorie - tabelul trebuie s conin cel puin o nregistrare nainte de a
putea introduce nregistrri n tabelul corelat.
Opional nu este obligatoriu ca tabelul s conin vreo nregistrare
nainte de a putea introduce nregistrri n tabelul corelat.

De obicei, pentru majoritatea tabelelor, vei determina tipul de participare


dup ce definii regulile de lucru cu baza de date. n majoritatea cazurilor,
tipul de participare este evident, este de bun sim sau este n concordan
cu un anumit set de standarde.
Pentru exemplificare, s lum relaia unu cu mai muli dintre tabelele
ANGAJATI i CLIENTI, din figura 3.33.

88

Baze de date

Capitolul 3

Angajati
AngajatID
............

Clienti
ClientID ChP
AngajatID ChE

ChP

Fig. 3.33. Ce tip de participare trebuie


atribuit fiecrui tabel?

S presupunem c fiecare client trebuie atribuit unui anumit angajat. Acest


angajat acioneaz ca reprezentant al clientului i se ocup de toate
tranzaciile i comunicarea dintre organizaie i respectivul client. Dei
fiecare client trebuie asociat cu un anumit angajat, un angajat dat nu este
obligat s fie asociat cu vreun client. Muli angajai se ocup de alte
probleme ale organizaiei. Prin urmare, cele 2 tabele vor participa la relaie
astfel:
Tabelul ANGAJATI trebuie s primeasc tipul de participare
Obligatorie. Acest lucru v asigur c exist cel puin un angajat
pe care s-l putei atribui unui client dat.
Tabelul CLIENTI trebuie s primeasc tipul de participare
Opional. Acest lucru v permite s introducei n tabelul
ANGAJATI orice persoan angajat de organizaie.
Dup ce ai determinat tipul de participare a fiecrui tabel n relaie,
marcai acest tip pe diagrama relaiei. Pentru tipul Obligatorie, folosii o
linie vertical, iar pentru tipul Opional un cerc mic. Figura 3.34 prezint
diagrama revizuit a relaiei dintre tabelele ANGAJATI i CLIENTI,
artndu-v marcarea tipului de participare. Observai c simbolurile
tipului de participare (linia i cercul mic) se afl ntre simbolurile tipului de
relaie (linia i laba de gsc).

89

Baze de date

Capitolul 3
Aceast linie simbolizeaz tipul de participare
Obligatorie pentru acest tabel

Clienti
Angajati
AngajatID
............

ClientID ChP
AngajatID ChE

ChP

Acest cerc simbolizeaz tipul de participare


Opional pentru acest tabel

Fig. 3.34. Precizarea tipului de participare pentru tabelele


ANGAJATI i CLIENTI

Identificarea gradului de participare a fiecrui tabel

Dup ce ai determinat cum va participa fiecare tabel n cadrul relaiei,


trebuie s stabilii gradul n care va participa fiecare tabel. Dup cum tim
din capitolul 1, gradul de participare precizeaz numrul minim de
nregistrri pe care un tabel dat trebuie s le aib asociate cu o nregistrare
din tabelul corelat i numrul maxim de nregistrri din tabel care pot fi
asociate cu o nregistrare din tabelul corelat.
Factorii pe care i utilizai la determinarea gradului de participare situaii
evidente, bunul sim sau respectarea unui set oarecare de standarde sunt
aceiai pe care i folosii i la determinarea tipului de participare. De
obicei, n acest moment al procesului de proiectare vei identifica gradul de
participare pentru unele dintre tabele, iar altele le vei revedea atunci cnd
stabilii regulile de lucru pentru baza de date.
Pentru a reprezenta gradul de participare al unui tabel dat, vei utiliza 2
numere, separate prin virgul i nchise ntre paranteze. Primul numr
precizeaz numrul minim de nregistrri corelate, iar al doilea numr arat
numrul maxim permis, de nregistrri corelate. De exemplu, un grad de
participare cum ar fi (2,11) arat c tabelul trebuie s aib cel puin 2, dar
nu mai mult de 11 dintre nregistrrile sale corelate cu o singur
nregistrare dintr-un alt tabel.
90

Baze de date

Capitolul 3

S lum din nou tabelele ANGAJATI i CLIENTI. ntre aceste 2 tabele


exist o relaie unu cu mai muli, ceea ce nseamn c un client dat poate
fi asociat cu singur angajat i un angajat dat poate fi asociat cu orice numr
de clieni. Judecnd dup o regul de bun sim sau decizie a conducerii
organizaiei, un angajat nu poate s rspund de mai mult de 10 clieni
simultan. Pe baza acestui scenariu, putei deduce c gradul de participare
pentru tabelul ANGAJATI este (1,1) i gradul de participare pentru tabelul
CLIENTI este (0,10).
Dup ce ai identificat gradul de participare al unui tabel, adugai aceast
informaie n diagrama relaiei. Plasai gradul de participare deasupra liniei
de legtur a tabelului corespunztor. Figura 3.35 prezint diagrama
relaiei dintre tabelele ANGAJATI i CLIENTI, completat cu
simbolizarea gradului de participare.
Aceasta indic numrul minim i Aceasta indic numrul minim i numrul
numrul maxim de angajai cu
maxim de clieni cu care poate fi asociat
care poate fi asociat un client
un angajat

Clienti

Angajati

(0,10) ClientID

ChP
AngajatID ChE

(1,1)

AngajatID
............

ChP

Fig. 3.35. Indicarea gradului de participare


pentru tabelele ANGAJATI i CLIENTI

Putei, de asemenea s indicai gradul de participare nelimitat pentru orice


tabel dintr-o relaie ntre dou tabele, folosind litera N n locul celui deal doilea numr (1,N).
Urmtoarea sarcin pe care o avei este s parcurgei toate relaiile din baza
de date la care lucrai i s stabilii caracteristicile fiecruia, dup modelul
prezentat mai sus. Pe msur ce finalizai munca la o relaie dat, nu uitai
s actualizai diagrama relaiei, astfel nct aceasta s reflecte rezultatele
obinute.

91

Baze de date

Capitolul 3

Integritatea la nivel de relaie


O relaie atinge integritatea la nivel de relaie dup ce ai verificat ca ea s
fi fost corect stabilit i ca toate caracteristicile ei s fi fost precizate n
mod corespunztor. Integritatea la nivel de relaie garanteaz urmtoarele:
Conexiunea ntre cele dou tabele (sau cmpuri cheie) implicate
ntr-o relaie este solid. Vei obine acest lucru folosind
cmpurile cheie primar i extern la stabilirea relaiilor unu cu
unu sau unu cu mai muli i un tabel de legtur la stabilirea
relaiei de tip mai muli cu mai muli.
n fiecare tabel putei insera nregistrri noi ntr-o manier
semnificativ. Acest lucru l asigurai indicnd tipul
corespunztor de participare pentru fiecare tabel (sau cmp cheie)
implicat n relaie.
Putei terge o nregistrare existent fr a produce efecte
negative. Acest lucru este garantat prin atribuirea unei reguli
corespunztoare de tergere pentru relaie.
Exist o limit semnificativ pentru numrul de nregistrri ce
pot fi corelate ntr-o relaie. Acest lucru l implementai indicnd
gradul corespunztor de participare pentru fiecare tabel (sau cmp
cheie) implicat n relaie.
Dup cum tii, integritatea la nivel de relaie este a treia component a
integritii generale a datelor. (Prima este integritatea la nivel de tabel i a
doua este integritatea la nivel de cmp.)

92

Baze de date

Capitolul 3

Etapa 5 - Determinarea i definirea regulilor de


desfurare a activitii
n aceast etap vom determina regulile care trebuie s fie cunoscute i
respectate de toi utilizatorii bazei de date. Cea mai bun abordare a acestei
etape este definirea i stabilirea regulilor de desfurare a activitii
specifice cmpurilor, urmate de regulile de desfurare a activitii
specifice relaiilor. Aceast abordare v ajut s rmnei concentrat pe
tipul de regul pe care o definii. De asemenea, se evit saltul nainte i
napoi, de la un tip de regul la altul, fapt care poate determina confuzie i
sentimente de frustrare.
Reguli specifice cmpurilor
n mod normal, ar trebui ca fiecare cmp al bazei de date s aib regulile
sale, cuprinse n dosarul de documentare a bazei de date. Practic ns,
datorit faptului c unele cmpuri nu au nevoie de reguli, acestea fiind
evidente (nume de persoane, cmpuri numerice, date calendaristice etc.),
numai unele cmpuri au ntr-adevr nevoie de reguli pentru funcionarea
corect a bazei de date.
Pentru stabilirea regulilor de desfurarea activitii specifice cmpurilor,
vei parcurge urmtoarele etape:
Selectai un tabel;
Analizai fiecare cmp i determinai dac acesta necesit vreo
restricie;
Definii, dac e cazul, regulile de desfurare a activitii necesare
pentru respectivul cmp;
Determinai cum se verific regula;
Notai regula n formularul Foaie de specificaii pentru regula de
desfurare a activitii, prezentat n pagina urmtoare.
Regulile de desfurare a activitii se scriu ntr-un formular special numit
Foaie de specificaii pentru regula de desfurare a activitii, a crui rol
este de a uniformiza modalitile de prezentare a acestor reguli. De
asemenea, fiecare regul este prins ntr-un document ceea ce face mai
simpl gestionarea lor. O regul fiind tiprit pe un format A4, acestea se
pot arhiva n dosare, se pot multiplica, putnd fi accesate de oricine are
nevoie de aceste reguli. n figura 3.36 este prezentat acest formular.
93

Baze de date

Capitolul 3

Fig. 3.36. Formular pentru o regul de


desfurare a activitii

94

Baze de date

Capitolul 3

Documentul Foaie de specificaii pentru regula de desfurare a activitii


conine urmtoarele elemente:
Enun. Acesta este textul regulii de desfurare a activitii. El
trebuie s fie clar, succint i ar trebui s comunice restriciile
necesare, fr confuzii sau ambiguiti. Iat un exemplu concret
de regul:
O grup nu poate conine mai mult de 30 de studeni.
Restricie. Aici se pune o scurt explicaie a modului n care
restricia se aplic tabelelor i cmpurilor. De exemplu, putei
utiliza urmtoarea explicaie pentru restricia impus de regula
din exemplul precedent:

O singur nregistrare din tabelul tblGrupe poate fi asociat cu


maximum 30 de nregistrri din tabelul tblStudenti.
Tip. Aici indicai dac regula este orientat spre baza de date sau
este orientat spre aplicaie.
Categorie. Aici indicai dac regula este specific unui cmp sau
unei relaii.
Testare la. Aici indicai care aciuni (inserare, tergere,
actualizare) vor determina testarea restriciei impus de regula de
desfurare a activitii.
Structuri afectate. n funcie de tipul de regula de desfurare a
activitii, restricia va afecta fie un cmp, fie o relaie. Aici
specificai numele cmpurilor care vor fi afectate de regul sau
numele tabelelor implicate n relaie care vor fi afectate.
Elemente de cmp afectate. O regul de desfurare a activitii
care ine de un cmp poate afecta unul sau mai multe elemente
ale respectivei specificaii de cmp. Aici indicai elementele
afectate de regul.
Caracteristici de relaie afectate. O regul de desfurare a
activitii care ine de o relaie va afecta una sau mai multe
caracteristici ale respectivei relaii. Aici indicai caracteristicile
afectate de regul.
Aciune ntreprins. Aici indicai modificrile aduse elementelor
unei specificaii de cmp sau diagramei de relaie. Ceea ce scriei
aici trebuie s fie foarte clar i fr ambiguiti.

95

Baze de date

Capitolul 3

Reguli specifice relaiilor


Procedura de efectuare a acestei operaii presupune parcurgerea
urmtorilor pai:
Selectai o relaie;
Revizuii relaia i determinai dac aceasta necesit vreo
restricie;
Definii regulile de desfurare a activitii pentru relaie;
Modificai caracteristicile relaiei;
Determinai ce aciuni vor determina testarea regulii, altfel spus
cnd se vede regula;
Notai regula n formularul Foaie de specificaii pentru regula de
desfurare a activitii, prezentat n figura 3.36.
Se observ c aceast procedur este asemntoare cu cea utilizat pentru
regulile de desfurare a activitii specifice cmpurilor. Uurina cu care
vei stabili aceste reguli, depinde de experiena pe care o avei. Pentru
nceptori, recomand studiul cu atenie a paragrafului Studiu de caz.
Proiectarea unei baze de date, unde vei gsi modele de reguli pentru
desfurarea activitii, precum i alte informaii practice.
Regulile de desfurare a activitii specifice relaiilor se refer, n special,
la tipul de participare i gradul de participare (vezi capitolul 2, paragraful
Termeni referitori la relaie).
Pentru determinarea aciunilor care testeaz regula, gndii-v, de exemplu,
ce se ntmpl dac se terge o nregistrare dintr-un tabel care este legat cu
alt tabel. Dac un tabel conine cursuri, iar cellalt conine profesori care
in aceste cursuri, este clar c nu putem terge un profesor care are cel
puin un curs de inut. Dac
s-ar putea terge, ar aprea aanumitele
nregistrri orfane cu grave prejudicii n funcionarea bazei de date.
Referitor la numrul de cursuri pe care le poate preda un profesor, acesta
poate fi stabilit, de exemplu la 6. n acest caz, regula de desfurare a
activitii ar putea fi urmtoarea:
Un profesor trebuie s aib cel puin un curs, dar nu poate depi 6
cursuri.
96

Baze de date

Capitolul 3

Dac vei ajunge s lucrai n echipe complexe de proiectare i


implementare a bazelor de date i a sistemelor informatice, stabilirea
regulilor de desfurare a activitii va deveni activitate de rutin.
Tabele de validare
n timp ce definii reguli pentru desfurarea activitii specifice unui cmp
poate aprea situaia n care acel cmp nu poate avea dect anumite valori,
adic un set distinct de valori. Se poate aminti aici cmpul numit JUDETE,
e clar c acesta nu poate avea alt valoare dect una din cele 42 de judee
ale rii. De asemenea, cmpul cu seciile unei faculti nu poate avea alt
valoare dect numele acelor secii.
Se pune firesc ntrebarea, cum stabilim acel set distinct de valori pe care le
poate lua un anumit cmp. O soluie ar fi enumerarea valorilor ntr-un
Interval de valori de pe Foaia de specificaii a cmpului. Acest lucru
merge bine cnd avem puine valori (ex. Sex: M/F, Note: 1-10), dar nu n
cazul judeelor ca n exemplul amintit mai sus.
Pentru un numr mare de valori trebuie neaprat s folosim un tabel de
validare. Acest tabel are cel puin 2 cmpuri (ID i Valoare) i o
caracteristic util, aceea de a nu se schimba de loc sau foarte rar, vezi
exemplul cu judeele i cu seciile unei faculti.
Iat cum apare tabelul de validare pentru judeele rii noastre, figura 3.37.
JudetID
1
2
...
26
...

Abreviere
AB
AR
...
MS
...

Denumire
Alba
Arad
...
Mures
...

Fig. 3.37. Tabel de validare

Este evident utilitatea tabelelor de validare n integritatea datelor unei


baze de date, deoarece este mpiedicat posibilitatea introducerii unor
valori greite, cum ar fi n cazul nostru, introducerea unui jude sub mai
multe denumiri: Bistria, Bistria-Nsud, Bistrita-Nasaud. Toate aceste
denumiri ale judeului respectiv ar fi posibile, dac ele ar fi introduse de
97

Baze de date

Capitolul 3

ctre un operator uman, dar dac se introduce cheia primar (JudetID),


sigur nu vor fi mai multe denumiri ale acestuia.

Etapa 6 - Determinarea i definirea vederilor


Am vzut n capitolul 2 ce este o vedere, un tabel virtual alctuit din
cmpuri care provin din unul sau mai multe tabele ale unei baze de date.
De asemenea, poate s conin cmpuri i din alte vederi. Tabelele i
vederile care compun o anumit vedere sunt cunoscute sub denumirea de
tabele de baz ale vederii. O vedere este virtual pentru c extrage date
din tabelele de baz n loc s stocheze singur date.
Pentru o vedere se stocheaz n baza de date numai structura ei, sistemul de
gestiune a bazei de date (SGBDR) reconstruiete i repopuleaz vederea
de fiecare dat cnd este accesat. Unele SGBDR uri folosesc pentru
vedere i denumirea de interogare cum ar fi Microsoft Access, de care o s
ne ocupm i noi n capitolul 5.
Vederile v permit s vedei informaiile din baza de date din puncte de
vedere diferite, oferindu-v mult flexibilitate cnd lucrai cu datele. Putei
crea vederi n mai multe moduri, iar acestea sunt deosebit de utile cnd se
bazeaz pe mai multe tabele ntre care exist relaii.
Exist mai multe motive pentru care ar trebui s definii i s utilizai
vederi n baza de date pe care o proiectai. Iat cteva dintre ele:
Lucrul cu date din mai multe tabele. Legtura dintre tabele se
materializeaz practic n vederi.
n vederi se afieaz cele mai frecvent folosite informaii.
Deoarece SGBDR reconstruiete i repopuleaz vederea de
fiecare dat cnd o activai, informaiile afiate n vedere
ilustreaz cele mai recente modificri ale datelor din tabelele de
baz ale acesteia.
Le putei particulariza pentru a corespunde cerinelor specifice
fiecrui individ sau grupe de indivizi. Se pot construi vederi care
s corespund oricrui set de cerine.
Le putei utiliza pentru a ajuta la asigurarea integritii datelor.
Putei defini o vedere de validare care funcioneaz ca i un tabel
de validare scopul acesteia fiind s furnizeze o gam de valori
acceptabile pentru un cmp dat al bazei de date.
98

Baze de date

Capitolul 3

Le putei utiliza n scopuri de securitate sau confidenialitate.


Putei determina ce date sunt disponibile unui anumit grup de
utilizatori.
Definii vederile cu atenie i ndemnare, iar acestea vor deveni elemente
valoroase n exploatarea bazei de date. Desigur, nu toate vederile o s le
identificai nc din faza de proiectare a bazei de date. Multe dintre ele v
vor fi sugerate de utilizatori sau de practic.
Vederile sunt de 3 tipuri i anume:
Vederi de date. Acestea extrag date din unul sau mai multe tabele.
Sunt cele mai ntlnite vederi.
Vederi agregate. Sunt folosite pentru a afia informaii produse
prin agregarea unui set de date, ntr-un mod specific. Aceste
vederi folosesc funciile agregate Sum, Average, Minim, Maxim
i Count.
Vederi de validare. Sunt folosite pentru a ajuta la implementarea
integritii datelor.
Vederile sunt create cu ajutorul limbajului SQL, aa cum vei nva n
capitolul 4.
Dup ce ai identificat vederea, aceasta va trebui trecut n documentaia
proiectului, cu ajutorul unui document numit Foaie de specificaii pentru o
vedere, prezentat n figura 3.38. Aceasta conine urmtoarele elemente:
Nume. Aici indicai numele vederii. Avei grij ca aceste nume s
fie ct mai sugestive.
Tip. Aici precizai dac vederea este de date, agregat sau de
validare.
Tabelele de baz. Aici specificai tabelele de baz ale vederii.
Expresii de cmp calculat. Aici notai expresiile pentru cmpurile
calculate, pe care le-ai inclus n vedere.
Filtre. Aici notai criteriile pe care le va folosi vederea pentru a
filtra nregistrrile pe care le afieaz. Vei nota att cmpul testat
ct i expresia utilizat pentru a-l testa.
Vedei Foaia de specificaii pentru o vedere, prezentat n figura 3.38.

99

Baze de date

Capitolul 3

100

Fig. 3.38. Formular pentru vedere

Baze de date

Capitolul 3

Documentarea unei vederi se face prin 2 documente de baz: foaie de


specificaii i diagrama de vedere. Foaia de specificaii a fost prezentat n
figura 3.38, iar pentru diagrama de vedere, cea mai bun explicaie este
prezentarea unui exemplu concret, aa cum se va vedea n continuare.
S presupunem c dorim o vedere care s conin toi studenii din baza de
date cu secia de la care provin i numrul de telefon. Aceast vedere are ca
tabele de baz tblStudenti i tblSectii, iar ca i cmpuri Student, Sectia,
Telefon. Cmpul Student este un cmp calculat, care se obine din
alturarea numelui i prenumelui studentului care se gsesc n cmpuri
separate. Numele seciei se va lua din tabelul tblSectii cu care este legat
tabelul tblStudenti. Diagrama de vedere este prezentat n figura 3.39.

tblSectii
tblStudenti
SectiaID
Sectia
..

StudentID
Nume
Prenume
SectiaID
Telefon

Lista studenti
Student
Sectia
Telefon

Fig. 3.39. Diagram de vedere

Aceast diagram, mpreun cu foaia de specificaii ofer informaiile


necesare pentru crearea vederii de ctre echipa care implementeaz baza de
date proiectat.

101

Baze de date

Capitolul 3

Etapa 7 Revizuirea integritii datelor


Aceasta este ultima etap a procesului de proiectare a bazelor de date. Pn
aici ai realizat multe lucruri i dac le-ai fcut bine la timpul potrivit, n
mod normal, acum nu prea ar trebui s avei probleme. Totui, aceast
etap este important pentru c ofer posibilitatea de a privi n ansamblu
proiectul bazei de date, legturile dintre prile sale curente, o survolare a
tuturor problemelor rezolvate. Este ca i cum ai terminat de construit o
cas nou, iar nainte de a v muta n ea mai facei o verificare a lucrrilor.
Dup aceast etap proiectul este gata pentru a fi livrat beneficiarului.
n primele 6 etape de elaborare a proiectului ai:
neles avantajele modelului relaional de baze de date;
nvat s creai o declaraie de intenie pentru o nou baz de
date;
nvat ce sunt i cum se definesc obiectivele misiunii pentru
noua baz de date;
Efectuat o analiz complex a bazei de date vechi;
Identificat cerinele organizaiei n privina informaiilor;
Definit structuri de tabel potrivite;
Atribuit chei primare tabelelor;
Stabilit specificaii de cmp;
Stabilit relaii ntre tabele;
Definit reguli de desfurare a activitii organizaiei pentru care
ai proiectat baza de date;
Definit vederile adecvate;
Cu toate acestea, este n avantajul dumneavoastr s facei o revizie final
a integritii generale a datelor din noua baz de date proiectat. Aceast
revizie final ar trebui s se bazeze pe principiul dect s regret c n-am
fcut-o, mai bine s regret c am fcut-o, altfel spus e mai avantajos s
revizuiesc i s nu gsesc nimic, dect s rmn o anomalie care oricum
va iei la iveal mai trziu, a crui eliminare nsemnnd costuri nzecite.

102

Baze de date

Capitolul 3

Revizuirea i mbuntirea integritii datelor


Revizuirea integritii datelor este o sarcin relativ simpl dac folosii o
abordare modular, adic s revizuii secvenial fiecare component a
integritii generale a datelor: integritatea la nivel de tabel, la nivel de
cmp, la nivel de relaie, la regulile de desfurare a activitii i a
vederilor.
Dac ai urmat regulile de proiectare prezentate n acest curs, n mod
normal nu trebuie s avei probleme. Mai departe vor fi prezentate pe scurt
ideile pe care ar trebui reinute n timp ce efectuai revizuirea.
La nivel de tabel. Pentru a v asigura c ai stabilit corect integritatea la
nivel de tabel, revizuii fiecare tabel i asigurai-v c tabelul respect
condiiile urmtoare:
Nu exist cmpuri duplicat n tabel;
Nu exist cmpuri duplicate n tabel;
Nu exist cmpuri cu mai multe valori n tabel;
Nu exist cmpuri cu mai multe pri n tabel;
Fiecare nregistrare din tabel este identificat de o valoare a cheii
primare;
Fiecare cheie primar respect setul de criterii de la definirea unei
chei primare.
Dac ntlnii vreo problem, rezolvai-o folosind tehnicile nvate.
La nivel de cmp. V putei asigura c ai stabilit corect integritatea la
nivel de cmp dup ce ai fcut urmtoarele:
Ai verificat ca fiecare cmp s respecte setul de criterii
Elementele cmpului ideal;
Ai verificat c ai definit un set de specificaii de cmp pentru
fiecare cmp.
La nivel de relaie. Examinai fiecare relaie ntre tabele pentru a v
asigura c ai stabilit corect integritatea la nivel de relaie. Ai stabilit
integritatea la acest nivel dup ce ai efectuat urmtoarele operaii:
103

Baze de date

Capitolul 3

Ai stabilit corect relaia;


Ai definit regulile de tergere adecvate;
Ai identificat tipul de participare pentru fiecare tabel al relaiei;
Ai stabilit corect gradul de participare pentru fiecare tabel.

Dac identificai vreo problem legat de relaie, rezolvai-o folosindu-v


de cunotinele referitoare la relaii.
La nivel de reguli de desfurare a activitii. V putei asigura c
regulile de desfurare a activitii sunt solide, verificnd urmtoarele
aspecte:
Suntei sigur c fiecare regul impune o restricie care are sens;
Ai determinat categoria potrivit pentru regul;
Ai definit i stabilit corect fiecare regul;
Ai modificat elementele de specificaie de cmp adecvate sau
caracteristicile relaiei ntre tabele;
Ai stabilit tabelele de validare adecvate;
Ai completat o Foaie cu specificaii pentru fiecare regul de
desfurare a activitii.
Rezolvai problemele aprute folosindu-v de cunotinele dobndite la
stabilirea regulilor de desfurare a activitii.
La nivelul vederilor. Dei vederile nu sunt legate direct de vreo
component a integritii datelor, datorit importanei lor, ar trebui s
verificai toate structurile de vederi. La examinarea vederilor, vei testa
urmtoarele aspecte:
Fiecare vedere conine tabelele de baz necesare pentru a furniza
informaiile solicitate;
Ai atribuit cmpurile adecvate fiecrei vederi;
Fiecare cmp calculat furnizeaz informaii pertinente sau
mbuntete maniera de prezentare a datelor;
Fiecare filtru returneaz setul adecvat de nregistrri;
Fiecare vedere are o diagram de vedere;
Fiecare vedere este nsoit de o Foaie de specificaii pentru
vedere.
104

Baze de date

Capitolul 3

Dup ce ai toate aceste revizuiri, putei fi ncredinat c baza de date pe


care ai proiectat-o are o structur solid, datele pe care le va conine sunt
unitare i acceptabile, iar informaiile pe care le vei extrage din ea vor fi
exacte.
Alctuirea documentaiei bazei de date
Pe parcursul procesului de proiectare a bazei de date, ai generat mai multe
liste, ciorne, foi de specificaii i diagrame utilizate pentru a nregistra
diverse aspecte ale proiectrii bazei de date. Toate acestea ar trebui s le
arhivai ntr-un depozit centralizat, de preferat, un set de dosare.
Proiectul propriu-zis al bazei de date va trebui s conin numai documente
necesare implementrii bazei de date. Setul de documente care compun un
proiect are urmtoarea structur:
Lista final de tabele;
Foi de specificaii pentru cmpuri;
Lista cmpurilor calculate;
Diagrame ale structurii tabelelor;
Diagrame de relaii;
Foi de specificaii pentru regulile de desfurare a activitii;
Diagrame ale vederilor;
Foi de specificaii pentru vederi.
Toate aceste documente constituie setul complet de articole necesar
structurii logice a bazei de date. Dup cum ai observat, n timpul
procesului de proiectare nu s-a fcut nici o referire la sistemul de gestiune a
bazelor de date (SGBDR) n care va fi implementat baza de date. Asta
nseamn c un proiect de baz de date poate fi implementat n orice
SGBDR.
n paragraful urmtor va fi prezentat un studiu de caz din care vei putea
vedea la modul concret cum se proiecteaz o baz de date.

105

Baze de date

Capitolul 3

Studiu de caz. Proiectarea unei baze de date


n acest paragraf va fi prezentat modalitatea practic de abordare a
proiectrii unei baze de date. Vor fi parcurse toate etapele de proiectare aa
cum au fost ele prezentate n acest capitol. Dup parcurgerea acestui
paragraf, studenii trebuie s tie ce s fac pentru a proiecta corect o baz
de date i cum s arate un proiect.
Declaraia de intenie
Dorim o baz de date pentru o bibliotec cu ajutorul cruia s gestionm
crile, cititorii i mprumuturile care se fac de ctre aceast bibliotec.
Obiectivele misiunii
n urma discuiilor i analizrii documentelor obinute de la diferite
persoane aparinnd bibliotecii, mpreun cu directorul ei am convenit c
baza de date care va fi proiectat va ndeplini urmtoarele obiective:
O eviden a crilor din bibliotec.
O eviden a cititorilor cu posibilitatea de a obine informaii despre natura
profesiilor lor, a preocuprilor etc.
Dorim s avem evidena mprumuturilor de cri.
Alte informaii utile.

Analiza bazei de date curente


Informaiile care exist la ora actual se gsesc n special n tabele Excel,
documente Word i registre scrise de mn.
Preluarea informaiilor se va prelua manual, iar acolo unde exist
posibilitatea vor fi concepute programe de transfer direct n tabelele bazei
de date. Aici se pot aminti, n special, informaiile coninute n tabelele
Excel.
Aceast etap trebuie s se termine cu o list preliminar de cmpuri care
se vor folosi n etapa urmtoare pentru crearea tabelelor. Aa spune teoria
i aa este corect, dar n practic aceast list de cmpuri este finalizat
odat cu tabelele din care fac parte. Nu este o abatere care s pun n
pericol proiectul nostru, trebuie mai mult atenie din partea noastr dar se
ctig timp preios.
Crearea structurilor de date
106

Baze de date

Capitolul 3

n urma analizrii obiectivelor misiunii au rezultat tabelele cu date,


stabilindu-se cmpurile i cheile, primare sau externe. n aceast etap se
vor definitiva i specificaiile de cmp, completnd formularul Specificaii
de cmp care se gsete n anexa acestei cri.
Lista cu tabelele bazei de date este prezentat n tabelul care urmeaz.
Tabel
tblAutori

tblEdituri

tblCarti

tblDomenii

tblImprumuturi

tblCititori

tblJudete

tblProfesii

Cimp
AutorID
ChP
Nume
Prenume
Nationalitate
DataN
DataD
EdituraID ChP
Denumire
Localitate
Tara
CarteID
ChP
AutorID
ChE
EdituraID ChE
Denumire
DomeniuID ChE
AnAparitie
Pagini
Valoare
Stoc
DomeniuID ChP
Denumire
Explicatii
ImprumutID ChP
CarteID
ChE
CititorID
ChE
DataImprumut
Perioada
DataRestituire
CititorID
ChP
Nume
Prenume
ProfesiaID ChE
DataN
Adresa
Localitate
JudetID
ChE
Observatii
JudetID
ChE
Denumire
Abreviere
ProfesiaID ChP
Denumire
Explicatii

Tip data
AutoNumber
Character(150)
Character(150)
Character(15)
Data/Time
Data/Time
AutoNumber
Character(150)
Character(150)
Character(50)
AutoNumber
Long Integer
Long Integer
Character(250)
Long Integer
Integer
Integer
Single
Integer
AutoNumber
Character(50)
Character(250)
AutoNumber
Long Integer
Long Integer
Data/Time
Integer
Data/Time
AutoNumber
Character(150)
Character(150)
Long Integer
Data/Time
Character(150)
Character(150)
Long Integer
Character(150)
AutoNumber
Character(75)
Character(2)
AutoNumber
Character(75)
Character(200)

107

Constringeri
Not Null
Not Null
Not Null

Observatii

zz-lll-aa
zz-lll-aa
Not Null
Not Null

Not Null
Not Null
Not Null
Not Null
Not Null

Not Null
Not Null
Not Null
Not Null
Not Null
zz-lll-aa
zz-lll-aa
Not Null
Not Null
Not Null
Not Null
zz-lll-aa

Not Null
Not Null
Not Null
Not Null
Not Null
Not Null

Baze de date

Capitolul 3

n acest moment avem toate tabelele bazei de date, cu cheile principale i


externe, cu specificaiile de cmp pentru toate cmpurile existente n toat
baza de date. Urmeaz partea ca mai spectaculoas a proiectului nostru,
stabilirea relaiilor dintre tabelele bazei de date.
Reamintesc c ntre 2 tabele nu poate exista dect o singur relaie. De
asemenea, reamintesc c exist 3 tipuri de relaii 1:1, 1:N i N:N, iar ultima
relaie trebuie transformat n 2 relaii 1:N, pentru a putea fi folosit n
rapoarte. n acest sens, au aprut tabelele de legtur tblAutoriCarti,
tblAutoriArticole, tblAutoriActivitati i tblAutoriContracte.
Documentaia proiectului ar trebui s cuprind doi de specificaii pentru
toate cmpurile tabelelor. Din motive de spaiu, nu vom completa aici
dect o astfel de foaie, care va fi prezentat n pagina urmtoare.
Cmpul descris n aceast specificaie va fi DataN.

108

Baze de date

Capitolul 3

Fig. 3.40. Foaia de specificaie


109 pentru cmpul DataN

Baze de date

Capitolul 3

Determinarea i instituirea relaiilor ntre tabele


Aceasta este etapa a 4-a din proiectarea unei baze de date. n urma
parcurgerii ei, va rezulta diagrama structurii bazei de date, folosind
notaiile i simbolurile nvate n acest capitol. Este documentul care va fi
folosit cel mai mult la implementarea bazei de date i care conine cea mai
mult informaie concentrat ntr-un spaiu redus, de regul o pagin
tiprit.
Pentru realizarea diagramelor pot fi folosite cunotinele dobndite la
studiul Word-ului sau Excel-ului. Pentru cei care cunosc alte programe cu
care se pot concepe diagrame, cum ar Microsoft Visio sau SmartDraw,
aceast etap va fi mult mai uoar i chiar plcut.
n cazul de fa, s-a optat pentru o diagrama de relaii scoas din mediul
Access, cu un program de captare de imagini (figura 3.41). Aceast
imagine o s mai fie ntlnit cu ocazia aplicaiilor pe care le vei face n
Access (cap. 5).

Fig. 3.41. Diagrama de relaii a bazei de date Biblioteca

Observai c relaia 1:N, partea mai muli, este aici notat cu simbolul
infinit.

110

Baze de date

Capitolul 3

Dup ce s-a creat diagrama bazei de date urmeaz stabilirea regulilor de


desfurare a activitii, care va fi abordat n pasul urmtor.
Determinarea i definirea regulilor de desfurare a activitii
n aceast etap trebuie s determinm regulile de desfurare a activitii
pentru baza de date proiectat. Dup cum tim, exist 2 tipuri de reguli de
desfurare a activitii, care se refer la cmp respectiv la relaii.
Din motive de spaiu vom prezenta numai 2 formulare completate cu
regulile respective, una pentru cmpuri i cealalt pentru relaii, pentru a
avea un model complet.
Pentru stabilirea regulilor de desfurare a activitii specifice unui cmp
trebuie s parcurgem urmtoarele etape:
Alegem un tabel;
Analizm fiecare cmp i stabilim dac acesta necesit vreo
restricie;
Dac e necesar, definim regulile de desfurare a activitii pentru
acel cmp;
Dac e necesar vom modifica i elementele adecvate din
specificaia de camp;
Determinm aciunile care verific regula;
nregistrm regula pe o Foaie de specificaii pentru regula de
desfurare a activitii.
Desigur, stabilirea regulilor de desfurare a activitii nu este o treab prea
simpl, experiena joac aici un rol important. Pentru a v ajuta n
nelegerea acestor aspecte se va prezenta mai jos o astfel de regul cu care
s-a completat o foaie de specificaii.
n figura 3.42 este prezentat un formular cu specificaii pentru o regul de
desfurare a activitii specific unui cmp.

111

Baze de date

Capitolul 3

Fig. 3.42. Regul de desfurare a activitii specific unui cmp

112

Baze de date

Capitolul 3

Dup ce s-au stabilit regulile de desfurare a activitii specifice


cmpurilor, este necesar s se stabileasc asemenea reguli i pentru relaii.
Pentru stabilirea regulilor de desfurare a activitii specifice unei relaii
trebuie s parcurgem urmtoarele etape:
Selectm o relaie;
Revizuim relaia i determinm dac aceasta necesit vreo
restricie;
Definim regulile de desfurare a activitii pentru aceast relaie;
Stabilim regula modificnd n acelai timp caracteristicile
adecvate relaiei;
Determinm ce aciuni verific regula;
Notm regula pe o Foaie de specificaii pentru regula de
desfurare a activitii.
n figura 3.43 este prezentat un formular cu specificaii pentru o regul de
desfurare a activitii specific unei relaii.

113

Baze de date

Capitolul 3

Fig. 3.43. Regul de desfurare a activitii specific unei relaii

114

Baze de date

Capitolul 3

Determinarea i definirea vederilor


Orict experien am avea, e greu de presupus c vom putea identifica
toate vederile n faza de proiectare. Nici nu ne propunem acest lucru.
Scopul acestui paragraf este de identifica cteva vederi ale proiectului la
care lucrm i a completa un formular de specificaii pentru una dintre ele.
Iat cteva vederi care n-ar trebui s lispseasc din proiectul nostru:
Cititorii cu profesiile lor;
Crile;
Editurile;
Aceste vederi i extrag datele dintr-unul sau mai multe tabele. Pentru
exemplificare s lum vederea Lista cititorilor bibliotecii a crei
structur o vedem n figura 3.44.

tblCititori
tblJudete
JudetID
Denumire
Abreviere

CititorID
Nume
Prenume
ProfesiaID
..
JudetID

Lista cititori
Cititor
Profesia
Adresa

Fig. 3.44. Diagrama de vedere Lista cititorilor


bibliotecii

115

tblProfesii
ProfesiaID
Denumirea
Explicatii

Baze de date

Capitolul 3

Observai c aceast vedere are ca tabele de baz tabelele tblJudete,


tblCititori i tblProfesii. ntre aceste tabele exist relaii unu la mai muli
dup cum se poate vedea din diagram.
Observai, de asemenea, c exist un cmp calculat, cmpul Cititor care
rezult din adunarea(concatenarea) cmpurilor Nume i Prenume.
n figura 3.45 este prezentat Foaia de specificaii pentru vederea Lista
cititorilor bibliotecii. Studiai cu atenie acest document i ncercai s
facei foi de specificaii pentru celelalte vederi.

116

Baze de date

Capitolul 3

Fig. 3.45. Foaie de specificaii117


pentru vederea Lista cititorilor bibliotecii

Baze de date

Capitolul 3

Verificarea integritii datelor


n aceast etap sunt rezolvate toate problemele legate de proiect. Practic
se poate trece la implementarea bazei de date ntr-un SGBDR, dar o ultim
verificare a proiectului nu este de prisos, deoarece ar fi putut scpa unele
mici erori care se vor descoperi oricum ntr-o anumit faz a procesului de
implementare. Se verific toate documentele proiectului, plecnd de la
declaraia de intenie i obiectivele misiunii, pentru a verifica dac
proiectul i-a atins scopul. Linitea pe care o dobndii tiind c avei o
baz de date temeinic proiectat merit timpul petrecut i efortul depus
pentru aceast revizuire final. Informaiile pe care le va furniza aceast
baz de date vor fi exacte. Este un fel de recepie final a proiectului,
fcut de executantul su.
Presupunem c ai verificat integritatea datelor la nivel de tabel, cmp,
relaie, desfurarea activitii i la nivel de vedere. Din pcate, aceast
etap nu are un document bine definit care s ateste c a fost fcut.
Concluzii privind proiectarea bazelor de date relaionale
Proiectarea bazelor de date relaionale este o activitate complex,
executat, de regul, de o echip de specialiti format din informaticieni,
ingineri i economiti. n acest studiu de caz, ai parcurs toate etapele
elaborrii unui proiect temeinic de baze de date. Dup cum spuneam, orice
baz de date are un scop de la care nu trebuie s ne abatem nici o clip. E
adevrat c unele obiective ale bazei de date nu sunt clar exprimate de
ctre beneficiari, dar asta nu e o problem pentru c echipa de dezvoltare
poate s clarifice aceste aspecte chiar de la nceput.
Pe tot parcursul elaborrii proiectului, ai adunat o documentaie
consistent care va fi de un real folos n procesul de implementare, mai
ales atunci cnd vor trebui operate modificri n proiect. Dac ai neles
etapele prin care ai trecut, dac ai completat formularele cerute (foile de
specificaii pentru cmp, relaie, vedere) nseamn c putei deveni un
component de baz al unei echipe de dezvoltare a unei aplicaii de baze de
date.
Ce rol ai putea avea ntr-o echip de dezvoltare a aplicaiilor de baze de
date? Ai putea definitiva declaraia de intenie i obiectivele misiunii, ai
118

Baze de date

Capitolul 3

putea lucra la completarea formularelor de specificaii pentru cmp, relaie,


vedere i reguli de desfurare a activitii. Un rol important ai putea avea
n culegerea de informaii de la viitorii utilizatori ai bazei de date.
Dac suntei angajatul firmei beneficiare, vei putea colabora eficient cu
echipa de dezvoltare, ca viitor utilizator al bazei de date. Dac
mprejurrile o cer, ai putea deveni administrator al bazei de date, o munc
extrem de important i cu mare resposabilitate (vezi Anexa A).

119

Baze de date

Capitolul 4

Capitolul 4. Iniiere n limbajul SQL


n acest capitol vom studia elementele de baz ale limbajului de interogare i
manipulare a bazelor de date SQL. Vom folosi acest limbaj pentru a scoate
informaii dintr-o baz de date, pentru a modifica datele tabelelor i chiar pentru
crearea de noi tabele sau tergerea lor din baza de date. Abordarea limbajului se
va face de la simplu spre complex, iar exemplele prezentate vor fi foarte sugestive
pentru nelegerea operaiunilor executate.

Prezentare general
Limbajul SQL este abrevierea de la Structured Query Language (limbaj
structurat de interogare) i este un limbaj conceput special pentru
comunicarea cu bazele de date.
Spre deosebire de alte limbaje de programare, SQL se compune din foarte
puine cuvinte (instruciuni), ceea ce face s fie uor de nvat i folosit.
Toate bazele de date importante accept limbajul SQL, aa c nvarea lui
este de un real folos. n ciuda aparentei simpliti, SQL este un limbaj
foarte puternic, cu care, dac-i utilizai cu inteligen facilitile, putei
efectua operaii complexe i sofisticate cu bazele de date.
Limbajul SQL este un limbaj neprocedural sau declarativ deoarece nu
conine instruciuni precum IF, GOTO, WHILE sau altele care s ofere un
flux de control; utilizatorul lui descrie numai informaiile pe care vrea s le
obin n urma interogrii bazei de date, fr a fi nevoie s stabileasc i
modalitile de a ajunge la rezultatele dorite. Este ceea ce viseaz fiecare
dintre noi, nu?
Exist un anumit grad de standardizare a limbajului SQL, mai multe
SGBDR recunoscnd principalele instruciuni ale acestuia. Pe plan
mondial, standardul n domeniu este considerat ANSI (American National
Standards Institute) SQL care are n vedere att aspectele de definire,
interogare, manipulare a datelor, procesare a tranzaciilor, ct i
caracteristicile complexe privind securitatea informaiilor.
120

Baze de date

Capitolul 4

Se cunosc n literatura de specialitate trei metode de baz privind


implementarea limbajului SQL i anume: cea prin apelare direct, cea
modular i cea de tip ncapsulat. Prima metod cost n introducerea
instruciunilor SQL de la prompter, cea de a doua folosete anumite
proceduri apelate de programele aplicaiei, iar cea de a treia variant de
implementare are n vedere instruciuni ncapsulate n codul program, fiind
de tip static i dinamic.
Instruciunile SQL se grupeaz astfel:
Instruciuni de definire a datelor;
Instruciuni de manipulare a datelor (adugare, modificare,
tergere);
Instruciuni de selecie a datelor (consultare a bazei de date);
Instruciuni de procesare a tranzaciilor.
Dup cum spuneam, instruciunile SQL sunt puine, dar ele sunt
completate cu clauze care le mresc puterea. Practic, noi trebuie s
nelegem i s folosim clauzele care nsoesc instruciunile. Sintaxa
folosit nu este pretenioas, singura noastr grij este s folosim expresii
lizibile, prin evidenierea instruciunilor i a parametrilor lor.
n cadrul acestui curs vom folosi limbajul SQL corespunztor programului
ACCESS. n acest capitol vom nva folosirea limbajului scriind expresii
SQL pe hrtie folosind o baz de date existent, completat cu date. Abia
n capitolul urmtor vom folosi limbajul SQL n cadrul programului
ACCESS.
Baza de date pe care o vom folosi n acest capitol, cea pe care o s ne
exersm talentele, este cea proiectat n capitolul anterior i se numete
BD_ITM, a crei structur este cunoscut. Pentru unele instruciuni vom
folosi i alte baze de date dac necesitile vor impune acest lucru.
Metoda pe care o vom folosi pentru a nva limbajul SQL este cea a
nvrii din mers a instruciunilor i clauzelor, adic executm
operaiuni i nvm instruciunile folosite. Operaiunile vor fi n aa fel
alese ca s acopere tot spectrul practic pe care o s-l ntlnii n realitate.
ntr-o anex vor fi sistematizate instruciunile SQL cu clauzele i sintaxa
lor. Aceast anex v va fi de un real folos dup ce vei dobndi o anumit
experien n utilizarea limbajului SQL.
121

Baze de date

Capitolul 4

Operaiuni simple folosind limbajul SQL


Regsirea datelor
Regsirea datelor se face cu instruciunea SELECT, folosit pentru a regsi
una sau mai multe coloane. Aceasta este cea mai folosit instruciune din
SQL.
Din tabelul tblStudenti prezentat n figura 4.1 ne propunem s extragem
numele i prenumele studenilor.
StudID
1
2
3
4
5
6
7
8
9
10

Nume
Bogdan
Meruta
Pop
Bucur
Chirila
Cotirla
Cotoara
Cozma
Damian
Farcas

Init
P.
I.
T.
P.
I.
L.
G.
D.
N.
I.

Prenume
Mircea Florin
Cosmin
Marius Traian
Mihaela
Laura
Raluca Adina
Ovidiu
Dumitru
Daniel
Calin Florin

Sectia
IEI
IEI
IEI
IEI
IEI
TCM
TCM
TCM
MEC
MEC

An
1
3
2
2
3
1
1
2
4
4

Fig. 4.1. Tabelul tblStudenti simplificat

Expresie SQL:
SELECT Nume, Prenume
FROM tblStudenti;

Rezultat:
Nume
Bogdan
Meruta
Pop
Bucur
Chirila
Cotirla
Cotoara
Cozma
Damian
Farcas

Prenume
Mircea Florin
Cosmin
Marius Traian
Mihaela
Laura
Raluca Adina
Ovidiu
Dumitru
Daniel
Calin Florin

122

Grupa
1311
1332
1321
1321
1331
1111
1111
1121
1241
1241

Stare
Bugetar
Bugetar
Bugetar
Bugetar
Bugetar
Bugetar
Bugetar
Bugetar
Bugetar
Taxa

Baze de date

Capitolul 4

Observai expresia SQL care se citete astfel: selecteaz coloanele Nume i


Prenume din tabelul tblStudenti. S-a folosit i clauza FROM, aa cum se
vede. Rezultatul obinut este evident.
Dac dorii s selectai toate coloanele tabelului se folosete expresia
urmtoare:
Expresie SQL:
SELECT *
FROM tblStudenti

n locul listei de coloane se pune acest simbol * .


Sortarea datelor
Prin sortarea datelor se nelege aranjarea nregistrrilor unui tabel ntr-o
anumit ordine, de regul, alfabetic sau cresctoare/descresctoare.
Sortarea datelor se face cu ajutorul clauzei ORDER BY a instruciunii
SELECT.
La tabelul din figura 4.1 ne propunem s scoatem numai numele i
prenumele studenilor dar n ordine alfabetic.
Expresie SQL:
SELECT Nume, Prenume
FROM tblStudenti
ORDER BY Nume;

Rezultat:
Nume
Bogdan
Bucur
Chirila
Cotirla
Cotoara
Cozma
Damian
Farcas
Meruta
Pop

Prenume
Mircea Florin
Mihaela
Laura
Raluca Adina
Ovidiu
Dumitru
Daniel
Calin Florin
Cosmin
Marius Traian

123

Baze de date

Capitolul 4

Observai clauza ORDER BY care ordoneaz nregistrrile n ordine


alfabetic dup valorile din cmpul Nume. Se pune ntrebare, ce ne facem
dac vrem s ordonm invers alfabetic (de la Z la A)? Sau dac avem un
cmp numeric i dorim s ordonm descresctor dup acest cmp. Iat
rspunsul:
Pentru a indica ordinea descresctoare de sortare se folosete
cuvntul cheie DESC.
Dac cmpul dup care se face sortarea este alfanumeric, sortarea
se face alphabetic, iar dac este numeric sau de dat
calendaristic, sortarea se face cresctor/descresctor.
Dac nu se indic direcia de sortare, se ia sortarea cresctoare
care este implicit. (Cazul prezentat.)
Iat cum arat o expresie SQL n care apare i cuvntul cheie DESC:
Expresie SQL:
SELECT Nume, Prenume
FROM tblStudenti
ORDER BY Nume DESC

Reinei c rezultatul sortrii datelor este un tabel care are acelai numr de
nregistrri ca i originalul.
Filtrarea datelor
Prin filtrarea datelor se nelege extragerea dintr-un tabel numai a anumitor
nregistrri de care avem nevoie, de exemplu, din tabelul de studeni avem
nevoie numai de cei din anul 2. Pentru a executa aceast operaiune vei
folosi clauza WHERE a instruciunii SELECT.
Regsirea numai a nregistrrilor dorite, presupune includerea n expresia
SQL a unui criteriu de cutare a nregistrrilor dorite. ntr-o instruciune
SELECT, datele sunt filtrate prin specificarea criteriilor de cutare n
clauza WHERE. Locul acesteia este imediat dup numele tabelului (clauza
FROM), ca n exemplul urmtor. Fie tabelul din figura 4.1.

124

Baze de date

Capitolul 4

Ne propunem s filtrm studenii din anul 2. expresia SQL este


urmtoarea:
Expresie SQL:
SELECT StudID, Nume, Init, Prenume, Sectia, Grupa
FROM tblStudenti
WHERE An = 2;

Rezultat:
StudID
3
4
8

Nume
Pop
Bucur
Cozma

Init
T.
P.
D.

Prenume
Marius Traian
Mihaela
Dumitru

Sectia
IEI
IEI
TCM

Grupa
1321
1321
1121

Operatorii clauzei WHERE

Clauza WHERE pe care am examinat-o a testat egalitatea determin dac


o coloan conine valoarea specificat. Limbajul SQL accept mai muli
operatori condiionali, dup cum urmeaz:
=
Egalitate
<>
Non-egalitate
!=
Non-egalitate
<
Mai mic dect
<=
Mai mic sau egal cu
!<
Nu mai mic dect
>
Mai mare dect
>=
Mai mare sau egal cu
!>
Nu mai mare dect
BETWEEN ntre dou valori specificate
IS NULL Este o valoare NULL
Observai c pentru non-egalitate exist dou simboluri, aceasta pentru c
diversele SGBDR-uri accept pe unul sau altul dintre ele.

125

Baze de date

Capitolul 4

Iat cteva cazuri concrete de folosire a operatorilor:


Interval de valori: WHERE Pret BETWEEN 2.5 AND 10; (afieaz toate
nregistrrile care au n coloana Pret valori ntre 2.5 i 10).
Valoare NULL: WHERE Pret IS NULL; (afieaz toate nregistrrile care
nu au pre).
Non-egalitate: WHERE Stare <> Bugetar; (afieaz toate nregistrrile din
tabelul studeni, folosit mai nainte, care nu sunt bugetari). Este evident c
putem formula i altfel condiia, dar aici am folosit non-egalitatea.
Ceilali operatori se folosesc la fel ca cel de egalitate prezentat puin mai n
fa.
Filtrare avansat

Filtrrile prezentate mai sus se ntlnesc mai rar n practic deoarece sunt
foarte simple. Filtrrile pe care le vei folosi n mod curent, sunt filtrri mai
complicate la care criteriile sunt exprimate prin expresii complexe. Aceste
criterii creeaz condiii puternice de cutare. Vom folosi ali operatori cum
sunt AND, OR, NOT i IN.
De multe ori, filtrarea dup o coloan nu rezolv problema pe care o avem.
Pentru a filtra dup mai multe coloane se folosete operatorul AND. Fie
tabelul din figura 4.2. Ne propunem s facem diferite filtrri.
StudID
1
2
3
4
5
6
7
8
9
10

Nume
Bogdan
Meruta
Pop
Bucur
Pop
Cotirla
Cotoara
Cozma
Damian
Cozma

Init
P.
I.
T.
P.
I.
L.
G.
D.
N.
I.

Prenume
Mircea Florin
Cosmin
Marius Traian
Mihaela
Laura
Raluca Adina
Ovidiu
Dumitru
Daniel
Calin Florin

Sectia
IEI
IEI
IEI
IMPI
IEI
TCM
TCM
TCM
MEC
MEC

Fig. 4.2. Tabel cu studeni

126

An
1
1
2
2
3
1
1
2
4
4

Grupa
1311
1312
1321
1321
1331
1111
1111
1121
1241
1241

Stare
Bugetar
Taxa
Bugetar
Bugetar
Taxa
Bugetar
Bugetar
Bugetar
Bugetar
Taxa

Baze de date

Capitolul 4

Operatorul AND. Prima filtrare ar fi studenii de la IEI din anul 1. Iat


expresia SQL:
Expresie SQL:
SELECT Nume, Prenume, Grupa, Stare
FROM tblStudenti
WHERE Sectia=IEI AND An = 1;

Rezultat:
Nume
Bogdan
Meruta

Prenume
Mircea Florin
Cosmin

Grupa
1311
1312

Stare
Bugetar
Taxa

Urmrii expresia SQL i verificai rezultatul obinut. ncercai i alte


filtrri asemntoare. Observai folosirea operatorului AND. Cum ar trebui
modificat expresia SQL, pentru a afia rezultatul n ordine alfabetic
invers?
Operatorul OR. O alt filtrare pe care ne-o propunem, este s filtrm
studenii din anul 2 de la IEI sau TCM.
Expresie SQL:
SELECT Nume, Prenume,Sectia, Grupa, Stare
FROM tblStudenti
WHERE (Sectia=IEI OR Sectia=TCM) AND An = 2;

Rezultat:
Nume
Pop
Cozma

Prenume
Marius Traian
Dumitru

Sectia
IEI
TCM

Grupa
1321
1121

Stare
Bugetar
Bugetar

Observai folosirea parametrilor OR i AND, respectiv apariia celor dou


paranteze. Aceste paranteze au legtur cu ordinea operaiilor OR i AND.
n ordinea operaiilor, operatorul AND se execut naintea operatorului
OR, ceea ce ar duce la rezultate eronate, de aceea a fost pus operatorul OR
n parantez, ca s-l execute primul, tiut fiind c parantezele au prioritate
la execuie.
Operatorul IN. Folosirea acestui operator are ca scop specificarea unui
domeniu de condiii, oricare dintre ele putnd fi ndeplinite. Operatorul IN
127

Baze de date

Capitolul 4

necesit o list de valori valide, care s fie separate prin virgule i cuprinse
ntre paranteze.
Ne propunem s alegem din tabelul din figura 4.2 toi studenii care au
numele Pop i Cozma.
Expresie SQL:
SELECT Nume, Prenume,Sectia, Grupa, Stare
FROM tblStudenti
WHERE Nume IN (Pop, Cozma);

Rezultat:
Nume
Pop
Pop
Cozma
Cozma

Prenume
Marius Traian
Laura
Dumitru
Calin Florin

Sectia
IEI
IEI
TCM
MEC

Grupa
1321
1331
1121
1241

Stare
Bugetar
Taxa
Bugetar
Taxa

Din analiza acestui exemplu, putem observa fr greutate c operatorul IN


face cam acelai lucru ca i operatorul OR, deci se poate scrie o expresie
SQL cu acesta. Care este aceast expresie?
Se pune, pe bun dreptate, ntrebarea de ce mai avem nevoie de nc un
operator dac avem unul care face acelai lucru. Rspunsul este c
operatorul IN are unele avantaje care l fac de preferat fa de operatorul
OR. Iat aceste avantaje:
Cnd lucrai cu liste lungi de opiuni valide, sintaxa operatorului
IN este mai simpl i uor de citit, principalul avantaj.
Ordinea de evaluare este mai simplu de gestionat, cnd operatorul
IN este folosit n asociaie cu operatorii AND i OR.
Aproape totdeauna, operatorii IN se execut mai rapid dect
listele de operatori OR.
Un mare avantaj este c operatorul IN poate s conin o alt
instruciune SELECT, i astfel v permite s construii clauze
WHERE foarte dinamice. Acest aspect va fi reluat mai trziu.
Operatorul NOT. Acest operator al clauzei WHERE are o singur funcie
neag orice condiie care l urmeaz. Deoarece NOT nu este utilizat
niciodat n sine (totdeauna se folosete n asociaie cu alt operator),
sintaxa lui e diferit de toi ceilali operatori. Spre deosebire de ali
128

Baze de date

Capitolul 4

operatori, cuvntul cheie NOT poate fi utilizat naintea coloanei dup care
se face filtrarea, nu imediat dup aceasta.
Iat un exemplu sugestiv, extragerea studenilor nebugetari din tabelul din
figura 4.2.
Expresie SQL:
SELECT Nume, Prenume,Sectia, Grupa, Stare
FROM tblStudenti
WHERE NOT Stare=Bugetar;

Rezultat:
Nume
Meruta
Pop
Cozma

Prenume
Cosmin
Laura
Calin Florin

Sectia
IEI
IEI
MEC

Grupa
1312
1331
1241

Stare
Taxa
Taxa
Taxa

Dup cum se vede, acelai lucru l puteam obine i cu operatorul <>.


Iari se pune ntrebarea de ce s folosim, totui, operatorul NOT? ntradevr, pentru clauzele WHERE simple, cum e cea prezentat, nu se poate
spune c ar exista un avantaj real n folosirea operatorului NOT. Acesta
este ns foarte util n clauzele mai complexe. De exemplu, dac folosii
operatorul NOT n asociaie cu un operator IN, va fi mult mai simplu s
gsii toate nregistrrile care nu corespund cu o list de criterii.
Operatorul LIKE. Aici vei nva ce sunt caracterele de nlocuire, cum se
folosesc ele i cum s facei cutri cu ajutorul lor. Pn acuma, toi
operatorii, foloseau valori cunoscute, iar ei se ocupau de cutarea
corespondenelor dintre valori, dac sunt mai mari sau mai mici dect
altele, dac verific un domeniu de valori etc. De multe ori apare
necesitatea filtrrii nregistrrilor dup unele criterii care nu folosesc valori
cunoscute n totalitate. De exemplu, dorii s cutai nume de persoane care
ncep cu o liter, care conin un grup de litere etc. Acest lucru nu se poate
face cu criterii simple comparare.
O soluie, pe care ne-o propune SQL, este folosirea caracterelor de
nlocuire. Caracterele de nlocuire sunt caractere ce au nelesuri speciale
n clauzele WHERE din SQL, iar limbajul SQL accept diverse tipuri de
caractere de nlocuire.

129

Baze de date

Capitolul 4

Pentru a utiliza caracterele de nlocuire n clauzele de cutare, trebuie


utilizat operatorul LIKE. Acesta anun sistemul de gestiune a bazei de
date c n urmtorul model de cutare se va folosi o potrivire dup
caractere de nlocuire, nu o simpl potrivire de egalitate.
Cutarea cu caractere de nlocuire poate fi utilizat numai cu cmpuri de
tip text. Reinei acest lucru!
n continuare vor fi prezentate caracterele de nlocuire folosite de
programul ACCESS.
Caracterul de nlocuire *. Este cel mai frecvent utilizat. ntr-un ir de
cutare,
* nseamn corespunde cu oricte apariii a oricrui
caracter. Exemplul care urmeaz v va ajuta s nelegei acest caracter.

StudID
1
2
3
4
5
6
7
8
9
10

Nume
Bogdan
Brustur
Popescu
Brucan
Pop
Cotirla
Popa
Popovici
Branea
Cozma

Init
P.
I.
T.
P.
I.
L.
G.
D.
N.
I.

Prenume
Mircea Florin
Cosmin
Marius Traian
Mihaela
Laura
Raluca Adina
Ovidiu
Dumitru
Daniel
Calin Florin

Sectia
IEI
IEI
IEI
IMPI
IEI
TCM
TCM
TCM
MEC
MEC

Fig. 4.3. Tabel cu studeni

130

An
1
1
2
2
3
1
1
2
4
4

Grupa
1311
1312
1321
1321
1331
1111
1111
1121
1241
1241

Stare
Bugetar
Taxa
Bugetar
Bugetar
Taxa
Bugetar
Bugetar
Bugetar
Bugetar
Taxa

Baze de date

Capitolul 4

Ne propunem s filtrm toate nregistrrile n care numele studenilor, din


tabelul din figura 4.3, ncepe cu Pop.
Expresie SQL:
SELECT Nume, Prenume,Sectia, Grupa, Stare
FROM tblStudenti
WHERE Nume LIKE Pop*
ORDER BY Nume;

Rezultat:
Nume
Pop
Popa
Popescu
Popovici

Prenume
Laura
Ovidiu
Marius Traian
Dumitru

Sectia
IEI
TCM
IEI
TCM

Grupa
1331
1111
1321
1121

Stare
Taxa
Bugetar
Bugetar
Bugetar

Observai ghilimelele care se pun i ordonarea rezultatului dup cmpul


Nume. ncercai i alte filtrri folosind aceast tehnic.
Caracterul de nlocuire ? . Acest caracter (semnul ntrebrii) este
utilizat la fel ca simbolul * , dar nu asigur corespondena mai multor
caractere, ci numai a unuia singur. Exemplul care urmeaz v ajut s
nelegei folosirea lui.
Folosind tabelul din figura 4.3, scriei expresii SQL care s ilustreze
folosirea acestui caracter de nlocuire.
Observaie! n diferite SGBDR semnele de nlocuire ar putea s fie
diferite. Astfel, n Oracle * este nlocuit cu % , iar ? este nlocuit
cu liniua de subliniere _ . Pentru a nu avea probleme este bine s
studiai documentaia SGBDR-ului pe care l vei folosi.

131

Baze de date

Capitolul 4

Operaiuni avansate folosind limbajul SQL


Cmpuri calculate
Dup tii de la proiectarea bazelor de date, o regul de baz ne spune c
fiecare cmp trebuie s fie independent, adic valoare sa s nu depind de
valorile din alte cmpuri. Exemplul clasic care se poate da aici este cel al
cmpului Valoare care nu trebuie s apar ntr-un tabel care are Pretul
unitar i Cantitatea, dar avem nevoie de acest cmp care este rezultatul
nmulirii dintre pre i cantitate. Ei bine, acest cmp trebuie calculat. Un
alt exemplu este cel al adresei care se compune din concatenarea
rezultatelor din mai multe cmpuri.
n ambele exemple, datele stocate n tabele nu sunt exact ceea ce are
nevoie aplicaia dumneavoastr. n loc s regsii datele aa cum sunt,
pentru ca dup aceea s le reformatai n aplicaia client sau n raport, dorii
s regsii datele transformate, calculate sau reformatate direct din baza de
date.
Aici intervin cmpurile cu valori calculate, pe care le vom numi n
continuare cmpuri calculate. Spre deosebire de toate coloanele de pn
acum, cmpurile calculate nu exist, de fapt, n baza de date. Un cmp
calculat este creat din mers, n interiorul unei instruciuni SELECT din
limbajul SQL.
De menionat faptul c numai baza de date tie care coloane dintr-o
instruciune SELECT sunt realmente coloane din tabele i care sunt
cmpuri calculate. Din perspectiva unui client, datele unui cmp calculat
sunt returnate n acelai mod ca i datele din oricare coloan.
Cel mai simplu mod de a nelege crearea cmpurilor calculate este de a
alege exemple sugestive pe care s le comentm.
Cmpuri calculate prin concatenare. De multe ori apare necesitatea
concatenrii valorilor text din mai multe coloane. De exemplu, ntr-un
raport trebuie s scriem identitatea unei persoane format din numele
complet, aa cum se obinuiete n practic. S scriem expresia SQL care
face acest lucru pentru persoanele din tabelul din figura 4.3.

132

Baze de date

Capitolul 4

Expresie SQL:
SELECT Nume + + Init + + Prenume AS Student, Sectia, An, Grupa, Stare
FROM tblStudenti
ORDER BY Nume;

Rezultat:
Student
Bogdan P. Mircea Florin
Branea N. Daniel
Brucan P. Mihaela
Brustur I. Cosmin
Cotirla L. Raluca Adina
Cozma I. Calin Florin
Pop I. Laura
Popa G. Ovidiu
Popescu T. Marius Traian
Popovici D. Dumitru

Sectia
IEI
MEC
IMPI
IEI
TCM
MEC
IEI
TCM
IEI
TCM

An
1
4
2
1
1
4
3
1
2
2

Grupa
1311
1241
1321
1312
1111
1241
1331
1111
1321
1121

Stare
Bugetar
Bugetar
Bugetar
Taxa
Bugetar
Taxa
Taxa
Bugetar
Bugetar
Bugetar

Observai sintaxa folosit i ceva nou a aprut, cuvntul cheie AS dup


care urmeaz cuvntul Student, pe care l regsim n capul de tabel, ca
nume a noului cmp, obinut prin concatenarea celor trei. Cuvntul cheie
AS introduce un alias care este un nou nume dat unui cmp. Reinei
aceast tehnic de creare a unor cmpuri.
Cmpuri calculate aritmetic. Aceste cmpuri calculate rezult dup
efectuarea unor calcule aritmetice asupra datelor regsite. Pentru a nelege
mecanismul crerii acestor cmpuri, vom lua un exemplu practic.
Presupunem c avem un tabel n care inem intrrile ntr-o magazie de
produse, al unei firme de comer cu piese auto. Tabelul se numete
tblProduse i are coloanele Cod, Denumire, Furnizor, PU, Cantitate. Se
cere un raport al intrrilor n magazie n care apare i cmpul Valoare,
obinut prin produsul cmpurilor PU i Cantitate. n figura 4.4 este
prezentat acest raport.

133

Baze de date
Cod
1001
1023
1231
1089
1904

Capitolul 4

Denumire
Bujie DK1
Acumulator 56A
Parbriz VW
Antigel -30
Ulei PKT 1

Furnizor
Sinterom SA
Rombat SA
Cobra SRL
Promaxim SRL
Calota SRL

PU
12
124
512
5.2
6.4

Cantitate
30
25
12
50
60

Valoare
360
3100
6144
26
384

Fig. 4.4. Raport cu cmpul valoare calculate

Expresie SQL:
SELECT Cod, Denumire, Furnizor, PU, Cantitate, PU*Cantitate AS Valoare
FROM tblProduse;

Observai i reinei sintaxa folosit pentru crearea noului cmp


VALOARE.

Funcii pentru manipularea datelor


Ca aproape toate limbajele de programare, SQL accept folosirea funciilor
pentru manipularea datelor. Funciile sunt operaii care, de obicei, se
efectueaz asupra datelor, n general pentru a facilita transformarea i
manipularea acestora.
Trebuie s avei n vedere c fiecare SGBDR are propriile funcii i propria
sintax, chiar dac ele seamn foarte mult, exist mici diferene pe care
trebuie s le tii studiind documentaia sistemului pe care l folosii.
Descrierea funciilor din acest paragraf nu o s v creeze probleme n
folosirea funciilor pentru orice SGBDR ntlnit n practic.
Majoritatea implementrilor SQL accept urmtoarele tipuri de funcii:
Funciile text sunt folosite la manipularea irurilor de text (de
exemplu, pentru ajustarea sau completarea valorilor n majuscule
i minuscule).
Funciile numerice sunt folosite pentru operaii matematice cu
date numerice (de exemplu, pentru returnarea valorilor absolute i
efectuarea de calcule algebrice).

134

Baze de date

Capitolul 4

Funcii de dat i timp sunt folosite la manipularea valorilor


calendaristice de dat i or, i la extragerea unor componente
caracteristice din aceste valori (an, lun, zi, or) pentru a verifica
validitatea unor date introduse.
Funciile text. n aceast categorie vom regsi clasicele funcii de text care
se gsesc n toate limbajele de programare. Iat-le pe cele mai folosite:
LEFT()
irului.
RIGHT()
LENGTH()
LOWER()
UPPER()
LTRIM()
RTRIM()

- returneaz caracterele indicate din stnga


- returneaz caracterele indicate din dreapta irului.
- returneaz lungimea unui ir.
- transform toate caracterele irului n minuscule.
- transform toate caracterele irului n majuscule.
- nltur spaiile albe din stnga irului.
- nltur spaiile albe din stnga irului.

Funciile numerice. n aceast categorie intr funciile folosite pentru


calcule algebrice, geometrice i trigonometrice. Sunt mai puin folosite la
bazele de date dect celelalte tipuri. Iat-le pe cele mai folosite:

ABS()
COS()
SIN()
TAN()
SQRT()
indicat.
PI()
AVG()
COUNT()
MAX()
coloan.
MIN()
coloan.
SUM()

- returneaz valoarea absolut a unui numr.


- returneaz cosinusul unui unghi indicat.
- returneaz sinusul unui unghi indicat.
- returneaz tangenta unui unghi indicat.
- returneaz rdcina ptrat a unui numr
- returneaz valoarea lui PI.
- returneaz valoarea medie a unei coloane.
- returneaz numrul de linii dintr-o coloan.
- returneaz valoarea cea mai mare dintr-o
- returneaz valoarea cea mai mic dintr-o
- returneaz suma valorilor unei coloane.

135

Baze de date

Capitolul 4

Ultimele cinci funcii se mai numesc i funcii agregat, deoarece au n


spate algoritmi compleci.
Funciile de dat i timp. Valorile datei i orei sunt stocate n baza de date
n formate speciale, de aceea este nevoie de funcii speciale pentru a le
manipula. Ele sunt cele mai importante funcii din limbajul SQL. Aceste
funcii ne ajut s extragei ora, luna, ziua, anul dintr-o astfel de dat i s
facei diferena dintre dou date calendaristice. Cele mai importante sunt:
Date()

- returneaz data curent a sistemului.

DateAdd(interval, numar, data) returneaz o dat rezultat din


adugarea unui interval la data specificat. Parametrul interval
poate avea valorile: yyyy an, q trimestru, m lun, d zi etc.
Exemple: DateAdd(yyyy,3,#22/11/2003#) returneaz 22/11/2006
DateAdd(m,5,#22/11/2003#) returneaz 22/04/2004

DateDiff(interval, data1, data2) returneaz diferena dintre dou


date calendaristice, bazate pe intervalul specificat.
Exemple: DateDiff(d,#15/10/2003#,#22/11/2003#) returneaz 38

Day(data) returneaz numrul de ordine al zilei lunii dintr-o


dat calendaristic. Exemplu Day(#15/10/2003) returneaz
15.
Hour(data) returneaz ora dintr-o dat calendaristic.
Month(data) - returneaz luna dintr-o dat calendaristic.
Now(data) returneaz data i ora curent a calculatorului pe care
lucrai.
Time() returneaz ora calculatorului dumneavoastr.
Year(data) returneaz anul dintr-o dat calendaristic.
Alte funcii de dat i sintaxa lor putei gsi n documentaia SGBDR pe
care l folosii.

136

Baze de date

Capitolul 4

Gruparea datelor
Crearea grupurilor

Am vzut n paragraful precedent c funciile agregat din SQL pot fi


utilizate pentru a genera sumare de date. Aceasta v permite s numrai
liniile, s calculai sume i medii, respectiv s obinei valorile cele mai
mari sau cele mai mici, fr necesitatea regsirii tuturor datelor.
Toate calculele de pn acum au fost efectuate asupra tuturor datelor dintrun tabel, sau asupra datelor ce corespundeau clauze WHERE specifice.
Dac ai dori s facei asemenea calcule asupra unor seturi logice se
nregistrri? Aici intervine gruparea datelor. De exemplu, gruparea
vnzrilor sptmnale dup numele vnztorului care le-a fcut.
Grupurile sunt create folosind clauza GROUP BY n instruciunea
SELECT. Modul cel mai simplu de a nelege crearea i utilitatea lor este
un exemplu practic. Presupunem c avem ntr-o baz de date un tabel n
care inem evidena produselor vndute de mai muli vnztori i dorim la
un moment dat s vedem ct a vndut fiecare, pentru a face o analiz a
activitii, nu-i aa? Tabelul se numete tblProduse i se vede n figura 4.5.
Cod_produs
100001
100345
100037
100445
100090
100552

Cod_vinzator
MR-01
KL-02
MR-01
MR-01
PR-02
GH-04

Denumire produs
Acumulator
Capota fata
Set motor
Cauciuc R13
Ulei M30
Antigel 34

Pret produs
250
120
356
65
50
20

Fig. 4.5. Tabelul tblProduse

O nregistrare din acest tabel reprezint o vnzare a unui produs, fcut de


un anumit vnztor. Ne propunem s aflm cte vnzri a fcut fiecare
vnztor.
Expresie SQL:
SELECT Cod_vinzator, COUNT(*) AS Numar_vinzari
FROM tblProduse
GROUP BY Cod_vinzator;

137

Baze de date

Capitolul 4

Rezultat:

Cod_vinzator
MR-01
KL-02
PR-02
GH-04

Numar_vinzari
3
1
1
1

Clauza GROUP BY instruiete sistemul de gestionare a bazei de date s


sorteze datele i s le grupeze dup coloana Cod_vinzator. n felul acesta,
numrul de vnzri va fi calculat cte o dat pentru fiecare vnztor n
parte. Dup cum se vede i n rezultat, vnztorul MR-01 a fcut 3 vnzri,
iar colegii si, cte una.
Deoarece ai folosit clauza GROUP BY, n-a trebuit s specificai fiecare
grup care trebuie evaluat i calculat, acest lucru s-a fcut n mod automat.
Clauza GROUP BY instruiete sistemul de gestionare a bazei de date s
grupeze datele i apoi s aplice funcia agregat fiecrui grup, nu asupra
ntregului set de rezultate.
Iat cteva reguli pe care trebuie s le tii despre utilizarea clauzei
GROUP BY:
Clauzele GROUP BY pot conine oricte coloane dorii. Asta v
permite s imbricai grupuri, asigurndu-v mai mult control
asupra felului n care sunt grupate datele.
Orice coloan enumerat n clauza GROUP BY trebuie s fie o
coloan original sau o expresie valid (calculat, dar nu o funcie
agregat). Dac o expresie este utilizat n instruciunea SELECT,
aceeai expresie trebuie s fie specificat i n clauza GROUP
BY. Nu pot fi folosite aliasuri.
Dac o coloan grupat conine o linie cu o valoare NULL,
NULL va fi returnat ca grup. Deci, dac exist mai multe linii cu
valoarea NULL, ele vor fi grupate laolalt, ceea ce este foarte
important din punct de vedere practic. De multe ori dorim s
vedem liniile cu valori nule pe o coloan, de exemplu, cnd
dorim s vedem integritatea datelor.
Clauza GROUP BY trebuie plasat dup toate clauzele WHERE
i nainte de orice clauz ORDER BY.
138

Baze de date

Capitolul 4

Filtrarea grupurilor

Pe lng faptul c este capabil s grupeze datele folosind clauza GROUP


BY, limbajul SQL v permite, de asemenea, s filtrai grupurile pe care le
includei sau le excludei. De exemplu, dac dorii lista tuturor
cumprtorilor care au emis minimum 2 comenzi, trebuie s efectuai o
filtrare bazat pe grupul complet, nu pe linii individuale.
Dup cum tim clauza WHERE filtreaz liniile ntregului tabel, nu a unui
grup aa cum am dori noi. Pentru filtrarea grupurilor, limbajul SQL ne
pune la dispoziie clauza HAVING, care este foarte asemntoare cu
clauza WHERE. Prin urmare, clauzele WHERE i HAVING se ocup de
acelai lucru, filtrare, singura diferen este c prima filtreaz linii, iar a
doua grupuri.
Clauza HAVING accept toi operatorii clauzei WHERE. Tot ce am
nvat despre WHERE este valabil i pentru HAVING.
Pentru a nelege clauza HAVING, s relum exemplul precedent i s
filtrm numai acei vnztori care au fcut mai mult de 2 vnzri. Iat
cazul:
Expresie SQL:
SELECT Cod_vinzator, COUNT(*) AS Numar_vinzari
FROM tblProduse
GROUP BY Cod_vinzator
HAVING COUNT(*) > 2;

Rezultat:

Cod_vinzator
MR-01

Numar_vinzari
3

Primele trei rnduri ale instruciunii SELECT sunt similare cu cele


anterioare, ultimul rnd, ns, adaug o clauz HAVING care filtreaz
grupurile respective cu o clauz COUNT(*) > 2 adic 3 sau mai multe
vnzri.
Dup cum se vede, clauza WHERE nu funcioneaz n cazul acesta,
deoarece filtrarea se bazeaz pe valoarea agregat a grupului, nu valorile
unor linii specifice.

139

Baze de date

Capitolul 4

De multe ori, n practic, apare necesitatea folosirii ambelor clauze, ceea ce


duce la mrirea vitezei de execuie. n acest caz ordinea de execuie ar fi
WHERE, GROUP BY i HAVING. De exemplu, un caz real ar fi acela de
a vedea ce cumprtori au depus la noi mai mult de 2 comenzi n ultimele
12 luni. E clar c nu vom face grupuri din tot tabelul de cumprtori, ci
numai dup ce i-am filtrat cu o clauz WHERE numai pe cei din ultimul
an. ncercai s concepei un astfel de tabel i s-i aplicai expresia SQL
care s fac aceste lucruri.
Reinei c clauza HAVING se folosete numai n asociere cu clauza
GROUP BY. Pentru a nu confunda ordinea de folosire a clauzelor
instruciunii SELECT studiate pn acum, iat aceast ordine:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

140

Baze de date

Capitolul 4

Lucrul cu subselecii
Instruciunile SELECT sunt interogri SQL. Toate instruciunile SELECT
de pn acum, regseau date din tabele izolate ale bazei de date. Limbajul
SQL v permite, de asemenea, s creai subselecii: interogri nglobate n
alte interogri. De ce ar fi nevoie de aa ceva? Exemplele care vor urma v
vor edifica asupra acestui lucru.
Presupunem c avem structura de tabele din figura 4.6.
tblDetaliiCom
tblComenzi

DetComID
Nr_comanda
ArticolID
PretArt
Cantitate

Nr_comanda ChP
DataCom
CumparatorID ChE

tblCumparatori
CumparatorID
NumeCump
Oras

ChP
ChE
ChE

Fig. 4.6. Diagrama de relaii

ChP

Se vede c avem 3 tabele, cte unul pentru cumprtori, comenzi i detalii


comenzi, ntre care exist relaiile desenate. Pentru a nelege mai bine
conceptul de subselecii vom completa aceste tabele cu date. n figura 4.7
se vd aceste tabele.

141

Baze de date

Capitolul 4

tblComenzi
ComandaID
10010
10011
10012
10013
10014
10015
10016
10017
tblDetaliiCom
DetComID
20010
20011
20012
20013
20014

DataCom
16.04.2005
16.04.2005
16.04.2005
16.04.2005
16.04.2005
20.04.2005
20.04.2005
20.04.2005

ComandaID
10010
10010
10011
10011
10012

ArticolID
1001
1002
1001
1052
1008

CumparatorID
6001
6083
6014
6025
6001
6083
6001
6014

PretArt
250.50
115.00
95.25
65.00
147.00

Cantitate
10
12
8
50
16

tblCumparatori
CumparatorID
6001
6002
6025
6083
6014

NumeCump
ROMBAT SRL
AutoNET SRL
COMPACT SA
ANCONA SA
SAVINA SRL

Oras
Tg. Mures
Tg. Mures
Brasov
Sibiu
Ludus

<<alte cimpuri>>
......
......
......
......
......

Fig. 4.7. Cele 3 tabele completate

Aceste 3 tabele fac parte dintr-o baz de date a unei firme de comer.
Cumprtorii sunt firme, care comand diferite articole produse de firma
noastr. n tabelul tblComenzi sunt inute comenzile, n tabelul
tblDetaliiCom sunt inute articolele tuturor comenzilor, iar n tabelul
tblCumparatori sunt stocai toi cumprtorii.
Ne propunem s aflm toi cumprtorii care au comandat articolul 1001.
Cum procedm? Iat paii care trebuie urmai:
Regsii numele tuturor comenzilor ce conin articolul 1001.
Regsii indicatorii tuturor cumprtorilor care au comenzi cu
numerele returnate n pasul anterior.
142

Baze de date

Capitolul 4

Regsii informaiile despre cumprtori pentru toi identificatorii


returnai n pasul anterior.
Fiecare dintre aceti pai poate fi executat de o interogare separat.
Procednd astfel, folosii datele returnate de o singur instruciune
SELECT pentru a popula clauza WHERE a urmtoarei instruciuni
SELECT.
Putei, de asemenea, s folosii subselecii, care s combine cele 3
interogri ntr-o singur instruciune.
Pentru primul pas, instruciunea SELECT care afieaz numrul
comenzilor care conin articolul 1001, este evident, nu-i aa?
Expresie SQL:
SELECT ComandaID
FROM tblDetaliiCom
WHERE ArticolID = 1001;

Rezultat:
ComandaID
..........
10010
10011

Urmrii instruciunea SQL i verificai n tabelele din figura 4.7 dac


rezultatele ntoarse sunt corecte.
Urmtorul pas este s gsii identificatorii cumprtorilor asociai cu
comenzile 10010 i 10011. Iat cum trebuie s procedai:
Expresie SQL:
SELECT CumparatorID
FROM tblComenzi
WHERE ComandaID IN (10010, 10011);

Rezultat:
CumparatorID
..........
6001
6083

143

Baze de date

Capitolul 4

Remarcai folosirea clauzei IN pe care ai studiat-o puin mai nainte.


Avnd indicatorii pentru cumprtorii cutai, nu v rmne dect s
cutai cine sunt acetia, n tabelul cu toi cumprtorii. Iat cum trebuie s
procedai:
Expresie SQL:
SELECT CumparatorID, NumeCump
FROM tblCumparatori
WHERE CumparatorID IN (6001, 6083);

Rezultat:
CumparatorID NumeCump
..........
.........
6001
ROMBAT SRL
6083
ANCONA SA

V-ai descurcat foarte bine pn aici, dar nu cred c suntei mulumii cu


aceast metod bbeasc de gsi informaiile dorite. Ai observat cum sau transferat rezultatele unei interogri n parametrii altei interogri.
Soluia este s ncercai s unii aceste 3 interogri ntr-una singur. Iat
aceast cale:
Expresie SQL:
SELECT CumparatorID, NumeCump
FROM tblCumparatori
WHERE CumparatorID IN (SELECT CumparatorID
FROM tblComenzi
WHERE ComandaID IN (SELECT ComandaID
FROM tblDetaliiCom
WHERE ArticolID =
1001));

Rezultat:
CumparatorID NumeCump
..........
.........
6001
ROMBAT SRL
6083
ANCONA SA

Rezultatul obinut este identic cu cel obinut pas cu pas, dar aici ai folosit
o singur expresie SQL. Observai c pentru a putea citi i nelege mai

144

Baze de date

Capitolul 4

bine aceast expresie am grupat-o ntr-un anume fel. Este o idee bun, mai
ales atunci cnd expresiile pe care le folosii sunt complicate.
O alt modalitate de utilizare a subseleciilor este crearea de cmpuri
calculate. S presupunem c dorii s afiai numrul total al comenzilor
emise de fiecare cumprtor din tabelul tblCumparatori. tim c aceste
comenzi sunt stocate n tabelul tblComenzi, mpreun cu identificatorii
cumprtorilor.
Pentru a efectua aceast operaie, trebuie efectuai urmtorii pai:
Regsii lista cumprtorilor din tabelul tblCumparatori.
Pentru fiecare cumprtor regsit, numrai comenzile asociate n
tabelul tblComenzi.
Iat cum trebuie procedat (tabelele sunt cele din figura 4.7):
Expresie SQL:
SELECT NumeCump, Oras, (SELECT COUNT(*) FROM tblComenzi AS C
WHERE C.CumparatorID=tblCumparatori.CumparatorID)
AS Comenzi
FROM tblCumparatori
ORDER BY NumeCump;

Remarcai utilizarea aliasului C pentru tabelul tblComenzi pentru a


simplifica scrierea expresiei clauzei WHERE.
Rezultat:
NumeCump
..........
ANCONA SA
AutoNET SRL
COMPACT SA
ROMBAT SRL
SAVINA SRL

Oras
.........
Tg. Mures
Tg. Mures
Brasov
Bistrita
Ludus

Comenzi
........
2
0
1
3
2

Dei subseleciile sunt foarte utile n construirea acestui tip de instruciune


SELECT, trebuie avut grij n privina identificrii corecte a coloanelor
implicate, tiind c sunt coloane cu acelai nume care apar n tabele
diferite. Aceste coloane se identific corect dac naintea numelui se pune
145

Baze de date

Capitolul 4

numele tabelului din care face parte, ca de exemplu,


tblComenzi.CumparatorID sau tblCumparatori.CumpatatorID. Se vede
clar c cmpul CumparatorID face parte din dou tabele.
Reinei aceast regul pentru c o s-o folosii de multe ori!

146

Baze de date

Capitolul 4

Unirea tabelelor
Una din caracteristicile extrem de puternice din limbajul SQL este
capacitatea de a uni tabele din mers, n interogrile de regsire a datelor.
Unirile constituie unele dintre cele mai importante operaii pe care le putei
efectua folosind instruciunile SELECT, i o bun nelegere a lor i a
sintaxei pentru unire reprezint o parte esenial din nvarea limbajului
SQL.
Ceea ce ai nvat n capitolele anterioare despre chei, relaii, diagrame
sunt acum hotrtoare pentru construirea corect a expresiilor SQL.
Ca definiie simpl, unirea este un mecanism folosit pentru asocierea
tabelelor ntr-o instruciune SELECT. Utiliznd o sintax special, mai
multe tabele pot fi unite astfel nct s fie returnat un singur set de
rezultate, iar unirea asociaz din mers liniile corectate din fiecare tabel.
Crearea unei uniri simple

Crearea unei uniri este foarte simpl. n exemplul urmtor, vom uni dou
tabele tblProduse i tblVinzatori, al crui rezultat este produsul cartezian al
acestora, avnd un numr de nregistrri egal cu produsul numerelor
acestora (figura 4.8).
tblProduse
ProdusID
1001
1002
1003

tblVinzatori
VinzatorID
V01
V02

VinzatorID
V01
V03
V01

NumeVinzator
Ban Lucia
Pop Mariana

DenumireProdus
Piine
Banane
Biscuiti

OrasVinzator
Naoiu
Sarmasel

PretProdus
2.00
2.50
1.25

<<alte cimpuri>>
......
......

Fig. 4.8. Tabelele pentru unire

Unirea celor dou tabele cu o expresie SQL va genera un nou tabel cu 6


nregistrri (3 x 2).

147

Baze de date

Capitolul 4

Expresia SQL:
SELECT NumeVinzator, DenumireProdus, PretProdus
FROM tblVinzatori, tblProduse;

Rezultat:
NumeVinzator
Ban Lucia
Ban Lucia
Ban Lucia
Pop Mariana
Pop Mariana
Pop Mariana

DenumireProdus
Piine
Banane
Biscuiti
Piine
Banane
Biscuiti

PretProdus
2.00
2.50
1.25
2.00
2.50
1.25

Acest tip de unire nu se folosete niciodat sub aceast form, deoarece nu


are nici un sens. Aici nu s-a pus nici un fel de condiie, nici o legtur ntre
cele dou tabele. Adevrata unire este cea cnd se fac legturi ntre tabele,
aa cum se vede mai departe.
Expresia SQL:
SELECT NumeVinzator, DenumireProdus, PretProdus
FROM tblVinzatori, tblProduse;
WHERE tblVinzatiri.VinzatorID=tblProduse.VinzatorID;

Rezultat:
NumeVinzator
Ban Lucia
Ban Lucia

DenumireProdus
Piine
Biscuiti

PretProdus
2.00
1.25

Ce s-a ntmplat de fapt? Clauza WHERE a filtrat nregistrrile produsului


cartezian, rezultnd numai 2 nregistrri.
Acest tip de uniri, bazate pe verificarea egalitii dintre dou tabele, se mai
numesc i uniri interioare. Unele SGBGR-uri au sintaxe diferite,
specificnd explicit tipul de unire. Studiai cu atenie documentaia
SGBDR-ului cu care lucrai pentru a-i folosi corect sintaxa.

148

Baze de date

Capitolul 4

O alt variant de unire este cea fcut n clauza FROM prin folosirea
clauzei speciale INNER JOIN ... ON, dup cum se vede mai jos:
SELECT NumeVinzator, DenumireProdus, PretProdus
FROM tblVinzatori INNER JOIN tblProduse
ON tblVinzatiri.VinzatorID=tblProduse.VinzatorID;

Aceast variant este preferat de programatori, dar ea este i cea indicat


de specificaiile SQL.

149

Baze de date

Capitolul 4

Uniri avansate

Limbajul SQL nu impune limite asupra numrului de tabele ce pot fi unite


ntr-o instruciune SELECT. Regulile de baz pentru crearea unei uniri
rmn aceleai. n primul rnd, enumerai toate tabelele, apoi definii
relaiile dintre ele. Iat un exemplu:
tblProduse
ProdusID
1001
1002
1003
1004
1052
1078

VinzatorID
V01
V03
V01
V01
V02
V03

DenumireProdus
Piine
Inghetata
Biscuiti
Ciocolata
Bricheta
Banane

PretProdus
2.00
1.25
0.25
2.65
0.35
2.50

DescriereProdus

tblDetaliiComenzi
DetComID
20010
20011
20012
20013
20014

ComandaID
10010
10010
10010
10010
10012

ProdusID
1001
1002
1078
1052
1008

Cantitate
10
12
8
50
16

tblVinzatori
VinzatorID
V01
V02
V03
V04

NumeVinzator
Ban Lucia
Pop Mariana
Baciu Mia
Ban Ionel

Oras
Naoiu
Sarmasel
Naoiu
Roma

<<alte cimpuri>>
......
......
......
......

Fig. 4.9. Tabele implicate n unire

Ne propunem s aplicm unirea ntr-un caz concret de regsire a unor


informaii care se gsesc n trei tabele. Cutm produsele care compun
comanda 10010, precum i vnztorul asociat. Studiai expresia SQL care
urmeaz i verificai rezultatul obinut.
Expresie SQL:
SELECT DenumireProdus, NumeVinzator, PretProdus, Cantitate
FROM tblProduse, tblDetaliiCom, tblVinzatori
WHERE tblDetaliiComenzi.ProdusID=tblProduse.ProdusID

150

Baze de date

Capitolul 4

AND tblProduse.VinzatorID=tblVinzatori.VinzatorID
AND ComandaID= 10010;

Rezultat:
DenumireProdus
Piine
Inghetata
Banane
Bricheta

NumeVinzator
Ban Lucia
Baciu Mia
Ban Lucia
Pop Mariana

PretProdus
2.00
1.25
2.50
0.35

Cantitate
10
12
8
50

Primele dou rnduri ale clauzei WHERE fac legtura ntre perechile de
tabele tblDetaliiComenzi-tblProduse i tblProduse-tblVinzatori, iar al
treilea filtreaz doar produsele pentru comanda 10010.
Iat cteva aspecte eseniale legate de uniri i folosirea lor:
Consultai-v documentaia sistemului de gestionare a bazei de
date, pentru a afla sintaxa exact a unirii pe care o accept.
Asigurai-v c utilizai condiia corect de unire, indiferent de
sintaxa folosit, altfel vor fi returnate date incorecte.
Asigurai-v c prevedei ntotdeauna o condiie de unire, altfel
vei sfri cu un produs cartezian.
ntr-o unire, putei include mai multe tabele, ba chiar s avei
tipuri diferite de unire pentru fiecare. Dei metoda este corect i
adesea util, asigurai-v c testai separat fiecare unire, nainte de
a le testa mpreun. n felul acesta depanrile vor fi mult
simplificate.
O metod bun este folosirea aliasurilor pentru tabele, pentru a
simplifica scrierea expresiilor SQL.

Compunerea interogrilor
Interogarea bazelor de date este chiar sensul existenei lor. Nimeni n-a
creat vreo baz de date fr s o interogheze cndva, cnd se adun
suficiente date n ea. Pn acum noi am fcut interogri folosind o singur
instruciune SELECT, care returna date din unul sau mai multe tabele.
Limbajul SQL v permite s efectuai mai multe interogri (mai multe
151

Baze de date

Capitolul 4

instruciuni SELECT) i s returnai rezultatele sub forma unui singur set


de rezultate de interogare. De obicei, aceste interogri sunt cunoscute drept
reuniuni sau interogri compuse.
n esen, exist dou situaii generale n care s folosii interogrile
compuse:
Pentru a returna date structurate similar din tabele diferite, ntr-o
singur interogare.
Pentru a efectua mai multe interogri asupra unui singur tabel,
returnnd datele ca o singur interogare.
Pentru a compune interogrile SQL se folosete operatorul UNION. Cu
ajutorul lui pot fi specificate instruciuni SELECT multiple, iar rezultatele
acestora pot fi combinate ntr-un singur set de rezultate.
Folosirea operatorului UNION este destul de simpl, tot ce avei de fcut
este s specificai toate instruciunile SELECT i s plasai ntre ele
cuvntul cheie UNION.
S lum un exemplu. Presupunem c trebuie s ntocmii un raport despre
toi cumprtorii din judeele Bistria-Nsud, Braov i Cluj. n acelai
raport dorii s includei toate locaiile firmei ANCONA SA, indiferent n
ce jude s-ar afla ele. Desigur, se poate crea o clauza WHERE care s
realizeze acest lucru, dar acum vei folosi operatorul UNION. Figura 4.10
conine tabelul cu cumprtorii, care o s fie folosit n acest exemplu.
CumparatorID
6001
6002
6004
6025
6083
6084

NumeCumparator
ROMBAT SA
AutoNET SRL
SAVINA SRL
COMPACT SRL
ANCONA SA
ANCONA SA

JudCump
BN
MS
MS
BV
MS
CJ

PersContact
Pop Petru
Beldean Vian
Parauan Bicu
Pietroi Sorina
Palade Sorin
Crisan Ovidiu

Email
ppop@rmbat.ro
bvian@auto.ro
pbicu@savina.ro
sorina@yahoo.ro
sorin@ancona.ro
covi@ancona.ro

Fig. 4.10. Tabelul tblCumparatori

Dup cum tii deja, folosirea operatorului UNION implic scrierea mai
multor instruciuni SELECT, de aceea vei crea mai nti fiecare
instruciune SELECT, apoi le vei compune.

152

Baze de date

Capitolul 4

Prima instruciune SELECT va cuta cumprtorii din cele 3 judee


amintite.
Expresie SQL:
SELECT NumeCumparator, JudCump, PersContact, Email
FROM tblCumparatori
WHERE JudetCumparator IN ('BN', 'BV','CJ');

Rezultat:
NumeCumparator
ROMBAT SA
COMPACT SRL
ANCONA SA

JudCump
BN
BV
CJ

PersContact
Pop Petru
Pietroi Sorina
Crisan Ovidiu

Email
ppop@rmbat.ro
sorina@yahoo.ro
covi@ancona.ro

A doua instruciune SELECT va cuta toate locaiile firmei ANCONA SA.


Expresie SQL:
SELECT NumeCumparator, JudCump, PersContact, Email
FROM tblCumparatori
WHERE NumeCumparator= 'ANCONA SA';

Rezultat:
NumeCumparator
ANCONA SA
ANCONA SA

JudCump
MS
CJ

PersContact
Palade Sorin
Crisan Ovidiu

Email
sorin@ancona.ro
covi@ancona.ro

Dup cum se vede, exist dou locaii pentru firma ANCONA SA, una n
judeul Mure i una n judeul Cluj.
Pentru a compune cele 2 interogri vei proceda astfel:
Expresie SQL:
SELECT NumeCumparator,JudCump, PersContact, Email
FROM tblCumparatori
WHERE JudetCumparator IN ('BN', 'BV','CJ')
UNION
SELECT NumeCumparator, JudCump, PersContact, Email
FROM tblCumparatori
WHERE NumeCumparator= 'ANCONA SA';

153

Baze de date

Capitolul 4

Rezultat:
NumeCumparator
ROMBAT SA
COMPACT SRL
ANCONA SA
ANCONA SA

JudCump
BN
BV
CJ
MS

PersContact
Pop Petru
Pietroi Sorina
Crisan Ovidiu
Palade Sorin

Email
ppop@rmbat.ro
sorina@yahoo.ro
covi@ancona.ro
sorin@ancona.ro

Deoarece ANCONA SA se gsete n ambele interogri, SQL nu l scrie de


dou ori. Dac totui, dorim s apar i dublurile, atunci vom folosi clauza
UNION ALL. Fr extensia ALL, duplicatele se elimin automat.
Dac dorim ca rezultatele s fie sortate, vom aduga clauza ORDER BY
dup ultima clauz WHERE. De remarcat, c operaiile UNION accept o
singur clauz ORDER BY, dup ultima instruciune SELECT. Iat cum
arat o expresie SQL cu afiarea tuturor nregistrrilor care sunt i
ordonate:
Expresie SQL:
SELECT NumeCumparator, PersContact, Email
FROM tblCumparatori
WHERE JudetCumparator IN ('BN', 'BV','CJ')
UNION ALL
SELECT NumeCumparator, PersContact, Email
FROM tblCumparatori
WHERE NumeCumparator= 'ANCONA SA'
ORDER BY NumeCumparator;

Rezultat:
NumeCumparator
ANCONA SA
ANCONA SA
ANCONA SA
COMPACT SRL
ROMBAT SA

JudCump
CJ
CJ
MS
BV
BN

PersContact
Crisan Ovidiu
Crisan Ovidiu
Palade Sorin
Pietroi Sorina
Pop Petru

Email
covi@ancona.ro
covi@ancona.ro
sorin@ancona.ro
sorina@yahoo.ro
ppop@rmbat.ro

Observai nregistrarea dubl ANCONA SA, care apare din cauza


operatorului UNION ALL.
Iat cteva reguli pentru operaii cu operatorul UNION:
Toate interogrile dintr-o operaie UNION trebuie s conin
aceleai coloane, expresii sau funcii agregat.
154

Baze de date

Capitolul 4

Coloanele, expresiile i funciile agregat trebuie s apar exact n


aceeai ordine n fiecare instruciune SELECT din operaia
UNION.
Tipurile de date din coloane trebuie s fie compatibile. Nu este
necesar ca datele s fie exact de acelai tip, dar trebuie s fie de
un tip pe care SGBDR-ul l poate transforma implicit (de
exemplu tipuri de date numerice diferite sau tipuri de date
calendaristice diferite).
Inserarea, actualizarea i tergerea datelor
Datele unei baze de date trebuie periodic actualizate, pentru a reflecta
activitile unei firme sau organizaii. ntreinerea datelor este o activitate
continu, plin de responsabilitate, fr de care, utilitatea bazei de date este
ndoielnic. Limbajul SQL ofer instruciuni dedicate ntreinerii datelor
unei baze.
ntreinerea unei baze de date const, de fapt, n introducerea de noi date,
modificarea unor date existente sau tergerea datelor din tabelele acesteia.
Toate aceste operaii o s le nvai n cele ce urmeaz.
Inserarea datelor se face cu instruciunea INSERT
Inserarea datelor

Toate expresiile SQL de pn acum ncepeau cu instruciunea SELECT. Pe


lng aceasta, mai sunt alte 4 instruciuni pe care le vom nva n
continuare. Acestea sunt INSERT, UPDATE, DELETE i CREATE
TABLE.
Prima dintre ele este instruciunea INSERT, folosit pentru inserarea de
linii (nregistrri) ntr-un tabel de baz de date. Inserarea se poate face n
mai multe moduri:
Inserarea unei singure linii complete;
Inserarea unei singure linii pariale;
Inserarea rezultatelor unei interogri.
Le vom studia pe rnd.
155

Baze de date

Capitolul 4

Inserarea unei linii complete.


Cel mai simplu mod de a insera o linie ntr-un tabel este folosirea sintaxei
de baz a instruciunii INSERT, care cere numele tabelului i valorile care
vor fi inserate n noua linie. Iat un exemplu:
INSERT INTO tblProduse ( ProdusID, CodProdus, Denumire, UM, Pret, Observatii )
VALUES ('32', '20033', 'Cafea_Jacobs', 'kg', '12.23', 'Conform normelor UE');

Aceast expresie SQL, insereaz n tabelul tblProduse un rnd cu valorile


prezentate n paranteza de dup VALUES. Valorile corespund, n ordine, cu
denumirile cmpurilor din prima parantez a expresiei SQL, indiferent de
ordinea n care apar n tabel. Dac numrul coloanelor indicate nu este
acelai cu numrul valorilor, se va produce un mesaj de eroare care
precizeaz acest lucru.
Inserarea unei singure linii pariale.
Exist cazuri n care nu este nevoie s se completeze toate cmpurile unei
nregistrri, fie c nu se cunosc valorile n acel moment, fie c nu e
necesar valoarea acelui cmp pentru nregistrarea respectiv. n acest caz,
se completeaz numai acele cmpuri pentru care exist valori. Este de la
sine neles c prin proiectarea bazei de date, este prevzut c acele
cmpuri necompletate au voie s aib valori nule.
Din exemplul anterior, se poate scoate cmpul Observatii care nu este
obligatoriu. Expresia SQL va arta astfel:
INSERT INTO tblProduse ( ProdusID, CodProdus, Denumire, UM, Pret)
VALUES ('32', '20033', 'Cafea_Jacobs', 'kg', '12.23');

Deci, cmpul Observatii i valoarea corespunztoare nu apar n expresia


SQL.
Inserarea rezultatelor unei interogri.
Inserarea ntr-un tabel a unei singure nregistrri, complete sau pariale,
este o aciune obinuit, de rutin, utilizat de obicei de administratorul
bazei de date pentru completri minore ale unui tabel. Cele mai
spectaculoase completri ale tabelelor sunt cele cu nregistrri provenite
din interogri ale altor tabele.

156

Baze de date

Capitolul 4

Aceste inserri se pot face manual de ctre administratorul bazei de date,


dar cel mai probabil mod de a insera ntr-un tabel nregistrrile provenite
dintr-o interogare, este folosirea limbajului VBA, n cadrul unor aplicaii
integrate.
Aceast form de instruciune INSERT, care poate fi utilizat pentru a
insera rezultatul unei instruciuni SELECT se numete INSERT SELECT,
fiind alctuit dintr-o instruciune INSERT i o instruciune SELECT. S
presupunem c avei ntr-o baz de date un tabel numit tblClienti care
conine clienii unei firme. Pentru a aduga noi clieni, n practic se
procedeaz astfel: nu toi clienii se introduc direct n tabel, ci mai nti se
introduc ntr-un tabel temporar, apoi se decide care sunt clienii care merit
introdui n baza de date i numai atunci, se introduc n tabelul tblClienti.
Aceast expresie SQL este prezentat mai jos:
INSERT INTO tblClienti (ClientID, Denumire, CodFiscal, PersoanaContact, Adresa)
SELECT (ClientID, Denumire, CodFiscal, PersoanaContact, Adresa)
FROM tblClientiNoi;

Dup cum se vede, tabelul tblClienti este completat cu nregistrri din


tabelul tblClientiNoi, dar pot fi i alte surse de interogare. Totul este ca
numrul de cmpuri i tipul lor de dat s coincid.
Actualizarea datelor

Datele unei baze de date sufer dese modificri. Cum datele se gsesc n
tabele, este nevoie ca aceste tabele s fie periodic actualizate. Ca s
modificai datele dintr-un tabel, trebuie s folosii instruciunea UPDATE.
Ea poate fi folosit n dou moduri:
Pentru actualizarea numai a anumitor linii dintr-un tabel;
Pentru actualizarea tuturor liniilor unui tabel.
Instruciunea UPDATE folosit defectuos, poate s v produc mari
neplceri, tiut fiind c aici nu exist posibilitatea de revenire n sensul
undo. Prin urmare trebuie s fii foarte ateni la folosirea ei. De altfel,
unele sisteme de gestiune a bazelor de date au restricii de securitate pentru
a mpiedica unele aciuni greite asupra bazei de date.
Instruciunea UPDATE este foarte simplu de utilizat. Sintaxa ei este
alctuit din 3 pri:
157

Baze de date

Capitolul 4

Tabelul care trebuie actualizat;


Numele coloanelor i noile lor valori;
Condiia filtru care determin liniile care trebuie actualizate.
S examinm un caz banal. Clientul cu codul 1000245, are acum adres de
e-mail i ar trebui s apar i tabelul cu clienii, numit tblClienti. Expresia
SQL care efectueaz aceast actualizare este urmtoarea:
UPDATE tblClienti
SET E_mail = alfaroom@yahoo.com
WHERE ClientID = 1000245;

Este de la sine neles c cele 2 cmpuri (E_mail i ClientID) sunt cmpuri


ale tabelului tblClienti.
Instruciunea UPDATE ncepe ntotdeauna cu numele tabelului care este
actualizat (aici tblClienti). Urmeaz comanda SET, care atribuie noua
valoare unei coloane (aici coloana E_mail).
Instruciunea UPDATE se termin cu o clauz WHERE, care anun
sistemul de gestionare a bazei de date ce linie s actualizeze. Atenie, fr
clauza WHERE sistemul ar actualiza toate liniile din tabelul tblClienti,
punnd adresa de e-mail alfaroom@yahoo.com la toi clienii, ceea ce ar fi un
lucru inadmisibil.
Actualizarea mai multor coloane necesit a sintax corespunztoare cum se
poate vedea mai jos:
UPDATE tblClienti
SET E_mail = alfaroom@yahoo.com, PersoanaContact = Mocian Ioan
WHERE ClientID = 1000245;

Din aceast expresie SQL se pot deduce urmtoarele:


Perechile de cmpuri i valorile lor (ntre ele este semnul = ) se
despart prin virgul;
Avem attea egaluri cte cmpuri trebuie actualizate;
nregistrarea care trebuie actualizat este identificat cu cmpul
ClientID, care este cheie primar n tabelul tblClienti, v mai
amintii desigur ea.
158

Baze de date

Capitolul 4

Pentru a terge valoarea unei coloane, tehnica este ca acea coloan s fie
setat pe valoarea NULL (condiia este ca acel cmp s accepte valoarea
NULL). Iat expresia SQL care face acest lucru:
UPDATE tblClienti
SET E_mail = NULL
WHERE ClientID = 1000245;

Aceast expresie SQL, terge adresa de e-mail a clientului 1000245.


Mai trziu, n capitolul 5 vei putea face teste i simulri cu actualizri de
date pe o baz de date de test.
tergerea datelor

Pentru a terge linii dintr-un tabel, necesitate practic frecvent, se


folosete instruciunea DELETE. Ea poate fi utilizat n dou modaliti:
Pentru tergerea numai a anumitor linii dintr-un tabel;
Pentru tergerea tuturor liniilor unui tabel.
Dei este o necesitate practic, folosirea instruciunii DELETE antreneaz
mari riscuri, de aceea este bine s facei teste pe o copie a unei baze de
date. Oricum, ca nceptori nu v va pune nimeni s curai tabelele
unei baze de date reale de nregistrrile inutile.
S presupunem c printre clieni, exist civa care i-au nchis firma, deci
nu mai e necesar s-i avem n tabelul tblClienti, aa c trebuie s-i tergem
din tabel. De exemplu, clientul cu codul 1000378 trebuie ters din tabel.
Expresia SQL care face acest lucru este urmtoarea:
DELETE FROM tblClienti
WHERE ClientID = 1000378;

Aceast expresie SQL ar trebui neleas imediat, pentru c e foarte clar:


din tabelul tblClienti se terge clientul care are cmpul ClientID la valoarea
1000378.
De remarcat faptul c instruciunea DELETE nu conine nume de coloane,
ea terge linii ntregi, nu coloane. Pentru a terge valorile din anumite
coloane vei folosi instruciunea UPDATE, prezentat puin mai nainte.
159

Baze de date

Capitolul 4

De asemenea, instruciunea DELETE nu terge tabele, ci numai nregistrri


din tabele. Chiar dac terge toate nregistrrile unui tabel, aceste rmne,
dar va fi gol.
Ai vzut cum se poate terge dintr-un tabel o nregistrare. ntrebarea
fireasc este cum se pot terge dintr-un tabel toate nregistrrile. i aici, ca
n orice aciune de distrugere, este foarte simplu: trebuie eliminat clauza
WHERE. Iat ce simplu putei scpa de nregistrrile unui tabel:
DELETE FROM tblClienti ;

Luai-v msurile de precauie cnd lucrai cu aceast instruciune!


Principii privind actualizarea i tergerea datelor

Dup cum spuneam, instruciunile UPDATE i DELETE sunt instruciuni,


pe ct de utile, pe att de periculoase. Trebuie s reinei faptul c n SQL
nu exist un buton Undo, de anulare a unei operaiuni greite, de aceea fii
foarte ateni cnd folosii aceste 2 instruciuni.
n sintez, iat cteva principii pe care trebuie s le respectai, ca utilizator
al limbajului SQL:
Nu executai niciodat instruciunile UPDATE i DELETE fr o
clauz WHERE, dect atunci cnd dorii s realmente s
actualizai sau s tergei toate liniile unui tabel;
Asigurai-v c toate tabelele au o cheie primar (dac ai uitat ce
este aceasta, consultai capitolul respectiv) pe care s o folosii
ntr-o clauz WHERE;
nainte de a folosi o clauz WHERE cu instruciunile UPDATE
sau DELETE, testai-o mai nti cu o instruciune SELECT, ca s
v asigurai c filtreaz nregistrrile corecte din cauz c la
clauza WHERE putei grei destul de uor.
Folosii integritatea referenial (vezi paragraful Integritatea la
nivel de relaie) impus bazelor de date astfel ca sistemul de
gestiune al bazelor de date (SGBD) s nu permit tergerea
liniilor care au date n alte tabele asociate lor.
Unele SGBD-uri permit administratorilor de baze de date s
impun limitri ce mpiedic executarea instruciunilor UPDATE
i DELETE fr o clauz WHERE.
160

Baze de date

Capitolul 4

Nu v apucai s executai operaiuni de actualizare sau tergere,


nainte s facei o copie de siguran a bazei de date. Vei fi astfel
mai relaxai, iar n caz de o manevr greit (oameni suntem,
nu?), putei reveni la ce a fost, fr nici o problem.
Nu executai operaii de tergere printre alte activiti pentru c
aici avei nevoie de concentrare maxim (amintii-v c aici nu
este Undo i ce ai fcut, fcut rmne).
Respectai aceste cteva principii enumerate, care v ajut mult, gndinduv c oricte lucruri bune ai face n firma la care lucrai ca administrator
de baze de date, o greeal ca tergerea complet a unor tabele sau cmpuri
v descalific definitiv n ochii celor care v pltesc.

161

Baze de date

Capitolul 4

Crearea i manipularea tabelelor


Limbajul SQL nu este folosit numai pentru manipularea datelor. Cu
ajutorul limbajului SQL se pot crea, modifica i terge tabele, chiar dac
toate SGBD-urile au propriile unelte pentru aceste aciuni.
n general, exist dou modaliti de creare a tabelelor de baze de date:
Majoritatea SGBD-urilor deine propriul instrument de
gestionare, folosit i la crearea i administrarea interactiv a
tabelelor bazei de date.
Tabelele pot fi create, de asemenea, n mod direct, prin
intermediul instruciunilor SQL.
Instruciunea de creare a tabelelor cu limbajul SQL este CREATE TABLE.
Trebuie menionat faptul c atunci cnd folosim instrumente interactive, de
fapt folosim instruciuni SQL care sunt generate i executate de sistem,
fr s ne dm seama pentru c totul se face n spatele interfeei.
Pentru a crea un tabel folosind instruciunea CREATE TABLE, trebuie
specificate urmtoarele informaii:
Numele noului tabel, specificat dup cuvntul cheie CREATE
TABLE;
Numele i definirea coloanelor din tabel, separate prin virgul;
Iat cum arat o expresie SQL de creare a unui tabel (n Access):
CREATE TABLE tblProduse
(
ProdusID

Integer

NOT NULL,

CodProdus

Text(50) NOT NULL,

Denumire

Text(80) NOT NULL,

UM

Text(10) NOT NULL,

PretUnitar

Number NOT NULL,

Observatii

Text(255)

);
Dup cum se vede, instruciunea de mai sus creeaz tabelul tblProduse
care are 6 cmpuri, desprite prin virgule. Observai tipurile de date
162

Baze de date

Capitolul 4

folosite, ntreg, text i numr real (Number). De asemenea, pentru a


specifica faptul c un cmp cere valoare obligatorie trebuie pus expresia
NOT NULL, iar dac lipsete se consider c s-a pus NULL, adic acel
cmp poate s rmn necompletat. Din cele 6 cmpuri, numai Observatii
nu este obligatoriu de completat.
ntre numele coloanei, tipul de dat i cuvntul cheie NOT NULL se pune
spaiu. Modul de aranjare a expresiei SQL nu este important, deoarece
spaiile suplimentare sunt ignorate, se poate folosi un singur rnd pentru
definirea tuturor coloanelor sau se pot aranja pe mai multe rnduri ca n
exemplul prezentat mai nainte, pentru lizibilitate.
Numele tabelului care se creeaz nu trebuie s existe n baza de date, dac
exist se va produce un mesaj de eroare care indic acest lucru.
Adugarea unei coloane. De multe ori n practic apare necesitatea
adugrii unei coloane la un tabel care a fost creat i care are chiar date.
Limbajul SQL ne pune la dispoziie o instruciune pentru a face acest lucru,
numit ALTER TABLE i clauza ADD. Iat un exemplu de folosire a
acestei instruciuni:
ALTER TABLE tblProduse
ADD Furnizor Text(50);

Aceast expresie SQL adaug tabelului tblProduse coloana Furnizor.


tergerea unei coloane. Dac diagrama de relaii permite, adic acel cmp
nu este implicat n vreo relaie, coloana (cmpul) poate fi tears dintr-un
tabel. Aceast manevr se face cu ajutorul instruciunii ALTER TABLE i
clauza DROP COLUMN. Iat un exemplu de folosire a acestei
instruciuni:
ALTER TABLE tblProduse
DROP COLUMN Furnizor;

Aceast expresie SQL terge din tabelul tblProduse coloana Furnizor.


tergerea unui tabel. Aa cum se poate crea un tabel ntr-o baz de date
cu ajutorul limbajului SQL, tot aa se poate i nltura un tabel din baza de
date. Operaiunea este foarte simpl, chiar periculos de simpl.
Astfel, pentru a elimina din baza de date tabelul tblProduse folosim
expresia SQL urmtoare:
163

Baze de date

Capitolul 4

DROP TABLE tblProduse;

Operaiunea nu este nsoit de nici un mesaj, nu poate fi anulat, tabelul


rmnnd ters definitiv, aa c trebuie s fii extrem de precaui cnd
facei o astfel de manevr.

Elemente performante ale limbajului SQL


Ceea ce am studiat pn acum se ncadreaz n nivelul propus pentru acest
curs, ns limbajul SQL nu i-a terminat posibilitile, oferind
programatorilor profesioniti elemente cu adevrat performante. n acest
capitol vor fi prezentate, pe scurt, aceste elemente de performan fr a
intra n amnunte de ordin tehnic.
n continuare vor fi prezentate aceste posibiliti avansate ale limbajului
SQL.
Proceduri stocate. Instruciunile SQL folosite pn acum sunt simple,
deoarece folosesc o singur instruciune aplicat unuia sau mai multor
tabele. ns, nu toate operaiile sunt att de simple, adesea sunt necesare
mai multe instruciuni.
Iat un caz de operaie complex:
Pentru a onora o comand trebuie mai nti s vedem dac avem
n stoc articolele respective;
Dac exist, ele trebuie trecute pe o list rezervat i sczute din
stoc pentru a nu fi vndute altor cumprtori;
Articolele care nu exist n stoc i sunt cerute de comand,
trebuie trecute pe o list pentru a fi aprovizionate;
Cumprtorul trebuie anunat asupra articolelor existente n stoc
(adic livrabile imediat) i asupra celor care urmeaz s fie
aprovizionate.
Scenariul prezentat necesit mai multe instruciuni SQL adresate mai
multor tabele. n plus, instruciunile SQL trebuie efectuate ntr-o anumit
ordine, iar ordinea depinde de existena produselor n stoc (dac exist, nu
mai trebuie comandate).

164

Baze de date

Capitolul 4

Cum trebuie scrise aceste instruciuni? Am putea s scriem individual


fiecare instruciune SQL, apoi pe baza rezultatului s executm alte
instruciuni condiionate. Aciunea ar trebui repetat pentru fiecare
comand, iar persoana care face acest lucru trebuie s aib cunotine i
experien corespunztoare.
Acelai lucru se poate face printr-o procedur stocat. Procedurile stocate
nu sunt altceva dect seturi de una sau mai multe instruciuni SQL salvate
pentru o viitoare folosire.
De ce trebuie folosite procedurile stocate? Iat cteva din motive:
Pentru a simplifica operaiile complexe (ca cea prezentat ma
nainte), prin nglobarea proceselor ntr-o singur unitate, uor de
utilizat;
Prin eliminarea pailor individuali se elimin erorile umane i se
asigur coerena datelor;
Limitarea accesului la datele de baz, prin intermediul
procedurilor stocate, reduce ansa deteriorrii datelor,
intenionat sau nu.
Procedurile stocate au form compilat, deci se execut mult mai
repede;
n limbajul SQL exist elemente i caracteristici disponibile
numai pentru cereri unice. Procedurile stocate le pot folosi pentru
a scrie cod mai puternic i mai flexibil.
Prin urmare exist 3 beneficii majore ale procedurilor stocate: simplitate,
securitate i performan.
Pentru a practica efectiv n folosirea procedurilor stocate, va trebui s
folosii surse de informare care se gsesc din belug n librrii i pe
Internet.
Tranzacii. Tranzaciile sunt faciliti ale limbajului SQL care asigur c
loturile de operaii SQL sunt executate complet sau deloc. tim c tabelele
unei baze de date relaionale sunt legate ntre ele prin intermediul cheilor
primare i cheilor externe. Prin urmare, unele modificri dintr-un tabel
produce modificri de date n alt tabel.

165

Baze de date

Capitolul 4

De exemplu, dac se adaug o comand n tabelul tblComenzi, n tabelul


tblDetaliiComenzi trebuie introduse articolele acelei comenzi. Mai nti se
completeaz tabelul tblComenzi, apoi se completeaz tabelul
tblDetaliiComenzi. Se pune ntrebarea, ce se ntmpl dac n timpul
completrii articolelor comenzii n tabelul tblDetaliiComenzi, se ntrerupe
curentul sau nu exist suficient spaiu pe hard-disc?
Evident, va apare o comand care nu are articole, sau o comand care nu
are toate articolele, oricum o situaie nereal. Cu siguran, au fost multe
astfel de situaii, ceea ce i-a forat pe creatorii limbajului SQL s gseasc
soluii de rezolvare. Astfel au fost inventate tranzaciile.
Prelucrarea de tranzacii este un mecanism folosit pentru gestionarea
seturilor de operaii SQL ce trebuie executate n loturi, pentru ca baza de
date s nu conin niciodat rezultatele unor operaii pariale.
Prin intermediul prelucrrii de tranzacii, v putei asigura c seturile de
operaii nu sunt ntrerupte n mijlocul prelucrrii ele sunt fie complet
executate, fie deloc. Dac nu intervine nici o eroare, ntregul set de
instruciuni este executat, iar datele sunt trecute n tabelele bazei de date.
Dac apare o eroare, atunci se poate derula n mod automat o revenire la
starea iniial, stare cunoscut i sigur.
Datorit importanei i complexitii tranzaciilor, acestea sunt folosite
numai de programatorii profesioniti, iar nivelul acestui curs este de a v
iniia n folosirea limbajului SQL. Dac ai neles pn acum mecanismul
acestui limbaj, vei putea trece fr probleme i la prile sale avansate,
pentru c oricum avei baza de plecare. Desigur, trebuie s mai studiai
bibliografie, care se gsete azi din belug, att scris ct i pe Internet.
Cursoarele. Uneori i nu de puine ori, n aplicaiile performante este
nevoie de parcurgerea unui set de date provenite dintr-o interogare, aa
cum se parcurg liniile unui tabel al bazei de date. Acest lucru este realizat
cu ajutorul cursoarelor.
Un cursor este o interogare n baza de date stocat n serverul SGBD nu o
instruciune SELECT, ci rezultatul acesteia, adic date efective. Odat ce
cursorul este stocat, aplicaia poate s deruleze sau s rsfoiasc n sus i n
jos prin date, dup cum este nevoie.

166

Baze de date

Capitolul 4

Concluzii
SQL este limbajul cel mai rspndit n lucrul cu bazele de date. Indiferent
dac suntei programator de aplicaii, administrator de baze de date (vezi
Anexa A), designer de aplicaii Web sau utilizator al suitei Microsoft
Office, o bun cunoatere a limbajului SQL, constituie o parte important a
interaciunii cu bazele de date.
Sunt azi o mulime de cri despre limbajul SQL i unele sunt chiar foarte
bune, toate au ns un lucru comun: conin prea multe informaii pentru
majoritatea utilizatorilor. Lipsesc exemplele simple, sugestive care, de
multe ori, fac mai mult dect pagini ntregi de explicaii sterile.
Capitolul 4, pe care tocmai l-ai parcurs, va pus la dispoziie acele
cunotine care v pot ajuta s dezvoltai aplicaii de baze de date la un
nivel cerut de multe firme mici sau medii n care ai putea lucra. Exemplele
prezentate v pot ajuta s nelegei multe din aspectele practice ale
folosirii limbajului SQL.
Acei dintre dumneavoastr care vor ajunge administratori de baze de date,
gsesc aici informaii preioase pentru activitatea lor curent. Pentru cei
care doresc mai mult, pot trece la studierea i aplicarea elementelor
avansate ale limbajului SQL, cum sunt procedurile stocate, tranzaciile,
cursoarele etc.

n capitolul urmtor, vei avea ocazia s folosii limbajul SQL n cadrul


sistemului de gestiune a bazelor de date relaionale ACCESS.

167

Baze de date

Capitolul 5

Capitolul 5. Utilizarea programului ACCESS


n acest capitol vei nva s folosii cel mai popular sistem de gestiune a bazelor
de date relaionale, numit Access. Acesta face parte din produsul Microsoft Office
al firmei Microsoft. Vei aplica pe viu tot ce ai nvat n capitolele precedente,
vei da via bazelor de date pe care le-ai proiectat. Acum vei nelege cu
adevrat unele lucruri peste care ai trecut mai uor n faza de proiectare.

Prezentare general
Microsoft ACCESS este baza de date folosit la birou de mii de utilizatori,
care doresc s-i stocheze i s-i acceseze cu uurin datele de interes
personal, precum i n medii cu mai muli utilizatori. n aceast prezentare
se va lucra cu varianta ACCESS 2002 din pachetul MS OFFICE XP, al
crui format standard este de ACCESS 2000.
Trebuie reinut faptul c ACCESS este att un sistem de stocare a datelor,
ct i un sistem de gestiune a acestora. Una dintre facilitile sale
importante este interfaa grafic uor de neles care permite crearea
interogrilor, formularelor i rapoartelor facilitate care lipsete din multe
baze de date mai mari i mai complexe. Cu alte cuvinte, chiar i
programatorii fr prea mare experien pot s se foloseasc de ACCESS
pentru a transforma un vraf de facturi, un fiier cu numele clienilor, un
registru contabil i o list de stocuri ntr-o baz de date relaional, n care
introducerea, actualizarea i raportarea informaiilor s se poat face cu un
clic pe un buton.
O caracteristic important a bazelor de date ACCESS este faptul c toate
componentele sale tabele, formulare, interogri i rapoarte se pstreaz
ntr-un singur fiier. Acest lucru face ca operaiunile din interiorul bazei de
date s se fac rapid. Acest fiier are extensia .mdb i poate fi copiat cu
uurin dintr-o locaie n alta. Limbajul SQL din ACCESS are toate
posibilitile descrise n capitolul anterior.

168

Baze de date

Capitolul 5

Tot ce ai nvat n capitolele precedente, ncepnd cu terminologia,


relaiile ntre tabele, integritatea datelor i diagrame vei regsi n ACCESS
ntr-o form specific acestui program. Muli nceptori sunt frustrai de
faptul c tabelele ACCESS, dei seamn oarecum cu cele din Excel, au un
comportament total diferit. Dac acetia ncearc s fac vreo analogie cu
tabelele din Excel, nseamn c au mari lacune n nelegerea bazelor de
date.
Deoarece elementele teoretice ale bazelor de date au fost tratate n
capitolele precedente, n mediul ACCESS vom pune accent numai pe
aplicarea n practic a acestor cunotine. Conceptele teoretice vor fi
amintite ca nite lucruri cunoscute. Vei observa c ACCESS trateaz
anumite concepte ntr-o manier proprie, chiar abuzeaz de anumite
ajutoare (wizard), care de multe ori deruteaz utilizatorii, mpiedicndu-i s
abordeze logic anumite operaii.
Principalele caracteristici ale sistemului de gestiune a bazelor de date
ACCESS sunt:
Lucreaz sub sistemul de operare Windows;
Este deschis comunicrii cu alte sisteme de gestiune a bazelor de
date cum ar fi FoxPro sau Paradox;
Este compatibil cu tehnologia ActiveX care permite realizarea
aplicaiilor client/server;
Permite aplicarea unor aplicaii complexe prin utilizarea
limbajului Visual Basic;
Permite comunicarea cu SQL Server, un alt produs Microsoft
care gestioneaz baze de date;
Permite accesul la baze de date din reeaua Internet, fiind un
instrument util pentru publicarea informaiilor n paginile Web;
Conine instrumente wizard care permit utilizatorului crearea
facil a unor obiecte componente ale bazei de date (tabele,
formulare, interogri, rapoarte).
Ofer posibilitatea crerii unei cpii a bazei de date;
Permite utilizarea instrumentului wizard pentru crearea a peste 20
de tipuri comune de aplicaii;

169

Baze de date

Capitolul 5

Permite utilizarea obiectelor ACCESS n alte aplicaii rulate sub


Windows.
Permite utilizarea de adrese i legturi Internet.

Interfaa programului ACCESS


Pentru a lucra cu orice aplicaie informatic, primul lucru pe care trebuie
s-l facem este s-i cunoatem interfaa de pornire. Pentru ACCESS
interfaa de pornire apare dup lansarea acestuia cu metoda general Start /
Programs / Microsoft Access. Vei gsi repede programul observnd c
iconia sa conine mic cheie de yal. Toate capturile i descrierile se refer
la versiunea Access 2002. Dac avei alt versiune trebuie s inei cont de
diferenele care ar putea apare, care nu sunt, oricum, eseniale.
Spre deosebire de alte programe Microsoft, programul ACCESS ncepe cu
o caset de dialog n care vi se cere numele i s alegei directorul bazei de
date pe care dorii s o deschidei, chiar dac este una nou (Blank
Database). Dup ce ai dat numele bazei de date noi, numit aici db1, va
apare interfaa din figura 5.1.

Fig. 5.1. Interfaa de pornire Access (fereastra Database)

Dup cum se vede, o baz de date ACCESS poate fi definit ca o colecie


de obiecte:
Tabele (tables)
Cereri de interogare (queries)
170

Baze de date

Capitolul 5

Formulare (forms)
Rapoarte (reports)
Pagini Web (pages)
Comenzi macro (macros)
Module (modules)

n continuare vor fi prezentate, pe scurt, aceste obiecte, urmnd s fie


reluate atunci cnd le vom folosi efectiv.
Tabele (tables) sunt obiecte definite de utilizator n care sunt stocate
datele. Sunt obinuitele tabele ale bazelor de date.
Formulare (forms) sunt obiecte care permit introducerea datelor, afiarea
acestora sau controlul ntregii aplicaii. Acestea v permit s facei aplicaii
performante chiar dac suntei un nceptor n baze de date.
Cereri de interogare (queries) sunt obiecte care permit vizualizarea
informaiilor obinute prin prelucrarea datelor din una sau mai multe tabele
i/sau alte cereri de interogare. Aici vei folosi din plin cunotinele
dobndite despre limbajul SQL.
Rapoarte (reports) sunt obiecte care permit formatarea i tiprirea
informaiilor obinute n urma consultrii bazei de date, sub form de
documente pe hrtie.
Pagini Web (pages) reprezint un obiect care include un fiier HTML i
alte fiiere suport n vederea furnizrii accesului la date prin intermediul
Internet-ului.
Comenzi macro (macros) reprezint un obiect care conine o definiie
structurat a uneia sau mai multor aciuni pe care ACCESS le realizeaz ca
un rspuns la un anumit eveniment.
Module (modules) reprezint un obiect care conine proceduri definite de
utilizator, scrise n limbajul Visual Basic. Iat o ocazie de a v etala
cunotinele de Visual Basic.
Pe lng obiectele prezentate, pe interfaa de pornire, mai exist cteva
butoane (Open, Design, New, un buton de tergere i cteva de afiare a

171

Baze de date

Capitolul 5

obiectelor) a cror nelegere i rol este uor de dedus, de aceea nu vor mai
fi prezentate.
Dup cum spuneam, ACCESS-ul are un instrument numit wizard care v
va ajuta s construii mai uor tabele, formulare sau interogri, dar un
singur lucru nu poate face: s v suplineasc lipsa cunotinelor dobndite
n capitolele precedente. Astfel, dac nu ai neles mecanismul legturilor
dintre tabele, e puin probabil c vei ajunge la rezultate mulumitoare,
chiar dac suntei monitorizai ndeaproape de instrumentul wizard.

Crearea tabelelor
nainte de a ncepe s creai tabele, este de la sine neles c avei deja un
proiect de baz de date, sau dac suntei la nceput de studiu, mcar o
diagram de relaii i structurile tabelelor. Spuneam la nceputul acestui
curs, ct de important e s avei un proiect corect de baz de date, pentru a
nu avea probleme la faza de implementare.
Crearea structurii tabelelor se poate face n trei moduri:
Utiliznd fereastra de proiectare (Create table in design view);
Utiliznd instrumentul Wizard (Create table by using wizard);
Prin introducerea datelor (Create table by entering data).
Consider c modul cel mai eficient de creare a tabelelor, care se potrivete
utilizatorilor romni, l reprezint primul mod (Create table in design
view), motiv pentru care va fi prezentat numai acesta. Pentru a v satisface
curiozitatea nu avei dect s le ncercai pe celelalte dou, pentru a ajunge
la o concluzie.
Revenind la primul mod de creare a unui tabel, dai un dublu clic pe Create
table in design view i pe ecran va apare fereastra Table din figura 5.2.

Fig. 5.2. Fereastra Table

172

Baze de date

Capitolul 5

nelegerea acestei ferestre nu e grea: suntei invitai s dai numele


cmpurilor (Field Name), s alegei din combobox tipul de dat pentru
cmpul respectiv (Data Type) i s introducei o scurt descriere, acolo
unde este cazul, despre ce va conine acel cmp (Description). Pentru
alegerea tipului de dat, revedei paragraful Anatomia unei specificaii de
cmp din capitolul 3.
n toolbar-ul de sub meniul din figura 5.2, exist mai multe butoane, unele
cunoscute din alte aplicaii Windows. Exist un buton (cel cu o chei) pe
care nu l-ai mai ntlnit pn acum. Acest buton v ajut s stabilii cheia
principal a tabelului pentru cmpul curent (cel cu sgeata din stnga),
printr-un simplu clic pe el.
n funcie de tipul de dat ales pentru cmp, n partea de jos apare un
subtabel n care putei seta proprietile cmpului curent. Aceste proprieti
sunt adaptate tipului de dat: numr, text, data calendaristic etc. S lum
pe rnd aceste proprieti, avnd ca reper tipul de dat numeric:
Field Size este dimensiunea cmpului. Executarea unui clic pe sgeata
derulant va deschide o list de opiuni privind dimensiunea cmpului.
Format este formatul sub care se prezint valoarea introdus n cmp.
Executarea unui clic pe sgeata derulant va deschide o list de opiuni
privind formatul cmpului.
Decimal Places este proprietatea care stabilete numrul de zecimale ce
pot fi atribuite cmpului. Se poate alege un numr ntre 0 i 15, sau Auto
pentru determinarea automat a numrului de zecimale.
Input Mask reprezint impunerea unui format de introducere pentru toate
datele acelui cmp. Formatul de introducere are o mare importan n
cadrul cmpurilor ce conin date de tip text sau dat calendaristic.
Caption este eticheta pentru specificarea unui nume atribuit cmpului, n
cazul n care acesta este utilizat n cadrul formularelor sau cnd tabelul
respectiv este afiat.
Default Value este o valoare care este atribuit automat, n momentul cnd
utilizatorul nu introduce nici o valoare n acel cmp.

173

Baze de date

Capitolul 5

Validation Rule este criteriul care va fi verificat nainte de validarea


valorii introduse n acel cmp. Criteriul este introdus sub form de expresii
care folosesc:
Operatorii: =, +, -, *, /, <, >, <=, >=, AND, OR, BETWEEN, IN,
IS NULL;
Identificatorii se dau n paranteze drepte [];
Funcii;
Constante;
Validation Text reprezint textul care va aprea pe bara de mesaje n cazul
n care valoarea introdus nu respect criteriul impus de regula de validare.
Required este proprietatea care stabilete dac introducerea unei valori n
acel cmp este obligatorie. Acest cmp poate avea una din valorile Yes /
No.
Indexed este proprietatea care stabilete dac acel cmp are un index care
accept valori duplicat sau numai valori unice. Dac nu dorim un index
pentru acel cmp se alege valoare No.
Proprietile descrise mai sus se refereau la tipul de cmp Numeric. Pentru
alte tipuri de cmp vor apare i proprieti noi (cele mai multe rmn).
Astfel, datele de tip Text i Memo au o proprietate numit Allow Zero
Length, adic admiterea lungimii zero. Aceast proprietate are valoarea Yes
sau No.
O proprietate important pentru cmpul care conine date de tip
Autonumber este New Values. Opiunile Increment sau Random permit
stabilirea modului n care cmpului respectiv i se vor acorda valori automat
de ctre sistem.
Relaii ntre tabele
Relaiile dintre tabele sunt lucruri cunoscute, deja, de ctre oricare dintre
dumneavoastr, nu-i aa? S vedem acum ce modalitate folosete
ACCESS-ul pentru a face legtura ntre tabele. Din punct de vedere al
momentului crerii acestora, exist 2 tipuri de relaii ntre tabelele unei
baze de date ACCESS i anume:
Relaii permanente se stabilesc dup definirea tabelelor i sunt
cerute de modelul relaional fcnd parte din structura bazei de
174

Baze de date

Capitolul 5

date. Aceasta se realizeaz, de obicei, prin corespondena cheie


primar cheie extern i sunt memorate n baza de date.
Relaii temporare se stabilesc ntre tabele cu ocazia definirii
unor cereri de interogare, nefiind nregistrate n structura bazei de
date.
Dup cum tim, ntre dou tabele ntre care exist o relaie, datele nu pot fi
introduse oricum. De exemplu, dac ntr-o baz de date avem tabelele
tblFacturiPrimite i tblFurnizori ntre care exist o relaie unu cu mai
muli, nu putem introduce date n tabelul tblFacturiPrimite pn nu avem
cel puin un furnizor n tabelul tblFurnizori. Cum rezolv ACCESS-ul
aceast prevedere din proiectul bazei de date (tipul de participare)? Prin
impunerea integritii refereniale (Enforce Referential Integrity), dup
cum se vede n figura 5.3.

Fig. 5.3. Stabilirea


integritii
refereniale

Cele 2 opiuni din partea de jos, Cascade Update Related Fields i


Cascade Delete Related Fields, se refer la actualizarea respectiv tergerea
tuturor cmpurilor legate prin aceast relaie.
n urma acestei setri, s-a fcut o legtur unu cu mai muli ntre cele dou
tabele, a crei reprezentare se vede n figura 5.4.
Fig. 5.4. Diagrama de relaie
ntre cele 2 tabele, aa cum
apare n ACCESS.

175

Baze de date

Capitolul 5

Stabilirea legturilor ntre tabele se face, fie n faza de creare a tabelului


(folosind Lookup Wizard), fie n fereastra Relationship care se afieaz cu
butonul
, din toolbar-ul din fereastra Database. Printr-un clic pe acest
buton se deschide tabela Relationship prezentat n figura 5.5.
Dac nu apar toate tabelele n fereastra Relationship, cu un clic-dreapta n
interiorul acesteia apoi alegnd opiunea Show Table va fi afiat fereastra
Show Table, cu care se pot aduga i celelalte tabele.
Legtura dintre tabele se face trgnd cu mouse-ul cmpul de legtur
dintr-un tabel peste cmpul corespunztor din cellalt tabel. Dup ce s-a
fcut legtura, putem face un clic-dreapta pe legtur, apar 2 posibilitai:
Edit Relationship... i se deschide caseta de dialog pentru stabilirea
integritii refereniale artat n figura 5.3, respectiv Delete cu care putem
terge legtura. Cnd citii aceast secven, este bine s o facei cu
calculatorul n fa, deoarece altfel, aceste manevre sunt greu de neles.
Dac ceva nu ai neles, ntrebai profesorul care v ndrum la laborator.

Fig. 5.5. Tabela Relationship

176

Baze de date

Capitolul 5

Tabelele nu sunt de la nceput aa frumos aranjate. O s vedei cum vei


gsi aceste tabele, dar prin tragere cu mouse-ul se pot aranja ca s fie mai
uor de urmrit. ncercai aceste manevre pentru a v obinui cu ele.
Crearea relaiilor cu Lookup Wizard...

Cea mai comod cale de a crea relaii permanente ntre dou tabele este
folosirea facilitii Lookup Wizard, pus la dispoziia noastr de programul
ACCESS. Aceast metod const n legarea tabelelor n faza de
proiectare prin intermediul unei chei primare i a unei chei externe. Prima
dat de proiecteaz tabelul din partea unu a relaiei unu cu mai muli. La
cel de-al doilea tabel, cnd se definete cmpul de legtur, pentru tipul de
dat (Data Type) se alege opiunea Lookup Wizard... (ultima dintre
opiuni). n urma acestei manevre se deschide caseta de dialog din figura
5.6.

Fig. 5.6. Primul pas al


procedurii Lookup Wizard

Se alege prima opiune, cea care ne spune c vom lega cmpul nostru cu un
alt cmp dintr-un tabel sau o interogare, I want the lookup.... Merit
explicat i opiunea a doua I will type in the values that I want, care ne
spune c putem lega acest cmp cu o list de valori introduse de noi chiar
n aceast faz. Aceast opiune este indicat s o folosii cnd avei un
numr mic de valori pe care poate s le ia un anumit cmp. ncercai i
aceast variant pentru a-i nelege rolul.
Cu butonul Next se avanseaz n pasul urmtor cnd vi se cere s alegei,
dintr-o list, tabelul cu care va fi legat. Dup alegerea tabelului, vei alege
cheia primar i un alt cmp pentru a identifica nregistrarea (acest lucru l
vei nelege cnd vei introduce, efectiv, date n tabel). Aceast manevr se
vede n figura 5.7.
177

Baze de date

Capitolul 5

Fig. 5.7. Alegerea


cmpului de legtur

n cazul nostru se vor selecta cmpurile TaraID i Denumire, care vor fi


trecute n fereastra din dreapta. Cu butonul Next se va trece la pasul
urmtor (figura 5.8) care ne recomand s face invizibil coloana cu cheia
primar, pentru c la operare nu ne va ajuta cu nimic, fiind un cod numeric
fr semnificaie pentru noi.

Fig. 5.8. Recomandarea


pentru a face invizibil
cheia primar

Cu butonul Next se trece la pasul urmtor care v cere s stabilii numele


cmpului care va apare n rapoarte, de regul se las cel implicit, propus de
calculator. Dup aceast manevr se alege butonul Finish care ne va
avertiza c o relaie a fost creat i c ar trebui salvat. Dac nu s-a greit
nimic, se apas butonul Next.

Fig. 5.9. Avertizarea de


salvare a relaiei create.

178

Baze de date

Capitolul 5

Pentru a verifica relaia creat se apas butonul


, care va deschide foaia
Relationships. Cu un clic-dreapta pe linia relaiei o putei edita sau terge.
ncercai aceast manevr pentru a nelege ce se ntmpl.
Diferena ntre cele dou tipuri de legturi permanente, legarea prin metoda
tragerii (drag and drop) n fereastra Relationship i legarea prin metoda
Lookup Wizard..., nu prea iese n eviden dect la crearea formularelor de
introducere a datelor. La prima metod Access-ul va pune automat o caset
de text (textBox) n care trebuie s introducem manual valori de la
tastatur, iar la a doua metod va apare n formular o caset combinat
(comboBox), din care putem alege elegant valoarea din lista afiat.
Dac ai reuit s nelegei aceste diferene, nseamn c ai fcut un pas
important spre a putea crea aplicaii Access tot mai performante. Poate n
acest moment nu sesizai diferenele dintre cele dou metode, dar cu
siguran, le vei nelege atunci cnd vei crea formulare, puin mai trziu.

Introducerea datelor n tabele


Dup ce s-au definit tabelele, s-au creat legturile ntre ele, urmeaz, firesc,
completarea acestora cu date. Cea mai simpl metod este s facei un
dublu-clic pe numele tabelului, ceea ce face s se deschid tabelul, care
seamn mult cu un tabele Excel, i s introducei pur i simplu date.
Adesea, anumite nregistrri din tabel prezint un interes deosebit, de aceea
acestea trebuie filtrate temporar, adic trebuie fcute invizibile celelalte.
Un filtru poate fi aplicat unui tabel, unei cereri de interogare, unui formular
sau unui raport. Filtrul este salvat mpreun cu fiecare obiect i poate fi
activat sau nu, dup nevoie.
Un filtru este util pentru realizarea urmtoarelor operaii:
Selectarea unui numr de nregistrri similare;
Lucrul cu un subset de nregistrri;
Vizualizarea datelor ntr-o anumit ordine;
Localizarea unei nregistrri folosind doar informaiile cunoscute.
179

Baze de date

Capitolul 5

n momentul n care un tabel sau un formular este vizualizat, n cadrul


barei de meniuri va apare opiune Records care permite operaiile de
filtrare. Exist mai multe opiuni de filtrare, dar cele mai folosite sunt
urmtoarele dou:
Filtrarea by Selection filtrare conform seleciei, este cea mai
rapid i mai simpl metod de aplicare a unui filtru. Pentru a
stabili criteriul de filtrare, se selecteaz un set de date dintr-unul
din cmpurile unui tabel, dup care se apas butonul

rezultnd tabelul filtrat. Pentru revenire se apas butonul


(Remove Filter). Cu aceast metod se pot filtra nregistrrile
numai pe baza unui criteriu aplicat unui singur cmp al tabelului.
Filter by Form filtrare conform formularului, este metoda n
care criteriul de filtrare se introduce ntr-un tabel gol. Pentru a
aplica aceast metod apsai butonul
, care va deschide
tabelul fr nici o nregistrare. Nu avei dect s alegei valorile
dorite din cmpurile vizate, rezultnd un criteriu de filtrare orict
de complex, poate (atenie) aa de complex c nu v afieaz
nimic, avnd n vedere c toate condiiile trebuie ndeplinite n
acelai timp. Pentru revenire se apas butonul
Filter).

(Remove

Salvarea tabelelor se face la ieirea din modul de proiectare, cnd suntei


ntrebat ce nume va avea noul tabel, sau n orice moment al procesului de
proiectare a tabelului, dnd comanda Save, sau apsnd cunoscutul buton
de salvare a documentelor Windows.
Putei schimba numele unui tabel fcnd un clic dreapta pe numele su. De
asemenea, putei face oricte cpii ale unui tabel pentru diferite aciuni,
mai ales cnd ncercai expresii SQL, avnd n vedere c dup ce ai
executat o operaie SQL nu mai putei reveni la starea iniial a tabelului.
n aplicaii, introducerea datelor se face elegant folosind formularele
specializate, cu tot felul de faciliti, aa cum se va vedea mai departe n
cadrul acestui curs.

180

Baze de date

Capitolul 5

Formulare
Formularele sunt obiecte de comunicaie ntre un utilizator i o aplicaie de
baze de date ACCESS. Ele permit att introducerea, ct i vizualizarea
datelor ntr-o manier ct mai atractiv.
ntr-o aplicaie formularele ndeplinesc urmtoarele roluri:
Afiarea i editarea datelor. Este rolul cel mai des folosit al unui
formular, prin care se pot afia i modifica date dintr-o baz de
date.
Controlul operaiilor realizate de o aplicaie. Se pot proiecta
formulare de aplicaie care s conin interfee de interaciune cu
utilizatorul, folosind proceduri Visual Basic sau macro-uri.
Introducere de date. Introducerea datelor cu formulare clare, pe
nelesul operatorului este una din premisele unei aplicaii de
succes.
Tiprirea informaiilor. Chiar dac mai rar, formularele pot fi
folosite pentru tiprirea de informaii la imprimant.
n general, un formular este compus din 3 pri: antetul, zona de detaliu i
subsolul. n zona de detaliu sunt prezentate, de fapt, datele. n antet i
subsol sunt prezentate acele informaii statice care nu se schimb pe
msur ce editm alte nregistrri.
Reinei faptul c, n spatele fiecrui formular exist un tabel sau o
interogare. Excepie fac formularele folosite ca interfa a unei aplicaii.
Majoritatea formularelor cu care lucrm noi, n cadrul acestui curs, fac
parte din prima categorie, adic cele care au ataate un tabel sau o
interogare.
Crearea unui formular
Un formular se poate crea prin mai multe moduri, dar cele mai utilizate
sunt cele pe care o s le folosim i noi:
Creare automat prin utilizarea instrumentului wizard;
Creare manual cu ajutorul ferestrei de proiectare.
181

Baze de date

Capitolul 5

n continuare vor fi prezentate pe larg cele dou metode de creare a


formularelor.
Crearea automat a unui formular

Aceast metod este cea mai facil, practic, calculatorul face tot, noi
trebuie s alegem numai anumite opiuni care sunt foarte sugestive i clare.
Pentru a crea formularul, n fereastra Database se apas, n ordine,
butoanele Forms (din stnga) i New (de sus).
n figura 5.10 se poate vedea fereastra Database.

Fig. 5.10. Fereastra Database

n urma acestei aciuni va apare fereastra New Form, aa cum se vede n


figura 5.11.

Fig. 5.11. Fereastra


NewForm

Din acest comboBox se alege


tabelul asociat formularului

182

Baze de date

Capitolul 5

Din aceast fereastr alegem opiunea Form Wizard i alegem tabelul


tblGrupe din caseta comboBox, apoi apsm butonul OK.
n urma acestei manevre va apare fereastra din figura 5.12, cu ajutorul
creia putem alege cmpurile care vor face parte din formular.

Fig. 5.12. Alegerea


cmpurilor formularului

n fereastra urmtoare putem selecta modul cum vor apare datele n cadrul
formularului, aa cum se vede n figura 5.13.

Fig. 5.13. Alegerea


formei de prezentare

Putei ncerca mai multe opiuni pentru a vedea diferenele dintre ele. Dup
ce v-ai decis asupra unei opiuni i ai apsat butonul Next, va apare
fereastra cu ajutorul creia putei alege fundalul formularului, dup cum se
vede n figura 5.14.
183

Baze de date

Capitolul 5

Fig. 5.14. Alegerea


fundalului formularului

Dup ce v-ai decis asupra unui fundal i ai apsat butonul Next, va apare
ultima fereastr a acestui scenariu, n care putei alege numele noului
formular pe care tocmai l-ai creat.
Acest pas se poate vedea n figura 5.15.

Fig. 5.15. Alegerea


numelui formularului i
ncheierea operaiunii

Pe aceast fereastr exist 2 butoane de opiune, primul ne spune c la


ieirea din el, formularul va fi automat deschis, iar al doilea ne spune c
forma va fi deschis n modul Design n care putem s facem modificri
ale acesteia. ncercai ambele opiuni pentru a vedea efectul.
Dup apsarea butonului Finish va apare afiat formularul pe care tocmai
l-am construit, aa cum se vede n figura 5.16.

Fig. 5.16. Forma final a


formularului

184

Baze de date

Capitolul 5

Dei crearea automat a formularului este mai rapid i mai uoar,


adevraii profesioniti o folosesc mai rar, deoarece este mai rigid i i
cam impune punctul de vedere. Formularele cu adevrat profesionale se fac
manual, aa cum se va vedea n continuare.
Crearea manual a unui formular

Cu aceast metod se pot crea formulare pornind de la zero. Chiar dac la


nceput aceast metod poate prea dificil, este o cale de a construi
formulare adaptate nevoilor utilizatorilor, att din punct de vedere
funcional ct i al design-ului.
Abilitatea de a concepe formulare utile i atractive se obine numai prin
experien, de aceea nu trebuie s v facei probleme dac primele voastre
formulare sunt criticate de utilizatorii lor. Reinei aceste critici pentru a
modifica formularele sau pentru a le folosi n viitoarele formulare pe care
le vei proiecta. De altfel, cei care vei ajunge proiectani de baze de date
vei avea propriile voastre abloane, obinute n urma experienei
acumulate.
Cel mai simplu mod de a nelege cum se creaz un formular plecnd de la
zero, fr nici un ajutor, este s prezentm un exemplu. Ne propunem
construim acelai formular plecnd de la zero. Vom executa paii urmtori:
1. Din interfaa Database selectm Forms din bara de obiecte.
2. Din fereastra care se deschide alegem New Design view.
3. Se va deschide fereastra din figura 5.17, care arat forma n faza
iniial.
Se observ apariia Toolbox-ului cu obiecte care se pot pune pe interfa,
care seamn cu cel din Visual Basic.

185

Baze de date

Capitolul 5

Bara de titlu

Toolbox caseta
cu obiecte

Fig. 5.17. Forma iniial a


formularului

Caseta Toolbox poate fi mutat cu mouse-ul oriunde pe suprafaa formei ca


s nu ne ncurce vizibilitatea.Seciunile formularului se vd n figura 5.17.
Acestea sunt:
Form Header i Form Footer sunt antetul i subsolul formularului n care
se afieaz informaii precum titlurile. Dac se tiprete formularul,
informaiile din antet i subsol apar o singur dat, pe prima pagin. Nu
ezitai s plasai n antet sau subsol oricare din butoanele asociate unor
operaii.
Page Header i Page Footer sunt antetul i subsolul paginilor, i sunt
similare cu cele ataate direct la formular, cu principala diferen c
seciunile de pagin se tipresc pe fiecare pagin, iar cele de formular
numai pe prima. Seciunile de antet i subsol de pagin nu apar la
vizualizareaformularului, dar sunt folosite de Access la tiprirea acestuia.
Detail este seciunea de baz a fiecrui formular care nu poate lipsi, spre
deosebire de celelalte care pot lipsi. Aici sunt afiate, practic, informaiile
pentru care a fost conceput formularul.

186

Baze de date

Capitolul 5

n exemplul nostru, mergem mai departe i populm formularul cu


obiectele potrivite, etichete, casete de text, butoane de navigare etc. Mai
nti scpm de seciunile de antet i subsol ale formularului i paginilor
dnd comanda View i deselectnd opiunile Page Hedear/Footer i Form
Hedear/Footer.
Construim apoi obiectele de pe interfa, aa cum fceam n Visual Basic.
Nu uitai s afiai instrumentele folosite, cu ajutorul butonului Toolbox (
). Rezultatul este prezentat n figura 5.18.

Proprietatea Record Source stabilete


tabelul asociat formularului

Fig. 5.18. Formularul, aa


cum arat n modul Design
Proprietatea Control Source face asocierea ntre
cele 3 casete de text i cmpurile tabelului
asociat formularului

Observai cum se face legtura fiecrui cmp cu obiectul corespunztor.


Trebuie numai s selectm fiecare obiect i la proprietatea Control Source
s alegem cmpul corespunztor. Pentru ntregul formular trebuie s
alegem tabelul asociat, n cazul prezentat acesta este tblGrupee.

187

Baze de date

Capitolul 5

Dup ce activm formularul cu butonul


urmtoare, 5.19.

, acesta va arta ca n figura

Fig. 5.19. Formular obinut


de la zero

Se observ c acest formular este mai artos, are un titlu pus i are
introdus i data la care se folosete Data curenta:, n care s-a folosit
funcia Now() ataat de caseta de text respectiv, care-l face mai util.
Exemplul prezentat nu este unul spectaculos, dar este un bun nceput care
v poate folosi ca model.
Dup modelul prezentat, ncercai s creai un formular dup un tabel pe
care l-ai conceput singuri.
Observaie important! n practic se folosete o tehnic mixt, adic se
pornete cu metoda wizard, dup care se intervine manual pentru a o
modifica, tergnd unele controale inutile i adugnd alte obiecte.

188

Baze de date

Capitolul 5

Formulare cu subformulare
Un formular ca cel prezentat n paragraful anterior este unul banal, bun
pentru a nelege cam cum se pune problema. Cu siguran, nu v vei opri
la acest stadiu i vei dori s facei formulare cu adevrat utile, mai ales c
aplicaiile cu baze de date este un domeniu tot mai cutat, nu-i aa?
Este puin probabil c vei crea formulare profesionale fr s folosii i
nite subformulare.
Un subformular, nu este altceva dect un formular inclus n alt formular,
pentru a permite afiarea informaiilor din mai multe tabele sau cereri de
interogare, aflate n relaii 1:1 sau 1:N. Astfel, n formularul principal vor fi
afiate datele din partea unu a relaiei, iar n subformular cele din partea
mai muli. Prin urmare, la un moment dat n formular va fi afiat o
nregistrare din partea unu a relaiei, iar n subformular nregistrrile
corespondente din partea mai muli a relaiei.
Un formular poate conine chiar mai multe subformulare. Pentru a crea un
formular cu subformulare incluse se poate proceda n 3 moduri:
Crearea formularului i subformularului concomitent;
Crearea subformularului i adugarea lui la un formular existent;
Crearea separat a celor dou formulare i apoi combinarea lor.
Dintre acestea, ultima variant este cea mai simpl, aa c pe aceasta o
vom folosi i noi. n acest sens se parcurg urmtoarele etape:
Se creeaz formularul principal i se salveaz;
Se creeaz subformularul, la fel ca i formularul principal;
Se face legtura ntre formularul principal i subformular;
Se testeaz rezultatul.
Pentru a nelege mecanismul crerii unui formular care conine un alt
formular inclus, vom lua un exemplu concret. Presupunem c avem o
poriune dintr-o baz de date care conine 4 tabele:
- tblFacturi
- tblDetaliiFacturi
- tblProduse
- tblFurnizori
189

Baze de date

Capitolul 5

Toat lumea tie ce este o factur, mai ales comercianii, toate fiind stocate
n tabelul tblFacturi. Fiecare factur are mai multe poziii, corespunztoare
mrfurilor care se factureaz, dac ne gndim la o factur din comer.
Aceste mrfuri facturate sunt cuprinse n tabelul tblDetaliiFacturi. Pot fi
facturate numai produsele cuprinse n tabelul tblProduse. Fiecare factur
provine de la un singur furnizor, acetia fiind cuprini n tabelul
tblFurnizori.
ntre aceste tabele exist legturi, aa cum am nvat n capitolul 3, la
proiectarea bazelor de date. n figura 5.20 este artat structura acestei
poriuni a bazei de date.
tblFacturi
FacturaID ChP
NrFactura
Data
FurnizorID ChE

tblDetaliiFacturi
FacturaID ChE
ProdusID ChE
Cantitate
Observatii

tblProduse
ProdusID ChP
Denumire
UM
Pret
..............

tblFurnizori
FurnizorID ChP
Furnizor
CodFiscal
...........

Fig. 5.20. Tabelele implicate n formular

Ne propunem s construim un formular cu ajutorul cruia s putem vedea


toate facturile primite de la furnizori, precum i detaliile fiecreia, adic
produsele facturate. Observm c facturile se afl n tabelul tblFacturi,
care este n relaie 1:N cu tabelul tblDetaliiFacturi. De asemenea,
observm c cele 2 tabele conin cte un cmp care reprezint coduri
(FurnizorID, ProdusID) ceea ce nu ne ncnt cnd le vedem afiate n
locul unei denumiri clare, nelese de oricine.
Dup cum tim, n spatele fiecrui formular se gsete un tabel sau o
interogare, iar faptul c cele 2 tabele implicate conin coduri numerice care
nu au nici o semnificaie pentru utilizatorul obinuit, ne face s ne gndim

190

Baze de date

Capitolul 5

la o interogare. Noi tim deja s facem interogri cu limbajul SQL, nvat


n capitolul precedent, nu-i aa?
Prin urmare, vom scrie 2 interogri SQL, una pentru formularul principal
(cel cu facturile) i alta pentru subformular (cel cu detaliile facturilor). Iat
cele 2 interogri:
Interogarea 1. Formularul principal:
SELECT tblFacturi.FacturaID, tblFacturi.NrFactura, tblFacturi.Data, tblFurnizori.Furnizor
FROM
tblFacturi
INNER
tblFacturi.FurnizorID=tblFurnizori.FurnizorID;

JOIN

tblFurnizori

ON

Interogarea 2. Subformular:
SELECT FacturaID, Denumire, UM, Cantitate, Pret, Cantitate*Pret AS Valoare
FROM tblDetaliiFacturi AS df INNER JOIN tblProduse AS pr ON df.ProdusID=pr.ProdusID;

Observai n aceste expresii SQL cum se face legtura ntre 2 tabele


folosind clauza INNER JOIN ... ON, precum i expresia AS cu care
stabilim alias-uri pentru numele prea lungi ale tabelelor. Observai, de
asemenea, cum s-a creat cmpul calculat Valoare care este produsul dintre
cantitate i pre.
Pentru a scrie interogrile, tabelele bazei de date trebuie s fie completate
cu date pentru a putea vedea rezultatele. Fereastra Database trebuie s
arate ca n figura 5.21.

Fig. 5.21. Tabelele


bazei de date

Pentru a crea cele dou interogri trebuie s ajungem n fereastra n care


putem scrie expresiile SQL. Pentru aceasta trebuie s parcurgem paii:
191

Baze de date

Capitolul 5

Apsm butonul Queries, apoi dublu-click pe opiunea Create


query in Design view.
Se deschide fereastra cu cele 4 tabele.
Apsm butonul Close.
n partea stng-sus apare butonul
, a crui apsare
deschide fereastra n care se scriu pe rnd cele 2 expresii SQL,
adic Interogarea 1 i Interogarea 2.
Pentru a verifica interogrile se apas butonul Run
toolbar-ul superior.

din

Interogrile vor primi numele urmtoare: Interogarea 1


qryFacturi, iar Interogarea 2 qryDetaliiFacturi.
Dac totul a decurs bine, trebuie s obinei ca rezultat al interogrilor
tabelele din figura 5.22-1, cu observaia c datele vor fi, probabil, altele.
Interogarea 1

Interogarea 2

Fig. 5.22-1. Cele 2 interogri rezultate

n acest moment putem crea 2 formulare care s aib n spate aceste


interogri. Este evident c pentru formularul principal folosim interogarea
qryFacturi, iar pentru subformular interogarea qryDetaliiFacturi.
Crearea celor 2 formulare se face dup metoda prezentat n paragraful
precedent, cu observaia c n loc de tabele alegem interogri pentru a le
ataa acestora.
Prima dat se creeaz formularul frmDetaliiFacturi, dup care se creaz
formularul principal frmFacturi, n care se introduce obiectul
192

Baze de date

Capitolul 5

Subform/Subreport din Toolbox. Cnd se cere formularul de introdus,


alegei frmDetaliiFacturi.
Cnd se introduce subformularul, trebuie setate unele proprieti care spun
programului Access cum se leag subformularul frmDetaliiFacturi de
formularul principal frmFacturi. Aceste proprieti sunt Source Object, Link
Child Fields i Link Master Fields, adic numele subformularului i cele dou
cmpuri de legatur. Valorile setate pentru aceste proprieti se pot vedea
n figura 5.22-2. Cmpul de legtur, corespunztor fiecrui formular este
FacturaID.

Fig. 5.22-2. Setarea


proprietilor pentru
subformular

La setarea proprietilor amintite, cele 2 formulare implicate trebuie sa


arate ca n figura 5.23.
Cteva precizri:
La subformularul frmDetaliiFacturi se va alege modul de
prezentare Datasheet, adic sub form de tabel.
Pentru a elimina butoanele de navigare din subformular,
proprietatea Navigation Buttons se va seta la valoarea No.

193

Baze de date

Capitolul 5

frmFacturi

frmDetaliiFacturi

Fig. 5.23. Formularul cu


subformular, n modul Design

Cnd se activeaz formularul, adic se scoate din modul Design, acesta va


arta ca n figura 5.24.

Butoane de navigare

Fig. 5.24.
Formularul nostru
n stare de
funcionare

Cu ajutorul butoanelor de navigare, navigm printre facturi. La o anumit


factur va fi afiat data emiterii i furnizorul, precum i detaliile facturii
respective, cu ajutorul subformularului.
ncercai s construii i alte formulare dup procedura prezentat, pentru a
ctiga experien.

194

Baze de date

Capitolul 5

Interogri
Fr ndoial, interogrile sunt aciunile cele mai numeroase aciuni pe care
o s le facei asupra unei baze de date. Prin interogri nu facem altceva
dect s extragem informaii dintr-o baz de date, motivul pentru care
acestea au fost create, nu-i aa?
Interogrile care se definesc nc din faza de proiectare a bazei de date se
mai numesc i vederi, aa cum am vzut n capitolul 2 la definirea
terminologiilor. Rezultatul unei interogri este un tabel virtual, adic unul
care nu exist n baza de date, dar care se genereaz ori de cte ori este
nevoie. Prin aceasta deducem c o interogare se va actualiza de fiecare
dat, dac tabelele implicate au suferit modificri.
Interogrile i tabelele sunt singurele obiecte ale bazei de date care se
asociaz formularelor. Pentru afiarea informaiilor extrase dintr-o baz de
date se parcurge, n general traseul Interogare Formular.
Dup cum am nvat n capitolul 4, pentru extragerea informaiilor dintr-o
baz de date se folosete limbajul SQL. Cunotinele dobndite acolo sunt
de un real folos n ceea ce vom face n continuare.
n Access exist o mare problem: generarea interogrilor se face cu
ajutorul unei aplicaii grafice, care n faza de nvare, cum este cazul
nostru, produce mai mult confuzii dect s clarifice lucrurile. Din acest
motiv, o s folosim limbajul SQL pentru crearea interogrilor, scriind
expresiile de la zero. O s vedem mai trziu c i modulul grafic Wizard
genereaz expresii SQL, dar care nu sunt aa de clare ca cele scrise de noi,
adic conin i lucruri inutile, ca orice activitate automat.
Crearea interogrilor folosind limbajul SQL
Cnd am nvat limbajul SQL, am scris expresii pe care am ncercat s le
nelegem la nivel de concept, nu ne-am pus problema cum s le verificm.
Acum avem ocazia s testm expresiile SQL n interiorul programului
Access. De aceea este indicat s verificai expresiile din capitolul 4
folosind metoda explicat n continuare.
Pentru a scrie expresiile SQL
corespunztoare. Vei proceda astfel:

trebuie

195

deschidem

fereastra

Baze de date

Capitolul 5

n fereastra Database se apas butonul Queries apoi se d dubluclick pe opiunea Create query in Design view .
Se va deschide fereastra Show table unde se apas butonul Close.
n partea stng a Toolbar-ului superior, va apare butonul
prin apsarea cruia se deschide fereastra din figura 5.25.

Fig. 5.25. Fereastra


pentru scrierea
expresiilor SQL

Observai c n mod automat apare scris instruciunea SELECT; care se


termin cu punct i virgul, care semnific terminarea expresiei SQL. n
aceast fereastr se scriu de mn expresiile SQL. Nu uitai de simbolul ;
punct i virgul de la sfritul expresiei.
Pentru verificarea expresiei SQL introduse folosii butonul Run SQL
localizat conform figurii 5.26.

Fig. 5. 26. Butonul Run SQL

Dac totul a decurs bine, se va afia un tabel cu datele generate de


interogare.
Ca exerciiu, reluai toate exemplele din capitolul 4 i verificai-le cu
ajutorul Access-ului. Este evident c mai nti trebuie s introducei i s
populai tabelele prezentate acolo.
Crearea interogrilor cu aplicaia Wizard(Design view)
A crea o interogare cu vrjitorul(aplicaia Wizard) este foarte simplu i
rapid. Singura mare problem este c nceptorii nu prea neleg ce fac,
196

Baze de date

Capitolul 5

pentru c prea i conduce calculatorul. Este mult mai util atunci cnd avei
o oarecare experien i v-ai nsuit limbajul SQL.
n ce const problema de fapt? Access-ul ne pune la dispoziie nite unelte
cu care putem construi interogri numai cu mouse-ul, trgnd tabele i
cmpuri, punnd condiii, toate fcndu-se la vedere ntr-o aa-numit gril
de proiectare a interogrii. n final se obine tot o expresie SQL, pe care o
genereaz calculatorul, n funcie de manevrele fcute de noi.
Pentru a crea o interogare n modul Design view se procedeaz astfel:
n fereastra Database se d click pe Queries, apoi pe New. Se va
deschide fereastra din figura 5.27

Fig. 5.27. Pasul 1 de


creare a unei interogri

Din caseta New Query se se alege opiunea Design View OK.


Se obine caseta din figura 5.28.

Fig. 5.28. Grila de proiectare a interogrilor

197

Baze de date

Capitolul 5

n caseta de dialog se d dublu-click pe tabelul care dorim s fie


implicat n interogare, iar acesta va apare n zona de sus a
formularului. Dac e nevoie de mai multe tabele, se repet
aciunea iar la sfrit se nchide caseta cu butonul Close.
Grila de proiectare seamn cu un tabel, a cror rnduri au
urmtoarele semnificaii:
Field aici se trag cu mouse-ul cmpurile interogrii;
Table aici va apare automat numele tabelului la care aparine
cmpul;
Sort

- aici se stabilete ordinea de sortare, ascendent sau


descendent. Dac nu se scrie nimic sortarea va fi
ascendent;

Show - dac este bifat, cmpul va fi vizibil, altfel nu;


Criteria

- aici se stabilesc criteriile pe care trebuie s le


ndeplineasc cmpul;

or - se folosete pentru criterii complexe.


Dup ce sau ales tabelele, se fac legturile ntre tabele, apoi se
trag cmpurile, pe linia Field. Legtura ntre cmpuri se face
trgnd cu mouse-ul un cmp dintr-un tabel i suprapunndu-l
peste cmpul corespunztor din cellalt tabel. Aceast legtur
este numai una temporar, folosit numai la interogarea
respectiv. O gril completat se poate vedea n figura 5.29.

Fig. 5.29. Gril completat

198

Baze de date

Capitolul 5

Se observ c primul cmp a fost folosit numai pentru sortare, el nefiind


vizibil n interogare. Pentru vizualizarea interogrii se apas butonul Run (
), iar rezultatul se vede n figura 5.30.

Fig. 5.30. Rezultatul interogrii

Expresia SQL generat automat de Access este urmtoarea:


SELECT tblFacturi.NrFactura, tblFacturi.Data, tblFurnizori.Furnizor, tblFurnizori.CodFiscal
FROM tblFacturi INNER JOIN tblFurnizori ON tblFacturi.FurnizorID =
tblFurnizori.FurnizorID
WHERE (((tblFurnizori.Furnizor)="Promax"))
ORDER BY tblFacturi.FacturaID;

Prin urmare, toate manevrele fcute cu mouse-ul au avut ca rezultat aceast


expresie SQL care ar fi putut fi scris de la bun nceput manual. Rmne la
alegerea voastr care metod este mai bun i mai instructiv.
Practica spune c metoda cea mai eficient, din punct de vedere al nsuirii
cunotinelor, este varianta SQL pentru c ajut la nelegerea deplin a
crerii interogrilor i a rolului fiecrei clauze. Deci nu ezitai s o folosii
chiar dac vi se pare la nceput mai grea.

199

Baze de date

Capitolul 5

Legarea permanent a dou tabele


nc din faza de proiectare a unei baze de date am vzut c ntre tabelele
sale exist legturi. Aceste legturi se fac ntre dou cmpuri fiecare
aparinnd unui tabel, aa cum se vede din diagrama bazei de date. Ne
punem problema traducerii acestor legturi artate n diagrame, n cadrul
programului Access.
Am vzut c n limbajul SQL, legarea a dou tabele se face prin clauza
INNER JOIN ... ON. Rolul legturilor dintre tabele se vede n timpul
interogrilor. Cum se face legtura ntre 2 tabele?
Exist 2 tipuri de legturi pe care Access-ul le permite:
Legturi permanente, stabilite n faza de proiectare a tabelelor;
Legturi temporare, care se stabilesc n timpul crerii
interogrilor.
Legturile permanente se pot face, la rndul lor n 2 moduri: cu ajutorul
ferestrei Relationships (a), respectiv cu vrjitorul Lookup Wizard (b).
a) Fereastra Relationships se deschide cu comanda Tools Relationships.
Se va deschide fereastra care la nceput este goal, urmnd ca noi s
tragem n ea tabelele i s le legm. n figura 5.31 este artat o fereastr
Relationships, cu legturi stabilite. Intuii c relaia 1:N este aici
simbolizat prin caracterele 1 i .

Fig. 5.31. Fereastra Relationships

200

Baze de date

Capitolul 5

Din lista tabelelor, cu un dublu-click, acestea ajung n fereastra


Relationships, dup care se face legtura ntre cmpuri prin operaia drag
and drop, de la cmpul de legtur din tabelul surs, la cmpul de legtur
din tabelul destinaie. Dup ce s-a fcut legtura apare fereastra Edit
Relationships, care stabilete i integritatea datelor prin bifarea
proprietilor artate acolo, referitoare la actualizarea i tergerea
cmpurilor legate, figura 5.32.

Fig. 5.32. Fereastra Edit Relationships

Stabilirea tipului de legtur se face prin fereastra Join Properties, care se


deschide cu butonul Join Type (figura 5.33).

Fig. 5.33. Fereastra Join Properties

Cele 3 tipuri de opiuni au urmtoarele semnificaii:


1: - extrage numai nregistrrile din tabelul surs care au nregistrri
echivalente n tabelul destinaie.
2:

- se mai numete legtur la stnga.

3:

- se mai numete legtur la dreapta.

b) Legtura prin Lookup Wizard se face n faza de creare a tabelului,


cnd la alegerea tipului de dat se alege opiunea din figura 5.34.
201

Baze de date

Capitolul 5

Fig. 5.34. Alegerea cmpului Lookup Wizard

n continuare vrjitorul ne conduce pentru a realiza legtura propus,


procedura este foarte clar, aa c nu mai e cazul s fie prezentat aici.
ncercai-o i nu vei avea probleme.
Observaie important!! Chiar dac legturile permanente dintre tabele n
Access creeaz unele faciliti, evitai s le creai deoarece ar putea s v
creeze unele neplceri la crearea interogrilor din mai multe tabele, mai
ales cnd suntei nceptori. Dac baza de date este corect proiectat, iar
legturile dintre tabele se vd n documentaia acesteia, cel mai nelept
lucru este s folosii legturile temporare, valabile numai pentru
interogarea respectiv.

202

Baze de date

Capitolul 5

Interogri cu parametri
Dac ntr-o interogare este necesar s se schimbe foarte des criteriile de
selecie, este recomandabil ca aceasta s fie transformat ntr-o interogare
cu parametri. Astfel, la apariia oricrei schimbri, cererea trebuie
reproiectat, modificnd criteriile, ceea ce este total ineficient. Avantajul
unei interogri cu parametri, const n faptul c aceste criterii care se
modific primesc valori n momentul execuiei cererii.
Astfel, dac ntr-un tabel cu facturi avem datele calendaristice la care au
fost emise i furnizorii acestora, este foarte probabil c vom dori obinerea
unor situaii ca acestea:
- facturile primite ntr-o lun oarecare sau un interval de timp;
- facturile primite de la un anumit furnizor;
- facturile primite de la un furnizor ntr-un interval de timp.
Astfel de interogri nu sunt greu de fcut, inconvenientul este c pentru
orice situaie scoas trebuie s punem alte criterii, care de altfel, difer
foarte puin ntre ele, adic numele furnizorului sau a intervalului de timp.
Mai mult, cel care face interogarea trebuie s stpneasc procedura de
construcie a acesteia, ceea ce ar fi prea mult pentru un utilizator obinuit.
Dac ar trebui s introduc numai nite parametri pentru ca interogarea s
funcioneze, ar fi altceva.
n continuare vom ncerca s construim cteva interogri cu parametri care
s poat fi folosite ca modele pentru aplicaiile pe care le vei face singuri.
S relum baza de date cu diagrama din figura 5.35.
tblFacturi
FacturaID ChP
NrFactura
Data
FurnizorID ChE

tblDetaliiFacturi
FacturaID ChE
ProdusID ChE
Cantitate
Observatii

tblProduse
ProdusID ChP
Denumire
UM
Pret
..............

tblFurnizori
FurnizorID ChP
Furnizor
CodFiscal
...........

Fig. 5.35. Diagrama bazei de date

203

Baze de date

Capitolul 5

Ne propunem mai nti s construim o interogare care s gseasc toate


facturile primite de la un furnizor, al crui nume s-l dm n momentul
interogrii. Pentru aceasta executm paii urmtori:
1. Deschidei o nou interogare n modul Design View. Introducei tabelele
tblFacturi i tblFurnizori. Tragei cmpurile aa cum se vede n figura
5.36.

Fig. 5.36. Grila de


proiectare

2. n rndul Criterii de la cmpul Furnizor introducei ntre paranteze


drepte:
[Introduceti furnizorul:]

3. Vizualizai interogarea cu butonul


figura 5.37.

, care va deschide caseta din

Fig. 5.37. Introducerea


parametrului interogrii

Introducnd un furnizor existent, se va afia un tabel cu toate facturile


emise de acesta.
Dac dorim, putem vedea ce expresie SQL a generat Access-ul:

204

Baze de date

Capitolul 5

SELECT tblFurnizori.Furnizor, tblFacturi.NrFactura, tblFacturi.Data


FROM
tblFacturi
INNER
tblFurnizori.FurnizorID

JOIN

tblFurnizori

ON

tblFacturi.FurnizorID

WHERE (((tblFurnizori.Furnizor)=[Introduceti furnizorul:]));

Relum procedura i vom ncerca s afim facturile primite ntr-un


interval de timp. Grila de proiectare trebuie s arate ca n figura 5.38.

Fig. 5.38. Grila de


proiectare pentru un
interval de timp.

Cele 2 cereri de parametri sunt artate n figura 5.39.

Fig. 5.39. Introducerea celor 2 parametri

Pornind de la aceste exemple, ncercai s construii i alte interogri cu


parametri pentru a acumula experien.

205

Baze de date

Capitolul 5

Rapoarte
Rapoartele nu sunt altceva dect nite formulare cu informaii extrase din
baza de date, care se tipresc pe hrtie i sunt folosite ca documente care se
pot pune n dosare sau se arhiveaz. Tehnica de lucru este asemntoare cu
cea de la formulare. Ca i formularele, rapoartele au o surs de date care
poate fi un tabel sau o interogare.
Crearea rapoartelor este cea mai spectaculoas aciune dintr-o aplicaie de
baze de date. Acest lucru se datoreaz faptului c rapoartele conin tocmai
informaiile care au stat la baza obiectivelor bazei de date. Aceste rapoarte
ajung n mna unor persoane care au mai puin legtur cu bazele de date,
dar sunt foarte exigente n legtur cu exactitatea acestor informaii. Aceste
persoane pot fi manageri de top care ar putea fi singurele care neleg
semnificaia unor informaii. Forma de prezentare a acestora n cadrul
raportului este foarte important.
Crearea unui raport simplu
Cu siguran, primul raport pe care o s-l facei va fi unul fr pretenii,
fcut cu ajutor din partea programului Access. Modalitatea cea mai simpl
de preluare a informaiilor dintr-un tabel i aducerea acestora ntr-un
format corespunztor pentru tiprire este folosirea procedurii AutoReport.
Aceasta permite crearea unui raport n format tabelar sau de tip coloan.
Un raport n format tabelar, cel mai uzual de altfel, este asemntor unei
foi de date Excel. Dezavantajul procedurii AutoReport este c raportul se
bazeaz pe un singur tabel sau interogare. De asemenea, forma de
prezentarea este una rigid, impus.
Cel mai indicat lucru pentru a nelege cum se creeaz rapoartele este s
lum un exemplu practic. Pentru aceasta, lum ca exemplu baza de date pe
care am folosit-o la crearea formularelor. Aceast baz de date are
structura prezentat n figura 5.40.

206

Baze de date
tblFacturi
FacturaID ChP
NrFactura
Data
FurnizorID ChE

Capitolul 5
tblDetaliiFacturi
FacturaID ChE
ProdusID ChE
Cantitate
Observatii

tblFurnizori
FurnizorID ChP
Furnizor
CodFiscal
...........

tblProduse
ProdusID ChP
Denumire
UM
Pret
..............

Fig. 5.40. Diagrama bazei de


date

Baza de date conine 4 tabele pentru urmrirea facturilor cu detaliile lor,


primite de o firm de la diveri furnizori. Tabelele conin produsele,
facturile i furnizorii afereni. Ne propunem s crem diferite rapoarte cu
informaii din aceast baz de date.
Vom crea un raport simplu care s ne afieze toate produsele din tabelul
tblProduse, folosind procedura AutoReport. Pentru aceasta vom parcurge
urmtorii pai:
1. Deschidem baza de date din figura 5.40 care are completate tabelele
cu date.
2. Executm clic pe obiectul Reports, situat n stnga ferestrei
Database.
3.Executm clic pe butonul New din bara de instrumente, situat n
partea de sus a ferestrei Database. Ca urmare va apare caseta de
dialog din figura 5.41.

Fig. 5.41. Alegem


tabelul tblProduse i
opiunea Tabular

207

Baze de date

Capitolul 5

4. Selectm opiunea AutoReport: Tabular.


5. Din lista derulant din partea de jos, alegem tabelul tblProduse care
va fi sursa pentru raportul nostru.
6. Executm clic pe butonul OK. n urma acestei manevre va apare
raportul n Print Preview, aa cum se vede n figura 5.42.

Fig. 5.42. Partea de sus a raportului creat

Dup cum se vede, acest raport ar mai trebui aranjat puin, n special la
alinierea coloanelor, dar pentru c l-am obinut att de uor, l putem
accepta i aa.
Crearea unui raport cu Report Wizard
Report Wizard este o aplicaie inclus n programul Access, cu ajutorul
creia se pot face rapoarte cu adevrat performante, fr prea mare efort.
Aceast aplicaie ofer un bun compromis ntre uurina n utilizare i
nivelul de control pe care l avem asupra raportului n cursul elaborrii lui.
Pentru a nelege cum se elaboreaz un raport cu aceast metod, vom lua
un exemplu concret. Avnd baza de date din paragraful anterior, adic
evidena facturilor cu detaliile lor i pe furnizor, ne propunem s scoatem
un raport cu toate facturile i detaliile lor pentru fiecare furnizor. Este
evident c vom avea nevoie de subtotaluri pe facturi, respectiv pe furnizori.

208

Baze de date

Capitolul 5

Se tie c n spatele fiecrui raport se afl, fie un tabel, fie o interogare.


Prin urmare, primul pas care trebuie s l facem este identificarea acelui
tabel sau crearea interogrii. La primul exemplu de raport am folosit un
tabel, la urmtorul exemplu vom folosi o interogare.
Ne propunem s elaborm un raport care s aib urmtoarele cmpuri:
Denumire, UM, Cantitate, Pret, Valoare, pentru fiecare produs primit i s
avem subtotaluri pe facturi i pe furnizori.
Ne vom folosi acum de cunotinele de SQL pentru a scrie o expresie care
s execute interogarea propus. Iat cum arat aceast expresie:
SELECT Furnizor, f.NrFactura, pr.Denumire, pr.UM, df.Cantitate, pr.Pret, Cantitate*Pret
AS Valoare
FROM tblFacturi AS f, tblFurnizori, tblDetaliiFacturi AS df INNER JOIN tblProduse AS pr
ON df.ProdusID = pr.ProdusID
WHERE df.FacturaID=f.FacturaID AND f.FurnizorID=tblFurnizori.FurnizorID;

Observai c pe lng cmpurile specificate s-au mai introdus cmpurile


Furnizor i NrFactura care vor servi n raport pentru calcularea de
subtotaluri.
Rezultatul acestei interogri se poate vedea n figura 5.43.

Fig. 5.43. Interogarea


folosit n raportul care
va fi creat

Analiznd aceast interogare, mare lucru nu nelegem, nu putem trage nici


o concluzie despre facturi, furnizori etc. Sunt cam amestecate, dar sunt
reale i corecte. Ceea ce va trebui s facem este s aranjm aceste date ntrun raport tiprit care s fie inteligibil i apoi s-l prezentm efului, nu-i
aa?

209

Baze de date

Capitolul 5

Pentru a crea raportul propus vom parcurge etapele urmtoare:


1. Deschidem baza de date, care conine interogarea de mai sus.
2. Executm clic pe pictograma Reports.
3. n fereastra care s-a deschis, execut, dublu-clic pe opiunea Create
Report by Using Wizard, pentru a lansa aplicaia Report Wizard, dup cum se
vede n figura 5.44.

Fig. 5.44. Primul ecran


al aplicaiei Report
Wizard permite
selectarea cmpurilor
raportului

4. Din comboBox-ul Tables/Queries se alege interogarea pregtit mai


devreme, n cazul nostru qryDetaliiFacturi cu furnizori.
5. Din lista Available Fields se aleg cmpurile raportului, n cazul nostru
toate, prin apsarea butonului (>>). Dup ce am transferat toate cmpurile
n partea dreapt, se apas butonul Next pentru a trece la ecranul urmtor.
6. n acest ecran putem s grupm nregistrrile dup cmpul furnizor, iar
n cadrul furnizorului dup numrul facturii. Pentru aceasta trecem primele
2 cmpuri n partea dreapt cu butonul (>). Rezultatul aciunii se vede n
figura 5.45.

Fig. 5.45. Fereastra n care


configurm nivelul de grupare

210

Baze de date

Capitolul 5

Se observ c prima grupare se face dup cmpul NrFactura, iar a doua


dup cmpul Furnizor. Se trece la ecranul urmtor apsnd butonul Next.
7. n ecranul urmtor, putem sorta nregistrrile din detalii dup un anumit
cmp. Noi am ales sortarea ascendent dup cmpul Denumire, dup cum
se vede n figura 5.46.

Fig. 5.46. Ecran pentru


modul de sortare

Din acest ecran, prin apsarea butonului Sumary Options se deschide un


nou ecran n care putem indica cmpurile pe care se fac totalurile pariale.
Acest ecran este artat n figura 5.47.

Fig. 5.47. Stabilirea


coloanelor pentru sume.

Observai c au fost afiate numai coloanele cu valori numerice, iar pe


lng sum se pot calcula media aritmetic, minimul i maximul de pe
coloane. Dac nu vrem s apar n raport toate detaliile, activm opiunea
Summary Only. Cu butonul OK se ajunge la ecranul precedent. Se apas
butonul Next.
211

Baze de date

Capitolul 5

8. n acest ecran aplicaia ne cere s alegem un model de aranjare a datelor


n raport, figura 5.48.

Fig. 5.48. Aranjarea datelor n


pagin

Alegem prima opiune Steped, care este mai potrivit pentru raportul
nostru. Tot n acest ecran putem alege forma paginii, Portrait sau
Landscape. Se apas butonul Next.
9. n ecranul urmtor aplicaia ne cere s alegem o form de prezentare a
raportului, figura 5.49. Alegem opiunea Formal.

Fig. 5.49. Alegerea modului


de prezentare a raportului

Se apas butonul Next pentru a trece la ecranul urmtor.


10. n fine, am ajuns la ultimul pas al elaborrii raportului, n care ni se
cere s i dm un nume, figura 5.50.

212

Baze de date

Capitolul 5

Fig. 5.50. Alegerea


numelui i terminarea
raportului.

Cnd apsm butonul Finish va apare pe ecran previzualizarea raportului.


S-ar putea ca aranjamentele coloanelor, a subtotalurilor s nu fie cea mai
potrivit. De aceea trebuie s intram n modul Design apsnd butonul
, n urma cruia va apare imaginea din figura 5.51.

Fig. 5.51. Raportul afiat


n modul Design.

n acest mod de afiare a raportului, putem s micm cu mouse-ul


obiectele, s le schimbm proprietile, aa cum fceam la crearea
intefeelor n Visual Basic.
Dup terminarea acestei operaiuni raportul nostru ar trebui s apar ca n
figura 5.52.

213

Baze de date

Capitolul 5

Fig. 5.52. Forma final a raportului

Din analiza acestui raport, se poate afla ce facturi are fiecare furnizor, ce
conine fiecare factur, se vd totalurile facturilor i totalul general pe
fiecare furnizor. Este un document util pentru managerii firmei respective.
Particularizarea unui raport
Am prezentat pn acum dou metode de obinere a rapoartelor:
AutoReport i Report Wizard. Aceste metode ne ajut s elaborm rapoarte
tipizate, prefabricate, adic ni se propun variante iar noi alegem pe cea mai
convenabil. Dei se fac relativ repede, aceste rapoarte nu ne satisfac
ntrutotul, de aceea este nevoie s intervenim pentru mbuntirea lor, cu
unelte puse la dispoziie de programul Access.

214

Baze de date

Capitolul 5

n principiu, pentru elaborarea rapoartelor performante, se pleac cu una


din cele 2 metode amintite AutoReport sau Report Wizard, dup care se
procedeaz la editarea acestora pentru a le aduce la forma final. Prin
editare se pot aduga sau terge anumite elemente, conform cerinelor
practice.
Pentru a edita un raport se procedeaz ntr-o manier asemntoare cu
editarea unui formular, de aceea este indicat s revedei paragraful Crearea
manual u uni formular. Ca i un formular, raportul are 3 pri: Header,
Footer i Detail. Acestea sunt puse n eviden n afiarea n modul Report
Design a raportului. Pentru a ajunge n aceast stare executai, n ordine
clic pe butoanele Reports i Design, a crui rezultat se vede n figura 5.53.

Fig. 5.53. Afiarea n modul


Design a formularului

Dup ce se intr n modul Design, trebuie activate casetele Toolbox i


Properties cu butoanele artate prin sgei n figura 5.53.
Cu ajutorul mouse-ului putei acum s selectai obiectele de pe formular i
s le schimbai proprietile. De cele mai multe ori vei schimba poziiile
casetelor de text i a etichetelor, mrimea i tipul de font etc. Dup se ai
fcut unele schimbri, urmrii-le activnd raportul cu butonul View (
din partea stng a Toolbar-ului.
215

Baze de date

Capitolul 5

Este evident faptul c obinerea unor rapoarte aspectuoase i performante


este legat direct de experiena pe care o vei dobndi. Aceast experien
nu e greu de obinut, trebuie numai s facei ct mai multe rapoarte i s
avei rbdarea de a le perfeciona ct mai mult. Este o munc migloas dar
merit, deoarece formularele sunt cele care se vd din ntreaga aplicaie, i
pe care le nelege toat lumea i de aici pericolul de a fi mereu criticate.

216

Baze de date

Capitolul 5

Macrouri
Din cele studiate pn acum, am vzut c o baz de date Access este o
colecie de obiecte, tabele, interogri, formulare, rapoarte etc. Noi am
nvat s construim aceste obiecte. Toate obiectele unei baze de date
trebuie legate ntr-un flux continuu de operaii, care mpreun se constituie
ntr-o aplicaie de baze de date. Exploatarea unei aplicaii de baze de date
presupune o mulime de operaii manuale care sunt executate de orice
operator implicat.
n cadrul unei aplicaii Access, de o mare importan este automatizarea
acesteia. Prin automatizare nelegem c pe baza unei aciuni a
utilizatorului, cum ar fi apsarea unui buton al interfeei, un dublu-clic etc,
se determin realizarea uneia sau mai multor operaii (activarea unuia sau
mai multor obiecte, rularea unor interogri etc.).
Aceast automatizare a aplicaiilor realizate n Access se poate face n dou
moduri:
Prin utilizarea limbajului Visual Basic for Applications (VBA);
Prin utilizarea macrocomenzilor, care reprezint o form simplificat
a limbajului VBA.
Comenzile macro sunt deosebite prin caracteristica lor unic i anume c
permit automatizarea diverselor evenimente fr ca realizatorul aplicaiei
s fie nevoit s cunoasc un anumit limbaj de programare.
Prin evenimente putem nelege:
Modificri ale datelor;
Deschiderea sau nchiderea unui formular sau raport;
Aciunea asupra unor obiecte de control din formulare.
n Microsoft Access exist un mare numr de tipuri de aciuni care pot fi
executate n cadrul unor comenzi macro. Totul depinde de noi, s le
cunoatem i s le aplicm corect, n cunotin de cauz.
Iat cteva din aceste aciuni:

217

Baze de date

Capitolul 5

Deschiderea sau nchiderea unor tabele, interogri, formulare sau


rapoarte;
Vizualizarea sau tiprirea rapoartelor;
Rularea cererilor de interogare de aciune;
Apelarea altor comenzi macro;
Efectuarea condiionat a anumitor aciuni;
Cutarea anumitor date n tabele;
Deschiderea sau nchiderea unor meniuri din Access;
Afiarea anumitor mesaje;
tergerea, redenumirea, copierea sau salvarea diferitelor obiecte ale
aplicaiei;
Comunicarea cu alte produse soft, cum ar fi Word i Excel.
Cea mai bun metod de a ncepe s proiectm macrocomenzi este s ne
gndim la un proces pe care l parcurgem n mod repetat, ceva care facem
de mai multe ori pe zi sau sptmnal. De exemplu, dac n fiecare zi avem
de dat conducerii un raport cu vnzrile zilei sau avem frecvent de fcut
unele modificri cu ajutorul unor interogri de aciune. Presupunem c am
gsit un astfel de scenariu, deci putem trece la automatizarea lui.
Crearea macrocomenzilor cu o singur aciune
Crearea macrocomenzilor se face cu ajutorul ferestrei Macro Design
prezentat n figura 5.54.
Coloana Macro Name

Coloana Condition

Coloana Action

Coloana Comment

Zon n care vor


fi afiate
argumentele
aciunii curente.

Fig. 5.54. Fereastra Macro Design

218

Baze de date

Capitolul 5

Rolul fiecrei coloane, l putei deduce dup numele ei. Pentru nceput,
cele mai importante sunt coloanele Action i Comment, adic cele n care
vei defini i comenta aciunile. De altfel, numai aceste dou coloane vor fi
afiate la nceput. Pentru afiarea celorlalte va trebui s apsai butoanele (
) i (

) din toolbar-ul situat n partea de sus a ecranului.

Observai c aciunile pe care dorii s le executai trebuie alese din


coloana Action dintr-un comboBox, n care sunt peste 50 de aciuni care
acoper necesarul pentru macro-urile obinuite. Este un obicei bun de a
comenta fiecare aciune pentru o bun informare, mai ales pentru
interveniile ulterioare n modificrile aduse aplicaiei.
n partea de jos-stnga, vor fi afiate cererile de argumente pentru aciunea
selectat.
O macrocomand poate fi alctuit dintr-o singur aciune, sau din mai
multe. Ca s adugai n macrocomand o aciune, mutai cursorul n
coloana Action i deschidei lista derulant, de unde alegei una din cele
peste 50 de aciuni, dintre care multe au subaciuni suplimentare.
Un exemplu simplu v va ajuta s creai i s executai o prim
macrocomand. Ne propunem s afim un formular care exist n baza
noastr de date. Macrocomanda rezultat se vede n figura 5.55.

Fig. 5.55. Macromand cu o singur


aciune

Macrocomenzile se salveaz ca i formularele i se lanseaz cu un dubluclic sau cu butonul Run din fereastra Database. n figura 5.56 se pot vedea
2 macrocomenzi, una care deschide un formular i alta care produce un
semnal sonor.
219

Baze de date

Capitolul 5

Fig. 5.56. Frereastra


Database cu 2 macro-uri

Crearea unei macrocomenzi cu mai multe aciuni


De multe ori n practic, este necesar de mai multe aciuni grupate sub
aceeai macrocomand. Pentru a defini aciuni multiple, care s se execute
una dup alta, trebuie doar s le adugai pe urmtoarele linii ale ferestrei
Macro Design.
Un exemplu de folosire a mai multor aciuni poate fi acela n care ar trebui
rulat o expresie SQL, apoi deschiderea unui formular. Desigur, folosirea
eficient a macrocomenzilor din Access, nu este chiar la ndemna
nceptorilor. Folosirea lor curent va veni n mod natural, pe msur ce
practica o cere, iar experiena o permite.
O facilitate important a aciunilor multiple este folosirea condiiilor n
macrocomenzi. Utiliznd coloana Condition putei aduga unele decizii,
cum ar fi, de exemplu, afiarea unor mesaje n funcie de o anumit
condiie. Expresiile introduse drept condiii trebuie evaluate la valorile True
sau False. n cazul cnd condiia este evaluat la True, se execut aciunea
corespunztoare; dac este False, aciunea nu se mai execut.
O alt facilitate oferit de fereastra Macro Design este posibilitatea de a
grupa macrocomenzile. Coloana Macro Name v permite s v gestionai
mai uor macrocomenzile, mai ales cnd numrul lor crete foarte mult.
Dac specificai un nume n aceast coloan, pe prima linie,
macrocomanda dumneavoastr va fi considerat a fi un grup de
macromenzi. ntr-un astfel de grup putei stoca sub un singur nume mai
220

Baze de date

Capitolul 5

multe macrocomenzi nrudite, care vor primi un nume sugestiv, ales de


dumneavoastr. n acest fel organizarea macrocomenzilor va fi mult mai
practic.
Cnd se ruleaz macrocomanda, se va rula doar primul grup. ntrebarea,
fireasc, pe care v-o punei este cum putei rula i celelalte grupuri?
Rspunsul este simplu: nu putei. Dac avei ntr-o macrocomand mai
multe grupuri, pentru a rula i alte grupuri dect primul va trebui s folosii
o aciune RunMacro. n acest caz vei putea alege numele macrocomenzii
care se va rula, vezi figura 5.57.

Fig. 5.57. Grupuri


de aciuni

Observai c la aciunea RunMacro a fost ales numele grupului Raportari


care face parte din macrocomanda Macro1.
Cu ajutorul grupurilor de macrocomenzi putei ine toate aciunile legate de
un formular sau raport ntr-o singur macrocomand.
Dup cum spuneam, exist n Access peste 50 de aciuni care au fiecare
propriile argumente. Dac dorii s obinei o list complet a acestor
aciuni, precum i descrieri succinte ale lor i a argumentelor pe care le
folosesc, deschidei o macrocomand nou i selectai aciunea care v
intereseaz. Toate informaiile importante vor fi afiate pe ecran. Dac
dorii mai multe exemple, le putei gsi n sistemul Help din Access.
Rularea macrocomenzilor
n acest paragraf vom studia diferitele moduri de accesare a
macrocomenzilor pe care le creai n diferite aplicaii Access, precum i
unele macrocomenzi speciale, native, ale sistemului Access, cum ar fi
AutoExec i AutoKeys.
221

Baze de date

Capitolul 5

Rularea unei macrocomenzi din fereastra Database

Paii pe care trebuie s-i parcurgei sunt urmtorii:


1. n fereastra Database, selectai obiectul Macros (dac nu e selectat);
2. Selectai macrocomanda pe care dorii s o rulai;
3. Executai clic pe butonul Run pentru a executa macrocomanda. Dei
putei rula n acest mod toate macrocomenzile pe care le-ai creat, v
reamintesc c n cazul macrocomentilor care conin grupuri, n acest mod
se execut numai primul grup de aciuni, celelalte fiind ignorate.
Pentru a executa un anumit grup dintr-o macrocomand, folosii meniul. n
cazul n care vrei s rulai manual o anumit macrocomand dintr-un grup
folosii metoda descris n continuare.
Rularea unei macrocomenzi dintr-un grup

1. Selectai din meniul principal opiunea:


deschide caseta de dialog din figura 5.58.

Tools Macro Run Macro.

Se va

Fig. 5.58. Caseta Run Macro

2. Selectai din lista derulant macromanda pe care dorii s o executai.


3. Executai clic pe butonul OK pentru a executa macrocomanda.
Observai cum caseta de dialog Run Macro prezint toate macrocomenzile
disponibile n baza de date, grupurile fiind reprezentate sub forma
macroname.macrogrup, unde macroname este numele din fereastra Database,
iar macrogrup numele unui grup din cadrul macrocomenzii respective.
Utilizarea aciunii RunMacro

O alt metod de execuie a macrocomenzilor, este rularea lor dintr-o alt


macrocomand cu ajutorul aciunii RunMacro. n figura 5.57 se poate vedea
cum se folosete aceast metod. La sfritul unui grup de aciuni se
222

Baze de date

Capitolul 5

introduce aciunea RunMacro care va lansa n execuie macrocomanda


nominalizat de argumentul Macro Name.
Macrocomenzi ataate evenimentelor

Probabil c metoda cea mai utilizat pentru rularea macrocomenzilor din


aplicaiile Access, nu este rularea direct, ci ca rspuns la un eveniment
Access. Aceste evenimente pot fi declanate de tot felul de lucruri care se
pot ntmpla la nivel de formular, raport sau chiar de control individual din
cadrul acestora de exemplu, deschiderea unui formular declaneaz
evenimentul OnOpen al formularului respectiv, la introducerea unei valori
ntr-o caset de text declaneaz evenimentul OnClick, iar dac utilizatorul
actualizeaz datele dintr-un control al unui formular se declaneaz
evenimentul AfterUpdate ataat controlului respectiv.
Pentru a identifica evenimente ale diferitelor obiecte, nu avei dect s
selectai obiectul respectiv i s-i studiai evenimentele, activnd opiunea
Event din fereastra Properties. Este de la sine neles c v suntei pe un
formular aflat n modul Design.
n aplicaia dumneavoastr v putei folosi de aceste evenimente spunndui programului ruleze la apariia unui anumit eveniment ataat unui
formular, raport sau control o anume macrocomand. Utiliznd
evenimentele n acest mod v putei perfeciona aplicaia, astfel nct ea s
ofere ceva n plus fa de funciile oferite de Access permind, de
exemplu, utilizatorilor s se deplaseze ntre diferite obiecte ale aplicaiei
fr s tie mcar de existena ferestrei Database.
Utilizarea macrocomenzilor AutoExec i AutoKeys

Aceste macrocomenzi au nume speciale, rezervate i sunt mocrocomenzi


native ale programului Access.
Macrocomanda AutoExec. Atunci cnd deschidei baza de date, Access
verific dac n cadrul acesteia nu exist o macrocomand cu numele
AutoExec. Dac exist o astfel de macrocomand, ea este executat
automat. Aceast macrocomand poate fi folosit pentru pregtirea
aplicaiei; de regul ea este folosit mpreun cu opiunile de pornire a
Access-ului.

223

Baze de date

Capitolul 5

Observaie important!! Dac dorii s evitai rularea macrocomenzii


AutoExec, meninei apsat tasta Shift n timp ce deschidei baza de date.
n general, se folosete comanda AutoExec pentru a apela o funcie VBA
(prin intermediul aciunii RunCode) personalizat pentru fiecare aplicaie n
parte.
Macrocomanda AutoKeys. Acestei macrocomenzi, Access-ul i acord un
tratament special. Cu ajutorul acestei macrocomenzi putei s asociai
oricrei aciuni, o combinaie de taste dintre cele disponibile. Mai mult
putei chiar s modificai comportamentul prestabilit al anumitor
combinaii de taste.
Iat un exemplu de utilizare prezentat n figura 5.59.

Fig. 5.59. Exemplu de atribuire a unei


combinaii de taste unei macrocomenzi

n exemplul nostru, combinaia de taste SHIFT + p lanseaz macrocomanda


care afieaz o list cu produse. Reinei c macrocomanda se numete
AutoKeys, iar combinaia de taste a fost trecut n coloana Macro Name.
Metod rapid de pornire a aplicaiilor

Ca o alternativ a macrocomenzii AutoExec, trebuie amintit aici c


ncepnd cu versiunea Access 95, a fost introdus o posibilitate de setare a
opiunilor de pornire a aplicaiilor.
224

Baze de date

Capitolul 5

Avnd deschis aplicaia ale crei opiuni de pornire vrem s le


automatizm, dm comanda Tools Startup, care va deschide caseta de
dialog din figura 5.60.

Fig. 5.60. Caseta de dialog Startup

Setrile din aceast caset de dialog sunt destul de evidente. Practic, putem
s nlocuim toat faada programului Access.
Reinei c aceast manevr este ultima, dup ce aplicaia a fost testat i
nu mai avem nimic de modificat la ea. Nu ncercai s ascundei meniul
principal i toolbar-urile, nainte de forma final, pentru c ai putea
ajunge s nu mai putei interaciona cu aplicaia deoarece nu mai avei
instrumente de acces. Pentru astfel de ncercri, facei-v o copie de
rezerv.

Publicarea datelor pe Internet


Toat lumea tie ce nseamn azi Internetul, dar mai ales ce va nsemna
mine, mai ales dup integrarea Romniei n Uniunea European.
Internetul a ajuns s fie cea mai avansat form de comunicare a zilelor
noastre.
Prin conectarea la Internet ntreprinderile i creeaz un avantaj
concurenial, demn de luat n seam. Avnd n vedere c o serie de rapoarte
de sintez ale unei firme intereseaz clienii, cum s fie informai acetia
dac nu prin Internet. Rapoartele obinndu-se, n principal, dintr-o
aplicaie de baz de date, iat legtura dintre Access i Internet.
225

Baze de date

Capitolul 5

Tot ce avem de fcut este s transformm un raport sau un formular n


document HTML, care poate fi postat pe un site de Internet. Din fericire,
programul Access, ncepnd cu versiunea 2000, ofer faciliti de a scoate
rapoarte direct n format HTML. Prin urmare, pe lng formulare i
rapoarte, vom nva s scoatem din Access i documente care pot fi
publicate pe Internet.
n principiu, paginile cu documente HTML se pun pe un server Web, de
unde pot fi accesate prin intermediul unui soft numit browser. Deci noi
trebuie doar s crem fiiere HTML i s le punem pe serverul Web, de
unde pot fi vizualizate de oricine.
n cele ce urmeaz vom ncerca s crem cteva pagini HTML direct din
programul Access. Exist 2 tipuri de documente pe Internet:
Pagini Web statice;
Pagini Web dinamice.
Le vom studia pe rnd, n paragrafele urmtoare.

Pagini Web statice


Pagina Web static este un document de tip prospect, adic are tot timpul
acelai coninut, cum a avut la crearea sa. Acest tip de documente se pot
crea cel mai simplu dintr-un obiect al bazei de date, folosind metoda
Export. Aceast metod creeaz o pagin Web bazat pe un singur tabel
sau interogare din baza de date curent.
Iat paii care trebuie parcuri pentru a crea un document static:
1. n fereastra Database, selectai obiectul pe care pe care dorii s-l salvai
n format HTML.
2. Selectai opiunea File Export.
3. n caseta de dialog Save, selectai lista derulant
HTML Documents (*.html; *.htm). Vezi figura 5.61.

226

Save as Type,

opiunea

Baze de date

Capitolul 5

Bifai aceast opiune


pentru a exporta i
capul de tabel

Fig. 5.61. Crearea unei


pagini HTML statice

4. Apsai butonul Export lsnd implicite celelalte opiuni cerute (Default


endcoding). Vei obine o pagin HTML, aa cum se vede n figura 5.62.

Fig.5.62. Pagina HTML obinut,


afiat cu Internet Explorer

Aceast pagin afieaz n format HTML rezultatul unei interogri. Tot aa


putei afia coninutul unui tabel. Reinei c dac se schimb ceva n
tabelele de baz ale interogrii, aceast modificare nu se reflect n pagina
HTML. Cnd folosii aceast tehnic trebuie s avei n vedere acest lucru.
Paginile Web statice, chiar dac provin din exportul de obiecte din Access,
nu sunt obiecte Access, ele vor fi salvate ca pagini independente cu
extensia *.html, ntr-un director pe care l putei alege.

227

Baze de date

Capitolul 5

Pagini Web dinamice


Pagina web dinamic este acel document care poate oferi mai multe
informaii, n funcie de cererile lansate de utilizator. Un exemplu ar putea
fi formularul creat ntr-o aplicaie Access care ne permite s parcurgem
nregistrrile unui tabel. Orice modificare n tabelele de baz se va reflecta
n pagina Web dinamic. Acest tip de documente o s ne preocupe n
continuare.
Versiunea 2000 a programului Access i urmtoarele, permit realizarea de
pagini Web dinamice. n fapt aceste pagini sunt formulare i rapoarte care
pot fi publicate pe Internet. Observai n lista obiectelor din fereastra
Access, apariia obiectului Pages, care grupeaz paginile Web ale bazei de
de date curente.
Exist dou moduri de creare a unei pagini Web dinamice din Access: prin
utilizarea instrumentului Wizard i constructia lui de la zero n cadrul
ferestrei de proiectare. La fel ca la formulare, nu?
Cnd suntem ajutai de instrumentul Wizard, avem dou posibiliti:
AutoPage i Page Wizard. Le vom folosi pe rnd.
Crearea unei pagini dinamice de date cu AutoPage

Cu AutoPage putei crea rapid o pagin Web dinamic, servind pentru


introducerea i afiarea de date pe Web.
Iat paii pe care trebuie s-i parcurgei:
1. Din fereastra Database selectai Pages New.
2. n caseta de dialog New Data Access Page, selectai sursa de nregistrri
(un tabel sau o interogare), selectai AutoPage:Columnar, apoi apsai
butonul OK.
3. AutoPage creeaz o pagin Data Access folosind toate cmpurile
coninute n sursa de nregistrri selectat, pagin pe care o afieaz n
modul Page. n figura 5.63 este afiat o astfel de pagin.

228

Baze de date

Capitolul 5

Fig. 5.63. Pagin Web


dinamic obinut cu
AutoPage

Dac nu suntei mulumii de aspectul paginii, intrai n modul Design i


schimbai ce dorii, la fel cum ai procedat la tabele i rapoarte. Dup
modificrile aduse salvai pagina cu comanda File Save As. Atenie ns
c numele i salvarea sunt stabilite de ctre programul Access, asupra
crora nu avei nici un control. Acest lucru v este anunat dup cum se
vede n figura 5.64.

Fig. 5.64. Avertismentul legat


de conectarea la pagin

Pentru a v putea conecta la paginile create, folosind reeaua trebuie s


editai conexiunea intrnd n codul HTML. Aceasta nu este o operaiune
chiar simpl, de aceea trebuie efectuat de administratorul bazei de date.
Crearea paginilor dinamice cu Page Wizard

Utilizarea vrjitorului (wizard) pentru crearea paginilor Data Access este


similar cu folosirea AutoPage, cu observaia c primul ofer mai mult
flexibilitate. Utiliznd Page Wizard putei folosi mai multe surse de date i
avei posibilitatea de a selecta cmpurile pe care dorii s le afiai.
Iat paii pe care trebuie s-i parcurgei:

229

Baze de date

Capitolul 5

1. Din fereastra Database selectai Pages New.


2. n caseta de dialog New Data Access Page, selectai Page wizard, apoi
apsai butonul OK. Putei selecta i o surs de date, dar nu este obligatoriu.
3. n caseta Page Wizard, selectai sursa de date, un tabel sau o interogare,
i cmpurile pe care dorii s le afiai, apoi apsai butonul OK.
4. n urmtoarea caset de dialog putei selecta opiunile de grupare. Dac
selectai o asemenea opiune, pagina va deveni read-only. Cnd suntei
gata, apoi apsai butonul OK.
5. Urmtoarea caset de dialog v cere s specificai o ordine de sortare.
6. Ultima caset de dialog v permite s acordai paginii un nume, s
selectai o tem (fundal) i s deschidei pagina n modul Design sau View.
Dac deschidei pagina n modul de afiare View, Access o va salva n
dosarul prestabilit; de aceea, dac dorii s specificai i locaia fiierului,
recomandarea este s afiai mai nti pagina n modul Design. Executai
clic pe butonul Finish pentru a v putea vizualiza pagina.
7. Cnd suntei mulumit de aspectul paginii i dorii s o salvai, dai
comanda File Save As, astfel nct s putei specifica i locaia fiierului.
n figura 5.65 este prezentat o pagin Web dinamic, obinut prin aceast
metod.

Fig. 5.65. Pagin Web dinamic


obinut cu Page Wizard

230

Baze de date

Capitolul 5

Pagina este afiat cu browserul Internet Explorer. Pentru a exersa putei


ncerca s punei n pagin Web i alte informaii din baza de date, pentru
c nu e departe momentul cnd eful o s v cear s punei un raport la
care ai trudit din greu, ntr-o locaie de pe Internet, pentru c el e plecat la
o specializare n SUA.
Comunicarea ntre aplicaiile pachetului Office

Pachetul Office al firmei Microsoft a fost conceput ca un instrument util i


foarte performant cu ajutorul cruia s se poat realiza un numr mare de
sarcini n cadrul unui birou al unei firme sau chiar la domiciliu.
Popularitatea produsului Office se datoreaz, pe lng gradul sporit de
complexitate, facilitii sale deosebite de a permite diferitelor aplicaii care
l compun, s comunice ntre ele. Astfel, informaiile dintr-o aplicaie
Access pot fi transferate (exportate) n Excel, unde se pot face anumite
calcule, dup care acestea pot fi transferate (exportate) n Word n vederea
realizrii unui document de sintez.
Sistemul de operare Windows conine o facilitate Object Linking and
Embedding (Introducere i legarea obiectului) sau pe scurt OLE.
n fond OLE este o metod de transfer a informaiei ntre diferite aplicaii
Windows sub form de obiecte. Metoda OLE ofer un mare avantaj
aplicaiilor realizate n Access, putnd fi create baze de date de tip
multimedia n care pot fi stocate fiiere audio(WAV), fotografii i desene,
animaie i chiar filme(AVI).
ncepnd cu Access 2000, au fost introduse trei faciliti noi:
Dynamic Data Exchange, DDE - schimbul dinamic de date;
ActiveX Objects obiecte ActiveX;
ActiveX Custom Controls controale personalizate ActiveX.
Facilitatea DDE permite executarea unor funcii precum transmiterea de
date ntre Access i orice alt aplicaie Windows care suport facilitatea
DDE. Se pot crea conexiuni de tip DDE cu alte aplicaii prin utilizarea
comenzilor macro sau a limbajului VBA.
231

Baze de date

Capitolul 5

ActiveX este o facilitate avansat a sistemului de operare Windows care


permite crearea unor anumite legturi ntre obiecte precum i includerea lor
n cadrul bazelor de date Access. Prin obiecte nelegem fotografii, desene,
grafice, foi de calcul Excel i documente.
Access poate fi folosit ca un server ActiveX, permind deschiderea i
lucrul cu obiecte ale bazei de date Access (tabele, interogri i formulare)
din cadrul altor aplicaii de tip Windows.
Exportul i importul de date
Comunicarea programului Access cu celelalte componente ale pachetului
Office, rmne un element de baz. Spre exemplu dorim s realizm un
export de date dintr-un tabel Access ctre un document Word. Datele vor
apare n Word ntr-un tabel.
Un alt caz des utilizat este exportul din Access ctre Excel al unui tabel sau
interogri. n ambele cazuri se folosete comanda File - Export. ncercai
aceast comand pentru cazuri concrete. De multe ori este nevoie ca
anumite informaii s fie prelucrate i sintetizate n Excel, nainte de a fi
cuprinse ntr-un raport.
Importul este operaia invers care se execut cu comanda File Get External
Data Import. ncercai i funcionarea acestei comenzi.

Recomandri privind aplicaiile ACCESS


Cu siguran, la primul proiect de aplicaie Access, nu suntei un specialist
al domeniului. Avei nc multe lucruri neclare, peste care ai trecut mai
uor n timpul studiului. Fii linitit pentru c toate acestea se vor clarifica
n timpul aplicaiilor pe care le vei aborda n viitor. Practica este aceea
care ar putea fi numit evaluatorul perfect al cunotinelor acumulate (si
nu numai n cazul de fa).
Programul Access are cteva handicapuri de apreciere pe care, sincer, nu le
merit:
Programatorii profesioniti l evit pentru c ar fi dedicat
nceptorilor i are anumite limite, pe care e greu s le
232

Baze de date

Capitolul 5

argumenteze. Ei folosesc baze de date cum ar fi Oracle, SQL


Server, MySQL care sunt mult mai scumpe.
Ceilali dezvoltatori de aplicaii, au probleme cu folosirea
Access-ului din cauza lipsei de pregtire, deci sunt mai puin
dispui s se aventureze ntr-un domeniu necunoscut.
Prin urmare, pentru unii este prea simplu iar pentru alii prea complicat.
Posibilitile oferite de Access, mai ales ultimele versiuni, sunt de-a dreptul
extraordinare, aa nct utilizarea lui n firmele mici i mijlocii pe scar
larg ar fi benefic, mai ales c aplicaiile ar putea fi abordate cu resurse
proprii.
Programul Access e folosit de milioane de utilizatori de pe tot
mapamondul, sunt forumuri de discuii pentru aceti utilizatori, care se
ajut ntre ei cu sfaturi i experiene proprii. Cu siguran, c muli dintre ei
triesc de pe urma Access-ului, alii i folosesc din plin facilitile. Dac ai
reuit s nelegei programul Access i ai fcut cteva aplicaii cu el,
nseamn c ai neles bazele de date relaionale i putei trece i la alte
produse de baze de date, dac mprejurrile o cer. nseamn c avei o baz
de plecare solid.
n multe firme e nevoie de o metod simpl de gestionare a tuturor
informaiilor care exist pe hrtie sau n aplicaii stufoase: facturi,
nregistrri, informaii contabile, contacte cu clieni i furnizori etc. De
asemenea, este nevoie de tiprirea unor rapoarte i scrisori care nu ies
niciodat cum ai dori, n care avei informaii care trebuie calculate sau
completate de mn.
De asemenea, apare necesitatea publicrii pe Web a unor informaii
detaliate i la zi despre afacerile firmei, pentru a fi studiate de ctre
parteneri sau de ctre alte filiale ale firmei care pot fi oriunde n lume.
Aceste oportuniti pot fi exploatate folosind programul Access care este o
component a pachetului Microsoft Office. Practica mi-a demonstrat c
studenii care au urmat acest curs au reuit s acumuleze suficiente
cunotine despre bazele de date, care au fost apoi aplicate n elaborarea
unor proiecte de diplom valoroase sau la locurile de munc de dup
absolvire.
Wizard-urile care se gsesc din abunden n Access sunt nite unelte
extrem de utile n dezvoltarea aplicaiilor. Un formular sau un raport este
233

Baze de date

Capitolul 5

nceput cu un wizard, apoi este completat sau modificat de ctre


dezvoltator.
Folosirea macrourilor i a formularului de start v ajut s concepei
aplicaii de baze de date care par a fi fcute de o echip de profesioniti,
pentru c prin eliminarea ferestrei Database nu se mai vede c suntem n
Access (vezi pagina 208).
Exemplele care sunt prezentate n carte sunt inspirate din realitate, au fost
testate nainte de a ajunge aici, aa c pot fi folosite fr nici o reinere, ca
modele pentru aplicaiile pe care le vei face.

234

Baze de date

Anexe

ANEXE
Anexa A. Administratorul de baze de date
Pentru a proiecta i implementa o baz de date a unei firme sau instituii
este nevoie de o echip de profesioniti format din reprezentai ai
beneficiarului i ai furnizorului de soluii informatice. Dup ce s-a
implementat i testat baza de date i instruit personalul care o va folosi,
echipa de dezvoltare se retrage din firm i ncepe, probabil, un nou
proiect.
Se pune problema, ce se ntmpl cu baza nostr de date dup ce echipa de
dezvoltare a plecat i au rmas numai utilizatorii finali? Acetia tiu s-i
fac treaba pentru care au fost intruii, s opereze acolo unde au dreptul. Ce
se ntmpl dac ntr-o diminea, cnd pornete aplicaia, un utilizator
primete nite mesaje ciudate pe care nu le nelege, iar aplicaia se
blocheaz? Cui ne adresm? nainte era acolo echipa de dezvoltare, care
rezolva orice problem.
n acest moment, intr n joc administratorul bazei de date. Este de
neconceput ca o baz de date a unei firme sau instituii, n jurul creia se
nvrte ntrega activitate, s funcioneze fr un adminstrator. Un manager
inteligent este contient de acest lucru i va rezolva problema chiar de la
nceput.
Cine poate fi aministrator de baze de date? O persoan care poate s
rezolve toate problemele cerute de post. O astfel de persoan a participat,
de regul, din partea firmei la dezvoltarea proiectului i a acumulat
cunotine care l ajut s-i duc la indeplinire sarcinile. Echipa
managerial trebuie s aib nelepciunea ca s numeasc n acest post o
persoan pregtit, pentru c datele firmei nu trebuie s fie compromise.
Prin persoan pregtit nu trebuie neles, o persoan cu diplom (se tie
ct de uor se obin acestea), ci una care trece nite teste de competen.
Un administrator de baze de date are cunotine, cel puin la nivelul celor
prezentate n aceast carte, de la noiuni de proiectare a unei baze de date,
cunoaterea limbajului SQL, pn la implementarea de aplicaii n
ACCESS. Aceast meserie, este una a viitorului, pentru c tot mai multe
firme i instituii se informatizeaz i au mult de suferit din cauz c au
235

Baze de date

Anexe

probleme, de genul nu merge bine, rezultatele rapoartelor nu sunt corecte


etc., i toate astea se ntmpl pentru c nu exist acel administrator de
baz de date sau de sistem informatic.
Dac firma nu-i poate permite s in un administrator de baze de date cu
norm ntreag, exist i soluia angajrii unor consultani externi, care s
vin numai atunci cnd este nevoie de ei. Ar fi o soluie temporar, pn
cnd un angajat al firmei poate s ndeplineasc aceast funcie. Sigur,
decizia este luat de ctre conducerea firmei respective, n cunotin de
cauz.
Care sunt sarcinile administratorului de baz de date? Administratorul
bazei de date are sarcini precise, care ar putea fi enumerate astfel:
Rspunde de corectitudinea datelor introduse n baza de date;
Rspunde de securitatea bazei de date, prin drepturile acordate
utilizatorilor;
Salveaz copii de siguran ale bazei de date, periodic;
Dac s-a produs o deteriorare a datelor, poate s intre direct n
tabele i s le repare manual sau folosind limbajul SQL;
S acorde asisten utilizatorilor finali, pentru a elimina pe ct
posibil erorile umane;
S scoat rapoarte noi, care nu au fost prevzute n proiect dar
care sunt cerute de anumite mprejurri;
S in legtura cu echipa de dezvoltare pentru a rezolva orice
problem care i depete competenele;
S stabileasc, cnd e cazul, reguli suplimentare pentru operatorii
finali;
S intercepteze i s previn orice evenimente care ar putea
afecta buna funcionare a bazei de date.
Ca o concluzie a celor prezentate n aceast anex, am putea spune c
administratorul de baze de date i dac extrapolm, administrator de sistem
informatic, este o meserie a viitorului care va fi foarte cutat i bine
pltit. Va fi un post cheie n orice organizaie, o poziie de mare
responsabilitate. Nu ar fi lipsit de interes s v gndii la o carier
profesional n acest domeniu.
236

Baze de date

Anexe

Anexa B. Sintaxa instruciunilor SQL


n aceast anex vor fi prezentate pe scurt principalele instruciuni SQL.
SELECT
Este instruciunea SQL cea mai utilizat, prima cu care luai contact. Se
folosete pentru regsirea(interogarea) datelor din unul sau mau multe
tabele sau vederi. Sintaxa este urmtoarea:
SELECT NumeColoana1, NumeColoana2, ...
FROM tblTabel1, tblTabel2, ...
[WHERE ...]
[GROUP BY ...]
[HAVING ...]
[ORDER BY ...];

UPDATE
Instruciunea UPDATE actualizeaz una sau mai multe linii dintr-o
coloan. Sintaxa este urmtoarea:
UPDATE NumeTabel
SET NumeColoana1=valoare, NumeColoana2=valoare, ...
[WHERE ...];

INSERT
Instruciunea INSERT adaug o singur linie ntr-un tabel. Sintaxa este
urmtoarea:
INSERT INTO NumeTabel [Coloana1, Coloana2, )]
VALUES (Valoare1, Valoare2, ...);

INSERT SELECT
Instruciunea INSERT SELECT insereaz rezultatele unei interogri, ntrun tabel. Sintaxa este urmtoarea:
INSERT INTO NumeTabel [Coloana1, Coloana2, )]
SELECT Coloana1, Coloana2, FROM Tabel1, Tabel2,
[WHERE ...];

237

Baze de date

Anexe

DELETE
Instruciunea DELETE terge una sau mai multe linii dintr-un tabel.
Sintaxa este urmtoarea:
DELETE FROM NumeTabel
[WHERE ...];

DROP
Instruciunea DROP terge permanent obiecte din bazele de date (tabele,
vederi, etc). Sintaxa, pentru tergerea unui tabel, este urmtoarea:
DROP NumeTabel;

CREATE TABLE
Instruciunea CREATE TABLE este folosit pentru crearea de noi tabele
ntr-o baz de date. Sintaxa este urmtoarea:
CREATE TABLE NumeTabel
(
Coloana1 Tip de dat
[NULL / NOT NULL],
Coloana2 Tip de dat
[NULL / NOT NULL],
...
);

ALTER TABLE
Instruciunea ALTER TABLE este folosit pentru actualizarea schemei
unui tabel (adugare i tergere de coloane). Sintaxa este urmtoarea:
- adugarea unei coloane (exemplu):
ALTER TABLE tblProduse
ADD Furnizor Text(50);

- tergerea unei coloane (exemplu):


ALTER TABLE tblProduse
DROP COLUMN Furnizor;

DROP TABLE
238

Baze de date

Anexe

Instruciunea DROP TABLE este folosit pentru eliminarea unui tabel din
baza de date. Sintaxa este urmtoarea(exemplu, tergerea tabelului
tblProduse):
DROP TABLE tblProduse;

CREATE VIEW
Instruciunea CREATE VIEW este folosit pentru crearea unei vederi noi a
unuia sau mai multor tabele. Sintaxa este urmtoarea:
CREATE VIEW NumeVedere AS
SELECT Coloana1, Coloana2,
FROM Tabel1, Tabel2, ...
[WHERE ...]
[GROUP BY ...]
[HAVING ...] ;

Bibliografie
[1]

Mocian Ioan, Baze de date Terminologie, Proiectare, SQL, Access,


Editura MATRIX ROM, 2007.

[2]

Michael J. Hernandez, Proiectarea bazelor de date, traducere din limba


englez, Editura Teora, 2003.

[3]

Susan Sales Harkins, Ken Hensen, Tom Gerhart, Utilizare Microsoft Access
2000, traducere din limba englez, Editura Teora, 2000.

[4

Nstase Pavel, s.a., Baze de date Microsoft Access 2000, Editura Teora,
2004.

[5]

Ben Forta, SQL pentru nceptori, traducere din limba englez,


Editura Teora, 2002.

239

S-ar putea să vă placă și