Sunteți pe pagina 1din 160

Capitolul1.

Introducerenbazededaterelaionale

nacestcapitolveinva:

Ceesteobazdedate;
Necesitateaimanagementuluneibazededate
Tipuridebazededate;
Modelededate;
Ceesteobazdedaterelaional;
Conceptefundamentalecucareopereazobazdedate;
Ceesteunsistemdegestiuneabazelordedate;

bazdedate,date,entiti,relaii,modelrelaional,cheiprimare,chei
Cuvintecheie: strine,sistemdegestiuneabazelordedate

Cuprins
Capitolul1.Introducerenbazededaterelaionale......................................................................1
1.1 Ceesteobazdedate?Necesitateabazelordedate.....................................................2
1.2 Tipuridebazededate......................................................................................................2
1.3 Modelededate................................................................................................................3
1.3.1 Modelulbazatpefiiere..............................................................................................3
1.3.2 Modelulierarhic..........................................................................................................3
1.3.3 Modelulreea..............................................................................................................3
1.3.4 Modelulrelaional.......................................................................................................3
1.3.5 Modelulentitaterelaie..............................................................................................4
1.3.6 Modelulobiectualrelaional.......................................................................................4
1.4 Bazededaterelaionale..................................................................................................4
1.5 Conceptefundamentalecucareopereazobazdedate.............................................5
1.6 Sistemedegestiuneabazelordedate............................................................................8
1.6.1 CerinefuncionalealeunuiDBMS.............................................................................9
1.6.2 CerineoperaionalealeunuiDBMS.........................................................................10
1.6.3 AvantajeleutilizriiunuiDBMS.................................................................................10
1.6.4 TipurideDBMS..........................................................................................................10
1.7
1.8
1.9
1.10
1.11

Componenteleunuisistemcubazededate..................................................................11
Concluzii.........................................................................................................................12
Testareacunotinelordobndite..................................................................................12
Glosar.............................................................................................................................12
Bibliografie.....................................................................................................................13

Ceesteobazdedate?Necesitateabazelordedate.

1.1

Ceesteobazdedate?Necesitateabazelordedate.

O dat cu evoluia tehnologiei i a avansului n domeniul informatic, accesul la informaie sa


modificatnmodsemnificativ.Pedeoparte,informaiaadevenitaccesibilprinintegrarea nmediul
virtual.Pedealtpartens,extragereainformaieisolicitatedevinecomplicatdatoritmultitudiniide
surse de provenien i a organizrii nestandardizate a acestora. Astfel c accesul structurat i
organizareainformaieidevinvitale.
DEFINIIE: O baz de date (BD) reprezint o colecie organizat de date, cu o structur
predefinit.ntreacestedateexistrelaiilogicedeteminatedecerineleuneiaplicaiisauorganizaii.
Extragereadatelorpoatefifcutnmodrapidistructurat.
Pentru a evidenia necesitatea bazelor de date s lum spre exemplu, baza de date a unei
universiti. Aceasta trebuie s conin informaii despre cursuri, cadre didactice, studeni, personal
administrativ etc. Utilizarea unei baze de date pentru stocarea acestor informaii necesit o serie de
parametriimetodedeorganizare:fiecarestudenttrebuiesaibcompletatetoatedatelepersonale,
precum i anul de studiu, cursurile la care particip, notele obinute amd; profesorii trebuie s fie
identificaiprinfacultate,catedr,cursurilepecareleinetc.Doardinacestexemplusimplusepoate
observacstructurareauneibazededatenecesitunmodelstructuralcomplexncareaccesulladate
spoatfifcutuoripebazamaimultortipurideinterogri:cenotarestudentulXarelaexamenul
Y;cineesteprofesoruldelacursulXpecarestudentulYlaurmatiexemplelepotscontinue.Dacam
stocatoatinformaianfiiereindependente,opersoanartrebuiscauteindividualfiecarestudent
sauprofesorisfaclegturadintrediferitelefiieremanual.Bazelededaterezolvaceastproblem
prinutilizareaunorstructuriorganizatencareaccesulladatesefacerapidifprpacunoatemodelul
fizicdebaz.

1.2

Tipuridebazededate
Bazele de date analitice este un sistem readonly care stocheaz informaie istoric
asupraunormetricialecompanieicumarfivnzrilesaucomenzile.Analitiicompaniei
sau directorii pot solicita interogri ale acestor metrici sau rapoarte din baza de date
analitic. Informaia este actualizat n mod constant pentru a include noile tranzacii
dinsistemuloperaionalalcompaniei.
Bazelededateoperaionalepedealtpartereprezintocoleciededateactualizate
zilniciasupracrorasepotfacemodificri.Accesullaacesteapoatefifcutdeoricare
utilizator n limita drepturilor acordate. Bazele de date operaionale reprezint sursa
datelordindatawarehouse.
Datawarehouse esteunrepository central cu toate prile semnificative ale datelor
pe care o companie le colecteaz. Datele sunt stocate de obicei pe un server al
companiei.Datelediverselortranzaciisuntfiltrateiorganizatepentruutlizarealorn
aplicaii analitice i interogri. Data warehousing accentueaz captura datelor din
diverse surse pentru analiz i acces, ns nu pornete neaprat de la cerinele
utilizatorilorfinali.
Bazelededatedistribuitesuntbazededatencareporiunialelorsuntstocatepemai
multe calculatoare dintro reea. Utilizatorii au acces la anumite seciuni ale bazei de
date de la locaia lor pentru a avea access la datele relevante cerinelor lor, fr a
interferacuaciunilealtorutilizatori.Unsistemcentralizatdemanagementgestioneaz
bazelededateastfelnctelesparstocatepeunsingurdispozitivhardware.Sistemul
sincronizeaz toate datele periodic i n anumite cazuri,dac mai muli utilizatori
acceseazaceeaiinformaie,asigurrealizareaactualizriloriamodificrilorrealizate
asupra datelor la o anumit locaie, vor fi automat reflectate i n datele stocate pe
cellaltedispozitive.
Bazele de date hypermedia reprezint o abordare a managementului datelor sub
forma unei reele de noduri interconectate n orice mod specificat de utilizator. Sunt
folositecaioextensielogicatermenuluihypertextncaregrafica,audio,video,textul

Capitolul1.Introducerenbazededaterelaionale

ireferinele(hyperlinks)suntinterconectatepentruacreaunmediugeneral,neliniar,
n comparaie cu termenul multimedia care reprezint prezentri liniare neinteractive.
Un exemplu de hypermedia este internetul, iar un film la cinema este un sistem
multimedia,deoarecenuconinereferine.

1.3

Modelededate

Un model este o abstractizare a unui sistem, ce capteaz cele mai importante trsturi
caracteristicealesistemului,relevantedinpunctdevederealscopuluipentrucaresedefinetemodelul
respectiv.Modelelereflectmoduldeorganizareadatelorncadrulsistemuluirespectiv.
1.3.1

Modelulbazatpefiiere
Chiardacnuesteunmodeldedatensensulpuralconceptului,modelulbazatpefiierepoate
ficonsideratometoddeorganizareadatelor.Nupermitensaccesareauneianumiteinformaiidin
fiier n mod unitar. Structura fiierelor poate s difere, sau fiierele pot s nu conin ntotdeauna
aceleaicmpuri.Olistdenume,adresesaunumeredetelefonscrisepeofoaiepoateficonsideratun
modelbazatpefiiere.Fiecarelinieconineonregistrare.
1.3.2

Modelulierarhic
Structuraorganizriidatelorestesubformdearbore.Informaiaereprezentatprinrelaiide
tipprintecopil.Unprintepoatesaibmaimulicopii,nsuncopilpoateaveaunsingurprinte.
Director

Director
adjunct

Angajat

Director
adjunct

Angajat

Angajat

Figura11.Modeldedateierarhic

1.3.3

Modelulreea
Acesttipdemodelprevedeutilizareauneistructurisubformdegraf,ncadrulcreiafiecare
obiect reprezint un nod, iar relaii sunt reprezentate sub form de arce. Fa de modelul ierarhic,
modelulreeapermiteunuicopilsaibmaimuliprini.

Facultate

Curs1

Student1

Student2

Curs2

Student3

Figura12.Modelulreea

1.3.4

Modelulrelaional
Modelulrelaionalafostintrodusn1970,deE.F.CoddnlucrareaArelationalModelofData
for Large Shared Data Banks n care propunea reprezentarea datelor sub form de seturi de tabele.
Modelul relaional este foarte simplu i elegant: o structur de date este o colecie de una sau mai

Bazededaterelaionale

multe relaii, iar fiecare relaie reprezint un tabel cu linii i coloane. Reprezentarea tabular permite
chiar i utilizatorilor novici s neleag coninutul unei baze de date i permite astfel utilizarea unor
limbaje simple, de nivel nalt pentru a interoga datele. Avantajele majore fa de cellalte modele le
reprezint simplitatea reprezentrii datelor i uurina cu care chiar i interogrile complexe pot fi
exprimate.Orelaiesecompunedinantentulrelaieioseriedeatribute,fiecarecudomeniulsude
valori; i corpul relaiei alctuit din combinaiile valorilor atributelor. Relaiile au o serie de
caracteristici:atributelerelaieinusuntordonate,atributelesuntdistincte,oriceatributaredoarvalori
atomice1,ncorpulrelaieinuexistduplicate.
1.3.5

Modelulentitaterelaie
Modelul entitaterelaie este o reprezentare grafic, abstract i conceptual a datelor prin
intermediul diagramelor relaionale. Conceptele cu care opereaz sunt entitate, relaie i atribut.
Entitatea aparine unei mulimi de entiti similare, dar care pot fi deosebite prin intermediul
atributelor.Relaiilesuntdefinitentrediferiteleclasedeentiti.

Figura13.Modelulentitaterelaie

1.3.6

Modelulobiectualrelaional
Modelulobiectualrelaionalcombinavantajelemodeluluientitaterelaiecucelealemodelului
obiectual, fundamentat pe obiecte, clase i moteniri. Permite utilizarea de metode i tipuri de date
personalizate.

1.4

Bazededaterelaionale

O baz de date relaional este o colecie de date organizate ca i un set de tabele descrise
formal, din care datele pot fi accesate sau reasamblate n multiple moduri fr a fi necesar
reorganizarea tabelelor bazei de date. Are la baz modelul relaional introdus de Codd. Interfaa
standard cu o baz de date relaional l reprezint limbajul SQL (Structured Query Language)
InstruciunileSQLsuntfolositeattninterogrileinteractivealeinformaieictincolectareadatelor
pentrurapoarte.
Pelngfaptulcesteuordecreatiaccesat,obazdedaterelaionalareavantajuldeafi
uor de extins. Dup crearea bazei de date iniiale, o nou categorie de date poate fi creat fr a
modificatoateaplicaiiledejaexistente.
Obazdedaterelaionalreprezintunsetdetabelececonindatedincategoriipredefinite.
Fiecaretabel(uneorireferitcairelaie)conineunasaumaimultecategoriidecoloane.Fiecarernd
reprezintoinstanunicadatelorpentrucategoriiledefinitedecoloane.
La crearea unei baze de date relaionale se specific domeniul valorilor posibile pentru o
coloan, iar asupra acestora sepot aplica constrngeri ulterioare. Deexemplu un domeniu deposibili
clienipoateaveapnla10nume,nspoateficonstrnsntrunanumittabelcadoar3dintreclieni
sfiespecificai.
Dindefinireauneibazededaterelaionalerezultuntabeldemetadatesaudescrieriformale
aletabelelor,coloanelor,domeniiloriaconstrngerilor.

Ovaloareaatomicesteovaloaredincarenuputemeliminaniciocomponentfradenatura
semnificaiadatei

Capitolul1.Introducerenbazededaterelaionale

1.5

Conceptefundamentalecucareopereazobazdedate

Pentru a opera n mod corect cu o baz de date, este necesar cunoaterea unor elemente
fundamentale cu care se opereaz. Acestea se refer n primul rnd la descrierea informaiei incluse
ntrobazdedateiamoduluideinteraciuneaelementeloracesteia.

Primary
key
IDStudent
765

nregistrare

Coloan

Foreignkey

Nume
Pop

Prenume
Adrian

CNP
xxxxxxxxxxxxx

IDFacultate
5

1042

Pop

Vasile

xxxxxxxxxxxxx

321
5432
8543

Ionescu
Vadean
Sore

Mihai
Cristina
Andreea

xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx

3
3
7

Figura14.Elementelefundamentale aleunuitabel

Tabelelesuntstructurileprincipalealeuneibazededate.Fiecaretabelreprezintunsubiect
unic,specific.Ordinealogicanregistrrilordintruntabelnuareimportan.Fiecaretabelconinecel
puinuncmpdenumiticheieprimarceidentificnmodunicfiecarenregistrare.nFig.14,de
exemplu,IDStudentestecheiaprimaratabelului.Defapt,dateledintrobazdedaterelaionalpot
sexisteindependentdemodulncareaceastaestestocatfizic,tocmaidatoritacestordouultime
caracteristici.Aceastansemncutilizatorulnutrebuieccunoasclocalizareafizicadatelorpentrua
aveaacceslaele.
Subiectul pe care un tabel l reprezint poate s reprezinte fie un obiect, fie un eveniment.
Atuncicndsubiectulesteunobiect,tabelulreprezintcevatangibil,precumopersoan,unlocsauun
lucru.Independentdetip,fiecareobiectarecaracteristicicepotfistocatecaidate.Acestedatepotfi
procesatentroinfinitatedemodaliti.Piloi,produse,maini,studeni,cldirisauechipamentepotfi
exempledeobiectecepotfireprezentateprintabele.
Cnd subiectul unui tabel este un eveniment, tabelul reprezint un fenomen ce apare la un
anumitmomentdetimpiarecaracteristicipecaredorimslememorm.Acestecaracteristicipotfi
stocatecaidateiprocesateulterior.Exempledeevenimentearputeafintlnirideafaceri,distribuii
defondurisaurezultatedelaborator.
Cmp/Coloanreprezintceamaimicstructurauneibazededateidescriecaracteristicile
subiectului din tabelul de care aparine. Cmpurile sunt structurile ce stocheaz datele. Datele din
cmpuripotfiextraseiprezentatecaiinformaienaproapeoriceconfiguraieimaginabil.Calitatea
informaiei ns este direct proporional cu timpul dedicat asigurrii integritii structurale i a
integritii datelor din aceste cmpuri. Importana cmpurilor nu poate fi subestimat. Fiecare cmp
dintrobazdedatecorectproiectatconineosingurvaloareinumeleluiidentifictipulvaloriipe
care o reine. Aceasta face intuitiv introducerea datelor. Dac numele cmpurilor sunt Nume,
Prenume,Strad,Ora,utilizatorultieexactcetipdedatetrebuiecompletate.Sefaciliteazpedealt
parteiinterogareaisortareadatelor.
nregistrare/Linie o nregistrare reprezint o instan unic a subiectului unui tabel. Este
compusdinsetulcompletdevalorialecmpurilorunuitabel,chiardacacestecmpuriconinsaunu
valori.Datoritmaniereincareuntabelestedefinit,fiecarenregistrareesteidentificatdeovaloare
unicacmpuluidecheieprimarpentruaceanregistrare.
n Fig. 14 de exemplu, fiecare nregistrare reprezint un student unic n tabel, iar IDStudent
identific un anumit student n ntreaga baz de date. n schimb, fiecare nregistrare include toate
cmpuriletabeluluiifiecarecmpdescrieunanumitaspectalstudentuluireprezentatdenregistrare.
nregistrrile sunt eseniale n nelegerea relaiilor dintre tabele deoarece trebuie cunoscut modul n
careuntabelseraporteazlanregistrridinalttabel.

Conceptefundamentalecucareopereazobazdedate

Chei sunt cmpuri speciale ce joac un rol foarte specific n cadrul unui tabel. Tipul cheii
determinscopulsuncadrulunuitabel.Chiardacuntabelpoateconinemaimultetipuridechei,
vomlimitadiscuialacelemaiimportantedoudintreacestea:cheiaprimar2icheiastrin3.
Cheia primar (Primary key) este cmpul sau grupul de cmpuri ce identific n mod unic
fiecarenregistrarencadrulunuitabel.Cndocheieprimarconinemaimultecmpuri,estedenumit
cheiecompus4.Cheiaprimarestefoarteimportantdindoumotive:valoareaeiidentificoanumit
nregistrarencadrulntregiibazededate,iarcmpurileeiidentificunanumittabelnbazadedate.
Cheile primare impun de asemenea contrngeri de integritate la nivel de tabel i ajut n stabilirea
relaiilorcualtetabele.Fiecaretabeldinbazadedatetrebuiesconinocheieprimar.
Cndsedeterminexistenauneirelaiintredoutabele,nmodnormalsedeterminrelaia
prin inserarea cheii primare din primul tabel n cadrul celui deal doilea, unde devine cheie strin.
Termenuldecheiestrinesteutilizatdeoarececeldealdoileatabelaredejaocheieprimar,iarnoua
cheieintrodusestestrinacestuitabel.nFig.14esteprezentatunexempludecheiestrin.nacest
exemplu IDFacultate este cheie primar n tabelul Faculti, ns cheie strin n tabelul Studeni.
Tabelul Studeni ns are deja o cheie primar, cmpul IDStudent. n aceast relaie, IDFacultate este
cmpulcestabileteconexiuneadintreStudeniiFaculti.Cheilestrinenusuntimportantedoardin
motivul evident c stabilesc relaii, ci i datorit faptului c mein integritatea relaiilor. Aceasta
nseamncnregistrriledinambeletabelvorficorectasociatedeoarecevalorilecheiistrinetrebuie
sprovindinvalorilecheiiprimarepecareorefereniaz.Cheilestrinepreviniapariianregistrrilor
orfane,deexempluocomanddeprodusfrclient.
Viewulesteuntabelvirtualalctuitdincmpurileunuiasaumaimultortabelealebazeide
date.Tabelelececompununviewsuntdenumitetabeledebaz.Modelulrelaionalcaracterizeazun
view ca fiind virtual, deoarece datele sunt extrase din tabelele de baz i nu se stocheaz datele
independent. De fapt singura informaie legat de view i stocat n baza de date este structura
acesteia.Viewurilepermitvizualizareadatelordinmaimulteperspective,oferindomareflexibilitaten
lucrulcudate.Sepotcreaviewurinmaimultemoduriisuntutileatuncicndavemmaimultetabele
debaz.Spreexemplu,sepoatecreauntabelcunoteletuturorstudenilordelaofacultate.nmulte
programe, RBDMS un view este implementat i referit ca i o interogare salvat, sau mai simplu o
interogare.ncelemaimultecazuri,ointerogarearetoatecaracteristicileunuiview,astfelcsingura
diferenconstndenumire.
Relaiidacnregistrriledintruntabeldatpotfiasociatentrunanumitfelcunregistrrile
dintrunalttabel,aceletabeleauorelaientreele.Manierancarerelaiilesuntstabilitedepindede
tipulrelaiei.Existtreitipuriderelaiecepotexistantroperechedetabele:onetoone(1:1),oneto
many (1:N), manytomany (M:N). nelegerea relaiilor este vital n nelegerea modului n care
lucreazunviewiprindefiniiecumsuntproiectateiutilizateinterogrileSQL.
Onetooneo perechede tabele estentrorelaie1:1 atuncicndosingurnregistrare din
primultabelestelegatdeosingurnregistraredinceldealdoileatabeliosinguranregistraredin
tabelul doi este legat de o singur nregistrare din primul tabel. n acest tip de relaie, un tabel este
denumittabelprimar, iarcellalt,tabelsecundar. Relaia se stabilete lundcheia primaratabelului
primar i inserndo n cel deal doilea, unde devine cheie strin. Aceasta este o relaie special,
deoarecencelemaimultecazuri,cheiastrindevinedefaptcheieprimarntabelulsecundar.nFig.
15 este descris o astfel de legtur, n care o nregistrare din tabelul 1 este legat de o singur
nregistraredintabelul2iviceversa.
Relaiile 1:1 nu sunt comune i se gsesc de obicei atunci cnd un tabel a fost mprit din
motivedeconfidenialitatesausecuritate.

en.primarykey
en.foreignkey
4
en.compositekey
3

Capitolul1.Introducerenbazededaterelaionale

Angajai
IDAngajat
1
2
3
4

Nume
Pop
Sorescu
Vadan
Sore

Prenume
Ion
Andrei
Mihaela
Andreea

Salarii
Salar
2350
1876
3467
1457

Comision
5%
6.5%
8%
3%

Departament
3
5
3
7

<<altecmpuri>>
...
...
...
...

<<altecmpuri>>
...
...
...
...

Figura15.Relaiedetip1:1

Onetomanyoperechedetabeleestentrorelaie1:N,osingurnregistraredinprimultabel
poatefinlegturcumaimultenregistrridinceldealdoilea,darosingurnregistraredinceldeal
doilea tabel e legat de o singur nregistrare din primul. Aceast relaie este realizat prin inserarea
cheiiprimaredinprimultabelcaicheiestrinnceldealdoilea.
Angajai
IDAngajat
1
2
3
4

Nume
Pop
Sorescu
Vadan
Sore

Prenume
Ion
Andrei
Mihaela
Andreea

Departament
3
5
3
7

<<altecmpuri>>
...
...
...
...

Departamente
IDDepartament
3
4
5
6

Denumire
Administrativ
IT
Management
Resurseumane

<<altecmpuri>>
...
...
...
...

Figura16.Relaiedetip1:N

ManytomanyOperechedetabeleseaflntrorelaieM:Natuncicndosingurnregistrare
dinprimultabelpoatefinlegturcumaimultenregistrridinceldealdoileaiviceversa.Pentruo
astfel de relaie este nevoie de un tabel de legtur5. Acest tabel permite asocierea simpl a
nregistrrilordintruntabelcuceledinceldealdoilea.Deasemeneaasiguradugarea,tergereasau
modificareadatelorfrprobleme.Pentrutabeluldelegtursefolosesccheileprimarealecelordou
tabele i se combin n acesta. Aceste cmpuri joac dou roluri: mpreun formeaz cheia primar
compus a tabelului de legtur i separat fiecare reprezint o cheie strin. O relaie M:N ce nu e
definitcorect,estedenumitnerezolvat.nFig.17,esteprezentatoastfelderelaie,iarnFig.18o
relaieM:Ncorectdefinit.
Clieni
IDClient
1
2
3
4

Nume
Pop
Sorescu
Vadan
Sore

Prenume
Ion
Andrei
Mihaela
Andreea

Adresa
Tebes3/4
Republicii12
Oltului45/2
Bucureti123/35

<<altecmpuri>>
...
...
...
...

Produse
IDProdus
3
4
5
6

Denumire
Mouse
Tastatura
Monitor
Telefon

<<altecmpuri>>
...
...
...
...

Figura17.ExempluderelaieM:Nnerezolvat

en.linkingtable

Sistemedegestiuneabazelordedate

Clieni
IDClient
1
2
3
4

Nume
Pop
Sorescu
Vadan
Sore

Prenume
Ion
Andrei
Mihaela
Andreea

Adresa
Tebes3/4
Republicii12
Oltului45/2
Bucureti123/35

<<altecmpuri>>
...
...
...
...

IDVnzare
1
2
3
4

IDClient
5
5
2
11

IDProdus
7
3
7
2

<<altecmpuri>>
...
...
...
...

Produse
IDProdus
3
4
5
6

Denumire
Mouse
Tastatura
Monitor
Telefon

<<altecmpuri>>
...
...
...
...

Figura18.ExempluderelaieM:Ncorectdefinit

Interogarereprezintmodalitateastructuratistandardizatdeaccesiextragereadatelor
dintrobazdedate.Deobiceiinterogrilesuntrealizateprinintermediullimbajelordeprogramaresau
cu ajutorul interfeelor grafice. Rezultatul unei interogri poate fi una sau mai multe nregistrri din
unulsaumaimultetabele.

1.6

Sistemedegestiuneabazelordedate

DEFINIIE: Un sistem de gestiune a bazelor de date (DBMS)6 reprezint un set de aplicaii ce


permitutilizatoruluidefinirea,crearea,ntreinereaiaccesulcontrolatlaobazdedate.
UnDBMSesteunpacketdeprogramesoftwarececontroleazcrearea,mentenanaiutilizarea
bazei de date. Permite organizaiilor s dezvolte baze de date pentru diverse aplicaii cu ajutorul
administratorilor bazelor de date i ali specialiti. O baz de date este o colecie integrat de
nregistrri,fiiereialteobiectealebazeidedatenecesareaplicaiei.UnDBMSpermiteprogramelors
accesezesimultanaceeaibazdedate.UnDBMSpoateutilizadiferitemodeledebazededate,dela
cele relaionale la cele obiectuale pentru a descrie i susine aplicaiile n mod convenabil. n mod
normalpermitutilizarea limbajelordeinterogare7,limbajedenivel naltdedicatece simplific nmod
considerabil scrierea programelor cu aplicaii la baza de date. Limbajele de interogare simplific de
asemeneaiorganizareabazeidedateprecumiextragereaiprezentareainformaiei.UnDBMSofer
faciliti pentru controlul accesului, impunerea integritii datelor, controlul accesului concurent,
tratarea erorilor i restaurarea bazei de date din fiierele de backup, precum i asigurarea securitii
bazeidedate.
UnDBMSoferposibilitateamaimultorutilizatorideaaccesaipartajaresurseleunuiproces.
Deoareceexistmaimultetipurideutilizatori,existmaimultecerinealeuneibazededate.ntrebarea
estecumpoateosingurbazdedateunificatsrspundattorcerine?

en.DatabaseManagementSystem(DBMS)
en.Querylanguages

Capitolul1.Introducerenbazededaterelaionale

User view

Conceptual
view

Internal view

Figura19.ArhitecturaANSI/SPARCcutreiniveluri

UnDBMSminimizeazacesteproblemeprinasigurareaa3niveledevizualizareabazeidedate:
nivel extern (user view), nivel logic (conceptual view) i un nivel fizic (internal view). Nivelul extern
reprezint datele ntrun format ce este semnificativ utilizatorului i programelor software ce
proceseazacestedate.AvantajulunuiDBMSconstnfaptulcunuisingurnivellogicsaufizicpotsi
corespund mai multe nivele externe. Acest aspect permite vizualizarea bazei de date ntrun mod
accesibiltuturorinudoartehnicsaudeprocesare.Nivelulfizicsereferlamodulncaredatelesunt
stocate n mod hardware, iar cel conceptual reprezint structura bazei de date (tabelele, legturile
dintreacesteaetc.).
ComponenteleunuiDBMSsunt:

DBMSEngine
Definirea
datelor

Manipularea
datelor

Generarea
aplicaiilor

Administrarea
datelor

Figura110.ComponenteleunuiDBMS

EngineDBMSarecaintrarecererilogicedelediverselesubsisteme,converteteacestecereri
ncererifiziceiacceseazefectivbazadedateaacumesteeastocatfizic.

Subsistemuldedefinireadatelorpermiteutilizatoruluiscreezeisntreindicionarulde
dateideadefinistructurafiierelordintrobazdedate

Subsistemeul de manipulare a datelor permite adugarea, modificarea i tergerea


informaiei dintro baz de date i interogarea acesteia pentru a obine informaia solicitat. Permite
trimitereadecererilogice.

Subsistemul de generare a aplicaiilor conine faciliti ce ajut utilizatorul s dezvolte


aplicaiicutranzaciimultiple.Oferovizualizareuserfriendlyasupradatelor,limbajedeprogramarei
interfee.

Subsistemuldeadministrareadatelorpermiteutilizatorilorsgestionezentregmediulbazei
de date, prin crearea de faciliti de backup i restaurare, managementul securitii, optimizarea
interogrilor,controlulaccesuluiconcurentimanagementulmodificrilor.
1.6.1

CerinefuncionalealeunuiDBMS
Cerinele funcionale se refer la proiectarea bazei de date astfel nct aceast s poat fi
aplicatnctmaimultescenariireale:

Definireadatelor:modelareadateloraplicaiatrebuiesutilizezemodelededatecomplexece
permitdescriereaaspecteloraplicaieicetrebuiesusinutdebazadedate

Sistemedegestiuneabazelordedate

10

Manipulareadatelormodelelededatealeaplicaieitrebuiespermitutilizareaunuilimbaj
extinspentruapermitemanipulareabazeidedateiredareainformaieiconformcucerineleaplicaiei.
Protejareadatelorbazadedatearenevoiedeosecuritateaconinutuluiattfadeatacuri
maliioase,ctifadeaccesrineintenionate.
1.6.2

CerineoperaionalealeunuiDBMS
Cerineleoperaionalesereferlamodulncaresefaceaccesullabazadedateilamoduln
careaceastarspundecerinelorutilizatorilor:
Disponibilitateaaccesullaobazdedatetrebuiespoatfifcutntrunanumitintervalde
timprezonabil,iarrspunsullaoaciuneautilizatoruluisnudepeasclimiteacceptabiledetimp.
Performaneleaciunileutilizatorilortrebuieexecutatenmodfiabilintrunintervaldetimp
ctmaiscurt.
Izolarea utilizatorilor aciunile unui utilizator nu trebuie s fie ntrerupte sau afectate de
accesulconcurentalunuialtutilizator.
Tratareaerorilortoatesistemelesoftwaresuntsusceptibilelaerori,astfelcunDBMStrebuie
simplementezemetodedemeninereaintegritiidatelorirevenireantrostarebinedefinit.
Siguranairestaurareadateloruneoriestenevoiesserevinlaostareanterioarabazeide
date.Astfelcperiodicsuntefectuatecopiidesiguranalebazeidedate,copiicepotfiutilizatepentru
restaurareaacesteia
1.6.3 AvantajeleutilizriiunuiDBMS
Independena datelor programele aplicaie nu ar trebui n mod ideal s aib acces la detalii
referitoare la reprezentare i stocarea datelor. Un DBMS ofer o viziune abstract asupra datelor i
ascundeastfeldedetalii.
AccesuleficientladateunDBMSutilizeazovarietartedetehnicisofisticatepentruastocai
redadatelenmodeficient.Aceastcaracteristicesteimportantmaialesdacdatelesuntstocatepe
dispozitiveexterne.
Integritatea i securitatea datelor dac datele sunt ntotdeauna accesate prin intermediul
DBMS, acesta poate impune constrngeri de integritate. De exemplu nainte de a insera salariul unui
angajatsepoateverificadacnuafostdepitbugetulcompaniei.Deasemeneapoaterealizacontrolul
accesuluiprinselectareadatelorvizibilediferitelorcategoriideutilizatori.
Administrarea datelor cnd mai muli utilizatori mpart acelai set de date, centralizarea
administrrii datelor poate oferi mbuntiri semnificative. Profesioniti cu experien care neleg
natura datelor manageriate i modul n care utilizatorii le folosesc, pot fi rspunztori pentru
organizarea reprezentrii datelor pentru a minimiza redundana i pentru a optimiza stocarea datelor
pentruoredareeficient.
AccesconcurentitratareaerorilorunDBMSprogrameazaccesulconcurentladatenaafel
nct utilizatorii au impresia c e accesat de un singur utilizator la un moment dat. n plus un DBMS
protejeazutilizatoriideefecteledefeciunilorsistemului.
Reducerea timpului necesar pentru dezvoltarea aplicaiilor n mod evident, un DBMS
implementeazfunciiimportantecesuntcomunemultoraplicaiiceacceseazdatenDBMS.Aceasta,
n combinaie cu interfaarea de nivel nalt cu datele, faciliteaz dezvoltarea rapid de aplicaii.
AplicaiileDBMSsuntdeobiceimairobustedectaplicaiisimilarestandalone,deoareceomareparte
dinatribuiisuntmanipulatedeDBMS.
1.6.4

TipurideDBMS
TipuriledeDBMSsuntdefinitenlegturdirectcumodeluldedateutilizatncadrulbazeide
datepecareacestaogestioneaz:

RDBMSRelationalDatabaseManagementSystemestebazatpemodelulrelaional.ncadrul
acestui sistem, datele sunt stocate sub form de tabele, iar relaiile dintre date sunt stocate tot sub
formdetabele.Exemple:MSSQLServer,Oracle,MySQL,MSAccesssauSyBase.
ODBMSObject(Oriented)DatabaseManagementSystemutilizeazbazededateobiectuale.
Avantajele fa de RDBMS se datoreaz faptului c majoritatea operaiilor sunt realizate sub form

11

Capitolul1.Introducerenbazededaterelaionale

navigaional i nu prin interfee declarative i se justific astfel utilizarea de pointeri. Contra


argumentele sunt date de utilizarea unor rutine specifice de cutare. n aplicaii generale, tehnicile
bazate pe pointeri vor fi mult mai lente. Exemple: Illustra, UniSQL/X Ontos, ITASCA, Versant, Object
Store,O2sauGemstone.
ORDBMS Object Relational Dabase Management System cel mai avansat model de
gestionareadatelor,cepermiteutilizareadetipuridedateimetodepersonalizate.ntimpceRBDMS
se axeaz pe managementul eficient al datelor prin intermediul unui set limitat de tipuri de date,
ORDBMSpermiteintegrareadenoitipuridedatesaumetodecemrescastfelniveluldeabstractizare
prinintermediulcruiaoproblempoatefiabordat.Exemple:PostgreSQL.

1.7

Componenteleunuisistemcubazededate
Baza de date
Repository

DBMS

Admin

Dezvoltatori
Programe
aplicaie
Interfaa cu utilizatorul

Utilizator #1

Utilizator #n

Figura111.Arhitecturaunuisistemcubazededate

Principalele componente ale unui sistem cu baze de date sunt prezentate n Fig. 111 i sunt
descrisenseciuneaurmtoare.
Repositorydescriereaprinmetadateaconinutuluibazeidedate.
DBMSunsistemsoftwareutilizatpentruacrea,menineioferiaccescontrolatlabazelede
datealeutilizatorilor.
Baza de date o colecie organizat de date, creat n scopul de a rspunde cerinelor mai
multor utilizatori dintro organizaie. Diferena fa de repository const n faptul c baza de date
reprezintdateleefectiv,iarrepositoryuldescriereaacestordate.
Programe aplicaie programe utilizate pentru a crea i menine baza de date i de a oferi
informaiautilizatorilor.
Administratoriibazeidedateiadatelorpersoaneceaucaatribuiimanagementulresurselor
i a datelor, precum i designul fizic al bazei de date i rezolvarea eventualelor probleme tehnice
aprute.
Dezvoltatorii sistemului persoane ce realizeaz noi aplicaii pornind de la o baz de date
existentpentruafacilitaaccesulutilizatorilorfinali.
Interfaa cu utilizatorul facilitile oferite utilizatorul pentru a interaciona cu diferitele
componentealesistemului(programeaplicaie,bazadedateetc.)
Utilizatorifinalipersoaneceadaug,modificsausolicitinformaiadinbazadedate.

Concluzii

1.8

12

Concluzii

n cadrul acestui capitol aufost descrisenoiunileelementare legate debaze de date.Au fost


descriseconceptelecucareobazdedateopereaz,modelelededatepecarepoatefistructurati
caracteristicile unei baze de date relaionale. Au fost introduse de asemenea elementele de baz ale
unui sistem de gestiune a bazelor de date (DBMS), arhitectura acestuia, avantajele i cerinele
operaionale i funcionale. Noiunile dobndite n acest capitol stau la baza conceptelor ce vor fi
descrise ncapitoleleurmtoare.Frnelegereaconceptelor introductivedinacestcapitol,utilizarea
limbajulSQLsauaunuiDBMSnupotfipusenaplicare.

1.9

Testareacunotinelordobndite
Rspundeilaurmtoarelentrebri:
1. Ceesteobazdedate?Cumsuntmbuntitesistemeledeorganizareanterioareprin
introducereabazelordedateiastructuriloraferenteacestora?
2. Descriei comparativ o baz de date relaional fa de un sistem de organizare a
datelorbazatpefiiere.
3. Caresuntprincipalelemodelededateitipuriledebazededatecorespunztoarelor?
4. Prezentaiprincipaleleconceptecucareopereazobazdedateiexemplificaipeun
tabeldefinitdevoi.
5. Ceesteunsistemdegestiuneabazelordedate(DBMS)?
6. Prezentai prin prisma avantajelor unui DBMS care sunt cerinele funcionale i
operaionalealeacestuia.
7. Caresuntcomponenteleunuisistemcubazededate?Realizaiodiagramconceptual.
8. nmodelulierarhicdatelesuntorganizatesubformde:
a. Reea
b. Mesh
c. Arbore
d. Graf
9. Orelaiesecompunedin:
a. Atributeicorpulrelaiei
b. Liniiinterconectatentretabele
c. Denumireaidescrierearelaiei
d. Tabeleleicoloaneleunuitabel
10. Metadatelesunt:
a. Datedespredate
b. Antetultabelelor
c. Descrieriformalealetabelelor,coloanelor,domeniiloriaconstrngerilor.
d. Descriereamoduluideimplementarealtabelelorntrobazdedate
11. Cheiaprimareste:
a. Unidentificatoruniccefacelegturadintretabele
b. Unsetdeatributeceidentificnmoduniconregistrareaunuitabel
c. Relaiadintrecoloaneleunuitabel
d. Unidentificatoralctuitdinentitate,relaieiatribut

1.10 Glosar
bazdedate ocolecieorganizatdedate,cuostructurpredefinit.
cmp cea mai mic structur a unei baze de date i descrie caracteristicile
subiectuluidintabeldecareaparine.
DBMS unsetdeaplicaiicepermitutilizatoruluidefinirea,crearea,ntreinereai
accesulcontrolatlaobazdedate.
interogare modalitatea structurat i standardizat de acces i extragere a datelor
dintrobazdedate.

13

Capitolul1.Introducerenbazededaterelaionale

nregistrare oinstanunica subiectului unuitabel.Estecompusdinsetulcomplet


de valori ale cmpurilor unui tabel, chiar dac aceste cmpuri conin sau
nuvalori.
relaie legturadintrecmpurileadousaumaimultetable
repository descriereaprinmetadateaconinutuluibazeidedate
tabel structura principal a unei baze de date. Fiecare tabel reprezint un set
completdenregistrricuvalorileaferentecmpurilordescrisencapulde
tabel.
view tabel virtual alctuit din cmpurile unuia sau mai multor tabele ale bazei
dedate.

1.11 Bibliografie
J.Viescas,M.Hernandez,Sqlqueriesformeremortals,2ndEdition,AddisonWesley,2008
J.Hoffer,M.Prescott,F.McFadden,ModernDatabaseManagement,8thEdition,2007
R.Ramakrishnan,J.Gehrke,DatabaseManagementSystems,3rdEdition,2003

Capitolul2.Creareaidefinireatabeleloruneibazededate

nacestcapitolveinva:

NoiuniintroductivealelimbajuluiSQL
CereprezintlimbajulDDL
Caresuntmetodeledecreareaunuitabel
SintaxaintruciunilorDDL

SQL, DDL, constrngeri, tipuri de date SQL, integritate referenial,


Cuvintecheie: integritateaentitii,integritateadomeniului

Cuprins
Capitolul2.Creareaidefinireatabeleloruneibazededate........................................................1
1.1 NoiuniintroductivealelimbajuluiSQL...........................................................................2
1.2 Tipuridedate...................................................................................................................2
1.3 Constrngeriasupradatelor............................................................................................3
1.3.1 Integritateaentitii....................................................................................................3
1.3.2 Integritateareferenial..............................................................................................3
1.3.3 Integritateadomeniului..............................................................................................4
1.3.4 Managementulconstrngerilor..................................................................................5
1.4 Datadefinitionlanguage(DDL)........................................................................................6
1.4.1 InstruciuneaCREATE..................................................................................................6
1.4.2 InstruciuneaALTER....................................................................................................6
1.4.3 InstruciuneaDROP.....................................................................................................6
1.5
1.6
1.7

Testareacunotinelordobndite....................................................................................7
Glosar...............................................................................................................................7
Bibliografie.......................................................................................................................7

NoiuniintroductivealelimbajuluiSQL.

1.1

NoiuniintroductivealelimbajuluiSQL.

Pentruamanipulaiaccesaobazdedateestenevoiedeunlimbajdeprogramareoptimizat
pentruacesteaciuni.SQL1dezvoltatdeAmericanNationalStandardsInstitute(ANSI)esteunastfelde
limbaj.Esteutilizatpentruaaccesaimanipuladatedinbazelededaterelaionale,cumarfiMSAccess,
Oracle, DB2 sau Sybase. Aproape toi productorii dein o versiune personalizat a SQL, dar toate
pornesc de la un schelet comun care trebuie s includ principalele cuvinte cheie: SELECT, UPDATE,
DELETEetc.
SCURTISTORIC:
O dat cu apariia modelului relaional n 1970, Codd apropus i un limbaj denumit
DSL/ALPHApentrumanipulareadatelorntabelrelaionale
Lapuintimp,IBMarealizatSQUAREpebazaideilorluiCodd.
RafinrialeSQUAREauduslaSEQUEL,ceadevenitulteriorSQL
n anii 80 ANSI a nceput standardizarea limbajului SQL, standardul fiind lansat n
1986.
UltimaversiunealimbajuluiseaxeazpeintegrareaSQLcuXMLidefinetelimbajul
XquerypentrufiiereleXML
LimbajulSQLestempritnctevacategoriiimportante:intruciunidedefinire,manipularei
control a datelor. Instruciunile de definire, denumite i intruciuni ale schemei sunt folosite pentru
crearea i manipularea tabelelor i a viewurilor. Instruciunile de manipulare sau date se refer la
manipulareadatelordinbazadedate,iarceledecontrolsupervizeaztranzaciile.
SQLesteunlimbajneprocedural,extensiiproceduralealesalefiind:PL/SQL,TSQL,PLpgSQL.Ca
ioricealtlimbajdeprogramare,SQLconineoseriedecuvinterezervate,foloseteanumitetipuride
dateiareostructurainstruciunilorpredefinit.LimbajulSQLfoloseteurmtoareleelemente:
Clauzecomponenteleconstituentealeinstruciunilorialeinterogrilor.
Expresiireturneazfievaloriscalare,fietabele
Predicate specific condiiile ce pot fi evaluate la valori booleene
(TRUE/FALSE/unknown) i care sunt folosite pentru a limita efectele intruciunilor i a
interogrilorsaupentruamodificafluxuldeprogramare.
Interogri returneaz datele pe baza criteriilor specificate. Sunt cel mai important
elementallimbajuluiSQL
Instruciuni au un efect permanent asupra structurii sau a datelor, sau care pot
controla tranzacii, fluxul programului, sesiunea sau diagnosticul. Instruciunile SQL se
terminntotdeaunacu;
Spaiilemultiplesuntdeobiceiignorate,iarinstruciunilenusuntcasesensitive.

1.2

Tipuridedate

FiecarecoloandintruntabelSQLconineunsingurtipdedate:caractere,numeric,datsau
control.DefinimnceleceurmeaztipurilededatedisponibilepentrudefinireatabelelornSQL.
CARACTERE
CHARACTER(n), CHAR(n)
CHARACTER VARYING(n),
VARCHAR(n)
NATIONAL CHARACTER(n),
NCHAR(n)
NATIONAL CHARACTER
VARYING(n), NVARCHAR(n)

irdecaracteredelungimefixn
irdecaracteredelungimevariabil,cuodimensiunemaximn
ir de caractere de dimensiune fix cu suport pentru caractere
internaionale
ir de caractere de dimensiune variabil cu suport pentru
caractereinternaionaleicareareodimensiunemaximn

StructuredQueryLanguage.

Capitolul2.Creareaidefinireatabeleloruneibazededate

IRURIDEBII
BIT(n)
BIT VARYING(n)

unvectordenbii
unvectordedimensiunemaximnbii

NUMERIC
INTEGER, SMALLINT
FLOAT, REAL, DOUBLE
PRECISION
NUMERIC(precision,scale),
DECIMAL(precision,scale)

DATAiORA
DATE
TIME
TIME WITH TIME ZONE,
TIMEZ
TIMESTAMP
TIMESTAMP WITH TIME ZONE,
TIMESTAMPZ

pentruvalorialedatei(ex: 2011-05-03)
pentruvalorialetimpului(ex.15:51:36)
lafelcaiTIME,darincludeidetaliilegatedefusulorar
concatenareaDATEcuTIME(ex: 2011-05-03 15:51:36)
lafelcaiTIMESTAMP,darincludeidetaliilegatedefusulorar

CONTROL
autorizeazunulsaumaimuliutilizatorisexecuteunsetde
operaiiasupraunuiobiect

GRANT

ex:

GRANT SELECT, UPDATE


ON My_table
TO some_user, another_user;

eliminautorizrile

REVOKE

ex:

REVOKE SELECT, UPDATE


ON My_table
TO some_user, another_user;

1.3

Constrngeriasupradatelor

Principalul rol al constrngerilor este de a impune anumite reguli bazei de date. mpreun,
constrngerilemeninintegritateabazeidedate.Deexemplu,avemocheiestrinpentruaneasigura
ctoatevnzrileauunclient.Meninereaintegritiibazeidedateesteattdeimportantnctnune
putembazapeutilizatorisauaplicaiisimpunacestereguliindependent.Dacsepierdeintegritatea,
pot s apar situaii n care un client este facturat de dou ori sau lipsesc pli ctre furnizori.
Integritatea datelor poate s aparin categoriilor: entitate, referenial sau de domeniu, categorii
descrisenceleceurmeaz.
1.3.1

Integritateaentitii
Asigur ca fiecare nregistrare s fie o entitate identificabil n mod unic. Acest tip de
constrngereesterealizatcuajutorulcheiiprimare.DeexempluIDProdus2esteocheieprimarpentru
tabelulProduse.
1.3.2

Integritateareferenial
Integritatea referenial se refer la relaiile dintre tabele ce trebuiesc meninute la
introducerea, tergerea sau modificarea datelor din baza de date. Constrngerea este realizat prin
intermediul cheii strine. Coloana IDProdus n tabelul Vnzri este o constrngere de cheie strin
pentrutabelulVnzri.Constrngereaprevinecandetaliilevnzriissefoloseascuniddeprodusce
nuexist.De asemenea o nregistrare din tabelul Produse nu poate fi tears,dacexist referine la
acestprodusntabelavnzri.
Integritateaentitiimpreuncuceareferenialformeazintegritateacheii.

v.Capitolul1

Constrngeriasupradatelor

1.3.3

Integritateadomeniului
Integritateadomeniuluiasigurcvaloriledatelordininteriorulbazeidedateurmeazanumite
reguli definite pentru valori, interval i format. O baz de date poate asigura aceste reguli folosind o
varietatede tehnici,precum constrngeri deverificare(CHECK), constrngeri de unicitate(UNIQUE) i
constrngeriimplicite(DEFAULT).Pelngacesteamaiexistoseriedealteconstrngeripecarenule
vomdiscuta,nschiarialegereatipuluidedatepentruocoloanreprezintoconstrngere.Exemple
deconstrngeridedomeniu:numeleunuiprodusnupoatefiNULL,numeleunuiprodustrebuiesfie
UNIQUE,datauneicomenzinupoatefinviitor,cantitateacomandattrebuiesnufiezero.
ConstrngereaUNIQUE
Aceastconstrngerefoloseteunindexpentruaseasiguracocoloansauunsetdecoloane
nuconinevaloriduplicate.Princreareauneiconstrngeriunique,nloculunuiindexunic,bazadedate
tie c se dorete s utilizezi aceast regul i nu doar s optimizezi interogarea. Baza de date nu va
permitetergereaindexului,fratergenainteconstrngerea.DinpunctdevederealSQL,existtrei
metodedeaadugaoconstrngereunique.PrimametodestedeaspecificaninstruciuneaCREATE
TABLEvaloareaUNIQUEpentruocoloan.
CREATE TABLE Produse(
IDProdus int PRIMARY KEY,
NumeProdus nvarchar(40) CONSTRAINT C_NumeProdus UNIQUE
)
Prininstruciuneademaisussevorcreadefaptdoiindeciunici.Oaltsintaxpermitecrearea
unei constrngeri asupra tabelului. Spre deosebire de constrngerea asupra coloanei, constrngerea
asupratabeluluiasigurreguliasupramaimultorcoloane.
CREATE TABLE Produse(
IDProdus int PRIMARY KEY,
NumeProdus nvarchar(40),
CONSTRAINT C_NumeProdus UNIQUE
)
Iar cea dea treia metod utilizeaz instruciunea ALTER TABLE i adaug constrngerea unui
tabelexistent.Dacexistvaloriduplicate,sevarecepionaunmesajdeeroare.
CREATE TABLE Produse(
IDProdus int PRIMARY KEY,
NumeProdus nvarchar(40)
)
ALTER TABLE Produse(
ADD CONSTRAINT C_NumeProdus UNIQUE(NumeProdus)
)
ConstrngereaCHECK
Acesttipdeconstrngereconineoexpresiepecarebazadedateovaevaluacndsemodific
sau se insereaz o nou nregistrare. Dac expresia returneaz FALSE, baza de date nu va stoca
nregistrarea.Potfifolosiioperatoriaritmetici(>,<,>=,<=,<>,=),operatoriiBETWEEN,LIKE,IN,NULL.
SepotfolosideasemeneaioperatoriiAND,NOTiOR.Sepotfolosiaceleaitreimetodedescrisela
constrngereaUNIQUE.
CREATE TABLE Produse(
IDProdus int PRIMARY KEY,
PretProdus float CHECK (PretProdus>0 AND PretProdus<1000)
)
nexemplulanteriorselimiteazvalorilepreuluintre0i1000.Dacsencearcintroducerea
uneivalorinafaraacestuiinterval,sevareturnaoeroare.Constrngerileasupratabeluluiserealizeaz:
CREATE TABLE Clienti(
IDClient int PRIMARY KEY,
Phone varchar(20),
Fax varchar(20),

Capitolul2.Creareaidefinireatabeleloruneibazededate

CONSTRAINT CK_PhoneORFax CHECK (Fax IS NOT NULL OR Phone IS NOT

NULL)
)
i asigur c exist cel puin un numr de fax sau de telefon. n mod similar se pot aduga
constrngeri dup crearea tabelului cu ajutorul instruciunii ALTER TABLE. De cele mai multe ori
adugareauneiconstrngeriasupraunuitabelpoateeuadeoarecedatelenusuntconforme.Pentrua
evitaerorilesefoloseteNOCHECK:
ALTER TABLE Produse WITH NOCHECK
ADD CONSTRAINT Ck_PRET (PretProdus>5)
DacnbazadedateexistvaloriNULLntabel,constrngereapoatefiimpus,deoareceerorile
lainserareiadugarereturneazeroridoardacverificareexpresieireturneazexplicitFALSE.
Dei constrngerile CHECK sunt cele mai uor de implementat, au anumite limitri: nu pot
refereniaonregistrarediferitdintruntabelinupotrefereniaoconstrngeredintruntabeldiferit.
ConstrngereaNULLdeinuesteoconstrngerenadevratulsensalcuvntului,deciziadea
permitevaloriNULLntabelsaunu,esteoformdeasigurareaintegritiidomeniului.Ocoloanpoate
fiNULL,sauNOTNULLnfunciedecerine.Coloanaceconinecheiaprimaresteobligatoriusconin
constrngereaNOTNULL.DacnusespecificnmodclarcocoloanpoateconinevaloriNULL,baza
de date va utiliza o serie de reguli pentru a stabili dac acea coloan poate fi nul sau nu. Este
recomandatutilizareacondiiilorNULLsauNOTNULLntotdeaunalacreareatabelelor.
CREATE TABLE Studenti(
IDStudent int PRIMARY KEY,
Nume varchar(50) NOT NULL,
Prenume varchar(50) NULL
)
ConstrngeriDEFAULT
ConstrngerileDEFAULTseaplicdeobiceilainserareadatelor,atuncicndpentruocoloannu
estespecificatnmodexplicitovaloare.DEFAULTpoatesasignezeovaloareconstant,rezultatele
uneifunciisauNULLuneicoloane.SepoatefolosiDEFAULTasupraoricreicoloane,cuexcepiacheilor
primareiacoloanelordetiptimestamp.Urmtorulexempludemonstrazcombinareaconstrngerilor
descrisepnacum:
CREATE TABLE Comenzi(
IDComanda int IDENTITY NOT NULL,
IDAngajat int NOT NULL,
DataComenzii datetime NULL DEFAULT(GETDATE()),
Pret money NULL DEFAULT (0) CHECK (Pret>=0),
Adresa nvarchar(60) NULL DEFAULT(Nu are adresa),
IntrodusDe nvarchar(60) NOT NULL DEFAULT($USER_NAME())
)
1.3.4 Managementulconstrngerilor
Launmomentdatoconstrngerepoatesnumaifienecesarsautrebuiemodificat,astfelc
trebuie s putem s tergem sau s dezactivm constrngerile. Pentru a le terge utilizm comanda
DROPCONSTRAINT:
ALTER TABLE Produse DROP CONSTRAINT Ck_Pret
Pentru a nu terge complet constrngerea, aceasta poate fi temporar dezactivat. Singurele
constrngeri ce pot fi dezactivate sunt Foreign Key i CHECK. Constrngerile Primary Key, UNIQUE i
DEFAULTsuntntotdeaunaactive.SeutilizeazcomadaALTERTABLEcombinatcuNOCHECK:
ALTER TABLE Produse NOCHECK CONSTRAINT Ck_Pret
ALTER TABLE Produse NOCHECK CONSTRAINT All
Pentrureactivareaconstrngeriiseutilizeaz:
ALTER TABLE Produse CHECK CONSTRAINT Ck_Pret
Darbazadedatenuverificdacdateleexistenterespectcondiia.

Datadefinitionlanguage(DDL)

Tipurile de date i constrngerile descrise anterior formeaz baza DDL. Cunoaterea DDL
determincalitateabazeidedateproiectateiimplicitaaplicaiilordezvoltatepebazaei.

1.4

Datadefinitionlanguage(DDL)

Limbajul de definire a datelor, Data Definition Language (DDL) este limbajul de descriere a
metodelordecreare,modificareitergereabazelordedate,atabeleloriaviewuriloruneibazede
date.Frostructurcorectabazeidedate,manipulareadatelorpoatedevenigreoaieiineficient.
1.4.1

InstruciuneaCREATE

Creareauneibazededate

CREATE DATABASE <name>

Creareaunuitabel

CREATE TABLE <tablename>


(<column1> <datatype> [constraint],
<column2> <datatype> [constraint],
<column3> <datatype> [constraint],
[table constraint]);

Creareaunuiview

CREATE VIEW <viewname>[(<column1>, <column2>)]


AS
SELECT <column1>, <column2>
FROM <tablename>

1.4.2

InstruciuneaALTER
CuajutorulintruciuniiALTERsepoaterealizaadugarea,tergereasaumodificareacoloanelor
dintruntabel.

1.4.3

ALTER TABLE <table_name> ADD


(<column1> <datatype>,
<column2> <datatype>,
<column3> <datatype>)
%%
ALTER TABLE <tablename> DROP COLUMN <column_name>
%%
ALTER TABLE <tablename> ALTER COLUMN
(<column1> <datatype>,
<column2> <datatype>,
<column3> <datatype>)
InstruciuneaDROP
Folositpentrutergereabazelordedate,atabelelorsauaviewurilor:

DROP DATABASE <databasename>


DROP TABLE <tablename>
DROP VIEW <viewname>
Trebuie avut n vedere c tergerea unei baze de date implic i tergerea tuturor tabelelor
corepondente.Aceastinstruciunetrebuiefolositdoardectreadministratoriibazeidedate.ncazul

Capitolul2.Creareaidefinireatabeleloruneibazededate

tabelelordactabelulreprezintocheiestrinntrunalttabel,trebuiefcutnaintederelaionarea
celordoutabele.

1.5

Testareacunotinelordobndite
Rspundeilaurmtoarelentrebari:
1.
2.
3.
4.
5.
6.
7.

8.

9.

10.

1.6

CaresuntelementeledebazalelimbajuluiSQL?
Explicaipescurtcereprezintintegritateacheii.
Explicaipescurtcenseamnintegritateareferenial.
Explicaipescurtcenseamnintegritateadomeniului.
Creaiunscenariuncaresutilizaitoatetipuriledeconstrngerintrunsingurtabel.
Daiscurteexplicaiiprivitorlastructuraconsiderat.
CesemnificDDL?Explicaiprincipalelecomponentealeacestuia.
DDLesteprescurtareadela:
a. DataDescriptionLanguage
b. DataDefinitionLanguage
c. DescriptionandDefinitionLanguage
d. DataDynamicLanguage
Integritateacheiiestealctuitdin:
a. Integritateadomeniuluiiceareferenial
b. Integritateaentitiiiceaadomeniului
c. Integritateaentitiiiceareferenial
d. Integritateareferenialiconstrngerile
Creareaunuitabelesterealizatcuajutorulinstruciunii:
a. CREATEVIEW
b. CREATETABLE
c. ALTERTABLE
d. DROPVIEW
Constrngereadefaultsereferla:
a. Valorilecalculatepebazaunorcoloaneexistente
b. Valorileunicealecmpuriloruneicoloanentruntabel
c. Valorileverificatelainserareavalorilorncoloane
d. Valoriledefiniteautomatcndnuseinsereazvalorintrocoloan

Glosar
constrngere metodeprincareseimpunanumitereguliasupradatelordintruntabelal
bazeidedate.Tipuri:CHECK,UNIQUE,DEFAULT.
DDL DataDefinitionLanguage
integritatea asigur utilizarea datelor conforme cu tipul i constrngerile coloanei la
domeniului inserareadatelorntabele
integritatea asigurcafiecarenregistraresfieoentitateidentificabilnmodunic
entitii
integritatea se refer la pstrarea relaiilor dintre tabele n momentul modificrii
referenial datelordintabele
SQL limbajdeprogramarededicatlucruluicubazededate

1.7

Bibliografie
J.Viescas,M.Hernandez,Sqlqueriesformeremortals,2ndEdition,AddisonWesley,2008
J.Hoffer,M.Prescott,F.McFadden,ModernDatabaseManagement,8thEdition,2007
R.Ramakrishnan,J.Gehrke,DatabaseManagementSystems,3rdEdition,2003
A.Beaulieu,LearningSQL,2ndEdition,O'Reilly,2009

Capitolul3.Manipulareaiaccesareadatelor

nacestcapitolveinva:

CereprezintlimbajulDML
Cumseextragdateledintrobazdedate
Cumsefacactualizrialedatelor
Filtrarearezultatelor
Ordonareadatelor
Condiionareainterogrilorpentrutipuldedatestring
SintaxainstruciunilorSelect,Insert,Update,Delete

DML, interogri, filtrarea rezultatelor, alias, operatori logici, operatori


Cuvintecheie: decomparaie,operatoriaritmetici,ORDERBY,wildcards

Cuprins
Capitolul3.Manipulareaiaccesareadatelor................................................................................1
1.1 CereprezintlimbajulDML?............................................................................................2
1.2 InstruciuneaSELECT........................................................................................................2
1.2.1 FiltrarearezultatelorclauzaWHERE........................................................................4
1.2.2 Ordonarearezultatelor...............................................................................................6
1.3
1.4
1.5
1.6
1.7
1.8

InstruciuneaINSERT........................................................................................................7
InstruciuneaUPDATE......................................................................................................8
InstruciuneaDELETE.......................................................................................................8
Testareacunotinelordobndite....................................................................................8
Glosar...............................................................................................................................9
Bibliografie.......................................................................................................................9

CereprezintlimbajulDML?

1.1

CereprezintlimbajulDML?

DML sau Data Manipulation Language reprezint colecia de instruciuni ce permit accesul i
modificarea datelor unei baze de date. Accesul la date, fr modificarea acestora este denumit
interogare.Printrointerogare,utilizatorulpoatevizualizaunasaumaimultenregistrridintruntabel,
untabelcompletsaurezultatulcombinriimaimultortabele.Modificareadatelordinbazadedateare
cascopinserareadenoidate,actualizareaunornregistrriexistentesautergereaunornregistrri.
n SQL, instruciunile de baz pentru DML sunt: SELECT, INSERT, UPDATE i DELETE. SELECT
realizeazinterogri,iarINSERT,UPDATEiDELETEoferposibilitateamodificriiconinutuluibazeide
date.

1.2

InstruciuneaSELECT
Sintaxasimplificatauneiinterogriestealctuitdin4cuvintecheie
SELECT
FROM
WHERE

porninddelaacestecuvinte,neputemdaseamadejademodulncarevafiutilizat:vatrebui
ntisspecificmcedorimsreturneze(SELECT),deunde(FROM)icaresuntcondiiile(WHERE).De
exemplu:
SELECT LastName, FirstName
FROM Employees
WHERE LastName = King;

n urma acestei comezi vor fi afisai toi studenii cu numele de familie King. Ordinea de
selectare a coloanelor nu trebuie s respecte ordinea cmpurilor din tabel. Pentru a selecta toi
studeniiitoatecmpuriledintabelulEmployees,sefolosetesimbolul*(asterisc):
SELECT *
FROM Employees;

Numele implicit al coloanelor este cel dat de numele cmpului din tabel. Dac dorim
redenumireauneicoloane,vomfolosialias.CuvntulcheieASpoatelipsi:
SELECT LastName AS Nume, FirstName Prenume
FROM Employees;

Capitolul3.Manipulareaiaccesareadatelor

Deasemeneaaliasulpoatefifolositipentrunumeletabelului,lucruutilatuncicndinterogm
maimultetabelesimultan.Cmpuriletabelelorvorfispecificateprinprezentanumeluiacestuianainte:
SELECT Employees.LastName, Employees.FirstName
FROM Employees;

Spredeosebirede:
SELECT e.LastName, e.FirstName
FROM Employees e;

Sepotcreaicoloanecareauovaloaredefaultdatdeutilizatorninterogare:
SELECT LastName, FirstName, Angajat
FROM Employees;

Pentru valorile numerice ale bazei de date, se pot folosi operatori aritmetici simpli (+,,*,/)
pentruacalculaautomatanumitevalori:
SELECT EmployeeID, LastName, FirstName, EmployeeID*5
FROM Employees;

Dacdorimdeexemplusobinemointerogarecunumelecompletalangajailorfraavea
coloane separat pentru nume i prenume, se utilizeaz operatorul de concatenare + (plus). Acest
operatoresteutilncreareaunornoicoloanepebazacmpurilorexistententabel:
SELECT EmployeeID, LastName + FirstName as Nume si Prenume
FROM Employees;

Rezultatul anterior nu este n regul deoarece am dori s avem un spaiu ntre LastName i
FirstName,faptcesepoateobineprinconcatenareadeiruridecaracteresaustringuri:
SELECT EmployeeID, LastName + + FirstName + is a + Title

InstruciuneaSELECT

FROM Employees;

Demulteoriamdorisselectmdoarvaloriledistinctealenregistrrilorunuicmpaltabelului.
PentruaceastaexistcuvntulcheieDISTINCT:
SELECT DISTINCT Title
FROM Employees;

n acelai timp, numrul de rnduri sau nregistrri returnate de interogare, poate fi limitat
folosindcuvntulcheieTOP:
SELECT TOP 3 EmployeeID, LastName, FirstName
FROM Employees

1.2.1

FiltrarearezultatelorclauzaWHERE
Redarea coninutului unei baze de date necesit i utilizarea unor condiii pentru acestea.
SpecificareacondiiilorsefaceprinintermediulclauzeiWHERE.Celmaisimpluexemplupornetedela
selectareaunuisingurrezultatpebazavaloriiunuicmpaltabelului:
SELECT EmployeeID, LastName, FirstName
FROM Employees
WHERE EmployeeID = 2;

Cmpuldupcaresefacefiltrareanuesteneapratnevoiesaparnrezultatelereturnate:
SELECT LastName, FirstName
FROM Employees
WHERE EmplyeeID = 2;

nsdecelemaimulteoriesteutilizatcaimsurdeverificareacorectitudiniiinterogrii.
Ca i n cazul afirii rezultatelor, filtrarea acestora poate fi condiionat pe baza operatorilor
aritmetici(+,,/,*)idecomparaie(>,<,>=,<=,<>):
SELECT EmployeeID, LastName, FirstName
FROM Employees
WHERE EmployeeID -1+1 > 1;

Capitolul3.Manipulareaiaccesareadatelor

Operatoriidecomparaie:

>,<maimare,maimic
>=,<=maimaresauegal,maimicsauegal
<>diferitde
BETWEEN ... AND ... ntre dou valori, inclusiv acestea (ex. BETWEEN 10 AND 15,
BETWEENBANDBz,BETWEEN20110701AND20110731)
IN(set)nsetuldatnparanteze(ex.IN(2,4,5,6))
LIKEfolositpentruiruridecaractere(ex.LIKE%s)
ISNULL,ISNOTNULLvaloareacmpuluiestesaunuesteNULL

OperatorulLIKEestefolositcuajutorulunorsimbolurirezervate%(procent)i_(underscore).
Acestesimbolurisuntdenumiteiwildcards.%reprezintzerosaumaimultecharactere:
SELECT EmployeeID, LastName, FirstName
FROM Employees
WHERE LastName LIKE '%n'

Iar_reprezintunsingurcaracter:
SELECT EmployeeID, LastName, FirstName
FROM Employees
WHERE LastName LIKE '_uyama'

CeledousimboluripotfifolositeimpreunntrocondiieLIKE:
SELECT EmployeeID, LastName, FirstName
FROM Employees
WHERE LastName LIKE '_u%'

OperatorilogiciverificcondiiidetipulTRUE/FALSE:
ANDoperatorbinar,TRUEdoardacambelecondiiisuntTRUE
ORoperatorbinar,TRUEdacunadintreceledoucondiiieTRUE
NOToperatorunar,TRUEdacnusendeplinetecondiiaspecificat
SELECT EmployeeID, LastName, FirstName
FROM Employees
WHERE LastName LIKE '%a%'
AND EmployeeID > 3

InstruciuneaSELECT

SELECT EmployeeID, LastName, FirstName, TItle


FROM Employees
WHERE Title NOT IN ('Sales Representative', 'Sales Manager')

TabeluldeprecedenaloperaiilordinclauzaWHEREeste:
1.
2.
3.
4.
5.
6.
7.

Semnulnumrului(+,)
nmulire,mprire(*,/)
Adunare,scdere(+,)
=,<>,<,>,<=,>=,BETWEEN,IN,LIKE,ISNULL
NOT
AND
OR

Ordineaacestorapoatefinsmodificatdefolosireaparantezelor.
Lucrulcucmpuridetipdat:
Cmpurile de tip dat n tabelele SQL au formatul: YYYYMMDD i sunt tratate ca i iruri de
caractere.Pentruarealizaointerogarenfunciedean,sepoatespecificafieformatulntregaldatei,fie
doaranul:
SELECT LastName, BirthDate
FROM Employees
WHERE BirthDate BETWEEN 1964-01-01 AND 1966-12-12
-SELECT LastName, BirthDate
FROM Employees
WHERE BirthDate BETWEEN 1964 AND 1966

Dacdorimsfacemointerogarenfunciedelunsauzidoar,sepotutilizafunciileMONTH()
iDAY():
SELECT LastName, BirthDate
FROM Employees
WHERE Month(BirthDate) = 11 AND Day(BirthDate) BETWEEN 12 AND 15;

1.2.2

Ordonarearezultatelor
Introducerea datelor n baza de date nu este ordonat i astfel c am dori returnarea
rezultatelor n funcie de ordinea unei coloane sau a mai multora. Pentru aceasta se folosete clauza
ORDERBY.Sortareadatelorsepoatefacefieascendent(ASC),fiedescendent(DESC).Pentruiruride
caractereordonareasefacenordinealfabeticsauinversalfabetic.Valoareaimplicitasortriieste
ASC1.
SELECT EmployeeID, LastName, FirstName
FROM Employees
ORDER BY LastName;

Nutrebuiespecificatneaprat.

Capitolul3.Manipulareaiaccesareadatelor

SELECT EmployeeID, LastName, FirstName


FROM Employees
ORDER BY LastName DESC;

Ordonarea se poate face i dup mai multe coloane, ordinea coloanelor din clauza ORDER BY
determinprioritateadeordonare:
SELECT EmployeeID, LastName, FirstName
FROM Employees
ORDER BY LastName ASC, FirstName DESC;

De asemenea pentru a nu folosi numele cmpurilor, se pot folosi nlocuitori numerici. De


exemplupentruaordonacoloneledupaltreileacmpdinSELECT,sevascrie:
SELECT EmployeeID, LastName, FirstName
FROM Employees
ORDER BY 3;

1.3

InstruciuneaINSERT

Popularea unei baze de date se refer la introducerea informaiei necesare cmpurilor i a


tabelelor componente ale acesteia. Chiar dac exist metode automate de populare a bazei de date,
acestea au la baz instruciunea simpl INSERT. Cu ajutorul acesteia pot fi introduse, sau completate
datelentruntabel.
Sintaxaacesteiaeste:
INSERT INTO <numeTabel>
(<numeCampuri>)
VALUES (<valorileCorespunzatoareCampurilor>)

Deexemplu:
INSERT INTO Employees
(LastName, FirstName)
VALUES (Pop, Ion);

n momentul introducerii datelor n tabele este nevoie s cunoatem tipul datelor din fiecare
cmpirestriciileacestora.nexemplulanterior,cheiaprimarestegeneratautomatdeSQLServer,
astfelcnuestenevoiesintroducemexplicitovaloarepentruaceasta.
Potfiintroduseimaimultenregistrrisimultan:

InstruciuneaUPDATE

INSERT INTO Employees


(LastName, FirstName)
VALUES ( 'Pop', 'Ion'), ('Popescu', 'George');

1.4

InstruciuneaUPDATE

Dacdorimsmodificmunasaumaimultenregistrridintruntabel,vomfolosiinstruciunea
UPDATE.Potfimodificateunulsaumaimultecmpurialenregistrrii:
Sintaxa:
UPDATE <numeTabel>
SET <numeCamp> = <valoare>
WHERE <conditie>;

Deexemplu:
UPDATE Employees
SET LastName = Popan
FirstName = Ionel
WHERE LastName = Pop;

La fel ca i n cazul instruciunii INSERT trebuie s cunoatem tipul datelor i constrngerile


cmpurilor. n caz contrar, actualizarea datelor nu va fi efectuat cu succes i vom primi un mesaj de
eroare.

1.5

InstruciuneaDELETE

Sarputeacauneorisfiintrodusdategreitentabele,sausnumaiavemnevoiedeanumite
nregistrri.PutemrealizaacestlucrufolosindinstruciuneaDELETE.Trebuiesavemgrijnmomentul
n care tergem date din tabele a cror cmpuri sunt chei strine n alte tabele. Modul de tratare a
acestuicazvafidiscutatntruncursviitor.Deasemeneacondiiadetergeretrebuieformulatnaa
felnctsafectezedoarnregistrriledorite.
Sintaxa:
DELETE FROM <numeTabel>
WHERE <conditie>;

Deexemplu,vomtergedatelenouintroduse,deoarecenuautoatecmpurilecompletate:
DELETE FROM Employees
WHERE LastName = Pop OR LastName = Popescu

1.6

Testareacunotinelordobndite
1. ExplicaipescurtlacesereferDMLDataManipulationLanguage.
2. Scrieiointerogareprincaressereturnezetoiangajaiiacrornumedefamiliencepecu
A
3. ScrieiointerogarepentruaobinetoiangajaiicareauIDulntre4i8.
4. Selectaitoatecmpurilepentruprimii5angajaiordonaidupprenume(FirstName).
5. Realizaiunselectncadrulcruiassecreezeonoucoloanalctuitdinconcatenarea
IDului,numeluiiaprenumelui,dupstructura:ID:<id>_<nume>_<prenume>.
6. Inseraisimultanntabel3nregistrriavndcmpurileID,numeiprenumecompletate.
7. Actualizai nregistrrile din inserarea anterioar folosind acelai prenume pentru toi 3
angajaii.
8. tergeinregistrrilerealizateanterior.
9. DMLesteabreviereadela:
a. DataModificationLanguage
b. DataManagementLanguage
c. DataManipulationLanguage
d. DataMergingLanguage

Capitolul3.Manipulareaiaccesareadatelor

10. Filtrarearezultateloresterealizatcuajutorulclauzei:
a. SELECT
b. FROM
c. WHERE
d. ORDERBY
11. Populareauneibazededatesereferla:
a. Creareatabeleleloriacoloaneloraferente
b. Definireametadatelordinbazadedate
c. Interogareabazeidedate
d. introducereainformaieincmpuriletabelelor
12. Ordonarearezultateloresterealizatcuajutorulclauzei:
a. SELECT
b. FROM
c. WHERE
d. ORDERBY

1.7

Glosar
alias
DML
populareaunei
bazededate
wildcard

1.8

denumireadatdeutilizatoruneicoloanerezultatalinterogrii
DataManipulationLanguage
completareatabelelorbazeidedatecuinformaiaaferentfiecruia
simboluri speciale utilizate n condiionarea rezultatelor cu iruri de
caractere.Acesteasunt%i_.

Bibliografie
A.Beaulieu,LearningSQL,2ndEdition,O'Reilly,2009
J.Viescas,M.Hernandez,Sqlqueriesformeremortals,2ndEdition,AddisonWesley,2008
J.Hoffer,M.Prescott,F.McFadden,ModernDatabaseManagement,8thEdition,2007
R.Ramakrishnan,J.Gehrke,DatabaseManagementSystems,3rdEdition,2003

Capitolul4.Interogri.Subinterogri.Legturintretabelele
uneibazededate.

nacestcapitolveinva:

Cumserealizeazinterogripebazamaimultortabele
SrealizaiinterogrifolosindJOINiUNION
Combinarearezultatelorpebazacheiistrine
Cumserealizeazosubinterogare

INNERJOIN,OUTERJOIN,UNION,subinterogri,interogareatabelelor
Cuvintecheie: multiple

Cuprins
Capitolul4.Interogri.Subinterogri.Legturintretabeleleuneibazededate..........................1
1.1 Interogareatabelelormultiple.........................................................................................2
1.2 UtilizareaclauzelorJOIN..................................................................................................4
1.2.1 INNERJOIN..................................................................................................................4
1.2.2 OUTERJOIN.................................................................................................................7
1.3
1.4
1.5
1.6
1.7
1.8

ClauzaUNION...................................................................................................................8
SubinterogriSELECTnSELECT....................................................................................9
Testareacunotinelordobndite..................................................................................10
Glosar.............................................................................................................................11
Bibliografie.....................................................................................................................11
ANEXA1DiagramarelaionalabazeidedateNorthwind........................................12

Interogareatabelelormultiple

1.1

Interogareatabelelormultiple

ncursulanteriorau fostprezentatenoiunile introductive legatedeinterogareauneibazede


date,folosindunsingurtabel.ncursuldefasefaceoextindereaacestoraprinutilizareamaimultor
tabele, innd seama astfel i de metodele de proiectare a unei baze de date, n mod special de
utilizareacheilorstrine(foreignkeys).Anexatlasfritulcursuluiesteprezentatdiagramarelaional
abazeidedateNorthwind,bazadedatefiindutilizatnpregtireaexemplelordincursuriledeSQL.
Cea mai simpl metod de interogare a mai multor tabele este prin specificarea n clauza
WHERE a condiiei pe baza creia se va face legtura1. De exemplu, dac dorim s vizualizm lista de
comenziaunuimagazinvirtual,stocatntrobazdedate,vomscrie:
SELECT OrderID, CustomerID, EmployeeID, OrderDate
FROM Orders;

Sepoateobservans,cpentrunumeleclienilorialangajailoravemdoarunID,carenune
spune prea multe. Acest lucru se ntmpl deoarece coloanele EmployeeID din tabelul Employees i
CustomerIDdinCustomerssuntcheistrinentabelulOrders.Vomdorinprimfazsvedemnumele
clientuluicelpuin,astfelnctutilizatorulbazeidedatespoatsortadatelenfunciedeunnumei
nuunID2.Pentruaceasta,vominterogatabeleleOrdersiCustomers,iarlegturadintreelesevaface
pebazacheiistrineCustomerID:
SELECT Orders.OrderID, Customers.CompanyName,
Orders.EmployeeID, Orders.OrderDate
FROM Orders, Customers
WHERE Customers.CustomerID = Orders.CustomerID;3

Putem observa acum coloana CompanyName, mult mai sugestiv dect CustomerID. Dac nu
amfiimpuscondiiaWHERECustomers.CustomerID=Orders.CustomerID,rezultatularfifostunprodus

Decelemaimulteoriestelegatdecheiastrin.
Legtura dintre ID client i numele acestuia este stocat n tabelul Clienti, ins ar fi complicat pentru
utilizatorsdeterminentiIDulunuiclientideabiaapoisvadcomenzile.
3
Specificareadenumiriitabelelornainteafiecreicoloanenuesteobligatoriensncazuldefaambele
tabele(Customers,Orders)conincoloanaCustomerID,astfelctrebuiessespecificeexplicitlacarecoloanese
facereferire.
2

Capitolul4.Interogri.Subinterogri.Legturintretabeleleuneibazededate.

cartezian4 ntre cele dou tabele. Interogarea a dou tabele care nu au o legtur, fie ea i indirect
ntreele,varezultantotdeaunantrunproduscartezian.
SELECT Orders.OrderID, Customers.CompanyName,
Orders.EmployeeID, Orders.OrderDate
FROM Orders, Customers

nmodsimilarvomadugainumeledefamiliealangajatului,nlocdeIDulacestuia:
SELECT Orders.OrderID, Customers.CompanyName,
Employees.LastName, Orders.OrderDate
FROM Orders, Customers, Employees
WHERE (Customers.CustomerID = Orders.CustomerID)
AND (Employees.EmployeeID = Orders.EmployeeID);5

Sauchiarinumelecompletalangajatului:
SELECT Orders.OrderID, Customers.CompanyName,
Employees.LastName + + Employees.FirstName as EmployeeName,
Orders.OrderDate
FROM Orders, Customers, Employees
WHERE (Customers.CustomerID = Orders.CustomerID)
AND (Employees.EmployeeID = Orders.EmployeeID);

Produsul cartezian (XY) reprezint un set ordonat de date ce conine toate perechile posibile (xi,yj),
undexiaparineluiX,iaryjaparineluiY.
5
UtilizareaparantezelorncadrulclauzeiWHEREnuesteobligatorie,nsoferomaimarelizibilitatea
codului.

UtilizareaclauzelorJOIN

nacestmodputemscreminterogripemaimultetabele,inndnsseamadecondiiilede
cheie strin. O utilitate mare o are n momentul n care dorim s vizualizm comenzile pe care lea
fcutunanumitclient,sauangajat,specificndnplusncondiiadeWHEREnumeleangajatuluisaual
clientului:
SELECT Orders.OrderID, Customers.CompanyName,
Employees.LastName + + Employees.FirstName as EmployeeName,
Orders.OrderDate
FROM Orders, Customers, Employees
WHERE (Customers.CustomerID = Orders.CustomerID)
AND (Employees.EmployeeID = Orders.EmployeeID)
AND (Customers.CompanyName = Hanari Carnes);

1.2

UtilizareaclauzelorJOIN

nseciuneaanterioarafostdescrisunmoddeinterogareamaimultortabelefolosindclauza
WHERE. ns acest mod nu este recomandat, deoarece clauza WHERE ar trebui folosit doar pentru
filtrarea vertical a rezultatelor. Pentru a interoga mai multe tabele simultan, exist o clas de clauze
denumiteJOINSicarearenvedereexactacestaspect.SintaxainstruciuniiSELECTdevineastfel:
SELECT <numeCampuri>
FROM <numeTabel1>
{INNER | {FULL | LEFT | RIGHT} OUTER} JOIN <numeTabel2>
ON <conditieJoin>
WHERE <conditieWhere>;

ClauzeleJOINsuntmpritendoumariclase:INNERiOUTERJOIN,fiecarecucaracteristicile
individuale,descrisenseciunileurmtoare.
1.2.1

INNERJOIN
INNERJOINesteunoperatorbinarceleagdoutabeleprinintermediulcoloanelorconinute
deacestea.nprincipiu,estesimilarcumetodadescrislanceputulacestuicurs:
SELECT Orders.OrderID, Customers.CompanyName,
Orders.EmployeeID, Orders.OrderDate
FROM Orders

Capitolul4.Interogri.Subinterogri.Legturintretabeleleuneibazededate.

INNER JOIN Customers


ON Customers.CustomerID = Orders.CustomerID

CuvntulINNEResteopional,deoareceINNERJOINestemetodadefault,astfelcinterogarea
anterioarpoatefirescris:
SELECT Orders.OrderID, Customers.CompanyName,
Orders.EmployeeID, Orders.OrderDate
FROM Orders
JOIN Customers
ON Customers.CustomerID = Orders.CustomerID

EquijoinesteunINNERJOINncarecondiiadeONestedatprinoperatoruldeegalitate,la
felcainexempleleanterioare.
Nonequijoin se refer evident la un INNER JOIN la care condiia de ON este dat prin
operatoridecomparaie(<,>,<=,>=)6.
Pentru a demonstra acest tip de JOIN vom considera un tabel ce nu exist n baza de date
Northwind.Considermcreareaacestuitabelastfel:
CREATE TABLE JobGrade(
Grade char(1) PRIMARY KEY,
LowestSal int,
HighestSal int);

Iarconinutulsueste:
Grade
A
B
C
D

LowestSal
1000
1501
2501
4001

HighestSal
1500
2500
4000
8000

Deasemeneavomadugaocoloancusalariulfiecruiangajat:
ALTER TABLE Employees ADD
Salary int;

nfunciedesalariulstabilit,vomdorisdeterminmclasadesalariuafiecruiangajat:
SELECT e.LastName, e.Salary, j.Grade
FROM Employees e JOIN JobGrade j
ON e.Salary
BETWEEN j.LowestSal AND j.HighestSal;

JOINpoatefiutilizatsuccesivpentrumaimultetabele,nsrezultatelesuntprocesateiterativ:
rezultatulprimuluiJOINestereunitcuurmtorultabelamd:
SELECT Orders.OrderID, Customers.CompanyName,
Employees.LastName+ +Employees.FirstName,
Orders.OrderDate

ChiardacestepuinmaiciudatdeutilizatntrunJOIN,operatorulLIKEpoatefipuscaicondiieON.

UtilizareaclauzelorJOIN

FROM Orders
JOIN Customers
ON Customers.CustomerID = Orders.CustomerID
JOIN Employees
ON Employees.EmployeeID = Orders.EmployeeID;

CrossJoinestecelmaisimpluJOIN.Rezultatulsuesteprodusulcartezianalcelordoutabele
specificate:
SELECT Employees.LastName, Customers.CompanyName
FROM Employees
CROSS JOIN Customers;

Similarcumetodadescrisanterior:
SELECT Employees.LastName, Customers.CompanyName
FROM Employees, Customers;

Amndouinterogrileproducurmtorulrezultat:

Selfjoinesteutilizatcndsefacelegturadintreuntabelielnsui.Esteutilizatnprincipal
atunci cnd se caut perechi similare n tabel. Este foarte important s se utilizeze aliasuri pentru
tabele, astfel nct s se fac diferena ntre cmpurile utilizate. De exemplu dac am dori s cutm
perechideangajaicarelocuiescnaceeaiarvomscrie:
SELECT E1.LastName, E2.LastName, E1.Country
FROM Employees E1
JOIN Employees E2
ON E2.Country = E1.Country
AND E2.EmployeeID <> E1.EmployeeID
AND E2.EmployeeID < E1.EmployeeID;

Capitolul4.Interogri.Subinterogri.Legturintretabeleleuneibazededate.

Ultimeledourndurialeinterogriiasigurlipsaperechilorduplicat.

1.2.2

OUTERJOIN
Pnacum,ncadrulINNERJOINtabeleletrebuiausaibcoloanecorespondente.UnOUTER
JOIN ns nu necesit acest lucru. Se poate specifica tabelul care va returna ntotdeauna rezultate
indiferentdendeplinireacondiieiON.
LEFTOUTERJOINreturneaztoaterezultateledintabelulaflatlastngacuvntuluicheieJOIN,
indiferent dac se regsesc sau nu rezultate n tabelul aflat n dreapta cuvntului cheie. De exemplu
dorimsreturnmcomenzilerealizatedefiecareangajat,nsnutoiangajaiiaupreluatdeocamdat
comenzi:
SELECT Employees.LastName, Orders.OrderID
FROM Employees LEFT OUTER JOIN Orders
ON Orders.EmployeeID= Employees.EmployeeID

AngajatulSmith,deinuaefectuatcomenziaparentabelulrezultat.
RIGHT OUTER JOIN n mod similar cu LEFT OUTER JOIN, acest tip de JOIN returneaz toate
dateledintabelulaflatladreaptacuvntuluicheie,chiardacnuexistdatentabelulaflatnstnga.
Diferene majore fa de LEFT JOINnuexist, fiecare dezvoltator utilizeaz acel tipcare i separe mai
intuitivlamomentulrespectiv.
FULLOUTERJOINestecelmaipuinfolosit,iarMSAccessiMySQLnicinulimplementeaz.
Rezultatul lui este combinarea ambelor tabele, chiar dac pentru anumite nregistrri din tabelul din
stnganuexistnregistrrintabeluldindreaptaiviceversa.Dacamaveadeexempluoeroaren
sistemprincareocomandnuareataatIDulunuiangajat,rezultatulvafi:
SELECT Employees.LastName, Orders.OrderID
FROM Employees FULL OUTER JOIN Orders
ON Orders.EmployeeID= Employees.EmployeeID
ORDER BY LastName

ClauzaUNION

1.3

ClauzaUNION

Uneori se dorete combinarea unor interogri a cror rezultate nu au legtur ntre ele.
Rezultatele uneia sau a mai multor instruciuni SELECT pot fi combinate folosind operatorul UNION.
Existnsoseriederegulidebaz:
1. NumruldecoloanereturnatedefiecareSELECTtrebuiesfieacelai.
2. Tipurilecoloanelorreturnatetrebuiesfieacelai,saucelpuinSQLspoatrealizao
conversientretipurilededate.
SELECT EmployeeID, LastName FROM Employees
UNION
SELECT ProductID, ProductName FROM Products;

Numele implicit al coloanelor este cel din primul SELECT. Se recomand ns utilizarea alias
urilorpentrucoloane.nmodnormal,UNIONreturneazcombinarearezultatelormaimultorinterogri,
nsacesteatrebuiesfieunice.Deexemplu:
SELECT EmployeeID FROM Employees
UNION
SELECT ProductID FROM Products;

VareturnadoarIDuriledistincte,chiardacinEmployeesinProductsexistsimultanIDul
1deexemplu.

PentrucaUNIONsreturnezetoaterezultatele,chiardacacesteanusuntunice,sevautiliza
operatorulUNIONALL:
SELECT EmployeeID FROM Employees
UNION ALL
SELECT ProductID FROM Products;

Capitolul4.Interogri.Subinterogri.Legturintretabeleleuneibazededate.

1.4

SubinterogriSELECTnSELECT

O subinterogare se refer la utilizarea n cadrul instruciunii SELECT, a unui alt SELECT. Primul
SELECT este denumit exterior, iar cel interior este cel imbricat. Interogarea interioar poate s fie
utilizatnmaimultelocurincadrulinterogriiexterioare:
ncadrullisteiSELECT:
Uneori n locul clauzei WHERE, se poate utiliza un SELECT n lista de cmpuri a interogrii.
Rezultatele sunt identice. Rmne la latitudinea dezvoltatorului s selecteze metoda preferat. O
condiieesenialoreprezintcainterogareainterioarsreturnezeosingurnregistrare.
SELECT OrderID,
(SELECT LastName + + FirstName FROM Employees
WHERE Employees.EmployeeID = Orders.EmployeeID) AS Employee,
OrderDate
FROM Orders

ncadrulcondiieiWHERE:
Utilizarea unei interogri imbricate n cadrul clauzei WHERE este util n momentul n care
rezultateledoritedepinddeointerogarecenuarelegturdirectcuinterogareainiial.Deexemplu,
dorimsselectmtoiangajaiicaresuntdinaceeairegiunecuclientulLazyKKountryStore:
SELECT LastName, FirstName, Region
FROM Employees
WHERE Region = (SELECT Region FROM Customers
WHERE CompanyName = 'Lazy K Kountry Store')

Testareacunotinelordobndite

10

Realizarea acestei interogri ntrun singur SELECT, ar implica mai multe condiii n clauza
WHERE.Esteastfelmultmaiuordeimplementaticititoastfeldeinterogareimbricat.
Spre deosebire de utilizarea n cadrul listei SELECT, o interogare interioar n clauza WHERE
poatereturnamaimultenregistrri.AcestlucrupoatefirealizatdoarutilizndncondiieoperatoriiIN,
ANYsauALL.OperatorulANYspecificoricevaloaredinlistaderezultate,iarALLlatoaterezultatele:
SELECT LastName, FirstName, Salary
FROM Employees
WHERE Salary > ANY(SELECT Salary FROM Employees
WHERE Title = Sales Representative)
AND Title <> Sales Representative;

Interogareavaselectatoiangajaiicareausalariulmaimaredectoricaredintreangajaiidepe
postulSalesRepresentative.DacamfolosiALL,artrebuisaibsalariulmaimaredecttoiangajaii
SalesRepresentative.

1.5

Testareacunotinelordobndite
1. ExplicaiprinexemplificaredifereneledintreunINNERiunOUTERJOIN.
2. Selectaitoiangajaiicareauavutcelpuinocomanddinparteaclientului'LazyKKountry
Store'
3. SelectaitabelulcompletdecomenziprincombinareatabelelorOrdersiOrderDetails.
4. Scrieiointerogarecaresreturnezenumeletuturorangajailorialcompaniilordinbaza
dedate.
5. Prezentai dou metode de utilizare a subinterogrilor prin exemplificare, fr a utiliza
exempleledate.
6. ClauzaWHEREesterecomandatpentru:
a. Filtrareaverticalarezultatelor
b. Filtrareaorizontalarezultatelor
c. CombinareatabelelorntrunVIEW
d. Ordonarearezultatelorreturnatedeointerogare
7. ClauzaJOINimpliciteste:
a. INNERJOIN
b. OUTERJOIN
c. LEFTOUTERJOIN
d. FULLOUTERJOIN
8. LEFTOUTERJOINreturneaz:
a. toaterezultateledintabelulaflatlastngacuvntuluicheieJOIN,indiferentdacse
regsescsaunurezultatentabelulaflatndreaptacuvntuluicheie
b. toaterezultateledintabelulaflat ladreaptacuvntuluicheieJOIN,indiferentdac
seregsescsaunurezultatentabelulaflatnstngacuvntuluicheie
c. toate rezultatele din ambele tabele, indiferent dac acestea se regsesc sau nu n
fiecaredintretabele
d. produsulcartezianalrezultatelorinterogrii
9. NumeleimplicitalcoloanelorntroclauzUNION:
a. Estedatdecoloaneleprimeiinterogri
b. Estedatdecoloaneleceleideadouainterogri
c. Estedatdecoloaneleultimeiinterogridinset
d. Nuestedefinit
10. Osubinterogaresereferla:
a. utilizareancadrulinstruciuniiSELECT,aunuialtSELECT
b. includereaclauzeiUNIONninterogare
c. ointerogareaunuitabelceseaflntrorelaiecuprimultabelinterogat
d. limitarearezultatelorinterogriiunuitabel

11

Capitolul4.Interogri.Subinterogri.Legturintretabeleleuneibazededate.

1.6

Glosar
CROSSJOIN rezultatulsuesteprodusulcartezianalcelordoutabele
equijoin este o instruciune JOIN n cadrul creia condiia de combinare a celor
doutabeleestedatpebazdeegalitatentrecmpuri
FULLOUTERJOIN esteoinstruciuneJOINncadrulcreiasereturneaztoatenregistrrile
din ambele tabele indiferent dac exist sau nu nregistrri
corespunztoarenoricaredintreele.
INNERJOIN esteoinstruciuneJOINncadrulcreiasereturneazdoarnregistrrilece
respectcondiianambeletabele.
LEFTOUTERJOIN esteoinstruciuneJOINncadrulcreiasereturneaztoatenregistrrile
dintabeluldinstngachiardacnuexistnregistrricorespunztoaren
tabeluldindreapta
nonequijoin este o instruciune JOIN n cadrul creia condiia de combinare a celor
doutabelenuestedatdeegalitateacmpurilor.Sefolosescoperatorii
OUTERJOIN este o instruciune JOIN n cadrul creia NU trebuie ca ambele tabele s
respectecondiia. n funciede specificarea LEFT,RIGHTsau FULL OUTER
JOIN sunt returnate coloanele din tabelele respective indiferent dac se
respectsaunucondiia.
produscartezian Produsul cartezian (XY) reprezint un set ordonat de date ce conine
toateperechileposibile(xi,yj),undexiaparineluiX,iaryjaparineluiY
RIGHTOUTER esteoinstruciuneJOINncadrulcreiasereturneaztoatenregistrrile
JOIN dintabeluldindreaptachiardacnuexistnregistrricorespunztoaren
tabeluldinstnga
SELFJOIN esteoinstruciuneJOINncadrulcreiasefacelegturadintreuntabeli
el nsui. Este necesar utilizarea aliasului de tabel pentru a diferenia
cmpurilelacaresefacereferire
subinterogare utilizareanclauzaWHEREaunuialtSELECTpebazaaceluiaisauaaltor
tabele
UNION este o instruciune cu ajutorul creia se pot concatena rezultatele mai
multor interogri n cadrul aceluiai tabel. O condiie esenial este ca
cmpurileutilizatesaibacelaitip.

1.7

Bibliografie

P.Wilton,J.Colby,BeginningSQL,WileyPublishing,2005
A.Beaulieu,LearningSQL,2ndEdition,O'Reilly,2009
J.Viescas,M.Hernandez,Sqlqueriesformeremortals,2ndEdition,AddisonWesley,2008
J.Hoffer,M.Prescott,F.McFadden,ModernDatabaseManagement,8thEdition,2007
R.Ramakrishnan,J.Gehrke,DatabaseManagementSystems,3rdEdition,2003

ANEXA1DiagramarelaionalabazeidedateNorthwind

12

1.8

ANEXA1DiagramarelaionalabazeidedateNorthwind

Capitolul5.Operatorilogici.Funciiscalare.Funciiagregat.

nacestcapitolveinva:
S aplicai condiii logice n funcie de existena nregistrrilor
rezultatelaointerogare
Cumsaplicaifunciidemanipulareadatelordetipnumeric,
irdecaracteresaudat
StrataicorectnregistrrilecucmpuriNULL
Srealizaioconversieaunuitipladatelaalttipdedate
Sgrupaidatelenfunciedeoanumitcondiiesaucmp
Sagregaidatelerezultatenurmauneiinterogri

operatori logici, funcii scalare, funcii agregat, conversia tipurilor de


Cuvintecheie: date,COALESCE()

Cuprins
Capitolul5.Operatorilogici.Funciiscalare.Funciiagregat..........................................................1
1.1 Operatorilogici................................................................................................................2
1.2 Funciiscalare..................................................................................................................2
1.2.1 Funciipentrutipuldedatenumeric..........................................................................2
1.2.2 Funciipentrutipuldedateirdecaractere...............................................................3
1.2.3 Funciipentrutipuldedatedat................................................................................4
1.2.4 Conversiatipurilordedate..........................................................................................5
1.2.5 UtilizareaNULLifunciaCOALESCE...........................................................................5
1.3 Funciiagregat..................................................................................................................6
1.3.1 UtilizareaclauzeiHAVINGcufunciiagregat..............................................................8
1.4
1.5
1.6

Testareacunotinelordobndite....................................................................................8
Glosar...............................................................................................................................9
Bibliografie.....................................................................................................................10

Operatorilogici

1.1

Operatorilogici

O parte dintre operatorii logici au fost descrii i ntrun curs anterior i constau n AND, OR,
NOT.ncursuldefavomabordaioperatorulEXISTS,careevalueaznregistrrileinucmpurile.
VomrecapitulatabeleledeadevrpentruAND,ORiNOT:
AND 0

OR

NOT

Aceti operatori sunt folosii de cele mai multe ori n clauzele WHERE sau HAVING ale unei
instruciuniSELECT:
SELECT * FROM Employees
WHERE (EmployeeID > 2)
AND ((LastName LIKE %a%) OR City NOT IN (London, Seattle);

CarereturneazangajaiicuIDulmaimaredectdoiicareconinnnumeledefamilielitera
asaunusuntdinLondrasauSeattle.
Operatorul EXISTS pe de alt parte testeaz dac interogarea returneaz nregistrri. Este
utilizat n principal n subinterogri. Rezultatul interogrii nu conteaz atta timp ct returneaz cel
puinunrezultat,EXISTSreturnndnacestcazTRUE:
SELECT City FROM Employees
WHERE EXISTS (SELECT * FROM Employees WHERE EmployeeID > 3);

Interogarea anterioar returneaz toate nregistrrile din cmpul City dac exist IDuri ale
angajailormaimaride3,altfelnuvareturnanimic.

1.2

Funciiscalare

Simpla utilizare a datelor din baza de date poate s nu fie suficient n anumite cazuri. Sar
putea s fie necesar o prelucrare prealabil a rezultatelor, cum ar fi nsumarea, sau determinarea
maximului unei coloane. Pentru aceasta exist o serie de funcii oferite de SQL, att pentru tratarea
coloanelordetipnumeric,cticeledetipirdecaracteresaudat.
1.2.1

Funciipentrutipuldedatenumeric
Pe lng operatorii aritmetici simpli, +, , *, /, mai exist o serie de funcii scalare ce pot fi
aplicateasupratipuluidedatenumeric:

Capitolul5.Operatorilogici.Funciiscalare.Funciiagregat.

ABS()

returneazmodululnumruluisaualcmpuluiaflat
ntreparanteze.

POWER()

realizeazridicrilaputere.Utilizeaz2parametri:
primulestenumrulsaucmpul,iarceldealdoilea
esteputerealacarevafiridicat.

SQRT()

extragerdcinaptratanumruluisauacmpului.

RAND()

genereazunnumraleatorntre0i1.

ROUND()

realizeazorotunjirelacelmaiapropiatnumrn
funciedevaloareadecimalanumruluiianumrului
depoziiidecimalespecificate.Utilizeazdou
argumente:numrulderotunjitinumruldezecimale
dupvirgul.

CEILING()

realizeazorotunjirensuslacelmaiapropiatntreg.

FLOOR()

realizeazorotunjirenjos lacelmaiapropiatntreg.

Exempledeutilizare:
SELECT ProductID,UnitPrice,
UnitPrice-20 AS Negativ,
ABS(UnitPrice -20) AS Absolut,
POWER (ProductID, 3) AS Putere,
SQRT (UnitPrice) AS RadPatrata,
RAND() AS Aleator,
ROUND(UnitPrice,1) AS Rotunjire,
CEILING(UnitPrice) AS RotunjireSup,
FLOOR(UnitPrice) AS RotunjireInf
FROM Products
ORDER BY UnitPrice;

1.2.2

Funciipentrutipuldedateirdecaractere
Demulteoricutareanbazadedatepebazaunuiirdecaracterepoatefidificilpentrucsar
puteasnucunoatemformaexactairuluidecaractere:arputeafiscrisdoarculiteremari,saus
aib o greeal de scriere etc. Funciile scalare pentru iruri de caractere, rezolv aceast problem,
oferind o serie de funcionaliti pentru aducerea rezultatelor interogrii la o form unitar de
prezentare:

Funciiscalare

SUBSTRING()

permitereturnareadoaraunuisubirdinirulde
caractere.iruldecaractereestetratatcaiunvector
decaractere,fiecarecaracteravndataatunindex.
Sintaxafuncieieste:SUBSTRING(<sir de
caractere>, <pozitia de inceput a
subsirului>, <lungimea subsirului de
returnat>).

UPPER()

transformtoatecaractereledinirnliteremari.

LOWER()

transformtoatecaractereledinirnliteremici.

REVERSE()

inverseazordineacaracterelordiniruldecaractere.

TRIM()

nlturcaracterelenedoritedelanceputulsau
sfritulunuiirdecaractere.Celmaidesutilizat
caracterestespaiul,prezentncmpuriledetipirde
caractereculungimefix(char(n)).Existdou
versiunialefuncieiTRIM():LTRIM()nltur
caracterelenedoritedinstngairuluidecaracterei
RTRIM()nlturcaracterelenedoritedindreapta
iruluidecaractere.

LENGTH()

returneazlungimeaunuiirdecaracterecaivaloare
ntreag.nSQLServerfunciaaredenumireaLEN().

Exempledeutilizare:
SELECT LastName,
SUBSTRING (LastName, 1, 3) AS Subsir,
UPPER(LastName) AS LitereMari,
LOWER(LastName) AS LitereMici,
REVERSE(LastName) AS Invers,
RTRIM(LastName) AS RightTrim,
LEN(LastName) AS Lungime
FROM Employees
ORDER BY LastName;

Efectul funciei RTRIM() nu poate fi observat din acest exemplu, deoarece coloana LastName
estedetipulnvarchar(),decinuconinespaiilasfrituliruluidecaractere,spredeosebiredenchar()
care dac o nregistrare are o lungime mai mic dect dimensiunea specificat, va fi completat cu
spaii.
1.2.3

Funciipentrutipuldedatedat
Dateleauunformatcomplexnbazelededate,iarextragereadeexempluaanuluisaualunii
prin prelucrarea lor ca i iruri de caractere poate fi dificil. Exist ns o serie de funcii ce uureaz
aceastprelucrare:

Capitolul5.Operatorilogici.Funciiscalare.Funciiagregat.

DAY()

returneazziua.

MONTH()

returneazluna.

YEAR()

returneazanul.

Exempledeutilizare:
SELECT LastName,
BirthDate,
DAY(BirthDate)AS Ziua,
MONTH(BirthDate) AS Luna,
YEAR(BirthDate) AS Anul
FROM Employees;

1.2.4

Conversiatipurilordedate
n anumite situaii dorim de exemplu s concatenm ntrun ir de caractere, un cmp de tip
numeric.Frafaceoconversiedelatipulnumericlatipulirdecaractere,acestlucrunuesteposibil.
FunciaCAST()nspermiteaceastconversie.
CAST(<expresie> AS <tipDate>)

Exemple:
CAST (EmployeeID AS varchar)
CAST (MONTH(BirthDate) as int)

1.2.5

UtilizareaNULLifunciaCOALESCE
Dup cum a fost descris n cursul introductiv de SQL, valoarea NULL este o a treia valoare
pentru tipul de date binar sau boolean. NULL nu reprezint nici TRUE, nici FALSE, ci indic lipsa unei
valoripentruonregistrare.
Utilizarea NULL n cadrul unei expresii sau funcii matematice va determina ca rezultatul
acesteiasfietotNULL:
SELECT ProductName,
UnitsInStock,
UnitsInStock+3*6,
POWER(UnitsInStock,4),
ABS(UnitsInStock-30)
FROM Products
ORDER BY ProductName;

Lafelsentmplipentruexpresiisaufunciicuiruridecaractere:

Funciiagregat

PentruaevitaanumiteneplceriprovocatedeprezenaneateptatauneivaloriNULLntabel,
se poate utiliza funcia COALESCE(). Aceasta va returna prima valoare nenul din lista de expresii
evaluate.Sintaxaeste:
COALESCE(<primaExpresie>, <aDouaExpresie>, <aNaExpresie>).

Exemplu:
SELECT ProductName,
COALESCE(QuantityPerUnit, 'Nu exista in stoc'),
UPPER(QuantityPerUnit),
LEN(QuantityPerUnit)
FROM Products
ORDER BY ProductName

1.3

Funciiagregat

Funciile prezentate n seciunea anterioar se aplicau direct asupra unei singure nregistrri.
Funciileagregatnschimbsuntaplicateasupraunuigrupsausetdenregistrri.Dinacestmotivelemai
sunt denumite i funcii de grupare. Elementul principal utlizat este clauza GROUP BY a instruciunii
SELECT. GROUP BY organizeaz datele n seturi pe baza unor criterii, permitnd astfel retunarea unor
rezumatealedatelor,cumarfimediasaunumruldenregistrri.
PrinGROUPBYsarputearspundentrebriicaresuntoraeledincareprovinangajaii:
SELECT City
FROM Employees
GROUP BY City;

Sausepoateextindelacaresuntoraeleitriledincareprovinangajaii,GROUPBYacceptnd
imaimultecmpuridupcaresfacgruparea:
SELECT City, Country
FROM Employees
GROUP BY City, Country;

nclauzaGROUPBYnupotsaparaltecoloanedectcelespecificarenlistaSELECT!!!

Capitolul5.Operatorilogici.Funciiscalare.Funciiagregat.

Trecnd mai departe, o serie de funcii permit rezumarea datelor sau agregarea lor. Prima
funcie pe care o vom utiliza este COUNT() aceasta numr nregistrrile ce respect o anumit
condiie. Cea mai simpl aplicare a acestei funcii este retunarea numrului de nregistrri dintrun
tabel:
SELECT COUNT(*) FROM Employees;

Sauamputeadeterminaciangajaisuntdinfiecareora:
SELECT City, COUNT(City)
FROM Employees
GROUP BY City;

SepoateobservacpentruvaloareaNULLacoloaneiCity,COUNT()returneaz0,deoarecelafel
caincazuriledescrisenseciuneaanterioar,funciileagregatnutrateazcorectvaloareaNULL.
Altefunciideagregaresunt:
AVG()returneazmediavalorilorunuigrup
MAX()returneazmaximulvalorilorunuigrup
MIN() returneazminimulvalorilorunuigrup
SUM()returneazsumavalorilorunuigrup
Alteexempledeutilizare:
dorimsdeterminmcaresuntprimii3clienicareaurealizatcelemaimultecomenzi:
SELECT TOP 3 CompanyName, COUNT(o.CustomerID) AS Numar
FROM Orders o, Customers c
WHERE o.CustomerID = c.CustomerID
GROUP BY c.CompanyName
ORDER BY Numar DESC;

dorimsdeterminmcareestecelmaitnricelmaibtrnangajatdinfiecareora:
SELECT City, MIN(BirthDate), MAX(BirthDate)
FROM Employees
GROUP BY City;

Testareacunotinelordobndite

dorimsdeterminmcostultotalalproduselorlivratedefiecarefurnizor:
SELECT s.CompanyName, SUM(p.UnitPrice)
FROM Products p, Suppliers s
WHERE s.SupplierID = p.SupplierID
GROUP BY s.CompanyName

dorimsdeterminmcostulmediualproduselorlivratedefiecarecompanie:
SELECT s.CompanyName, AVG(p.UnitPrice)
FROM Products p, Suppliers s
WHERE s.SupplierID = p.SupplierID
GROUP BY s.CompanyName

1.3.1

UtilizareaclauzeiHAVINGcufunciiagregat
Clauza HAVING se aplic asupra seturilor de date rezultate prin GROUP BY, spre deosebire de
clauzaWHERE,careseaplicasuprafiecreinregistrriseparat.Deexempluvomselectatoateoraele
dincareprovincelpuin2angajai:
SELECT City, COUNT(EmployeeID)
FROM Employees
GROUP BY City
HAVING COUNT(EmployeeID) >= 2

1.4

Testareacunotinelordobndite
1. Explicai pe scurt care este diferena dintre operatorii logici AND, OR i NOT fa de
operatorulEXISTS.
2. Explicaipescurtcareestediferenadintrefunciilescalareiceleagregate.
3. ExplicaipescurtdiferenadintreclauzeleWHEREiHAVING.
4. Enumeraiiexplicaipescurtfunciilescalarepentrutipuldedatenumeric.
5. Enumerai i explicai pe scurt funciile scalare pentru tipurile de date ir de caractere i
dat.
6. Enumeraiiexplicaiprinexemplificareutilizareafunciiloragregat.
7. PrezentaipescurtcaracteristicileclauzeiGROUPBY.

Capitolul5.Operatorilogici.Funciiscalare.Funciiagregat.

8. Caredintreurmtoareleafirmaiisuntadevrate:
a. 0AND1=1
b. 0OR0=1
c. 1AND1=1
d. 0OR1=1
9. FunciaCEILING():
a. realizeazorotunjirenjoslacelmaiapropiatntreg
b. realizeazorotunjirensuslacelmaiapropiatntreg
c. realizeaz o rotunjire la cel mai apropiat numr n funcie de valoarea decimal a
numruluiianumruluidepoziiidecimalespecificate
d. realizeaz o rotunjire la valoarea cea mai apropiat dat de dou zecimale dup
virgul
10. FunciaCAST():
a. Modifictipuldedatealuneicoloanesauexpresii
b. Returneazprimavaloarenenuldinlistadeexpresii
c. Genereazunnumraleatorntre0i1
d. Returneazmediavalorilorunuigrupdecoloane
11. FunciaREVERSE():
a. transformtoatecaractereledinirnliteremari
b. returneazlungimeaunuiirdecaracterecaivaloarentreag
c. inverseazordineacaracterelordiniruldecaractere
d. extragerdcinaptratanumruluisauacmpului
12. ClauzaGROUPBYutilizeazfuncii:
a. Scalare
b. Agregat
c. Compuse
d. Deordonare

1.5

Glosar
ABS() funciescalarcereturneazmodululnumrului
agregareadatelor n funcie de seturile determinate de gruparea datelor, se pot realiza
anumiterezumatealenregistrrilor,cumarfimedia,suma,maximulsau
minimul valorilor din nregistrri, sau pot fi numrate nregistrrile ce
corespundunuianumitcriteriu.
AVG() funcieagregatcereturneazmediaunuigrupdedateagregate
CAST() funciescalarcerealizeazconversiaunuicmplaunanumittipdedate
CEILING() funciescalarderotunjirelacelmaiapropiatntregsuperior
COALESCE() funciescalarcereturneazprimaexpresienenuldatcaparametru.
COALESCE(<expresie1>,<expresie2>,<expresieN>)
COUNT() funcie agregat ce returneaz numrul de nregistrri ce ndeplinesc
condiiaspecificat
DAY() funciescalarcereturneazziuadintruncmpdetipdat
EXISTS operator logic utilizat la verificarea returnrii unor rezultate de ctre o
interogare. Ia valoarea TRUE dac interogarea returneaz rezultate i
FALSEncazcontrar
FLOOR() funciescalarderotunjirelacelmaiapropiatntreginferior
funciiagregat suntfunciiaplicabilelaniveldegrupdenregistrri.Returneazanumite
rezumatealedatelor,cumarfimedia,suma,maximulsauminimulsetului
dedateanalizat.
funciiscalare suntfunciiaplicabilelaniveldecmpalbazeidedate.Realizeazoperaii
nfunciedetipuldatelor:numeric,irdecaracteresaudat.
GROUPBY clauz de groupare a datelor n funcie de cmpul sau cmpurile
specificate.Esteprincipalaclauzutilizatnagregareadatelor.

Bibliografie

10

grupareadatelor rezultateleinterogriivorfireturnatenfunciedecategoriiledistincteale
unuicmpaltabelului.
HAVING alternativaclauzeiWHEREutilizatncombinaiecuclauzaGROUPBY
LENGTH() funciescalarcereturneazlungimeaunuiirdecaractere
LOWER() funcie scalar ce returneaz un ir de caractere folosind doar litere mici
(lowercase)
MAX() funcieagregatcereturneazmaximulunuigrupdedateagregate
MIN() funcieagregatcereturneazminimulunuigrupdedateagregate
MONTH() funciescalarcereturneazlunadintruncmpdetipdat
operatorilogici sunt operatorii binari AND i OR, operatorul unar NOT aplicai n
condiionrile la nivel de coloan i operatorul EXISTS aplicat la nivel de
nregistrare.
POWER() funcie
scalar
ce
calculeaz
puterea
unui
numr.
POWER(<numar>,<puterea>)
RAND() funciescalarcereturneazunnumraleatorntre0i1.
REVERSE() funcie scalar ce returneaz inversul unui ir de caractere. Ultimul
caracterdevineprimul(ex.Abac>cabA)
ROUND() funcie scalar ce returneaz cel mai apropiat numr de precizie
specificat.ROUND(<numar>,<numarDeZecimale>)
SQRT() funciescalarcereturneazrdcinaptrataunuinumr.
SUBSTRING() funciescalarcereturneazunsubiralunuiirdecaractere,ncepndde
la poziia specificat i de lungime dat prin intermediul parametrului
<numarDeCaractere>.
SUBSTRING(<sirDeCaractere>,<pozitiaDeInceput>,<numarDeCaractere>).
SUM() funcieagregatcereturneazsumaunuigrupdedateagregate
TRIM() funcie scalar ce returneaz un ir de caractere prin nlturarea
caracterelornedorite(decelemaimulteorispaii).Estefolositnprincipal
lacoloanelecunumrfixdecaractere(char(n)saunchar(n))
UPPER() funcie scalarcereturneazunirdecaractere folosind doarliteremari
(uppercase)
YEAR() funciescalarcereturneazanuldintruncmpdetipdat

1.6

Bibliografie
P.Wilton,J.Colby,BeginningSQL,WileyPublishing,2005
A.Beaulieu,LearningSQL,2ndEdition,O'Reilly,2009
J.Viescas,M.Hernandez,Sqlqueriesformeremortals,2ndEdition,AddisonWesley,2008
J.Hoffer,M.Prescott,F.McFadden,ModernDatabaseManagement,8thEdition,2007
R.Ramakrishnan,J.Gehrke,DatabaseManagementSystems,3rdEdition,2003

Capitolul6.Proiectareaimodelareauneibazededate.
Normalizareaioptimizareastructurii.

nacestcapitolveinva:
Sproiectaiobazdedateporninddelacerineleutilizatorilor
Screaiundesignconceptual,logicifizicpentrubazadedate
S utilizai diagrame entitaterelaie pentru proiectarea
conceptualauneibazededate
Sstabiliiformanormalutilizatnbazadedate
S proiectai corect tabelele, cmpurile i cheile strine
conformcuspecificaiileutilizatorilor.

diagrameER,formenormale,proiectareabazeidedate,entiti,relaii,
Cuvintecheie: atribute

Cuprins
Capitolul6.Proiectareaimodelareauneibazededate.Normalizareaioptimizareastructurii.1
1.1 Proiectareauneibazededate.........................................................................................2
1.2 ModelulEntityRelationship............................................................................................2
1.3 Normalizareauneibazededate.Formenormale...........................................................5
1.3.1 Primaformnormal(1NF)........................................................................................5
1.3.2 Adouaformnormal(2NF)......................................................................................5
1.3.3 Atreiaformanormal(3NF).......................................................................................5
1.3.4 Denormalizarea...........................................................................................................6
1.4 Proiectareatabelelor.......................................................................................................6
1.4.1 Conveniidedenumireatabelelor.............................................................................6
1.4.2 Determinareaspecificaiilorcmpurilor.....................................................................7
1.4.3 Consideraiiasupraproiectriitabelelor....................................................................8
1.5
1.6
1.7
1.8

Concluzii...........................................................................................................................8
Testareacunotinelordobndite....................................................................................9
Glosar...............................................................................................................................9
Bibliografie.....................................................................................................................10

Proiectareauneibazededate

1.1

Proiectareauneibazededate

Prinmodulncarebazelededateauaprutianumedeafacilitaaccesulladatencadrulunei
companii sau a unui colectiv, acestea trebuie s rspund neaprat nevoilor utilizatorilor finali.
Proiectareauneibazededateporneteevidentdelaevaluareacerineloroperaionaleifuncionaleale
utilizatorilorideabiaapoiseurmreteimplementareaidefinireastructuriifiziceaacesteia.Pornind
delaacesteconcepte,sedefinesc3niveledeproiectareauneibazededate:nivelulconceptual,nivelul
logic,nivelulfizic.Paiicetrebuieurmainproiectareauneibazededatesunturmtorii:
1. Analizacerinelorsereferladeterminareadatelorcevorfistocate,aaplicaiilorcevor
utilizabazadedateiaoperaiilorfrecventeceaucerinedeperforman.Cualtecuvinte
sedeterminscopulbazeidedateimodulncareutilizatoriiovorfolosi.Sevoranalizade
asemeneasoluiileexistenteimodulncareacesteavortrebuischimbatesauadaptate.
2. Proiectareaconceptualinformaiacolectatnpasuldeanalizacerineloresteutilizat
pentrucreareauneidescrieridenivelnaltadatelorcevorfistocatenbazadedate,alturi
de constrngerile i relaii dintre acestea. Acest pas este realizat de cele mai mult ori cu
ajutoruldiagramelorEntitateRelaie(ER)sauEntityRelationship.Scopulestedearealizao
descrieresimpladatelorcereprezintmodulncareutilizatoriiidezvoltatoriivizualizeaz
aceste date. Permite o abordare att din punct de vedere expert ct i cel al utilizatorilor
finalicarenuaucunotinetehnice.
3. ProiectarealogicsereferlaselectareaunuiDBMSitranspunereadiagrameiERntro
schem relaional logic. Sunt analizate tranzaciile, interogrile, rapoartele, formurile,
precumicerineledesecuritate,integritateipopulareabazeidedate.
4. Proiectareafizicdeterminsuportulfiziclabazeidedate,delasoluiaDBMSaleas,la
specificaiile tehnice ale serverului i ale terminalelor, sau la modul de interfaare cu
aplicaiile.Proiectareafizicinecontdeperformanelesolicitate,numrul deutilizatorii
dimensiuneabazeidedate.
Cicludedezvoltareimentenanauneibazededateurmeazdiagramademaijos:

Analizi
planificare

Implementarea
bazeidedate

Mentenani
management

Proiectarea
conceptual

Proiectarea
logicifizic

ntoateetapeledeproiectareauneibazededateestenevoiedeunmoduldementenani
management al proiectului, astfel nct modulele s respecte cerinele iniiale sau s se realizeze
adaptriconformcerinelornoi.Modululdemanagementareoviziunedeansambluasuprantregului
proces,rezolveventualeleconflictentremoduleigestioneazfluxuldeproiectare.

1.2

ModelulEntityRelationship

Pornind de la cerinele utilizatorilor, un prim pas este realizarea unor diagrame abstracte de
coninut a bazei de date. Acestea trebuie s poate fi interpretate att de utilizatori, ct i de
dezvoltatori.

Capitolul6.Proiectareaimodelareauneibazededate.Normalizareaioptimizarea
structurii.

Modelele entitaterelaie (ER) sunt o reprezentare conceptual a informaiei coninute ntro


bazdedate.Suntmodeledenivelnaltcaredefinescmulimiledeentitiiasocieriledintreele,dar
nu impun nici un mod specific de structurare i prelucrare a datelor. Conceptele cu care opereaz un
modelERsunt:entitate,relaie,atribut.ModeleleERsuntdescrisegraficprinintermediuldiagramelor
ER.
Entitateareprezintunsetdeobiectecuatributesimilareicareauoexistenindependent.
Fiecareobiectcetrebuieidentificatnmodunicncadrulsetuluiestedenumitmanifestareaentitii.
Fiecareentitateesteidentificatdeunnumeunicideolistdeproprieti,denumiteatribute.Chiar
dacoentitateareunsetdistinctdeatribute,fiecareentitatearevalorilesalepentrufiecareatribute.O
baz de date conine mai multe entiti. n cadrul diagramelor ER, reprezentarea entitilor este un
dreptunghiceareataatnumeleentitii.
Entitate 1

Entitate 2

Ocoleciedeobiecteestedenumitsetdeentiti.Toateentitiledintrunsetsuntdescrisede
aceleai atribute. Numrul de atribute determin gradul de detaliere a entitii. Fiecare atribut al
entitiitrebuiesaibunsetdefinitdevalori.Pentrufiecaresetdeentitisedefineteunsetminimal
deatribute,denumitecheieicareidentificnmodunicoentitatentrunset.
Deasemeneaentitilepotficlasificaten:entitiputerniceacrorexistennudepindede
existena altor entiti. De exemplu un angajat nu depinde de existena unei alte entiti dect cea a
companiei.ientitislabe,crorexistendepindedealteentiti.Deexempluocomanddepindede
existenaangajailoriaclienilor.
Relaiile sunt asocieri ntre dou sau mai multe entiti. O relaie poate s aib i atribute
descriptive. Ca i n cadrul entitilor, orice relaie trebuie s poat fi identificat n mod unic i este
definit de numele ei i entitile ntre care face legtur. n cadrul diagramelor, o relaie este
reprezentatprinintermediuluneiliniiceleagceledouentitiiareasociatunnume.
Entitate 1

Entitate 2

Relaie 1

Graduluneirelaiiestedatdenumruldeentitiasociate.Astfelcexistrelaiiunare,binare,
ternare amd.Orelaieunareste denumitirecursiv,deoareceaceeaientitateeste prezentde
ambeleprialerelaiei.DeexempluntabelulEmployeesdinbazadedateNorthwind,existuncmp
ReportsTocarefacelegturalaaceeaientitate.
Tipurilederelaiisuntaceleaicaiceledefinitepentrutabele:onetoone,onetomany,many
tomany. n cadrul diagramelor ER, reprezentarea lor se face prin specificarea pe linia ce reprezint
relaiaanumeluicardinalitii,tinndcontdeorientareaacesteia:
Angajat

Manager

N:1
Subordonat

Sau prin specificarea la capetele liniei relaiei a valorilor 1 sau conform cardinalitii i
indicareadirecieiuneirelaiiprintrosgeat:
Angajat

1
Subordonat

Manager

Exist mai multe tipuri de notaii ale relaiilor, dar toate trebuie s pstreze aceleai
caracteristici: reprezentarea elementelor ce compun relaia, definirea clar a cardinalitii relaiilor i
uurinainterpretrii.

ModelulEntityRelationship

Atributele sunt proprietile entitilor sau ale relaiilor. Atributele simple, care nu pot fi
divizate sunt denumite i atribute atomice. Atributele compuse pot fi divizate, de exemplu cmpul
AddressdintabelulEmployeespoatefisubdivizatnStreet,NumberiApartment.
Pebazaatributelorsuntdefiniteicheile.Seidentificastfelmaimultetipuridechei:

Super cheie un atribut sau set de atribute ce identific n mod unic o manifestare a
entitii
Cheie candidat o supercheie ce conine doar minimul de atribute necesare
identificriinmodunic
Cheie primar cheia candidat ce este selectat pentru identificarea manifestrii
entitii
Cheialternativecheilecandidatecenusuntselectatecaicheiprimare

ncadruldiagramelorER,atributelevoraparenparteainferioaradreptunghiuluicereprezint
entitatea.Primulatributdinlistvafintotdeaunacheiaprimar.
Entitate 1
Cheia primar
Atribut 1
Atribut 2
Atribut 3
..
Atribut N

Un exemplu de diagram ER este prezentat n figura de mai jos. Reprezentarea relaiilor


folosetemodelulMartinsauCrowsFeet.

Simbolurilecardinalitiireprezint:

0saumaimulte
1saumaimulte
1inumai1
0sau1

isuntprezentelaambelecapetealerelaiei.

Capitolul6.Proiectareaimodelareauneibazededate.Normalizareaioptimizarea
structurii.

1.3

Normalizareauneibazededate.Formenormale.

Normalizarea unei baze de date reprezint un set de instruciuni minimale care permit
dezvoltarea uneistructuricorectepentruobaz dedate. Normalizareaeliminproblemele legatede
anomalii de actualizare, dependene nedorite ntre date i eliminarea redundanei. Avantajul
normalizriiesteunmodelalbazeidedateproiectatcorect,cutoateentitileidentificate,precumi
flexibilitateaiuurinademodificareattabazeidedatectiaaplicaiilorcareruleazpestebazade
date.
Metodele de normalizare sunt descrise prin aa numitele forme normale, care determin
structurasauformatulbazeidedate.Existmaimulteetapedenormalizarenformenormale, ns o
dat cu creterea gradului formei normale, accesul la informaie devine mai lent i mai complex. De
asemeneaprinnormalizarevorrezultafoartemultetabelecufoartepuinecmpuri.
Normalizarea este un proces iterativ, pornind de la prima form normal i pn la gradul la
caredezvoltatorulconsidercaexistmaimulteavantajedectdezavantaje.Rezultatulfiecruinivelde
normalizareestecreareaunorentiticendeplinescanumitecriteriireferitoarelamodulncaredatele
suntstocate.ncontinuarevorfiprezentateprimele3formenormale.
1.3.1

Primaformnormal(1NF)
Primaformnormalestesinguracriticncreareauneibazededaterelaionale.Urmtoarele
forme sunt opionale. Obiectivul 1NF este de a separa datele n uniti logice, denumite entiti sau
tabele.Cndfiecareentitateafostdeterminat,isevaatribuiocheieprimar.

Entitatea areocheiei fiecareatributtrebuie sconinosingurvaloare. Unatributcarese


repetpentruaceeaicheietrebuiesdevinoentitatedesinestttoareissecreezeorelaientre
celedouentitidescompuse.Cheiaoriginalvadevenicheiestrinnnoultabel.Deexempludac
avemuntabelcucadredidacticeitrebuiesintroducemcursurilepecareacelcadrudidacticleine,nu
vomcreacteocoloanseparatpentrufiecarecurs,civomcreauntabelseparatcarevafacelegtura
dintrecadreledidacticeicursuri.
Pe scurt, 1NF asigur prezena unei singure valori la intersecia fiecrei linii cu coloanele din
tabel,iaronregistrareestedefinitnmodunicdecheiasaprimar.
1.3.2

Adouaformnormal(2NF)
2NFseaplicdoartabelelorcucheiecompus1.Untabelcucheiesimplesteautomatn2NF.

Scopulceleideadouaformenormaleestedeseparadatelecaresuntdoarparialdependente
decheiatabelului,icreareaunuinoutabel.Dacoentitateesten1NFidacentitateaareocheie
compus, toate atributele care nu alctuiesc cheia compus trebuie s depind de toate atributele
cheie, i nu doar de unele dintre ele. Pentru a trece la 2NF, trebuie nlturate coloanele care sunt
deduse doar pe baz de dependen parial fa de cheia compus. De exemplu s presupunem c
avemcaicheieprimarntruntabelIDulclientuluiiIDulangajatuluicareaefectuatcomanda,nu
poatesexistenacelaitabelinformaiilegatedoardeclientsaudoardeangajat.ntreaganregistrare
acomenziitrebuiesdepindnmodegaldeclientideangajat.
1.3.3

Atreiaformanormal(3NF)
n3NF,toateatributelecarenudepinddirectdecheiaprimaraentitiisuntrelocatentrun
noutabel.Cualtecuvinteatributelenupotsaibatributealelor.Untabelesten3NF,dacestedeja
n1NFi2NF,iartoatecoloanelecarenusuntcheieprimarnuaudependenetranzitive2spreaceasta.
DeexempludacntabelulAngajaiavemcmpulOra,cmpulJudenupoatesmaiaparntabel,
deoareceacestaestedependentdeorauldincareprovineangajatulinudirectdeangajat.

Cheiaprimarestealctuitdinmaimultecmpuri.
Depinddecheiaprimarprinintermediulaltoratribute.

Proiectareatabelelor

!!! Pentru a reine mai uor condiiile formelor normale se utilizeaz o adaptare a frazei
americaneThetruth,thewholetruthandnothingbutthetruthicarefacereferirelacheiatabelelor:
Thekey,thewholekeyandnothingbutthekey.Fiecareenumeraredinfrazreprezintunadintrecele
3formenormale.
1.3.4

Denormalizarea
Denormalizareaesteprocesuldemodificareastructuriitabelelordintrobazdedatepentrua
permite un anumit grad de redundan n vederea creterii performanelor bazei de date.
Denormalizareaimplicdemulteorirecombinareaunortabelesaucreareaunordateduplicatencadrul
aceluiai tabel. O baz de date denormalizat nu este identic cu o baz de date care nu a fost
normalizat.Prindenormalizareserenunlaoseriedecondiiilegatedenormalizareabazeidedate,
nssepstreazaspecteleeseniale.
Performanele unei baze de date sunt msurate n concordan cu activitatea desfurat la
nivelulacesteia:interogrimari,tranzaciigrup,tranzaciimiciiinterogrimici.
Pentruadenormalizaobazdedateserealizeazunadintreurmtoarelemetode:

Reproducereaunorcoloanededatenmaimultetabelepentruafimaiuoraccesibile
fr a utiliza joinuri. Suplimentarea cheilor strine poate de asemenea s faciliteze
accesulladatefrautilizajoinuripemaimultetabele
Precalculareaistocareaunordatederivatecumarficalculesumaresauconcatenri.
Se creaz astfel tabele cu scop fix ce conin date precalculate necesare n anumite
rapoartesauinterogrirulatefrecvent.
Recombinareaunordescompunerianterioarepentruaevitajoinurimultiple.Acestlucru
seaplicdeobiceintabelelecurelaiidetiponetoone.

Dezavantajelesereferlapierdereaunuiprocentdinintegritateareferenial,iarmentenana
devinemaicomplex.Inserareaiactualizareadatelordevinedificil,deoarecetrebuieactualizatetoate
instaneledatelor.

1.4

Proiectareatabelelor

AvnddiagramaconceptualsauER auneibazededate,pasul urmtorestecelde definirea


tabelelor,cmpuriloriarelaiilordintreacestea.Entitiledevintabele,atributelecmpuri,iarrelaiile
cheistrineiconstrngeri.
Exist 4tipurimaridetabele:tabelededate,tabeledecombinare,tabele subsetitabelede
validare.
Tabelele de date sunt tabele ce conin informaii semnificative legate de entitile bazei de
date.Acestetabeleauocheieprimarceidentificnmodunicfiecareinstandintabel.Tabelelede
datenutrebuiesconincmpurirezultatedincalculesauconcatenriderivatedinaltecmpuriinu
aucoloanecaresserepete.
Tabeleledecombinarecunoscuteicaitabeledereuniunesaulegturrezolvorelaiedetip
manytomanyntredoutabeleprincreareaadourelaiionetomany.
Tabelelesubsetsunttabelececonininformaiidoardespreanumitenregistrridintruntabel
printe, astfel c includerea coloanelor n tabelul printe nu i are rostul. De exemplu, n tabelul
EmployeesalbazeidedateNorthwind,coloanaRegionnuiarerostuldeoareceangajaiidinUKnuau
definitoregiune.
Tabelele de validare sunt utilizate pentru a impune anumite constrngeri asupra coloanelor
unui alt tabel. De exemplu regiunile din care provin angajaii s aib un tabel separat, astfel nct la
populareatabeluluiEmployeessnusepoateintroduceregiuniinexistente.
1.4.1

Conveniidedenumireatabelelor

Numeletabelelortrebuiesfieunicentrobazdedate
Numeletabelelortrebuiesfiectmaidescriptive,darnacelaitimpconcise

Capitolul6.Proiectareaimodelareauneibazededate.Normalizareaioptimizarea
structurii.

Cuvinteletabel,fiiersaualtedenumirigenericenutrebuiesfieprezentennume
SestabileteolungimemaximadenumiriitabelelornconcordancusoluiaRDBMS
aleas.Lungimeamaximartrebuisfiecuctevacaracteremaiscurtdectlungimea
maxim admis pentru a permite o anumit flexibilitate pe msur ce sistemul
evolueaz.
Numeletabeluluinutrebuiesaibunnumecelimiteaztipuldeentitiapartenente.
De exemplu, Comenzi_Italia ar trebui s fie un tabel Comenzi cu un cmp ar, astfel
nctsnuimpununanumitgraddespecificitatedatelor.
Numeletabelelorvorfilaplural.

1.4.2

Determinareaspecificaiilorcmpurilor
nprocesuldecreareaentitilor,liseatribuieanumiteatribute.Atributelesuntcaracteristici
ale unei entiti ce cuantific, descriu sau clasific o entitate. Atributele entitilor devin coloane n
tabele. Integritatea referenial este folosit pentru a menine integritatea datelor din tabele.
Integritateadatelorestemeninutprinspecificareaconstrngerilorlaniveldecoloansauatribut.
Majoritatea constrngerilor rezult din procesul de modelare conceptual a diagramei ER. n
acestpasseidentificcheileprimare,precumiatributelenecesareiopionale.Unatributnecesareste
o coloan ce trebuie s conin o valoare pentru toate nregistrrile din tabel. Relaiile sunt de
asemeneadeterminatenproiectareaconceptualisuntapoiconvertitencheistrinenprocesulde
designaltabelelor.DacdiagrameleERaufostconstruitecorect,trecereadelaentitilatabeleeste
realizatuorirapid.
Specificaiile coloanelor sunt difereniate pe 3 nivele: general, fizic i logic. Nivelul general se
referlaasociereanumeluiuneicoloaneitabeluldincarefaceparte.Numelecoloaneitrebuiesfie
unicnbazadedate,cuexcepiacazuluincarecoloanaestepropagatcaicheiestrinnalttabel.
Unicitatea numelui unei coloane este legat i de faptul c o coloan va fi specificat n SQL i prin
numeletabelului,Angajai.Prenume3.AstfelcsefacedeosebireacuClieni.Prenume.
Nivelul fizic specific tipul datelor unei coloane. Tipul datelor reprezint setul de caractere
acceptatencoloanidimensiunealor.Tipuriledatelorntrobazdedaterelaionalsuntclasificaten
3 mari clase: caracter, numeric i dat i timp. Tipurile de date sunt specifice RDBMS, dar n general
includ: iruri de caractere de dimensiune fix sau variabil, numere ntregi sau reale, dat/timp i
boolean(true,false).
Nivelul logic specific rolul de cheie primar sau strin. Specific de asemenea dac valorile
unui cmp trebuie s fie unice sau pot s aib valori nule, valorile default i domeniul de valori
acceptate.
Stabilireauneilistedecoloane
Dup determinarea tabelelor pornind de la entiti, lista cmpurilor pentru fiecare tabel este
determinatpebazaatributelorfiecreientiti.Trebuiessedeterminenacestpas:

Numelecoloanei
Tipuldatelor
Dacacceptvalorinule
Valoricheie
Constrngerile
Domeniuldevalori
Unicitateavalorilor.

Avndstabiliteacesteinformaii,sepoatetrecelaimplementareafizicacoloanelor.

Reamintimcnmomentulutilizriimaimultortabelentrointerogaresefolosetefienumelentregal
tabelului,fieunaliaspentrureferireaexactacoloanelor.

Concluzii

1.4.3

Consideraiiasupraproiectriitabelelor
Majoritatea efortului pentru identificarea i definirea bazei de date este depus n partea de
modelareconceptualdincarederivstructurafizicatabelelor.Designulconceptualalbazeidedate
implic identificarea entitilor sistemului i a caracteristicilor descriptive ale acestora. ntro baz de
daterelaional,multedintreentitileiniialevorfidescompusen2saumaimulteentitiadiionale,
cumaipuineatribute,rezultatenurmaprocesuluidenormalizare.Proiectareatabelelorestenstrns
legturcusoluiaRDBMSaleas.
nproiectareatabelelortrebuiesseincontdeurmtoarele:

Integritateareferenial
Importanamodeluluiconceptualnproiectareatabelelor
Denormalizareadintimpulproiectrii

Integritateareferenial
Integritatea referenial se refer la utilizarea unui cmp sau a unei combinaii de cmpuri
pentruaidentificanmodunicfiecarenregistraredintabel.npluscheiaprimarsepropagntabelele
copil ca i cheie strin, iar joinurile ntre tabele se realizeaz pe baza acestei chei. De asemenea, n
momentulncareseadaugunrndntabelulcopil,RDBMSvaverificacheiastrinntabelulprinte.
Dacntabelulprintenusegseteexactcheiastrinreferit,inserianuvaavealoc.
Dac de exemplu avem un tabel cu comenzi ce are cheie strin angajatul care a realizat
comandaidorimsintroducemonoucomand,cheiastrinaangajatuluivafiverificatntabelul
Angajaipentruaasiguraocomandvalid.
Importanamodeluluiconceptual
Structuralogicaunuitabel(numelecoloanelor,tipuldateloridimensiuneacoloanelor)este
determinat din structurile entitilor definite n proiectarea conceptual a bazei de date. Entitile
modeluluiERsunttransformatentrostructurlogicdetabelealebazeidedaterelaionale.Atributele
entitii vor deveni coloane, iar identificatorii unici ai entitilor vor deveni chei primare. Domeniile
entitilordevin constrngeri asupradatelor, iarrelaiile dintre entiti,chei strine i primare pentru
constrngeri de integritate referenial. Proiectarea conceptual nu este limitat de performanele
fizice.Scopuleiestedeamodelacerinelestructuriidedateideaevitaredundanaieroriledatelor.
Normalizarea elimin redundana datelor, ns o proiectare logic corect nu va transpune direct
modelulconceptual.
Denormalizareantimpulproiectriilogice
Atuncicndperformanaintervinenproiectareatabelelor,seaplicdeobiceidenormalizarea.
Serenunastfellaanumiteavantajeale3NFpentruaobineperformanefizicemaibune.nacestmod
crete redundana datelor i permite apariia unor coloane derivate. Raionamentul din spatele
denormalizriiestecrealizareaunuijoinnecesitmaimulttimpdectinterogareaunuisingurtabel.
Trebuiesseincontnsdeproblemelecepotsaparlapopulareaiactualizareatabelelor.

1.5

Concluzii

Procesuldeproiectareauneibazededateesteunprocescomplexiimplicntoipaiioserie
deprincipiiiconstrngeri.ntregulprocespornetedelaanalizacerinelorutilizatorilorideterminarea
claraspecificaiilorbazeidedate.Ocolaboraredirectcuutilizatorulfinalmreteanselecabazade
datesrspundnmodeficientidirectinterogrilorfrecvente.
Urmtorul pas este crearea unui model conceptual care s fie n mod egal descriptiv pentru
utilizatoriipentrudezvoltatori.Celmaidesmodelutilizatestecelentitaterelaie,carepebazaunor
diagramegraficeprezintstructurageneralabazeidedate.
De la modelul conceptual, dezvoltatorii aplic o serie de principii, de la normalizare la
determinarea tabelelor i a coloanelor tabelelor i rezult structura logic a bazei de date. n acest
punct,bazadedateesteunmodelfuncional,optimizatcerinelorutilizatorilorieficientdinpunctde

Capitolul6.Proiectareaimodelareauneibazededate.Normalizareaioptimizarea
structurii.

vederealperformanelor.Ultimulpassereferlaalegereastructuriifizice,pascarenuafostdiscutat,
deoareceimplicoseriedecunotinetehnicecedepescscopulcursului.
Urmnd principiile discutate n cadrul acestui capitol orice dezvoltator de baze de date poate
abordaproblemeledeproiectarenmodeficienticurezultateoptime.

1.6

Testareacunotinelordobndite
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

16.

17.

18.

1.7

Descrieipescurtcaresuntpaiicetrebuieurmainproiectareauneibazededate.
Relizaiodiagramacicluluidedezvoltareimentenanauneibazededate.
CereprezintentitilencadrulunuimodelER?Daiexemple.
CereprezintrelaiilencadrulunuimodelER?Daiexemple.
Daiexemplederelaiiunare,binareiternare.
CereprezintatributelencadrulunuimodelER?Daiexempledeatributesimple,compuse
iderivate.
Cereprezintcardinalitateauneirelaii?
Cereprezintatributeleslabeiputernice.Daiexemple.
Prezentaipescurtlacesereferformelenormale1NF,2NFi3NF.
Ceseurmreteprinnormalizareauneibazededate?
Caresuntavnatajeleidezavantajeledenormalizriiuneibazededate?
CaresunttipuriledetabeleicumsefacetrecereadeladiagramaERlaconcepteledetabel,
cmpiconstrngeri.
Caresuntconveniilededenumireatabelelor?
Cereprezintintegritateareferenial?
Caredintreurmtoarelenivelenufacpartedinproiectareauneibazededate:
a. Nivelullogic
b. Nivelulconceptual
c. Nivelulfizic
d. Nivelulabstract
Denormalizareauneibazededate:
a. reduce anumite constrngeri ale formelor normale pentru a mri performanele
bazeidedate
b. elimin problemele legate de anomalii de actualizare, dependene nedorite ntre
dateieliminarearedundanei
c. utilizeaz un cmp sau o combinaie de cmpuri pentru a identifica n mod unic
fiecarenregistraredintabel
d. creaz un model conceptual care s fie n mod egal descriptiv pentru utilizatori i
pentrudezvoltatori
Tabeleledecombinare:
a. conininformaiidoardespreanumitenregistrridintruntabelprinte
b. rezolvorelaiedetipmanytomanyntredoutabeleprincreareaadourelaii
onetomany
c. impunanumiteconstrngeriasupracoloanelorunuialttabel
d. conininformaiisemnificativelegatedeentitilebazeidedate
Numeleunuitabeltrebuiesfieunicn:
a. Instanaserverului
b. Interogarearealizat
c. Bazadedate
d. Spaiultabelelor

Glosar
Atribut proprietile entitilor sau ale relaiilor. Pot fi simple sau compuse n

Bibliografie

10

funciedemoduldedescriereaentitilorsauarelaiilor.
Cheialternative cheilecandidatecenusuntselectatecaicheiprimare
Cheiecandidat osupercheiececoninedoarminimuldeatributenecesareidentificriin
modunic
Cheieprimar cheiacandidatceesteselectatpentruidentificareamanifestriientitii
Denormalizarea reducerea unor constrngeri ale formelor normale pentru a mri
performanelebazeidedate
Entitate reprezint un set de obiecte cu atribute similare i care au o existen
independent. Sunt concepte ale modelului ER li pot defini persoane,
evenimente,obiectesauaciuni.
Formenormale principiidenormalizareabazeidedate.Suntunprocesiterativpornindde
la cerine minimale, prima form normal (1NF) pn la gradul la care
performanelebazeidedatesuntafectatedenormalizare.
Integritatea verificarea corectitudinii cheii strine la popularea sau actualizarea
referenial tabelelor
Modelentitate o reprezentare conceptual a informaiei coninute ntro baz de date.
relaie(ER) Suntmodeledenivelnaltcaredefinescmulimiledeentitiiasocierile
dintreele,darnuimpunniciunmodspecificdestructurareiprelucrarea
datelor.
Normalizare aplicarea unor principii minimale de proiectare a bazei de date pentru
reducerea redundanei datelor, meninerea integritii refereniale i a
relaiilortranzitive
Relaie asociere ntre dou sau mai multe entiti pentru determinarea
elementelorrelaionalealeunuimodelER
Relaiitranzitive atributele unei entiti depind direct de cheia primar a entitii i nu
indirectprinintermediulaltoratribute
Supercheie un atribut sau set de atribute ce identific n mod unic o manifestare a
entitii

1.8

Bibliografie
R.Stephens,R.Piew,DatabaseDesign,SAMS,2001
T.Connoly,C.Begg,DatabaseSolutions,Pearson,2004
J.Hoffer,M.Prescott,F.McFadden,ModernDatabaseManagement,8thEdition,2007
R.Ramakrishnan,J.Gehrke,DatabaseManagementSystems,3rdEdition,2003
A.Beaulieu,LearningSQL,2ndEdition,O'Reilly,2009

Capitolul7.Metodededeterminareastructuriiuneibazede
datepredefinite

nacestcapitolveinva:

Cuvintecheie:

Cumsdeterminaistructurauneibazededate.
Cesuntmetadatele
Cumscreaidiagramauneibazededateexistente
CumsutilizaiINFORMATION_SCHEMA

modelul ER, INFORMATION_SCHEMA, metadate, catalogul sistemului,


diagrameER

Cuprins
Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite............................1
1.1 DeterminareastructuriiuneibazededatefolosinddiagrameER...................................2
1.1.1 SQLServer...................................................................................................................2
1.1.2 MicrosoftVisio............................................................................................................4
1.1.3 DBScribe......................................................................................................................7
1.2
1.3
1.4
1.5

DeterminareastructuriiuneibazededatefolosindscripturiSQL..................................7
Testareacunotinelordobndite..................................................................................14
Glosar.............................................................................................................................14
Bibliografie.....................................................................................................................14

DeterminareastructuriiuneibazededatefolosinddiagrameER

1.1

DeterminareastructuriiuneibazededatefolosinddiagrameER

1.1.1

SQLServer
O prim metod se refer la utilizarea unor reprezentri grafice ale bazei de date. Pentru
aceasta MS SQL Server ofer posibilitatea vizualizrii diagramelor ER ale BD. Din meniul Database
Diagrams,seselecteazNewDatabaseDiagram.

nacestmoment,SQLServerdetermintoatetabeleleceaparinacesteibazededate.Permite
astfelrealizareaiaunordiagrameparialealebazeidedate,prinselectareadoaraunuinumrredus
detabele.

SevorselectanstoatetabeleledinNorthwind.SQLServervarealizaautomatdiagramaER,pe
baza relaiilor dintre tabele i a coloanelor acestora. Sunt indicate deasemenea i cheile strine i
primare.Entitilorpotfirelocatepentruovederedeansamblumaibunasuprabazeidedate.

Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite

DeterminareastructuriiuneibazededatefolosinddiagrameER

1.1.2

MicrosoftVisio
OaltmetoddearealizaodiagramERauneibazededateestedeafolosiMicrosoftVisio,un
tooldecrearedediagrameceutilizeazgraficavectorial1.AcestapermiteconectarealaserverulSQLi
realizarea automat a diagramelor ER. Dup pornirea MS Visio se selecteaz New > Software and
Database>DatabaseModelDiagram(Metric)

DinmeniulDatabase,seselecteazapoiReverseEngineer.DriverulutilizatesteGenericOLEDB
ProvidercuSQLNativeClient.

http://office.microsoft.com/enus/visio/

Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite

NumeleserveruluincazuldefaesteHOME,deoareceesteserveruldepemainalocal.Dac
am avea un server n reea sau remote, am introduce adresa acestuia. La fel, autentificarea se face
folosindNTintegrat.

SevaselectadeasemeneabazadedatecreiadorimsirealizmdiagramaER.

DeterminareastructuriiuneibazededatefolosinddiagrameER

Dup stabilirea conexiunii, trebuie s selectm ce date dorim s fie incluse n diagram. Vom
utilizadoartabelele,cheileprimareistrineiindecii.

nfereastraurmtoarevomselectatabelelecareneintereseaz,nafardesysdiagrams.ivom
specificaapoicdorimsfieadugateautomatformeleaferenteentitilor.

Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite

CaincazulSQLServerManagementStudio,putemrelocaentitilepentruaaveaoprivirede
ansamblumaibunasuprastructuriibazeidedate.

Oproblemcesepoateobservaimediatestefaptulcnutimtipulcoloaneloriconstrngerile
asupra acestora folosind aceste unelte grafice. n seciunea urmtoare este prezentat o metod
specificSQLServerpentruadeterminastructuracompletauneiBD.
1.1.3

DBScribe
Unalttoolfoartebunpentrudescriereauneibazededateicreareauneidocumentaiiaferente
esteDBScribe2.AcestapermiteconexiuneadirectlaSQLServericreazundocument.chm(Microsoft

Compiled HTML Help) n care sunt descrise toate informaiile necesare, de la tabele cu
tipurile coloanelor la proceduri stocate i privilegiile utilizatorilor.

1.2

DeterminareastructuriiuneibazededatefolosindscripturiSQL

Pe lng datele stocate n tabele, un server de baze de date stocheaz i informaii despre
obiectele bazei de date (tabele, viewuri, indeci etc.) care au fost create pentru a stoca aceste date.
Serverulstocheazacesteinformaiintrunlimbajpropriuisuntdenumitemetadate.
Metadatele sunt de fapt date despre date. Fiecare obiect creat are ataate urmtoarele
informaii:

Numeletabelului
Datelelegatedestocareatabelului(dimensiune,spaiuetc.)
Motoruldestocare

http://www.leadum.com/databasedocumentationtool.sql

DeterminareastructuriiuneibazededatefolosindscripturiSQL

Numelecoloanelor
Tipurilecoloanelor
Valoriledefaultalecoloanelor
ConstrngeriNOTNULL
Coloanelecheiprimare
Numelecheiiprimare
Numeleindexuluicheiiprimare
Numeleindexului
Tipulindexului
Coloaneleindexate
Tpuldesortareacoloanei(ascendent,descendent)
Numelecheiistrine
Coloanelecheistrine
Tabeleleasociatecheilorstrine

Aceastinformaieestecunoscutsubnumelededicionaruldatelorsaucatalogulsistemuluii
esteaccesatpentruverificareaiexecutareainstruciunilorSQL.Fiecareserverstocheazinformaian
modpropriu.DeexempluOraclefoloseteunsetdeviewuri,iarSQLServercuMySQLobazdedate
special,numitInformation_Schema.ChiardacDBMSmenineacesteinformaiinprincipalpentru
managementulintern,elesuntaccesibileidezvoltatorilorsauutilzatorilorprinintermediulinterogrilor
standard. Astfel c o baz de date relaional este autodescriptiv deoarece folosete interogri ale
tabelelor de sistem pentru ai defini propria structur. DBMS utilizeaz n mod constant la catalogul
sistemului pentru procesarea instruciunilor SQL. De exemplu, pentru a procesa un SELECT pe dou
tabele,DBMStrebuies:

Verificedactabeleleexistcuadevrat
Utilizatorularedreptuldealeaccesa
Coloanelereferiteexist
Atribuiecoloanelenecalificateunuiadintreceledoutabele
Determinetipulcoloanelor.

Prinstocareainformaieistructuralentabeleledesistem,DBMSpoateutilizapropriilemetode
deaccesilogicpentruaaccesarapidieficientinformaianecesar.Accesulutilizatorilorlaaceste
tabeleestensreadonly.InstruciuniDDL,precumCREATE,DROP,ALTER,GRANTsauREVOKEproduc
indirectmodificriasupratabelelordesistem.nuneleDBMS,chiarsiDMLpotproducemodificriise
reinedeexemplunumruldenregistrridintabele.
n SQL Server, dup cum a fost precizat anterior, este creat o baz de date denumit
INFORMATION_SCHEMAipoatefiaccesatprinintermediulinstruciunilorSQL.Pentruadeterminade
exemplutipurilecoloanelortabeluluiEmployeesdinNorthwind,vomscrie:
USE Northwind
SELECT COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION,
NUMERIC_SCALE,
IS_NULLABLE,
COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), COLUMN_NAME, 'IsIdentity')
AS IS_AUTOINCREMENT,
COLUMN_DEFAULT
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = Employees'
ORDER BY ORDINAL_POSITION

Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite

Trebuie s se specifice neaprat la nceput baza de date pe care dorim s o definim, prin
instruciunea USE <bazaDeDate>. Se pot observa din acest exemplu o serie de atribute ale viewului
ColumnsdinInformation_Schema.Setulcompletdeatributesepoatedeterminafolosind:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = Employees'

CelemaiimportanteviewuridinINFORMATION_SCHEMAnSQLServersunt:

Check_Constraints constrngeri de tip CHECK. Vor fi afiate constrngerile cu


denumirea dat n definirea lor i clauza pe care o verific. De exemplu n Northwind
avemurmtoareleconstrngeridetipCHECK:

SELECT * FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS;

Column_Privilegesprivilegiileutilizatorilorasupracoloanelor.
Columns coloanele i tipurile acestora. Se pot selecta toate coloanele sau doar
coloaneleunuianumittabel:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS;

SELECT * FROM INFORMATION_SCHEMA.COLUMNS


WHERE TABLE_NAME = 'Order Details';

DeterminareastructuriiuneibazededatefolosindscripturiSQL

10

Constraint_Column_Usagecoloaneleceaudefiniteconstrngeri.inacestcazsepot
determina doar coloanele unui anumit tabel, folosind clauza WHERE TABLE_NAME =
<numeTabel>.

SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

Constraint_Table_Usagetabeleleceaudefiniteconstrngeriasupracoloanelorlor:

SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE;

Domain_Constraintsconstrngerialedomeniilordefinitedeutilizator
Domains tipurile de date definite de utilizator. Se por crea aliasuri sau domenii noi
definitedeutilizatorprin:

CREATE TYPE SSN


FROM varchar(11) NOT NULL ;

IarnviewulDomainsalInformation_Schemavorfistocateacestedomenii:
SELECT * FROM INFORMATION_SCHEMA.DOMAINS

Key_Column_Usagecoloanelecheiprimaresaustrinedincadrultabelelor:

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE

11

Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite

Parameterscoloaneleutilizatenfunciilesauprocedurilestocatedefinite

SELECT * FROM INFORMATION_SCHEMA.PARAMETERS

Referential_Constraintscheilestrinedinbazadedate

SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

Routine_Columnscoloaneleutilizatenprocedurilestocatesaufunciilebazeidedate.
Dacamdefinioprocedurstocatcaresparsezedataueicoloanedintruntabel:

CREATE FUNCTION udf_ParseDate (


@date as datetime
) returns @dateinfo table (
id int identity(1,1),
[date] datetime,
[year] int,
[month] smallint,
[day] smallint
)
AS
BEGIN
insert into @dateinfo
select @date, YEAR(@date), MONTH(@date), DAY(@date)
RETURN;
END

AceastavaaparedefinitnRoutine_Columns:

DeterminareastructuriiuneibazededatefolosindscripturiSQL

12

SELECT * FROM INFORMATION_SCHEMA.ROUTINE_COLUMNS

Routinesprocedurilestocateifunciiledefinitenbazadedate:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

Schematainformaiidesprebazelededatedepeserver
Table_Constraintsconstrngeriasupratabelelor

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS

Table_Privileges privilegiile utilizatorilor asupra tabelelor. De exemplu am definit


posibilitateadeaintroducedatenointabelulEmployees:

GRANT INSERT
ON Employees
TO PUBLIC

IaracestlucruvaaparenTable_Privileges:
SELECT * FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES

Tablesinformaiidespretabeleiviewuri:

SELECT * FROM INFORMATION_SCHEMA.TABLES

13

Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite

View_Column_Usagecoloaneletabelelorutilizatenviewuri:

SELECT * FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE

View_Table_Usagetabeleleutilizatenviewuri:

SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE

Viewsinformaiidespreviewuri:

SELECT * FROM INFORMATION_SCHEMA.VIEWS

Testareacunotinelordobndite

14

Folosind aceste tabele virtuale se poate determina uor structura unei baze de date, iar
dezvoltatoriipotextindesaumodificaaceaststructurconformnoilorcerine.Unaltmoddeutilizare
alacestorinformaiiestetrecereadelaunDBMSlaaltulsaulaogeneraiemainouaaceluiaiDBMS.

1.3

Testareacunotinelordobndite
1.
2.
3.
4.
5.
6.

DeterminaistructuracompletabazeidedateNorthwind.
LacesereferINFORMATIONSCHEMA
Caresuntparametriischemeiuneibazededate?
Cereprezintschemauneibazededate?
Ceestecatalogulsistemului?
Determinareastructuriiuneibazededatesereferla:
a. Determinarea tabelelor, a coloanelor lor i a relaiilor dintre tabele ntro baz de
date
b. Determinareaformeinormaledincarefaceparteobazdedate
c. Determinareacoloaneloriaconstrngerilorimpuseasupraacestora
d. Determinareauneimetodedeoptimizareaaccesuluiladateleuneibazededate
7. Reverseengineeringreprezint:
a. Ometoddeproiectareauneibazededate
b. Ometoddedeterminareaformeinormaleauneibazededate
c. Ometoddeestimareaperformaneloruneibazededate
d. Ometoddedeterminareastructuriiuneibazededate
8. Metadatelesuntsinonimecu:
a. Subinterogri
b. Catalogulsistemului
c. Reverseenginering
d. INFORMATION_SCHEMA

1.4

Glosar
metadate datedespredate.Descriereainformaieidintrobazdedate.
INFORMATION_SCHEMA baza de date intern a SQL Server care reine metadatele. Este
alctuitdinviewuriieaccesibildoarreadonlyutilizatorilor

1.5

Bibliografie
P.Wilton,J.Colby,BeginningSQL,WileyPublishing,2005
A.Beaulieu,LearningSQL,2ndEdition,O'Reilly,2009
J.Hoffer,M.Prescott,F.McFadden,ModernDatabaseManagement,8thEdition,2007
R.Ramakrishnan,J.Gehrke,DatabaseManagementSystems,3rdEdition,2003

15

Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite

R.Stephens,R.Piew,DatabaseDesign,SAMS,2001
T.Connoly,C.Begg,DatabaseSolutions,Pearson,2004

Capitolul8.Securitateauneibazededate:conturi,privilegii,
roluri.

nacestcapitolveinva:

Cuvintecheie:

Caresuntsupervizoriiuneibazededate
Caresuntriscurilelacareestesupusobazdedate
Cumsprotejaiobazdedatedeaccesulnedorit
Cumscreaiconturipentruutilizatoriibazeidedate
Cumsatribuiiroluriiprivilegiiutilizatorilor
CeestelimbajulDCL

Conturi,privilegii,roluri,securitate,DCL

Cuprins
Capitolul8.Securitateauneibazededate:conturi,privilegii,roluri..............................................1
1.1 Administrareadateloriabazeidedate.........................................................................2
1.2 Securitateabazeidedate.................................................................................................3
1.2.1 Riscuri..........................................................................................................................3
1.2.2 Contramsuri...............................................................................................................5
1.2.3 Privilegii.......................................................................................................................6
1.2.4 Roluri...........................................................................................................................6
1.2.5 Niveledemanagementasecuritii...........................................................................6
1.2.6 Msurisuplimentaredesecuritate.............................................................................7
1.3 DataControlLanguage(DCL)...........................................................................................8
1.3.1 GRANT.........................................................................................................................8
1.3.2 REVOKE........................................................................................................................9
1.3.3 PUBLIC.........................................................................................................................9
1.3.4 Creareaunuisetdeprivilegiifolosindroluri...............................................................9
1.4
1.5
1.6

Testareacunotinelordobndite..................................................................................13
Glosar.............................................................................................................................13
Bibliografie.....................................................................................................................14

Administrareadateloriabazeidedate

1.1

Administrareadateloriabazeidedate

Proiectarea unei baze de date este o etap esenial n dezvoltarea unei baze de date, ns o
datrealizat,accesullainformaietrebuiefcutnmodcontrolatisupervizatpentruaevitasituaiile
neprevzute.Sedefinescastfeldoucategoriidesupervizoriaisistemuluiinformatic:administratoride
date1(DA)iadministratoriaibazeidedate2(DBA).DAauunrolimportantnstadiileprimarealecrerii
unei baze de date proiectarea conceptual i logic, pe cnd DBA se ocup de proiectarea fizic i
mentenanaoperaionalabazeidedate.
Administrareadatelorreprezintmanagementulicontroluldatelordinbazadedateiinclude
planificarea bazei de date, dezvoltarea i mentenana standardelor, a politicilor i a procedurilor,
precumiaproiectriilogiceabazeidedate.
DAesteresponsabilpentrudateleiresurselebazeidedate,ceincludidatenecomputerizate,
iar n practic este responsabil de managementul datelor comune. Este responsabil de asemenea de
asigurareafaptuluictehnologiileutilizatesusinobiectivelebazeidedate.AtribuiileunuiDAsunt:

Selectareauneltelordeproduciepotrivite
Asistareadezvoltriistrategiilordeproiectareabazeidedate
Rulareaunorstudiidefezabilitateiplanificareadezvoltriibazeidedate
Creareaunuimodeldedate
Determinareacerinelordedate
Setareaunorstandardealecoleciilordedateistabilireaformatuluidatelor
Estimareavolumuluidedateievoluiadimensiuniilor
Determinareaunorabloaneifrecvenedeutilizareadatelor
Determinareacerinelordeaccesladate
Creareadesignuluilogicalbazeidedate
Crearea unei legturi ntre DBA i dezvoltatorii de aplicaii pentru a asigura realizarea
cerinelorbazeidedate
Educareautilizatorilorprivindstandardelededateiaresponsabilitilorlegale
Asigurarea documentaiei, incluznd modelul de date, standarde, politici, proceduri i
controlulutilizatorilorfinali
Managementuldicionaruluidedate
CreareauneilegturintreutilizatoriifinaliiDBApentruadeterminanoicerineidea
rezolvaaccesulladateiperformanele
Determinareauneipoliticidesecuritate

Administrareabazeidedatereprezintmanagementulicontrolulrealizriifiziceasistemului
cu baze de date. Include proiectarea fizic i implementarea, setarea controlului de securitate i
integritate,monitorizareaperformanelorsistemuluiireorganizareabazeidedateconformcerinelor.
DBAareoorientaremaipracticdectDAinecesitcunotinespecificedeDBMSisisteme
de operare. Principalele responsabiliti se refer la dezvoltarea i mentenana sistemelor folosind
capacitileDBMSlamaxim.AtribuiileDBAsunt:

EvaluareaiselectareaproduselorDBMS
Proiectareafizicabazeidedate
ImplementareafizicabazeidedatefolosindDBMSselectat
Definireaconstrngerilordesecuritateiintegritate
Creareauneilegturicudezvoltatoriisistemuluicubazededate
Dezvoltareastrategiilordetestare
Instruciautilizatorilor
Responsabilpentruacceptareasistemuluicubazededateimplementat

DataAdministrators
DatabaseAdministrators

Capitolul8.Securitateauneibazededate:conturi,privilegii,roluri.

Monitorizareaperformanelorsistemuluiiajustareaacestuia
Creareadebackupuriperiodic
Asigurareamecanismeloriaprocedurilorderecuperareadatelor
Asigurareauneidocumentaiicomplete
Punerea la curent cu costurile de dezvoltare software i hardware i actualizarea
tehnologiilor.

Unscurtrezumatcomparativalcelordoucategoriidesupervizoriesteprezentatntabelulde
maijos.Ceamaiimportantdiferensereferlacaracterulmunciirealizate.DAesteorientatpepartea
managerialmaimult,pecndDBAareunaspecttehnic.
Administratordedate(DA)
Implicatnplanificareastrategieisistemuluide
informatic
Determinobiectivepetermenlung
Determinstandarde,politiciiproceduri
Determincerineledatelor
Proiecteazlogicbazadedate
Dezvoltimeninemodeluldedate
Coordoneazdezvoltareabazeidedate
Orientaremanagerial
IndependentdeDBMSales

1.2

Administratoralbazeidedate(DBA)
EvalueazDBMSexistente
Executplanuripentruaatingeobiectivele
Impunestandarde,politiciiproceduri
Implementeazcerineledatelor
Proiecteazfizicbazadedate
Implementeazfizicbazadedate
Monitorizeazicontroleazutilizareabazeide
date
Orientaretehnic
DependentdeDBMSales

Securitateabazeidedate

Securitatea bazei de date reprezint mecanismele de protecie a bazei de date mpotriva


dauneloraccidentalesauintenionate.
Consideraiile de securitate nu se aplic doar asupra datelor din baza de date. Breele de
securitatepotafectaalteprialesistemului,care larndullor afecteazdatele.Astfelcsecuritatea
nglobeaz hardwareul, softwareul, oamenii i datele. Problemele de securitate ce pot s apar se
referla:

furtifraud
pierdereaconfidenialitii
pierdereaintimitii
pierdereaintegritii
pierdereadisponibilitii.

1.2.1

Riscuri
Riscoricesituaie sauevenimentintenionatsauneintenionatcarepoateafectasistemul i
prinurmareorganizaia.

Unrisc poate ficauzatde osituaie sauunevenimentce implico persoan, o aciune sau o


circumstan care poate fi n detrimentul unei organizaii. Pierderea poate fi tangibil (hardware,
software, date) sau poate fi intangibil (credibilitate, ncrederea clientului). Este aadar necesar
identificarea tuturor riscurilor posibile. n tabelul de mai jos sunt identificate posibilele riscuri i
rezultatealeacestora:
Risc
Utilizareametodelordeaccessaleuneialtepersoane
Copiereasaumodificareaneautorizatadatelor
Modificareaprogramelor
Proceduriipoliticineadecvatecepermitunamestecdeieiri
confidenialeinormale
Interceptareacomunicaiilor
Accesulilegalalunuihacker

Furti
fraud
O
O
O
O

Pierderea
confidenialitii
O

Pierderea
intimitii
O

Pierderea
integritii

O
O

O
O

O
O

O
O

Pierderea
disponibilitii

Securitateabazeidedate

antaj
Creareaunorcapcanedesistem
Furtdedate,programeiechipament
Defeciunialemecanismelordesecuritatecepermitunaccesmai
puinrestricionat
Reducereapersonaluluisaugreve
Lipsapersonaluluicalificat
Vizualizareaidezvluireadatelorneautorizate
Interfereneelectroniceiradiaii
Corupereadatelordatoritpenelordecurent
Incendii
Defeciunifizicealeechipamentelor
Cabluriruptesauntrerupte
Introducereaviruilor

O
O
O
O

O
O
O
O

O
O
O
O

O
O

O
O

O
O

O
O
O
O
O
O

O
O
O
O
O
O
O
O

Gradulncareunsisteminformaticesteafectatdeunanumittipderiscdepindedeoseriede
factori, cum ar fi existena unor contramsuri i planuri de contingen. De exemplu, dac exist o
problemhardware,toateaciuniletrebuiesistatepnlaremediere.Recuperareadatelordepindede
ultimul backup realizat i de timpul necesar restaurrii sistemului. n proiectarea unei baze de date
trebuiesseidentificetipurilederiscurilacarepoatefisupusissecreezeplanuriicontramsuri
adecvate. Aplicaia direct a bazei de date influeneaz de asemenea msurile luate. n anumite
contexteanumiteriscuripotfirare,astfelnctnusejustificimplementareaunormsurireferitoarela
acestea.Potenialeleriscuriasuprasistemelordecalculsuntenumeratemaijos:
1. Reeauadecomunicaii
Interceptareacomunicaiilor
Cabluriruptesauntrerupte
Interfereneelectroniceiradiaii
2. Hardware
Incendii,inundaii,bombe
Corupereadatelordatoritpenelordecurent
Defeciuni ale mecanismelor de securitate ce permit un acces mai puin
restricionat
Furtulechipamentelor
Defeciunifizicealeechipamentelor
Interfereneelectroniceiradiaii
3. DBMSisoftware
Defeciuni ale mecanismelor de securitate ce permit un acces mai puin
restricionat
Modificareaprogramelor
Furtulprogramelor
4. Programatori/dezvoltatori
Creareacapcanelordesistem
Modificareaprogramelor(precumcreareaunuisoftnesigur)
Lipsapersonaluluicalificat
Politiciiproceduridesecuritateinadecvate
Reducereapersonaluluisaugreve
5. Utilizatori
Utilizareametodelordeaccesaleuneialtepersoane
Vizualizareaidezvluireadatelorneautorizate
Lipsapersonaluluicalificat
Accesulillegalalunuihacker
antaj
Introducereadevirui
6. Bazadedate
Copiereaimodificareaneautorizatadatelor

Capitolul8.Securitateauneibazededate:conturi,privilegii,roluri.

Furtuldatelor
Corupereadatelordatoritpenelordecurent
7. DAiDBA
Politiciiproceduridesecuritateneadecvate.

1.2.2

Contramsuri
Contramsurile riscurilor posibile variaz de la controlul fizic la procese administrative. n
general,securitateaunuiDBMSnuestelafeldebuncaaunuisistemdeoperare.Celemaiimportante
msuridesecuritatecontrolatedesoftwaresereferla:

Autorizare
Viewuri
Backupirecuperare
Integritate
Criptare
RedundantArrayofIndependentDisks(RAID)

Autorizareacordareaunordrepturiiprivilegiicepermitaccesullegitimalunuiutilizatorlao
bazdedatesauunobiectaluneibazededate.
Controlautorizriipoatefidefinitnsoftwareiguverneaznudoarcebazdedatesauobiect
poateaccesautilizatorul,ciiaciunilepecareacestalepoatentreprinde.Dinaccesmotiv,autorizrile
suntdenumiteicontrolulaccesului.Procesuldeautorizareimplicnprimulrndautentificarea.
Autentificareaesteunmecanismprincaresedetermindacunutilizatorestecinedeclarc
este. Administratorul de sistem este responsabil de permiterea accesului utilizatorilor la un sistem
computaional prin crearea de conturi de utilizator individuale. Fiecare utilizator are un identificator
unic, care este folosit de sistemele de operare pentru a determina identitatea acestuia. Aceast
procedur permite utilizarea autorizat a unui sistem computaional, dar nu autorizeaz neaprat
dreptuldeautilizaunDBMS.ResponsabilitateaautorizriiaccesuluilaDBMSrevineDBA.Acestatrebuie
screezeconturiindividualeiparolepentruutilizatori.
UneleDBMSpstreazolistdeidentificatoriaiutilizatoriloriparolelecorespondente,cepot
fi separate de lista sistemului de operare. Alte DBMS valideaz lista pe baza autentificrii din cadrul
sistemului de operare. Aceasta previne logarea unui utilizator n baza de date sub un alt identificator
dectcelcucaresalogatnsistemuldeoperare.
Tipuriledeutilizatorinordineaimportaneisunt:

Superuserareacceslatoatefiierelestocatensistem.
Proprietarulbazeidedateareacceslatoatefiiereleasociatecusoftwareuluibazei
dedateicufiierelededatedinsistem.
Proprietarulschemeiestecreatoruliproprietarulobiectelordinbazadedatecesunt
utilizatenaplicaii.Areaccesnelimitatlatoateobiecteleschemeiiesteresponsabilde
controlaccesuluidectrealteconturideutilizator.
Utilizatorul final are cele mai puine drepturi, chiar dac baza de date exist pentru
acesta.Accesulsupoatefilimitatdeoricaredintretipuriledeutilizatorianteriori.

Viewurisunttabelevirtualecarenuexistneapratnbazadedate,darpotfigeneratepe
bazacerinelorunuiutilizator.Acesteapermitunmecanismdesecuritateputernicprinascundereaunor
prialebazeidedatefadeutilizatori.Utilizatorulnutiecanumitecoloanesaunregistrrilipsesc
din view. Unui utilizator i se poate acorda privilegiul de a utiliza un view, dar nu i tabelele din care
acestaestederivat.nacestmod,unviewestemultmairestrictivdectsimplaacordareaunorprivilegii
utilizatorilorntabeleledebaz.
Backupulirecuperareadatelorsereferlarestaurareauneibazededatedupodefeciune.
Orice DBMS pstreaz un jurnal al tranzaciilor (inserarea de date, actualizri, tergeri de date,
modificareatabeleloretc.).Esteindicatcasserealizezeunbackupperiodiclabazadedate.nacest

Securitateabazeidedate

mod, la apariia unor defeciuni se poate restaura o versiune anterioar a bazei de date, minimiznd
astfelpierderilededate.
Integritatea dat de constrngeri contribuie la meninerea securitii bazei de date prin
prevenireaintroduceriidatelorincorecte.
Criptareadateloresteunprocesnurmacruiadatelenupotficititefradeineocheiede
decriptare.Dacobazdedateconineinformaiiprivate,estenecesarcaacesteasfiecodatecaio
precauie mpotriva unor riscuri externe. Unele DBMS ofer aceast facilitate de criptare, ns acest
lucrureducevitezadeexecuieainterogrilordatoritalgoritmuluidedecriptare.Criptareaesteutili
n momentul transmiterii datelor pe liniile de comunicaii. Exist o serie de metode de codare:
ireversibile nu se poate determina informaia original i reversibile. Cele ireversibile se folosesc de
obicei la codarea parolei, astfel nct la logarea n sistem se aplic un algoritm de criptare, se obine
coduliacestaestecomparatcurezultatulalgoritmuluiasupraparoleistocate.
RedundantArrayofIndependetDisks(RAID)
HardwareulpecareunDBMS lfolosetetrebuiesfietolerantlaerori idefeciuni,ceeace
nseamn c DBMS trebuie s opereze chiar dac una dintre componentele sistemului se defecteaz.
Aceast nseamn utilizarea unor componente redundante ce pot fi integrate n sistem. Cele mai
importante componente sunt memoriile, controlere memoriei, procesorul, sursele de alimentare i
coolerele. Memoriile sunt cele mai susceptibile la erori i defeciuni, astfel c o soluie este utilizarea
tehnologieiRAID.Aceastautilizeazomatricedediskuridememorieindependenteorganizatenaafel
nctsmbunteascperformaneleifiabilitateasistemului.
1.2.3

Privilegii
Privilegiile sunt utilizate pentru controlul accesului utilizatorului la baza de date. Privilegiile
exist la nivel de sistem de operare, baz de date i aplicaie. Privilegiile bazei de date controleaz
accesullamediulbazeidedate,cumarfimanipulareastructuriisauaccesullaobiecte.Existdoutipuri
deprivilegiinbazelededaterelaionale:privilegiidesistemiprivilegiideobiect.Privilegiiledesistem
sereferlacreareaitergereatabelelor,modificareastructuriiunuitabel,creareadeindeciiviewuri
imanipulareaconturilorutilizatorilor.Privilegiiledeobiectsereferlaabilitateadeainterogaobaz
de date i de a manipula datele din tabele. Privilegiile de obiect sunt standardizate i se refer la
instruciunileSELECT,INSERT,UPDATE,DELETE,lareferireacoloanelorunuitabeldectrealtecoloane
(deex.cheistrine)ilautilizareaautorizataunuidomeniuspecific.Caioregulgeneral,privilegiile
desistemsuntcreatedeDBA,iarceledeobiectdeproprietarulobiectului.
1.2.4

Roluri
Managementul privilegiilor pentru fiecare utilizator este o sarcin complex atunci cnd
numrul acestora depete ordinul zecilor. Astfel c se definesc roluri ce includ toate privilegiile
necesare realizrii unei anumite sarcini. Utilizatorii primesc apoi un numr redus de roluri spre
deosebiredesutedeprivilegiiindividuale.RolurilesuntcreatedeDBA,iarproprietariibazeidedatesau
deschemepotsadaugesausrevoceanumiteprivilegii.Unuiutilizatorisepotacordamaimulteroluri
simultan.Cualtecuvinterolurilesuntocoleciedeprivilegiispecificecepotfiatribuiteutilizatorilor.
1.2.5

Niveledemanagementasecuritii
Se disting 3 nivele distincte de management asociat unui sistem informatic: nivelul de sistem,
nivelulbazeidedateinivelulaplicaiei.AccesulutilizatorilorlafiecarenivelestecontrolatdeDBA.
Managementulsecuritiilaniveldesistem

Administratoriidesistemcontroleazsistemulinformaticpecareestestocatbazadedate.Ei
au posibilitatea manipulrii fiierelor i a datelor stocate pe acesta. Acetia trebuie s asigure accesul
strictcontrolatipebazauneiautentificricomplexe.Decelemaimulteorinumrulutilizatorilorcare
au acces la sistem este sub 5. Ei trebuie s asigure accesul concurent al utilizatorilor la resurse i s
acordeprivilegiipebazarolurilorprestabilite.Securitateadesistemesteceamaiimportantidecele
mai multe ori necesit resurse fizice i logice semnificative. Accesul neautorizat n sistem poate

Capitolul8.Securitateauneibazededate:conturi,privilegii,roluri.

compromitentreagabazdedatesaubazelededatestocate.Copiialebazeidedatepotficopiatepe
altesistemeexterne,nsbackupulestecentralizat.
Managementulsecuritiilaniveldebazdedate
DBA controleaz i manageriaz baza de date, avnd astfel posibilitatea modificrii structurii
acesteia i a datelor stocate. Este responsabil de asigurarea resurselor necesare i de configurarea
tehnologiei. De asemenea un rol important al DBA este de a atribui rolurile i privilegiile utilizatorilor
finaliasuprabazeidedate.Utilizatorilorfinaliartrebuisliseacordeminimdeprivilegii,iarmajoritatea
aciunilor intreprinse de acetia s poat fi controlat de sistemul de management al bazei de date.
Rolurileiprivilegiiserefernmoddirectlaaplicaiilecarevorfolosibazadedateisuntdecelemai
multeoridefinitedirectnaplicaie.nssecuritateauneibazededatenuselimiteazdoarlaaceasta.
Unii utilizatori maliioi ar putea accesa baza de date i din exteriorul aplicaiilor definite pe aceasta
folosinddeexemplutehnologiiODBC3,astfelcestenecesarosecuritateproprieabazeidedate.
Managementulsecuritiilaniveldeaplicaie
Dezvoltatorii de aplicaii definesc programele ce acceseaz baza de date, precum i drepturile
utilizatorilordeaaccesadirectinformaiadinbazadedate.Aplicaiileconindecelemaimulteoriun
nivelsuplimentardesecuritatebazatpeautentificare.Opiuniledisponibileunuiutilizatorvorfifiltrate
degrupuldecareacestaaparine.Privilegiileirolurileutilizatoruluidinbazadedatesersfrngasupra
drepturiloracestoranaplicaii.Decelemaimulteoriseutilizeazgrupurigenericedeaccesslabazade
datepentruanusuprancrcanumruluideutilizatoriaiacesteia.
Pe lng roluri, grupuri generice i autentificare se mai folosesc i sisteme de management a
securitii.Acestaimpliccreareaunortabelefolositedeaplicaiepentruadeterminatipuldeaccesal
unui utilizator. n principiu, acesta este similar cu privilegiile de obiect, ns implementat la nivel de
aplicaie.
1.2.6

Msurisuplimentaredesecuritate
Bazele de date moderne sunt n direct legtur cu reelele de comunicaii, n principal
internetul.Majoritateabazelordedateexistentelaoraactualauoexistenfizicseparatdeceaa
aplicaiilor. Astfel c se impun o serie de msuri suplimentare de securitate la nivel de protocol de
comunicaii,definitedesecuritateareelei,firewallalreeleiiconectorisecurizailabazadedate.
SecuritateareeleiesterealizatcuajutorulNAT(NetworkAddressTranslation)careascundeIP
ulrealalsistemuluicubazededate.NATesteinclusnmajoritateasoluiilorfirewall,nsnueste100%
sigur,deoarecehackeriiexperimentaipottotuiaccesabazadedatenurmaunuiprocesdeinferen
aIPului.Osoluieesteutilizareamaimultorconfigurrialereeleipentrudiferitegrupurideutilizatori,
astfelcadresaIPaserveruluicubazededatenuvafistocatntrunsingurfiier.
Firewallulreeleiesteceamaibunopiunempotrivaaccesuluineautorizat.Setareacorecta
firewallului protejeaz reeaua, dar poate s reduc performanele acesteia. Firewallului filtreaz
pachetelededatetransferate,iarpebazauneilistededeIPuriautorizatepermitetransmitereaacestor
pachete.
ConectoriilabazadedatesereferlautilizareaSSL(SecureSocketLayer)sauIETFTLS(Internet
Engineering Task Force Transport Layer Security). SSL ofer metode criptare a datelor, autentificare
bidirecional i servicii de validare a datelor. SSL utilizeaz o metod bazat pe cheie public sau pe
cheiedesesiune.Unaltprincipiudesecurizareacomunicaieiesteutilizareadecertificateobinutede
la o autoritate imparial. Un prim pas n stabilirea comunicaiei este verificarea certificatului prilor
implicate.

OpenDatabaseConnectivity

DataControlLanguage(DCL)

1.3

DataControlLanguage(DCL)

Pentru a acorda privilegii i a crea roluri ntro baz de date exist un limbaj dedicat n SQL,
denumitDataControlLanguage(DCL).AcestaconinenprincipalcomenzileGRANTiREVOKE.
1.3.1

GRANT
Sintaxainstruciuniieste:
GRANT {ALL PRIVILEGES | <privilege>[, <privilege>...]}
ON <database object>
TO <grantee> [, <grantee>...]
[WITH GRANT OPTION]

ipermiteacordareaunorprivilegiiutilizatoriloruneibazededatesauunuigrupdeutilizatori.
Privilegiile se refer n principal la manipularea datelor din tabele prin: SELECT, UPDATE, INSERT,
DELETE,referireacoloanelor.UtilizareainstruciuniiGRANTsefacespecificnd:
Privilegii

Descriere

SELECT[(listadecoloane)]

Permite SELECT la nivelul tabelului specificat. Dac se specific lista de


coloane,utilizatorulareaccesdoarlaacestea.
Permiteinserareadenoinregistrrintabelulspecificat.Dacsespecifico
list de coloane, atunci utilizatorul poate introduce date doar n acele
coloane
Permite actualizarea nregistrrilor existente n tabelul specificat. Dac se
specific o list de coloane, atunci utilizatorul poate actualiza doar datele
doardinacelecoloane
Permitetergereainterogrilor
Referirea unor coloane ale tabelului specificat incluznd chei strine i
constrngeri de tip CHECK. Dac se specific o list de coloane, pot fi
referitedoaracestea
Seacordtoateprivilegiileunuiutilizator.

INSERT[(listadecoloane)]

UPDATE[(listadecoloane)]

DELETE
REFERENCES[(listadecoloane)]

ALLPRIVILEGES

nceleceurmeazvorfiexemplificatemetodeledeacordareaacestorprivilegii.
PrivilegiidetipSELECT:
GRANT SELECT(EmployeeID, FirstName, LastName) ON Employees TO User1;

User1poatevedeadoarIDurileinumeleangajailor.
GRANT SELECT ON Employees TO User1, User2;

User1poatevedeatoatedateledintabelulEmployees.
GRANT SELECT ON Orders TO User1 WITH GRANT OPTION;

User1 are acces la toate datele din tabelul Orders i poate acorda privilegii altor utilizatori
asupraacestuitabel.
PrivilegiidetipINSERT/DELETE:
GRANT INSERT(EmployeeID, LastName, FirstName), DELETE ON Employees TO
User1;

CndUser1insereazonregistrarentabelulEmployees,restulcoloanelornafardeLastName
i FirstName vor avea valori default. Este necesar privilegiul asupra cheii primare, n caz contrar
nregistrrilevorfirespinse.
PrivilegiidetipUPDATE:
GRANT UPDATE(ClientID, EmployeeID) ON Orders TO User1;

Se permite actualizarea informaiilor legate de comenzi doar pentru numele clientului i al


angajatuluicareanregistratcomanda.
PrivilegiidetipREFERENCES:
GRANT REFERENCES(EmployeeID) ON Emplyees TO User1;

Capitolul8.Securitateauneibazededate:conturi,privilegii,roluri.

Se permite utilizatorului s referenieze coloana EmployeeID ntrun alt tabel sau s creeze o
constrngeredetipCHECKceutilizeazaceastcoloan.
PrivilegiidetipALLPRIVILEGES:
GRANT ALL PRIVILEGES ON Employees TO User1 WITH GRANT OPTION;

User1 poate s realizeze orice aciune asupra tabelului Employees i poate s ofere aceleai
privilegiiialtorutilizatori.
1.3.2

REVOKE
Privilegiile oferite n seciunea anterioar pot fi revocate folosind instruciunea REVOKE, cu
sintaxa:
DCL

REVOKE [GRANT OPTION FOR]


{ALL PRIVILEGES | <privilege>[, <privilege>...]}
ON <database object>
FROM <grantee> [, <grantee>...]
[CASCADE | RESTRICT]

Exemplu:
REVOKE UPDATE ON Employees FROM User1;

RevocdrepturileUser1asupratabeluluiEmployees.DacsespecificGRANTOPTIONFORse
revocdrepturileutilizatorilordinlistdeaacordaprivilegiilerespective,darnurevocprivilegiulnsui.
OpiuneaRESTRICTinterziceoriceREVOKEundeexistprivilegiidependente.Deexempludac
dorim s revocm privilegiile utilizatorului User1, aceasta nu este posibil pn ce nu revocm i
privilegiile acordate de acesta. Opiunea CASCADE ns permite acest lucru i o dat cu revocarea
privilegiilorunuiutilizatorvorfirevocateicelealeutilizatorilorceauprimitprivilegiidelaacesta.
1.3.3

PUBLIC
Dacdorimcaoseriedeprivilegiisfieacordatetuturorutilizatorilor,sepoatefolosiopiunea
PUBLIC.Trebuiesseacordedoarprivilegiicarenuprezintriscuridesecuritate.Deexemplu:
GRANT SELECT(Description, Price) ON Products TO PUBLIC;

Drepturileacordatepublicnupotfirevocateniciunuiutilizator.
1.3.4

Creareaunuisetdeprivilegiifolosindroluri
Pentruaacordaunsetdeprivilegiiunuiutilizatorsepotdefiniroluri:
CREATE ROLE <role name> [WITH ADMIN OPTION]

DacsespecificWITHADMINOPTION,utilizatorulpoateacordarolulaltorutilizatori.Exemplu:
CREATE ROLE employee;
GRANT INSERT ON Orders TO employee;

Iarrolurilepotfiacordatefolosindsintaxa:
GRANT <role name>, [, <role name>...] TO <grantee> [, <grantee>...]
[WITH ADMIN OPTION]

Saupotfirevocatefolosind:
REVOKE [ADMIN OPTION FOR]
<role>[, <role>...]
FROM <grantee> [, <grantee>...]
[CASCADE | RESTRICT]

Exemplu:
GRANT employee TO user1;
REVOKE employee FROM user1;

Sausepoatetergerolulcutotul:
DROP ROLE <role>

ModuldecreareimanipularearolurilordepindedelaDBMSlaDBMS.Majoritateaaustructuri
analoage.

DataControlLanguage(DCL)

10

Pentru a exemplifica modul de acordare de privilegii de ctre un utilizator unui alt utilizator,
vom crea dou conturi noi n SQL Server Management Studio, student1 i student2, care vor avea
autentificaredetipSQLServer,inuWindowsAuthentication4.

Dupcreareaautentificriicelordoiutilizatori,vatrebuisiadugmicaiutilizatoriaibazei
de date Northwind. n mod similar, vom aduga utilizatorii student1 i student2 n seciunea de
securitateabazeidedateNorthwind:

VerificareautilizatoruluivafifcutdeserverulSQLinupebazasistemuluideoperare.

11

Capitolul8.Securitateauneibazededate:conturi,privilegii,roluri.

i i vom asocia autentificrii student1 i student2 prin specificarea la Login name a acestor
utililizatori:

nacestmomentavemutilizatoriistudent1istudent2aibazeidedateNorthwind.Acestlucru
estevizibilnseciuneaNorthwind>Security>Users:

Din calitate de administrator al bazei de date, vom oferi privilegii de SELECT asupra tabelului
Employees,cuopiuneaGRANTOPTION,utilizatoruluistudent1:
GRANT SELECT ON Employees TO student1 WITH GRANT OPTION;

Lucruvizibilnfereastradeproprietiautilizatoruluistudent1,seciuneaSecurables:

DataControlLanguage(DCL)

12

Pentrucautilizatorulstudent1sacordeprivilegiideselectasupratabeluluiEmployees,nevom
loga cu idul acestuia i vom rula scriptul SQL de mai sus cu modificarea c vom acorda privilegii
utilizatoruluistudent2:

GRANT SELECT ON Employees TO student2;

Faptulcutilizatorul student2 are acumdreptuldeselectasupratabeluluiEmployeespoatefi


confirmatnmodsimilarcuceldescrisanterior.SeobservfaptulclaGrantor,aparenumelestudent1.

13

Capitolul8.Securitateauneibazededate:conturi,privilegii,roluri.

1.4

Testareacunotinelordobndite
1.
2.
3.
4.
5.
6.
7.
8.

CareestediferenadintreDAiDBA?
Cereprezintsecuritateauneibazededate?
Caresuntniveleledesecuritatenecesareunuisistemcubazededate?
Caresuntprincipaleleriscuriasociateuneibazededate?
Caresuntcontramsurileriscurilorasociateuneibazededate?
Laceserefercriptareadatelor?
CeesteDCLicaresuntcomenzileasociate?
Administratoriidedatesuntresponsabilide:
a. dateleiresurselebazeidedate
b. dezvoltareaimentenanasistemelorfolosindcapacitileDBMSlamaxim
c. optimizareaperformaneloruneibazededate
d. scriereainterogrilornecesarepentruobazdedate
9. DCLesteabreviereadela:
a. DataConnectionLanguage
b. DataControlLanguage
c. DataComponentsLanguage
d. DataCreationLanguage
10. InstruciuneaGRANT:
a. permiterevocareaunorprivilegiialeutilizatoriloruneibazededatesauaunuigrup
deutilizatori
b. permitesubinterogareatabeleloruneibazededate
c. permitedefinireamoduluideaccesalutilizatorilorlaobazdedateprinstabilirea
datelordeautentificare
d. permite acordarea unor privilegii utilizatorilor unei baze de date sau unui grup de
utilizatori
11. Roluriledefinesc:
a. Dateledeautentificarealeutilizatorilorlaobazdedate
b. Modulncareunutilizatorseconecteazlaobazdedate
c. Privilegiileasupradatelorimanagementuldatelorntrobazdedate
d. Persoaneleceimplementeazaplicaiiasuprauneibazededate

1.5

Glosar
administrarea reprezintmanagementul icontrolul realizrii fizice asistemului cu baze
bazeidedate dedate.Includeproiectareafiziciimplementarea,setareacontroluluide
securitate i integritate, monitorizarea performanelor sistemului i
reorganizareabazeidedateconformcerinelor
administrarea reprezint managementul i controlul datelor din baza de date i include
datelor planificarea bazei de date, dezvoltarea i mentenana standardelor, a
politiciloriaprocedurilor,precumiaproiectriilogiceabazeidedate.
autentificarea este un mecanism prin care se determin dac un utilizator este cine
declarceste.
backup Procesulprincarebazadedateestestocatperiodicpeunmediuextern
sistemului informatic pentru a permite restaurarea ei n cazul unor

defeciuni.
DCL DataControlLanguage
privilegii
risc orice situaie sau eveniment intenionat sau neintenionat care poate
afectasistemuliprinurmareorganizaia.
securitateabazei reprezint mecanismele de protecie a bazei de date mpotriva daunelor
accidentalesauintenionate

Bibliografie

14

dedate
view Untabelvirtualcenuexistneapratnbazadedate,darpoatefiprodus
lacerereautilizatorilor

1.6

Bibliografie
R.Stephens,R.Piew,DatabaseDesign,SAMS,2001
T.Connoly,C.Begg,DatabaseSolutions,Pearson,2004
M.Donahoo,G.Speegle,SQLPracticalguidefordevelopers,Elsevier,2005

Capitolul9.Controlultranzaciilor.

nacestcapitolveinva:

Cuvintecheie:

Ceesteotranzacie
CaresuntinstruciunileSQLpentrucontrolultranzaciilor
Cereprezintunlockigranularitileacestuia
Tipuridelock
Parametriiunuilock
Cereprezintniveleledeizolare

tranzacie, COMMIT, ROLLBACK, lock, versioning, ACID, nivele de


izolare

Cuprins
Capitolul9.Controlultranzaciilor..................................................................................................1
1.1 Tranzacii..........................................................................................................................2
1.2 COMMITiROLLBACK......................................................................................................2
1.3 ModelulANSI/ISOpentrutranzacii.................................................................................2
1.4 Locking.............................................................................................................................3
1.4.1 Granularitialelockurilor.........................................................................................3
1.4.2 Niveledeblocaresaulock...........................................................................................3
1.4.3 Setareaparametrilordeblocaresaulock...................................................................4
1.5 Versioning........................................................................................................................4
1.6 Problemealetranzaciilormultiutilizator........................................................................5
1.6.1 Problemaactualizriipierdute....................................................................................5
1.6.2 Problemadatelornesalvate........................................................................................5
1.6.3 Problemadatelorinconsistente..................................................................................5
1.6.4 Problemainserriifantom........................................................................................5
1.6.5 Tranzaciiconcurente..................................................................................................6
1.7
1.8
1.9
1.10
1.11

Niveledeizolareatranzaciilormultiutilizator................................................................6
Concluzii...........................................................................................................................7
Testareacunotinelordobndite....................................................................................7
Glosar...............................................................................................................................8
Bibliografie.......................................................................................................................9

Tranzacii

1.1

Tranzacii

Bazele de date sunt utilizate n principal pentru accesul simultan a mai multor utilizatori la
aceleai resurse. Accesul simultan este denumit acces concurent. ns acest tip de acces cauzeaz
probleme de integritate ale bazei de date, prin faptul c n momentul realizrii unei interogri sunt
procesate mai multe aciuni asupra tabelelor sau mai muli utilizatori doresc s realizeze interogri
simultan.
OtranzacieesteosecvendeunasaumaimulteinstruciuniSQLcarempreunformeazo
unitatedelucru.Decelemaimulteoriprocesulnecesitinserareadatelornmaimultetabele.Dacuna
dintreoperaiieueaz,ntregulsetdeinstruciunitrebuierefcut.Pentruaasiguraefectuareatuturor
operaiilorsauaniciuneia,sefolosesctranzacii.Pentrucaungrupdeinstruciunisfieconsiderateo
tranzacie,trebuiesndeplineascurmtoarelecondiii,cunoscutesubacronimulACID:

1.2

Atomicitate dac una dintre operaii eueaz, toate operaiile trebuie anulate. Doar
cnd toate operaiile sunt realizate cu succes se vor salva rezultatele tuturor
instruciunilor.Tranzaciiletrebuiesfieconsiderateatomice,cauntotunitar.
Consistenbazadedatetrebuiesfientrostareconsistentlasfritultranzaciei.
Aceasta nseamn c datele din toate tabelele trebuie s fie corecte i s nu se
suprascrieaccidentalnregistrri.
Izolaredateleprocesatedetranzacienutrebuiesfievizibileutilizatorilornaintesau
n timpul realizrii tranzaciei. n acelai timp, ele trebuie executate izolat de alte
tranzacii.
Durabilitate la sfritul tranzaciei, baza de date trebuie s salveze datele n mod
corect. ntreruperile de curent, defeciunile echipamentelor nu trebuie s afecteze
integritateadatelor.

COMMITiROLLBACK

Pentru a manipula tranzaciile, SQL implementeaz dou instruciuni, COMMIT i ROLLBACK.


Instruciunea COMMIT semnific finalizarea cu succes a unei tranzacii, toate operaiile au fost
executatecusucces,iarbazadedateesteconsistent.ROLLBACKsemnalizeazfinalizareanereuita
unei tranzacii. DBMS trebuie s anuleze orice modificare realizat i s aduc baza de date n starea
anterioar.AcestedouinstruciunisuntscrisecaatarentrunscriptSQL:
UPDATE Customers
SET LastName=Doe WHERE FirstName=John
COMMIT
ROLLBACK %dac de exemplu sunt mai muli
actualizarea datelor unuia anume.

clieni

John

doream

1.3

ModelulANSI/ISOpentrutranzacii

StandardulSQLANSI/ISOdefineteunmodeldetranzaciiirolurilepecareledeinCOMMITi
ROLLBACK. Standardul specific faptul c o tranzacie SQL ncepe automat cu prima instruciune SQL
executat sau utilizat de un program. Aceasta continu pn ce este terminat ntrunul din cele 4
moduriurmtoare:

Urmeaz un COMMIT finalizeaz o tranzacie cu succes i face modificrile


permanentenbazadedate
UrmeazunROLLBACKseabandoneaztranzacia,anulndmodificrileefectuate.O
noutranzaciencepeimediatdupROLLBACK.
Terminarea cu succes a programului finalizeaz i tranzacia, ca i cum ar fi fost
executatunCOMMIT.
Terminarea anormal a unui program termin automat i tranzacia i realizeaz
ROLLBACK.

Capitolul9.Controlultranzaciilor.

COMMIT i ROLLBACK sunt orientate ctre SQL utilizat n aplicaii. Tranzaciile joac un rol
importantdeoarecechiarinprogramesimpleestenevoieuneorisseexecuteosecvendedousau
treiinstruciuniSQLpentruarealizaosarcin.Deoareceutilizatoriisepotrzgndisaupotsaparalte
evenimenteneateptate,oaplicaietrebuiesfiecapabilsrealizezeparialotranzacie,iarapois
renune.CeledouinstruciuniSQLrealizeazexactacestlucru.
Mecanismulprincaretranzaciilesunttratateesteurmtorul:nmomentulncareunutilizator
execut o instruciune SQL, DBMS creaz un log n care pstreaz modificrile realizate asupra
nregistrrilor.Pedeopartepstreaznregistrriledinainteainstruciunii,iarpedealta,nregistrrile
de dup instruciune. Doar dup scrierea logului, DBMS scrie modificrile n baza de date. Dac se
execut un ROLLBACK imediat, DBMS inspecteaz logul i anuleaz modificrile. Utilizarea logului
scadeperformanelebazeidedate,pecalculatoarelepersonaleputndfidezactivat.

1.4

Locking

Lockurile sunt mecanisme ale serverului de baze de date utilizate pentru controlul accesului
simultanlaresurselededate.Cndoporiuneauneibazededateesteblocat,oricealtutilizatorcare
dorete s modifice datele trebuie s atepte pn ce lockul este deblocat. Exist dou strategii de
blocare:

Utilizatoriicarevorsscrienbazadedatetrebuiesceardelaserverunlockdetip
write pentru a modifica datele. Utilizatorii care vor doar s citeasc datele trebuie s
soliciteunlockdetipreadpentruainterogaBD.ntimpcemaimuliutilizatoripotciti
datelesimultan,nuacelailucrusentmplpentruceicevorsscrie.Poatesexiste
unsingurlockdetipwriteasupraunuitabelsauporiuneaacestuialaunmomentdat.
Utilizatorii care vor s scrie n BD trebuie s solicite un lock, dar nu i cei care vor s
citeasc. n schimb, serverul se asigur c cel ce citete vizualizeaz o versiune
consistentadatelor.Aceastmetodestedenumitversioning.

Primametodpoateducelatimpideateptaremaridacexistmultiplecerericoncurente,iar
ceadeadouapoatepuneproblemeatuncicndexistinterogrimarintimpcedatelesuntmodificate.
MSSQLServerutilizeazprimametod,iarOraclepeceadeadoua.
1.4.1

Granularitialelockurilor
Granularitatea unui lock se refer la dimensiunea structurii asupra creia se aplic un lock.
MajoritateaDBMSpotsaplicelockuriladiferitenivelencadrulbazeidedate.Fiecarelockpoates
afectezeunaltutilizator.
Niveleledegranularitatesunt:

1.4.2

Lock la nivel de baz de date un proces ce modific un numr mare de tabele sau
structura acestora are nevoie de un lock la nivel de BD. Obinerea unor lockuri
individualepefiecaretabelinordineacorectpoatenecesitatimp.
Locklaniveldetabelnupermitemaimultorutilizatorimodificareadatelordinacelai
tabelsimultan.Dacsedoretedeexempluactualizareadatelordintruncmppentru
toatenregistrrile,sevasolicitaunlockdetiptabel.
Lockdetippaginnusepermitemodificareadatelordinacelaisegmentdememorie
(2kB16kB)alunuitabelsimultan
Lock la nivel de nregistrare nu se permite modificarea aceleiai nregistrri a unui
tabelsimultan
Lock la nivel de nregistrare chiar dac ar fi posibil un astfel de lock, nu se justific
overheadulncomparaiecubeneficiile.

Niveledeblocaresaulock
n plus fa de granularitatea sau dimensiunea datelor blocate, lockurile au proprietatea
denumitnivel.Nivelulunuilockdeterminstricteeacucareacestaesteaplicatidacunaltutilizator
poatesaccesezedatelenvreunfel.Niveleledelocksunt:

Versioning

Sharedunlockcomunfacecadatelespoatfivizualizate,darnuimodificate.Dac
un utilizator ruleaz un raport i datele din raport sunt modificate ntre timp,
interogareanuvaoferidateconsistente.
Exclusiveunlockdetipexclusivnupermitealtorutilizatorisvizualizezedatele.Dac
unutilizatoractualizeazpreurileunorproduse,aliutilizatorinupotefectuarapoarte
ceconinpreurileproduselor.
Deadlocks se pot ntmpla situaii n care utilizatorii ateapt reciproc s se
deblocheze lockurile celuilalt utilizator. n acest caz DBMS trebuie s identifice
deadlockulisaibostrategiederezolvareaproblemei.Pentruaevitaacestesituaii,
DBMS scaneaz periodic baza de date pentru identificarea deadlockurilor prin
verificarea tuturor lockurilor solicitatea de tranzacii. Dac se identific un deadlock,
DBMSalegealeatorotranzaciecarevafifinalizat.

Existioseriedemetodeavansatedeblocareadatelor.Acesteainclud:

blocare explicit un program poate bloca n mod explicit un tabel dac acesta va fi
accesatnmodrepetatdectreaplicaie
niveledeizolaresepoateforarestricionareaaccesuluilaanumitedatencadrulunei
tranzacii
parametrideblocareadministratorulbazeidedatepoateajustamanualdimensiunea
priiblocateialtiparametriailockuluipentruaoptimizaperformanele.

1.4.3

Setareaparametrilordeblocaresaulock
Lockurile afecteaz diverse operaii, iar utilizarea eficient a lockurilor este o problem
importantaoricruiDBMS.Astfelcaufostdefiniioseriedeparametriajustabiliailockurilor:

Dimensiunealockuluisereferlagranularitateaacestuia,ianumelaniveldebazde
date,tabel,paginsaunregistrare.
Numrul de lockuri reprezint numrul maxim de lockuri disponibile tuturor
tranzaciilor la un moment dat. Administratorul bazei de date trebuie s ajusteze
numruldelockuripentruapermitetranzaciifoartecomplexesauunnumrmarede
tranzacii. Pe de alt parte, acest numr trebuie limitat pentru a fora DBMS s nu
escaladezelockuripreauor,reducndastfelperformaneleBD.
Escaladare(escalation)procesuldesolicitarealockurilor,verificareaacestorafade
cererile de date de la ali utilizatori poate fi mare consumator de resurse. Pentru a
minimiza overheadul baza de date poate escalada o serie de lockuri. Escaladarea se
referlacapacitateabazeidedatedeaconsolidamaimultelockurilaacelainivelde
granularitatelaunsingurnivelsuperiordegranularitate.Deexemplu,dacotranzacie
se aplic asupra folosind sute de lockuri de tip nregistrare, DBMS poate decide s
blochezeaccesullapaginialetabeluluiinulantregtabelul.
Timeoutodatcucretereanumruluiiacomplexitiitranzaciilor,timpulnecesar
obinerii lockurilor poate crete de asemenea. Majoritatea DBMS au parametri ce
permit administratorilor s ntrerup procesul i s returneze o eroare referitoare la
timpuldeacces.

Lockurile pot fi optimiste sau pesimiste. Lockurile optimiste presupun c tranzaciile nu


interfereazunacualtaisepreferastfelstrategiimaipuinrestrictive.Lockurilepesimistepresupun
c tranzaciile sigur interfereaz i se aplic strategii mult mai restrictive. Lockurile funcioneaz bine
atunci cnd tranzaciile sunt de scurt durat. Dac acestea dureaz ore sau zile, se poate aplica o
metodalternativ,denumitversioning.

1.5

Versioning

Versioning este o metod alternativ la lock. Ideea este c n timpul modificrilor asupra
nregistrrilor, versiuni ale datelor sunt disponibile utilizatorilor. n loc s blocheze total un utilizator,
DBMSdecidedacaliutilizatoritrebuiesvadversiuneamodificatsaunemodificatadatelor.Pot

Capitolul9.Controlultranzaciilor.

chiarsexistectevaversiunidiferitealedatelor.DBMSinecontdeniveleledeizolarealediferitelor
tranzaciiifacedeciziiasupraversiuniidedatedisponibilfiecreitranzacii.
Lockurilesuntprinnaturalorrestrictiveilimiteazoperaiileconcurenteasupradatelor.Dac
o tranzacie are un lock de tip write asupra datelor i o alt tranzacie are un nivel de izolare
SERIALIZABLE, acea tranzacie nici nu poate accesa datele blocate i va fi oprit. ntrun sistem ce
utilizeazversioning,odatceprimatranzaciearealizatmodificrile,ceadeadouapoatesaibacces
la datele modificate sau nemodificate, astfel c cea dea doua tranzacie poate continua procesarea.
Bazelededatecuversioningpotnanumitecircumstanescreascnumruldetranzaciiconcurente.

1.6

Problemealetranzaciilormultiutilizator

Cnd doi sau mai muli utilizatori acceseaz n mod concurent o baz de date, tranzaciile se
complic.DBMStrebuiesrestaurezeerorileinacelaitimpsseasigurecaciunileunuiutilizator
nuinterfereazaciunileunuialtuia.nmodideal,fiecareutilizatortrebuiespoataccesabazadedate
caicumarfisingurulacceslamomentulrespectiv.PentruanelegemodulncareSQLmanageriaz
tranzaciileconcurenteestenevoiesseanalizezeproblemelecepotsapardactranzaciilenusunt
realizatecorect.
1.6.1

Problemaactualizriipierdute
S presupunem c doi angajai vor s introduc o comand simultan pentru acelai produs.
Primul confirm comanda i actualizeaz stocul, n acelai timp stocul este actualizat i de cel deal
doileaangajat,astfelcbaza dedateseva aflantrostareinconsistent,deoareceprimacomand a
fostsuprascris.Astfelcstoculnuvafidisponibilpentruambiiclienideicomenzileaufostaprobate.
1.6.2

Problemadatelornesalvate
Presupunem din nou c un angajat realizeaz o comand. El actualizeaz stocul pe baza
comenzii,nsntretimpclientuldoreteinformaiisuplimentaredespreproduse.nacelaitimp,unalt
angajat dorete s comande acelai produs ns stocul apare ca fiind insuficient i nu poate efectua
comanda.Primulclientnsserzgndeteiicomandasaesteanulat.Astfelniciunuldintreangajai
nu a efectuat o comand din stoc. Dac cel deal doilea angajat ar fi vzut stocul doar dup salvarea
datelorprimului,arfiexistattotuiocomandvalid.Problemaestedenumitidirtyreadnsensul
cdatelecititenucorespundrealitiibazeidedate.
1.6.3

Problemadatelorinconsistente
Revenim la comanda realizat de un angajat pentru un anumit produs. La scurt timp, un al
doilea angajat dorete s vad stocul disponibil pentru acelai produs, dar verific i un produs
alternativ. Primul angajat ntre timp realizeaz o comand pentru cel deal doilea produs, rmnnd
astfelunstocinsuficientpentrualdoileaangajat.Spredeosebiredeexemplulanterior,nacestabazade
dateesteconsistentlaniveldecompanie,nsnuesteconsistentlanivelulceluidealdoileaangajat.
Problema aceasta nu este semnificativ pentru o situaie de genul celei expuse anterior, ns de
exemplu dac am avea nevoie de statistici sau sume totale, nu putem fi siguri c rezultatele afiate
reflectostareconsistentabazeidedate.Aceastproblemestedenumitinonrepeatableread,
deoareceangajatulnupoateefectuaaceeaicitireisobinaceleairezultate.
1.6.4

Problemainserriifantom
PresupunemunexempluncareunmanagerrealizeazunraportasupratabeluluiComenzi,cu
listacomenzilorefectuatedeunanumitangajat,pentruadeterminasumatotaldeplat.ntretimpun
clientnouefectueazocomandlaacelaiangajat.Comandaesteinseratntabelitranzaciasalvat.
Managerulruleazacelairaportncodatigseteuntotalsazicemde10orimaimaredectcel
precedent.Cainexemplulanterior,problemaoreprezintdateleinconsistente.Bazadedatermne
un model exact al situaiei reale, dar interogarea efectuat n cadrul aceleiai tranzacii a determinat
dou rezultate diferite. Problemele anterioare puteau fi cauzate de un UPDATE sau un DELETE, ns
aceastaecauzatdeunINSERT.nregistrareaadiionalnuaparticipatlagenerareaprimuluiraport,dar
aparecaiunrndfantomnceldealdoilea.Problemamaiestedenumitphantom.

Niveledeizolareatranzaciilormultiutilizator

1.6.5

Tranzaciiconcurente
nexempleleanterioaresapututobservacatuncicndutilizatoriiauunaccescomunlabaza
de date, pot s apar inconsistene ale datelor. Pentru a evita aceste situaii, DBMS implementeaz
urmtorul mecanism: n timpul unei tranzacii, utilizatorul va avea acces i va vizualiza o form
consistent a bazei de date. Utilizatorul nu va avea acces la modificrile nesalvate. Acest mecanism
poatefireformulatastfel:DacdoutranzaciiAiB,suntexecutateconcurent,DBMSasigurfaptulc
rezultatelevorfiaceleaicaidac(a)TranzaciaAafostexecutatprima,urmatdetranzaciaB,sau
(b) Tranzacia B a fost prima, urmat de tranzacia A. Acest mecanism este cunoscut sub numele de
serializareatranzaciilor.Acestlucrunsnunseamncaunutilizatornutrebuiesincontdeceilali
utilizatori.Dincontrnseamnctranzaciiletrebuiesfiectmaiscurteimaisimpleposibil,pentrua
maximizaprocesareaparaleladatelor.Tranzaciilealtorutilizatorinupotafectatranzaciaunuia,pn
ce aceasta nu sa finalizat. De aceea este nevoie s se realizeze COMMIT dup fiecare instruciune
rulat.
n practic, implementarea unui model tranzacional multiutilizator poate determina scderea
semnificativaperformanelorbazeidedate.nplus,specificulaplicaieipoatesnunecesiteoizolare
total a utilizatorilor. De exemplu o aplicaie poate s nu permit recitirea datelor n cadrul aceleiai
tranzacii.Dacsepotdeterminascenariideacesttip,ncrcareapoatefiredus.

1.7

Niveledeizolareatranzaciilormultiutilizator

AnumiteDBMSpermitsetareaunorniveledeizolare,ceeacenseamncdetermingradulde
izolaredintreutilizatoriiaceleiaibazededateitranzaciilecarepotinterfera.Tranzaciileilockurile
au costuri asociate,ceeace nu permiteizolareapermanent a utilizatorilor. nso izolare insuficient
poateproduceproblemeprinafiareadatelorinconsistentesaucorupereadatelor.
SET TRANSACTION standardul SQL2 ofer o instruciune SET TRANSACTION care permite
specificareaniveluluideizolarepecaretranzacialvafolosi.Aceastinstruciunetrebuiesfieprima
dintrunsetdeinstruciunialeuneitranzaciiinupoatefimodificatnmijloculacesteia.Fiecarenivel
areavantajeidezavantaje.Pentruaspecificaunanumitnivel,sefolosete:
SET TRANSACTION ISOLATION LEVEL <ISOLATION LEVEL>
BEGIN TRANSACTION

Dacnusespecificunanumitnivel,valoareadefaultesteSERIALIZABLE.Celepatrunivelede
izolaresuntdescrisenceleceurmeaz:
SERIALIZABLE este maximum de izolare posibil. La acest nivel, DBMS garanteaz c
tranzaciileprocesateconcurentsuntrealizatecaicumarfiemisenserie.Acestaesteniveluldefaultal
standarduluiANSIiacestaestemodulncareutilizatoriiseasteaptcatranzaciilelorsfieprocesate.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION

Nu sunt permise actualizri, adugri sau tergeri asupra setului de nregistrri utilizat de
tranzacia utilizatorului. Tranzaciile SERIALIZABLE sunt utilizate cnd mai multe tranzacii pot s fie
realizateasupraaceluiaitabel.
REPEATABLEREADesteunnivelncareactualizrilerealizatedeunaltutilizatorasuprasetului
denregistrrialtranzacieinuestevizualizatdeutilizator.Suntpermisepedealtparteinserrilede
date.Cualtecuvinte,datelecititedetranzacienupotfimodificatesauterse,darnoinregistrripotfi
adugate.
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION

Ointerogarecereturneazmaimultenregistrrilanceputuluneitranzacii,poatesreturneze
nregistrriadiionalelasfritulacesteia.
READ COMMITTED asigur faptul c o tranzacie nu poate vizualiza tranzacii nesalvate ale
altorutilizatori.Aceastapermitepierdereaactualizriloriadatelornesalvate.
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

Capitolul9.Controlultranzaciilor.

BEGIN TRANSACTION

Cu toate acestea, orice tranzacii salvate ntre citiri, pot fi vizualizate. Un proces ce citete
aceeainregistrarededouoriarputeavedeadatemodificatelaadouacitire,deoareceunaltproces
arputeasalvaanumitemodificrintrecitiri.Dacunprocesncearcssalvezeactualizriasupraunor
dateactualizatedealtproces,ultimaactualizarevafianulatpentruanucorupedatele.
READ UNCOMMITTED orice actualizare realizat de o alt tranzacie afecteaz datele
tranzaciei curente. Aceasta genereaz cele mai multe tipuri de probleme. Cu toate acestea, DBMS
previneproblemaactualizrilorpierduteprinanulareamodificrilorceconduclaaceastproblem.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION

Instruciunea SET TRANSACTION permite de asemenea specificarea READ ONLY, ceea ce


nseamn c o tranzacie poate doar s citeasc date. Se poate specifica i READ WRITE, caz n care,
tranzacia va actualiza, modifica sau terge nregistrri. Specificarea READ WRITE permite DBMS s
optimizezetranzacia.

1.8

Concluzii

nacestcapitolaufostdescrisemecanismeledemanagementatranzaciiloroferitedelimbajul
SQL. O tranzacie este o unitate de lucru a unei baze de date SQL. Este alctuit dintro secven de
instruciuniSQLcesuntexecutatecaiosingurunitatedectreDBMS.
Instruciunile COMMIT i ROLLBACK controleaz modul de realizare a tranzaciilor. COMMIT
simbolieazncheiereacusuccesauneitranzacii,iarROLLBACKsolicitDBMSntrerupereatranzacieii
anulareamodificrilorrealizate.
Tranzaciilesuntcheiarecuperriiuneibazededatedupoeroaredesistem,doartranzaciile
salvate la momentul erorii rmn n baza de date recuperat. Tranzaciile sunt utilizate n special n
accesulmultiutilizatorconcurent.Unutilizatorsauoaplicaieseasigurctranzaciileefectuatenuvor
fiinterferatedealtetranzacii.
Deasemeneatranzaciileasigurfaptulcunutilizatorcedoretesmodificeanumitedatenu
vavedeadatelecetocmaisuntmodificate.Lockuriletranzacionaleblocheazseturidedatepentrua
realizamodificriasupraacestoraframodificadatelemodificateconcurentdeunaltutilizator.
Pentru a fi considerat o tranzacie, un set de instruciuni trebuie s respecte cerinele ACID:
atomicitate, consisten, izolare i durabilitate. DBMS utilizeaz aa numitele loguri sau jurnale de
tranzaciipentruadeterminamodificrilerealizateasuprabazeidedateidearecuperadatelelaerori
sausituaiineateptate.
Lockurilecontroleazaccesulladiferiteniveledeobiectealebazeidedate,delabazadedate
nsi pn la nregistrri. Nivelele de lock permit reducerea impactului acestora prin restricionarea
accesuluiutilizatorilorladate.
Nivelele de izolare ofer un mecanism solid de prevenire a problemelor de acces concurent
multiutilizator.
Peransamblunelegereatranzaciilorpermiteoptimizareaaccesuluilaresurselebazeidedate
prin folosirea diferitelor politici de control a accesului i prin minimizarea impactului aciunilor unui
utilizatorasupradateloraccesatedeunaltutilizator.

1.9

Testareacunotinelordobndite
1. Explicaipescurtceesteotranzacie.
2. Ce proprieti trebuie s ndeplineasc un set de instruciuni pentru a fi considerat o
tranzacie?
3. LaceserefermodelulANSI/ISOpentruotranzacie?

Glosar
4.
5.
6.
7.
8.
9.
10.
11.

12.

13.

14.

15.

CeaciunisepotefectuautilizndinstruciunileCOMMITiROLLBACK?
Ceesteunlock?icaresuntniveleledegranularitatealeacestora?
Caresuntparametriiunuilock?
Ceproblemerezolvversioning?
Caresuntproblemetranzaciilormultiutilizator?
Ceesteunniveldeizolareicaresuntprincipaleletipuri?
Explicaipescurtavantajeleidezavantajeletranzaciilorncadrulbazelordedate.
Pentru ca un grup de instruciuni s fie considerate o tranzacie, trebuie s ndeplineasc
urmtoarelecondiii:
a. Administrare,control,interdependen,dinamicitate
b. Atomicitate,consisten,izolare,durabilitate
c. Atomicitate,control,izolare,dinamicitate
d. Administrare,consisten,interdependen,durabilitate
InstruciunileSQLutilizatepentrucontrolultranzaciilorsunt:
a. GRANTiREVOKE
b. SELECTiGROUPBY
c. JOINiUNION
d. COMMITiROLLBACK
Granularitateaunuilocksereferla
a. dimensiuneastructuriiasupracreiaseaplicunlock
b. tipuldelock
c. numruldeinstruciunirealizatentrotranzacie
d. niveluldeizolareallockului
Unniveldeizolareauneitranzaciieste:
a. dimensiuneastructuriiasupracreiaseaplicunlock
b. cantitateaitipuldateloraccesibileutilizatorilorceefectueazunaccesconcurentla
bazadedate
c. metodalternativdelockcepstreazversiuniintermediarealedatelordintimpul
uneitranzacii
d. capacitatea bazei de date de a grupa mai multe lockuri de acelai nivel de
granularitatelaunsingurnivelsuperiordegranularitate
Versioningesteutilizatpentru:
a. metod alternativ la lock, n care exist mai multe versiuni ale bazei de date
disponibilutilizatorilornfunciedetranzaciileefectuatedeacetia
b. capacitatea bazei de date de a grupa mai multe lockuri de acelai nivel de
granularitatelaunsingurnivelsuperiordegranularitate
c. cantitateaitipuldateloraccesibileutilizatorilorceefectueazunaccesconcurentla
bazadedate
d. determin stricteea cu care un lock este aplicat i dac un alt utilizator poate s
accesezedateleblocate

1.10 Glosar
deadlock doulockuriateaptreciprocdeblocareadatelorutilizatedecellalt.Nici
otranzacienuestefinalizat
escaladare capacitateabazeidedatedeagrupamaimultelockurideacelainivelde
granularitatelaunsingurnivelsuperiordegranularitate
granularitatea dimensiuneadatelorasupracroraesteaplicatunlock
unuilock
lock mecanisme ale serverului de baze de date utilizate pentru controlul
accesuluisimultanlaresurselededatemodeluldeformatalunuiobiect
lockexclusive nu permite altor utilizatori s vizualizeze datele. Dac un utilizator

Capitolul9.Controlultranzaciilor.

(exclusiv) actualizeazpreurileunorproduse,aliutilizatorinupotefectuarapoarte
ceconinpreurileproduselor.
lockshared datelepotfivizualizate,darnuimodificate.Dacunutilizatorruleazun
(comun raport i datele din raport sunt modificate ntre timp, interogarea nu va
oferidateconsistente.
niveldeizolare cantitatea i tipul datelor accesibile utilizatorilor ce efectueaz un acces
concurentlabazadedate
tranzacie osecvendeunasaumaimulteinstruciuniSQLcarempreunformeaz
ounitatedelucru
versioning metod alternativ la lock, n care exist mai multe versiuni ale bazei de
datedisponibilutilizatorilornfunciedetranzaciileefectuatedeacetia

1.11 Bibliografie
R.Sheldon,SQLAbeginersguide,McGrawHill,2003
M.Donahoo,G.Speegle,SQLPracticalguidefordevelopers,Elsevier,2005
J.Viescas,M.Hernandez,Sqlqueriesformeremortals,2ndEdition,AddisonWesley,2008
A.Beaulieu,LearningSQL,2ndEdition,O'Reilly,2009
P.Wilton,J.Colby,BeginningSQL,WileyPublishing,2005

Capitolul10.Interoperabilitateabazelordedate

nacestcapitolveinva:

Cuvintecheie:

Cereprezintinteroperabilitateabazelordedate
Caresuntproblemeledeinteroperabilitate
Caresuntsoluiiledeinteroperabilitate
CereprezintODBC
CereprezintSQLupleveling

interoperabilitate BD, ODBC, SQL upleveling, clauze escape, manager


ODBC

Cuprins
Capitolul10.Interoperabilitateabazelordedate...........................................................................1
1.1 Interoperabilitateabazelordedate.................................................................................2
1.2 OpenDatabaseConnectivity(ODBC)...............................................................................4
1.2.1 ImplementriODBC....................................................................................................5
1.3 SQLupleveling.................................................................................................................5
1.3.1 Tipuldedatedatitimp............................................................................................6
1.3.2 OUTERJOIN.................................................................................................................6
1.3.3 Funciiscalare..............................................................................................................7
1.3.4 Rulareaprocedurilorstocate.......................................................................................7
1.3.5 CoreciiledinamicealeinstruciunilorSQL.................................................................7
1.3.6 ConversiilelavaloriNULLiirdecaracterededimensiunezero..............................7
1.3.7 Suportulpentruinserareairurilordecaracterededimensiunemare......................8
1.4
1.5
1.6

Testareacunotinelordobndite....................................................................................8
Glosar...............................................................................................................................8
Bibliografie.......................................................................................................................9

Interoperabilitateabazelordedate

1.1

Interoperabilitateabazelordedate

Interoperabilitatea bazelor de date reprezint metoda de definire a datelor i a interogrilor


uneibazededatepentruaputeafiutilizateideutilizatoriiunuialtsistemcubazededate.Reprezint
unmodstandardizatdedefinireadateloriainterogriloruneibazededatenvedereaaccesuluiunitar
la resursele acesteia. Interoperabilitatea bazelor de date este o problem parial rezolvat n diverse
sisteme sau cu anumite constrngeri. Un model sau sistem pe scar larg care s permit
interoperabilitatea tuturor sistemelor cu baze de date nu exist. Vom prezenta ns dou metode de
interoperabilitatecerezolvparialaceastproblem.
Sedisting3nivelediferitedeincompatibilitateasistemelorcubazededate:

Nivelulfizicsuportulfizicalbazelordedatepoatesdifere,deexemplu
Nivelul de management fiecare DBA alege o soluie preferat de management, deci
implicitunDBMSdiferit
Nivelul semantic exist mai multe limbaje de programare pentru bazele de date, iar
incompatibilitiledintreacesteadeterminoproblemdeinteroperabilitate.

Cerinele interoperabilitii se refer n primul rnd la date. Datele din dou baze de date
trebuiesaibaaceeaiexpresivitate.Aceastanseamncmodeluldedatealbazei1trebuiespoatfi
transcrisechivalentnmodelulbazei2,saucualtecuvintetotalitateacaracteristicilorcepotfidescrise
folosind modelul 1 s poat fi descrise n mod egal de modelul 2. O a doua cerin o reprezint
interoperabilitatea interogrilor. Aceast cerin implic faptul ca posibilitile de interogare ale bazei
dedate1spoatficopiatedeposibilitilebazei2.
Soluii ale acestor probleme sunt oferite de anumite DBMS prin permiterea portrii bazei de
date pentru suport pe alt platform. O alt soluie de obinere a interoperabilitii bazelor de date
eterogene este utilizarea unui sistem multibaz de date (MDBS). Un MDBS este este un sistem ce
reziddeasupraunuiDBMSexistentitransformoperaiileidatelebazeidedatentrunformatunitar
global,astfelnctutilizatoriisnufieafectaidemodeluldedatesausoluiaDBMSaleas.Orestricie
aMDBSestefaptulcnupotmanageriadatecenuauunDBMSasociat.
Introducerea tehnologiilor orientate (OO) pe obiecte au nlturat ns aceast restricie.
TehnologiileOOalturidecapacitilelordencapsulareiabstractizare,permitdezvoltareaunorsoluii
cuinterfeesimilareDBMS.nacelaitimp,deoarecesistemeleinteropereazntrunmediudistribuit,
capacitile i funcionalitile platformei de management a obiectelor distribuite au fost luate n
considerare. Dac se folosete o arhitectur de tip Distributed Object Management (DOM), se poate
oferiinteroperabilitateacualtesistemecenuauataatunDBMS.
Sedifereniazoseriedesoluiidiferitepentruasigurareainteroperabilitii:
1. Soluiibazatepestandarde
naceastcategoriese ncadreazOpenDatabase Connectivity(ODBC)i RemoteDataAccess
(RDA).ODBCdelaMicrosoftesteunadintreprimeleimplementrialestandarduluiSQLAccessGroup
(SAG)CallLevelInterface(CLI).ODBCdefineteointerfastandardizatpentruconectarelaDBMS.Pe
dealtparte,RDAdefineteformatuldetransmitereainterogrilorlaDBMSimodulderecepionarea
datelor. Dei sa ncercat introducerea acestui standard, sunt puine DBMS care ofer suport pentru
acesta. Soluia preferat de productori este ODBC i care ofer suport in diverse limbaje de
programare,cumarfiJava,CsauC++.
2. Soluiiproprietare
OseriedeproductorideDBMSimplementeazinterfeecefaciliteazinteroperabilitateadar
nuoferosoluiedeuzgeneral.Decelemaimulteoriacesteapermitmigrareantredou,maximtrei
DBMS diferite. Dintre acestea se evideniaz Oracle Federal tool sau Oracle PLEX pentru integrarea
datelordintrunsistemSybase.
3. Soluiigateway

Capitolul10.Interoperabilitateabazelordedate

AcesttipdesoluiifacotransformareaschemeiSQLdelaunDBMSntroschemechivalenta
unuialtDBMS,oferindutilizatoruluimetodetransparentedeacceslasursededatestrine.Exemplual
acesteicategoriiesteSybaseOmniSQL.
4. Soluiidereplicare
Replicarea permite actualizarea automat a bazelor de date aflate la distan pe baza
modificrilorrealizateasuprauneialtebazededatesurs.Exemplu:PRAXISOmniReplicator.
Pentru a permite ns o interoperabilitate mai uoar a bazelor de date se impun o serie de
constrngeri,datoriturmtoareloraspecte:

Traducereacorectadatelor
Traducereafacilainterogrilor
Siguranicomplexitate.

nmultedomenii,interoperabilitateaafostobinutprincreareaunorstandardedetransfera
datelor care sghidezeutilizatorii iproductorii n devoltareaiimplementarea de aplicaii. n 2002,
Alliance of Information and Refferal Systems (AIRS) a aprobat un standard ce utilizeaz o tehnologie
denumitXML(ExtensibleMarkupLanguage).XMLesteunformatdefiierbazatpetagurisauetichete
carepermitutilizatorilorcreareapropriilorstandardeprivindmodulncareinformaiaestecategorizat
printrun document sau o baz de date. Spre deosebire de HTML (HyperText Markup Language) care
utilizeaz convenii specifice ale tagurilor, XML creaz propriile etichete i definiii. Dicionarul i
gramaticauneiorganizaiiprivindtagurileXMLestedenumitschemaXML.Aceastschemdefinete
informaiilecevorfiincluseidescrierileacestora.n2005,AIRSaelaboratunnoustandardceaduceo
seriedembuntirilastandarduloriginaliestedenumitAIRSXML2.00.nsaceststandardnuasigur
interoperabilitateatuturorsoluiilordemanagementadatelor.
Bazelededaterelaionalepromiteauometoduniversalneleasdeorganizareainformaiei.
Deasemenea nu se utilizeaz informaiidenavigaie saupointeri n cadrul bazei de date.Datele sunt
normalizate, iar actualizrile datelor nu compromit integritatea bazei de date. n plus, sistemele
relaionale include un limbaj standardizat, matematic corect, de definire i manipulare a datelor. n
teorie,dateleporfitransferatedelaunDBMSlaaltulfrprobleme.Dezvoltareamodeluluirelaionala
avutlocconcomitentcudezvoltareaaplicaiilordetipclientserver.Multecompaniiauaplicatmodelul
relaional n aplicaiile lor, ns proliferarea soluiilor DBMS au condus la proliferarea aplicaiilor ce
utilizeazDBMSdiferite.nziuadeazi,companiiletrebuiesoferesuportpentruprogrameeBusiness,
ceeacenseamncdateletrebuietransformateneDataiacestlucruimplicmigrareadatelordela
un DBMS la altul. De exemplu, DB2 permite crearea unui sistem de producie, pe cnd Oracle este
utilizat pentru Enterprise Resource Planning (ERP), iar SQL Server pentru o baz de date accesibil
online.BazadedateonlinepoatefiderivatdinsistemeleDB2iOracle,iaractualizrileacesteiatrebuie
sfiepropagatenapoinsistemeledebaz.
Chiardacmodeluldedaterelaionalesteunulsimplu,nuesteuorsmigrezidateledelaun
RDBMSlaaltul.Principaleleproblemesunt:

Modele de date complexe majoritatea bazelor de date au sute sau mii de tabele.
Relaiile dintre aceste tabele sunt multiple i sunt manageriate din cadrul aplicaiilor.
Creareaunuisubsetintactdinpunctdevederereferenialalacestorbazededateesteo
problemimportantauneicompanii,iartransferulntreaplicaiipoateaveadesuferit.
DiferenelelimbajuluiSQLchiardacSQLancercatsstandardizezeaccesullabazele
dedaterelaionale,diferiiiproductorideDBMSnuauimplementatSQLnacelaifel.
DifereneletipurilordedatefiecareDBMSoferogamdetipuridedate.Coloanele
pot fi numerice, de tip caracter, dat amd. Cu toate acestea, fiecare productor a
implementattipurilededatediferit.Precizianumericsaumetodelederotunjirepots
difere.UneoriunDBMSnuareuntipechivalentdetipdedateoferitdeunaltDBMS.La
transferuldatelor,potsaparerori.

TransferuldedatentredouDBMSestedefinitntreimoduri:

OpenDatabaseConnectivity(ODBC)

OmogenextragereadatelordinDBMSAiinserareaacestoranDBMSA
EterogenextragereadatelordinDBMSAiinserareaacestoranDBMSB
FederatextragereadatelordinDBMSAiBiinserarealornDBMSC

n ceea ce privete limbajul SQL, se difereniaz urmtoarele cteva aspecte ale diferitelor
DBMS:

Oracle nu permite utilizatorilor s disting ntre valori NULL i iruri de caractere de


dimensiunezero.
DB2ofersuportpentrufraciunidesecundpnla6zecimale,iarSQLServerajunge
la1/300fraciunidesecund.
OraclenupermitevaloriNULLncmpuridetipcaracter.
Sybaseaintrodustipuridedateadiionaleceincludevalut,valutmicibit.

n cele ce urmeaz vor fi prezentate dou metode de obinere a interoperabilitii bazelor de


date. Prima, ODBC, este un standard de interoperabilitate a bazelor de date. Este implementat ca un
driver de transfer. Cea dea doua, SQL uplevelingserefer la scrierea instruciunilorSQL, astfel nct
acesteaspoatfirulatepemaimultetipuridedate.

1.2

OpenDatabaseConnectivity(ODBC)

OpenDatabaseConnectivity(ODBC)esteointerfastrategicdelaMicrosoftpentruaccesarea
datelor ntrun mediu eterogen a sistemelor de management al bazelor de date relaionale i non
relaionale.BazatpespecificaiileCallLevelInterfacealeSQLAccessGroup,ODBCoferunmodneutru,
independentdeproductordeaccesladatelestocatentrovarietatedebazededate.
ODBC este un standard pentru accesarea DBMS. Dezvoltatorii ODBC au dorit sl fac
independentdelimbajuldeprogramare,bazadedatesausistemuldeoperare.ODBCrealizeazacest
lucruprinutilizareaunuidriverODBCcaiunniveldetraducerentreaplicaieiDBMS.Aplicaiatrebuie
scunoascdoarsintaxaODBC,iardriverultransferinterogareanformatulnativDBMSireturneaz
rezultatenformatulnelesdeaplicaie.ODBCnlturnecesitateadezvoltatorilordeanvamultiple
DBMS i ofer acces universal la date. Se pot astfel realiza aplicaii cu acces concurent, vizualizare i
modificareamultiplebazededate.
ODBCesteocomponentdebazaMicrosoftWindowsOpenServicesArchitectureipermite
dezvoltatorilorscreeze:

Oaplicaieclientsaufrontendpentruutilizatoriifinali
UndriverODBCsaubackend,sauserverDBMS.Aceastaplicaierezidpeuncalculator
pentru a stoca date accesate de mai muli utilizatori. Aplicaie server este mult mai
robust, mai rapid i cu securitate centralizat dect cea client. Driverul ODBC este
intrapusntreDBMSiaplicaiaclient.OriceclientODBCpoateaccesaoriceDBMSdac
este definit driverul ODBC. De exemplu SQL Server, Oracle, Foxpro sau Microsoft
Access. Driverele ODBC sunt similare cu ADO.NET Data providers, drivere JDBC (Java
DatabaseConnectivity)sauprovideriOLDDB.

ClientulODBCfoloseteunlimbajsauvocabulardecomenzipentruasolicitasautransmitedate
laserverulDBMS.DBMSprimetesolicitriledupceacesteaaufostinterpretatededriverulODBC.n
modsimilarsuntinterpretaterspunsurileDBMSctreclient.
AvantajeleODBCserefer la faptul c dezvoltatorii nu trebuie smodificeaplicaiilepentrua
permite accesul la diferite date din backend. Atta timp ct exist un driver ODBC pentru o aplicaie
particular,unclientODBCo poate accesa.n aldoilea rnd un driver ODBC pentru un anumit DBMS
permiteoriceaplicaieODBCsdevinclient.Exemplededriveresunt:

AccesscuOracleOracleODBCDriver
VisualBasiccudBaseMSODBCDatabaseDriversPack

Capitolul10.Interoperabilitateabazelordedate

AplicaiiCcuAS/400AS/400ODBCDriver

PrincipalelecomponentealeODBCsunt:aplicaia;managerulODBC;driverulODBCisurselede
date (baza de date). Centralizarea componentelor este fcut de managerul ODBC, acesta selectnd
driverulnecesaroperaiunii.Interaciuneaesterealizatastfel:
AplicaieclientMangerODBCDriverODBCBazadedate
ncontextulODBCsefolosescoseriedetermenispecifici:
Mediul este contextul n care sunt accesate datele. Conine informaii ce se aplic ntregii
sesiuniODBCprecumconectori.TrebuiesseobinunhandlelamediunaintedeautilizaODBC.
Conexiunea specific driverul ODBC i sursa de date (baza de date). Pot s existe mai multe
conexiuniladiferitebazededatencadrulaceluiaimediu.
InstruciuneaesteoliniedecodSQLcetrebuieexecutat.

1.2.1

ImplementriODBC
ImplementrileODBCruleazpemultiplesistemedeoperare,Windows,Linux,Unix,OS/2,IBM
sau Mac OS X i includ drivere pentru DBMS de tipul Oracle, DB2, SQL Server, Sybase, Pervasive SQL,
PostgreSQLsauaplicaiiprecumAccesssauFileMaker.

iODBCIndependentOpenDatabaseConnectivitysoluieopensourcepentrualteOSdect
Windows
IBMi5/OSesteimplementareaIBMaODBC.
UnixODBCcelmaicomunmanageraldriverulpentruplatformenonWindows.Multeproiecte
opensourcelfolosesc.
UDBC fuziune ntre ODBC i SAG CLI, o versiune mai veche a Unix ODBC i premergtorul
iODBC.
ODBCpoateinteracionaicucellaltesoluiideaccesliberladate,JDBCiOLEDB.Existsoluii
bidirecionale de interaciune pentru situaiile n care ODBC nu poate ndeplini o anumit sarcin sau
estenevoiedeointeraciunemaicomplexderedirectareasolicitrilor.

1.3

SQLupleveling

SQLuplevelingoferposibilitateascrierii instruciunilorSQLce pot fi executatepe mai multe


bazededate,independentdeimplementareaSQLarespectiveibazededate.Deexempluointerogare
SQL scris n Oracle, va putea fi rulat i n MS SQL Server. Toi productorii de soluii DBMS
implementeaz anumite funcionaliti ntrun format proprietar. Diferenele funcionale din cadrul
standarduluiANSISQLsereferlaurmtoarelecategorii:

Reprezentareadateiiatimpului
SintaxaOUTERJOIN
Sintaxafunciilorscalare
Metodadeinvocareaprocedurilorstocate
CoreciiledinamicealeinstruciunilorSQL
ConversiilelavaloriNULLiirdecaracterededimensiunezero
Suportulpentruinserareairurilordecaracterededimensiunemare

Aceste soluii proprietare au impact asupra interoperabilitii oferite de standardele de acces


liberladate1.Adoptareastandardeloropenaupermiscompaniilorsreduccheltuielilecucheltuielile
referitoare la gradul ridicat de interoperabilitate a bazelor de date. DataDirect Technologies a oferit

Opendataaccessstandards

SQLupleveling

soluiadenumitSQLuplevelingicarenlturproblemelelegatedeDBMSfolositncadrulcompaniei.
ncadrulODBC,SQLuplevelingesteoferitncadrulclauzelorescape.
Pentru a putea susine o gam larg de limbaje de programare i DBMS, se propune
introducereaunorextinderialeSQL.Acesteextinderi,denumiteiclauzeescape.Fiecareproductorde
bazededateimplementeazacesteextinderintrunmodproprietar.Sintaxaescapeoferomodalitate
deutilizareaacestorcaracteristicintrunmodcomun,standardizat,independentdebazadedate.Cu
ajutorul acestorclauze escape, drivereleODBC i JDBC,precumiDataDirectADO.NETpot s scaneze
instruciunileSQLpentruosintaxcenecesitoprocesarespecialpentruafineleasdebazadedate.
ClauzeleescapesuntalctuitedinacoladecencadreazinstruciuneaSQLiunulsaudoucaracterede
identificareaclauzei.Driverulsauprovideruldedatetransformacesteclauzentrosintaxacceptat
de baza de date. Aceast modalitate ofer cel mai ridicat grad de interoperabilitate i utilizabilitate a
instruciunilorSQLnaplicaii,indiferentdebazadedate.
1.3.1

Tipuldedatedatitimp
ToatebazelededateofersuportpentrutipurileDATE,TIME,TIMESTAMPsauDATETIME,ns
n mod diferit. De exemplu formatul Oracle este mm dd, yyyy, pe cnd n DB2 este yyyymmdd.
Diferitele implementri pot fi problematice pentru dezvoltatorii de baze de date multiple. Clauzele
escapeimplementeazdefiniiastandardSQLpentrutipuldedateDATE,careesteyyyymmdd.Pentru
autilizatipulDATE,sevascrieclauzaescape:
{d 'yyyy-mm-dd'}

Deexempludacdorimsdeterminmangajaiicareaufostangajaipe11sau15octombrie
2010,vomscrie:
SELECT EmpName, HireDate
FROM Emp
WHERE HireDate = {d '2003-10-11'}
OR HireDate = {d '2003-10-15'}

DriverulDataDirectpentruOraclevatransformasintaxan:
SELECT EmpName, HireDate
FROM Emp
WHERE HireDate = 'Oct 11, 2003'
OR HireDate = 'Oct 15, 2003'

IarpentruSQLServern:
SELECT EmpName, HireDate
FROM Emp
WHERE HireDate = '10-11-2003'
OR HireDate = '10-15-2003'

Clauzele escape pentru TIME i TIMESTAMP folosesc formatul SQL standard, mpreun cu
literaliitsauts.AstfelcclauzaTIMEdevine
{t 'hh:mm:ss'}

IarTIMESTAMP:
{ts 'yyyy-mm-dd hh:mm:ss'}

ProduseleDataDirectimplementeazacestesintaxeescapepentruDATEiTIMEnacelaimod
pentru toate APIurile2 de acces la date. Aceasta nseamn c dezvoltatorii pot utiliza aceai sintax
pentrutoatetipuriledebazededate,precumipentruODBC,JDBCsauADO.NET.
1.3.2

OUTERJOIN
OUTER JOINurile ofer o modalitate eficient de extragere a nregistrrilor corelate din dou
tabele.Acesteasuntimplementatencadrulclauzelorescapesubforma:
{oj table1 LEFT|RIGHT|FULL OUTER JOIN table2 ON search condition}

PentruoscrieointerogarececonineunOUTERJOIN,sevafolosi:
SELECT emp.EmpName, office.City

ApplicationProgrammingInterface

Capitolul10.Interoperabilitateabazelordedate

FROM {oj emp LEFT OUTER JOIN office ON emp.EmpId =office.EmpId}


WHERE emp.City = 'Raleigh'

CevafitranspuspentruOraclen:
SELECT emp.EmpName, office.City
FROM cust, ord
WHERE emp.EmpId =office.EmpID (+) AND emp.City = 'Raleigh'

IarpentruSQLServer:
SELECT emp.EmpName, office.City
FROM emp, office
WHERE emp.EmpId *= office.EmpId AND office.city = 'Raleigh'

1.3.3

Funciiscalare
Funciilescalareopereazpeosingurvaloare,spredeosebiredefunciileagregatceopereaz
peseturi devalori.Principaleletipuride funciiscalare sunt:numerice,detipcaracter,timpidat i
sistem. Produsele DataDirect implementeaz aceste funcii ntro manier unitar pentru reutilizarea
bazeidedate.

Funciilenumericedeterminvalorimatematicedetipulsinus,cosinus,rdcinptrat,modul
saulogaritm.Toateacesteapotfiapelatefolosindliteralulfnnaintededenumireaacesteia,subforma:
SELECT {fn SQRT(c_squared)}
FROM table1 WHERE shape='triangle' AND type='isosceles'

Funciilepentruiruriledecaracterereturneazunsegmentaliruluisaumodificrialeirului
decaractere. Dintre acestea amintim, UCASE, LCASE,RTRIM,LENGTH sauSUBSTRING.Apelarea lor se
faceastfel:
SELECT {fn UCASE(LastName)} FROM emp WHERE office = 'Raleigh'

FunciileTIMEiDATEsuntrulatenmodsimilar:
SELECT date,{fn DAYNAME(date)} FROM orders WHERE customer='Progress'

1.3.4

Rulareaprocedurilorstocate
Procedurile stocate sunt secvene de cod ce maximizeaz performanele accesului la baza de
date prin integrarea anumitor aciuni sub forma unor proceduri cu parametri de intrare i de ieire.
Pentruaapelaoprocedurstocat,programatoriipotscrieoclauzescapedetipul:
{call procedure_name (?,?)}

Unde? este parametrul procedurii stocate. ?este utilizat de toate bazele dedate iAPIurile,
permindinvocareacoduluiproceduriiindiferentdesoluiaaleas.
1.3.5

CoreciiledinamicealeinstruciunilorSQL
AnumitebazededatenecesitunformatspecificalinstruciunilorSQLceocupmaimultdeun
rndnfiier.Unexempluestecaracterulnewline,carenuesterecunoscutdeDB2,astfelcsevor
genera erori la transferul ctre alte soluii. Produsele DataDirect pentru DB2 nlocuiesc automat
caracterulnewlinecuspaii.Acestlucrunuimplicnicioaciunedinparteadezvoltatorilor.
1.3.6

ConversiilelavaloriNULLiirdecaracterededimensiunezero
ncadrulinstruciunilorSQL,iruriledecaracterenulesaudedimensiunezerosuntdemarcate
de ghilimele ( ). Oracle ns utilizeaz apostrof ( ) pentru demarcarea acestor date. DataDirect
realizeaz conversia automat a acestor caractere. Dac un dezvoltator utilizeaz urmtoarea sintax
ntroaplicaieOracle:
INSERT INTO emp (FirstName, LastName, VacationDays)
VALUES ('Tom', 'Smith', '' )

AceastavafimodificatpentruSQLServern:
INSERT INTO emp (FirstName, LastName, VacationDays)
VALUES (Tom, Smith, )

ValorileNULLnupotfimodificatedeoperatoriitrebuieinclusencondiiidetipulISNULLsau
IS NOT NULL. Aceasta asigur inserarea valorilor corecte n baza de date i posibilitatea aplicrii
operatorilorlogici.

Testareacunotinelordobndite

1.3.7

Suportulpentruinserareairurilordecaracterededimensiunemare
Unelebazededatelimiteazdimensiuneamaximairurilordecaracterecepotfiinserate.De
exempluSybasearuncoexcepiedacunutilizatorncearcsintroducunirdecaracteremailung
de 2000 de caractere. Pentru a nu se ntmpla acest lucru, dezvoltatorul trebuie s verifice lungimea
irurilordecaractere.DataDirecttrateazaceastexcepieipermiteinserareairuluidecaractereca
unparametrunmoddinamic.

nconcluzie,multeorganizaiiauadoptatstandardedeaccesladateliber,precumODBC,JDBC
sauADO.NETpentruaobineportabilitateaiasporiproductivitateadezvoltatorilor.Cutoateacestea,
standardul SQL nu este portabil ntre diferite soluii ale productorilor. DataDirect ofer
interoperabilitea necesar prino implementare consistent a SQL upleveling. Dezvoltatorii pot scrie
instruciuniSQLceauungradridicatdeportabilitatentrebazelededatemajoreiaccesulladateprin
APIuri.Productivitateadezvoltatorilorestecrescut,iartimpuldeexecuieimentenanesteredus.

1.4

Testareacunotinelordobndite
1.
2.
3.
4.
5.
6.
7.
8.

Lacesereferinteroperabilitateabazelordedate?
Caresuntproblemelececauzeazlipsainteroperabilitii?
Caresuntsoluiileviabiledeinteroperabilitate?
DescrieipescurtmetodadeoperareaODBC.
CeesteundriverODBC?Daiexemple.
LacesereferSQLupleveling?
CaresuntpunctelesintaxeiSQLatinsedeSQLupleveling?
Interoperabilitateabazelordedatereprezint:
a. Ometoddeproiectareabazeidedatepentruaputeafiutilizatinalteaplicaii
b. Ometoddedefinireadateloriainterogriloruneibazededatepentruaputeafi
utilizateideutilizatoriiunuialtsistemcubazededate
c. Posibilitatea scrierii instruciunilor SQL ce pot fi executate pe mai multe baze de
date,independentdeimplementareaSQLarespectiveibazededate
d. CreareaunoraplicaiiceutilizeazmaimulteDBMSsimultan
9. Niveleledeincompatibilitateasistemelorcubazededatesunt:
a. Fizic,managementisemantic
b. Administrare,interogare,definire
c. Conceptual,logicifizic
d. Semantic,administrare,conceptual
10. ODBCesteunstandardpentru:
a. Definireadateloruneibazededate
b. AccesareaDBMSdiferite
c. Autentificareautilizatoriloruneibazededate
d. ControlulrolurilorutilizatorilorntrunDBMS
11. SQLuplevelingsereferla:
a. Posibilitatea scrierii instruciunilor SQL ce pot fi executate pe mai multe baze de
date,independentdeimplementareaSQLarespectiveibazededate.
b. Capacitatea bazei de date de a grupa mai multe lockuri de acelai nivel de
granularitatelaunsingurnivelsuperiordegranularitate
c. Metod alternativ la lock, n care exist mai multe versiuni ale bazei de date
disponibilutilizatorilornfunciedetranzaciileefectuatedeacetia
d. Cantitateaitipuldateloraccesibileutilizatorilorceefectueazunaccesconcurentla
bazadedate

1.5

Glosar
interoperabilitatea metode de transfer a datelor unei baze de date ntre diferite soluii

Capitolul10.Interoperabilitateabazelordedate

BD proprietareDBMSsauaplicaii
ODBC OpenDatabaseConnectivity
SQLupleveling metod de scriere a instruciunilor SQL pentru a putea fi executate n
diverseDBMS
transfereterogen transferuldatelordelaunDBMSlaaltul
transferfederat transferuldatelordincadrulmaimultorsoluiiDBMSctreonousoluie
DBMS
transferomogen transferuldatelorncadrulaceluiaitipdeDBMS

1.6

Bibliografie

J.Goodson,R.Stewart,TheDataAccessHandbook:AchievingOptimalDatabaseApplicationPerformance
andScalability,PearsonEducation,2009
N.Shank,DatabaseInteroperability:TechnologyandProcessforSharingResourceInformation,The
JournaloftheAllianceofInformationandReferralSystems,2004
DatabaseInteroperability:EliminatingDBMSBarriers,whitepaper,2000,PrincetonSoftech
P.Revesz,Introductiontodatabses:frombiologicaltospatiotemporal,SpringerLink,2010
R.Stephens,R.Piew,DatabaseDesign,SAMS,2001
T.Connoly,C.Begg,DatabaseSolutions,Pearson,2004
http://www.datadirect.com/resources/all/sqlupleveling/

Capitolul11.FundamentealeprogramriiVBA(I)

nacestcapitolveinva:

Cuvintecheie:

Ceesteunmacro
CumpoatefiutilizatunmacronAccess
CeesteVBA
CaresuntoperatoriiVBA
CumsedefinescvariabilelenVBA
Cesuntinstruciunilecondiionale
CaresunttipuriledeprocedurinVBA
Cumsepotscriesubproceduriifuncii

macro, VBA, operatori, variabile, constante, instruciuni condiionale,


subproceduriifuncii

Cuprins
Capitolul11.FundamentealeprogramriiVBA(I).........................................................................1
1.1 MacrourinAccess..........................................................................................................2
1.2 ProgramareaVBA.............................................................................................................5
1.2.1 EditorulVBAnAccess.................................................................................................5
1.2.2 CuvintecheienVBA...................................................................................................6
1.2.3 OperatoriVBA.............................................................................................................6
1.2.4 Variabile......................................................................................................................7
1.2.5 AltecomponenteVBA.................................................................................................8
1.2.6 Instruciunicondiionale.............................................................................................9
1.2.7 SubproceduriifunciinVBA...................................................................................11
1.3
1.4
1.5

Testareacunotinelordobndite..................................................................................14
Glosar.............................................................................................................................15
Bibliografie.....................................................................................................................15

MacrourinAccess

1.1

MacrourinAccess

Un macro este un program miniatural creat i stocat n baza de date. Pot s varieze de la
comenziceafieazunformlaunulceverificstoculdeproduseiprinteazautomatunraportatunci
cndunprodusesteepuizat.
FadeuncodVisualBasic(VB),macrourileauavantajulsecuritiideoareceAccesscunoate
aciunile acestora. Chiar dac cu ajutorul codului VB se pot obine rezultate mult mai spectaculoase,
este necesar cunoaterea utilizrii macrourilor. Acestea au fost deja folosite n momentul n care n
cadrulformurilorsauarapoarteloramcreatbutoanecuaciunispecifice.
Pentruacreaunmacro,vomselectadinmeniulCreate,opiuneaMacro.Fereastraceapareeste
denumitconstructordemacrouri.Oricemacroestealctuitdintrosecvendeaciuni.Acesteapotfi
adugatedinlistaoferit,ActionCatalog.

Fiecareaciunepoatefiselectatdinlistaoferit.Deexemplu,vomdoriscremunmacrocare
deschidetabelulEmployeesiafieaznregistrareacuIDul5.Pentruaceastavomselectadinlistade
aciuni, opiunea OpenTable n care vom introduce datele referitoare la tabelul care ne intereseaz i
anumeEmployees:

Capitolul11.FundamentealeprogramriiVBA(I)

IarurmtoareaaciunevafidetipulGoToRecordivomspecificafiltrareadupIDul5:

nurmarulriimacroului,vafiselectatnregistrareacuIDul5dintabelulEmployees:

Anumite aciuni ale macrourilor depind de aciuni anterioare, precum cea anterioar, care
presupune c avem deja deschis tabelul Employees. Rularea macrourilor poate fi fcut cu ajutorul
butonuluiRun,poatefiatribuituneianumitecombinaiidetaste,poatefirulatautomatladeschiderea
uneibazededatesaupoatefiataatunuiform.
Odatmacroulsalvat,acestavaaparenlistaAllAccessObjects/MacrosaNavigationPane:

MacrourinAccess

Editareaunuimacropresupuneschimbareaaciunilorsauaparametriloracestora,reordonarea
aciunilor,tergereasauadugareaunornoiaciuni.Aceastasepoaterealizaprindeschidereamacro
uluiimodificareanmodcorespunztoraacestuia.Sepotadugadeasemeneacomentariicuajutorul
aciuniiCommentdinlistaAddNewAction.
Erorile ce pot s apar la rularea macrourilor se mpart n dou, cele aprute la crearea unui
macro i cele de utilizarea ale unui macro ntrun context greit. Cea dea doua categorie este mai
complicat deoarece sar putea de exemplu ca nregistrarea solicitat s nu existe n tabelul deschis.
Pentru aceasta se poate ns specifica modul n care Access s trateze aceste erori. Folosind aciunea
OnErrorsepoateoprirulareamacroului,sausetrecelaurmtoareaaciunesausepoaterulaunmacro
adiional.
Dinpunctdevederealsecuritii,Accessareolistdeaciuniconsiderateposibilduntoare,
iaracesteasunt:

tergereaunuiobiect
Listareaunuiobiectsarputeacaunvirusslistezenonstopconinutuluneibazede
date,ceeacenseamnconsumderesursesuplimentare
Copiereaunuiobiectunvirusarputeacompletacuinformaiefalsobazdedate
Salvareaunuiobiectsepoatecreaunmacrocaresmodificeobiecteleuneibazede
date
Copiereabazeidedatesarputeasuprascrieversiuniactualizatealebazeidedate
Maximizarea,minimizareairepoziionareauneiferestre
RulareascripturilorSQLprinaceastaciunesepottergenregistrrialebazeidedate
nmodfraudulos
RulareacoduluiVBAccessconsiderntregcodulVBnesigur
nchiderea Access automat aceast aciune poate s nchid Access fr a permite
utilizatoruluissalvezemodificrile
Trimitereadeemailuriaceastaciuneesteconsideratnesigurdacnusepermite
confirmareatrimiteriiemailului.

Macrourilesuntfolositecelmaidesnurmtoareleaciuni:
1. GsireauneinregistrrisuccesiuneadeaciuninecesareesteOpenFormsauOpenTable,
GoToControliFindRecord
2. Listareaunuiraportanumiterapoartecreatetrebuielistateperiodic.Celmaisimplumod
estedeutilizareaaciuniiOpenReport,iarlaparametrulView,sespecificPrint.Acestmod
nsvalistacusetriledefaultaleimprimantei.Pentruamodificaacestesetri,seutilizeaz
succesiuneaOpenReport,PrintOutiCloseWindow.AciuneaPrintOutpermitespecificarea
parametrilordelistare.
3. Trimiterea prin email a datelor exist aciunea EMailDatabaseObject ce permite
trimitereadeemailuricudiverseconinuturi,nsestenecesarfolosireaunuiclientdee
maildinWindows.Clieniiweb,precumYahoosauGmailnupotfiutilizai.
Submacrourilesuntocoleciemicdeaciuni.Acesteapotficombinatendiversemodurintr
unsingurmacro.AcesteapotficreateutilizndaciuneaSubmacrodinAddNewAction.Acestatrebuie
denumit, iar apoi poate conine toate tipurile de aciuni posibile pentru macrouri. Prima parte a

Capitolul11.FundamentealeprogramriiVBA(I)

numelui este denumirea macroului aferent. Pentru rularea unui submacro, trebuie specificat numele
complet.UndezavantajalsubmacrourilorestefaptulcnupotfirulateindividualdinNavigationPane,
cidoarncontextulmacrouluincareaufostdefinite.

1.2

ProgramareaVBA

Chiar dac macrourilor sunt un mod rapid i uor de automatizare a unei aplicaii, scrierea
modulelor Visual Basic for Applications (VBA) este mult mai flexibil i util. VBA permite accesul la
date,bucleiiteraii,lucrurinepermisedemacrouri.
VBA este un limbaj de programare inclus n Access. VBA este de asemenea disponibil pentru
Word,Excel,Outlook,PowerPointsauVisio.NumeledeVisualBasicafostnsfolositdeMicrosoftntr
oseriedealteproduseproprietare,precumVisualBasic.NET,nsacestelimbajenusuntidentice.
PentruanelegenmodcorectVBA,trebuieneleasmaintiterminologiautilizat:

CuvntcheieuncuvntcuoanumitsemnificaienVBA.
Instruciuneunsingurcuvntsauocombinaiedecuvintececonstituieoaciunece
trebuierealizat
Procedur o colecie de instruciuni ce sunt grupate pentru realizarea unei anumite
sarcini.
Subrutinerealizeazosarcinfrareturnaunrezultat
Funcierealizeazosarcinireturneazunrezultat
Modulprocedurilesuntdefinitencadrulmodulelor.Modulelesuntalctuitedinuna
saumaimulteproceduri,precumialteelemente.
Variabile sunt cuvinte definite de utilizator, ce conin un anumit tip de date i sunt
actualizatencadrulprogramului.

FiecareinstruciunedincadruluneiproceduriesteoaciunepecaredorimsoexecuteAccess.
Deexemplu,pentruadeschideunform,vomscrie:
DoCmd.OpenForm frmMyForm, acNormal

Aceast instruciune este alctuit dintro aciune (OpenForm) i un parametru (frmMyForm).


DoCmd este un obiect inclus n Access ce realizeaz o serie numeroas de sarcini. acNormal este un
modificatorceindicDoCmdmodulncarevafideschisformul.
1.2.1

EditorulVBAnAccess
Pentru a accesa editorul VBA, se poate folosi combinaia de taste ALT+F11, sau din cadrul
meniuluiCreate,opiuneaVisualBasic:

EditorulVBAestempritntreiferestreprincipale:

Fereastramodulelor(1)
Fereastradeproprieti(2)
Fereastradecod(3)

ProgramareaVBA

1
3

O fereastr adiional poate fi accesat din View> Object Browser, aceasta conine librriile
accesibile i clasele aferente acestora. Cu alte cuvinte, conine toate componentele codului scris n
fereastradecod.
n seciunile urmtoare vom detalia elementele componente ale codului VBA i modul de
rulareaaunuicodVBA.
1.2.2

CuvintecheienVBA
CuvintelecheiedinVBAsuntfolositepentruaspecificamodulncareestetratatosecvende
cod sau reprezint o aciune specific ce trebuie realizat. Cele mai importante cuvinte cheie n VBA
sunt:
Public

If

SelectCase

Do

Dim

Private

Then

Case

Until

Static

Friend

EndIf

EndSelect

Loop

Global

CuvintelecheiesuntutilizatencreareainstruciunilorVBA.Deexemplu,sintaxaIfThenpoate
fiscris:
If blnResult = True Then
MsgBox The test result is positive.
Else
MsgBox The test result is negative.
End If

Cuvintele cheie If i Then, alturi de Loop, Select i Case aparin familiei de secvene
condiionale.
1.2.3

OperatoriVBA
Operatoriisuntimportanintoatelimbajeledeprogramareiprecumaufostdescriioperatorii
pentruSQL,operatoriiVBAsuntexpuintabeluldemaijos:

Operator
&
*
+

Nume
Concatenare
Multiplicare
Adunare

Scdere
mprirea
reale

Aciune
Realizeazconcatenareairurilordecaractere
nmulireaadounumere
Adunareaadounumere.Poatefiutilizatipentruconcatenarea
irurilordecaractere
Scdereaadounumere
numerelor mprireaadounumererealeireturneazunnumrreal

Capitolul11.FundamentealeprogramriiVBA(I)

mprirea numerelor
ntregi
Putere
Egalitate
Comparareaobiectelor
Negare
Modulo
ilogic
Saulogic

^
=
Is
Not
Mod
And
Or

mprireaadounumerentregiireturneazparteantreaga
rezultatului
Ridicunnumrlaputerean
Compardoioperatoripentruastabiliegalitatea
Determindacunobiectestedeunanumittip
Inversiunealogicaunuirezultatboolean
Returneazrestulmpririiadounumere
Returneazrezultatuloperaieiilogic
Returneazrezultatuloperaieisaulogic

CaincazulSQL,operatoriipotfiunarisaubinari.Operatoriimpreuncuoperanziicreazo
expresie,acreiprioritatedeexecuiepoatefimodificatcuajutorulparantezelor.
1.2.4

Variabile
Unul dintre cele mai importante elemente ale oricrui limbaj de programare este variabila. O
variabil este o locaie de memorie ce poate stoca o anumit valoare n timpul rulrii unui program.
Fiecare variabil este de un anumit tip, de exemplu numr, ir de caractere, obiect sau dat. Tipurile
variabilelorpotfiasociatecutipurilecmpurilorunuitabelaluneibazededate.Tipuriledevariabiledin
VBAsuntdescrisemaijos:
Tipulvariabilei
Byte
Boolean
Integer
Long(longinteger)
LongLong(biginteger)

Dimensiuneanmemorie
1octet
2octei
2octei
4octei
8octei

Single (precizie simpl


real)
Double (precizie dubl
real)
Currency (valut
ntregscalat)
Decimal

4octei

Valoriposibile
0255
TruesauFalse
32.768 32.767
2.147.483.648 2.147.483.647
9.223.372.036.854.775.808
+9.223.372.036.854.775.807
-3.4E38 3.4E38

8octei

1.8E3081.8E308

Date(dat)
Object(obiect)
String
String*N
Variant(numr)
Variant
(ir
caractere)
Userdefined

8octei

922,337,203,685,477.5808
922,337,203,685,477.5807
14octei
Frzecimale
+/79,228,162,514,264,
337,593,543,950,335
Cuzecimale+/1E28
8octei
1/1/100to12/31/9999
4octei
Oricereferindeobiect
10 octei + lungimea irului Lungimevariabil<=2milioane
decaractere
irdecaracteredelungimeN Max.65.400
octei
16octei
Similarcudouble
de 22 octei + lungimea irului Lafelcaistring
decaractere
Variabil
Definitdeutilizator

ndenumireavariabilelortrebuiesseincontdeunsetdelimitridatedeVBA:

Sepotfolosidoarlitere,numereiunderscore(_)
Numelevariabileitrebuiesnceapcuoliter
Nusepotfolosicuvinterezervatecainumedevariabil

ProgramareaVBA

Dimensiuneamaximede255decaractere

Caireguligenerale,estebinecavariabilelesconincaiprefixtipulacesteia.Deexemplu
strMesaj sau blnExista. Corespondena dintre cmpurile Access i tipurile variabilelor VBA este
urmtoarea:
CmpAccess
AutoNumber(LongInteger)
AutoNumber(ReplicationID)
Currency
Computed
Date/Time
Memo
Number(Byte)
Number(Integer)
Number(LongInteger)
Number(Single)
Number(Double)
Number(ReplicationID)
OLEObject
Text
Hyperlink
Yes/No

VariabilVBA
Long

Currency

Date
String
Byte
Integer
Long
Single
Double

String
String
String
Boolean

Variabilelepotfideclaratenmodimplicitsauexplicit.nmodimplicit,VBAdeterminautomat
tipuldedatenecesaruneivariabile.nsrezultatuldeclarriiimplicitenuesteoptimdinpunctdevedere
alutilizriimemoriei.Deaceeaesteindicatdeclarareaexplicit.Pentruadeclaraexplicitovariabiln
VBA,sunt folositecuvintelecheieDim, Static,Private sauPublic. Alegerea cuvntuluicheie determin
modulncarevariabilapoatefiutilizatnrestulcodului.Alturidenumelevariabilei,trebuiespecificat
itipulacesteia.Formatuldedefinireeste:
Dim VariableName As DataType
Static VariableName As DataType
Private VariableName As DataType
Public VariableName As DataType

Odatovariabildefinit,tipuleinumaipoatefischimbat.Pentruadeclaraovaraibilnmod
simplu,seutilizeazcuvntulcheieDim(prescurtaredelaDimension),deexemplu:
Dim xBeeps As Integer

CndseutilizeazDim,variabilapoatefiaccesatdoardincadrulaceleiproceduri.Dacdorim
sutilizmvariabilarespectivincadrulalteiproceduri,vatrebuisodeclarmdetipPublic.Aceste
variabile de tip Public, trebuie declarate la nceputul modulului i nu a procedurii. Acest lucru va
determina ca acea variabil s poat fi accesat de orice procedur din modul i i de alte module.
Uneorisedoretenscaovariabilsnupoatfiaccesatdealtemodule.nacestcazsepoateutiliza
cuvntulcheiePrivate.DiferenafadeDimestecDimesteutilizatlaniveldeprocedur,iarPrivatela
niveldemodul.
Declararea variabilelor este o seciune foarte important a codului i trebuie tratat cu mare
atenie. Declararea corect a acestora duce la o eficientizare a codului i o nelegere mai uoar a
modulelor..
1.2.5

AltecomponenteVBA
Oseriedealtecomponenetepotfifolositencod.Acesteasereferlacomentarii,constante,
enumerriiinstruciunideopiune.Instruciuniledeopiunesuntmoduridefaultaleunuimodul.Sunt
patrutipurideopiuni:Compare,Explicit,BaseiPrivate.nmodautomat,editorulVBAdinAccessva
includeOptionCompareDatabasecespecificmodulncarevorficomparateiruriledecaractere,iarn
acest caz se va pstra opiunea de case sensitive din baza de date. Explicit face ca variabilele s fie

Capitolul11.FundamentealeprogramriiVBA(I)

declarate.Fraceastopiune,compilatorulvacreaautomatvariabilelenecesare,frcautilizatoruls
trebuiasc s le declare nainte de a le utiliza n cod. Base i Private sunt folosite rar. Base specific
primul indice al unuivector,0sau 1 n funciede opiune.Privateesteutil atunci cnd nu se dorete
accesareamodululuidincadrulunuialtproiect.
Comentariilesuntintrodusencodcuajutorulapostrofului().
Constantele conin valori predefinite sau precalculate pentru anumite variabile din cod. De
exemplu,sepoatedefinioconstantstrStartDatecaresaibntotdeaunavaloarea1octombrie2011.
Valorileconstantelornupotfimodificatencod.
Dim dteStartDate As Date Declararea variabilei
dteStartDate = #10/01/2011# Asignarea constantei

Enumerrile permit gruparea logic a constantelor ntrun grup denumit corespunztor. De


exemplu,amputeadeterminaconstantelecepotfiutilizatentrunform:
Enum acFormView
acNormal = 0
acDesign = 1
acPreview = 2
acFormDS = 3
acFormPivotTable = 4
acFormPivotChart = 5
acFormLayout = 6
End Enum

!!!Dac o instruciune VBA se continu pe mai multe rnduri, se utilizeaz caracterul spaiu
urmatdeunderscorepentruainformamotorulVBAdeacestlucru:
rst.Open Customers, _
ActiveConnection:=conn, _

1.2.6

Instruciunicondiionale
Alturidedeclarareavariabileloriutilizarealorncadrulexpresiilor,unlimbajdeprogramare
trebuie s fie capabil s realizeze decizii pe baza unor condiii impuse. n VBA exist dou metode
principaledeaexecutaoseciunedecodnmodcondiionat:ramificareinbucl.

1.2.6.1 Instruciunideramificare
1. IfThenElseEndIf
Aceast instruciune realizeaz secvene diferite de cod, n funcie de valoarea expresiei de
condiionare.Deexemplu:
If Quantity < 10 Then
Price = Price*10
Else
Price = Price * 0.9
End If

RamuradeElseesteopional,iarThensauElsepotsconinoriceinstruciuneVBA,inclusiv
unaltIf.
2. SelectCaseEndSelect
Esteoinstruciunecepoateverificamaimultecondiiisimultan.Sintaxageneraleste:
Select Case Expresie
Case Valoare1
[Actiune cand Expresie = Valoare1]
Case Valoare2
[Actiune cand Expresie = Valoare2]
Case ...

ProgramareaVBA

Case Else
[Valoare default
expresiei]
End Select

10

cand

nici

valoare

nu

egala

cu

rezultatul

Fa de IfThen, care conine o expresie boolean, Select Case poate utiliza expresii ce
returneazmaimultevalori.Deexemplu:
Select Case Quantity
Case 1
Price = Price
Case 2
Price = Price
Case 3
Price = Price
Case Else
Price = Price
End Select

* 0.9
* 1.1
* 2
* 0.5

Ramura de Case Else este opional, ns este indicat utilizarea ei pentru a nu avea erori de
calculsauinterpretare.

1.2.6.2 Instruciuninbucl
ncadrulacestorinstruciuni,oanumitsecvendecodesterepetatdeunnumrdatdeori,
nfunciedetipulinstruciuniiiacondiieidate.
1. DoLoop
Aceast instruciune este utilizat pentru a repeta o secven atta timp ct o condiie are
valoareaTruesaupnceocondiiedevineTrue.Sintaxageneraleste:
Do [While | Until Condition]
[VBA statements]
[Exit Do]
[VBA statements]
Loop

Sau:
Do
[VBA statements]
[Exit Do]
[VBA statements]
Loop [While | Until Condition]

Clauza While execut bucla atta timp ct condiia este True. Execuia este ntrerupt n
momentul n care condiia devine False. Clauza Until funcioneaz exact invers. Ieirea din bucl
efectundusenmomentulncarecondiiadevineTrue.
2. ForNext
ForNextrepetosecvendeunnumrfixdeori.Formatulgeneraleste:
For CounterVariable = Start To End
[Statement block]
Next CounterVariable

Deexemplu:
nBeeps = 5
For xBeeps = 1 To nBeeps
Beep
Next xBeeps

xBeeps este contorul inumr de la 1 lanBeeps. Ovariant alternativ a acestei instruciuni


specificipasuldeincrementare:
For CounterVariable = Start To End Step StepValue
[Statement block]
Next CounterVariable

11

Capitolul11.FundamentealeprogramriiVBA(I)

Deexempludacamavea:
For contor = 10 To 100 Step 10

Contorularluavalorile10,20,30pnla100.Pentruafolosicontoaredecrementate,poatefi
setatpasullaovaloarenegativ:
For contor = 100 To 10 Step -10

1.2.7

SubproceduriifunciinVBA
Access ofer o serie de proprieti eveniment pentru fiecare control inclus ntrun form. Prin
ataareauneiproceduriVBAlaoproprietateeveniment,obiecteledinAccesspots interacioneze n
cadrulformurilorsauarapoartelor.Oprocedurevenimentesteosecvendecodceesteexecutat
atunci cnd apare un eveniment (de exemplu un click pe un buton). Clickul pe un buton activeaz
secvena de cod ataat acestui eveniment. Exist dou tipuri de proceduri: subproceduri i funcii.
Subprocedurile i funciile sunt grupate i stocate n module. Obiectul Modules din Navigation Pane
conineprocedurilestandardpecarelepoateaccesaoriceformsauraport.Esteindicatcaprocedurile
stocatesimilaresfieinclusencadrulaceluiaimodul.

Subprocedurile sunt cea mai simpl form de procedur ntrun proiect VBA. O subprocedur
poate realiza aciuni de tipul deschiderii unui raport sau rularea unei interogri. Toate procedurile
evenimentdinAccesssuntsubproceduri.Unexempludesubproceduresteurmtorulirealizeazun
butondeexit:
Sub cmdExit_Click()
DoCmd.Close
End Sub

Prima linie de cod specific tipul procedurii i anume o subprocedur, iar numele ei este
cmdExit_Click. Parametrii procedurii dac ar exista ar fi cuprini ntre paranteze. Exist o singur
instruciunencadrulacesteiproceduri,DoCmd.Close.InstruciuneaEndSubncheiesubprocedura.
Funciilesuntsimilarecusubprocedurile,cuexcepiafaptuluicacesteareturneazunrezultat.
De exemplu, funcia implicit VBA Now() afieaz ora i data curent. Pentru a obine rezultatul, n
corpulfuncieisevaatribuirezultatulnumeluiproceduriiconformexempluluidemaijos:
Function nSquareFeet(Height As Double, Width As Double) As Double
Assign this functions value:
nSquareFeet = Height * Width
End Function

Funciaprimetedoiparametri:Height(nlime)iWidth(laime).Numelefuncieiprimeteo
valoare ncorpul acesteiai anume produsuldintre nlimei lime, adic suprafaa.Pentru a folosi
funcianaltcodsevascrie:
dblAnswer = nSquareFeet(Height, Width)
txtAnswer = nSquareFeet(Height, Width)

Procedurile sunt elementele de baz ale unui cod VBA. Cea mai simpl procedur ce poate fi
construitesteurmtoarea:
Sub SayHello()
MsgBox Hello, World!
End Sub

Pentrurulareaacesteia,vomfolosibutonulRundinmeniuleditoruluiVBA.nmomentulrulrii,
nAccess,vaapreaofereastrcumesajulaferent:

ProgramareaVBA

12

Modificatoriiuneiprocedurisuntinstruciunicemodificanumitecaracteristicialeprocedurii.
Ceimaiimportanimodificatorisuntceideaccesibilitate,PubliciPrivate.Acetimodificatoridetermin
moduliloculncareprocedurapoatefiaccesat.Dacavemurmtoareledouproceduri:
Public Function WhoAmI() As String
WhoAmI = GetUserName & : & Application.CurrentUser
End Function
Private Function GetUserName() As String
GetUserName = Environ(UserName)
End Function

DacammutaproceduraPrivate ntrunaltmodul,aceastanu armaiputeafiexecutat,ns


procedurilePublicpotfiaccesatedincadruloricruialtmodul.
Numeleprocedurilortrebuiesfieunicnmodululncaresuntdefiniteinupoatesfieacelai
cualuneiproceduriintrinseciVBA.Unmodulioprocedurnupotsaibacelainume.Oprocedur
nupoatesconinoaltprocedurncorpulei,nspoateapelaoaltprocedur.
Procedurile pot fi create fie ntrun modul VBA standard, fie n cadrul unui form sau al unui
raport.

1.2.7.1 ApelareaprocedurilorVBA
Procedurile VBA pot fi apelate din diverse locuri, precum evenimentele din spatele unui form
sau a unui raport sau pot fi localizate n cadrul unor modul, putnd fi astfel apelate cu ajutorul
cuvntuluirezervatCallurmatdenumeleprocedurii:
OSubrutina
Call OSubrutina
valoare = OFunctie

Funciile ce returneaz valori pot fi asignate variabilelor. Subprocedurile pot fi doar apelate.
Codul este rulat i un anumit eveniment are loc. Dac se utilizeaz cuvntul rezervat Call i
subproceduraareparametri,acetiparametrisauargumentetrebuieincluintreparanteze:
Call OSubrutina(arg1, arg2)

DacnsnuseutilizeazcuvntulCall,parametripoturmanumeleproceduriifrafiinclui
ntreparanteze:
OSubrutina arg1, arg2

ncazulfunciilor,dacseutilizeazCall,acestlucrunseamncavaloareareturnatdefuncie
nuesteatribuituneivariabileiestetratatcaiosubprocedur:
Call OFunctie
Call OFunctie(arg1, arg2)

1.2.7.2 Creareasubrutinelor

Subrutinele sau subprocedurile sunt un set de instruciuni executate ca i o unitate


independentdectrecompilatorulVBA.Unexemplucompletdesubproceduresteurmtorul:
Privat Sub OpenRecordset()
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset

13

Capitolul11.FundamentealeprogramriiVBA(I)

Set conn = New ADODB.Connection


conn.Provider = Microsoft.Jet.OLEDB.4.0
conn.ConnectionString = Data Source= _
& CurrentProject.Path & \ BD1.accdb
conn.Open
Set rst = New ADODB.Recordset
Rst.Open Customers, _
ActiveConnection:=conn, _
CursonType:=adOpenForwardOnly, _
LockType:=adLockReadOnly, _
Options:=adCmdTableDirect
Do Until rst.EOF
Debug Print rst!CompanyName
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
conn.Close
Set conn = Nothing
End Sub

i conine toate aproape toate componentele existente n cadrul unei proceduri. Se poate
observa cuvntul cheie Sub ce marcheaz nceputul unei subproceduri, urmat de numele acesteia.
Declararea acestei subproceduri particulare include cuvntul cheie Private, ce restricioneaz
disponibilitaeaacesteisubrutinelamodululdincarefaceparte.Subproceduramaiconine:

Declarareatoateproceduriletrebuiedeclarate.Numeleatribuitproceduriitrebuies
fie unic, iar cuvntul rezervat Sub identific procedura ca fiind o subprocedur sau
subrutin
TerminatortoateproceduriletrebuiencheiatecucuvntulcheieEndurmatdetipul
procedurii,nacestcazSub
Segmentuldedeclarrichiardacvariabileleiconstantelepotfideclaratencorpul
procedurii, este indicat declararea lor la nceputul procedurii pentru o mai bun
lizibilitateacodului
Instruciunioriceprocedurvaconineunsetdeinstruciunispecifice.Esteindicats
secreezeprocedurictmaiscurtepentruaputeafiutilizateuorireutilizate.

Laterminareaexecuieiuneisubproceduri,programulsentoarcelaurmtoareainstruciunede
dupapelareasubrutinei.

1.2.7.3 Creareafunciilor
Funciile diferde subproceduriprin faptul creturneaz ovaloare.Chiardac funciile pot fi
create n cadrul formurilor sau a rapoartelor, acestea sunt definite n cadrul modulelor de cele mai
multeori.Unexempludefuncieesteurmtorul,icarecalculeazoextensieapreului
Public Function CalcExtendedPrice( _
Quantity As Integer, _
Price As Currency, _
Discount As Double _
) As Currency
Dim ExtendedPrice As Currency
ExtendedPrice = Quantity * Price
CalcExtendedPrice = ExtendedPrice - (ExtendedPrice * Discount)
End Function

Testareacunotinelordobndite

14

PrimainstruciunedefinetevariabilaExtendedPricecaiuntipdedatecurrency.ExtendedPrice
este folosit ca i pas intermediar n calculul funciei. Urmtoarea linie calculeaz produsul variabilelor
Quantity i Price i atribuie rezultatul variabilei ExtendedPrice. Variabilele Quantity i Price nu sunt
declarate n corpul procedurii, ci sunt parametri ai funciei. Ultima linie de cod din funcie atribuie
rezultatuluifuncieiovaloarecalculatntreExtendedPriceiDiscount.Numelefuncieiestetratatcai
ovariabil.Parametrifuncieinupotsaibacelainumecaivariabilelefunciei.Deasemeneaeipot
saibunnumegeneric,diferitdenumelevariabilelorutilizatencodulceapeleazprocedura.
Pentruatestafunciaputemsorulmindependentdeunformsauraportdincadrulferestrei
Immediate Window. Aceasta este deschis cu ajutorul Ctrl+G sau din View>Immediate Window. ns
naintedeaoputearula,funciatrebuiesalvat.Ovomdenumiconformcodului,CalcExtendedPrice.

Pentru a vedea rezultatul funciei putem s scriem ? CalcExtendedPrice(5, 3.50, .05) n


ImmediateWindow.Rezultatulreturnatfiind16.625.

1.3

Testareacunotinelordobndite
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Ceesteunmacro?
CereprezintVBA?
Enumeraicelpuin5cuvinterezervatenVBA.
Enumeraicelpuin5operatorinVBAiexplicaiutilizareaacestora.
Cesuntvariabileleicaresuntcondiiilededenumireaacestora?
Definiitipuriledeinstruciunicondiionaleiexemplificaiprinscurtesecvenedecod.
Cereprezintoprocedur?
Careestediferenadintreosubproceduriofuncie?
VBAesteabreviereadela:
Unmacroeste:
a. o locaie de memorie ce poate stoca o anumit valoare n timpul rulrii unui
program
b. un singur cuvnt sau o combinaie de cuvinte ce constituie o aciune ce trebuie
realizat
c. unprogramminiaturalcreatistocatnbazadedate
d. cuvinte definite de utilizator, ceconin un anumit tipdedate i sunt actualizate n
cadrulprogramului
11. CuvintelecheiedinVBAsuntfolositepentru:
a. acalculaovaloareintermediarauneisecvenedecod
b. a specifica modul n care este tratat o secven de cod sau reprezint o aciune
specificcetrebuierealizat
c. adeclaravariabile

15

Capitolul11.FundamentealeprogramriiVBA(I)

d. a crea o expresie, a crei prioritate de execuie poate fi modificat cu ajutorul


parantezelor
12. Ovariabileste:
a. o locaie de memorie ce poate stoca o anumit valoare n timpul rulrii unui
program
b. modulncareestetratatosecvendecod
c. ovaloarepredefinitsauprecalculatpentruoanumitsecvendecod
d. osecvendecodceesteexecutatatuncicndapareuneveniment
13. Operatorul&esteutilizatnVBApentru:
a. OperaiiIlogic
b. Concatenareairurilordecaractere
c. Aridicaunnumrlaputerean
d. OperaiiSAUlogic

1.4

Glosar
constante elementdecodiniializatlanceputulunuiprogramicarenuischimb
valoarepetotparcursulderulriiprogramului
funcie secvendeinstruciunidefinitnmodunitaricarereturneazovaloare
fix. Poate fi apelat din cadrul altor module, proceduri sau din cadrul
formurilorsauarapoartelor.
instruciuni instruciuni executate pe baza evalurii unor condiii iniiale sau finale.
condiionale Suntclasificateninstruciunideramificareinbucl.
macro osecvendeinstruciuniaplicateasupraunorobiectealebazeidedatei
stocat n cadrul acesteia. Poate fi apelat din cadrul formurilor sau a
rapoartelor
subprocedur secvendeinstruciunidefinitnmodunitaricarepoatefiapelatdin
cadrulaltormodule,procedurisaudincadrulformurilorsauarapoartelor
variabil elementdecodcestocheazvalorintimpulexecutriiunuiprogram
VBA VisualBasicforApplications

1.5

Bibliografie

M.Groh,Access2010Bible,Wiley&Sons,2010
M.MacDonald,Access2010TheMissingManual,OReilly,2010
T. Hennig, R. Cooper, G. Griffith, J. Dennison, Microsoft Access 2010, Programmers Reference, Wiley &
Sons,2010

Capitolul12.FundamentealeprogramriiVBA(II)

nacestcapitolveinva:

Cuvintecheie:

CumseacceseazobazdedatefolosindVBA
CumseinterconecteazunformsauunraportlaunmodulVBA
CumsemanipuleazdateledintabelecuajutorulADO
CeesteunevenimentnAccess
CumsetrateazerorilenVBA

ADO,handler,evenimenteAccess,erori,cuvntulcheieME

Cuprins
Capitolul12.FundamentealeprogramriiVBA(II)........................................................................1
1.1 AccesareadatelordincodVBA........................................................................................2
1.1.1 ModeluldeobiectedetipADO...................................................................................2
1.1.2 Navigareanseturidenregistrri...............................................................................4
1.1.3 ExempledecodVBApentrumanipulareadatelordintabeleAccess.........................6
1.2 CuvntulcheieMe...........................................................................................................7
1.3 EvenimentenAccess.......................................................................................................8
1.3.1 Evenimentepentruformuri.......................................................................................8
1.3.2 Evenimentepentrurapoarte.......................................................................................8
1.3.3 Evenimentepentrucontroale.....................................................................................9
1.4 TratareaerorilornVBA...................................................................................................9
1.4.1 Creareasecvenelordetratareaerorilor...................................................................9
1.4.2 TratareaerorilorcucodVBA.....................................................................................10
1.5
1.6
1.7

Testareacunotinelordobndite..................................................................................14
Glosar.............................................................................................................................15
Bibliografie.....................................................................................................................15

AccesareadatelordincodVBA

1.1

AccesareadatelordincodVBA

Accessnuesteunlimbajdeprogramareorientatpeobiecte,nsestebazatpeobiecte,astfelc
n interaciunea VBA Access se discut despre modele de obiecte pentru a realiza activiti de
management a datelor. De asemenea este necesar nelegerea noiunii de colecie de unul sau mai
multeobiecte.Ocolecieesteunsetdedatececoninetoimembriunuianumittipdeobiect.nAccess
unobiectdetipsetdenregistrriesteocoleciedecmpuriceaparinnregistrrilor.Toateobiectele
detipsetdenregistrriauacelaisetdecaracteristici.FiecareobiectADOsauDAOconineocolecie
deproprietiimetodecedeterminmodulncareinteracioneazcualteobiecte.Proprietilesau
metodeleunuiobiectsuntreferiteprinnumeleobiectului,punct(.),numelemetodeisauaproprietii,
NumeObiect.NumeProprietateSauMetoda. Metodele sunt aciuni ce pot fi realizate asupra obiectului
referit, sau de ctre obiectul referit asupra unui alt obiect. Proprietile sunt caracteristici, de obicei
statice,aleobiectului,detipuldimensiune,vizibilitate,disponibilitateetc.Proprietilepotfimodificate
dincod.
1.1.1

ModeluldeobiectedetipADO
UtilizareaVBAnAccessextindefoartemultcapacitileacestuia.Pentruaaccesadateledintro
bazdedate,VBAfoloseteActiveXDataObjects(ADO)sauDataAccessObjects(DAO).

ADOestebazatpetehnologiaMicrosoftActiveX,ceoferbazapentruobiecteindependentece
realizeazactiviticomplexefrinputdelaaplicaiadebaz.AceastanseamncADOpoaterealiza
activitifrainteracionadirectcuAccess.DAOesteotehnologiedegeneraieanterioarceafost
folositobunperioaddetimpnAccess.Dezavantajuleiestecnecesitmaimulteliniidecodpentru
realizareaaceloraioperaiifadeADO.nacestcapitolnevomaxapeobiecteledetipADO.
ModeluldeobiecteADOesteunmodelrelativsimpluicareincludeoserielimitatdetipuride
obiecte. Modelul ADO nu este ierarhic i fiecare obiect este de sine stttor, fr a depinde de alte
obiectedinmodel.UtilizareaobiectelorADOnecesitreferirealibrrieiADO,carenVBAestedenumit
ADODB.ModelulobiectelorADOesteurmtorul:
Connection

Properties

Recordset

Fields

Properties

Command

Parameters

Properties

ObiectulADOConnectionpermiteconectarealaosursdedate.Accesullaosursdedateeste
necesar pentru orice operaie, astfel c acest obiect este necesar n orice scenariu ce implic ADO.
CreareaunuiobiectADOConnectionserealizeazastfel:
Dim cnn as ADODB.Connection
Set cnn = New ADODB.Connection

Aceste dou instruciuni realizeaz conexiunea. n prima o variabil de tip ADODB.Connection


estedefinitipermiteastfelutilizareatuturorproprietiloriametodelorasociatecuunobiectdetip
Connection. Cea dea doua instruciune definete efectiv obiectul n memoria calculatorului i astfel
devine accesibil n cod. Conexiunea trebuie deschis i iniializat nainte de a putea fi utilizat. O
metodalternativdeiniializareauneiconexiunieste:
cnn.Open CurrentProject.Connection

n acest caz, conexiunea este realizat la baza de date curent. Pentru a realiza o conexiune
corectoseriedeparametritrebuiescdefinii.Unsetstandarddeparametriesteurmtorul:

Capitolul12.FundamentealeprogramriiVBA(II)

Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;
Data Source=C:\Data\Chapter13.accdb;
Mode=Share Deny None;Extended Properties=;
Jet OLEDB:System database=C:\...\Access\System.mdw;
Jet OLEDB:Registry Path=...\Access Connectivity Engine;
Jet OLEDB:Database Password=;
Jet OLEDB:Engine Type=6;
Jet OLEDB:Database Locking Mode=1;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password=;
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Dont Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=True

n parametrul Data Source se specific un fiier .accdb i astfel se poate accesa orice baz de
date Access, atta timp ct calea este corect i fiierul selectat este de tip accdb. Urmtoarea
proceduriniializeazoconexiunelabazadedatecurent,listeazproprietateaProvideraconexiunii
nchideapoiaceastconexiune:
Public Sub OpenConnection()
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.Open CurrentProject.Connection
Conexiunea este deschisa
Debug.Print cnn.Provider
cnn.Close
Set cnn = Nothing
End Sub

ObiecteledetipADOtrebuieneapratnchisepentruanuocupamemoriesuplimentar.
O problem ce apare frecvent n programarea unui obiect ADO Connection este proprietatea
ConnectionString ce trebuie scris corect i trebuie s refere un driver sau provider de conexiune
existentpemainalocal.ProvideripotfipentrubazededateSQLServer,JetsauACE.Fiecareprovider
are caracteristicile lui specifice de conexiune i manipulare a datelor. Pentru a determina Connection
StringpentruunanumitproviderADOsefoloseteurmtoareametodsimpl.Secreazunfiiertext
gol,acruiextensieestemodificatn.udl(UniversalDataLink).Seddubluclicpefiier,iarWindows
deschideofereastrDataLinkProperties.Dincadrulacesteiferestreseselecteazprovideruliosurs
dedate.Sedeschideapoifiierul.udlnNotepadisecopiazConnectionStringnprogramulVBA.
Obiectul ADO Command execut comenzi asupra sursei de date deschis ntro conexiune.
Comenzilepotfiinterogrisimplesaucomplexe.CuajutorulobiectuluiCommandserealizeazcelmai
desproceduristocatenSQLServerasupraaplicaiilorAccess.Rezultatuluneicomezipoatefiredirectat
ntrun set de nregistrri i poate apoi popula formuri sau controale. n urmtoul exemplu obiectul
CommandpopuleazunsetdenregistrridintabelulCustomers:
Public Sub ExecuteCommand1
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = tblCustomers
Set rst = cmd.Execute
Debug.Print rst.GetString
rst.Close
Set rst = Nothing
End Sub

AccesareadatelordincodVBA

naceastprocedurpotfiobservateurmtoareleaspecte:suntdeclarateobiectedetipsetde
nregistrri i Command; proprietatea ActiveConnection a obiectului Command este setat la
proprietatea Connectionaproiectuluicurent; setul de nregistrri sau Recordset este populatnurma
rulriiobiectuluiCommand.
ObiectulADORecordsetsausetdenregistrriesteunobiectpopulatnurmarulriiunuiobiect
CommandsaucuajutorulmetodeiOpenaferentobiectuluiRecordset.
Public Sub Open_ADO_Recordset1()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open SELECT * FROM tblCustomers, _
CurrentProject.Connection
Debug.Print rs.GetString
rs.Close
Set rs = Nothing
End Sub

n acest exemplu, setul de nregistrri este populat prin deschiderea tabelului Customers i
scriereauneiinstruciuniSQLpeacesttabel.Aceaiprocedurdemaisuspoatefiscrisiastfel:
ActiveConnection property:
Public Sub Open_ADO_Recordset2()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.ActiveConnection = CurrentProject.Connection
rs.Open SELECT * FROM tblCustomers
Debug.Print rs.GetString
rs.Close
Set rs = Nothing
End Sub

Cea dea doua variant este mai uor de citit deoarece se poate observa modul n care
proprietileobiectuluiRecordsetsuntsetate.
1.1.2

Navigareanseturidenregistrri
n funcie de modul de utilizare, un recordset sau un set de nregistrri se poate referi la
rndurile returnate de o interogare, datele conectate la un form Access, obiectul populat cu date ca
rezultataluneioperaiiADO.Caioregulgeneralunrecordsetesteostructurdedatececonine
rnduri i coloane de date. Este astfel necesar implementarea unor metode de navigare n cadrul
acesteistructuri.Urmtoareaprocedurdescriemetodelefundamentaledenavigarentrunrecordset
ADO:
Public Sub RecordsetNavigation()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.ActiveConnection = CurrentProject.Connection
rs.CursorType = adOpenStatic
rs.Open Select * from tblCustomers
Debug.Print rs!CustomerID, rs!Company
rs.MoveNext
Debug.Print rs!CustomerID, rs!Company
rs.MoveLast
Debug.Print rs!CustomerID, rs!Company
rs.MovePrevious
Debug.Print rs!CustomerID, rs!Company
rs.MoveFirst
Debug.Print rs!CustomerID, rs!Company
rs.Close
Set rs = Nothing
End Sub

Capitolul12.FundamentealeprogramriiVBA(II)

AceastprocedurpornetedelaunobiectRecordsetpopulatdintabelulCustomersiafieaz
imediatCustomerIDiCompanypentruprimanregistrare.Peurmnavigheazntabeliafieazdup
fiecaremodificareidulicompaniacorespunztoarenregistrrii.
Un element important pentru recordset este current record pointer sau pointerul nregistrrii
curente. O singur nregistrare dintrun set de nregistrri poate fi curent la un moment dat, iar
navigarea se face prin modificarea pointerului. Pe de alt parte accesul la cmpurile nregistrrii
curentesepoatefacereferintobiectulrecordset(ex:rs!CustomerID).
Tot n procedura anterioar se poate observa proprietatea CursorType i determin modul de
accesladatesaunregistrri.Valorilepecarelepoateluaaceastproprietatesunturmtoarele:
Valoare
adOpenDynamic

Efect
Un cursor dinamic ce permite utilizarea tuturor metodelor de navigare, iar
nregistrareaestecompleteditabil.Modificrilerealizatedealiutilizatorisunt
vizibilencadrulsetului.
adOpenForwardOnly Setul de nregistrri este deschis n mod static, ceea ce nseamn c nu pot fi
adugatenregistrrinoi.SepotutilizadoarmetodeleMoveNextiMoveLast.
adOpenKeyset
Permite navigarea complet, iar nregistrrile sunt editabile. Cu toate acestea,
modificrilerealizatedealiutilizatorinusuntvizibile
adOpenStatic
Deschidesetuldenregistrricenupoatefieditat,iarmodificrilerealizatede
aliutilizatorinusuntvizibilensetulcurent.

Lanavigareansetuldenregistrritrebuiessepoatdeterminadacsaajunslaprimasaula
ultimanregistrare.Pentruaceasta,ADORecordsetconinedouproprietibooleene,EOF(endoffile)
iBOF(beginningoffile).Cuajutorulacestorasepoatedeterminapoziiaexactacursorului:
Public Sub Use_EOF_BOF()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.ActiveConnection = CurrentProject.Connection
rs.CursorType = adOpenStatic
rs.Open SELECT * FROM tblCustomers _
& WHERE State = NY _
& ORDER BY Company
Do Until rs.EOF
Debug.Print rs!Company
rs.MoveNext
Loop
rs.MoveLast
Do Until rs.BOF
Debug.Print rs!Company
rs.MovePrevious
Loop
rs.Close
Set rs = Nothing
End Sub

Deasemeneaoaltmetodimportantpentruunrecordsetestenumrultotaldenregistrri
returnatdecomand.AceastmetodestedenumitRecordCountisepoateimplementaastfel:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.ActiveConnection = CurrentProject.Connection
rs.CursorType = adOpenStatic
rs.Open SELECT * FROM tblCustomers
Debug.Print RecordCount: & rs.RecordCount

ProprietateaRecordCountnuestevalabilpentruseturidenregistrrideschisenmodforward
only.Ometodalternativrapiddedeterminareaseturilordenregistrrigoaleesteurmtoarea:
If rs.BOF = rs.EOF Then
Debug.Print No records to process

AccesareadatelordincodVBA

Exit Sub
End If

1.1.3

ExempledecodVBApentrumanipulareadatelordintabeleAccess

1. Actualizareaunuicmpaluneinregistrri
Private Sub Form_AfterUpdate()
Dim rs As ADODB.Recordset
Dim strSQL As String
On Error GoTo HandleError
Set rs = New ADODB.Recordset
If Not IsNull(Me!cboCustomerID) Then
If Not IsNull(Me!txtSaleDate) Then
strSQL = SELECT * FROM tblCustomers _
& WHERE CustomerID = & cboCustomerID
rs.Open strSQL, CurrentProject.Connection, _
adOpenDynamic, adLockOptimistic
If Not rs.EOF Then
rs!LastSalesDate = txtSaleDate
rs.Update
End If
rs.Close
Set rs = Nothing
End If
End If
ExitHere:
Exit Sub
HandleError:
MsgBox error is & Err.Description & in frmSales
Resume ExitHere
End Sub

2. Deschidereaunuitabel
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.ActiveConnection = CurrentProject.Connection
rs.Source = tblCustomers
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.Open

Sau:
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open tblCustomers, CurrentProject.Connection, _
adOpenDynamic, adLockOptimistic

3. Extragereauneisingurenregistrri(nfunciedeCustomerID):
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.ActiveConnection = CurrentProject.Connection
rs.Source = _
SELECT * FROM tblCustomers WHERE CustomerID = 17
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.Open

Capitolul12.FundamentealeprogramriiVBA(II)

4. Adugareauneinregistrri:
Private Sub AddNewCustomer(FName As String, LName As String)
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open tblCustomers, CurrentProject.Connection, _
adOpenDynamic, adLockOptimistic
With rs
.AddNew Add new record
Add data:
![LastName] = LName
![LastName] = FName
.Update Commit changes
End With
rs.Close
Set rs = Nothing
End Sub

5. tergereauneinregistrri:
Private Sub DeleteContact(CustomerID As Long)
Dim rs As ADODB.Recordset
Dim strSQL as string
Set rs = New ADODB.Recordset
Select single record from tblCustomers:
strSQL = SELECT * FROM tblCustomers _
& WHERE [CustomerID] = & CustomerID
rs.Open strSQL, CurrentProject.Connection, _
adOpenDynamic, adLockOptimistic
With rs
If not .EOF Then
.Delete Delete the record
End If
End With
rs.Close
Set rs = Nothing
End Sub

1.2

CuvntulcheieMe

O parte important a aplicaiilor din Access deriv din utilizarea codului VBA n formuri i
rapoarte.nAccessVBAuncuvntcheieimportantesteMe.Acestaindicformulsauraportulpecare
ruleazcodul.DacamaveaformulfrmTest,utilizareaMencodfacereferinlafrmTestiastfelnloc
de:
Forms!frmBusiness.Visible = True

Sepoatescrie:
Me.Visible = True

Menupoatefifolositdectnformurisaurapoarteinuncoddesinestttor.
DeasemeneaMepoatefiutilizatpentrureferireacontroalelordinformsauraport:
Me!BusinessName

nchidereaformurilorsauarapoarteloresterealizatdeobiceicuajutorulunuibutonplasatn
cadrulformuluisauaraportului.Acestbutonfacereferiredecelemaimulteorilaunmacroimplicit,
nssepoatecreaosecvendecodpentruaceastaciuneastfel:
DoCmd.Close

Secvenademaisusnchideformulsauraportulactivinuneapratcelncareruleazcodul,
pentruaspecificaobiectulexactdorit,sescriemaibine:
DoCmd.Close ObjectType:=acForm, ObjectName:=Me.Name

EvenimentenAccess

1.3

EvenimentenAccess

VBA este un limbaj de programare bazat pe evenimente. n fiecare form sau raport Access,
exist o varietate de evenimente ce pot fi controlate. Se pot crea evenimente la deschiderea sau
nchidereaunuiformsauraport,pentruactualizareanregistrrilorsauacmpurilor.Fiecareeveniment
poateconineoprocedur.Proceduraesterulatnmomentulactivriievenimentuluicorespunztor.
PentruaputeafolosinmodeficientcapacitileVBApentruAccess,estenevoiessecunoasc
maintievenimenteleposibile.Acesteasempartnevenimentepentruformuri,rapoarteicontroale.
Celemaiimportantesuntdescrisentabeleledemaijos.
1.3.1

Evenimentepentruformuri

Eveniment
OnOpen
OnLoad

Before
Update
OnDouble
Click

OnUnload

OnCurrent

OnDelete
Before
Delete
Confirm
OnActivate

Descriere
AparenaintedeevenimentulOnLoadinaintedeaevaluasetuldenregistrri.Acesteveniment
poatefiutilizatpentruamodificasetuldenregistrriafiate.
Apare nainte de evaluarea setului de nregistrri din form. Se permite astfel realizarea unor
calcule pe baza cmpurilor afiate sau setarea unor valori default sau chiar modificarea unor
elementevizualenfunciededateledinsetuldenregistrri.
Sepoteditaanumitedatenaintecamodificrilerealizatedeutilizatorsfieactualizatenbazade
date.Toatevalorilecmpurilorsuntdisponibile.Evenimentulapareinaintecaonregistrares
fieintrodusnbazadedate.
Esteunevenimentcuunscopspecial.Dacseconstruieteunformceadieaznregistrricenu
potfieditate,pentruavedeadetaliileuneinregistrri,utilizatorultrebuiesdeadubluclickpe
nregistrare,declanndastfelevenimentulOnDoubleClick.Cuajutorulacestuievenimentsepot
selectadetaliileafiatedeform,mrindastfelgraduldesecuritatealformului.
Cuajutorulacestuievenimentsepoateverificavaliditateadatelornaintedenchidereaformului.
SepoateutilizaipentrutratareanchideriiaccidentaleaformuluisaualAccessprinafiareaunui
mesajdeconfirmaresuplimentar.
Acest eveniment este declanat atunci cnd nregistrarea curent din form este modificat.
nregistrarea curent este cea selectat de utilizator. Se pot crea subproceduri ce afieaz date
diferitenfunciedenregistrareacurent.
Se declaneaz la tergerea nregistrrilor, dar nainte de finalizarea aciunii. Este folosit n
combinaiecuBeforeDeleteConfirm.
Esteunevenimentdeclanatnaintedefinalizareatergeriiunuigrupdenregistrri.Dacacest
evenimentesteanulatniciunadintrenregistrrinuestetears.Conineunparametru,Response
cepoatefiutilizatpentrumodificareamoduluincareAccessvalideaztergerile.
Este declanat dup evenimentele On Open iOnLoad, chiar naintede afiarea formului. Este
declanatdeasemeneaicndunformesteselectat,astfelcpoatefiutilizatpentruareactualiza
saureinterogadateleafiatelarevenireadintrunaltform.

1.3.2 Evenimentepentrurapoarte
Eveniment
Descriere
OnOpen
Este declanat nainte de a evalua setul de nregistrri pentru raport. Ca i n cazul
formurilor, cu ajutorul acestui eveniment se pot face modificri asupra setului de
nregistrri nainte ca raportul s fie ncrcat. Este util cnd se utilizeaz un form cu
criteriideselecieadatelorconinutenraport.
OnActivate
Este activat dup un eveniment On Open i chiar nainte de afiarea ferestrei cu
raportul.
OnClose
Esteunevenimentactivatlanchidereaunuiraport.
OnNoData
Dacunraportnuconinedatenurmaevaluriinregistrrilor,sepoatedeclanaun
evenimentcarestratezeaceastsituaie.Deexemplusarputeaafiaunmesajsaus
arputeaafiaolistdecriteriideselecienou.
OnLoad
Se declaneaz dup evenimentul On Open. n acest caz, nregistrrile din raport au
fostevaluateidateleprimeinregistrrisuntdisponibile.

Capitolul12.FundamentealeprogramriiVBA(II)

1.3.3

Evenimentepentrucontroale

Eveniment
OnClick
BeforeUpdate

AfterUpdate
OnDoubleClick

Descriere
Esteactivatnmomentulncareuncontrolesteapsat(celmaidesunbuton)
Utilpentrucontroaleleacrorvaloareasaustaresepoatemodifica,cumarficheckboxsau
cmptext.Esteactivatnmomentulncareapareomodificareasupraunuicontrolinainte
ca aceasta s fie definitivat. Se paote astfel valida noua valoare a controlului. Dac se
anuleazevenimentul,atuncicontrolulrevinelastareainiial.
Se declaneaz dup ce are loc o modificare a unui control. Este un moment bun pentru a
controlanoulcmpactivsaupentruamanipulaaltecmpuriaflatenrelaiecucelcurent.
Se declaneaz cnd se face dublu click pe un control. Este util atunci cnd n paralel se
doretemodificareaunorelementenfunciedecontrolulactivat.

1.4

TratareaerorilornVBA

Ca i n orice alt limbaj de programare, n VBA este necesar tratarea evenimentelor sau a
eroriloraprutenmodneateptatlarulareaunuiprogram.Acestlucruimplicdeobiceioabsorbiea
erorilorpotenialeiafiareaunuimesajcorespunztor.Secveneledecodaleprocedurilorvorfiastfel
modificate.
Fratrataerorile,Accessconsidertoateerorilenmodegal,prinafiareaunormesajedecele
mai multe ori vagi privind eroarea survenit sau uneori oprete ntreaga execuie a aplicaiei. Erorile
suntmpritentreicategoriimarii:logice,deexecuie(runtime)ineateptate.
Erorile logice pot fi greu de identificat i rezolvat. O eroare logic (denumit i bug) apare de
celemaimulteoridatorituneierorimatematice:dateleaufostincorectutilizatensetuldenregistrri
sauutilizatorulaintrodusdateincorecte.
Eroriledeexecuiesauderuntimeaparntimpulrulriiunuiprogram,chiardacsecvenade
codestecompilatcorect.Potfideterminatedeexempludevaloride0sauvaloripreamaripentrutipul
de date utilizat, sau poate lipsa unui fiier extern. O eroare de execuie poate duce la o eroare fatal
urmat de oprireacomplet a aplicaiei,oeroare ce nu estetratat iAccess afieaz o eroare sau o
eroareneateptatcesarputeascauzezesaunuprobleme.Erorilefatalenupotfitratatenniciun
fel,astfelcemaibinesneaxmpecelecepotfirezolvatenvreunfelsaualtul.Eroriledeexecuie
nuindicdecelemaimulteoricauzaproblemei.
Erorileneateptatesunteroricenupotfiprezisenmomentulproiectriicodului,astfelcnu
potfitratatesubnicioform.Acesteeroriapardeexemplulantrerupereabruscaaplicaieisauerori
alesistemuluideoperare.
1.4.1

Creareasecvenelordetratareaerorilor
ErorilegeneratedecodulVBApotfitratatenmodexplicitncadrulprocedurilorsubforma:
Sub RoutineA()
On Error GoTo HandleError Trap the error
MsgBox Now in routine A
ExitHere:
MsgBox Now leaving routine A
Exit Sub
HandleError: Begin the error handler
MsgBox Error in routine A
Resume ExitHere Redirect out of error handler
End Sub

InstruciuneaOnErrorcreazocapcanpentrueroare,iarcoduldedupetichetaHandleError
trateazaceasteroare.Formatulsubrutineidemaisusestecelmaisimpluexempludetratareaunei
erori.OnErrorinformeazVBAcsedoretetratareadiferitaeroriiaprutefademetodaimplicit
VBA prin saltul la eticheta HandleError. Instruciunea GoTo Label este o ramificare necondiionat a
coduluilaoetichetdinproceduracurent.

TratareaerorilornVBA

10

1.4.2

TratareaerorilorcucodVBA
Anumite situaii pot cauza probleme utilizatorilor, cum ar fi un program care se oprete
neateptatiafieazunmesajdeeroareconfuzsauunprogramfuncioneazaparentcorect,darde
faptcorupedatele.PrinutilizareametodelorVBAdetratareaerorilorsepoateaduga osecvende
codcaresprevincomportamentulinconsistentsauoprireaaplicaiei.AccessiVBAoferoseriede
elementedetratareaerorilorianume:obiectulErr,instruciuniVBAdetratareaerorilor,evenimentul
Error i colecia ADO Errors. Erorile aprute por s fie cauzate de aplicaie sau de baza de date i n
funciedeaceastapotfitratatecuunanumitelementsaualtul.
ObiectulErr aparinelimbajuluiVBAiesteprezenttottimpul naplicaiileAccess.La apariia
uneierori,informaiidespreaceastasuntstocatenobiectulErrcepoatefiaccesatisepotdetermina
detaliialeerorii.Errconineinformaiidoardespreultimaeroareapruta,dacaceastaesterezultatul
unorerorincascad,acesteanupotfidetaliate.Obiectulestesuprascrisdefiecaredatcndapareo
eroare.Errareoseriedeproprieticeincludnumrul,descriereaisursa.Numrulestenumruldat
deVBAerorii.DescriereaprezintinformaiisumareprivinderoareaisursaidentificproiectulVBAce
agenerateroarea.MetodeleobiectuluiErrsunt:ClearpentrutergereainformaiilordinobiectiRaise
pentruaforaocondiiedeeroare,utilizatpentrutestareametodeidetratareaerorii.nsceamai
importantproprietateaobiectuluiErresteNumbericareeexemplificatmaijospentruadetermina
ceeroareafostgenerat:
Sub GenericProcedure()
On Error GoTo HandleError
Other VBA statements here
ExitHere:
Shut down statements here
Exit Sub
HandleError:
Select Case Err.Number
Case 123
Handle error number 123
Resume ExitHere
Case 456
Handle error number 456
Resume ExitHere
Case 789
Handle error number 789
Resume ExitHere
Case Else Unanticipated error
MsgBox Err.Number & & Err.Description
Resume ExitHere
End Select
End Sub

FiecareCasedeterminmodulncareoanumiteroareestetratatnfunciedenumrulerorii.
Resumefacesserevinlainstruciuneaceacauzatproblemaisseexecutedinnou.
InstruciunileprincipaleVBAdetratareaerorilorsunt:

OnErrorOnErrorGoToLabel,OnErrorGoTo0,OnErrorResumeNext
ResumeResumeNext,ResumeLabel

Un handler de eroare este o secven de cod ce este executat atunci cnd apare o eroare.
Eroarea poate fi specificat sau handlerul poate fi de tip general. Cnd se detecteaz o eroare se
executaciuneadefinitdehandler.Ceamaicomunrutindetratareaeroriloresteurmtoarea:
Function SampleCode
Dim statements here
On Error GoTo HandleError
Insert functional code here
ExitHere:
Cleanup code goes here
Exit Function

11

Capitolul12.FundamentealeprogramriiVBA(II)

HandleError:
Error handler code here
Msgbox Err.Description
Resume ExitHere
End Function

InstruciuneaOnErroractiveazhandlerul.Dacapareoeroare,execuiatrecelaurmtoarea
liniedupetichetaHandleError.Handlerulpoatestratezeeroaresaupoatesrezumeexecuianapoi
n procedur sau s ias din aceasta. MsgBox este o merot obinuit de informare a utilizatorului
privindceeacesantmplat.Dacapareoeroarentroprocedurcenuareactivatunhandler,VBAse
ntoarce la procedura apelatpentru agsi un handleri totaa nmod ierarhic pn lacelmai nalt
nivel.DacnusegseteniciunhandlerAccessafieazunmesajdeeroare.
InstruciuneaOnErrorGoToLabeldefinetesegmentuldecodpentruhandler:
Sub LogMoreErrors()
Dim db As DAO.Database
Dim rs As DAO.Recordset
On Error GoTo HandleError
Set db = CurrentDb()
Set rs = db.OpenRecordset(SELECT * FROM ErrorLog)
Put code here to use the information
retrieved from the ErrorLog table.
ExitHere:
rs.Close
Exit Sub
HandleError:
MsgBox Err.Number & & Err.Description
Resume ExitHere
End Sub

Este cea mai comun metod de prindere a erorilor n procedurile VBA. Etichetele pot fi
denumiteoricumdoreteprogramatorul,iarOnErroriResumepotssalteexecuialaoriceetichet
existentnprocedur.
OnErrorGoTo0dezactiveazhandlerulipermiteAccesssafiezenotificareaimplicit.
Sub DeleteTableDef()
Dim db As DAO.Database
Set db = CurrentDb()
Resume Next is described in the next section:
On Error Resume Next
The following statement throws an
error if tblTemp does not exist:
db.TableDefs.Delete tblTemp
On Error GoTo 0
More code here
End Sub

OnErrorResumeNextfacecaAccesssignoreeroriledincodceurmeazdup instruciune.
ToateerorileceapardupOnErrorResumeNextsuntignorate.Nuesteapelatniciorutinhandler.
Esteutilatuncicnderorilepotenialepotfiignorate.nexemplulurmtordacnusepoatetergelog
ul,rutinacontinusfieexecutat:
Sub DeleteTempFile()
On Error Resume Next
Kill C:\Temp.txt
End Sub

InstruciuneaKilltergefiiereletemporarecepotsaunusexistepedriveulC:.Killarunco
eroaredacfiierulnuexist.
Instruciunile Resume redirecteaz procesarea la o alt locaie din procedur. Ca i o regul
generaltratareaerorilornutrebuiesfiefcutprinEndSubsauEndFunctionpentrucmecanismul
detratarea aerorilor VBA rmne ntro starenedeterminat i seturile de nregistrripot s rmn
deschiseisgenerezealteerorisauinconsistenealedatelor.AstfelcResumetrebuiesredirecteze

TratareaerorilornVBA

12

la un cod ce nchide toate fiierele i obiectele deschise. Resume face ca motorul VBA s terag
condiiiledeeroareisrezumeoexecuienormal.
Resumefrnicioetichetntoarceexecuialaliniacareagenerateroarea.Estefolositatunci
cndutilizatorultrebuiesfacocoreciesaucndunhandlerarezolvatproblema.
Public Sub ResumeDemo()
On Error GoTo HandleError
Statement causing error occurs here:
Kill C:\Temp.txt
ExitHere:
Exit Sub
HandleError:
If MsgBox(Error! Try again?, vbYesNo) = vbYes Then
Resume
Else
Resume ExitHere
End If
End Sub

DacfiierulTemp.txtnupoatefiaccesat,procesareatrecelahandleruldeeroare.Mesajulde
eroareesteafiatntrebndutilizatoruldacdoretesncercencodatsteargfiierul.
ResumeNextesteutilizatatuncicndunhandlerrezolvproblemaceacauzateroarea.Acesta
ntoarce execuia la linia imediat urmtoare dup linia ce a cauzat eroarea. Procedura urmtoare
trateazlipsafiieruluiTemp.txtiexecutinstruciuneaKill:
Public Sub ResumeNextDemo()
On Error GoTo HandleError
Statement causing error occurs here:
Kill C:\Temp.txt
Other processing goes here
ExitHere:
Exit Sub
HandleError:
Error 53 = File not found
If Err.Number = 53 Then
Resume Next
Else
Handle other errors here
End If
End Sub

Aceast procedur demonstreaz cum o singur instruciunea On Error GoTo plus o decizie
logic n handler poate proteja codul de tot felul de erori, dar permite codului s ignore eroarea 53
deoarecenuafecteazexecuia.
Resume Label este metoda standard de ieire dintrun handler. Dac trebuie continuat
execuiantroaltparteacodului,seutilizeazoetichetnproceduracurent.Unaspectimportantal
Resume Label este c execuia programului este directat n mod tipic n punctul de ieire din
procedur:
Sub LogErrors(iNumber As Integer, sDesc As String)
Dim db As DAO.Database
Dim rs As DAO.Recordset
On Error GoTo HandleError
Set db = CurrentDb()
Set rs = db.OpenRecordset(SELECT * FROM ErrorLog)
rs.AddNew
rs![TimeStamp] = Now()
rs![Number] = iNumber
rs![Description] = sDesc
rs.Update
ExitHere:
These statements are executed regardless of whether
an error has occurred. This section provides a single

13

Capitolul12.FundamentealeprogramriiVBA(II)

place in this procedure for cleanup code:


On Error Resume Next
rs.Close
Set rs = Nothing
Exit Sub
HandleError:
Handle the error here
Resume ExitHere
End Sub

InstruciunileceurmeazdupetichetaExitHeresuntexecutateindiferentdacaaprutsaunu
oeroare.SeturiledenregistrritrebuienchisentotdeaunaisetarealorlaNothing.
EvenimentulErroresteometodbundetratareaaerorilorceaparnengineulbazeidedate
din spatele unui form sau a unui raport. Trebuie creat o procedur pentru ca evenimentul Error s
tratezeeroarea:
Sub Form_Error(DataErr As Integer, Response As Integer)
Insert error handler here
End Sub
Sub Report_Error(DataErr As Integer, Response As Integer)
Insert error handler here
End Sub

Existdouargumentealeacestorsubrutine:

DataErr este codul returnat de Access la apariia unei erori. Obiectul Err este
suprascrisdeevenimentulError.
Responseestesetatlaunadintreurmtoareleconstante:
o AcDataErrContinueignoreroareainuafieazmesajuldeeroareAccess
o AcDataErrDisplayafieazmesajuldeeroareAccess

Cnd se folosete AcDataErrContinue se poate utiliza un mesaj personalizat pentru eroare.


UrmtoareaproceduresteometodstandarddetratareaerorilorunuiForm:
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Dim strMsg As String
Select Case DataErr
Case 7787 OverwriteErr:
strMsg = You lose. Click on OK to see_
& updates from other people.
MsgBox strMsg, vbOKOnly + vbInformation
Response = acDataErrContinue
Case 7878 DataChangedErr:
strMsg = Another user has changed this _
& data while you were looking at it. _
& vbCrLf & Click OK to see _
& the other user changes.
MsgBox strMsg, vbOKOnly + vbInformation
Response = acDataErrContinue
Case Else
Default for any other errors:
Response = acDataErrDisplay
End Select
End Sub

Aceast rutin trateaz erori ce apar atunci cnd mai muli utilizatori fac modificri simultane
asupra aceleiai nregistrri. Engineul bazei de date Access arunc o eroare i permite formului s
notifice utilizatorul de apariia acestei probleme. Dac apar i alte probleme, Response e setat la
acDataErrDisplayipermiteAccesssafiezemesajeleproprii.
ColeciaADOErrorstrateazerorileaprutenobiecteleADOicreazunobiectErrorpentru
obiectul Connection. Aceste erori sunt denumite erori de acces la date. Dac apare o eroare, colecia
este resetat i noul obiect este pus n colecie. Un eveniment poate genera mai multe erori i toate
aceste erori sunt puse n colecia Errors. Colecia Errors are o singur proprietate, Count, ce conine

Testareacunotinelordobndite

14

numrul de erori. Obiectul Error are cteva proprieti ce includ Description, HelpContext, HelpFile,
NumberiSource.Dacexistmaimulteerori,eroareadecelmaimicnivelsuntprimelencolecie,iar
celedenivelnaltsuntultimelencolecie.
DacapareoeroareADO,obiectulVBAErrconinenumruleroriiprimuluiobiectdincolecia
Errors, dar trebuie verificat ntreaga colecie pentru a vedea toate erorile. Codul urmtor creaz un
handler pentru erori ale ADO Connection. Dac apare o eroare, codul de dup eticheta HandleError
ruleaziverificobiectulErrorncomparaiecuobiectulErr.Dacacestedouobiecteconinaceeai
informaieatuncieroareaesteunaADOiseafieazstrMessage.DacnueoeroareADOseafieaz
Err.Description:
Sub ADOTest()
Dim cnn As New ADODB.Connection
Dim errX As ADODB.Error
Dim strMessage As String
On Error GoTo HandleError
Insert your code here
ExitHere:
Exit Sub
HandleError:
If cnn.Errors.Count > 0 Then
If Err.Number = cnn.Errors.Item(0).Number Then
Error is an ADO Connection Error:
For Each errX In cnn.Errors
Loop through the Errors collection, displaying
the description of each Err object:
strMessage = strMessage & Err.Description & vbCrLf
Next errX
MsgBox strMessage, , ADO Error Handler
End If
Resume ExitHere
Else
The error is a VBA Error:
MsgBox Err.Description, vbExclamation, _
VBA Error Handler
Resume ExitHere
End If
End Sub

Ca i o concluzie, tratarea erorilor este esenial pentru crearea unor proceduri VBA care s
rulezecorectncontextulAccess.

1.5

Testareacunotinelordobndite
1.
2.
3.
4.
5.
6.
7.
8.
9.

CereprezintADO?PrezentaimodelulADOcastructurlogic.
PrezentaiceletreicomponenteADOpescurt.
CereprezintcuvntulcheieMe.Daiunexempludeutilizare.
Enumerai cteva evenimente pentru formuri, rapoarte i controale. Explicai declanarea
lor.
CtecategoriideeroriexistnVBA?
Prezentaistructurageneraldetratareauneierori.
Ceesteunhandler?
ExplicaipescurtinstruciunileOnErroriResume,precumivariantelelor.
ADOesteabreviereadela:
a. ActiveXDataObjects
b. AccessDataObjects
c. AccessDetailOrder
d. ActiveDetailOrder

15

Capitolul12.FundamentealeprogramriiVBA(II)

10. CuvntulcheieMe:
a. FacereferirelautilizatorulcareruleazcodulVBA
b. FacereferirelaformulsauraportulpecareruleazcodulcurentVBA
c. Facereferirelasecvenadecodcetrebuierulatlaurmtorulpas
d. Facereferirelamodulncareesteaccesatunformsauunraport
11. Unhandlerdeeroareeste:
a. Osecvendecodexecutatnmomentulncareapareoeroarelarulareacodului
b. Ometodprincareseevitapariiauneierori
c. UnpointerlanregistrareacurentdintrunsetdenregistrrisaurecordsetADO
d. OaciunedeclanatdeomodificareastriiunuiobiectAccess
12. Categoriiledeerorisunt:
a. devariabil,decodidepointer
b. logice,deexecuieineateptate
c. logice,conceptualeifizice
d. decod,deimplementareideaplicaie

1.6

Glosar
ADO
currentrecord
pointer
cuvntulcheieMe
eroriruntime(de
execuie)
eveniment
handlerdeeroare

ActiveXDataObjects
pointer la nregistrarea curent dintrun set de nregistrri sau recordset
ADO
facereferirelaformulsauraportulpecareruleazcodulcurentVBA
sunteroriceaparnmomentulexecuieiunuicodVBA,chiardacacestaa
fostcompilatcorect
aciunedeclanatdeomodificareastriiunuiobiectAccess
secvendecodexecutatnmomentulncareapareoeroarelarularea
codului

1.7

Bibliografie

M.Groh,Access2010Bible,Wiley&Sons,2010
M.MacDonald,Access2010TheMissingManual,OReilly,2010
T. Hennig, R. Cooper, G. Griffith, J. Dennison, Microsoft Access 2010, Programmers Reference, Wiley &
Sons,2010

Capitolul13.Conectorilabazededatedinlimbajede
programare

nacestcapitolveinva:

Cuvintecheie:

Censeamnunconectorlaobazdedate
CaresuntcomponenteleunuiconectornJava
CeesteJDBC
CeesteundriverJDBC
CumserealizeazunconectorlaobazdedatenJavaiPHP

conector,JDBC,Java,PHP,MySQL

Cuprins
Capitolul13.Conectorilabazededatedinlimbajedeprogramare..............................................1
1.1 Conectarealimbajelordeprogramarelabazededate...................................................2
1.2 ConectoriJava..................................................................................................................2
1.2.1 ExempludeconectorJava...........................................................................................5
1.3
1.4
1.5
1.6

ConectoriPHP..................................................................................................................9
Testareacunotinelordobndite..................................................................................10
Glosar.............................................................................................................................11
Bibliografie.....................................................................................................................11

Conectarealimbajelordeprogramarelabazededate

1.1

Conectarealimbajelordeprogramarelabazededate

Bazelededatereprezintotehnologieextremdeutilizatifolositoare.SistemeleDBMSofer
posibilitateamanipulriidatelorntrovarietatemaredemoduriioptimizeazmodulncareutilizatorii
interacioneaz cu datele. Aplicaii precum Access extind capabilitile unei baze de date prin
introducerea de elemente suplimentare de interaciune de tipul formurilor sau a rapoartelor. Chiar
dacfiecareDBMSfoloseteversiunimodificatealelimbajuluiSQL,elementeledebazaleacestuiasunt
respectate.
Dezvoltatoriidesistemecubazededatepotcreastructuridedatecomplexeieficiente,nsde
celemaimulteori,dezvoltatoriiuneiaplicaiinusuntidezvoltatoriidesistem.Astfelc,esteesenial
interaciuneacuobazdedatedintrunlimbajfamiliardezvoltatorilordeaplicaii.Pentruarealizaacest
lucru,existoseriedeclase,pachetesaumoduledefunciialelimbajelordeprogramarecarepermit
accesullaobazdedatecuminimdecunotintedeSQLifrinteraciuneadirectcuDBMS.
nceleceurmeazvorfiprezentatectevaexempledeconectorilabazededatedinJavaiPHP.
Toisebazeazpeprincipiilediscutatencapitoluldeinteroperabilitateabazelordedateinprincipal
peODBC.

1.2

ConectoriJava

Din Java similar cu ODBC discutat n capitolele anterioare, este definit un API, JDBC (Java
DataBase Connectivity). Acesta ofer o modalitate de conectare a clientului Java la bazele de date
relaionaleimetodeledeinterogareiactualizarealeacestora.
JDBC a fost lansat n 1997 de Sun Microsystems i conine dou pachete java.sql i javax.sql.
ClaseledinacestepachetepermitrulareadeinstruciuniSQLdetipulCREATE,INSERT,UPDATE,DELETE
ievidentinterogriSELECT.JDBCpoaterulainstruciunidetipul:

Statementtrimiselaserverulbazeidedatelafiecarerulare
PreparedStatement instruciuni stocate n cache i se apeleaz doar locaia lor pe
server.Oferometodeficientdeexecuie.
CallableStatementutilizatpentruproceduristocate.

PrintrecaracteristicileJDBCsenumr:

Este un API de nivel jos ce permite programelor s emit interogri SQL i returnarea
rezultateloracestora.Implementeazmetodedemanagementaerorilor.
ConformitatecuSQLJDBCnurestricioneaztipulinterogrilorlaunanumitDBMS,ci
implementeazstandardulSQL2EntryLevelcegaranteazoportabilitatemare.
JDBCpoatefiimplementatepestealteAPIuri,celmaicomunODBC
JDBCnucreazconflictentrelimbajulorientatpeobiecte(Java)iceltabular(SQL)

Iarcomponenteleacestuiasunt:
AplicaieaplicaiautilizatorinvocmetodeJDBCpentruatransmiteinstruciuniSQLbazeide
dateideareturnarezultatele.Realizeazurmtoarelefuncii:

Solicitoconexiunelasursadedate
TrimiteinstruciuniSQLlasursadedate
Definetelocaiiledestocareitipurilededatepentrurezultate
Solicitrezultate
Proceseazerori
Controleaztranzacii:solicitoperaiideCOMMITiROLLBACK
nchideconexiunea

Manageruldedriverncarcdriverelespecificeaplicaieiprin:

Localizareaunuidriverpentruoanumitbazdedate
ProceseazapeluriledeiniializareJDBC

Capitolul13.Conectorilabazededatedinlimbajedeprogramare

OferpunctedeintrarealefunciilorJDBCpentrufiecaredrivernparte
RealizeazvalidareaparametriloriasecvenelorpentruapelurileJDBC

DriverproceseazinvocareametodelorJDBC,transmiteinstruciuniSQLlaoanumitsursde
date i returneaz rezultatele aplicaiei. Uneori, driverele traduc sau optimizeaz cererile pentru a se
conformaunuiDBMSspecific.Funciilesalespecificesunt:

Stabilireaconexiuniilasursadedate
Transmitereacererilor
Traducerealacerereaaplicaieiutilizator
Returnarearezultatelorlaaplicaiautilizator
FormatareaerorilorncodulstandarddeeroriJDBC
Manipulareacursoruluirezultat
Iniiaztranzacii,dacestespecificatexplicit

DoucomponentemajorealeJDBCsuntJDBCAPIiJDBCDriverAPI.JDBCAPIesteointerfa
de programare pentru dezvoltatori. Pentru a stabili o conexiune, este nevoie s se urmeze o serie de
paisimilarintoiconectoriilabazededate.Primulpasestecreareauneimetodedeconectarelabaza
de date specific driverului utilizat. Eventual, sunt specificai parametrii pentru a localiza o anumit
baz de date sau a transmite datele de autentificare ale utilizatorului. O dat conexiunea stabilit se
permit transmiterea interogrilor, actualizri, toate instruciunile SQL, nchiderea conexiunii. n
continuaresuntprezentateinterfeeleJavacepermitutilizareaJavaAPI:

java.sql.DriverManageroclasceofermetodepentruncrcareadriverelorisuport
pentrucreareaconexiunilorfolosindmetodedinjava.sql.Driver.
java.sql.Connectionreprezintoconexiuneparticular
java.sql.Statement clas asociat unei conexiuni ce permite transmiterea
instruciunilorSQL
java.sql.CallableStatementlafelcaijava.sql.Statement,darpentruproceduristocate
java.sql.PreparedStatement similar cu java.sql.Statement, dar n contextul
instruciuniloraflatencache.
java.sql.ResultSetpermiteaccesullarndurileinterogrilorexecutate
java.sql.ResultSetMetaData ofer informaii despre tipul i proprietile coloanelor
rezultatuluiinterogrii.
java.sql.DatabaseMetaDataoferinformaiidesprebazadedatenntregime.

Driverele JDBC sunt mprite n patru tipuri principale: JDBCODBC Bridge (Bridge), Native
API/partlyJava(Native),AllJava/Netprotocol(Middleware)iAllJava/Nativeprotocol(Pure).
BridgetraducetoateapelurileJDBCnODBCiletransmitedriveruluiODBC.Esterecomandata
fiutilizatdoarcndnuexistoaltopiune.Avantajelesereferlaaccesullaoricetipdebazdedate,
deoareceODBCexistdeja.
Aplicaie
JDBCAPI

Driver

ODBC

DB

ConectoriJava

NativetraducapelurileJDBCnapelurispecificebazeidedate.Acestdriveresteparticularunui
anumittipdebazdedate.DeexempluOraclesauSQLServeraudriverulpropriu.Nupotfiutilizate
pentruaccesulprininternetdatoritspecificitiiaciunilor.Nupreamaiesteutilizat.
AplicaieJava
JDBCAPI

NativeAPIDriver

NativeAPI

DB

Tipul3,Middlewareproceseazcereriledinreeaprintrunserveradiionaldinreea.Serverul
traduce cererile spre baza de date. Serverul poate ns folosi drivere de tip 1, 2 sau 4. Protocolul
Middlewareestebazatpeservere,astfelcnuenecesarprezenauneilibrriispecificebazeidedate
nparteadeclient.DriverulescriscompletnJava,deciestecompletportabiliadecvatutilizriiweb.
AcestprotocolpermitecreareaunuitipdeJDBCdedimensiunireduseifoarteeficient.Deasemenea
ofer suport pentru cache, load balancing i administrarea avansat a sistemului prin loguri sau
auditare. Driverul e flexibil i permite accesul la mai multe tipuri de baze de date folosind un singur
driver. Este cel mai eficient dintre toate tipurile de drivere. Ca i dezavantaj este faptul c necesit o
aplicaieserversuplimentar,iartransferulnregistrrilorpoateduramaimult.
AplicaieJava
JDBCAPI

Drivertip3

Servermiddleware

DB

Protocolul Pure utilizeaz librrii Java pentru a comunica direct cu serverul bazei de date.
Avantajul major al acestui driver este c datorit utilizrii doar a limbajului Java sunt complet
independentedeplatformieliminproblemeledeimplementare.Estecelmaiindicatpentruutilizare
web. Numrul de traduceri este redus ceea ce mrete performanele. Un avantaj suplimentar este
faptulcnutrebuieinstalatsoftspecialnicipeparteadeserverinicipeceadeclient.Acestedrivere
pot fi downloadate dinamic. ns clientul are nevoie de tipuri diferite de drivere pentru fiecare tip de
bazdedate.

Capitolul13.Conectorilabazededatedinlimbajedeprogramare

AplicaieJava
JDBCAPI

Drivertip4
ProtocolNative

DB

1.2.1

ExempludeconectorJava
PentruaputearealizatranzaciintreJavaiobazdedatetrebuieincluseoseriedesecvene
decod.Primasereferlaincludereapachetuluijava.sqlcutoateinterfeeleprezentateanterior:
import java.sql.*;

Urmeazselectareaiiniializareadriverului:
Driver myDriver = new sun.jdbc.odbc.JdbcOdbcDriver();
java.sql.DriverManager.registerDriver(myDriver);

iapoideclarareaicreareaconexiunii:
Connection myConnection;
java.sql.DriverManager.getConnection();

Urmtoarea secven de instruciuni creaz un obiect de tip conexiune ce va transmite


instruciuni bazei de date. Metoda getConnection() este metoda de specificare a sursei de date
adresate:
String url = jdbc:odbc:mysource;
Connection myConnection = DriverManager.getConnection(url, javauser,
hotjava);

jdbc:odbc:mysource specific utilizarea unui driver de tip JDBCODBC Bridge, iar sursa este
mysource. javauser i hotjava sunt datele de autentificare ale utilizatorului. Managerul de drivere va
ncercsdetermineundriverJDBCcarepoatesaccesezesursadedatedelarespectivulURL.Pentrua
realizaoconexiunelaSQLServer,sevautilizadriveruljdbc:sqlserver:
String connectionUrl = "jdbc:sqlserver://mysource;" +
"databaseName=Northwind;user=javauser;password=hotjava;";
Connection con = DriverManager.getConnection(connectionUrl);

Elementeledescriseanteriorducladeschidereauneiconexiuni,cepoatefiscriscompletca:
import java.sql.*;
class SimpleExample
{
public static void main(String args[])
{
try {
String url = jdbc:odbc:mysource;
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Connection myConnection =
DriverManager.getConnection(url,
javauser, hotjava);
// ...
} catch (java.lang.Exception ex) {}
}
}

CaincazulVBA,esteesenialnchidereaconexiuniilaterminareaoperaiilor.Acestlucruse
poatefaceastfel:
import java.sql.*;
class SimpleExample

ConectoriJava

{
public static void main(String args[])
{
try {
// ...
String url = jdbc:odbc:mysource;
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Connection myConnection =
DriverManager.getConnection(url,
javauser, hotjava);
// ...
if (!myConnection.isClosed())
myConnection.close();
// ...
} catch (java.lang.Exception ex) {}
}
}

O dat stabilit conexiunea, putem transmite instruciuni SQL la baza de date accesat. O
instruciunetrebuiemainticreatideabiaapoitransmis:
Statement myStatement = myConnection.createStatement();
ResultSet rs = myStatement.executeQuery(
SELECT name, id, salary FROM employees ORDER BY +
salary DESC);

PentruactualizareauneinregistrrimetodaexecuteQuerysemodificnexecuteUpdate():
int res = myStatement.executeUpdate(UPDATE +
employees SET salary = salary*1.1 WHERE id = 1);

Lafelcaiconexiunileinregistrriletrebuienchise:
myStatement.close()

PnnprezentamreuitsimportmclaselejavaaferenteJDBC,siniializmdriverulpentru
sursadedate,conexiuneaistransmitemoinstruciuneSQL.Toateacesteapotfiscrisecompletastfel:
import java.sql.*;
class SimpleExample
{
public static void main(String args[])
{
String url = jdbc:odbc:mysource;
try
{
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
DriverManager.setLogStream(
java.lang.System.out);
Connection myConnection = DriverManager.getConnection(url,
javauser, hotjava);
Statement myStatement = myConnection.createStatement();
ResultSet rs = myStatement.executeQuery( SELECT * FROM employees);
myStatement.close();
myConnection.close();
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
}

Urmeaz procesarea rezultatelor returnate. Fiecare instruciune SQL returneaz un anumit tip
derezultatedupcumurmeaz:
CREATE TABLE employees (...)
SELECT * FROM employees
nregistrri returnate

- nimic
- nregistrri

ntreg,

numrul

de

Capitolul13.Conectorilabazededatedinlimbajedeprogramare

SELECT MAX(salary) FROM employees nregistrri i ntreg, numrul de


nregistrri returnate
UPDATE employees SET salary = 70000
WHERE name = Jones ntreg, numrul de nregistrri actualizate
INSERT INTO employees VALUES (...) ntreg, numrul de nregistrri
inserate
DELETE FROM employees WHERE salary > 150000 ntreg, numrul de
nregistrri terse

Pe scurt exist dou tipuri posibile de rezultate returnate: un ntreg sau un set de rezultate
alctuit din nregistrri ale tabelului. De aceea exist i dou metode diferite de tratare a acestora.
Pentru rezultatele ce returneaz rnduri sau nregistrri din tabel, exist metoda ResultSet.next() ce
itereaznregistrrile.Esteimportantssepoziionezecursorulpeprimanregistraredinset.
Statement myStatement = myConnection.createStatement();
ResultSet rs = myStatement.executeQuery(sqlQuery);
while (rs.next())
{
// avem o nregistrare
}
myStatement.close();
myConnection.close();
...
...

Un alt aspect important al rezultatelor este numrul i eticheta coloanelor, acestea putnd fi
returnatecuajutorulurmtoarelormetode:
int getMetaData().getColumnCount();
String getMetaData().getColumnLabel(int i);

ipoatefiscriscompletastfel:
...
Connection myConnection = DriverManager.getConnection(url,
javauser, hotjava);
Statement myStatement = myConnection.createStatement();
ResultSet rs = myStatement.executeQuery(sqlQuery);
int maxColumns = rs.getMetaData().getColumnCount();
for (int i = 1; i <= maxColumns; i++)
{
if (i > 1) System.out.print(, );
System.out.print(rs.getMetaData().getColumnLabel(i));
}
System.out.println(====================================);
while (rs.next())
{
// avem o nregistrare
}
myStatement.close();
myConnection.close();
...

Acesarea coloanelor sau a cmpurilor se poate face n ordine, de la stnga la dreapta. Pentru
accesaresepotutilizadateleobinutecuajutorulResultSetMetaDatasaucaiindici(poziianumerala
coloaneintabel).Accesulpebazanumeluicoloaneiestemaiintuitiv,nsnecesitoseriedecomparaii
de iruri de caractere ce nu sunt eficiente din punct de vedere computaional. Urmtorul exemplu
extragenumeledateledincoloanepebazaindeciloracestora:
...
java.sql.Statement myStatement = myConnection.createStatement();
ResultSet rs = myStatement.executeQuery(SELECT name, title, salary
FROM employees);
while (rs.next()) {
// print the columns of the row that was retrieved
String empName = rs.getString(1);
String empTitle = rs.getString(2);

ConectoriJava

long empSalary = rs.getLong(3);


System.out.println(Employee + empName + is + empTitle +
and earns $ + empSalary);
}
...

DatoritdiferitelortipuriderezultatereturnatedeoinstruciuneSQL,acesteapotfiprocesate
corectfolosindmetodagetResultSet(),carereturneazTRUEpentrunregistrriiFALSEpentrucazuln
carenuexistnregistrrisausereturneazunsingurntreg(deexemplupentruunUPDATE).Exemplul
urmtortrateazipotezancareoinstruciunereturneazmaimultetipuriderezultate:
...
Connection myConnection = DriverManager.getConnection(url,
javauser, hotjava);
Statement myStatement = myConnection.createStatement();
boolean resultSetIsAvailable;
boolean moreResultsAvailable;
int i = 0;
int res=0;
resultSetIsAvailable = myStatement.execute(sqlText);
ResultSet rs = null;
for (moreResultsAvailable = true; moreResultsAvailable; )
{
if (resultSetIsAvailable)
{
if ((rs = myStatement.getResultSet()) != null)
{
// we have a resultset
ResultSetMetaData rsmd = rs.getMetaData();
int numCols = rsmd.getColumnCount();
// display column headers
for (i = 1; i <= numCols; i++)
{
if (i > 1) System.out.print(, );
System.out.print(
rsmd.getColumnLabel(i));
}
System.out.println();
// step through the rows
while (rs.next())
{
// process the columns
for (i = 1; i <= numCols; i++)
{
if (i > 1)
System.out.print(, );
System.out.print(
rs.getString(i));
}
System.out.println();
}
}
}
else
{
if ((res = curStmt.getUpdateCount()) != -1)
{
// we have an updatecount
System.out.println(res + row(s) affected.);
}
// else no more results
else
{
moreResultsAvailable = false;
}

Capitolul13.Conectorilabazededatedinlimbajedeprogramare

}
if (moreResultsAvailable)
{
resultSetIsAvailable = myStatement.getMoreResults();
}
}
if (rs != null) rs.close();
myStatement.close();
...

Lafelcaipentruinstruciunisauconexiune,setulderezultatetrebuienchis:
rs.close()

n exemplele anterioare au fost prezentate toate elementele necesare crerii i utilizrii unui
conectorlaobazdedatefolosindJavacuJDBC.Acesteelementesuntrespectateipentrualtelimbaje
deprogramare.ncontinuarevafiexpusunexemplupentruPHP.

1.3

ConectoriPHP

PHPesteunlimbajdeprogramareacreatpentrudezvoltareadepaginiwebdinamice.Decele
mai multe ori acesta este folosit n combinaie cu MySQL, care este un RDBMS open source. Pentru
aceastaexistnPHPofunciededicat,mysql_connect(),cusintaxasimplificat:
mysql_connect(servername,username,password);

Undeparametriireprezint:

Servernameopional,specificserverullacareserealizeazconexiunea.Defaulteste
localhost:3306
Username,passwordopional,specificdateledeautentificarealeutilizatorului.

CaincazulJava,trebuiemaintistabilitoconexiune:
<?php
$con = mysql_connect("localhost","phpuser","passw");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// cod
Mysql_close($con);
?>
Pentru a transmite instruciuni, se foloete metoda mysql_query(), care transmite o singur
interogare. n cazul MySQL, interogrile trebuie neaprat s fie terminate cu punct i virgul (;).

resource mysql_query ( string $query [, resource $link_identifier ] )

link_identifier se refer la conexiunea curent, dac nu sa stabilit o conexiune, va ncerca


rularea metodei mysql_connect() fr parametrii. Pentru SELECT, mysql_query returneaz o resurs
(nregistrrile)sauFALSElaapariiauneierori.PentruINSERT,UPDATE,DELETEiDROPreturneazTRUE
laefectuareacusuccesiFALSElaeroare.ResursareturnatdeunSELECTpoatefiprocesatdefuncia
mysql_fetch_array() pentru a obine o nregistrare, sau de mysql_num_rows() pentru a determina
numrul de rnduri returnate. Pentru DELETE, INSERT sau UPDATE, mysql_affected_rows determin
numruldenregistrrimodificate.
UnexemplucompletdeconectarelaMySQLdinPHPesteurmtorul:
<?php
$con = mysql_connect("localhost","phsuser","passw");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

Testareacunotinelordobndite

10

$db_sel = mysql_select_db(Employees);
$firstname = 'fred';
$lastname = 'fox';
$query = sprintf("SELECT FirstName, LastName FROM Employees WHERE first
name='%s' AND lastname='%s'", $firstname, $lastname);
$result = mysql_query($query);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
while ($row = mysql_fetch_array($result)) {
echo $row['firstname']; //afiseaza rezultatele returnate
echo $row['lastname'];
}
// se elibereaz resursele
mysql_free_result($result);
mysql_close($con);
?>
n mod evident, PHP permite conectarea i la alte DBMS, cum ar MS SQL Server. Pentru
acesta, exist alt suit de metode definite, precum mssql_connect() sau mssql_select_db() care
selecteaza baza de date utilizat n interogri. De exemplu:

<?php
$myServer = "localhost";
$myUser = "phpuser";
$myPass = "passw";
$myDB = "Employees";
//conectarea la baza de date
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");
$query = "SELECT id, LastName, FirstName ";
$query .= "FROM Employees ";
$query .= "WHERE id=2";
$result = mssql_query($query);
$numRows = mssql_num_rows($result);
echo "<h1>" . $numRows . " Row" . ($numRows == 1 ? "" : "s") . "
Returned </h1>";
while($row = mssql_fetch_array($result))
{
echo "<li>" . $row["id"] . $row["name"] . $row["year"] . "</li>";
}
mssql_close($dbhandle);
?>

1.4

Testareacunotinelordobndite
1.
2.
3.
4.
5.
6.
7.
8.

Cereprezintunconectorlaobazdedate?
Caresuntelementeleprincipalealeunuiconector?
CeesteJDBC?
CaresuntcomponenteleicaracteristicileJDBC?
CtetipuridedrivereJDBCexist?Reprezentaischematicstructuraacestora.
CareestediferenadintreexecuiauneiinstruciunidetipUPDATEiunaSELECTnJava?
CeestePHPicareesteRDBMScucareestefolositcelmaides?
JDBCpoaterulainstruciunidetipul:

11

Capitolul13.Conectorilabazededatedinlimbajedeprogramare

a. Statement
b. PreparedStatement
c. CallableStatement
d. ActiveStatement
9. JDBCeste:
a. un API de nivel nalt ce permite programelor s emit interogri SQL i returnarea
rezultateloracestora
b. un API de nivel jos ce permite programelor s emit interogri SQL i returnarea
rezultateloracestora
c. unAPIdeniveljoscepermiteinteraciunealimbajelordeprogramare
d. unAPIdenivelnaltcepermiteinteraciunealimbajelordeprogramare
10. Undriver:
a. proceseazinvocareametodelorJDBC
b. transmiteinstruciuniSQLlaoanumitsursdedate
c. returneazrezultateleaplicaiei
d. verificmoduldeautentificarealutilizatorilor

1.5

Glosar
conectorlabaze secven de instruciuni ntrun anumit limbaj de programare ce permite
dedate conexiunealaobazdedateexternimanipulareadatelorconinutede
aceasta
driverJDBC componentsoftwarecepermiteinteraciuneaJavacubazelededate
JDBC JavaDataBaseConnectivity

1.6

Bibliografie
M.Parsian,JDBCRecipes,Apress,2005
J.Valade,PHP&MySQLForDummies4thEdition,WileyPublishing,2010
W.J.Gilmore,BegginingPHPandMySQL,4thEdition,Apress,2010

Capitolul14.PrezentareaaltortipurideRDBMS.

nacestcapitolveinva:

Cuvintecheie:

CaracteristicileMySQL
CaracteristicileOracle
CeesteOracleAPEX

MySQL,Oracle,OracleAPEX,opensource

Cuprins
Capitolul14.PrezentareaaltortipurideRDBMS...........................................................................1
1.1 MySQL..............................................................................................................................2
1.1.1 CaracteristiciMySQL...................................................................................................4
1.1.2 MySQLiPHP..............................................................................................................4
1.1.3 LimitrialeMySQL......................................................................................................5
1.1.4 AlternativelaMySQL...................................................................................................5
1.1.5 MySQLDBMS...............................................................................................................6
1.2 Oracle...............................................................................................................................6
1.2.1 CaracteristiciOracle...................................................................................................7
1.2.2 OracleAPEX.................................................................................................................8
1.3
1.4
1.5

Testareacunotinelor...................................................................................................10
Glosar.............................................................................................................................11
Bibliografie.....................................................................................................................11

MySQL

1.1

MySQL

MySQL1esteunsistemdebazededaterelaionalrealizatdeTcXDataKonsultABn1996.Soluia
arevoluionalpiaabazelordedateiaduslaparteneriateimportantecuRedHat,Veritas,Novellsau
Rackspace.n2008,MySQLafostachiziionaldeSunMicrosytems,carelarnduleiafostcumpratde
Oraclen2009.
Scopuliniialalaplicaieieraorientatnjurulperformaneiiascalabilitii.Rezultatulafostun
produsputernicoptimizatcenuincludeaoseriedecaracteristiciconsideratestandardpentrusoluiile
debazededate,cumarfiprocedurilestocate,triggerelesautranzaciile.
CaracteristicileimportantealeMySQLsunt:
Flexibilitatea indiferent de sistemul de operare, MySQL ofer suport pentru majoritatea
acestora: Compaq Tru64, DEC OSF, FreeBSD, IBM AIX, HPUX, Linux, Mac OS X, Novell NetWare,
OpenBSD,QNX,SCO,SGIIRIX,Solaris(versiunile8,9i10),iMicrosoftWindows.Deasemeneaexist
pacheteipentruRedHat,SUSEsauUbuntu.Pelngsistemeledeoperare,MySQLoferAPIuripentru
celemaipopularelimbajedeprogramare:C,C++,Java,perl,PHP,RubyiTcl.Pedealtpartesefolosesc
oseriedemecanismepentrumanagementuldatelor,denumitemotoaredestocare2.nmodsimilarcu
unalgoritm,unmotordestocareesteadaptatanumitefunciiparticulare.Dintremotoareleoferite,se
potaminti:MyISAM,MEMORY,InnoDBsauMERGE.nversiunea5aMySQLaufostadugateARCHIVE,
BLACKHOLE, CSV, FEDERATED i EXAMPLE. MySQL permite utilizarea mai multor motoare de stocare
simultannaceeaibazdedate.
Puterea chiar de la nceput, dezvoltatorii MySQL sau axat pe performan, cu costul lipsei
anumitorfaciliti.Printrecaracteristicileimportanteoferitesenumr:

Funcii SQL de nivel enterprise datorit lipsei unor funcii avansate, precum
subinterogrile, viewurile sau procedurile stocate, muli utilizatori nu au putut folosi
MySQLlanivelenterprise.nsnversiunea5,toateacesteaaufostintroduse.
Cutarea i indexarea textului n form complet aceast funcie permite mrirea
performanelor la manipularea coloanelor de tip text. n acelai timp, se permite
returnarea unor rezultate dependente de gradul de similitudine al interogrii cu
indexareatextuluidinnregistrare.
Cache pentru interogri este una dintre cele mai importante contribuii de
performan. Aceast funcie permite stocarea unor interogri SELECT mpreun cu
rezultatelereturnatenmemoriaintern.Interogrileefectuateulteriorsuntcomparate
cuinterogriledincache,iardacsepotrivesc,MySQLnumaiacceseazbazadedate.
Pentru a elimina returnarea unor rezultate neactualizate, exist mecanisme de
nlturarearezultatelornevalidedincache.
Replicarepermiteuneibazededatelocalizatpeunanumitserversfieduplicatpe
unaltserver.Seobinastfeloseriedeavantaje,cumarficanlocdeaaveaosingur
baz de date disponibil, se pot accesa alternative ale acesteia pentru a maximiza
disponibilitateadatelor.Sefaciliteazastfelibackupulprinutilizareabazelordedate
duplicat,frafinecesarunbackupoffline.

Securitateaesteasiguratprintromultitudinedeopiunideconfigurarecepermituncontrol
totalasupratuturoraspectelorimplicatenoperareabazeidedate.Sepotconfiguraelementedenivelul
dimensiunii memoriei alocate pentru firele de execuie, a interogrilor sau a tabelelor temporare sau
chiar elemente la nivel de numrul de tentative de conectare la reea, dimensiunea maxim a
pacheteloretc.ipotajungepnlanumruldeconexiunipermisentroorsaunumruldeactualizri
aledatelor.

http://www.mysql.com/
En.Storageengines

Capitolul14.PrezentareaaltortipurideRDBMS.

n plus, MySQL stocheaz informaii legate de numrul de octei transferai, numrul de


interogride un anumit tipexecutate,sau numrul defire deexecuiedeschise, n derulare,ncache
sauconectate.
OpiuniflexibilepentrulicenMySQLoferdoutipuridelicene:

MySQLOpenSourceLicencepermiteutilizareantreguluisoftsublicenGNUGeneral
Public Licence3 (GPL), ceea ce nseamn c se permite utilizarea modificarea i
redistribuirea surselor. Deoarece GPL implic redistribuirea gratuit i a softului
dezvoltat pe baza MySQL, se ofer i opiunea Suns Free and Open Source License
(FOSS) Exception4, ce permite utilizarea MySQL n combinaie cu software cu licene
opensourcedetipulApacheSoftwareLicense,BSDlicense,GNULesserGeneralPublic
License(LGPL),sauPHPLicense.
Licenacomercialestedisponibilpentrucazurilencarenusedoreteredistribuirea
opensourceaproiectelordezvoltatepebazaMySQL.nacestcazsepoatepltipentruo
licencorespunztoarecutipuldeaplicaiedezvoltat.

MySQLafostvremendelungatconsideratsatisfctordatoritvitezeisale,nsnacelaitimp
desconsiderat datorit lipsei facilitilor considerate importante pentru aplicaiile enterprise. n
continuaresuntprezentatepelargcaracteristicilecelormaicunoscuteversiunialeMySQL:
1. MySQL4.0lansatn2003afostconsideratcafiindoversiunecearevoluionatMySQL
prinintroducereaunorfunciidetipenterpriseprin:
a. MotoruldestocareInnoDBincludetranzacii,integritateacheiistrineilock
laniveldenregistrare.
b. Cache pentru interogri mrete performanele interogrilor de tip SELECT
prinstocarearezultateloracestoranmemoriefraaccesabazadedate.
c. Server MySQL embedded5 permite integrarea serverului MySQL n aplicaiile
embeddedpedispozitivedetiptelefonmobil,PDAsauCDROMuri.
d. Subinterogrireduccomplexitateaunorinterogri.
e. Conexiuni sigure prin utilizarea SSL (Secure Sockets Layer) utilizarea doar a
conexiunilornecriptatedetipclientserverpermitecadateledeautentificares
fieinterceptateichiarmodificatedeterepri.Odatcuversiunea4.0aufost
introduseconexiunilecriptate.
f. Extensii spaiale permit crearea, stocarea i analizarea informaiilor
geografice.Acesteapotfiutilizatepentruaafiapehrilocaiialeunorpuncte
deinteresntrunspaiudefinit
2. MySQL5lansatn2005,aintrodusunnousetdefunciidetipenterprise,mrindi
maimultcapabilitileMySQLprin:
a. ProceduristocateunsetdeinstruciuniSQLceestestocatnbazadedatei
poate fi apelat n mod similar cu funciile grup de tipul min() sau rand(). Prin
aceast funcie, n conformitate cu standardul SQL2003 a fost nlturat i
ultimuldezavantajmajoralMySQL
b. Viewuritabeleleuneibazededateconinanumiteinformaiicenutrebuies
fie accesate n mod public, astfel c se creaz viewuri ce limiteaz accesul la
datele stocate de tabelele bazei de date. Viewurile reduc i utilizarea unor
interogricomplexeasupramaimultortabele.Odatconstruitunviewprintro
interogaredetipSELECT,acestaestestocatnbazadedateipoatefiaccesatn
modsimilarcutabelele.Viewurilemaisuntdefiniteicafiindoreprezentare
virtualaunuisetdedatealeunuiasauamaimultortabele.

http://www.gnu.org/copyleft/gpl.html
www.mysql.com/about/legal/licensing/fossexception/
5
Embedded sistem ce permite realizarea uneia sau a ctorva sarcine specifice cu constrngeri de
realizarentimpreal.
4

MySQL

c. Triggeresuntproceduristocateapelatenfunciedeapariiaunuieveniment
specific.Suntfolositepentruavalidasauimpuneanumiteconstrngeriasupra
datelorinseratenbazadedate.
d. INFORMATION_SCHEMAnMySQLexistcomandaSHOW,cepermiteafiarea
structurilorbazeidedate.nsmetodologiaeiesteincompatibilcualtebazei
date i nu permite utilizarea ei n cadrul instruciunilor SELECT.
INFORMATION_SCHEMA ns conine metadate despre bazele de date de pe
server.
3. MySQL5.1include:
a. Motor de stocare API de tip plugin permite autentificarea utilizatorilor pe
baza unei soluii proprietare, filtrarea personalizat a datelor i interogarea
formatelornestandardizateprecumMP3.
b. Patiionarepermitemprireatabelelornsubsegmente,utilnmanipularea
unei cantiti mari de date. Performana interogrilor crete deoarece index
urile tabelelor sunt reduse la domenii mai mici i cu valori continue. Se poate
astfelpartiionadeexemplultabelulcuFacturipebazaanuluisaualuniincare
aufostemise.
c. Programarea evenimentelor execut anumite interogri pe baza unei
programritemporalealor
d. Testarea ncrcrii (load testing) permite emularea accesrii simultane a
bazeidedatedectremaimuliclienisimultan
4. MySQL5.4i5.5suntversiunilansatedupachiziiaMySQLdectreOracleiincludo
serienoudefunciipentruoptimizareaperformanelor.
1.1.1

CaracteristiciMySQL
SuntenumeratencontinuareoseriedecaracteristiciparticulareimportantealeMySQL.

Sistemcubazededatedetiprelaional
ArhitecturdetipclientserverspredeosebiredeAccess,dBasesauFoxPro,caresunt
sistemedetipfileserver,cedevinineficientenutilizareanreea
CompatibilitateSQLpermiteutilizareaSQLiaderlastandardulSQL2003cuoserie
derestricii, dar iextensii.Sepoateconfiguransnmodul sqlmodeidevineastfel
compatibilcumultiplesistemecubazededate,cumarfiDB/2sauOracle.
UnicodepermiteutilizareantreguluisetdecaractereLatin1,Latin2iUnicode(UTF8
sauUCS2)
InterfagraficexistmultipleinterfeepentrumanagementulserverelorMySQL
Cutareaiindexareatextuluinformcomplet
Replicarea
FunciiGISsauGeographicInformationSytemssuportpentrustocareaiprocesarea
datelorgeograficebidimensionale
Limbaje de programare exist o serie de APIuri i librrii pentru dezvoltarea de
aplicaiiMySQL.
ODBCMySQLofersuportpentruODBC,ceeacepermiteadresareaMySQLdincadrul
limbajelordeprogramareceruleazsubWindows(Delphi,VisualBasicetc.).
Independenadeplatform

1.1.2

MySQLiPHP
n cadrul aplicaiilor web, cea mai des ntlnit pereche de limbaj de programare i sistem de
bazededateesteperechePHPMySQL.Avantajeleacesteicombinaiisunturmtoarele:

Amndousuntgratis
Suntorientatepeaplicaiiweb
Suntuordeutilizat
Suntrapideieficiente
Comuniceficientunulcualtul.

Capitolul14.PrezentareaaltortipurideRDBMS.

n aceast pereche,PHP este un limbajdeprogramare cepermitescriereadeaplicaii simple,


precumafiareauneipaginiwebsaucomplexe,precumvalidareadatelorintrodusedeunutilizatorntr
un form. PHP poate fi inclus n fiiere HTML prin intermediul tagurilor PHP. Cnd o anumit sarcin
necesit accesul la o baz dedate, PHPoferun set de funciide acces directla MySQL . n capitolul
anteriorafostdescrismodalitateadecreareaaunuiconectorPHPlaMySQL.
1.1.3

LimitrialeMySQL
ContrarmultipleloravantajealeMySQL,ceoptimizeazperformanelebazelordedateipermit
utilizarea acestuia n cadrul unor aplicaii numeroase, exist o serie de limitri de ordin tehnic, ce
trebuieluatenconsiderarenmomentulalegeriiuneisoluiipentruunsistemcubazededate.
O prim limitare se refer la utilizare n cadrul tabelelor standard (de tip MyISAM), lockul se
poate face doar la nivel de tabel. Problema poate fi ocolit prin utilizarea unor alte formate, precum
InnoDB,cepermitlocklaniveldenregistrare.
TotpentrutabeleMyISAM,nusepotexecutabackupuridacexistlockuriactive.Soluiaeste
dinnouInnoDB.
UndezavantajimportantsereferlafaptulcMySQLnupermitedefinireatipurilordedatede
tiputilizator,ceeacelimiteaztipuldedatecepoatefistocatntabeleleacestuitipdebazdedate.
AlturideacestdezavantajsesuprapuneilipsadeprocesareadatelordetipXML.
Dei un sistem performant i rapid, MySQL nu utilizeaz funcii de tip OLAP (Online Analytical
processing). Aceste funcii sunt utilizate pentru managementul i analiza datelor multidimensionale.
Sistemelecubazededateceimplementeazacestemetodesuntdenumiteidatawarehouse.
Ultimelecapabilitiadugate,procedurilestocate,triggerelesaufunciileGISnuaustabilitatea
ifuncionalitateaaltorsistemecubazededate.
1.1.4

AlternativelaMySQL
Exist bineneles o serie de alternative la MySQL, printre care se numr i MS SQL Server
discutat n cadrul acestui curs. Abordm aceast problem aici, datorit caracterului open source al
MySQL.Restulsoluiilor,precumIBMDB2,Informix,MSSQLServersauOraclesuntprodusecomerciale
cupreurirelativridicate.
OalternativimportantaMySQLestePostgreSQL6.Acestaofermultmaimultefunciifade
MySQL, ns esteconsideratmai lent i mai puin stabil. Pentrusoluiicubazede datede dimensiuni
reduse, se poate lua n considerare SQLite7, o librrie disponibil pentru funciile elementare ale unei
baze de date. SQLite este disponibil n mod gratuit chiar i n cadrul aplicaiilor comerciale i este
potrivit aplicaiilor standalone i mai puin aplicaiilor n reea. SQLite este integrat mai nou i n
versiunilePHP.
Existioseriedesistemedebazededatecomercialeceaufostconvertitelaopensource.Cea
mai cunoscut este Firebird, anterior Interbase from Inprise/Borland8. Ultima, dar nu cea din urm, o
soluiecunoscut,MaxDB,anteriorSAPDB9,careestentreinut icomercializatdeMySQL,nsnu
arepreamultencomuncuaceasta.MaxDBesteunsistemdebazededateprofesionalicomprehensiv
ceincludedezavantajelesistemelorcomercialedediensiunimari:instalare,administrareimentenan
complexculipsadocumentaieiiasuportuluipentruprodus.

nconcluzie,MySQLesteunsistemdebazededaterelaionaldetipclientserver.Estesuficient
desiguristabilpentrumulteaplicaiiioferunraportcalitatepreexcelent(nudoardatoritfaptului
c este gratis, ci i datorit cerinelor hardware reduse). MySQL a devenit un cvasistandard n cadrul

http://www.postgresql.org/
http://www.sqlite.org/
8
http://firebird.sourceforge.net/
9
http://www.mysql.com/products/maxdb/
7

Oracle

aplicaiilorweb.nplus,nLinux,MySQLesteutilizatdincencemaimultnaplicaiicaiunmotorde
baze de date de fundal, fie pentru ndosarierea datelor n mod eficient, sau pentru managementul
fiierelorMP3,aemailurilorsauadatelorcepotficomparate.
1.1.5

MySQLDBMS
nmodsimilarcuMSSQLServer,MySQLoferunDBMSintuitivcompletdemanipulareaunei
bazededate.ntregulkitdeinstalarepoatefidownloadatdelahttp://www.mysql.com/downloads/i
coninemotorulbazeidedate,bazadedateiunDBMSdenumitMySQLWorkbench:

Acesta permite conectarea la o instana a bazei de date i manipularea datelor coninute de


aceastaprinintermediulscripturilorSQLsauprocedurilorstocate.SpredeosebiredeMSSQLServersau
Accessnudispunedeointerfagraficdemanipulareadatelorattdeevoluat.

1.2

Oracle

Oracleapornitnanii1977caiRelationalSoftwareIncorporated(RSI)iOracleV.2afostprima
bazdedaterelaional.n1983,RSIafostredenumitOracleCorporationpentruaevitaconfuziacuun
competitordenumitRTI.Totatunci,afostcreatiprimaversiuneportabil,OracleV.3cerulaattpe
sistemeDigitalVAX/VMS,ctipeUnixsaualteplatforme.Pnn1985areuitsobinsuportpentru
30 de platforme, dintre care multe sunt acum disprute. n plus fa de suportul pe mai multe
platforme, Oracle a dorit i crearea de suport pentru software complementar, conectivitate n reele
standard i implementarea ANSI SQL pe multiple platforme. De asemenea a fost prima baz de date
distribuitceainclusJavaVirtualMachinenmotorulbazeidedate.
VersiunileifuncionalitiintermediarealeOraclesunturmtoarele

OracleRelease21979primabazdedaterelaionalcomercialceutilizeazSQL
ClientserverOracle1986
Oracle61989
OracleParallelServer1991peplatformemasivparalele
Oracle71993
Oracle7.11994
Orcle 8 1997 include caracteristici obiectualrelaionale i Very Large Database
(VLDB)
Oracle8i1999JavaVirtualMachineeinclusnbazadedate
Oracle9iApplicationServer2000

Capitolul14.PrezentareaaltortipurideRDBMS.

Oracle9iDatabaseServer2001
Oracle Database 10g 2003 permite grid computins i automatizeaz funciile de
managementacheilor
OracleDatabase11g2007

Oracle 11g este cea mai recent versiune a Oracle RDBMS ce include o familie de produse:
OracleEnterpriseEditionpentrubazededatededimensiunimari,OracleStandardEditioniOracle
Standard Edition One implementri de dimensiuni reduse. Oracle Personal Edition pentru
dezvoltatorisingulariiOracleExpressEditionorientatspreaplicaiiacademiceentrylevel.
Bazele de date Oracle sunt produse larg rspndite ce implementeaz caracteristici pentru:
dezvoltareaaplicaiilorcubazededate,conectarealabazededate,bazededatedistribuite,migrarea
bazelordedate,performaneimanagementulbazelordedate.
1.2.1

CaracteristiciOracle
Fiindunuldintrecelemaiavansateprodusedebazededatedepepia,caracteristicilesalese
rsfrngasupratuturoraspectelorsistemelorcelimplementeaz,porninddelalimbajuldeprogramare
ipnlaperformaneledeaccesladate.

LimbajedeprogramaremultipleofersuportattpentrustandardulSQL,ctipentru
PL/SQL,careesteunlimbajprocedural.Unlimbaj importantutilizat,esteJava,acrui
JVM exist n baza dedate.Opiunile Oracle data warehousingpentru OLAPincludun
APIJava.
Programareorientatpeobiectesepotdefiniastfeltipuridedateutilizator,metode
sauatribute.
LargeObjects(LOBs)pentrustocareadatelornestandard,cumarfiimaginile
3rdgenerationlanguagespermiteinteraciuneadinC,C++,Java,COBOLsauFortran
ODBCtoateversiuniledeOracelincludaccesulviaODBCsauJDBC
Oracle Call Interface (CLI) optimizarea performanelor prin utilizarea unui limbaj
specializatdetratareainterogrilor
NationalLanguageSupport(NLS)oferseturidecaractereifuncionalitiasociate,
precumformatuldateisauanumerelorpentrumultiplelimbi.Oracle10gofersuport
pentruUnicode3.2.
FunciiGIS
XMLOracleaadugatsuportpentruXMLncepndcuOracle9i
OracleNetinterfaadereea.Poatefifolositcuovarietatedeprotocoale.
OracleInternetDirectory(OID)permiteconectareaclienilorlaserverfrafinevoie
deunfiierdeconfigurarespecial.
Multiplexarea conexiunilor prin Connection Manager n vederea reducerii numrului
deconexiunisingularelaserver.
Advanced Security Option permite criptarea n reea folosind RSA Data Securitz,
algoritmulRC4sauDES
Interogri i tranzacii distribuite una dintre cele mai importante caracteristici ale
Oracle. Permite conectarea simultan a unui numr mare de utilizatori i stocarea
datelorpemultipleservere.
Servicii eterogene permit ca datele nonOracle s fie accesate dintro baz de date
OraclefraaveanevoiedeODBCsauOLEDB.
Importul i exportul datelor este realizat n mod eficient prin replicare, sau prin aa
numiteletransportabletablespacecaresereferlaimportuliexportulmetadatelor.
AdvancedQueuing(AQ)permitetranmitereademesajeasincronedelaobazdedate
Oraclelaalta.
Baze de date paralele interogrile sunt separate n componente de complexitate
redus i executate n paralel pentru eficientizarea accesului. Printre elementele
descompuse se numr: clauze GROUP BY, subinterogri de tipul NOT IN, proceduri

Oracle

stocate,clauzeUNION iUNIONALLdetipulSELECTDISTINCTsauclauzeORDERBYi
agregri. Valoarea implicit de paralelizare este egal cu de dou ori numrul de
procesoareexistente.
Indexarea imaginilor de tip bitmap Oracle ofer suport pentru indexarea imaginilor,
faptceextindemultcapacitiledestocarealeuneibazededatedeacesttip.
OpiuniOLAP
Recovery Manager permite restaurarea bazelor dedate n careau surveniterori. Se
potfacebackupurilantreagabazadedate,lafiieresautabele.
FailSafeoferungradmairidicatdencrederepentruobazdedateOracle.
Oracle Forms and Reports developer unealt de definire de formuri i rapoarte n
bazelededateOracle.Esteunlimbajdegeneraiaapatra(4GL)ceeacenseamncse
scriuproprietialeobiectelorinucodprocedural.
OracleJDeveloperpentrucreareadeaplicaiiJavafrafinevoiessescriecod.
OracleDesignerinterfagraficpentruRapidApplicationDevelopmentdelacrearea
unuimodelconceptuallaimplementare.
OraclePortalounealtbazatpeHTMLpentrudezvoltareadeaplicaiiweb.

1.2.2

OracleAPEX
OracleApplicationExpress(APEX)esteounealtRapidApplicationDevelopment(RAD)bazat
pe tehnologia Oracle. APEX ruleaz complet ntrun browser http://apex.oracle.com/ i nu necesit
instalarea niciunui soft adiional. Aplicaiile dezvoltate se desfoar n ntregime online. APEX face
partedinOraclePortalifiindRADnlimbaj4GL,nseamncnusescriecodefectiv,cidoarseseteaz
parametriiunorelemente.FaptulcesteintegratdirectcuOraclenseamncaplicaiilederivdirect
dinmodeluldedate.Deexemplu,aplicaiileAPEXimplementeazautomatrelaiiledintretabelefra
scriesecvenedecod.
Se folosesc aceleai tehnici pentru crearea de formuri, rapoarte sau grafice i chiar i pentru
metodele de navigare. APEX poate fi extins ns prin HTML pentru modificarea prezentarea grafic a
aplicaiei sau cu libajul procedural PL/SQL pentru a crea operaii adiionale logice n backendul
aplicaiei.
Alteavantajealeacesteiaplicaiisereferlaposibilitateamigrriidatelordintrocompanie,sau
bazelededatealeacesteiacuajutorulfiierelorExcel.DeasemeneapermitemigrareaaplicaiilorAccess
ctreaceasta.
Oracle APEX ofer conturi gratuite clienilor ce o utilizeaz n scopuri educaionale i non
comerciale.Conturileutilizatorilorsuntoferitenmodautomatpebazacompletriiunuiformular.

Capitolul14.PrezentareaaltortipurideRDBMS.

Se pot crea astfel siteuri web complete cu formuri, rapoarte sau liste populate sau care
populeazobazdedatedefinitdeutilizator.nimagineademaijossuntprezentatetipuriledepagini
cepotfiinserate:

Coninutuluneipaginiestedefinitdecomponenteleexistentenaceasta.Deexempluopagin
cuunraportalunuitabelcearatastfel:

Conine urmtoarele elemente, separate n module de redare, procesare i componente


comune.Seciuneaderedaresaurenderingsereferlaregiunilecevorfiafiatencadrulpaginiiweb,
cum ar fi raportul din exemplul de mai sus. Componentele de procesare indic aciunile ce sunt
efectuate la ncrcarea paginii sau la apsarea unui anumit buton. Componentele comune sau
partiionate sunt n general componente de tip meniu sau alte componente independente de pagina
curent sau care au o caracteristic de generalitate ce le permite incluziunea n mai multe pagini cu
caractersimilar.

Testareacunotinelor

10

Partea de dezvoltare de aplicaii web cu baze de date a APEX este susinut de o serie de
componente de dezvoltare SQL a bazei de date efective. Aceasta este denumit SQL workshop i
permitecreareadescripturi,obiectesaucomenziSQL.

Obiectelecepotficreatesunt:

Se pot defini n acest mod toate componentele unei pagini sau a unui ntreg site web ce
utilizeazbazededate.AstfelcAPEXreprezintomodalitaterapidiflexibildecreareasiteurilor
detipmagazinvirtualsaueLearning.SuportulpentrumultimediaalOraclepermitecreareaunorpagini
interactiveicreativepentrututorialesauaplicaiiuserfriendlyintuitive.

1.3

Testareacunotinelor
1. CeesteMySQL?

11

Capitolul14.PrezentareaaltortipurideRDBMS.

2.
3.
4.
5.
6.
7.
8.
9.
10.

1.4

CaresuntcaracteristicileMySQL?Enumerai5celemaiimportante.
DeceMySQLestecelmaidesntlnitncombinaiecuPHP?
CareesteavantajulmajoralMySQL?
CaresuntalternativelaMySQL?
CeesteOracle?
CaresuntcaracteristicileprincipalealeOracle?
CareestediferenamajordintreOracleiMySQL?
CeesteOracleAPEX?
CegeneraiedelimbajdeprogramarefoloseteOracleAPEX?

Glosar
4GL FourthGenerationLanguagelimbajdeprogramaredegeneraiaapatra.
Nu presupune scrierea efectiv a secvenelor de cod, ci definirea
proprietilorunorcomponentespecifice.
OracleAPEX Oracle Application Express. Sistem RAD cu limbaj 4GL pentru creare de
aplicaii ce utilizeaz baze de date. Este complet integrat ntro aplicaie
webinunecesitinstalareadesofturisauunelteadiionale
RAD RapidApplicationDevelopment metodologiededezvoltareaaplicaiilor
softcepresupuneutilizareacombinataprototipurilorsoftcusecvenede
cod. Implic de cele mai multe ori dezvoltare iterativ cu restructurarea
anumitorcomponente.

1.5

Bibliografie
W.J.Gilmore,BegginingPHPandMySQL,FourthEdition,Apress,2010
M.Koefler,TheDefinitiveGuidetoMySQL5,ThirdEdition,Apress,2005
J.Price,OracleDatabase11gSQL,McGrawHill,2008
R.Greenwald,BeginningOracleApplicationExpress,WileyPublishing,2009

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