Documente Academic
Documente Profesional
Documente Cultură
Baze de Date Access Curs Mocian Ioan PDF
Baze de Date Access Curs Mocian Ioan PDF
Baze de date
- pentru uzul studenilor -
- 2008 -
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:
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
93
Pagin goal
10
Baze de date
Capitolul 1
11
Baze de date
Capitolul 1
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
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
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.
15
Baze de date
Capitolul 1
16
Baze de date
Capitolul 2
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.
17
Baze de date
Capitolul 2
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
Baze de date
Capitolul 2
Baze de date
Capitolul 2
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
20
Baze de date
Capitolul 2
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>>
Denumire
11
13
12
15
19
TCM
IEI
Mecatronica
Ingineria mediului
Design
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
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>>
......
......
.....
..
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
25
Baze de date
Capitolul 2
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
Baze de date
Capitolul 2
28
Baze de date
Capitolul 2
Nume
Pop
Szabo
Costea
Timocea
Mocean
Prenume
Remus
Zoltan
Florian
Sebastian
Vasile
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
29
Baze de date
Capitolul 2
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
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
31
CarteID
5648
690423
6563
65323
09542
64823
75001
10045
76100
Data
....
....
....
....
....
....
....
....
....
Baze de date
Capitolul 2
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>>
........
........
........
........
........
........
........
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
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
Baze de date
Capitolul 2
Baze de date
Capitolul 2
Baze de date
Capitolul 2
38
Baze de date
Capitolul 3
Baze de date
Capitolul 3
40
Baze de date
Capitolul 3
41
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
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
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Studenti
Nume
Prenume
Data nasterii
.........
Discipline
Denumire
Credite
Profesor
........
Profesori
Nume
Prenume
Grad didactic
........
.....
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
53
Baze de date
Capitolul 3
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
Nume
piesa
schimb
Curea ventilator
Acumulator
Bujie
Curea ventilator
Maneta viteza
Bucsa directie
Model
Producator
Pret cu amanuntul
XP-035
TR-78-02
GF-25
Dacia
Dacia SA
34.75
1250
16.90
29.35
23.85
12.55
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
Profesori
ProfesorID
Studenti
StudentID
Discipline
DisciplinaID
Plan de nvatanint
PlanInvID
Fig. 3.4. Exemple de chei artificiale
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
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)
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:
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
Concatenare
Concatenare
Concatenare
Baze de date
Capitolul 3
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.
Lungime
Numr de zecimale
Masc
de
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.
Unicitate
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.
Baze de date
Capitolul 3
66
Baze de date
Capitolul 3
Tabel B
67
Baze de date
Capitolul 3
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>>
..
..
..
..
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
Tabel B
Tabel A
Tabel normal
Tabel subset
Angajati
Retributii
Nume tabel
Nume tabel
69
Nume tabel
Baze de date
Capitolul 3
Tabel A
Tabel B
Tabel A
Tabel B
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
....
....
....
....
....
....
....
....
....
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
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
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>>
.....
.....
.....
.....
.....
.....
.....
74
Baze de date
Capitolul 3
Tabel B
Tabel A
Studenti
Cursuri
Baze de date
Capitolul 3
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
76
Baze de date
Capitolul 3
Orar
Studenti
StudentID
CursID
StudentID
Nume
Prenume
OrasStudent
--------
Cursuri
CursID
Denumire
Credite
ProfesorID
Sala
--------
Baze de date
Capitolul 3
Nume
Pop
Mocean
Ban
Ban
Obdu
Prenume
Dorin
Pavel
Ionel
Lucia
Anica
SponsorID
1001
1003
1002
<<alte cmpuri>>
--------------------------
Nume
Mocean
Pop
Ban
Ban
Obdu
Prenume
Pavel
Dorin
Ionel
Lucia
Anica
Sef
1002
1002
1002
<<alte cmpuri>>
--------------------------
78
Baze de date
Capitolul 3
Personal
Fig. 3.23. Diagrama
relaiei cu auto-referire
unu cu mai muli
Denumire piesa
Clema superioar
Clema inferioar
urub de strngere
Piulit
Ansamblu clem
Scaun
Ansamblu scaun
Corp tubular
Suport spate
Ansamblu cadru
a
<<alte cmpuri>>
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
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
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
Cursuri
1:M
Indemnizatie
1:1
Catedra
1:M
Sali
1:M
1:1
Personal
Studenti
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
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
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
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
Baze de date
Capitolul 3
Sali
Cladiri
SalaID
ChP
Tip sala
Nr locuri
Acces Intrenet
CladireID
ChP
Numar etaje
Acces lift
Acces parcare
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
Baze de date
Capitolul 3
Cursuri
Cursuri Student
StudentID ChPC/ChE
CursID
ChPC/ChE
CursID
ChP
Denumire
Credite
ProfesorID
Categorie
Baze de date
Capitolul 3
Baze de date
Capitolul 3
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.
88
Baze de date
Capitolul 3
Angajati
AngajatID
............
Clienti
ClientID ChP
AngajatID ChE
ChP
89
Baze de date
Capitolul 3
Aceast linie simbolizeaz tipul de participare
Obligatorie pentru acest tabel
Clienti
Angajati
AngajatID
............
ClientID ChP
AngajatID ChE
ChP
Baze de date
Capitolul 3
Clienti
Angajati
(0,10) ClientID
ChP
AngajatID ChE
(1,1)
AngajatID
............
ChP
91
Baze de date
Capitolul 3
92
Baze de date
Capitolul 3
Baze de date
Capitolul 3
94
Baze de date
Capitolul 3
95
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Abreviere
AB
AR
...
MS
...
Denumire
Alba
Arad
...
Mures
...
Baze de date
Capitolul 3
Baze de date
Capitolul 3
99
Baze de date
Capitolul 3
100
Baze de date
Capitolul 3
tblSectii
tblStudenti
SectiaID
Sectia
..
StudentID
Nume
Prenume
SectiaID
Telefon
Lista studenti
Student
Sectia
Telefon
101
Baze de date
Capitolul 3
102
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
105
Baze de date
Capitolul 3
Baze de date
Capitolul 3
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
108
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Observai c relaia 1:N, partea mai muli, este aici notat cu simbolul
infinit.
110
Baze de date
Capitolul 3
111
Baze de date
Capitolul 3
112
Baze de date
Capitolul 3
113
Baze de date
Capitolul 3
114
Baze de date
Capitolul 3
tblCititori
tblJudete
JudetID
Denumire
Abreviere
CititorID
Nume
Prenume
ProfesiaID
..
JudetID
Lista cititori
Cititor
Profesia
Adresa
115
tblProfesii
ProfesiaID
Denumirea
Explicatii
Baze de date
Capitolul 3
116
Baze de date
Capitolul 3
Baze de date
Capitolul 3
Baze de date
Capitolul 3
119
Baze de date
Capitolul 4
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
Baze de date
Capitolul 4
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
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
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
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
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
125
Baze de date
Capitolul 4
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
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
Rezultat:
Nume
Bogdan
Meruta
Prenume
Mircea Florin
Cosmin
Grupa
1311
1312
Stare
Bugetar
Taxa
Rezultat:
Nume
Pop
Cozma
Prenume
Marius Traian
Dumitru
Sectia
IEI
TCM
Grupa
1321
1121
Stare
Bugetar
Bugetar
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
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
129
Baze de date
Capitolul 4
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
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
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
131
Baze de date
Capitolul 4
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
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
Expresie SQL:
SELECT Cod, Denumire, Furnizor, PU, Cantitate, PU*Cantitate AS Valoare
FROM tblProduse;
134
Baze de date
Capitolul 4
ABS()
COS()
SIN()
TAN()
SQRT()
indicat.
PI()
AVG()
COUNT()
MAX()
coloan.
MIN()
coloan.
SUM()
135
Baze de date
Capitolul 4
136
Baze de date
Capitolul 4
Gruparea datelor
Crearea grupurilor
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
137
Baze de date
Capitolul 4
Rezultat:
Cod_vinzator
MR-01
KL-02
PR-02
GH-04
Numar_vinzari
3
1
1
1
Baze de date
Capitolul 4
Filtrarea grupurilor
Rezultat:
Cod_vinzator
MR-01
Numar_vinzari
3
139
Baze de date
Capitolul 4
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
ChP
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>>
......
......
......
......
......
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
Rezultat:
ComandaID
..........
10010
10011
Rezultat:
CumparatorID
..........
6001
6083
143
Baze de date
Capitolul 4
Rezultat:
CumparatorID NumeCump
..........
.........
6001
ROMBAT SRL
6083
ANCONA SA
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;
Oras
.........
Tg. Mures
Tg. Mures
Brasov
Bistrita
Ludus
Comenzi
........
2
0
1
3
2
Baze de date
Capitolul 4
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>>
......
......
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
Rezultat:
NumeVinzator
Ban Lucia
Ban Lucia
DenumireProdus
Piine
Biscuiti
PretProdus
2.00
1.25
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;
149
Baze de date
Capitolul 4
Uniri avansate
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>>
......
......
......
......
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
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
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
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
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
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
Baze de date
Capitolul 4
Baze de date
Capitolul 4
156
Baze de date
Capitolul 4
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
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;
Baze de date
Capitolul 4
Baze de date
Capitolul 4
161
Baze de date
Capitolul 4
Integer
NOT NULL,
CodProdus
Denumire
UM
PretUnitar
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
Baze de date
Capitolul 4
164
Baze de date
Capitolul 4
165
Baze de date
Capitolul 4
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.
167
Baze de date
Capitolul 5
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
169
Baze de date
Capitolul 5
Baze de date
Capitolul 5
Formulare (forms)
Rapoarte (reports)
Pagini Web (pages)
Comenzi macro (macros)
Module (modules)
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.
172
Baze de date
Capitolul 5
173
Baze de date
Capitolul 5
Baze de date
Capitolul 5
175
Baze de date
Capitolul 5
176
Baze de date
Capitolul 5
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.
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
178
Baze de date
Capitolul 5
Baze de date
Capitolul 5
(Remove
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
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.
182
Baze de date
Capitolul 5
n fereastra urmtoare putem selecta modul cum vor apare datele n cadrul
formularului, aa cum se vede n figura 5.13.
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
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.
184
Baze de date
Capitolul 5
185
Baze de date
Capitolul 5
Bara de titlu
Toolbox caseta
cu obiecte
186
Baze de date
Capitolul 5
187
Baze de date
Capitolul 5
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
...........
190
Baze de date
Capitolul 5
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;
Baze de date
Capitolul 5
din
Interogarea 2
Baze de date
Capitolul 5
193
Baze de date
Capitolul 5
frmFacturi
frmDetaliiFacturi
Butoane de navigare
Fig. 5.24.
Formularul nostru
n stare de
funcionare
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.
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
197
Baze de date
Capitolul 5
198
Baze de date
Capitolul 5
199
Baze de date
Capitolul 5
200
Baze de date
Capitolul 5
3:
Baze de date
Capitolul 5
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
...........
203
Baze de date
Capitolul 5
204
Baze de date
Capitolul 5
JOIN
tblFurnizori
ON
tblFacturi.FurnizorID
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
..............
207
Baze de date
Capitolul 5
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
209
Baze de date
Capitolul 5
210
Baze de date
Capitolul 5
Baze de date
Capitolul 5
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.
212
Baze de date
Capitolul 5
213
Baze de date
Capitolul 5
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
Baze de date
Capitolul 5
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
Coloana Condition
Coloana Action
Coloana Comment
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 (
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
Baze de date
Capitolul 5
Baze de date
Capitolul 5
Se va
Baze de date
Capitolul 5
223
Baze de date
Capitolul 5
Baze de date
Capitolul 5
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.
Baze de date
Capitolul 5
226
Save as Type,
opiunea
Baze de date
Capitolul 5
227
Baze de date
Capitolul 5
228
Baze de date
Capitolul 5
229
Baze de date
Capitolul 5
230
Baze de date
Capitolul 5
Baze de date
Capitolul 5
Baze de date
Capitolul 5
Baze de date
Capitolul 5
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
Baze de date
Anexe
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);
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]
[2]
[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]
239