Sunteți pe pagina 1din 241

Ioan Mocian Baze de date - pentru uzul studenilor - 2008 -

Tehnoredactare computerizat: Ioan Mocian Tiparul executat la Atelierul de multipl icare 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 foar te multe astfel de cri i sunt foarte muli cunosctori ai domeniului. Pe de alt parte su nt i multe persoane care ar dori s se iniieze n domeniu, dar crile pe care le-au desch is i-au descurajat, datorit nivelului ridicat de prezentare. Acestora li se adres eaz aceast carte, oameni cu pregtire academic ntr-un domeniu conex, dar care au nevoi e 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 infor matician, trebuie s ai dorina de a studia i s ai o carte bun, orientat spre scopul ime diat 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 fo t 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 prezen tarea 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 ba zele 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 mu li specialiti i manageri sunt implicai n proiectarea de baze de date i sisteme informa tice fr s aib un minim de pregtire n domeniu. Se pleac de la constatarea c proiectare azelor de date nu are legtur cu implementarea lor (pe care o fac specialitii n infor matic), 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 int ermediul caietului de sarcini. Capitolul 4 este dedicat iniierii n limbajul SQL, u n limbaj apropiat de limbajul uman i uor de neles. Practica mi-a demonstrat c limbaju l SQL este repede asimilat i folosit pentru interogarea bazelor de date de ctre nce ptori. Exemplele prezentate aici sunt foarte sugestive, bine alese i pot fi folosi te ca modele pentru situaii concrete. Capitolul 5 este dedicat iniierii n sistemul de gestiune a bazelor de date ACCESS, folosind cunotinele dobndite n capitolele ante rioare. Aici se nva crearea tabelelor, formularelor, interogrilor i rapoartelor. 3

Exemplele prezentate sunt inspirate din situaii concrete, reale, care sunt bune m odele pentru propriile aplicaii. Expresiile SQL vor fi acum testate pe viu putndu-se verifica imediat corectitudinea lor i rezultatele obinute. Tot aici sunt prezenta te modalitile de transpunere a rapoartelor n format HTML pentru a fi publicate pe I nternet. Lucrarea se adreseaz studenilor facultilor de inginerie, dar este util i pers oanelor care au nvat bazele de date din mers i doresc s-i verifice i si sistematiz nele. 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 exp eriena acumulat; de a implementa aplicaii de baze de date n ACCESS, la nivelul firme lor 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 bogeasc bagajul de cunotine generale, dac ai reuit s nelegei ce este o baz de da e bun, dac ai reuit s creai o baz de date ACCESS i s o folosii ntrun scop util, da 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 4

Cuprins Cuvnt nainte ..................................................................... .......................... 3 Capitolul 1. Noiuni de baz despre bazele de date .... ............................... 11 Modelul de baz de date relaional ............... ........................................... 12 Regsirea datelor ................. ...................................................................... 13 Sistem e de gestiune a bazelor de date relaionale ..................................... 14 Dincolo de modelul relaional ................................................. .................. 15 ntrebri pentru autoevaluare ................................ .................................... 16 Capitolul 2. Terminologia bazelor de dat e relaionale ............................. 17 Importana terminologiei ............ .............................................................. 17 Termeni referi tori la valoare ................................................................ ..... 18 Date i informaii ........................................................ ......................... 18 Valoare nul ........................................ ................................................. 19 Termeni referitori la struc tur ................................................................... 20 Tabel ................................................................................ .................... 20 Cmp ..................................................... ............................................... 22 nregistrare .................. ......................................................................... 23 Ved ere ............................................................................ ...................... 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 r eferitori la integritate ....................................................... .......... 36 Specificaie de cmp ................................................. ........................... 36 Integritatea datelor ............................ ................................................... 36 ntrebri pentru autoevaluare .................................................................... 37 Capitol ul 3. Proiectarea bazelor de date relaionale ................................. 39 5

Etapa 1 Definirea unei declaraii de intenie i a obiectivelor misiunii .. 40 Compune rea 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 s tructurilor de date ........................................................ 46 Definirea listei finale de tabele .............................................. ............... 47 Asocierea cmpurilor fiecrui tabel ............................. ......................... 50 Utilizarea unui cmp ideal pentru rezolvarea anomalii lor .................... 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 Identifica rea relaiilor existente ......................................................... .. 80 Stabilirea caracteristicilor relaiilor .................................... ................. 87 Definirea unei reguli de tergere ........................... ............................ 87 Identificarea tipului de participare a fiecrui ta bel ........................... 88 Identificarea gradului de participare a fiecru i tabel ........................ 90 Integritatea la nivel de relaie ............. ................................................. 92 Etapa 5 - Determinarea i def inirea regulilor de desfurare a activitii 93 Reguli specifice cmpurilor ............. .................................................... 93 Reguli specifice relaiilo r ..................................................................... 96 Tabel e de validare .................................................................. .............. 97 Etapa 6 - Determinarea i definirea vederilor .................. ........................ 98 Etapa 7 - Revizuirea integritii datelor .............. ..................................... 102 Revizuirea i mbuntirea integritii datelor .. ................................ 103 6

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 d e date relaionale ................... 118 Capitolul 4. Iniiere n limbajul SQL ..... .................................................... 120 Prezentare general ..... .............................................................................. 1 20 Operaiuni simple folosind limbajul SQL ....................................... .......... 122 Regsirea datelor ................................................. .............................. 122 Sortarea datelor ............................ ..................................................... 123 Filtrarea datelor .... ............................................................................. 12 4 Operatorii clauzei WHERE .................................................. 12 5 Filtrare avansat .............................................................. ..... 126 Operaiuni avansate folosind limbajul SQL .............................. ................ 132 Cmpuri calculate ........................................... .................................. 132 Funcii pentru manipularea datelor ........ ........................................... 134 Gruparea datelor ............... ................................................................ 137 Crearea gru purilor ................................................................ 137 Fil trarea grupurilor .............................................................. . 139 Lucrul cu subselecii ...................................................... ................... 141 Unirea tabelelor ....................................... ......................................... 147 Crearea unei uniri simple ........ ............................................. 147 Uniri avansate ............... ....................................................... 138 Compunerea interogril or ................................................................. 151 Inserar ea, actualizarea i tergerea datelor ........................................ 155 I nserarea datelor ............................................................... .... 155 Actualizarea datelor .................................................. ........... 157 tergerea datelor ................................................ .................. 159 7

Principii privind actualizarea i tergerea datelor ................ 160 Crearea i ma nipularea tabelelor ....................................................... 162 Elemente performante ale limbajului SQL ........................................ ........ 164 Concluzii ......................................................... .................................. 167 Capitolul 5. Utilizarea programului ACCES S .......................................... 168 Prezentare general ............. ...................................................................... 168 Inter faa programului Access .......................................................... ........... 170 Crearea tabelelor .............................................. ......................................... 172 Relaii ntre tabele ................. ............................................................ 174 Crearea relaiilo r cu Lookup Wizard ................................................ 177 Introduc erea datelor n tabele ........................................................... 179 Formulare ................................................................. ................................. 181 Crearea unui formular .................... ................................................... 181 Crearea automat a unui fo rmular ......................................... 182 Crearea manual a unui formul ar ......................................... 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 un ui raport simplu ............................................................... . 206 Crearea unui raport cu Report Wizard ..................................... ......... 208 Particularizarea unui raport ..................................... .......................... 214 Macro-uri ....................................... ............................................................ 217 Crearea macroco menzilor cu o singur aciune ................................. 218 Crearea macrocom enzilor cu mai multe aciuni ................................ 220 Rularea macrocom enzilor .................................................................. 221 R ularea unei macrocomenzi din fereastra Database ............ 222 Rularea unei ma crocomenzi dintr-un grup ........................... 222 Utilizarea aciunii RunMa cro ............................................... 222 Macrocomenzi ataate eveni mentelor .................................. 223 Utilizarea macrocomenzilor AutoE xec i AutoKeys ........... 223 8

Metod rapid de pornire a aplicaiilor ............................... 224 Publicarea datelor pe Internet ........................................................... ........ 225 Pagini Web statice ................................................ ............................ 226 Pagini Web dinamice ........................... ............................................. 228 Crearea unei pagini dinamice d e 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 aplicaiilo r Access ..................................... 232 Anexe ....................... ................................................................................ ...... 235 Anexa A. Administratorul de baz de date .............................. ............ 235 Anexa B. Sintaxa instruciunilor SQL ............................ ..................... 237 Bibliografie ......................................... ............................................................ 239 9

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 s, ct i de specialitii din domeniul tehnologiei informaiei. E greu s ne gndim la un do eniu 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, med icul ne identific dintr-o baz de date cu pacieni, cnd ne prezentm la vot suntem ident ificai 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 uu rat 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 aju m la o carte, ea s poat fi localizat uor. Prin urmare, este clar c atunci cnd cutm o te n biblioteca personal, o gsim mai uor dac este ordine i o gsim greu sau deloc dac nem 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 est e folosit de multe ori n mod eronat, confundndu-se cu softul pentru baz de date car e este utilizat. n realitate, softul pentru baze de date este numit sistem de ges tiune a bazelor de date (SGBD), iar baza de date este recipientul care conine inf ormaiile, recipient creat i manipulat prin intermediul SGBD. Coninutul acestui reci pient se schimb foarte des, atunci cnd se lucreaz cu baza de date (adugri, tergeri i m dificri de informaii). Baza de date este perceput de multe persoane ca fiind un sim plu 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 b aze 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 m ulte probleme de gestionare a unor informaii. Bazele de date clasice conin mai mul te tabele care sunt legate ntre ele prin relaii care vor fi studiate mai trziu. Exi st 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 fo losesc 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 d e baze de date n gestiunea bazelor de date. Acest model este fundamentat pe dou ra muri ale matematicii teoria mulimilor i logica predicatelor de ordinul nti. ntr-adevr numele modelului provine de la termenul relaie, care constituie o parte a teorie i mulimilor. O concepie greit, larg rspndit, este aceea c modelul relaional i-ar fi t numele de la faptul c ntre tabelele unei baze de date relaionale exist relaii. O ba z de date relaional stocheaz datele n relaii, pe care un utilizator le percepe ca pe n ite tabele. Fiecare relaie este compus din nregistrri i cmpuri, iar ordinea fizic a strrilor sau a cmpurilor dintr-un tabel este complet lipsit de importan, iar fiecare n registrare 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 fi zic a unei nregistrri aa cum se ntmpl la celelalte modele de baz de date (ierarhic i , 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 detali u 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 tblS ectii sunt corelate prin intermediul cmpului SectiaID; un anumit student este cor elat cu o secie prin intermediul unui identificator de secie identic. Atta timp ct u tilizatorul cunoate relaiile dintre tabelele incluse ntr-o baz de date, poate avea a cces la date ntr-un mare numr de moduri. De exemplu, dup cum se vede n figura 1.1, p rin intermediul acelei relaii, putem afla numele seciei i crei faculti aparine. Dac t lul ar conine mai multe coloane, am avea acces la toate coloanele, aa cum vom vede a 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 s pecializat 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 cmpur ile 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 d etaliat n capitolul 4. Sistemele de gestiune a bazelor de date relaionale Un sistem de gestiune a bazelor de date relaionale (SGBDR) este un program softwa re folosit pentru crearea, ntreinerea, modificarea i manipularea unei baze de date relaionale. Numeroase programe SGBDR furnizeaz i instrumentele necesare pentru a pu tea crea aplicaii destinate utilizatorilor finali care lucreaz cu datele din baza de date. Numeroasele faciliti oferite de diferii productori evolueaz foarte rapid, de venind din ce n ce mai performante. Primele SGBDR-uri au fost concepute pentru si steme de tip desktop. Acestea presupun existena unei copii a bazei de date pe fie care calculator care nu este un mare avantaj, n ceea ce privete actualizarea datel or. 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-s erver n care bazele de date se stocheaz pe un server de baze de date, iar utilizat orii interacioneaz cu datele prin intermediul unor aplicaii rezidente pe propriul c alculator numit clientul bazei de date. Creatorul de baze de date folosete progra mul client-server SGBDR pentru a crea i ntreine programele de aplicaie de baze de da te i programele accesorii pentru utilizatorul final. Acesta implementeaz integrita tea 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 afe cta integritatea i securitatea datelor. Cele mai cunoscute SGBDR-uri sunt: Micros oft Access Microsoft SQL Server Oracle MySQL PostgreSQL Microsoft Access este un SGBDR comercial de tip desktop, folosit pentru gestionarea bazelor de date de d imensiuni 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. Or acle este liderul mondial al pieei SGBDR-urilor de tip client-server. Oracle acce pt baze de date enorme i un numr imens de tranzacii. Oracle ruleaz pe numeroase siste me de operare, este un SGBDR complex a crui operare i ntreinere trebuie fcute de un a dministrator special instruit pentru acest scop. Se ntlnete la marile companii tran snaionale, deoarece preul su este pe msura performanelor. MySQL este un SGBDR din cat egoria 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 dime nsiuni, dar i lipsesc cteva din caracteristicile importante ale limbajului SQL. Ve rsiunile viitoare i propun includerea acestor caracteristici. Ruleaz pe mai multe s isteme de operare i este gratuit pentru utilizarea n scopuri personale(care nu adu c un ctig). PostgreSQL este un SGBDR din categoria open-source, fiind unul din lid erii 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 afacer i concrete, precum inventarele, gestiunea pacienilor, a materialelor i pieselor, n domeniul bancar, dar s-au dovedit a lipsi n aplicaii de genul proiectrii asistate d e calculator (CAD), sisteme informaionale geografice (GIS) i sisteme de stocare mu ltimedia. 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 ncorp oreaz toate caracteristicile unui limbaj de programare orientat spre obiect, iar baza de date relaional este retrogradat la statutul de magazie de date. Ideea funda mental este c dezvoltatorul bazei de date trateaz fiecare aspect al acesteia, inclu siv setul de operaiuni care manipuleaz datele din baza de date, din interiorul lim bajului de programare a bazei de date orientat obiect. Nu mai exist o diferen clar ntr e programul de baz de date i programul de realizare a aplicaiilor. Dei este un pas na inte, 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, ncapsul are i motenire. Ideea era ca aceste extensii s permit unei baze de date relaionale s g estioneze i s manipuleze tipuri de date complexe, precum secvene audio sau video i d esene sau reprezentri grafice. Modelul relaional obiect nc nu a fost definitivat, se mai lucreaz la el, majoritatea specialitilor consider c aceasta este direcia corect. El este exploatat i rafinat n continuare. Internetul exercit o mare influen asupra mo dului de utilizare a bazelor de date n cadrul organizaiilor. Multe companii i aface ri folosesc Web-ul pentru a-i extinde baza de consumatori, iar o bun parte din dat ele oferite acestor consumatori, respectiv pe care le preiau de la acetia, sunt s tocate ntr-o baz de date. Internetul a generat un limbaj numit XML (eXtensible Mar kup Language) capabil s partajeze date din diferite sisteme eterogene. Muli product ori de SGBDR se orienteaz spre ncorporarea a ct mai multe caracteristici XML n propr iile produse. Cu toate noile orientri prezentate, bazele de date relaionale pe car e le vom studia nu vor dispare n viitorul apropiat.

ntrebri pentru autoevaluare De unde vine termenul de baz de date relaional? Cum se st ocheaz datele ntr-o baz de date relaional? Denumii cele trei tipuri de relaii existent ntr-o baz de date relaional. Indicai cteva avantaje ale bazelor de date relaionale. C este un sistem de gestiune a bazelor de date relaionale? Care sunt cele mai cuno scute 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 r elaionale, pentru a evita confuziile fcute de unii membri implicai n procesul de pro iectare sau exploatare.

Importana terminologiei Este important s nelegem termenii prezentai n acest capitol nainte de a ncepe studiul azelor de date relaionale. Proiectarea bazelor de date are un set de termeni spec ifici ca, de altfel, orice profesie, meserie sau disciplin. Iat cteva motive care j ustific importana nvrii acestor termeni: Termenii respectivi sunt utilizai pentru a exprima i defini ideile i conceptele spe ciale 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 procesu de proiectare a bazelor de date. Procesul de proiectare devine mai clar i mult m ai simplu de neles, dup ce v-ai familiarzat cu aceti termeni. Termenii respectivi sun t utilizai oriunde se discut despre o baz de date relaional sau despre un program SGB DR. Vei ntlni aceti termeni n publicaii cum ar fi reviste de comer, manuale de program re SGBDR, suporturi de cursuri etc. De asemenea, vei auzi aceti termeni n conversaii le 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 refer itori 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. ura 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 c e reprezint numrul 6582421 sau celelalte, chiar dac observm c una din valori este o d at 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 semn ificaie i utilitate pentru noi atunci cnd lucrm cu respectivele date.George Fodorsun t dinamice, n sensul c se modific n Informaiile 6582421 12/05/2004 57.50se modific dat ele din baza de date, dar i n sensul permanen dup cum c pot fi prelucrate ntr-un numr limitat 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 date le din exemplul precedent pot fi prelucrate i transformate n iformaii. Datele respe ctive 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: C od 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 trans formate 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 pro ectat astfel nct s furnizeze informaii semnificative pentru orice persoan abilitat din cadrul unei firme sau organizaii. Aceste informaii pot fi puse la dispoziie numai d ac datele corespunztore exist n baza de date i dac aceasta din urm este astfel structu at nct s permit obinerea informaiilor respective. Dac uitai vreodat care este difer re date i informaii, reinei urmtoarea axiom: Datele se stocheaz, iar informaiile se r sc. Din pcate, exist cri comerciale n care se confund datele cu informaiile. Valoare n l 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 p rodus, numrul de apariii a unui cod etc. Dei un ir text format din unul sau mai mult e spaii albe nu nseamn nimic pentru cei mai muli dintre noi, reprezint categoric semn ificaie pentru un limbaj de interogare cum ar fi SQL. Un spaiu alb este un caracte r 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 ate 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 v a 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 valor ilor nule este acela c pot avea efect negativ asupra calculelor matematice, tiut f iind 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 folo site 19

Baze de date Capitolul 2 sau nu n expresii matematice sau funcii agregat, vor fi luate n considerare n decurs ul 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 rel aie este alctuit din nregistrri (tupluri) i cmpuri (atribute). n figura 2.3 este prez at 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 repr ezint ntotdeauna un singur subiect concret, cum ar fi studeni, produse, vnzri etc. Or dinea logic a nregistrrilor i a cmpurilor din cadrul unui tabel nu are nici o importa n, iar fiecare tabel conine cel puin un cmp cunoscut sub numele de cheie primar car dentific n mod unic fiecare nregistrare a tabelului. n figura 2.3, StudentID este ch eia 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 put ea 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 persoa n, un produs sau un lucru oarecare. Indiferent de tipul su, un obiect are caracter istici care pot fi stocate sub form de date, care vor putea fi prelucrate ulterio r ntr-un numr mare de moduri. Cnd subiectul unui tabel este un eveniment, nseamn c tab elul reprezint ceva care se produce la un anumit moment de timp i care are caracte ristici pe care dorii s le nregistrai. Exemplul clasic care se poate da aici este ta belul 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 <<a lte 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 reprez int 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 in formaii ntr-o anumit form sau manier. Cu astfel de tabele vei lucra foarte frecvent n ecursul lucrului cu baza de date. Tabele de validare care stocheaz date pe care l e 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 ingineri e. 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 d n baza de date i reprezint o caracteristic a subiectului tabelului cruia i aparine. Cm urile sunt structurile care stocheaz efectiv datele, care apoi pot fi regsite i pre zentate 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 c dintr-o baz de date corect proiectat conine singur valoare, iar numele su va identif ica tipul de valoare admis. Astfel, procesul de introducere a datelor devine foa rte intuitiv. Dac vedei cmpuri cu nume precum Nume, Prenume, Judet, Localitate, Tel efon sau Cod postal, atunci vei ti exact ce tipuri de date vei introduce n fiecare cm p. De asemenea, va fi foarte simplu s sortai datele n funcie de jude ori s cutai pers ele dintr-o anumit localitate a unui jude. ntr-o baz de date slab proiectat sau proie ctat inadecvat, vei ntlni n mod caracteristic alte trei tipuri de cmpuri, dup cum urme z: Un cmp multiplu (numit i cmp cu mai multe pri) care conine dou sau mai multe elemente istincte n cadrul valorii acestuia. Un cmp cu valori multiple (numit i cmp cu mai mu lte valori) care conine mai multe apariii ale aceluiai tip de valoare. Un cmp calcul at, care conine o valoare de text concatenat sau rezultatul unei expresii matemat ice. 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. nregistrar a 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 nregis trare este definit n baza de date prin intermediul unei valori unice a cmpului chei e primar a nregistrrii respective. Astfel, dac avem un tabel de persoane, o nregistra re 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, ia r cmpul ProdusID este folosit pentru a identifica un produs din cadrul bazei de d ate. La rndul su, fiecare nregistrare include toate cmpurile din tabel, iar fiecare cmp descrie un aspect al produsului reprezentat de nregistrare. nregistrrile reprezi nt un element cheie pentru nelegerea relaiilor dintre tabele, deoarece va trebui s cu noatei 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 ta bele 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 deo arece i preia datele din tabele de baz, nui stocheaz propriile sale date. De fapt, si ngurele informaii referitoare la o vedere care sunt stocate n baza de date se refe r la structura vederii respective. Numeroase programe SGBDR principale lucreaz cu vederi, dar unele (precum Microsoft Access) le denumesc interogri salvate. Progra mul SGBDR pe care l utilizai va determina dac obiectul respectiv va fi denumit inte rogare 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 baze az 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 Ga briel Olimpiu Denumire PUC PUC Baze de date Baze de date Data 3/10/2004 3/10/200 4 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 manip ula 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 determin ate n cadrul unui tabel, iar tipul cheii definete rolul acesteia n interiorul tabel ului. Un tabel poate conine numeroase tipuri de chei, dar cele mai importante sun t cheia primar i cheia extern. O cheie primar este un cmp sau un grup de cmpuri care i dentific n mod unic fiecare nregistrare din cadrul unui tabel; dac o cheie primar est e compus din dou sau mai multe cmpuri, este cunoscut sub numele de cheie primar compo zit. 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 c adrul unui, aceasta fiind cea mai important proprietate a acesteia. De regul, chei le primare vor fi nite coduri numerice, uneori generate chiar de sistemul de gest iune a bazei de date, cum ar fi sistemul Access, pe care o s-l studiem n cadrul ac estui curs i care tipul de dat AutoNumber, special gndit pentru generarea cheilor p rimare. 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 pr imar 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 ex tern pentru tabelul Sportivi. Acolo unde este cheie extern, valoarea ei se poate r epeta, ceea ce este firesc, deoarece un impresar poate avea mai muli sportivi. Cmp ul ImpresarID din cele dou tabele asigur legtura dintre ele, asigurnd n acelai timp i ntegritatea datelor, adic fiecare sportiv are un impresar valabil. Cnd determinai c n tre dou tabele exist o relaie, n mod caracteristic stabilii relaia respectiv prelund opie a cheii primare din primul tabel i ncorpornd-o n structura celui de-al doilea t abel, unde devine cheie extern. Numele de cheie extern deriv din faptul c al doilea ta bel are deja o cheie primar proprie, iar cheia primar pe care o introducei din prim ul tabel este extern pentru al doilea tabel. Dincolo de facilitatea stabilirii relai ilor dintre perechi de tabele, cheile externe contribuie i la implementarea i asig urarea integritii la nivel de relaie. Aceasta nseamn c nregistrrile din ambele tabele r fi ntotdeauna corelate n mod adecvat, deoarece valorile unei chei externe trebui e 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 uno puri pe care doresc s le foloseasc pentru legtura a dou tabele. De asemenea, integri tatea la nivel de relaie permite evitarea periculoaselor nregistrri orfane, un exempl u 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 p utei prelucra i, evident, nu o putei factura, iar asta o s v duc de rp vnzrile trim e. Cmpurile cheie joac un rol important ntr-o baz de date relaional, iar dumneavoastr rebuie 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 lo gic 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 re prezint o alt pereche de termeni folosii eronat n mod frecvent i pe scar larg n indus a bazelor de date. (Mai inei minte deosebirile dintre date i informaii?). Vei sesiza n totdeauna diferena dintre cei doi termeni dac reinei c, n timp ce cheile sunt structur i logice pe care la identificarea nregistrrilor dintr-un tabel, indecii reprezint st ructuri 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 ociate cu nregistrrile din al doilea tabel. Relaia se poate stabili prin intermediu l 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 ilustr eaz o relaie stabilit prin intermediul cheilor primare i al cheilor externe, iar fig ura 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 Pr enume Remus Zoltan Florian Sebastian Vasile OrasStudent Reghin Oradea Zalau Bras ov 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, n truct contribuie la cantitii de date redundante i la eliminarea datelor duplicate. P utei caracteriza o relaie n trei moduri: n funcie de tipul relaiei dintre tabele, de m aniera 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 d primul tabel este corelat cu o singur nregistrare din al doilea tabel i o singur nregi strare 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 ser vete ca tabel printe, iar cellalt ndeplinete rolul de tabel copil. Relaia se stabil preluarea unei cpii a cheii primare a tabelului printe i ncorporarea acesteia n stru ctura 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 tabe l. Salariai SalariatID 100 101 102 103 Nume Ban Pop Lazr Crian Prenume Ioan Dorin Livi u 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 a te 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 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 ex o relaie unu cu mai muli cnd o nregistrare din primul tabel poate fi corelat cu una s au mai multe nregistrri din al doilea tabel, n timp ce o nregistrare din al doilea t abel 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 pe ntru a descrie o relaie unu cu unu se aplic i n acest caz, partea unu a relaiei este t belul 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 exter n. 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.> ....... ....... ....... ....... ....... Imp rumuturi ClientID 9002 9001 9004 9003 9003 9003 9002 9005 9005 CarteID 5648 6904 23 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 nregi strri din tabelul IMPRUMUTURI, dar o nregistrare din tabelul IMPRUMUTURI este core lat cu o singur nregistrare din tabelul CLIENTI. Dup cum probabil ai dedus, cmpul Clie ntID 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 ificat. Relaia este extrem de important din punct de vedere al integritii datelor, d eoarece ea v ajut s eliminai datele duplicate. Relaii de tip mai muli cu mai muli n 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 a l 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 cella 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 chei i primare din fiecare tabel i utilizarea lor pentru a forma structura noului tabe l. n realitate, aceste cmpuri ndeplinesc dou roluri distincte: mpreun formeaz cheia pr mar 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 m i muli cu mai muli nerezolvat. n acest exemplu, o nregistrare din tabelul STUDENTI po ate fi corelat cu mai multe nregistrri din tabelul CURSURI, n timp ce o singur nregist rare din tabelul CURSURI poate fi corelat cu mai multe nregistrri din tabelul STUDE NTI. 32

Baze de date Studenti StudID 6001 6002 6003 6004 6004 Cursuri CursID C001 C213 C 032 C015 G001 G004 G007 Denumire PUC Baze de date SIM GD AutoCAD Inventor Intell icad Credite 5 5 4 5 4 5 4 ProfesorID 25461 25461 56821 12843 32584 3212 25461 S ala 208 208 209 207 207 208 208 Nume Pop Szabo Costea Timocea Mocean Prenume Rem us Zoltan Florian Sebastian Vasile OrasStudent Reghin Oradea Zalau Brasov Fagara s 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 m li cu mai muli. Principala problem este urmtoarea: cum se pot asocia cu uurin nregist 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 CU RSURI sau mai multe cmpuri Curs n tabelul STUDENTI? Oricare din aceste metode va ng reuna 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 rela ei. 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 Z alau Brasov Fagaras Cursuri CursID C001 C213 C032 C015 G001 G004 G007 <<alte cmpu ri>> ........ ........ ........ ........ ........ Orar StudID 6001 6002 6002 6001 6002 6003 6003 6001 6003 6001 CursID C001 C213 C 001 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 da t determin dac n respectivul tabel trebuie s existe o nregistrare nainte de a putea in troduce nregistrri n tabelul corelat. Exist dou tipuri de participri: Obligatorie - tabelul trebuie s conin cel puin o nregistrare nainte de a putea introdu ce nregistrri n tabelul corelat. Opional nu este obligatoriu ca tabelul s conin vre istrare 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 part icipare este evident, este de bun sim sau este n concordan cu un anumit set de stand arde. 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 re laie. Pentru aceasta trebuie s rspundem la cteva ntrebri. Putem introduce nregistrri belul 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 IMPRUMUT URI are un tip de participare opional, pentru aceast relaie. La ntrebarea dac putem in troduce nregistrri n tabelul IMPRUMTURI dac nu avem nici o nregistrare n tabelul CLIEN TI, rspunsul este NU, pentru c trebuie s avem cel puin un client la care s mprumutm, d ci tabelul CLIENTI are un tip de participare obligatorie, pentru aceast relaie. Gr adul de participare Gradul de participare determin numrul minim de nregistrri existe nte ntr-un tabel al unei relaii, asociate cu o singur nregistrare a unui tabel corel at, 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 d intre dou tabele A i B. Se stabilete gradul de participare pentru tabelul B prin in dicarea numrului minim, respectiv maxim de nregistrri din tabelul B, prin indicarea numrului minim, respectiv maxim de nregistrri din tabelul B care pot fi corelate c u o singur nregistrare din tabelul A. Dac o nregistrare din tabelul A poate fi corel at cu minimum o nregistrare din tabelul B, respectiv cu maximum 10 nregistrri din ta belul 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 dreapt , separate prin virgul). Putei stabili gradul de participare pentru tabelul A, n ac elai mod. Putei identifica gradul de participare, pentru fiecare tabel al unei rel aii 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 (d 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 numa 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 s pecificaie de cmp ncorporeaz trei tipuri de elemente: generale, fizice i logice. Elem entele generale reprezint informaiile fundamentale referitoare la cmp i includ eleme nte precum numele cmpului, descrierea i tabelul printe. Elementele fizice determin m odul de construire a unui cmp i modul de reprezentare a acestuia pentru persoana c are 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 a rticole 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 datel or 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 perm is s-l subestimai, s-l trecei cu vederea i nici mcar s-l neglijai parial. Trebuie s ient 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 p osibile 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 pr ocesului de proiectare a bazelor de date. Trei dintre acestea se bazeaz pe diferi te aspecte ale structurii bazei de date i sunt denumite n conformitate cu zona (ni velul) 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 pre te descrierile fiecrui tip de integritate. Integritatea la nivel de tabel asigur l ipsa 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 fieca e cmp sunt valide, consecvente i precise, precum i c se asigur o definire consecvent, ntreaga baz de date, a cmpurilor de acelai tip (Cod postal, de exemplu). Integritat ea la nivel de relaie (cunoscut i sub numele de integritate referenial) asigur solidit atea relaiei dintre dou tabele, precum i faptul c nregistrrile din tabele sunt sincron izate ori de cte ori se introduc, se actualizeaz sau se terg date din oricare dintr e cele dou tabele. Reguli de desfurare a activitii impun restricii sau limitri asupr numitor aspecte ale bazei de date, pe baza modalitilor n care o organizaie i percepe i actualizeaz datele. Aceste restricii pot afecta aspecte ale proiectrii bazelor de d ate, precum i intervalul i tipurile de valori stocate ntr-un cmp, tipul i gradul de p articipare a fiecrui tabel n cadrul unei relaii, precum i tipul de sincronizare util izat pentru integritatea la nivel de relaie, n anumite relaii. ntrebri pentru autoeva luare 1. De ce este important terminologia? 2. Care sunt cele patru mari categori i de termeni? 3. Care este diferena dintre date i informaii? 4. Ce reprezint valoare a 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 tip uri de tabele? 7. Ce este o vedere? 8 .Care este diferena dintre o cheie i un inde x? 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 spec ificaii de cmp? 12. Ce este integritatea datelor? Care sunt tipurile de integritat e? 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 el de baz de date.

Acum cnd am vzut din ce e format o baz de date, cnd cunoatem i nelegem termenii baze e date relaionale, e momentul s trecem la proiectarea acestora. A nelege cum se proi ecteaz 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 proce sul de proiectare a bazelor de date relaionale, precum i o imagine general a etapel or pe care le implic procesul respectiv. nainte de a implementa o baz e date, aceas ta trebuie proiectat, chiar dac este una mai simpl. De menionat faptul c indiferent d e 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 Anal iza bazei de date curente; Etapa 3 Crearea structurilor de date; Etapa 4 Determi narea i instituirea relaiilor ntre tabele; Etapa 5 Determinarea i definirea regulilo r de desfurare a activitii; Etapa 6 Determinarea i definirea vederilor; Etapa 7 Veri icarea integritii datelor. Trebuie s mai menionez faptul c ntregul proces de proiectare se face fr ajutorul vreun ui program, calculatorul este folosit numai la editarea documentelor acestui pro ces, aa cum vom vedea mai departe i la orele de laborator. n continuare se vor deta lia 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 decla raii de intenie i a obiectivelor misiunii bazei de date. Aceast declaraie stabilete fi nalitatea bazei de date i ofer o orientare distinct pentru activitatea de proiectar e. Fiecare baz de date este creat cu un anumit rost, fie pentru rezolvarea unei an umite probleme de afaceri, gestiunea unor tranzacii zilnice, gestiunea unei magaz ii, fie pentru a fi utilizat ca parte a unui sistem informaional. Destinaia bazei d umneavoastr de date este identificat i definit ntr-o declaraie de intenie. Aceasta con ribuie la asigurarea dezvoltrii unei structuri de baze de date adecvate, precum i identificarea acelor date care duc la atingerea scopului propus. Pe lng declaraia d e intenie, n aceast etap trebuie definite i obiectivele misiunii. Obiectivele misiuni i sunt declaraii care reprezint sarcinile generale pe care utilizatorii le pot ndep lini folosind baza de date. Aceste obiective sprijin i completeaz declaraia de inteni e, determinnd n acelai timp diferitele aspecte ale structurii bazei de date. Obiect ivele misiunii se mai pot numi i caiet de sarcini, termen nc folosit pentru definir ea cerinelor beneficiarului. Declaraia de intenie i obiectivele misiunii fiind docum ente foarte importante n proiectarea unei baze de date se pune ntrebarea, cine ela boreaz aceste documente? Declaraia de intenie este elaborat de dezvoltatorul bazei de date (Dvs.) mpreun cu co nductorul(patronul) firmei i personalul de conducere care este responsabil de defi nirea 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, alt s-ar putea ajunge la situaii de genul nu asta am cerut sau eu altceva am neles din ac east fraz. Obiectivele misiunii sunt elaborate de dezvoltatorul bazei de date (Dvs. ) mpreun cu personalul de conducere i utilizatorii finali (cei care vor lucra efect iv cu aplicaia). Aceast componen este necesar pentru c utilizatorii finali pot avea id ei 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 obie t. Declaraiile vagi sau ambigui nu fac altceva dect, mai degrab, s ascund scopul baze i 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 ref are la un anume client sau furnizor, ntr-un anumit interval de timp sau la o anum it dat. Aceast declaraie este foarte general, nu conine date inutile, este scurt i se de clar la ce va fi folosit: s furnizeze informaii despre starea unui client sau fu rnizor, att de importante n activitatea unei firme. Facei analogia dintre o declarai e de intenie i o lumnare cu care traversm un tunel ntunecos, adic lumnarea nu ne d am e despre cum s traversm tunelul dar ne ghideaz spre captul lui. Iat un exemplu de dec laraie de intenie formulat defectuos: Rolul bazei de date a firmei SC AZUR SRL cons t din a pstra evidena aplicaiilor pentru utilizarea terenurilor, pstrarea datelor cu privire la solicitani, pstrarea unei nregistrri a tuturor audierilor, a tuturor deci ziilor, a tuturor apelurilor, pstrarea datelor referitoare la angajaii departament ului i ntreinerea datelor n vederea utilizrii generale n cadrul biroului. Aceast decla aie de intenie are urmtoarele neajunsuri: este prolix, adic nu este succint i la obi ; finalitatea bazei de date nu este clar; este astfel scris nct este dificil de iden tificat finalitatea bazei de date; descrie numeroase operaii concrete, care nu-i a u rostul. Cum am putea corecta aceast declaraie de intenie? Iat un exemplu: Rolul ba zei 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 operaii le i nu d impresia c ar fi incomplet. Compunerea unei declaraii de intenie presupune d in partea dumneavoastr, a dezvoltatorului purtarea de discuii cu patronul sau mana gerul societii respective, pentru aflarea de informaii despre aceasta, profilul ei de activitate etc. Deci, prima discuie cu patronul apoi cu ceilali membrii ai cond ucerii sau ali specialiti indicai de patron. Ai putea s v ntrebai de ce atta zarv p na sau dou fraze pe care le conine declaraia de intenie? Nu uitai c declaraia de inten 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. C el mai important aspect care trebuie reinut este acela c declaraia de intenie trebui e 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 formula rea depinde mult de terminologia specific domeniului de activitate. Declaraia dumn eavoastr de intenie este complet atunci cnd conine o propoziie care descrie finalitate a concret a bazei de date, care este neleas i aplicat de toate prile implicate. Defin a obiectivelor misiunii Obiectivele misiunii sunt declaraii care reprezint sarcini le 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 decu rsul procesului de proiectare a bazei de date. De exemplu, obiectivele misiunii permit definirea structurii tabelelor, a specificaiilor de cmp, a caracteristicilo r de relaie i a vederilor. De asemenea, v ajut s impunei integritatea datelor i s def regulile de desfurare a activitii. n final, obiectivele misiunii sunt de natur s ndr 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 pr opoziie cu caracter declarativ, care definete fr echivoc o sarcin de ordin general i c are este lipsit de detalii inutile. Un obiectiv se exprim n termeni generali, succi nt, 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 factu emise. Dorim s pstrm evidena tuturor recepiilor. Dorim s ne asigurm c un agent de v u rspunde de mai mult de 15 clieni. Dorim s pstrm evidena tuturor reparaiilor mainilo in 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 ob iectiv reprezint o sarcin unic de ordin general i definete clar sarcina respectiv, fr talii inutile. De exemplu, ultimul obiectiv de misiune prezentat n lista anterioa r indic faptul c se dorete generarea unor liste cu angajai nu i modul n care vor fi ge erate. Nu este necesar indicarea modalitii de generare a listelor de angajai, deoare ce acest aspect face parte din procesul de dezvoltare a aplicaiei. De reinut c fina litatea unui obiectiv de misiune const din definirea diferitelor structuri din co mpoziia 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 a utoevaluare 1. Ce este o declaraie de intenie ? 2. Indicai dou caracteristici ale un ei 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. In dicai 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 su ntem pe un pmnt virgin, c naintea noastr s-au mai folosit baze de date, s-au manipula t informaii, aa c este nelept s vedem ce exist pentru a putea prelua unele informaii. 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 d ate. Pentru v face o imagine despre organizaie (firm) i informaiile cu care lucreaz, v a trebui s rspundei la urmtoarele ntrebri:

Ce tipuri de date folosete organizaia? Cum folosete organizaia datele respective? C m gestioneaz i pstreaz organizaia datele respective? Rspunsurile la aceste ntrebri, v r informaii vitale, pe care le putei utiliza eficient n proiectarea bazei de date ca re 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 b eneficiarii (cei care rspund la ntrebri). Este foarte probabil ca organizaia s utiliz eze 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 d ocumente manuscrise stocate n dosare. Dosarele sunt identificate cu ajutorul unor coduri scrise pe ele, apoi sunt puse n fiete prin intermediul unei scheme de codi ficare, n funcie de dimensiunea bazei de date. Aceste baze de date sunt mai difici l de neles, de aceea este necesar conlucrarea cu persoane din firm care lucreaz efect iv cu aceste informaii. Baze de date motenite sunt acele baze de date care au exis tat i au fost folosite mai muli ani. Ele sunt alctuite din diferite tipuri de struc turi de date i ecrane de interfa cu utilizatorul, care se gsesc toate ntr-un calculat or personal. Randamentul, funcionalitatea i eficiena structurilor i ecranelor sunt e xtrem 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 a tunci cnd aceste standarde nu existau. Baze de cunotine umane se bazeaz pe memoria u nuia sau mai multor angajai din cadrul organizaiei. Aceste persoane posed un anumit volum de informaii (de exemplu date despre clieni, furnizori sau detalii despre u n anumit produs) care sunt foarte importante pentru derularea activitii organizaiei respective. Aceste informaii trebuie interceptate n vederea introducerii lor n baz a 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, mo ul n care le vizualizeaz i le utilizeaz. n decursul analizei vei trece n revist difer le moduri n care organizaia i colecteaz i prezint datele, dup serii de discuii purta 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 ceast list pentru eliminarea cmpurilor duplicate i a celor calculate i plasarea acest ora 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 furnize az un punct de nceput pentru proiectarea unei noi baze de date. Dup cum se tie, nimi c 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 utiliz atorilor i personalului de conducere, pentru o examinare succint i posibile modificr i. ncurajai opiniile celorlali i luai n considerare sugestiile lor de modificare. n co cluzie, aceast etap se va ncheia cu un document care conine o list preliminar de cmpur i o list de cmpuri calculate. ntrebri pentru autoevaluare 1. n ce const analiza bazei de date curente? 2. Care sun t cele trei surse pe care le analizm? 3. Care este rolul dezvoltatorului i al bene ficiarului? 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 stabiles c specificaii pentru fiecare cmp. Tabelele sunt primele structuri care se definesc ntr-o baz de date. Determinarea diferitelor subiecte pe care le vor reprezenta ta belele se execut pe baza obiectivelor misiunii, pe care le-ai determinat n timpul p rimei faze a procesului de proiectare i a necesitilor de date pe le-ai adunat pe dur ata 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 tabe ele identificate; Fiecrui tabel i se definesc cmpurile; Se stabilesc cheile adecva te pentru fiecare tabel, principala grij fiind aceea ca fiecare tabel s aib cheie p rimar corect definit. Aceast cheie identific n mod unic fiecare nregistrare din tabel; Pasul final al acestei etape const n stabilirea specificaiilor de cmp aferente fiecr ui cmp al bazei de date. Dup ce au fost parcuri aceti pai se vor purta discuii cu util izatorii i personalul de conducere pentru a verifica nc o dat specificaiile de cmp sta bilite. n aceast faz pot apare mici modificri, fie la componena cmpurilor unui tabel s au 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 lis t 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 utiliz eaz baza de date. Exist cteva principii de baz care v ghideaz n descrierea tabelului. continuare vor fi prezentate cteva principii sau linii directoare legate de numel e pe care l dai tabelelor i cmpurilor.

Iat cteva linii directoare care v vor ajuta s alegei numele tabelelor: Creai un nume nic, descriptiv, care s fie semnificativ pentru ntreaga organizaie. Utilizarea nume lor unice v ajut s v asigurai c fiecare tabel reprezint clar un subiect diferit i c umea va nelege ce reprezint tabelul. Alegei nume suficient de descriptive pentru a f i nelese de la sine. ntretinere aparate este un nume bun i descriptiv. Creai un nume re identific cu precizie, clar i fr ambiguiti subiectul tabelului. Numele vagi sau amb igue 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 adevr at 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 factur i, persoane, aparate, parametri tehnologici etc. Utilizai numrul minim de cuvinte necesar comunicrii subiectului tabelului. Orice persoan din organizaie trebuie s poa t nelege ce reprezint un tabel, fr a citi descrierea acestuia. Cu toate c obiectivul d mneavoastr 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 cuvi nte care comunic anumite caracteristici fizice. n numele tabelelor evitai folosirea unor cuvinte ca fisier, tabel, cmp, deoarece ele ar putea introduce un grad de confuz e de care nu avei nevoie. 47

Baze de date Capitolul 3

Nu folosii acronime i abrevieri. Acronimele sunt greu de descifrat, abrevierile ra reori reuesc s comunice subiectul unui tabel, iar mpreun ncalc primul principiu prezen tat. Folosii forma de plural a numelui. Dup cum tii, un tabel reprezint un singur sub iect, care poate fi un obiect sau eveniment. Putei extinde aceast definiie spunnd c u n tabel reprezint o colecie de obiecte sau evenimente similare. Prin urmare, putei da nume de tabel de forma Calculatoare sau Consultatii. Evitai folosirea diacriticelo r n numele de tabele. Diacriticele , , , , pot influena negativ dezvoltarea aplicaii 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 urmtoar ele principii: Includei un enun care s defineasc cu exactitate tabelul. Din descrier ea 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 re ne livreaz materii prime i materiale. Ce se ntmpl dac firma (o brutrie) primete in diente i de la fermierii locali, care nu sunt companii? Iat o definiie corespunztoar e: 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 anu n care explic de ce acest tabel este important pentru organizaie. Un tabel conine da te ce sunt adunate, ntreinute, manipulate i preluate de ctre organizaie pentru un anu mit motiv. Enunul trebuie s explice de ce respectivele date sunt importante pentru organizaie. Compunei o descriere care s fie clar i succint. Evitai greeala obinui nuna din nou sau reformula numele tabelului n descrierea acestuia, ca n exemplul ur mtor: 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 u n exemplu de descriere, care este destul de lung i ofer mai mult informaie dect e nece sar: 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 ca re 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 reformul t 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 ge stionarea timpului iar colii s realizeze statistici despre cursuri, studeni, sli i pr ofesori. 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 ta belul. Evitai enunuri care indic modul specific de utilizare a tabelului sau cum l v ei accesa fizic. Nu realizai o descriere care face trimitere la descrierea unui al t tabel. Fiecare tabel trebuie s aib o descriere proprie i independent de orice alt d escriere a unui alt tabel. Dup ce ai definitivat lista de tabele, urmeaz, n mod fire sc, ca fiecrui tabel s i se asocieze un numr de cmpuri. Asocierea cmpurilor fiecrui ta bel Etapa 2-a s-a finalizat cu o list de cmpuri. Atribuirea cmpurilor la un tabel e ste un proces relativ simplu: determinai care cmpuri reprezint cel mai bine caracte risticile subiectului unui tabel i atribuii aceste cmpuri 49

Baze de date Capitolul 3

respectivului tabel. Repetai aceast procedur pentru toate tabelele din lista final d e tabele. Se poate ntmpla ca un cmp sau un set de cmpuri s fie cerut de mai multe tab ele, aceasta este un lucru acceptat. Observaie important!! Suntei n faza de proiecta re 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 a chiziia unui dosar plic n care s inei toate listele pe care le-ai scris, schiele i no le care se vor aduna. Se va trece la calculator numai dup ce avei proiectul comple t 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 cu t (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 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 trebui nalizat 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 d up inspiraia de moment, de aceea trebuie s dm nume cmpurilor dup nite criterii sau pri cipii. 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 d e 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 c pul servete la stabilirea unei relaii ntre dou tabele. Asigurai-v c numele este sufici nt 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 a ce telefon se refer, la cel de acas, de la birou sau la telefonul mobil. nvai s fii act. 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 n ului 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, da c 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 angajar ii este un nume de cmp foarte bun. Nu folosii acronime, iar abrevierile trebuie uti lizate judicios. Acronimele pot fi greu de descifrat i deseori duc la nenelegeri. I maginai-v un cmp CAD-UPM. Ce ai nelege din aceast denumire? Abrevierile se pot folos r dac mbuntesc numele cmpului, o abreviere nu trebuie s fac ambiguu un nume de cmp. zai 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, c eea ce nu e de loc o idee bun. Un nume de cmp este la singular deoarece el reprezi nt o singur caracteristic a subiectului tabelului cruia i aparine. innd cont de acest rincipii, reluai fiecare tabel i vedei dac nu cumva putei aduce mbuntiri la vreunul umele 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 prelimin ar de cmpuri ai identificat cu atenie cmpurile, este foarte posibil s fi creat cteva c uri ce ar putea pune probleme n structura tabelului. Cmpurile definite neglijent p ot 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 reunul dintr-un tabel va provoca probleme. Cea mai bun cale de identificare a cmpu rilor ce ar putea crea probleme este s determinai dac respectivele cmpuri respect ele mentele 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 cmpuril e neglijent proiectate. Iat elementele cmpului ideal: Reprezint o caracteristic dist inct 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 distinc t a respectivului obiect sau eveniment. Conine doar o singur valoare. Un cmp care po ate stoca dou sau mai multe apariii ale aceleiai valori este cunoscut cmp cu mai mul te valori. Cmpul ideal nu conine dect o singur valoare. Nu poate fi descompus n eleme nte mai mici. Un cmp care poate stoca dou sau mai multe elemente distincte n interi orul unei valori este cunoscut drept cmp cu mai multe pri. Similar cmpului cu mai mu lte valori, acest tip de cmp provoac probleme atunci cnd ncercai s editai sau s sorta tele din interiorul lui. Aceste probleme nu apar la cmpul ideal deoarece acesta r eprezint o caracteristic unic, distinct a subiectului tabelului cruia i aparine. Nu ne o valoare calculat sau concatenat. Valorile cmpurilor dintr-un tabel trebuie s fi e 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 a stfel de cmp nu se actualizeaz automat cnd se schimb o valoare a unui cmp implicat, c eea 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 rapoartelo . Este unic n interiorul structurii ntregii baze de date. Singurele cmpuri duplicat e care apar ntr-o baz de date corect proiectat sunt cele care stabilesc relaiile din tre tabele. Stabilirea cheilor pentru fiecare tabel Suntem n situaia n care am crea t structurile de tabele, respectnd anumite principii care sunt garania unui proiec t bun. Dup cum se tie, fiecare tabel trebuie s aib o cheie primar. Imediat vei afla c xist tipuri diferite de chei, fiecare dintre acestea avnd un rol particular n inter iorul bazei de date. n timpul acestei etape vor fi atribuite toate cheile, mai pui n una (care o vei stabili ulterior cnd stabilii relaiile ntre tabele). Cheile sunt im portante pentru o structur de tabel din urmtoarele motive: Cheile ne asigur c fiecar e 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 col ecii, 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 instr umentul care v permite s facei acest lucru. Cheile ajut la stabilirea i impunerea dif eritelor 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 bel are nregistrri unice i c acele cmpuri pe care le utilizai la stabilirea relaiilor re dou tabele conin ntotdeauna valori corespondente. Cheile servesc la stabilirea r elaiilor ntre tabele. Asigurai-v ntotdeauna c ai definit chei corespunztoare pentru f are tabel. Pentru stabilirea cheilor pentru fiecare tabel, ne reamintim c exist do u 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 ch eie poate fi ndeplinit de un anume cmp al tabelului sau o combinaie de cmpuri. Am sp us 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 chei mar: Nu poate fi un cmp cu mai multe pri. Trebuie s conin valori unice. Nu poate valori nule. Valoare ei nu trebuie s conin date confideniale cum ar fi cod numeric p ersonal, vreun cod de acces etc. Valoare ei nu poate fi opional, adic trebuie neapra t introdus. Conine numrul minim de cmpuri necesar definirii unicitii. Valorile ei t uie s identifice n mod unic i exclusiv fiecare nregistrare din tabel. Valoarea ei tr ebuie 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 verif c dac acesta ndeplinete condiiile pentru a fi cheie primar, alctuindu-se o list care 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 l sta 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 con diiile 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 vite za 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: l NUME PIESA SCHIMB nu poate fi ales deoarece ar putea conine valori duplicat. Cmp ul 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 n ici nu poate fi luat n discuie. Pentru a rezolva problema, introducem un cmp nou nu mit NUMAR PIESA SCHIMB, care va deveni cheie primar. n figura 3.3 este prezentat t abelul 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 TR78-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 proiec tani de baze de date aleg pentru cheia primar un cmp introdus artificial care are u n 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. Exemp le de chei artificiale n acest moment ai finalizat o etap important a procesului de proiectare n care ai defi nitivat structura tabelelor i ai atribuit fiecruia chei primare. ntrebri pentru autoe valuare 1. Ce este lista final de tabele? 2. Enunai trei principii pentru crearea n umelor 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 princip ii pentru crearea numelor de cmpuri. 6. Enunai trei elemente ale cmpului ideal. 7. E nunai trei motive pentru care sunt importante cheile. 8. Ce este lista cheilor can didate? 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 exempl e.

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 b E ca ntr-o cltorie cnd din cnd n cnd verificm harta sau ntrebm pe cineva dac sunt seu bun. Acum avem deja tabelele i nainte de a merge mai departe vom arunca o priv ire peste ce am lucrat pn acum. Primul lucru de care trebuie s avem grij este integr itatea la nivel de tabel. Acest tip de integritate este o component major a integr itii generale a datelor. Verificai urmtoarele aspecte: ntr-un tabel nu exist nregist duplicat; Cheia primar identific exclusiv fiecare nregistrare din tabel; Orice chei e primar este unic; Valorile cheilor primare nu sunt nule. Pentru revizuirea struc turilor de tabel este bine s stai de vorb cu beneficiarul i mpreun vei ndeplini urmt e sarcini: Asigurai-v c n baza de date sunt reprezentate toate subiectele. Dei n acea t 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 nica pe care ai mai folosit-o. Asigurai-v c numele de tabele i descrierile acestora s unt 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 clarificare a lucrurilor. Asigurai-v c numele de cmpuri sunt potrivite i semnificative pentru toa t 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 l a fiecare tabel au fost atribuite toate cmpurile corespunztoare. Acum avei cea mai bun oportunitate de a v asigura c toate caracteristicile necesare, referitoare la s ubiectul unui tabel se gsesc la locul lor. Nu este neobinuit s descoperii c ai uitat u na sau dou caracteristici. Dac s-a ntmplat, identificai respectivele caracteristici i transformai-le n cmpuri adugate tabelului. Dup ce ai terminat consultrile cu viitorii eneficiari ai bazei de date, trecei la pasul urmtor, n care vei stabili specificaii d e cmp pentru fiecare cmp din baza de date. Specificaii de cmp Cmpurile sunt fundaia ba zei de date, ele reprezentnd caracteristicile subiectelor importante pentru o org anizaie. 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, cmp lor din baza de date li se acord cea mai mic importan, se pierde cel mai puin timp pe ntru asigurarea integritii lor structurale i logice. Se consider c se pierde prea mul t timp pentru a stabili integritatea datelor, dar se pierde timp nzecit pentru re pararea bazelor de date prost proiectate. n acest paragraf vei nva cum s stabilii inte ritatea datelor prin definirea specificaiilor de cmp pentru fiecare cmp al bazei de date. Timpul folosit pentru stabilirea acestor specificaii nu este un timp pierd ut ci un timp ctigat, dac ne referim la necazurile aprute datorit datelor inconsecven te 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 sta ii i s impunei integritatea la nivel de cmp. Implementarea acestor specificaii v permi e 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 date Nu uitai c integritatea la nivel de cmp este una din cele patru componente ale inte gritii generale a datelor. Definirea specificaiilor de cmp v oblig s ajungei la o total a naturii i scopului datelor din baza de date. nelegerea datelor nseamn c pute otr dac anumite date sunt cu adevrat necesare i importante pentru organizaie i putei m s le utilizai n avantajul dumneavoastr. Specificaiile de cmp constituie dicionaru date al bazei de date. Fiecare specificaie de cmp stocheaz date despre caracteristic ile unui cmp dintr-o baz de date. Acest dicionar de date este util, n special la imp lementarea bazei de date ntr-un program SGBDR l putei folosi drept ghid pentru crea rea 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 i mplementai n orice tip de aplicaie de interfa cu utilizatorul pe care o creai pentru b aza de date. Trebuie s avei n vedere faptul c nivelurile de consecven, calitate i acur tee a datelor din baza de date (respectiv a informaiei scoase din aceste date) sun t 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 p entru 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 identi ficate 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 prez entate 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 e ste de loc aa, deoarece este foarte util, mai ales n faza de implementare cnd nu ma i trebuie s analizm fiecare cmp n parte, ci consultm numai dosarul. Se observ clar cel e 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 form ularul 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 spe cificaie 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 pr e: Comercianti Specificaie surs: Stat Eticheta: Stat Partajat de: Alias(-uri): Des criere: Statul in care se afla cartierul general al producatorului.Aceasta infor matie este o componenta a adresei postale generale a producatorului. Elemente fizice Tip de date:Alfanumeric Lungime : 2 Numar de cifre zecimale: Sup ort caractere: Litere(A-Z) Cifre (0-9) De pe tastatura (., /, $, #, %) Speciale (, , , ) Masca de introducere: AA Format de afisare: Ambele litere trebuie sa fie majuscu le. 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 Alternativ permiteintroduce imediat, editarea Compus e introduce imediat, nu permite editarea Unic Se introduce ulterior, permite edit area 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 Specificaie cmp 61

Baze de date Capitolul 3

Elementele generale reprezint atributele fundamentale ale cmpului. Ele ofer informai i 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 id entific n mod unic un anumit cmp n ntreaga baz de date. Tabelul care conine n structu sa cmpul respectiv. Acesta este singurul tabel n care va aprea cmpul, cu excepia cazu lui n care cmpul particip la stabilirea unei relaii. Este un nume alternativ (de obi cei, o form scurt a numelui cmpului) prin care putei identifica respectivul cmp n inte rfaa aplicaiei cu utilizatorul final pe care o creai pentru baza de date. De exempl u, cmpul PRET UNITAR poate avea ca etichet PU sau PUNIT. Etichetele sunt utile, n s pecial, cnd dorim s economisim spaiu, sau s nghesuim ct mai multe cmpuri ntr-un rap dic numele celorlalte tabele (dac exist) care conin cmpul respectiv. Singurele nume d e tabel care trebuie s apar aici sunt cele care au o relaie explicit cu tabelul print e al cmpului. Este un nume pe care l utilizai pentru acel cmp, n situaii extrem de rar e. Una din situaiile n care trebuie s utilizai un alias este cnd n acelai tabel trebui s existe dou apariii ale cmpului. Aceasta este o explicaie complet a cmpului. Compune ea unei descrieri de cmp este extrem de benefic deoarece v oblig s v gndii cu atenie atura datelor care vor fi stocate n cmpul respectiv. Dac avei dificulti n descrierea u ui cmp, putei fi sigur c acel cmp necesit mbuntiri suplimentare. Elementele pe care abilii 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 ru toate cmpurile, excepia celor care servesc ca ablon pentru alte cmpuri sau a celo r care particip drept chei externe ntr-o relaie ntre tabele. n acest tip de specificai e putei include toate elementele, mai puin specificaia surs, iar parametrii de eleme nt pe care i precizai se vor aplica doar asupra cmpului indicat elementul Nume cmp. Generic aceast specificaie servete ca ablon pentru alte specificaii de cmp i v aju rai definiii consecvente pentru cmpurile care au acelai neles general. De exemplu, put ei crea acest tip de specificaie pentru un cmp generic numit JUDET, pe care s o util izai apoi ca baz pentru orice alt cmp JUDET din baza de date, cum ar fi JUDET_CLIEN T, 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 relai e ntre tabele i ea preia majoritatea parametrilor de element dintr-o specificaie ex istent. Putei include elementele care nu sunt ncorporate n specificaia surs i putei a ra orice parametri de element preluai din specificaia surs. Acest element este prec izat 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 gene rali, deoarece fiecare program SGBDR le implementeaz ntrun mod uor diferit. Stabili rea acestor elemente n timpul acestei faze a procesului de proiectare v ajut s asigu rai definiii consecvente ale cmpurilor n ntreaga baz de date i reduce timpul necesar i plementrilor 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 defi nete cteva tipuri majore de date i fiecare tip de date are una sau mai multe varian te unice. Iat o scurt definire a lor: Character acest tip de dat stocheaz un ir alfa umeric de lungime fix sau variabil. Bit acest tip de date stocheaz iruri cu secvene inare, cum ar fi imagini digitizate sau secvene audio. Exact Numeric stocheaz nume re ntregi sau zecimale. Majoritatea programelor SGBDR implementeaz acest tip sub n umele de NUMERIC, ZECIMAL i INTEGER. Approximate Numeric stocheaz numere cu zecima le i numere exponeniale. Majoritatea programelor SGBDR implementeaz acest tip sub n umele de FLOAT, REAL i DOUBLE. Date/Time stocheaz date calendaristice, de timp i co mbinaia lor. De menionat faptul c acest tip de dat difer destul de mult de la un SGBD R la altul. Va trebui s studiai documentaia SGBDR pentru a afla cum gestioneaz progr amul 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 in troduse de un utilizator pentru o valoare oarecare de cmp. Se folosete numai pentr u datele de tip Character. Precizeaz numrul de zecimale ale unui numr. Precizeaz mod ul 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 in cere v ajut s v asigurai c un utilizator va introduce valorile n cmp n mod unitar. I exemplu de introducere a unei mti: zz/ll/aa, pentru o dat de forma 01/03/05. Acest ele ent gestioneaz aspectul valorii cmpului atunci cnd este afiat pe ecran sau este tiprit tr-un raport. Un format de afiare v permite s afiai valorile ntr-un mod mai firesc, ma i lizibil, ca de exemplu 18/04/05 ar putea fi afiat 18 aprilie 2005 care este mult ma i uor de citit i neles. Acest element indic tipul de caractere pe care un utilizator le poate introduce ntr-o valoare de cmp dat. Stabilirea i impunerea acestui element v ajut s v asigurai c utilizatorul nu poate introduce n cmp date lipsite de sens, iar in acest lucru mbuntii integritatea la nivel de cmp. Putei opta pentru includerea sau xcluderea oricruia dintre urmtoarele tipuri de caractere: Litere toate literele al fabetului inclusiv cele speciale , , , . Cifre de la 0 la 9. Caractere de pe tastat r - &, ^, =, virgula, !, (, ), %, $ etc. Caractere speciale orice caracter pe car e l putei produce prin combinaii specifice de taste standard i tastele Ctrl, Alt i Sh ift.

Elementele logice se refer n special la valorile din interiorul unui cmp. Elementel e ei stabilesc lucruri cum ar fi unicitatea unei valori, cnd trebuie introdus o va loare, dac o valoare poate fi editat sau nu, tipurile de comparaii i operaii ce pot f i efectuate cu fiecare valoare. Precizarea acestor elemente v ajut s stabilii i s impu nei mare parte din integritatea la nivel de cmp. n tabelul 3.3 sunt prezentate aces te elemente. Tab. 3.3. Elemente logice Denumire element Tip cheie Structur cheie Explicaii Acest element indic rolul cmpulu i ntr-un tabel, rol pe care l-ai identificat cnd ai stabilit cheia primar pentru tabe l. 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 preci zeaz dac valorile cmpului sunt unice. i atribuii valoare Unic atunci cnd elementul T eie are valoarea Primar; n caz contrar acest element primete valoarea Non-unic. Acest ement precizeaz dac un cmp accept sau nu valori nule. Recitii paragraful Valoare nul d in capitolul 1 pentru a v reaminti ce sunt valorile nule. Pentru a verifica deciz ia luat, gnUnicitate 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 ju dicios valorile nule i nu folosii spaii goale. Acest element indic sursa valorilor cm pului. 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 i ntroduc o valoare pentru cmpul respectiv. Aceasta este valoare pe care utilizatoru l o poate introduce ntr-un cmp atunci cnd nu este disponibil o valoare mai bun i cnd n sunt permise valorile nule. Acest element precizeaz toate posibilele valori vali de 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 pre cizeaz n ce moment utilizatorul poate introduce o valoare ntr-un cmp i dac poate modif ica respectiva valoare. Momentul de referin este momentul cnd se creeaz o nou nregistr are. Acest element indic tipurile de comparaii pe care utilizatorul le poate aplic a 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. D e 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 s dintr-un alt tabel al bazei de date. O valoare de expresie, care este o operaie o arecare n care este inclus valoarea cmpului. Controlul asupra tipului de comparaii l m piedic pe utilizator s fac anumite comparaii lipsite de sens. Acest element precizea z tipurile de operaii pe care utilizatorul le poate efectua cu valorile unui cmp. E xist 5 tipuri de operaii: adunare, scdere, nmulire, mprire i concatenare. De asemene est 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 est e 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 baz ei 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 ct gai 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 indi c elementul Tip de date? 6. Ce indic elementul Suport de caractere? 7. Care este s copul elementului Format de afiare? 8. Care este semnificaia elementului Interval de valori? 9. Care este scopul unei reguli de editare? 10. Care este scopul elem entului Comparaii permise? Cine l folosete efectiv? 11. Ce este o valoare de expres ie? 12. Cnd se utilizeaz o specificaie generic? Dai un exemplu. 13. Explicai formularu l 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 de finite i cu cheile lor primare. Sarcina noastr urmtoare este de a stabili relaiile e xistente ntre aceste tabele. Ne reamintim c ntre dou tabele poate exista NUMAI o rel aie. De asemenea, un tabel poate avea relaii cu mai multe tabele, aa cum s vedem n st udiile 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 tab ele. V recomand s revedei acel paragraf pentru a v remprospta memoria. n aceast etap cum s identificai i s stabilii relaii ntre tabelele unei baze de date i apoi cum s s ii caracteristicile fiecrei relaii. De asemenea, vei nva cum s creai diagrame cu tab 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 cap itale pentru funcionarea corect a bazei de date. Ele asigur conexiuni ntre tabelele corelate logic, ajut la mbuntirea structurilor de tabel i permit extragerea datelor di n mai multe tabele simultan. n continuare vor fi prezentate pe larg cele trei tip uri 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 di n al doilea tabel i o singur nregistrare din al doilea tabel este corelat cu o singu r nregistrare din primul tabel. Figura 3.6 prezint un exemplu generic de relaie unu c u 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 prezin t un exemplu de relaie unu cu unu tipic pe care o putei gsi ntr-o baz de date pentru rtamentul Personal al unei organizaii. Angajati SalariatID 100 101 102 103 Nume Ban Pop Lazr Crian Prenume Ioan Dorin Liv iu 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 b azei de date a ales s plaseze n tabelul ANGAJATI cmpurile ce pot fi vzute de orice m embru al organizaiei i n tabelul RETRIBUTII cmpurile ce pot fi vzute doar de personal ul autorizat. Pentru stocarea datelor privitoare la retribuia unui angajat dat es te necesar doar o singur nregistrare, deci ntre o nregistrare din tabelul ANGAJATI i u na din tabelul RETRIBUTII exist o relaie distinct unu cu unu. Figura 3.8 prezint un ex emplu generic al modului n care se creeaz o diagram de relaie pentru o relaie unu la u nu. 68

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

Aceast linie arat c o nregistrare din TABELUL A este corelat cu o singur nregistrare d n 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 c olurile 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 stnga este un tabel normal lizat printr-un Observai c tabelul dinc o nregistrare din TABELUL este dreptunghi), iar cel din dreapta B un tabel subset (simbolizat printr-un este corelat cu o sin gur dreptunghi cu colurile rotunjite). Linia care apare ntre tabelele din nregistrar e din de relaie i diagram indic tipul TABELUL pentru fiecare tip de relaie vei utiliza un A anumit tip de linie. Aici fiecare capt are o liniu pentru relaia unu la unu. n ra 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 c u colurile rotunjite, primul fiind considerat tabel de date iar al doilea este co nsiderat tabel subset. Stabilirea relaiilor unu cu mai muli ntre dou tabele exist o re aie 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 po ate fi corelat cu o singur nregistrare din primul tabel. S studiem un exemplu generi c pentru acest tip de relaie. S presupunem c lucrai cu dou tabele TABEL A i TABEL B, n re care exist o relaie unu cu mai muli. Datorit relaiei, o nregistrare din TABEL A po 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 e 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. Figur a 3.11 prezint un exemplu obinuit de relaie unu cu mai muli pe care o putei ntlni la cie de mprumut a unei biblioteci. Imprumuturi Clienti ClientID 9001 9002 9003 9004 9005 Nume Pop Ban Lazr Buzan Beldean Prenume Dorin I on Ana Maria Vian <<alte cmp.>> ....... ....... ....... ....... ....... ClientID 9002 9001 9004 9003 9003 9003 9002 9005 9005 CarteID 5648 690423 6563 65323 0954 2 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 CL IENTI poate fi corelat cu una sau mai multe nregistrri din tabelul MPRUMUTURI. ns o ca rte 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. Ev ident, 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 relai e unu cu mai muli. 71

Baze de date Aceast linie arat c o nregistrare din TABELUL B este corelat cu o singur nregistrare d n 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 par li a relaiei. Figura 3.13 prezint diagrama relaiei dintre Aceast linie arat c i MPR din figura 3.11. tabelele CLIENTI o Reinei aceste notaii pentruTABELUL B c le vei fo losi n prezentarea structurii nregistrare Nume care din bazelor de date petabel le vei proiecta. este corelat cu o singur nregistrare din TABELUL A Clienti Imprumuturi Imprumuturi Nume 3.13. Diagrama relaiei dintre tabelele Clienti i Imprumuturi Nume tabel Fig. tabel Acest tip de relaie cel mai reprezentativ dintre dou tabele a unei baze de N ume 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 mul muli cnd o nregistrare din primul tabel poate fi corelat cu una sau mai multe nregist rri 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 e TABEL A poate fi corelat cu una sau mai multe nregistrri din TABEL B i o nregistrar e din TABEL B poate fi corelat cu una sau mai multe nregistrri din TABEL A, aa cum s e 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 Ade relaie este al doilea ca frecven de apariie ntre dou tabele Tabel B Acest tip dintr-o baz de date. Ea este ceva mai dificil de identificat de ct o relaie unu cu mai muli, deci trebuie s v asigurai c ai examinat tabelele cu at bel A Tabel B Tabel A prezint un exemplu tipic de relaie mai muli cu mai muli Figura 3 .15 Tabel B pe care o putei ntlni n baza de date a unei instituii de nvmnt, respect lul 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 T imocea Mocean Prenume Remus Zoltan Florian Sebastian Vasile OrasStudent Reghin O radea 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 2 014 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 curs uri, 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 m ai 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 a l modului de creare a diagramei de relaie mai muli cu mai muli. n acest caz, lng fiec tabel exist un simbol lab de gsc. Figura 3.17 prezint diagrama relaiei dintre tabele 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 nre n TABELUL A Tabel A Tabel B

Aceast lab de gsc arat c o nregistrare din TABELUL A este corelat cu mai multe nre n 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 registrrile 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 n cum s asociai nregistrrile dintr-un tabel cu nregistrrile din cellalt tabel. O metod care ai putea stabili o legtur ntre cele dou tabele ar fi preluarea unui cmp dintr-un ul 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 le ur 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 d n cellalt tabel i asigur lipsa oricror probleme la operaiile de adugare, tergere sau m dificare 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 no ului tabel. n realitate, aceste cmpuri ndeplinesc dou roluri distincte: mpreun formeaz cheia primar compozit a tabelului de legtur, iar separat, fiecare poate fi asimilat u nei chei externe. S relum tabelele din figura 3.15, i ne punem ntrebarea cum putem a socia cu uurin nregistrri din primul tabel cu nregistrri din al doilea tabel? Altfel s us, cum putem asocia un student cu mai multe cursuri sau un anumit curs cu mai m uli studeni? Cea mai bun metod este de crea i utiliza un tabel de legtur care va rezol a relaia de tip mai muli cu mai muli n maniera cea mai adecvat i mai eficient. Figura .18 prezint rezolvarea practic a acestei soluii. Studenti StudID 6001 6002 6003 6004 6005 Nume Pop Szabo Costea Timocea Mocean Prenume Rem us Zoltan Florian Sebastian Vasile OrasStudent Reghin Oradea Zalau Brasov Fagara s <<alte cmpuri>> ..... ..... ..... ..... ..... Orar(tabel de legtur) StudID 6001 6002 6002 6001 6002 6003 6004 6001 6003 6001 6005 CursID C001 C213 C 032 C213 C015 C001 C213 C015 G001 G004 G007 Cursuri CursID C001 C213 C032 C015 G001 G004 G007 Denumire PUC SIM Baze de date GD AutoC AD Inventor IntelliCAD Credite 5 5 4 5 4 5 5 ProfID 2001 2001 2045 2014 2009 200 6 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 ca e le leag. De asemenea, ntre fiecare din cele dou tabele i tabelul de legtur exist o r laie de tip unu cu mai muli. Prin urmare, o relaie de tip mai muli cu mai muli s-a tr ansformat 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 vertica le, 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 r elaii. Acest tip de relaie exist ns nregistrrile dintr-un tabel. Pe parcursul procesul i 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 umit nregistrare din tabel este corelat cu alte nregistrri din acelai tabel. Similar t ipului echivalent de relaie pentru perechi de tabele, o relaie cu autoreferire poa te fi unu cu unu, unu cu mai muli i mai muli cu mai muli. Relaia unu cu unu exis are dat dintr-un tabel poate fi corelat cu o singur nregistrare din acelai tabel. Tab elul MEMBRII din figura 3.20 este un exemplu de tabel care are acest tip de relai e. Astfel, un membru dat poate sponsoriza un singur alt membru din organizaie; cmp ul 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 Dor in 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 relai ei. 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 p e fi corelat cu una sau mai multe nregistrri din acelai tabel. Figura 3.22 arat un ex emplu n care un angajat poate fi eful mai multor angajai. Observai c Pop Dorin este ef ul la ali trei angajai. Personal AngajatID 1001 1002 1003 1004 1005 Nume Mocean Pop Ban Ban Obdu Prenume P avel 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 tab ate fi corelat cu una sau mai multe nregistrri din acelai tabel i una sau mai multe nr egistrri pot fi corelate cu nregistrarea dat. La nceput, acest lucru poate aprea conf uz, 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 diferit e 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 pi esa Clema superioar Clema inferioar urub de strngere Piulit Ansamblu clem Scaun Ansamb lu 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), dec i nregistrarea respectiv poate fi corelat cu 4 nregistrri din acelai tabel. n plus, su ansamblu 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 core late 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 s e 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 f oarte clare pe cale s le aplicai. n analiza pe care ai fcut-o n timpul proiectrii baze de date, ai stat de vorb cu multe persoane din organizaia beneficiar, att din conduc ere ct i din compartimentele care vor folosi nemijlocit baza de date. Ei bine, ace ste persoane v vor fi de un real folos n identificarea relaiilor dintre tabele, chi ar dac ele nu au o viziune complet asupra problemei n cauz. ncepei procesul de identif icare a relaiilor prin crearea unei matrice cu toate tabelele bazei de date. Pent ru 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 tng 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 c reunul 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 exiune specific. De exemplu, tabelul CURSURI are o relaie direct cu tabelul STUDENT I, 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 p redat de un membru al catedrei, nu de un membru al personalului. Nu trebuie s v oc upai nc de relaiile indirecte. Dac nu vedei de la nceput relaia dintre dou tabele, o etod este de a popula tabelele cu cteva nregistrri care v vor ajuta n depistarea aces relaii. n edina de lucru pentru stabilirea relaiilor ntre tabele vei pune ntrebri d ul: 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 ili relaia corect dintre dou tabele, vei pune dou ntrebri, una din perspectiva primulu tabel i una din perspectiva celuilalt tabel. Rspunsurile la aceste dou ntrebri vor i dentifica 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 dint 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 r elaia mai muli cu mai muli. n figura 3.27 este artat matricea de tabele cu completat c 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 cl e 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 - u n curs se ine numai ntr-o sal. Dac ntre tabele nu exist nici un fel de relaie, lucru p rfect 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 ofi ciale 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 pri mului tabel i coloana celui de-al doilea. 2. Localizai al doilea tabel pe aceeai pa rte a matricei pe care lucrai i notai intrarea de la intersecia liniei acestuia cu c oloana 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 d 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 d n cele dou sensuri. Relaia unu cu unu poate fi identificat observnd c un tabel joac r de tabel printe i cellalt joac rol de tabel copil (subordonat). n tabelul printe trebu ie s existe cel puin o nregistrare nainte s putei introduce n tabelul copil o nregist e corelat, adic un copil nu poate exista fr printe, nu-i aa? Atribuirea rolului de pri te i copil nu este totdeauna un lucru foarte clar, existnd cazuri cnd aceast atribui re se face arbitrar. Un lucru trebuie s v fie clar: relaia unu cu unu poate fi asem uit cu un tabel mare rupt n dou, iar ntr-unul dintre ele s-a copiat cmpul cheie prima r, 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 a vem 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 Ad resa Telefon acasa Mobil E-mail Web Salariu Indemnizatie Asigurare Tip plan medi cal Personal-1 AngajatID ChP Nume Prenume Data nasterii Data angajarii Specializare Adresa Telefon acasa Mobil E-mail Web Personal-2 AngajatID ChE Salariu Indemniza tie 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. heia primar n primul tabel, AngajatID a devenit cheie extern n al doilea tabel, dup c um se vede n figur. n unele cazuri, mai pot fi forate unele relaii unu cu unu, fr ca a este tabele sa aib altceva comun dect cheia primar a unuia copiat n cellalt tabel. Pra ctica o s v scoat n cale i un astfel de caz. Relaia unu cu mai muli poate fi stabili n mod asemntor cu relaia unu cu unu. Vei lua, pur i simplu, o copie a cheii primare di 84

Baze de date Capitolul 3 tabelul aflat n partea unu a relaiei i o vei include n structura tabelului din partea i muli, unde va deveni cheie extern. Pentru exemplificare, fie relaia unu cu mai muli intre 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 gset ai ntr-o cldire. Utiliznd procedura anterioar, vei stabili aceast relaie lund o copie cheii primare (CladireID) din tabelul CLADIRI pe care o includei drept cheie exte rn 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 Cladi reID 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 t ui 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 relaie i utiliznd aceste chei pentru a forma structura tabelului. n tabelul de legtur, aces te cmpuri au dou scopuri distincte: mpreun ele constituie cheia primar compus a tabelu lui 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 num eprezinte natura relaiei dintre cele dou tabele. De exemplu, ntre tabelele STUDENTI i CURSURI, numele tabelului de legtur ar putea fi CURSURI STUDENT sau ORAR STTUDEN T. Se adaug tabelul de legtur n lista final de tabele i se completeaz rubricile Tip l i Descriere tabel. Figura 3.32 v arat cum stabilii o relaie mai muli cu mai muli ele 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 P rofesorID Categorie

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

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

Baze de date Capitolul 3

Astfel, cazul tabelului prezentat la paragraful Relaii cu autoreferire, cel din fig ura 3.22, se poate rezolva mai simplu dac introducem n baza de date un nou tabel n umit 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 gses c ntre tabelele bazei dumneavoastr de date, urmeaz s stabilii caracteristicile fiecrei relaii. Aceste caracteristici arat ce se ntmpl atunci cnd tergei o nregistrare, car e 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 r egul stabilete ce trebuie s fac programul SGBDR cnd cerei s tearg o anumit nregist tabelul printe al relaiei. Regulile de tergere sunt extrem de importante pentru int egritatea la nivel de relaie deoarece ele v protejeaz mpotriva nregistrrilor orfane gistrri din tabelul copil care nu au nici un fel de relaie cu nici o nregistrare di n tabelul printe. Putei defini 5 tipuri de reguli de tergere, iar aciunile pe care l e va efectua programul SGBDR, n cazul fiecrei reguli sunt urmtoarele: Interdicie. Pr ogramul SGBDR nu va terge nregistrarea din tabelul printe, ci o va pstra i o va desem na ca inactiv. Restricie. Programul SGBDR nu va terge nregistrarea din tabelul print ac n tabelul copil exist nregistrri corelate. Programul SGBDR trebuie s tearg toate strrile 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 actuali za 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 e, 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. Pr ogramul SGBDR va terge nregistrarea din tabelul printe apoi va actualiza valoarea c heii externe ale nregistrrilor corelate din tabelul copil la valoarea curent a elem entului 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 ce elalte 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 un i 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 introdu ce nregistrri n tabelul corelat. Opional nu este obligatoriu ca tabelul s conin vre istrare 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 part icipare este evident, este de bun sim sau este n concordan cu un anumit set de stand arde. Pentru exemplificare, s lum relaia unu cu mai muli dintre tabelele ANGAJATI i CL ENTI, 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 di ntre organizaie i respectivul client. Dei fiecare client trebuie asociat cu un anum it angajat, un angajat dat nu este obligat s fie asociat cu vreun client. Muli ang ajai se ocup de alte probleme ale organizaiei. Prin urmare, cele 2 tabele vor parti cipa la relaie astfel: Tabelul ANGAJATI trebuie s primeasc tipul de participare Obl igatorie. Acest lucru v asigur c exist cel puin un angajat pe care s-l putei atribui u ui client dat. Tabelul CLIENTI trebuie s primeasc tipul de participare Opional. Aces t 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 p e 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 tab elele ANGAJATI i CLIENTI, artndu-v marcarea tipului de participare. Observai c simbolu rile 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 stabi lii 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 a ib asociate cu o nregistrare din tabelul corelat i numrul maxim de nregistrri din tabe l care pot fi asociate cu o nregistrare din tabelul corelat. Factorii pe care i ut ilizai la determinarea gradului de participare situaii evidente, bunul sim sau resp ectarea unui set oarecare de standarde sunt aceiai pe care i folosii i la determinar ea 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 repre zenta gradul de participare al unui tabel dat, vei utiliza 2 numere, separate pri n virgul i nchise ntre paranteze. Primul numr precizeaz numrul minim de nregistrri c te, 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 ai muli, ceea ce nseamn c un client dat poate fi asociat cu singur angajat i un angaja t dat poate fi asociat cu orice numr de clieni. Judecnd dup o regul de bun sim sau dec izie 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 ta belul 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 informai e n diagrama relaiei. Plasai gradul de participare deasupra liniei de legtur a tabelu lui corespunztor. Figura 3.35 prezint diagrama relaiei dintre tabelele ANGAJATI i CL IENTI, completat cu simbolizarea gradului de participare. Aceasta indic numrul minim i Aceasta indic numrul minim i numrul numrul maxim de anga cu maxim de clieni cu care poate fi asociat care poate fi asociat un client un an gajat 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 dint r-o relaie ntre dou tabele, folosind litera N n locul celui deal doilea numr (1,N). Ur oarea 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 finalizai munca la o relaie dat, nu uitai s actualizai diagrama relaiei, astfel nct sta 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 f ost precizate n mod corespunztor. Integritatea la nivel de relaie garanteaz urmtoarel e: Conexiunea ntre cele dou tabele (sau cmpuri cheie) implicate ntr-o relaie este sol id. Vei obine acest lucru folosind cmpurile cheie primar i extern la stabilirea relai r unu cu unu sau unu cu mai muli i un tabel de legtur la stabilirea relaiei de tip cu mai muli. n fiecare tabel putei insera nregistrri noi ntr-o manier semnificativ t lucru l asigurai indicnd tipul corespunztor de participare pentru fiecare tabel (s au cmp cheie) implicat n relaie. Putei terge o nregistrare existent fr a produce e egative. Acest lucru este garantat prin atribuirea unei reguli corespunztoare de t ergere pentru relaie. Exist o limit semnificativ pentru numrul de nregistrri ce pot corelate ntr-o relaie. Acest lucru l implementai indicnd gradul corespunztor de partic ipare pentru fiecare tabel (sau cmp cheie) implicat n relaie. Dup cum tii, integritate a 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 con 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 frustra re. Reguli specifice cmpurilor n mod normal, ar trebui ca fiecare cmp al bazei de d ate 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 a u ntr-adevr nevoie de reguli pentru funcionarea corect a bazei de date. Pentru stabi lirea regulilor de desfurarea activitii specifice cmpurilor, vei parcurge urmtoarele e ape: Selectai un tabel; Analizai fiecare cmp i determinai dac acesta necesit vreo icie; Definii, dac e cazul, regulile de desfurare a activitii necesare pentru respec ul cmp; Determinai cum se verific regula; Notai regula n formularul Foaie de specifi aii pentru regula de desfurare a activitii, prezentat n pagina urmtoare. Regulile de d sfurare 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 prezen are 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 po t arhiva n dosare, se pot multiplica, putnd fi accesate de oricine are nevoie de a ceste 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 urmtoare e elemente: Enun. Acesta este textul regulii de desfurare a activitii. El trebuie s f e 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. tricie. 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 reg ula din exemplul precedent: O singur nregistrare din tabelul tblGrupe poate fi asoc iat 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 in dicai 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 de sfurare a activitii, restricia va afecta fie un cmp, fie o relaie. Aici specificai nu e cmpurilor care vor fi afectate de regul sau numele tabelelor implicate n relaie ca re vor fi afectate. Elemente de cmp afectate. O regul de desfurare a activitii care in 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 cara teristici ale respectivei relaii. Aici indicai caracteristicile afectate de regul. Aciune ntreprins. Aici indicai modificrile aduse elementelor unei specificaii de cmp s u 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 parc urgerea urmtorilor pai: Selectai o relaie; Revizuii relaia i determinai dac acea it vreo restricie; Definii regulile de desfurare a activitii pentru relaie; Modif acteristicile relaiei; Determinai ce aciuni vor determina testarea regulii, altfel spus cnd se vede regula; Notai regula n formularul Foaie de specificaii pentru regul a de desfurare a activitii, prezentat n figura 3.36. Se observ c aceast procedur est mntoare cu cea utilizat pentru regulile de desfurare a activitii specifice cmpurilor. ina cu care vei stabili aceste reguli, depinde de experiena pe care o avei. Pentru nc eptori, recomand studiul cu atenie a paragrafului Studiu de caz. Proiectarea unei b aze de date, unde vei gsi modele de reguli pentru desfurarea activitii, precum i alte formaii practice. Regulile de desfurare a activitii specifice relaiilor se refer, n s ial, la tipul de participare i gradul de participare (vezi capitolul 2, paragrafu l 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 est at cu alt tabel. Dac un tabel conine cursuri, iar cellalt conine profesori care in ac este cursuri, este clar c nu putem terge un profesor care are cel puin un curs de in ut. Dac s-ar putea terge, ar aprea aanumitele nregistrri orfane cu grave prejudicii n uncionarea 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 desfur are 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 da te i a sistemelor informatice, stabilirea regulilor de desfurare a activitii va deven i 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 a ite valori, adic un set distinct de valori. Se poate aminti aici cmpul numit JUDET E, 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 v alori de pe Foaia de specificaii a cmpului. Acest lucru merge bine cnd avem puine val ori (ex. Sex: M/F, Note: 1-10), dar nu n cazul judeelor ca n exemplul amintit mai s us. Pentru un numr mare de valori trebuie neaprat s folosim un tabel de validare. A cest 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, BistriaNsud, 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 pro vin din unul sau mai multe tabele ale unei baze de date. De asemenea, poate s coni n cmpuri i din alte vederi. Tabelele i vederile care compun o anumit vedere sunt cuno scute sub denumirea de tabele de baz ale vederii. O vedere este virtual pentru c extr age date din tabelele de baz n loc s stocheze singur date. Pentru o vedere se stoche az 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 sesc 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 d 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 baz eaz 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 e ele: Lucrul cu date din mai multe tabele. Legtura dintre tabele se materializea z 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 afi e n vedere ilustreaz cele mai recente modificri ale datelor din tabelele de baz ale acesteia. Le putei particulariza pentru a corespunde cerinelor specifice fiecrui in divid 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 defi ni o vedere de validare care funcioneaz ca i un tabel de validare scopul acesteia f iind 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 da te sunt disponibile unui anumit grup de utilizatori. Definii vederile cu atenie i nd emnare, iar acestea vor deveni elemente valoroase n exploatarea bazei de date. De sigur, nu toate vederile o s le identificai nc din faza de proiectare a bazei de dat e. 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 ved eri folosesc funciile agregate Sum, Average, Minim, Maxim i Count. Vederi de valid are. Sunt folosite pentru a ajuta la implementarea integritii datelor. Vederile su nt create cu ajutorul limbajului SQL, aa cum vei nva n capitolul 4. Dup ce ai identif t vederea, aceasta va trebui trecut n documentaia proiectului, cu ajutorul unui doc ument 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 nu me s fie ct mai sugestive. Tip. Aici precizai dac vederea este de date, agregat sau d e 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 incl us n vedere. Filtre. Aici notai criteriile pe care le va folosi vederea pentru a f iltra nregistrrile pe care le afieaz. Vei nota att cmpul testat ct i expresia utiliz tru 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 di agrama de vedere. Foaia de specificaii a fost prezentat n figura 3.38, iar pentru d iagrama 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 n 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. Cmpu l Student este un cmp calculat, care se obine din alturarea numelui i prenumelui stu dentului care se gsesc n cmpuri separate. Numele seciei se va lua din tabelul tblSec tii cu care este legat tabelul tblStudenti. Diagrama de vedere este prezentat n fi gura 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 creare 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 re alizat 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 posib tatea de a privi n ansamblu proiectul bazei de date, legturile dintre prile sale cur ente, o survolare a tuturor problemelor rezolvate. Este ca i cum ai terminat de co nstruit o cas nou, iar nainte de a v muta n ea mai facei o verificare a lucrrilor. Dup ceast 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 c obiectivele misiunii pentru noua baz de date; Efectuat o analiz complex a bazei d e date vechi; Identificat cerinele organizaiei n privina informaiilor; Definit struc uri de tabel potrivite; Atribuit chei primare tabelelor; Stabilit specificaii de cmp; Stabilit relaii ntre tabele; Definit reguli de desfurare a activitii organiza ntru 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 princip iul dect s regret c n-am fcut-o, mai bine s regret c am fcut-o, altfel spus e mai av os s revizuiesc i s nu gsesc nimic, dect s rmn o anomalie care oricum va iei la ive ziu, a crui eliminare nsemnnd costuri nzecite. 102

Baze de date Capitolul 3

Revizuirea i mbuntirea integritii datelor Revizuirea integritii datelor este o sarci tiv simpl dac folosii o abordare modular, adic s revizuii secvenial fiecare component ntegritii generale a datelor: integritatea la nivel de tabel, la nivel de cmp, la n ivel de relaie, la regulile de desfurare a activitii i a vederilor. Dac ai urmat regu e de proiectare prezentate n acest curs, n mod normal nu trebuie s avei probleme. Ma i departe vor fi prezentate pe scurt ideile pe care ar trebui reinute n timp ce ef ectuai revizuirea. La nivel de tabel. Pentru a v asigura c ai stabilit corect integr itatea la nivel de tabel, revizuii fiecare tabel i asigurai-v c tabelul respect condii le urmtoare: Nu exist cmpuri duplicat n tabel; Nu exist cmpuri duplicate n tabel; ist cmpuri cu mai multe valori n tabel; Nu exist cmpuri cu mai multe pri n tabel; e nregistrare din tabel este identificat de o valoare a cheii primare; Fiecare che ie 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 a lit corect integritatea la nivel de cmp dup ce ai fcut urmtoarele: Ai verificat ca fi care cmp s respecte setul de criterii Elementele cmpului ideal; Ai verificat c ai def nit un set de specificaii de cmp pentru fiecare cmp. La nivel de relaie. Examinai fie care 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 ope raii: 103

Baze de date Capitolul 3

Ai stabilit corect relaia; Ai definit regulile de tergere adecvate; Ai identificat ti pul de participare pentru fiecare tabel al relaiei; Ai stabilit corect gradul de p articipare pentru fiecare tabel.

Dac identificai vreo problem legat de relaie, rezolvai-o folosindu-v de cunotinele r toare la relaii. La nivel de reguli de desfurare a activitii. V putei asigura c regul de desfurare a activitii sunt solide, verificnd urmtoarele aspecte: Suntei sigur c are regul impune o restricie care are sens; Ai determinat categoria potrivit pentru regul; Ai definit i stabilit corect fiecare regul; Ai modificat elementele de specif caie de cmp adecvate sau caracteristicile relaiei ntre tabele; Ai stabilit tabelele d e validare adecvate; Ai completat o Foaie cu specificaii pentru fiecare regul de de sfurare a activitii. Rezolvai problemele aprute folosindu-v de cunotinele dobndite ilirea regulilor de desfurare a activitii. La nivelul vederilor. Dei vederile nu sunt legate direct de vreo component a integritii datelor, datorit importanei lor, ar tre bui s verificai toate structurile de vederi. La examinarea vederilor, vei testa urmt oarele aspecte: Fiecare vedere conine tabelele de baz necesare pentru a furniza in formaiile solicitate; Ai atribuit cmpurile adecvate fiecrei vederi; Fiecare cmp calc lat furnizeaz informaii pertinente sau mbuntete maniera de prezentare a datelor; Fie e filtru returneaz setul adecvat de nregistrri; Fiecare vedere are o diagram de vede re; 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 proiect t-o are o structur solid, datele pe care le va conine sunt unitare i acceptabile, ia r informaiile pe care le vei extrage din ea vor fi exacte. Alctuirea documentaiei ba zei 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 di verse 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 s tructurii tabelelor; Diagrame de relaii; Foi de specificaii pentru regulile de des furare a activitii; Diagrame ale vederilor; Foi de specificaii pentru vederi. Toate ceste 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 n ici o referire la sistemul de gestiune a bazelor de date (SGBDR) n care va fi imp lementat 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 pute a 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 moda litatea 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 parcurgere a 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 bibl iotec cu ajutorul cruia s gestionm crile, cititorii i mprumuturile care se fac de ct east bibliotec. Obiectivele misiunii n urma discuiilor i analizrii documentelor obinut 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 i rmaii despre natura profesiilor lor, a preocuprilor etc. Dorim s avem evidena mprumut urilor 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 t ransfer 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 c uri 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 d care fac parte. Nu este o abatere care s pun n pericol proiectul nostru, trebuie ma i mult atenie din partea noastr dar se ctig timp preios. Crearea structurilor de date 06

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 specificaii e de cmp, completnd formularul Specificaii de cmp care se gsete n anexa acestei cri. a cu tabelele bazei de date este prezentat n tabelul care urmeaz. Tabel tblAutori Cimp AutorID ChP Nume Prenume Nationalitate DataN DataD EdituraI D ChP Denumire Localitate Tara CarteID ChP AutorID ChE EdituraID ChE Denumire Do meniuID ChE AnAparitie Pagini Valoare Stoc DomeniuID ChP Denumire Explicatii Imp rumutID ChP CarteID ChE CititorID ChE DataImprumut Perioada DataRestituire Citit orID ChP Nume Prenume ProfesiaID ChE DataN Adresa Localitate JudetID ChE Observa tii JudetID ChE Denumire Abreviere ProfesiaID ChP Denumire Explicatii Tip data A utoNumber Character(150) Character(150) Character(15) Data/Time Data/Time AutoNu mber Character(150) Character(150) Character(50) AutoNumber Long Integer Long In teger Character(250) Long Integer Integer Integer Single Integer AutoNumber Char acter(50) Character(250) AutoNumber Long Integer Long Integer Data/Time Integer Data/Time AutoNumber Character(150) Character(150) Long Integer Data/Time Charac ter(150) Character(150) Long Integer Character(150) AutoNumber Character(75) Cha racter(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 Nu ll 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 pa rtea ca mai spectaculoas a proiectului nostru, stabilirea relaiilor dintre tabelel e 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 tre buie transformat n 2 relaii 1:N, pentru a putea fi folosit n rapoarte. n acest sens, a u aprut tabelele de legtur tblAutoriCarti, tblAutoriArticole, tblAutoriActivitati i tblAutoriContracte. Documentaia proiectului ar trebui s cuprind doi de specificaii p entru toate cmpurile tabelelor. Din motive de spaiu, nu vom completa aici dect o as tfel de foaie, care va fi prezentat n pagina urmtoare. Cmpul descris n aceast specific aie va fi DataN. 108

Baze de date Capitolul 3 Fig. 3.40. Foaia de specificaie pentru cmpul DataN 109

Baze de date Capitolul 3

Determinarea i instituirea relaiilor ntre tabele Aceasta este etapa a 4-a din proie ctarea unei baze de date. n urma parcurgerii ei, va rezulta diagrama structurii b azei de date, folosind notaiile i simbolurile nvate n acest capitol. Este documentul c are va fi folosit cel mai mult la implementarea bazei de date i care conine cea ma i mult informaie concentrat ntr-un spaiu redus, de regul o pagin tiprit. Pentru real a diagramelor pot fi folosite cunotinele dobndite la studiul Word-ului sau Excel-ul ui. 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 cazu e fa, s-a optat pentru o diagrama de relaii scoas din mediul Access, cu un program d e captare de imagini (figura 3.41). Aceast imagine o s mai fie ntlnit cu ocazia aplic aiilor 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 a ctivitii, care va fi abordat n pasul urmtor. Determinarea i definirea regulilor de des furare a activitii n aceast etap trebuie s determinm regulile de desfurare a activ baza de date proiectat. Dup cum tim, exist 2 tipuri de reguli de desfurare a activit 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 rel aii, pentru a avea un model complet. Pentru stabilirea regulilor de desfurare a act ivitii specifice unui cmp trebuie s parcurgem urmtoarele etape: Alegem un tabel; Ana izm fiecare cmp i stabilim dac acesta necesit vreo restricie; Dac e necesar, definim gulile de desfurare a activitii pentru acel cmp; Dac e necesar vom modifica i elemen e adecvate din specificaia de camp; Determinm aciunile care verific regula; nregistr regula pe o Foaie de specificaii pentru regula de desfurare a activitii. Desigur, sta bilirea regulilor de desfurare a activitii nu este o treab prea simpl, experiena joac ci 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 spec ific 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 neces ar s se stabileasc asemenea reguli i pentru relaii. Pentru stabilirea regulilor de d esfurare a activitii specifice unei relaii trebuie s parcurgem urmtoarele etape: Sel o relaie; Revizuim relaia i determinm dac aceasta necesit vreo restricie; Definim lile de desfurare a activitii pentru aceast relaie; Stabilim regula modificnd n ace mp caracteristicile adecvate relaiei; Determinm ce aciuni verific regula; Notm regul 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 nei 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 pu tea identifica toate vederile n faza de proiectare. Nici nu ne propunem acest luc ru. Scopul acestui paragraf este de identifica cteva vederi ale proiectului la ca re lucrm i a completa un formular de specificaii pentru una dintre ele. Iat cteva ved eri 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. P entru exemplificare s lum vederea Lista cititorilor bibliotecii a crei structur o vede m n figura 3.44. tblCititori tblJudete JudetID Denumire Abreviere CititorID Nume Prenume Profesia ID .. 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 tblPr ofesii. ntre aceste tabele exist relaii unu la mai muli dup cum se poate vedea din dia ram. Observai, de asemenea, c exist un cmp calculat, cmpul Cititor care rezult din adu area(concatenarea) cmpurilor Nume i Prenume. n figura 3.45 este prezentat Foaia de s pecificaii pentru vederea Lista cititorilor bibliotecii. Studiai cu atenie acest doc ument i ncercai s facei foi de specificaii pentru celelalte vederi. 116

Baze de date Capitolul 3 Fig. 3.45. Foaie de specificaii117 vederea Lista cititorilor bibliotecii pentru

Baze de date Capitolul 3

Verificarea integritii datelor n aceast etap sunt rezolvate toate problemele legate d e proiect. Practic se poate trece la implementarea bazei de date ntr-un SGBDR, da r o ultim verificare a proiectului nu este de prisos, deoarece ar fi putut scpa un ele mici erori care se vor descoperi oricum ntr-o anumit faz a procesului de implem entare. 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 rtul depus pentru aceast revizuire final. Informaiile pe care le va furniza aceast b az de date vor fi exacte. Este un fel de recepie final a proiectului, fcut de executa ntul su. Presupunem c ai verificat integritatea datelor la nivel de tabel, cmp, relai e, desfurarea activitii i la nivel de vedere. Din pcate, aceast etap nu are un docume bine definit care s ateste c a fost fcut. Concluzii privind proiectarea bazelor de d ate relaionale Proiectarea bazelor de date relaionale este o activitate complex, ex ecutat, de regul, de o echip de specialiti format din informaticieni, ingineri i econo miti. n acest studiu de caz, ai parcurs toate etapele elaborrii unui proiect temeini c de baze de date. Dup cum spuneam, orice baz de date are un scop de la care nu tr ebuie 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 dez voltare poate s clarifice aceste aspecte chiar de la nceput. Pe tot parcursul elab orrii proiectului, ai adunat o documentaie consistent care va fi de un real folos n p rocesul 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 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 informa i de la viitorii utilizatori ai bazei de date. Dac suntei angajatul firmei benefic iare, vei putea colabora eficient cu echipa de dezvoltare, ca viitor utilizator a l bazei de date. Dac mprejurrile o cer, ai putea deveni administrator al bazei de da te, 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 manipul are a bazelor de date SQL. Vom folosi acest limbaj pentru a scoate informaii dint r-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 s implu spre complex, iar exemplele prezentate vor fi foarte sugestive pentru nelege rea 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 pui ne cuvinte (instruciuni), ceea ce face s fie uor de nvat i folosit. Toate bazele de da e importante accept limbajul SQL, aa c nvarea lui este de un real folos. n ciuda apare tei simpliti, SQL este un limbaj foarte puternic, cu care, dac-i utilizai cu intelig en facilitile, putei efectua operaii complexe i sofisticate cu bazele de date. Limbaju SQL este un limbaj neprocedural sau declarativ deoarece nu conine instruciuni pre cum 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 i nevoie s stabileasc i modalitile de a ajunge la rezultatele dorite. Este ceea ce vi seaz fiecare dintre noi, nu? Exist un anumit grad de standardizare a limbajului SQ L, mai multe SGBDR recunoscnd principalele instruciuni ale acestuia. Pe plan mondi al, standardul n domeniu este considerat ANSI (American National Standards Instit ute) SQL care are n vedere att aspectele de definire, interogare, manipulare a dat elor, 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 li mbajului SQL i anume: cea prin apelare direct, cea modular i cea de tip ncapsulat. Pr ima metod cost n introducerea instruciunilor SQL de la prompter, cea de a doua folos ete anumite proceduri apelate de programele aplicaiei, iar cea de a treia variant d e implementare are n vedere instruciuni ncapsulate n codul program, fiind de tip sta tic i dinamic. Instruciunile SQL se grupeaz astfel: Instruciuni de definire a datelo r; Instruciuni de manipulare a datelor (adugare, modificare, tergere); Instruciuni d e selecie a datelor (consultare a bazei de date); Instruciuni de procesare a tranz aciilor. Dup cum spuneam, instruciunile SQL sunt puine, dar ele sunt completate cu c lauze care le mresc puterea. Practic, noi trebuie s nelegem i s folosim clauzele care soesc instruciunile. Sintaxa folosit nu este pretenioas, singura noastr grij este s f sim expresii lizibile, prin evidenierea instruciunilor i a parametrilor lor. n cadru l acestui curs vom folosi limbajul SQL corespunztor programului ACCESS. n acest ca pitol vom nva folosirea limbajului scriind expresii SQL pe hrtie folosind o baz de da te existent, completat cu date. Abia n capitolul urmtor vom folosi limbajul SQL n cad rul 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 d e date dac necesitile vor impune acest lucru. Metoda pe care o vom folosi pentru a n va limbajul SQL este cea a nvrii din mers a instruciunilor i clauzelor, adic execu i i nvm instruciunile folosite. Operaiunile vor fi n aa fel alese ca s acopere tot l practic pe care o s-l ntlnii n realitate. ntr-o anex vor fi sistematizate instruciu e SQL cu clauzele i sintaxa lor. Aceast anex v va fi de un real folos dup ce vei dobnd 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 r egsi una sau mai multe coloane. Aceasta este cea mai folosit instruciune din SQL. D in tabelul tblStudenti prezentat n figura 4.1 ne propunem s extragem numele i prenu mele 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 Co smin 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 131 1 1332 1321 1321 1331 1111 1111 1121 1241 1241 Stare Bugetar Bugetar Bugetar Bug etar 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 Da niel 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 e ste evident. Dac dorii s selectai toate coloanele tabelului se folosete expresia urmto are: 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, al abetic sau cresctoare/descresctoare. Sortarea datelor se face cu ajutorul clauzei O RDER BY a instruciunii SELECT. La tabelul din figura 4.1 ne propunem s scoatem num ai 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 Cos min Marius Traian 123

Baze de date Capitolul 4

Observai clauza ORDER BY care ordoneaz nregistrrile n ordine alfabetic dup valorile di 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 sul: Pentru a indica ordinea descresctoare de sortare se folosete cuvntul cheie DES C. Dac cmpul dup care se face sortarea este alfanumeric, sortarea se face alphabeti c, iar dac este numeric sau de dat calendaristic, sortarea se face cresctor/descresct or. 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 originalul. Filtrarea datelor Prin filtrarea datelor se nelege extragerea dintr-u n tabel numai a anumitor nregistrri de care avem nevoie, de exemplu, din tabelul d e 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, p resupune includerea n expresia SQL a unui criteriu de cutare a nregistrrilor dorite. ntr-o instruciune SELECT, datele sunt filtrate prin specificarea criteriilor de cu tare 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 Du mitru 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 urme az: = Egalitate <> Non-egalitate != Non-egalitate < Mai mic dect <= Mai mic sau e al cu !< Nu mai mic dect > Mai mare dect >= Mai mare sau egal cu !> Nu mai mare de ct 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 un ul sau altul dintre ele. 125

Baze de date Capitolul 4

Iat cteva cazuri concrete de folosire a operatorilor: Interval de valori: WHERE Pr et BETWEEN 2.5 AND 10; (afieaz toate nregistrrile care au n coloana Pret valori ntre 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 c ondiia, dar aici am folosit non-egalitatea. Ceilali operatori se folosesc la fel c a 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 p uternice de cutare. Vom folosi ali operatori cum sunt AND, OR, NOT i IN. De multe o ri, filtrarea dup o coloan nu rezolv problema pe care o avem. Pentru a filtra dup ma i multe coloane se folosete operatorul AND. Fie tabelul din figura 4.2. Ne propun em s facem diferite filtrri. StudID 1 2 3 4 5 6 7 8 9 10 Nume Bogdan Meruta Pop Bucur Pop Cotirla Cotoara Coz ma 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 Sect ia IEI IEI IEI IMPI IEI TCM TCM TCM MEC MEC An 1 1 2 2 3 1 1 2 4 4 Grupa 1311 13 12 1321 1321 1331 1111 1111 1121 1241 1241 Stare Bugetar Taxa Bugetar Bugetar Ta xa 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 S QL: 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 Ta xa

Urmrii expresia SQL i verificai rezultatul obinut. ncercai i alte filtrri asemntoa vai 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 pr opunem, 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 Se ctia=TCM) AND An = 2; Rezultat: Nume Pop Cozma Prenume Marius Traian Dumitru Sectia IEI TCM Grupa 1321 1121 Star e Bugetar Bugetar Observai folosirea parametrilor OR i AND, respectiv apariia celor dou paranteze. Ace ste paranteze au legtur cu ordinea operaiilor OR i AND. n ordinea operaiilor, operator ul 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 paran tezele 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 par anteze. 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, Cozm a); 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 ace lai lucru ca i operatorul OR, deci se poate scrie o expresie SQL cu acesta. Care e ste 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 l ucrai cu liste lungi de opiuni valide, sintaxa operatorului IN este mai simpl i uor d e 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 e ste c operatorul IN poate s conin o alt instruciune SELECT, i astfel v permite s con clauze WHERE foarte dinamice. Acest aspect va fi reluat mai trziu. Operatorul NO T. Acest operator al clauzei WHERE are o singur funcie neag orice condiie care l urme az. 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 a li 128

Baze de date Capitolul 4 operatori, cuvntul cheie NOT poate fi utilizat naintea coloanei dup care se face fi ltrarea, nu imediat dup aceasta. Iat un exemplu sugestiv, extragerea studenilor neb ugetari din tabelul din figura 4.2. Expresie SQL: SELECT Nume, Prenume,Sectia, Grupa, Stare FROM tblStudenti WHERE NOT Stare=Bugeta r; 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 ntreb 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 operatorul ui NOT. Acesta este ns foarte util n clauzele mai complexe. De exemplu, dac folosii o peratorul NOT n asociaie cu un operator IN, va fi mult mai simplu s gsii toate nregist rrile care nu corespund cu o list de criterii. Operatorul LIKE. Aici vei nva ce sunt c aracterele de nlocuire, cum se folosesc ele i cum s facei cutri cu ajutorul lor. Pn a a, toi operatorii, foloseau valori cunoscute, iar ei se ocupau de cutarea corespon denelor dintre valori, dac sunt mai mari sau mai mici dect altele, dac verific un dom eniu 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 nu me 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 ti puri de caractere de nlocuire. 129

Baze de date Capitolul 4

Pentru a utiliza caracterele de nlocuire n clauzele de cutare, trebuie utilizat ope ratorul 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 e galitate. 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 fol osite de programul ACCESS. Caracterul de nlocuire *. Este cel mai frecvent utiliz at. ntr-un ir de cutare, * nseamn corespunde cu oricte apariii a oricrui caracte l 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 Dum itru 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 figu ra 4.3, ncepe cu Pop. Expresie SQL: SELECT Nume, Prenume,Sectia, Grupa, Stare FROM tblStudenti WHERE Nume LIKE Pop* OR DER 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 al e filtrri folosind aceast tehnic. Caracterul de nlocuire ? . Acest caracter (semnul n rebrii) este utilizat la fel ca simbolul * , dar nu asigur corespondena mai multor c aractere, 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 a cestui caracter de nlocuire. Observaie! n diferite SGBDR semnele de nlocuire ar pute a s fie diferite. Astfel, n Oracle * este nlocuit cu % , iar ? este nlocuit cu de subliniere _ . Pentru a nu avea probleme este bine s studiai documentaia SGBDR-ul ui 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 iecare cmp trebuie s fie independent, adic valoare sa s nu depind de valorile din alt e cmpuri. Exemplul clasic care se poate da aici este cel al cmpului Valoare care n u trebuie s apar ntr-un tabel care are Pretul unitar i Cantitatea, dar avem nevoie d e acest cmp care este rezultatul nmulirii dintre pre i cantitate. Ei bine, acest cmp t rebuie calculat. Un alt exemplu este cel al adresei care se compune din concaten area rezultatelor din mai multe cmpuri. n ambele exemple, datele stocate n tabele n u sunt exact ceea ce are nevoie aplicaia dumneavoastr. n loc s regsii datele aa cum su t, pentru ca dup aceea s le reformatai n aplicaia client sau n raport, dorii s regsi le transformate, calculate sau reformatate direct din baza de date. Aici intervi n 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 S ELECT din limbajul SQL. De menionat faptul c numai baza de date tie care coloane di ntr-o instruciune SELECT sunt realmente coloane din tabele i care sunt cmpuri calcu late. 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 per soane format din numele complet, aa cum se obinuiete n practic. S scriem expresia SQL are 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 tblSt udenti ORDER BY Nume; Rezultat: Student Bogdan P. Mircea Florin Branea N. Daniel Brucan P. Mihaela Brustur I. Co smin Cotirla L. Raluca Adina Cozma I. Calin Florin Pop I. Laura Popa G. Ovidiu P opescu 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 udent, pe care l regsim n capul de tabel, ca nume a noului cmp, obinut prin concatena rea celor trei. Cuvntul cheie AS introduce un alias care este un nou nume dat unu i cmp. Reinei aceast tehnic de creare a unor cmpuri. Cmpuri calculate aritmetic. Acest cmpuri calculate rezult dup efectuarea unor calcule aritmetice asupra datelor regsi te. Pentru a nelege mecanismul crerii acestor cmpuri, vom lua un exemplu practic. Pr esupunem 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 cm pul Valoare, obinut prin produsul cmpurilor PU i Cantitate. n figura 4.4 este prezen tat acest raport. 133

Baze de date Cod 1001 1023 1231 1089 1904 Denumire Bujie DK1 Acumulator 56A Parb riz 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 tblP roduse; Observai i reinei sintaxa folosit pentru crearea noului cmp VALOARE.

Funcii pentru manipularea datelor Ca aproape toate limbajele de programare, SQL a ccept folosirea funciilor pentru manipularea datelor. Funciile sunt operaii care, de obicei, se efectueaz asupra datelor, n general pentru a facilita transformarea i m anipularea acestora. Trebuie s avei n vedere c fiecare SGBDR are propriile funcii i pr opria sintax, chiar dac ele seamn foarte mult, exist mici diferene pe care trebuie s l 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 p actic. Majoritatea implementrilor SQL accept urmtoarele tipuri de funcii: Funciile te t sunt folosite la manipularea irurilor de text (de exemplu, pentru ajustarea sau completarea valorilor n majuscule i minuscule). Funciile numerice sunt folosite pe ntru 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 o r, i la extragerea unor componente caracteristice din aceste valori (an, lun, zi, o r) pentru a verifica validitatea unor date introduse. Funciile text. n aceast catego rie 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() IM() RTRIM() - returneaz caracterele indicate din stnga - returneaz caracterele ind icate din dreapta irului. - returneaz lungimea unui ir. - transform toate caracterel e irului n minuscule. - transform toate caracterele irului n majuscule. - nltur spai lbe 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 celela lte tipuri. Iat-le pe cele mai folosite: ABS() COS() SIN() TAN() SQRT( 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 num - returneaz valoarea lui PI. - returneaz valoarea medie a unei coloane. - returne az numrul de linii dintr-o coloan. - returneaz valoarea cea mai mare dintr-o - retur neaz 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 ormate speciale, de aceea este nevoie de funcii speciale pentru a le manipula. El e 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 calenda ristice. Cele mai importante sunt: Date() - returneaz data curent a sistemului. Da teAdd(interval, numar, data) returneaz o dat rezultat din adugarea unui interval la data specificat. Parametrul interval poate avea valorile: yyyy an, q trimestru, m l un, 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. Exemp lu Day(#15/10/2003) returneaz 15. Hour(data) returneaz ora dintr-o dat calendaristi c. Month(data) - returneaz luna dintr-o dat calendaristic. Now(data) returneaz dat ora curent a calculatorului pe care lucrai. Time() returneaz ora calculatorului dum neavoastr. Year(data) returneaz anul dintr-o dat calendaristic. Alte funcii de dat ntaxa 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, re pectiv s obinei valorile cele mai mari sau cele mai mici, fr necesitatea regsirii tutu ror datelor. Toate calculele de pn acum au fost efectuate asupra tuturor datelor d intrun tabel, sau asupra datelor ce corespundeau clauze WHERE specifice. Dac ai do ri s facei asemenea calcule asupra unor seturi logice se nregistrri? Aici intervine gruparea datelor. De exemplu, gruparea vnzrilor sptmnale dup numele vnztorului care l 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. Presup unem c avem ntr-o baz de date un tabel n care inem evidena produselor vndute de mai mu 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 R 13 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 vnzt r. Ne propunem s aflm cte vnzri a fcut fiecare vnztor. Expresie SQL: SELECT Cod_vinzator, COUNT(*) AS Numar_vinzari FROM tblProduse GROUP BY Cod_vinz ator; 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 calcul t cte o dat pentru fiecare vnztor n parte. Dup cum se vede i n rezultat, vnztorul M fcut 3 vnzri, iar colegii si, cte una. Deoarece ai folosit clauza GROUP BY, n-a trebui t s specificai fiecare grup care trebuie evaluat i calculat, acest lucru s-a fcut n m od automat. Clauza GROUP BY instruiete sistemul de gestionare a bazei de date s gr upeze 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 grup ri, asigurndu-v mai mult control asupra felului n care sunt grupate datele. Orice c oloan 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 al iasuri. 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 integritate a 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, trebui e 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, car e este foarte asemntoare cu clauza WHERE. Prin urmare, clauzele WHERE i HAVING se o cup 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 WH ERE este valabil i pentru HAVING. Pentru a nelege clauza HAVING, s relum exemplul pre cedent 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_vinz ator HAVING COUNT(*) > 2; Rezultat: Cod_vinzator MR-01 Numar_vinzari 3

Primele trei rnduri ale instruciunii SELECT sunt similare cu cele anterioare, ulti mul 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 cazu cesta, deoarece filtrarea se bazeaz pe valoarea agregat a grupului, nu valorile un or 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 no i mai mult de 2 comenzi n ultimele 12 luni. E clar c nu vom face grupuri din tot t abelul 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 f ceste 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 studia te 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 SE LECT de pn acum, regseau date din tabele izolate ale bazei de date. Limbajul SQL v p ermite, 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_com anda 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 ca re exist relaiile desenate. Pentru a nelege mai bine conceptul de subselecii vom comp leta 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 tblDetaliiC om DetComID 20010 20011 20012 20013 20014 DataCom 16.04.2005 16.04.2005 16.04.20 05 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 comenz ilor, iar n tabelul tblCumparatori sunt stocai toi cumprtorii. Ne propunem s aflm toi mprtorii care au comandat articolul 1001. Cum procedm? Iat paii care trebuie urmai: R gsii numele tuturor comenzilor ce conin articolul 1001. Regsii indicatorii tuturor cu mprtorilor 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 ant . Fiecare dintre aceti pai poate fi executat de o interogare separat. Procednd astfe l, folosii datele returnate de o singur instruciune SELECT pentru a popula clauza W HERE a urmtoarei instruciuni SELECT. Putei, de asemenea, s folosii subselecii, care s ombine cele 3 interogri ntr-o singur instruciune. Pentru primul pas, instruciunea SEL ECT 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 nt 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 t at cum trebuie s procedai: Expresie SQL: SELECT CumparatorID, NumeCump FROM tblCumparatori WHERE CumparatorID IN (6001, 6 083); 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 b informaiile dorite. Ai observat cum sau transferat rezultatele unei interogri n par ametrii altei interogri. Soluia este s ncercai s unii aceste 3 interogri ntr-una sin at aceast cale: Expresie SQL: SELECT CumparatorID, NumeCump FROM tblCumparatori WHERE CumparatorID IN (SELECT CumparatorID FROM tblComenzi WHERE ComandaID IN (SELECT ComandaID FROM tblDetali iCom 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 sing ur 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 l al comenzilor emise de fiecare cumprtor din tabelul tblCumparatori. tim c aceste c omenzi sunt stocate n tabelul tblComenzi, mpreun cu identificatorii cumprtorilor. Pen tru a efectua aceast operaie, trebuie efectuai urmtorii pai: Regsii lista cumprtor n 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.CumparatorI D=tblCumparatori.CumparatorID) AS Comenzi FROM tblCumparatori ORDER BY NumeCump; Remarcai utilizarea aliasului C pentru tabelul tblComenzi pentru a simplifica scr ierea 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 cor ect 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 e ste capacitatea de a uni tabele din mers, n interogrile de regsire a datelor. Uniri le constituie unele dintre cele mai importante operaii pe care le putei efectua fo losind instruciunile SELECT, i o bun nelegere a lor i a sintaxei pentru unire reprezin t o parte esenial din nvarea limbajului SQL. Ceea ce ai nvat n capitolele anterioa 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 a stfel nct s fie returnat un singur set de rezultate, iar unirea asociaz din mers lin iile corectate din fiecare tabel. Crearea unei uniri simple Crearea unei uniri este foarte simpl. n exemplul urmtor, vom uni dou tabele tblProdu se i tblVinzatori, al crui rezultat este produsul cartezian al acestora, avnd un nu mr 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 D enumireProdus 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. Ade vrata unire este cea cnd se fac legturi ntre tabele, aa cum se vede mai departe. Expresia SQL: SELECT NumeVinzator, DenumireProdus, PretProdus FROM tblVinzatori, tblProduse; W HERE 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, re zultnd 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 car e 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 IN NER JOIN ... ON, dup cum se vede mai jos: SELECT NumeVinzator, DenumireProdus, PretProdus FROM tblVinzatori INNER JOIN tbl Produse ON tblVinzatiri.VinzatorID=tblProduse.VinzatorID; Aceast variant este preferat de programatori, dar ea este i cea indicat de specificaii le SQL. 149

Baze de date Capitolul 4 Uniri avansate

Limbajul SQL nu impune limite asupra numrului de tabele ce pot fi unite ntr-o inst ruciune SELECT. Regulile de baz pentru crearea unei uniri rmn aceleai. n primul rnd, e umerai 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 PretProdu s 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 Nao iu Sarmasel Naoiu Roma <<alte cimpuri>> ...... ...... ...... ...... ComandaID 10 010 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 gse sc 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, tblD etaliiCom, 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 tblDetalii Comenzi-tblProduse i tblProduse-tblVinzatori, iar al treilea filtreaz doar produse le 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 si ntaxa exact a unirii pe care o accept. Asigurai-v c utilizai condiia corect de unir diferent de sintaxa folosit, altfel vor fi returnate date incorecte. Asigurai-v c pr evedei ntotdeauna o condiie de unire, altfel vei sfri cu un produs cartezian. ntr-o re, 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 u e, 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 e xpresiilor SQL.

Compunerea interogrilor Interogarea bazelor de date este chiar sensul existenei lo r. Nimeni n-a creat vreo baz de date fr s o interogheze cndva, cnd se adun suficiente ate n ea. Pn acum noi am fcut interogri folosind o singur instruciune SELECT, care ret rna 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 inte rogri compuse. n esen, exist dou situaii generale n care s folosii interogrile com tru a returna date structurate similar din tabele diferite, ntr-o singur interogar e. Pentru a efectua mai multe interogri asupra unui singur tabel, returnnd datele ca o singur interogare. Pentru a compune interogrile SQL se folosete operatorul UNI ON. Cu ajutorul lui pot fi specificate instruciuni SELECT multiple, iar rezultate le acestora pot fi combinate ntr-un singur set de rezultate. Folosirea operatorul ui UNION este destul de simpl, tot ce avei de fcut este s specificai toate instruciuni le SELECT i s plasai ntre ele cuvntul cheie UNION. S lum un exemplu. Presupunem c tre e s ntocmii un raport despre toi cumprtorii din judeele Bistria-Nsud, Braov i Clu aport 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 acu m 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 E mail 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 Jud etCumparator 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@anco na.ro A doua instruciune SELECT va cuta toate locaiile firmei ANCONA SA. Expresie SQL: SELECT NumeCumparator, JudCump, PersContact, Email FROM tblCumparatori WHERE Num eCumparator= 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 Cluj. Pentru a compune cele 2 interogri vei proceda astfel: Expresie SQL: SELECT NumeCumparator,JudCump, PersContact, Email FROM tblCumparatori WHERE Jude tCumparator IN (BN, BV,CJ) UNION SELECT NumeCumparator, JudCump, PersConta ct, Email FROM tblCumparatori WHERE NumeCumparator= ANCONA SA; 153

Baze de date Capitolul 4 JudCump BN BV CJ MS PersContact Pop Petru Pietroi Sorina Crisan Ovid iu 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, rim s apar i dublurile, atunci vom folosi clauza UNION ALL. Fr extensia ALL, duplicat ele se elimin automat. Dac dorim ca rezultatele s fie sortate, vom aduga clauza ORDE R BY dup ultima clauz WHERE. De remarcat, c operaiile UNION accept o singur clauz ORDE BY, dup ultima instruciune SELECT. Iat cum arat o expresie SQL cu afiarea tuturor nre gistrrilor care sunt i ordonate: Expresie SQL: SELECT NumeCumparator, PersContact, Email FROM tblCumparatori WHERE JudetCumpara tor IN (BN, BV,CJ) UNION ALL SELECT NumeCumparator, PersContact, Email FRO M 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 Po p 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 operai e 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 fiec instruciune SELECT din operaia UNION. Tipurile de date din coloane trebuie s fie c ompatibile. 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, actua lizarea i tergerea datelor Datele unei baze de date trebuie periodic actualizate, pentru a reflecta activitile unei firme sau organizaii. ntreinerea datelor este o act ivitate continu, plin de responsabilitate, fr de care, utilitatea bazei de date este ndoielnic. Limbajul SQL ofer instruciuni dedicate ntreinerii datelor unei baze. ntre rea 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 su nt alte 4 instruciuni pe care le vom nva n continuare. Acestea sunt INSERT, UPDATE, D ELETE i CREATE TABLE. Prima dintre ele este instruciunea INSERT, folosit pentru ins erarea de linii (nregistrri) ntr-un tabel de baz de date. Inserarea se poate face n m ai multe moduri: Inserarea unei singure linii complete; Inserarea unei singure l inii 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 tabe l 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 ) V ALUES (32, 20033, Cafea_Jacobs, kg, 12.23, Conform normelor UE); Aceast expresie SQL, insereaz n tabelul tblProduse un rnd cu valorile prezentate n pa ranteza de dup VALUES. Valorile corespund, n ordine, cu denumirile cmpurilor din pr ima parantez a expresiei SQL, indiferent de ordinea n care apar n tabel. Dac numrul c oloanelor indicate nu este acelai cu numrul valorilor, se va produce un mesaj de e roare care precizeaz acest lucru. Inserarea unei singure linii pariale. Exist cazur i n care nu este nevoie s se completeze toate cmpurile unei nregistrri, fie c nu se cu nosc valorile n acel moment, fie c nu e necesar valoarea acelui cmp pentru nregistrar ea 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 n ecompletate 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 r ezultatelor unei interogri. Inserarea ntr-un tabel a unei singure nregistrri, comple te 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 com pletri ale tabelelor sunt cele cu nregistrri provenite din interogri ale altor tabel e. 156

Baze de date Capitolul 4

Aceste inserri se pot face manual de ctre administratorul bazei de date, dar cel m ai 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 ins truciune INSERT, care poate fi utilizat pentru a insera rezultatul unei instruciuni SELECT se numete INSERT SELECT, fiind alctuit dintr-o instruciune INSERT i o instruci une SELECT. S presupunem c avei ntr-o baz de date un tabel numit tblClienti care conin e 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, apo i se decide care sunt clienii care merit introdui n baza de date i numai atunci, se i ntroduc 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 tblClientiN oi; Dup cum se vede, tabelul tblClienti este completat cu nregistrri din tabelul tblCli entiNoi, dar pot fi i alte surse de interogare. Totul este ca numrul de cmpuri i tip ul lor de dat s coincid. Actualizarea datelor Datele unei baze de date sufer dese modificri. Cum datele se gsesc n tabele, este ne voie ca aceste tabele s fie periodic actualizate. Ca s modificai datele dintr-un ta bel, trebuie s folosii instruciunea UPDATE. Ea poate fi folosit n dou moduri: Pentru ctualizarea numai a anumitor linii dintr-un tabel; Pentru actualizarea tuturor l iniilor unui tabel. Instruciunea UPDATE folosit defectuos, poate s v produc mari neplc eri, tiut fiind c aici nu exist posibilitatea de revenire n sensul undo. Prin urmare t rebuie s fii foarte ateni la folosirea ei. De altfel, unele sisteme de gestiune a b azelor de date au restricii de securitate pentru a mpiedica unele aciuni greite asup ra 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 fil tru care determin liniile care trebuie actualizate. S examinm un caz banal. Clientu l 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 tb lClienti. Instruciunea UPDATE ncepe ntotdeauna cu numele tabelului care este actual izat (aici tblClienti). Urmeaz comanda SET, care atribuie noua valoare unei coloa ne (aici coloana E_mail). Instruciunea UPDATE se termin cu o clauz WHERE, care anun s istemul de gestionare a bazei de date ce linie s actualizeze. Atenie, fr clauza WHER E sistemul ar actualiza toate liniile din tabelul tblClienti, punnd adresa de e-m ail alfaroom@yahoo.com la toi clienii, ceea ce ar fi un lucru inadmisibil. Actualiza rea mai multor coloane necesit a sintax corespunztoare cum se poate vedea mai jos: UPDATE tblClienti SET E_mail = alfaroom@yahoo.com, PersoanaContact = Mocian Ioan WHE RE 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 treb uie actualizate; nregistrarea care trebuie actualizat este identificat cu cmpul Clie ntID, 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 val oarea 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 capit olul 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 instru ciunea DELETE. Ea poate fi utilizat n dou modaliti: Pentru tergerea numai a anumitor nii dintr-un tabel; Pentru tergerea tuturor liniilor unui tabel. Dei este o necesi tate practic, folosirea instruciunii DELETE antreneaz mari riscuri, de aceea este b ine s facei teste pe o copie a unei baze de date. Oricum, ca nceptori nu v va pune ni meni s curai tabelele unei baze de date reale de nregistrrile inutile. S presupunem tre clieni, exist civa care i-au nchis firma, deci nu mai e necesar s-i avem n tabelu blClienti, 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 tblC lienti 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 col oane. Pentru a terge valorile din anumite coloane vei folosi instruciunea UPDATE, p rezentat puin mai nainte. 159

Baze de date Capitolul 4 De asemenea, instruciunea DELETE nu terge tabele, ci numai nregistrri din tabele. Ch iar dac terge toate nregistrrile unui tabel, aceste rmne, dar va fi gol. Ai vzut cum poate terge dintr-un tabel o nregistrare. ntrebarea fireasc este cum se pot terge din tr-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 el: 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 a tt de periculoase. Trebuie s reinei faptul c n SQL nu exist un buton Undo, de anulare unei operaiuni greite, de aceea fii foarte ateni cnd folosii aceste 2 instruciuni. n ntez, 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 atu d dorii s realmente s actualizai sau s tergei toate liniile unui tabel; Asigurai-v tabelele au o cheie primar (dac ai uitat ce este aceasta, consultai capitolul respe ctiv) pe care s o folosii ntr-o clauz WHERE; nainte de a folosi o clauz WHERE cu inst uciunile UPDATE sau DELETE, testai-o mai nti cu o instruciune SELECT, ca s v asigurai iltreaz nregistrrile corecte din cauz c la clauza WHERE putei grei destul de uor. integritatea referenial (vezi paragraful Integritatea la nivel de relaie) impus baz elor de date astfel ca sistemul de gestiune al bazelor de date (SGBD) s nu permit t ergerea liniilor care au date n alte tabele asociate lor. Unele SGBD-uri permit a dministratorilor 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 copi guran a bazei de date. Vei fi astfel mai relaxai, iar n caz de o manevr greit (oameni ntem, nu?), putei reveni la ce a fost, fr nici o problem. Nu executai operaii de ter e printre alte activiti pentru c aici avei nevoie de concentrare maxim (amintii-v c u este Undo i ce ai fcut, fcut rmne). Respectai aceste cteva principii enumerate, c ut mult, gndinduv c oricte lucruri bune ai face n firma la care lucrai ca administrat de baze de date, o greeal ca tergerea complet a unor tabele sau cmpuri v descalific de initiv n ochii celor care v pltesc. 161

Baze de date Capitolul 4 Crearea i manipularea tabelelor Limbajul SQL nu este folosit numai pentru manipul area datelor. Cu ajutorul limbajului SQL se pot crea, modifica i terge tabele, chi ar dac toate SGBD-urile au propriile unelte pentru aceste aciuni. n general, exist d ou modaliti de creare a tabelelor de baze de date: Majoritatea SGBD-urilor deine pro priul instrument de gestionare, folosit i la crearea i administrarea interactiv a t abelelor bazei de date. Tabelele pot fi create, de asemenea, n mod direct, prin i ntermediul instruciunilor SQL. Instruciunea de creare a tabelelor cu limbajul SQL este CREATE TABLE. Trebuie menionat faptul c atunci cnd folosim instrumente interac tive, 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 folosin d instruciunea CREATE TABLE, trebuie specificate urmtoarele informaii: Numele noulu i tabel, specificat dup cuvntul cheie CREATE TABLE; Numele i definirea coloanelor d in 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 I nteger NOT NULL, Text(50) NOT NULL, Text(80) NOT NULL, Text(10) NOT NULL, Number NOT NULL, Text(2 55) ); Dup cum se vede, instruciunea de mai sus creeaz tabelul tblProduse care are 6 cmp uri, 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 c onsider c s-a pus NULL, adic acel cmp poate s rmn necompletat. Din cele 6 cmpuri, nu bservatii nu este obligatoriu de completat. ntre numele coloanei, tipul de dat i cu vntul cheie NOT NULL se pune spaiu. Modul de aranjare a expresiei SQL nu este impo rtant, 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 exe mplul prezentat mai nainte, pentru lizibilitate. Numele tabelului care se creeaz n u trebuie s existe n baza de date, dac exist se va produce un mesaj de eroare care i ndic acest lucru. Adugarea unei coloane. De multe ori n practic apare necesitatea adu grii unei coloane la un tabel care a fost creat i care are chiar date. Limbajul SQ L 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 colo ane. Dac diagrama de relaii permite, adic acel cmp nu este implicat n vreo relaie, col oana (cmpul) poate fi tears dintr-un tabel. Aceast manevr se face cu ajutorul instruci unii ALTER TABLE i clauza DROP COLUMN. Iat un exemplu de folosire a acestei instru ciuni: ALTER TABLE tblProduse DROP COLUMN Furnizor; Aceast expresie SQL terge din tabelul tblProduse coloana Furnizor. tergerea unui ta bel. Aa cum se poate crea un tabel ntr-o baz de date cu ajutorul limbajului SQL, to t 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 de iv, 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 a devrat performante. n acest capitol vor fi prezentate, pe scurt, aceste elemente d e performan fr a intra n amnunte de ordin tehnic. n continuare vor fi prezentate acest posibiliti avansate ale limbajului SQL. Proceduri stocate. Instruciunile SQL folos ite 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 p list rezervat i sczute din stoc pentru a nu fi vndute altor cumprtori; Articolele c nu exist n stoc i sunt cerute de comand, trebuie trecute pe o list pentru a fi aprov izionate; Cumprtorul trebuie anunat asupra articolelor existente n stoc (adic livrabi le imediat) i asupra celor care urmeaz s fie aprovizionate. Scenariul prezentat nec esit 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 instru ciune SQL, apoi pe baza rezultatului s executm alte instruciuni condiionate. Aciunea a r 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 proce ocat. Procedurile stocate nu sunt altceva dect seturi de una sau mai multe instruci uni SQL salvate pentru o viitoare folosire. De ce trebuie folosite procedurile s tocate? Iat cteva din motive: Pentru a simplifica operaiile complexe (ca cea prezen tat 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; Li mitarea accesului la datele de baz, prin intermediul procedurilor stocate, reduce ansa deteriorrii datelor, intenionat sau nu. Procedurile stocate au form compilat, d ci se execut mult mai repede; n limbajul SQL exist elemente i caracteristici disponi bile 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 procedu rilor stocate: simplitate, securitate i performan. Pentru a practica efectiv n folos irea 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 S care asigur c loturile de operaii SQL sunt executate complet sau deloc. tim c tabelel e unei baze de date relaionale sunt legate ntre ele prin intermediul cheilor prima re 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 t rebuie introduse articolele acelei comenzi. Mai nti se completeaz tabelul tblComenz i, apoi se completeaz tabelul tblDetaliiComenzi. Se pune ntrebarea, ce se ntmpl dac n impul completrii articolelor comenzii n tabelul tblDetaliiComenzi, se ntrerupe cure ntul 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. C u siguran, au fost multe astfel de situaii, ceea ce i-a forat pe creatorii limbajulu i 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 rezultatel e unor operaii pariale. Prin intermediul prelucrrii de tranzacii, v putei asigura c se urile de operaii nu sunt ntrerupte n mijlocul prelucrrii ele sunt fie complet execut ate, fie deloc. Dac nu intervine nici o eroare, ntregul set de instruciuni este exe cutat, iar datele sunt trecute n tabelele bazei de date. Dac apare o eroare, atunc i se poate derula n mod automat o revenire la starea iniial, stare cunoscut i sigur. D atorit importanei i complexitii tranzaciilor, acestea sunt folosite numai de programat orii 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 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. Un ori 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 baz ei 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 rezulta tul acesteia, adic date efective. Odat ce cursorul este stocat, aplicaia poate s der uleze 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), d esigner 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. S unt 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. Li psesc exemplele simple, sugestive care, de multe ori, fac mai mult dect pagini ntr egi de explicaii sterile. Capitolul 4, pe care tocmai l-ai parcurs, va pus la disp oziie 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 p ot ajuta s nelegei multe din aspectele practice ale folosirii limbajului SQL. Acei d intre dumneavoastr care vor ajunge administratori de baze de date, gsesc aici info rmaii 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 gest iune 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 firm ei Microsoft. Vei aplica pe viu tot ce ai nvat n capitolele precedente, vei da via 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 d oresc s-i stocheze i s-i acceseze cu uurin datele de interes personal, precum i n m 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 c re permite crearea interogrilor, formularelor i rapoartelor facilitate care lipsete din multe baze de date mai mari i mai complexe. Cu alte cuvinte, chiar i programa torii fr prea mare experien pot s se foloseasc de ACCESS pentru a transforma un vraf d e 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 A CCESS 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 dint -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 egritatea datelor i diagrame vei regsi n ACCESS ntr-o form specific acestui program. M li nceptori sunt frustrai de faptul c tabelele ACCESS, dei seamn oarecum cu cele din el, au un comportament total diferit. Dac acetia ncearc s fac vreo analogie cu tabelel e 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 AC CESS vom pune accent numai pe aplicarea n practic a acestor cunotine. Conceptele teo retice vor fi amintite ca nite lucruri cunoscute. Vei observa c ACCESS trateaz anumi te concepte ntr-o manier proprie, chiar abuzeaz de anumite ajutoare (wizard), care de multe ori deruteaz utilizatorii, mpiedicndu-i s abordeze logic anumite operaii. Pr incipalele caracteristici ale sistemului de gestiune a bazelor de date ACCESS su nt: Lucreaz sub sistemul de operare Windows; Este deschis comunicrii cu alte siste me de gestiune a bazelor de date cum ar fi FoxPro sau Paradox; Este compatibil c u tehnologia ActiveX care permite realizarea aplicaiilor client/server; Permite a plicarea 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 pen tru publicarea informaiilor n paginile Web; Conine instrumente wizard care permit u tilizatorului 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 c omune de aplicaii; 169

Baze de date Capitolul 5 Permite utilizarea obiectelor ACCESS n alte aplicaii rulate sub Windows. tilizarea de adrese i legturi Internet. Permite u

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 l ansarea acestuia cu metoda general Start / Programs / Microsoft Access. Vei gsi rep ede programul observnd c iconia sa conine mic cheie de yal. Toate capturile i descrier le se refer la versiunea Access 2002. Dac avei alt versiune trebuie s inei cont de dif renele 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 a pare 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: le (tables) Cereri de interogare (queries) 170 Tabe

Baze de date Capitolul 5

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

n continuare vor fi prezentate, pe scurt, aceste obiecte, urmnd s fie reluate atunc i 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 contr olul ntregii aplicaii. Acestea v permit s facei aplicaii performante chiar dac suntei nceptor n baze de date. Cereri de interogare (queries) sunt obiecte care permit vi zualizarea informaiilor obinute prin prelucrarea datelor din una sau mai multe tab ele i/sau alte cereri de interogare. Aici vei folosi din plin cunotinele dobndite des pre limbajul SQL. Rapoarte (reports) sunt obiecte care permit formatarea i tiprire a 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 su port n vederea furnizrii accesului la date prin intermediul Internet-ului. Comenzi macro (macros) reprezint un obiect care conine o definiie structurat a uneia sau ma i multor aciuni pe care ACCESS le realizeaz ca un rspuns la un anumit eveniment. Mo dule (modules) reprezint un obiect care conine proceduri definite de utilizator, s crise 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, D esign, 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 prezentat e. Dup cum spuneam, ACCESS-ul are un instrument numit wizard care v va ajuta s cons truii 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 n ecanismul legturilor dintre tabele, e puin probabil c vei ajunge la rezultate mulumit oare, 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 date, sau dac suntei la nceput de studiu, mcar o diagram de relaii i structurile tabel lor. 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 structur ii tabelelor se poate face n trei moduri: Utiliznd fereastra de proiectare (Create table in design view); Utiliznd instrumentul Wizard (Create table by using wizar d); Prin introducerea datelor (Create table by entering data). Consider c modul c el mai eficient de creare a tabelelor, care se potrivete utilizatorilor romni, l re prezint primul mod (Create table in design view), motiv pentru care va fi prezent at numai acesta. Pentru a v satisface curiozitatea nu avei dect s le ncercai pe celela lte 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 fereas tra 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 Nam ), s alegei din combobox tipul de dat pentru cmpul respectiv (Data Type) i s introduce o scurt descriere, acolo unde este cazul, despre ce va conine acel cmp (Descriptio n). 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 bu toane, 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 ta 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 nu ic: Field Size este dimensiunea cmpului. Executarea unui clic pe sgeata derulant va deschide o list de opiuni privind dimensiunea cmpului. Format este formatul sub ca re se prezint valoarea introdus n cmp. Executarea unui clic pe sgeata derulant va desc hide o list de opiuni privind formatul cmpului. Decimal Places este proprietatea ca re stabilete numrul de zecimale ce pot fi atribuite cmpului. Se poate alege un numr n tre 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. Fo rmatul de introducere are o mare importan n cadrul cmpurilor ce conin date de tip tex t sau dat calendaristic. Caption este eticheta pentru specificarea unui nume atrib uit cmpului, n cazul n care acesta este utilizat n cadrul formularelor sau cnd tabelu l 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 i ntroduse n acel cmp. Criteriul este introdus sub form de expresii care folosesc: Op eratorii: =, +, -, *, /, <, >, <=, >=, AND, OR, BETWEEN, IN, IS NULL; Identifica torii se dau n paranteze drepte []; Funcii; Constante; Validation Text reprezint te xtul care va aprea pe bara de mesaje n cazul n care valoarea introdus nu respect crit eriul impus de regula de validare. Required este proprietatea care stabilete dac i ntroducerea unei valori n acel cmp este obligatorie. Acest cmp poate avea una din v alorile Yes / No. Indexed este proprietatea care stabilete dac acel cmp are un inde x 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 a dmiterea 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 v edere al momentului crerii acestora, exist 2 tipuri de relaii ntre tabelele unei baz e de date ACCESS i anume: Relaii permanente se stabilesc dup definirea tabelelor i s unt 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 d efinirii 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 ori um. 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 tblFactur Primite 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 impuner ea 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 Re lated 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 cel 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 (folosi nd Lookup Wizard), fie n fereastra Relationship care se afieaz cu butonul , din too lbar-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 Relatio nship, cu un clic-dreapta n interiorul acesteia apoi alegnd opiunea Show Table va f i 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 coresp in 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 stabilir ea integritii refereniale artat n figura 5.3, respectiv Delete cu care putem terge leg ra. Cnd citii aceast secven, este bine s o facei cu calculatorul n fa, deoarece alt este manevre sunt greu de neles. Dac ceva nu ai neles, ntrebai profesorul care v nd aborator. 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 facili tii Lookup Wizard, pus la dispoziia noastr de programul ACCESS. Aceast metod const n ea 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 Typ e) 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 lis t de valori introduse de noi chiar n aceast faz. Aceast opiune este indicat s o folosi cnd avei un numr mic de valori pe care poate s le ia un anumit cmp. ncercai i aceast ant 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 aleg e cheia primar i un alt cmp pentru a identifica nregistrarea (acest lucru l vei neleg d 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 fere astra 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 aj uta 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 v a apare n rapoarte, de regul se las cel implicit, propus de calculator. Dup aceast ma nevr 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 Relationshi ps. 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, le 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 ca re 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 l ista afiat. Dac ai reuit s nelegei aceste diferene, nseamn c ai fcut un pas im tea crea aplicaii Access tot mai performante. Poate n acest moment nu sesizai difer enele dintre cele dou metode, dar cu siguran, le vei nelege atunci cnd vei crea form , puin mai trziu.

Introducerea datelor n tabele Dup ce s-au definit tabelele, s-au creat legturile ntr e 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 mu lt cu un tabele Excel, i s introducei pur i simplu date. Adesea, anumite nregistrri di n tabel prezint un interes deosebit, de aceea acestea trebuie filtrate temporar, adic trebuie fcute invizibile celelalte. Un filtru poate fi aplicat unui tabel, un ei cereri de interogare, unui formular sau unui raport. Filtrul este salvat mpreu n cu fiecare obiect i poate fi activat sau nu, dup nevoie. Un filtru este util pent ru realizarea urmtoarelor operaii: Selectarea unui numr de nregistrri similare; Lucr l 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 meniu ri va apare opiune Records care permite operaiile de filtrare. Exist mai multe opiun i de filtrare, dar cele mai folosite sunt urmtoarele dou: Filtrarea by Selection f iltrare conform seleciei, este cea mai rapid i mai simpl metod de aplicare a unui fil tru. Pentru a stabili criteriul de filtrare, se selecteaz un set de date dintr-un ul din cmpurile unui tabel, dup care se apas butonul ,

rezultnd tabelul filtrat. Pentru revenire se apas butonul (Remove Filter). Cu acea st 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 alege orile 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 e 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 tabelul ui, 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, put ei face oricte cpii ale unui tabel pentru diferite aciuni, mai ales cnd ncercai expres i SQL, avnd n vedere c dup ce ai executat o operaie SQL nu mai putei reveni la starea niial a tabelului. n aplicaii, introducerea datelor se face elegant folosind formula rele 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 da te ACCESS. Ele permit att introducerea, ct i vizualizarea datelor ntr-o manier ct mai atractiv. ntr-o aplicaie formularele ndeplinesc urmtoarele roluri: Afiarea i editare atelor. Este rolul cel mai des folosit al unui formular, prin care se pot afia i m odifica 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 utilizatoru l, folosind proceduri Visual Basic sau macro-uri. Introducere de date. Introduce rea datelor cu formulare clare, pe nelesul operatorului este una din premisele une i aplicaii de succes. Tiprirea informaiilor. Chiar dac mai rar, formularele pot fi f olosite pentru tiprirea de informaii la imprimant. n general, un formular este compu s 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 for st un tabel sau o interogare. Excepie fac formularele folosite ca interfa a unei apl icaii. 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 util izate sunt cele pe care o s le folosim i noi: Creare automat prin utilizarea instru mentului 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 alege m numai anumite opiuni care sunt foarte sugestive i clare. Pentru a crea formularu l, 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 figur a 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 fereast r 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, form ularul 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 ved ea 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 osesc 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 uti lizatorilor, 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 trebui e s v facei probleme dac primele voastre formulare sunt criticate de utilizatorii lo r. Reinei aceste critici pentru a modifica formularele sau pentru a le folosi n vii toarele formulare pe care le vei proiecta. De altfel, cei care vei ajunge proiecta ni de baze de date vei avea propriile voastre abloane, obinute n urma experienei acumu late. Cel mai simplu mod de a nelege cum se creaz un formular plecnd de la zero, fr ni ci un ajutor, este s prezentm un exemplu. Ne propunem construim acelai formular ple cnd 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 apar iia 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 ncur ce vizibilitatea.Seciunile formularului se vd n figura 5.17. Acestea sunt: Form Hea der i Form Footer sunt antetul i subsolul formularului n care se afieaz informaii prec um 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 asoci ate unor operaii. Page Header i Page Footer sunt antetul i subsolul paginilor, i sun t similare cu cele ataate direct la formular, cu principala diferen c seciunile de pa gin se tipresc pe fiecare pagin, iar cele de formular numai pe prima. Seciunile de a ntet i subsol de pagin nu apar la vizualizareaformularului, dar sunt folosite de A ccess la tiprirea acestuia. Detail este seciunea de baz a fiecrui formular care nu p oate 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, e tichete, 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 Hede ar/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 Toolbo x ( ). 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 ta belului asociat formularului Observai cum se face legtura fiecrui cmp cu obiectul corespunztor. Trebuie numai s sel ectm fiecare obiect i la proprietatea Control Source s alegem cmpul corespunztor. Pen tru ntregul formular trebuie s alegem tabelul asociat, n cazul prezentat acesta est e 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 c are se folosete Data curenta:, n care s-a folosit funcia Now() ataat de caseta de tex t respectiv, care-l face mai util. Exemplul prezentat nu este unul spectaculos, d ar este un bun nceput care v poate folosi ca model. Dup modelul prezentat, ncercai s c reai un formular dup un tabel pe care l-ai conceput singuri. Observaie important! n pr actic se folosete o tehnic mixt, adic se pornete cu metoda wizard, dup care se intervi e 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 l a 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 fo rmulare 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 m ai multe tabele sau cereri de interogare, aflate n relaii 1:1 sau 1:N. Astfel, n fo rmularul 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 nre gistrare din partea unu a relaiei, iar n subformular nregistrrile corespondente din partea mai muli a relaiei. Un formular poate conine chiar mai multe subformulare. P entru a crea un formular cu subformulare incluse se poate proceda n 3 moduri: Cre area formularului i subformularului concomitent; Crearea subformularului i adugarea lui la un formular existent; Crearea separat a celor dou formulare i apoi combinar ea lor. Dintre acestea, ultima variant este cea mai simpl, aa c pe aceasta o vom fol osi 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 legt ura ntre formularul principal i subformular; Se testeaz rezultatul. Pentru a nelege m ecanismul crerii unui formular care conine un alt formular inclus, vom lua un exem plu 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 fa ctureaz, dac ne gndim la o factur din comer. Aceste mrfuri facturate sunt cuprinse n t belul tblDetaliiFacturi. Pot fi facturate numai produsele cuprinse n tabelul tblP roduse. Fiecare factur provine de la un singur furnizor, acetia fiind cuprini n tabe lul tblFurnizori. ntre aceste tabele exist legturi, aa cum am nvat n capitolul 3, la iectarea bazelor de date. n figura 5.20 este artat structura acestei poriuni a bazei de date. tblFacturi FacturaID ChP NrFactura Data FurnizorID ChE tblDetaliiFacturi Factura ID 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. Ob servm c facturile se afl n tabelul tblFacturi, care este n relaie 1:N cu tabelul tblDe taliiFacturi. De asemenea, observm c cele 2 tabele conin cte un cmp care reprezint cod uri (FurnizorID, ProdusID) ceea ce nu ne ncnt cnd le vedem afiate n locul unei denumir i clare, nelese de oricine. Dup cum tim, n spatele fiecrui formular se gsete un tabel u 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 prec dent, nu-i aa? Prin urmare, vom scrie 2 interogri SQL, una pentru formularul princ ipal (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; J OIN 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 INN ER JOIN ... ON, precum i expresia AS cu care stabilim alias-uri pentru numele pre a 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 ba zei de date trebuie s fie completate cu date pentru a putea vedea rezultatele. Fe reastra 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 exp resiile 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 d eschide fereastra cu cele 4 tabele. Apsm butonul Close. n partea stng-sus apare buto ul , a crui apsare deschide fereastra n care se scriu pe rnd cele 2 expresii SQL, ad ic Interogarea 1 i Interogarea 2. Pentru a verifica interogrile se apas butonul Run toolbar-ul superior. Interogrile vor primi numele urmtoare: Interogarea 1 qryFactu ri, iar Interogarea 2 qryDetaliiFacturi. Dac totul a decurs bine, trebuie s obinei c a 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 evide nt c pentru formularul principal folosim interogarea qryFacturi, iar pentru subfo rmular interogarea qryDetaliiFacturi. Crearea celor 2 formulare se face dup metod a prezentat n paragraful precedent, cu observaia c n loc de tabele alegem interogri pe ntru 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 frmDetal iiFacturi. Cnd se introduce subformularul, trebuie setate unele proprieti care spun programului Access cum se leag subformularul frmDetaliiFacturi de formularul pri ncipal frmFacturi. Aceste proprieti sunt Source Object, Link Child Fields i Link Ma ster Fields, adic numele subformularului i cele dou cmpuri de legatur. Valorile setat e pentru aceste proprieti se pot vedea n figura 5.22-2. Cmpul de legtur, corespunztor iecrui 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 nav igare 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 figu ra 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 f i afiat data emiterii i furnizorul, precum i detaliile facturii respective, cu ajuto rul subformularului. ncercai s construii i alte formulare dup procedura prezentat, pen ru 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 a 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 ca re se definesc nc din faza de proiectare a bazei de date se mai numesc i vederi, aa cum am vzut n capitolul 2 la definirea terminologiilor. Rezultatul unei interogri e ste un tabel virtual, adic unul care nu exist n baza de date, dar care se genereaz o ri 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 f ace cu ajutorul unei aplicaii grafice, care n faza de nvare, cum este cazul nostru, p roduce mai mult confuzii dect s clarifice lucrurile. Din acest motiv, o s folosim l imbajul 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 cla re 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 expres ii pe care am ncercat s le nelegem la nivel de concept, nu ne-am pus problema cum s l e verificm. Acum avem ocazia s testm expresiile SQL n interiorul programului Access. De aceea este indicat s verificai expresiile din capitolul 4 folosind metoda expl icat 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 C lose. n partea stng a Toolbar-ului superior, va apare butonul prin apsarea cruia se d eschide 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 ul, care semnific terminarea expresiei SQL. n aceast fereastr se scriu de mn expresiil SQL. Nu uitai de simbolul ; punct i virgul de la sfritul expresiei. Pentru verifica ea 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-u lui. Este evident c mai nti trebuie s introducei i s populai tabelele prezentate acol Crearea interogrilor cu aplicaia Wizard(Design view) A crea o interogare cu vrjitor ul(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 e xperien i v-ai nsuit limbajul SQL. n ce const problema de fapt? Access-ul ne pune la poziie nite unelte cu care putem construi interogri numai cu mouse-ul, trgnd tabele i uri, punnd condiii, toate fcndu-se la vedere ntr-o aa-numit gril de proiectare a inte ii. 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 procede az 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 figur a 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 interogar e, iar acesta va apare n zona de sus a formularului. Dac e nevoie de mai multe tab ele, se repet aciunea iar la sfrit se nchide caseta cu butonul Close. Grila de proiec tare seamn cu un tabel, a cror rnduri au urmtoarele semnificaii: Field aici se trag c mouse-ul cmpurile interogrii; Table aici va apare automat numele tabelului la car e aparine cmpul; Sort - aici se stabilete ordinea de sortare, ascendent sau descend ent. Dac nu se scrie nimic sortarea va fi ascendent; Show - dac este bifat, cmpul va fi vizibil, altfel nu; Criteria - aici se stabiles c criteriile pe care trebuie s le ndeplineasc cmpul;

or - se folosete pentru criterii complexe. Dup ce sau ales tabelele, se fac legturi le ntre tabele, apoi se trag cmpurile, pe linia Field. Legtura ntre cmpuri se face trg d cu mouse-ul un cmp dintr-un tabel i suprapunndu-l peste cmpul corespunztor din cella lt tabel. Aceast legtur este numai una temporar, folosit numai la interogarea respect iv. 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 int erogare. 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, tblFurnizor i.CodFiscal FROM tblFacturi INNER JOIN tblFurnizori ON tblFacturi.FurnizorID = t blFurnizori.FurnizorID WHERE (((tblFurnizori.Furnizor)="Promax")) ORDER BY tblFa cturi.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 pun ct de vedere al nsuirii cunotinelor, este varianta SQL pentru c ajut la nelegerea dep a crerii interogrilor i a rolului fiecrei clauze. Deci nu ezitai s o folosii chiar dac i 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 apa unui tabel, aa cum se vede din diagrama bazei de date. Ne punem problema traducer ii acestor legturi artate n diagrame, n cadrul programului Access. Am vzut c n limbaj 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? Exis t 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 creri i interogrilor. Legturile permanente se pot face, la rndul lor n 2 moduri: cu ajutor ul ferestrei Relationships (a), respectiv cu vrjitorul Lookup Wizard (b). a) Fere astra Relationships se deschide cu comanda Tools Relationships. Se va deschide f ereastra care la nceput este goal, urmnd ca noi s tragem n ea tabelele i s le legm. ura 5.31 este artat o fereastr Relationships, cu legturi stabilite. Intuii c relaia 1: 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 in tabelul surs, la cmpul de legtur din tabelul destinaie. Dup ce s-a fcut legtura ap fereastra Edit Relationships, care stabilete i integritatea datelor prin bifarea proprietilor artate acolo, referitoare la actualizarea i tergerea cmpurilor legate, fi gura 5.32. Fig. 5.32. Fereastra Edit Relationships Stabilirea tipului de legtur se face prin fereastra Join Properties, care se desch ide 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 di n tabelul surs care au nregistrri echivalente n tabelul destinaie. 2: 3: - se mai num ete 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 foar te clar, aa c nu mai e cazul s fie prezentat aici. ncercai-o i nu vei avea probleme. rvaie important!! Chiar dac legturile permanente dintre tabele n Access creeaz unele f aciliti, evitai s le creai deoarece ar putea s v creeze unele neplceri la crearea int grilor din mai multe tabele, mai ales cnd suntei nceptori. Dac baza de date este corec t proiectat, iar legturile dintre tabele se vd n documentaia acesteia, cel mai nelept ucru este s folosii legturile temporare, valabile numai pentru interogarea respecti v. 202

Baze de date Capitolul 5 Interogri cu parametri Dac ntr-o interogare este necesar s se schimbe foarte des cri teriile de selecie, este recomandabil ca aceasta s fie transformat ntr-o interogare cu parametri. Astfel, la apariia oricrei schimbri, cererea trebuie reproiectat, modi ficnd criteriile, ceea ce este total ineficient. Avantajul unei interogri cu param etri, const n faptul c aceste criterii care se modific primesc valori n momentul exec uiei cererii. Astfel, dac ntr-un tabel cu facturi avem datele calendaristice la car e au fost emise i furnizorii acestora, este foarte probabil c vom dori obinerea uno r situaii ca acestea: - facturile primite ntr-o lun oarecare sau un interval de tim p; - facturile primite de la un anumit furnizor; - facturile primite de la un fu rnizor ntr-un interval de timp. Astfel de interogri nu sunt greu de fcut, inconveni entul este c pentru orice situaie scoas trebuie s punem alte criterii, care de altfe l, 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 aces teia, ceea ce ar fi prea mult pentru un utilizator obinuit. Dac ar trebui s introdu c numai nite parametri pentru ca interogarea s funcioneze, ar fi altceva. n continuar e vom ncerca s construim cteva interogri cu parametri care s poat fi folosite ca model e pentru aplicaiile pe care le vei face singuri. S relum baza de date cu diagrama di n figura 5.35. tblFacturi FacturaID ChP NrFactura Data FurnizorID ChE tblDetaliiFacturi Factura ID 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 tblFa cturi 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 a cesta. Dac dorim, putem vedea ce expresie SQL a generat Access-ul: 204

Baze de date SELECT tblFurnizori.Furnizor, tblFacturi.NrFactura, tblFacturi.Data FROM tblFact uri 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 d 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 dat e, care se tipresc pe hrtie i sunt folosite ca documente care se pot pune n dosare s au se arhiveaz. Tehnica de lucru este asemntoare cu cea de la formulare. Ca i formul arele, rapoartele au o surs de date care poate fi un tabel sau o interogare. Crea rea 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 exactitate acestor informaii. Aceste persoane pot fi manageri de top care ar putea fi singu rele care neleg semnificaia unor informaii. Forma de prezentare a acestora n cadrul r aportului este foarte important. Crearea unui raport simplu Cu siguran, primul rapo rt pe care o s-l facei va fi unul fr pretenii, fcut cu ajutor din partea programului A ccess. Modalitatea cea mai simpl de preluare a informaiilor dintr-un tabel i aducer ea acestora ntr-un format corespunztor pentru tiprire este folosirea procedurii Aut oReport. Aceasta permite crearea unui raport n format tabelar sau de tip coloan. U n 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 t abel 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 prac tic. 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 Factura ID ChE ProdusID ChE Cantitate Observatii tblProduse ProdusID ChP Denumire UM Pre t .............. 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 a fereni. 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, fol osind 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 cl ic pe obiectul Reports, situat n stnga ferestrei Database. 3.Executm clic pe butonu l New din bara de instrumente, situat n partea de sus a ferestrei Database. Ca urm are 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, al egem 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 co loanelor, dar pentru c l-am obinut att de uor, l putem accepta i aa. Crearea unui rapo t cu Report Wizard Report Wizard este o aplicaie inclus n programul Access, cu ajut orul creia se pot face rapoarte cu adevrat performante, fr prea mare efort. Aceast ap licaie ofer un bun compromis ntre uurina n utilizare i nivelul de control pe care l a 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 ante rior, 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 eviden t 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 in terogrii. 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: De numire, UM, Cantitate, Pret, Valoare, pentru fiecare produs primit i s avem subtot aluri pe facturi i pe furnizori. Ne vom folosi acum de cunotinele de SQL pentru a s crie o expresie care s execute interogarea propus. Iat cum arat aceast expresie: SELECT Furnizor, f.NrFactura, pr.Denumire, pr.UM, df.Cantitate, pr.Pret, Cantita te*Pret AS Valoare FROM tblFacturi AS f, tblFurnizori, tblDetaliiFacturi AS df I NNER JOIN tblProduse AS pr ON df.ProdusID = pr.ProdusID WHERE df.FacturaID=f.Fac turaID 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 inte rogri 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 d espre facturi, furnizori etc. Sunt cam amestecate, dar sunt reale i corecte. Ceea ce va trebui s facem este s aranjm aceste date ntrun raport tiprit care s fie intelig ibil 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 Usi ng 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 ra portului

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 cmp urile raportului, n cazul nostru toate, prin apsarea butonului (>>). Dup ce am tran sferat toate cmpurile n partea dreapt, se apas butonul Next pentru a trece la ecranu l urmtor. 6. n acest ecran putem s grupm nregistrrile dup cmpul furnizor, iar n cadr rnizorului dup numrul facturii. Pentru aceasta trecem primele 2 cmpuri n partea drea pt 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 Se trece la ecranul trrile din detalii e, dup cum se vede grupare se face dup cmpul NrFactura, iar a doua dup cmpul Furnizor. urmtor apsnd butonul Next. 7. n ecranul urmtor, putem sorta nregis dup un anumit cmp. Noi am ales sortarea ascendent dup cmpul Denumir 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 arta t 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 ca lcula media aritmetic, minimul i maximul de pe coloane. Dac nu vrem s apar n raport to ate detaliile, activm opiunea Summary Only. Cu butonul OK se ajunge la ecranul pre cedent. 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 ac est 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, fi gura 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 ulti mul 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 tr ebuie s intram n modul Design apsnd butonul , n urma cruia va apare imaginea din figur a 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 p oprietile, aa cum fceam la crearea intefeelor n Visual Basic. Dup terminarea acestei o eraiuni 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 co nine fiecare factur, se vd totalurile facturilor i totalul general pe fiecare furniz or. Este un document util pentru managerii firmei respective. Particularizarea u nui raport Am prezentat pn acum dou metode de obinere a rapoartelor: AutoReport i Rep ort 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 reped e, aceste rapoarte nu ne satisfac ntrutotul, de aceea este nevoie s intervenim pen tru 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 a cestora pentru a le aduce la forma final. Prin editare se pot aduga sau terge anumi te elemente, conform cerinelor practice. Pentru a edita un raport se procedeaz ntro manier asemntoare cu editarea unui formular, de aceea este indicat s revedei paragr aful Crearea manual u uni formular. Ca i un formular, raportul are 3 pri: Header, Fo oter 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 but oanele artate prin sgei n figura 5.53. Cu ajutorul mouse-ului putei acum s selectai ob ectele de pe formular i s le schimbai proprietile. De cele mai multe ori vei schimba p oziiile casetelor de text i a etichetelor, mrimea i tipul de font etc. Dup se ai fcut nele schimbri, urmrii-le activnd raportul cu butonul View ( din partea stng a Toolbarului. 215 )

Baze de date Capitolul 5

Este evident faptul c obinerea unor rapoarte aspectuoase i performante este legat di rect de experiena pe care o vei dobndi. Aceast experien nu e greu de obinut, trebuie n mai s facei ct mai multe rapoarte i s avei rbdarea de a le perfeciona ct mai mult. E munc migloas dar merit, deoarece formularele sunt cele care se vd din ntreaga aplicai , 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, t abele, interogri, formulare, rapoarte etc. Noi am nvat s construim aceste obiecte. To ate obiectele unei baze de date trebuie legate ntr-un flux continuu de operaii, ca re 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 op erator implicat. n cadrul unei aplicaii Access, de o mare importan este automatizare a 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 unei a sau mai multor operaii (activarea unuia sau mai multor obiecte, rularea unor in terogri etc.). Aceast automatizare a aplicaiilor realizate n Access se poate face n d ou moduri: Prin utilizarea limbajului Visual Basic for Applications (VBA); Prin u tilizarea macrocomenzilor, care reprezint o form simplificat a limbajului VBA. Come nzile macro sunt deosebite prin caracteristica lor unic i anume c permit automatiza rea diverselor evenimente fr ca realizatorul aplicaiei s fie nevoit s cunoasc un anumi t limbaj de programare. Prin evenimente putem nelege: Modificri ale datelor; Deschi derea sau nchiderea unui formular sau raport; Aciunea asupra unor obiecte de contr ol 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; Vizualiz area 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 mesa je; 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 n cepe s proiectm macrocomenzi este s ne gndim la un proces pe care l parcurgem n mod re petat, 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 unel e modificri cu ajutorul unor interogri de aciune. Presupunem c am gsit un astfel de s cenariu, deci putem trece la automatizarea lui. Crearea macrocomenzilor cu o sin gur aciune Crearea macrocomenzilor se face cu ajutorul ferestrei Macro Design prez entat 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 importan te 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 ecranu lui.

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-uri le 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 j os-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 une, mutai cursorul n coloana Action i deschidei lista derulant, de unde alegei una di n 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 care exist n baza noastr de date. Macrocomanda rezultat se vede n figura 5.55. Fig. 5.55. Macromand cu o singur aciune Macrocomenzile se salveaz ca i formularele i se lanseaz cu un dubluclic sau cu buton ul Run din fereastra Database. n figura 5.56 se pot vedea 2 macrocomenzi, una car e 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 fere strei Macro Design. Un exemplu de folosire a mai multor aciuni poate fi acela n ca re ar trebui rulat o expresie SQL, apoi deschiderea unui formular. Desigur, folos irea eficient a macrocomenzilor din Access, nu este chiar la ndemna nceptorilor. Folo sirea lor curent va veni n mod natural, pe msur ce practica o cere, iar experiena o p ermite. O facilitate important a aciunilor multiple este folosirea condiiilor n macr ocomenzi. Utiliznd coloana Condition putei aduga unele decizii, cum ar fi, de exemp lu, afiarea unor mesaje n funcie de o anumit condiie. Expresiile introduse drept cond iii 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 al t facilitate oferit de fereastra Macro Design este posibilitatea de a grupa macroc omenzile. 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 l e, macrocomanda dumneavoastr va fi considerat a fi un grup de macromenzi. ntr-un as tfel 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 macro comanda, se va rula doar primul grup. ntrebarea, fireasc, pe care v-o punei este cu m putei rula i celelalte grupuri? Rspunsul este simplu: nu putei. Dac avei ntr-o macro omand 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 rul a, vezi figura 5.57. Fig. 5.57. Grupuri de aciuni

Observai c la aciunea RunMacro a fost ales numele grupului Raportari care face part e 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 obi ei o list complet a acestor aciuni, precum i descrieri succinte ale lor i a argumentel or pe care le folosesc, deschidei o macrocomand nou i selectai aciunea care v interese z. 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 vo m studia diferitele moduri de accesare a macrocomenzilor pe care le creai n diferi te aplicaii Access, precum i unele macrocomenzi speciale, native, ale sistemului A ccess, 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 ob iectul 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 aces t mod toate macrocomenzile pe care le-ai creat, v reamintesc c n cazul macrocomentil or 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 meniu l. n cazul n care vrei s rulai manual o anumit macrocomand dintr-un grup folosii meto descris n continuare. Rularea unei macrocomenzi dintr-un grup 1. Selectai din meniul principal opiunea: deschide caseta de dialog din figura 5.5 8. 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 M acro prezint toate macrocomenzile disponibile n baza de date, grupurile fiind repr ezentate 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 meto d. La sfritul unui grup de aciuni se 222

Baze de date Capitolul 5 introduce aciunea RunMacro care va lansa n execuie macrocomanda nominalizat de argum entul Macro Name. Macrocomenzi ataate evenimentelor

Probabil c metoda cea mai utilizat pentru rularea macrocomenzilor din aplicaiile Ac cess, nu este rularea direct, ci ca rspuns la un eveniment Access. Aceste evenimen te 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, deschid erea unui formular declaneaz evenimentul OnOpen al formularului respectiv, la intr oducerea unei valori ntr-o caset de text declaneaz evenimentul OnClick, iar dac utili zatorul actualizeaz datele dintr-un control al unui formular se declaneaz eveniment ul AfterUpdate ataat controlului respectiv. Pentru a identifica evenimente ale di feritelor obiecte, nu avei dect s selectai obiectul respectiv i s-i studiai evenimente e, 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 eve nimente spunndui programului ruleze la apariia unui anumit eveniment ataat unui for mular, raport sau control o anume macrocomand. Utiliznd evenimentele n acest mod v p utei perfeciona aplicaia, astfel nct ea s ofere ceva n plus fa de funciile oferite ss permind, de exemplu, utilizatorilor s se deplaseze ntre diferite obiecte ale apli caiei fr s tie mcar de existena ferestrei Database. Utilizarea macrocomenzilor AutoExec i AutoKeys

Aceste macrocomenzi au nume speciale, rezervate i sunt mocrocomenzi native ale pr ogramului 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 stfel de macrocomand, ea este executat automat. Aceast macrocomand poate fi folosit p entru pregtirea aplicaiei; de regul ea este folosit mpreun cu opiunile de pornire a Ac ess-ului. 223

Baze de date Capitolul 5

Observaie important!! Dac dorii s evitai rularea macrocomenzii AutoExec, meninei aps ta Shift n timp ce deschidei baza de date. n general, se folosete comanda AutoExec p entru a apela o funcie VBA (prin intermediul aciunii RunCode) personalizat pentru f iecare aplicaie n parte. Macrocomanda AutoKeys. Acestei macrocomenzi, Access-ul i a cord un tratament special. Cu ajutorul acestei macrocomenzi putei s asociai oricrei a ciuni, o combinaie de taste dintre cele disponibile. Mai mult putei chiar s modificai comportamentul prestabilit al anumitor combinaii de taste. Iat un exemplu de util izare 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 li st 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 apli caiilor. 224

Baze de date Capitolul 5

Avnd deschis aplicaia ale crei opiuni de pornire vrem s le automatizm, dm comanda Too 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 estat 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 interaci na 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 ntegrarea 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 u n avantaj concurenial, demn de luat n seam. Avnd n vedere c o serie de rapoarte de sin tez 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 dintr 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, car e poate fi postat pe un site de Internet. Din fericire, programul Access, ncepnd c u versiunea 2000, ofer faciliti de a scoate rapoarte direct n format HTML. Prin urma re, pe lng formulare i rapoarte, vom nva s scoatem din Access i documente care pot fi blicate 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 vizualiz ate de oricine. n cele ce urmeaz vom ncerca s crem cteva pagini HTML direct din progra mul Access. Exist 2 tipuri de documente pe Internet: Pagini Web statice; Pagini W eb dinamice. Le vom studia pe rnd, n paragrafele urmtoare. Pagini Web statice Pagina Web static este un document de tip prospect, adic are to t timpul acelai coninut, cum a avut la crearea sa. Acest tip de documente se pot c rea cel mai simplu dintr-un obiect al bazei de date, folosind metoda Export. Ace ast 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 fereast ra Database, selectai obiectul pe care pe care dorii s-l salvai n format HTML. 2. Sel ectai opiunea File Export. 3. n caseta de dialog Save, selectai lista derulant HTML D ocuments (*.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). V ei 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 coni nui tabel. Reinei c dac se schimb ceva n tabelele de baz ale interogrii, aceast modi e nu se reflect n pagina HTML. Cnd folosii aceast tehnic trebuie s avei n vedere ace cru. Paginile Web statice, chiar dac provin din exportul de obiecte din Access, n u sunt obiecte Access, ele vor fi salvate ca pagini independente cu extensia *.h tml, 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 mu lte informaii, n funcie de cererile lansate de utilizator. Un exemplu ar putea fi f ormularul creat ntr-o aplicaie Access care ne permite s parcurgem nregistrrile unui t abel. 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 baz ei de de date curente. Exist dou moduri de creare a unei pagini Web dinamice din A ccess: 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 instrum entul 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 afiar ea 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 n registrri (un tabel sau o interogare), selectai AutoPage:Columnar, apoi apsai butonu l 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 afi stfel 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 fel cum ai procedat la tabele i rapoarte. Dup modificrile aduse salvai pagina cu coma nda File Save As. Atenie ns c numele i salvarea sunt stabilite de ctre programul Acce s, asupra crora nu avei nici un control. Acest lucru v este anunat dup cum se vede n f igura 5.64. Fig. 5.64. Avertismentul legat de conectarea la pagin Pentru a v putea conecta la paginile create, folosind reeaua trebuie s editai conexi unea 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 Pa ge Wizard putei folosi mai multe surse de date i avei posibilitatea de a selecta cmp urile 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 Acces s Page, selectai Page wizard, apoi apsai butonul OK. Putei selecta i o surs de date, d ar 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 u ea 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 case t de dialog v cere s specificai o ordine de sortare. 6. Ultima caset de dialog v permi te s acordai paginii un nume, s selectai o tem (fundal) i s deschidei pagina n modul gn 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 fiai mai nti pagina n modul Design. Executai clic pe butonul Finish pentru a v putea v zualiza pagina. 7. Cnd suntei mulumit de aspectul paginii i dorii s o salvai, dai com a File Save As, astfel nct s putei specifica i locaia fiierului. n figura 5.65 este entat 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 efu o s v cear s punei un raport la care ai trudit din greu, ntr-o locaie de pe Internet entru 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 foart e performant cu ajutorul cruia s se poat realiza un numr mare de sarcini n cadrul unu i birou al unei firme sau chiar la domiciliu. Popularitatea produsului Office se datoreaz, pe lng gradul sporit de complexitate, facilitii sale deosebite de a permit e diferitelor aplicaii care l compun, s comunice ntre ele. Astfel, informaiile dintro aplicaie Access pot fi transferate (exportate) n Excel, unde se pot face anumite calcule, dup care acestea pot fi transferate (exportate) n Word n vederea realizrii unui document de sintez. Sistemul de operare Windows conine o facilitate Object L inking and Embedding (Introducere i legarea obiectului) sau pe scurt OLE. n fond O LE este o metod de transfer a informaiei ntre diferite aplicaii Windows sub form de o biecte. Metoda OLE ofer un mare avantaj aplicaiilor realizate n Access, putnd fi cre ate baze de date de tip multimedia n care pot fi stocate fiiere audio(WAV), fotogr afii i desene, animaie i chiar filme(AVI). ncepnd cu Access 2000, au fost introduse t rei faciliti noi: Dynamic Data Exchange, DDE - schimbul dinamic de date; ActiveX O bjects obiecte ActiveX; ActiveX Custom Controls controale personalizate ActiveX. Facilitatea DDE permite executarea unor funcii precum transmiterea de date ntre A ccess i orice alt aplicaie Windows care suport facilitatea DDE. Se pot crea conexiun i de tip DDE cu alte aplicaii prin utilizarea comenzilor macro sau a limbajului V BA. 231

Baze de date Capitolul 5 ActiveX este o facilitate avansat a sistemului de operare Windows care permite cr earea 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 lu crul cu obiecte ale bazei de date Access (tabele, interogri i formulare) din cadru l altor aplicaii de tip Windows. Exportul i importul de date Comunicarea programul ui Access cu celelalte componente ale pachetului Office, rmne un element de baz. Sp re 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 coma nda File - Export. ncercai aceast comand pentru cazuri concrete. De multe ori este n evoie ca anumite informaii s fie prelucrate i sintetizate n Excel, nainte de a fi cup rinse 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 domeniu lui. Avei nc multe lucruri neclare, peste care ai trecut mai uor n timpul studiului. F ii 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 handicap uri de apreciere pe care, sincer, nu le merit: Programatorii profesioniti l evit pen tru 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 s unt mult mai scumpe. Ceilali dezvoltatori de aplicaii, au probleme cu folosirea Ac cess-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 la rg ar fi benefic, mai ales c aplicaiile ar putea fi abordate cu resurse proprii. Pro gramul Access e folosit de milioane de utilizatori de pe tot mapamondul, sunt fo rumuri de discuii pentru aceti utilizatori, care se ajut ntre ei cu sfaturi i experie ne proprii. Cu siguran, c muli dintre ei triesc de pe urma Access-ului, alii i folose din plin facilitile. Dac ai reuit s nelegei programul Access i ai fcut cteva apl eamn c ai neles bazele de date relaionale i putei trece i la alte produse de baze de , dac mprejurrile o cer. nseamn c avei o baz de plecare solid. n multe firme e nevo metod simpl de gestionare a tuturor informaiilor care exist pe hrtie sau n aplicaii s ufoase: facturi, nregistrri, informaii contabile, contacte cu clieni i furnizori etc. De asemenea, este nevoie de tiprirea unor rapoarte i scrisori care nu ies nicioda t cum ai dori, n care avei informaii care trebuie calculate sau completate de mn. De a emenea, apare necesitatea publicrii pe Web a unor informaii detaliate i la zi despr e afacerile firmei, pentru a fi studiate de ctre parteneri sau de ctre alte filial e ale firmei care pot fi oriunde n lume. Aceste oportuniti pot fi exploatate folosi nd 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 proie cte 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 aplicaii or. Un formular sau un raport este 233

Baze de date Capitolul 5

nceput cu un wizard, apoi este completat sau modificat de ctre dezvoltator. Folosi rea macrourilor i a formularului de start v ajut s concepei aplicaii de baze de date c are par a fi fcute de o echip de profesioniti, pentru c prin eliminarea ferestrei Da tabase nu se mai vede c suntem n Access (vezi pagina 208). Exemplele care sunt pre zentate n carte sunt inspirate din realitate, au fost testate nainte de a ajunge a ici, aa c pot fi folosite fr nici o reinere, ca modele pentru aplicaiile pe care le ve 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 furnizorulu i de soluii informatice. Dup ce s-a implementat i testat baza de date i instruit per sonalul care o va folosi, echipa de dezvoltare se retrage din firm i ncepe, probabi l, 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 entru care au fost intruii, s opereze acolo unde au dreptul. Ce se ntmpl dac ntr-o dim nea, cnd pornete aplicaia, un utilizator primete nite mesaje ciudate pe care nu le n , iar aplicaia se blocheaz? Cui ne adresm? nainte era acolo echipa de dezvoltare, ca re 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 contie nt de acest lucru i va rezolva problema chiar de la nceput. Cine poate fi aministr ator de baze de date? O persoan care poate s rezolve toate problemele cerute de po st. O astfel de persoan a participat, de regul, din partea firmei la dezvoltarea p roiectului i a acumulat cunotine care l ajut s-i duc la indeplinire sarcinile. Echipa nagerial trebuie s aib nelepciunea ca s numeasc n acest post o persoan pregtit, pe ele firmei nu trebuie s fie compromise. Prin persoan pregtit nu trebuie neles, o perso an cu diplom (se tie ct de uor se obin acestea), ci una care trece nite teste de compe en. Un administrator de baze de date are cunotine, cel puin la nivelul celor prezenta te n aceast carte, de la noiuni de proiectare a unei baze de date, cunoaterea limbaj ului SQL, pn la implementarea de aplicaii n ACCESS. Aceast meserie, este una a viitor ului, 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 t oate 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 nor m ntreag, exist i soluia angajrii unor consultani externi, care s vin numai atunci nevoie de ei. Ar fi o soluie temporar, pn cnd un angajat al firmei poate s ndeplineas aceast funcie. Sigur, decizia este luat de ctre conducerea firmei respective, n cunoti n de cauz. Care sunt sarcinile administratorului de baz de date? Administratorul baz ei de date are sarcini precise, care ar putea fi enumerate astfel: Rspunde de cor ectitudinea datelor introduse n baza de date; Rspunde de securitatea bazei de date , prin drepturile acordate utilizatorilor; Salveaz copii de siguran ale bazei de da te, 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 fina li, 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 a de dezvoltare pentru a rezolva orice problem care i depete competenele; S stabilea 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 concl uzie a celor prezentate n aceast anex, am putea spune c administratorul de baze de d ate i dac extrapolm, administrator de sistem informatic, este o meserie a viitorulu i care va fi foarte cutat i bine pltit. Va fi un post cheie n orice organizaie, o pozi de mare responsabilitate. Nu ar fi lipsit de interes s v gndii la o carier profesion al 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 i nstruciunea SQL cea mai utilizat, prima cu care luai contact. Se folosete pentru regs irea(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. Sint axa 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 Tab el1, Tabel2, [WHERE ...]; 237

Baze de date Anexe DELETE Instruciunea DELETE terge una sau mai multe linii dintr-un tabel. Sintaxa e ste 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 nt r-o baz de date. Sintaxa este urmtoarea: CREATE TABLE NumeTabel ( Coloana1 Tip de dat [NULL / NOT NULL], Coloana2 Tip de d at [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 coloan e (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, ... [W HERE ...] [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, tra ducere din limba englez, Editura Teora, 2003. Susan Sales Harkins, Ken Hensen, To m Gerhart, Utilizare Microsoft Access 2000, traducere din limba englez, Editura T eora, 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