Sunteți pe pagina 1din 206

04.10.

2021

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


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

BAZE DE DATE
ASPECTE CONCEPTUALE PRIVIND
ORGANIZAREA DATELOR

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

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.

1
04.10.2021

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

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.

2
04.10.2021

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

Înţelepciune

Înţelegere

Cunoştinţe

Informaţii

Date

• 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

3
04.10.2021

Evoluţia organizării datelor (1)

Fişiere de Baze de Depozite de Baze de


date date date date NoSQL

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.

4
04.10.2021

Tipuri de acces la date

• Acces secvenţial

• Acces direct

• Acces dinamic (mixt)

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.

10

5
04.10.2021

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.

11

Evoluţia organizării datelor (2)

Fişiere de Baze de Depozite de Baze de


date date date date NoSQL

12

6
04.10.2021

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.

13

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

14

7
04.10.2021

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

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)

16

8
04.10.2021

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

17

Sisteme de gestiune a bazelor


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

18

9
04.10.2021

Evoluţia organizării datelor (3)

Fişiere de Baze de Depozite de Baze de


date date date date NoSQL

19

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.

20

10
04.10.2021

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.

21

Evoluţia organizării datelor (4)

Fişiere de Baze de Depozite de Baze de


date date date date NoSQL

22

11
04.10.2021

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).

23

CURSUL 2...
Elemente de teoria bazelor de date

Modele de date

Organizarea datelor în bazele de date

12
10.10.2021

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


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

BAZE DE DATE

ELEMENTE DE TEORIA
BAZELOR DE DATE

BUCUREŞTI
2021-2022
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

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.

1
10.10.2021

Instanţa

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


entităţi

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

2
10.10.2021

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 programator 6500

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.

Terminologie alternativă

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

Fişier Relaţie Tabelă

Înregistrare Tuplu Rând

Câmp Atribut Coloană

3
10.10.2021

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

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

4
10.10.2021

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

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

5
10.10.2021

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

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.

În structura relaţională se pot descrie prin LDD, dar nu


numai.

18

6
10.10.2021

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

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

7
10.10.2021

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

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

8
10.10.2021

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

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

9
10.10.2021

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

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

10
10.10.2021

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

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.

33

11
10.10.2021

CURSUL 3...
Modelul de date relaţional

34

12
18.10.2021

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI


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

BAZE DE DATE

MODELUL DE DATE RELAŢIONAL

BUCUREŞTI
2021-2022
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

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

1
18.10.2021

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}

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

2
18.10.2021

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

D3 D1 D2
a 1 α
b 2 β

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ă.

Extensia relației
Extensia unei relaţii: ansamblul tuplurilor care compun
la un moment dat relaţia

Cardinalul relației
Cardinalul relației: numărul tuplurilor dintr-o relaţie

Gradul relației
Gradul relației: numărul valorilor dintr-un tuplu

3
18.10.2021

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).

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ă.

4
18.10.2021

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.

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;

5
18.10.2021

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

Exemplu SQL

SELECT *

FROM angajati

WHERE salariu>2000 or nume=‘Mircea’;

6
18.10.2021

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.

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;

7
18.10.2021

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ă

Tipuri de joncţiuni

8
18.10.2021

Joncţiunea de egalitate şi naturală

R1 ⋈ R2

JOIN (R1, R2, condiţie)

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


R2), condiţie)

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

9
18.10.2021

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;

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)

10
18.10.2021

Joncţiunea la stânga

Joncţiunea la dreapta

Joncţiunea completă

11
18.10.2021

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

Exemplu UNION ALL

Clienti  Angajati

12
18.10.2021

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
R 2.

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

Diferenţa

NU!
DE CE?

Clienti – Comenzi
Clienti – Comenzi

DA

Ce afişează?

13
18.10.2021

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

Ce afişează?

14
18.10.2021

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

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

15
18.10.2021

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ă.

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

❑ Restricţii de comportament:
▪ De domeniu

16
18.10.2021

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.

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

17
18.10.2021

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ă

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.

18
18.10.2021

Exemplificare SQL-Oracle

Exemplificare SQL-Oracle

Exemplificare SQL-Oracle

19
18.10.2021

Să se rezolve!
Fie două tabele COMEZI şi FIRME fiecare având câte 20 de înregistrări. O
firmă poate da mai multe comenzi, o comandă trebuie dată de către o
singură firmă. Care din următoarele afirmaţii este adevărată:
a)Un left join între COMEZI şi FIRME nu poate returna acelaşi număr de
înregistrări ca un right join între FIRME şi COMENZI
b)Un full join între cele două tabele nu poate returna acelaşi număr de
înregistrări ca un left join între FIRME şi COMEZI
c)Produsul cartezian între cele două tabele nu returnează mai multe
înregistrări decât un full join între aceleaşi tabele
d)Un inner join între FIRME şi COMENZI poate returna acelaşi număr de
înregistrări ca un right join între aceleaşi tabele
e)Toate afirmaţiile de mai sus sunt false

CURSUL 4...
Baze de date relaţionale

20
25.10.2021

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
2021-2022
Conf.univ.dr. IULIANA BOTHA (ȘIMONCA)
2
iuliana.botha@ie.ase.ro

1
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
25.10.2021

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
f. o legătură se transformă într-o coloană pe care se declară şeful 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ă
Denumire Not null
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
25.10.2021

Studiu de caz
1. Să se construiască diagrama entitate-asociere pentru următorul scenariu.
2. Să se proiecteze schema conceptuală a bazei de date relaţionale.
CURSUL 5...
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
30.10.2021

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
2021-2022

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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
30.10.2021

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

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

19
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
2021-2022

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
Particularităţi
standardului SQL lansare
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
SQL:2019 2019 + suport vectori multidimensionali

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
CURSUL 7...

Limbaje relaţionale pentru definirea şi manipularea datelor.


Limbajul SQL. (continuare)

15
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
2021-2022

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

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

1
Limbajul SQL-Oracle

Comandă LMD Descriere


SELECT regăseşte date din una sau mai multe tabele

INSERT adaugă o înregistrare nouă într-o tabelă

UPDATE modifică valori asociate coloanelor unei tabele


realizează fie modificări ale datelor, fie adăugări de înregistrări dintr-o
MERGE altă tabelă, în funcţie de o condiţie de potrivire
DELETE şterge înregistrări dintr-o tabelă

Limbajul SQL-Oracle
Interogarea datelor
Clauze în SELECT Descriere
restricţionează liniile care se returnează pe baza unui criteriu
WHERE condiţie specificat în condiţia de selecţie
structurează rezultatul într-o manieră ierarhică (asemănător
clauze de ordonare ierarhică cu o organigramă)
grupează liniile în scopul identificării valorilor comune
GROUP BY coloane_grupare grupurilor (valori agregate calculate prin funcţii de grup)
restricţionează grupurile create prin clauza GROUP BY pe baza
HAVING condiţie unei condiţii asupra funcţiilor de grup
ORDER BY coloane_ordonare sortează liniile (implicit ascendent)

2
Rezolvaţi!
Se consideră tabela: PORTS (PORT_ID, PORT_NAME, COUNTRY, CAPACITY), având
următoarele înregistrări:
PORT_ID PORT_NAME COUNTRY CAPACITY
1 Galveston USA 4
2 San Diego USA 4
3 San Francisco USA 3
4 Los Angeles USA 4
5 San Juan USA 3
6 Grand Cayman UK 3
Ce rezultat va produce următoarea interogare SQL:
SELECT *
FROM PORTS
WHERE PORT_NAME LIKE 'San%'
OR PORT_NAME LIKE 'Grand%'
AND CAPACITY = 4;
5

Limbajul SQL-Oracle
Precedenţa operatorilor

Operator
*, /, -,+
= , >= , > , <= , < , <> , != , IS , LIKE , IN
BETWEEN
NOT
AND
|| , OR

3
Rezolvaţi!
Se consideră tabela: PORTS (PORT_ID, PORT_NAME, COUNTRY, CAPACITY), având
următoarele înregistrări:
PORT_ID PORT_NAME COUNTRY CAPACITY
1 Galveston USA 4
2 San Diego USA 4
3 San Francisco USA 3
4 Los Angeles USA 4
5 San Juan USA 3
6 Grand Cayman UK 3

Ce vor returna următoarele interogări SQL:


SELECT PORT_ID
SELECT 1+2
FROM PORTS
FROM PORTS;
WHERE 1=2;

Limbajul SQL-Oracle
Interogarea datelor
Utilizarea pseudocoloanelor (valori atribuite automat de către sistem
fiecărei tabele) în comenzile SQL:
ROWNUM
SELECT ROWNUM, id_angajat, nume, salariul
FROM angajati;

ROWNUM ID_ANGAJAT NUME SALARIUL


---------- ---------- ------------------------- ----------
1 198 OConnell 2600
2 199 Grant 2600
3 200 Whalen 4400
4 201 Hartstein 13000
5 202 Fay 6000
..............
8

4
Rezolvaţi!

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

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.

ID_ANGAJAT NUME SALARIUL


---------- ------------------------- ----------
100 King 24000
101 Kochhar 17000
102 De Haan 17000
145 Russell 14000
146 Partners 13500
201 Hartstein 13000
205 Higgins 12000
108 Greenberg 12000
147 Errazuriz 12000
168 Ozer 11500
...........

10

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

SELECT ROWNUM, id_angajat, nume, salariul


FROM angajati
WHERE ROWNUM <= 3
ORDER BY salariul DESC;

ROWNUM ID_ANGAJAT NUME SALARIUL


---------- ---------- ------------------------- ---------
3 200 Whalen 4400
1 198 OConnell 2600
2 199 Grant 2600

11

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

SELECT ROWNUM, id_angajat, nume, salariul


FROM (SELECT id_angajat, nume, salariul
FROM angajati
ORDER BY salariul DESC)
WHERE ROWNUM <= 3;

ROWNUM ID_ANGAJAT NUME SALARIUL


---------- ---------- ------------------------- ----------
1 100 King 24000
2 101 Kochhar 17000
3 102 De Haan 17000

12

6
Rezolvaţi!

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

13

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.

ID_ANGAJAT NUME SALARIUL


---------- ------------------------- ----------
100 King 24000
101 Kochhar 17000
102 De Haan 17000
145 Russell 14000
146 Partners 13500
201 Hartstein 13000
205 Higgins 12000
108 Greenberg 12000
147 Errazuriz 12000
168 Ozer 11500
...........

14

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

SELECT ROWNUM, id_angajat, nume, salariul


FROM (SELECT id_angajat, nume, salariul
FROM angajati
ORDER BY salariul DESC)
WHERE ROWNUM = 2;
-- WHERE ROWNUM < 3 AND ROWNUM >= 2;

no rows selected

15

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

RN ID_ANGAJAT NUME SALARIUL


---------- ---------- ------------------------- ----------
2 101 Kochhar 17000

16

8
Rezolvaţi!
Afişaţi al doilea angajat cu cel mai mare salariu - Rezolvare alternativă!

SELECT ROWNUM, id_angajat, nume, salariul


FROM (SELECT id_angajat, nume, salariul
FROM angajati
ORDER BY salariul DESC)
WHERE ROWNUM <= 2
MINUS
SELECT ROWNUM, id_angajat, nume, salariul
FROM (SELECT id_angajat, nume, salariul
FROM angajati
ORDER BY salariul DESC)
WHERE ROWNUM = 1;

17

…începând de la Oracle 12c...


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

SELECT id_angajat, nume, salariul


FROM angajati
ORDER BY salariul DESC
FETCH FIRST 3 ROWS ONLY;

18

9
…începând de la Oracle 12c...
Afişaţi al doilea angajat cu cel mai mare salariu.

SELECT id_angajat, nume, salariul


FROM angajati
ORDER BY salariul DESC
OFFSET 1 ROW
FETCH NEXT 1 ROWS ONLY;

19

Limbajul SQL-Oracle
Interogarea datelor
Utilizarea expresiilor în comenzile SQL:
◦ Pe lângă specificarea coloanelor, într-o comandă SELECT pot fi incluse
şi expresii
◦ 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;

20

10
Limbajul SQL-Oracle
Interogarea datelor
Utilizarea expresiilor în comenzile SQL este permisă în:
◦ lista de coloane a unei comenzi SELECT
◦ clauzele WHERE, HAVING şi ORDER BY dintr-o comandă SELECT
◦ clauza VALUES a unei comenzi INSERT
◦ clauzele SET şi WHERE ale unei comenzi UPDATE
◦ clauza WHERE a unei comenzi DELETE
SELECT id_angajat, nume, salariul, salariul * 1.5
FROM angajati
WHERE comision IS NOT NULL
AND salariul*1.5>16000
ORDER BY salariul*1.5 DESC;
21

Limbajul SQL-Oracle
Interogarea datelor
Tabela DUAL
◦ tabelă existentă în orice BD Oracle
◦ are o singură coloană: DUMMY de tip VARCHAR2(1)
◦ are o singură linie, conţinând valoarea x
◦ utilizată pentru testarea unor comenzi SELECT care nu fac referiri neapărat la o
tabelă dintr-o BD

SELECT 1000* 1.5


FROM dual;

SELECT SYSDATE, CURRENT_DATE


FROM dual;

22

11
Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL care manipulează şiruri de caractere
Sintaxă Descriere Rezultat
UPPER (s) / LOWER (s) Conversie de format: ORACLE / oracle şir de caractere

INITCAP (s) Conversie de format: Oracle şir de caractere

CONCAT (s1,s2) Concatenează două șiruri şir de caractere

LPAD (s1,n,s2) / RPAD (s1,n,s2) Completează un șir (la dreapta/stânga) şir de caractere

LTRIM (s1,s2) / RTRIM (s1,s2) Trunchează un șir (la dreapta/stânga) şir de caractere

TRIM (info s1 FROM s2) Trunchează un șir şir de caractere

LENGTH (s) Calculează lungimea unui șir număr

INSTR (s1,s2, poz,n) Indică poziția unui subșir număr

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


23

Limbajul SQL-Oracle
Funcţii SQL
SELECT UPPER('oracle'), LOWER('oracle'), INITCAP('oracle')
FROM dual;

UPPER('ORACLE') LOWER('ORACLE') INITCAP('ORACLE')


--------------- --------------- -----------------
ORACLE oracle Oracle

SELECT SUBSTR('oracle database',1,3),


SUBSTR('oracle database',-8,4)
FROM dual;

SUBSTR('ORACLEDATABASE',1,3) SUBSTR('ORACLEDATABASE',-8,4)
---------------------------- -----------------------------
ora data

24

12
Limbajul SQL-Oracle
Funcţii SQL
SELECT CONCAT('Oracle ' ,'Database'),
LPAD('Oracle',15,'*'), RTRIM('Oracle****','*'),
TRIM(BOTH '*' FROM '**Oracle****'), LENGTH('Oracle'),
INSTR('Oracle Database','a',1,3)
FROM dual;

CONCAT('ORACLE','DATABASE') LPAD('ORACLE',15,'*') RTRIM('ORACLE****','*')


--------------------------- --------------------- -----------------------
Oracle Database *********Oracle Oracle

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

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

25

Limbajul SQL-Oracle
Funcţii SQL

SELECT REPLACE('oracle database','a'),


REPLACE('oracle database','a','*')
FROM dual;

REPLACE('ORACLEDATABASE','A') REPLACE('ORACLEDATABASE','A',‘*')
----------------------------- --------------------------------
orcle dtbse or*cle d*t*b*se

26

13
Ce afişează comanda următoare?

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


LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;

27

Ce afişează comanda următoare?

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


LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;

CUPRINS
----------------------------------------
Capitolul 1 ..................... pag.20

28

14
Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL care manipulează valori numerice

Sintaxă Descriere Rezultat


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

MOD (n1,n2) Returnează restul împărțirii lui n1 la n2 număr

29

Limbajul SQL-Oracle
Funcţii SQL

SELECT ROUND(3.148,2), TRUNC(3.148,2), MOD(11,3)


FROM dual;

ROUND(3.148,2) TRUNC(3.148,2) MOD(11,3)


-------------- -------------- ----------
3,15 3,14 2

30

15
Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL care manipulează date calendaristice
Sintaxă Descriere Rezultat
SYSDATE Returnează data curentă a serverului dată calendaristică

CURRENT_DATE Returnează data curentă a clientului dată calendaristică

ROUND (d,i) Rotunjește o dată calendaristică dată calendaristică

TRUNC (d,i) Trunchează o dată calendaristică dată calendaristică

NEXT_DAY (d,s) Afișează data calendaristică a următoarei zile indicate dată calendaristică
Returnează ultima zi a lunii din care face parte data
LAST_DAY (d) calendaristică dată calendaristică

ADD_MONTHS (d,n) Adaugă un număr de luni la o dată calendaristică dată calendaristică

MONTHS_BETWEEN (d1,d2) Returnează numărul de luni dintre două date calendaristice număr
EXTRACT (DAY FROM d)
EXTRACT (MONTH FROM d) Extrage componente dintr-o dată calendaristică număr
EXTRACT (YEAR FROM d) 31

Limbajul SQL-Oracle
Funcţii SQL
SELECT SYSDATE,ROUND(SYSDATE,'MM'),ROUND(SYSDATE+1,'MM'),
ROUND(SYSDATE,'YY'),TRUNC(SYSDATE,'MM'),TRUNC(SYSDATE,'YY')
FROM dual;
SYSDATE ROUND(SYSDATE,'MM') ROUND(SYSDATE+1,'MM') ROUND(SYSDATE,'YY')
----------- ------------------ --------------------- -------------------
15-11-2021 01-11-2021 01-12-2021 01-01-2022

TRUNC(SYSDATE,'MM') TRUNC(SYSDATE,'YY')
------------------- -------------------
01-11-2021 01-01-2021

SELECT EXTRACT (YEAR FROM SYSDATE)


FROM dual;
EXTRACT(YEARFROMSYSDATE)
------------------------
2021

32

16
Limbajul SQL-Oracle
Funcţii SQL
SELECT SYSDATE, NEXT_DAY(SYSDATE,'Vineri'),
LAST_DAY(SYSDATE)
FROM dual;

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


----------- -------------------------- -----------------
15-11-2021 19-11-2021 30-11-2021

SELECT ADD_MONTHS(SYSDATE,4),
MONTHS_BETWEEN(ADD_MONTHS(SYSDATE,4),SYSDATE)
FROM dual;

ADD_MONTHS(SYSDATE,4) MONTHS_BETWEEN(ADD_MONTHS(SYSD
--------------------- ------------------------------
15-03-2022 4

33

Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL speciale

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

NULLIF (e1,e2) Returnează NULL dacă e1=e2; altfel întoarce e1

DECODE (e,expresii_de_căutare,d)
Verifică variante alternative
CASE expr WHEN cond THEN rez ... ELSE rez END

34

17
Limbajul SQL-Oracle
Funcţii SQL

SELECT 14+NULL-4
FROM dual;

35

Limbajul SQL-Oracle
Funcţii SQL

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


FROM dual;

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


---------- ----------- ----------------
0 10

36

18
Limbajul SQL-Oracle
Funcţii SQL
SELECT nume, salariul+comision "Venit total"
FROM angajati
WHERE comision IS NULL;
NUME Venit total
------------------------- -----------
King
Kochhar
...

SELECT nume, salariul+NVL(comision,0) "Venit total"


FROM angajati
WHERE comision IS NULL;
NUME Venit total
------------------------- -----------
King 24000
Kochhar 17000
...
37

Limbajul SQL-Oracle
Funcţii SQL
SELECT pret_lista, pret_min, NULLIF(pret_lista,pret_min)
FROM produse;

PRET_LISTA PRET_MIN NULLIF(PRET_LISTA,PRET_MIN)


---------- ---------- ---------------------------
221,00 180,00 221
73,00 73,00
299,00 244,00 299
399,00 355,00 399

38

19
Limbajul SQL-Oracle
Funcţii SQL
SELECT denumire_produs,pret_lista,
CASE
WHEN pret_lista < 100 THEN 'pret mic '
WHEN pret_lista BETWEEN 100 AND 200 THEN 'pret mediu '
ELSE 'pret mare'
END Calificativ
FROM produse;

DENUMIRE_PRODUS PRET_LISTA CALIFICATIV


------------------------------------------------- ---------- -----------
DIMM - 128 MB 305,00 pret mare
DIMM - 16 MB 124,00 pret mediu
DIMM - 1GB 599,00 pret mare
Battery - EL 44,00 pret mic
.......

39

Limbajul SQL-Oracle
Funcţii SQL
SELECT denumire_produs, categorie, pret_lista,
CASE LOWER(categorie)
WHEN 'hardware4' THEN 0.2
WHEN 'hardware2' THEN 0.15
ELSE 0
END * pret_lista Majorare_pret
FROM produse
WHERE LOWER(categorie) LIKE 'h%' ;

DENUMIRE_PRODUS CATEGORIE PRET_LISTA MAJORARE_PRET


--------------------- ------------------- ---------- -------------
DIMM - 128 MB hardware4 305,00 61
DIMM - 16 MB hardware2 124,00 24,8
.......

40

20
Limbajul SQL-Oracle
Funcţii SQL
SELECT denumire_produs, categorie, pret_lista,
DECODE(LOWER(categorie),'hardware4' ,0.2,'hardware2' ,0.15,0)
* pret_lista Majorare_pret
FROM produse
WHERE LOWER(categorie) LIKE 'h%' ;

DENUMIRE_PRODUS CATEGORIE PRET_LISTA MAJORARE_PRET


--------------------- ------------------- ---------- -------------
DIMM - 128 MB hardware4 305,00 61
DIMM - 16 MB hardware2 124,00 24,8
.......

41

Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL de conversie între tipuri de date
Sintaxă Descriere
TO_NUMBER(s,format) Convertește un șir de caractere la număr

TO_CHAR (n,format) Convertește un număr la șir de caractere

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ă

TO_TIMESTAMP (s,format) Convertește un șir de caractere la dată calendaristică

42

21
Limbajul SQL-Oracle
Funcţii SQL
SELECT TO_NUMBER('$17,000.23', '$999,999.99')
FROM dual;

TO_NUMBER('$17,000.23','$999,99.99')
------------------------------------
17000,23

SELECT TO_CHAR(198, '$999,999.99')


FROM dual;

TO_CHAR(198,'$999,999.99')
--------------------------
$198.00

43

Limbajul SQL-Oracle
Funcţii SQL

SELECT TO_CHAR(SYSDATE+1,'DAY, DD MONTH YYYY')


FROM dual;

TO_CHAR(SYSDATE+1,'DAY,DDMONTHYYYY')
----------------------------------
MARŢI , 16 NOIEMBRIE 2021

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


FROM dual;

TO_CHAR(SYSDATE,'DD-MON-YYYYHH
------------------------------
13-NOI-2021 11:56:31

44

22
Limbajul SQL-Oracle
Funcţii SQL

SELECT TO_DATE('23-10-2010','DD-MM-YYYY')
FROM dual;

TO_DATE('23-10-2010','DD-MM-YY
------------------------------
23-10-2010

45

Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL de grup
Sintaxă Descriere
COUNT(e) Returnează numărul de înregistrări dintr-un grup de linii

SUM(e) Returnează totalul valorilor coloanei argument dintr-un grup de linii

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

46

23
Limbajul SQL-Oracle
Funcţii SQL
SELECT COUNT(*) SELECT COUNT(id_angajat)
FROM angajati; FROM angajati;

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

SELECT COUNT(comision)
FROM angajati;

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

47

Rezolvaţi!
Afişaţi pentru fiecare angajat identificat prin nume numărul total de
comenzi intermediate, precum şi valoarea acestora.

48

24
Rezolvare

SELECT 'Angajatul '|| a.nume || ' a incheiat ' ||


COUNT(c.nr_comanda) ||
' 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;

49

CURSUL 8...

Limbaje relaţionale pentru definirea şi manipularea datelor.


Limbajul SQL. (continuare)

25
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
2021-2022

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
----------- ---------- -----------
10 AD_ASST 1
SELECT id_departament Departament, id_functie Functie,
10 1
COUNT(id_angajat) "NR.ANGAJATI" 20 MK_MAN 1
20 MK_REP 1
FROM angajati 20 2
30 PU_CLERK 5
WHERE id_departament IS NOT NULL
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
30 6
FROM angajati
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
0 – dacă nu a avut loc o grupare de
sau CUBE 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
United Kingdom London 1
WHERE a.id_departament IS NOT NULL
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
Limbajul SQL-Oracle
Rezolvaţi! Joncţiuni

Oracle Standard SQL


Joncţiune de egalitate
SELECT t1.a, t2.c SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 JOIN tabela2 t2
WHERE t1.b=t2.b; ON t1.b=t2.b;
SELECT t1.a, t2.c
FROM tabela1 t1 NATURAL JOIN tabela2 t2
SELECT t1.a, t2.c
Afişaţi numărul total de salariaţi, precum şi numărul de salariaţi FROM tabela1 t1 JOIN tabela2 t2
angajaţi în anii 1996, 1997 şi 1998. USING (b);

22 23

11
Limbajul SQL-Oracle Limbajul SQL-Oracle
Joncţiuni Joncţiuni
Oracle Standard SQL
Oracle Standard SQL
Joncţiune externă completă
Joncţiune externă stânga 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 FULL JOIN tabela2 t2
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 LEFT JOIN tabela2 t2 WHERE t1.b=t2.b (+) ON t1.b=t2.b;
WHERE t1.b=t2.b (+); ON t1.b=t2.b; UNION
SELECT t1.a, t2.c
Joncţiune externă dreapta FROM tabela1 t1, tabela2 t2
WHERE t1.b (+)=t2.b;
SELECT t1.a, t2.c SELECT t1.a, t2.c
FROM tabela1 t1, tabela2 t2 FROM tabela1 t1 RIGHT JOIN tabela2 t2 Joncţiunea tabelei cu ea însăşi
WHERE t1.b (+)=t2.b; ON t1.b=t2.b; 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;

24 25

12
CURSUL 9...

Limbaje relaţionale pentru definirea şi manipularea datelor.


Limbajul SQL. (continuare)

13
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
2021-2022

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

Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
Subcerere (cerere imbricată) – comandă SELECT inclusă într-o altă
comandă SQL, care poate returna una sau mai multe linii.
Subcererile sunt utilizate pentru:

➢ a obţine rezultate pe baza unor criterii, care apoi să fie utilizate pentru
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)
➢ a defini expresii calculate dinamic prin subcereri scalare

1
Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
Tipuri de subcereri:

Subcereri Descriere
returnează o singură linie (conţinând valori pentru una
➢ subcereri single-row
sau mai multe coloane)
➢ subcereri multiple-row returnează 0, 1 sau mai multe linii
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

Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
SELECT id_angajat, nume
FROM angajati
WHERE id_functie = (SELECT id_functie
FROM angajati
WHERE UPPER(nume)='ABEL')
AND UPPER(nume)!='ABEL';

2
Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
SELECT id_angajat, nume
FROM angajati
WHERE id_functie = (SELECT id_functie FROM angajati
WHERE UPPER(nume)='KING')
AND UPPER(nume)!='KING';

ORA-01427: single-row subquery returns more than one row

SELECT id_angajat, nume


FROM angajati
WHERE id_functie IN (SELECT id_functie FROM angajati
WHERE UPPER(nume)='KING')
AND UPPER(nume)!='KING';
5

Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
Operatori de comparaţie utilizaţi în cadrul subcererilor multiple-row:

Operatori Descriere
• compară cu o listă de valori
IN
• verifică dacă valoarea căutată se regăseşte în listă
NOT • utilizat cu operatorul IN
• utilizat în combinaţie cu operatorii de comparaţie (=, <)
ANY • verifică dacă valoarea căutată îndeplineşte condiţia de comparaţie cu
oricare dintre liniile returnate de subcerere
SOME • la fel ca operatorul ANY
• utilizat în combinaţie cu operatorii de comparaţie (=, <)
ALL • verifică dacă valoarea căutată îndeplineşte condiţia de comparaţie cu
toate liniile returnate de subcerere

3
Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
• ANY compară valoarea cu oricare valoare returnată de interogare
• ALL compară valoarea cu toate valorile returnate de interogare

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
>ALL() – mai mare decât maximul
<ALL() – mai mic decât minimul

Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
SELECT id_angajat, salariul
FROM angajati
WHERE salariul > ALL (10000, 15000, 20000);

SELECT id_angajat, salariul


FROM angajati
WHERE salariul > 10000
AND salariul > 15000
AND salariul > 20000;

4
Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
SELECT id_angajat, salariul
FROM angajati
WHERE salariul > ANY (10000, 15000, 20000);

SELECT id_angajat, salariul


FROM angajati
WHERE salariul > 10000
OR salariul > 15000
OR salariul > 20000;

Limbajul SQL-Oracle
Interogarea datelor. Subcereri.

UPDATE angajati
SET salariul=1.1*salariul
WHERE (id_functie, id_departament) =
(SELECT id_functie, id_departament
FROM angajati
WHERE UPPER(nume)='ABEL');

10

5
Limbajul SQL-Oracle
Interogarea datelor. Subcereri.

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

11

Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
UPDATE angajati
SET salariul=1.1 * salariul
WHERE id_angajat IN
(SELECT id_angajat FROM comenzi);

UPDATE angajati a
SET a.salariul=1.1 * a.salariul
WHERE EXISTS
(SELECT * FROM comenzi
WHERE id_angajat=a.id_angajat);

14

6
Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
SELECT c.nume_client
FROM clienti c SEMI-JOIN
WHERE EXISTS
(SELECT * FROM comenzi co
WHERE co.id_client=c.id_client);

SELECT c.nume_client
FROM clienti c
WHERE NOT EXISTS
(SELECT * FROM comenzi co
WHERE co.id_client=c.id_client);

15

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

SELECT nume FROM angajati


WHERE id_angajat IN
(SELECT id_manager FROM angajati);

SAU

SELECT a.nume FROM angajati a


WHERE EXISTS
(SELECT 1 FROM angajati b
WHERE b.id_manager=a.id_angajat);

16

7
Limbajul SQL-Oracle
Interogarea datelor. Subcereri.
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
WHERE b.id_manager=a.id_angajat);

17

Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice.

ALTER TABLE angajati


ADD CONSTRAINT ang_manager_fk FOREIGN KEY (id_manager)
REFERENCES angajati (id_angajat);

18

8
Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice.

Exemple de date structurate ierarhic:


•Ierarhii organizaționale
•Arbori genealogici
•Link-uri dintre paginile Web ale unei aplicații
•Legături în cadrul rețelelor de socializare
•Activitățile unui proiect
•Sistemul de fișiere

19

Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice.
Nod rădăcină

Nivel 1

Nivel 2

Nivel 3

Nivel 4

Nod Nod frunză

20

9
Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice.
SELECT a.id_angajat, a.nume "ANGAJAT",
a.id_manager, m.nume "MANAGER"
FROM angajati a, angajati m
WHERE a.id_manager=m.id_angajat
ORDER BY a.id_angajat;
ID_ANGAJAT ANGAJAT ID_MANAGER MANAGER
---------- ------------------------- ---------- ---------------------
101 Kochhar 100 King
102 De Haan 100 King
103 Hunold 102 De Haan
104 Ernst 103 Hunold
105 Austin 103 Hunold
106 Pataballa 103 Hunold
107 Lorentz 103 Hunold
108 Greenberg 101 Kochhar
109 Faviet 108 Greenberg
110 Chen 108 Greenberg

Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice.
Clauze în SELECT Descriere
START WITH identifică nodul rădăcină
defineşte legăturile de tip self-join, precum şi direcţia în care va
CONNECT BY
fi traversată ierarhia
ORDER SIBLINGS BY sortează liniile din cadrul fiecărui nivel ierarhic

Alte concepte utilizate:


PRIOR - utilizat în cadrul CONNECT BY pentru stabilirea direcţiei în care va fi traversată
ierarhia
LEVEL - pseudo-coloană care identifică valoarea corespunzătoare nivelului din ierarhie
(LEVEL 1 corespunde nodului rădăcină, LEVEL 2 indică nivelul copil relativ la rădăcină etc.)
SYS_CONNECT_BY_PATH – funcţie care afişează calea către orice nod, pornind de la nodul
rădăcină
CONNECT_BY_ROOT – operator care referă datele
22 din nodul rădăcină

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

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

11
Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice.
SELECT LEVEL, id_angajat,
LPAD(' ',LEVEL)||nume angajat
FROM angajati
START WITH id_angajat=110
CONNECT BY
PRIOR id_manager = id_angajat;

LEVEL ID_ANGAJAT ANGAJAT


---------- ---------- ----------
1 110 Chen
2 108 Greenberg
3 101 Kochhar
4 100 King

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

12
Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice.
LEVEL ID_ANGAJAT ANGAJAT
------ ---------- ---------------------------------
SELECT LEVEL, id_angajat, 1 100 /King
2 101 /King/Kochhar
SYS_CONNECT_BY_PATH(nume,'/') 3 108 /King/Kochhar/Greenberg
angajat 4 109 /King/Kochhar/Greenberg/Faviet
4 110 /King/Kochhar/Greenberg/Chen
FROM angajati 4 111 /King/Kochhar/Greenberg/Sciarra
4 112 /King/Kochhar/Greenberg/Urman
START WITH id_angajat=100 4 113 /King/Kochhar/Greenberg/Popp
3 200 /King/Kochhar/Whalen
CONNECT BY 3 203 /King/Kochhar/Mavris
id_manager=PRIOR id_angajat; 3 204 /King/Kochhar/Baer
3 205 /King/Kochhar/Higgins
4 206 /King/Kochhar/Higgins/Gietz
2 102 /King/De Haan
3 103 /King/De Haan/Hunold
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

Limbajul SQL-Oracle
Interogarea datelor. Cereri ierarhice.
LEVEL ID_ANGAJAT ANGAJAT
SELECT LEVEL, id_angajat, ---------- ---------- -----------------
LPAD(' ',LEVEL)||nume angajat 1 100 King
2 102 De Haan
FROM angajati 3 103 Hunold
4 104 Ernst
START WITH id_angajat=100 4 105 Austin
CONNECT BY 4 106 Pataballa
4 107 Lorentz
id_manager=PRIOR id_angajat 2 114 Raphaely
3 115 Khoo
AND id_angajat!=101; 3 116 Baida
3 117 Tobias
3 118 Himuro
3 119 Colmenares

13
Limbajul SQL-Oracle
Actualizarea datelor

Comandă Descriere
INSERT adaugă o înregistrare nouă într-o tabelă
UPDATE modifică valori asociate coloanelor unei tabele
realizează fie modificări ale datelor, fie ştergeri, fie
MERGE adăugări de înregistrări dintr-o altă tabelă, în funcţie de o
condiţie de potrivire
DELETE şterge înregistrări dintr-o tabelă

31

Limbajul SQL-Oracle
Actualizarea datelor. Comanda MERGE
SELECT id_angajat, nume, salariul, id_functie
FROM angajati
ORDER BY id_angajat;

ID_ANGAJAT NUME SALARIUL ID_FUNCTIE


---------- ------------------------- ---------- ----------
100 King 24000 AD_PRES
101 Kochhar 17000 AD_VP
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

32

14
Limbajul SQL-Oracle
Actualizarea datelor. Comanda MERGE
SELECT id_angajat, nume, salariul, id_functie
FROM angajati_noi
ORDER BY id_angajat;

ID_ANGAJAT NUME SALARIUL ID_FUNCTIE


---------- ------------------------- ---------- ----------
99 Loren 4000,00 AD_PRES
103 Hunold 9500,00 AD_PRES
104 Ernst 6000,00 IT_PROG
105 Austin 7500,00 IT_PROG
106 Pataballa 4800,00 IT_PROG
120 Weiss 8000,00 ST_MAN
121 Fripp 8200,00 ST_MAN
122 Kaufling 7900,00 ST_MAN
123 Vollman 6500,00 ST_MAN
124 Mourgos 5800,00 ST_MAN
33

Limbajul SQL-Oracle
Actualizarea datelor. Comanda MERGE
MERGE INTO angajati a
USING angajati_noi b
ON (a.id_angajat=b.id_angajat)
WHEN MATCHED THEN
UPDATE
SET a.salariul=b.salariul,
a.id_functie=b.id_functie
WHEN NOT MATCHED THEN
INSERT
(a.id_angajat,a.prenume,a.nume,a.email,a.data_angajare
,a.id_functie,a.salariul,a.id_departament)
VALUES
(b.id_angajat,b.prenume,b.nume,b.email,b.data_angajare
,b.id_functie,b.salariul,b.id_departament);
34

15
Limbajul SQL-Oracle
Actualizarea datelor. Comanda MERGE
SELECT id_angajat, nume, salariul, id_functie
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

35

CURSUL 10...

Gestiunea altor obiecte ale bazei de date

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

BAZE DE DATE

Gestiunea altor obiecte


ale bazei de date

BUCUREŞTI
2021-2022

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

Obiecte ale bazei de date

✓ Tabele virtuale (VIEWS)

✓ Secvenţe (SEQUENCES)

✓ Sinonime (SYNONYMS)

✓ Indecşi (INDEXES)

✓ Clustere (CLUSTERS)
✓ etc.

1
Tabele virtuale
❑ Tabelă virtuală  view  viziune  vedere

❑ O tabelă virtuală desemnează o comandă SELECT stocată


în baza de date sub un anumit nume
❑ O tabelă virtuală poate fi referită ca şi orice altă tabelă de
bază
❑ Principala utilitate a tabelelor virtuale: asigurarea
securităţii unei baze de date

Tabele virtuale

Crearea unei tabele virtuale:

CREATE [OR REPLACE] VIEW nume_view


AS
comandă SELECT
[WITH READ ONLY]
[WITH CHECK OPTION];

2
Tabele virtuale

CREATE OR REPLACE VIEW vw_angajati AS


SELECT id_angajat, nume, telefon
FROM angajati;

View VW_ANGAJATI created. SELECT * FROM vw_angajati;

........
5

Tabele virtuale
❑ O tabelă virtuală trebuie să aibă nume de coloane valide
 atenţie la utilizarea expresiilor!
❑ Î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)
➢ 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ă.

3
Tabele virtuale
CREATE OR REPLACE VIEW clerk AS
SELECT id_angajat, nume, id_departament, id_functie
FROM angajati
WHERE id_functie = 'PU_CLERK'
OR id_functie = 'SH_CLERK'
OR id_functie = 'ST_CLERK';

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

Tabele virtuale

❑ Clauze de restricţionare în subcererea care stă la baza


unei tabele virtuale:
✓ WITH CHECK OPTION
✓ WITH READ ONLY

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

UPDATE clerk UPDATE clerk


SET id_functie = 'PU_MAN' SET id_functie = 'ST_CLERK'
WHERE id_angajat = 115; WHERE id_angajat = 116;

ORA-01402: în vizualizarea
WITH CHECK OPTION clauza
WHERE este încalcata

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

UPDATE clerk
SET id_functie = 'ST_CLERK'
WHERE id_angajat = 116;

ORA-42399: nu se poate efectua o operatie DML asupra unei


vederi read-only

10

5
Tabele virtuale

Tabele virtuale definite inline


O tabelă virtuală definită inline este reprezentată de o subcerere
utilizată în clauza FROM a unei comenzi SELECT.

Ştergerea tabelelor virtuale


DROP VIEW nume_view;

11

Secvenţe

❑ O secvenţă desemnează un obiect al bazei de date,


independent de tabele, care este utilizat pentru a genera şiruri
de numere
❑ Principalul scop al utilizării unei secvenţe: generarea de valori
distincte pentru câmpul cheie primară dintr-o tabelă

CREATE SEQUENCE nume_secvenţă


opţiuni_secvenţă;

12

6
Secvenţe
Opţiunile posibil de specificat la crearea unei secvenţe:

START WITH număr_întreg

INCREMENT BY număr_întreg

MAXVALUE număr_întreg

NOMAXVALUE

MINVALUE număr_întreg

NOMINVALUE

CYCLE

NOCYCLE
13

Secvenţe
Utilizarea secvenţelor presupune referirea a două pseudo-coloane:
❑ NEXTVAL
◦ incrementează secvenţa către următorul număr, în concordanţă cu
directivele indicate la crearea secvenţei
◦ returnează noua valoare
◦ apelul iniţial al lui NEXVAL va returna prima valoare din secvenţă
❑ CURRVAL
◦ afişează valoarea curentă din secvenţă
◦ poate fi utilizată numai dacă anterior a fost deja referită pseudo-
coloana NEXTVAL
14

7
Secvenţe

CREATE SEQUENCE seq_dep CREATE SEQUENCE seq_ang


START WITH 1 START WITH 1
INCREMENT BY 1 INCREMENT BY 1
MAXVALUE 10 MAXVALUE 90
NOCYCLE; NOCYCLE;

INSERT INTO departamente (id_departament,


denumire_departament)
VALUES (seq_dep.NEXTVAL, 'IT');

INSERT INTO angajati (id_angajat, nume, id_departament)


VALUES (seq_ang.NEXTVAL, 'Gigi', seq_dep.CURRVAL);

15

Secvenţe
Aspecte privind utilizarea secvenţelor:
◦ o comandă SQL care foloseşte pseudo-coloana NEXTVAL va conduce
la avansarea în secvenţă chiar şi în cazul în care comanda iniţială
eşuează
◦ nu pot fi folosite pseudo-coloanele NEXTVAL şi CURRVAL în clauza
DEFAULT a comenzilor CREATE TABLE sau ALTER TABLE
◦ nu pot fi folosite pseudo-coloanele NEXTVAL şi CURRVAL în subcereri
incluse în comenzile CREATE VIEW sau SELECT, UPDATE, DELETE
◦ nu pot fi folosite pseudo-coloanele NEXTVAL şi CURRVAL în clauza
WHERE a unei comenzi SELECT
◦ nu pot fi folosite pseudo-coloanele NEXTVAL şi CURRVAL la definirea
restricţiilor de integritate de tip CHECK

16

8
Secvenţe

Modificarea secvenţelor:
ALTER SEQUENCE nume_secvenţă
opţiuni_secvenţă;

Ştergerea secvenţelor:
DROP SEQUENCE nume_secvenţă;

17

Sinonime

Un sinonim reprezintă un nume alternativ (alias) pentru un alt


obiect al bazei de date.

Există două tipuri de sinonime:


➢ Private: există doar la nivelul utilizatorului care le-a creat
➢ Publice: sunt deţinute de utilizatorul PUBLIC şi sunt în mod
automat vizibile tuturor utilizatorilor

18

9
Sinonime
Crearea sinonimelor:
◦ private
CREATE OR REPLACE SYNONYM ang1 FOR angajati;
◦ publice
CREATE OR REPLACE PUBLIC SYNONYM ang2 FOR
angajati;

Utilizarea sinonimelor:
SELECT id_angajat, nume, id_departament,
id_functie
FROM ang1
WHERE id_functie = 'PU_CLERK';
19

Sinonime

Ştergerea sinonimelor:
◦ private
DROP SYNONYM ang1;

◦ publice
DROP PUBLIC SYNONYM ang2;

20

10
Indecşi
❑ Un index este un obiect asociat unei tabele sau unui grup de
tabele (cluster), care se creează în mod explicit folosind
comanda SQL CREATE INDEX pentru a mări viteza de acces la
datele unei tabele.

❑ Coloanele care au ataşate restricţii PRIMARY KEY sau UNIQUE


au indecşi creaţi automat.

❑ Indecşii pot fi unici sau nu. Crearea unui index unic se face cu
comanda CREATE UNIQUE INDEX sau prin definirea unei
restricţii de integritate UNIQUE sau PRIMARY KEY.

21

Aspecte privind indexarea în bazele de


date
❑ absenţa sau prezenţa unui index nu influenţează în niciun fel
structura comenzilor SQL de regăsire a datelor din baza de date;

❑ pentru creşterea vitezei de execuţie a operaţiilor de joncţiune,


se recomandă indexarea coloanelor care participă la join;

❑ dacă se distrug indecşii, aplicaţia cu baze de date continuă să


funcţioneze, dar cu performanţe mai mici;

❑ indecşii sunt logic şi fizic independenţi de datele tabelelor cu


care sunt asociaţi;

22

11
Aspecte privind indexarea în bazele de
date
❑ numărul indecşilor ce pot fi creaţi pentru o tabelă poate fi
oricât de mare, cu toate acestea numărul lor trebuie corelat cu
tipul operaţiilor majoritare ce se vor executa asupra tabelei;

❑ un index se recomandă a se crea după ce datele au fost


încărcate în tabelă, altfel acesta va trebui actualizat de fiecare
dată când se încarcă un rând în tabelă;

❑ Oracle întreţine în mod automat indecşii creaţi, astfel încât în


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.

23

Aspecte privind indexarea în bazele de


date
Un index poate fi creat în mod implicit, odată cu activarea
constrângerilor de integritate UNIQUE sau PRIMARY KEY sau
explicit, prin folosirea comenzii SQL CREATE INDEX.
Crearea implicită se face astfel:
CREATE TABLE angajati
(marca NUMBER(3) PRIMARY KEY,
CNP VARCHAR2(13) UNIQUE
nume VARCHAR2(30));

Crearea explicită se face astfel:


CREATE INDEX idx_nume ON angajati(nume);

24

12
Aspecte privind indexarea în bazele de
date
Actualizarea unui index se face prin comanda SQL ALTER INDEX.

Un index poate fi distrus atunci când:

◦ nu mai este necesar sau nu a adus performanţele anticipate;

◦ aplicaţia nu mai foloseşte indexul pentru regăsirea datelor;

◦ indexul a devenit invalid sau spaţiul său de memorie este prea


fragmentat şi trebuie distrus pentru a fi recreat;

Ştergerea unui index se face prin comanda DROP INDEX.

25

Tipuri de indecşi
Tip index Descriere

Tipul de index creat la executarea unei comenzi standard


CREATE INDEX.
Index de tip arbore B
Un arbore B este un arbore în care pentru găsirea oricărei
(B-tree index) valori este necesar acelaşi număr de paşi, indiferent de
valoarea căutată.

Index de cluster (index


Index bazat pe coloanele comune ale unui cluster
de grup)

Index cu cheie inversă Tip de index folositor numai în cazul căutării în arbore a
(reverse-key index) unor valori exacte

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,
unitatea de măsură a unui produs etc.) 26

13
Grupări de tabele (clustere)

❑ Clusterele sunt metode opţionale de memorare a datelor


unor tabele.
❑ Clusterul este o regrupare fizică a două sau mai multe tabele,
relativ la una sau mai multe coloane, cu scopul creşterii
performanţelor.
❑ Coloanele de legătură ale tabelelor într-un cluster se numesc
chei ale clusterului.
❑ Tabelele dintr-un cluster sunt stocate împreună pentru a
reduce numărul de operaţii de I/O cu discul.

27

Grupări de tabele (clustere)


❑ Cheia unui cluster este definită ca fiind coloana sau coloanele
pe care tabelele grupate le au în comun.
❑ Cheia unui cluster nu trebuie confundată cu cheile primare ale
tabelelor grupate. Valorile cheii clusterului sunt stocate o
singură dată în schemă, reducându-se astfel spaţiul de stocare
necesar şi procesările suplimentare.
❑ Clusterul este un mecanism transparent aplicaţiilor care
utilizează tabelele acestuia. Datele din tabele sunt manipulate
ca şi când acestea ar fi stocate într-o tabelă normală, însă în
momentul interogării se va observa o creştere semnificativă a
performanţelor.

28

14
Grupări de tabele (clustere)
Pentru a crea o tabelă într-un cluster se parcurg în mod
obligatoriu următorii paşi:
1. Se creează clusterul

2. Se adaugă tabelele la cluster

3. Se creează indexul de cluster

Adaugarea tabelelor la cluster se poate face şi după ce


indexul de cluster a fost creat.

29

Grupări de tabele (clustere)


1) Crearea clusterului
Pentru crearea clusterului se foloseşte comanda SQL CREATE CLUSTER în
care trebuie specificate coloana sau grupul de coloane după care sunt
grupate tabelele.
Sintaxa simplificată a comenzii de creare:
CREATE CLUSTER nume_cluster
(nume_coloana tip_data [, nume_coloana tip_data])

Sintaxa completă a comenzii de creare:


CREATE CLUSTER nume_cluster
(nume_coloana tip_data [, nume_coloana tip_data] )
[PCTFREE intreg] [PCTUSED intreg]
[SIZE intreg]
[TABLESPACE spatiu_tabel]
[STORAGE parametrii_de_stocare]

30

15
Grupări de tabele (clustere)
2) Adăugarea tabelelor la cluster
După crearea clusterului, adăugarea tabelelor la cluster se face folosind
comanda CREATE TABLE cu clauza CLUSTER:
CREATE TABLE nume_cluster
(nume_coloana tip_data [, nume_coloana
tip_data])
CLUSTER nume_cluster

Datorită faptului că tabelele clusterului folosesc alocarea de spaţiu a


acestuia, la folosirea comenzii CREATE TABLE cu opţiunea CLUSTER nu
trebuie specificaţi alţi parametri de stocare.
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

Grupări de tabele (clustere)


3) Crearea indexului de cluster

Pentru coloanele cheie ale clusterului trebuie creat în mod explicit un


index de cluster (index de grup). Indexul este utilizat pentru localizarea
univocă a liniilor.
Indexul de cluster trebuie creat înaintea efectuării oricărei operaţii de
interogare sau actualizare asupra clusterului.
Pentru crearea unui index de cluster se foloseşte comanda SQL CREATE
INDEX cu opţiunea ON CLUSTER:

CREATE INDEX nume_index ON CLUSTER


nume_cluster;

32

16
Exemplificare SQL-Oracle
Crearea clusterului sal_dept, cu indicarea grupării după coloanele cod_dept şi cod_tara
CREATE CLUSTER sal_dept
(cod_dept NUMBER(10),
cod_tara NUMBER(10));
Adăugarea tabelelor la clusterul sal_dept
CREATE TABLE departamente CREATE TABLE salariati
(cod_dept NUMBER(10), (cod_salariat NUMBER(10) PRIMARY KEY,
cod_tara NUMBER(10), nume VARCHAR2(10) NOT NULL,
nume_dept VARCHAR2(10), prenume VARCHAR2(10),
PRIMARY KEY(cod_dept, data_nastere DATE,
cod_tara) salariu NUMBER(10),
) cod_dept NUMBER(10),
CLUSTER sal_dept(cod_dept, cod_tara NUMBER(10),
cod_tara); FOREIGN KEY(cod_dept, cod_tara)
REFERENCES
departament(cod_dept,cod_tara))
CLUSTER sal_dept(cod_dept,cod_tara);
Crearea indexului pentru clusterul sal_dept
CREATE INDEX sal_dept_ind
ON CLUSTER sal_dept; 33

Grupări de tabele (clustere)


Comanda ALTER CLUSTER poate fi folosită pentru a modifica parametrii
de stocare ai clusterului.
Pentru distrugerea unui cluster se foloseşte comanda SQL DROP
CLUSTER.
Pentru a şterge un cluster care conţine tabele se foloseşte clauza
opţională INCLUDING TABLES:
DROP CLUSTER sal_dept
INCLUDING TABLES;
Dacă există tabele din afara clusterului care conţin restricţii de
integritate care se referă la chei din tabelele clusterului, acestea trebuie
de asemenea eliminate. Pentru acest lucru se foloseşte clauza opţională
CASCADE CONSTRAINTS;
DROP CLUSTER sal_dept
INCLUDING TABLES CASCADE CONSTRAINTS; 34

17
CURSUL 11...

Optimizarea cererilor de regăsire a datelor în bazele de date

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

BAZE DE DATE

Optimizarea cererilor de
regăsire a datelor în bazele de date

BUCUREŞTI
2021-2022

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

Necesitatea optimizării cererilor de


regăsire
❑ Sistemul de gestiune a bazelor de date relaţionale (SGBDR) are
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
execuţiei cererii de regăsire a datelor (în termeni de memorie,
CPU, operaţii de I/O);

minimizarea costului de
execuţie

optimizarea cererii de regăsire a datelor

1
Mecanisme de optimizare a cererilor de
regăsire
Transformări relaţionale
✓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ă:
➢selecţia înaintea proiecţiei
➢selecţia înaintea joncţiunii
➢proiecţia înaintea joncţiunii
✓specifice: depind de SGBDR şi ţin de memorarea datelor, de modul de accesare, precum şi de
ordonarea expresiilor algebrice

Optimizarea alocării Optimizarea accesului


✓prin definiţie, bazele de date ✓prin definiţie, căutarea datelor
sunt mari consumatoare de într-o bază de date este o
spaţiu, atât în memoria internă, activitate consumatoare de
cât şi în cea externă timp, din cauza volumului mare
✓pentru folosirea cât mai de date stocat şi a complexităţii
eficientă a acestora, SGBDR Mecanisme de ✓SGBDR prezintă cele mai
folosesc diverse mecanisme: optimizare a cererilor bune performanţe din punctul
reutilizarea, realocarea, zone de de vedere al regăsirii datelor,
memorie cu destinaţie specială, datorită limbajelor relaţionale
comprimarea datelor, alocarea implementate – SQL
dinamică

Strategii de optimizare a cererilor de


regăsire în SGBD ORACLE
❑ SGBD Oracle dispune de un instrument de analiză a timpilor şi a
algoritmilor de execuţie a cererilor – Explain Plan;
❑ În momentul în care se execută o cerere de regăsire, în funcţie de anumiţi
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;
❑ Principiul de lucru are la bază costul execuţiei acelei cereri aplicând pe rând
diverşi algoritmi de optimizare în funcţie de statisticile obţinute din
dicţionarul metadatelor referitoare la: operatorii relaţionali, numărul de
înregistrări din fiecare tabelă implicată, indecşi, clustere şi partiţii
disponibile pentru acele tabele implicate în cerere;
❑ Sunt luaţi în calcul şi alţi factori precum căile de acces la date, ordinea
joncţiunilor, resursele fizice disponibile (CPU, memorie, operaţii de I/O).

2
Strategii de optimizare a cererilor de regăsire.
Recomandări.
1.Se indexează coloanele cel mai des folosite în clauza WHERE, pentru acces direct
la înregistrările care dau elemente ale rezultatului

SELECT *
FROM T_PRODUSE
WHERE DESCRIERE = 'Toner';

Înainte:

Strategii de optimizare a cererilor de regăsire.


Recomandări.

CREATE INDEX IDX_DESCRIERE ON T_PRODUSE (DESCRIERE);

După:

3
Strategii de optimizare a cererilor de regăsire.
Recomandări.
2. Se evită folosirea funcţiilor UPPER sau LOWER asupra coloanelor indexate

SELECT *
FROM T_PRODUSE
WHERE UPPER(DESCRIERE) = 'TONER';

Înainte:

Strategii de optimizare a cererilor de regăsire.


Recomandări.
CREATE INDEX IDX_DESCRIERE_UP
ON T_PRODUSE (UPPER(DESCRIERE));

După:

4
Strategii de optimizare a cererilor de regăsire.
Recomandări.
3. Se evită folosirea funcţiei SUBSTR asupra coloanelor indexate

SELECT *
FROM T_PRODUSE
WHERE SUBSTR(DESCRIERE,1,2) = 'To';

Înainte:

Strategii de optimizare a cererilor de regăsire.


Recomandări.
SELECT *
FROM T_PRODUSE
WHERE DESCRIERE like 'To%';

După:

10

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

Înainte:

Strategii de optimizare a cererilor de regăsire.


Recomandări.
SELECT C.ID_PRODUS, C.ID_COMANDA
FROM T_COMENZI_DESFACERE C
WHERE EXISTS (SELECT 'x'
FROM T_PRODUSE P
where P.ID_PRODUS=C.ID_PRODUS);

După:

6
Strategii de optimizare a cererilor de regăsire.
Recomandări.
5. Se evită plasarea în clauza HAVING a condiţiilor care nu includ funcţii de grup

Înainte:
SELECT ID_COMANDA, COUNT(ID_PRODUS)
FROM T_COMENZI_DESFACERE
GROUP BY ID_COMANDA
HAVING ID_COMANDA IN (66,77);

Strategii de optimizare a cererilor de regăsire.


Recomandări.
După:
SELECT ID_COMANDA, COUNT(ID_PRODUS)
FROM T_COMENZI_DESFACERE
WHERE ID_COMANDA IN (66,77)
GROUP BY ID_COMANDA;

7
Strategii de optimizare a cererilor de regăsire.
Recomandări.
6. Se folosesc grupuri de tabele (clustere) astfel încât tabelele care sunt accesate
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
performanţele
Înainte:
SELECT C.ID_COMANDA, C.STATUS, P.ID_PRODUS
FROM T_PRODUSE P, T_COMENZI_DESFACERE C
WHERE P.ID_PRODUS=C.ID_PRODUS;

Strategii de optimizare a cererilor de regăsire.


Recomandări.
CREATE CLUSTER T_CLU (ID_PRODUS NUMBER);

CREATE TABLE T_PRODUSEC CREATE TABLE T_COMENZI_DESFACEREC


( (
ID_PRODUS NUMBER not null, TIP VARCHAR2(25) not null,
ID_ORGANIZATIE NUMBER not null, VERIFICAT VARCHAR2(25),
DESCRIERE VARCHAR2(240), STATUS VARCHAR2(25),
CATEGORIE VARCHAR2(333), ID_CLIENT NUMBER,
GRUPA VARCHAR2(47) ID_COMANDA NUMBER not null,
) 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.
Recomandări.
SAU
CREATE CLUSTER T_CLU (ID_PRODUS NUMBER);
CREATE INDEX IDX_CLU ON CLUSTER T_CLU;

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

Strategii de optimizare a cererilor de regăsire.


Recomandări.
După:
SELECT C.ID_COMANDA, C.STATUS, P.ID_PRODUS
FROM T_PRODUSEC P, T_COMENZI_DESFACEREC C
WHERE P.ID_PRODUS=C.ID_PRODUS;

18

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

19

Strategii de optimizare a cererilor de regăsire.


Recomandări.
CREATE INDEX IDX_REST ON
T_COMENZI_DESFACERE (CANTITATE_COMANDATA-CANTITATE_LIVRATA);

După:

10
Strategii de optimizare a cererilor de regăsire.
Recomandări.
8. Se indexează coloanele ale căror valori sunt sortate des

SELECT *
FROM T_PRODUSE
ORDER BY CATEGORIE DESC;

Înainte:

21

Strategii de optimizare a cererilor de regăsire.


Recomandări.

CREATE INDEX IDX_CATEG ON T_PRODUSE (CATEGORIE);

După:

22

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

Înainte:
SELECT COUNT(CATEGORIE)
FROM T_PRODUSE;

23

Strategii de optimizare a cererilor de regăsire.


Recomandări.
După:

SELECT COUNT(id_produs)
FROM T_PRODUSE;
sau
SELECT COUNT(ROWID)
FROM T_PRODUSE;

24

12
Strategii de optimizare a cererilor de regăsire.
Recomandări.
10. Se partiţionează tabelele de mari dimensiuni în segmente mai mici numite
partiţii, astfel încât interogările să le acceseze individual şi nu întreaga tabelă
din care au provenit
Înainte:
SELECT C.ID_COMANDA, C.STATUS, P.ID_PRODUS
FROM T_PRODUSE P, T_COMENZI_DESFACERE C
WHERE P.ID_PRODUS=C.ID_PRODUS
AND C.CANTITATE_COMANDATA = 2;

Strategii de optimizare a cererilor de regăsire.


Recomandări.
create table T_COMENZI_DESFACERE_P
(
TIP VARCHAR2(25) not null,
VERIFICAT VARCHAR2(25),
STATUS VARCHAR2(25),
ID_CLIENT NUMBER,
ID_COMANDA NUMBER not null,
DATA DATE,
ID_RAND_COMANDA NUMBER not null,
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.
Recomandări.

După:

27

Strategii de optimizare a cererilor de regăsire.


Recomandări.

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.

28

14
Strategii de optimizare a cererilor de regăsire
în SGBD ORACLE

Algoritmul Hash joins


◦ este utilizat pentru cererile în care sunt implicate tabele cu foarte multe
înregistrări şi asupra cărora se aplică o joncţiune de egalitate;
◦ algoritmul constă în alegerea tabelei cu dimensiunea mai mică şi construirea
unei tabele hash în memorie pe baza condiţiei de joncţiune;
◦ apoi este scanată şi cealaltă tabelă pentru regăsirea de înregistrări care
corespund condiţiei de legătură;
◦ acest algoritm este aplicat în cazul în care tabela mai mică încape în memoria
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

Strategii de optimizare a cererilor de regăsire


î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
scanată
SELECT SELECT /*+ USE_HASH(cd c) */
c.id_client, c.id_client,
c.nume_client, c.nume_client,
cd.data, cd.data,
cd.cantitate_comandata cd.cantitate_comandata
FROM t_clienti c, FROM t_clienti c,
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;

30

15
Strategii de optimizare a cererilor de regăsire
în SGBD ORACLE

Algoritmul Nested loop joins


◦ este recomandat pentru joncţiuni aplicate între subseturi relativ reduse de
date;
◦ condiţia de joncţiune reprezintă un mod eficient de parcurgere a tabelelor;
◦ opţiunea de utilizare a algoritmului se specifică prin directiva USE_NL

31

Strategii de optimizare a cererilor de regăsire


î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)*/
c.id_client, c.id_client,
c.nume_client, c.nume_client,
cd.data, cd.data,
cd.cantitate_comandata cd.cantitate_comandata
FROM t_clienti c, FROM t_clienti c,
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

32

16
Strategii de optimizare a cererilor de regăsire
în SGBD ORACLE
Algoritmul Sort merge joins
◦ 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
la scăderea costurilor de execuţie faţă de rezultatele similare obţinute prin aplicarea
algoritmului Hash joins;
◦ Sort merge joins este recomandat şi pentru cazurile în care se realizează o joncţiune cu o
condiţie de inegalitate sau pentru seturi foarte mari de date;
◦ principiul de execuţie nu este ghidat de alegerea uneia dintre tabele, ci presupune:
◦ se realizează o ordonare a datelor din ambele tabele după cheia (condiţia) de căutare.
Dacă deja a fost aplicată o sortare corespunzătoare, acest pas nu se mai aplică;
◦ 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

Strategii de optimizare a cererilor de regăsire


î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);
CREATE INDEX cd_c_id_idx ON t_comenzi_desfacere(id_client);
CREATE INDEX cd_ord_date_idx ON t_comenzi_desfacere(data);
Apoi este aplicată joncţiunea pe cele două tabele cu directiva USE_MERGE
SELECT SELECT /*+ USE_MERGE (cd c)*/
c.id_client, c.id_client,
c.nume_client, c.nume_client,
cd.data, cd.data,
cd.cantitate_comandata cd.cantitate_comandata
FROM t_clienti c, FROM t_clienti c,
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;

34

17
Strategii de optimizare a cererilor de regăsire
în SGBD ORACLE
Algoritmul Cartesian Joins
◦ se aplică în cazul joncţiunilor de tip produs cartezian, atunci când între cele două
tabele implicate nu se poate realiza o legătură, iar rezultatul cererii constă în
combinaţia fiecărei înregistrări din prima tabelă cu fiecare înregistrare din cea
de-a doua.

Algoritmii Outer Joins


◦ sunt aplicaţi în cazul joncţiunilor externe şi sunt de patru tipuri: Nested Loop
Outer Joins, Hash Join Outer Joins, Sort Merge Outer Joins, Full Outer Joins.

35

Strategii de optimizare a cererilor de regăsire


în SGBD ORACLE
Nested Loop Outer Joins – este Sort Merge Outer Joins – este Hash Join Outer Joins – este
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
următorul: este aleasă una dintre condiţiile impuse datelor duc la o Hash să fie eficientă şi dacă nu
tabele pe post de pivot, iar creştere a costurilor obţinute prin există posibilitatea utilizării unei
înregistrările celei de-a doua aplicarea algoritmului Hash sau tabele pe post de pivot
tabele sunt parcurse într-un ciclu când deja înregistrările sunt
repetitiv în funcţie de condiţia de ordonate
legătură

SELECT /*+ USE_NL(c cd) */ SELECT /*+ USE_MERGE(c cd) SELECT /*+ USE_HASH(c cd)
c.id_client, */ */
c.nume_client, c.id_client, c.id_client,
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;
36

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

37

CURSUL 12...

Protecţia bazelor de date

Evoluții în domeniul bazelor de date

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

BAZE DE DATE

PROTECŢIA BAZELOR DE DATE

BUCUREŞTI
2021-2022

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

Protecţia bazelor de date


Este asigurată prin cele două aspecte care trebuie luate în calcul:

a) Controlul integrităţii datelor


1. Integritatea semantică
2. Controlul concurenţei la date
3. Salvarea / restaurarea datelor
b) Controlul securităţii datelor
1. Autorizarea şi controlul accesului la date
2. Tabele virtuale
3. Proceduri speciale
4. Criptarea datelor

1
Integritatea datelor

Se referă la corectitudinea şi coerenţa datelor, dar şi la


manipularea acestora astfel încât să se respecte restricţiile de
integritate ale modelului de date implementat.

Integritatea datelor
INTEGRITATEA SEMANTICĂ

❑Se referă la prevenirea introducerii de date incorecte şi a


realizării de prelucrări eronate
❑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)

2
Integritatea datelor
CONTROLUL CONCURENŢEI LA DATE

❑Se referă la garantarea corectitudinii datelor în cazul prelucrării


tranzacţiilor
❑Tranzacţia desemnează o secvenţă de instrucţiuni de
manipulare a datelor (în special de actualizare), care formează un
tot unitar şi care se execută în totalitate sau deloc.
❑Există tranzacţii:
◦ implicite (gestionate de sistem)
◦ explicite (gestionate de programator, prin specificarea limitelor
unei tranzacţii în cadrul unei aplicaţii)

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

❑Rezultatul execuţiei unei tranzacţii poate fi:


◦ 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
nouă stare coerentă;
◦ abandon: dacă operaţiile constituente ale tranzacţiei au fost
anulate, iar baza de date revine la starea coerentă de dinainte de
execuţia tranzacţiei curente.

❑În Oracle, comenzile SQL pentru tratarea tranzacţiilor sunt:


◦ COMMIT
◦ ROLLBACK
◦ SAVEPOINT

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

Caracteristicile unei tranzacţii – ACID


❑ Atomicitatea: evidenţiază caracterul atomic al tranzacţiilor, acestea
fiind executate pe principiul totul sau nimic.
❑ Consistenţa (coerenţa): presupune execuţia tranzacţiilor cu
respectarea restricţiilor de integritate.
❑ Izolarea: presupune execuţia tranzacţiilor independent unele de
altele.
❑ Durabilitatea (persistenţa): evidenţiază caracterul persistent al
tranzacţiilor salvate.

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

În momentul în care mai multe tranzacţii accesează aceleaşi date,


în mod concurent, apare mecanismul de blocare.
În cazul accesului concurent, SGBDR acordă priorităţi tranzacţiilor
implicate. Tranzacţia cu prioritatea cea mai mare are acces la
date, iar acestea sunt blocate pentru celelate tranzacţii, care
aşteaptă finalizarea prelucrărilor curente.
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
nevoie de aceleaşi date, deja ocupate), atunci conflictul se
rezolvă tot prin acordarea de priorităţi.

4
Integritatea datelor

SALVAREA / RESTAURAREA DATELOR

❑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
(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.

Securitatea datelor

Se referă la confidenţialitatea datelor, asigurată prin


restricţionarea accesului la date pentru utilizatorii neautorizaţi.

10

5
Securitatea datelor
AUTORIZAREA ŞI CONTROLUL ACCESULUI LA DATE
❑Constă în identificarea utilizatorilor şi restricţionarea accesului
acestora la anumite date, pentru diferite prelucrări, în funcţie de
categoria de utilizatori.
❑În acest scop, administratorul BD construieşte profile de
utilizatori, precizând categoria, grupa, numele, parola, drepturile
acordate.
❑În Oracle:
◦ CREATE PROFILE...
◦ CREATE ROLE...
◦ CREATE USER... PROFILE...
◦ GRANT rol TO user
◦ GRANT privilegii TO user
11

Securitatea datelor
TABELE VIRTUALE

❑Construcţii logice reprezentând cereri de regăsire memorate în


dicţionarul BD (comenzi SELECT stocate).
❑La apelul tabelei virtuale, interogarea este executată şi se vor
accesa datele doar pe o parte a bazei de date, la care utilizatorii
au acces.
❑În Oracle:
◦ CREATE VIEW...
◦ odată creată, o tabelă virtuală se apelează prin comenzi SQL, ca
şi orice altă tabelă relaţională

12

6
Securitatea datelor
PROCEDURI SPECIALE

❑ Proceduri stocate în baza de date, oferite de SGBDR sau


create de programator.
❑ În Oracle se pot scrie proceduri stocate în limbajul PL/SQL
pentru a realiza diferite acţiuni, pe date restricţionate.

13

Securitatea datelor
CRIPTAREA DATELOR

❑Operaţie de codificare a datelor, în vederea stocării sau


transmiterii lor codat, nu în clar.
❑În acest sens, se vor utiliza algoritmi de criptare, o cheie de
acces la aceştia şi un algoritm de decriptare.

14

7
BAZE DE DATE

EVOLUȚII ACTUALE ÎN DOMENIUL BAZELOR DE DATE

Noi tipuri de baze de date


❑ Baze de date NoSQL
❑ Baze de date in-memory

16

8
Evoluţia organizării datelor

Depozite
Baze de
de date
date NoSQL
(1990)
Baze de date (2010+)
(1970)

Fișiere de
date (1960)

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
datelor diferit de cel implementat în modelul
relațional, care se bazează pe structuri tabelare

18

9
Caracteristici ale bazelor de date
NoSQL
❑ Permit lucrul eficient cu date semistructurate și
nestructurate
❑ Folosesc mai multe limbaje de interogare diferite
(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

Limitări ale bazelor de date NoSQL


❑ Nu există o standardizare
❑ Nu se asigură o protecţie performantă a datelor
❑ Nu se asigură consistenţa datelor

20

10
NoSQL vs. SQL

SQL NoSQL
Stocare date Conform modelului Stocare folosind formate
relațional, în tabele de non-relaționale specifice
date
Date stocate Structurate Semi-structurate,
nestructurate
Schema Statică Dinamică
Scalabilitate Verticală Orizontală
Limbaj de interogare SQL Not only SQL
Joncțiuni Da Nu
Gestiune tranzacții ACID CAP

21

Stocarea datelor în bazele de date NoSQL


❑ stocarea bazată pe grup de coloane
❑ stocarea bazată pe documente
❑ stocarea bazată pe structuri de tip chei-valoare
❑ stocarea datelor bazată pe graf

22

11
Tipuri de baze de date NoSQL
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

Trend BD - 2021

24

12
Trend BD - 2021

25

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.

26

13
Caracteristici
❑ Rapiditate, accesul la memorie fiind mai rapid decât
accesul la disc

❑ Algoritmii de optimizare internă sunt mai simpli

❑ Execută mai puține instrucțiuni ale procesorului.

❑ 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

Domenii de aplicabilitate
❑ Aplicații pentru care timpul de răspuns este critic:
◦ Telecomunicații
◦ Industria bancară
◦ Rețele mobile de publicitate
❑ Analiza de date – odată cu extinderea pe scară largă a
procesoarelor multi-core

28

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

❑ Nu se asigură durabilitatea datelor

29

CURSUL 13...

Recapitulare

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

BAZE DE DATE

Noţiuni recapitulative

BUCUREŞTI
2021-2022

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

Elemente de teoria bazelor de date


Valoare
Entitate
Instanţă
Atribut
Modele de
Date date
Sistem

Baze de date
Metadate

SBD
SGBD

1
Modele de date

❑ Componente + descrieri

❑ Tipuri de modele de date

Baze de date
❑ Definiţii
❑ Caracteristici
❑ Niveluri de organizare
❑ Tipologia BD
❑ Etape de realizare a unei BD

❑ Sisteme de baze de date: definiţie, componente, arhitectură


❑ Sisteme de gestiune a bazelor de date

2
Modelul de date relaţional

❑ Structura relaţională

❑ Operatorii relaţionali: algebra relaţională, calculul relaţional

❑ Restricţiile de integritate

Baze de date relaţionale

❑ Definiţie

❑ Etape de realizare a unei baze de date relaţionale

❑ Tehnica normalizării

❑ Protecţia bazelor de date relaţionale

3
Limbajul SQL

❑ Limbaje relaţionale pentru definirea datelor


❑ Limbaje relaţionale pentru manipularea datelor

❑ Gestiunea obiectelor unei BD: tabele, tabele virtuale,


secvenţe, sinonime, indecşi, clustere

❑ Optimizarea cererilor de regăsire a datelor

Baze de date relaţionale.


Tehnica normalizării.
Exemplu
DETALII_COMENZI
Nr_comanda
Se consideră lista de atribute Data_comanda
▪ Nr_comanda ▪ Cod_produs Cod_client
▪ Data_comanda ▪ Denumire_produs Nume_client
Adresa_client
▪ Cod_client ▪ Unitate_masura
Banca_client
▪ Nume_client ▪ Cantitate
Cont_client
▪ Adresa_client ▪ Pret_unitar Cod_produs
▪ Banca_client ▪ Discount Denumire_produs
▪ Cont_client ▪ Proprietati Unitate_masura
Cantitate
Pret_unitar
Discount
Proprietati

4
Baze de date relaţionale.
Tehnica normalizării.
Exemplu
FN1 DETALII_COMENZI
Nr_comanda
DETALII_COMENZI Cheie primară Data_comanda
Nr_comanda compusă !!! Cod_client
Data_comanda Nume_client
Cod_client Cod_postal
Nume_client Localitate
Adresa_client Banca_client
Banca_client Cont_client
Cont_client Cod_produs
Cod_produs Atribute Denumire_produs
Denumire_produs compuse Unitate_masura
Unitate_masura Cantitate
Cantitate Pret_unitar
Pret_unitar Discount
Discount Dimensiune
Proprietati Culoare

Baze de date relaţionale.


Tehnica normalizării.
Exemplu
FN2
DETALII_COMENZI Dependenţe funcţionale:
Nr_comanda (Nr_comanda, Cod_produs) -> Cantitate DETALII_COMENZI
Data_comanda (Nr_comanda, Cod_produs) -> Discount
Cod_client Nr_comanda -> Data_comanda
Nume_client Nr_comanda -> Cod_client
Cod_postal
Nr_comanda -> Nume_client
Localitate
Nr_comanda -> Cod_postal COMENZI
Banca_client
Nr_comanda -> Localitate
Cont_client
Nr_comanda -> Banca_client
Cod_produs
Denumire_produs
Nr_comanda -> Cont_client
Unitate_masura Cod_produs -> Denumire_produs
Cantitate Cod_produs -> Unitate_masura
Cod_produs -> Pret_unitar PRODUSE
Pret_unitar
Discount Cod_produs -> Dimensiune
Dimensiune Cod_produs -> Culoare
Culoare

10

5
Baze de date relaţionale.
Tehnica normalizării.
Exemplu
FN2

COMENZI DETALII_COMENZI PRODUSE


Nr_comanda Nr_comanda Cod_produs
Data_comanda Cod_produs Denumire_produs
Cod_client Cantitate Unitate_masura
Nume_client Discount Pret_unitar
Cod_postal Dimensiune
Localitate Culoare
Banca_client
Cont_client

11

Baze de date relaţionale.


Tehnica normalizării.
Exemplu
Dependenţe funcţionale tranzitive:
FN3 Cod_client -> Nume_client
Cod_client -> Cod_postal
Cod_client -> Localitate
Cod_client -> Banca_client
Cod_client -> Cont_client

CLIENTI COMENZI DETALII_COMENZI PRODUSE


Cod_client Nr_comanda Nr_comanda Cod_produs
Nume_client Data_comanda Cod_produs Denumire_produs
Cod_postal Cod_client Cantitate Unitate_masura
Localitate Discount Pret_unitar
Banca_client Dimensiune
Cont_client Culoare

12

6
SUCCES!

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