Documente Academic
Documente Profesional
Documente Cultură
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.
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
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
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
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
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
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
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:
eliminautorizrile
REVOKE
ex:
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
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
Creareaunuitabel
Creareaunuiview
1.4.2
InstruciuneaALTER
CuajutorulintruciuniiALTERsepoaterealizaadugarea,tergereasaumodificareacoloanelor
dintruntabel.
1.4.3
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
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
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
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;
1.3
InstruciuneaINSERT
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
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;
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
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.
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
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.
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
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.
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
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
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:
Column_Privilegesprivilegiileutilizatorilorasupracoloanelor.
Columns coloanele i tipurile acestora. Se pot selecta toate coloanele sau doar
coloaneleunuianumittabel:
DeterminareastructuriiuneibazededatefolosindscripturiSQL
10
Constraint_Column_Usagecoloaneleceaudefiniteconstrngeri.inacestcazsepot
determina doar coloanele unui anumit tabel, folosind clauza WHERE TABLE_NAME =
<numeTabel>.
Constraint_Table_Usagetabeleleceaudefiniteconstrngeriasupracoloanelorlor:
Domain_Constraintsconstrngerialedomeniilordefinitedeutilizator
Domains tipurile de date definite de utilizator. Se por crea aliasuri sau domenii noi
definitedeutilizatorprin:
IarnviewulDomainsalInformation_Schemavorfistocateacestedomenii:
SELECT * FROM INFORMATION_SCHEMA.DOMAINS
Key_Column_Usagecoloanelecheiprimaresaustrinedincadrultabelelor:
11
Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite
Parameterscoloaneleutilizatenfunciilesauprocedurilestocatedefinite
Referential_Constraintscheilestrinedinbazadedate
Routine_Columnscoloaneleutilizatenprocedurilestocatesaufunciilebazeidedate.
Dacamdefinioprocedurstocatcaresparsezedataueicoloanedintruntabel:
AceastavaaparedefinitnRoutine_Columns:
DeterminareastructuriiuneibazededatefolosindscripturiSQL
12
Routinesprocedurilestocateifunciiledefinitenbazadedate:
Schematainformaiidesprebazelededatedepeserver
Table_Constraintsconstrngeriasupratabelelor
GRANT INSERT
ON Employees
TO PUBLIC
IaracestlucruvaaparenTable_Privileges:
SELECT * FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
Tablesinformaiidespretabeleiviewuri:
13
Capitolul7.Metodededeterminareastructuriiuneibazededatepredefinite
View_Column_Usagecoloaneletabelelorutilizatenviewuri:
View_Table_Usagetabeleleutilizatenviewuri:
Viewsinformaiidespreviewuri:
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
furtifraud
pierdereaconfidenialitii
pierdereaintimitii
pierdereaintegritii
pierdereadisponibilitii.
1.2.1
Riscuri
Riscoricesituaie sauevenimentintenionatsauneintenionatcarepoateafectasistemul i
prinurmareorganizaia.
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)]
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;
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
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:
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
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
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:
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.
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
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
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
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:
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
Reprezentareadateiiatimpului
SintaxaOUTERJOIN
Sintaxafunciilorscalare
Metodadeinvocareaprocedurilorstocate
CoreciiledinamicealeinstruciunilorSQL
ConversiilelavaloriNULLiirdecaracterededimensiunezero
Suportulpentruinserareairurilordecaracterededimensiunemare
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
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
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
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
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
!!!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
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
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
13
Capitolul11.FundamentealeprogramriiVBA(I)
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.
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)
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
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)
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
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();
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
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
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 (;).
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.
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.
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:
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:
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