Proiectare, implementare s ,i exploatare Teodora Sanislav, Liviu Miclea, Honoriu V ˘alean Universitatea Tehnic ˘a din Cluj-Napoca EDITURA U.T.PRESS… [600347]

BAZE DE DATE RELAT,IONALE
S,I NERELAT,IONALE

BAZE DE DATE RELAT ,IONALE
S,I NERELAT ,IONALE
Proiectare, implementare s ,i exploatare
Teodora Sanislav, Liviu Miclea, Honoriu V ˘alean
Universitatea Tehnic ˘a din Cluj-Napoca
EDITURA U.T.PRESS

Copyright c
2015 Editura U.T.PRESS.
Reproducerea integral ˘a sau part ,ial˘a a textului sau ilustrat ,iilor din aceast ˘a carte este posibil ˘a
numai cu acordul prealabil scris al editurii U.T.PRESS.
Multiplicarea executat ˘a de Editura U.T.PRESS.
ISBN
Bun de tipar:
Editura U.T.PRESS
str. Observatorului nr. 34, Cluj-Napoca
C.P. 42, O.P. 6, tel.: 0264-401999, fax: 0264-430408
e-mail: [anonimizat]
www.utcluj.ro/editura

CUPRINS
List˘a figuri ix
List˘a tabele xiii
Acronime xv
Not ,iuni introductive xvii
I.1 Definit ,ie s ,i avantaje xvii
I.2 Propriet ˘at,i xviii
I.3 Modele de date xviii
I.4 Sisteme de gestiune a bazelor de date xx
Referint ,e bibliografice xx
PARTEA I BAZE DE DATE RELATIONALE
1 Proiectarea bazelor de date relat ¸ionale 3
1.1 Determinarea scopului bazei de date 3
1.2 Modelul conceptual al bazei de date 3
1.3 Modelul logic al bazei de date 4
1.4 Exemplu de proiectare a unei baze de date relat ,ionale 6
1.4.1 Scopul bazei de date 6
1.4.2 Modelul conceptual al bazei de date – exemplificare 6
1.4.3 Modelul logic al bazei de date – exemplificare 7
v

vi CUPRINS
Exercit ,ii 10
Referint ,e bibliografice 11
2 Implementarea bazelor de date relat ¸ionale 13
2.1 Crearea, modificarea s ,i s,tergerea unei baze de date 14
2.2 Crearea, modificarea s ,i s,tergerea tabelelor unei baze de date 14
2.3 Introducerea, modificarea s ,i s,tergerea informat ,iilor ˆın tabelele unei
baze de date 18
2.4 Exemplu de implementare a unei baze de date relat ,ionale 20
2.4.1 Crearea bazei de date – exemplificare 20
2.4.2 Crearea tabelelor bazei de date – exemplificare 23
2.4.3 Introducerea, modificarea s ,i s,tergerea informat ,iilor ˆın
tabelele bazei de date – exemplificare 29
2.4.4 Copierea bazei de date – exemplificare 34
Exercit ,ii 35
Referint ,e bibliografice 36
3 Exploatarea bazelor de date relat ¸ionale 37
3.1 Exploatarea bazelor de date relat ,ionale prin comenzi SQL 37
3.2 Exploatarea bazelor de date relat ,ionale prin secvent ,e de cod PL/SQL 41
3.2.1 Blocuri anonime 44
3.2.2 Cursoare 45
3.2.3 Proceduri stocate 46
3.2.4 Funct ,ii 47
3.3 Exemplu de exploatare a unei baze de date relat ,ionale 48
3.3.1 Exploatarea bazei de date prin comenzi SQL – exemplificare 48
3.3.2 Exploatarea bazei de date prin secvent ,e de cod PL/SQL –
exemplificare 49
Exercit ,ii 55
Referint ,e bibliografice 56
4 Realizarea aplicat ¸iilor care lucreaz ˘a cu baze de date relat ¸ionale 57
4.1 Realizarea unei aplicat ,ii MVC care lucreaz ˘a cu o baz ˘a de date 57
4.1.1 Model-View-Controller 57
4.1.2 Componente care trebuie instalate pentru realizarea aplicat ,iei 58
4.2 Exemplu de realizare a unei aplicat ,ii MVC cu baz ˘a de date
implementat ˘aˆın Oracle Database 11g Express Edition 59
4.2.1 Crearea aplicat ,iei de tip ASP.NET MVC Web Application 59
4.2.2 Structura aplicat ,iei de tip ASP.NET MVC Web Application 60
4.2.3 Compilarea s ,i rularea aplicat ,iei de tip ASP.NET MVC Web
Application 60

CUPRINS vii
4.2.4 Conectarea la baza de date a aplicat ,iei de tip ASP.NET MVC
Web Application 61
4.2.5 Crearea modelului de date al aplicat ,iei de tip ASP.NET MVC
Web Application 62
4.2.6 Crearea componentelor de tip controller s ,i view ale aplicat ,iei
de tip ASP.NET MVC Web Application 65
Exercit ,ii 70
Referint ,e bibliografice 70
PARTEA II BAZE DE DATE NERELATIONALE (NOSQL)
5 Prezentarea modelelor de date s ¸i a solut ¸iilor de implementare NoSQL 73
5.1 Modelul de date cheie-valoare 74
5.1.1 Amazon DynamoDB 74
5.1.2 Oracle NoSQL Database 75
5.1.3 Redis 76
5.2 Modelul de date BigTable 77
5.2.1 Apache Cassandra 77
5.3 Baze de date orientate-document 78
5.3.1 MongoDB 78
5.4 Modelul de date de tip graf 79
5.4.1 Neo4j 80
Exercit ,ii 81
Referint ,e bibliografice 81

LIST ˘A FIGURI
1.1 Tipurile de relat ,ii dintre entit ˘at,i 4
1.2 Diagrama Bachman 4
1.3 Diagrama Bachman a modelului conceptual exemplificat 7
1.4 Modelul logic exemplificat ˆın DBDesigner 10
1.5 Obiectul Proiecte ˆın DBDesigner 10
2.1 Crearea utilizatorului IntVirtual s,i a unei conexiuni pentru acesta cu
comenzi SQL din linia de comand ˘a 21
2.2 Crearea utilizatorului IntVirtual cu SQL Developer 21
2.3 Gestiunea utilizatorului IntVirtual 22
2.4 Crearea conexiunii IntVirtual a utilizatorului IntVirtual 22
2.5 Conexiunea IntVirtual ˆın lista conexiunilor 23
2.6 Crearea tabelului Tipuri servicii cu comenzi SQL din linia de comand ˘a 23
2.7 Tabelul Tipuri servicii ˆın SQL Developer 23
2.8 Deschiderea unui SQL Worksheet ˆın SQL Developer 24
2.9 Crearea tabelului Intreprinderi cu comanda SQL specific ˘aˆın SQL
Developer 24
ix

x LIST ˘A FIGURI
2.10 Crearea tabelului Servicii ˆın SQL Developer 25
2.11 Ad ˘augarea constr ˆangerii FOREIGN KEY tabelului Servicii ˆın SQL
Developer 26
2.12 Stabilirea leg ˘aturii cu tabelul Tipuri servicii ˆın SQL Developer 26
2.13 Crearea tabelului Angajati ˆın SQL Developer 27
2.14 Crearea tabelului Proiecte ˆın SQL Developer 28
2.15 Crearea tabelelor Servicii intreprinderi s,iAngajati proiecte ˆın SQL
Developer 28
2.16 Crearea secvent ,ei de autoincrementare pentru tabelul Intreprinderi ˆın
SQL Developer 29
2.17 Introducerea de informat ,iiˆın tabelul Tipuri servicii din linia de comand ˘a 30
2.18 Introducerea de informat ,iiˆın tabelul Tipuri servicii ˆın SQL Developer 30
2.19 Introducerea de informat ,iiˆın tabelul Intreprinderi ˆın SQL Developer 31
2.20 Informat ,iile introduse ˆın tabelele Servicii ,Angajati ,Proiecte ,
Servicii intreprinderi ,Angajati proiecte 33
2.21 Modificarea informat ,iilor din tabelul Proiecte ˆın SQL Developer 34
2.22 S ,tergerea informat ,iilor din tabelul Angajat ,iˆın SQL Developer 34
2.23 Copierea bazei de date IntVirtual 35
3.1 Comenzi SQL de tip SELECT realizate pe conexiunea IntVirtual 49
3.2 Comand ˘a SQL de tip SELECT realizat ˘a pe conexiunea IntVirtual cu
Query Builder 50
3.3 Comand ˘a SQL de tip SELECT realizat ˘a pe conexiunea IntVirtual cu
Query Builder 50
3.4 Deschiderea s ,i activarea ferestrei Dbms Output 51
3.5 Crearea unei proceduri stocate ˆın SQL Developer 52
3.6 Compilarea unei proceduri stocate ˆın SQL Developer 52
3.7 Apelarea unei proceduri stocate ˆın SQL Developer 53
3.8 Crearea unei funct ,iiˆın SQL Developer 53
3.9 Compilarea unei funct ,iiˆın SQL Developer 54
3.10 Apelarea unei funct ,iiˆın SQL Developer 54
3.11 Apelarea unei funct ,ii s ,i a unei proceduri ˆıntr-un bloc anonim ˆın SQL
Developer 55
4.1 Comunicarea dintre componentele MVC 58

LIST ˘A FIGURI xi
4.2 Crearea proiectului de tip ASP.NET MVC Web Application, pasul 1 59
4.3 Crearea proiectului de tip ASP.NET MVC Web Application, pasul 2 60
4.4 Structura proiectului de tip ASP.NET MVC Web Application 61
4.5 Ad ˘augarea unei conexiuni la baza de date IntVirtual 61
4.6 Ad ˘augarea unei conexiuni la baza de date IntVirtual 62
4.7 Conexiunea la baza de date IntVirtual 63
4.8 Ad ˘augarea lui Microsoft Entity Framework V5.0.0 aplicat ,iei 63
4.9 Ad ˘augarea lui Oracle ODP.Net, Managed Driver aplicat ,iei 64
4.10 Ad ˘augarea modelului aplicat ,iei, pasul 1 64
4.11 Ad ˘augarea modelului aplicat ,iei, pasul 2 65
4.12 Ad ˘augarea modelului aplicat ,iei, pasul 3 65
4.13 Entit ˘at,ile modelului IntVirtual 66
4.14 Ad ˘augarea componentei controller Tipuri servicii 66
4.15 Structura aplicat ,iei dup ˘a generarea componentelor de tip controller s ,i
view pentru Tipuri servicii 67
5.1 Modelul relat ,ional vs. modelul cheie-valoare 75
5.2 Modelul relat ,ional vs. modelul BigTable 77
5.3 Modelul relat ,ional vs. bazele de date orientate-document 79
5.4 Modelul relat ,ional vs. modelul de tip graf 80

LIST ˘A TABELE
2.1 Tipuri de date ˆın Oracle Database 11g Express Edition 15
3.1 Operatori ˆın limbajul SQL 38
3.2 Funct ,ii agregate ˆın limbajul SQL 39
3.3 Funct ,iiˆın limbajul PL/SQL 42
3.4 Atribute ale cursoarelor ˆın limbajul PL/SQL 45
5.1 Modele de date s ,i solut ,ii NoSQL 74
5.2 Comenzi Redis 76
xiii

ACRONIME
ACID Atomicitate, Consistent ,˘a, Izolare, Durabilitate
AI Auto Increment
API Application Programming Interface
AWS Amazon Web Services
BD Baz ˘a de date
BLOB Binary Large OBject
BSON Binary JSON
CAP Consistency, Availability, Partition
CQL Cassandra Query Language
DCL Data Control Language
DDL Data Definition Language
DML Data Manipulation Language
DQL Data Query Language
FK Foreign Key
JDK Java Development Kit
JSON JavaScript Object Notation
MVC Model-View-Controller
NN Not Null
Baze de date relat ,ionale s ,i nerelat ,ionale. Copyright c
U.T.PRESS xv

xvi ACRONIME
NoSQL Not only SQL
PK Primary Key
PL/SQL Procedural Language extensions to SQL
SDK Software Development Kit
SGBD Sisteme de Gestiune a Bazelor de Date
SQL Structured Query Language
TIC Tehnologia Informat ,iei s ,i a Comunicat ,iilor
UML Unified Modeling Language
XML Extensible Markup Language

NOT,IUNI INTRODUCTIVE
ˆIn ultimele decenii, realizarea bazelor de date a reprezentat un aspect important ˆın domeniul
Tehnologiei Informat ,iei s ,i a Comunicat ,iilor (TIC), av ˆand un impact decisiv asupra modului
de organizare s ,i funct ,ionare a companiilor s ,i institut ,iilor publice. S ,iˆın prezent, datorit ˘a
num˘arului tot mai mare de informat ,ii care se doresc a fi salvate ˆın vederea unor prelucr ˘ari
complexe, a efectu ˘arii unor predict ,ii s,i a extragerii de noi cunos ,tint ,e, realizarea bazelor de
date continu ˘a s˘a fie o provocare pentru cercet ˘atorii din acest domeniu, precum s ,i pentru
dezvoltatorii de aplicat ,ii software care le utilizeaz ˘a.
I.1 Definit ,ie s ,i avantaje
ˆIn literatura de specialitate exist ˘a mai multe definit ,iiale bazelor de date. Dou ˘a dintre
acestea sunt prezentate ˆın cele ce urmeaz ˘a.
Definit ,ie 1: O baz ˘a de date (BD) ”reprezint ˘a o modalitate de stocare a unor informat ,ii s ,i
date pe un suport extern (un dispozitiv de stocare), cu posibilitatea extinderii us ,oare s ,i a
reg˘asirii rapide a acestora” [1].
Definit ,ie 2: ”O baz ˘a de date este o colect ,ie de date centralizate, creat ˘a s,i ment ,inut˘a com-
puterizat, ˆın scopul prelucr ˘arii datelor ˆın contextul unui set de aplicat ,ii. Prelucrarea datelor
se refer ˘a la operat ,iile de introducere, s ,tergere, actualizare s ,i interogare a datelor” [2].
Definit ,iile evident ,iaz˘a structurarea informat ,iilor s ,i datelor pe dispozitive computerizate,
dup˘a anumite modele ˆın vederea actualiz ˘arii s ,iˆıntret ,inerii facile s ,i a exploat ˘arii rapide prin
diverse operat ,ii specifice. Astfel, bazele de date ofer ˘a urm ˘atoarele avantaje : controlul
centralizat al datelor, viteza mare de reg ˘asire s ,i actualizare a datelor, flexibilitatea ˆın mo-
dificarea structurii, redundant ,a sc˘azut˘a a datelor memorate, posibilitatea partaj ˘arii datelor,
xvii

xviii NOT ,IUNI INTRODUCTIVE
ment ,inerea integrit ˘at,ii datelor prin politici de securitate s ,i prin gestiunea tranzact ,iilor s ,i
independent ,a datelor fat ,˘a de suportul hardware utilizat [2].
I.2 Propriet ˘at,i
Orice baz ˘a de date trebuie s ˘aˆındeplineasc ˘a urm ˘atoarele propriet ˘at,idefinite ˆın [2]:
Baza de date reflect ˘a aspecte ale lumii reale;
Baza de date este destinat ˘a, construit ˘a s ,i populat ˘a cu date ale unui domeniu bine
precizat;
Baza de date reprezint ˘a o colect ,ie logic ˘a coerent ˘a de date care are cel put ,in un ˆınt,eles;
Baza de date are un grup de utilizatori s ,i se adreseaz ˘a unui anumit grup de aplicat ,ii.
Bazele de date trebuie s ˘a asigure o serie de propriet ˘at,ii (ACID) care garanteaz ˘a re-
alizarea cu succes a operat ,iilor asupra acestora (gestiunea tranzact ,iilor):
Atomicitate – fiecare tranzact ,ie este de tipul ”totul sau nimic”, ˆın sensul ˆın care es ,ecul
unei p ˘art,i a unei tranzact ,ii conduce la es ,ecul ˆıntregii tranzact ,ii, deci la nemodificarea
bazei de date;
Consistent ,˘a – orice tranzact ,ie determin ˘a trecerea bazei de date dintr-o stare consis-
tent˘a, valid ˘aˆın raport cu regulile definite (constr ˆangeri, etc.) ˆıntr-o alt ˘a stare tot con-
sistent ˘a;
Izolare – execut ,ia concurent ˘a a tranzact ,iilor determin ˘a trecerea ˆıntr-o stare care poate
fi obt ,inut˘a s,i prin execut ,ia secvent ,ial˘a a tranzact ,iilor respective;
Durabilitate – tranzact ,iile finalizate r ˘amˆanˆın aceast ˘a stare s ,iˆın cazul aparit ,iei unor
probleme hardware sau software.
I.3 Modele de date
Structurarea datelor din cadrul bazelor de date se face cu ajutorul unui model de date , care
reprezint ˘a un ansamblu de reguli pentru organizarea datelor s ,i de operat ,ii permise asupra
acestora.
Un model de date are la baz ˘a un model conceptual care cuprinde descrierea tuturor
entit˘at,ilor unei baze de date ˆımpreun ˘a cu toate relat ,iile (leg ˘aturile) existente ˆıntre acestea.
O entitate este un cont ,inut de sine st ˘at˘ator, caracterizat ˘a prin propriet ˘at,ile sale denumite
atribute. Entit ˘at,ile sunt reprezentate prin tipuri de entit ˘at,i, unde un tip de entitate este un e-
lement ˆın cadrul unui model de date s ,i corespunde unei categorii de obiecte din lumea real ˘a
[3]. ˆIntre mult ,imile de entit ˘at,i dintr-o baz ˘a de date exist ˘a o mult ,ime de relat ,ii (leg ˘aturi).
Aceste leg ˘aturi trebuie s ˘a fie descrise ˆın modelul conceptual al bazei de date. ˆIn oricare
dintre mult ,imile de entit ˘at,iM1s,iM2pot exista urm ˘atoarele trei tipuri de relat ,ii:
Relat ,ie de tip 1:1, c ˆand unei entit ˘at,i dinM1ˆıi corespunde o singur ˘a entitate din M2
s,i reciproc;
Relat ,ie de tip 1:N, c ˆand unei entit ˘at,i dinM1ˆıi corespund una sau mai multe entit ˘at,i
dinM2, dar fiec ˘arei entit ˘at,i dinM2ˆıi corespunde o singur ˘a entitate din M1;
Relat ,ie de tip M:N, c ˆand unei entit ˘at,i dinM1ˆıi corespund una sau mai multe entit ˘at,i
dinM2s,i reciproc [3].
Modelul conceptual al unei baze de date este transpus ˆıntr-un model de date (model
logic). Principalele modele de date utilizate pentru realizarea bazelor de date sunt: modelul
de date ierarhic, modelul de date ret ,ea, modelul de date relat ,ional, modelul de date orientat
obiect s ,i modelul de date obiect-relat ,ional.

MODELE DE DATE xix
Modelul de date ierarhic a fost primul model de date utilizat pentru realizarea bazelor de
date. Acest model foloses ,te o structur ˘a ierarhic ˘a deˆınregistr ˘ari de date, pentru reprezentarea
tipurilor de entit ˘at,i, conectate prin leg ˘aturi pentru reprezentarea relat ,iilor dintre acestea. ˆIn
acest model reprezentarea se face sub forma unui arbore ierarhic, fiecare nod fiind un tip
deˆınregistrare de date, arcele fiind tipuri de leg ˘aturi. Fiecare ˆınregistrare de date are un
singur p ˘arinte s ,i poate avea mai mult ,i copii. Modelul se preteaz ˘a relat ,iilor de tip 1:1 s ,i 1:N.
Modelul de date ret ,ease aseam ˘an˘a cu modelul de date ierarhic, ˆıns˘a foloses ,te o struc-
tur˘a de tip graf, ˆın care nodurile sunt ˆınregistr ˘ari de date, iar muchiile grafului reprezint ˘a
leg˘aturile dintre acestea. Spre deosebire de modelul de date ierarhic, acest model permite
accesarea unor ˆınregistr ˘ari de date prin intermediul mai multor c ˘ai. Modelul se preteaz ˘a
relat ,iilor de tip 1:1, 1:N s ,i M:N.
Modelul de date relat ,ional , propus de E.F. Codd de la compania IBM ˆın 1970 [4], se
bazeaz ˘a pe algebra relat ,ional ˘a.ˆIn acest model datele sunt organizate sub forma unor tabele
bidimensionale, denumite relat ,ii. Fiecare linie din tabel reprezint ˘a o entitate care este com-
pus˘a din mult ,imea valorilor atributelor entit ˘at,ii respective, fiecare atribut corespunz ˆand
unei coloane a tabelului. Fiecare tabel trebuie s ˘a satisfac ˘a urm ˘atoarele propriet ˘at,i: s˘a
cont ,in˘a valori atomice, fiecare linie s ˘a fie unic ˘a, fiecare coloan ˘a s˘a aib ˘a un nume unic,
valorile dintr-o coloan ˘a s˘a fie de acelas ,i tip s ,i secvent ,a coloanelor s ,i a liniilor s ˘a fie nesem-
nificativ ˘a. Modelul se preteaz ˘a relat ,iilor de tip 1:1, 1:N s ,i M:N. Modelul are asociat un
limbaj de programare recunoscut, Structured Query Language (SQL).
Modelul de date orientat obiect adaug ˘a bazelor de date funct ,ionalitatea specific ˘a lim-
bajelor de programare obiectuale. Un beneficiu major al acestei abord ˘ari este unificarea
dezvolt ˘arii aplicat ,iei s ,i a bazei de date ˆıntr-un mediu de dezvoltare comun. Drept ur-
mare, aplicat ,iile au mai put ,in cod, modelarea datelor este mai natural ˘a s ,i codul pentru
exploatarea bazei de date este mai us ,or de scris. Modelul implic ˘a o mapare unu-la-unu
a obiectelor specifice program ˘arii obiectuale cu obiecte ale bazei de date, furniz ˆand astfel
urm˘atoarele beneficii: un management mai performant al obiectelor s ,i un management mai
bun al relat ,iilor complexe dintre acestea.
Modelul de date obiect-relat ,ional este o extindere a modelului relat ,ional cu caracte-
ristici ale modelului orientat obiect ˆın scopul realiz ˘arii de baze de date care definesc s ,i
prelucreaz ˘a tipuri de date complexe. ˆIn acest model structurarea datelor se face sub forma
unor relat ,ii, reprezentate sub forma unor tabele. Modelul permite posibilitatea definirii de
c˘atre utilizator a unor noi tipuri de date pentru domeniile de valori ale atributelor relat ,iilor.
Aceste tipuri de date pot fi extinse prin mecanismul de mos ,tenire [2].
Dintre modelele de date prezentate anterior, modelul de date relat ,ional este cel mai
frecvent utilizat ˆın proiectarea bazelor de date, rezult ˆand astfel bazele de date relat ,ionale .
Acest model a ˆınceput s ˘a nu fac ˘a fat ,˘a provoc ˘arilor momentului ˆın ceea ce prives ,te cantitatea
extrem de mare de date distribuite care trebuie stocate s ,i exploatate. ˆIn acest context, se
vehiculeaz ˘a ideea c ˘a modelarea datelor trebuie s ˘a se fac ˘a pornind de la modul ˆın care datele
vor fi exploatate/interogate, nu de la ce date exist ˘a s,i ce se poate face cu ele. Astfel, au
ap˘arut la ˆınceputul lui 2009 bazele de date nerelat ,ionale de tip NoSQL (Not only SQL) care
nu folosesc SQL ca limbaj de interogare, nu ofer ˘a garant ,ii ACID complete, nu lucreaz ˘a cu
scheme predefinite, au scalabilitate orizontal ˘a s ,i o arhitectur ˘a distribuit ˘a s ,i tolerant ˘a la
defecte [5], [6]. Acestea utilizeaz ˘a urm ˘atoarele moduri de structurare a datelor (modele de
date): modelul de date cheie-valoare, modelul de date BigTable, baze de date orientate-
document s ,i modelul de date de tip graf.
ˆInmodelul de date cheie-valoare datele sunt reprezentate sub forma unei colect ,ii de
perechi cheie-valoare asupra c ˘arora pot fi efectuate operat ,ii de tip scriere, citire s ,i s,tergere.

xx NOT ,IUNI INTRODUCTIVE
ˆInmodelul de date BigTable datele respect ˘a o schem ˘a predefinit ˘a care ˆıns˘a ofer ˘a avan-
tajul unor timpi foarte mici de c ˘autare s ,i agregare datorit ˘a modului ˆın care acestea sunt
stocate pe suportul fizic.
Bazele de date orientate-document sunt extensii ale modelului de date cheie-valoare
care suport ˘a ierarhii s ,i imbric ˘ari de perechi cheie-valoare s ,i sunt organizate sub forma unui
document.
Modelul de date de tip graf utilizeaz ˘a elemente din teoria grafurilor (noduri, relat ,ii s ,i
propriet ˘at,i) pentru reprezentarea datelor.
I.4 Sisteme de gestiune a bazelor de date
Bazele de date proiectate dup ˘a modelele de date prezentate anterior sunt implementate
ˆın Sisteme de Gestiune a Bazelor de Date (SGBD) corespunz ˘atoare. Un SGBD este un
pachet de programe care faciliteaz ˘a procesele de creare, manipulare s ,iˆıntret ,inere a bazelor
de date, precum s ,i accesul controlat la acestea.
Pentru realizarea bazelor de date relat ,ionale exist ˘a numeroase SGBD-uri care se pot
folosi gratuit sau pentru a c ˘aror utilizare este necesar ˘a achizit ,ionarea unei licent ,e: Oracle
Database, MySQL, Microsoft SQL Server, SQLite, Microsoft Access, PostgreSQL, Visual
FoxPro, etc.
Pentru realizarea bazelor de date nerelat ,ionale de tip NoSQL exist ˘a solut ,ii corespunz ˘a-
toare modelelor de date specifice acestora [6]. C ˆateva dintre acestea sunt:
Amazon DynamoDB, Riak, Redis, Oracle NoSQL Database (pentru modelul de date
cheie-valoare);
Apache HBase, Apache Cassandra (pentru modelul de date BigTable);
MongoDB, Apache CouchDB, Couchbase Server, Clusterpoint Server, RavenDB (ba-
zele de date orientate-document);
Neo4j, FlockDB, AllegroGraph (pentru modelul de date de tip graf).
REFERINT ,E BIBLIOGRAFICE
1. ***, Baz˘a de date, Wikipedia, http://ro.wikipedia.org/wiki/, 2015.
2. A. Olteanu, M. Anghel, R.N. Pietraru, Baze de date s ,i utilizarea acestora, 2005.
3. R. Dollinger, Baze de date s ,i gestiunea tranzact ,iilor, Ed. Albastr ˘a, 1998.
4. E. F. Codd, ”A Relational Model of Data for Large Shared Data Banks,” Communications of the
ACM, 13(6):377-387, 1970.
5. ***, NoSQL, Wikipedia, http://en.wikipedia.org/wiki/NoSQL, 2015.
6. ***, NoSQL Databases, http://nosql-database.org/, 2015.

PARTEA I
BAZE DE DATE
RELAT ¸ IONALE

CAPITOLUL 1
PROIECTAREA BAZELOR DE DATE
RELAT ¸ IONALE
Proiectarea bazelor de date relat ,ionale presupune, conform metodologiei standard de pro-
iectare a acestora, structurarea datelor sub forma unor modele conceptuale s ,i logice, care
sunt apoi implementate ˆıntr-un Sistem de Gestiune a Bazelor de Date (SGBD). Primul pas
ˆın proiectarea unei baze de date ˆıl constituie determinarea scopului s ˘au.
1.1 Determinarea scopului bazei de date
Baza de date care se dores ,te a fi proiectat ˘a este destinat ˘a stoc ˘arii s ,i exploat ˘arii unor informa-
t,ii apart ,inˆand unui anumit domeniu. Acest domeniu trebuie studiat ˆın prealabil, astfel ˆıncˆat
baza de date s ˘a reflecte ˆın totalitate realitatea. Analiza duce la identificarea corect ˘a a ele-
mentelor utilizate ˆın etapele de modelare: entit˘at,i,relat ,iis,ischeme relat ,ionale .
1.2 Modelul conceptual al bazei de date
Modelul conceptual al unei baze de date relat ,ionale cuprinde descrierea tuturor entit˘at,ilor
bazei de date ˆımpreun ˘a cu toate relat ,iiledintre acestea. O entitate este un cont ,inut de sine
st˘at˘ator s ,i corespunde unei categorii de obiecte din lumea real ˘a. Entit ˘at,ile pot fi consi-
derate substantive, fiecare entitate fiind caracterizat ˘a printr-o serie de propriet ˘at,i, denumite
atribute. Entit ˘at,ile sunt legate unele de altele prin relat ,ii, acestea la r ˆandul lor put ˆand
fi considerate verbe care leag ˘a dou ˘a sau mai multe substantive. Entit ˘at,ile apart ,in unor
Baze de date relat ,ionale s ,i nerelat ,ionale. Copyright c
U.T.PRESS 3

4 PROIECTAREA BAZELOR DE DATE RELAT ¸ IONALE
mult ,imi. ˆIntre mult ,imile de entit ˘at,iM1s,iM2exist ˘a urm ˘atoarele trei tipuri de relat ,ii,
evident ,iateˆın figura 1.1:
Relat ,ie de tip 1:1, c ˆand unei entit ˘at,i dinM1ˆıi corespunde o singur ˘a entitate din M2
s,i reciproc;
Relat ,ie de tip 1:N, c ˆand unei entit ˘at,i dinM1ˆıi corespund una sau mai multe entit ˘at,i
dinM2, dar fiec ˘arei entit ˘at,i dinM2ˆıi corespunde o singur ˘a entitate din M1;
Relat ,ie de tip M:N, c ˆand unei entit ˘at,i dinM1ˆıi corespund una sau mai multe entit ˘at,i
dinM2s,i reciproc [1].
Figura 1.1 Tipurile de relat ,ii dintre entit ˘at,i
Modelul conceptual al unei baze de date poate fi prezentat sub forma unei diagrame de
structurare a datelor. Diagrama Bachman [2] este o astfel de diagram ˘aˆın care entit ˘at,ile
sunt reprezentate prin dreptunghiuri, iar relat ,iile prin linii etichetate cu denumiri. Cardi-
nalitatea sau tipul relat ,iilor este dat ˘a de terminat ,iile liniilor. ˆIn figura 1.2 este prezentat ˘a o
astfel de diagram ˘a, completat ˘a cu atributele entit ˘at,ilor reprezentate prin elipse. Exist ˘a mai
multe notat ,ii pentru realizarea diagramelor care pot fi utilizate ˆın expunerea c ˆat mai clar ˘a
a modelului conceptual: notat ,ia lui Chen [3], IDEF1X [4] sau UML [5].
Figura 1.2 Diagrama Bachman
1.3 Modelul logic al bazei de date
Odat ˘a creat modelul conceptual, prin stabilirea entit ˘at,ilor s ,i a relat ,iilor dintre acestea, se
poate trece la modelul logic al bazei de date care este apropiat de modelul de date folosit de
SGBD. Modelul logic al bazei de date este mai detaliat dec ˆat modelul conceptual, deoarece
cont ,ine s ,i alte entit ˘at,i necesare ˆın operarea s ,i tranzact ,ionarea informat ,iilor. ˆIn cadrul mode-
lului logic se definesc schemele relat ,ionale pe baza entit ˘at,ilor stabilite ˆın modelul concep-
tual. Schemele relat ,ionale cont ,in atributele entit ˘at,ilor, tipul acestora, constr ˆangerile impuse

MODELUL LOGIC AL BAZEI DE DATE 5
atributelor, precum s ,i atributul cheie al relat ,iei care satisface condit ,ia de identificare unic ˘a
s,i de neredundant ,˘a, denumit cheie primar ˘a (Primary Key – PK) .
Structurarea informat ,iilorˆın scheme relat ,ionale trebuie s ˘a t,in˘a cont de o serie de anoma-
lii care pot s ˘a apar ˘aˆın exploatare: anomalia la actualizarea datelor care duce la inconsistent ,e
la modificarea datelor, anomalia la s ,tergerea datelor care duce la pierderi de date s ,i anoma-
lia la ad ˘augarea de noi date care limiteaz ˘a posibilitatea de introducere a acestora. Procesul
de structurare a schemelor relat ,ionale ˆın vederea elimin ˘arii anomaliilor poart ˘a numele de
normalizare . Normalizarea const ˘aˆın aducerea bazei de date ˆıntr-una dintre formele nor-
male enunt ,ate de E.F. Codd ˆın [6]. Primele trei sunt mai importante s ,i sunt prezentate
succint ˆın continuare.
Prima form ˘a normal ˘a (1FN) . O schem ˘a relat ,ional ˘a se g ˘ases ,teˆın 1FN dac ˘a fiecare atribut
al ei are un nume unic s ,i valori atomice (nu se poate descompune) s ,i exist ˘a un atribut de
tip de date numeric care identific ˘aˆın mod unic informat ,ia, denumit cheie primar ˘a.
A doua form ˘a normal ˘a (2FN) . Pentru a reduce redundant ,a s,i pentru a se elimina anoma-
liile care apar la actualizarea schemelor relat ,ionale ˆın 1FN s-a introdus 2FN. O schem ˘a
relat ,ional ˘a se g ˘ases ,teˆın 2FN dac ˘a ea este deja ˆın 1FN s ,i atributele ei depind funct ,ional de
cheia primar ˘a.
A treia form ˘a normal ˘a (3FN) . O schem ˘a relat ,ional ˘a se g ˘ases ,teˆın 3FN dac ˘a ea este deja
ˆın 2FN s ,i toate atributele ei depind direct de cheia primar ˘a. O schem ˘a relat ,ional ˘aˆın 3FN
elimin ˘a anomaliile care apar la introducerea s ,i la s ,tergerea datelor.
ˆIn cadrul modelului logic pentru reprezentarea relat ,iilor dintre entit ˘at,i se folosesc urm ˘a-
toarele tehnici: (1) propagarea cheilor dintr-o schem ˘a relat ,ional ˘aˆın alta (tehnica se foloses ,-
te pentru reprezentarea relat ,iilor 1:1 s ,i 1:N – cheia primar ˘a dintr-o schem ˘a p˘arinte devine
cheie str ˘ain˘a (Foreign Key – FK) ˆın schema copil), s ,i (2) crearea unei noi scheme relat ,ionale
care cont ,ine cheile primare ale schemelor implicate ˆın relat ,ie s ,i care devin chei str ˘aine. Cea
de a doua tehnic ˘a descompune relat ,ia M:N ˆın dou ˘a relat ,ii 1:N ˆın care sunt implicate cele
dou˘a scheme relat ,ionale s ,i cea nou creat ˘a.
Schemele relat ,ionale ale entit ˘at,ilor din figura 1.2 sunt prezentate ˆın continuare. Deoarece
relat ,ia dintre Entitate 3 s,iEntitate 4 este de tipul M:N, se creeaz ˘a o nou ˘a schem ˘a relat ,ional ˘a
denumit ˘aEntitate3 entitate4 .ˆIntr-un caz real este posibil ca unele atribute ale schemelor
relat ,ionale s ˘a fie obligatorii (s ˘a aib ˘a valori de tipul NN (Not Null)).
SR Entitate1=
(identitate1(PK, numeric, NN), Atribut11(tip de date, NN), …,
Atribut1 n(tip de date, NN))
SR Entitate2=
(identitate2(PK, numeric, NN), Atribut21(tip de date, NN), …,
Atribut2 m(tip de date, NN), Entitate1 identitate1(FK, numeric, NN))
SR Entitate3=
(identitate3(PK, numeric, NN), Atribut31(tip de date, NN), …,
Atribut3 k(tip de date, NN))
SR Entitate4=
(identitate4(PK, numeric, NN), Atribut41(tip de date, NN), …,
Atribut4 l(tip de date, NN), Entitate1 identitate1(FK, numeric, NN))
SR Entitate3 entitate4=
(Entitate3 identitate3(FK, numeric, NN), Entitate4 identitate4(FK, nu-
meric, NN))

6 PROIECTAREA BAZELOR DE DATE RELAT ¸ IONALE
Modelul logic poate fi realizat cu ajutorul unor medii software care permit apoi im-
portarea lui ˆıntr-un SGDB. Cele mai cunoscute sunt: CA ERwin Data Modeler [7] pentru
proiectarea bazelor de date care vor fi implementate ˆın Microsoft SQL Server, Oracle SQL
Developer Data Modeler [8] pentru proiectarea bazelor de date care vor fi implementate
ˆın Oracle s ,i DBDesigner [9] pentru proiectarea bazelor de date care vor fi implementate
ˆın MySQL s ,i Oracle. DBDesigner este gratuit s ,i nu necesit ˘a resurse semnificative pentru
instalare.
1.4 Exemplu de proiectare a unei baze de date relat ,ionale
1.4.1 Scopul bazei de date
Baza de date, a c ˘arei proiectare este exemplificat ˘aˆın subcapitolul curent, este destinat ˘a
gestiunii unor ˆıntreprinderi prin prisma proiectelor pe care le execut ˘a. Baza de date p ˘astrea-
z˘a informat ,ii referitoare la ˆıntreprinderi, la serviciile pe care acestea le ofer ˘a, la angajat ,ii s,i
la proiectele acestor ˆıntreprinderi.
1.4.2 Modelul conceptual al bazei de date – exemplificare
Principalele entit ˘at,ile s ,i relat ,iile dintre acestea, identificate prin studierea surselor de date
relevante, sunt: ˆIntreprinderi ,Servicii ,Tipuri servicii ,Angajat ,is,iProiecte . Modelul poate
fi completat s ,i cu alte entit ˘at,i,ˆıns˘a s-a considerat necesar c ˘a pentru exemplificare sunt
suficiente cele ment ,ionate anterior.
ˆIntreprinderi — cuprinde informat ,ii privind identificarea ˆıntreprinderilor, domeniul
principal de activitate s ,i serviciile furnizate. Este entitatea central ˘a a bazei de date,
ˆıntre ea s ,i entitatea Servicii stabilindu-se o relat ,ie de tip M:N. O ˆıntreprindere ofer ˘a
mai multe servicii, iar un serviciu este prestat de mai multe ˆıntreprinderi. ˆIntre
entitatea ˆIntreprinderi s,i entit ˘at,ileAngajat ,is,iProiecte exist ˘a relat ,ii de tip 1:N. O
ˆıntreprindere are mai mult ,i angajat ,i, iar un angajat apart ,ine unei singure ˆıntreprinderi.
Oˆıntreprindere init ,iaz˘a mai multe proiecte, iar un proiect se deruleaz ˘aˆın cadrul unei
singure ˆıntreprinderi.
Servicii — cuprinde informat ,ii referitoare la denumirea serviciului s ,i la tipul acestuia.
Entitatea este ˆın relat ,ie M:N cu entitatea ˆIntreprinderi s,iˆın relat ,ie 1:N cu entitatea
Tipuri servicii . Un serviciu este de un anumit tip, iar un tip de serviciu caracterizeaz ˘a
mai multe servicii.
Tipuri servicii — cuprinde informat ,ii referitoare la denumirea tipului de serviciu.
Este ˆın relat ,ie 1:N cu entitatea Servicii .
Angajat ,i— cuprinde informat ,ii referitoare la personalul fiec ˘areiˆıntreprinderi, date de
identificare, calificare s ,i date de autentificare. Entitatea este ˆın relat ,ie 1:N cu entitatea
ˆIntreprinderi s,iˆın relat ,ie M:N cu entitatea Proiecte . Un angajat lucreaz ˘a la mai multe
proiecte, iar un proiect este realizat de mai mult ,i angajat ,i.
Proiecte — cuprinde informat ,ii referitoare la acronimul proiectului, obiectivul proiec-
tului, starea de derulare a proiectului, data de ˆıncepere s ,i de terminare a acestuia s ,i
produsul/serviciul rezultat (eventual reutilizabil). Entitatea este ˆın relat ,ie 1:N cu enti-
tatea ˆIntreprinderi s,iˆın relat ,ie M:N cu entitatea Angajat ,i.
Diagrama Bachman a modelului conceptual este prezentat ˘aˆın figura 1.3.

EXEMPLU DE PROIECTARE A UNEI BAZE DE DATE RELAT ,IONALE 7
Figura 1.3 Diagrama Bachman a modelului conceptual exemplificat
1.4.3 Modelul logic al bazei de date – exemplificare
Pornind de la Diagrama Bachman se definesc schemele relat ,ionale ale modelului logic
pentru fiecare entitate identificat ˘aˆın parte. ˆIn aceast ˘a etap ˘a trebuie ca schemele relat ,ionale
s˘a fie ˆın 3FN.
Pentru a ˆındeplini cerint ,ele 1FN se adaug ˘aˆın schemele relat ,ionale c ˆate un atribut care s ˘a
identifice ˆın mod unic informat ,ia. Acest atribut, denumit cheie primar ˘a este de tip numeric
s,i nu permite valori nule. Se recomand ˘a ca acesta s ˘a fie incrementat ˆın mod automat
(Auto Increment – AI) de SGBD ˆın etapa de implementare. De asemenea, toate atributele
schemelor relat ,ionale trebuie s ˘a fie atomice. ˆIn acest sens schema relat ,ional ˘a a entit ˘at,ii
Angajat ,icont ,ine dou ˘a atribute, unul pentru nume s ,i altul pentru prenume, ˆın loc de un
singur atribut care s ˘a le concateneze.
Schemele relat ,ionale prezentate ˆın caset ˘a cu titlul ”Scheme relat ,ionale normalizate ˆın
3FN” ˆındeplinesc cerint ,ele 2FN deoarece atributele fiec ˘arei scheme depind funct ,ional de
cheile primare corespunz ˘atoare. Nu exist ˘a atribute care s ˘a nu caracterizeze entitatea iden-
tificat ˘a. De asemenea, aceste scheme ˆındeplinesc s ,i cerint ,ele 3FN deoarece toate atributele
depind direct numai de cheia primar ˘a.
Pentru definitivarea modelului logic schemele relat ,ionale trebuie completate ˆın confor-
mitate cu relat ,iile dintre ele. Pentru relat ,iile de tip 1:N se propag ˘a cheia primar ˘a din schema
p˘arinte (1) ˆın schema copil (N), unde devine cheie str ˘ain˘a. Exist ˘a trei astfel de relat ,iiˆıntre:
Tipuri servicii (1) s ,iServicii (N), cheia primar ˘a din Tipuri servicii devine cheie str ˘ain˘a
ˆınServicii ;ˆıntre ˆIntreprinderi (1) s ,iAngajat ,i(N), cheia primar ˘a din ˆIntreprinderi devine
cheie str ˘ain˘aˆınAngajat ,i; respectiv ˆıntre ˆIntreprinderi (1) s ,iProiecte (N), cheia primar ˘a din
ˆIntreprinderi devine cheie str ˘ain˘aˆınProiecte . Atributele cu rol de cheie str ˘ain˘a nu permit

8 PROIECTAREA BAZELOR DE DATE RELAT ¸ IONALE
valori nule. Schemele relat ,ionale actualizate sunt prezentate ˆın caset ˘a cu titlul ”Scheme
relat ,ionale cu chei propagate (FK)”.
Scheme relat ,ionale normalizate ˆın 3FN
SR Intreprinderi=
(idintreprindere(PK, numeric, NN, AI), Denumire(s ,ir de caractere, NN),
Cod unic(s ,ir de caractere, NN), Numar inmatriculare(s ,ir de caractere),
Adresa web(s ,ir de caractere), CAEN(s ,ir de caractere, NN))
SR Tipuri servicii=
(idtipserviciu(PK, numeric, NN, AI), Denumire(s ,ir de caractere, NN))
SR Servicii=
(idserviciu(PK, numeric, NN, AI), Denumire (s ,ir de caractere, NN))
SR Angajat ,i=
(idangajat(PK, numeric, NN, AI), Nume(s ,ir de caractere, NN),
Prenume(s ,ir de caractere, NN), CNP(s ,ir de caractere, NN),
Functie(s ,ir de caractere, NN), Profesie(s ,ir de caractere, NN),
Utilizator(s ,ir de caractere, NN), Parola(s ,ir de caractere, NN))
SR Proiecte=
(idproiect(PK, numeric, NN, AI), Acronim(s ,ir de caractere, NN),
Obiectiv(s ,ir de caractere, NN), Data incepere(dat ˘a calendaristic ˘a, NN),
Data terminare(dat ˘a calendaristic ˘a, NN), Produs(s ,ir de caractere, NN),
Stare proiect(caracter, NN))
Scheme relat ,ionale cu chei propagate (FK)
SR Intreprinderi=
(idintreprindere(PK, numeric, NN, AI), Denumire(s ,ir de caractere, NN),
Cod unic(s ,ir de caractere, NN), Numar inmatriculare(s ,ir de caractere),
Adresa web(s ,ir de caractere), CAEN(s ,ir de caractere, NN))
SR Tipuri servicii=
(idtipserviciu(PK, numeric, NN, AI), Denumire(s ,ir de caractere, NN))
SR Servicii=
(idserviciu(PK, numeric, NN, AI), Denumire (s ,ir de caractere, NN),
Tipuri servicii idtipserviciu(FK, numeric, NN) )
SR Angajat ,i=
(idangajat(PK, numeric, NN, AI), Nume(s ,ir de caractere, NN),
Prenume(s ,ir de caractere, NN), CNP(s ,ir de caractere, NN),
Functie(s ,ir de caractere, NN), Profesie(s ,ir de caractere, NN),
Utilizator(s ,ir de caractere, NN), Parola(s ,ir de caractere, NN),
Intreprinderi idintreprindere(FK, numeric, NN) )
SR Proiecte=
(idproiect(PK, numeric, NN, AI), Acronim(s ,ir de caractere, NN),
Obiectiv(s ,ir de caractere, NN), Data incepere(dat ˘a calendaristic ˘a, NN),
Data terminare(dat ˘a calendaristic ˘a, NN), Produs(s ,ir de caractere, NN),
Stare proiect(caracter, NN), Intreprinderi idintreprindere(FK, numeric,
NN))

EXEMPLU DE PROIECTARE A UNEI BAZE DE DATE RELAT ,IONALE 9
Deoarece au fost identificate dou ˘a relat ,ii de tip M:N ˆıntre entit ˘at,i, trebuie definite ˆınc˘a
dou˘a scheme relat ,ionale pe l ˆang˘a cele care corespund entit ˘at,ilor (cinci ˆın cazul exemplifi-
cat). O astfel de schem ˘a de relat ,ie are atribute cheile primare din schemele aflate ˆın relat ,ie
M:N. ˆIn noua schem ˘a acestea sunt chei str ˘aine care formeaz ˘aˆımpreun ˘a cheia primar ˘a.
Dac˘a nu se dores ,te acest lucru atunci se poate ad ˘auga un atribut cu rol de cheie primar ˘a
astfel ˆıncˆat schema s ˘a fie ˆın 1FN. ˆIn unele cazuri schemele prin care se reprezint ˘a relat ,iile
M:N pot s ˘a cont ,in˘a s,i alte atribute care caracterizeaz ˘a relat ,ia.ˆIn acest caz aceste atribute
trebuie s ˘a depind ˘a funct ,ional s ,i direct de cheia primar ˘a astfel ˆıncˆat schema s ˘a fie ˆın 3FN.
Schemele relat ,ionale ale modelului logic ˆın cazul exemplului considerat sunt prezentate ˆın
caseta cu titlul ”Scheme relat ,ionale finale”.
Scheme relat ,ionale finale
SR Intreprinderi=
(idintreprindere(PK, numeric, NN, AI), Denumire(s ,ir de caractere, NN),
Cod unic(s ,ir de caractere, NN), Numar inmatriculare(s ,ir de caractere),
Adresa web(s ,ir de caractere), CAEN(s ,ir de caractere, NN))
SR Tipuri servicii=
(idtipserviciu(PK, numeric, NN, AI), Denumire(s ,ir de caractere, NN))
SR Servicii=
(idserviciu(PK, numeric, NN, AI), Denumire (s ,ir de caractere, NN),
Tipuri servicii idtipserviciu(FK, numeric, NN))
SR Angajat ,i=
(idangajat(PK, numeric, NN, AI), Nume(s ,ir de caractere, NN),
Prenume(s ,ir de caractere, NN), CNP(s ,ir de caractere, NN),
Functie(s ,ir de caractere, NN), Profesie(s ,ir de caractere, NN),
Utilizator(s ,ir de caractere, NN), Parola(s ,ir de caractere, NN),
Intreprinderi idintreprindere(FK, numeric, NN))
SR Proiecte=
(idproiect(PK, numeric, NN, AI), Acronim(s ,ir de caractere, NN),
Obiectiv(s ,ir de caractere, NN), Data incepere(dat ˘a calendaristic ˘a, NN),
Data terminare(dat ˘a calendaristic ˘a, NN), Produs(s ,ir de caractere, NN),
Stare proiect(caracter, NN),
Intreprinderi idintreprindere(FK, numeric, NN))
SR Servicii intreprinderi=
(Servicii idserviciu(PK, FK, numeric, NN) ,
Intreprinderi idintreprindere(PK, FK, numeric, NN) )
SR Angajat ,iproiecte=
(Angajat ,iidangajat(PK, FK, numeric, NN) ,
Proiecte idproiect(PK, FK, numeric, NN) )
Modelul logic exemplificat a fost realizat cu ajutorul mediului DBDesigner s ,i este
prezentat ˆın figura 1.4. Se observ ˘a crearea obiectelor aferente schemelor relat ,ionale. Aceste
obiecte au o structur ˘a tabelar ˘a care poate fi importat ˘aˆıntr-un SGDB. Figura 1.5 prezint ˘a
captura din DBDesigner a obiectului tabelar Proiecte corespunz ˘ator schemei relat ,ionale cu
acelas ,i nume. Atributele schemei Proiecte devin nume ale coloanelor ˆın tabelul aferent, iar
valorile care vor fi introduse ˆın celulele tabelului trebuie s ˘a corespund ˘a tipurilor de date s ,i
dimensiunilor stabilite ˆın etapa de proiectare.

10 PROIECTAREA BAZELOR DE DATE RELAT ¸ IONALE
Figura 1.4 Modelul logic exemplificat ˆın DBDesigner
Figura 1.5 Obiectul Proiecte ˆın DBDesigner
EXERCIT ,II
1.1 S˘a se proiecteze o baz ˘a de date relat ,ional ˘a care s ˘a aib ˘a ca scop stocarea s ,i exploatarea
informat ,iilor turistice s ,i a locurilor de cazare din mai multe zone geografice. Proiectarea
trebuie s ˘a cuprind ˘a:
a) Modelul conceptual al bazei de date – identificarea entit ˘at,ilor s ,i a relat ,iilor dintre
acestea, precum s ,i realizarea diagramei Bachman;
b) Modelul logic al bazei de date – normalizarea ˆın 3FN a schemelor relat ,ionale
rezultate din entit ˘at,i s,i completarea schemelor ˆın funct ,ie de relat ,iile identificate
ˆıntre acestea ˆın etapa de realizare a modelului conceptual.
1.2 S˘a se transpun ˘aˆın DBDesigner modelul logic al bazei de date de la exercit ,iul 1.1.

EXERCIT ,II 11
REFERINT ,E BIBLIOGRAFICE
1. R. Dollinger, Baze de date s ,i gestiunea tranzact ,iilor, Ed. Albastr ˘a, 1998.
2. C. W. Bachman, ”Data Structure Diagrams”, SIGMIS Database, 1(2), pag. 4-10, 1969.
3. P. Chen, ”The Entity-Relationship Model – Toward a Unified View of Data”, ACM Transactions
on Database Systems, 1(1), pag. 9-36, 1976.
4. ***, IDEF1X Data Modeling Method, http://www.idef.com/idef1X.htm, 2015.
5. S. W. Ambler, UML 2 Class Diagrams, http://www.agilemodeling.com/artifacts/classDiagram.htm,
2009.
6. E. F. Codd, ”Normalized Data Base Structure: A Brief Tutorial”, Proceedings of the 1971 ACM
SIGFIDET (Now SIGMOD) Workshop on Data Description, Access and Control, pag. 1-17,
1971.
7. ***, CA ERwin Data Modeler, http://erwin.com/products/data-modeler, 2015.
8. ***, SQL Developer Data Modeler User’s Guide, https://docs.oracle.com/cd/E57998 01/index.htm,
2015.
9. ***, DBDesigner4, http://www.fabforce.net/dbdesigner4/index.php, 2003.

CAPITOLUL 2
IMPLEMENTAREA BAZELOR DE DATE
RELAT ¸ IONALE
Implementarea bazelor de date relat ,ionale presupune transpunerea modelului logic al aces-
toraˆıntr-un SGBD. Acesta se face cu ajutorul limbajului Structured Query Language (SQL)
care a devenit un standard ˆıncep ˆand din anul 1986. SQL pune la dispozit ,ia programatorilor
o serie de comenzi care pot fi clasificate ˆın 4 categorii: comenzi pentru definirea datelor
(Data Definition Language – DDL), comenzi pentru controlul datelor (Data Control Lan-
guage – DCL), comenzi pentru manipularea datelor (Data Manipulation Language – DML)
s,i comenzi pentru interogarea datelor (Data Query Language – DQL). ˆIn etapa de imple-
mentare, schemele relat ,ionale ale modelului logic de date devin tabele ale bazei de date
ce cont ,in informat ,iile din lumea real ˘a. Implementarea se face prin comenzi SQL de tip
DDL pentru crearea, modificarea s ,i s,tergere bazei de date s ,i pentru crearea, modificarea
s,i s,tergerea tabelelor acesteia. Comenzile SQL de tip DCL sunt utilizate pentru atribuirea
de drepturi utilizatorilor bazei de date s ,i comenzi SQL de tip DML pentru introducerea
informat ,iilor ˆın tabele, pentru modificarea acestor date, respectiv pentru s ,tergerea lor.
ˆIn cadrul acestui capitol, implementarea bazelor de date se face ˆın SGBD-ul Oracle
Database 11g Express Edition 11.2 [1] prin comenzi SQL cu ajutorul Oracle SQL Devel-
oper 4.1.1 [2], o unealt ˘a software care faciliteaz ˘a gestiunea bazelor de date implementate
ˆın SGBD-ul ment ,ionat mai sus. Toate comenzile care sunt ment ,ionate ˆın cadrul acestui
capitol pot fi consultate ˆın documentat ,ia oferit ˘a de Oracle, ˆın special pentru cunoas ,terea
opt ,iunilor s ,i a specificat ,iilor acestora.
Baze de date relat ,ionale s ,i nerelat ,ionale. Copyright c
U.T.PRESS 13

14 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
2.1 Crearea, modificarea s ,i s,tergerea unei baze de date
ˆIn general, crearea unei baze de date relat ,ionale se face folosind comanda SQL CREATE
DATABASE specific ˘a SQL, ˆın condit ,iileˆın care exist ˘a o conexiune activ ˘a a unui utilizator
la SGBD. Dup ˘a ce baza de date a fost creat ˘a pot fi create tabelele acesteia. ˆIn cazul ˆın care
se dores ,te s ,tergerea ei din SGBD, se utilizeaz ˘a comanda DROP DATABASE, iar pentru
modificarea unor propriet ˘at,i se foloses ,te comanda ALTER DATABASE. Sintaxele celor
trei comenzi sunt prezentate ˆın continuare.
CREATE DATABASE n u m e b a z a d a t e [ o p t i u n e [ , o p t i u n e ] . . . ] ;
DROP DATABASE n u m e b a z a d a t e ;
ALTER DATABASE n u m e b a z a d a t e [ o p t i u n e [ , o p t i u n e ] . . . ] ;
ˆIn cazul Oracle Database 11g Express Edition, crearea unei baze de date se poate face
prin execut ,ia comenzii de creare a unui utilizator, CREATE USER, a comenzii GRANT
care atribuie drepturi de conexiune s ,i de creare a resurselor unei baze de date acelui uti-
lizator, urmate de stabilirea unei conexiuni la serverul de baze de date prin acel utilizator
cu ajutorul comenzii CONNECT. Conexiunea reprezint ˘a de fapt baza de date (schema).
ˆInainte de execut ,ia acestor comenzi trebuie ca utilizatorul implicit al SGBD-ului, system ,
s˘a fie conectat la server s ,i toate comenzile s ˘a se execute folosind conexiunea acestuia.
CONNECT system
CREATE USER n u m e u t i l i z a t o r IDENTIFIED fBY p a r o l ajEXTERNALLYjGLOBALLY
AS ’ n u m e e x t e r n ’g[ o p t i u n e [ , o p t i u n e ] . . . ] ;
GRANT CONNECT , RESOURCE TO n u m e u t i l i z a t o r ;
CONNECT n u m e u t i l i z a t o r
Pentru s ,tergerea unui utilizator ˆın Oracle Database 11g Express Edition se foloses ,te co-
manda DROP USER. ˆIn cazul ˆın care utilizatorul cont ,ine obiecte (ex. conexiuni), atunci
trebuie ad ˘augat ˘a opt ,iunea CASCADE. ˆIn acest fel, baza de date realizat ˘a printr-o co-
nexiune a acelui utilizator se s ,terge. Dac ˘a se dores ,te modificarea unor propriet ˘at,i ale
utilizatorului (ex. parola acestuia, rolurile lui) se foloses ,te comanda ALTER USER.
DROP USER n u m e u t i l i z a t o r [ CASCADE ] ;
ALTER USER n u m e u t i l i z a t o r [ o p t i u n e [ , o p t i u n e ] . . . ] ;
2.2 Crearea, modificarea s ,i s,tergerea tabelelor unei baze de date
Dup˘a crearea bazei de date schemele relat ,ionale ale modelului logic identificate ˆın faza
de proiectare trebuie transpuse ˆın SGBD cu ajutorul comenzii SQL CREATE TABLE.
Structura comenzii este urm ˘atoarea:
CREATE TABLE n u m e t a b e l
(
nume coloana t i p d a t a [ ( marime [ , p r e c i z i e ] ) ] [ c o n s t r a n g e r e [
c o n s t r a n g e r e ] . . . ]
[ , nume coloana t i p d a t a [ ( marime [ , p r e c i z i e ] ) ] [ c o n s t r a n g e r e [
c o n s t r a n g e r e ] . . . ] ]
[CONSTRAINT n u m e c o n s t r a n g e r e PRIMARY KEY ( nume coloana ) , ]
[CONSTRAINT n u m e c o n s t r a n g e r e FOREIGN KEY ( nume coloana ) REFERENCES
n u m e t a b e l ( nume coloana ) [ ON DELETEfNO ACTIONjCASCADEjSET NULL
g] ]
) ;
Tipurile de date cel mai des utilizate ˆın crearea tabelelor ˆın Oracle Database 11g Express
Edition sunt prezentate ˆın tabelul 2.1.

CREAREA, MODIFICAREA S ,I S,TERGEREA TABELELOR UNEI BAZE DE DATE 15
Tabel 2.1 Tipuri de date ˆın Oracle Database 11g Express Edition
Tip de date Descriere
CHAR(m ˘arime) S,ir de caractere de m ˘arime fix ˘a. M ˘arimea este specificat ˘aˆın paran-
tez˘a s,i este de maxim 2000 octet ,i.
NCHAR(m ˘arime) S,ir de caractere de m ˘arime fix ˘aˆın format UNICODE (16
bit,i/caracter). M ˘arimea este specificat ˘aˆın parantez ˘a s ,i este de
maxim 2000 octet ,i.
V ARCHAR2(m ˘arime) S,ir de caractere de m ˘arime variabil ˘a. M ˘arimea este specificat ˘aˆın
parantez ˘a s,i este de maxim 4000 octet ,i.
NV ARCHAR2(m ˘arime) S,ir de caractere de m ˘arime variabil ˘aˆın format UNICODE (16
bit,i/caracter). M ˘arimea este specificat ˘aˆın parantez ˘a s ,i este de
maxim 4000 octet ,i.
NUMBER(precizie,
scal˘a)Num ˘ar zecimal cu precizia (num ˘arul de cifre ale p ˘art,iiˆıntregi s ,i ale
p˘art,i zecimale) de maxim 38. Scala reprezint ˘a num ˘arul de cifre ale
p˘art,ii zecimale.
BINARY FLOAT Num ˘ar real reprezentat pe 32 de bit ,i, memorat f ˘ar˘a conversie ˆın baza
10.
BINARY DOUBLE Num ˘ar real ˆın dubl ˘a precizie reprezentat pe 64 de bit ,i, memorat f ˘ar˘a
conversie ˆın baza 10.
DATE Dat˘a calendaristic ˘a (an, lun ˘a, zi, or ˘a, minut, secund ˘a).
TIMESTAMP Dat˘a calendaristic ˘a care furnizeaz ˘a suport pentru secunde
fract ,ionare.
LOB Tip de date pentru blocuri mari de date nestructurate (text, ima-
gini grafice, clipuri video). Include tipurile de date BLOB, CLOB,
NCLOB s ,i BFILE.
EXEMPLU 2.1 Valori ale tipurilor de date
Valoare Declarat ,ie Valoare memorat ˘a
’Cluj-Napoca’ CHAR(12) ’Cluj-Napoca ’
’Cluj-Napoca’ CHAR(10) Eroare(dep ˘as,ire)
’Cluj-Napoca’ V ARCHAR2(12) ’Cluj-Napoca’
’Cluj-Napoca’ V ARCHAR2(10) Eroare(dep ˘as,ire)
245.789 NUMBER 245.789
245.789 NUMBER(3) 246
245.789 NUMBER(6,3) 245.789
245.789 NUMBER(6,2) 245.79
245.789 NUMBER(5,2) Eroare(dep ˘as,ire)
22-OCT-2015 DATE 22-OCT-15
2015-10-22 13:45:05.1234 TIMESTAMP 22-OCT-15 01.45.05.123400 PM

16 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
Constr ˆangerile care pot fi aplicate coloanelor la crearea tabelelor sunt urm ˘atoarele:
NULL sauNOT NULL – Indic ˘a dac ˘a coloana poate sau nu s ˘a stocheze valori de tip
NULL. Cu alte cuvinte dac ˘aˆın coloan ˘a trebuie sau nu s ˘a fie introduse valori;
UNIQUE – Asigur ˘a unicitatea fiec ˘arei celule dintr-o coloan ˘a;
CHECK – Asigur ˘a satisfacerea unei condit ,ii specificat ˘a pentru valorile unei coloane;
DEFAULT – Specific ˘a o valoare implicit ˘a pentru o coloan ˘a;
PRIMARY KEY – Reprezint ˘a o combinat ,ie dintre constr ˆangerile NOT NULL s ,i
UNIQUE s ,i asigur ˘a unicitatea ˆınregistr ˘arilor dintr-un tabel al bazei de date;
FOREIGN KEY – Asigur ˘a identitatea referent ,ial˘a a datelor dintr-un tabel. Aceasta
se refer ˘a la faptul c ˘a datele dintr-o coloan ˘a care are aceast ˘a constr ˆangere trebuie s ˘a
se reg ˘aseasc ˘aˆın coloana cu constr ˆangerea de tip PRIMARY KEY a tabelului referit.
Cele dou ˘a coloane din cele dou ˘a tabele trebuie s ˘a aib ˘a acelas ,i tip de date s ,i s˘a nu per-
mit˘a introducerea de valori de tip NULL. La definirea acestei constr ˆangeri se specific ˘a
s,i restrict ,iile de s ,tergere. Astfel, dac ˘a se aplic ˘a restrict ,ia de ON DELETE NO AC-
TION (care este s ,i cea implicit ˘a), atunci informat ,iile din tabelul referit nu pot fi s ,terse
atˆat timp c ˆat ele sunt utilizate ˆın tabelul ˆın care constr ˆangerea de tip FOREIGN KEY
este definit ˘a. Dac ˘a se aplic ˘a restrict ,ia de ON DELETE CASCADE, atunci dac ˘a se
s,terg informat ,ii din tabelul referit se s ,terg s ,i informat ,iile corespunz ˘atoare din tabelul
ˆın care constr ˆangerea de tip FOREIGN KEY este definit ˘a. Dac ˘a se aplic ˘a restrict ,ia
de ON DELETE SET NULL s ,i se s ,terg informat ,ii din tabelul referit, atunci ˆın tabelul
ˆın care este definit ˘a constr ˆangerea de tip FOREIGN KEY se completeaz ˘a cu NULL
cˆampurile corespunz ˘atoare.
EXEMPLU 2.2 Crearea tabelului Tab
CREATE TABLE Tab
(
Coloana1 NUMERIC ( 4 ) NOT NULL ,
Coloana2 VARCHAR2 ( 3 0 ) NOT NULL ,
Coloana3 DATE ,
Coloana4 NUMERIC ( 4 , 2 ) CHECK ( Coloana4 <2 5 . 3 4 ) ,
CONSTRAINT pkTab PRIMARY KEY ( Coloana1 )
) ;
EXEMPLU 2.3 Crearea tabelelor Tab1 s,iTab2 ˆıntre care exist ˘a relat ,ia 1:N
CREATE TABLE Tab1
(
Coloana11 NUMERIC ( 4 ) NOT NULL ,
Coloana12 VARCHAR2 ( 3 0 ) NOT NULL ,
Coloana13 DATE ,
Coloana14 NUMERIC ( 4 , 2 ) CHECK ( Coloana14 <2 5 . 3 4 ) ,
CONSTRAINT pkTab1 PRIMARY KEY ( Coloana11 )
) ;
CREATE TABLE Tab2
(
Coloana21 NUMERIC ( 4 ) NOT NULL ,
Coloana22 VARCHAR2 ( 3 0 ) NOT NULL ,
Coloana23 NUMERIC ( 4 ) NOT NULL ,
CONSTRAINT pkTab2 PRIMARY KEY ( Coloana21 ) ,
CONSTRAINT fkTab2 FOREIGN KEY ( Coloana23 ) REFERENCES Tab1 ( Coloana11 )
) ;

CREAREA, MODIFICAREA S ,I S,TERGEREA TABELELOR UNEI BAZE DE DATE 17
ˆIn situat ,iaˆın care se constat ˘a c˘a structurile tabelare create nu respect ˘a schemele relat ,ionale
ale modelului logic al bazei de date se impune modificarea tabelelor bazei de date. Co-
manda SQL care permite ad ˘augarea s ,i s,tergerea de coloane ˆın tabele, ad ˘augarea s ,i s,tergerea
de constr ˆangeri ale coloanelor, precum s ,i modificarea specificat ,iilor unei coloane (tipului
de date, m ˘arime, precizie, denumire, repozit ,ionare) este ALTER TABLE. Structura acestei
comenzi este urm ˘atoarea:
ALTER TABLE n u m e t a b e l s p e c i f i c a t i e ;
# S p e c i f i c a t i a e s t e una d i n u r m a t o a r e l e :
jADD
(
nume coloana t i p d a t a [ ( marime [ , p r e c i z i e ] ) ] [ c o n s t r a n g e r e [
c o n s t r a n g e r e ] . . . ]
[ , nume coloana t i p d a t a [ ( marime [ , p r e c i z i e ] ) ] [ c o n s t r a n g e r e [
c o n s t r a n g e r e ] . . . ] ]
[CONSTRAINT n u m e c o n s t r a n g e r e PRIMARY KEY ( nume coloana ) , ]
[CONSTRAINT n u m e c o n s t r a n g e r e FOREIGN KEY ( nume coloana ) REFERENCES
n u m e t a b e l ( nume coloana ) [ ON DELETEfNO ACTIONjCASCADEjSET
NULLg] ]
)
jDROP C O L U M N nume coloana
jDROP PRIMARY KEY
jDROP FOREIGN KEY n u m e c o n s t r a n g e r e
jMODIFY nume coloana t i p d a t a [ ( marime [ , p r e c i z i e ] ) ] [ c o n s t r a n g e r e [
c o n s t r a n g e r e ] . . . ] [ FIRSTjAFTER nume coloana ]
jCHANGE n u m e c o l o a n a v e c h i nume coloana nou t i p d a t a [ ( marime [ ,
p r e c i z i e ] ) ] [ c o n s t r a n g e r e [ c o n s t r a n g e r e ] . . . ] [ FIRSTjAFTER
nume coloana ]
Unele din specificat ,iile comenzii ALTER TABLE sau unele din opt ,iunile acestora nu
sunt implementate ˆın Oracle Database 11g Express Edition.
EXEMPLU 2.4 Modificarea tabelului Tabde la exemplul 2.2
# Se m o d i f i c a Coloana2 a s t f e l i n c a t d i m e n s i u n e a s i r u r i l o r de c a r a c t e r e sa
f i e de maxim 100 s i sa p r i m e a s c a v a l o r i de t i p NULL
ALTER TABLE Tab MODIFY Coloana2 VARCHAR2 ( 1 0 0 ) NULL ;
# Se adauga o c o l o a n a noua denumita Coloana5 de t i p numeric
ALTER TABLE Tab ADD Coloana5 NUMERIC ;
# Se s t e r g e Coloana4
ALTER TABLE Tab DROP C O L U M N Coloana4 ;
S,tergerea tabelelor unei baze de date relat ,ionale se face cu comanda DROP TABLE. Sin-
taxa acestei comenzi este urm ˘atoarea:
DROP TABLE n u m e t a b e l [ CASCADE CONSTRAINTS ] [PURGE ] ;
ˆIn cazul ˆın care tabelul care se dores ,te a fi s ,ters este ˆın relat ,ie cu alte tabele, atunci se
recomand ˘a utilizarea opt ,iunii CASCADE CONSTRAINTS. ˆIn acest fel se s ,terg s ,i con-
strˆangerile impuse la crearea acestuia. Prin folosirea acestei opt ,iuni nu conteaz ˘a ordinea
de s ,tergere a tabelelor care sunt relat ,ionate. ˆIn cazul ˆın care nu se ˆıntrebuint ,eaz˘a aceast ˘a
opt ,iune, atunci trebuie s ,ters mai ˆıntˆai tabelul copil, cel care are constr ˆangerea FOREIGN
KEY , s ,i abia apoi se s ,terge tabelul p ˘arinte. S ,tergerea tabelelor doar cu opt ,iunea CAS-
CADE CONSTRAINTS nu implic ˘a eliberarea spat ,iului din memoria calculatorului alocat
acestora. ˆIn acest scop se utilizeaz ˘a opt ,iunea PURGE.

18 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
EXEMPLU 2.5 S,tergerea tabelelor Tab1 s,iTab2 create la exemplul 2.3
# S t e r g e r e a t a b e l e l o r f a r a e l i b e r a r e a s p a t i u l u i d i n memoria c a l c u l a t o r u l u i
DROP TABLE Tab1 CASCADE CONSTRAINTS ;
DROP TABLE Tab2 CASCADE CONSTRAINTS ;
# S t e r g e r e a t a b e l e l o r cu e l i b e r a r e a s p a t i u l u i d i n memoria c a l c u l a t o r u l u i
DROP TABLE Tab1 CASCADE CONSTRAINTS PURGE;
DROP TABLE Tab2 CASCADE CONSTRAINTS PURGE;
2.3 Introducerea, modificarea s ,i s,tergerea informat ,iilorˆın tabelele unei baze
de date
Dup˘a crearea tabelelor bazelor de date, acestea trebuie populate cu informat ,ii. SQL pune la
dispozit ,ia programatorilor o serie de comenzi pentru introducerea, modificarea s ,i s,tergerea
informat ,iilor. Aceste comenzi sunt: INSERT, UPDATE, respectiv DELETE. Structura
comenzii INSERT este urm ˘atoarea:
INSERT INTO n u m e t a b e l [ nume coloana [ , nume coloana ] . . . ]
VALUES ( [ e x p r e s i e [ , e x p r e s i e ] . . . ] ) ;
Informat ,iile care au tipurile de date s ,ir de caractere s ,i dat ˘a calendaristic ˘a trebuie in-
troduse ˆın sintaxa comenzii INSERT ˆıntre dou ˘a caractere speciale ” ’ ”. Prin comanda
INSERT trebuie introduse informat ,ii cel put ,inˆın coloanele care nu accept ˘a valori NULL.
Unele din aceste informat ,ii pot proveni din alte tabele ale bazei de date s ,iˆın acest caz
comanda care se preteaz ˘a pentru utilizare este INSERT … SELECT.
INSERT INTO n u m e t a b e l [ nume coloana [ , nume coloana ] . . . ]
SELECT [ALLjDISTINCT ] e x p r e s i e s e l e c t i e [ , e x p r e s i e s e l e c t i e ] . . . ,
[F R O M n u m e t a b e l [ , n u m e t a b e l ] . . .
[W H E R E c o n d i t i e ]
[GROUP BYfnume coloanaje x p r e s i eg[ASCjDESC ] , . . . ]
[HAVING c o n d i t i e ]
[ORDER BYfnume coloanaje x p r e s i eg[ASCjDESC ] , . . . ] ] ;
Introducerea de informat ,iiˆın tabelele ˆıntre care exist ˘a o relat ,ie de tip 1:N nu se face la
ˆıntˆamplare. Prima dat ˘a se introduc informat ,iileˆın tabelul p ˘arinte s ,i apoi ˆın tabelul copil
(care cont ,ine cheia str ˘ain˘a).
EXEMPLU 2.6 Introducerea de informat ,iiˆınTab1 s,iTab2 create la exemplul 2.3
# I n t r o d u c e r e a i n f o r m a t i i l o r int o a t e c o l o a n e l e l u i Tab1
INSERT INTO Tab1 ( Coloana11 , Coloana12 , Coloana13 , Coloana14 )
VALUES ( 1 , ’ t e s t ’ , ’28 NOV2015 ’ , 2 4 . 1 2 ) ;
# I n t r o d u c e r e a i n f o r m a t i i l o r inc o l o a n e l e l u i Tab1 c a r e nu a c c e p t a v a l o r i
de t i p NULL
INSERT INTO Tab1 ( Coloana11 , Coloana12 )
VALUES ( 2 , ’ t e s t 1 ’ ) ;
# I n t r o d u c e r e a i n f o r m a t i i l o r int o a t e c o l o a n e l e l u i Tab2
INSERT INTO Tab2 ( Coloana21 , Coloana22 , Coloana23 )
VALUES ( 1 , ’ t e s t a r e ’ , 1) ;
INSERT INTO Tab2 ( Coloana21 , Coloana22 , Coloana23 )
VALUES ( 2 , ’ t e s t a r e 1 ’ , 1) ;
INSERT INTO Tab2 ( Coloana21 , Coloana22 , Coloana23 )
VALUES ( 3 , ’ t e s t a r e 2 ’ , 2) ;
INSERT INTO Tab2 ( Coloana21 , Coloana22 , Coloana23 )
VALUES ( 4 , ’ t e s t a r e 3 ’ , 2) ;

INTRODUCEREA, MODIFICAREA S ,I S,TERGEREA INFORMAT ,IILOR ˆIN TABELELE UNEI BAZE DE DATE 19
ˆIn cazul ˆın care informat ,iile introduse ˆın tabelele bazei de date sunt incorecte sau incom-
plete, acestea pot fi corectare sau completate prin comanda SQL UPDATE, a c ˘arei sintax ˘a
este urm ˘atoarea:
UPDATE n u m e t a b e l
SET nume coloana =fe x p r e s i ejDEFAULTg[ , nume coloana =fe x p r e s i ej
DEFAULTg] . . .
[W H E R E c o n d i t i e ]
[ORDER BYfnume coloanaje x p r e s i eg[ASCjDESC ] , . . . ] ;
Expresiile care se atribuie coloanelor din tabelele unei baze de date relat ,ionale trebuie
s˘a fieˆıncadrate de caracterul special ” ’ ”, dac ˘a tipul de date al acestor coloane este de tipul
s,ir de caractere sau dat ˘a calendaristic ˘a.
EXEMPLU 2.7 Actualizarea unor informat ,ii introduse la exemplul 2.6
# Co mpleta rea i n f o r m a t i i l o r l i p s a d i n cea de a doua i n r e g i s t a r e d i n Tab1
UPDATE Tab1
SET Coloana13 = ’29 NOV2015 ’ , Coloana14 = 12
W H E R E Coloana11 = 2 ;
# M o d i f i c a r e a i n f o r m a t i i l o r d i n cea de a t r e i a i n r e g i s t a r e d i n Tab2
UPDATE Tab2
SET Coloana22 = ’ t e s t a r e 3 n o u a ’
W H E R E Coloana21 = 3 ;
Comanda SQL DELETE permite s ,tergerea informat ,iilor introduse ˆın tabelele unei baze de
date relat ,ionale s ,i are sintaxa:
DELETE F R O M n u m e t a b e l
[W H E R E c o n d i t i e ]
[ORDER BYfnume coloanaje x p r e s i eg[ASCjDESC ] , . . . ] ;
S,tergerea informat ,iilor din tabelele unei baze de date este afectat ˘a de restrict ,iile de tip
ON DELETE specificate la crearea tabelelor. La crearea tabelelor Tab1 s,iTab2 care sunt
ˆın relat ,ie de tip 1:N, nu s-a specificat la ad ˘augarea constr ˆangerii de tip FOREIGN KEY
nici o restrict ,ie de s ,tergere. Aceasta ˆınsemn ˘a c˘a SGBD-ul a ad ˘augat automat restrict ,ia ON
DELETE NO ACTION, ceea ce ˆınsemn ˘a c˘a nu se pot s ,terge informat ,ii din tabelul p ˘arinte
(Tab1 ) atˆat timp c ˆat acestea sunt utilizate de informat ,iile tabelului copil ( Tab2 ). Exem-
plul urm ˘ator prezint ˘a acest lucru. Astfel, nu se pot s ,terge informat ,ii din Tab1 deoarece
valorile constr ˆangerii de tip PRIMARY KEY , 1 s ,i 2, sunt utilizate ˆınTab2 ˆın coloana cu
constr ˆangerea de tip FOREIGN KEY . Trebuie s ˘a se s ,tearg ˘a mai ˆıntˆai informat ,iile din Tab2
care utilizeaz ˘a aceste valori s ,i abia apoi se pot s ,terge s ,i informat ,iile din Tab1 .
EXEMPLU 2.8 S,tergerea informat ,iilor din Tab1 s,iTab2
# S t e r g e r e a i n f o r m a t i i l o r d i n Tab2 c a r e au inc o l o a n a cu c o n s t r a n g e r e a de
t i p FOREIGN KEY o v a l o a r e mai mare sau e g a l a cu 2
DELETE F R O M Tab2
W H E R E Coloana23 >= 2 ;
# S t e r g e r e a i n f o r m a t i i l o r d i n Tab1 c a r e au inc o l o a n a cu c o n s t r a n g e r e a de
t i p PRIMARY KEY v a l o a r e a 2
DELETE F R O M Tab1
W H E R E Coloana11 = 2 ;

20 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
2.4 Exemplu de implementare a unei baze de date relat ,ionale
Primul pas care trebuie f ˘acut ˆın vederea implement ˘arii bazelor de date relat ,ionale este
instalarea lui Oracle Database 11g Express Edition. Acesta este gratuit s ,i se poate desc ˘arca
de pe site-ul Oracle. Instruct ,iunile de instalare sunt descrise ˆın [3] s ,i sunt specifice fiec ˘arui
sistem de operare ˆın parte. ˆIn timpul instal ˘arii se solicit ˘a introducerea adreselor porturilor
care vor fi folosite. Acestea sunt 1521 pentru Oracle s ,i 8080 pentru realizarea conexiunii
prin http cu un server web. Tot ˆın timpul instal ˘arii se solicit ˘a introducerea unei parole
pentru conturile system s,isys. Aceste conturi permit crearea/s ,tergerea altor utilizatori,
salv˘ari de sigurant ,˘a ale datelor s ,i alte servicii corespunz ˘atoare administr ˘arii unui server
de baze de date relat ,ionale. Dup ˘a instalare, Oracle Database 11g Express Edition permite
crearea de utilizatori cu diverse drepturi, precum s ,i gestiunea bazelor de date prin scrierea
s,i execut ,ia comenzilor SQL ˆın linia de comand ˘a (Run SQL Command Line). Aceast ˘a
modalitate de lucru poate fi considerat ˘a de unii utilizatori mai put ,in productiv ˘a. Oracle
a venit ˆınˆıntˆampinarea lor cu o aplicat ,ie complementar ˘a, Oracle SQL Developer. Dup ˘a
desc˘arcarea de pe site-ul Oracle a acesteia [4], se dezarhiveaz ˘a fis ,ierul de tip .zip, iar din
directorul rezultat se lanseaz ˘aˆın execut ,ie fis ,ierul sqldeveloper.exe. ˆIn cazul ˆın care se
dores ,te realizarea de aplicat ,ii client ˆın Java care s ˘a utilizeze o baz ˘a de date relat ,ional ˘a
implementat ˘aˆın Oracle Database 11g Express Edition, se recomand ˘a desc ˘arcarea SQL
Developer cu Java Development Kit (JDK) inclus.
ˆIn cadrul acestui subcapitol se exemplific ˘a implementarea bazei de date relat ,ional ˘a
a c˘arei proiectare a fost realizat ˘aˆın subcapitolul 1.4 utiliz ˆand SQL Developer 4.1.1 s ,i
comenzi SQL specifice.
2.4.1 Crearea bazei de date – exemplificare
Crearea bazei de date presupune mai ˆıntˆai crearea unui utilizator cu drepturi de conexiune
(CONNECT) s ,i de creare a resurselor bazei de date (RESOURCE). Aceast ˘a act ,iune se
poate executa din linia de comanda a Oracle Database 11g Express Edition sau cu SQL
Developer.
Pentru crearea unui utilizator din linia de comand ˘a, se selecteaz ˘aˆın Windows Start /
Oracle Database 11g Express Edition / Run SQL Command Line. Se deschide o fereastr ˘a
ˆın care se tasteaz ˘a comanda CONNECT urmat ˘a de system pentru a se realiza o conexiu-
ne la utilizatorul implicit al serverului de baze de date. Dup ˘a conectarea la system , se
introduce comanda SQL CREATE USER ˆın conformitate cu sintaxa acesteia, prezentat ˘a
ˆın subcapitolul 2.1, pentru a se crea utilizatorul IntVirtual cu parola IntVirtual . Se aloc ˘a
drepturi noului utilizator creat s ,i se realizeaz ˘a o conexiune (schem ˘a) la acesta. Pas ,ii sunt
prezentat ,iˆın figura 2.1.
Pentru crearea utilizatorului IntVirtual cu SQL Developer se procedeaz ˘a astfel: se lan-
seaz˘aˆın execut ,ie fis ,ierul sqldeveloper.exe, se realizeaz ˘a conexiunea la utilizatorul implicit
system prin dublu click pe numele acestuia s ,i prin introducerea parolei ˆın fereastra supra-
pus˘a care apare, se execut ˘a click drepta pe categoria Other Users s,i se alege Create User… .
Apare fereastra Create User ˆın sect ,iunea User ˆın care se completeaz ˘a numele utilizatorului
s,i parola acestuia. Se alege apoi sect ,iunea Granted Roles unde se selecteaz ˘a rolurile CON-
NECT s ,i RESOURCE. Se act ,ioneaz ˘a apoi butonul Apply (figura 2.2). ˆIn lista utilizatorilor
apare s ,i numele utilizatorului IntVirtual , ale c ˘arui propriet ˘at,i pot fi modificate prin click
dreapta pe numele lui s ,i selectarea opt ,iunii Edit User… din meniul contextual ap ˘arut. Dac ˘a
se dores ,te s ,tergerea utilizatorului se selecteaz ˘a opt ,iunea Drop User… (figura 2.3).

EXEMPLU DE IMPLEMENTARE A UNEI BAZE DE DATE RELAT ,IONALE 21
Figura 2.1 Crearea utilizatorului IntVirtual s,i a unei conexiuni pentru acesta cu comenzi SQL din
linia de comand ˘a
Figura 2.2 Crearea utilizatorului IntVirtual cu SQL Developer
Dup˘a crearea lui IntVirtual se genereaz ˘a o conexiune (schem ˘a) la acesta, care permite
definirea tabelelor s ,i a altor structuri ale bazei de date relat ,ionale. Se execut ˘a click dreapta
peConnections s,i se alege New Connection… . Apare o fereastr ˘aˆın care se introduc: numele
conexiunii IntVirtual , numele utilizatorului IntVirtual s,i parola IntVirtual . Dup ˘a introdu-
cerea acestor date, conexiunea poate fi testat ˘a prin act ,ionarea butonului Test. Dac ˘a se poate

22 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
Figura 2.3 Gestiunea utilizatorului IntVirtual
realiza conexiunea, utilizatorul este informat de acest lucru prin mesajul Status: Succes .ˆIn
caz contrar, mesajul indic ˘a problemele ap ˘arute (nume utilizator sau parola incorecte, exist ˘a
deja o conexiune cu acest nume, utilizatorul nu are dreptul de a realiza o conexiune, etc).
Dac˘a mesajul este Status: Succes , se act ,ioneaz ˘a butonul Connect (figura 2.4). Se observ ˘a
aparit ,iaˆın lista conexiunilor a celei cu numele IntVirtual (figura 2.5).
Figura 2.4 Crearea conexiunii IntVirtual a utilizatorului IntVirtual

EXEMPLU DE IMPLEMENTARE A UNEI BAZE DE DATE RELAT ,IONALE 23
Figura 2.5 Conexiunea IntVirtual ˆın lista conexiunilor
2.4.2 Crearea tabelelor bazei de date – exemplificare
Dup˘a realizarea conexiunii IntVirtual , se pot crea tabelele bazei de date. Aceast ˘a act ,iune
se poate executa din linia de comand ˘a a Oracle Database 11g Express Edition sau cu SQL
Developer. Este important ˘a ordinea ˆın care tabelele se creeaz ˘a. Mai ˆıntˆai se definesc
tabelele care nu au constr ˆangere de tip FOREIGN KEY . Baza de date exemplificat ˘aˆın
subcapitolul 1.4 cont ,ine 7 scheme relat ,ionale care se transpun ˆın 7 tabele. Mai ˆıntˆai se
creeaz ˘a tabelele Tipuri servicii ,Intreprinderi , apoi tabelele Servicii ,Angajati ,Proiecte ,
urmˆand ca la final s ˘a se defineasc ˘a s,i tabelele Servicii intreprinderi ,Angajati proiecte .
Pentru crearea unui tabel din linia de comand ˘a se selecteaz ˘a Windows Start / Oracle
Database 11g Express Edition / Run SQL Command Line. Apare fereastra ˆın care se
tasteaz ˘a comanda CONNECT urmat ˘a de IntVirtual s,i se introduce parola specific ˘a. Dup ˘a
conectare, se introduce comanda SQL CREATE TABLE conform cu sintaxa acesteia,
prezentat ˘aˆın subcapitolul 2.2, pentru a se crea tabelul Tipuri servicii . Comanda SQL este
prezentat ˘aˆın figura 2.6.
Figura 2.6 Crearea tabelului Tipuri servicii cu comenzi SQL din linia de comand ˘a
ˆIn SQL Developer se poate observa aparit ,ia tabelului Tipuri servicii ˆın categoria Tables
(Filtered) a conexiunii IntVirtual (figura 2.7).
Figura 2.7 Tabelul Tipuri servicii ˆın SQL Developer

24 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
Pentru crearea celorlaltor tabele se foloses ,te SQL Developer. Acest utilitar ofer ˘a dou ˘a
modalit ˘at,i de lucru: (1) prin scrierea s ,i execut ,ia comenzilor SQL de tip CREATE TABLE
s,i (2) prin utilizarea unor instrumente grafice puse la dispozit ,ie.
Tabelul Intreprinderi se creeaz ˘a prin prima modalitate enunt ,at˘a mai sus. Pentru aceasta,
trebuie s ˘a se deschid ˘a un spat ,iu de lucru (SQL Worksheet) pentru conexiunea IntVirtual
(figura 2.8). Dac ˘a conexiunea este ˆınchis ˘a atunci se cere s ˘a se introduc ˘a parola. ˆIn spat ,iul
de lucru se scrie comanda SQL pentru crearea tabelului Intreprinderi ˆın conformitate cu
specificat ,iile definite ˆın etapa de proiectare. Execut ,ia codului se face prin act ,ionarea bu-
tonului Run Statement . Figura 2.9 prezint ˘a comanda SQL s ,i rezultatul obt ,inut.
Figura 2.8 Deschiderea unui SQL Worksheet ˆın SQL Developer
Figura 2.9 Crearea tabelului Intreprinderi cu comanda SQL specific ˘aˆın SQL Developer

EXEMPLU DE IMPLEMENTARE A UNEI BAZE DE DATE RELAT ,IONALE 25
Tabelul Servicii se creeaz ˘a prin cea de-a doua modalitate enunt ,at˘a mai sus. Se execut ˘a
click dreapta pe categoria Tables (Filtered) a conexiunii IntVirtual s,i se alege meniul New
Table… . Apare fereastra din figura 2.10 ˆın care se introduc denumirile coloanelor tabelului
Servicii s,i tipurile de date aferente. Se utilizeaz ˘a butonul Add Column pentru a se ad ˘auga
noi coloane. Constr ˆangerea de tip PRIMARY KEY poate fi setat ˘aˆın aceast ˘a ferestr ˘a,ˆıns˘a
pentru constr ˆangerea de tip FOREIGN KEY trebuie s ˘a se bifeze c ˘asut ,aAdvanced . Dup ˘a
bifarea c ˘asut ,ei apare o nou ˘a ferestr ˘a care permite orice modificare a tabelului. Pentru
ad˘augarea constr ˆangerii de tip FOREIGN KEY se selecteaz ˘a din partea st ˆang˘a a ferestrei
Contraints s,i se alege opt ,iunea New Foreign Key Constraint din lista oferit ˘a de butonul
Add Constraint… (figura 2.11).
Figura 2.10 Crearea tabelului Servicii ˆın SQL Developer
Constr ˆangerea de tip FOREIGN KEY implic ˘a selectarea tabelului referit, ˆın cazul acesta,
Tipuri servicii , a coloanei acestuia care are constr ˆangerea de tip PRIMARY KEY , idtipser-
viciu , s,i a restrict ,iei de s ,tergere, ON DELETE NO ACTION. Dac ˘aˆıntr-un tabel ar fi mai
multe constr ˆangeri de tipul FOREIGN KEY , atunci procedura ar trebuie repetat ˘a. Dup ˘a
definirea constr ˆangerii se act ,ioneaz ˘a butonul OKs,i tabelul Servicii apare ˆın lista tabelelor
conexiunii IntVirtual (figura 2.12).
Tabelul Angajati se creeaz ˘a tot cu ajutorul instrumentelor grafice puse la dispozit ,ie de
SQL Developer. Rezultatul obt ,inut este prezentat ˆın figura 2.13.
Tabelul Proiecte se creeaz ˘a tot cu ajutorul instrumentelor grafice puse la dispozit ,ie de
SQL Developer. Rezultatul obt ,inut este prezentat ˆın figura 2.14.
Tabelele Servicii intreprinderi s,iAngajati proiecte se creeaz ˘a prin scrierea comenzilor
SQL ˆıntr-un spat ,iu de lucru al conexiunii IntVirtual .ˆIn figura 2.15 se observ ˘a comen-
zile SQL care se execut ˘a concomitent prin act ,ionarea butonului Run Script . Acest buton
execut ˘a toate comenzile SQL din spat ,iul de lucru activ.

26 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
Figura 2.11 Ad˘augarea constr ˆangerii FOREIGN KEY tabelului Servicii ˆın SQL Developer
Figura 2.12 Stabilirea leg ˘aturii cu tabelul Tipuri servicii ˆın SQL Developer
ˆIn faza de proiectare, toate constr ˆangerile de tip PRIMARY KEY ale tabelelor au fost
definite ca fiind AI. Incrementarea automat ˘a a valorilor din coloanele care definesc ˆın
mod unic o ˆınregistrare dintr-un tabel se face ˆın Oracle Database 11g Express Edition
prin definirea unor secvent ,e. Secvent ,a aferent ˘a coloanei idintreprindere din tabelul In-
treprinderi se creeaz ˘a prin executarea unui click dreapta pe sect ,iunea Sequences a conex-
iunii IntVirtual s,i alegerea meniului New Sequence… . Apare fereastra din figura 2.16 ˆın
care se introduc: numele secvent ,ei, valoarea de la care s ˘aˆınceap ˘a incrementarea automat ˘a,
pasul de incrementare s ,i valoarea minim ˘a s,i valoarea maxim ˘aˆın conformitate cu lungimea

EXEMPLU DE IMPLEMENTARE A UNEI BAZE DE DATE RELAT ,IONALE 27
Figura 2.13 Crearea tabelului Angajati ˆın SQL Developer
tipului de date numeric specificat ˘a la crearea tabelului. Se act ,ioneaz ˘a butonul OKs,i se
observ ˘a aparit ,iaˆın sect ,iunea Sequences a secvent ,ei cu numele specificat.
ˆIn acelas ,i mod se definesc secvent ,e pentru tabele Tipuri servicii ,Servicii ,Angajati ,
Proiecte ale conexiunii IntVirtual . Secvent ,ele au urm ˘atoarele denumiri: Tipuri servicii Seq,
Servicii Seq,Angajati Seq, respectiv Proiecte seq. Pentru crearea unor astfel de secvent ,e
se poate utiliza s ,i comanda SQL CREATE SEQUENCE. De exemplu, pentru crearea
secvent ,elor ment ,ionate ˆın acest paragraf, se poate utiliza codul urm ˘ator:
CREATE SEQUENCE T i p u r i s e r v i c i i S e q START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999;
CREATE SEQUENCE S e r v i c i i S e q START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999;
CREATE SEQUENCE A n g a j a t i S e q START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999;
CREATE SEQUENCE P r o i e c t e S e q START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999;

28 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
Figura 2.14 Crearea tabelului Proiecte ˆın SQL Developer
Figura 2.15 Crearea tabelelor Servicii intreprinderi s,iAngajati proiecte ˆın SQL Developer

EXEMPLU DE IMPLEMENTARE A UNEI BAZE DE DATE RELAT ,IONALE 29
Figura 2.16 Crearea secvent ,ei de autoincrementare pentru tabelul Intreprinderi ˆın SQL Developer
2.4.3 Introducerea, modificarea s ,i s,tergerea informat ,iilor ˆın tabelele bazei
de date – exemplificare
Introducerea informat ,iilor ˆın tabelele conexiunii IntVirtual create ˆın subcapitolul 2.4.2 se
poate face din linia de comand ˘a a Oracle Database 11g Express Edition sau cu SQL De-
veloper. Popularea tabelelor cu informat ,ii nu se face la ˆıntˆamplare. Mai ˆıntˆai se intro-
duc informat ,iiˆın tabelele care au doar constr ˆangeri de tipul PRIMARY KEY , iar dup ˘a se
introduc informat ,ii s ,iˆın tabelele cu constr ˆangeri de tipul FOREIGN KEY . Mai ˆıntˆai se
introduc informat ,iiˆın tabelele Tipuri servicii ,Intreprinderi , iar apoi ˆın tabelele Servicii ,
Angajati ,Proiecte , urm ˆand ca la final s ˘a se populeze s ,i tabelele Servicii intreprinderi s,i
Angajati proiecte . Valorile care se introduc ˆın coloanele cu constr ˆangere de tipul FOR-
EIGN KEY trebuie s ˘a se reg ˘aseasc ˘a printre valorile din coloanele cu constr ˆangere de tipul
PRIMARY KEY ale tabelului referit.
Pentru introducerea informat ,iilor ˆıntr-un tabel din linia de comand ˘a se lanseaz ˘a Win-
dows Start / Oracle Database 11g Express Edition / Run SQL Command Line. Se deschide
fereastra ˆın care se tasteaz ˘a comanda CONNECT urmat ˘a de IntVirtual s,i se introduce
parola specific ˘a. Dup ˘a conectare se introduce comanda SQL INSERT TABLE ˆın confor-
mitate cu sintaxa acesteia, prezentat ˘aˆın subcapitolul 2.3, pentru a se popula cu informat ,ii
tabelul Tipuri servicii . Comanda SQL este prezentat ˘aˆın figura 2.17.
ˆIn tabelul Tipuri servicii se pot introduce informat ,ii s ,i cu SQL Developer. Pentru
aceasta trebuie s ˘a se deschid ˘a un spat ,iu de lucru (SQL Worksheet) pentru conexiunea
IntVirtual .ˆIn spat ,iul de lucru se scriu comenzile SQL INSERT TABLE. Execut ,ia mai
multor comenzi SQL se face prin act ,ionarea butonului Run Script . Rezultatul introducerii
cˆatorva informat ,iiˆın tabelul Tipuri servicii este prezentat ˆın figura 2.18. Se poate observa

30 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
folosirea secvent ,ei aferente tabelului Tipuri servicii Seqpentru autoincrementarea valo-
rilor din coloana cu constr ˆangere de tipul PRIMARY KEY .
Figura 2.17 Introducerea de informat ,iiˆın tabelul Tipuri servicii din linia de comand ˘a
Figura 2.18 Introducerea de informat ,iiˆın tabelul Tipuri servicii ˆın SQL Developer
SQL Developer pune la dispozit ,ie o serie de instrumente grafice pentru introducerea
de informat ,iiˆın tabele. Pentru introducerea de informat ,iiˆın tabelul Intreprinderi prin
aceast ˘a modalitate, se execut ˘a click pe numele tabelului s ,i se alege din fereastra care se
deschide sect ,iunea Data . Se act ,ioneaz ˘a apoi butonul Insert Row s,i se observ ˘a aparit ,ia
unei linii ˆın tabel, ˆın care se pot introduce informat ,iile. Act ,ionarea butonului Insert Row
se poate repeta pentru introducerea mai multor linii ˆın tabel. Pentru ca informat ,iile s ˘a fie
salvate trebuie s ˘a se apese butonul Commit Changes . Rezultatul obt ,inut este prezentat ˆın
figura 2.19. Se observ ˘a c˘a nu se utilizeaz ˘a secvent ,a asociat ˘a tabelului Intreprinderi ,In-
treprinderiz Seq, definit ˘aˆın subcapitolul 2.4.2. Dac ˘a se dores ,te completarea informat ,iilor
ˆın tabel cu comanda SQL INSERT TABLE s ,i cu secvent ,a asociat ˘a, atunci aceasta din urm ˘a

EXEMPLU DE IMPLEMENTARE A UNEI BAZE DE DATE RELAT ,IONALE 31
trebuie modificat ˘a astfel ˆıncˆat s˘a porneasc ˘a de la ultima valoare ˆıntreag ˘a a coloanei cu
constr ˆangerea de tip PRIMARY KEY la care se adaug ˘a valoarea 1.
Figura 2.19 Introducerea de informat ,iiˆın tabelul Intreprinderi ˆın SQL Developer
Pentru introducerea informat ,iilor ˆın celelalte tabele ale bazei de date se poate utiliza
codul urm ˘ator, iar rezultatul obt ,inut este prezentat ˆın figura 2.20.
INSERT INTO S e r v i c i i ( i d s e r v i c i u , denumire , i d t i p s e r v i c i u )
VALUES ( s e r v i c i i s e q . n e x t v a l , ’ E l a b o r a r e d o c u m e n t a t i e ’ , 1) ;
INSERT INTO S e r v i c i i ( i d s e r v i c i u , denumire , i d t i p s e r v i c i u )
VALUES ( s e r v i c i i s e q . n e x t v a l , ’ E f e c t u a r e b i l a n t a n u a l ’ , 2) ;
INSERT INTO S e r v i c i i ( i d s e r v i c i u , denumire , i d t i p s e r v i c i u )
VALUES ( s e r v i c i i s e q . n e x t v a l , ’ E f e c t u a r e p r o i e c t c l a d i r e ’ , 3) ;
INSERT INTO S e r v i c i i ( i d s e r v i c i u , denumire , i d t i p s e r v i c i u )
VALUES ( s e r v i c i i s e q . n e x t v a l , ’ C r e a r e r e c l a m a ’ , 4) ;
INSERT INTO A n g a j a t i ( i d a n g a j a t , nume , prenume , cnp , f u n c t i e , p r o f e s i e ,
u t i l i z a t o r , p a r o l a , i d i n t r e p r i n d e r e )
VALUES ( a n g a j a t i s e q . n e x t v a l , ’ Popescu ’ , ’ V a s i l e ’ , ’ 1800912457891 ’ , ’
Manager p r o i e c t ’ , ’ I n g i n e r ’ , ’ vpopescu ’ , ’ vpopescupwd ’ , 1) ;
INSERT INTO A n g a j a t i ( i d a n g a j a t , nume , prenume , cnp , f u n c t i e , p r o f e s i e ,
u t i l i z a t o r , p a r o l a , i d i n t r e p r i n d e r e )
VALUES ( a n g a j a t i s e q . n e x t v a l , ’ I o n e s c u ’ , ’ Andrei ’ , ’ 1810829257572 ’ , ’
P r o i e c t a n t ’ , ’ I n g i n e r ’ , ’ a i o n e s c u ’ , ’ aionescupwd ’ , 1) ;
INSERT INTO A n g a j a t i ( i d a n g a j a t , nume , prenume , cnp , f u n c t i e , p r o f e s i e ,
u t i l i z a t o r , p a r o l a , i d i n t r e p r i n d e r e )
VALUES ( a n g a j a t i s e q . n e x t v a l , ’ Popa ’ , ’ Maria ’ , ’ 2790429123745 ’ , ’ C o p y w r i t e r
’ , ’ A r t i s t v i z u a l ’ , ’ mpopa ’ , ’ mpopapwd ’ , 2) ;
INSERT INTO A n g a j a t i ( i d a n g a j a t , nume , prenume , cnp , f u n c t i e , p r o f e s i e ,
u t i l i z a t o r , p a r o l a , i d i n t r e p r i n d e r e )
VALUES ( a n g a j a t i s e q . n e x t v a l , ’ Mircea ’ , ’ Cosmin ’ , ’ 1870131013941 ’ , ’
C o n s u l t a n t ’ , ’ Avocat ’ , ’ c m i r c e a ’ , ’ cmirceapwd ’ , 3) ;

32 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
INSERT INTO A n g a j a t i ( i d a n g a j a t , nume , prenume , cnp , f u n c t i e , p r o f e s i e ,
u t i l i z a t o r , p a r o l a , i d i n t r e p r i n d e r e )
VALUES ( a n g a j a t i s e q . n e x t v a l , ’ C o s t i n ’ , ’ Mihai ’ , ’ 1850205023742 ’ , ’ C o n t a b i l
s e f ’ , ’ Economist ’ , ’ m c o s t i n ’ , ’ mcostinpwd ’ , 4) ;
INSERT INTO A n g a j a t i ( i d a n g a j a t , nume , prenume , cnp , f u n c t i e , p r o f e s i e ,
u t i l i z a t o r , p a r o l a , i d i n t r e p r i n d e r e )
VALUES ( a n g a j a t i s e q . n e x t v a l , ’ Cosma ’ , ’ Mihaela ’ , ’ 2891006870203 ’ , ’
C o n t a b i l ’ , ’ Economist ’ , ’ mcosma ’ , ’mcosmapwd ’ , 4) ;
INSERT INTO P r o i e c t e ( i d p r o i e c t , acronim , o b i e c t i v , d a t a i n c e p e r e ,
d a t a t e r m i n a r e , produs , s t a r e p r o i e c t , i d i n t r e p r i n d e r e )
VALUES ( p r o i e c t e s e q . n e x t v a l , ’PROBLOC ’ , ’ P r o i e c t a r e a un ui i m o b i l de10
e t a j e ’ , ’01SEP2015 ’ , ’31JAN2016 ’ , ’ P r o i e c t ’ , ’ 1 ’ , 1) ;
INSERT INTO P r o i e c t e ( i d p r o i e c t , acronim , o b i e c t i v , d a t a i n c e p e r e ,
d a t a t e r m i n a r e , produs , s t a r e p r o i e c t , i d i n t r e p r i n d e r e )
VALUES ( p r o i e c t e s e q . n e x t v a l , ’PROCASA ’ , ’ P r o i e c t a r e a un ui i m o b i l D+P+1 ’ , ’
01AUG2014 ’ , ’15MAR2015 ’ , ’ P r o i e c t ’ , ’ 2 ’ , 1) ;
INSERT INTO P r o i e c t e ( i d p r o i e c t , acronim , o b i e c t i v , d a t a i n c e p e r e ,
d a t a t e r m i n a r e , produs , s t a r e p r o i e c t , i d i n t r e p r i n d e r e )
VALUES ( p r o i e c t e s e q . n e x t v a l , ’REC CONSTRUCT’ , ’ C r e a r e r e c l a m a p e n t r u o
f i r m a de c o n s t r u c t i i ’ , ’01 DEC2015 ’ , ’28FEB2016 ’ , ’ Reclama v i d e o ’ ,
’ 0 ’ , 2) ;
INSERT INTO P r o i e c t e ( i d p r o i e c t , acronim , o b i e c t i v , d a t a i n c e p e r e ,
d a t a t e r m i n a r e , produs , s t a r e p r o i e c t , i d i n t r e p r i n d e r e )
VALUES ( p r o i e c t e s e q . n e x t v a l , ’REC CONTA’ , ’ C r e a r e r e c l a m a p e n t r u of i r m a
de c o n t a b i l i t a t e ’ , ’15 JUN2015 ’ , ’15JUL2015 ’ , ’ Reclama a u d i o ’ , ’ 2 ’ ,
2) ;
INSERT INTO P r o i e c t e ( i d p r o i e c t , acronim , o b i e c t i v , d a t a i n c e p e r e ,
d a t a t e r m i n a r e , produs , s t a r e p r o i e c t , i d i n t r e p r i n d e r e )
VALUES ( p r o i e c t e s e q . n e x t v a l , ’CONSTAT ’ , ’ O f e r i r e c o n s u l t a n t a p e n t r u
e l a b o r a r e a u n e i p r o p u n e r i de p r o i e c t ’ , ’15OCT2014 ’ , ’15FEB2015 ’ , ’
P r o p u n e r e p r o i e c t ’ , ’ 2 ’ , 3) ;
INSERT INTO P r o i e c t e ( i d p r o i e c t , acronim , o b i e c t i v , d a t a i n c e p e r e ,
d a t a t e r m i n a r e , produs , s t a r e p r o i e c t , i d i n t r e p r i n d e r e )
VALUES ( p r o i e c t e s e q . n e x t v a l , ’CONSTAT1 ’ , ’ O f e r i r e c o n s u l t a n t a p e n t r u
p r e d a r e f a z a p r o i e c t ’ , ’20AUG2015 ’ , ’20MAR2016 ’ , ’ Faza p r o i e c t ’ , ’
1 ’ , 3) ;
INSERT INTO P r o i e c t e ( i d p r o i e c t , acronim , o b i e c t i v , d a t a i n c e p e r e ,
d a t a t e r m i n a r e , produs , s t a r e p r o i e c t , i d i n t r e p r i n d e r e )
VALUES ( p r o i e c t e s e q . n e x t v a l , ’ BIL ’ , ’ E f e c t u a r e b i l a n t c o n t a b i l s e m e s t r i a l ’
, ’15APR2015 ’ , ’30APR2015 ’ , ’ B i l a n t c o n t a b i l ’ , ’ 2 ’ , 4) ;
INSERT INTO P r o i e c t e ( i d p r o i e c t , acronim , o b i e c t i v , d a t a i n c e p e r e ,
d a t a t e r m i n a r e , produs , s t a r e p r o i e c t , i d i n t r e p r i n d e r e )
VALUES ( p r o i e c t e s e q . n e x t v a l , ’ BIL1 ’ , ’ E f e c t u a r e b i l a n t c o n t a b i l s e m e s t r i a l
’ , ’15JAN2016 ’ , ’31JAN2016 ’ , ’ B i l a n t c o n t a b i l ’ , ’ 0 ’ , 4) ;
INSERT INTO S e r v i c i i i n t r e p r i n d e r i ( i d s e r v i c i u , i d i n t r e p r i n d e r e )
VALUES ( 3 , 1) ;
INSERT INTO S e r v i c i i i n t r e p r i n d e r i ( i d s e r v i c i u , i d i n t r e p r i n d e r e )
VALUES ( 4 , 2) ;
INSERT INTO S e r v i c i i i n t r e p r i n d e r i ( i d s e r v i c i u , i d i n t r e p r i n d e r e )
VALUES ( 1 , 3) ;
INSERT INTO S e r v i c i i i n t r e p r i n d e r i ( i d s e r v i c i u , i d i n t r e p r i n d e r e )
VALUES ( 2 , 4) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 1 , 1) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 1 , 2) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 2 , 1) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 2 , 2) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 3 , 3) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 3 , 4) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 4 , 5) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 4 , 6) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 5 , 7) ;

EXEMPLU DE IMPLEMENTARE A UNEI BAZE DE DATE RELAT ,IONALE 33
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 5 , 8) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 6 , 7) ;
INSERT INTO A n g a j a t i p r o i e c t e ( i d a n g a j a t , i d p r o i e c t ) VALUES ( 6 , 8) ;
Figura 2.20 Informat ,iile introduse ˆın tabelele Servicii ,Angajati ,Proiecte ,Servicii intreprinderi ,
Angajati proiecte
Modificarea informat ,iilor dintr-un tabel al bazei de date se realizeaz ˘aˆın SQL Developer
prin click pe numele tabelului s ,i alegerea din fereastra care apare a sect ,iunii Data . Se
selecteaz ˘a apoi linia care se dores ,te a fi modificat ˘a, se fac modific ˘arile dorite ˆın coloane s ,i
se act ,ioneaz ˘a butonul Commit Changes . Rezultatul modific ˘arii acronimului proiectului cu
idproiect=3 este prezentat ˆın figura 2.21 s ,i este echivalent cu execut ,ia comenzii SQL:
UPDATE P r o i e c t e SET ACRONIM = ’RECCONSTRUCT ’ W H E R E i dp r o i e c t =3;
S,tergerea informat ,iilor dintr-un tabel al bazei de date se realizeaz ˘aˆın SQL Developer
prin click pe numele tabelului s ,i alegerea din fereastra care apare a sect ,iunii Data . Se
selecteaz ˘a apoi linia sau liniile care se doresc a fi s ,terse s ,i se act ,ioneaz ˘a butonul Delete
Selected Row(s) . Pentru s ,tergerea liniilor selectate se act ,ioneaz ˘a butonul Commit Changes
(figura 2.22). S ,tergerea liniei selectate din figura 2.22 nu se realizeaz ˘a, deoarece angajatul
selectat este implicat ˆın dou ˘a proiecte.

34 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
Figura 2.21 Modificarea informat ,iilor din tabelul Proiecte ˆın SQL Developer
Figura 2.22 S,tergerea informat ,iilor din tabelul Angajat ,iˆın SQL Developer
2.4.4 Copierea bazei de date – exemplificare
Baza de date poate fi exportat ˘aˆıntr-un fis ,ier cu extensia sql prin selectarea ˆın SQL De-
veloper a meniului Tools , submeniul Database Export… .ˆIn fereastra care apare se alege
conexiunea IntVirtual , se indic ˘a numele fis ,ierului care va cont ,ine copia bazei de date s ,i se
act ,ioneaz ˘a butonul Next. La pas ,ii urm ˘atori se act ,ioneaz ˘a butonul Next, iar la sf ˆars,it butonul
Finish (figura 2.23). Pentru restaurarea bazei de date pe un alt calculator se procedeaz ˘aˆın
felul urm ˘ator: se reiau pas ,ii prezentat ,iˆın sect ,iunea 2.4.1 s ,i apoi din meniul File, submeniul
Open se deschide fis ,ierul cu extensia sql care cont ,ine copia bazei de date. Se ruleaz ˘a codul

EXERCIT ,II 35
pentru conexiunea IntVirtual , care a fost recreat ˘a, prin act ,ionarea butonului Run Script .
Pentru restaurarea bazei de date pe calculatorul pe care a fost creat ˘a se selecteaz ˘a conexiu-
neaIntVirtual , se deschide fis ,ierul cu extensia sql ( File/Open ) s,i se act ,ioneaz ˘a butonul Run
Script .
Figura 2.23 Copierea bazei de date IntVirtual
EXERCIT ,II
2.1 Utiliz ˆand cunos ,tint ,ele dob ˆandite ˆın acest capitol:
a) S ˘a se creeze ˆın SQL Developer un utilizator denumit testcu parola testcare s ˘a
aib˘a urm ˘atoarele privilegii (drepturi): CONNECT s ,i RESOURCE;
b) S ˘a se realizeze o conexiune (schem ˘a) denumit ˘atestare a utilizatorului creat;
c) S ˘a se testeze ˆın SQL Developer, folosind conexiunea testare , toate exemplele
prezentate ˆın subcapitolele 2.2 s ,i 2.3.
2.2 S˘a se implementeze ˆın Oracle Database 11g Express Edition exemplul prezentat ˆın
subcapitolul 2.4. S ˘a se exporte baza de date ˆıntr-un fis ,ier denumit IntVirtual.sql .
2.3 S˘a se implementeze baza de date relat ,ional ˘a proiectat ˘a la exercit ,iul 1.1 ˆın Oracle
Database 11g Express Edition cu SQL Developer.
2.4 S˘a se introduc ˘a date ˆın tabelele bazei de date de la exercit ,iul 2.3 folosind comanda
SQL specific ˘a acestei operat ,iuni. Datele se introduc mai ˆıntˆaiˆın tabelele care nu au con-
strˆangeri de tipul FOREIGN KEY . S ˘a se exporte baza de date ˆıntr-un fis ,ier cu extensia
sql.

36 IMPLEMENTAREA BAZELOR DE DATE RELAT ¸ IONALE
REFERINT ,E BIBLIOGRAFICE
1. ***, Oracle Database Express Edition Documentation 11g Release 2 (11.2),
http://docs.oracle.com/cd/E17781 01/index.htm, 2015.
2. ***, SQL Developer Documentation Release 4.1, https://docs.oracle.com/cd/E55747 01/index.htm,
2015.
3. ***, Oracle Database Online Doumentation 11g Release 2 (11.2),
http://docs.oracle.com/cd/E11882 01/nav/portal 11.htm, 2015.
4. ***, SQL Developer Release 4.1 Downloads, http://www.oracle.com/technetwork/developer-
tools/sql-developer/downloads/index.html, 2015.

CAPITOLUL 3
EXPLOATAREA BAZELOR DE DATE
RELAT ¸ IONALE
Exploatarea bazelor de date relat ,ionale presupune interogarea acestora cu ajutorul limbaju-
lui SQL prin comenzi de tipul DQL sau efectuarea de prelucr ˘ari complexe s ,i programarea
unor secvent ,e de cod care trebuie executate automat cu ajutorul limbajului Procedural Lan-
guage extensions to SQL (PL/SQL).
ˆIn cadrul acestui capitol exploatarea bazelor de date se face ˆın SGBD-ul Oracle Database
11g Express Edition 11.2 [1] cu ajutorul Oracle SQL Developer 4.1.1 [2]. Comanda SQL
specific ˘a s,i sintaxa limbajului PL/SQL pot fi consultate ˆın documentat ,ia oferit ˘a de Oracle.
3.1 Exploatarea bazelor de date relat ,ionale prin comenzi SQL
Comanda SQL care permite exploatarea/interogarea bazelor de date este SELECT. Aceast ˘a
comand ˘a returneaz ˘a o mult ,ime de select ,ie dintr-unul tabel al unei baze de date. Structura
acestei comenzi este urm ˘atoarea:
SELECT [ALLjDISTINCT ] e x p r e s i e s e l e c t i e [ AS a l i a s ] [ , e x p r e s i e s e l e c t i e
[AS a l i a s ] ] . . .
[F R O M n u m e t a b e l
[W H E R E c o n d i t i e ]
[GROUP BYfnume coloanaje x p r e s i eg[ASCjDESC ] , . . . ]
[HAVING c o n d i t i e ]
[ORDER BYfnume coloanaje x p r e s i eg[ASCjDESC ] , . . . ] ] ;
Clauza DISTINCT permite realizarea unei mult ,imi de select ,ie care cont ,ineˆınregistr ˘ari
distincte, care difer ˘a prin cel put ,in o valoare a unei celule din tabelul bazei de date.
Baze de date relat ,ionale s ,i nerelat ,ionale. Copyright c
U.T.PRESS 37

38 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
Condit ,iile care pot fi impuse pe clauzele WHERE s ,i HA VING pot cont ,ine operatorii de
comparat ,ie, aritmetici, pentru s ,iruri de caractere, logici s ,i de compunere (pentru mult ,imi),
prezentat ,iˆın tabelul 3.1.
Tabel 3.1 Operatori ˆın limbajul SQL
Nume operator Descriere operator
Operatori de comparat ,ie
= Egal cu
!=,<> Diferit de
> Mai mare dec ˆat
>= Mai mare sau egal cu
< Mai mic dec ˆat
<= Mai mic sau egal cu
IN Egal cu oricare element al unei liste
NOT IN Diferit de oricare element al unei liste
ALL Compar ˘a o valoare cu toate valorile dintr-o list ˘a
ANY ,SOME Compar ˘a o valoare cu fiecare dintre valorile dintr-o list ˘a
IS [NOT] NULL Testeaz ˘a valorile de tip NULL
EXISTS Returneaz ˘a TRUE dac ˘a o subinterogare returneaz ˘a cel put ,in o linie
xLIKE y Returneaza TRUE atunci c ˆand expresia xseˆıncadreaz ˘aˆın tiparul expre-
sieiy(Expresia ypoate cont ,ine caracterul de ˆınlocuire ”%”.)
BETWEEN xandyMai mare sau egal cu xs,i mai mic sau egal cu y
Operatori aritmetici
+,- Operatori unari care indic ˘a o expresie pozitiv ˘a sau negativ ˘a.
+ Operator binar pentru adunare
– Operator binar pentru sc ˘adere
* Operator binar pentru ˆınmult ,ire
/ Operator binar pentru ˆımp˘art,ire
Operatori pentru s ,iruri de caractere
k Operator pentru concatenarea s ,irurilor de caractere
Operatori logici
AND S,I logic
NOT NEGAT ,IE
OR SAU logic
XOR SAU exclusiv
Operatori de compunere (pentru mult ,imi)
UNION Returneaz ˘a toate liniile distincte din ambele interog ˘ari
UNION ALL Returneaz ˘a toate liniile din ambele interog ˘ari (include s ,i duplicatele)
INTERSECT Returneaz ˘a toate liniile selectate de ambele interog ˘ari
MINUS Returneaz ˘a toate liniile distincte care se g ˘asesc ˆın prima interogare dar
nu s ,iˆın a doua

EXPLOATAREA BAZELOR DE DATE RELAT ,IONALE PRIN COMENZI SQL 39
ˆIn cazul ˆın care condit ,ia cont ,ine mai mult ,i operatori, aces ,tia se efectueaz ˘a conform cu
prioritatea fiec ˘aruia. Cea mai mare prioritate o au operatorii de comparat ,ie, urmeaz ˘a cei
aritmetici, cei pentru s ,iruri de caractere, cei logici s ,iˆın cele din urm ˘a cei de compunere.
Operatorii cu prioritate egal ˘a sunt evaluat ,i de la st ˆanga spre dreapta. Parantezele rotunde
pot fi folosite pentru a schimba prioritatea.
Clauza GROUP BY permite gruparea ˆınregistr ˘arilor dup ˘a o coloan ˘a sau mai multe dintr-
un tabel al bazei de date care este specificat ˘a/sunt specificate ˆın mult ,imea de select ,ie ce se
dores ,te a fi obt ,inut˘a.ˆIn cazul ˆın care se realizeaz ˘a o grupare, fiecare linie din mult ,imea de
select ,ie se refer ˘a la un grup de ˆınregistr ˘ari s ,i nu la ˆınregistr ˘ari simple. C ˆand este folosit ˘a
clauza GROUP BY mult ,imea de select ,ie poate cont ,ine s ,i rezultatul aplic ˘arii unor funct ,ii
agregate. Funct ,iile agregate pot fi utilizate s ,iˆın cazul ˆın care nu exist ˘a clauza GROUP
BY .ˆIn scopul atribuirii unor nume relevante coloanelor mult ,imii de select ,ie care cont ,in
rezultatele aplic ˘arii acestor funct ,ii se recomand ˘a folosirea clauzei AS. Funct ,iile agregate
sunt prezentate ˆın tabelul 3.2.
Tabel 3.2 Funct ,ii agregate ˆın limbajul SQL
Nume funct ,ie Descriere funct ,ie
COUNT(coloana) Returneaz ˘a num ˘arul valorilor diferite de NULL dintr-o coloan ˘a specifi-
cat˘a ca argument al funct ,iei
COUNT(DISTINCT
coloana)Returneaz ˘a num ˘arul valorilor distincte diferite de NULL dintr-o
coloan ˘a specificat ˘a ca argument al funct ,iei
COUNT(*) Returneaz ˘a num ˘arul de linii dintr-un tabel
A VG(coloana) Returneaz ˘a media aritmetic ˘a a valorilor din coloana specificat ˘a ca argu-
ment al funct ,iei
MIN(coloana) Returneaz ˘a minimul valorilor din coloana specificat ˘a ca argument al
funct ,iei
MAX(coloana) Returneaz ˘a maximul valorilor din coloana specificat ˘a ca argument al
funct ,iei
SUM(coloana) Returneaz ˘a suma valorilor din coloana specificat ˘a ca argument al
funct ,iei
Clauza HA VING serves ¸te la precizarea unui filtru care se aplic ˘a grup ˘arii rezultate prin
clauza GROUP BY . Aceast ˘a clauz ˘a specific ˘a o condit ,ieˆın care pot fi implicate s ,i funct ,iile
agregate ment ,ionate anterior. Dac ˘a lipses ¸te clauza GROUP BY , folosirea clauzei HA VING
nu se justific ˘a, ea av ˆand acelas ,i efect ca s ,i clauza WHERE.
Clauza ORDER BY permite specificarea ordinii ˆın care apar liniile mult ,imii de select ,ie
(ex. alfabetic).
EXEMPLU 3.1 Interog ˘ari ale tabelului Tabel exploatare1
# C r e a r e a t a b e l u l u i T a b e l e x p l o a t a r e 1
CREATE TABLE T a b e l e x p l o a t a r e 1
(

40 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
IDNUMERIC ( 4 ) NOT NULL ,
Nume VARCHAR2 ( 3 0 ) NOT NULL ,
Prenume VARCHAR2 ( 3 0 ) NOT NULL ,
F u n c t i e VARCHAR2 ( 3 0 ) NOT NULL ,
D a t a a n g a j a r i i DATE ,
S a l a r NUMERIC ( 6 , 0 ) NOT NULL ,
CONSTRAINT p kT a b e l e x p l o a t a r e 1 PRIMARY KEY ( ID )
) ;
# I n t r o d u c e r e a de i n f o r m a t i i inc o l o a n e l e l u i T a b e l e x p l o a t a r e 1
INSERT INTO T a b e l e x p l o a t a r e 1 VALUES ( 1 , ’ Popescu ’ , ’ Alexandru ’ , ’ I n g i n e r ’
, ’28AUG2015 ’ , 3200) ;
INSERT INTO T a b e l e x p l o a t a r e 1 VALUES ( 2 , ’ I o n e s c u ’ , ’ Mihai ’ , ’ Economist ’ ,
’10AUG2013 ’ , 4000) ;
INSERT INTO T a b e l e x p l o a t a r e 1 VALUES ( 3 , ’ Popa ’ , ’ Maria ’ , ’ I n g i n e r ’ , ’10
JAN2010 ’ , 5150) ;
INSERT INTO T a b e l e x p l o a t a r e 1 VALUES ( 4 , ’ Cosma ’ , ’ A l i n a ’ , ’ I n g i n e r ’ , ’28
SEP2009 ’ , 5500) ;
INSERT INTO T a b e l e x p l o a t a r e 1 VALUES ( 5 , ’ Marginean ’ , ’ C r i n a ’ , ’ Economist ’
, ’05MAY2011 ’ , 4100) ;
# E x p l o a t a r e a t a b e l u l u i T a b e l e x p l o a t a r e 1
SELECTF R O M T a b e l e x p l o a t a r e 1 ;
SELECT Nume , Prenume , F u n c t i e F R O M T a b e l e x p l o a t a r e 1 ;
SELECT
F R O M T a b e l e x p l o a t a r e 1
W H E R E Nume LIKE ’ Po%’ ;
SELECT
F R O M T a b e l e x p l o a t a r e 1
W H E R E Nume LIKE ’ Po%’ AND S a l a r <4000;
SELECT Nume , Prenume , F u n c t i e
F R O M T a b e l e x p l o a t a r e 1
W H E R E D a t a a n g a j a r i i BETWEEN ’01JAN2011 ’ AND ’28NOV2015 ’ ;
SELECTF R O M
(SELECT Nume , Prenume F R O M T a b e l e x p l o a t a r e 1 W H E R E F u n c t i e = ’ I n g i n e r ’
UNION
SELECT Nume , Prenume F R O M T a b e l e x p l o a t a r e 1 W H E R E F u n c t i e = ’ Economist ’ ) ;
SELECT S a l a r F R O M T a b e l e x p l o a t a r e 1 W H E R E F u n c t i e = ’ I n g i n e r ’
MINUS
SELECT S a l a r F R O M T a b e l e x p l o a t a r e 1 W H E R E F u n c t i e = ’ Economist ’ ;
SELECT COUNT ()AS N u m a r a n g a j a t i , M A X ( S a l a r ) AS Salar maxim
F R O M T a b e l e x p l o a t a r e 1 ;
SELECT F u n c t i e , AVG ( S a l a r ) AS M e d i e s a l a r , COUNT ()AS N u m a r a n g a j a t i
F R O M T a b e l e x p l o a t a r e 1
GROUP BY F u n c t i e
ORDER BY F u n c t i e ;
SELECT F u n c t i e , AVG ( S a l a r ) AS M e d i e s a l a r , COUNT ()AS N u m a r a n g a j a t i
F R O M T a b e l e x p l o a t a r e 1
GROUP BY F u n c t i e
HAVING AVG ( S a l a r ) >4100;
SELECT COUNT ( ID ) , F u n c t i e , S a l a r

EXPLOATAREA BAZELOR DE DATE RELAT ,IONALE PRIN SECVENT ,E DE COD PL/SQL 41
F R O M T a b e l e x p l o a t a r e 1
GROUP BY F u n c t i e , S a l a r
HAVING (COUNT ( ID )>1OR S a l a r <5000)
ORDER BY F u n c t i e , S a l a r desc ;
Comanda SELECT poate fi utilizat ˘a pentru obt ,inerea unei mult ,imi de select ,ie din mai
multe tabele relat ,ionate ale bazei de date. Comanda trebuie completat ˘a cu clauza supli-
mentar ˘a JOIN. Aceasta permite definirea leg ˘aturilor existente ˆıntre tabele. Structura este
prezentat ˘aˆın continuare.
n u m e t a b e l 1 [ INNERjLEFTjRIGHTjFULL ]JOIN n u m e t a b e l 2
ON n u m e t a b e l 1 . nume coloana = n u m e t a b e l 2 . nume coloana
INNER JOIN returneaz ˘aˆınregistr ˘arile obt ,inute ˆın urma intersect ,iei dintre tabele impli-
cate ˆın relat ,ie. LEFT OUTER JOIN returneaz ˘a toate ˆınregistr ˘arile din tabelul din st ˆanga
s,i doar acele ˆınregistr ˘ari care ˆındeplinesc condit ,ia ON din cel ˘alalt tabel. RIGHT OUTER
JOIN returneaz ˘a toate ˆınregistr ˘arile din tabelul din dreapta s ,i doar acele ˆınregistr ˘ari care
ˆındeplinesc condit ,ia ON din cel ˘alalt tabel. FULL OUTER JOIN returneaz ˘a toate ˆınregistr ˘a-
rile din tabelul din st ˆanga s ,i toate ˆınregistr ˘arile din tabelul din dreapta cu valori NULL ˆın
locurile unde condit ,ia ON nu este ˆındeplinit ˘a.
EXEMPLU 3.2 Interog ˘ari ale tabelelor Tabel exploatare1 s,iTabel exploatare2
# C r e a r e a t a b e l u l u i T a b e l e x p l o a t a r e 2
CREATE TABLE T a b e l e x p l o a t a r e 2
(
IDNUMERIC ( 4 ) NOT NULL ,
Nume VARCHAR2 ( 3 0 ) NOT NULL ,
Prenume VARCHAR2 ( 3 0 ) NOT NULL ,
I D P a r t e n e r NUMERIC ( 4 ) NOT NULL ,
CONSTRAINT p kT a b e l e x p l o a t a r e 2 PRIMARY KEY ( ID ) ,
CONSTRAINT f kT a b e l e x p l o a t a r e 2 FOREIGN KEY ( I D P a r t e n e r ) REFERENCES
T a b e l e x p l o a t a r e 1 ( ID )
) ;
# I n t r o d u c e r e a de i n f o r m a t i i inc o l o a n e l e l u i T a b e l e x p l o a t a r e 2
INSERT INTO T a b e l e x p l o a t a r e 2 VALUES ( 1 , ’ Popescu ’ , ’ C r i s t i n a ’ , 1) ;
INSERT INTO T a b e l e x p l o a t a r e 2 VALUES ( 2 , ’ Cosma ’ , ’ O c t a v i a n ’ , 4) ;
# E x p l o a t a r e a t a b e l e l o r T a b e l e x p l o a t a r e 1 s i T a b e l e x p l o a t a r e 2
SELECT T a b e l e x p l o a t a r e 1 . ID , T a b e l e x p l o a t a r e 1 . Nume , T a b e l e x p l o a t a r e 1 .
Prenume , T a b e l e x p l o a t a r e 2 . Prenume AS P r e n u m e s o t s o t i e
F R O M T a b e l e x p l o a t a r e 1
INNER JOIN T a b e l e x p l o a t a r e 2
ON T a b e l e x p l o a t a r e 1 . ID= T a b e l e x p l o a t a r e 2 . I D P a r t e n e r ;
SELECT T a b e l e x p l o a t a r e 1 . ID , T a b e l e x p l o a t a r e 1 . Nume , T a b e l e x p l o a t a r e 1 .
Prenume , T a b e l e x p l o a t a r e 2 . Prenume AS P r e n u m e s o t s o t i e
F R O M T a b e l e x p l o a t a r e 1
LEFT JOIN T a b e l e x p l o a t a r e 2
ON T a b e l e x p l o a t a r e 1 . ID= T a b e l e x p l o a t a r e 2 . I D P a r t e n e r ;
3.2 Exploatarea bazelor de date relat ,ionale prin secvent ,e de cod PL/SQL
Limbajul PL/SQL [3] este o extensie a limbajului SQL. Dac ˘a SQL este un limbaj declarativ,
PL/SQL a fost scris pentru a oferi posibilitatea scrierii de cod procedural. Secvent ,ele de
cod sunt memorate s ,i compilate ˆın baza de date s ,i pot fi apelate ori de c ˆate ori este nevoie.

42 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
Tipurile de date din PL/SQL sunt:
Tipuri de date folosite de SQL: CHAR, NCHAR, V ARCHAR2, NV ARCHAR2, NUM-
BER, BINARY FLOAT, BINARY DOUBLE, DATE, TIMESTAMP, LOB (tabelul 2.1);
Tipuri de date specifice PL/SQL: BOOLEAN, NUMBER, PLS INTEGER;
Tipuri de date structurate: TABLE, V ARRAY , RECORD.
Tipurile de date sunt folosite la declararea variabilelor s ,i a constantelor. De cele mai multe
ori variabilele memoreaz ˘a valori obt ,inute din comanda SELECT s ,i trebuie s ˘a corespun-
d˘a cu tipurile de date ale coloanelor din tabelele implicate ˆın comand ˘a. Pentru a evita
erorile care pot ap ˘area, PL/SQL ofer ˘a o modalitate simpl ˘a de preluare a tipului de date
corespunz ˘ator prin folosirea sintaxei %TYPE precedat ˘a de numele coloanei din tabel.
Variabilele s ,i constantele se declar ˘a sub forma unor s ,iruri de caractere cu lungime
maxim ˘a de 30. Caracterele ”&”, ”-” , ”/” s ,i ” ” nu sunt permise.
Operatorii limbajului PL/SQL sunt:
Aritmetici: +,-,*,/;
Logici: =, >,<,>=,<=,! =;
De concatenare a s ,irurilor de caractere: k;
De atribuire: :=.
PL/SQL pune la dispozit ,ia programatorilor un num ˘ar mare de funct ,ii. Acestea se ˆımpart
ˆın urm ˘atoarele categorii: funct ,ii pentru prelucrarea s ,irurilor, pentru prelucrarea datei calen-
daristice, pentru date numerice s ,i pentru conversii dintr-un tip de dat ˘aˆın altul. Tabelul 3.3
prezint ˘a cele mai importante dintre acestea.
Tabel 3.3 Funct ,iiˆın limbajul PL/SQL
Nume funct ,ie Descriere funct ,ie
Funct ,ii pentru prelucrarea s ,irurilor
upper(s),lower(s) Convertes ,te s ,irulsˆın majuscule/minuscule
ltrim(s),rtrim(s) Elimin ˘a spat ,iile de la st ˆanga/dreapta ale s ,irului s
substr(s,start,lungime) Returneaz ˘a un subs ,ir al s ,irului sdefinit prin pozit ,ia start s ,i lungime.
length(s) Returneaz ˘a lungimea s ,irului s
Funct ,ii pentru prelucrarea datei calendaristice
sysdate Returneaz ˘a data sistemului
todate(data,format) Returneaz ˘a data calendaristic ˘adata conform cu formatul specificat
tochar(data,format) Convertes ,te data calendaristic ˘adata ˆıntr-un s ,ir de caractere ˆın confor-
mitate cu formatul specificat
Funct ,ii pentru date numerice
round(x) Rotunjes ,te valoare lui x
mod(x,y) Returneaz ˘a restul ˆımp˘art,irii lui xlay
abs(x) Returneaz ˘a valoarea absolut ˘a a lui x
power(x,y) Returneaz ˘a valoarea lui xla puterea y
dbms random.random() Genereaz ˘a un num ˘arˆıntreg aleator
Funct ,ii pentru conversii dintr-un tip de dat ˘aˆın altul
tochar(x) Convertes ,te num ˘arulnˆın s ,ir de caractere
tonumber(s) Convertes ,te s ,irulsˆın num ˘ar

EXPLOATAREA BAZELOR DE DATE RELAT ,IONALE PRIN SECVENT ,E DE COD PL/SQL 43
PL/SQL pune la dispozit ,ia programatorilor s ,i instruct ,iuni condit ,ionale sau de tip bucl ˘a,
ca orice limbaj procedural.
Instruct ,iunile condit ,ionale sunt: IF-THEN, IF-THEN-ELSE, IF-THEN-ELSIF, IF-THEN-
ELSIF-ELSE s ,i CASE, iar sintaxele lor sunt prezentate ˆın continuare:
# IFTHEN
IF c o n d i t i e THEN
cod c a r e se e x e c u t a cand c o n d i t i a e s t e i n d e p l i n i t a
END IF ;
# IFTHENELSE
IF c o n d i t i e THEN
cod c a r e se e x e c u t a cand c o n d i t i a e s t e i n d e p l i n i t a
ELSE
cod c a r e se e x e c u t a cand c o n d i t i a nu e s t e i n d e p l i n i t a
END IF ;
# IFTHENELSIF
IF c o n d i t i e 1 THEN
cod c a r e se e x e c u t a cand c o n d i t i a 1 e s t e i n d e p l i n i t a
ELSIF c o n d i t i e 2 THEN
cod c a r e se e x e c u t a cand c o n d i t i a 2 e s t e i n d e p l i n i t a
END IF ;
# IFTHENELSIFELSE
IF c o n d i t i e 1 THEN
cod c a r e se e x e c u t a cand c o n d i t i a 1 e s t e i n d e p l i n i t a
ELSIF c o n d i t i e 2 THEN
cod c a r e se e x e c u t a cand c o n d i t i a 2 e s t e i n d e p l i n i t a
ELSE
cod c a r e se e x e c u t a cand c o n d i t i a 1 s i c o n d i t i a 2 nu s u n t i n d e p l i n i t e
END IF ;
#CASE
CASE [ e x p r e s i e ]
W H E N c o n d i t i e 1 THEN r e z u l t a t 1
W H E N c o n d i t i e 2 THEN r e z u l t a t 2
. . .
W H E N c o n d i t i e n THEN r e z u l t a t n
ELSE r e z u l t a t
END ;
Instruct ,iunile de tip bucl ˘a sunt: LOOP, FOR-LOOP, WHILE-LOOP, REPEAT-UNTIL-
LOOP, CURSOR-FOR-LOOP s ,i EXIT, iar sintaxele lor sunt prezentate ˆın continuare:
# LOOP
LOOP
cod c a r e se e x e c u t a
END LOOP;
# WHILELOOP
WHILE c o n d i t i E
LOOP
cod c a r e se e x e c u t a
END LOOP;
# FORLOOP
FOR c o n t o r IN [REVERSE] l i m i t a i n f e r i o a r a . . l i m i t a s u p e r i o a r a
LOOP
cod c a r e se e x e c u t a
END LOOP;

44 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
# REPEATUNTILLOOP
LOOP
cod c a r e se e x e c u t a
EXIT [ W H E N c o n d i t i e ] ;
END LOOP;
# CURSORFORLOOP
FOR c o n t o r inn u m e c u r s o r
LOOP
cod c a r e se e x e c u t a
END LOOP;
# EXIT
EXIT [ W H E N c o n d i t i e ] ;
Comentariile ˆın limbajul PL/SQL se introduc prin dou ˘a caractere ”-” pentru o linie, sau
prin /* …. */ pentru mai multe linii.
PL/SQL permite realizarea de blocuri de cod anonime, cursoare, proceduri stocate s ,i
funct ,ii.
3.2.1 Blocuri anonime
Un bloc anonim PL/SQL este definit prin cuvintele cheie DECLARE, BEGIN, EXCEP-
TION s ,i END care delimiteaz ˘a urm ˘atoarele trei sect ,iuni ale acestuia:
Sect ,iunea declarativ ˘a – sect ,iune opt ,ional ˘a pentru declararea variabilelor, a constan-
telor s ,i a altor elemente care sunt utilizate ˆın bloc;
Sect ,iunea executabil ˘a – cuprinde declarat ,ii (cod surs ˘a) care ruleaz ˘a cˆand blocul este
executat;
Sect ,iunea de gestionare a except ,iilor – sect ,iune opt ,ional ˘a pentru captarea except ,iilor
care pot ap ˘area ˆın timpul rul ˘arii sect ,iunii executabile.
Un bloc anonim poate cuprinde blocuri anonime interioare. Un bloc anonim nu este au-
tomat salvat ˆın baza de date pentru o eventual ˘a reutilizare. Blocul anonim este utilizat ˆın
corpul procedurilor stocate sau ale funct ,iilor unei baze de date.
[DECLARE
d e c l a r a t i i v a r i a b i l e , c o n s t a n t e , a l t e e l e m e n t e ]
BEGIN
cod s u r s a
[EXCEPTION
cod t r a t a r e e x c e p t i i ]
END ;
EXEMPLU 3.3 Bloc anonim pentru afis ,area unei linii din Tabel exploatare1
DECLARE
nume T a b e l e x p l o a t a r e 1 . Nume % TYPE ;
prenume T a b e l e x p l o a t a r e 1 . Prenume% TYPE ;
f u n c t i e T a b e l e x p l o a t a r e 1 . F u n c t i e% TYPE ;
s a l a r T a b e l e x p l o a t a r e 1 . S a l a r% TYPE ;
BEGIN
SELECT Nume , Prenume , F u n c t i e , S a l a r INTO nume , prenume , f u n c t i e ,
s a l a r F R O M T a b e l e x p l o a t a r e 1 W H E R E ID =1;
DBMS OUTPUT . PUT LINE ( numejj’’jjprenumejj’a r e f u n c t i a de ’jj
f u n c t i ejj’s is a l a r u l de ’jjs a l a rjj’RON. ’ ) ;
END ;

EXPLOATAREA BAZELOR DE DATE RELAT ,IONALE PRIN SECVENT ,E DE COD PL/SQL 45
EXEMPLU 3.4 Bloc anonim pentru actualizarea unei linii din Tabel exploatare1
DECLARE
vs a l a r T a b e l e x p l o a t a r e 1 . S a l a r% TYPE ;
BEGIN
SELECT s a l a r INTO vs a l a r F R O M T a b e l e x p l o a t a r e 1 W H E R E ID = 5 ;
IF v s a l a r <5000
THEN
UPDATE T a b e l e x p l o a t a r e 1 SET s a l a r = s a l a r 1 . 1 0 W H E R E ID = 5 ;
ELSE
DBMS OUTPUT . PUT LINE ( ’ S a l a r d e j a m a r i t ! ’ ) ;
END IF ;
EXCEPTION
W H E N NODATA FOUND THEN NULL ;
END ;
3.2.2 Cursoare
Cursoarele permit preluarea informat ,iilor dintr-o mult ,ime de select ,ie, linie cu linie, ˆın ve-
derea prelucr ˘arii lor. ˆIn PL/SQL se pot defini cursoare de dou ˘a tipuri: implicite s ,i explicite.
Cursoarele implicite sunt automat create de Oracle ori de c ˆate ori o comand ˘a SQL este
executat ˘a. Cursoarele explicite au nume s ,i sunt declarate ˆın sect ,iunea de declarat ,ii a unui
bloc anonim, a unei proceduri stocate sau a unei funct ,ii. Lucrul cu cursoarele explicite
implic ˘a urm ˘atorii pas ,i:
Declararea cursorului pentru init ,ializarea lui ˆın memorie;
Deschiderea cursorului pentru alocarea memoriei;
Aducerea cursorului pentru recuperarea datelor;
ˆInchiderea cursorului pentru eliberarea memoriei.
CURSOR n u m e c u r s o r IS c o m a n d a s e l e c t ;
OPEN n u m e c u r s o r ;
FETCH n u m e c u r s o r INTO var1 , var2 , var3 , . . . ;
CLOSE n u m e c u r s o r ;
Cursoarele implicite s ,i explicite sunt caracterizate de atributele prezentate ˆın tabelul 3.4.
Tabel 3.4 Atribute ale cursoarelor ˆın limbajul PL/SQL
Nume atribut Descriere atribut
%FOUND Returneaz ˘a TRUE dac ˘a o comand ˘a de tip INSERT, UPDATE sau DELETE are
efect asupra unei linii sau a mai multor linii dintr-un tabel, sau o comand ˘a de tip
SELECT INTO returneaz ˘a una sau mai multe linii dintr-o mult ,ime de select ,ie.
ˆIn caz contrar, returneaz ˘a FALSE.
%NOTFOUND Returneaz ˘a TRUE dac ˘a o comand ˘a de tip INSERT, UPDATE sau DELETE nu
are efect asupra unei linii sau a mai multor linii dintr-un tabel, sau o comand ˘a
de tip SELECT INTO nu returneaz ˘a una sau mai multe linii dintr-o mult ,ime de
select ,ie.ˆIn caz contrar, returneaz ˘a FALSE.
%ISOPEN Returneaz ˘aˆıntotdeauna FALSE pentru cursoarele implicite. Returneaz ˘a TRUE
dac˘a un cursor explicit este deschis s ,i FALSE ˆın caz contrar.
%ROWCOUNT Returneaz ˘a num ˘arul de linii afectate de comenzile de tip INSERT, UPDATE s ,i
DELETE s ,i num ˘arul de linii returnate de comenzile de tip SELECT INTO.

46 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
Pentru cursoarele implicite se utilizeaz ˘a sql%nume atribut, iar pentru cele explicite nu-
mecursor%nume atribut.
Manipularea datelor aduse de cursoare se face prin intermediul instruct ,iunilor de tip
bucl˘a.
EXEMPLU 3.5 Cursor explicit pentru afis ,area informat ,iilor din Tabel exploatare1
DECLARE
nume T a b e l e x p l o a t a r e 1 . Nume % TYPE ;
prenume T a b e l e x p l o a t a r e 1 . Prenume% TYPE ;
CURSOR A n g a j a t i i s
SELECT Nume , Prenume F R O M T a b e l e x p l o a t a r e 1 ;
BEGIN
IFNOT A n g a j a t i%ISOPEN THEN
OPEN A n g a j a t i ;
END IF ;
LOOP
FETCH A n g a j a t i INTO nume , prenume ;
EXIT W H E N A n g a j a t i% NOTFOUND;
DBMS OUTPUT . PUT LINE ( numejj’’jjprenume ) ;
END LOOP;
CLOSE A n g a j a t i ;
END ;
3.2.3 Proceduri stocate
Procedurile stocate sunt secvent ,e de cod stocate ˆın memoria unei baze de date care pot fi
apelate ori de c ˆate ori este nevoie ˆın alte secvent ,e de cod, cum sunt blocurile anonime.
Procedurile stocate nu returneaz ˘a valori, ele sunt folosite ˆın special pentru execut ,ia unei
act ,iuni. Structura unei proceduri stocate este urm ˘atoarea:
CREATE [ORREPLACE] PROCEDURE nume procedura
[ ( nume parametru [ INjOUTjINOUT] t i p d a t a [ , nume parametru [ INjOUT
jINOUT] t i p d a t a ] . . . ) ]
ISjAS
[DECLARE
d e c l a r a t i i v a r i a b i l e , c o n s t a n t e , a l t e e l e m e n t e ]
BEGIN
cod s u r s a
[EXCEPTION
cod t r a t a r e e x c e p t i i ]
END [ nume procedura ] ;
Parametrii opt ,ionali ai procedurii sunt de trei tipuri: IN care reprezint ˘a valoarea dat ˘aˆın
momentul apel ˘arii procedurii, OUT care reprezint ˘a valoarea returnat ˘a dup ˘a apelare, respec-
tiv IN OUT care reprezint ˘a fie valoarea dat ˘aˆın momentul apel ˘arii procedurii, fie valoarea
returnat ˘a dup ˘a apelare.
O procedur ˘a stocat ˘a trebuie compilat ˘a, moment ˆın care se salveaz ˘aˆın baza de date, dup ˘a
care poate fi apelat ˘a ori de c ˆate ori este nevoie, prin numele ei s ,i lista valorilor parametrilor
dac˘a aces ,tia exist ˘a. Valorile parametrilor trebuie s ˘a corespund ˘a tipului de date declarat la
crearea procedurii stocate.
O procedur ˘a stocat ˘a poate fi s ,tears ˘a din baza de date prin comanda DROP, a c ˘arei sintax ˘a
este urm ˘atoarea:
DROP PROCEDURE nume procedura ;

EXPLOATAREA BAZELOR DE DATE RELAT ,IONALE PRIN SECVENT ,E DE COD PL/SQL 47
EXEMPLU 3.6 Procedur ˘a stocat ˘a pentru Tabel exploatare1
# C r e a r e a p r o c e d u r i i s t o c a t e p e n t r u i n t r o d u c e r e a de n o i i n f o r m a t i i
CREATE OR REPLACE PROCEDURE I n t r o T a b e l e x p l o a t a r e 1
( i d IN T a b e l e x p l o a t a r e 1 . ID% TYPE ,
nume IN T a b e l e x p l o a t a r e 1 . Nume % TYPE ,
prenume IN T a b e l e x p l o a t a r e 1 . Prenume% TYPE ,
f u n c t i e IN T a b e l e x p l o a t a r e 1 . F u n c t i e% TYPE ,
d a t a IN T a b e l e x p l o a t a r e 1 . D a t a a n g a j a r i i% TYPE ,
s a l a r IN T a b e l e x p l o a t a r e 1 . S a l a r% TYPE )
IS
BEGIN
INSERT INTO T a b e l e x p l o a t a r e 1 VALUES ( id , nume , prenume , f u n c t i e , data
, s a l a r ) ;
COMMIT ;
END ;
# A p e l a r e a p r o c e d u r i i s t o c a t e i n t r un b l o c anonim
BEGIN
I n t r o T a b e l e x p l o a t a r e 1 ( 6 , ’ Mihaiu ’ , ’ Adriana ’ , ’ Manager ’ , ’05 MAR2008 ’ ,
6000) ;
END ;
3.2.4 Funct ,ii
Funct ,iile sunt secvent ,e de cod stocate ˆın memoria unei baze de date care pot fi apelate
ori de c ˆate ori este nevoie ˆın alte secvent ,e de cod, cum sunt blocurile anonime. Funct ,iile
returneaz ˘a valori. Structura unei funct ,ii este urm ˘atoarea:
CREATE [ORREPLACE] FUNCTION n u m e f u n c t i e
[ ( nume parametru [ INjOUTjINOUT] t i p d a t a [ , nume parametru [ INjOUT
jINOUT] t i p d a t a ] . . . ) ]
RETURN t i p d a t a
ISjAS
[DECLARE
d e c l a r a t i i v a r i a b i l e , c o n s t a n t e , a l t e e l e m e n t e ]
BEGIN
cod s u r s a ;
RETURN n u m e v a r i a b i l a ;
[EXCEPTION
cod t r a t a r e e x c e p t i i ]
END [ n u m e f u n c t i e ] ;
Parametrii opt ,ionali ai funct ,iei sunt de trei tipuri: IN, OUT s ,i IN OUT s ,i se declar ˘aˆın
acelas ,i mod ca s ,i cei ai procedurilor stocate. O funct ,ie returneaz ˘aˆıntotdeauna o valoare
s,i de aceea trebuie s ˘a existe clauza RETURN ˆın sect ,iunea cuprins ˘aˆıntre BEGIN s ,i END
a funct ,iei. Valoarea returnat ˘a trebuie s ˘a aib ˘a acelas ,i tip de date cu cel ment ,ionat ˆın cadrul
clauzei RETURN dinaintea clauzei IS sau AS.
O funct ,ie trebuie compilat ˘a, moment ˆın care se salveaz ˘aˆın baza de date, dup ˘a care
poate fi apelat ˘a ori de c ˆate ori este nevoie, prin numele ei s ,i lista valorilor parametrilor
dac˘a aces ,tia exist ˘a. Valorile parametrilor trebuie s ˘a corespund ˘a tipului de date declarat la
crearea funct ,iei.
O funct ,ie poate fi s ,tears ˘a din baza de date prin comanda DROP, a c ˘arei sintax ˘a este
urm˘atoarea:
DROP FUNCTION n u m e f u n c t i e ;

48 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
EXEMPLU 3.7 Funct ,ie pentru Tabel exploatare1
# C r e a r e a f u n c t i e i c a r e r e t u r n e a z a numarul de i n r e g i s t r a r i d i n t a b e l
CREATE OR REPLACE FUNCTION T o t a l A n g a j a t i
RETURN NUMBER
IS
t o t a l NUMBER := 0 ;
BEGIN
SELECT COUNT ()INTO t o t a l F R O M T a b e l e x p l o a t a r e 1 ;
RETURN t o t a l ;
END ;
# A p e l a r e a f u n c t i e i i n t r un b l o c anonim
DECLARE
tNUMBER ;
BEGIN
t := T o t a l A n g a j a t i ( ) ;
DBMS OUTPUT . PUT LINE ( ’ Numarul t o t a l de a n g a j a t i e s t e : ’jjtjj’ . ’ ) ;
END ;
3.3 Exemplu de exploatare a unei baze de date relat ,ionale
Baza de date relat ,ional ˘aIntVirtual , a c˘arei exploatare este exemplificat ˘aˆın acest subcapitol,
a fost implementat ˘a s,i populat ˘a cu informat ,iiˆın subcapitolul 2.4.
3.3.1 Exploatarea bazei de date prin comenzi SQL – exemplificare
Exploatarea bazei de date prin comenzi SQL se poate face din linia de comand ˘a a Ora-
cle Database 11g Express Edition sau cu SQL Developer. Exemplificarea este f ˘acut˘a cu
SQL Developer, care pune la dispozit ,ia programatorului dou ˘a modalit ˘at,i de lucru: (1) prin
scrierea codului comenzii SELECT ˆıntr-un spat ,iu de lucru (SQL Worksheet) al conexiu-
niiIntVirtual s,i (2) cu ajutorul unei interfet ,e grafice denumit ˘aQuery Buider , conectat ˘a la
IntVirtual .
Prima modalitate implic ˘a deschiderea unui spat ,iu de lucru pentru conexiunea IntVirtual
s,i scrierea comenzilor SQL de tip SELECT. Execut ,ia mai multor comenzi se face prin
ap˘asarea butonului Run Script , iar a uneia se face prin ap ˘asarea butonului Run Statement .
Cˆateva comenzi de acest tip sunt prezentate ˆın figura 3.1. ˆIn figur ˘a se observ ˘a rezultatul
obt ,inutˆın urma rul ˘arii ultimei comenzi de tip SELECT ˆın fereastra denumit ˘aQuery Result .
Cea de-a doua modalitate de exploatare a bazei de date prin comenzi de tip SELECT se
poate face cu ajutorul interfet ,ei grafice Query Buider . Dup ˘a selectarea Query Builder se
aduc ˆın zona grafic ˘a tabelele prin ”drag & drop”. Dac ˘aˆıntre tabele exist ˘a relat ,ie, aceasta
este simbolizat ˘a grafic printr-o linie la capetele c ˘areia apar simbolurile 1 s ,i1pentru a
indica o relat ,ie de tip 1:N. Se selecteaz ˘a elementele mult ,imii de select ,ie care este returnat ˘a
de comanda SELECT prin bifarea coloanelor corespunz ˘atoare din tabele. Execut ,ia comen-
zii SELECT se face prin act ,ionarea butonului Run Statement . Rezultatul obt ,inut poate fi
vizualizat ˆın fereastra Query Result . Aceast ˘a fereastr ˘a permite vizualizarea comenzii ˆın
limbajul SQL dac ˘a se act ,ioneaz ˘a butonul cu denumirea SQL.Query Builder permite efec-
tuarea de comenzi SELECT complexe, care cuprind clauzele prezentate ˆın subcapitolul 3.1:
Sort Type (ASCENDING, DESCENDING) pentru clauza ORDER BY , Sort Order (1, 2,
etc.) pentru indicarea ordinii de sortare ˆın cazul ˆın care exist ˘a mai multe criterii de or-
donare, Criteria pentru clauza WHERE, Grouping pentru clauza GROUP BY , Aggregate
pentru aplicarea funct ,iilor agregate oferite de limbajul SQL s ,iAlias pentru atribuirea unor
nume relevante coloanelor din mult ,imea de select ,ie. Un exemplu de comand ˘a SELECT

EXEMPLU DE EXPLOATARE A UNEI BAZE DE DATE RELAT ,IONALE 49
Figura 3.1 Comenzi SQL de tip SELECT realizate pe conexiunea IntVirtual
efectuat ˘a cu Query Builder este prezentat ˆın figura 3.2. Comanda returneaz ˘a numele s ,i
prenumele angajat ,ilor care au lucrat la proiectele care s-au ˆıncheiat p ˆan˘a la data de 15
octombrie 2015. ˆIn figura 3.3 este prezentat ˘a comanda SELECT care returneaz ˘a numele
ˆıntreprinderilor care au mai mult de un angajat, precum s ,i num ˘arul angajat ,ilor.
3.3.2 Exploatarea bazei de date prin secvent ,e de cod PL/SQL – exemplificare
Exploatarea bazei de date prin secvent ,e de cod PL/SQL se poate face cu SQL Devel-
oper. ˆIntr-un spat ,iu de lucru (SQL Worksheet) se scrie o procedur ˘a stocat ˘a sau o funct ,ie
ˆın conformitate cu sintaxele prezentate ˆın subcapitolul 3.2 s ,i se compileaz ˘a prin ap ˘asarea
butonului Run Statement . Se observ ˘aˆın sect ,iunea Procedures , respectiv Functions a bazei
de date, aparit ,ia denumirii procedurii stocate respectiv a funct ,ieiˆın cazul ˆın care compi-
larea s-a f ˘acut cu succes. Procedura stocat ˘a sau funct ,ia pot fi apelate printr-un bloc anonim
scris tot ˆıntr-un spat ,iu de lucru. Pentru vizualizarea rezultatelor apelului procedurii stocate
sau a funct ,iei trebuie afis ,at˘a fereastra Dbms Output din meniul View s,i apoi activat ˘a prin
ap˘asarea butonului Enable DBMS OUTPUT for connection (figura 3.4).
SQL Developer pune la dispozit ,ia programatorilor o serie de unelte grafice pentru crearea
de proceduri stocate. Pentru crearea unei proceduri stocate se execut ˘a click dreapta pe cate-
goria Procedures a conexiunii IntVirtual s,i se alege meniul New Procedure… . Apare fe-
reastra din figura 3.5 ˆın care se introduc numele procedurii stocate, denumirile parametrilor
procedurii, tipurile de date asociate acestora s ,i tipul parametrilor. Se poate utiliza butonul
Add Parameter pentru a se ad ˘auga noi parametri. Dup ˘a introducerea acestor informat ,ii se
act ,ioneaz ˘a butonul OK. Se observ ˘a aparit ,ia codului PL/SQL ˆıntr-un spat ,iu de lucru, ˆın care
corpul procedurii poate fi completat. Figura 3.6 prezint ˘a codul complet al procedurii.

50 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
Figura 3.2 Comand ˘a SQL de tip SELECT realizat ˘a pe conexiunea IntVirtual cuQuery Builder
Figura 3.3 Comand ˘a SQL de tip SELECT realizat ˘a pe conexiunea IntVirtual cuQuery Builder

EXEMPLU DE EXPLOATARE A UNEI BAZE DE DATE RELAT ,IONALE 51
Figura 3.4 Deschiderea s ,i activarea ferestrei Dbms Output
Prin ap ˘asarea butonului Compile se observ ˘a salvarea procedurii stocate ˆın categoria
Procedures a conexiunii IntVirtual . Prin act ,ionarea butonului Run din figura 3.6 apare
fereastra din figura 3.7 ˆın care se dau valori parametrilor astfel ˆıncˆat procedura s ˘a poat ˘a fi
apelat ˘a. Pentru apelare se act ,ioneaz ˘a butonul OK. Se observ ˘a caˆın tabelul Tipuri servicii
s-a introdus o informat ,ie nou ˘a.
SQL Developer pune la dispozit ,ia programatorilor o serie de unelte grafice pentru crearea
de funct ,ii. Pentru crearea unei funct ,ii se execut ˘a click dreapta pe categoria Functions a
conexiunii IntVirtual s,i se alege meniul New Function… . Apare fereastra din figura 3.8 ˆın
care se introduc numele funct ,iei, denumirile parametrilor funct ,iei, tipurile de date asociate
acestora s ,i tipul parametrilor. Se poate utiliza butonul Add Parameter pentru ad ˘augarea de
noi parametri. Dup ˘a introducerea acestor informat ,ii se act ,ioneaz ˘a butonul OK. Se observ ˘a
aparit ,ia codului PL/SQL ˆıntr-un spat ,iu de lucru, ˆın care corpul funct ,iei poate fi completat.
Figura 3.9 prezint ˘a codul complet al funct ,iei.
Prin ap ˘asarea butonului Compile se observ ˘a salvarea funct ,ieiˆın categoria Functions
a conexiunii IntVirtual . Prin act ,ionarea butonului Run din figura 3.9 apare fereastra din
figura 3.10 ˆın care se dau valori parametrilor astfel ˆıncˆat funct ,ia s˘a poat ˘a fi apelat ˘a. Pentru
apelare se act ,ioneaz ˘a butonul OK. Se observ ˘a c˘a funct ,ia returneaz ˘a num ˘arul de ˆınregistr ˘ari
din tabelul transmis ca parametru ˆın fereastra Output Variables .
Atˆat procedura stocat ˘a cˆat s ,i funct ,ia definite mai sus pot fi apelate din blocuri anonime
scrise ˆın PL/SQL ˆıntr-un spat ,iu de lucru (SQL Worsheet) al conexiunii IntVirtual . Un
astfel de bloc este prezentat ˆın figura 3.11, iar rezultatul obt ,inutˆın urma ap ˘as˘arii butonului
Run Script se observ ˘aˆın fereastra Dbms Output . De asemenea, se observ ˘a ca ˆın tabelul
Tipuri servicii s-a introdus o informat ,ie nou ˘a.

52 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
Figura 3.5 Crearea unei proceduri stocate ˆın SQL Developer
Figura 3.6 Compilarea unei proceduri stocate ˆın SQL Developer

EXEMPLU DE EXPLOATARE A UNEI BAZE DE DATE RELAT ,IONALE 53
Figura 3.7 Apelarea unei proceduri stocate ˆın SQL Developer
Figura 3.8 Crearea unei funct ,iiˆın SQL Developer

54 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
Figura 3.9 Compilarea unei funct ,iiˆın SQL Developer
Figura 3.10 Apelarea unei funct ,iiˆın SQL Developer

EXERCIT ,II 55
Figura 3.11 Apelarea unei funct ,ii s,i a unei proceduri ˆıntr-un bloc anonim ˆın SQL Developer
EXERCIT ,II
3.1 Utiliz ˆand cunos ,tint ,ele dob ˆandite:
a) S ˘a se creeze ˆın SQL Developer un utilizator denumit testcu parola testcare s ˘a
aib˘a urm ˘atoarele privilegii (drepturi): CONNECT s ,i RESOURCE;
b) S ˘a se realizeze o conexiune (schem ˘a) denumit ˘atestare a utilizatorului creat;
c) S ˘a se testeze folosind conexiunea testare ˆın SQL Developer toate exemplele
prezentate ˆın subcapitolele 3.1 s ,i 3.2.
3.2 S˘a se verifice ˆın SQL Developer exploatarea bazei de date IntVirtual prezentat ˘aˆın
subcapitolul 3.3. S ˘a se salveze comenzile SQL de tip SELECT ˆıntr-un fis ,ier denumit IntVir-
tual queries.sql . S˘a se exporte baza de date ˆıntr-un fis ,ier denumit IntVirtual.sql .
3.3 S˘a se exploateze prin 10 comenzi SQL de tip SELECT, 3 proceduri stocate scrise ˆın
PL/SQL s ,i 3 funct ,ii scrise ˆın PL/SQL baza de date relat ,ional ˘a implementat ˘a s,i populat ˘a cu
informat ,ii la exercit ,iile 2.3 s ,i 2.4 cu SQL Developer. S ˘a se salveze comenzile SQL de tip
SELECT ˆıntr-un fis ,ier cu extensia sql. S ˘a se exporte baza de date ˆıntr-un fis ,ier cu extensia
sql.

56 EXPLOATAREA BAZELOR DE DATE RELAT ¸ IONALE
REFERINT ,E BIBLIOGRAFICE
1. ***, Oracle Database Express Edition Documentation 11g Release 2 (11.2),
http://docs.oracle.com/cd/E17781 01/index.htm, 2015.
2. ***, SQL Developer Documentation Release 4.1, https://docs.oracle.com/cd/E55747 01/index.htm,
2015.
3. ***, Oracle/PLSQL, http://www.techonthenet.com/oracle/, 2015.

CAPITOLUL 4
REALIZAREA APLICAT ¸ IILOR CARE
LUCREAZ ˘A CU BAZE DE DATE
RELAT ¸ IONALE
Ideea de ”Design Patterns” (s ,abloane de proiectare) utilizat ˘aˆın ingineria software apart ,ine
profesorului Christopher Alexander de la UC Berkeley. Aceasta a fost adoptat ˘a de in-
ginerii software ˆın dezvoltarea aplicat ,iilor, deoarece faciliteaz ˘a reutilizarea unor principii
de proiectare ˆın alte implement ˘ari, reduc ˆandu-se efortul necesar interpret ˘arii/modific ˘arii
codului surs ˘a.Model-View-Controller (MVC) este un s ,ablon de proiectare utilizat ˆın re-
alizarea diverselor tipuri de aplicat ,ii (desktop, web) ˆın diverse limbaje de programare, care
ˆıs,i propune s ˘a separe ˆın mod clar logica de programare de partea de interfat ,˘a grafic ˘a. MVC
permite realizarea de aplicat ,ii care lucreaz ˘a cu o baz ˘a de date relat ,ional ˘a.
ˆIn cadrul acestui capitol se utilizeaz ˘a MVC, limbajul de programare C #s,i SGBD-
ul Oracle Database 11g Express Edition pentru realizarea unei aplicat ,ii de tip web care
lucreaz ˘a cu o baz ˘a de date relat ,ional ˘a. Aplicat ,ia se realizeaz ˘aˆın mediul de dezvoltare
Microsoft Visual Studio Ultimate 2013.
4.1 Realizarea unei aplicat ,ii MVC care lucreaz ˘a cu o baz ˘a de date
4.1.1 Model-View-Controller
MVC are urm ˘atoarele componente principale:
Model – reprezint ˘a datele necesare aplicat ,iei s ,i regulile de manipulare a acestora;
View – reprezint ˘a forma de vizualizare a st ˘arii modelului (interfet ,e grafice utilizator);
Controller – ofer ˘a facilit ˘at,i pentru schimbarea st ˘arii modelului, realiz ˆand practic co-
municarea dintre Model s,iView [1].
Baze de date relat ,ionale s ,i nerelat ,ionale. Copyright c
U.T.PRESS 57

58 REALIZAREA APLICAT ¸ IILOR CARE LUCREAZ ˘A CU BAZE DE DATE RELAT ¸ IONALE
Componenta Model are urm ˘atoarele responsabilit ˘at,i: gestioneaz ˘a datele sub forma unor
propriet ˘at,i, implementeaz ˘a metodele aplicat ,iei, anunt ,˘a componenta View de schimbarea
st˘arilor s ,i implementeaz ˘a logica aplicat ,iei. Componenta View are urm ˘atoarele respons-
abilit ˘a-t,i: crearea interfet ,elor grafice, actualizarea acestora c ˆand se modific ˘a st˘arile com-
ponentei Model s,i trimiterea act ,iunilor utilizatorului componentei Controller . Componenta
Controller are urm ˘atoarele responsabilit ˘at,i: traduce act ,iunile utilizatorului ˆın schimb ˘ari ale
st˘arii componentei Model , iar dac ˘a schimb ˘arile sunt doar de interfat ,˘a atunci actualizeaz ˘a
direct componenta View .
Cele trei componente ale MCV ( Model ,View ,Controller ) comunic ˘aˆın mod regulat,
conform urm ˘atorului ciclu: (1) componenta View permite act ,iuni ale utilizatorului pe care
le transmite componentei Controller ; (2) componenta Controller primes ,te act ,iunile uti-
lizatorului de la View ; (3) componenta Controller modific ˘a starea componentei Model
ca r˘aspuns la act ,iunile utilizatorului; (4) componenta Model ˆıs,i modific ˘a starea pe baza
actualiz ˘arilor f ˘acute de componenta Controller ; (5) componenta Model notific ˘a compo-
nenta View cu privire la schimbarea st ˘arii; (6) componenta View modific ˘a interfat ,a grafic ˘a.
Figura 4.1 prezint ˘a comunicarea dintre cele trei componente.
Figura 4.1 Comunicarea dintre componentele MVC
MVC prezint ˘a cˆateva avantaje: permite reprezent ˘ari multiple (componenta View ) ale
aceloras ,i date (componenta Model ), permite ad ˘augarea, eliminarea sau modificarea cu
us,urint ,˘a a interfet ,elor utilizator (componenta View ), permite ca r ˘aspunsul la datele intro-
duse de utilizator (componenta Controller ) s˘a fie modificat cu us ,urint ,˘a, promoveaz ˘a reuti-
lizarea codului surs ˘a (de exemplu, o component ˘a de tip View poate fi utilizat ˘a cu diferite
componente de tip Model ), permite programatorilor s ˘a actualizeze simultan interfat ,a grafic ˘a,
logica sau controlul unei aplicat ,ii f˘ar˘a ca alt cod surs ˘a s˘a fie afectat s ,i ajut ˘a programatorii
s˘a se concentreze pe un singur aspect al aplicat ,iei la un moment dat [2].
Mediul de dezvoltare Microsoft Visual Studio Ultimate 2013 ofer ˘a posibilitatea re-
aliz˘arii cu us ,urint ,˘a de aplicat ,ii bazate pe MVC ˆın limbajul C #. Subcapitolul 4.2 prezint ˘a
tot,i pas ,ii necesari realiz ˘arii unei astfel de aplicat ,ii.
4.1.2 Componente care trebuie instalate pentru realizarea aplicat ,iei
Pentru realizarea de aplicat ,iiˆın Microsoft Visual Studio Ultimate 2013, care s ˘a utilizeze
baze de date relat ,ionale implementate ˆın Oracle Database 11g Express Edition, trebuie
instalate urm ˘atoarele componente: Oracle Data Access Components (ODAC) s ,i Oracle

EXEMPLU DE REALIZARE A UNEI APLICAT ,II MVC CU BAZ ˘A DE DATE IMPLEMENTAT ˘AˆIN ORACLE DATABASE 11G EXPRESS EDITION 59
Developer Tools pentru Visual Studio (ODAC 12c Release 4 and Oracle Developer Tools
for Visual Studio (12.1.0.2.4)). Acestea pot fi desc ˘arcate de pe pagina dedicat ˘a lor pe site-
ul Oracle [3]. Se dezarhiveaz ˘a fis ,ierul desc ˘arcat s ,i se lanseaz ˘aˆın execut ,ie fis ,ierul setup.exe.
Se urmeaz ˘a pas ,ii de instalare indicat ,i l˘asˆandu-se set ˘arile implicite cu except ,ia pasului 6 din
10ˆın care se debifeaz ˘a ”Configure OPD.NET at a machine-wide level”.
4.2 Exemplu de realizare a unei aplicat ,ii MVC cu baz ˘a de date implementat ˘a
ˆın Oracle Database 11g Express Edition
Realizarea unei aplicat ,ii MVC ˆın limbajul C #ˆın Microsoft Visual Studio Ultimate 2013
presupune parcurgerea etapelor prezentate ˆın subcapitolele urm ˘atoare.
4.2.1 Crearea aplicat ,iei de tip ASP.NET MVC Web Application
Se lanseaz ˘aˆın execut ,ie Microsoft Visual Studio Ultimate 2013. Din meniul Filese alege
submeniul New / Project . Apare fereastra din figura 4.2. ˆIn aceast ˘a fereastr ˘a se alege
tipul proiectului, Web, din partea st ˆang˘a a ferestrei s ,i ASP.NET MVC Web Application,
din partea dreapt ˘a a ferestrei s ,i de asemenea se selecteaz ˘a versiunea de .NET Framework
(ex. .NET Framework 4.5.1) necesar ˘a dezvolt ˘arii de aplicat ,ii web. Se denumes ,te proiectul
IntVirtual , se alege locat ,iaˆın care se salveaz ˘a proiectul s ,i se denumes ,te spat ,iul de lucru,
bifˆandu-se s ,i crearea unui director specific acestuia. Se apas ˘a butonul OK.ˆIn acest mo-
ment apare fereastra din figura 4.3. Dup ˘a act ,ionarea butonului Change Authentification se
selecteaz ˘aNo Authentification s,i apoi se efectueaz ˘a click pe butonul OK.
Figura 4.2 Crearea proiectului de tip ASP.NET MVC Web Application, pasul 1

60 REALIZAREA APLICAT ¸ IILOR CARE LUCREAZ ˘A CU BAZE DE DATE RELAT ¸ IONALE
Figura 4.3 Crearea proiectului de tip ASP.NET MVC Web Application, pasul 2
4.2.2 Structura aplicat ,iei de tip ASP.NET MVC Web Application
Structura aplicat ,iei de tip ASP.NET MVC Web Application, denumit ˘aIntVirtual , este
prezentat ˘aˆın figura 4.4 s ,i cont ,ine mai multe directoare aferente MVC: un director Con-
trollers, ˆın care se defines ,te logica ce face leg ˘atura ˆıntre interfat ,a grafic ˘a s,i datele vehicu-
lateˆın aplicat ,ie; un director Models, ˆın care se lucreaz ˘a cu datele; un director Views
ˆın care sunt stocate interfet ,ele grafice; un director Content, ˆın care se definesc stilurile
pe care interfet ,ele grafice le folosesc; un director Scripts, ˆın care sunt definite script-
urile de tip JavaScript sau Ajax; un fis ,ier Global.aspx specific aplicat ,iilor web; un fis ,ier
Global.aspx.cs, care cont ,ine codul surs ˘aˆın limbaj C #al paginii web; un fis ,ier Web.config,
care cuprinde configur ˘arile necesare controlului aplicat ,iilor web dezvoltate cu ASP.NET; s ,i
directoarele Properties, References, App Data, App Start. ˆIn mod implicit, la crearea unui
nou proiect ˆın directorul Controllers exist ˘a definit ˘a clasa HomeController.cs , respectiv ˆın
directorul Views exist ˘a interfet ,ele aferente acestuia (About, Contact, Index).
4.2.3 Compilarea s ,i rularea aplicat ,iei de tip ASP.NET MVC Web Application
Pentru compilarea aplicat ,ieiIntVirtual se selecteaz ˘a meniul Build submeniul Build Solu-
tion (F6) din meniul principal al mediului de programare. ˆIn cazul ˆın care exist ˘a erori,
acestea sunt afis ,ateˆın fereastra Error List (situat ˘aˆın partea de jos a mediului de progra-
mare). Efectu ˆand dublu click pe fiecare eroare ˆın parte, cursorul se pozit ,ioneaz ˘a pe linia
care cont ,ine eroarea. Rularea aplicat ,iei dup ˘a compilare se poate realiza ˆın mai multe mo-
duri:
Rapid, f ˘ar˘a depanare (Debug / Start Without Debugging sau Ctrl+F5);
Rulare pas cu pas (Debug / Step Into sau F11 s ¸i Debug / Step Over sau F10);
Rulare rapid ˘a pˆan˘a la linia marcat ˘a ca punct de ˆıntrerupere (Toggle Breakpoint sau F9
pe linia respectiv ˘a s,i apoi Debug / Start Debugging sau F5). ˆIncetarea urm ˘aririi pas
cu pas (Debug / Stop Debugging sau Shift+F5) permite ies ,irea din modul de depanare
s,i revenirea la modul normal de lucru.

EXEMPLU DE REALIZARE A UNEI APLICAT ,II MVC CU BAZ ˘A DE DATE IMPLEMENTAT ˘AˆIN ORACLE DATABASE 11G EXPRESS EDITION 61
Figura 4.4 Structura proiectului de tip ASP.NET MVC Web Application
4.2.4 Conectarea la baza de date a aplicat ,iei de tip ASP.NET MVC Web Ap-
plication
Fereastra Server Explorer a mediului de dezvoltare permite realizarea unei conexiuni la
baza de date IntVirtual implementat ˘a cu SQL Developer. Se execut ˘a click dreapta pe Data
Connections s,i se alege meniul Add Connection… (figura 4.5).
Figura 4.5 Ad˘augarea unei conexiuni la baza de date IntVirtual
Apare fereastra din figura 4.6, ˆın care se completeaz ˘a numele s ,i parola utilizatorului
creat ˆın SQL Developer s ,i la care s-a realizat conexiunea IntVirtual , se alege tipul co-
nexiunii – EZ Connect s,i se completeaz ˘a numele calculatorului care g ˘azduies ,te baza de
date, num ˘arul portului folosit de Oracle Database 11g Express Edition – 1521 s ,i numele
serviciului care gestioneaz ˘a baza de date – pentru Oracle Database 11g Express Edition
este XE. Dup ˘a introducerea acestor informat ,ii se apas ˘a butonul OK. Prin urmare, ˆın fereas-
traServer Explorer s-a ad ˘augat conexiunea dup ˘a cum o arat ˘a s,i figura 4.7.

62 REALIZAREA APLICAT ¸ IILOR CARE LUCREAZ ˘A CU BAZE DE DATE RELAT ¸ IONALE
Figura 4.6 Ad˘augarea unei conexiuni la baza de date IntVirtual
4.2.5 Crearea modelului de date al aplicat ,iei de tip ASP.NET MVC Web Ap-
plication
Crearea modelului de date presupune crearea unui set de clase care s ˘a reprezinte baza de
date. Pentru aceasta se poate folosi Microsoft Entity Framework, LINQ to SQL, Subsonic,
etc. ˆIn aceast ˘a exemplificare se foloses ,te Microsoft Entity Framework. Deoarece ultima
variant ˘a de Entity Framework (versiunea 6) nu are implementat lucrul cu bazele de date
Oracle se ad ˘aug˘a versiunea anterioar ˘a. Se selecteaz ˘a submeniul Library Package Manager
s,i apoi submeniul Package Manager Console din meniul Tools al mediul de dezvoltare Vi-
sual Studio. ˆIn consola deschis ˘a se scrie comanda: PM >Install-Package EntityFramework
-Version 5.0.0 (figura 4.8).
Pentru stabilirea leg ˘aturii aplicat ,iei cu serverul de baze de date trebuie s ˘a se adauge
referint ,aOracle ODP .Net, Managed Driver . Aceasta se poate ad ˘auga prin click dreapta pe
References ˆın fereastra Solution Explorer s,i alegerea meniului Manage NuGet Packages… .
Se caut ˘a dup ˘a cuv ˆantul cheie ”oracle” s ,i se instaleaz ˘aOracle ODP .Net, Managed Driver
din lista returnat ˘a de c ˘autare prin ap ˘asarea pe butonul Install (figura 4.9).
Pentru a realiza modelul de date se execut ˘a click dreapta pe directorul Models din fe-
reastra Solution Explorer s,i se alege submeniul New Item din meniul Add. Din fereastra

EXEMPLU DE REALIZARE A UNEI APLICAT ,II MVC CU BAZ ˘A DE DATE IMPLEMENTAT ˘AˆIN ORACLE DATABASE 11G EXPRESS EDITION 63
Figura 4.7 Conexiunea la baza de date IntVirtual
Figura 4.8 Ad˘augarea lui Microsoft Entity Framework V5.0.0 aplicat ,iei
suprapus ˘a care apare se alege categoria Data s ,i se selecteaz ˘aADO.NET Entity Data Model .
Se atribuie un nume modelului (ex. IntVirtual.edmx) s ,i se act ,ioneaz ˘a butonul Add.Entity
Data Model Wizard apare ca urmare a act ,ion˘arii acestui buton. La pasul Choose Model
Contents se selecteaz ˘a opt ,iunea Generate from database . La pasul Choose Your Data
Connection se alege conexiunea la baza de date dorit ˘a a se exploata, INTVIRTUAL.XE, se

64 REALIZAREA APLICAT ¸ IILOR CARE LUCREAZ ˘A CU BAZE DE DATE RELAT ¸ IONALE
Figura 4.9 Ad˘augarea lui Oracle ODP.Net, Managed Driver aplicat ,iei
selecteaz ˘a ca datele de conexiune s ˘a fie incluse in s ,irul de caractere al conexiunii (”Yes, in-
clude the sensituve data in the connection string”) s ,i se salveaz ˘aˆın fis ,ierul Web.Config sub
numele de IntvirtualEntities (figura 4.10). La pasul Choose Your Version se alege Entity
Framework 5.0 (figura 4.11), iar la pasul Choose Your Database Objects and Settings se
aleg tabelele s ,i procedurile stocate ale bazei de date s ,i se atribuie un nume spat ,iului de lu-
cru al modelului (ex. IntVirtualModel) (figura 4.12). Dup ˘a ap˘asarea butonului de finalizare
apare modelul bazei de date ˆınEntity Data Model Designer s,i clasele aferente tabelelor ˆın
C#(figura 4.13).
Figura 4.10 Ad˘augarea modelului aplicat ,iei, pasul 1

EXEMPLU DE REALIZARE A UNEI APLICAT ,II MVC CU BAZ ˘A DE DATE IMPLEMENTAT ˘AˆIN ORACLE DATABASE 11G EXPRESS EDITION 65
Figura 4.11 Ad˘augarea modelului aplicat ,iei, pasul 2
Figura 4.12 Ad˘augarea modelului aplicat ,iei, pasul 3
4.2.6 Crearea componentelor de tip controller s ,i view ale aplicat ,iei de tip
ASP.NET MVC Web Application
Dup˘a crearea modelului de date trebuie ad ˘augat ˘a partea aferent ˘a componentei controller,
parte responsabil ˘a cu controlul interact ,iunii dintre utilizatorii aplicat ,iei s ,i date. ˆIn fereastra
Solution Explorer se execut ˘a click dreapta pe directorul Controllers s ,i se alege submeniul
Controller… din meniu Add.ˆIn fereastra care apare se alege tipul pentru controller, MVC
5 Controller with views, using Entity Framework care permite vizualizarea, crearea, ac-
tualizarea s ,i s,tergerea entit ˘at,ilor modelului aplicat ,iei, s ,i se act ,ioneaz ˘a butonul Add. Se
atribuie acestuia numele de Tipuri serviciiController , se alege clasa Tipuri servicii din
modelul datelor s ,i contextul IntvirtualEntities , s,i se apas ˘a butonul Add. Acest controller
gestioneaz ˘a tabelul Tipuri servicii din baza de date (figura 4.14).

66 REALIZAREA APLICAT ¸ IILOR CARE LUCREAZ ˘A CU BAZE DE DATE RELAT ¸ IONALE
Figura 4.13 Entit ˘at,ile modelului IntVirtual
Figura 4.14 Ad˘augarea componentei controller Tipuri servicii
Se observ ˘aˆın fereastra Solution Explorer aparit ,iaˆın sect ,iunea Views a cinci pagini: Cre-
ate.cshtml, Delete.cshtml, Edit.cshtml, Details.cshtml, Index.cshtml (figura 4.15). Acestea
permit ad ˘augarea de noi ˆınregistr ˘ariˆın tabelul Tipuri servicii , s,tergerea s ,i actualizarea celor
existente s ,i afis ,area tuturor ˆınregistr ˘arilor ˆın form ˘a simpl ˘a s,i detaliat ˘a.

EXEMPLU DE REALIZARE A UNEI APLICAT ,II MVC CU BAZ ˘A DE DATE IMPLEMENTAT ˘AˆIN ORACLE DATABASE 11G EXPRESS EDITION 67
Figura 4.15 Structura aplicat ,iei dup ˘a generarea componentelor de tip controller s ,i view pentru
Tipuri servicii
Pentru ad ˘augarea de noi meniuri aplicat ,iei se modific ˘a pagina Layout.cshtml din sub-
directorul Shared al directorului Views. Ad ˘augarea paginii pentru gestiunea tabelului
Tipuri servicii ˆın meniul principal al aplicat ,iei este prezentat ˘aˆın continuare.
<div c l a s s =” navbarc o l l a p s e c o l l a p s e ” >
<ul c l a s s =” nav navbarnav ”>
<l i>@Html . A c t i o n L i n k ( ” S t a r t ” , ” Index ” , ”Home” ) </l i>
<l i>@Html . A c t i o n L i n k ( ” T i p u r i s e r v i c i i ” , ” Index ” , ” T i p u r i s e r v i c i i ”
)</l i>
<l i>@Html . A c t i o n L i n k ( ” Despre ” , ” About ” , ”Home” ) </l i>
<l i>@Html . A c t i o n L i n k ( ” C o n t a c t ” , ” C o n t a c t ” , ”Home” ) </l i>
</ul>
</div>
ˆIn componenta de tip controller asociat ˘a tabelului Tipuri servicii s-au creat automat
metode publice care returneaz ˘a obiecte ale clasei ActionResult asociate fiec ˘arei pagini enu-
merate mai sus. Aceste metode utilizeaz ˘a un obiect al clasei IntvirtualEntities prin care se
ajunge la tabelul dorit din baza de date.
p r i v a t e I n t v i r t u a l E n t i t i e s db = new I n t v i r t u a l E n t i t i e s ( ) ;

68 REALIZAREA APLICAT ¸ IILOR CARE LUCREAZ ˘A CU BAZE DE DATE RELAT ¸ IONALE
Pentru afis ,area ˆınregistr ˘arilor din tabelul Tipuri servicii , sub form ˘a de list ˘a, se apeleaz ˘a
din controller metoda Index(), care este asociat ˘a paginii Index.cshtml din subdirectorul
Views/Tipuri servicii.
p u b l i c A c t i o n R e s u l t Index ( )
f
r e t u r n View ( db . TIPURI SERVICII . T o L i s t ( ) ) ;
g
Pentru afis ,area detaliat ˘a a unei ˆınregistr ˘ari selectate din tabelul Tipuri servicii se ape-
leaz˘a din controller metoda Details(), care este asociat ˘a paginii Details.cshtml din subdi-
rectorul Views/Tipuri servicii.
p u b l i c A c t i o n R e s u l t D e t a i l s ( s h o r t ? i d )
f
i f( i d == n u l l )
f
r e t u r n new H t t p S t a t u s C o d e R e s u l t ( H t t p S t a t u s C o d e . BadRequest ) ;
g
TIPURI SERVICII t i p u r i s e r v i c i i = db . TIPURI SERVICII . Find ( i d ) ;
i f( t i p u r i s e r v i c i i == n u l l )
f
r e t u r n HttpNotFound ( ) ;
g
r e t u r n View ( t i p u r i s e r v i c i i ) ;
g
Pentru ad ˘augarea unei noi ˆınregistr ˘ariˆın tabelul Tipuri servicii se apeleaz ˘a din con-
troller metoda Create(), care este asociat ˘a paginii Create.cshtml din subdirectorul Views/Ti-
puri servicii. Metoda Create() trimite datele spre server (POST).
p u b l i c A c t i o n R e s u l t C r e a t e ( )
f
r e t u r n View ( ) ;
g
[ H t t p P o s t ]
[ V a l i d a t e A n t i F o r g e r y T o k e n ]
p u b l i c A c t i o n R e s u l t C r e a t e ( [ Bind ( I n c l u d e =” ID TIP SERVICIU ,DENUMIRE” ) ]
TIPURI SERVICII t i p u r i s e r v i c i i )
f
i f( M o d e l S t a t e . I s V a l i d )
f
db . TIPURI SERVICII . Add ( t i p u r i s e r v i c i i ) ;
db . SaveChanges ( ) ;
r e t u r n R e d i r e c t T o A c t i o n ( ” Index ” ) ;
g
r e t u r n View ( t i p u r i s e r v i c i i ) ;
g
Pentru actualizarea unei noi ˆınregistr ˘ariˆın tabelul Tipuri servicii se apeleaz ˘a din con-
troller metoda Edit(), care este asociat ˘a paginii Edit.cshtml din subdirectorul Views/Ti-
puri servicii. Metoda Edit() trimite datele spre server (POST) s ,i permite actualiz ˘ari ale
cˆampurilor care nu au constr ˆangerea de tipul PK.
p u b l i c A c t i o n R e s u l t E d i t ( s h o r t ? i d )
f
i f( i d == n u l l )
f
r e t u r n new H t t p S t a t u s C o d e R e s u l t ( H t t p S t a t u s C o d e . BadRequest ) ;
g
TIPURI SERVICII t i p u r i s e r v i c i i = db . TIPURI SERVICII . Find ( i d ) ;

EXEMPLU DE REALIZARE A UNEI APLICAT ,II MVC CU BAZ ˘A DE DATE IMPLEMENTAT ˘AˆIN ORACLE DATABASE 11G EXPRESS EDITION 69
i f( t i p u r i s e r v i c i i == n u l l )
f
r e t u r n HttpNotFound ( ) ;
g
r e t u r n View ( t i p u r i s e r v i c i i ) ;
g
[ H t t p P o s t ]
[ V a l i d a t e A n t i F o r g e r y T o k e n ]
p u b l i c A c t i o n R e s u l t E d i t ( [ Bind ( I n c l u d e =” ID TIP SERVICIU ,DENUMIRE” ) ]
TIPURI SERVICII t i p u r i s e r v i c i i )
f
i f( M o d e l S t a t e . I s V a l i d )
f
db . E n t r y ( t i p u r i s e r v i c i i ) . S t a t e = E n t i t y S t a t e . Modified ;
db . SaveChanges ( ) ;
r e t u r n R e d i r e c t T o A c t i o n ( ” Index ” ) ;
g
r e t u r n View ( t i p u r i s e r v i c i i ) ;
g
Pentru s ,tergerea unei noi ˆınregistr ˘ariˆın tabelul Tipuri servicii se apeleaz ˘a din controller
metoda Delete(), care este asociat ˘a paginii Delete.cshtml din subdirectorul Views/Tipuri
servicii. Metoda Delete() trimite datele spre server (POST).
p u b l i c A c t i o n R e s u l t D e l e t e ( s h o r t ? i d )
f
i f( i d == n u l l )
f
r e t u r n new H t t p S t a t u s C o d e R e s u l t ( H t t p S t a t u s C o d e . BadRequest ) ;
g
TIPURI SERVICII t i p u r i s e r v i c i i = db . TIPURI SERVICII . Find ( i d ) ;
i f( t i p u r i s e r v i c i i == n u l l )
f
r e t u r n HttpNotFound ( ) ;
g
r e t u r n View ( t i p u r i s e r v i c i i ) ;
g
[ H t t p P o s t , ActionName ( ” D e l e t e ” ) ]
[ V a l i d a t e A n t i F o r g e r y T o k e n ]
p u b l i c A c t i o n R e s u l t D e l e t e C o n f i r m e d ( s h o r t i d )
f
TIPURI SERVICII t i p u r i s e r v i c i i = db . TIPURI SERVICII . Find ( i d ) ;
db . TIPURI SERVICII . Remove ( t i p u r i s e r v i c i i ) ;
db . SaveChanges ( ) ;
r e t u r n R e d i r e c t T o A c t i o n ( ” Index ” ) ;
g
Aplicat ,ia ASP.NET MVC Web Application poate fi completat ˘a cu componente de tip
controller pentru celelalte tabele ale bazei de date ˆın acelas ,i mod ca s ,i cel exemplificat mai
sus.ˆIn cazul ˆın care se dores ,te activarea valid ˘arilor coloanelor tabelelor pentru respectarea
constr ˆangerilor de tip PK, FK s ,i NOT NULL se ad ˘aug˘a directiva Required ˆınaintea pro-
priet ˘at,ilor claselor aferente tabelelor din modelul bazei de date. De asemenea, se poate
ad˘auga directiva Display cu parametrul Name pentru redenumirea propriet ˘at,ilor claselor.
Modificarea clasei Tipuri servicii este prezentat ˘aˆın continuare.
namespace I n t V i r t u a l . Models
f
u s i n g System ;
u s i n g System . C o l l e c t i o n s . G e n e r i c ;
u s i n g System . ComponentModel . D a t a A n n o t a t i o n s ;
p u b l i c p a r t i a l c l a s s TIPURI SERVICII

70 REALIZAREA APLICAT ¸ IILOR CARE LUCREAZ ˘A CU BAZE DE DATE RELAT ¸ IONALE
f
p u b l i c TIPURI SERVICII ( )
f
t h i s . SERVICIIs = new HashSet <SERVICII >() ;
g
[ R e q u i r e d ]
p u b l i c s h o r t ID TIP SERVICIUfg e t ; s e t;g
[ D i s p l a y ( Name = ”DENUMIRE TIP SERVICIU” ) ]
[ R e q u i r e d ]
p u b l i c s t r i n g DENUMIRE fg e t ; s e t;g
p u b l i c v i r t u a l I C o l l e c t i o n <SERVICII >SERVICIIsfg e t ; s e t;g
g
g
EXERCIT ,II
4.1 S˘a se completeze aplicat ,ia prezentat ˘aˆın subcapitolul 4.2 cu componete de tip con-
troller s ,i view pentru gestionarea tuturor tabelelor bazei de date IntVirtual .
4.2 S˘a se creeze o aplicat ,ie ASP.NET MVC Web Application care s ˘a gestioneze baza de
date implementat ˘a s,i populat ˘a la exercit ,iile 2.3 s ,i 2.4.
REFERINT ,E BIBLIOGRAFICE
1. ***, Model View Controller, http://c2.com/cgi/wiki?ModelViewController, 2015.
2. C. Baray, The model-view-controller (MVC) design pattern,
http://cristobal.baray.com/indiana/projects/mvc.html, 2015.
3. ***, 32-bit Oracle Data Access Components (ODAC) with Oracle Developer Tools for Visual
Studio, http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html, 2015.

PARTEA II
BAZE DE DATE
NERELAT ¸ IONALE (NOSQL)

CAPITOLUL 5
PREZENTAREA MODELELOR DE DATE S ¸ I
A SOLUT ¸ IILOR DE IMPLEMENTARE
NOSQL
Modelul de date relat ,ional a ˆınceput s ˘a nu mai fac ˘a fat ,˘a gestion ˘ariiˆın timp real a unor
volume extrem de mari de date variate s ,i distribuite. Astfel, au ap ˘arut modelele bazate pe
principiul exploat ˘arii datelor. Acestea nu pleac ˘a de la datele existente din care s ˘a rezulte
ceea se poate face cu ele, ci exact invers. Aceste modele stau la baza realiz ˘arii de baze de
date nerelat ,ionale de tip NoSQL s ,i se clasific ˘aˆın urm ˘atoarele categorii: modelul de date
cheie-valoare, modelul de date BigTable, baze de date orientate-document s ,i modelul de
date de tip graf. Modelele de date NoSQL permit ca o baz ˘a de date s ˘a fie stocat ˘a pe mai
multe servere conectate ˆıntr-o ret ,ea pe care ruleaz ˘a acelas ,i sistem de operare. Un server
corespunde unui nod fizic, iar un nod fizic poate s ˘a aib ˘a mai multe noduri virtuale. O baz ˘a
de date se memoreaz ˘aˆıntr-un anumit num ˘ar de noduri ˆın care datele sunt partit ,ionate s ,i
replicate [1].
Modele de date de tip NoSQL nu garanteaz ˘aˆın totalitate realizarea cu succes a gestiunii
tranzact ,iilor, iar limbajul SQL nu mai este utilizat pentru exploatarea datelor. ˆIn schimb
acestea ofer ˘a cel put ,in dou ˘a din urm ˘atoarele caracteristici: consistent ,˘a, disponibilitate s ,i
partit ,ionare (Consistency, Availability, Partition – CAP). Consistent ,a se refer ˘a la faptul c ˘a
tot,i client ,ii bazei de date v ˘ad aceleas ,i date, disponibilitatea se refer ˘a la faptul c ˘a fiecare
cerere primes ,te r˘aspuns, iar partit ,ionare se refer ˘a la faptul c ˘a sistemul funct ,ioneaz ˘a cˆand
unele noduri nu o fac.
Modelele de date nerelat ,ionale de tip NoSQL au fost implementate ˆın diverse struc-
turi care ˆınlocuiesc SGBD-urile clasice s ,i exceleaz ˘aˆın cazul a dou ˘a din caracteristicile
ment ,ionate anterior (CP, AP). Tabelul 5.1 prezint ˘a cˆateva dintre aceste solut ,ii s ,i clasifi-
carea lor ˆın funct ,ie de modelele de date utilizate.
Baze de date relat ,ionale s ,i nerelat ,ionale. Copyright c
U.T.PRESS 73

74 PREZENTAREA MODELELOR DE DATE S ¸ I A SOLUT ¸ IILOR DE IMPLEMENTARE NOSQL
Tabel 5.1 Modele de date s ,i solut ,ii NoSQL
Model de date Solut ,ii NoSQL
Modelul de date cheie-valoare Amazon DynamoDB, Oracle NoSQL Database, Redis,
Riak
Modelul de date BigTable Apache Cassandra, Apache HBase
Baze de date orientate-
documentMongoDB, Apache CouchDB, Couchbase Server, Cluster-
point Server, RavenDB
Modelul de date de tip graf Neo4j, FlockDB, AllegroGraph
ˆIn prezent nu exist ˘a standarde pentru realizarea modelelor de date NoSQL s ,i posi-
bilit˘at,ile de interogare ale datelor sunt reduse. Cu toate acestea, unii dezvoltatori de pro-
duse software au ˆınceput s ˘a utilizeze solut ,iile existente.
ˆIn cadrul acestui capitol se prezint ˘a succint modelele de date s ,i cele mai utilizate solut ,ii
NoSQL.
5.1 Modelul de date cheie-valoare
Modelul de date cheie-valoare este utilizat ˆın proiectarea bazelor de date distribuite. ˆIn
acest model datele sunt reprezentate sub forma unei colect ,ii de perechi cheie-valoare.
Cheia este unic ˘a s,i are atas ,at˘a o anumit ˘a valoare. Asupra colect ,iilor cheie-valoare pot fi
efectuate operat ,ii de tip: scriere (put), citire (get) s ,i s,tergere (delete). Principalele caracte-
ristici ale acestui model sunt scalabilitatea s ,i buna disponibilitate pentru scriere [2]. Bazele
de date cheie-valoare se folosesc ˆın aplicat ,ii web cum sunt cele de comert ,electronic, ret ,ele
sociale, dar s ,iˆın implementarea jocurilor online s ,i a aplicat ,iilor pentru dispozitive mobile.
ˆIn figura 5.1 este prezentat ˘a abordarea relat ,ional ˘a versus cea cheie-valoare.
5.1.1 Amazon DynamoDB
Compania Amazon utilizeaz ˘a modelul de date cheie-valoare pentru aplicat ,ia proprie de
comert ,electronic prin API-ul Amazon DynamoDB [3]. Principalele concepte ale Dy-
namoDB sunt: tabelele, articolele s ,i atributele. Tabelul este o colect ,ie de date. Fiecare tabel
cont ,ine mai multe articole unice, fiecare articol fiind compus din mai multe atribute. Unic-
itatea articolelor dintr-un tabel este dat ˘a de atributul denumit cheie primar ˘a. DynamoDB
permite definirea a dou ˘a tipuri de cheie primar ˘a: (1) format ˘a dintr-un singur atribut denu-
mit cheie de partit ,ionare s ,i (2) format ˘a din dou ˘a atribute, primul fiind cheia de partit ,ionare,
iar cel de-al doilea cheia de sortare. Cheile de partit ,ionare sunt utilizate ca intr ˘ari ale unei
funct ,ii de tip ”hash”. Funct ,ia returneaz ˘a partit ,ia unde a fost stocat articolul [3]. Toate
articolele cu aceeas ,i cheie de partit ,ionare sunt stocate la aceeas ,i locat ,ieˆıntr-o ordine dat ˘a
de cheia de sortare. ˆIn cadrul DynamoDB, operat ,iile asupra datelor se fac dup ˘a atributul
cheie primar ˘a sau dup ˘a alte atribute definite ca indecs ,i secundari [3].
DynamoDB pune la dispozit ,ia programatorilor o fereastr ˘a interactiv ˘a, JavaScript Shell,
ˆın care se pot crea s ,i s,terge tabele (createTable(), deleteTable()), se pot introduce valori
pentru articole (putItem(), batchWriteItem()), se pot citi, modifica s ,i s,terge valorile arti-
colelor (getItem(), batchGetItem(), updateItem(), deleteItem()), se pot reg ˘asi toate valorile

MODELUL DE DATE CHEIE-VALOARE 75
Figura 5.1 Modelul relat ,ional vs. modelul cheie-valoare
articolelor dintr-un tabel (scan()) s ,i se pot interoga tabelele dup ˘a cheia de partit ,ionare sau
dup˘a cheia de partit ,ionare s ,i cheia de sortare la care se ad ˘aug˘a s,i alte filtre (query()).
Amazon DynamoDB este disponibil gratuit sub forma unei arhive de tip jar. Ruleaz ˘a pe
sistemele de operare Windows, Linux s ,i Mac OS X. Pentru instalare este nevoie de Java
Runtime Engine (JRE) versiunea 6 sau mai nou ˘a.
Amazon DynamoDB poate fi folosit ˆın realizarea de aplicat ,iiˆın diverse limbaje de pro-
gramare (Java, .NET, PHP, Python). Pentru aceasta, trebuie instalat AWS SDK (Amazon
Web Services Software Development Kit) specific acestor limbaje.
[3] ofer ˘a o bun ˘a documentare ˆın ceea ce prives ,te lucrul cu Amazon DynamoDB s ,i im-
plementarea de aplicat ,ii care utilizeaz ˘a acest serviciu.
5.1.2 Oracle NoSQL Database
Compania Oracle a realizat Oracle NoSQL Database pe baza modelului de date cheie-
valoare pentru a oferi fiabilitate, scalabilitate s ,i disponibilitate ˆın ceea ce prives ,te stocarea
datelor pe un set configurabil de sisteme care funct ,ioneaz ˘a ca noduri de stocare [4]. Datele
sunt memorate ˆın tabele sub forma unor perechi cheie-valoare pe mai multe noduri de
stocare, pe baza valorii de tip ”hash” a cheii primare. Nodurile de stocare sunt repli-
cate asigur ˆan-du-se astfel o mare disponibilitate a datelor s ,i un echilibru ˆın execut ,ia in-
terog ˘arilor. Oracle NoSQL Database suport ˘a operat ,ii de creare a structurilor ˆın care datele
sunt stocate (execute()), precum s ,i de scriere (put()), citire (get()) s ,i s,tergere (delete(), mul-
tiDelete()) a acestora.
Oracle NoSQL Database este disponibil ˆın dou ˘a edit ,ii, Oracle NoSQL Database Com-
munity Edition (CE), gratuit ˘a, s ,i Oracle NoSQL Database Enterprise Edition (EE) cu
licent ,˘a. Ruleaz ˘a pe sistemul de operare Linux.
Oracle NoSQL Database poate fi utilizat ˆın realizarea de aplicat ,ii web cu o arhitectur ˘a
pe trei niveluri: server web, server de aplicat ,ii s ,i baza de date. Pentru a utiliza Oracle

76 PREZENTAREA MODELELOR DE DATE S ¸ I A SOLUT ¸ IILOR DE IMPLEMENTARE NOSQL
NoSQL Database, codul trebuie scris astfel ˆıncˆat s˘a ruleze pe serverul de aplicat ,ii [4]. De
asemenea, trebuie instalate o serie de API-uri specifice limbajelor de programare (Java, C,
JavaScript, Python) ˆın care aplicat ,iile web se implementeaz ˘a.
5.1.3 Redis
Redis este o baz ˘a de date nerelat ,ional ˘a de tip NoSQL, proiectat ˘a dup ˘a modelul cheie-
valoare, foarte rapid ˘a deoarece stocheaz ˘a datele ˆın memoria intern ˘aˆın urm ˘atoarele for-
mate: s ,iruri de caractere, liste, seturi, seturi sortate, structuri de tip ”hash” [5], ”bitmaps”,
”HyperLogLog” s ,i ”geospatial index” [6]. Pentru interogarea datelor, Redis ofer ˘a o mare
varietate de comenzi, structurate ˆın funct ,ie de categoriile de date pe care le suport ˘a, pre-
cum s ,i suport part ,ial pentru realizarea tranzact ,iilor. Tabelul 5.2 prezint ˘a comenzile pen-
tru gestionarea datelor, de publicare/abonare, pentru sortarea datelor, pentru gestiunea
tranzact ,iilor s ,i pentru stabilirea s ,i verificarea timpilor de expirare a cheilor. Descrierea
detaliat ˘a a acestora precum s ,i modul lor de utilizare sunt oferite de [5] s ,i [6].
Redis suport ˘a replicarea asincron ˘a de tip master-slave a datelor dac ˘a este configurat ˆın
acest sens cu ajutorul unor operat ,ii s,i comenzi specifice (BGSA VE, SLA VEOF). Redis are
implementat un mecanism pentru gestiunea datelor ˆın cazul ˆın care unul dintre sistemele
de tip master se defecteaz ˘a, asigur ˆand astfel o bun ˘a disponibilitate a acestora.
Redis este disponibil gratuit sub forma unei arhive s ,i ruleaz ˘a pe sistemul de operare
Linux.
Redis poate fi folosit ˆın realizarea de aplicat ,iiˆın diverse limbaje de programare (C,
.NET, Java, Perl, PHP) prin intermediul unor servicii client.
Tabel 5.2 Comenzi Redis
Tip de dat ˘a/Funct ,ie Comenzi
S,ir de caractere GET, SET, DEL
List˘a RPUSH, LRANGE, LINDEX, LPOP
Set SADD, SMEMBERS, SISMEMBER, SREM
Set sortat ZADD, ZRANGE, ZRANGEBYSCORE, ZREM
Structuri de tip ”hash” HSET, HGET, HGETALL, HDEL
”bitmap” SETBIT, GETBIT, BITOP, BITCOUNT, BITPOS
”HyperLogLog” GET, SET, SADD, SCARD, PFADD, PFCOUNT
”geospatial index” GEOADD, GEODIST, GEOHASH, GEOPOS, GEORA-
DIUS, GEORADIUSBYMEMBER
Publicare/abonare PUBLISH, PSUBSCRIBE, PUNSUBSCRIBE, SUB-
SCRIBE, UNSUBSCRIBE
Sortare SORT
Gestiune tranzact ,ii WATCH, MULTI, EXEC, UNWATCH, DISCARD
Stabilirea s ,i verificarea timpilor
de expirare a cheilorPERSIST, TTL, EXPIRE, EXPIREAT, PTTL, PEXPIRE,
PEXPIREAT

MODELUL DE DATE BIGTABLE 77
5.2 Modelul de date BigTable
ˆIn modelul de date BigTable datele respect ˘a o schem ˘a predefinit ˘a care ofer ˘a avantajul unor
timpi foarte mici de c ˘autare s ,i agregare datorit ˘a modului ˆın care acestea sunt stocate pe
suportul fizic. Modelul BigTable se utilizeaz ˘a pentru gestiunea tabelelor de dimensiuni
mari, cu multe elemente nedefinite s ,i cu valori repetitive. Fiecare ˆınregistrare se identi-
fic˘a printr-o cheie, care poate fi cheia de partit ,ionare. ˆIn modelul BigTable se memoreaz ˘a
consecutiv valorile care nu sunt de tip NULL din fiecare coloan ˘a (memorare orientat ˘a pe
coloan ˘a), spre deosebire de modelul relat ,ional ˆın care se memoreaz ˘a consecutiv fiecare
linie dintr-un tabel (memorare orientat ˘a pe linie) [1]. ˆIn tabelele modelului se pot p ˘astra
s,i versiuni ale valorilor, identificate printr-o amprent ˘a de timp. Memorarea orientat ˘a pe
coloan ˘a este potrivit ˘aˆın gestiunea volumelor mari de date, deoarece cele mai multe in-
terog ˘ari, care se efectueaz ˘a asupra acestora nu returneaz ˘a toate informat ,iile dintr-un tabel.
Memorarea orientat ˘a pe coloan ˘a se poate face s ,i dup ˘a ”familii de coloane”, care cuprind
informat ,ii asem ˘an˘atoare s ,i care pot fi folosite ˆımpreun ˘aˆın interog ˘ari. BigTable este propus
s,i utilizat de Google ˆın aplicat ,iile sale. ˆIn figura 5.2 este prezentat ˘a abordarea relat ,ional ˘a
versus cea BigTable.
Figura 5.2 Modelul relat ,ional vs. modelul BigTable
5.2.1 Apache Cassandra
Apache Cassandra este o baz ˘a de date scalabil ˘a de tip NoSQL, proiectat ˘a dup ˘a modelele
BigTable s ,i cheie-valoare. Cassandra gestioneaz ˘a cantit ˘at,i mari de date structurate, semi-
structurate sau nestructurate, s ,i distribuite ˆın mai multe centre de date s ,i cloud. Cassandra
ofer˘a disponibilitate continu ˘a, scalabilitate liniar ˘a s,i simplitate ˆın operarea f ˘ar˘a defect ,iuni
pe mai multe servere [7].
Cassandra Query Language (CQL) este limbajul prin care datele sunt gestionate ˆın baza
de date Cassandra. At ˆat CQL c ˆat s ,i SQL lucreaz ˘a cu not ,iunea de tabel cu coloane s ,i linii.
Pentru a us ,ura munca programatorilor, CQL foloses ,te o sintax ˘a similar ˘a cu cea a SQL.

78 PREZENTAREA MODELELOR DE DATE S ¸ I A SOLUT ¸ IILOR DE IMPLEMENTARE NOSQL
Principala diferent ,˘a dintre SQL s ,i CQL este aceea c ˘a acesta din urm ˘a nu accept ˘a interog ˘ari
pe mai multe tabele s ,i nici subinterog ˘ari.ˆIn schimb, CQL pune accent pe modelarea de
tip BigTable a datelor. Sintaxele CQL pot fi scrise ˆıntr-o fereastr ˘a de tip consol ˘a, denumit ˘a
”cqlsh”. Astfel, se pot crea tabele s ,i se pot introduce s ,i interoga date. DataStax DevCenter
ofer˘a o interfat ,˘a grafic ˘a pentru scrierea s ,i rularea comenzilor de tip CQL.
Apache Cassandra este disponibil gratuit s ,i poate fi instalat pe sistemele de operare
Linux, Windows s ,i MAC OS X s ,iˆımpreun ˘a cu alte produse cum ar fi DataStax Enterprise
(platform ˘a care satisface cerint ,ele pentru realizarea de aplicat ,ii Internet-of-Things, web
s,i pentru dispozitive mobile). Pentru gestiunea s ,i monitorizarea prin mijloace vizuale ale
Apache Cassandra s ,i DataStax Enterprise se poate instala DataStax OpsCenter.
Apache Cassandra poate fi folosit ˆın realizarea de aplicat ,iiˆın diverse limbaje de progra-
mare (Java, Python, Ruby, .NET, C++, PHP) cu ajutorul unor servicii client.
5.3 Baze de date orientate-document
Bazele de date orientate-document sunt extensii ale modelului de date cheie-valoare, care
suport ˘a ierarhii s ,i imbric ˘ari de perechi cheie-valoare s ,i care sunt organizate sub forma unor
documente. Acestea trebuie s ˘a cont ,in˘a urm ˘atoarele elemente: un c ˆamp, care s ˘a identifice
documentul ˆın mod unic (” id”), s ,i o mult ,ime de perechi de tipul nume-valoare [1]. Numele
din pereche trebuie s ˘a fie unic ˆın mult ,imea de perechi s ,i are tipul de date s ,ir de caractere.
Acesta poate fi specificat ˆın formatele JavaScript Object Notation (JSON), Binary JSON
(BSON), Extensible Markup Language (XML) s ,i Binary Large OBject (BLOB) de tipul
PDF s ,i XLS. Valoarea din pereche poate avea tipurile de date: s ,ir de caractere, num ˘ar, vec-
tor de acelas ,i tip de dat ˘a, dat ˘a calendaristic ˘a, etc. [1]. Bazele de date orientate-document
prezint ˘a caracteristici care asigur ˘a scalabilitatea, deoarece toate datele necesare pentru cele
mai multe exploat ˘ari sunt incluse ˆıntr-un singur document. Din acest motiv sunt utilizate ˆın
realizarea de aplicat ,ii software din diverse domenii de activitate (comert ,electronic, pres ˘a,
meteo, etc.). ˆIn figura 5.3 este prezentat ˘a abordarea relat ,ional ˘a versus modelul orientat-
document ˆın format JSON.
5.3.1 MongoDB
MongoDB este o baz ˘a de date orientat ˘a-document, scalabil ˘a s,i proiectat ˘aˆın as ,a fel ˆıncˆat
s˘a faciliteze dezvoltarea de aplicat ,ii. Aceste caracteristici au f ˘acut din MongoDB cea mai
utilizat ˘a solut ,ie de tip NoSQL. O ˆınregistrare ˆıntr-o baz ˘a de date MongoDB este de fapt
un document ˆın care datele sunt structurate sub forma unor perechi c ˆamp-valoare similare
cu obiectele tip JSON [8]. MongoDB stocheaz ˘a documentele ˆın colect ,ii, care corespund
tabelelor din modelul relat ,ional. Documentele dintr-o colect ,ie nu trebuie s ˘a aib ˘a acelas ,i
format, dar trebuie s ˘a aib ˘a un identificator unic, denumit id.
MongoDB pune la dispozit ,ia programatorilor o fereastr ˘a interactiv ˘a, MongoDB Shell,
ˆın care se pot introduce date ˆın documente (insert()), se pot actualiza s ,i s,terge cele existente
(update(), delete()), se pot crea indecs ,i (createIndex()), se pot obt ,ine diverse situat ,ii plec ˆand
de la datele existente (find(), sort()) s ,i se pot aplica metode de agregare (aggregate()).
MongoDB ruleaz ˘a pe sistemele de operare Linux, Windows s ,i MAC OS X. Instalarea
implic ˘a parcurgerea unor pas ,i bine descris ,iˆın documentat ,ie [8]. Dup ˘a instalare, serviciului
aferent acestei baze de date trebuie pornit.

MODELUL DE DATE DE TIP GRAF 79
Figura 5.3 Modelul relat ,ional vs. bazele de date orientate-document
MongoDB poate fi folosit ˆın realizarea de aplicat ,iiˆın diverse limbaje de programare (C,
C++, C #, Java, Python, Ruby, PHP, Perl). Pentru aceasta, trebuie instalate biblioteci client
ale acestor limbaje.
5.4 Modelul de date de tip graf
Modelul de date de tip graf utilizeaz ˘a pentru reprezentarea datelor elemente din teoria
grafurilor: noduri, relat ,ii s ,i propriet ˘at,i.ˆIntr-un model de tip graf fiecare nod reprezint ˘a o
entitate s ,i fiecare muchie reprezint ˘a o leg ˘atur˘a sau relat ,ieˆıntre dou ˘a noduri. Un nod dintr-o
baz˘a de date de tip graf este definit de un identificator unic, un set de muchii de ies ,ire
s,i/sau intrare s ,i de un set de propriet ˘at,i exprimat sub forma unor perechi cheie-valoare. O
muchie este definit ˘a de un identificator unic, un punct de ˆıncepere s ,i/sau de terminare s ,i de

80 PREZENTAREA MODELELOR DE DATE S ¸ I A SOLUT ¸ IILOR DE IMPLEMENTARE NOSQL
un set de propriet ˘at,i. Modelul de tip graf este potrivit pentru analiza conexiunilor dintre
date, motiv pentru care este utilizat cu succes ˆın aplicat ,iile care extrag noi cunos ,tint ,e din
informat ,iile existente s ,iˆın aplicat ,iile de tip ret ,ele sociale. ˆIn figura 5.4 este prezentat ˘a
abordarea relat ,ional ˘a versus cea de tip graf.
Figura 5.4 Modelul relat ,ional vs. modelul de tip graf
5.4.1 Neo4j
Neo4j este o baza de date de tip NoSQL care are la baz ˘a modelul de tip graf. Neo4J
reprezint ˘a o solut ,ie optim ˘aˆın modelarea s ,i interogarea volumelor mari de date str ˆans
relat ,ionate s ,i care pot fi reprezentate prin structuri de tip graf. ˆIn Neo4j datele sunt reprezen-
tate prin noduri s ,i relat ,ii care pot avea propriet ˘at,i. O relat ,ie implic ˘a dou ˘a noduri s ,i se carac-
terizeaz ˘a prin direct ,ie s ,i prin nume. Relat ,iile au un rol important ˆın cadrul Neo4j deoarece
traverseaz ˘a grafului realiz ˆand astfel manipularea datelor [9].
Cypher Query Language (Cyber) este limbajul prin care datele sunt gestionate ˆın baza
de date Neo4j. Cypher este un limbaj declarativ, alc ˘atuit din urm ˘atoarele clauze: START,
MATCH, WHERE, RETURN, CREATE, DELETE, SET, FOREACH s ,i WITH.
Neo4j este disponibil ˆın dou ˘a edit ,ii, Community Edition, gratuit ˘a, s ,i Enterprise Edition,
cu licent ,˘a. Ruleaz ˘a pe sistemele de operare Linux, Windows s ,i MAC OS X.

EXERCIT ,II 81
Neo4j poate fi folosit ˆın realizarea de aplicat ,iiˆın diverse limbaje de programare (Java,
.NET, JavaScript,Python, Ruby, PHP). Pentru aceasta, trebuie instalate servicii client ale
acestor limbaje.
EXERCIT ,II
5.1 S˘a se elaboreze prezent ˘ari pentru urm ˘atoarele solut ,ii NoSQL: Riak, Apache HBase,
Apache CouchDB, Couchbase Server, Clusterpoint Server, RavenDB, FlockDB s ,i Alle-
groGraph.
REFERINT ,E BIBLIOGRAFICE
1. C. V . Rusu, Curs 14. Baze de date noSQL http://www.rusu.coneural.org/teaching/MLR5027/-
2014.BD.Curs.14.pdf/, 2014.
2. A. Copie, Baze de date cheie-valoare: caracteristici specifice, http://ctrl-d.ro/tips-and-
tricks/baze-de-date-cheie-valoare-caracteristici-specifice/, 2014.
3. ***, Amazon DynamoDB Getting Started Guide, http://docs.aws.amazon.com/amazondynamo-
db/latest/gettingstartedguide/dynamodb-gsg.pdf, 2015.
4. ***, Oracle NoSQL Database Concepts Manual (12c Release 1),
http://docs.oracle.com/cd/NOSQL/html/ConceptsManual/Oracle-NoSQLDB-Concepts.pdf,
2015.
5. J. L. Carlson, Redis in Action, Ed. Manning, 2013.
6. ***, An introduction to Redis data types and abstractions, http://redis.io/topics/data-types-intro,
2015.
7. ***, Apache Cassandra 2.1 Documentation, http://docs.datastax.com/en/cassandra/-
2.1/pdf/cassandra21.pdf, 2015.
8. ***, Getting Started with MongoDB (MongoDB Shell Edition),
https://docs.mongodb.org/getting-started/shell/, 2015.
9. I. Mos ,neagu, ”NEO4j Graph Database modelarea datelor interconectate,” Today Software Mag-
azine, 12:37-38, 2013.

Similar Posts