Sunteți pe pagina 1din 239

Ioan Mocian

Baze de date
- pentru uzul studenilor -

- 2008 -

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

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

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

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

Tg. Mure, 2008 Autorul

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

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

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

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

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

Pagin goal

10

Baze de date

Capitolul 1

Noiuni de baz despre bazele de date


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

11

Baze de date

Capitolul 1

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

Modelul de baz de date relaional


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

12

Baze de date
tblSectii SectiaID 1 2 3 4

Capitolul 1

Denumire TCM IEI Informatica Istorie

Facultate Inginerie Inginerie Stiinte Stiinte

tblStudenti StudentID 1 2 3 4

Nume Pop Ban Pop Lazar

Prenume Ioan Lucia Dorin Liviu

SectiaID 1 2 3 2

Telefon 234675 234375 234076 233777

Fig. 1.1. Exemplu de tabele corelate

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

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

13

Baze de date

Capitolul 1

Cele trei componente fundamentale ale unei interogri SQL le reprezint instruciunea SELECTFROM, clauza WHERE i clauza ORDER BY. Dar despre toate acestea vom discuta detaliat n capitolul 4.

Sistemele de gestiune a bazelor de date relaionale


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

14

Baze de date

Capitolul 1

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

Dincolo de modelul relaional


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

15

Baze de date

Capitolul 1

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

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

16

Baze de date

Capitolul 2

Capitolul 2. Terminologia bazelor de date relaionale


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

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

Exist patru categorii de termeni de care o s ne ocupm n acest capitol, termeni referitori la: valoare, structur, relaie i integritate.

17

Baze de date

Capitolul 2

Termeni referitori la valoare


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

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

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

Consultaii

Analize 30.00 27.50 Snge Urina Glicemie

x x

General EKG Ultrasunete

Total plat: 57.50

George Fodor 6582421 12/05/2004 57.50 Total plat: Fig. 2.2. Exemplu de date transformate n informaii 57.50 18 Total plat: 57.50

Baze de date

Capitolul 2

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

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

Baze de date

Capitolul 2

sau nu n expresii matematice sau funcii agregat, vor fi luate n considerare n decursul procesului de proiectare a bazelor de date relaionale.

Termeni referitori la structur


Tabel n conformitate cu modelul relaional, datele dintr-o baz de date relaional sunt stocate n relaii, care sunt percepute de utilizator sub form de tabele. Fiecare relaie este alctuit din nregistrri (tupluri) i cmpuri (atribute). n figura 2.3 este prezentat o structur de tabel caracteristic.
StudentID 5001 5002 5012 5065 5032 Nume Pop Ban Lazr Ban Pop Prenume Mariana Ioan Ana Lucia Dorin Sectia TCM TCM IEI IMPI MEC <<alte cmpuri>>

nregistrri

Cmpuri Fig. 2.3. O structur de tabel

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

20

Baze de date

Capitolul 2

Subiectul pe care l reprezint un tabel dat poate fi un obiect sau un eveniment. Cnd subiectul este un obiect, tabelul reprezint o cantitate palpabil, precum o persoan, un produs sau un lucru oarecare. Indiferent de tipul su, un obiect are caracteristici care pot fi stocate sub form de date, care vor putea fi prelucrate ulterior ntr-un numr mare de moduri. Cnd subiectul unui tabel este un eveniment, nseamn c tabelul reprezint ceva care se produce la un anumit moment de timp i care are caracteristici pe care dorii s le nregistrai. Exemplul clasic care se poate da aici este tabelul cu consultaiile inute de un medic de familie. n figura 2.4 este prezentat un astfel de tabel.
PacientID 92001 97004 98023 93034 94001 Data cons. 12-1-2005 12-1-2005 12-1-2005 12-1-2005 12-1-2005 Ora cons. 8:30 9:00 9:30 10:30 11:45 Medic Avram I. Avram I. Popescu D. Popescu D. Avram I. Tensiune 120/80 125/80 130/82 145/90 132/86 <<alte cmpuri>>

Fig. 2.4. Tabel care reprezint un eveniment

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


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

n figura 2.5 este prezentat un tabel de validare pentru seciile facultii de inginerie.
SectieID Denumire

11 13 12 15 19

TCM IEI Mecatronica Ingineria mediului Design 21

Fig. 2.5. Tabel de validare

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 ProdusID 5001 6023 6034 Denumire Planetara Rulment Acumulat or Bujie Antigel Furnizor SC Lion SC RPA SC Rulment ul SC ARC SC Lion Pret 900 23 500

Cmp multiplu Cant 5 10 4 Valoare 4500 230 2000

Valori multiple

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

Agent Pop, Rusu Danciu Danciu

5098 5067

12 10

100 40

1200 400

Danciu, Pop Pop, Rusu

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

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

23

Baze de date

Capitolul 2

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

24

Baze de date Studenti StudentID 60001 60002 60003 60004

Capitolul 2

Nume Crian Lazr Mocean Mocean

Prenume Ovidiu Denisa Gabriel Olimpiu

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

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

Imprumuturi StudentID CarteID 60001 1001 60002 1001 60003 1099 60004 1099

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

Carti CarteID 1001 1099 1023 1009

Denumire PUC Baze de date Fizica Chimie

Categorie P1 P1 F1 F1

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

Situatie mprumuturi (vedere) Nume Crian Lazr Mocean Mocean Prenume Ovidiu Denisa Gabriel Olimpiu Denumire PUC PUC Baze de date Baze de date Data 3/10/2004 3/10/2004 5/10/2004 5/11/2004

Fig. 2.7. Un exemplu de vedere caracteristic

Exist trei motive majore care confer importan vederilor:


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

25

Baze de date

Capitolul 2

Vederile se pot utiliza pentru implementarea integritii datelor, numite n acest caz vederi de validare.

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

26

Baze de date

Capitolul 2

Cheie primar

Cheie primar Sportivi SportivID 8001 8002 8003

Impresari ImpresarID 100 101 102

Nume Becali Popescu Becali

Prenume Ioan Gic Victor

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

ImpresarID 100 101 100

Nume sportiv Mutu Adrian Neaga Ioan Chivu Cristian

Telefon
0745-657329 0744-768432 0723-546291

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

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

Baze de date

Capitolul 2

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

28

Baze de date

Capitolul 2

Termeni referitori la relaie


Relaii ntre dou tabele exist o relaie atunci cnd nregistrrile din primul tabel pot fi asociate cu nregistrrile din al doilea tabel. Relaia se poate stabili prin intermediul unui set de chei primare i chei externe sau cu ajutorul unui al treilea tabel, numit tabel de legtur (cunoscut i sub numele de tabel asociativ). Figura 2.8 ilustreaz o relaie stabilit prin intermediul cheilor primare i al cheilor externe, iar figura 2.9 exemplific o relaie stabilit cu ajutorul unui tabel de legtur.
Studenti StudID 6001 6002 6003 6004 6004 Nume Pop Szabo Costea Timocea Mocean Prenume Remus Zoltan Florian Sebastian Vasile OrasStudent Reghin Oradea Zalau Brasov Fagaras <<alte cmpuri>> ........ ........ ........ ........ ........ Credite 5 5 4 5 4 5 4 ProfesorID 25461 25461 56821 12843 32584 3212 25461

Orar student(table de legtur) StudID 6001 6002 6002 6001 6002 6003 6003 6001 6003 6001 CursID C001 C213 C001 C213 C015 C001 C213 C015 G001 G001

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

Fig.2.9. O relaie stabilit ntre dou tabele prin intermediul unui tabel de legtur

29

Baze de date

Capitolul 2

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

Salariu SalariatID 100 101 102 103 Salar orar 34.50 23.00 17.45 16.00 Sporuri 10% 5% 20% 18% <<alte cmpuri>> .. .. .. ..

30

Baze de date Fig. 2.10. Exemplu de relaie unu la unu

Capitolul 2

Relaia unu la unu poate fi imaginat ca o rupere n dou a tabelului. Dei cmpurile din aceste tabele pot fi combinate ntr-un singur tabel, proiectantul bazei de date a ales s plaseze n tabelul SALARIAI cmpurile ce pot fi vzute de orice membru al organizaiei i n tabelul SALARIU cmpurile ce pot fi vzute doar de personalul autorizat, tiut fiind c salariile sunt, de obicei, confideniale. Relaii unu cu mai muli ntre dou tabele exist o relaie unu cu mai muli cnd o nregistrare din primul tabel poate fi corelat cu una sau mai multe nregistrri din al doilea tabel, n timp ce o nregistrare din al doilea tabel poate fi corelat cu o singur nregistrare din primul tabel. S studiem un exemplu generic pentru acest tip de relaie. Modelul printe/copil pe care l-am utilizat pentru a descrie o relaie unu cu unu se aplic i n acest caz, partea unu a relaiei este tabelul printe, iar tabelul din partea mai muli este tabelul copil. O relaie de tipul unu cu mai muli se stabilete prin preluarea unei cpii a cheii primare a tabelului printe i ncorporarea acesteia n structura tabelului copil, unde devine o cheie extern. Exemplul din figura 2.11 ilustreaz o relaie de tip unu cu mai muli caracteristic.
Clienti ClientID 9001 9002 9003 9004 9005 Nume Pop Ban Lazr Buzan Beldean Prenume Dorin Ion Ana Maria Vian <alte cmp.> ....... ....... ....... ....... ....... Imprumuturi ClientID 9002 9001 9004 9003 9003 9003 9002 9005 9005 CarteID 5648 690423 6563 65323 09542 64823 75001 10045 76100 Data .... .... .... .... .... .... .... .... ....

Fig. 2.11. Exemplu de relaie unu cu mai muli

31

Baze de date

Capitolul 2

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

32

Baze de date Studenti StudID 6001 6002 6003 6004 6004 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 Nume Pop Szabo Costea Timocea Mocean Prenume Remus Zoltan Florian Sebastian Vasile OrasStudent Reghin Oradea Zalau Brasov Fagaras

Capitolul 2 <<alte cmpuri>> ........ ........ ........ ........ ........

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

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

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

33

Baze de date

Capitolul 2

Studenti StudID Nume 6001 Studenti Pop 6002 Szabo 6003 Costea 6004 Timocea 6004 Mocean Prenume Remus Zoltan Florian Sebastian Vasile OrasStudent Reghin Oradea Zalau Brasov Fagaras Cursuri CursID C001 C213 C032 C015 G001 G004 G007 <<alte cmpuri>> ........ ........ ........ ........ ........

Orar StudID 6001 6002 6002 6001 6002 6003 6003 6001 6003 6001 CursID C001 C213 C001 C213 C015 C001 C213 C015 G001 G001

Denumire PUC Baze de date SIM GD AutoCAD Inventor Intellicad

Credite 5 5 4 5 4 5 4

ProfID 25461 25461 56821 12843 32584 3212 25461

Fig.2.13. Rezolvarea unei relaii de tip mai muli cu mai muli cu ajutorul unui tabel de legtur

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

34

Baze de date

Capitolul 2

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

Baze de date

Capitolul 2

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

Termeni referitori la integritate


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

Baze de date

Capitolul 2

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

Baze de date

Capitolul 2

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

38

Baze de date

Capitolul 3

Capitolul 3. Proiectarea bazelor de date relaionale


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

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

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

Baze de date

Capitolul 3

Etapa 1 Definirea unei declaraii de intenie i a obiectivelor misiunii


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

40

Baze de date

Capitolul 3

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

41

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

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

Baze de date

Capitolul 3

Etapa 2 - Analiza bazei de date curente


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

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

Baze de date

Capitolul 3

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

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

Baze de date

Capitolul 3

4. Cum se finalizeaz aceast etap?

Etapa 3 - Crearea structurilor de date


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

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

Baze de date

Capitolul 3

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

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

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

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

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

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

.....

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

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

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

53

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

cmp artificial care nu are nici o legtur cu tabelul, putem s-i impunem foarte uor condiiile pentru a fi cheie primar. Iat un astfel de caz, prezentat n figura 3.2.
Nume piesa schimb Curea ventilator Acumulator Bujie Curea ventilator Maneta viteza Bucsa directie Model XP-035 TR-78-02 GF-25 Dacia Producator Auto Service SRL ROMBAT SA Pret cu amanuntul 34.75 1250 16.90 29.35 23.85 12.55

Dacia SA

Fig. 3.2. Tabel fr cheie candidat

Dup cum se poate vedea nici un cmp nu ndeplinete condiiile de a fi cheie candidat: Cmpul NUME PIESA SCHIMB nu poate fi ales deoarece ar putea conine valori duplicat. Cmpul MODEL nu poate fi ales deoarece ar putea avea valori nule. Cmpul PRODUCATOR nu poate fi ales pentru c ar putea avea valori nule (lips). Cmpul PRET CU AMANUNTUL nici nu poate fi luat n discuie. Pentru a rezolva problema, introducem un cmp nou numit NUMAR PIESA SCHIMB, care va deveni cheie primar. n figura 3.3 este prezentat tabelul completat cu cmpul respectiv.
Nr piesa schimb 4100 4105 4158 4198 4122 4108 Nume piesa schimb Curea ventilator Acumulator Bujie Curea ventilator Maneta viteza Bucsa directie Model XP-035 TR-78-02 GF-25 Dacia Producator Auto Service SRL ROMBAT SA Pret cu amanuntul 34.75 1250 16.90 29.35 23.85 12.55

Dacia SA

Fig. 3.3. Tabel cu cheie candidat artificial

55

Baze de date

Capitolul 3

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

Nume tabel Profesori Studenti Discipline Plan de nvatanint

Nume cheie artificial ProfesorID StudentID DisciplinaID PlanInvID Fig. 3.4. Exemple de chei artificiale

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

Baze de date

Capitolul 3

11. Care sunt elementele unei chei primare? 12. Ce este o cheie extern? Dai exemple.

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

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

Anatomia unei specificaii de cmp

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

60

Baze de date Specificaii de cmp

Capitolul 3

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 Numar de cifre zecimale: 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


valori nule

Nu se accept
valori nule

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

se se se

Valori introduse de: Valoare obligatore: Valoare prestabilit: Interval de valori: Comparaii permise:

Utilizator Nu
WA

Sistem Da

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

CA, ID, MT, OR, WA

Acelai cmp Toate Alt cmp Toate Valoare de expresie Toate


Operatii premise:

= = = + + +

> > > -

>= >= >= x x x

< < <

<= <= <=

Acelai cmp Toate Alt cmp Toate Valoare de expresie Toate

Concatenare Concatenare Concatenare

Fig. 3.5. Formular 61 Specificaie cmp

Baze de date

Capitolul 3

Elementele generale reprezint atributele fundamentale ale cmpului. Ele ofer informaii despre scopul cmpului, numele tabelului n care apare cmpul etc. n tabelul 3.1 sunt prezentate aceste elemente generale. Tab. 3.1. Elemente generale
Denumire element Nume de cmp Tabel printe 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 pre cizai 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

Eticheta

Partajat de

Alias(-uri)

Descriere

Tip specificaie

62

Baze de date

Specificaie surs

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

Elementele fizice se refer la structura unui cmp. Ele sunt exprimate n termeni generali, deoarece fiecare program SGBDR le implementeaz ntrun mod uor diferit. Stabilirea acestor elemente n timpul acestei faze a procesului de proiectare v ajut s asigurai definiii consecvente ale cmpurilor n ntreaga baz de date i reduce timpul necesar implementrilor structurilor de cmp ntr-un program SGBDR. n tabelul 3.2 sunt prezentate aceste elemente. Tab. 3.2. Elemente fizice
Tip de date Acest element indic natura datelor stocate de cmp. Standardul SQL definete cteva tipuri majore de date i fiecare tip de d ate are una sau mai multe variante unice. Iat o scurt definire a lor: Character acest tip de dat stocheaz un ir alfanumeric de lungime fix sau variabil. Bit acest tip de date stocheaz iruri cu secvene binare, cum ar fi imagini digitizate sau secvene audio. Exact Numeric stocheaz numere ntregi sau zecimale. Majoritatea programelor SGBDR implementeaz acest tip sub numele de NUMERIC, ZECIMAL i INTEGER. Approximate Numeric stocheaz numere cu zecimale i numere exponeniale. Majoritatea programelor SGBDR implementeaz acest tip sub numele de FLOAT, REAL i DOUBLE. Date/Time stocheaz date calendaristice, de timp i combinaia lor. De menionat faptul c acest tip de dat difer destul de mult de la un SGBDR la altul. Va trebui s studiai documentaia SGBDR pentru a afla cum gestioneaz programul datele i orele. Boolean se folosete pentru valorile TRUE i FALSE. Currency se folosete pentru indicarea monedei. Precizeaz numrul total de caractere ce pot fi introduse de un utilizator pentru o valoare oarecare de cmp. Se folosete numai pentru datele de tip Character. Precizeaz numrul de zecimale ale unui numr. Precizeaz modul n care utilizatorul trebuie s introduc data

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 utilizato r le poate introduce ntr-o valoare de cmp dat. Stabilirea i impunerea acestui element v ajut s v asigurai c utilizatorul nu poate introduce n cmp date lipsite de sens, iar prin acest lucru mbuntii integritatea la nivel de cmp. Putei opta pentru includerea sau excluderea oricruia dintre urmtoarele tipuri de caractere: Litere toate literele alfabetului inclusiv cele speciale , , , . Cifre de la 0 la 9. Caractere de pe tastatur - &, ^, =, virgula, !, (, ), %, $ etc. Caractere speciale orice caracter pe care l putei produce prin combinaii specifice de taste standard i tastele Ctrl, Alt i Shift.

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

Unicitate

Suport valori nule

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 introdu ce o valoare ntr-un cmp i dac poate modifica respectiva valoare. Momentul de referin este momentul cnd se creeaz o nou nregistrare. Acest element indic tipurile de comparaii pe care utilizatorul le poate aplica asupra unei valori de cmp date, atunci cnd preia informaie din cmp. Exist 6 tipuri de comparaii, =, diferit de, >, <, >=, <=, aa cum se poate observa din formular. De asemenea, se indic dac un utilizator poate compara o valoare de cmp dat cu una din urmtoarele: Alt valoare din acelai cmp. Valoarea unui alt cmp din tabelul printe sau dintr -un alt tabel al bazei de date. O valoare de expresie, care este o operaie oarecare n care este inclus valoarea cmpului. Controlul asupra tipului de comparaii l mpiedic pe utilizator s fac anumite comparaii lipsite de sens. Acest element precizeaz tipurile de operaii pe care utilizatorul le poate efectua cu valorile unui cmp. Exist 5 tipuri de operaii: adunare, scdere, nmulire, mprire i concatenare. De asemenea, acest element indic dac o operaie poate include vreuna din urmtoarele: Alt valoare din acelai cmp. Valoarea unui alt cmp din tabelul printe sau dintr -un alt tabel al bazei de date. Rezultatul unei expresii n care este implicat valoarea cmpului. Controlul asupra tipului de operaii previne efectuarea unor operaii fr sens, limitnd tipurile de operaii care se pot face cu valorile unui cmp.

Aceast faz este o mare consumatoare de timp, de aceea tentaia de a economisi timp este foarte mare, ceea ce este o mare greeal. Timpul 65

Baze de date

Capitolul 3

astfel economisit este iluzoriu, deoarece pierderile cu repararea mai trziu a bazei de date va fi nzecit. Acordai acestei faze importana cuvenit, altfel tot efortul dumneavoastr de pn acum va fi zadarnic.

ntrebri pentru autoevaluare


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

66

Baze de date

Capitolul 3

Etapa 4 - Determinarea i instituirea relaiilor ntre tabele


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

Fig. 3.6. Exemplu generic de relaie unu la unu

67

Baze de date

Capitolul 3

Dup putei vedea, o nregistrare din TABELUL A este corelat cu o singur nregistrare din TABELUL B, iar o nregistrare din TABELUL B este corelat cu o singur nregistrare din TABELUL A. O relaie unu cu unu implic de obicei un tabel subset. Figura 3.7 prezint un exemplu de relaie unu cu unu tipic pe care o putei gsi ntr-o baz de date pentru departamentul Personal al unei organizaii.
Angajati SalariatID 100 101 102 103 Nume Ban Pop Lazr Crian Prenume Ioan Dorin Liviu Ovidiu Telefon 0745-646321 0723-548211 0264-542138 0740-764282 <<alte cmpuri>> .. .. .. ..

Retributii SalariatID 100 101 102 103 Salar orar 34.50 23.00 17.45 16.00 Sporuri 10% 5% 20% 18% <<alte cmpuri>> .. .. .. ..

Fig. 3.7. Exemplu de relaie unu la unu

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

68

Baze de date
Aceast linie arat c o nregistrare din TABELUL B este corelat cu o singur nregistrare din TABELUL A

Capitolul 3

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

Tabel A

Tabel B

Tabel normal

Tabel subset

Fig. 3.8. Realizarea unei diagrame generice pentru o relaie unu la unu

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

Angajati

Retributii

Nume tabel

Fig. 3.9. Diagrama relaiei dintre tabelele SALARIATI i SALARIU

Nume tabel

Nume tabel

69

Baze de date

Capitolul 3

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

Tabel A

Tabel B

Tabel A

Tabel B

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

70

Baze de date

Capitolul 3

Relaia unu cu mai muli este cea mai obinuit relaie care exist ntre dou tabele dintr-o baz de date i este cea mai uor de identificat. Relaia este extrem de important din punct de vedere al integritii datelor, deoarece ea v ajut s eliminai datele duplicate. Figura 3.11 prezint un exemplu obinuit de relaie unu cu mai muli pe care o putei ntlni la o secie de mprumut a unei biblioteci.
Imprumuturi Clienti
ClientID 9001 9002 9003 9004 9005 Nume Pop Ban Lazr Buzan Beldean Prenume Dorin Ion Ana Maria Vian <<alte cmp.>> ....... ....... ....... ....... ....... ClientID 9002 9001 9004 9003 9003 9003 9002 9005 9005 CarteID 5648 690423 6563 65323 09542 64823 75001 10045 76100 Data .... .... .... .... .... .... .... .... ....

Fig. 3.11. Exemplu de relaie unu cu mai muli

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

71

Baze de date
Aceast linie arat c o nregistrare din TABELUL B este corelat cu o singur nregistrare din TABELUL A

Capitolul 3

Tabel A

Tabel B

Nume tabel Aceast lab de gsc arat c o Nume tabel


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

Nume tabel

Fig. 3.12. Realizarea diagramei pentru o relaie unu cu mai muli

Observai c simbolul lab de gsc este ntotdeauna localizat n dreptul tabelului din partea muli a relaiei. Figura 3.13 prezint diagrama relaiei dintre Aceast tabelelelinie CLIENTI arat c i o MPRUMUTURI din figura 3.11. Reinei aceste notaii pentru c le vei B folosi n prezentarea structurii nregistrare din TABELUL Nume tabel bazelor de date pe care le vei proiecta. este corelat cu o singur nregistrare din TABELUL A
Clienti Imprumuturi Imprumuturi

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

Nume tabel Nume tabel Nume tabel(A)

72 Aceast linie arat c o

Baze de date

Capitolul 3

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

Tabel A
Tabel A

Tabel B
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 mai Tabel B muli cu mai muli 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 Nume Pop Szabo Costea Timocea Mocean Prenume Remus Zoltan Florian Sebastian Vasile OrasStudent Reghin Oradea Zalau Brasov Fagaras

Capitolul 3 <<alte cmpuri>> .....

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

Cursuri CursID C001 C213 C032 C015 G001 G004 G007 Denumire PUC Baze de date SIM GD AutoCAD Inventor IntelliCAD Credite 5 5 4 5 4 5 5 ProfesorID 2001 2001 2045 2014 2009 2006 2032 Sala 208 208 208 207 207 209 209 <<alte cmpuri>> ..... ..... ..... ..... ..... ..... .....

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

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

74

Baze de date

Capitolul 3

Aceast lab de gsc arat c o nregistrare din TABELUL B este corelat cu mai multe nregistrri din TABELUL A

Tabel A

Tabel B

Aceast lab de gsc arat c o nregistrare din TABELUL A este corelat cu mai multe nregistrri din TABELUL B

Fig. 3.16. Realizarea diagramei pentru o relaie mai muli cu mai muli

Studenti

Cursuri

Fig. 3.17. Diagrama relaiei dintre tabelele STUDENTI i CURSURI

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

Baze de date

Capitolul 3

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

Orar(tabel de legtur)
StudID 6001 6002 6002 6001 6002 6003 6004 6001 6003 6001 6005 CursID C001 C213 C032 C213 C015 C001 C213 C015 G001 G004 G007

Cursuri
CursID C001 C213 C032 C015 G001 G004 G007 Denumire PUC SIM Baze de date GD AutoCAD Inventor IntelliCAD Credite 5 5 4 5 4 5 5 ProfID 2001 2001 2045 2014 2009 2006 2032

Fig.3.18. Rezolvarea unei relaii de tip mai muli cu mai muli cu ajutorul unui tabel de legtur

76

Baze de date

Capitolul 3

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

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

Orar StudentID CursID

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

Fig. 3.19. Diagrama de relaie a problemei rezolvate

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

Baze de date

Capitolul 3

joac rolul de sponsor. Observai c Mocean Pavel sponsorizeaz pe Obdu Anica.


Membrii MembruID 1001 1002 1003 1004 1005 Nume Pop Mocean Ban Ban Obdu Prenume Dorin Pavel Ionel Lucia Anica SponsorID 1001 1003 1002 <<alte cmpuri>> --------------------------

Fig. 3.20. Relaie cu autoreferire unu cu unu

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


Membrii

Aceast linie lateral a tabelului arat natura de auto-referiere a relaiei i tipul relaiei.

Fig. 3.21. Diagrama unei relaii cu auto-referire unu cu unu

Relaia unu cu mai muli cu autoreferire exist atunci cnd o nregistrare dat din tabel poate fi corelat cu una sau mai multe nregistrri din acelai tabel. Figura 3.22 arat un exemplu n care un angajat poate fi eful mai multor angajai. Observai c Pop Dorin este eful la ali trei angajai.
Personal AngajatID 1001 1002 1003 1004 1005 Nume Mocean Pop Ban Ban Obdu Prenume Pavel Dorin Ionel Lucia Anica Sef 1002 <<alte cmpuri>> --------------------------

1002 1002

Fig. 3.22. Relaie cu autoreferire unu cu mai muli

78

Baze de date

Capitolul 3

Figura 3.23 arat diagrama acestei relaii.

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

Relaia mai muli cu mai muli cu autoreferire exist cnd o nregistrare dat dintr-un tabel poate fi corelat cu una sau mai multe nregistrri din acelai tabel i una sau mai multe nregistrri pot fi corelate cu nregistrarea dat. La nceput, acest lucru poate aprea confuz, dar exemplul care urmeaz o s v ajute s clarificai problema (figura 3.24). n acest caz, o anumit subansamblu poate fi compus din mai multe piese componente diferite i poate fi la rndul lui component al unui alt subansamblu.
Piese PiesaID 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 Denumire piesa Clema superioar Clema inferioar urub de strngere Piulit Ansamblu clem Scaun Ansamblu scaun Corp tubular Suport spate Ansamblu cadru a <<alte cmpuri>> .....

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

Fig. 3.24. Exemplu de relaie cu autoreferire mai muli cu mai muli

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

Baze de date

Capitolul 3

scaun (7007) i al ansamblului cadru (7010), deci 2 nregistrri din tabel pot fi corelate cu ea. Figura 3.25 prezint diagrama pentru acest tip de relaie.
Piese Fig. 3.25. Diagrama unei relaii cu autoreferire mai muli cu mai muli

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

Baze de date

Capitolul 3

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

Cladiri Cladiri Cursuri Indemnizatie Catedra Sali Personal Studenti

Cursuri

Indemnizatie

Catedra

Sali

Personal

Studenti

Fig. 3.26. Realizarea unei matrice de tabele pentru stabilirea relaiilor

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

81

Baze de date

Capitolul 3

Dup ce ai identificat relaia, indicai tipul relaiei n celula aflat la intersecia dintre liniile celor dou tabele. Pentru tipurile de relaii folosii urmtoarele prescurtri: 1:1 - pentru relaia unu cu unu. 1:M - pentru relaia unu cu mai multi. M:M - pentru relaia mai muli cu mai muli. n figura 3.27 este artat matricea de tabele cu completat cu relaiile tabelului CURSURI.
Cladiri Cladiri Cursuri Indemnizatie Catedra Sali Personal Studenti 1:1 Cursuri 1:M Indemnizatie Catedra 1:M Sali 1:M 1:1 Personal Studenti

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

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

Baze de date

Capitolul 3

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

1:1

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

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

Baze de date

Capitolul 3

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

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

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

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

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

Baze de date

Capitolul 3

tabelul aflat n partea unu a relaiei i o vei include n structura tabelului din partea mai muli, unde va deveni cheie extern. Pentru exemplificare, fie relaia unu cu mai muli dintre tabelele CLADIRI i SALI, prezentat n figura 3.30.

Cladiri CladireID ChP Numar etaje Acces lift Acces parcare

Sali SalaID ChP Tip sala Nr locuri Acces Intrenet

Fig. 3.30. Relaia de tip unu cu mai muli existent ntre tabelele CLADIRI i SALI

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

Fig. 3.31. Stabilirea relaiei unu cu mai muli ntre tabelele CLADIRI i SALI

Relaia mai muli cu mai muli se stabilete cu ajutorul unui tabel de legtur. Deci, va trebui s creai un nou tabel n baza de date, parcurgnd urmtorii pai: 85

Baze de date

Capitolul 3

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

Fig. 3.32. Stabilirea unei relaii mai muli cu mai muli ntre tabelele STUDENTI i CURSURI

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

Baze de date

Capitolul 3

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

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

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

Baze de date

Capitolul 3

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

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

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

88

Baze de date

Capitolul 3

Angajati AngajatID ............ ChP

Clienti ClientID ChP AngajatID ChE

Fig. 3.33. Ce tip de participare trebuie atribuit fiecrui tabel?

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

89

Baze de date
Aceast linie simbolizeaz tipul de participare Obligatorie pentru acest tabel

Capitolul 3

Clienti Angajati AngajatID ............ ChP ClientID ChP AngajatID ChE

Acest cerc simbolizeaz tipul de participare Opional pentru acest tabel

Fig. 3.34. Precizarea tipului de participare pentru tabelele ANGAJATI i CLIENTI

Identificarea gradului de participare a fiecrui tabel

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

Baze de date

Capitolul 3

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

Angajati
(1,1)

Clienti
(0,10) ClientID

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

ChP

ChP AngajatID ChE

Fig. 3.35. Indicarea gradului de participare pentru tabelele ANGAJATI i CLIENTI

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

91

Baze de date

Capitolul 3

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

92

Baze de date

Capitolul 3

Etapa 5 - Determinarea i definirea regulilor de desfurare a activitii


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

Baze de date

Capitolul 3

Fig. 3.36. Formular pentru o regul de desfurare a activitii

94

Baze de date

Capitolul 3

Documentul Foaie de specificaii pentru regula de desfurare a activitii conine urmtoarele elemente: Enun. Acesta este textul regulii de desfurare a activitii. El trebuie s fie clar, succint i ar trebui s comunice restriciile necesare, fr confuzii sau ambiguiti. Iat un exemplu concret de regul: O grup nu poate conine mai mult de 30 de studeni. Restricie. Aici se pune o scurt explicaie a modului n care restricia se aplic tabelelor i cmpurilor. De exemplu, putei utiliza urmtoarea explicaie pentru restricia impus de regula din exemplul precedent: O singur nregistrare din tabelul tblGrupe poate fi asociat cu maximum 30 de nregistrri din tabelul tblStudenti. Tip. Aici indicai dac regula este orientat spre baza de date sau este orientat spre aplicaie. Categorie. Aici indicai dac regula este specific unui cmp sau unei relaii. Testare la. Aici indicai care aciuni (inserare, tergere, actualizare) vor determina testarea restriciei impus de regula de desfurare a activitii. Structuri afectate. n funcie de tipul de regula de desfurare a activitii, restricia va afecta fie un cmp, fie o relaie. Aici specificai numele cmpurilor care vor fi afectate de regul sau numele tabelelor implicate n relaie care vor fi afectate. Elemente de cmp afectate. O regul de desfurare a activitii care ine de un cmp poate afecta unul sau mai multe elemente ale respectivei specificaii de cmp. Aici indicai elementele afectate de regul. Caracteristici de relaie afectate. O regul de desfurare a activitii care ine de o relaie va afecta una sau mai multe caracteristici ale respectivei relaii. Aici indicai caracteristicile afectate de regul. Aciune ntreprins. Aici indicai modificrile aduse elementelor unei specificaii de cmp sau diagramei de relaie. Ceea ce scriei aici trebuie s fie foarte clar i fr ambiguiti.

95

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

Fig. 3.37. Tabel de validare

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

Baze de date

Capitolul 3

ctre un operator uman, dar dac se introduce cheia primar (JudetID), sigur nu vor fi mai multe denumiri ale acestuia.

Etapa 6 - Determinarea i definirea vederilor


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

Baze de date

Capitolul 3

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

99

Baze de date

Capitolul 3

Fig. 3.38. Formular pentru vedere

100

Baze de date

Capitolul 3

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

tblSectii tblStudenti StudentID Nume Prenume SectiaID Telefon SectiaID Sectia ..

Lista studenti Student Sectia Telefon

Fig. 3.39. Diagram de vedere

Aceast diagram, mpreun cu foaia de specificaii ofer informaiile necesare pentru crearea vederii de ctre echipa care implementeaz baza de date proiectat.

101

Baze de date

Capitolul 3

Etapa 7 Revizuirea integritii datelor


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

102

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

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

Baze de date

Capitolul 3

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

105

Baze de date

Capitolul 3

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

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

Baze de date

Capitolul 3

n urma analizrii obiectivelor misiunii au rezultat tabelele cu date, stabilindu-se cmpurile i cheile, primare sau externe. n aceast etap se vor definitiva i specificaiile de cmp, completnd formularul Specificaii de cmp care se gsete n anexa acestei cri. Lista cu tabelele bazei de date este prezentat n tabelul care urmeaz.
Tabel tblAutori 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) Constringeri Not Null Not Null Not Null Observatii

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

tblEdituri

tblCarti

Not Null Not Null Not Null Not Null Not Null

tblDomenii

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

tblImprumuturi

tblCititori

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

tblJudete

tblProfesii

107

Baze de date

Capitolul 3

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

108

Baze de date

Capitolul 3

Fig. 3.40. Foaia de specificaie 109 pentru cmpul DataN

Baze de date

Capitolul 3

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

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

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

110

Baze de date

Capitolul 3

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

111

Baze de date

Capitolul 3

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

112

Baze de date

Capitolul 3

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

113

Baze de date

Capitolul 3

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

114

Baze de date

Capitolul 3

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

tblCititori tblJudete JudetID Denumire Abreviere CititorID Nume Prenume ProfesiaID .. JudetID

tblProfesii ProfesiaID Denumirea Explicatii

Lista cititori Cititor Profesia Adresa

Fig. 3.44. Diagrama de vedere Lista cititorilor bibliotecii

115

Baze de date

Capitolul 3

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

116

Baze de date

Capitolul 3

Fig. 3.45. Foaie de specificaii117 pentru vederea Lista cititorilor bibliotecii

Baze de date

Capitolul 3

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

Baze de date

Capitolul 3

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

119

Baze de date

Capitolul 4

Capitolul 4. Iniiere n limbajul SQL


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

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

Baze de date

Capitolul 4

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

Baze de date

Capitolul 4

Operaiuni simple folosind limbajul SQL


Regsirea datelor Regsirea datelor se face cu instruciunea SELECT, folosit pentru a regsi una sau mai multe coloane. Aceasta este cea mai folosit instruciune din SQL. Din tabelul tblStudenti prezentat n figura 4.1 ne propunem s extragem numele i prenumele studenilor.
StudID 1 2 3 4 5 6 7 8 9 10 Nume Bogdan Meruta Pop Bucur Chirila Cotirla Cotoara Cozma Damian Farcas Init P. I. T. P. I. L. G. D. N. I. Prenume Mircea Florin Cosmin Marius Traian Mihaela Laura Raluca Adina Ovidiu Dumitru Daniel Calin Florin Sectia IEI IEI IEI IEI IEI TCM TCM TCM MEC MEC An 1 3 2 2 3 1 1 2 4 4 Grupa 1311 1332 1321 1321 1331 1111 1111 1121 1241 1241 Stare Bugetar Bugetar Bugetar Bugetar Bugetar Bugetar Bugetar Bugetar Bugetar Taxa

Fig. 4.1. Tabelul tblStudenti simplificat

Expresie SQL:
SELECT Nume, Prenume FROM tblStudenti;

Rezultat:
Nume Bogdan Meruta Pop Bucur Chirila Cotirla Cotoara Cozma Damian Farcas Prenume Mircea Florin Cosmin Marius Traian Mihaela Laura Raluca Adina Ovidiu Dumitru Daniel Calin Florin

122

Baze de date

Capitolul 4

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

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

Rezultat:
Nume Bogdan Bucur Chirila Cotirla Cotoara Cozma Damian Farcas Meruta Pop Prenume Mircea Florin Mihaela Laura Raluca Adina Ovidiu Dumitru Daniel Calin Florin Cosmin Marius Traian

123

Baze de date

Capitolul 4

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

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

124

Baze de date

Capitolul 4

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


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

Rezultat:
StudID 3 4 8 Nume Pop Bucur Cozma Init T. P. D. Prenume Marius Traian Mihaela Dumitru Sectia IEI IEI TCM Grupa 1321 1321 1121

Operatorii clauzei WHERE

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

125

Baze de date

Capitolul 4

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

Filtrrile prezentate mai sus se ntlnesc mai rar n practic deoarece sunt foarte simple. Filtrrile pe care le vei folosi n mod curent, sunt filtrri mai complicate la care criteriile sunt exprimate prin expresii complexe. Aceste criterii creeaz condiii puternice de cutare. Vom folosi ali operatori cum sunt AND, OR, NOT i IN. De multe ori, filtrarea dup o coloan nu rezolv problema pe care o avem. Pentru a filtra dup mai multe coloane se folosete operatorul AND. Fie tabelul din figura 4.2. Ne propunem s facem diferite filtrri.
StudID 1 2 3 4 5 6 7 8 9 10 Nume Bogdan Meruta Pop Bucur Pop Cotirla Cotoara Cozma Damian Cozma Init P. I. T. P. I. L. G. D. N. I. Prenume Mircea Florin Cosmin Marius Traian Mihaela Laura Raluca Adina Ovidiu Dumitru Daniel Calin Florin Sectia IEI IEI IEI IMPI IEI TCM TCM TCM MEC MEC 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

Fig. 4.2. Tabel cu studeni

126

Baze de date

Capitolul 4

Operatorul AND. Prima filtrare ar fi studenii de la IEI din anul 1. Iat expresia SQL:
Expresie SQL:
SELECT Nume, Prenume, Grupa, Stare FROM tblStudenti WHERE Sectia=IEI AND An = 1;

Rezultat:
Nume Bogdan Meruta Prenume Mircea Florin Cosmin Grupa 1311 1312 Stare Bugetar Taxa

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

Rezultat:
Nume Pop Cozma Prenume Marius Traian Dumitru Sectia IEI TCM Grupa 1321 1121 Stare Bugetar Bugetar

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

Baze de date

Capitolul 4

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

Rezultat:
Nume Pop Pop Cozma Cozma Prenume Marius Traian Laura Dumitru Calin Florin Sectia IEI IEI TCM MEC Grupa 1321 1331 1121 1241 Stare Bugetar Taxa Bugetar Taxa

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

Baze de date

Capitolul 4

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

Rezultat:
Nume Meruta Pop Cozma Prenume Cosmin Laura Calin Florin Sectia IEI IEI MEC Grupa 1312 1331 1241 Stare Taxa Taxa Taxa

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

129

Baze de date

Capitolul 4

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

StudID 1 2 3 4 5 6 7 8 9 10

Nume Bogdan Brustur Popescu Brucan Pop Cotirla Popa Popovici Branea Cozma

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

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

Sectia IEI IEI IEI IMPI IEI TCM TCM TCM MEC MEC

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

Fig. 4.3. Tabel cu studeni

130

Baze de date

Capitolul 4

Ne propunem s filtrm toate nregistrrile n care numele studenilor, din tabelul din figura 4.3, ncepe cu Pop.
Expresie SQL:
SELECT Nume, Prenume,Sectia, Grupa, Stare FROM tblStudenti WHERE Nume LIKE Pop* ORDER BY Nume;

Rezultat:
Nume Pop Popa Popescu Popovici Prenume Laura Ovidiu Marius Traian Dumitru Sectia IEI TCM IEI TCM Grupa 1331 1111 1321 1121 Stare Taxa Bugetar Bugetar Bugetar

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

131

Baze de date

Capitolul 4

Operaiuni avansate folosind limbajul SQL


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

132

Baze de date

Capitolul 4

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

Rezultat:
Student Bogdan P. Mircea Florin Branea N. Daniel Brucan P. Mihaela Brustur I. Cosmin Cotirla L. Raluca Adina Cozma I. Calin Florin Pop I. Laura Popa G. Ovidiu Popescu T. Marius Traian Popovici D. Dumitru Sectia IEI MEC IMPI IEI TCM MEC IEI TCM IEI TCM An 1 4 2 1 1 4 3 1 2 2 Grupa 1311 1241 1321 1312 1111 1241 1331 1111 1321 1121 Stare Bugetar Bugetar Bugetar Taxa Bugetar Taxa Taxa Bugetar Bugetar Bugetar

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

133

Baze de date Cod 1001 1023 1231 1089 1904 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

Capitolul 4 Valoare 360 3100 6144 26 384

Fig. 4.4. Raport cu cmpul valoare calculate

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

Observai i reinei sintaxa folosit pentru crearea noului cmp VALOARE.

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

134

Baze de date

Capitolul 4

Funcii de dat i timp sunt folosite la manipularea valorilor calendaristice de dat i or, i la extragerea unor componente caracteristice din aceste valori (an, lun, zi, or) pentru a verifica validitatea unor date introduse. Funciile text. n aceast categorie vom regsi clasicele funcii de text care se gsesc n toate limbajele de programare. Iat-le pe cele mai folosite: LEFT() irului. RIGHT() LENGTH() LOWER() UPPER() LTRIM() RTRIM() - returneaz caracterele indicate din stnga - returneaz caracterele indicate din dreapta irului. - returneaz lungimea unui ir. - transform toate caracterele irului n minuscule. - transform toate caracterele irului n majuscule. - nltur spaiile albe din stnga irului. - nltur spaiile albe din stnga irului.

Funciile numerice. n aceast categorie intr funciile folosite pentru calcule algebrice, geometrice i trigonometrice. Sunt mai puin folosite la bazele de date dect celelalte tipuri. Iat-le pe cele mai folosite: ABS() COS() SIN() TAN() SQRT() indicat. PI() AVG() COUNT() MAX() coloan. MIN() coloan. SUM() - returneaz valoarea absolut a unui numr. - returneaz cosinusul unui unghi indicat. - returneaz sinusul unui unghi indicat. - returneaz tangenta unui unghi indicat. - returneaz rdcina ptrat a unui numr - returneaz valoarea lui PI. - returneaz valoarea medie a unei coloane. - returneaz numrul de linii dintr-o coloan. - returneaz valoarea cea mai mare dintr-o - returneaz valoarea cea mai mic dintr-o - returneaz suma valorilor unei coloane.

135

Baze de date

Capitolul 4

Ultimele cinci funcii se mai numesc i funcii agregat, deoarece au n spate algoritmi compleci. Funciile de dat i timp. Valorile datei i orei sunt stocate n baza de date n formate speciale, de aceea este nevoie de funcii speciale pentru a le manipula. Ele sunt cele mai importante funcii din limbajul SQL. Aceste funcii ne ajut s extragei ora, luna, ziua, anul dintr-o astfel de dat i s facei diferena dintre dou date calendaristice. Cele mai importante sunt: Date() - returneaz data curent a sistemului. DateAdd(interval, numar, data) returneaz o dat rezultat din adugarea unui interval la data specificat. Parametrul interval poate avea valorile: yyyy an, q trimestru, m lun, d zi etc.
Exemple: DateAdd(yyyy,3,#22/11/2003#) returneaz 22/11/2006 DateAdd(m,5,#22/11/2003#) returneaz 22/04/2004

DateDiff(interval, data1, data2) returneaz diferena dintre dou date calendaristice, bazate pe intervalul specificat.
Exemple: DateDiff(d,#15/10/2003#,#22/11/2003#) returneaz 38

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

136

Baze de date

Capitolul 4

Gruparea datelor
Crearea grupurilor

Am vzut n paragraful precedent c funciile agregat din SQL pot fi utilizate pentru a genera sumare de date. Aceasta v permite s numrai liniile, s calculai sume i medii, respectiv s obinei valorile cele mai mari sau cele mai mici, fr necesitatea regsirii tuturor datelor. Toate calculele de pn acum au fost efectuate asupra tuturor datelor dintrun tabel, sau asupra datelor ce corespundeau clauze WHERE specifice. Dac ai dori s facei asemenea calcule asupra unor seturi logice se nregistrri? Aici intervine gruparea datelor. De exemplu, gruparea vnzrilor sptmnale dup numele vnztorului care le-a fcut. Grupurile sunt create folosind clauza GROUP BY n instruciunea SELECT. Modul cel mai simplu de a nelege crearea i utilitatea lor este un exemplu practic. Presupunem c avem ntr-o baz de date un tabel n care inem evidena produselor vndute de mai muli vnztori i dorim la un moment dat s vedem ct a vndut fiecare, pentru a face o analiz a activitii, nu-i aa? Tabelul se numete tblProduse i se vede n figura 4.5.
Cod_produs 100001 100345 100037 100445 100090 100552 Cod_vinzator MR-01 KL-02 MR-01 MR-01 PR-02 GH-04 Denumire produs Acumulator Capota fata Set motor Cauciuc R13 Ulei M30 Antigel 34 Pret produs 250 120 356 65 50 20

Fig. 4.5. Tabelul tblProduse

O nregistrare din acest tabel reprezint o vnzare a unui produs, fcut de un anumit vnztor. Ne propunem s aflm cte vnzri a fcut fiecare vnztor.
Expresie SQL:
SELECT Cod_vinzator, COUNT(*) AS Numar_vinzari FROM tblProduse GROUP BY Cod_vinzator;

137

Baze de date

Capitolul 4

Rezultat:

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

Numar_vinzari 3 1 1 1

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

Baze de date

Capitolul 4

Filtrarea grupurilor

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

Rezultat:

Cod_vinzator MR-01

Numar_vinzari 3

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

139

Baze de date

Capitolul 4

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

140

Baze de date

Capitolul 4

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

tblCumparatori CumparatorID NumeCump Oras ChP

Fig. 4.6. Diagrama de relaii

Se vede c avem 3 tabele, cte unul pentru cumprtori, comenzi i detalii comenzi, ntre care exist relaiile desenate. Pentru a nelege mai bine conceptul de subselecii vom completa aceste tabele cu date. n figura 4.7 se vd aceste tabele.

141

Baze de date

Capitolul 4

tblComenzi ComandaID 10010 10011 10012 10013 10014 10015 10016 10017 tblDetaliiCom DetComID 20010 20011 20012 20013 20014 DataCom 16.04.2005 16.04.2005 16.04.2005 16.04.2005 16.04.2005 20.04.2005 20.04.2005 20.04.2005 CumparatorID 6001 6083 6014 6025 6001 6083 6001 6014

ComandaID 10010 10010 10011 10011 10012

ArticolID 1001 1002 1001 1052 1008

PretArt 250.50 115.00 95.25 65.00 147.00

Cantitate 10 12 8 50 16

tblCumparatori CumparatorID 6001 6002 6025 6083 6014 NumeCump ROMBAT SRL AutoNET SRL COMPACT SA ANCONA SA SAVINA SRL Oras Tg. Mures Tg. Mures Brasov Sibiu Ludus <<alte cimpuri>> ...... ...... ...... ...... ......

Fig. 4.7. Cele 3 tabele completate

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

Baze de date

Capitolul 4

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

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

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

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

143

Baze de date

Capitolul 4

Remarcai folosirea clauzei IN pe care ai studiat-o puin mai nainte. Avnd indicatorii pentru cumprtorii cutai, nu v rmne dect s cutai cine sunt acetia, n tabelul cu toi cumprtorii. Iat cum trebuie s procedai:
Expresie SQL:
SELECT CumparatorID, NumeCump FROM tblCumparatori WHERE CumparatorID IN (6001, 6083);

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

V-ai descurcat foarte bine pn aici, dar nu cred c suntei mulumii cu aceast metod bbeasc de gsi informaiile dorite. Ai observat cum s au transferat rezultatele unei interogri n parametrii altei interogri. Soluia este s ncercai s unii aceste 3 interogri ntr-una singur. Iat aceast cale:
Expresie SQL:
SELECT CumparatorID, NumeCump FROM tblCumparatori WHERE CumparatorID IN (SELECT CumparatorID FROM tblComenzi WHERE ComandaID IN (SELECT ComandaID FROM tblDetaliiCom WHERE ArticolID = 1001));

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

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

144

Baze de date

Capitolul 4

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

Remarcai utilizarea aliasului C pentru tabelul tblComenzi pentru a simplifica scrierea expresiei clauzei WHERE.
Rezultat:
NumeCump .......... ANCONA SA AutoNET SRL COMPACT SA ROMBAT SRL SAVINA SRL Oras ......... Tg. Mures Tg. Mures Brasov Bistrita Ludus Comenzi ........ 2 0 1 3 2

Dei subseleciile sunt foarte utile n construirea acestui tip de instruciune SELECT, trebuie avut grij n privina identificrii corecte a coloanelor implicate, tiind c sunt coloane cu acelai nume care apar n tabele diferite. Aceste coloane se identific corect dac naintea numelui se pune 145

Baze de date

Capitolul 4

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

146

Baze de date

Capitolul 4

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

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

VinzatorID V01 V03 V01

DenumireProdus Piine Banane Biscuiti

PretProdus 2.00 2.50 1.25

tblVinzatori VinzatorID V01 V02

NumeVinzator Ban Lucia Pop Mariana

OrasVinzator Naoiu Sarmasel

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

Fig. 4.8. Tabelele pentru unire

Unirea celor dou tabele cu o expresie SQL va genera un nou tabel cu 6 nregistrri (3 x 2).

147

Baze de date

Capitolul 4

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

Rezultat:
NumeVinzator Ban Lucia Ban Lucia Ban Lucia Pop Mariana Pop Mariana Pop Mariana DenumireProdus Piine Banane Biscuiti Piine Banane Biscuiti PretProdus 2.00 2.50 1.25 2.00 2.50 1.25

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

Rezultat:
NumeVinzator Ban Lucia Ban Lucia DenumireProdus Piine Biscuiti PretProdus 2.00 1.25

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

148

Baze de date

Capitolul 4

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

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

149

Baze de date

Capitolul 4

Uniri avansate

Limbajul SQL nu impune limite asupra numrului de tabele ce pot fi unite ntr-o instruciune SELECT. Regulile de baz pentru crearea unei uniri rmn aceleai. n primul rnd, enumerai toate tabelele, apoi definii relaiile dintre ele. Iat un exemplu:
tblProduse ProdusID 1001 1002 1003 1004 1052 1078 VinzatorID V01 V03 V01 V01 V02 V03 DenumireProdus Piine Inghetata Biscuiti Ciocolata Bricheta Banane PretProdus 2.00 1.25 0.25 2.65 0.35 2.50 DescriereProdus

tblDetaliiComenzi DetComID 20010 20011 20012 20013 20014 tblVinzatori VinzatorID V01 V02 V03 V04 NumeVinzator Ban Lucia Pop Mariana Baciu Mia Ban Ionel Oras Naoiu Sarmasel Naoiu Roma <<alte cimpuri>> ...... ...... ...... ...... ComandaID 10010 10010 10010 10010 10012 ProdusID 1001 1002 1078 1052 1008 Cantitate 10 12 8 50 16

Fig. 4.9. Tabele implicate n unire

Ne propunem s aplicm unirea ntr-un caz concret de regsire a unor informaii care se gsesc n trei tabele. Cutm produsele care compun comanda 10010, precum i vnztorul asociat. Studiai expresia SQL care urmeaz i verificai rezultatul obinut.
Expresie SQL:
SELECT DenumireProdus, NumeVinzator, PretProdus, Cantitate FROM tblProduse, tblDetaliiCom, tblVinzatori WHERE tblDetaliiComenzi.ProdusID=tblProduse.ProdusID

150

Baze de date
AND tblProduse.VinzatorID=tblVinzatori.VinzatorID AND ComandaID= 10010;

Capitolul 4

Rezultat:
DenumireProdus Piine Inghetata Banane Bricheta NumeVinzator Ban Lucia Baciu Mia Ban Lucia Pop Mariana PretProdus 2.00 1.25 2.50 0.35 Cantitate 10 12 8 50

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

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

Baze de date

Capitolul 4

instruciuni SELECT) i s returnai rezultatele sub forma unui singur set de rezultate de interogare. De obicei, aceste interogri sunt cunoscute drept reuniuni sau interogri compuse. n esen, exist dou situaii generale n care s folosii interogrile compuse: Pentru a returna date structurate similar din tabele diferite, ntr-o singur interogare. Pentru a efectua mai multe interogri asupra unui singur tabel, returnnd datele ca o singur interogare. Pentru a compune interogrile SQL se folosete operatorul UNION. Cu ajutorul lui pot fi specificate instruciuni SELECT multiple, iar rezultatele acestora pot fi combinate ntr-un singur set de rezultate. Folosirea operatorului UNION este destul de simpl, tot ce avei de fcut este s specificai toate instruciunile SELECT i s plasai ntre ele cuvntul cheie UNION. S lum un exemplu. Presupunem c trebuie s ntocmii un raport despre toi cumprtorii din judeele Bistria-Nsud, Braov i Cluj. n acelai raport dorii s includei toate locaiile firmei ANCONA SA, indiferent n ce jude s-ar afla ele. Desigur, se poate crea o clauza WHERE care s realizeze acest lucru, dar acum vei folosi operatorul UNION. Figura 4.10 conine tabelul cu cumprtorii, care o s fie folosit n acest exemplu.
CumparatorID 6001 6002 6004 6025 6083 6084 NumeCumparator ROMBAT SA AutoNET SRL SAVINA SRL COMPACT SRL ANCONA SA ANCONA SA JudCump BN MS MS BV MS CJ PersContact Pop Petru Beldean Vian Parauan Bicu Pietroi Sorina Palade Sorin Crisan Ovidiu Email ppop@rmbat.ro bvian@auto.ro pbicu@savina.ro sorina@yahoo.ro sorin@ancona.ro covi@ancona.ro

Fig. 4.10. Tabelul tblCumparatori

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

152

Baze de date

Capitolul 4

Prima instruciune SELECT va cuta cumprtorii din cele 3 judee amintite.


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

Rezultat:
NumeCumparator ROMBAT SA COMPACT SRL ANCONA SA JudCump BN BV CJ PersContact Pop Petru Pietroi Sorina Crisan Ovidiu Email ppop@rmbat.ro sorina@yahoo.ro covi@ancona.ro

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


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

Rezultat:
NumeCumparator ANCONA SA ANCONA SA JudCump MS CJ PersContact Palade Sorin Crisan Ovidiu Email sorin@ancona.ro covi@ancona.ro

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

153

Baze de date

Capitolul 4 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 ROMBAT SA COMPACT SRL ANCONA SA ANCONA SA

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

Rezultat:
NumeCumparator ANCONA SA ANCONA SA ANCONA SA COMPACT SRL ROMBAT SA JudCump CJ CJ MS BV BN PersContact Crisan Ovidiu Crisan Ovidiu Palade Sorin Pietroi Sorina Pop Petru Email covi@ancona.ro covi@ancona.ro sorin@ancona.ro sorina@yahoo.ro ppop@rmbat.ro

Observai nregistrarea dubl ANCONA SA, care apare din cauza operatorului UNION ALL. Iat cteva reguli pentru operaii cu operatorul UNION: Toate interogrile dintr-o operaie UNION trebuie s conin aceleai coloane, expresii sau funcii agregat. 154

Baze de date

Capitolul 4

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

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

Baze de date

Capitolul 4

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

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

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

156

Baze de date

Capitolul 4

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

Dup cum se vede, tabelul tblClienti este completat cu nregistrri din tabelul tblClientiNoi, dar pot fi i alte surse de interogare. Totul este ca numrul de cmpuri i tipul lor de dat s coincid.
Actualizarea datelor

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

Baze de date

Capitolul 4

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

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

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

Baze de date

Capitolul 4

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

Aceast expresie SQL, terge adresa de e-mail a clientului 1000245. Mai trziu, n capitolul 5 vei putea face teste i simulri cu actualizri de date pe o baz de date de test.
tergerea datelor

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

Aceast expresie SQL ar trebui neleas imediat, pentru c e foarte clar: din tabelul tblClienti se terge clientul care are cmpul ClientID la valoarea 1000378. De remarcat faptul c instruciunea DELETE nu conine nume de coloane, ea terge linii ntregi, nu coloane. Pentru a terge valorile din anumite coloane vei folosi instruciunea UPDATE, prezentat puin mai nainte. 159

Baze de date

Capitolul 4

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

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


Principii privind actualizarea i tergerea datelor

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

Baze de date

Capitolul 4

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

161

Baze de date

Capitolul 4

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

Text(50) NOT NULL, Text(80) NOT NULL, Text(10) NOT NULL, Number NOT NULL, Text(255)

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

Baze de date

Capitolul 4

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

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

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

Baze de date
DROP TABLE tblProduse;

Capitolul 4

Operaiunea nu este nsoit de nici un mesaj, nu poate fi anulat, tabelul rmnnd ters definitiv, aa c trebuie s fii extrem de precaui cnd facei o astfel de manevr.

Elemente performante ale limbajului SQL


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

164

Baze de date

Capitolul 4

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

165

Baze de date

Capitolul 4

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

166

Baze de date

Capitolul 4

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

n capitolul urmtor, vei avea ocazia s folosii limbajul SQL n cadrul sistemului de gestiune a bazelor de date relaionale ACCESS.

167

Baze de date

Capitolul 5

Capitolul 5. Utilizarea programului ACCESS


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

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

168

Baze de date

Capitolul 5

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

169

Baze de date

Capitolul 5

Permite utilizarea obiectelor ACCESS n alte aplicaii rulate sub Windows. Permite utilizarea de adrese i legturi Internet.

Interfaa programului ACCESS


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

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

Dup cum se vede, o baz de date ACCESS poate fi definit ca o colecie de obiecte: Tabele (tables) Cereri de interogare (queries) 170

Baze de date

Capitolul 5

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

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

171

Baze de date

Capitolul 5

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

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

Fig. 5.2. Fereastra Table

172

Baze de date

Capitolul 5

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

173

Baze de date

Capitolul 5

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

Baze de date

Capitolul 5

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

Fig. 5.3. Stabilirea integritii refereniale

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

175

Baze de date

Capitolul 5

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

Fig. 5.5. Tabela Relationship

176

Baze de date

Capitolul 5

Tabelele nu sunt de la nceput aa frumos aranjate. O s vedei cum vei gsi aceste tabele, dar prin tragere cu mouse-ul se pot aranja ca s fie mai uor de urmrit. ncercai aceste manevre pentru a v obinui cu ele.
Crearea relaiilor cu Lookup Wizard...

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

Fig. 5.6. Primul pas al procedurii Lookup Wizard

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

Baze de date

Capitolul 5

Fig. 5.7. Alegerea cmpului de legtur

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

Fig. 5.8. Recomandarea pentru a face invizibil cheia primar

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

Fig. 5.9. Avertizarea de salvare a relaiei create.

178

Baze de date

Capitolul 5

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

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

Baze de date

Capitolul 5

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

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

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

180

Baze de date

Capitolul 5

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

Baze de date

Capitolul 5

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


Crearea automat a unui formular

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

Fig. 5.10. Fereastra Database

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

Fig. 5.11. Fereastra NewForm

Din acest comboBox se alege tabelul asociat formularului

182

Baze de date

Capitolul 5

Din aceast fereastr alegem opiunea Form Wizard i alegem tabelul tblGrupe din caseta comboBox, apoi apsm butonul OK. n urma acestei manevre va apare fereastra din figura 5.12, cu ajutorul creia putem alege cmpurile care vor face parte din formular.

Fig. 5.12. Alegerea cmpurilor formularului

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

Fig. 5.13. Alegerea formei de prezentare

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

Baze de date

Capitolul 5

Fig. 5.14. Alegerea fundalului formularului

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

Fig. 5.15. Alegerea numelui formularului i ncheierea operaiunii

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

Fig. 5.16. Forma final a formularului

184

Baze de date

Capitolul 5

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

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

185

Baze de date

Capitolul 5

Bara de titlu

Toolbox caseta cu obiecte

Fig. 5.17. Forma iniial a formularului

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

186

Baze de date

Capitolul 5

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

Proprietatea Record Source stabilete tabelul asociat formularului

Fig. 5.18. Formularul, aa cum arat n modul Design


Proprietatea Control Source face asocierea ntre cele 3 casete de text i cmpurile tabelului asociat formularului

Observai cum se face legtura fiecrui cmp cu obiectul corespunztor. Trebuie numai s selectm fiecare obiect i la proprietatea Control Source s alegem cmpul corespunztor. Pentru ntregul formular trebuie s alegem tabelul asociat, n cazul prezentat acesta este tblGrupee.

187

Baze de date

Capitolul 5

Dup ce activm formularul cu butonul urmtoare, 5.19.

, acesta va arta ca n figura

Fig. 5.19. Formular obinut de la zero

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

188

Baze de date

Capitolul 5

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

Baze de date

Capitolul 5

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

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

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

Fig. 5.20. Tabelele implicate n formular

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

190

Baze de date

Capitolul 5

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

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

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

Fig. 5.21. Tabelele bazei de date

Pentru a crea cele dou interogri trebuie s ajungem n fereastra n care putem scrie expresiile SQL. Pentru aceasta trebuie s parcurgem paii: 191

Baze de date

Capitolul 5

Apsm butonul Queries, apoi dublu-click pe opiunea Create query in Design view. Se deschide fereastra cu cele 4 tabele. Apsm butonul Close. n partea stng-sus apare butonul , a crui apsare deschide fereastra n care se scriu pe rnd cele 2 expresii SQL, adic Interogarea 1 i Interogarea 2. Pentru a verifica interogrile se apas butonul Run toolbar-ul superior. Interogrile vor primi numele urmtoare: Interogarea 1 qryFacturi, iar Interogarea 2 qryDetaliiFacturi. Dac totul a decurs bine, trebuie s obinei ca rezultat al interogrilor tabelele din figura 5.22-1, cu observaia c datele vor fi, probabil, altele.
Interogarea 1

din

Interogarea 2

Fig. 5.22-1. Cele 2 interogri rezultate

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

Baze de date

Capitolul 5

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

Fig. 5.22-2. Setarea proprietilor pentru subformular

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

193

Baze de date

Capitolul 5

frmFacturi

frmDetaliiFacturi

Fig. 5.23. Formularul cu subformular, n modul Design

Cnd se activeaz formularul, adic se scoate din modul Design, acesta va arta ca n figura 5.24.

Butoane de navigare

Fig. 5.24. Formularul nostru n stare de funcionare

Cu ajutorul butoanelor de navigare, navigm printre facturi. La o anumit factur va fi afiat data emiterii i furnizorul, precum i detaliile facturii respective, cu ajutorul subformularului. ncercai s construii i alte formulare dup procedura prezentat, pentru a ctiga experien.

194

Baze de date

Capitolul 5

Interogri
Fr ndoial, interogrile sunt aciunile cele mai numeroase aciuni pe care o s le facei asupra unei baze de date. Prin interogri nu facem altceva dect s extragem informaii dintr-o baz de date, motivul pentru care acestea au fost create, nu-i aa? Interogrile care se definesc nc din faza de proi ectare 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 s deschidem fereastra

195

Baze de date

Capitolul 5

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

Fig. 5.25. Fereastra pentru scrierea expresiilor SQL

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

Fig. 5. 26. Butonul Run SQL

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

Baze de date

Capitolul 5

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

Fig. 5.27. Pasul 1 de creare a unei interogri

Din caseta New Query se se alege opiunea Design View OK. Se obine caseta din figura 5.28.

Fig. 5.28. Grila de proiectare a interogrilor

197

Baze de date

Capitolul 5

n caseta de dialog se d dublu-click pe tabelul care dorim s fie implicat n interogare, iar acesta va apare n zona de sus a formularului. Dac e nevoie de mai multe tabele, se repet aciunea iar la sfrit se nchide caseta cu butonul Close. Grila de proiectare seamn cu un tabel, a cror rnduri au urmtoarele semnificaii: Field aici se trag cu mouse-ul cmpurile interogrii; Table aici va apare automat numele tabelului la care aparine cmpul; Sort - aici se stabilete ordinea de sortare, ascendent sau descendent. Dac nu se scrie nimic sortarea va fi ascendent;

Show - dac este bifat, cmpul va fi vizibil, altfel nu; Criteria - aici se stabilesc criteriile pe care trebuie s le ndeplineasc cmpul;

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

Fig. 5.29. Gril completat

198

Baze de date

Capitolul 5

Se observ c primul cmp a fost folosit numai pentru sortare, el nefiind vizibil n interogare. Pentru vizualizarea interogrii se apas butonul Run ( ), iar rezultatul se vede n figura 5.30.

Fig. 5.30. Rezultatul interogrii

Expresia SQL generat automat de Access este urmtoarea:


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

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

199

Baze de date

Capitolul 5

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

Fig. 5.31. Fereastra Relationships

200

Baze de date

Capitolul 5

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

Fig. 5.32. Fereastra Edit Relationships

Stabilirea tipului de legtur se face prin fereastra Join Properties, care se deschide cu butonul Join Type (figura 5.33).

Fig. 5.33. Fereastra Join Properties

Cele 3 tipuri de opiuni au urmtoarele semnificaii: 1: - extrage numai nregistrrile din tabelul surs care au nregistrri echivalente n tabelul destinaie. 2: 3: - se mai numete legtur la stnga. - se mai numete legtur la dreapta.

b) Legtura prin Lookup Wizard se face n faza de creare a tabelului, cnd la alegerea tipului de dat se alege opiunea din figura 5.34. 201

Baze de date

Capitolul 5

Fig. 5.34. Alegerea cmpului Lookup Wizard

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

202

Baze de date

Capitolul 5

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

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

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

Fig. 5.35. Diagrama bazei de date

203

Baze de date

Capitolul 5

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

Fig. 5.36. Grila de proiectare

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


[Introduceti furnizorul:]

3. Vizualizai interogarea cu butonul figura 5.37.

, care va deschide caseta din

Fig. 5.37. Introducerea parametrului interogrii

Introducnd un furnizor existent, se va afia un tabel cu toate facturile emise de acesta. Dac dorim, putem vedea ce expresie SQL a generat Access-ul:

204

Baze de date
SELECT tblFurnizori.Furnizor, tblFacturi.NrFactura, tblFacturi.Data FROM tblFacturi INNER tblFurnizori.FurnizorID JOIN tblFurnizori ON

Capitolul 5
tblFacturi.FurnizorID =

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

Relum procedura i vom ncerca s afim facturile primite ntr-un interval de timp. Grila de proiectare trebuie s arate ca n figura 5.38.

Fig. 5.38. Grila de proiectare pentru un interval de timp.

Cele 2 cereri de parametri sunt artate n figura 5.39.

Fig. 5.39. Introducerea celor 2 parametri

Pornind de la aceste exemple, ncercai s construii i alte interogri cu parametri pentru a acumula experien.

205

Baze de date

Capitolul 5

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

206

Baze de date
tblFacturi FacturaID ChP NrFactura Data FurnizorID ChE tblDetaliiFacturi FacturaID ChE ProdusID ChE Cantitate Observatii tblProduse ProdusID ChP Denumire UM Pret ..............

Capitolul 5

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

Fig. 5.40. Diagrama bazei de date

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

Fig. 5.41. Alegem tabelul tblProduse i opiunea Tabular

207

Baze de date

Capitolul 5

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

Fig. 5.42. Partea de sus a raportului creat

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

208

Baze de date

Capitolul 5

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

Observai c pe lng cmpurile specificate s-au mai introdus cmpurile Furnizor i NrFactura care vor servi n raport pentru calcularea de subtotaluri. Rezultatul acestei interogri se poate vedea n figura 5.43.

Fig. 5.43. Interogarea folosit n raportul care va fi creat

Analiznd aceast interogare, mare lucru nu nelegem, nu putem trage nici o concluzie despre facturi, furnizori etc. Sunt cam amestecate, dar sunt reale i corecte. Ceea ce va trebui s facem este s aranjm aceste date ntr un raport tiprit care s fie inteligibil i apoi s-l prezentm efului, nu-i aa?

209

Baze de date

Capitolul 5

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

Fig. 5.44. Primul ecran al aplicaiei Report Wizard permite selectarea cmpurilor raportului

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

Fig. 5.45. Fereastra n care configurm nivelul de grupare

210

Baze de date

Capitolul 5

Se observ c prima grupare se face dup cmpul NrFactura, iar a doua dup cmpul Furnizor. Se trece la ecranul urmtor apsnd butonul Next. 7. n ecranul urmtor, putem sorta nregistrrile din detalii dup un anumit cmp. Noi am ales sortarea ascendent dup cmpul Denumire, dup cum se vede n figura 5.46.

Fig. 5.46. Ecran pentru modul de sortare

Din acest ecran, prin apsarea butonului Sumary Options se deschide un nou ecran n care putem indica cmpurile pe care se fac totalurile pariale. Acest ecran este artat n figura 5.47.

Fig. 5.47. Stabilirea coloanelor pentru sume.

Observai c au fost afiate numai coloanele cu valori numerice, iar pe lng sum se pot calcula media aritmetic, minimul i maximul de pe coloane. Dac nu vrem s apar n raport toate detaliile, activm opiunea Summary Only. Cu butonul OK se ajunge la ecranul precedent. Se apas butonul Next. 211

Baze de date

Capitolul 5

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

Fig. 5.48. Aranjarea datelor n pagin

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

Fig. 5.49. Alegerea modului de prezentare a raportului

Se apas butonul Next pentru a trece la ecranul urmtor. 10. n fine, am ajuns la ultimul pas al elaborrii raportului, n care ni se cere s i dm un nume, figura 5.50.

212

Baze de date

Capitolul 5

Fig. 5.50. Alegerea numelui i terminarea raportului.

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

Fig. 5.51. Raportul afiat n modul Design.

n acest mod de afiare a raportului, putem s micm cu mouse-ul obiectele, s le schimbm proprietile, aa cum fceam la crearea intefeelor n Visual Basic. Dup terminarea acestei operaiuni raportul nostru ar trebui s apar ca n figura 5.52.

213

Baze de date

Capitolul 5

Fig. 5.52. Forma final a raportului

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

214

Baze de date

Capitolul 5

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

Fig. 5.53. Afiarea n modul Design a formularului

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

Baze de date

Capitolul 5

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

216

Baze de date

Capitolul 5

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

217

Baze de date

Capitolul 5

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

Zon n care vor fi afiate argumentele aciunii curente.

Fig. 5.54. Fereastra Macro Design

218

Baze de date

Capitolul 5

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

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

Fig. 5.55. Macromand cu o singur aciune

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

Baze de date

Capitolul 5

Fig. 5.56. Frereastra Database cu 2 macro-uri

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

Baze de date

Capitolul 5

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

Fig. 5.57. Grupuri de aciuni

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

Baze de date

Capitolul 5

Rularea unei macrocomenzi din fereastra Database

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

1. Selectai din meniul principal opiunea: deschide caseta de dialog din figura 5.58.

Tools Macro Run Macro.

Se va

Fig. 5.58. Caseta Run Macro

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

O alt metod de execuie a macrocomenzilor, este rularea lor dintr-o alt macrocomand cu ajutorul aciunii RunMacro. n figura 5.57 se poate vedea cum se folosete aceast metod. La sfritul unui grup de aciuni se 222

Baze de date

Capitolul 5

introduce aciunea RunMacro care va lansa n execuie macrocomanda nominalizat de argumentul Macro Name.
Macrocomenzi ataate evenimentelor

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

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

223

Baze de date

Capitolul 5

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

Fig. 5.59. Exemplu de atribuire a unei combinaii de taste unei macrocomenzi

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

Ca o alternativ a macrocomenzii AutoExec, trebuie amintit aici c ncepnd cu versiunea Access 95, a fost introdus o posibilitate de setare a opiunilor de pornire a aplicaiilor. 224

Baze de date

Capitolul 5

Avnd deschis aplicaia ale crei opiuni de pornire vrem s le automatizm, dm comanda Tools Startup, care va deschide caseta de dialog din figura 5.60.

Fig. 5.60. Caseta de dialog Startup

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

Publicarea datelor pe Internet


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

Baze de date

Capitolul 5

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

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

opiunea

226

Baze de date

Capitolul 5

Bifai aceast opiune pentru a exporta i capul de tabel

Fig. 5.61. Crearea unei pagini HTML statice

4. Apsai butonul Export lsnd implicite celelalte opiuni cerute (Default endcoding). Vei obine o pagin HTML, aa cum se vede n figura 5.62.

Fig.5.62. Pagina HTML obinut, afiat cu Internet Explorer

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

227

Baze de date

Capitolul 5

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

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

228

Baze de date

Capitolul 5

Fig. 5.63. Pagin Web dinamic obinut cu AutoPage

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

Fig. 5.64. Avertismentul legat de conectarea la pagin

Pentru a v putea conecta la paginile create, folosind reeaua trebuie s editai conexiunea intrnd n codul HTML. Aceasta nu este o operaiune chiar simpl, de aceea trebuie efectuat de administratorul bazei de date.
Crearea paginilor dinamice cu Page Wizard

Utilizarea vrjitorului (wizard) pentru crearea paginilor Data Access este similar cu folosirea AutoPage, cu observaia c primul ofer mai mult flexibilitate. Utiliznd Page Wizard putei folosi mai multe surse de date i avei posibilitatea de a selecta cmpurile pe care dorii s le afiai. Iat paii pe care trebuie s-i parcurgei:

229

Baze de date

Capitolul 5

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

Fig. 5.65. Pagin Web dinamic obinut cu Page Wizard

230

Baze de date

Capitolul 5

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

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

Baze de date

Capitolul 5

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

Recomandri privind aplicaiile ACCESS


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

Baze de date

Capitolul 5

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

Baze de date

Capitolul 5

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

234

Baze de date

Anexe

ANEXE Anexa A. Administratorul de baze de date


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

Baze de date

Anexe

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

Baze de date

Anexe

Anexa B. Sintaxa instruciunilor SQL


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

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

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

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

237

Baze de date

Anexe

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

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

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

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

- tergerea unei coloane (exemplu):


ALTER TABLE tblProduse DROP COLUMN Furnizor;

DROP TABLE 238

Baze de date

Anexe

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

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

Bibliografie
[1] [2] [3] [4 Mocian Ioan, Baze de date Terminologie, Proiectare, SQL, Access, Editura MATRIX ROM, 2007. Michael J. Hernandez, Proiectarea bazelor de date, traducere din limba englez, Editura Teora, 2003. Susan Sales Harkins, Ken Hensen, Tom Gerhart, Utilizare Microsoft Access 2000, traducere din limba englez, Editura Teora, 2000. Nstase Pavel, s.a., Baze de date Microsoft Access 2000, Editura Teora, 2004.

[5]

Ben Forta, SQL pentru nceptori, traducere din limba englez, Editura Teora, 2002.

239

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