Sunteți pe pagina 1din 212

07.10.

2019

BAZE DE DATE

Aspecte conceptuale privind


organizarea datelor

13

Organizarea datelor
Organizarea datelor presupune:
• definirea şi structurarea datelor în colecţii de date
omogene în memoria internă sau în memoria externă;
• stabilirea legăturilor între date, conform unui model de
date.

Scopul organizării datelor: regăsirea automată a


datelor după diverse criterii şi forme.

14

14

7
07.10.2019

Organizarea datelor
Memoria internă vs. Memoria externă

Criteriu Memoria internă Memoria externă


Cost Mare Mic
Viteză Mare Mică
Capacitate Mică Mare
Persistenţă Nu Da
Organizare date Variabile, constante, Fişiere, baze de date,
masive etc. depozite de date

15

15

Obiective specifice
• Minimizarea timpului de acces;
• Minimizarea spaţiului de memorie ocupat;
• Eliminarea redundanţei datelor;
• Reprezentarea, pe cât este posibil, a tuturor
legăturilor dintre obiectele, fenomenele, procesele
economice pe care aceste date le reprezintă;
• Asigurarea independenţei datelor faţă de programe şi
invers.

16

16

8
07.10.2019

Paradigma DIKUW
(Data > Information > Knowledge > Understanding > Wisdom)

Înţelepciune

Înţelegere

Cunoştinţe

Informaţii

Date

17

17

• Fapte de bază, neprelucrate, simboluri


• Obţinute prin observaţii, experimente sau calcule
Date

• Date prelucrate, organizate, înzestrate cu semnificaţie, sens


Informaţii

• Ansambluri de informaţii dobândite, utile, care pot genera decizii


• Combinaţii de informaţii, valori, experienţe şi reguli
Cunoştinţe

• Proces analitic prin care se sintetizează informaţii derivate, în vederea adăugării unui plus de
cunoaştere
Înţelegere • Se folosesc cunoştinţe pentru verificarea ipotezelor şi observarea de contradicţii, ambiguităţi

• Proces de extrapolare prin care se folosesc cunoştinţele şi înţelegerea pentru atingerea


scopurilor şi asistarea deciziilor
Înţelepciune • Se adaugă valoare prin înţelegerea principiilor

18

18

9
07.10.2019

Evoluţia organizării datelor (1)

Fişiere de Baze de Depozite de Baze de


date date date date NoSQL

19

19

Fişiere de date
• Fişierul reprezintă o colecţie organizată de date,
omogenă din punct de vedere al conţinutului şi
al prelucrării, stocată pe un suport de memorie
externă;

• Datele dintr-un fişier sunt structurate în


înregistrări logice.

20

20

10
07.10.2019

Tipuri de acces la date

• Acces secvenţial

• Acces direct

• Acces dinamic (mixt)

21

21

Moduri de organizare clasică a


datelor
Organizare secvenţială
◦ înregistrări dispuse fără o ordine prestabilită;
◦ actualizarea presupune în general recrearea fişierului.
Organizare relativă
◦ înregistrări dispuse în fişier una după alta şi numerotate
(de către sistem) de la 0 sau 1 la numărul maxim de
realizare.
Organizare indexată
◦ se ataşează unul sau mai multe fişiere de indecşi.

22

22

11
07.10.2019

Moduri de organizare complexă a


datelor
Organizare partiţionată
◦ înregistrările din fişier sunt grupate în mai multe partiţii,
accesul fiind direct, prin determinarea poziţiei înregistrării
căutate în urma aplicării unui algoritm de
partiţionare/dispersie (hashing).
Organizare multiindexată
◦ este o extindere a indexării prin utilizarea mai multor chei
alese de programator.
Organizare inversă
◦ se foloseşte un fişier “invers” care realizează maparea datelor
din fişierul de bază, pe baza poziţiilor de apariţie ale
elementelor considerate atomice în fişierul respectiv.

23

23

Evoluţia organizării datelor (2)

Fişiere de Baze de Depozite de Baze de


date date date date NoSQL

24

24

12
07.10.2019

Baze de date

O bază de date reprezintă un ansamblu de colecţii


de date aflate în interdependenţă, împreună cu
dicţionarul de date care conţine descrierea datelor
şi a legăturilor dintre ele, fapt ce asigură
independenţa datelor faţă de aplicaţii.

25

25

Clasificarea bazelor de date


Din punctul de vedere al modului de organizare,
structurare şi accesare a datelor:
➢ Baze de date ierarhice
Generaţia I
➢ Baze de date reţea
➢ Baze de date relaţionale Generaţia II

➢ Baze de date orientate-obiect Generaţia III

26

26

13
07.10.2019

Clasificarea bazelor de date

Generația IV
(2010+)
Generația III • BD NoSQL
(1990)
Generația II • BD orientate-
(1980) obiect

• BD relaționale

Generația I
(1970)
• BD ierarhice și
rețea

27

Clasificarea bazelor de date


Din punctul de vedere al domeniului de aplicare,
bazele de date se împart în:
➢ Baze de date universale
➢ Baze de date specializate (multimedia, spațiale,
mobile)

28

28

14
07.10.2019

Clasificarea bazelor de date


Din punctul de vedere al gradului de centralizare a
datelor, bazele de date pot fi:
➢ Baze de date centralizate
➢ Baze de date distribuite

29

29

Sisteme de gestiune a bazelor


de date
Ansamblu complex de programe care asigură
interfaţa între o bază de date şi utilizatorii acesteia.

30

30

15
07.10.2019

Evoluţia organizării datelor (3)

Fişiere de Baze de Depozite de Baze de


date date date date NoSQL

31

31

Depozite de date
Depozitele de date sunt destinate managerilor şi
analiştilor în procesul luării deciziilor strategice privind
dezvoltarea şi viitorul organizaţiilor.
Furnizează o sursă integrată şi centralizată de date,
separată de sistemul operaţional.
Datele extrase sunt utilizate în analize dinamice care
presupun schimbări de perspectivă asupra datelor şi
vizualizări ale acestora de la un nivel detaliat la unul
sintetic, agregat şi invers.

32

32

16
07.10.2019

Obiective
• Depozitul de date trebuie să asigure accesul la datele
organizaţiei;
• Utilizarea datelor din depozite direct în analize, fără
alte prelucrări suplimentare;
• Stocarea de date istorice;
• Orientarea depozitului pe subiectele importante ale
procesului economic: clienţi, furnizori, produse,
activităţi.

33

33

Evoluţia organizării datelor (4)

Fişiere de Baze de Depozite de Baze de


date date date date NoSQL

34

34

17
07.10.2019

Baze de date NoSQL


Au apărut în contextul Big Data, pentru a rezolva
problema regăsirilor rapide pe aceste volume mari de
date;
Permit lucrul eficient cu date nestructurate, precum e-
mail sau multimedia;
Lucrează cu texte XML, CSV sau JSON, stochează
documente întregi, obiecte, coloane cu valori ale unor
caracteristici etc.;
Folosesc mai multe limbaje de interogare diferite
(NoSQL - “not only” SQL).

35

35

CURSUL 2...
Elemente de teoria bazelor de date

Modele de date

Organizarea datelor în bazele de date

36

18
22.10.2019

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

BAZE DE DATE

ELEMENTE DE TEORIA
BAZELOR DE DATE

BUCUREŞTI
2019-2020
Conf.univ.dr. IULIANA BOTHA (ȘIMONCA)
iuliana.botha@ie.ase.ro

Elemente de teoria bazelor de date


Valoare
Entitate
Instanţă
Atribut
Modele de
Date date
Sistem

Baze de date
Metadate

SBD
SGBD

1
22.10.2019

Entitatea

O entitate desemnează un obiect concret sau


abstract, reprezentat prin proprietăţile sale.

Mai multe entităţi de acelaşi tip formează o clasă


de entităţi.

Instanţa

O instanţă desemnează o singură manifestare a unei


entităţi

2
22.10.2019

Atributul
 Este o proprietate care:
 descrie o entitate
 cuantifică o entitate
 califică o entitate
 clasifică o entitate
 specifică o entitate

 O entitate se exprimă prin unul sau mai multe


atribute.
 Atribut = câmp, caracteristică.

Atributul
 Definirea unui atribut poate fi extinsă prin impunerea
unui tip de dată, a unui format de reprezentare, a unei
valori implicite, a restricţiilor de integritate.

 Atribute cheie, non-cheie, opţionale, obligatorii

3
22.10.2019

Valoarea
 Un atribut are o singură valoare, la un moment
dat, pentru fiecare instanţă a entităţii.
 Atributele pot avea valori:
 Volatile
 Non-volatile
 Elementare
 Compuse

 Orice proprietate a unei entităţi poate fi


exprimată prin una sau mai multe perechi
(atribut, valoare).
7

Entitate (obiect): SALARIAT

Marcă Nume Funcţie Salariu


N(3) C(30) C(15) N(8)

101 Popescu Ion economist 3500

caracteristici
(atribute, câmpuri)
valoare instanţă
(înregistrare, articol)
Metadate:
date despre date;
descrierea detaliată a datelor, formatul şi caracteristicile instanţelor populate
cu date;
stocate în dicţionarul bazei de date.

4
22.10.2019

Terminologie alternativă

Fişiere Teoria relaţională BD relaţionale

Fişier Relaţie Tabelă

Înregistrare Tuplu Rând

Câmp Atribut Coloană

Sistem
Un sistem desemnează un ansamblu de entităţi
între care există legături variabile de
intercondiţionare şi a cărui funcţionare,
desfăşurată într-un mediu dinamic, pe care îl
influenţează şi de care este influenţat, permite
atingerea unor obiective cu evoluţie dinamică.

10

5
22.10.2019

Sistemul Sistemul decizional


informaţional (de management)

Sistemul
informatic

Sistemul operaţional
(condus)

11

Sistemul informatic
Este inclus în cadrul sistemului informaţional şi are ca
obiect de activitate, în general, procesele de
culegere, verificare, transformare, stocare şi
prelucrare automată a datelor.
Componentele sistemului informatic:
◦ Hardware
◦ Software
◦ Comunicaţii
◦ Baza ştiinţifico-metodologică
◦ Baza informaţională
◦ Resursele umane

12

6
22.10.2019

BAZE DE DATE

MODELE DE DATE

Modelul de date
Model abstract care descrie modul în care datele
sunt reprezentate şi accesate, utilizând formalizări
matematice.
Elementele modelului de date:
1. Structura de date

2. Operatorii

3. Restricţiile de integritate

14

7
22.10.2019

Structura de date
Modalitate de stocare a informaţiilor într-un sistem
informatic, astfel încât acestea să poată fi utilizate în mod
eficient.
Poate fi definită ca o colecţie de date între care s-au stabilit
o serie de legături care conduc la un anumit mecanism de
selecţie şi identificare a componentelor.
Categorii de legături:
◦ legături de apartenenţă a datelor la entitate;
◦ legături dintre entităţile de acelaşi tip sau de tipuri diferite.

15

Structura de date
În funcţie de tipurile de legături există cinci structuri logice
de date şi anume:
◦ structura punctuală,
◦ structura liniară: masivele unidimensionale (vectorii), masivele
multidimensionale (matrice), stiva şi listele.
◦ structura arborescentă (arborii)
◦ structura reţea
◦ structura relaţională (colecţie de date structurate în tabele de date
elementare fără o legătură fizică între ele).

În structura relaţională, modalitatea de stocare a datelor se


implementează cu ajutorul LDD (limbajul de descriere a
datelor).
16

8
22.10.2019

Operatorii
Acţionează asupra structurilor de date pentru
operaţii de prelucrare: actualizare, consultare,
sortare.
Există operatori specifici fiecărui model de date.
În structura relaţională se implementează cu
ajutorul LMD (limbajul de manipulare a datelor).

17

Restricţiile de integritate
Au rolul de a păstra datele corecte, consistente şi
coerente în procesul de culegere, stocare,
prelucrare, transmitere şi extragere a acestora.
Se pot descrie prin LDD, dar nu numai.

18

9
22.10.2019

Tipologia modelelor de date


• Modelul de date arborescent
• Modelul de date reţea
• Modelul de date relaţional
• Modelul de date orientat-obiect

19

BAZE DE DATE

ORGANIZAREA DATELOR
ÎN BAZE DE DATE

10
22.10.2019

Baze de date
Conform CODASYL, o bază de date este definită ca
una sau mai multe colecţii de date aflate în
interdependenţă, împreună cu un fişier de
descriere globală a datelor şi a legăturilor dintre
acestea (dicţionarul de date).

21

Caracteristici ale unei baze de


date
 organizată pe trei niveluri (conceptual, logic, fizic);
 structurată conform unui model de date;
 coerentă prin restricţiile de integritate şi tehnicile de
protecţie a datelor;
 cu o redundanţă minimă şi controlată, prin
implementarea unui model de date şi prin aplicarea
unei tehnici de proiectare;
 accesibilă mai multor utilizatori în timp util.

22

11
22.10.2019

Niveluri de organizare a datelor în


bazele de date
Nivelul conceptual
 Reprezintă viziunea proiectantului bazei de date asupra
acesteia.
 Are un grad ridicat de abstractizare şi surprinde necesităţile
funcţionale şi informaţionale.
 Această viziune este independentă de aplicaţiile care vor fi
dezvoltate pentru diferiţi beneficiari.
 Rezultatul modelării conceptuale este schema conceptuală, o
reprezentare a realităţii pe care baza de date o transcrie.
 Schema conceptuală se obţine conform unui anumit model
de date şi cu o tehnică de proiectare adecvată.
23

Niveluri de organizare a datelor în


bazele de date
Nivelul logic

 Reprezintă viziunea dezvoltatorului de aplicaţie sau a


programatorului asupra datelor pentru o anumită
aplicaţie, într-o anumită organizaţie.
 Rezultatul modelării datelor la nivel logic este schema
logică (externă), ca parte din schema conceptuală,
independentă de suportul tehnic de informaţie
(independenţa fizică).
 Programele de aplicaţie implementează schema logică a
datelor.

24

12
22.10.2019

Niveluri de organizare a datelor în


bazele de date
Nivelul fizic

 Reprezintă viziunea inginerului de sistem asupra datelor.


 Rezultatul modelării la nivelul fizic este schema internă
(fizică) care se defineşte în termeni de tabele, fişiere şi
înregistrări fizice.

25

Tipologia bazelor de date


Generaţia 1:
 Baze de date ierarhice şi reţea
SGBD: IMS, IDS, Total, IDMS
Generaţia 2:
 Baze de date relaţionale
SGBD: IBM DB2, Oracle, MS SQL Server, MySQL
Generaţia 3:
 Baze de date orientate-obiect
SGBD: O2, GemStone, ObjectStore, Jasmine

26

13
22.10.2019

Etape de realizare a unei baze de


date
1. Analiza problemei de rezolvat
◦ Studiul situaţiei existente Diagrama
Entitate-Asociere (EA)
◦ Analiza cerinţelor rezultate
2. Proiectarea bazei de date
◦ Alegerea SGBD
Schemele BD
◦ Proiectarea schemelor bazei de date
3. Implementarea bazei de date
4. Punerea în funcţiune şi exploatarea bazei de date
5. Întreţinerea bazei de date
27

Sistemul de baze de date (SBD)


Reprezintă un ansamblu de elemente
intercondiţionate care contribuie la realizarea şi
exploatarea unei aplicaţii cu baze de date.
Componentele unui SBD:
◦ Date
◦ Software
◦ Elemente auxiliare

28

14
22.10.2019

Arhitectura pe componente a
unui SBD

29

Datele
 Colecţiile cu datele propriu-zise: între aceste colecţii de date
sunt legături de diferite tipuri (unu la unu, unu la mulţi, mulţi
la mulţi), fiecare colecţie trebuind să fie legată de cel puţin o
altă colecţie din baza de date;
 Dicţionarul de date: zonă separată a bazei de date care
conţine informaţii despre baza de date şi cuprinde structura
de date, restricţiile de integritate, viziunile, clusterele etc.;
 Fişierele anexe: conţin informaţii auxiliare bazei de date

30

15
22.10.2019

Componenta software
 Are rolul de a realiza şi exploata baza de date
 Ansamblu complex de programe utilizate pentru
realizarea aplicaţiilor cu baze de date, care conţine:
◦ sistemul de gestiune a bazelor de date cu ajutorul
căruia utilizatorul poate realiza şi exploata baza de
date;
◦ programele de aplicaţie dezvoltate de către
utilizatori.

31

Elemente auxiliare
 setul de proceduri automate (rutine) şi manuale conform
cărora se va desfăşura activitatea în cadrul sistemului de
baze de date;
 reglementările legale privind dreptul de utilizare a unor
produse şi servicii necesare în sistemul de baze de date;
 reglementările administrative ale organizaţiei în care se va
realiza sistemul de baze de date;
 mijloacele hardware utilizate pentru buna funcţionare a
sistemului de baze de date;
 personalul implicat pentru realizarea şi utilizarea sistem de
baze de date, pe categorii de utilizatori.
32

16
22.10.2019

Categorii de utilizatori
 Utilizatori finali (end-users)
◦ Au altă pregătire decât cea în informatică şi utilizează
calculatorul ocazional sau zilnic (utilizatorii intensivi)
 Specialişti
◦ Au pregătire de profil şi creează produse informatice
 Cercetători în informatică
◦ Au pregătire de profil şi creează concepte

33

Sistemul de gestiune a bazelor de


date (SGBD)
Constituie un ansamblu complex de programe, care
asigură interfaţa între o bază de date şi utilizatorii
acesteia.

Reprezintă partea principală a componentei


software a unui SBD, care interacţionează cu toate
celelalte componente, precum şi cu exteriorul
sistemului.

34

17
22.10.2019

CURSUL 3...
Modelul de date relaţional

35

18
29.10.2019

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

BAZE DE DATE

MODELUL DE DATE RELAŢIONAL

BUCUREŞTI
2019-2020
Conf.univ.dr. IULIANA BOTHA (ȘIMONCA)
iuliana.botha@ie.ase.ro

Modelul de date relaţional

 Structura relaţională

 Operatorii relaţionali

 Restricţiile de integritate

1
29.10.2019

Structura relaţională
 Domeniu
 Relaţie
 Atribut
 Tuplu
 Cheie
 Schemă

Domeniul
Reprezintă un ansamblu de valori, caracterizat
printr-un nume.
Un domeniu se poate defini:
◦ explicit, prin enumerarea tuturor valorilor aparţinând
acestuia
◦ implicit, prin precizarea proprietăţilor pe care le au valorile
din cadrul domeniului respectiv
Exemplu:
D1 : {"F", "M" }
D2 : {x | x  N, x  [0, 100]}
D3 : {s | s=şir de caractere}

2
29.10.2019

Domeniul
Pentru un ansamblu de domenii D1, D2, ..., Dn
produsul cartezian al acestora reprezintă ansamblul
tuplurilor <v1, v2, ..., vm>, unde: v1 este o valoare
aparţinând domeniului D1, v2 este o valoare din D2
ş.a.m.d.
De exemplu, tuplurile:
<"Maria", "F", 50>,
<"Vasile", "M", 15>,
<"Vasile", "M", 20>,
<"Vasile", "F", 100>
aparţin produsului cartezian: D3 D1 D2.

Relaţia
Relaţia reprezintă un subansamblu al produsului cartezian al
mai multor domenii, care este caracterizat printr-un nume şi
conţine tupluri cu semnificaţie.
Într-o relaţie, tuplurile trebuie să fie distincte (nu se admit
duplicări).

Să presupunem că se acordă o anumită semnificaţie


valorilor domeniilor D1, D2, D3.
Numai unele dintre tuplurile produsului cartezian: D3 D1
D2 pot avea o semnificaţie şi anume cele care conţin
numele, sexul şi vârsta aceleiaşi persoane

3
29.10.2019

Relaţia
R : {<a, 1, α >, <b, 2, β >}
Reprezentare ca tabel bidimensional
D3 D1 D2
a 1 α
b 2 β

Extensia unei relaţii: ansamblul tuplurilor care compun


la un moment dat relaţia
Numărul tuplurilor dintr-o relaţie reprezintă cardinalul
relaţiei, în timp ce numărul valorilor dintr-un tuplu
defineşte gradul acesteia.

Atributul
Atributul reprezintă coloana unei tabele de date,
caracterizată printr-un nume. Numele coloanei (atributului)
exprimă, de regulă, semnificaţia valorilor din cadrul coloanei
respective.

Tuplul
Tuplul reprezintă linia unei tabele de date şi nu are nume.

Cheia
Cheia desemnează un atribut sau un ansamblu de atribute
care are rolul de a identifica o înregistrare dintr-o tabelă.

4
29.10.2019

Schema unei relaţii


Aceasta este alcătuită din numele relaţiei, urmat de
lista atributelor, pentru fiecare atribut precizându-
se domeniul asociat.

R (A1:D1, ..., An:Dm)

R: A1:D1 ... An:Dm

Operatorii modelului relaţional

 Operatori din algebra relaţională (AR);

 Operatori din calculul relaţional (CR).

5
29.10.2019

Algebra relaţională
Introdusă de E.F.Codd ca o colecţie de operaţii pe relaţii
în care operatorii descriu tipuri de prelucrări asupra
relaţiilor, operanzii sunt relaţii, iar rezultatul este, de
asemenea, o relaţie.
◦ Operatori de bază:
 Universali: reuniunea, diferenţa, produsul
cartezian
 Specifici: proiecţia, selecţia şi joncţiunea
◦ Operatori derivaţi: intersecţia şi diviziunea
◦ Extensii ale algebrei relaţionale standard:
complementarea unei relaţii, spargerea unei relaţii şi
închiderea tranzitivă.

R A1 A2 A3 A4

Proiecţia
Definită asupra unei relaţii R, proiecţia constă din
construirea unei noi relaţii P, în care se regăsesc numai
acele atribute din R specificate explicit în cadrul
operaţiei.
Implică efectuarea unor tăieturi verticale asupra relaţiei
R şi care pot avea ca efect apariţia unor tupluri
duplicate, care se cer a fi eliminate.
Se trece de la o relaţie de grad n la o relaţie de grad p,
mai mic decât cel iniţial (p < n), adică de la un spaţiu de
n dimensiuni la unul cu mai puţine dimensiuni, ceea ce
explică şi numele de proiecţie.

6
29.10.2019

Proiecţia
 Ai,……, Am (R)
R[Ai,..., Am]
PROJECT(R, Ai,..., Am)

ANGAJATI  Varsta,salariu
Nume Varsta Salariu Varsta Salariu
Ion 25 3000 25 3000
Varsta Salariu
Mihai 30 2000 30 2000
25 3000
Anca 25 3000 25 3000
30 2000
Sofia 30 2000 30 2000
Mircea 30 2000 30 2000

Exemplu SQL

SELECT DISTINCT varsta, salariu

FROM angajati;

7
29.10.2019

R A1 A2 A3 A4

Selecţia
Reprezintă operaţia definită asupra unei relaţii R,
care constă din construirea unei relaţii S, cu aceeaşi
schemă ca R şi a cărei extensie este constituită din
acele tupluri din R care satisfac condiţia menţionată
explicit în cadrul operaţiei.
Implică efectuarea de tăieturi orizontale asupra
relaţiei R, adică eliminarea unor tupluri ale relaţiei.

Selecţia
δcondiţie (R)
R [condiţie]
RESTRICT (R, condiţie)

ANGAJATI
Nume Varsta Salariu δ(salariu>2000 or nume=Mircea)
Ion 25 3000 Nume Varsta Salariu
Mihai 30 2000 Ion 25 3000
Anca 25 3000 Anca 25 3000
Sofia 30 2000 Mircea 30 2000
Mircea 30 2000

8
29.10.2019

Exemplu SQL

SELECT *

FROM angajati

WHERE salariu>2000 or nume=‘Mircea’;

Produsul cartezian
Este o operaţie definită pe două relaţii, R1 şi R2.
Pe baza relaţiilor R1 şi R2 se construieşte o nouă
relaţie, R3, a cărei schemă se obţine prin
concatenarea schemelor relaţiilor R1 şi R2 şi a cărei
extensie cuprinde toate combinaţiile tuplurilor din
R1 cu cele din R2.

9
29.10.2019

Produsul cartezian
R1 x R2
PRODUCT (R1, R2) Angajati x Comenzi
ID Nume NRC Data ID
TIMES (R1, R2)
1 Ion 1 01.01.11 1
Angajati Comenzi
1 Ion 2 07.01.11 2
ID Nume NRC Data ID
1 Ion 3 08.01.11 3
1 Ion 1 01.01.11 1
1 Ion 4 08.01.11 2
2 Mihai 2 07.01.11 2
1 Ion 5 09.01.11
3 Anca 3 08.01.11 3
2 Mihai 1 01.01.11 1
4 Sofia 4 08.01.11 2
2 Mihai 2 07.01.11 2
5 Mircea 5 09.01.11
…… ……. …… …… ……

Exemplu SQL
SELECT *
FROM angajati, comenzi;

SELECT *
FROM angajati CROSS JOIN comenzi;

10
29.10.2019

Joncţiune
Reprezintă operaţia definită pe două relaţii, R1 şi R2,
care constă din construirea unei noi relaţii R3, prin
concatenarea unor tupluri din R1 cu tupluri din R2,
pe baza unei condiţii specificate explicit în cadrul
operaţiei.
Extensia relaţiei R3 va conţine combinaţiile acelor
tupluri care satisfac condiţia de concatenare.

Tipuri de joncţiuni
 Internă (inner join)
 De egalitate
 Naturală
 De neegalitate
 Externă (outer join)
 La stânga
 La dreapta
 Completă

11
29.10.2019

Tipuri de joncţiuni

Joncţiunea de egalitate şi naturală

R1 ⋈ R2

JOIN (R1, R2, condiţie)

JOIN (R1, R2, condiţie) = RESTRICT (PRODUCT (R1,


R2), condiţie)

12
29.10.2019

Joncţiunea de egalitate
Operaţie definită pe două relaţii, R1 şi R2, prin care
este construită o nouă relaţie, R3, a cărei schemă
este obţinută prin reuniunea atributelor din
relaţiile iniţiale;
Extensia relaţiei R3 conţine tuplurile obţinute prin
concatenarea tuplurilor din R1 cu tuplurile din R2
care au aceleaşi valori pentru atributele folosite în
condiţia de joncţiune.

Joncţiunea de egalitate
Angajati Comenzi

13
29.10.2019

Exemple SQL
SELECT *
FROM angajati a, comenzi c
WHERE a.id_ang=c.id_ang;

SELECT *
FROM angajati a JOIN comenzi c
ON a.id_ang=c.id_ang;

SELECT *
FROM angajati a JOIN comenzi c
USING (id_Ang);

Joncţiunea naturală
Presupune existenţa unor atribute având aceeaşi
denumire în ambele relaţii

SELECT * FROM angajati a NATURAL JOIN comenzi c;

14
29.10.2019

Joncţiunea externă
Operaţie prin care din două relaţii, R1 şi R2, se
obţine o nouă relaţie, R3, prin joncţiunea relaţiilor
iniţiale
La noua relaţie R3 sunt adăugate şi tuplurile din R1
şi/sau R2 care nu au participat la joncţiune.
Aceste tupluri sunt completate în relaţia R3 cu valori
NULL pentru atributele relaţiei corespondente (R2,
respectiv R1).
◦ R1 ⋈ R2
◦ EXT-JOIN (R1, R2, condiţie)

Joncţiunea la stânga

15
29.10.2019

Joncţiunea la dreapta

Joncţiunea completă

16
29.10.2019

Reuniunea
Este o operaţie definită pe două relaţii, R1 şi R2,
ambele cu aceeaşi schemă, prin care se obţine o
nouă relaţie R3, cu schema identică cu R1 şi R2, dar
având ca extensie tuplurile din R1 şi R2, luate
împreună o singură dată.
◦ R1  R2
◦ OR (R1, R2)
◦ APPEND (R1, R2)
◦ UNION (R1, R2)

Exemplu UNION

Clienti  Angajati Clienti  Angajati

17
29.10.2019

Exemplu UNION ALL

Clienti  Angajati

Diferenţa
Este o operaţie definită pe două relaţii, R1 şi R2,
ambele cu aceeaşi schemă, prin care se obţine o
nouă relaţie, R3, cu extensia formată din acele
tupluri ale relaţiei R1 care nu se regăsesc şi în relaţia
R2.

◦ R1 – R2
◦ REMOVE (R1, R2)
◦ MINUS (R1, R2)

18
29.10.2019

Diferenţa

NU!
DE CE?

Clienti – Comenzi
Clienti – Comenzi

DA

Ce afişează?

19
29.10.2019

Intersecţia
Reprezintă o operaţie definită pe două relaţii, R1 şi
R2 ambele cu aceeaşi schemă, prin care se obţine o
nouă relaţie, R3, cu schema identică cu a relaţiilor
operand şi cu extensia formată din tuplurile din R1
şi R2.

◦ R1  R2
◦ INTERSECT (R1, R2)
◦ AND (R1, R2)

Intersecţia

Clienti  Comenzi

20
29.10.2019

Ce afişează?

Alţi operatori
 Diviziunea
 Complementarea
 Spargerea unei relaţii
 Închiderea tranzitivă

21
29.10.2019

Calculul relaţional
Introdus, ca şi algebra relaţională de către E.F.
Codd.
Este o adaptare a calculului cu predicate de ordinul
1 (domeniu al logicii matematice) la domeniul
bazelor de date relaţionale.
Predicatul este o relaţie care se stabileşte între
anumite elemente şi care are drept argumente
variabile care nu sunt predicate.

Calculul relaţional
Variabila poate fi de tip tuplu (valorile sunt dintr-un
tuplu al unei tabele) sau domeniu (valorile sunt
dintr-un domeniu al unei tabele).

Rezultă:
◦ Calcul relaţional orientat pe tuplu
◦ Calcul relaţional orientat pe domeniu

22
29.10.2019

Operatori
 Conectivele (conectorii):
• Conjuncţia 
• Disjuncţia 
• Negaţia 
 Cuantificatorii:
• Cuantificatorul existenţial 
• Cuantificatorul universal 

Restricţiile de integritate
Restricţiile de integritate, denumite şi reguli de
integritate, definesc cerinţele pe care trebuie să le
satisfacă datele din cadrul bazei de date pentru a
putea fi considerate corecte şi coerente în raport cu
domeniul pe care îl reflectă.

23
29.10.2019

Restricţiile de integritate
 Restricţii structurale (minimale):
 De unicitate a cheii
 Referenţială
 Entităţii

 Restricţii de comportament:
 De domeniu
 Temporare

Restricţia de unicitate a cheii


Impune ca într-o relaţie R, care are cheia K, oricare
ar fi tuplurile t1 şi t2 să fie satisfăcută inegalitatea:
t1(K) ≠ t2(K).
Această inegalitate semnifică faptul că într-o relaţie
nu pot exista două tupluri cu aceeaşi valoare
pentru atributele cheie.
Cheia unei relaţii trebuie să fie minimală, în sensul
că nicio parte a sa nu trebuie să aibă proprietatea
de identificare unică a tuplurilor relaţiei.

24
29.10.2019

Restricţia de unicitate a cheii


 Cheia primară
 Simplă
 Compusă
 Cheia candidată
CLIENTI

Id_client Cheie primară


Denumire RAND_COMENZI
CUI Cheie candidată
CNP Cheie candidată Id_produs Cheie primară
Capital_social Nr_comanda compusă
Nivel_venit Cantitate
Email Pret

Restricţia referenţială
Un atribut sau un grup de atribute dintr-o relaţie R1 ale
cărui/căror valori sunt definite pe acelaşi/aceleaşi
domeniu/domenii ca şi cheia primară a unei alte relaţii,
R2 şi care are rolul de a modela asocierea între entităţile
reprezentate cu ajutorul relaţiilor R1 şi R2.
R1 şi R2 nu trebuie să fie neapărat distincte.
CLIENTI
COMENZI
Id_client Cheie primară
Nr_comanda Cheie primară Denumire
Data_comanda CUI Cheie candidată
Data_livrare CNP Cheie candidată
Modalitate_comanda Capital_social
Modalitate_livrare Nivel_venit
Id_client Cheie externă Email

25
29.10.2019

Restricţia entităţii
Restricţia entităţii reprezintă restricţia de
integritate care impune ca într-o relaţie, anumite
atribute sa fie nenule.
CLIENTI COMENZI

Id_client Cheie primară Nr_comanda Cheie primară


Denumire Not null Data_comanda Not null
CUI Cheie candidată Data_livrare
CNP Cheie candidată Modalitate_comanda
Capital_social Modalitate_livrare
Nivel_venit Id_client Cheie externă
Email Not null RAND_COMENZI
Id_produs Cheie primară
Nr_comanda compusă
Cantitate Not null
Pret Not null

Alte restricţii de integritate


 De domeniu
 Domeniul corespunzător unui atribut dintr-o
tabelă trebuie să se încadreze între anumite
valori;
 Temporare
 Valorile anumitor atribute se compară cu nişte
valori temporare (rezultate din calcule etc.).
COMENZI RAND_COMENZI
Nr_comanda Cheie primară Id_produs Cheie primară
Data_comanda Not null Nr_comanda compusă
Data_livrare > Data_comanda Cantitate Not null, > 0
Modalitate_comanda ‘online’, ‘direct’ Pret Not null, > 0
Modalitate_livrare ‘curier’, ‘ridicare personala’
Id_client Cheie externă

26
29.10.2019

Restricţiile de integritate
suportate în SQL-Oracle
NOT NULL
◦ nu permite valori NULL (nespecificate) în coloanele unei tabele;
UNIQUE
◦ nu permite valori duplicat în coloanele unei tabele;
PRIMARY KEY
◦ nu permite valori duplicate sau NULL în coloana sau coloanele definite
astfel;
FOREIGN KEY
◦ presupune ca fiecare valoare din coloana sau setul de coloane definit
astfel să aibă o valoare corespondentă identică în tabela de legătură,
tabelă în care coloana corespondentă este definită cu restricţia
UNIQUE sau PRIMARY KEY;
CHECK
◦ elimină valorile care nu satisfac anumite cerinţe (condiţii) logice.

Exemplificare SQL-Oracle

27
29.10.2019

Exemplificare SQL-Oracle

Exemplificare SQL-Oracle

28
29.10.2019

CURSUL 5...
Baze de date relaţionale

29
30.10.2019

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

Definiţie BDR

BAZE DE DATE O bază de date relaţională (BDR) reprezintă un


ansamblu de relaţii (tabele de date) împreună cu

BAZE DE DATE RELAŢIONALE legăturile dintre ele.

BUCUREŞTI
2019-2020
Conf.univ.dr. IULIANA BOTHA (ȘIMONCA)
2
iuliana.botha@ie.ase.ro

1
30.10.2019

Etape de realizare a unei BDR Analiza de sistem


1. Analiză structurală (statică) - analiza componentelor sistemului
1. Analiza de sistem (entităţilor) şi a legăturilor (asocierilor) dintre acestea. Conduce
la obţinerea modelului structural (static) al sistemului;
2. Proiectarea bazei de date 2. Analiză dinamică (de comportament, temporală) - analiza stărilor
3. Implementarea bazei de date sistemului şi a tranziţiilor posibile între aceste stări, în raport de
anumite evenimente. Conduce la obţinerea modelului dinamic al
4. Punerea în funcţiune şi exploatarea bazei de sistemului;
date 3. Analiză funcţională - analiza cerinţelor informaţionale, respectiv
a transformărilor de date (a tranzacţiilor) din cadrul sistemului.
5. Întreţinerea bazei de date Conduce la obţinerea modelului funcţional al sistemului
economic;
4. Integrarea modelelor sistemului economic (structural, dinamic şi
funcţional) în scopul corelării şi completării lor.
3 4

2
30.10.2019

Analiza structurală Analiza structurală (2)


Are ca obiectiv evidenţierea componentelor (entităţilor) din Tehnica entitate-asociere permite construirea
cadrul sistemului, pentru care urmează să se colecteze şi să modelului structural sub forma unei diagrame entitate-
se memoreze date în cadrul bazei de date, precum şi asociere prin parcurgerea următorilor paşi:
evidenţierea legăturilor dintre aceste componente;
a. identificarea componentelor (entităţilor) din cadrul
Cea mai utilizată tehnică de analiză structurală este tehnica
entitate-asociere (E-R: Entity-Relationship), introdusă de sistemului economic;
P.P.S. Chen, în anul 1976 b. identificarea asocierilor dintre entităţi şi calificarea
acestora;
c. identificarea atributelor aferente entităţilor şi a
asocierilor dintre entităţi;
d. stabilirea atributelor de identificare a entităţilor.

5 6

3
30.10.2019

Analiza structurală (3) Analiza structurală (4)


a. Identificarea componentelor (entităţilor) din cadrul sistemului economic EXEMPLU: activitatea comercială dintr-o organizaţie economică

EXEMPLU: activitatea comercială dintr-o organizaţie economică

Descrierea entităţilor

7 8

4
30.10.2019

Analiza structurală (5) Analiza structurală (6)


b. Identificarea asocierilor dintre entităţi şi calificarea acestora b. Identificarea asocierilor dintre entităţi şi calificarea acestora

Asocierile dintre entităţi pot fi clasificate după mai multe criterii, şi anume: Asocierile dintre entităţi pot fi clasificate după mai multe criterii, şi anume:
A. Cardinalitatea asocierii: A. Cardinalitatea asocierii:
1. gradul asocierii (maximele cardinalităţii): 2. obligativitatea participării entităţilor la asociere (minimele
a) asocieri de tip unu la unu; cardinalităţii):
b) asocieri de tip unu la mulţi; a) asocieri parţiale;
c) asocieri de tip mulţi la mulţi. b) asocieri totale (complete).

9 10

5
30.10.2019

Analiza structurală (7) Analiza structurală (8)


b. Identificarea asocierilor dintre entităţi şi calificarea acestora b. Identificarea asocierilor dintre entităţi şi calificarea acestora

Asocierile dintre entităţi pot fi clasificate după mai multe criterii, şi anume: Asocierile dintre entităţi pot fi clasificate după mai multe criterii, şi anume:
A. Cardinalitatea asocierii: B. Numărul de entităţi distincte care participă la asociere:
3. concomitent după gradul asocierii şi după obligativitatea participării 1. asocieri binare (între două entităţi distincte);
la asociere: 2. asocieri recursive (asocieri ale entităţilor cu ele însele);
a) asocieri parţiale de tip unu la unu; 3. asocieri complexe (între mai mult de două entităţi distincte).
b) asocieri totale de tip unu la unu;
c) asocieri parţiale de tip unu la mulţi;
d) asocieri totale de tip unu la mulţi;
e) asocieri parţiale de tip mulţi la mulţi;
f) asocieri totale de tip mulţi la mulţi.

11 12

6
30.10.2019

Identificaţi entităţile şi asocierile! Identificaţi entităţile şi asocierile!


 Se doreşte evidenţa clienţilor şi a comenzilor încheiate de  Se doreşte evidenţa angajaţilor şi a managerilor acestora.
aceştia.  Fiecare angajat are un manager, iar un manager poate
 De-a lungul timpului, clientul poate realiza câte comenzi controla mai mulţi angajaţi.
doreşte, pentru el sau pentru cunoscuţii săi.
Identificarea entităţilor: ANGAJAT
CLIENT COMANDĂ
Identificarea entităţilor:
Identificarea asocierilor (obligativitate + cardinalitate):
Identificarea asocierilor (obligativitate + cardinalitate):  Asociere recursivă
conduce
 Asociere binară  Un angajat poate să fie condus ANGAJAT
 Un client poate să efectueze una sau mai multe comenzi de un singur manager
 O comandă trebuie să fie plasată de un singur client  Un manager poate conduce
este condus

efectuează
COMANDĂ unul sau mai mulţi angajaţi
CLIENT
este realizată
13 14

7
30.10.2019

Analiza structurală (9) Analiza structurală (10)


b. Identificarea asocierilor dintre entităţi şi calificarea acestora EXEMPLU: activitatea comercială dintr-o organizaţie economică
Asocierile dintre entităţi pot fi clasificate după mai multe criterii, şi anume:
C. Semnificaţia asocierii:
1. “este-un” (generalizare);
2. “este-conţinut-în” (agregare).

15 16

8
30.10.2019

Analiza structurală (11) Analiza structurală (12)


EXEMPLU: activitatea comercială dintr-o organizaţie economică
c. Identificarea atributelor aferente entităţilor şi a asocierilor între entităţi

Un atribut poate fi:


◦ Atribut compus. Este un atribut constituit din cel puţin două alte atribute.
Valoarea sa este reprezentată de valorile atributelor componente;
◦ Atribut calculat (dedus). Reprezintă un atribut a cărui valoare nu este
cunoscută direct, ci calculată pe baza valorilor altor atribute;
◦ Atribut simplu. Reprezintă un atribut care nu este nici compus şi nici calculat.
Valorile sale sunt valori atomice;
◦ Atribut repetitiv (multivaloare). Este un atribut care, la un moment dat, are
mai multe valori care apar sub forma unei liste de valori.

17 18

9
30.10.2019

Analiza structurală (13) Analiza structurală (14)


EXEMPLU: activitatea comercială dintr-o organizaţie economică
d. Stabilirea atributelor de identificare a entităţilor
Un atribut poate fi considerat de identificare dacă:
◦ oferă o identificare unică a instanţelor unei entităţi;
◦ posedă o semnificaţie;
◦ este uşor de utilizat;
◦ este scurt.

19 20

10
30.10.2019

Analiza dinamică Analiza funcţională


Are drept scop explicarea comportamentului entităţilor Are drept scop determinarea transformărilor de date
din domeniul economic analizat. care se produc în cadrul sistemului în scopul satisfacerii
Presupune: cerinţelor informaţionale aferente acestui sistem.
a. identificarea stărilor în care se pot afla componentele Presupune:
sistemului a. identificarea datelor de intrare şi a datelor de ieşire din
b. identificarea evenimentelor care determină trecerea sistem
unei componente dintr-o stare în alta b. construirea diagramelor de flux prin care sunt reflectate
c. stabilirea succesiunii (fluxului) de evenimente legăturile procedurale dintre intrări şi ieşiri
c. identificarea restricţiilor şi precizarea criteriilor de
optimizare

21 22

11
30.10.2019

Proiectarea structurii bazei de date Proiectarea structurii bazei de date

Constă din următoarele activităţi: a. Proiectarea schemei conceptuale a BDR presupune:


stabilirea colecţiilor de date şi definirea detaliată a
a. proiectarea schemei conceptuale;
conţinutului acestora;
b. proiectarea schemei externe (logice); determinarea legăturilor dintre colecţiile de date şi a
c. proiectarea schemei interne (fizice, de memorare). modului de reprezentare a acestora în cadrul schemei
conceptuale;
testarea schemei obţinute şi revizuirea acesteia, dacă este
cazul.

23 24

12
30.10.2019

Proiectarea schemei conceptuale


Proiectarea structurii bazei de date iniţiale a BDR
Schema conceptuală iniţială a BDR se poate obţine în
b. Proiectarea schemei externe a BDR presupune:
două moduri:
realizarea tabelelor virtuale (views); A. se realizează maparea entităţilor şi a asocierilor în relaţii.
folosirea mecanismelor de acordare a drepturilor de acces Este o variantă top-down de utilizare a tehnicii de
la BDR. normalizare a relaţiilor;
B. se constituie o relaţie unică, aşa numita relaţie
c. Proiectarea schemei interne a BDR presupune:
universală, din atributele tuturor entităţilor şi asocierilor
stabilirea modului de organizare fizică a datelor; - varianta bottom-up.
stabilirea căilor de acces la acestea;
realizarea de indecşi şi clustere.

25 26

13
30.10.2019

Proiectarea schemei conceptuale Proiectarea schemei conceptuale iniţiale a BDR


iniţiale a BDR
Regulile de mapare sunt următoarele:
a. o entitate devine o tabelă, numele tabelei fiind pluralul ANGAJATI
numelui entităţii; Marca Cheie primară
Nume Not Null
b. o instanţă devine un tuplu al relaţiei; Prenume Not Null
Data_nasterii Not Null
c. un atribut devine o coloană. Pentru atributele obligatorii Telefon
se vor declara restricţii de tip NOT NULL; Email
Din maparea entităţilor Data_angajarii
d. un identificator primar devine o cheie primară; ANGAJAT şi Salariu Not Null
DEPARTAMENT rezultă Comision Not Null
e. un identificator secundar devine cheie unică; tabelele ANGAJATI şi Id_departament Cheie externă, face legătura cu tabela DEPARTAMENTE
DEPARTAMENTE Id_manager Cheie externă, face legătura cu coloana Marca a tabelei, arată care este şeful
f. o legătură se transformă într-o coloană pe care se declară fiecărui angajat

o cheie externă. Dacă participarea entităţii referite este DEPARTAMENTE


obligatorie, pe lângă cheie externă se declară şi o Id_departament Cheie primară
Not null
Denumire
restricţie de tip NOT NULL. Id_manager Cheie externă, face legătura cu coloana Marca a tabelei ANGAJATI, se arată care
este managerul fiecărui departament. Restricţie NOT NULL.

27 28

14
30.10.2019

Studiu de caz
1. Să se construiască diagrama enititate-asociere pentru următorul scenariu.
2. Să se proiecteze schema conceptuală a bazei de date relaţionale.
CURSUL 6...
Studiul de caz tratează gestiunea activităţii unei unităţi hoteliere.
În vederea cazării, un client poate solicita rezervarea uneia sau mai multor camere prin e-mail sau
telefonic. Pentru aceasta furnizează recepţionerului informaţii privind perioada de cazare şi Baze de date relaţionale – Tehnica normalizării
tipurile de camere solicitate. Clienţii vor beneficia de reduceri dacă rezervă cel puţin 3 camere sau
dacă perioada de cazare depăşeşte 5 zile. Recepţionerul verifică disponibilitatea camerelor şi îl
înştiinţează pe client de acest lucru precum şi de costul estimat al cazării. Dacă nu există camere
disponibile conform solicitării, recepţionerul poate oferi clientului alternative. De asemenea,
clientul poate solicita un discount (suplimentar sau nu), iar recepţionerul va decide fezabilitatea
discountului, fiind asistat obligatoriu de managerul hotelului. În situaţia în care clientul este de
acord cu preţul propus, se va proceda la realizarea rezervării. Pentru clienţii noi, recepţionerul
solicită datele de identificare, pe care le introduce în aplicaţie.
Odată ajuns la hotel, şi dacă a făcut în prealabil o rezervare, clientul va furniza datele de
identificare ale sale şi/sau ale rezervării şi se face cazarea. Dacă nu există o rezervare, se va
verifica disponibilitatea camerelor pentru perioada cerută. Atunci când se găseşte o astfel de
cameră, se face cazarea. La finalul sejurului, recepţionerul întocmeşte o listă cu toate serviciile
solicitate de client şi preţul acestora. Lista trebuie validată de client, după care se întocmeşte
factura finală. Factura poate fi plătită parţial sau integral, prin transfer bancar, numerar sau
folosind un card bancar. Totodată, înainte de a părăsi hotelul, clientul este rugat să completeze un
formular prin care să evalueze serviciile oferite de unitatea hotelieră.

29 30

15
06.11.2019

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

BAZE DE DATE

BAZE DE DATE RELAŢIONALE.


TEHNICA NORMALIZĂRII

BUCUREŞTI
2019-2020

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA)

Tehnica normalizării
Optimizarea schemei conceptuale a BDR

 Optimizarea schemei conceptuale a unei BDR se realizează


printr-o evaluare din aproape în aproape a fiecărei relaţii, pe
baza unor criterii de evaluare.

 Trecerea succesivă a relaţiilor unei BDR prin formele normale


cunoscute, până la aducerea lor în forma normală stabilită ca
fiind optimă în contextul analizat – tehnica normalizării.

1
06.11.2019

Tehnica normalizării
Optimizarea schemei conceptuale a BDR

 Obiectivul normalizării îl constituie optimizarea structurii BDR


prin:
 Eliminarea anomaliilor de actualizare a datelor;
 Înlăturarea redundanţei datelor.

 Trecerea unei relaţii dintr-o formă normală în alta presupune


eliminarea unui anumit tip de dependenţe (dependenţe
funcţionale parţiale, tranzitive, multivaloare sau joncţiune),
dependenţe care determină apariţia anomaliilor de actualizare.
 Transformarea dependenţelor se realizează, de regulă, prin
descompunerea relaţiei în două sau mai multe relaţii.

Tehnica normalizării
Optimizarea schemei conceptuale a BDR

 Fie relaţia Aprovizionare (Id_furnizor, Denumire_fz, Localitate_fz,


Id_produs, Denumire_produs, Pret)
Id_furnizor Denumire_fz Localitate_fz Id_produs Denumire_produs Pret

100 SC ALFA SA Bucureşti 1 Portocale 6


100 SC ALFA SA Bucureşti 2 Banane 4
110 SC BETA SRL Ploieşti 3 Mango 6
120 SC DELTA SRL Braşov 1 Portocale 5
... ... ... ... ... ...

 Analizând această relaţie se observă o redundanţă a datelor pentru


aprovizionările realizate cu acelaşi furnizor. Altfel spus valorile
asociate atributelor Denumire_fz şi Localitate_fz se repetă la fiecare
produs livrat de acel furnizor.

2
06.11.2019

Tehnica normalizării
Anomaliile de actualizare

 Anomalia de ştergere = stergând un tuplu dintr-o tabelă,


pe lângă informaţiile şterse, se pierd şi informaţiile utile
existente în tuplul respectiv;

 Anomaliile de adăugare = nu pot fi incluse noi informaţii


necesare într-o tabelă deoarece nu se cunosc şi alte
informaţii utile;

 Anomalia de modificare = este dificil de modificat o


valoare a unui atribut atunci când ea apare în mai multe
tupluri.

Tehnica normalizării
Forma normală unu (FN1)

 BDR se află în FN1 dacă toate relaţiile componente sunt


în FN1.

 O relaţie este în FN1 dacă valorile asociate atributelor se


află la nivel elementar (atomic) şi dacă nu există atribute
generatoare de valori repetitive.

3
06.11.2019

Tehnica normalizării
Aducerea relaţiilor în FN1

Presupune eliminarea atributelor compuse şi a celor


repetitive, astfel:
a) se trec în relaţie în locul atributelor compuse componentele
acestora, ca atribute simple;
b) se plasează grupurile de atribute repetitive, fiecare în câte o nouă
relaţie;
c) se introduce în schema fiecărei noi relaţii create la pasul b) cheia
primară a relaţiei din care a fost extras grupul repetitiv respectiv;
d) se stabileşte cheia primară a fiecărei relaţii create în pasul b).
Aceasta va fi compusă din atributele adăugate la relaţie în pasul
c), precum şi din unul sau mai multe atribute proprii relaţiei
respective.

Tehnica normalizării
Aducerea relaţiilor în FN1
R
Marca Nume_angajat Adresa Prenume_copil Datanaştere_copil

Relaţia R are un atribut


P C
compus, denumit Adresa
Marca Nume_ Strada Loc Cod Prenume Datanastere_ Marca
(având componentele strada,
localitate, cod) şi un grup de angajat _copil copil
atribute repetitive, format din
atributele Prenume_copil şi
Datanaştere_copil

4
06.11.2019

Tehnica normalizării
Forma normală doi (FN2)

 BDR se află în FN2 dacă toate relaţiile componente sunt în


FN2.

 O relaţie este în FN2 dacă este în FN1 şi oricare dintre


atributele non-cheie este dependent funcţional complet
de atributele care formează cheia primară a relaţiei.

 FN2 interzice manifestarea unor dependenţe funcţionale


parţiale între atributele non-cheie şi cele care formează
cheia primară a relaţiei.

Tehnica normalizării
Aducerea relaţiilor în FN2

Presupune eliminarea dependenţelor funcţionale parţiale,


din cadrul relaţiilor aflate în FN1, astfel:
a) pentru fiecare dependenţă funcţională parţială din cadrul relaţiei
se creează o nouă relaţie, cu schema constituită din
determinantul şi determinatul acestei dependenţe, eliminându-se
totodată, din cadrul relaţiei iniţiale atributul/atributele care
formează determinantul dependenţei;
b) se determină cheia primară a fiecărei noi relaţii creată în pasul a),
ca fiind formată din atributul/atributele care reprezintă
determinantul dependenţei funcţionale parţiale, care a stat la
baza constituirii relaţiei;
c) se analizează relaţiile rezultate la pasul a). Dacă aceste relaţii
conţin dependenţe funcţionale parţiale se reia procesul de
aducere în FN2. Dacă relaţiile nu conţin dependenţe funcţionale
parţiale, procesul de aducere în FN2 a luat sfârşit.
10

5
06.11.2019

Tehnica normalizării
Aducerea relaţiilor în FN2

R
NrComanda CodProdus DenProdus UM Cantitate

În relaţia R se manifestă R1
următoarele dependenţe NrComanda CodProdus Cantitate
funcţionale parţiale:
CodProdus → DenProdus
CodProdus → UM
R2
CodProdus DenProdus UM

11

Tehnica normalizării
Forma normală trei (FN3)

 BDR se află în FN3 dacă toate relaţiile componente sunt


în FN3.

 O relaţie este în FN3 dacă este în FN2 şi atributele non-


cheie nu sunt dependente tranzitiv de cheia primară a
relaţiei.

 FN3 interzice manifestarea dependenţelor funcţionale


tranzitive în cadrul relaţiei.

12

6
06.11.2019

Tehnica normalizării
Aducerea relaţiilor în FN3

Se realizează prin eliminarea dependenţelor funcţionale


tranzitive care se manifestă în cadrul relaţiilor aflate în FN2,
astfel:
a) pentru fiecare dependenţă funcţională tranzitivă din cadrul
relaţiei considerate se transferă atributele implicate în
dependenţa tranzitivă într-o nouă relaţie;
b) se determină cheia primară a fiecărei noi relaţii creată în pasul a);
c) se introduc în relaţia iniţială cheile primare determinate în pasul
b), în locul atributelor transferate;
d) se analizează relaţia iniţială. Dacă în cadrul ei se manifestă noi
dependenţe funcţionale tranzitive se reia procesul de aducere în
FN3. Dacă nu, procesul a luat sfârşit.

13

Tehnica normalizării
Aducerea relaţiilor în FN3
R
Marca NumeAng DataAng Salariu CodDep DenDep CodFunctie DenFunctie SalMin SalMax

R1
În cadrul relaţiei R se manifestă
Marca NumeAng DataAng Salariu CodDep CodFunctie
dependenţele funcţionale
tranzitive:
CodDep → DenDep
CodFunctie → DenFunctie R2
CodFunctie → SalMin CodDep DenDep
CodFunctie → SalMax

R3
CodFunctie DenFunctie SalMin SalMax

14

7
06.11.2019

Tehnica normalizării
Forma normală Boyce-Codd (BCNF)

 BDR se află în BCNF dacă toate relaţiile componente sunt în


BCNF.

 O relaţie este în BCNF dacă dependenţele funcţionale care se


manifestă în cadrul relaţiei conţin în partea stângă (ca
determinant) o cheie candidată.

 BCNF interzice manifestarea dependenţelor ale căror


determinanţi nu sunt candidaţi cheie (dependenţe non-
cheie).

15

Tehnica normalizării
Aducerea relaţiilor în BCNF

 Există trei categorii de dependenţe non-cheie şi anume:


1) dependenţe funcţionale parţiale;
2) dependenţe funcţionale tranzitive;
3) dependenţe non-cheie, altele decât cele din categoriile 1 şi 2.
 Într-o relaţie aflată în FN3 se manifestă numai dependenţele non-
cheie din categoria 3 (cele din categoriile 1 şi 2 au fost eliminate în
procesul aducerii relaţiei în FN3).
 Într-o relaţie aflată în FN2 se pot manifesta dependenţe non-cheie
din categoriile 2 şi 3.
 Într-o relaţie aflată în FN1 pot exista dependenţe non-cheie din
toate cele 3 categorii.
 A aduce o relaţie în BCNF înseamnă a elimina toate tipurile de
dependenţe non-cheie care se manifestă în cadrul ei.
16

8
06.11.2019

Tehnica normalizării
Aducerea relaţiilor în BCNF

Procesul de aducere a unei relaţii din FN3 în BCNF se desfăşoară


astfel:
a) se analizează relaţia, pentru a se identifica dependenţele non-cheie. Astfel,
dacă relaţia conţine unul sau cel mult două atribute nu pot exista
dependenţe non-cheie, deci relaţia este în BCNF şi procesul a luat sfârşit.
Dacă relaţia conţine mai mult de două atribute, în cadrul ei pot exista
dependenţe non-cheie şi se trece la identificarea lor. Dacă nu există astfel de
dependenţe, relaţia este în BCNF şi procesul a luat sfârşit. Dacă există
dependenţe non-cheie se trece la pasul b);
b) pentru fiecare dependenţă non-cheie X→Y se creează două relaţii, una cu
schema formată din atributele reprezentate prin X şi Y şi cealaltă cu schema
constituită din toate atributele relaţiei iniţiale, mai puţin atributele
reprezentate prin Y. Aceste două relaţii reprezintă descompunerea relaţiei
iniţiale în procesul aducerii ei în BCNF;
c) se reia procesul de aducere în BCNF, pe cele două relaţii obţinute în pasul b).
17

Tehnica normalizării
Aducerea relaţiilor în BCNF

R
IdClient IdTranzactie Valoare ComisionStandard Piata Discount

Presupunem că în cadrul relaţiei R (aflată în FN3) se manifestă următoarea


dependenţă:
Piata → Discount, dependenţă non-cheie (Piata nu este o cheie candidată)
Prin aplicarea procedurii de aducere în BCNF se obţin relaţiile:

R1
IdClient IdTranzactie Valoare ComisionStandard Piata

R2
Piata TipClient Discount

18

9
06.11.2019

Tehnica normalizării
Forma normală patru (FN4)

 BDR se află în FN4 dacă toate relaţiile componente sunt


în FN4.

 O relaţie este în FN4 dacă în această relaţie nu se


manifestă mai mult de o dependenţă multivaloare.

19

Tehnica normalizării
Aducerea relaţiilor în FN4

Presupune eliminarea dependenţelor multivaloare, atunci


când sunt mai mult de una în cadrul unei relaţii:
a) se identifică dependenţele multivaloare X   Y din cadrul
relaţiei considerate;

b) se izolează fiecare atribut multivaloare Y, împreună cu


atributele care depind funcţional de acesta într-o relaţie
separată.

20

10
06.11.2019

Tehnica normalizării
Aducerea relaţiilor în FN4

R
Curs Profesor ReferintaBibliografica

R1
Curs Profesor
În cadrul relaţiei R se manifestă
următoarele dependenţe
multivaloare:
Curs  Profesor R2
Curs  ReferintaBibliografica Curs ReferintaBibliografica

21

Tehnica normalizării
Forma normală cinci (FN5)

 BDR se află în FN5 dacă toate relaţiile componente sunt


în FN5.

 O relaţie este în FN5 dacă fiecare dependenţă joncţiune


este generată printr-un candidat cheie al relaţiei.

22

11
06.11.2019

Tehnica normalizării
Aducerea relaţiilor în FN5

Presupune eliminarea dependenţelor joncţiune care se


manifestă în cadrul relaţiilor aflate în FN4:
a) se identifică dependenţele joncţiune. Între mulţimile de atribute A,
B şi C din cadrul relaţiei considerate există o dependenţă joncţiune
atunci când există dependenţe multivaloare între fiecare dintre
perechile de mulţimi: (A,B), (B,C) şi (A,C). Prin urmare, o
dependenţă joncţiune poate exista numai în cadrul acelor relaţii în
FN4 care prezintă chei compuse şi atribute comune în chei. Dacă
există dependenţe joncţiune în cadrul relaţiei considerate se trece la
pasul b). Dacă nu, procesul de aducere a relaţiei în FN5 a luat sfârşit;
b) se descompune relaţia iniţială, în scopul obţinerii FN5. Considerând
că schema relaţiei conţine mulţimile de atribute A, B, şi C şi că între
fiecare pereche (A,B), (B,C), (A,C) există dependenţe multivaloare,
relaţia trebuie descompusă în trei relaţii, cu schemele: R1(A:DA,
B:DB), R2(B:DB, C:DC) şi R3 (A:DA, C:DC).
23

Tehnica normalizării
Aducerea relaţiilor în FN5

R
Curs Profesor Specializare

R1
Curs Profesor
În cadrul relaţiei R se
manifestă următoarele
dependenţe multivaloare: R2
Curs  Profesor Curs Specializare
Curs  Specializare
Profesor  Specializare
R3
Profesor Specializare

24

12
06.11.2019

Tehnica normalizării
Optimizarea schemei conceptuale a BDR

Etapele procesului de optimizare


a schemei conceptuale a25BDR

Data depends on the key, the whole key and nothing but the key...
So help me Codd!

FN1
FN2 FN3

26

13
06.11.2019

Tehnica normalizării
Determinarea formei normale la care trebuie aduse relaţiile din BDR

În determinarea formei normale la care trebuie aduse


relaţiile din BDR se vor avea în vedere:

 ponderea operaţiilor de interogare şi a celor de


actualizare în lucrul cu baze de date relaţionale;

 exigenţele de performanţă şi flexibilitatea impuse de


utilizatorii finali la interogarea, respectiv la actualizarea
bazei de date relaţionale.

27

Studiu de caz
O societate comercială doreşte să-şi informatizeze activitatea de aprovizionare cu
mărfuri de la furnizori.
Aprovizionarea cu mărfuri se realizează în baza facturilor primite de la furnizori,
fiecare Factură identificându-se printr-un număr unic, dată factură, data scadenţei,
codul, denumirea, contul bancar al furnizorului, codul, denumirea, unitatea de
măsură, cantitatea şi preţul mărfurilor facturate, valoarea acestora şi valoarea
totală a facturii.
Furnizorii societăţii, se identifică printr-un cod unic, nume, adresa, telefon şi cont
bancar.
Nomenclatorul mărfurilor include cod marfă, denumire marfă, unitatea de măsură
şi caracteristici tehnice.
Plata facturii se realizează printr-o Chitanţă, conform facturii emise, în care se
precizează numărul chitanţei, data chitanţei, suma plătită, denumirea şi contul
furnizorului. Societatea plăteşte cu un astfel de document o singură factură.

28

14
06.11.2019

Studiu de caz
FACTURI_APROVIZIONARE
NrFact
Se identifică lista de atribute DataFact
NrFact  ContBancar DataScad
Cantitate
DataFact  Telefon
Pret
 CodMarfa
DataScad CodFz
 DenMarfa NumeFz
Cantitate
 UM Adresa
Pret  Caracteristici ContBancar
CodFz  NrChit Telefon
NumeFz  DataChit CodMarfa
DenMarfa
Adresa  SumaPlata
UM
Caracteristici
NrChit
DataChit
SumaPlata
29

Studiu de caz
Schema iniţială a relaţiei Facturi_Aprovizionare
(NrFact, DataFact, DataScad, Cantitate, Pret, CodFz, NumeFz, Adresa, ContBancar,
Telefon, CodMarfa, DenMarfa, UM, Caracteristici, NrChit, DataChit, SumaPlata)

Relația se află în FN1?

Atribute compuse
Adresa: CodPostal, Strada, Localitate
Caracteristici: Culoare, Material, Dimensiuni

Identificăm atributele cheie:


(NrFact, CodMarfa)

30

15
06.11.2019

Studiu de caz
FN1
FACTURI_APROVIZIONARE
NrFact
Cheie primară
DataFact
compusă !!!
DataScad
Cantitate
Pret
CodFz
NumeFz
Adresa
ContBancar
Telefon Atribute
CodMarfa compuse
DenMarfa
UM
Caracteristici
NrChit
DataChit
SumaPlata
31

FACTURI_APROVIZIONARE
Studiu de caz NrFact
FN1 DataFact
DataScad
Cantitate
Pret
CodFz
Facturi_Aprovizionare în FN1: NumeFz
(NrFact, DataFact, DataScad, Cantitate, Pret, CodPostal
CodFz, NumeFz, CodPostal, Strada, Localitate, Strada
ContBancar, Telefon, CodMarfa, DenMarfa, Localitate
UM, Culoare, Material, Dimensiuni, NrChit, ContBancar
Telefon
DataChit, SumaPlata)
CodMarfa
DenMarfa
UM
Culoare
Material
Dimensiuni
NrChit
DataChit
SumaPlata

32

16
06.11.2019

Studiu de caz
FN2 Dependenţe funcţionale:
(NrFact, CodMarfa) -> Cantitate
(NrFact, CodMarfa) -> Pret DETALII_
FACTURI_APROVIZIONARE APROVIZIONARE
NrFact -> DataFact
NrFact
NrFact -> DataScad
DataFact
DataScad NrFact -> CodFz
Cantitate NrFact -> NumeFz
Pret NrFact -> CodPostal
CodFz
NumeFz NrFact -> Strada FACTURI_
CodPostal NrFact -> Localitate APROVIZONARE
Strada NrFact -> ContBancar
Localitate
NrFact -> Telefon
ContBancar
Telefon NrFact -> NrChit
CodMarfa NrFact -> DataChit
DenMarfa NrFact -> SumaPlata
UM
Culoare CodMarfa -> DenMarfa
Material CodMarfa -> UM
Dimensiuni CodMarfa -> Culoare
NrChit MARFURI
CodMarfa -> Dimensiuni
DataChit
SumaPlata CodMarfa -> Material

33

Studiu de caz
FN2
FACTURI_APROVIZIONARE DETALII_APROVIZIONARE MARFURI
NrFact NrFact CodMarfa
DataFact CodMarfa DenMarfa
DataScad Cantitate UM
CodFz Pret Culoare
NumeFz Material
CodPostal Dimensiuni
Strada
Localitate
ContBancar
Telefon
NrChit
DataChit
SumaPlata

34

17
06.11.2019

Studiu de caz
FN3
Tabelele Marfuri și Detalii_Aprovizionare sunt în FN3

În tabela Facturi_Aprovizionare se manifestă dependenţele:


CodFz NumeFz, CodPostal, Strada, Localitate, ContBancar, Telefon
NrChit DataChit, SumaPlata
=> următoarele dependenţe tranzitive, care trebuie eliminate:
NrFact NumeFz NrFact DataChit
NrFact CodPostal NrFact SumaPlata
NrFact Strada
NrFact Localitate
NrFact ContBancar
NrFact Telefon

35

Studiu de caz
FN3
FACTURI_APROVIZIONARE DETALII_APROVIZIONARE MARFURI
NrFact NrFact CodMarfa
CodFz CodMarfa DenMarfa
DataFact Cantitate UM
DataScad Pret Culoare
Material
Dimensiuni
FURNIZORI CHITANTE
CodFz NrChit
NumeFz NrFact
CodPostal DataChit
Strada SumaPlata
Localitate
ContBancar
Telefon

36

18
06.11.2019

Studiu de caz
FN3
FACTURI_APROVIZIONARE DETALII_APROVIZIONARE MARFURI
NrFact NrFact CodMarfa
CodFz CodMarfa DenMarfa
DataFact Cantitate UM
DataScad Pret Culoare
Material
Dimensiuni
FURNIZORI
CodFz CHITANTE
NumeFz
CodPostal NrChit
Strada NrFact
Localitate DataChit
ContBancar
Telefon

37

Rezolvați
Precizați ce formă normală este încălcată:

PROD (denumire_produs, unitate_măsură,


caracteristici_tehnice, preț)

19
06.11.2019

Rezolvați
Precizați ce formă normală este încălcată:

PROD (denumire_produs, unitate_măsură,


culoare, categorie, descriere_categorie, preț)

Rezolvați
Precizați ce formă normală este încălcată:

PROD (denumire_produs, unitate_măsură,


culoare, categorie, preț, furnizor,
localitate_furnizor)

20
06.11.2019

CURSUL 7...
Limbaje relaţionale pentru definirea şi manipularea
datelor. Limbajul SQL.

21
ACADEMIA DE STUDII ECONOMICE BUCUREŞTI
FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

BAZE DE DATE

Limbaje relaţionale pentru definirea şi


manipularea datelor. Limbajul SQL.

BUCUREŞTI
2019-2020

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA)

Limbaje relaţionale pentru definirea


şi manipularea datelor
SGBD relaţionale oferă seturi de comenzi speciale pentru
descrierea, respectiv pentru manipularea datelor. Acestea
pot face parte din acelaşi limbaj sau pot face parte din
limbaje separate.
În funcţie de domeniul din teoria relaţională pe care se
bazează, limbajele relaţionale se pot clasifica în:
 Limbaje bazate pe calculul relaţional: QUEL - INGRES, PostgreSQL
 Limbaje bazate pe algebra relaţională: ISBL (Information System
Based Language)
 Limbaje bazate pe transformare: SQL (Structured Query Language)
 Limbaje bazate pe grafică: QBE (Query by Example)

1
Limbajul pentru definirea datelor (LDD)
 Descrierea datelor este stocată în dicţionarul BD.
 Comenzile LDD pot fi clasificate în funcţie de nivelul de
organizare a datelor la care acţionează:
 nivel conceptual
 nivel logic
 nivel fizic

Limbajul pentru definirea datelor (LDD)


1. Comenzile LDD care acţionează la nivel conceptual:

Comandă LDD Descriere


CREATE DATABASE creează dicţionarul BD şi alte spaţii necesare
DROP DATABASE şterge BD
ALTER DATABASE actualizează proprietăţi ale BD
creează structura de date şi restricţiile de
CREATE TABLE
integritate, pe care le stochează în dicţionarul BD
DROP TABLE şterge tabela
ALTER TABLE actualizează structura unei tabele
....

2
Limbajul pentru definirea datelor (LDD)
Comenzile LDD care acţionează la nivel logic:
Comandă LDD Descriere
CREATE VIEW creează o tabelă virtuală

DROP VIEW şterge o tabelă virtuală

Comenzile LDD care acţionează la nivel fizic:


Comandă LDD Descriere
ataşează un fişier de indexare unei tabele în scopul de a
CREATE INDEX mări viteza de acces la datele unei tabele
DROP INDEX şterge indexul
construieşte o structură fizică care grupează anumite
CREATE CLUSTER date din BD
DROP CLUSTER şterge un cluster
5

Limbajul pentru manipularea datelor (LMD)

Caracteristici generale:
 tratarea datelor la nivel de ansamblu
 operatorii relaţionali implementaţi folosesc instrucţiuni din
limbajul relaţional existent în SGBDR, care poate avea la bază:
calculul relaţional, algebra relaţională, transformarea sau
grafica
 singurul limbaj relaţional standardizat internaţional este SQL
 utilizatorii limbajelor relaţionale sunt specialiştii

3
Limbajul SQL

SQL (Structured Query Language) este un limbaj de


descriere şi manipulare acceptat de toate sistemele de
gestiune a bazelor de date relaţionale.

Atât ANSI (American National Standards Institute), cât şi ISO


(International Standards Organization) îl consideră drept un
standard pentru limbajele de interogare a bazelor de date
relaţionale.

Limbajul SQL
Versiuni ale
An
standardului Particularităţi
lansare
SQL
SQL-86 1986 Prima versiune SQL standardizată
SQL-89 1989 + restricţii de integritate
Versiune revizuită complet; stă la baza versiunilor
SQL-92 1992 ulterioare
SQL:1999 1999 + facilităţi ale limbajelor orientate-obiect
SQL:2003 2003 + facilităţi OLAP, comanda MERGE, facilităţi XML
SQL:2006 2006 + suport XML
SQL:2008 2008 + declanşatori INSTEAD OF, comanda TRUNCATE
SQL:2011 2011 + suport BD temporale
SQL:2016 2016 + suport JSON

4
Limbajul SQL
Există două moduri de lucru cu baze de date şi anume:
 SQL interactiv, în care un utilizator tastează o singură
comandă, care este trimisă imediat bazei de date. Rezultatul
unei interogări interactive este o tabelă de date în memoria
principală;
 SQL încorporat (embedded SQL), în care declaraţiile SQL sunt
plasate într-un program de aplicaţie. Interfaţa poate fi pe
bază de videoformate sau linie de comandă. SQL poate fi
static (în cazul în care întreaga comandă este specificată la
momentul scrierii programului) sau dinamic (pe baza datelor
introduse de utilizator se formează comanda pentru baza de
date).

Limbajul SQL-Oracle
L I M BA JU L D E D E F I N I R E A DAT E LO R

5
Limbajul SQL-Oracle.
Crearea tabelelor
Tabela reprezintă o structură de date care conţine datele unei BDR.
În general, crearea unei tabele constă din:
 definirea coloanelor
 definirea restricţiilor de integritate
 specificarea parametrilor de stocare
 definirea cluster-ului în care este inclusă tabela etc.

11

Limbajul SQL-Oracle.
Crearea tabelelor

CREATE TABLE [nume_schema.] nume_tabelă


(
nume_coloana_1 tip_date [DEFAULT expresie],

nume_coloana_2 tip_date [DEFAULT expresie]
);

12

6
Limbajul SQL-Oracle.
Crearea tabelelor

Structura unei tabele poate fi creată în următoarele moduri:


1) fără indicarea restricţiilor de integritate
2) cu indicarea restricţiilor la nivel de coloană
3) cu indicarea restricţiilor la nivel de tabelă
4) prin copiere din altă tabelă

Notă: variantele 2 şi 3 pot fi utilizate împreună pentru crearea unei tabele

13

Limbajul SQL-Oracle.
Crearea tabelelor
Restricţiile de integritate în Oracle:
 PRIMARY KEY
 FOREIGN KEY
 UNIQUE
 NOT NULL
 CHECK

14

7
Limbajul SQL-Oracle.
Crearea tabelelor
Restricţiile de integritate:
 pot fi create odată cu tabela sau după crearea acesteia
 pot fi activate sau dezactivate în funcţie de necesităţi (implicit
sunt active)
 pot fi specificate la nivel de coloană sau la nivel de tabelă (cu
excepţia NOT NULL)
 au ataşat un nume intern unic (specificat explicit de utilizator
sau atribuit automat de sistem)
 asigură faptul că valorile unei coloane satisfac o condiţie
declarată
 previn ştergerea unei tabele dacă există dependenţe

15

Limbajul SQL-Oracle.
Crearea tabelelor
 Restricţia PRIMARY KEY ataşată unui ansamblu de coloane (definirea
de cheie primară compusă) poate fi definită numai la nivel de tabelă.
 Restricţia NOT NULL poate fi definită numai la nivel de coloană.
 Restricţia CHECK la nivel de coloană nu poate referi alte coloane ale
aceleiaşi tabele. Definită la nivel de tabelă, însă, restricţia poate face
referire la una sau mai multe coloane.
 Restricţia FOREIGN KEY poate fi definită cu opţiunile:
 ON DELETE CASCADE – ştergerea unei înregistrări din tabela părinte
este autorizată şi implică ştergerea automată a înregistrărilor
corespondente din tabela copil;
 ON DELETE SET NULL – ştergerea unei înregistrări din tabela părinte
este autorizată şi implică transformarea în valori NULL a valorilor cheii
externe din înregistrările corespondente aflate în tabela copil.

16

8
Limbajul SQL-Oracle.
Crearea tabelelor
1) fără indicarea restricţiilor de integritate
CREATE TABLE angajati
(
marca NUMBER(4),
nume VARCHAR2(20),
prenume VARCHAR2(20),
email VARCHAR2(20),
data_angajare DATE DEFAULT SYSDATE,
salariu NUMBER(8,2),
id_departament NUMBER(3)
);
17
Limbajul SQL-Oracle.
Crearea tabelelor
2) cu indicarea restricţiilor de integritate la nivel de coloană
CREATE TABLE angajati
(
marca NUMBER(4) CONSTRAINT pkAng PRIMARY KEY,
nume VARCHAR2(20) NOT NULL,
prenume VARCHAR2(20) NOT NULL,
email VARCHAR2(20) CONSTRAINT uqMail UNIQUE
CONSTRAINT ckMail CHECK (email LIKE '%@%.%'),
data_angajare DATE DEFAULT SYSDATE,
salariu NUMBER(8,2),
id_departament NUMBER(3) CONSTRAINT fkDep REFERENCES
departamente (id_departament) ON DELETE CASCADE
);
18
9
Limbajul SQL-Oracle.
Crearea tabelelor
3) cu indicarea restricţiilor de integritate la nivel de tabelă
CREATE TABLE angajati (
marca NUMBER(4),
nume VARCHAR2(20),
prenume VARCHAR2(20),
email VARCHAR2(20),
data_angajare DATE DEFAULT SYSDATE,
salariu NUMBER(8,2),
id_departament NUMBER(3),
CONSTRAINT pkAng PRIMARY KEY (marca),
CONSTRAINT uqMail UNIQUE (email),
CONSTRAINT ckMail CHECK (email LIKE '%@%.%'),
CONSTRAINT nnNume CHECK (nume IS NOT NULL),
CONSTRAINT nnPrenume CHECK (prenume IS NOT NULL),
CONSTRAINT fkDep FOREIGN KEY(id_departament) REFERENCES
departamente (id_departament) ON DELETE CASCADE );

19

Limbajul SQL-Oracle.
Crearea tabelelor
4) prin copiere din altă tabelă

CREATE TABLE angajati_noi


AS
SELECT * FROM angajati
WHERE data_angajare>TO_DATE ('01.01.2010',
'DD.MM.YYYY');

Notă: restricţiile de integritate existente în tabela angajaţi nu se păstrează şi


în noua tabelă, cu excepția celor de tipul NOT NULL

20

10
Limbajul SQL-Oracle.
Modificarea structurii tabelelor
Modificarea structurii unei tabele constă din:
 adăugarea unor coloane noi într-o tabelă existentă (eventual
cu indicarea de restricţii sau de valori implicite)
 modificarea coloanelor unei tabele
 specificarea unor restricţii pentru coloane existente
 activarea, dezactivarea sau suprimarea unor restricţii de
integritate
 redenumiri ale coloanelor sau redenumirea tabelei

21

Limbajul SQL-Oracle.
Modificarea structurii tabelelor
ALTER TABLE nume_tabela
ADD (nume_coloana_1 tip_data restrictie,
... nume_coloana_2 tip_data restrictie);

ALTER TABLE nume_tabela


MODIFY (nume_coloana_1 tip_data restrictie,
... nume_coloana_2 tip_data restrictie);

ALTER TABLE nume_tabela


RENAME COLUMN nume_coloana TO nume_nou_coloana;

ALTER TABLE nume_tabela


DROP COLUMN nume_coloana;

ALTER TABLE nume_tabela


DROP (nume_coloana_1, nume_coloana_2);

22

11
Limbajul SQL-Oracle.
Modificarea structurii tabelelor
ALTER TABLE nume_tabela
ADD CONSTRAINT nume_restrictie tip_restrictie ….;

ALTER TABLE nume_tabela


DROP CONSTRAINT nume_restrictie;

ALTER TABLE nume_tabela


DISABLE CONSTRAINT nume_restricţie;

ALTER TABLE nume_tabela


ENABLE CONSTRAINT nume_restricţie;

ALTER TABLE nume_tabela


RENAME TO nume_nou_tabelă;

23

Limbajul SQL-Oracle.
Modificarea structurii tabelelor

 Vizualizarea structurii unei tabele se realizează prin comanda:


DESCRIBE nume_tabela;
 Ştergerea restricţiei de cheie primară se poate realiza prin
comanda:
ALTER TABLE nume_tabela
DROP PRIMARY KEY;
 În cazul în care se încearcă ştergerea unei chei primare referite
de o cheie externă dintr-o tabelă copil, această ştergere nu se
poate efectua decât dacă în comanda ALTER apare opţiunea
CASCADE:
ALTER TABLE nume_tabela
DROP PRIMARY KEY CASCADE;

24

12
Limbajul SQL-Oracle.
Modificarea structurii tabelelor
 Schimbarea definiţiei unei coloane din NULL în NOT NULL se
poate realiza doar dacă există siguranţa că fiecare linie a
coloanei respective este NOT NULL sau dacă tabela nu are
date.

 Reducerea dimensiunii unei coloane se poate efectua numai


dacă respectiva coloană conţine doar valori NULL sau conţine
deja date care să respecte noul format.

 Schimbarea tipului de dată al unei coloane se pot efectua


numai dacă respectiva coloană conţine doar valori NULL.

25

Limbajul SQL-Oracle.
Ştergerea tabelelor

Ştergerea unei tabele presupune:


 ştergerea definiţiei sale din dicţionarul BD
 ştergerea indecşilor asociaţi tabelei
 ştergerea privilegiilor conferite în legătură cu tabela
 eliberarea spaţiului de memorie ocupat
 invalidarea funcţiilor, procedurilor, tabelelor virtuale,
sinonimelor referitoare la tabelă

26

13
Limbajul SQL-Oracle.
Ştergerea tabelelor

DROP TABLE nume_tabela;

Pentru a se permite ştergerea unei tabele referite într-o altă tabelă


se utilizează comanda DROP cu opţiunea CASCADE CONSTRAINTS,
în scopul suprimării restricţiilor de referenţialitate:
DROP TABLE nume_tabela CASCADE CONSTRAINTS;

27

Limbajul SQL-Oracle.
Ştergerea tabelelor

Recuperarea tabelelor şterse:


FLASHBACK TABLE nume_tabela TO BEFORE DROP;

Ştergerea irevocabilă a tabelelor:


DROP TABLE nume_tabela PURGE;

28

14
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor
Clauze în SELECT Descriere
Comandă LMD Descriere restricţionează liniile care se returnează pe baza unui criteriu
WHERE condiţie
specificat în condiţia de selecţie
SELECT regăseşte date din una sau mai multe tabele
structurează rezultatul într-o manieră ierarhică (asemănător
adaugă o înregistrare nouă într-o tabelă
clauze de ordonare ierarhică
INSERT cu o organigramă)

UPDATE modifică valori asociate coloanelor unei tabele grupează liniile în scopul identificării valorilor comune
GROUP BY coloane_grupare
grupurilor (valori agregate calculate prin funcţii de grup)
realizează fie modificări ale datelor, fie adăugări de înregistrări dintr-o
MERGE restricţionează grupurile create prin clauza GROUP BY pe baza
altă tabelă, în funcţie de o condiţie de potrivire HAVING condiţie
unei condiţii asupra funcţiilor de grup
DELETE şterge înregistrări dintr-o tabelă
ORDER BY coloane_ordonare sortează liniile (implicit ascendent)

3 4

3 4

2
Rezolvaţi! Limbajul SQL-Oracle
Precedenţa operatorilor
Se consideră tabela: PORTS (PORT_ID, PORT_NAME, COUNTRY, CAPACITY), având
următoarele înregistrări:
PORT_ID PORT_NAME COUNTRY CAPACITY Operator
1 Galveston USA 4 *, /, -,+
2 San Diego USA 4
= , >= , > , <= , < , <> , != , IS , LIKE , IN
3 San Francisco USA 3
4 Los Angeles USA 4 BETWEEN
5 San Juan USA 3 NOT
6 Grand Cayman UK 3
AND
Ce rezultat va produce următoarea interogare SQL:
SELECT * || , OR
FROM PORTS
WHERE PORT_NAME LIKE 'San%'
OR PORT_NAME LIKE 'Grand%'
AND CAPACITY = 4;
5 6

5 6

3
Rezolvaţi! Limbajul SQL-Oracle
Interogarea datelor
Se consideră tabela: PORTS (PORT_ID, PORT_NAME, COUNTRY, CAPACITY), având
următoarele înregistrări: Utilizarea pseudocoloanelor (valori atribuite automat de către sistem
PORT_ID PORT_NAME COUNTRY CAPACITY
fiecărei tabele) în comenzile SQL:
1 Galveston USA 4
2 San Diego USA 4 ROWNUM
3 San Francisco USA 3
4 Los Angeles USA 4
5 San Juan USA 3 SELECT ROWNUM, id_angajat, nume, salariul
6 Grand Cayman UK 3 FROM angajati;

Ce vor returna următoarele interogări SQL:


ROWNUM ID_ANGAJAT NUME SALARIUL
SELECT PORT_ID
SELECT 1+2 ---------- ---------- ------------------------- ----------
FROM PORTS 1 100 King 24000,00
FROM PORTS;
WHERE 1=2; 2 101 Kochhar 17000,00
..............

7 8

7 8

4
Rezolvaţi! Rezolvaţi!
Afişaţi primii 3 angajaţi cu cel mai mare salariu.

Angajații ordonați în funcție de salariu, în sens descrescător.

Afişaţi primii 3 angajaţi cu cel mai mare salariu.


ID_ANGAJAT NUME SALARIUL
---------- ------------------------- ----------
100 King 24000
108 Greenberg 16500
102 De Haan 15500
145 Russell 14000
146 Partners 13500
201 Hartstein 13000
205 Higgins 12000
147 Errazuriz 12000
168 Ozer 11500
...........

9 10

9 10

5
Rezolvaţi! Rezolvaţi!
Afişaţi primii 3 angajaţi cu cel mai mare salariu.
Afişaţi primii 3 angajaţi cu cel mai mare salariu.

SELECT ROWNUM, id_angajat, nume, salariul


SELECT ROWNUM, id_angajat, nume, salariul
FROM (SELECT id_angajat, nume, salariul
FROM angajati
FROM angajati
WHERE ROWNUM <= 3
ORDER BY salariul DESC)
ORDER BY salariul DESC;
WHERE ROWNUM <= 3;
ROWNUM ID_ANGAJAT NUME SALARIUL
---------- ---------- ------------------------- ---------- ROWNUM ID_ANGAJAT NUME SALARIUL
1 100 King 24000 ---------- ---------- ------------------------- ----------
2 102 De Haan 15500 1 100 King 24000
3 101 Kochhar 9500 2 108 Greenberg 16500
3 102 De Haan 15500

11 12

11 12

6
Rezolvaţi! Rezolvaţi!
Afişaţi al doilea angajat cu cel mai mare salariu.

Angajații ordonați în funcție de salariu, în sens descrescător.

Afişaţi al doilea angajat cu cel mai mare salariu. ID_ANGAJAT NUME SALARIUL
---------- ------------------------- ----------
100 King 24000
108 Greenberg 16500
102 De Haan 15500
145 Russell 14000
146 Partners 13500
201 Hartstein 13000
205 Higgins 12000
147 Errazuriz 12000
168 Ozer 11500
...........

13 14

13 14

7
Rezolvaţi! Rezolvaţi!
Afişaţi al doilea angajat cu cel mai mare salariu. Afişaţi al doilea angajat cu cel mai mare salariu.
SELECT *
FROM
SELECT ROWNUM, id_angajat, nume, salariul (SELECT ROWNUM as rn, id_angajat, nume, salariul
FROM (SELECT id_angajat, nume, salariul FROM (SELECT id_angajat, nume, salariul
FROM angajati FROM angajati
ORDER BY salariul DESC) ORDER BY salariul DESC)
WHERE ROWNUM = 2; WHERE ROWNUM <= 2)
-- WHERE ROWNUM < 3 AND ROWNUM >= 2; WHERE rn = 2;

RN ID_ANGAJAT NUME SALARIUL


no rows selected ---------- ---------- ------------------------- ----------
2 108 Greenberg 16500

15 16

15 16

8
Limbajul SQL-Oracle
Rezolvaţi! Interogarea datelor
Utilizarea expresiilor în comenzile SQL:
Afişaţi al doilea angajat cu cel mai mare salariu.
◦ Pe lângă specificarea coloanelor, într-o comandă SELECT pot fi incluse
şi expresii
Rezolvare alternativă!
◦ O expresie se poate referi la: literali, operatori, funcţii SQL

SELECT id_angajat, nume, salariul, salariul * 1.5


FROM angajati
WHERE comision IS NOT NULL
ORDER BY nume;

17 18

17 18

9
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor Interogarea datelor
Utilizarea expresiilor în comenzile SQL este permisă în: Tabela DUAL
◦ lista de coloane a unei comenzi SELECT ◦ tabelă existentă în orice BD Oracle
◦ clauzele WHERE, HAVING şi ORDER BY dintr-o comandă SELECT ◦ are o singură coloană: DUMMY de tip VARCHAR2(1)
◦ clauza VALUES a unei comenzi INSERT ◦ are o singură linie, conţinând valoarea x
◦ clauzele SET şi WHERE ale unei comenzi UPDATE ◦ utilizată pentru testarea unor comenzi SELECT care nu fac referiri neapărat la o
tabelă dintr-o BD
◦ clauza WHERE a unei comenzi DELETE
SELECT 1000* 1.5
SELECT id_angajat, nume, salariul, salariul * 1.5
FROM dual;
FROM angajati
WHERE comision IS NOT NULL
SELECT SYSDATE, CURRENT_DATE
AND salariul*1.5>16000
FROM dual;
ORDER BY salariul*1.5 DESC;
19 20

19 20

10
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
Funcţii SQL care manipulează şiruri de caractere
Sintaxă Descriere Rezultat SELECT UPPER('oracle'), LOWER('oracle'), INITCAP('oracle')
FROM dual;
UPPER (s) / LOWER (s) Conversie de format: ORACLE / oracle şir de caractere
UPPER('ORACLE') LOWER('ORACLE') INITCAP('ORACLE')
INITCAP (s) Conversie de format: Oracle şir de caractere --------------- --------------- -----------------
CONCAT (s1,s2) Concatenează două șiruri şir de caractere ORACLE oracle Oracle

LPAD (s1,n,s2) / RPAD (s1,n,s2) Completează un șir (la dreapta/stânga) şir de caractere
SELECT SUBSTR('oracle database',1,3),
LTRIM (s1,s2) / RTRIM (s1,s2) Trunchează un șir (la dreapta/stânga) şir de caractere
SUBSTR('oracle database',-8,4)
TRIM (info s1 FROM s2) Trunchează un șir şir de caractere FROM dual;
LENGTH (s) Calculează lungimea unui șir număr SUBSTR('ORACLEDATABASE',1,3) SUBSTR('ORACLEDATABASE',-8,4)
INSTR (s1,s2, poz,n) Indică poziția unui subșir număr ---------------------------- -----------------------------
ora data
SUBSTR (s,poz,n) Extrage un subșir dintr-un șir dat şir de caractere

REPLACE (s1,s2,s3) Înlocuiește un subșir şir de caractere


21 22

21 22

11
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
SELECT CONCAT('Oracle ' ,'Database'),
LPAD('Oracle',15,'*'), RTRIM('Oracle****','*'), SELECT REPLACE('oracle database','a'),
TRIM(BOTH '*' FROM '**Oracle****'), LENGTH('Oracle'), REPLACE('oracle database','a','*')
INSTR('Oracle Database','a',1,3) FROM dual;
FROM dual;
REPLACE('ORACLEDATABASE','A') REPLACE('ORACLEDATABASE','A',‘*')
CONCAT('ORACLE','DATABASE') LPAD('ORACLE',15,'*') RTRIM('ORACLE****','*') ----------------------------- --------------------------------
--------------------------- --------------------- ----------------------- orcle dtbse or*cle d*t*b*se
Oracle Database *********Oracle Oracle

TRIM(BOTH'*'FROM'**ORACLE****' LENGTH('ORACLE')
------------------------------ ----------------
Oracle 6

INSTR('ORACLEDATABASE','A',1,3
------------------------------
11

23 24

23 24

12
Ce afişează comanda următoare? Ce afişează comanda următoare?

SELECT CONCAT(RPAD(CONCAT('Capitolul 1',' '),20,'.'),


LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;
SELECT CONCAT(RPAD(CONCAT('Capitolul 1',' '),20,'.'),
LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;
CUPRINS
----------------------------------------
Capitolul 1 ..................... pag.20

25 26

25 26

13
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
Funcţii SQL care manipulează valori numerice
SELECT ROUND(3.148,2), TRUNC(3.148,2), MOD(11,3)
Sintaxă Descriere Rezultat FROM dual;
ROUND (n,i) Rotunjește numărul n la i zecimale număr

TRUNC (n,i) Trunchează numărul n la i zecimale număr ROUND(3.148,2) TRUNC(3.148,2) MOD(11,3)


MOD (n1,n2) Returnează restul împărțirii lui n1 la n2 număr -------------- -------------- ----------
3,15 3,14 2

27 28

27 28

14
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
Funcţii SQL care manipulează date calendaristice SELECT SYSDATE, ROUND(SYSDATE,'MM'), ROUND(SYSDATE,'YY'),
Sintaxă Descriere Rezultat TRUNC(SYSDATE,'MM'), TRUNC(SYSDATE,'YY')
FROM dual;
SYSDATE Returnează data curentă a serverului dată calendaristică
SYSDATE ROUND(SYSDATE,'MM') ROUND(SYSDATE,'YY')
CURRENT_DATE Returnează data curentă a clientului dată calendaristică ----------- ------------------- -------------------
20-11-2019 01-12-2019 01-01-2020
ROUND (d,i) Rotunjește o dată calendaristică dată calendaristică

TRUNC (d,i) Trunchează o dată calendaristică dată calendaristică TRUNC(SYSDATE,'MM') TRUNC(SYSDATE,'YY')


------------------- -------------------
NEXT_DAY (d,s) Afișează data calendaristică a următoarei zile indicate dată calendaristică 01-11-2019 01-01-2019
Returnează ultima zi a lunii din care face parte data
LAST_DAY (d) dată calendaristică
calendaristică SELECT EXTRACT (YEAR FROM SYSDATE)
ADD_MONTHS (d,n) Adaugă un număr de luni la o dată calendaristică dată calendaristică FROM dual;
MONTHS_BETWEEN (d1,d2) Returnează numărul de luni dintre două date calendaristice număr EXTRACT(YEARFROMSYSDATE)
------------------------
EXTRACT (DAY FROM d) 2019
EXTRACT (MONTH FROM d) Extrage componente dintr-o dată calendaristică număr
EXTRACT (YEAR FROM d) 29 30

29 30

15
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
SELECT SYSDATE, NEXT_DAY(SYSDATE,'Vineri'), Funcţii SQL speciale
LAST_DAY(SYSDATE)
FROM dual; Sintaxă Descriere

SYSDATE NEXT_DAY(SYSDATE,’VINERI') LAST_DAY(SYSDATE)


NVL (e1,e2) Returnează e2 dacă e1 este NULL

----------- -------------------------- ----------------- NULLIF (e1,e2) Returnează NULL dacă e1=e2; altfel întoarce e1
20-11-2019 22-11-2019 30-11-2019
DECODE (e,expresii_de_căutare,d)
Verifică variante alternative
CASE expr WHEN cond THEN rez ... ELSE rez END
SELECT ADD_MONTHS(SYSDATE,4),
MONTHS_BETWEEN(ADD_MONTHS(SYSDATE,4),SYSDATE)
FROM dual;

ADD_MONTHS(SYSDATE,4) MONTHS_BETWEEN(ADD_MONTHS(SYSD
--------------------- ------------------------------
20-03-2020 4

31 32

31 32

16
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL

SELECT 14+NULL-4, NVL(NULL,0), 14-NVL(NULL,0)-4


FROM dual;
SELECT 14+NULL-4
14+NULL-4 NVL(NULL,0) 14-NVL(NULL,0)-4
FROM dual; ---------- ----------- ----------------
0 10

33 34

33 34

17
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
SELECT nume, salariul+comision "Venit total"
FROM angajati SELECT pret_lista, pret_min, NULLIF(pret_lista,pret_min)
WHERE comision IS NULL; FROM produse;
NUME Venit total PRET_LISTA PRET_MIN NULLIF(PRET_LISTA,PRET_MIN)
------------------------- ----------- ---------- ---------- ---------------------------
King 221,00 180,00 221
Kochhar 73,00 73,00
... 299,00 244,00 299
399,00 355,00 399
SELECT nume, salariul+NVL(comision,0) "Venit total"
FROM angajati
WHERE comision IS NULL;
NUME Venit total
------------------------- -----------
King 24000
Kochhar 17000
...
35 36

35 36

18
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
SELECT denumire_produs,pret_lista, SELECT denumire_produs, categorie, pret_lista,
CASE CASE LOWER(categorie)
WHEN pret_lista < 100 THEN 'pret mic ' WHEN 'hardware4' THEN 0.2
WHEN pret_lista BETWEEN 100 AND 200 THEN 'pret mediu ' WHEN 'hardware2' THEN 0.15
ELSE 'pret mare' ELSE 0
END Calificativ END * pret_lista Majorare_pret
FROM produse; FROM produse
WHERE LOWER(categorie) LIKE 'h%' ;
DENUMIRE_PRODUS PRET_LISTA CALIFICATIV
------------------------------------------------- ---------- -----------
DIMM - 128 MB 305,00 pret mare DENUMIRE_PRODUS CATEGORIE PRET_LISTA MAJORARE_PRET
DIMM - 16 MB 124,00 pret mediu --------------------- ------------------- ---------- -------------
DIMM - 1GB 599,00 pret mare DIMM - 128 MB hardware4 305,00 61
Battery - EL 44,00 pret mic DIMM - 16 MB hardware2 124,00 24,8
....... .......

37 38

37 38

19
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
SELECT denumire_produs, categorie, pret_lista, Funcţii SQL de conversie între tipuri de date
DECODE(LOWER(categorie),'hardware4' ,0.2,'hardware2' ,0.15,0) Sintaxă Descriere
* pret_lista Majorare_pret
FROM produse TO_NUMBER(s,format) Convertește un șir de caractere la număr

WHERE LOWER(categorie) LIKE 'h%' ; TO_CHAR (n,format) Convertește un număr la șir de caractere

DENUMIRE_PRODUS CATEGORIE PRET_LISTA MAJORARE_PRET TO_CHAR (d,format) Convertește o dată calendaristică la șir de caractere

--------------------- ------------------- ---------- -------------


TO_DATE (s,format) Convertește un șir de caractere la dată calendaristică
DIMM - 128 MB hardware4 305,00 61
DIMM - 16 MB hardware2 124,00 24,8 TO_TIMESTAMP (s,format) Convertește un șir de caractere la dată calendaristică
.......

39 40

39 40

20
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
SELECT TO_NUMBER('$17,000.23', '$999,999.99') SELECT TO_CHAR(SYSDATE+1,'DAY, DD MONTH YYYY')
FROM dual; FROM dual;
TO_NUMBER('$17,000.23','$999,99.99')
TO_CHAR(SYSDATE,'DAY,DDMONTHYYYY')
------------------------------------
----------------------------------
17000,23
JOI , 21 NOIEMBRIE 2019

SELECT TO_CHAR(SYSDATE,'DD-MON-YYYY HH:MI:SS')


SELECT TO_CHAR(198, '$999,999.99')
FROM dual; FROM dual;

TO_CHAR(SYSDATE,'DD-MON-YYYYHH
TO_CHAR(198,'$999,999.99')
------------------------------
--------------------------
20-NOI-2019 10:42:51
$198.00

41 42

41 42

21
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
Funcţii SQL de grup
SELECT TO_DATE('23-10-2010','DD-MM-YYYY')
FROM dual; Sintaxă Descriere
COUNT(e) Returnează numărul de înregistrări dintr-un grup de linii
TO_DATE('23-10-2010','DD-MM-YY
------------------------------ SUM(e) Returnează totalul valorilor coloanei argument dintr-un grup de linii

23.10.2010
MIN(e) Returnează minimul valorilor coloanei argument dintr-un grup de linii

MAX(e) Returnează maximul valorilor coloanei argument dintr-un grup de linii

AVG(e) Returnează media valorilor coloanei argument dintr-un grup de linii

43 44

43 44

22
Rezolvaţi!
Limbajul SQL-Oracle Afişaţi pentru fiecare angajat identificat prin nume numărul total de
Funcţii SQL comenzi intermediate, precum şi valoarea acestora.

SELECT COUNT(*) SELECT COUNT(id_angajat)


FROM angajati; FROM angajati;

COUNT(*) COUNT(ID_ANGAJAT)
---------- -----------------
107 107

SELECT COUNT(comision)
FROM angajati;

COUNT(COMISION)
---------------
35

46
45

45 46

23
Rezolvare CURSUL 9...

Limbaje relaţionale pentru definirea şi manipularea datelor.


SELECT 'Angajatul '|| a.nume || ' a incheiat ' ||
COUNT(c.nr_comanda) || Limbajul SQL. (continuare)
' comenzi, in valoare totala de ' ||
TO_CHAR(SUM(r.pret*r.cantitate),'$999,999.99')
"Informatii comenzi"
FROM angajati a, comenzi c, rand_comenzi r
WHERE a.id_angajat = c.id_angajat
AND c.nr_comanda = r.nr_comanda
GROUP BY a.nume
ORDER BY a.nume;

47

47 48

24
ACADEMIA DE STUDII ECONOMICE BUCUREŞTI
FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

Limbajul SQL-Oracle
Agregarea datelor
BAZE DE DATE Clauze în SELECT Descriere
grupează liniile în scopul identificării
GROUP BY
valorilor comune grupurilor (valori
Limbaje relaţionale pentru definirea şi coloane_grupare
agregate calculate prin funcţii de grup)
manipularea datelor. Limbajul SQL. restricţionează grupurile create prin clauza
HAVING condiţie GROUP BY pe baza unei condiţii asupra
funcţiilor de grup

BUCUREŞTI
2019-2020

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA) 2

1
Limbajul SQL-Oracle
Agregarea datelor Rezolvaţi!
SELECT id_departament Departament, Ce rezultat va produce următoarea interogare SQL?
COUNT(id_angajat) "NR.ANGAJATI"
FROM angajati
WHERE id_departament IS NOT NULL SELECT id_departament Departament, id_functie Functie,
GROUP BY id_departament
HAVING COUNT(id_angajat)>2; COUNT(id_angajat) "NR.ANGAJATI"
FROM angajati
DEPARTAMENT NR.ANGAJATI
----------- ----------- WHERE id_departament IS NOT NULL
30 6
50 45 GROUP BY id_departament, id_functie
60 5
80 34 ORDER BY id_departament;
90 3
100 6

3 4

2
Limbajul SQL-Oracle
Rezolvare Agregarea datelor
DEPARTAMENT FUNCTIE NR.ANGAJATI
Operatori Descriere
----------- ---------- -----------
10 AD_ASST 1
20 MK_MAN 1 ROLLUP creează subtotaluri
20 MK_REP 1
30 PU_CLERK 5 creează subtotaluri pentru fiecare
30 PU_MAN 1 CUBE
combinaţie posibilă de dimensiuni
40 HR_REP 1
50 SH_CLERK 20
defineşte grupuri multiple într-o singură
50 ST_CLERK 20 GROUPING SET
cerere
50 ST_MAN 5

5 6

3
Limbajul SQL-Oracle
Agregarea datelor Rezultat
DEPARTAMENT FUNCTIE NR.ANGAJATI
----------- ---------- -----------
SELECT id_departament Departament, id_functie Functie, 10 AD_ASST 1
10 1
COUNT(id_angajat) "NR.ANGAJATI" 20 MK_MAN 1
20 MK_REP 1
FROM angajati 20 2
WHERE id_departament IS NOT NULL 30 PU_CLERK 5
30 PU_MAN 1
GROUP BY ROLLUP(id_departament, id_functie) 30 6
40 HR_REP 1
ORDER BY id_departament; 40 1
50 SH_CLERK 20
50 ST_CLERK 20
50 ST_MAN 5
50 45
...................................
7
106 8

4
Limbajul SQL-Oracle
Agregarea datelor Rezultat
DEPARTAMENT FUNCTIE NR.ANGAJATI
----------- ---------- -----------
SELECT id_departament Departament, id_functie Functie, ..................................
30 PU_CLERK 5
COUNT(id_angajat) "NR.ANGAJATI" 30 PU_MAN 1
FROM angajati 30 6
40 HR_REP 1
WHERE id_departament IS NOT NULL 40 1
50 SH_CLERK 20
GROUP BY CUBE(id_departament, id_functie) 50 ST_CLERK 20
50 ST_MAN 5
ORDER BY id_departament; 50 45
AD_PRES 1
AD_VP 2
FI_ACCOUNT 5
HR_REP 1
IT_PROG 5
...................................
106
9 10

5
Limbajul SQL-Oracle Limbajul SQL-Oracle
Agregarea datelor Agregarea datelor
SELECT GROUPING(id_functie) Verificare, id_departament
Funcţii Descriere Rezultat
Departament, id_functie Functie,
1 – dacă a avut loc o grupare de tip
identifică liniile agregate produse ROLLUP sau CUBE COUNT(id_angajat) "NR.ANGAJATI"
GROUPING prin utilizarea operatorilor ROLLUP NUMBER
sau CUBE 0 – dacă nu a avut loc o grupare de FROM angajati
tip ROLLUP sau CUBE
WHERE id_departament IS NOT NULL
GROUP BY ROLLUP(id_departament, id_functie)
ORDER BY id_departament;

11 12

6
Limbajul SQL-Oracle
Rezultat Agregarea datelor
SELECT
VERIFICARE DEPARTAMENT FUNCTIE NR.ANGAJATI NVL(DECODE(GROUPING(l.oras),1,UPPER(t.denumire_tara),
---------- ----------- ---------- -----------
0 10 AD_ASST 1 INITCAP(t.denumire_tara)),'TOTAL GENERAL')
1 10 1 denumire_tara,
0 20 MK_MAN 1
0 20 MK_REP 1 l.oras, COUNT(d.id_departament) Nr_departamente
1 20 2
............................................. FROM departamente d, locatii l, tari t
1 106 WHERE d.id_locatie=l.id_locatie
AND l.id_tara=t.id_tara
GROUP BY ROLLUP(t.denumire_tara,l.oras);

13 14

7
Limbajul SQL-Oracle
Rezultat Agregarea datelor
DENUMIRE_TARA ORAS NR_DEPARTAMENTE SELECT l.oras Oras, d.id_departament Departament,
----------------------------- ---------------------- ---------------
Canada Toronto 1 a.id_functie Functie, COUNT(a.id_angajat) "NR.ANGAJATI"
CANADA 1
Germany Munich 1 FROM angajati a, departamente d, locatii l
GERMANY 1
WHERE a.id_departament IS NOT NULL
United Kingdom London 1
United Kingdom Oxford 1 AND a.id_departament=d.id_departament
UNITED KINGDOM 2
United States Of America Seattle 21 AND d.id_locatie=l.id_locatie
United States Of America Southlake 1
United States Of America South San Francisco 1 GROUP BY GROUPING SETS ((),(l.oras),
UNITED STATES OF AMERICA 23
TOTAL GENERAL 27 (l.oras, d.id_departament),
(l.oras, d.id_departament, a.id_functie))
ORDER BY l.oras, d.id_departament;

15 16

8
Rezultat SELECT l.oras Oras, d.id_departament Departament, a.id_functie
Functie, COUNT(a.id_angajat) "NR.ANGAJATI"
ORAS DEPARTAMENT FUNCTIE NR.ANGAJATI FROM angajati a, departamente d, locatii l
------------------------------ ----------- ---------- ----------- WHERE a.id_departament IS NOT NULL
Oxford 80 SA_REP 29 AND a.id_departament=d.id_departament
Oxford 80 SA_MAN 5 AND d.id_locatie=l.id_locatie
Oxford 80 34 GROUP BY l.oras, d.id_departament, a.id_functie
Oxford 34 UNION ALL
Seattle 10 AD_ASST 1 SELECT l.oras Oras, d.id_departament Departament, NULL,
Seattle 10 1 COUNT(a.id_angajat) "NR.ANGAJATI"
Seattle 30 PU_MAN 1 .......
Seattle 30 PU_CLERK 5 GROUP BY l.oras, d.id_departament
Seattle 30 6 UNION ALL
Seattle 90 AD_VP 2 SELECT l.oras Oras, NULL, NULL, COUNT(a.id_angajat) "NR.ANGAJATI"
Seattle 90 AD_PRES 1 .......
Seattle 90 3 GROUP BY l.oras
Seattle 100 FI_MGR 1 UNION ALL
Seattle 100 6 SELECT NULL, NULL, NULL, COUNT(a.id_angajat) "NR.ANGAJATI"
Seattle 100 FI_ACCOUNT 5 FROM angajati a, departamente d, locatii l
Seattle 110 AC_MGR 1 WHERE a.id_departament IS NOT NULL
Seattle 110 AC_ACCOUNT 1 AND a.id_departament=d.id_departament
Seattle 110 2 AND d.id_locatie=l.id_locatie;
Seattle 18
106 18

9
Limbajul SQL-Oracle
Agregarea datelor Rezolvaţi!

CUBE(a,b,c)=GROUPING SETS((a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),())

ROLLUP(a,b,c)=GROUPING SETS((a,b,c),(a,b),(a),())

Afişaţi numărul de produse din fiecare categorie, precum şi numărul


total de produse

19 20

10
Rezolvare
Rezolvaţi!
Afişaţi numărul de produse din fiecare categorie, precum şi numărul total
de produse
SELECT categorie, COUNT(id_produs) "NR.PRODUSE"
FROM produse
GROUP BY ROLLUP(categorie)
ORDER BY categorie;
CATEGORIE NR.PRODUSE
---------------------------------------- ----------
office1 6
office2 20
office3 6
office4 21
software1 7
software2 3 Afişaţi numărul total de salariaţi, precum şi numărul de salariaţi
software4 22 angajaţi în anii 1996, 1997 şi 1998.
...................................................
288
21 22

11
Limbajul SQL-Oracle Limbajul SQL-Oracle
Joncţiuni Joncţiuni

Oracle Standard SQL Oracle Standard SQL


Joncţiune externă stânga
Joncţiune de egalitate
SELECT t1.a, t2.c SELECT t1.a, t2.c
SELECT t1.a, t2.c SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 LEFT JOIN tabela2 t2
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 JOIN tabela2 t2
WHERE t1.b=t2.b (+); ON t1.b=t2.b;
WHERE t1.b=t2.b; ON t1.b=t2.b;
SELECT t1.a, t2.c Joncţiune externă dreapta
FROM tabela1 t1 NATURAL JOIN tabela2 t2
SELECT t1.a, t2.c SELECT t1.a, t2.c
SELECT t1.a, t2.c FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 RIGHT JOIN tabela2 t2
FROM tabela1 t1 JOIN tabela2 t2 WHERE t1.b (+)=t2.b; ON t1.b=t2.b;
USING (b);

23 24

12
Limbajul SQL-Oracle CURSUL 10...
Joncţiuni
Oracle Standard SQL
Joncţiune externă completă Limbaje relaţionale pentru definirea şi manipularea datelor.
SELECT t1.a, t2.c SELECT t1.a, t2.c Limbajul SQL. (continuare)
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 FULL JOIN tabela2 t2
WHERE t1.b=t2.b (+) ON t1.b=t2.b;
UNION
SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2
WHERE t1.b (+)=t2.b;
Joncţiunea tabelei cu ea însăşi
SELECT t1.a, t2.b SELECT t1.a, t2.b
FROM tabela1 t1, tabela1 t2 FROM tabela1 t1 JOIN tabela1 t2
WHERE t1.a=t2.b; ON t1.a=t2.b;

25

13
ACADEMIA DE STUDII ECONOMICE BUCUREŞTI
FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
Subcerere (cerere imbricată) – comandă SELECT inclusă într-o altă
BAZE DE DATE comandă SQL, care poate returna una sau mai multe linii.
Subcererile sunt utilizate pentru:
Limbaje relaţionale pentru definirea şi ➢ a obţine rezultate pe baza unor criterii, care apoi să fie utilizate pentru
manipularea datelor. Limbajul SQL. identificarea altor răspunsuri
➢ a crea tabele pe baza unora deja existente
➢ a manipula seturi mari de date, prin includerea în comenzi INSERT, UPDATE
sau DELETE
➢ a crea tabele virtuale (vederi, views)
➢ a defini vederi dinamice (subcereri incluse în clauza FROM)
BUCUREŞTI ➢ a defini expresii calculate dinamic prin subcereri scalare
2019-2020

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA) 2

1 2

1
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Subcereri. Interogarea datelor. Subcereri.
Tipuri de subcereri:
SELECT id_angajat, nume
Subcereri Descriere FROM angajati
WHERE id_functie = (SELECT id_functie
returnează o singură linie (conţinând valori pentru una
➢ subcereri single-row FROM angajati
sau mai multe coloane)
➢ subcereri multiple-row returnează 0, 1 sau mai multe linii
WHERE UPPER(nume)='ABEL')
AND UPPER(nume)!='ABEL';
returnează mai mult de o coloană ca rezultat al unei
➢ subcereri multiple-column
subcereri single-row sau multiple-row
subcereri de oricare dintre tipurile anterioare, care asigură
➢ subcereri corelate legătura dintre tabele, prin referirea de coloane ale cererii
părinte
returnează o singură coloană rezultat; pot fi utilizate ca
➢ subcereri scalare
orice expresie care apare într-o comandă SQL

3 4

3 4

2
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Subcereri. Interogarea datelor. Subcereri.
SELECT id_angajat, nume Operatori de comparaţie utilizaţi în cadrul subcererilor multiple-row:
FROM angajati
WHERE id_functie = (SELECT id_functie FROM angajati Operatori Descriere
WHERE UPPER(nume)='KING') • compară cu o listă de valori
IN
AND UPPER(nume)!='KING'; • verifică dacă valoarea căutată se regăseşte în listă
NOT • utilizat cu operatorul IN
ORA-01427: single-row subquery returns more than one row
• utilizat în combinaţie cu operatorii de comparaţie (=, <)
ANY • verifică dacă valoarea căutată îndeplineşte condiţia de comparaţie cu
SELECT id_angajat, nume oricare dintre liniile returnate de subcerere
FROM angajati SOME • la fel ca operatorul ANY
WHERE id_functie IN (SELECT id_functie FROM angajati • utilizat în combinaţie cu operatorii de comparaţie (=, <)
WHERE UPPER(nume)='KING') ALL • verifică dacă valoarea căutată îndeplineşte condiţia de comparaţie cu
toate liniile returnate de subcerere
AND UPPER(nume)!='KING';
5 6

5 6

3
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Subcereri. Interogarea datelor. Subcereri.
• ANY compară valoarea cu oricare valoare returnată de interogare SELECT id_angajat, salariul
• ALL compară valoarea cu toate valorile returnate de interogare FROM angajati
WHERE salariul > ALL (10000, 15000, 20000);

Semnificaţia operatorilor ANY şi ALL în combinaţie cu operatorii de comparație:


<ANY() – mai mic decât maximul
>ANY() – mai mare decât minimul
=ANY() – echivalent cu operatorul IN SELECT id_angajat, salariul
FROM angajati
>ALL() – mai mare decât maximul WHERE salariul > 10000
<ALL() – mai mic decât minimul AND salariul > 15000
AND salariul > 20000;

7 8

7 8

4
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Subcereri. Interogarea datelor. Subcereri.
SELECT id_angajat, salariul
FROM angajati UPDATE angajati
WHERE salariul > ANY (10000, 15000, 20000); SET salariul=1.1*salariul
WHERE (id_functie, id_departament) =
(SELECT id_functie, id_departament
FROM angajati
SELECT id_angajat, salariul WHERE UPPER(nume)='ABEL');
FROM angajati
WHERE salariul > 10000
OR salariul > 15000
OR salariul > 20000;

9 10

9 10

5
Limbajul SQL-Oracle
Interogarea datelor. Subcereri. Rezolvaţi!
SELECT (SELECT COUNT(id_client) FROM clienti) "Toti clientii",
(SELECT COUNT(id_client) FROM comenzi) "Clientii cu comenzi“
FROM DUAL;

Toti clientii Clientii cu comenzi


------------- -------------------
319 105

Afişaţi numărul total de salariaţi, precum şi numărul de salariaţi


angajaţi în anii 1996, 1997 şi 1998.

11 12

11 12

6
Limbajul SQL-Oracle
Rezolvare Interogarea datelor. Subcereri.
SELECT (SELECT COUNT(id_angajat) FROM angajati) "TOTAL",
UPDATE angajati
(SELECT COUNT(id_angajat) FROM angajati WHERE EXTRACT(YEAR FROM
data_angajare)=1996) "ANGAJATI_1996", SET salariul=1.1 * salariul
(SELECT COUNT(id_angajat) FROM angajati WHERE EXTRACT(YEAR FROM WHERE id_angajat IN
data_angajare)=1997) "ANGAJATI_1997", (SELECT id_angajat FROM comenzi);
(SELECT COUNT(id_angajat) FROM angajati WHERE EXTRACT(YEAR FROM
data_angajare)=1998) "ANGAJATI_1998"
FROM DUAL;
UPDATE angajati a
SET a.salariul=1.1 * a.salariul
TOTAL ANGAJATI_1996 ANGAJATI_1997 ANGAJATI_1998 WHERE EXISTS
---------- ------------- ------------- ------------- (SELECT * FROM comenzi
107 10 28 23
WHERE id_angajat=a.id_angajat);

13 15

13 15

7
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Subcereri. Interogarea datelor. Subcereri.
SELECT c.nume_client Găsiți angajații care au subordonați
FROM clienti c SEMI-JOIN
WHERE EXISTS SELECT nume FROM angajati
WHERE id_angajat IN
(SELECT * FROM comenzi co
(SELECT id_manager FROM angajati);
WHERE co.id_client=c.id_client);
SAU
SELECT c.nume_client
FROM clienti c SELECT a.nume FROM angajati a
WHERE NOT EXISTS WHERE EXISTS
(SELECT 1 FROM angajati b
(SELECT * FROM comenzi co
WHERE b.id_manager=a.id_angajat);
WHERE co.id_client=c.id_client);

16 17

16 17

8
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Subcereri. Interogarea datelor. Cereri ierarhice.
Găsiți angajații care nu au subordonați

SELECT nume FROM angajati


WHERE id_angajat NOT IN
(SELECT id_manager FROM angajati
WHERE id_manager IS NOT NULL);

SAU

SELECT a.nume FROM angajati a


WHERE NOT EXISTS
(SELECT 1 FROM angajati b ALTER TABLE angajati
ADD CONSTRAINT ang_manager_fk FOREIGN KEY (id_manager)
WHERE b.id_manager=a.id_angajat);
REFERENCES angajati (id_angajat);

18 19

18 19

9
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice. Interogarea datelor. Cereri ierarhice.
Nod rădăcină
Exemple de date structurate ierarhic:
Nivel 1
•Ierarhii organizaționale
•Arbori genealogici
Nivel 2
•Link-uri dintre paginile Web ale unei aplicații
•Legături în cadrul rețelelor de socializare Nivel 3
•Activitățile unui proiect
•Sistemul de fișiere
Nivel 4

Nod Nod frunză

20 21

20 21

10
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice. Interogarea datelor. Cereri ierarhice.
SELECT a.id_angajat, a.nume "ANGAJAT", Clauze în SELECT Descriere
a.id_manager, m.nume "MANAGER" START WITH identifică nodul rădăcină
FROM angajati a, angajati m defineşte legăturile de tip self-join, precum şi direcţia în care va
CONNECT BY
WHERE a.id_manager=m.id_angajat fi traversată ierarhia
ORDER BY a.id_angajat; ORDER SIBLINGS BY sortează liniile din cadrul fiecărui nivel ierarhic
ID_ANGAJAT ANGAJAT ID_MANAGER MANAGER
---------- ------------------------- ---------- --------------------- Alte concepte utilizate:
101 Kochhar 100 King
102 De Haan 100 King PRIOR - utilizat în cadrul CONNECT BY pentru stabilirea direcţiei în care va fi traversată
103 Hunold 102 De Haan ierarhia
104 Ernst 103 Hunold
105 Austin 103 Hunold LEVEL - pseudo-coloană care identifică valoarea corespunzătoare nivelului din ierarhie
106 Pataballa 103 Hunold (LEVEL 1 corespunde nodului rădăcină, LEVEL 2 indică nivelul copil relativ la rădăcină etc.)
107 Lorentz 103 Hunold
108 Greenberg 101 Kochhar SYS_CONNECT_BY_PATH – funcţie care afişează calea către orice nod, pornind de la nodul
109 Faviet 108 Greenberg rădăcină
110 Chen 108 Greenberg CONNECT_BY_ROOT – operator care referă datele din nodul rădăcină
23

22 23

11
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice. Interogarea datelor. Cereri ierarhice.
LEVEL ID_ANGAJAT NUME LEVEL ID_ANGAJAT ANGAJAT
---------- ---------- ---------
1 100 King
SELECT LEVEL, id_angajat, ----------1 ---------- -------------------
100 King
SELECT LEVEL, id_angajat, nume 2 101 Kochhar LPAD(' ',LEVEL)||nume angajat 2 101 Kochhar
3 108 Greenberg 3 108 Greenberg
FROM angajati 4 109 Faviet
FROM angajati 4 109 Faviet
4 110 Chen
START WITH id_angajat=100 4 110 Chen START WITH id_angajat=100
4 111 Sciarra 4 111 Sciarra
CONNECT BY 4 112 Urman CONNECT BY 4 112 Urman
4 113 Popp
id_manager=PRIOR id_angajat; 4 113 Popp id_manager=PRIOR id_angajat; 3 200 Whalen
3 200 Whalen
3 203 Mavris
3 203 Mavris 3 204 Baer
3 204 Baer 3 205 Higgins
3 205 Higgins 4 206 Gietz
4 206 Gietz 2 102 De Haan
2 102 De Haan 3 103 Hunold
3 103 Hunold 4 104 Ernst
4 104 Ernst 4 105 Austin
4 105 Austin 4 106 Pataballa
4 106 Pataballa 4 107 Lorentz
4 107 Lorentz

24 25

12
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice. Interogarea datelor. Cereri ierarhice.
LEVEL ID_ANGAJAT ANGAJAT
SELECT LEVEL, id_angajat, SELECT LEVEL, id_angajat, ---------- ---------- ----------------
1 100 King
LPAD(' ',LEVEL)||nume angajat LPAD(' ',LEVEL)||nume angajat 2 148 Cambrault
FROM angajati 3 172 Bates
FROM angajati 3 169 Bloom
START WITH id_angajat=110 START WITH id_angajat=100 3 170 Fox
3 173 Kumar
CONNECT BY CONNECT BY 3 168 Ozer
PRIOR id_manager = id_angajat; 3 171 Smith
id_manager=PRIOR id_angajat 2 102 De Haan
ORDER SIBLINGS BY nume; 3 103 Hunold
LEVEL ID_ANGAJAT ANGAJAT 4 105 Austin
---------- ---------- ---------- 4 104 Ernst
1 110 Chen 4 107 Lorentz
2 108 Greenberg 4 106 Pataballa
3 101 Kochhar 2 147 Errazuriz
4 100 King 3 166 Ande
3 167 Banda
3 163 Greene
3 165 Lee
3 164 Marvins

26 27

13
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice. Interogarea datelor. Cereri ierarhice.
LEVEL ID_ANGAJAT ANGAJAT
------ ---------- --------------------------------- LEVEL ID_ANGAJAT ANGAJAT
SELECT LEVEL, id_angajat, 1 100 /King SELECT LEVEL, id_angajat, ---------- ---------- -----------------
2 101 /King/Kochhar 1 100 King
SYS_CONNECT_BY_PATH(nume,'/') 3 108 /King/Kochhar/Greenberg
LPAD(' ',LEVEL)||nume angajat
2 102 De Haan
angajat 4 109 /King/Kochhar/Greenberg/Faviet FROM angajati 3 103 Hunold
4 110 /King/Kochhar/Greenberg/Chen 4 104 Ernst
FROM angajati 4 111 /King/Kochhar/Greenberg/Sciarra START WITH id_angajat=100 4 105 Austin
4 112 /King/Kochhar/Greenberg/Urman
START WITH id_angajat=100 CONNECT BY 4 106 Pataballa
4 113 /King/Kochhar/Greenberg/Popp
3 200 /King/Kochhar/Whalen 4 107 Lorentz
CONNECT BY 3 203 /King/Kochhar/Mavris
id_manager=PRIOR id_angajat 2 114 Raphaely
id_manager=PRIOR id_angajat; 3 204 /King/Kochhar/Baer 3 115 Khoo
AND id_angajat!=101; 3 116 Baida
3 205 /King/Kochhar/Higgins
4 206 /King/Kochhar/Higgins/Gietz 3 117 Tobias
2 102 /King/De Haan 3 118 Himuro
3 103 /King/De Haan/Hunold 3 119 Colmenares
4 104 /King/De Haan/Hunold/Ernst
4 105 /King/De Haan/Hunold/Austin
4 106 /King/De Haan/Hunold/Pataballa
4 107 /King/De Haan/Hunold/Lorentz

28 29

14
Limbajul SQL-Oracle Limbajul SQL-Oracle
Actualizarea datelor Actualizarea datelor. Comanda MERGE
SELECT id_angajat, nume, salariul, id_functie
Comandă Descriere
FROM angajati
INSERT adaugă o înregistrare nouă într-o tabelă
ORDER BY id_angajat;
UPDATE modifică valori asociate coloanelor unei tabele
realizează fie modificări ale datelor, fie ştergeri, fie ID_ANGAJAT NUME SALARIUL ID_FUNCTIE
MERGE adăugări de înregistrări dintr-o altă tabelă, în funcţie de o ---------- ------------------------- ---------- ----------
100 King 24000 AD_PRES
condiţie de potrivire
101 Kochhar 17000 AD_VP
DELETE şterge înregistrări dintr-o tabelă 102 De Haan 17000 AD_VP
103 Hunold 9110 IT_PROG
104 Ernst 6110 IT_PROG
105 Austin 4910 IT_PROG
106 Pataballa 4910 IT_PROG
107 Lorentz 4310 IT_PROG

30 31

30 31

15
Limbajul SQL-Oracle Limbajul SQL-Oracle
Actualizarea datelor. Comanda MERGE Actualizarea datelor. Comanda MERGE
SELECT id_angajat, nume, salariul, id_functie MERGE INTO angajati a
USING angajati_noi b
FROM angajati_noi
ON (a.id_angajat=b.id_angajat)
ORDER BY id_angajat; WHEN MATCHED THEN
UPDATE
ID_ANGAJAT NUME SALARIUL ID_FUNCTIE
---------- ------------------------- ---------- ---------- SET a.salariul=b.salariul,
99 Loren 4000,00 AD_PRES a.id_functie=b.id_functie
103 Hunold 9500,00 AD_PRES
104 Ernst 6000,00 IT_PROG WHEN NOT MATCHED THEN
105 Austin 7500,00 IT_PROG INSERT
106 Pataballa 4800,00 IT_PROG
120 Weiss 8000,00 ST_MAN (a.id_angajat,a.prenume,a.nume,a.email,a.data_angajare
121 Fripp 8200,00 ST_MAN ,a.id_functie,a.salariul,a.id_departament)
122 Kaufling 7900,00 ST_MAN
123 Vollman 6500,00 ST_MAN VALUES
124 Mourgos 5800,00 ST_MAN (b.id_angajat,b.prenume,b.nume,b.email,b.data_angajare
32 ,b.id_functie,b.salariul,b.id_departament);
33

32 33

16
Limbajul SQL-Oracle CURSUL 11...
Actualizarea datelor. Comanda MERGE
SELECT id_angajat, nume, salariul, id_functie
Gestiunea altor obiecte ale bazei de date
FROM angajati
ORDER BY id_angajat;

ID_ANGAJAT NUME SALARIUL ID_FUNCTIE


---------- ------------------------- ---------- ----------
99 Loren 4000,00 AD_PRES
100 King 24000,00 AD_PRES
101 Kochhar 17000,00 AD_VP
102 De Haan 17000,00 AD_VP
103 Hunold 9500,00 AD_PRES
104 Ernst 6000,00 IT_PROG
105 Austin 7500,00 IT_PROG
106 Pataballa 4800,00 IT_PROG
107 Lorentz 4200,00 IT_PROG
108 Greenberg 12000,00 FI_MGR

34

34 35

17
ACADEMIA DE STUDII ECONOMICE BUCUREŞTI
FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

Obiecte ale bazei de date


BAZE DE DATE
✓ Tabele virtuale (VIEWS)

✓ Secvenţe (SEQUENCES)
Gestiunea altor obiecte ✓ Sinonime (SYNONYMS)
ale bazei de date ✓ Indecşi (INDEXES)

✓ Clustere (CLUSTERS)
✓ etc.

BUCUREŞTI
2019-2020

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA) 2

1 2

1
Tabele virtuale Tabele virtuale
❑ Tabelă virtuală  view  viziune  vedere Crearea unei tabele virtuale:

❑ O tabelă virtuală desemnează o comandă SELECT stocată CREATE [OR REPLACE] VIEW nume_view
în baza de date sub un anumit nume
AS
❑ O tabelă virtuală poate fi referită ca şi orice altă tabelă de comandă SELECT
bază
[WITH READ ONLY]
❑ Principala utilitate a tabelelor virtuale: asigurarea [WITH CHECK OPTION];
securităţii unei baze de date

3 4

3 4

2
Tabele virtuale Tabele virtuale
❑ O tabelă virtuală trebuie să aibă nume de coloane valide
CREATE OR REPLACE VIEW vw_angajati AS  atenţie la utilizarea expresiilor!
SELECT id_angajat, nume, telefon
FROM angajati;
❑ În funcţie de complexitatea comenzii SELECT, tabelele virtuale
pot fi:
➢ simple (cu interogări asupra unei singure tabele, fără grupări sau
expresii)
View VW_ANGAJATI created. SELECT * FROM vw_angajati;
➢ complexe (cu interogări asupra mai multor tabele, cu grupări sau
folosind expresii)

❑ Asupra tabelelor virtuale simple pot fi utilizate comenzi de


actualizare, cu condiţia să nu se încalce nicio restricţie de
integritate din tabela de bază.
........
5 6

5 6

3
Tabele virtuale Tabele virtuale
CREATE OR REPLACE VIEW clerk AS
SELECT id_angajat, nume, id_departament, id_functie
FROM angajati
❑ Clauze de restricţionare în subcererea care stă la baza
WHERE id_functie = 'PU_CLERK'
unei tabele virtuale:
OR id_functie = 'SH_CLERK'
OR id_functie = 'ST_CLERK'; ✓ WITH CHECK OPTION
✓ WITH READ ONLY

UPDATE clerk
SET id_functie = 'PU_MAN'
WHERE id_angajat = 115;

7 8

7 8

4
Tabele virtuale Tabele virtuale
CREATE OR REPLACE VIEW clerk AS CREATE OR REPLACE VIEW clerk AS
SELECT id_angajat, nume, id_departament, id_functie SELECT id_angajat, nume, id_departament, id_functie
FROM angajati FROM angajati
WHERE id_functie = 'PU_CLERK' WHERE id_functie = 'PU_CLERK'
OR id_functie = 'SH_CLERK' OR id_functie = 'SH_CLERK'
OR id_functie = 'ST_CLERK' OR id_functie = 'ST_CLERK'
WITH CHECK OPTION; WITH READ ONLY;

UPDATE clerk UPDATE clerk


SET id_functie = 'PU_MAN' SET id_functie = 'ST_CLERK' UPDATE clerk
WHERE id_angajat = 115; WHERE id_angajat = 116; SET id_functie = 'ST_CLERK'
WHERE id_angajat = 116;
ORA-01402: în vizualizarea
WITH CHECK OPTION clauza ORA-42399: nu se poate efectua o operatie DML asupra unei
WHERE este încalcata vederi read-only

9 10

9 10

5
Tabele virtuale Secvenţe

Tabele virtuale definite inline ❑ O secvenţă desemnează un obiect al bazei de date,


independent de tabele, care este utilizat pentru a genera şiruri
O tabelă virtuală definită inline este reprezentată de o subcerere de numere
utilizată în clauza FROM a unei comenzi SELECT.
❑ Principalul scop al utilizării unei secvenţe: generarea de valori
distincte pentru câmpul cheie primară dintr-o tabelă

Ştergerea tabelelor virtuale


CREATE SEQUENCE nume_secvenţă
DROP VIEW nume_view;
opţiuni_secvenţă;

11 12

11 12

6
Secvenţe Secvenţe
Opţiunile posibil de specificat la crearea unei secvenţe: Utilizarea secvenţelor presupune referirea a două pseudo-coloane:
❑ NEXTVAL
START WITH număr_întreg
◦ incrementează secvenţa către următorul număr, în concordanţă cu
INCREMENT BY număr_întreg directivele indicate la crearea secvenţei
MAXVALUE număr_întreg ◦ returnează noua valoare
NOMAXVALUE ◦ apelul iniţial al lui NEXVAL va returna prima valoare din secvenţă
MINVALUE număr_întreg ❑ CURRVAL
NOMINVALUE ◦ afişează valoarea curentă din secvenţă
CYCLE ◦ poate fi utilizată numai dacă anterior a fost deja referită pseudo-
coloana NEXTVAL
NOCYCLE
13 14

13 14

7
Secvenţe Secvenţe
Aspecte privind utilizarea secvenţelor:
CREATE SEQUENCE seq_dep CREATE SEQUENCE seq_ang
◦ o comandă SQL care foloseşte pseudo-coloana NEXTVAL va conduce
START WITH 1 START WITH 1 la avansarea în secvenţă chiar şi în cazul în care comanda iniţială
INCREMENT BY 1 INCREMENT BY 1 eşuează
MAXVALUE 10 MAXVALUE 90 ◦ nu pot fi folosite pseudo-coloanele NEXTVAL şi CURRVAL în clauza
NOCYCLE; NOCYCLE; DEFAULT a comenzilor CREATE TABLE sau ALTER TABLE
◦ nu pot fi folosite pseudo-coloanele NEXTVAL şi CURRVAL în subcereri
INSERT INTO departamente (id_departament, incluse în comenzile CREATE VIEW sau SELECT, UPDATE, DELETE
denumire_departament) ◦ nu pot fi folosite pseudo-coloanele NEXTVAL şi CURRVAL în clauza
VALUES (seq_dep.NEXTVAL, 'IT'); WHERE a unei comenzi SELECT
INSERT INTO angajati (id_angajat, nume, id_departament) ◦ nu pot fi folosite pseudo-coloanele NEXTVAL şi CURRVAL la definirea
VALUES (seq_ang.NEXTVAL, 'Gigi', seq_dep.CURRVAL); restricţiilor de integritate de tip CHECK

15 16

15 16

8
Secvenţe Sinonime

Modificarea secvenţelor:
Un sinonim reprezintă un nume alternativ (alias) pentru un alt
ALTER SEQUENCE nume_secvenţă obiect al bazei de date.
opţiuni_secvenţă;
Există două tipuri de sinonime:
Ştergerea secvenţelor: ➢ Private: există doar la nivelul utilizatorului care le-a creat
DROP SEQUENCE nume_secvenţă;
➢ Publice: sunt deţinute de utilizatorul PUBLIC şi sunt în mod
automat vizibile tuturor utilizatorilor

17 18

17 18

9
Sinonime Sinonime
Crearea sinonimelor:
◦ private
Ştergerea sinonimelor:
CREATE OR REPLACE SYNONYM ang1 FOR angajati;
◦ private
◦ publice
DROP SYNONYM ang1;
CREATE OR REPLACE PUBLIC SYNONYM ang2 FOR
angajati;
◦ publice
DROP PUBLIC SYNONYM ang2;
Utilizarea sinonimelor:
SELECT id_angajat, nume, id_departament,
id_functie
FROM ang1
WHERE id_functie = 'PU_CLERK';
19 20

19 20

10
Aspecte privind indexarea în bazele de
Indecşi date
❑ Un index este un obiect asociat unei tabele sau unui grup de ❑ absenţa sau prezenţa unui index nu influenţează în niciun fel
tabele (cluster), care se creează în mod explicit folosind structura comenzilor SQL de regăsire a datelor din baza de date;
comanda SQL CREATE INDEX pentru a mări viteza de acces la
❑ pentru creşterea vitezei de execuţie a operaţiilor de joncţiune,
datele unei tabele. se recomandă indexarea coloanelor care participă la join;
❑ Coloanele care au ataşate restricţii PRIMARY KEY sau UNIQUE ❑ dacă se distrug indecşii, aplicaţia cu baze de date continuă să
au indecşi creaţi automat. funcţioneze, dar cu performanţe mai mici;
❑ Indecşii pot fi unici sau nu. Crearea unui index unic se face cu ❑ indecşii sunt logic şi fizic independenţi de datele tabelelor cu
comanda CREATE UNIQUE INDEX sau prin definirea unei care sunt asociaţi;
restricţii de integritate UNIQUE sau PRIMARY KEY.

21 22

21 22

11
Aspecte privind indexarea în bazele de Aspecte privind indexarea în bazele de
date date
Un index poate fi creat în mod implicit, odată cu activarea
❑ numărul indecşilor ce pot fi creaţi pentru o tabelă poate fi constrângerilor de integritate UNIQUE sau PRIMARY KEY sau
oricât de mare, cu toate acestea numărul lor trebuie corelat cu explicit, prin folosirea comenzii SQL CREATE INDEX.
tipul operaţiilor majoritare ce se vor executa asupra tabelei;
Crearea implicită se face astfel:
❑ un index se recomandă a se crea după ce datele au fost CREATE TABLE angajati
încărcate în tabelă, altfel acesta va trebui actualizat de fiecare
dată când se încarcă un rând în tabelă; (marca NUMBER(3) PRIMARY KEY,
CNP VARCHAR2(13) UNIQUE
❑ Oracle întreţine în mod automat indecşii creaţi, astfel încât în
nume VARCHAR2(30));
aceştia se reflectă toate actualizările (adăugări, modificări sau
ştergeri de înregistrări) efectuate asupra datelor tabelelor cu
care sunt asociaţi. Crearea explicită se face astfel:
CREATE INDEX idx_nume ON angajati(nume);

23 24

23 24

12
Aspecte privind indexarea în bazele de
date Tipuri de indecşi

Actualizarea unui index se face prin comanda SQL ALTER INDEX. Tip index Descriere

Tipul de index creat la executarea unei comenzi standard


Un index poate fi distrus atunci când:
CREATE INDEX.
Index de tip arbore B
Un arbore B este un arbore în care pentru găsirea oricărei
◦ nu mai este necesar sau nu a adus performanţele anticipate; (B-tree index) valori este necesar acelaşi număr de paşi, indiferent de
valoarea căutată.
◦ aplicaţia nu mai foloseşte indexul pentru regăsirea datelor;
Index de cluster (index
Index bazat pe coloanele comune ale unui cluster
◦ indexul a devenit invalid sau spaţiul său de memorie este prea de grup)
fragmentat şi trebuie distrus pentru a fi recreat;
Index cu cheie inversă Tip de index folositor numai în cazul căutării în arbore a
(reverse-key index) unor valori exacte
Ştergerea unui index se face prin comanda DROP INDEX.
Se recomandă atunci când numărul de valori distincte ale
coloanei indexate este relativ mic (de exemplu, în cazul
Index de tip bitmap unei coloane care conţine starea civilă a unei persoane,
25 unitatea de măsură a unui produs etc.) 26

25 26

13
Grupări de tabele (clustere) Grupări de tabele (clustere)
❑ Cheia unui cluster este definită ca fiind coloana sau coloanele
pe care tabelele grupate le au în comun.
❑ Clusterele sunt metode opţionale de memorare a datelor
unor tabele. ❑ Cheia unui cluster nu trebuie confundată cu cheile primare ale
❑ Clusterul este o regrupare fizică a două sau mai multe tabele, tabelelor grupate. Valorile cheii clusterului sunt stocate o
relativ la una sau mai multe coloane, cu scopul creşterii singură dată în schemă, reducându-se astfel spaţiul de stocare
performanţelor. necesar şi procesările suplimentare.
❑ Coloanele de legătură ale tabelelor într-un cluster se numesc ❑ Clusterul este un mecanism transparent aplicaţiilor care
chei ale clusterului. utilizează tabelele acestuia. Datele din tabele sunt manipulate
❑ Tabelele dintr-un cluster sunt stocate împreună pentru a ca şi când acestea ar fi stocate într-o tabelă normală, însă în
reduce numărul de operaţii de I/O cu discul. momentul interogării se va observa o creştere semnificativă a
performanţelor.

27 28

27 28

14
Grupări de tabele (clustere) Grupări de tabele (clustere)
1) Crearea clusterului
Pentru crearea clusterului se foloseşte comanda SQL CREATE CLUSTER în
Pentru a crea o tabelă într-un cluster se parcurg în mod care trebuie specificate coloana sau grupul de coloane după care sunt
obligatoriu următorii paşi: grupate tabelele.

1. Se creează clusterul Sintaxa simplificată a comenzii de creare:


CREATE CLUSTER nume_cluster
(nume_coloana tip_data [, nume_coloana tip_data])
2. Se adaugă tabelele la cluster
Sintaxa completă a comenzii de creare:
3. Se creează indexul de cluster CREATE CLUSTER nume_cluster
(nume_coloana tip_data [, nume_coloana tip_data] )
Adaugarea tabelelor la cluster se poate face şi după ce [PCTFREE intreg] [PCTUSED intreg]
indexul de cluster a fost creat. [SIZE intreg]
[TABLESPACE spatiu_tabel]
[STORAGE parametrii_de_stocare]

29 30

29 30

15
Grupări de tabele (clustere) Grupări de tabele (clustere)
2) Adăugarea tabelelor la cluster 3) Crearea indexului de cluster

După crearea clusterului, adăugarea tabelelor la cluster se face folosind Pentru coloanele cheie ale clusterului trebuie creat în mod explicit un
comanda CREATE TABLE cu clauza CLUSTER: index de cluster (index de grup). Indexul este utilizat pentru localizarea
CREATE TABLE nume_cluster univocă a liniilor.
(nume_coloana tip_data [, nume_coloana Indexul de cluster trebuie creat înaintea efectuării oricărei operaţii de
tip_data]) interogare sau actualizare asupra clusterului.
CLUSTER nume_cluster Pentru crearea unui index de cluster se foloseşte comanda SQL CREATE
INDEX cu opţiunea ON CLUSTER:
Datorită faptului că tabelele clusterului folosesc alocarea de spaţiu a
acestuia, la folosirea comenzii CREATE TABLE cu opţiunea CLUSTER nu CREATE INDEX nume_index ON CLUSTER
trebuie specificaţi alţi parametri de stocare. nume_cluster;
Nu se poate asocia un cluster unei tabele care există deja. Dacă se
doreşte totuşi acest lucru, se creează o nouă tabelă care va fi inclusă în
cluster şi care va conţine înregistrările tabelei existente (folosind
optiunea AS SELECT).
31 32

31 32

16
Exemplificare SQL-Oracle
Crearea clusterului sal_dept, cu indicarea grupării după coloanele cod_dept şi cod_tara Grupări de tabele (clustere)
CREATE CLUSTER sal_dept
(cod_dept NUMBER(10),
cod_tara NUMBER(10)); Comanda ALTER CLUSTER poate fi folosită pentru a modifica parametrii
Adăugarea tabelelor la clusterul sal_dept de stocare ai clusterului.
CREATE TABLE departamente CREATE TABLE salariati Pentru distrugerea unui cluster se foloseşte comanda SQL DROP
(cod_dept NUMBER(10), (cod_salariat NUMBER(10) PRIMARY KEY, CLUSTER.
cod_tara NUMBER(10), nume VARCHAR2(10) NOT NULL,
nume_dept VARCHAR2(10), prenume VARCHAR2(10), Pentru a şterge un cluster care conţine tabele se foloseşte clauza
PRIMARY KEY(cod_dept, data_nastere DATE, opţională INCLUDING TABLES:
cod_tara) salariu NUMBER(10), DROP CLUSTER sal_dept
) cod_dept NUMBER(10),
CLUSTER sal_dept(cod_dept, cod_tara NUMBER(10), INCLUDING TABLES;
cod_tara); FOREIGN KEY(cod_dept, cod_tara)
REFERENCES Dacă există tabele din afara clusterului care conţin restricţii de
departament(cod_dept,cod_tara)) integritate care se referă la chei din tabelele clusterului, acestea trebuie
CLUSTER sal_dept(cod_dept,cod_tara); de asemenea eliminate. Pentru acest lucru se foloseşte clauza opţională
CASCADE CONSTRAINTS;
Crearea indexului pentru clusterul sal_dept
DROP CLUSTER sal_dept
CREATE INDEX sal_dept_ind
ON CLUSTER sal_dept; 33
INCLUDING TABLES CASCADE CONSTRAINTS; 34

33 34

17
ACADEMIA DE STUDII ECONOMICE BUCUREŞTI
FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

Necesitatea optimizării cererilor de


regăsire
 Sistemul de gestiune a bazelor de date relaţionale (SGBDR) are
BAZE DE DATE sarcina de a alege cea mai puţin costisitoare metodă de
execuţie a unei cereri de regăsire;
 Costul de execuţie este măsurat de obicei prin timpul de
răspuns, dar şi prin resursele fizice implicate în procesul
Optimizarea cererilor de execuţiei cererii de regăsire a datelor (în termeni de memorie,
regăsire a datelor în bazele de date CPU, operaţii de I/O);

minimizarea costului de
execuţie

optimizarea cererii de regăsire a datelor


BUCUREŞTI
2019-2020

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA) 2

1
Mecanisme de optimizare a cererilor de
regăsire Strategii de optimizare a cererilor de
Transformări relaţionale
regăsire în SGBD ORACLE
orice interogare se poate scrie cu ajutorul expresiilor bazate pe calcul relaţional şi pe algebra relaţională
cele două tipuri sunt echivalente şi pot fi oricând rescrise în celălalt tip
se pot realiza prin două strategii de optimizare:
generale: se bazează pe proprietăţile operaţiilor din algebra relaţională:  SGBD Oracle dispune de un instrument de analiză a timpilor şi a
selecţia înaintea proiecţiei
selecţia înaintea joncţiunii algoritmilor de execuţie a cererilor – Explain Plan;
proiecţia înaintea joncţiunii
specifice: depind de SGBDR şi ţin de memorarea datelor, de modul de accesare, precum şi de  În momentul în care se execută o cerere de regăsire, în funcţie de anumiţi
ordonarea expresiilor algebrice
factori, Oracle aplică un anumit algoritm, de regulă optimizat. Explain Plan
indică secvenţa de paşi pe care optimizatorul Oracle i-a ales pentru
execuţia cererii SQL;
Optimizarea alocării Optimizarea accesului
prin definiţie, bazele de date prin definiţie, căutarea datelor  Principiul de lucru are la bază costul execuţiei acelei cereri aplicând pe rând
sunt mari consumatoare de într-o bază de date este o
spaţiu, atât în memoria internă, activitate consumatoare de
diverşi algoritmi de optimizare în funcţie de statisticile obţinute din
cât şi în cea externă timp, din cauza volumului mare dicţionarul metadatelor referitoare la: operatorii relaţionali, numărul de
pentru folosirea cât mai de date stocat şi a complexităţii
eficientă a acestora, SGBDR Mecanisme de SGBDR prezintă cele mai înregistrări din fiecare tabelă implicată, indecşi, clustere şi partiţii
folosesc diverse mecanisme:
reutilizarea, realocarea, zone de
optimizare a cererilor bune performanţe din punctul disponibile pentru acele tabele implicate în cerere;
de vedere al regăsirii datelor,
memorie cu destinaţie specială, datorită limbajelor relaţionale
comprimarea datelor, alocarea implementate – SQL  Sunt luaţi în calcul şi alţi factori precum căile de acces la date, ordinea
dinamică joncţiunilor, resursele fizice disponibile (CPU, memorie, operaţii de I/O).

3 4

2
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
1.Se indexează coloanele cel mai des folosite în clauza WHERE, pentru acces direct
la înregistrările care dau elemente ale rezultatului
CREATE INDEX IDX_DESCRIERE ON T_PRODUSE (DESCRIERE);
SELECT *
FROM T_PRODUSE
WHERE DESCRIERE = 'Toner';
După:

Înainte:

5 6

3
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
2. Se evită folosirea funcţiilor UPPER sau LOWER asupra coloanelor indexate CREATE INDEX IDX_DESCRIERE_UP
ON T_PRODUSE (UPPER(DESCRIERE));
SELECT *
FROM T_PRODUSE
WHERE UPPER(DESCRIERE) = 'TONER'; După:

Înainte:

7 8

4
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
3. Se evită folosirea funcţiei SUBSTR asupra coloanelor indexate SELECT *
FROM T_PRODUSE
SELECT *
FROM T_PRODUSE WHERE DESCRIERE like 'To%';
WHERE SUBSTR(DESCRIERE,1,2) = 'To'; După:
Înainte:

9 10

5
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
4. Se recomandă folosirea clauzei EXISTS în loc de DISTINCT SELECT C.ID_PRODUS, C.ID_COMANDA
FROM T_COMENZI_DESFACERE C
SELECT DISTINCT P.ID_PRODUS, C.ID_COMANDA
WHERE EXISTS (SELECT 'x'
FROM T_PRODUSE P, T_COMENZI_DESFACERE C FROM T_PRODUSE P
WHERE P.ID_PRODUS=C.ID_PRODUS; where P.ID_PRODUS=C.ID_PRODUS);

Înainte: După:

6
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
5. Se evită plasarea în clauza HAVING a condiţiilor care nu includ funcţii de grup După:
SELECT ID_COMANDA, COUNT(ID_PRODUS)
Înainte: FROM T_COMENZI_DESFACERE
SELECT ID_COMANDA, COUNT(ID_PRODUS) WHERE ID_COMANDA IN (66,77)
FROM T_COMENZI_DESFACERE GROUP BY ID_COMANDA;
GROUP BY ID_COMANDA
HAVING ID_COMANDA IN (66,77);

7
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
6. Se folosesc grupuri de tabele (clustere) astfel încât tabelele care sunt accesate CREATE CLUSTER T_CLU (ID_PRODUS NUMBER);
frecvent împreună să poată fi stocate fizic în aceleaşi blocuri de date, cu
scopul reducerii numărului de operaţii de I/O şi implicit pentru a creşte CREATE TABLE T_PRODUSEC CREATE TABLE T_COMENZI_DESFACEREC
performanţele ( (
ID_PRODUS NUMBER not null, TIP VARCHAR2(25) not null,
Înainte: ID_ORGANIZATIE NUMBER not null, VERIFICAT VARCHAR2(25),
DESCRIERE VARCHAR2(240), STATUS VARCHAR2(25),
SELECT C.ID_COMANDA, C.STATUS, P.ID_PRODUS ID_CLIENT NUMBER,
CATEGORIE VARCHAR2(333),
FROM T_PRODUSE P, T_COMENZI_DESFACERE C GRUPA VARCHAR2(47) ID_COMANDA NUMBER not null,
WHERE P.ID_PRODUS=C.ID_PRODUS; ) DATA DATE,
CLUSTER T_CLU(ID_PRODUS); ID_RAND_COMANDA NUMBER not null,
ID_ORGANIZATIE NUMBER,
ID_PRODUS NUMBER,
CANTITATE_COMANDATA NUMBER,
CANTITATE_LIVRATA NUMBER,
PRET NUMBER
)
CLUSTER T_CLU(ID_PRODUS);

CREATE INDEX IDX_CLU ON CLUSTER T_CLU; 16

8
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
SAU După:
CREATE CLUSTER T_CLU (ID_PRODUS NUMBER); SELECT C.ID_COMANDA, C.STATUS, P.ID_PRODUS
CREATE INDEX IDX_CLU ON CLUSTER T_CLU; FROM T_PRODUSEC P, T_COMENZI_DESFACEREC C
WHERE P.ID_PRODUS=C.ID_PRODUS;
CREATE TABLE T_PRODUSEC CREATE TABLE T_COMENZI_DESFACEREC
CLUSTER T_CLU (ID_PRODUS) CLUSTER T_CLU (ID_PRODUS)
AS SELECT * FROM T_PRODUSE; AS SELECT * FROM T_COMENZI_DESFACERE;

17 18

9
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
7. Se construiesc indecşi asupra funcţiilor ataşate coloanelor (function-based
indexes) CREATE INDEX IDX_REST ON
SELECT C.ID_COMANDA, P.ID_PRODUS, T_COMENZI_DESFACERE (CANTITATE_COMANDATA-CANTITATE_LIVRATA);
C.CANTITATE_COMANDATA-C.CANTITATE_LIVRATA "REST"
FROM T_COMENZI_DESFACERE C, T_PRODUSE P
După:
WHERE P.ID_PRODUS=C.ID_PRODUS
AND C.CANTITATE_COMANDATA - C.CANTITATE_LIVRATA > 0;
Înainte:

19

10
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
8. Se indexează coloanele ale căror valori sunt sortate des
CREATE INDEX IDX_CATEG ON T_PRODUSE (CATEGORIE);

SELECT *
FROM T_PRODUSE După:
ORDER BY CATEGORIE DESC;

Înainte:

21 22

11
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
9. În funcţia COUNT se folosesc ROWID sau coloane indexate După:

SELECT COUNT(id_produs)
Înainte: FROM T_PRODUSE;
SELECT COUNT(CATEGORIE) sau
FROM T_PRODUSE; SELECT COUNT(ROWID)
FROM T_PRODUSE;

23 24

12
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.
10. Se partiţionează tabelele de mari dimensiuni în segmente mai mici numite
create table T_COMENZI_DESFACERE_P
partiţii, astfel încât interogările să le acceseze individual şi nu întreaga tabelă (
din care au provenit TIP VARCHAR2(25) not null,
VERIFICAT VARCHAR2(25),
Înainte: STATUS VARCHAR2(25),
SELECT C.ID_COMANDA, C.STATUS, P.ID_PRODUS ID_CLIENT NUMBER,
FROM T_PRODUSE P, T_COMENZI_DESFACERE C ID_COMANDA NUMBER not null,
DATA DATE,
WHERE P.ID_PRODUS=C.ID_PRODUS ID_RAND_COMANDA NUMBER not null,
AND C.CANTITATE_COMANDATA = 2; ID_ORGANIZATIE NUMBER,
ID_PRODUS NUMBER,
CANTITATE_COMANDATA NUMBER,
CANTITATE_LIVRATA NUMBER,
PRET NUMBER
)
PARTITION BY RANGE (CANTITATE_COMANDATA)
(PARTITION CANT_1 VALUES LESS THAN (100) ,
PARTITION CANT_2 VALUES LESS THAN (1000),
PARTITION CANT_3 VALUES LESS THAN (10000));
26

13
Strategii de optimizare a cererilor de regăsire. Strategii de optimizare a cererilor de regăsire.
Recomandări. Recomandări.

După: 11. Se folosesc explicit algoritmi de optimizare a joncţiunilor

 Se aleg algoritmii care minimizează costul de execuţie şi implică un minim de


resurse;
 Aceşti algoritmi selectaţi implicit de către Oracle pot fi aleşi explicit şi de către
programator cu ajutorul unor directive inserate în codul SQL, astfel încât să se
seteze parametrul OPTIMIZER_MODE pentru o anumită cerere;
 Algoritmi de optimizare utilizaţi în cazul joncţiunilor: FULL TABLE SCANS,
INDEX SCANS, NESTED LOOPS, HASH JOINS, SORT MERGE JOINS;
 Alegerea unui anumit tip de algoritm se face în funcţie de statisticile
obţinute.

27 28

14
Strategii de optimizare a cererilor de regăsire
Strategii de optimizare a cererilor de regăsire în SGBD ORACLE
în SGBD ORACLE Exemplul următor prezintă modalitatea de joncţiune HASH dintre tabelele CLIENTI şi
COMENZI_DESFACERE. În acest caz tabela COMENZI_DESFACERE cu 86 de înregistrări este
utilizată pe post de tabelă hash în memorie, iar tabela CLIENTI având 262 de înregistrări va fi
Algoritmul Hash joins scanată
◦ este utilizat pentru cererile în care sunt implicate tabele cu foarte multe SELECT SELECT /*+ USE_HASH(cd c) */
c.id_client, c.id_client,
înregistrări şi asupra cărora se aplică o joncţiune de egalitate;
c.nume_client, c.nume_client,
◦ algoritmul constă în alegerea tabelei cu dimensiunea mai mică şi construirea cd.data, cd.data,
unei tabele hash în memorie pe baza condiţiei de joncţiune; cd.cantitate_comandata cd.cantitate_comandata
FROM t_clienti c, FROM t_clienti c,
◦ apoi este scanată şi cealaltă tabelă pentru regăsirea de înregistrări care
t_comenzi_desfacere cd t_comenzi_desfacere cd
corespund condiţiei de legătură; WHERE cd.id_produs=454 WHERE cd.id_produs=454
◦ acest algoritm este aplicat în cazul în care tabela mai mică încape în memoria AND c.id_client=cd.id_client; AND c.id_client=cd.id_client;
internă, astfel minimizându-se operaţiile de acces pe disc;
◦ costul execuţiei se rezumă la timpul de parcurgere a tabelei de dimensiune mare
în căutarea înregistrărilor de joncţiune.

29 30

15
Strategii de optimizare a cererilor de regăsire Strategii de optimizare a cererilor de regăsire
în SGBD ORACLE în SGBD ORACLE
Exemplul următor prezintă modalitatea de joncţiune NESTED LOOP dintre tabelele CLIENTI şi
COMENZI_DESFACERE
SELECT SELECT /*+ USE_NL (cd c)*/
Algoritmul Nested loop joins c.id_client, c.id_client,
◦ este recomandat pentru joncţiuni aplicate între subseturi relativ reduse de c.nume_client, c.nume_client,
cd.data, cd.data,
date; cd.cantitate_comandata cd.cantitate_comandata
◦ condiţia de joncţiune reprezintă un mod eficient de parcurgere a tabelelor; FROM t_clienti c, FROM t_clienti c,
◦ opţiunea de utilizare a algoritmului se specifică prin directiva USE_NL t_comenzi_desfacere cd t_comenzi_desfacere cd
WHERE cd.id_produs=454 WHERE cd.id_produs=454
AND c.id_client=cd.id_client; AND c.id_client=cd.id_client;

Prin comparaţie între cele două


metode utilizate, costul de execuţie
prin Hash Joins este de 11 iar prin
Nested Lops de 22, deci în cazul
acesta este recomandată utilizarea
primei metode

31 32

16
Strategii de optimizare a cererilor de regăsire Strategii de optimizare a cererilor de regăsire
în SGBD ORACLE în SGBD ORACLE
În exemplul următor se indexează tabelele CLIENTI şi COMENZI_DESFACERE
CREATE INDEX clienti_cust_id_idx ON t_clienti(id_client);
Algoritmul Sort merge joins CREATE INDEX cd_c_id_idx ON t_comenzi_desfacere(id_client);
CREATE INDEX cd_ord_date_idx ON t_comenzi_desfacere(data);
◦ este recomandat pentru joncţiuni în care una dintre tabele are înregistrările deja sortate;
◦ în general, dacă este realizată în prealabil o ordonare a înregistrărilor, acest algoritm duce Apoi este aplicată joncţiunea pe cele două tabele cu directiva USE_MERGE
la scăderea costurilor de execuţie faţă de rezultatele similare obţinute prin aplicarea SELECT SELECT /*+ USE_MERGE (cd c)*/
algoritmului Hash joins; c.id_client, c.id_client,
c.nume_client, c.nume_client,
◦ Sort merge joins este recomandat şi pentru cazurile în care se realizează o joncţiune cu o cd.data, cd.data,
condiţie de inegalitate sau pentru seturi foarte mari de date; cd.cantitate_comandata cd.cantitate_comandata
FROM t_clienti c, FROM t_clienti c,
◦ principiul de execuţie nu este ghidat de alegerea uneia dintre tabele, ci presupune:
t_comenzi_desfacere cd t_comenzi_desfacere cd
◦ se realizează o ordonare a datelor din ambele tabele după cheia (condiţia) de căutare. Dacă deja a WHERE cd.id_produs=454 WHERE cd.id_produs=454
fost aplicată o sortare corespunzătoare, acest pas nu se mai aplică; AND c.id_client=cd.id_client; AND c.id_client=cd.id_client;
◦ se realizează operaţia de joncţiune între cele două tabele ordonate.
◦ alegerea acestui algoritm este recomandată pentru seturi mari de date şi pentru condiţii
de inegalitate între tabele deoarece acest tip de joncţiune necesită şi o ordonare a
datelor.

33 34

17
Strategii de optimizare a cererilor de regăsire Strategii de optimizare a cererilor de regăsire
în SGBD ORACLE în SGBD ORACLE
Nested Loop Outer Joins – este Sort Merge Outer Joins – este Hash Join Outer Joins – este
Algoritmul Cartesian Joins utilizat în cazul joncţiunilor aplicat când nu se poate alege o aplicat în principal pentru volume
externe iar principiul de lucru este tabelă pe post de pivot sau mari de date astfel încât metoda
◦ se aplică în cazul joncţiunilor de tip produs cartezian, atunci când între cele două următorul: este aleasă una dintre condiţiile impuse datelor duc la o Hash să fie eficientă şi dacă nu
tabele implicate nu se poate realiza o legătură, iar rezultatul cererii constă în tabele pe post de pivot, iar creştere a costurilor obţinute prin există posibilitatea utilizării unei
combinaţia fiecărei înregistrări din prima tabelă cu fiecare înregistrare din cea înregistrările celei de-a doua aplicarea algoritmului Hash sau tabele pe post de pivot
de-a doua. tabele sunt parcurse într-un ciclu când deja înregistrările sunt
repetitiv în funcţie de condiţia de ordonate
legătură

Algoritmii Outer Joins SELECT /*+ USE_NL(c cd) */ SELECT /*+ USE_MERGE(c cd) SELECT /*+ USE_HASH(c cd)
◦ sunt aplicaţi în cazul joncţiunilor externe şi sunt de patru tipuri: Nested Loop c.id_client, */ */
c.nume_client, c.id_client, c.id_client,
Outer Joins, Hash Join Outer Joins, Sort Merge Outer Joins, Full Outer Joins. NVL(SUM(cd.cantitate_comand c.nume_client, c.nume_client,
ata),0) cantitate_totala NVL(SUM(cd.cantitate_comand NVL(SUM(cd.cantitate_comand
FROM t_clienti c, ata),0) cantitate_totala ata),0) cantitate_totala
t_comenzi_desfacere cd FROM t_clienti c, FROM t_clienti c,
WHERE t_comenzi_desfacere cd t_comenzi_desfacere cd
c.id_client=cd.id_client(+) WHERE WHERE
group by c.id_client, c.id_client=cd.id_client(+) c.id_client=cd.id_client(+)
c.nume_client; group by c.id_client, group by c.id_client,
c.nume_client; c.nume_client;
35 36

18
Strategii de optimizare a cererilor de regăsire
în SGBD ORACLE CURSUL 13...

Protecţia bazelor de date

Administrarea bazelor de date

37

19
ACADEMIA DE STUDII ECONOMICE BUCUREŞTI
FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

Protecţia bazelor de date


Este asigurată prin cele două aspecte care trebuie luate în calcul:
BAZE DE DATE
a) Controlul integrităţii datelor
1. Integritatea semantică
2. Controlul concurenţei la date
3. Salvarea / restaurarea datelor
PROTECŢIA BAZELOR DE DATE b) Controlul securităţii datelor
1. Autorizarea şi controlul accesului la date
2. Tabele virtuale
3. Proceduri speciale
4. Criptarea datelor
BUCUREŞTI
2019-2020

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA) 2

1 2

1
Integritatea datelor Integritatea datelor
INTEGRITATEA SEMANTICĂ
Se referă la corectitudinea şi coerenţa datelor, dar şi la
❑Se referă la prevenirea introducerii de date incorecte şi a
manipularea acestora astfel încât să se respecte restricţiile de realizării de prelucrări eronate
integritate ale modelului de date implementat. ❑Se asigură prin restricţii de integritate:
◦ implicite: asigurate automat de SGBD
◦ explicite: asigurate prin program

❑În Oracle:
◦ resticţiile implicite: PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT
NULL, CHECK
◦ restricţiile explicite: declanşatori (triggeri)

3 4

3 4

2
Integritatea datelor Integritatea datelor
CONTROLUL CONCURENŢEI LA DATE CONTROLUL CONCURENŢEI LA DATE (cont.)

❑Se referă la garantarea corectitudinii datelor în cazul prelucrării ❑Rezultatul execuţiei unei tranzacţii poate fi:
tranzacţiilor ◦ succes: dacă operaţiile constituente ale tranzacţiei au fost realizate
şi validate fără probleme, iar baza de de date se regăseşte într-o
❑Tranzacţia desemnează o secvenţă de instrucţiuni de nouă stare coerentă;
manipulare a datelor (în special de actualizare), care formează un ◦ abandon: dacă operaţiile constituente ale tranzacţiei au fost
tot unitar şi care se execută în totalitate sau deloc. anulate, iar baza de date revine la starea coerentă de dinainte de
execuţia tranzacţiei curente.
❑Există tranzacţii:
❑În Oracle, comenzile SQL pentru tratarea tranzacţiilor sunt:
◦ implicite (gestionate de sistem)
◦ COMMIT
◦ explicite (gestionate de programator, prin specificarea limitelor
◦ ROLLBACK
unei tranzacţii în cadrul unei aplicaţii)
◦ SAVEPOINT

5 6

5 6

3
Integritatea datelor Integritatea datelor
CONTROLUL CONCURENŢEI LA DATE (cont.) CONTROLUL CONCURENŢEI LA DATE (cont.)
Caracteristicile unei tranzacţii – ACID În momentul în care mai multe tranzacţii accesează aceleaşi date,
în mod concurent, apare mecanismul de blocare.
❑ Atomicitatea: evidenţiază caracterul atomic al tranzacţiilor, acestea
fiind executate pe principiul totul sau nimic. În cazul accesului concurent, SGBDR acordă priorităţi tranzacţiilor
❑ Consistenţa (coerenţa): presupune execuţia tranzacţiilor cu implicate. Tranzacţia cu prioritatea cea mai mare are acces la
respectarea restricţiilor de integritate. date, iar acestea sunt blocate pentru celelate tranzacţii, care
aşteaptă finalizarea prelucrărilor curente.
❑ Izolarea: presupune execuţia tranzacţiilor independent unele de
altele. Interblocare: dacă tranzacţia T1 utilizează datele D1, iar
tranzacţia T2 datele D2, iar T1 are nevoie de D2 şi T2 de D1 (au
❑ Durabilitatea (persistenţa): evidenţiază caracterul persistent al nevoie de aceleaşi date, deja ocupate), atunci conflictul se
tranzacţiilor salvate. rezolvă tot prin acordarea de priorităţi.

7 8

7 8

4
Integritatea datelor Securitatea datelor

SALVAREA / RESTAURAREA DATELOR


Se referă la confidenţialitatea datelor, asigurată prin
❑Pentru ca în baza de date să existe date corecte este necesar ca,
la anumite perioade de timp, să fie realizate salvări ale sistemului restricţionarea accesului la date pentru utilizatorii neautorizaţi.
(copii de siguranţă - backup) în fişiere de rezervă (fişiere jurnal).
❑În cazul în care baza de date va fi coruptă, aceasta va putea fi
refăcută cu ajutorul fişierelor jurnal, prin restaurare (recovery).
❑În Oracle, fişierele jurnal se pot crea, întreţine şi utiliza automat
de sistem, la anumite intervale de timp, sau pot fi gestionate
explicit de administratorul BD.

9 10

9 10

5
Securitatea datelor Securitatea datelor
AUTORIZAREA ŞI CONTROLUL ACCESULUI LA DATE
TABELE VIRTUALE
❑Constă în identificarea utilizatorilor şi restricţionarea accesului
acestora la anumite date, pentru diferite prelucrări, în funcţie de ❑Construcţii logice reprezentând cereri de regăsire memorate în
categoria de utilizatori. dicţionarul BD (comenzi SELECT stocate).
❑În acest scop, administratorul BD construieşte profile de ❑La apelul tabelei virtuale, interogarea este executată şi se vor
utilizatori, precizând categoria, grupa, numele, parola, drepturile accesa datele doar pe o parte a bazei de date, la care utilizatorii
acordate. au acces.
❑În Oracle: ❑În Oracle:
◦ CREATE PROFILE...
◦ CREATE VIEW...
◦ CREATE ROLE...
◦ odată creată, o tabelă virtuală se apelează prin comenzi SQL, ca
◦ CREATE USER... PROFILE...
şi orice altă tabelă relaţională
◦ GRANT rol TO user
◦ GRANT privilegii TO user
11 12

11 12

6
Securitatea datelor Securitatea datelor
PROCEDURI SPECIALE CRIPTAREA DATELOR
❑ Proceduri stocate în baza de date, oferite de SGBDR sau ❑Operaţie de codificare a datelor, în vederea stocării sau
create de programator. transmiterii lor codat, nu în clar.
❑ În Oracle se pot scrie proceduri stocate în limbajul PL/SQL ❑În acest sens, se vor utiliza algoritmi de criptare, o cheie de
pentru a realiza diferite acţiuni, pe date restricţionate. acces la aceştia şi un algoritm de decriptare.

13 14

13 14

7
Evoluţia organizării datelor Baze de date NoSQL
Proiectate să rezolve probleme de scalabilitate și
performanță pentru soluții informatice distribuite,
integrate în cloud
Folosesc un mecanism pentru stocarea și accesarea
Depozite
datelor diferit de cel implementat în modelul
de date
Baze de
date NoSQL
relațional, care se bazează pe structuri tabelare
(1990)
Baze de date (2010+)
(1970)

Fișiere de
date (1960)

18

17 18

9
Caracteristici ale bazelor de date
NoSQL Limitări ale bazelor de date NoSQL
❑ Permit lucrul eficient cu date semistructurate și ❑ Nu există o standardizare
nestructurate
❑ Nu se asigură o protecţie performantă a datelor
❑ Folosesc mai multe limbaje de interogare diferite
❑ Nu se asigură consistenţa datelor
(NoSQL - not only SQL)
❑ Nu impun o anumită structură a datelor (schema-
less)
❑ Pot gestiona volume mari de date (big data)
❑ Folosesc o arhitectură distribuită: datele sunt
păstrate într-un mod redundant, pe mai multe
servere
19 20

19 20

10
NoSQL vs. SQL Stocarea datelor în bazele de date NoSQL
❑ stocarea bazată pe grup de coloane
SQL NoSQL
❑ stocarea bazată pe documente
Stocare date Conform modelului Stocare folosind formate
relațional, în tabele de non-relaționale specifice ❑ stocarea bazată pe structuri de tip chei-valoare
date
Date stocate Structurate Semi-structurate, ❑ stocarea datelor bazată pe graf
nestructurate
Schema Statică Dinamică
Scalabilitate Verticală Orizontală
Limbaj de interogare SQL Not only SQL
Joncțiuni Da Nu
Gestiune tranzacții ACID CAP

21 22

21 22

11
Tipuri de baze de date NoSQL Evoluție BD - 2019
1. BD care stochează structuri cheie-valoare
(Redis, Riak, Oracle NoSQL)

2. BD orientate pe coloane
(Cassandra, HBase)

3. BD organizate pe document
(MongoDB, CouchDB)

4. BD organizate ca graf
(Neo4J, Allegro, Polyglot)

23 24

23 24

12
Evoluție BD - 2019 Baze de date in-memory
Se bazează în mod primar pe memoria internă pentru
stocarea datelor, în contrast cu sistemele clasice care
utilizează mecanisme de stocare pe disc.

25 26

25 26

13
Caracteristici Domenii de aplicabilitate
❑ Rapiditate, accesul la memorie fiind mai rapid decât ❑ Aplicații pentru care timpul de răspuns este critic:
accesul la disc ◦ Telecomunicații
◦ Industria bancară
❑ Algoritmii de optimizare internă sunt mai simpli
◦ Rețele mobile de publicitate
❑ Execută mai puține instrucțiuni ale procesorului. ❑ Analiza de date – odată cu extinderea pe scară largă a
procesoarelor multi-core
❑ Accesarea datelor în memorie elimină timpul de căutare
la interogarea datelor, ceea ce oferă performanțe mai
rapide și mai previzibile decât varianta de stocare pe disc.

27 28

27 28

14
Limitări CURSUL 14...
❑ Volatilitatea memoriei RAM pe care se realizează Recapitulare
stocarea datelor

❑ Nu se asigură durabilitatea datelor

29

29 30

15

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