Sunteți pe pagina 1din 530

Baze de Date

Bibliografie
Baze de Date relaionale. Teorie i Aplicaii in Visual FoxPro,
Cornelia Gyorodi, R. Gyorodi, G. Pecherle, Editura Mediamira ,
2008.
Gyrdi Cornelia Baze de date relaionale. Teorie i aplicaii,
TREIRA, Oradea 2000, ISBN 973-8159-23-7, nr. pag 236
Analiza, proiectarea si implementarea bazelor de date aplicatii in Visual FoxPro, Colin Dan Maier, Editura Albastra
David M. Kroenke Database Processing Fundamentals,
Design and Implementation, Pretice-Hall , 1995.
Oracle Education."SQL1", Oracle Corporation, 2007
https://academy.oracle.com/index1.html
Curs Baze de Date - Gyorodi
Cornelia

Elemente ale teoriei bazelor de date


Cum folosii datele pentru a prelucra informaiile.
Ce tipuri de date putei folosi.
Cum putei organiza datele sub form de colecii de
date.
Ce colecii de date putei folosi n procesul de
prelucrare a datelor.
Ce este o baz de date i cum sunt organizate datele
ntr-o baz de date.
Ce operaii putei executa pentru a obine informaii n
urma prelucrrii datelor dintr-o baz de date.

Curs Baze de Date - Gyorodi


Cornelia

Activitaile i obiectivele organizrii datelor


Analiza datelor se poate face n dou moduri:
Logic (la nivelul conceptual). De exemplu, o dat este un numr
ntreg pozitiv, cu valori cuprinse ntre 0 i 100.

Fizic (la nivelul reprezentrii ei n memoria intern). De


n limbajul C o dat de tip int este reprezentat n 2 octei de memorie i permite
memorarea datelor cu valori cuprinse ntre -32768 32767.

Exist dou tipuri de date:


Date simple sau date elementare. Sunt date independente unele de altele
din punct
de vedere al reprezentrii lor n memorie.

Date compuse sau structuri de date.

Sunt colecii de date ntre care exist

anumite
relaii (relaii structurale).

Curs Baze de Date - Gyorodi


Cornelia

Structuri fizice de date

Structurile de date create n memoria intern sunt temporare dar permit o


vitez de prelucrare mult mai mare.

Structurile de date organizate n memoria extern sunt permanente i


permit stocarea i prelucrarea unei cantii mari de date.

Curs Baze de Date - Gyorodi


Cornelia

Organizarea datelor
Organizarea datelor presupune:
definirea structurarea, ordonarea i gruparea datelor n colecii

de date omogene
stabilirea relaiilor ntre date
stocarea datelor pe suport informaional.
Scopul organizrii datelor l constituie regsirea automat a
datelor dup diverse criterii.

Obiectivele urmrite n organizarea datelor sunt:


timpul de acces la date s fie minim (acces rapid la date).
spaiul de memorie intern i extern ocupat de date s fie ct mai
redus (economie de memorie intern i extern).

unicitatea datelor , datele s apar o singur dat n sistem


flexibilitatea datelor, s se permite schimbarea structurii datelor i a
relaiilor dintre ele fr a modifica programele ce le gestioneaz.
Curs Baze de Date - Gyorodi
Cornelia

Colecie de date
Principalele probleme pe care le implic ns o colecie de date format
dintr-un ansamblu de fiiere de date sunt:

Redundana datelor. Reprezint o proprietate a unei colecii de date i se


refer la faptul c unele componente ale coleciei sunt memorate de mai multe ori
pe suportul de memorare.

Actualizarea fiierelor i pstrarea integritii datelor.


Actualizarea datelor trebuie s se fac n toate fiierele n care apar.

Dependena programelor de fiierele de date. Orice modificare n

structura fiierului de date va avea ca efect modificarea programului de aplicaie.

Soluia care poate rezolva aceast problem este reunirea datelor ntr-o
colecie unic numit baza de date.

Curs Baze de Date - Gyorodi


Cornelia

Baza de date
Baza de date(database) poate fi definit ca fiind una sau mai multe
colecii de date aflate n interdependen, mpreun cu descrierea
datelor i a relaiilor dintre ele.
Din punct de vedere al serviciilor pe care le ofer, baza de date
este o colecie de date care poate descrie ntreaga activitate a unei
organizaii i care furnizeaz acces la diferite informaii,
prezentate n diferite formate.
Din punct de vedere al organizrii datelor sub forma unei
structuri de date pe mediul de memorare, ea este forma optim de
organizare a datelor. Se poate spune c este o colecie de fiiere i
nregistrri legate ntre ele.
Pentru a permite accesul difereniat la datele din colecia de date, se poate defini o
schem general a bazei de date care descrie ntreaga colecie de date i diferite
scheme pariale care descriu seturile de date din colecie la care pot avea acces anumii
utilizatori sau anumite grupuri de utilizatori.

Curs Baze de Date - Gyorodi


Cornelia

Baza de date

Avantajele folosirii bazelor de date n locul fiierelor de date sunt:


Partajarea informaiilor
Micorarea redundanei datelor
Consistena datelor
Integritatea datelor
Securitatea datelor
Controlul centralizat al datelor
Transparena
Independena datelor

Pe plan internaional exist mai multe grupuri specializate n


standardizarea conceptelor ce apar n dezvoltarea bazelor de date,
cele mai importante fiind DBTG, CODASYL, ANSI.
Curs Baze de Date - Gyorodi
Cornelia

Procesul de crearea a unei baze de date


Cum are o baz de
date de a face cu
modelarea datelor?
Modelarea datelor este
prima parte a
procesului de
dezvoltare a bazei de
date.
Procesul de dezvoltare
a bazei de date ncepe
cu specificarea
cerinelor de business (
Business Information
Requirements)
Curs Baze de Date - Gyorodi
Cornelia

Arhitectura general a unei baze de date

Curs Baze de Date - Gyorodi


Cornelia

Sisteme de gestiune a bazelor de date


Sistemul de gestiune al bazei de date reprezint
software-ul propriu-zis al acestuia care asigur
realizarea urmtoarelor activiti:

definirea structurii bazei de date


ncrcarea datelor n baza de date
accesul la date (interogare, actualizare)
ntreinerea bazei de date
reorganizarea bazei de date (restructurarea i
modificarea strategiei de acces)
securitatea datelor.
Curs Baze de Date - Gyorodi
Cornelia

Obiectivele unui sistem de gestiune a bazelor


de date
Unui sistem de gestiune a bazei de date i revin
o serie de obiective, acestea sunt:

Asigurarea independenei datelor.


Asigurarea unei redundane minime i controlate a
datelor din baza de date.
Asigurarea unor faciliti sporite de utilizare a datelor.
Sporirea gradului de securitate a datelor mpotriva
accesului neautorizat la ele.
Asigurarea integritii datelor, mpotriva unor tergeri
intenionate sau neintenionate.
Asigurarea partajabilitii datelor.
Curs Baze de Date - Gyorodi
Cornelia

Funciile unui sistem de gestiune a bazei de


date
Funcia de descriere a datelor, permite definirea structurii
bazei de date cu ajutorul limbajului de definire.
Funcia de manipulare a datelor, este cea mai complex
funcie i realizeaz urmtoarele activiti:

crearea bazei de date


adugarea unei noi nregistrri
suprimarea unor nregistrri
modificarea valorilor corespunztoare unor cmpuri
cutarea, sortarea, etc.

Funcia de utilizare, asigur mulimea interfeelor


necesare pentru comunicare tuturor utilizatorilor cu baza
de date.
Funcia de administrare a bazei de date apare ca o funcie
complex i este de competena administratorului bazei
de date.
Curs Baze de Date - Gyorodi
Cornelia

Componentele unei baze de date

Curs Baze de Date - Gyorodi


Cornelia

Modele de date

Modelul de date ofer instrumentele necesare interpretrii datelor din


colecia de date. El este format din dou componente:
un set de reguli pentru organizarea i structurarea datelor,
un set de reguli care definesc operaiile pentru manipularea datelor.
Definirea unui model de date presupune precizarea urmtoarelor trei
elemente:
structura modelului
operatorii care acioneaz asupra structurilor de date
restriciile pentru meninerea corectitudinii datelor, numite i reguli de
integritate.
Descrierea structurii modelului presupune:
definirea obiectelor (entitilor) i a caracteristicilor asociate
stabilirea relaiilor ntre obiecte.

Curs Baze de Date - Gyorodi


Cornelia

Modele de organizare a datelor


Modelele de date se mpart n:

modele ierarhice sau


arborescente
modele reea
modele relaionale
modele orientate pe obiect

Un exemplu de model ierarhic

Curs Baze de Date - Gyorodi


Cornelia

Un exemplu de model reea

Curs Baze de Date - Gyorodi


Cornelia

Un exemplu de model relaional

Curs Baze de Date - Gyorodi


Cornelia

Modelul relaional
Modelul relaional are urmtoarele avantaje fa de
celelalte modele de organizare:

Este un model uor de neles de ctre utilizator i uor de


vizualizat.
Asigur independena structurii logice a datelor fa de modul de
stocare fizic a lor.
Regulile i restriciile care asigur integritatea datelor i
protejarea datelor i a structurii de date sunt uor de neles de
ctre utilizator.

Spaiul de stocare a datelor este redus.

Redundana datelor este redus.


Curs Baze de Date - Gyorodi
Cornelia

Modelul relaional
n modelul relaional o baz de date este compus dintr-o mulime
finit de relaii, fiecare relaie reprezentnd un tip de entitate sau
o asociere dintre dou sau mai multe tipuri (multimi) de entiti.
In modelul relaional avem urmtoarele concepte:

Tabelele se mai numesc i relaii


Coloana din tabel se numete atributul relaiei
Un rnd din tabel se mai numete i tuplu. Tuplul corespunde nregistrrii din
fiierul de date.

O relaie se definete prin intermediul atributelor sale.


Atributele unei relaii sunt atributele tipului de entitate sau de
asociere pe care l reprezinta relaia respectiv.
Fiecare atribut al unei relaii are un domeniu de definiie i poate
lua o singur valoare (din domeniul sau de definiie) pentru fiecare
tuplu, adic atributele au numai valori scalare.
Curs Baze de Date - Gyorodi
Cornelia

Modelul relaional (continuare)


Un domeniu de definiie (domain) este o mulime cu nume de valori
atomice de acelai tip, avnd o anumit semnificaie, din care i iau
valori atributele relatiilor.
Denumirea de valori atomice nseamn c aceste valori nu pot fi
descompuse din punct de vedere al sistemului de gestiune al bazei
de date i reprezint cea mai mic entitate semantic de date.
Schema relaiei (relation schema), notat R(A1,A2,...Ai,...An), este
compus din numele relaiei (R) i din lista ordonata a atributelor
sale A1,A2,...Ai,..An, fiecare atribut Ai definit pe domeniul su de
definitie, D(Ai).
Schema relaiei este folosit pentru a descrie relaia respectiv i se
mai numete i tipul sau intensiunea relaiei.
Numrul de atribute ale schemei unei relaii se numete gradul
relaiei.
Curs Baze de Date - Gyorodi
Cornelia

Modelul relaional (continuare)


O relaie (relation) R definit de schema R(A1,A2,...Ai,...An) este o
mulime de n-tupluri t, fiecare tuplu fiind o lista ordonat de n
valori t = <v1,v2,...vi,...vn>, 1 <= i<= n i vi este valoarea
atributului Ai, apartinnd domeniului su de definiie D(Ai).
Numrul de tupluri al unei relaii se numete cardinalitatea relaiei.
O relatie se reprezinta printr-un tabel (table) care este compus din
urmtoarele pri:

Numele tabelului, care este identic cu numele relaiei pe care o reprezint.


Un numr de coloane egal cu numrul de atribute ale relaiei, fiecare coloan
reprezentnd un atribut.
Capul tabelului, n care se nscriu numele atributelor relaiei, fiecare atribut
fiind nscris n coloana corespunztoare.
O mulime de linii, fiecare linie corespunznd unui tuplu (deci unei entiti); n
fiecare element al unei linii se nregistreaza valoarea atributului corespunztor
coloanei n care se afl elementul respectiv.
Curs Baze de Date - Gyorodi
Cornelia

Modelul relaional (continuare)


Se folosete termenul de tabel pentru a desemna relaia pe care o
reprezint, cele doua notiuni nu sunt identice: relaia este o
noiune abstract (o mulime n sens matematic), n timp ce tabelul
este o reprezentare a relaiei.
Sistemele de baze de date relaionale utilizeaz ca limbaj de
programare limbajul SQL (Structured Query Language), pentru
care au fost propuse mai multe standarde de catre Organizatia
Internationala de Standardizare (International Standardization
Office - ISO).
Majoritatea sistemelor de gestiune a baze lor de date relaionale
actuale implementeaz versiunea din anul 1992 a standardului
pentru limbajul SQL, denumit SQL92 (sau SQL2).
Curs Baze de Date - Gyorodi
Cornelia

SGBDR
Cel mai utilizat SGBD relaional din ntreaga lume rmne n
continuare Oracle produs de firma Oracle Corporation, deoarece are
urmtoarelor avantaje:
Poate fi folosit cu diferite sisteme de operare: Windows , Unix
Permite dezvoltarea unor baze de date de orice dimensiune (de la
civa octei pn la gigaoctei).
Respect standardele n vigoare referitoare la limbajele de
accesare a datelor (SQL).
Accept un numr mare de utilizatori simultani, minimiznd
conflictele care pot s apar n cererile simultane de acces la date.
Asigur o securitate mrit datorit siguranei foarte mari la
limitarea i monitorizarea accesului la date.

Curs Baze de Date - Gyorodi


Cornelia

Metode de securitate a datelor


Metodele prin care un SGBDR asigur securitatea bazei de date:

Parol la nivelul ntregii baze de date


Drepturi specifice acordate utilizatorilor sau grupurilor de
utilizatori
Criptarea bazei de date
Elementele folosite de SGBDR pentru a-i realiza funciile sunt:
Dicionarul de date (Data Dictionary)
Limbajul de manipulare a datelor (Data Manipulation Language)
Limbajul de interogare (Query Language).
SQL (Structured Query Language - limbaj structurat de interogare)
este cel mai rspndit limbaj de interogare a bazelor de date
relaionale.
Curs Baze de Date - Gyorodi Cornelia

Constrngeri de integritate ale modelului


relaional
Constrngerile de integritate (integrity constraints) sunt reguli care
se definesc la proiectarea unei bazei de date i care trebuie s fie
respectate de orice stare a acesteia.
Din punct de vedere al locului unde sunt definite, constrngerile
pot fi:

constrngeri intra-relaie
constrngeri inter-relaii.

Constrngerile intra-relaie sunt reguli care se impun n cadrul unei


singure relaii i asigur integritatea datelor acesteia. Ele sunt, la
rndul lor, de trei categorii:

constrngeri de domeniu,
constrngeri de tuplu
constrngeri impuse prin dependene de date (dependente funcionale,
multivalorice sau de jonciune).

Curs Baze de Date - Gyorodi


Cornelia

Constrngeri de integritate ale modelului


relaional
Constrngerile de integritate (integrity constraints) sunt reguli care
se definesc la proiectarea unei bazei de date i care trebuie s fie
respectate de orice stare a acesteia.
Din punct de vedere al locului unde sunt definite, constrngerile
pot fi:

constrngeri intra-relaie
constrngeri inter-relaii.

Constrngerile intra-relaie sunt reguli care se impun n cadrul unei


singure relaii i asigur integritatea datelor acesteia. Ele sunt, la
rndul lor, de trei categorii:

constrngeri de domeniu,
constrngeri de tuplu
constrngeri impuse prin dependene de date (dependente funcionale,
multivalorice sau de jonciune).

Curs Baze de Date - Gyorodi


Cornelia

Constrngeri de integritate ale modelului


relaional
Constrngerile inter-relaii sunt reguli care se impun ntre dou sau
mai multe relaii.
Cele mai importante constrngeri inter-relaii sunt constrngerile
de integritarea referentiala, care se realizeaz prin intermediul
cheilor externe (straine) i asigur asocierea corect a relaiilor.
Din punct de vedere al modului de definire, constrngerile unei
baze date pot fi inerente, implicite si explicite.
Constrngerile inerente sunt cele ale modelului de date nsui, care
nu trebuie sa fie specificate la definirea relatiilor, dar sunt
respectate prin modul n care se construiesc relaiile.
Constrngerile implicite sunt cele reprezentate n mod implicit n
schemele relatiilor prin intermediul instruciunilor de definire a
datelor. Pentru fiecare model de date exist un set de constrngeri
implicite care se definesc odat cu definirea schemelor de date ale
acestuia.
Curs Baze de Date - Gyorodi
Cornelia

Constrngeri de integritate
Pentru modelul relational, constrngerile de domeniu,
constrngerile de tuplu i constrngerile de integritate referentiala
sunt exemple de constrngeri implicite.
Constrngerile implicite sunt memorate n baza de date i sistemul
de gestiune impune automat respectarea acestora.

Constrngerile explicite sunt constrngeri suplimentare pe care


trebuie s le respecte relaiile unei baze de date i care nu sunt
impuse automat de sistemul SGBD, ci prin proceduri speciale. Ca
exemple de constrngeri explicite sunt dependenele de date.

Curs Baze de Date - Gyorodi


Cornelia

Constrngeri de integritate
Constrngerile de domeniu sunt condiii impuse valorilor atributelor,
astfel nct acestea s corespund semnificaiei pe care o au n realitatea
modelat. Dat fiind c, n reprezentarea unei relaii printr-un tabel,
valorile atributelor sunt reprezentate pe coloane, constrngerile de
domeniu se mai numesc si constrngeri de coloana.
Dintre constrngerile de domeniu, constrngerea NOT NULL i
constrngerea de valoare implicita (DEFAULT) sunt constrngeri cu
caracter mai general, care se pot aplica oricarui atribut; constrngerea de
verificare (CHECK) se poate aplica unor anumite atribute, n funcie de
semnificaia acestora.
Constrngerile de tuplu: cheia primar i chei secundare. O relaie este
definit ca o mulime de tupluri, deci tuplurile unei relaii trebuie s fie
distincte. Aceasta nseamn ca ntr-o relaie nu pot exista dou (sau mai
multe) tupluri care s conin aceeai combinaie de valori ale tuturor
atributelor.
Curs Baze de Date - Gyorodi
Cornelia

Cheia primar a unui tabel


Pentru a putea stabili legturi ntre tabele, se definesc n tabele
chei de identificare.
O supercheie (superkey) a unei relaii este o submulime (SK) de
atribute ale relaiei care prezint proprietatea de unicitate, adic
orice combinatie de valori ale atributelor supercheii este unic
pentru orice stare a relaiei.
O cheie candidata (candidate key) este o supercheie ireductibil
(minimal).
O cheie primar (primary key) este o cheie candidat creia
proiectantul i confera un rol special de accesare i identificare a
tuplurilor relaiei. n plus, se impune ca atributelor cheii primare
s nu admit valori de NULL s nu fie modificate prin operaii de
actualizare a datelor.
Cheia primar (primary key-PK ) este format din numrul
minim de cmpuri ce permit identificarea nregistrrilor din tabel.
Curs Baze de Date - Gyorodi
Cornelia

Cheia extern a unui tabel


O cheie extern (foreign key FK) reprezint un atribut sau un
grup de atribute dintr-o relaie R1 ale crui sau cror valori sunt
definite pe acelai/aceleai domeniu/domenii ca i cheia primar a
unei relaii R2 i care are rolul de a modela asocierea ntre
entitile reprezentate prin relaiile R i R2. n acest context R1
este numit "relaie care refer" iar R2 este numit "relaie
referit".

Cheia extern este format dintr-unul sau mai multe cmpuri


dintr-un tabel, care sunt folosite ca o cheie primar n alt tabel,
valorile cmpurilor din cheie fiind identice n ambele tabele.

Curs Baze de Date - Gyorodi


Cornelia

Restricia de unicitate a cheii


Restricia de unicitate a cheii: Reprezint restricia
de integritate care impune ca ntr-o relaie, R care are cheia k,
oricare ar fi tuplurile t1 i t2 s fie satisfcut inegalitatea : t (k)
t2 (k).

Restricia entitii: Restricia entitii reprezint restricia


de integritate care impune ca ntr-o relaie, atributele cheii
primare s fie nenule. Unicitatea cheii impune ca la ncrcarea
unui tuplu, valoarea cheii s fie cuoscut, pentru a se putea
verifica faptul c aceast valoare nu exist deja ncrcat. Cu
valori " null " cheia i pierde rolul de identificator de tuplu.

Curs Baze de Date - Gyorodi


Cornelia

Restricia de integritate referenial


Reprezint restricia de integritate care impune ca ntr-o relaie R care
refer o relaie R2, valorile cheii externe s figureze printre valorile cheii
primare sau s fie valori " null " nedefinite. R1 i R2 nu trebuie s fie
neaparat distincte.
Condiia de integritate referenial impune ca mulimea valorilor unei
chei externe s fie inclus n mulimea valorilor cheii primare din care s-a
propagat.
Integritatea referenial trebuie s fie satisfcut permanent n baza de
date.
Operaiile de adugare, tergere i modificare pot afecta integritatea
referenial.
Majoritatea sistemelor SGBD implementeaza constrngerea de meninere
a integritatii referentiale n mod implicit, refuznd modificari ale datelor
(introducere, stergere, actualizare) care ar putea viola integritatea
referenial. Dac sistemul nu asigur aceast funcionalitate, ea trebuie
implementat n programele de aplicaii.
Curs Baze de Date - Gyorodi
Cornelia

Modelul conceptual i modelul fizic


Ce este un model conceptual?

Sunt modele funcionale i informaionale necesare unei


afaceri
Sunt concepute pe baza nevoilor actuale i pot reflecta nevoile
viitoare
Se ocup numai cu nevoile mediului de afaceri, nu se ocup cu
problemele de punere n aplicare a lor.
Este numit model entitate relaie Entitate Relationship
Model
Se reprezint printr-o diagram entitate relaie Entitate
Relationship Diagram"

Curs Baze de Date - Gyorodi


Cornelia

Modelul conceptual i modelul fizic


Este un proces de planificare, n curs de dezvoltare,
precum i comunicare care produce un rezultat dorit.
Modelarea datelor presupune obinerea de cerine
printr-o diagram care le descrie.
Aceast diagram devine plan pentru proiectarea
real.
Modelul conceptual va deveni model fizic.

Curs Baze de Date - Gyorodi


Cornelia

Ce este o entitate?
"Ceva" de importan pentru afaceri despre care
datele trebuie s fie cunoscute
Un nume pentru un set de lucruri similare pe care le
putei lista
De obicei, un substantiv
Exemple: objects, events, people
Entitile au instane. O instan este o singur apariie
a unei entiti.

Curs Baze de Date - Gyorodi


Cornelia

Entiti i instane
Entiti
PERSON
PRODUCT
PRODUCT TYPE
JOB
SKILL LEVEL
CONCERT
ANIMAL
CAR

Instane
Popescu Ion
Nike Air Jordan
shoe
electrician
beginner
U2 at the Palladium
Dog
Volkswagen Golf

Curs Baze de Date - Gyorodi


Cornelia

Ce este un Atribut ?
La fel ca o entitate, un atribut reprezint ceva de
importan pentru afaceri.
Un atribut este o informaie care:

Descrie o entitate
Cuantific o entitate
Calific o entitate
Clasific o entitate
Specific o entitate

Un atribut are o valoare unic.

Curs Baze de Date - Gyorodi


Cornelia

Atributul
Atributele au valori.
O valoare a unui atribut
poate fi un numr, un ir
de caractere, o dat, o
imagine, un sunet, etc.
Acestea sunt numite
"tipuri de date" sau
"formate".
Fiecare atribut are un tip
de date

Curs Baze de Date - Gyorodi


Cornelia

Atributul
Unele atribute (cum ar fi vrsta) au valori care n mod constant se
modific. Acestea sunt numite atribute volatile.
Alte atribute (cum ar fi data unei comenzi) se va schimba foarte
rar, sau niciodat. Acestea sunt atribute nevolatile.
Dac exist o posibilitate de alegere ntre atribute, atunci se va
folosi atribute nevolatile. De exemplu, se va utiliza Data nasterii n
loc de vrst.
Unele atribute trebuie s aib o valoare. Acestea sunt atribute
obligatorii. De exemplu: n cele mai multe aplicaii de business, n
informaii cu caracter personal, "nume" este necesar.
Alte atribute pot avea o valoare sau pot fi nule. Acestea sunt
atributele opionale. De exemplu: numrul de telefon mobil, nu
este necesar de multe ori, cu excepia cazului n aplicaii mobile.
Curs Baze de Date - Gyorodi
Cornelia

Identificatorul unic (unique identifier


(UID))

Un identificator unic (UID) este un atribut sau


o combinaie de atribute care distinge o
persoan de o alt persoan.
Care atribut sau atribute v permit s alegei
un student de restul clasei? . Aceasta este UID a
studentului.
De exemplu CNP-ul sau (numele + prenumele+
data_nasteri)
Un UID identific n mod unic un tuplu.
Curs Baze de Date - Gyorodi
Cornelia

Diagrama entitate- relaie


O diagram entitate relaie, pe scurt ERD, este un instrument,
care poate fi folosit pentru a reprezenta cerinele referitoare la
date, indiferent de ce tip de baze de date este folosit, sau chiar n
cazul n care o baz de date este utilizat la toate!
Un model conceptual bun de date rmne aceeai, indiferent de ce
tip de baz de date a sistemului este construit n cele din urm.

Ce este un model entitate-relaie (ERM) ?

O list a tuturor entitilor i atribute, precum i toate relaiile dintre


entitile care sunt de o importan mare.
Ofer informaii de fond, cum ar fi descrie entitatea, tipurile de date i
constrngerile asupra datelor.

OBS: Modelul nu include n mod necesar o diagram, dar de


obicei, diagrama este foarte util!
Curs Baze de Date - Gyorodi
Cornelia

Obiectivele modelului entitate-relaie (ERM)


Exist patru obiective de modelare ER:

Captureaz toate informaiile necesare


Asigur c informaiile apar numai o singur dat
Modelul nu conine informaii care sunt deduse din
alte informaii deja modelate
Localizeaz informaiile ntr-un loc previzibil, logic.

Curs Baze de Date - Gyorodi


Cornelia

Relaia n modelul datelor


Relaiile n modele de date:

Reprezint ceva de semnificaie / importan pentru


afaceri
Arat modul n care entitile sunt legate ntre ele
ntotdeauna exist ntre dou entiti (sau ntre
aceeai entitate de dou ori)
ntotdeauna au dou capete
Sunt denumite la ambele capete
Sunt opionale
Au un grad de cardinalitate
Curs Baze de Date - Gyorodi
Cornelia

Ce este opionalitatea ntr-o relaie?


Ce este opionalitatea, ntr-o relaie?
Relaiile sunt fie obligatorii fie opionale. Bazat pe ceea ce tim
despre instane ale entitilor, putem determina opionalitatea,
rspunznd la patru ntrebri:
Fiecare angajat trebuie s aib un loc de munc? Cu alte
cuvinte, aceasta este o relaie obligatorie sau facultativ
(opional) pentru un angajat?
Poate un angajat sa aib mai mult de un loc de munc?
La fiecare loc de munc trebuie s existe un angajat? (Cu alte
cuvinte, aceasta este o relaie obligatorie sau facultativ pentru
un loc de munc?)
Un job poate fi realizat de mai muli angajai?

Curs Baze de Date - Gyorodi


Cornelia

Ce este cardinalitatea ntr-o relaie?


Cardinalitatea unei relaii determin gradul relaiei. Ea rspunde
la "ct de multe/muli.
De exemplu:

Ct de multe joburi deine un angajat? Unul sau mai multe? Doar unul?
Un loc de munc poate fi deinut de mai muli angajai? Unul sau mai muli?
Doar unul?

Exemple:

Each EMPLOYEE must hold one and only one JOB


Each JOB may be held by one or more EMPLOYEEs
Each PRODUCT must be classified by one and only one PRODUCT TYPE
Each PRODUCT TYPE may classify one or more PRODUCTs

Curs Baze de Date - Gyorodi


Cornelia

Diagrama entitate-relaie (ER)


Conveniile de desenare a unei ER sunt:

Entitile sunt reprezentate de dreptunghiuri.


Nume entiti se scrie n interiorul dreptunghiului.
Nume de entitate este ntotdeauna la singular i se
scrise cu majuscule.

Curs Baze de Date - Gyorodi


Cornelia

Diagrama entitate-relaie (ER) (cont.)


Atributele sunt enumerate sub denumirea entiti.
Atribute obligatorii sunt marcate cu un asterisc: "*
Atribute opionale sunt marcate cu un cerc: "O
Identificatorii unici sunt marcai cu un diez: "#"

Curs Baze de Date - Gyorodi


Cornelia

Diagrama entitate-relaie (ER) (cont.)


Relaiile sunt linii care conecteaz entiti.
Aceste linii sunt fie continue fie punctate.
Aceste linii se termina ntr-un singur picior "single toe sau n
picior de cioar ( crows foot) la sfritul fiecrei entiti.

Curs Baze de Date - Gyorodi


Cornelia

Diagrama entitate-relaie (ER)


ERDish este folosit pentru reprezenta starea relaiilor ntre
entiiile unei ERD.

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Supertip i subtip
Uneori cteva instane ale unei entiti au atribute i / sau relaii
pe care ale instane nu le au.
Exemplu: Imaginai-v o afacere care are nevoie pentru a urmri
plile de la clieni. Clienii pot plti n numerar, prin cec sau prin
card de credit. Toate plile au unele atribute comune: data plii,
suma de plat i aa mai departe. Dar, numai cardurile de credit
au un numr de card atribut. Pentru cardul de credit se verific
plile pe care le poate face pentru ca s tie care CLIENT a
efectuat plata, n timp ce acest lucru nu este necesar pentru plile
n numerar.
Trebuie sa creem o singur entitate PAYMENT sau trei entiti
distincte CASH, CHECK i CREDIT CARD? i ce se ntmpl
dac n viitor vom introduce a patra metod de plat?

Curs Baze de Date - Gyorodi


Cornelia

Supertip i subtip

Curs Baze de Date - Gyorodi


Cornelia

Supertype i subtype
Uneori are sens de a mpri o entitate n subtipuri. Acesta poate fi
cazul atunci cnd un grup de instane are proprieti speciale, cum
ar fi atribute sau relaii care exist doar pentru acel grup. n acest
caz, entitatea se numeste un supertip supertype " i fiecare grup
se numeste un subtip subtype .
Un subtip:

motenete toate atributele de la supertype


motenete toate relaiile de la supertype
de obicei, are propriile sale atribute sau relaii
este coninut cadrul supertype-ului
niciodat nu exist singur
poate avea subtipurile sale proprii
este, de asemenea cunoscut ca subentitate " subentity

Curs Baze de Date - Gyorodi


Cornelia

Supertype
Nevertebrate sunt animale fr coloan vertebral (cum ar fi
viermi pmnt). Vertebrate au coloana vertebral i pot fi
mprite n psri, mamifere, reptile si etc

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
EXAM este un supertype
al lui QUIZ (TEST),
MIDTERM (PARIAL),
i FINAL (EXAMEN
FINAL).
Subtipurile au mai multe
atribute n comun. Aceste
atribute comune sunt
enumerate la nivel de
supertype. Acelai lucru
se aplic i n cazul
relaiilor. Subtipurile
motenesc toate atributele
i relaiile entitii
supertype.
Curs Baze de Date - Gyorodi
Cornelia

Supertype i subtype
Atunci cnd un model ER este complet, niciodat nu
avem subtipuri de sine stttoare. Cu alte cuvinte, n
cazul n care o entitate are un subtip, trebuie s existe
ntotdeauna cel puin un al doilea subtip.
Exist dou reguli ale subtype-ului:

Exhaustiv: Fiecare instan a supertype-ului este, de


asemenea, o instanta a uneia dintre subtipuri.
Mutual exclusiv (Care se exclud reciproc): Fiecare instan a
supertype-ului este doar a unui i numai unuia dintre subtipuri.

Curs Baze de Date - Gyorodi


Cornelia

Subtype-uri imbricate
Subtipurile pot fi
imbricate pe mai
mult de dou
niveluri.

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Procesul de dezvoltare a bazei de date ncepe cu specificarea cerinelor de
business( Business Information Requirements)
Exemplu:

Presupunem c trebuie s conducem Departamentul Resurse Umane pentru o


companie mare. Avem nevoie de a pstra informaii despre fiecare dintre
angajaii companiei noastre. Avem nevoie s urmrim numele fiecrui
angajat, prenume, loc de munc sau de poziie, nchirierea data i salariu.
Fiecare angajat are atribuit un numr unic de identificare.
Compania noastra este mprit n departamente. Fiecare angajat este alocat
unui departament - de exemplu, de contabilitate, de vnzri sau de dezvoltare.
Avem nevoie s tim responsabilul departamentului pentru fiecare angajat i
locaia departamentului. Fiecare departament are un numr unic. Uni dintre
angajai sunt manageri. Si avem nevoie de asemenea s tim managerul
fiecrui angajat i angajaii fiecrui manager

Curs Baze de Date - Gyorodi


Cornelia

Diagrama entitate relaie


Modelul entitate relaie
reprezint informaiile cerute
n exemplu anterior.

Curs Baze de Date - Gyorodi


Cornelia

Reguli de business (afaceri)


Unul din scopurile principale ale modelri datelor este de a
asigura faptul c toate piesele de informaii care sunt necesare
pentru a conduce o afacere sunt recunoscute.
Identificarea i documentarea regulile de afaceri (business) sunt
cheile de verificare a modelului de date pentru ca acesta sa fie
corect i complet.
Este important s recunoatem c nu toate regulile de business (de
afaceri) pot fi reprezentate pe diagrama ER.
Unele reguli de business (afaceri) trebuie s fie puse n aplicare
prin implementarea unor proceduri n limbaje de programare.

Curs Baze de Date - Gyorodi


Cornelia

Reguli de business (afaceri)


Dou tipuri de reguli de business : structurale i procedurale.
Regulile de business structurale indic tipurile de informaii care
urmeaz s fie stocate i modul n care elementele de informare
interrelaioneaz.
Reguli procedurale reprezint fluxul de lucru sau procesul de
afaceri.
Regulile de business structurale pot fi aproape ntotdeauna
reprezentate n diagrama ER.
Unele reguli de business procedurale nu pot fi reprezentate pe
diagrama ER, ci trebuie s fie documentate.
Multe dintre regulile de business procedurale sunt legate de timp:
un eveniment trebuie s se ntmple nainte de eveniment B.

Curs Baze de Date - Gyorodi


Cornelia

Reguli de business (afaceri)


Regulile de business structurale indic
tipurile de informaii care urmeaz s
fie stocate i modul n care elementele
de informare interrelaioneaz.
Exemple de regulile de business
structurale:

Toate comenzile la un restaurant trebuie s


fie manipulate de ctre un membru al
personalului. Nu exist sistem de
autoservire (self-service system).
Toi profesorii de la coala noastr trebuie
s dein un certificat valabil de predare .

Curs Baze de Date - Gyorodi


Cornelia

Reguli de business
n procesul de dezvoltare a unui model conceptual de
date, nu toate regulile de business pot fi modelate.
Unele reguli, cum ar fi cele dou enumerate mai jos
trebuie s fie implementate prin programare:

orice angajat care are un numr de ore suplimentare mai mare


de 10 de ore pe sptmn trebuie s fie pltit cu de 1,5 ori
tariful orar
sau
Soldurile conturilor ale cror clieni sunt 90 zile restante nu li
se vor permite s perceap comenzi suplimentare

Curs Baze de Date - Gyorodi


Cornelia

Relaii transferabile
Opionalitatea:
Putem avea un TYPE care nu clasific nici o
melodie (SONG)?
Fiecare melodie (SONG) trebuie s aibe un tip?

Cardinalitatea:
Ct de multe piese pot fi clasificate de un singur
tip (TYPE) ?
Ct de multe tipuri (TYPE) poate o melodie
(SONG) avea ?

Transferabilitatea:
Se poate ca unei melodii (SONG) s i se schimbe
tipul de la un tip la un alt tip? Rspuns: DA

Relaia dintre SONG i TYPE este o relaie


transferabil.
Curs Baze de Date - Gyorodi
Cornelia

Relaie netransferabil
Exemplu de relaie netransferabil:

Unui student poate s i se emit o chitan pentru plata


taxelor de colarizare, pentru un examen de certificare,
sau pentru crile cumprare de la librrie. Odat ce sa dat o confirmare de acceptare chitana va fi emis,
acesta nu mai poate fi transferat la un alt student. n
cazul n care aceasta a fost eliberat din greeal, ea va
trebui s fie anulat, i o alt chitan va fi eliberat.
Deci relaia dintre student i chitan (bonul fiscal) este
o relaie netransferabil.
Curs Baze de Date - Gyorodi
Cornelia

Relaii transferabile i netransferabile


Relaie transferabil:
Relaia dintre un student
i grupa acestuia

Relaie netransferabil:
Relaia dintre un student
i propria chitan.
Aceste relaii sunt
reprezentate printr-un
romb pe relaie
Curs Baze de Date - Gyorodi
Cornelia

Tipuri de relaii
Exist mai multe tipuri de relaii:

Una-la-una (one-to-one). nseamn c o nregistrare din primul


tabel este legat la o singur nregistrare din al doilea tabel.

Una-la-mai-multe (one-to-many). nseamn c o nregistrare


din primul tabel poate fi legat cu mai multe nregistrri din al doilea
tabel.

Mai-multe-la-mai-multe (many-to-many). nseamn c o


nregistrare din primul tabel poate fi legat de mai multe nregistrri
din al doilea tabel, i invers.

Curs Baze de Date - Gyorodi


Cornelia

Relaii one-to-Many (unulla mai muli)


Tipurile de relaii
1:M sunt cele mai
des ntlnite n
modelul ER .

Curs Baze de Date - Gyorodi


Cornelia

Relaii Many-to-Many (M:M)


Diferitele tipuri de
relaii M:M sunt des
ntlnite, n special
ntr-o prim versiune
a unui model ER. n
fazele ulterioare ale
procesului de
modelare, cele mai
multe relaii de tipul
M: M, se vor
transforma.

Curs Baze de Date - Gyorodi


Cornelia

Relaii de tipul 1:1


De obicei, vei gsi doar cteva
dintre diferitele tipuri de relaii
1:1 n fiecare model ER.

Curs Baze de Date - Gyorodi


Cornelia

Rezolvarea relaiilor M:M (muli-la-maimuli)


Identificarea atributele care aparin relaiei M:M
(muli-la-mai-muli)
Pentru a rezolva o relaie de tipul M:M vom folosi o
entitate intersecie (intersection entity)

Identificarea UID a entiti intersecie i reprezentarea


n relaia entitate diagram

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Intr-o afacere, fiecare partener
poate fi desemnat s lucreze la
unul sau mai multe evenimente.
Fiecare eveniment poate fi un
loc de munc pentru unul sau
mai muli parteneri.
Atunci cnd un EVENT
PLANNER, un DJ, sau un
MANAGER lucreaz la un
eveniment, noi dorim s se
nregistreze statutul locului de
munc.
Crei entiti ar aparine
atributul "statut?
Curs Baze de Date - Gyorodi
Cornelia

Rezolvarea relaiilor M:M (muli-la-maimuli)


O a treia entitate este
necesar pentru a
rezolva relaia M: M.
Aceasta se numete
entitate intersecie.

Curs Baze de Date - Gyorodi


Cornelia

Rezolvarea relaiilor M:M (muli-la-maimuli)


Identificatorul unic
(UID) al entitii
intersecie de multe ori
provine de la relaiile
originare i este
reprezentat prin bar.
n acest caz, relaiile
de la entitile
originare la entitatea
intersecia sunt
denumite relaii
barate .

Curs Baze de Date - Gyorodi


Cornelia

Exemple
Fiecare emisiune
TV poate fi
vizionat de ctre
una sau mai multe
persoane.
Fiecare persoan
poate viziona
spectacole la unul
sau mai multe TV.

Curs Baze de Date - Gyorodi


Cornelia

Analiza CRUD
O modalitate bun de a valida o diagram ERD este aceea de a
face o analiz CRUD pe ea. CRUD este un acronim pentru creare
(create), regsire (retrieve), actualizare (update), si tergere
(delete). Acestea sunt cele patru operaii de baz pe care o baz de
date le permite.
Partea de verificare a unui model de date pentru integralitatea i
acurateea este asigurarea c toate funciile CRUD specificat de
scenariul de afaceri i regulile de business sunt reprezentate n
diagrame ER.
Dac avei entiti n diagrama ER pe care nu se aplic nici o
operaie a analizei CRUD( adica nu se realizeaz adugri, cutri
actualizri, sau tergeri pe ea), atunci s-ar putea ca aceea entitate
s nu fie necesar ca entitate n modelul dumneavoastr
Curs Baze de Date - Gyorodi
Cornelia

Identificatorul unic
(the unique identifier - UID)
Identificator unic (UID) este foarte important ntr-o baze de date
relaional.
Un UID este o valoarea sau o combinaie de valori care permite
utilizatorului s identifice c un element este unic n rndul
tuturor elementelor.
Identificarea corect a atributului sau a combinaiei de atribute,
i / sau de relaii este o abilitate care orice designer de baz de date
trebuie s dobndeasc.
De exemplu: Identificatorul unic este modul de a gsi o
nregistrare ntr-un fiier, un card special ntr-o mulime de
carduri, un pachet ntr-un depozit, etc.

Curs Baze de Date - Gyorodi


Cornelia

Identificator unic simplu vs Identificator


unic compus
Un UID este simplu dac este format dintr-un singur atribut.
Uneori, un atribut unic nu este suficient pentru a identifica n
mod unic o instan a unei entiti.
n cazul n care UID este o combinaie de atribute, aceasta se
numete un UID compus.

Curs Baze de Date - Gyorodi


Cornelia

Identificatorul unic
( UID) artificial
UID-uri artificiale sunt cele care nu apar n lumea real, dar sunt
create n scopul identificrii ntr-un sistem.
Oamenii nu se nasc cu "numere", dar o mulime de sisteme aloca
numere unice pentru a identifica persoane:ID-ul studenilor, IDuri de client, etc
Un pantof are o culoare, o dimensiune, un stil, dar nu are cu
adevrat un "numr descriptiv. Cu toate acestea, un magazin de
pantofi va atribui numere unice pentru fiecare pereche de pantofi
astfel nct s poat fi identificat n mod unic o pereche de
pantofi.

Curs Baze de Date - Gyorodi


Cornelia

UID-uri artificiale
Cum putem identifica n mod unic
un student?
Putem folosi o combinaie de
prenume i nume de familie?
Numai dac suntem siguri c o
combinaie este unic.
De multe ori, este mai simplu i
direct a creea un atribut
artificial i a-l face cod unic de
identificare.
Un UID poate fi att artificial ct
i compus.
Curs Baze de Date - Gyorodi
Cornelia

UID-uri n relaiile barate


Uneori UID este o combinaie
dintre un atribut i o relaie.
La o banc care este UID de
cont? Este el artificial? Este el
compus?
Doi oameni ar putea avea
acelai numr de cont bancar,
dar la bnci diferite.
La transferuri bancare
ntotdeauna este nevoie i de
numrul de identificare a
bnci (IBAN) n plus fa de
numrul de cont bancar.

Curs Baze de Date - Gyorodi


Cornelia

UID-uri n relaiile barate


UID-uri din relaiile de
barate : Entitile
Intersecie
Pentru rezolvarea unui
relaii de tipul M: M de cele
mai multe ori rezult n
relaiile barate de la
entitatea intersecie la cele
originale.
n acest exemplu, UID-ul de
la PLAY LIST ITEM vine
de la EVENT i SONG.
Barele de pe relaii indic
acest lucru.
Curs Baze de Date - Gyorodi
Cornelia

UID-uri n relaiile barate


Este posibil pentru o entitate
intersecie s foloseasc un
atribut ca i UID, n locul
relaiilor barate din entitile
originale.
Fiecare MANUFACTURER poate
produce unul sau mai multe produse
PRODUCT (shoes, shirts, jeans, etc.).
Fiecare PRODUCT poate fi produs
de unul sau mai muli
MANUFACTURERs (Nike shoes,
Adidas shoes, Levis jeans, etc.).
Entitatea CATALOG ITEM rezolv
relaia de tipul M: M. Un articol intrun catolog poate fi identificat unic
prin manufacturer number i prin
product code. Relaiile nu sunt
barate, deoarece un UID artificial
catalog number, a fost creat.

Curs Baze de Date - Gyorodi


Cornelia

UID-uri candidat
Uneori exist mai mult de un identificator unic ntr-o entitate.
De exemplu, atunci cnd, comanzi un produs de pe un site
comercial, de obicei, vi se va atribui un cod unic de client i, de
asemenea, se va cere s introducei adresa de e-mail.
Fiecare dintre aceste identific n mod unic persoana, i fiecare ar
putea fi aleas ca UID. Ambele sunt UID-uri candidat.
Numai unul dintre UID-urile candidat este ales ca UID real.
Aceasta se numete UID primar. Ceilali candidai sunt numite
UID-uri secundare.

Curs Baze de Date - Gyorodi


Cornelia

UID-uri candidat
Atributul Student ID a
fost ales ca i UID primar
in ambele entiti
STUDENT.
Prima entitate are un UID
secundar, n timp ce cea
de-a doua entitate are
dou UID-uri secundare
(unul dintre aceste este
compus)
Curs Baze de Date - Gyorodi
Cornelia

Normalizarea BDR
Teoria normalizrii aparine celui ce a fundamentat
mode-lul relaional al bazelor de date n 1970,
americanul E. F. Codd.
La baza acestui model de optimizare st conceptul de
dependen funcional .
Normalizarea reprezint procesul de transformare
succesiv a unei BDR n vederea aducerii sale ntr-o
form standard optimizat, denumit form normal.
Prin normalizare se are n vedere eliminarea
anomaliilor, dependenelor nedorite ntre date,
eliminarea redundanelor .

23

Normalizarea BDR
E.F. Codd presupune un proces de normalizare
pe etape. O baz de date nenormalizat fiind
adus mai nti n forma normal unu (FN1),
apoi n forma normal 2 (FN2) .a.m.d., prin
aplicarea unor reguli de optimizare a structurii
bazei de date ce urmresc spargerea unui tabel
ne-normalizat n dou sau mai multe tabele
normalizate, fr pierdere de informaii.

24

Relaiile dintre formele normale

25

Normalizarea unei bazei de date


n procesul de normalizare sunt analizate o serie de dependene:
funcionale, tranzitive, multivaloare, join.
Un atribut B este n dependen funcional fa de un atribut B
dintr-o tabel dac fiecrei valori a lui A i corespunde numai o
valoare a lui B.
Un atribut B depinde funcional complet de un grup de atribute
dac atributul B este dependent funcional de fiecare atribut din
grup.
Dac un atribut B depinde de un atribut A i C depinde de B
atunci C se afl n dependen tranzitiv fa de A.
Dependena multivaloare apare dac valorii unui atribut A i
corespund dou sau mai multe valori ale atributului B.
Dependenele de tip join apar n cadrul unei relaii n exist dou
atribute care pot avea, fiecare, semnificaie de cheie primar.
26

Dependena datelor
Dependena datelor:
dependena funcional - se refer la faptul c un
cmp al unui tabel depinde de un alt cmp al unui
tabel, adic se spune c un cmp x depinde
funcional de un cmp y dac i numai dac pentru
o valoare a cmpului x corespunde o singur
valoare a cmpului y
dependena multivaloric - se refer la faptul c
valoarea unui cmp x poate forma cte o
nregistrare cu toate combinaiile posibile ale
valorilor cmpurilor y i z
27

Prima form normal (FN1)


Algoritmul AFN1 permite aducerea unei relaii n FN1 prin
eliminarea atributelor compuse i a celor repetitive.
Algoritmul AFN1
1. Se introduc n relaie n locul atributelor compuse componentele
acestora.
2. Se plaseaz grupurile de atribute repetitive, fiecare n cte o nou
relaie .
3. Se introduce n schema fiecrei noi relaii de la pasul 2 cheia
primar a relaiei din care a fost extras atributul respectiv.
4. Se stabilete cheia primar a fiecrei noi relaii creat la pasul 2.
Aceasta este compus din cheia introdus la pasul 3, precum i
din atributele proprii acestor noi relaii.

28

Prima form normal (FN1)


n primul rnd FN1 presupune c
nu exist nici un atribut
multivaloare.
Pentru a verifica FN1, se valideaz
c fiecare atribut are o singur
valoare pentru fiecare instan a
entitii.
Exist mai multe sli de clas ntr-o
cldire colar SCHOOL
BUILDING , deci exist atribute
care se repet. Aceasta este o
nclcare a FN1.
n cazul n care un atribut are
repetarea valori, se va crea o
entitate suplimentar i aceasta se
refer la entitatea iniial cu o
relaie de tipul M: 1.

FN1
Examinai entitile din
dreapta. Exist atributele
multivaloare?

Curs Baze de Date - Gyorodi


Cornelia

FN1
Cnd toate
atributele unei
entiti sunt valori
singulare, atunci
entitatea se afl n
FN1.

Curs Baze de Date - Gyorodi


Cornelia

A doua form normal (FN2)


FN2 impune ca orice atribut care nu este UID depinde
de ntreaga UID.
Acest lucru nseamn c toate atributele care nu fac
parte din UID entitii ar trebui s fie dependente de
UID n ansamblu. Acest lucru se aplic n mod specific
la entitile care au un UID care este compus din mai
mult de un atribut sau o combinaie a atribut (e) i
relaia (e).

Curs Baze de Date - Gyorodi


Cornelia

A doua form normal (FN2)


Acelai numr de cont ACCOUNT
exist la diferite bnci BANKs, astfel
nct relaia este parte a UID. Acest
lucru este reprezentat prin relaie
barat.

Curs Baze de Date - Gyorodi


Cornelia

Un exemplu de violare a FN2


In aceast ERD, atributul bank
location este plasat greit. El
depinde numai de numrul bnci
(BANK number).
Aceasta este o violare a FN2.

Curs Baze de Date - Gyorodi


Cornelia

A doua form normal (FN2)


Algoritmul AFN2 permite aducerea relaiei n FN2 prin
eliminarea dependenelor funcionale pariale din cadrul unor
relaii aflate n FN1.
Algoritmul AFN2
1. Pentru fiecare dependen funcional parial se creaz o nou relaie
2. Se elimin din cadrul relaiei iniiale atributele care formeaz
determinatul dependenei pariale.
3. Dac n relaia iniial exist mai multe dependene pariale cu acelai
determinant, pentru aceasta se creaz o singur relaie cu schema format
din determinant (o singur dat ) i determinanii dependenelor
considerate.
4. Se determin cheia primar a fiecrei noi relaii create.
5. Dac noile relaii create conin dependene pariale, se merge la pasul 1,
altfel procesul de aducere la FN2 s-a terminat.

35

A doua form normal


A doua forma normal : divizarea tabelelor bazei de
date trebuie s continue astfel nct fiecare tabel obinut s
nu conin dependee funcionale pariale

36

FN2

37

A treia form normal (FN3)


Regula pentru FN3 impune ca nici un atribut care nu este UID nu
poate depinde de un alt atribut care nu este atribut UID.

FN3 interzice dependenele tranzitive. O dependen tranzitiv


exist n momentul n care un atribut ntr-o entitate este dependent
de un alt atribut care nu este UID (non-UID) n acea entitate.

Curs Baze de Date - Gyorodi


Cornelia

A treia form normal (FN3)


Intuitiv, o relaie este n a treia form normal dac :
Relaia R este n FN2;
Fiecare atribut care nu este cheie depinde direct de cheia primar
Algoritmul AFN3 permite aducerea unei relaii FN2 n FN3 prin
eliminarea dependenelor funcionale tranzitive.
Fie R o relaie, X o submulime de atribute ale lui R i A un atribut
al relaiei R. A este dependent tranzitiv de X dac exist Y astfel
nct XY,YA (A nu aparine lui Yi Y nu determin pe X).

39

Algoritmul FN3
Algoritmul FN3
1. Pentru fiecare dependen funcional tranzitiv se
transfer atributele implicate n dependen tranzitiv
ntr-o nou relaie.
2. Se determin cheia primar a fiecrei noi relaii create
la pasul 1.
3. Se introduc n relaia iniial n locul atributelor
transferate, cheile primare determinate la pasul 2 .
4. Se reanalizeaz relaia iniial. Dac n cadrul ei exist
noi dependene tranzitive se trece la pasul 1, altfel
procesul de aducere la FN3 s-a terminat.
40

Exemplu 1 de FN3
Adresa de magazin este
dependent de numrul de CDul, care este UID a entitii CD.
Deci, aceast entitate este n 1NF
i 2NF.
Dar adresa de magazin este, de
asemenea, depinde de nume de
magazin, care nu este atribut
UID.
Acesta este un exemplu de o
dependen tranzitiv i o
nclcare a FN3.
Modelul corect normalizat este
prezentat aici: a crea o nou
entitate Store, cu o relaie pe
CD.

Curs Baze de Date - Gyorodi


Cornelia

Exemplu 2 de FN3

Curs Baze de Date - Gyorodi


Cornelia

Arc-ul n Diagrama Entitate Relaie


Arcele n modelarea datelor ajut proiectani s clarifice o relaie
SAU exclusiv.
Se pot defini cu ajutorul arcelor mai explicit cerinele clienilor.
Exist restricii impuse valorilor unui atribut i respectiv relaii
care sunt permise.
Aceste restricii sunt numite constrngeri. Acestea se pot referi la
un singur atribut al unei entiti, sau la relaiilor dintre entiti.

Exemple de constrngeri:
Fiecare angajat trebuie s lucreze numai ntr-un singur
departament.

Curs Baze de Date - Gyorodi


Cornelia

Relaii mutual exclusive (cont.)


Relaiile mutual exclusive sunt
numite relaii SAU
exclusive

Exemplu de relaie mutual


exclusiv:

Un panou este un spaiu de


publicitate, care poate caracteriza
un film, un produs, sau un anun
public. Acesta poate conine
publicitate cu privire la doar unul
dintre acestea la un moment dat.
Fiecare dintre acestea are
propriile sale caracteristici sau
atribute.
Curs Baze de Date - Gyorodi
Cornelia

Relaii mutual exclusive (cont.)


Arcele sunt un mod de
a reprezenta relaiile
mutual exclusive ntr-o
diagrama ERD.
Exemplu :

Arcul reprezint relaia


SAU exclusive - fiecare
eveniment trebuie s fie
inut ntr-un spaiu
privat sau trebuie s fie
inut ntr-un spaiu
public, dar nu n
amndou.

Curs Baze de Date - Gyorodi


Cornelia

Relaii mutual exclusive (cont.)


Arcele pot fi uneori
reprezentate ca i
supertip sau subtip.

Curs Baze de Date - Gyorodi


Cornelia

Relaii mutual exclusive (cont.)


Supertipurile i
subtipurile pot fi
uneori reprezentate
prin arce.
Exemplu:

Supertipul
PARTNER din acest
model este
reprezentat prin arc
n aceast diagram.

Curs Baze de Date - Gyorodi


Cornelia

Ierarhiile i relaiile recursive


O organigram
poate fi
reprezentat prin
acest model de
date.
Care sunt UIDurile pentru
fiecare entitate?

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Care sunt UIDurile pentru
fiecare entitate?
Relaiile sunt
notate barat
deoarece UID-ul
entiti de pe un
nivel depinde de
UID-ul entitii
nivelului
anterior.

Curs Baze de Date - Gyorodi


Cornelia

Ierarhiile vs relaiile recursive


Ambele modele reprezint toi
angajaii.
n cea din stinga este o
structur ierarhic. Cea din
dreapta folosete o relaie
recursive.
Care dintre aceste modele
crezi ca este mai bine de
reprezentat?
Putem construi un model
utiliznd att relaii recursive
ct i ierarhiile pentru a
exprima aceeai semnificaie
conceptual
Curs Baze de Date - Gyorodi
Cornelia

Modelarea datelor istorice


Cele mai multe ntreprinderi au nevoie de a urmri unele date
istorice. Acest lucru i ajut s gseasc tendinele i modele care
pot fi baza pentru luarea unor decizii in ceea ce privete afacerile
sau pentru a mbunti unele procese.
De exemplu, istoria de nchiriere a unui film este util pentru un
magazin video. Aceasta spune managerilor care filmele sunt
populare i care ar trebui s fie mutat la raft spate.
V putei gndi la o cerere pentru o companie farmaceutic, un
magazin de produse lactate sau de panificaie, fructe de mare sau
la o instalaie de prelucrare? Ce date istorice dorii s le pstrai i
de ce?
Curs Baze de Date - Gyorodi
Cornelia

Modelarea datelor istorice


Cnd este necesar s modelezi date de-a lungul timpului?
Adresai-v clientului dvs. cu urmtoarele ntrebri:

Este o necesar realizarea unui audit?

Pot modifica valorile atributelor de-a lungul timpului?

Pot relaiile s se modifice n timp?

Avei nevoie de o rapoarte cu privire la datele mai vechi?

Avei nevoie s pstrai versiunile anterioare de date? Dac da, pentru ct


timp?

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Pentru a modela
modificrile salariul de-a
lungul timpului, se adaug
o entitate SALARY
HISTORY .
UID-ul entiti SALARY
HISTORY este asociat cu
id-ul entitii EMPLOYEE
i cu salary start date.

Curs Baze de Date - Gyorodi


Cornelia

Modelarea n timp a datelor


Datele istorice sunt adesea folosite n afaceri pentru a gsi tendine
respectiv soluii care pot conduce la eficientizarea afaceri.
Modelare n timp a datelor ntr-o afacere permite ca astfel de date
s fie memorate.
Rapoartele pot furniza informaii care pot fi derivate din aceste
date.
Un raport bine conceput, poate oferi informaii valoroase care se
pot utiliza pentru a mbunti operaiunile respectivei afaceri.

Curs Baze de Date - Gyorodi


Cornelia

Entitatea DAY vs Atributul Date


Considerm entitatea PURCHASE. Putem
include atributul date dac dorim s
cunoatem data cumprri articolului.
n cazul n care am dori s identificm
unele tendinele - cum ar fi atunci cnd
oamenii cumpr ostume de baie vs
adidai? - Am putea s dorim s tim ce
temperatur este n acea perioad.
Ce este n neregul cu entitatea revizuit
prezentat aici?

Curs Baze de Date - Gyorodi


Cornelia

Entitatea DAY vs Atributul Date


Se ncalc FN3.

Deoarece high and low temperature sunt atribute care depind


de dat, noi avem nevoie de o entitate DAY separat.

Curs Baze de Date - Gyorodi


Cornelia

Modelarea unor schimbri


Preurile istorice sunt importante atunci cnd se caut tendine,
pentru a determina aprecierea sau valoarea de amortizare de
articole, sau obinerea unei restituiri pentru un element
achiziionat n trecut, la un pre anterior.
Multe compani doresc urmrirea istoric a datelor care se
schimb, cine a schimbat, atunci cnd a fost schimbat, i aa mai
departe.
Exemplu: Dac unui student i se modific nota, este util s
nregistrm vechea nota , noua nota, cnd a fost schimbat nota, i
de ctre cine

Curs Baze de Date - Gyorodi


Cornelia

Modelarea unor schimbri


Este important s deinem
informaii despre vechiul pre
al unui produs.
Acest model din dreapta
afieaz datele istorice ale
produselor.
Ce se ntmpl dac
cumprm un produs la o
anumit dat i l returnm
cnd preul a fost modificat?
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Este important s se in o
eviden a modificrilor de pre.
n acest model, vom presupune c
fiecare achiziie este doar a unui
singur produs.
Preul pe care a fost pltit se poate
determina prin potrivirea datei de
cumprare ntre data de nceput
i data de sfrit de pre.

Curs Baze de Date - Gyorodi


Cornelia

Introducere n conceptele bazei de date


relaionale
Modelul conceptual de date va fi transformat ntr-unul fizic de
baze de date relaionale.
Acest lucru nseamn c entitile noastre, atribute, relatii, i
identificatori unici vor fi transformate n obiecte ntr-o baz de
date relaional.

O baz de date relaional este vzut de ctre utilizator ca o


colecie de tabele bidimensionale.

Curs Baze de Date - Gyorodi


Cornelia

Introducere n conceptele bazei de date


relaionale
Tabela EMPLOYEES conine datele angajailor

Curs Baze de Date - Gyorodi


Cornelia

Introducere n conceptele bazei de date


relaionale
Limbajul SQL(Structured query language ) ne permite accesarea
datelor dintr-o baz de date relaional ntr-un mod eficient.
Exemplu : pentru a gsi angajatul cu numrul de identificare 210,
vom scrie urmtoarea secven SQL:
SELECT lname, dept_no
FROM employees
WHERE emp_no = 210;

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Pentru a gsi toi angajai din departamentul cu numrul 10, vom
scrie urmtoarea secven SQL:
SELECT *
FROM employees
WHERE department_id = 10;

Rezultatele acestei comenzi se vor prezenta n slide-ul urmtor.

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Cheia primar
O cheie primar (PK) este o coloan sau un set de coloane care
identific unic fiecare rnd din tabel.
Fiecare tabel trebuie s aibe o cheie prim i cheia primar
trebuie s fie unic. Nici o parte din cheia primar nu poate fi null.
No part of the primary key can be null.

Curs Baze de Date - Gyorodi


Cornelia

Cheie candidate
O tabel poate avea mai mult dect o coloan sau combinaie de
coloane care pot servi ca i cheie primar. Fiecare din aceste sunt
numite chei "candidate .

Curs Baze de Date - Gyorodi


Cornelia

Chei alternative
Selectm una dintre aceste chei candidate pentru a deveni cheie
primar pentru tabel. Celelalte chei candidate devin chei
alternative (sau chei unice).

Curs Baze de Date - Gyorodi


Cornelia

Cheie extern (Foreign Key FK)


O cheie extern (foreign
key - FK) este o coloan
sau o combinaie de
coloane dintr-o tabel
care refer cheia primar
din aceeai tabel sau
dintr-o alt tabel.

Curs Baze de Date - Gyorodi


Cornelia

Cheie extern (Foreign Key FK)


Dac o cheie extern este o parte a unei chei primare, atunci cheia
extern nu poate fi NULL.

Curs Baze de Date - Gyorodi


Cornelia

Integritatea coloanei
O coloan trebuie s conin numai valori care corespund
formatului de dat definit n acea coloan

Curs Baze de Date - Gyorodi


Cornelia

Regulile de integritate a datelor


Regulile de integritate a datelor sunt cunoscute ca i constrngeri,
si ele definesc starea corect a unei baze de date relaionale.
Regulile de integritate a datelor asigur c utilizatori pot executa
numai acele operaii care las baza de date ntr-o stare corect i
consistent.

Curs Baze de Date - Gyorodi


Cornelia

Tipurile de constrngeri

Curs Baze de Date - Gyorodi


Cornelia

Transformarea modelului conceptual n


model fizic
O tabel este o structur simpl n care datele sunt organizate i
depozitate.
In urmtorul exemplu tabela EMPLOYEES este utilizat pentru
a stoca datele angajailor.

Curs Baze de Date - Gyorodi


Cornelia

Transformarea modelului conceptual n


model fizic
Modelul conceptual va fi
transformat n model fizic.
In exemplu din dreapta,
implementarea fizic va fi baza
de date relaional.

Curs Baze de Date - Gyorodi


Cornelia

Terminologia mapri

O entitate devine tabel.


O instan devine rnd n tabel.
Un atribut devine coloan.
Un identificator unic primar devine cheie
primar.
Cel de-al doilea identificator devine cheie
unic.
O relaie este transformat ntr-o coloan cheie
extern ( foreign-key) i o constrngere de cheie
extern .
Curs Baze de Date - Gyorodi
Cornelia

Terminologia mapri

Curs Baze de Date - Gyorodi


Cornelia

Notaiile diagramei tabelei


Primul rnd din
diagrama tabelei conine
numele tabelei i
prescurtarea tabelei
Coloana Key Type
trebuie s conin
valoarea pk pentru
cheia primar( for the
primary key), uk
pentru cheia unic
(unique key), i fk
pentru cheia extern
(foreign-key). It will be
blank if the column is not
a part of any key.

Curs Baze de Date - Gyorodi


Cornelia

Notaiile diagramei tabelei (continuare)

Curs Baze de Date - Gyorodi


Cornelia

Convenii pentru tabele i coloane

Curs Baze de Date - Gyorodi


Cornelia

Convenii pentru tabele i coloane

Curs Baze de Date - Gyorodi


Cornelia

Convenii pentru tabele i coloane

Curs Baze de Date - Gyorodi


Cornelia

Convenii pentru nume de tabele

Curs Baze de Date - Gyorodi


Cornelia

Maparea relaiilor
Relaiile sunt mapate n chei externe care permit tabelelor s se
refere una la cealalt. Cheile externe vor permite utilizatorilor s
acceseze informaiile din mai multe tabele. Dac nu vom mapa
relaiile, noi vom avea o mulime de tabele standalone care conin
informaii care nu pot fi legate de restul bazei de date.
Maparea relaiilor este prima parte a procesului de crearea intr-o
prima etapa a bazei de date, care va servi ca fundament pentru
continuarea discuiilor ntre designeri, dezvoltatori, i
administratori bazei de date.

Curs Baze de Date - Gyorodi


Cornelia

Reguli pentru relaii

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Maparea relaiilor

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Maparea relaiilor netransferabile

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Maparea relaiilor barate

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Maparea relaiilor

Curs Baze de Date - Gyorodi


Cornelia

Exemplu-Maparea relaiilor

Curs Baze de Date - Gyorodi


Cornelia

Modelul fizic

Curs Baze de Date - Gyorodi


Cornelia

Maparea relaiilor de tipul M:M

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Maparea relaiilor de tipul 1:1

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Maparea relaiilor de tipul 1:1

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Maparea arcurilor

Curs Baze de Date - Gyorodi


Cornelia

Exemplu de mapare a arcurilor

Curs Baze de Date - Gyorodi


Cornelia

Maparea arcurilor (continuare)

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Limbajul SQL
Standardul SQL include:
un limbaj de definire a datelor (a schemei
unei baze de date relaionale) (LDD),
un limbaj de manipulare a datelor
(LMD),
un limbaj de interogare a bazei de date
(LID),
un limbaj de control al bazei de date
(LCD)
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Limbajul SQL
Exemplele din acest capitol se refer la un sistem formal
conceput, care ine evidena angajaiolor unei firme.
Diagrama conceptual pentru modelul relaional este
prezentat n urmtoarea figur:
EMP

DEPT

empno
ename
job
mgr
hiredate
sal
comm
deptno

deptno
dname
loc

SALGRADE
grade
losal
hisal

Curs Baze de Date - Gyorodi


Cornelia

Limbajul SQL
Descrierea tabelelor corespunztoare acestor scheme relaionale:
EMP:

empno : codul angajatului, care trebuie s fie unic (cheie primar).


ename : numele i prenumele angajatului.
job : profesia angajatului.
mgr : codul de identificare a efului unui angajat.
hiredate : data de angajare.
sal : salariul lunar.
comm : comisionul unui angajat care poate s fie i null.
deptno: codul departamentului la care lucreaz angajatului (este cheie
extern, refer cheia primar deptno din tabela DEPT).

Curs Baze de Date - Gyorodi


Cornelia

DEPT:
deptno : codul departamentului, care trebuie s fie unic,
(cheie primar).
dname : denumirea departamentrului
loc : locul unde se afl departamentul
SALGRADE:
grade : un cod care indic gradul de salarizare,
este cheie primar
losal : limita inferioar
hisal : limita superioar
Curs Baze de Date - Gyorodi
Cornelia

Limbajul SQL

Curs Baze de Date - Gyorodi


Cornelia

Limbajul SQL- Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Limbajul SQL- Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Definirea schemei unei baze de date relaionale

Cuvintele cheie din SQL nu pot fi prescurtate.


SQL este un limbaj pentru comunicarea cu
serverul de Baze de Date (Oracle sau Microsoft
SQL 2008) pentru accesul la date.
n SQL comenzile se termin cu ;
n SQL*PLUS comenzile pot fi prescurtate,
minimul 4 caractere.
Nu este folosit nici un caracter terminator
pentru comenzile SQL*PLUS. Este un mediu
care corespunde limbajului ORACLE
Curs Baze de Date - Gyorodi
Cornelia

Definirea unui tabel


Crearea structurii unui tabel de baz se face prin comanda CREATE
TABLE, care are urmtoarea sintax:
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr],);
unde:
schema : este numele utilizatorului care a creat tabela, este opional;
table : numele tabelei;
column : numele unei coloane;
datatype : tipul coloanei i lungimea coloanei (este un tip predefinit
existent);
DEFAULT expr : este o opiune prin care se specific o valoare implicit
pentru o anumit coloan, n cazul n care nu se specific nici o valoare
pentru coloana respectiv, (previne introducerea unei valori NULL).
Curs Baze de Date - Gyorodi
Cornelia

Definirea unui tabel


Exist cteva reguli la definirea tabelului cum ar fi:
Numele tabelei i numele coloanelor trebuie s nceap
cu liter i poate avea lungimea maxim 30;
Numele poate conine numai A-Z, a-z, 0-9,
_(underscore), $ i #;
Numele tabelului trebuie s fie unic n cadrul bazei de
date n care l creai;
Numele nu poate fi unul din cuvintele rezervate ale
sistemului Oracle sau ale limbajului SQL;
Nu se face deosebirea ntre litere mici i litere mari,
(deci EMP este aceelai nume cu emp).
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Crearea unui tabel cu denumirea dept se va
realiza astfel:
CREATE TABLE dept
(deptno
NUMBER (2),
dname
VARCHAR2(14),
loc
VARCHAR2(13));

Curs Baze de Date - Gyorodi


Cornelia

Definirea de constrngeri pe tabele


Pe tabelele de date sunt valide urmtoarele constrngeri:
NOT NULL, specific faptul c, coloana respectiv nu poate
conine valori NULL;
UNIQUE Key, valoarea coloanei sau valorile combinaiilor de
coloane trebuie s fie unic/unice pentru toate tuplurile din tabel.
PRIMARY KEY, definete cheia primar, care identific n mod
unic fiecare tuplu (rnd) din tabel;
FOREIGN KEY, definete cheia extern, i stabilete o relaie ntre
coloana respectiv i o coloan a tabelei referite;
CHECK, specific o condiie care trebuie s fie ndeplinit.
Toate constrngerile sunt stocate n dicionarul de date.
Putem afia constrngerile definite pentru o tabel specificat
vizualiznd tabela USER_CONSTRAINTS a dicionarului de date.
Curs Baze de Date - Gyorodi
Cornelia

Cheie primar (Primary Key)

Curs Baze de Date - Gyorodi


Cornelia

Cheie primar (Primary Key)

Curs Baze de Date - Gyorodi


Cornelia

Cheie primar (Primary Key)

Curs Baze de Date - Gyorodi


Cornelia

Cheie unic

Curs Baze de Date - Gyorodi


Cornelia

Cheie extern (Foreign Key)

Curs Baze de Date - Gyorodi


Cornelia

Cheie extern (Foreign Key)

Curs Baze de Date - Gyorodi


Cornelia

Constrngere de integritate pe coloan

Curs Baze de Date - Gyorodi


Cornelia

Tipuri de constrngeri

Curs Baze de Date - Gyorodi


Cornelia

Definirea unei constngeri


Definirea unei constngeri la crearea unei tabele se realizeaz astfel:

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr],
[column_constraint],

[table_constraint]);
unde:
schema : este numele utilizatorului care a creat tabela, este
opional n cazul n care utlizatorul este i deintorul tabelei ;
table : numele tabelei;
Curs Baze de Date - Gyorodi
Cornelia

Definirea unei constngeri


DEFAULT expr : specific o valoare implicit, dac valoarea a fost
omis in instruciunea INSERT;
column : numele coloanei;
datatype : tipul coloanei i lungimea coloanei;
column_constraint : este o constrngere de integritate definit la
nivel de coloan;
table_constraint : este o constrngere de integritate definit la nivel
de tabel;

Curs Baze de Date - Gyorodi


Cornelia

Reguli de baz pentru constrngeri

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Exemple
a. Definirea unei constrngeri de cheie primar
(PRIMARY KEY) coloanei empno din tabela emp.
CREATE TABLE emp(
empno
NUMBER (4),
ename
VARCHAR(10),
..
deptno
NUMBER(7,2) NOT NULL,
CONSTRAINT emp_empno_pk PRIMARY KEY
(empno));
Curs Baze de Date - Gyorodi
Cornelia

Definirea constrngeri NOT NULL la nivel de


coloan
Definirea constrngeri NOT NULL la nivel de coloan
pentru coloanele ename i deptno din tabela emp.
CREATE TABLE emp(
empno
NUMBER (4),
ename
VARCHAR(10) NOT NULL,
job
VARCHAR2(9),
mgr
NUMBER(4),
hiredate DATE,
sal
NUMBER(7,2),
comm
NUMBER(7,2),
deptno
NUMBER(7,2) NOT NULL);
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Definirea constrngeri de cheie unic pentru coloana
dname i cheie primar pentru coloana deptno din
tabela dept.
CREATE TABLE dept(
deptno
NUMBER (2),
dname
VARCHAR(12),
loc
VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname),
CONSTRAINT dept_deptno_pk PRIMARY KEY
(deptno));
Curs Baze de Date - Gyorodi
Cornelia

Constrngeri de cheie extern


(FOREIGN KEY)

Curs Baze de Date - Gyorodi


Cornelia

Constrngeri de cheie extern


(FOREIGN KEY)

Curs Baze de Date - Gyorodi


Cornelia

Constrngeri de cheie extern


(FOREIGN KEY)

Curs Baze de Date - Gyorodi


Cornelia

Definirea unei constrngeri de cheie extern


(FOREIGN KEY)
Definirea unei constrngeri de cheie extern (FOREIGN KEY) pentru
coloana deptno din tabela emp, care refer cheia primar deptno din
tabela dept.
CREATE TABLE emp(
empno
NUMBER (4),
ename
VARCHAR(10) NOT NULL,
job
VARCHAR2(9),
mgr
NUMBER(4),
hiredate
DATE,
sal
NUMBER(7,2),
comm
NUMBER(7,2),
deptno
NUMBER(2) NOT NULL,
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) REFERENCES
dept (deptno) ON DELETE CASCADE );
Curs Baze de Date - Gyorodi
Cornelia

Opiunea ON DELETE CASCADE

Curs Baze de Date - Gyorodi


Cornelia

Exemplu

Curs Baze de Date - Gyorodi


Cornelia

Constrngeri de cheie extern (FOREIGN


KEY)

Curs Baze de Date - Gyorodi


Cornelia

Opiunea ON DELETE SET NULL

Curs Baze de Date - Gyorodi


Cornelia

CHECK CONSTRAINT
Definirea unei constrngeri care trebuie ndeplinit de
toate tuplurile din tabel. Coloana deptno din tabela
dept trebuie s aibe valori cuprinse ntre 10 i 99,
pentru toate rndurile din tabel.
CREATE TABLE dept(
deptno
NUMBER (2),
dname
VARCHAR(12),
loc
VARCHAR2(13),
CONSTRAINT dept_deptno_ck CHECK (DEPTNO
BETWEEN 10 AND 99));
Curs Baze de Date - Gyorodi
Cornelia

CHECK CONSTRAINT

Curs Baze de Date - Gyorodi


Cornelia

Condiii pentru constrngerile CHECK

Curs Baze de Date - Gyorodi


Cornelia

Definirea constrngerilor CHECK

Curs Baze de Date - Gyorodi


Cornelia

Modificarea structurii unui tabel


Modificarea structurii unui tabel se realizeaz cu ajutorul
comenzii ALTER TABLE care permite :
adugarea sau modificarea unei coloane,
activarea, dezactivarea sau suprimarea unor
constrngeri.
Comanda ALTER TABLE, n cazul adugrii unei noi
coloane, are sintaxa:
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]);
Curs Baze de Date - Gyorodi
Cornelia

Adugarea unei noi coloane


Adugarea unei noi coloane cu denumirea job la
tabela dept30, se va realiza prin:
ALTER TABLE dept30
ADD
(job VARCHAR2 (9));
Coloana nou creat a deveni ultima coloan n
tabel.

Curs Baze de Date - Gyorodi


Cornelia

Modificarea unei coloane


Comanda ALTER TABLE, n cazul modificrii unei
coloane, are sintaxa:
ALTER TABLE table
MODIFY
(column datatype [DEFAULT expr]
[, column datatype]);
Modificarea coloanei ename din tabela dept30 (se pot
modifica tipul, lungimea i valorile implicite ale
coloanei).
ALTER TABLE
dept30
MODIFY
(ename VARCHAR2 (15));
Curs Baze de Date - Gyorodi
Cornelia

Comanda ALTER TABLE, n cazul adugrii unei


noi constngeri
Comanda ALTER TABLE, n cazul adugrii unei noi constngeri
coloanei, are sintaxa:
ALTER TABLE
table
ADD
([CONSTRAINT constraint] type (column);
Adugarea unei constrngeri de cheie extern pentru coloana mgr din
tabela emp, care refer coloana empno din tabela emp (deci nu
putem introduce codul efului mgr, pentru un angajat dac eful
nu exist n tabel empno) .
ALTER TABLE
emp
ADDCONSTRAINT emp_mgr_fk
FOREIGN KEY(mgr) REFERENCES emp(empno);

Curs Baze de Date - Gyorodi


Cornelia

Comanda ALTER TABLE, n cazul dezactivrii


unei constngeri
Comanda ALTER TABLE, n cazul dezactivrii unei constngeri,
are sintaxa:
ALTER TABLE
table
DISABLE CONSTRAINT constraint [CASCADE];
Clauza CASCADE dezactiveaz dependenele constrngeri de
integritate.
Dezactivarea constrngeri emp_empno_pk este exemplifict prin
secvena:
ALTER TABLE
emp
DISABLE CONSTRAINT emp_mgr_fk CASCADE;

Curs Baze de Date - Gyorodi


Cornelia

Comanda ALTER TABLE, n cazul activrii unei


constngeri
Comanda ALTER TABLE, n cazul activrii unei
constngeri, are sintaxa:
ALTER TABLE table
ENABLE CONSTRAINT constraint ;
Activarea constrngeri emp_empno_pk este exemplifict
prin secvena:
ALTER TABLE emp
ENABLE CONSTRAINT emp_mgr_fk;

Curs Baze de Date - Gyorodi


Cornelia

tergerea constrngerilor
tergerea constrngeri de cheie primar din tabela dept
precum i tergerea constrngeri de cheie extern
asociat din tabela emp.
ALTER TABLE dept
DROP PRIMARY KEY CASCADE;
tergerea unei tabele se realizeaz cu ajutorul comenzii
DROP TABLE care are sintaxa:
DROP TABLE table;
unde: table este numele unei tabele
Curs Baze de Date - Gyorodi
Cornelia

Definirea unui tabel view (vizualizare)


Crearea unei vizualizri se realizeaz prin comanda CREATE VIEW,
care are sintaxa:
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW view
[(alias [, alias])]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
unde:
OR REPLACE recreeaz un view dac el exist.
FORCE
reeaz un view indiferent dac exist sau nu tabelele
de baz.
NOFORCE
creeaz un view numai dac exist tabele de baz.
Curs Baze de Date - Gyorodi
Cornelia

Definirea unui tabel view (vizualizare)


este numele vizualizri.
este numele expresiilor selectate de
subquery a vizualizri.
subquery
este o instruciune SELECT.
WITH CHECK OPTION specific faptul c, numai
rndurile accesibile (care ndeplinesc o condiie) ale
unui view pot fi modificate.
Constraint
este numele asignat constrngeri
CHECK OPTION.
WITH READ ONLY
asigur c, nu pot fi realizate
operaii de manipulare a datelor pe acest view.
view
alias

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Crearea unui view care conine informaii despre
angajaii din departamentul 10.
CREATE VIEW
AS SELECT
FROM
WHERE

empvu10
empno, ename, job
emp
deptno = 10;

Curs Baze de Date - Gyorodi


Cornelia

Modificarea unui view


Modificarea unui view deja existent, prin adugarea unui
alias fiecrei coloane, se va realiza prin secvena
urmtoare:
CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT empno, ename, job
FROM
emp
WHERE
deptno = 10;
Ordinea aliasurilor trebuie s in cont de ordinea
coloanelor din subquery.
Curs Baze de Date - Gyorodi
Cornelia

Crearea unui view complex


Crearea unui view complex care conine funcii pe grup i
afieaz date din mai multe tabele.
CREATE VIEW
dept_sum_vu
(name, minsal, maxsal, avgsal)
AS SELECT d.dname, MIN(e.sal), MAX(e.sal),
AVG(e.sal)
FROM
emp e, dept d
WHERE
e.deptno = d.deptno
GROUP BY d.dname;
Curs Baze de Date - Gyorodi
Cornelia

Suprimarea unei tabele view


Suprimarea unei tabele view se va realiza cu
comanda DROP VIEW, care are sintaxa:
DROP VIEW view;
Observaii:
Putem realiza operaiile de manipularea a
datelor (INSERT, UPDATE) numai pentru
view-uri simple.
Nu se pot muta rnduri dac view-ul conine o
funcie pe grup, o clauz GROUP BY, sau
cuvntul DISTINCT.
Curs Baze de Date - Gyorodi
Cornelia

Interogarea unei tabele de date


relaionale.
Comanda fundamental a standardului SQL care
permite interogarea unei tabele de date este SELECT.
Sintaxa general a comenzii SELECT este
urmtoarea:
SELECT [ DISTINCT ] { * , coloane [alias],}
FROM list de tabele
WHERE condiie de cutare asupra liniilor
GROUP BY list de atribute care permit partiionarea
HAVING condiie asupra partiiilor
ORDER BY list de atribute
Curs Baze de Date - Gyorodi
Cornelia

Comanda SELECT n limbajul SQL


Clauzele SELECT i FROM sunt obligatorii i specific
datele care se vor selecta i tabelele din care se
selecteaz. Restul clauzelor sunt opionle i permit
rafinarea seleciei.
Strategia pentru scrierea comenzii SELECT este dat de
urmtorul algoritm:
1. Se determin coloanele (atributele) ce vor fi vizualizate
i se include n clauza SELECT.
2. Se determin tabelele implicate i se includ n clauza
FROM.

Curs Baze de Date - Gyorodi


Cornelia

Comanda SELECT
3. Dac clauza SELECT include funcii pe grup,
atunci se introduce clauza GROUP BY i se
reiau toate atributele menionate n clauza
SELECT la are au fost aplicate funcii pe
grup.
4. Se determin condiiile care limiteaz
selectarea. Condiiile care se refer la grup
apar n clauza HAVING. Iar cele care se refer
la valori individuale apar n clauza WHERE.

Curs Baze de Date - Gyorodi


Cornelia

Comanda SELECT
5. Dac este necesar valoarea unui atribut din
alt tabel sau este necesar o funcie pe grupuri
n clauza WHERE, atunci se utilizeaz un
subquery (o alt instruciune SELECT).
6. Dac este necesar fuzionarea rezultatelor din
dou clauze SELECT, se utilizeaz clauza
UNION.
6. Cu ajutorul clauzei ORDER BY se precizeaz
ordinea n care apar tuplurile.
Curs Baze de Date - Gyorodi
Cornelia

Comanda SELECT
Utiliznd instruciunea SELECT putem face
urmtoarele operaii:
Selecie selecteaz rnduri dintr-o tabel de
date dup un anumit criteriu. Sunt vzute doar
rndurile care ndeplinesc condiia din criteriul
specificat.
Proiecie selecteaz anumite coloane dintr-o
tabel de date.
Join
permite afiarea datelor din mai
multe tabele, tabelele avnd o legtur ntre
ele.
Curs Baze de Date - Gyorodi
Cornelia

Interogarea unei tabele


Varianta cea mai simpl a instruiuni SELECT
este :
SELECT [ DISTINCT ] { * , coloane [alias],}
FROM list de tabele;
unde:
SELECT identific ce coloane.
FROM
identific din ce tabele.
DISTINCT
elimin duplicatele.
Curs Baze de Date - Gyorodi
Cornelia

Exemple
Selectarea tuturor coloanelor din tabela DEPT.
SELECT *
FROM dept;
Selectarea unor coloane specificate explicit i
toate rndurile dintr-o tabel. Afim numrul
departamentului i localitatea din tabela
DEPT.
SELECT deptno , loc
FROM dept;
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Afim numele persoanei, salariul pe o lun i salariul


anual plus un bonus de 100, din tabela EMP.
SELECT ename, sal, 12*sal+100
FROM emp;
OBS: Se va calcula astfel : (12*sal)+100, se va ine cont de
prioritile operaiilor i atunci parantezele nu sunt
necesare.
Precedena operatorilor aritmetici este: *, /, +, -.
Parantezele pot fora evaluarea prioritii i clarific
instruciunea.
Curs Baze de Date - Gyorodi
Cornelia

Exemple
Afim numele persoanei, salariul pe o lun i salariul
anual care a fost calculat din salariul pe o lun plus un
bonus de 100 nmulit cu 12, din tabela EMP.
SELECT ename, sal, 12*(sal+100)
FROM emp;
OBS: Folosirea parantezelor va fora evaluarea expresiei.
Utilizarea unui alias pentru o coloan se face astfel:
SELECT ename AS name, sal salary;
FROM emp;
OBS: cuvntul cheie AS poate fi opional. Coloanele
name i salary implicit vor fi afiate cu litere mari.
Curs Baze de Date - Gyorodi
Cornelia

SELECT ename Name sal*12 Annual salary


FROM emp;
OBS: n acest caz numele coloanelor va fi afiat cum au
fost specificate: Name i Annual salary.
Concatenarea coloanelor sau irurilor de caractere cu
alte coloane.
Utilizarea operatorului de concatenare ||.
SELECT ename || job AS Employees
FROM emp;
Curs Baze de Date - Gyorodi
Cornelia

Utilizarea caracterului de concatenare


SELECT ename || || is a || || job
AS Employee Details
FROM emp;
Eliminarea rndurilor duble poate fi fcut utiliznd
cuvntul cheie DISTINCT n clauza SELECT.
SELECT DISTINCT depno
FROM emp;
OBS: Pot fi specificate mai multe coloane dup
DISTINCT, n acest caz vor fi luate n considerare toate
coloanele, adic vor fi evaluate toate informaiile din
toate coloanele mpreun.
Curs Baze de Date - Gyorodi
Cornelia

Utilizarea clauzei WHERE n instruciunea


SELECT
Restricionarea rndurilor returnate dintr-o tabel se
poate face utiliznd clauza WHERE n instruciunea
SELECT.
SELECT [DISTINCT] {*,coloana [alias],}
FROM
tabela
[WHERE condiie {condiii}];

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afieaz numele angajatului (ename), job-ul (job) i
numrul departamentului (deptno), pentru toi
angajaii din tabela EMP al cror nume de job este
ANALIST.
SELECT ename, job, deptno
FROM emp;
WHERE job = ANALIST;
OBS: irurile de caractere i tipul dat calendaristic
trebuiesc incluse ntre apostroafe.
Formatul de
dat n Oracle implicit este: DD_MON_YY.
Curs Baze de Date - Gyorodi
Cornelia

Operatorii de comparaie
Operatorii de comparaie sunt:

=
egal
>
mai mare
<
mai mic
>= mai mare egal
<= mai mic egal
<> diferit
Operatorii de comparaie pot fi utilizai n compararea unei expresii
cu o alt expresie. Ei sunt utilizai n clauza WHERE n urmtorul
format :
WHERE expresie operator valorare
Curs Baze de Date - Gyorodi
Cornelia

Exemple
Exemple
WHERE hiredate = '01-JAN-95'
WHERE sal > 1500
WHERE ename ='SMITH'

Curs Baze de Date - Gyorodi


Cornelia

Ali operatori de comparaie


Ali operatori de comparaie sunt:

BETWEENAND

compar dac se gsete ntre


dou valori, deci ntr-un interval [min, max]

IN (list)
cuprins n lista de valori.

LIKE
dac se potrivete cu macheta.

IS NULL
compar cu o valoare NULL

Curs Baze de Date - Gyorodi


Cornelia

Exemple
Afieaz toi angajai care au salariul ntre 1000 i 1500.
SELECT ename, sal
FROM
emp
WHERE sal BETWEEN 1000 AND 1500;
Trebuie specificat mai nti limita inferioar apoi limita superioar.

Afieaz angajai pentru care codul managerului (mgr) este una


din valorile specificate n list.
SELECT ename, sal, mgr
FROM emp;
WHERE mrg IN (7902,7566,7788);
Curs Baze de Date - Gyorodi
Cornelia

Utilizarea operatorului LIKE


Condiia de cutare poate conine unul din caracterele:
% -nlocuiete 0 sau mai multe caractere
-nlocuiete orice caracter, dar unul singur.
Afieaz toate persoanele a cror nume ncepe cu S.
SELECT ename, sal
FROM emp
WHERE ename LIKE S%';
Afieaz toi angajai a cror nume conine litera A al doilea
caracter.
SELECT ename
FROM emp
WHERE ename LIKE '_A%';
Curs Baze de Date - Gyorodi
Cornelia

Utilizarea operatorului IS NULL


O valoare NULL nu este 0 sau spaiu. O valoare NULL
este o valoare necunoscut. Dac ntr-o expresie vom
avea o valoare NULL evaluarea expresiei va fi NULL.

Afieaz toi angajaii care nu au comision (comm este


NULL).
SELECT ename, job
FROM emp
WHERE comm IS NULL;
Curs Baze de Date - Gyorodi
Cornelia

Operatorii logici
Operatorii logici sunt:
AND -returneaz TRUE cnd ambele componente sunt
TRUE.
OR -returneaz TRUE cnd cel puin una din
componente este TRUE.
NOT -returneaz TRUE cnd componenta este
FALSE.
Afieaz toi angajai care au job ='CLERK' i salariul >= 1100.
SELECT empno, ename, job, sal
FROM emp
WHERE sal >=1100 AND job = 'CLERK';
Curs Baze de Date - Gyorodi
Cornelia

Exemple
Afieaz toi angajai care au job = 'CLERK' sau
salairul >= 1100.
SELECT empno, ename, job, sal
FROM emp
WHERE sal >= 1100 OR job = 'CLERK';
Afieaz toi angajaii din tabela EMP a cror job nu
este CLERK, MANAGER sau ANALYST.
SELECT ename, job
FROM emp
WHERE job NOT IN ('CLERK', 'MANAGER',
'ANALYST');
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Clauza ORDER BY
Clauza ORDER BY permite afiarea rndurilor ntr-o
ordine specific.
Trebuie plasat ultima clauz ntr-o comand
SELECT.
Clauza ORDER BY revine ultimei comenzi SELECT.

ASC - ascendent, care este ordinea implicit.

DESC - descendent
Afieaz angajai n ordine descresctoare dup data
de angajare. (hiredate).
SELECT ename, job, deptno, hiredate
FROM emp
ORDER BY hiredate DESC;
Curs Baze de Date - Gyorodi Cornelia

Clauza ORDER BY
Putem sorta datele dup mai multe coloane. Numrul
maxim de coloane fiind cel pe care l are tabela.
Putem specifica n clauza ORDER BY i coloane care
nu apar n clauza SELECT.

Afieaz datele din tabela EMP ordonate dup


numrul departamentului (deptno) ascendent i dup
salariu (sal) descendent.
SELECT ename, sal
FROM emp
ORDER BY deptno, sal DESC;
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Definirea unui index

Curs Baze de Date - Gyorodi


Cornelia

Tipuri de index

Curs Baze de Date - Gyorodi


Cornelia

Crearea unui index

Curs Baze de Date - Gyorodi


Cornelia

Definirea unui index


Crearea unui index pe una sau mai multe coloane ale unei
tabele se realizeaz cu comanda CREATE INDEX, care
are sintaxa:
CREATE INDEX index
ON table (column[, column]);
Exemplu: Crearea unui index pe coloana ename n tabela
emp se va realiza prin urmtoarea secven:
CREATE INDEX emp_ename_idx
ON
emp(ename);
Curs Baze de Date - Gyorodi
Cornelia

Crearea unui index

Curs Baze de Date - Gyorodi


Cornelia

Cnd nu creem un index?

Curs Baze de Date - Gyorodi


Cornelia

Cnd nu creem un index?

Curs Baze de Date - Gyorodi


Cornelia

Index compus

Curs Baze de Date - Gyorodi


Cornelia

Index compus(cont)

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

tergerea unui index


tergerea unui index din dicionarul datelor se va
realiza folosind comanda DROP INDEX, care
are sintaxa:
DROP INDEX index;

Exemplu: tergerea indexului emp_ename_idx


creat anterior se va realiza prin urmtoarea
secven:
DROP INDEX emp_ename_idx;
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Observaii referitoare la definirea unui index

Nu putem modifica un index.


Pentru a modifica un index el trebuie ters i recreat
din nou.
tergerea unui index se poate realiza numai de cel care
a creat indexul (proprietarul) sau cel care are drepul
(privilegiul) de DROP ANY INDEX
Indeci sunt salvai n tabela view USER_INDEXES
din dicionarul datelor.
Putem deasemenea verifica coloanele invocate ntr-un
index prin interogarea tabelei view
USER_IND_COLUMNS.
Curs Baze de Date - Gyorodi
Cornelia

Manipularea unei tabele de date


Adugarea unui rnd ntr-o tabel se va realiza cu
ajutorul comenzi INSERT care are sintaxa:
INSERT INTO table[(column [,column])]
VALUES (value [,value]);
unde:
table este numele tabelei n care se va insera un rnd.
column
este numele coloanei din tabel.
value
este valoarea corespunztoare
coloanei.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Inserarea unui rnd coninnd valori pentru
fiecare coloan a tabelei. Vom insera un rnd
nou n tabela dept prin urmtorea secven:
INSERT INTO
VALUES

dept(deptno, dname, loc)


(50, 'ANALIST', 'ORADEA');

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Inserarea valorilor prin utilizarea variabilelor de
substituie va permite introducerea valorilor
interactiv. De exemplu, vom introduce
informaii interactiv n tabela dept prin
secvena urmtoare:
INSERT INTO dept(deptno, dname, loc)
VALUES (&dept_id, '&dept_name',
'&dept_loc');
Curs Baze de Date - Gyorodi
Cornelia

Comanda INSERT
Copierea unor nregistrri dintr-o alt tabel utiliznd
comanda INSERT va fi exemplificat prin urmtorul
exemplu:
INSERT INTO manager(id, name, salary, hiredate)
SELECT empno, ename, sal, hiredate
FROM emp
WHERE job = ' MANAGER';

Numrul de coloane n clauza INSERT trebuie s fie


acelai cu numrul de coloane din comanda SELECT.
Curs Baze de Date - Gyorodi
Cornelia

Comanda UPDATE
Modificarea unui rnd existent dintr-o tabel se realizeaz utiliznd
comanda UPDATE, care are sintaxa:
UPDATE
table
SET
column = value [, column = value]
[WHERE
condition]
unde:
table
este numele tabelei.
column
este numele coloanei din tabel.
value
valoarea corespunztoare coloanei.
condition
condiia care identific rndurile care vor fi
modificate.

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Utilizarea clauzei WHERE pentru a specifica
rndurile care vor fi modificate ntr-o tabel:
UPDATE
SET
WHERE

emp
deptno = 20
empno = 7782;

Se modific coloana deptno pentru nregistrrile


care au cmpul empno = 7782.
Curs Baze de Date - Gyorodi
Cornelia

Utilizarea comenzi SELECT ntr-o comand UPDATE


Subqueri multiple coloane pot fi implementate ntr-o
clauz SET a comenzi UPDATE. Vom exemplifica acest
lucru prin urmtorul exemplu:
UPDATE
emp
SET (job, deptno) =
(SELECT job, deptno
FROM emp
WHERE empno = 7499)
WHERE
empno = 7698;
Curs Baze de Date - Gyorodi
Cornelia

Utilizarea comenzi SELECT ntr-o comand UPDATE


Putem utiliza subqueri ntr-o comand UPDATE pentru a
modifica rnduri ntr-o tabel bazate pe valori dintr-o
alt tabel.
Vom exemplifica printr-un exemplu:
UPDATE
employee
SET deptno = (SELECT deptno
FROM
emp
WHERE empno = 7788)
WHERE job = (SELECT job
FROM
emp
WHERE empno = 7788);
Curs Baze de Date - Gyorodi
Cornelia

Modificarea valori unei coloane legat printr-o


constrngere de integritate

Nu poate fi modificat valoarea unei coloane


dintr-o nregistrare dac aceea coloan este
legat printr-o constrngere de integritate. De
exemplu, modificarea coloanei deptno din
tabela emp va determina apariia unei erori,
deoarece coloana deptno este cheie extern.
UPDATE emp
SET
deptno = 55
WHERE deptno = 10;
Curs Baze de Date - Gyorodi
Cornelia

Comanda DELETE
Pentru a suprima un rnd existent dintr-o tabel
se va utiliza comanda DELETE, care are
urmtoarea sintax:
DELETE [FROM]
table
[WHERE
condition]
unde:
table
este numele tabelei.
condition este o condiie care identific
rndurile care vor fi suprimate.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Rndurile care se vor terge se vor specifica prin clauza
WHERE.
DELETE FROM
dept
WHERE
dname = 'ANALIST';
Se vor terge toate rndurile din tabela dept care au
numele departamentului ANALIST.

Dac clauza WHERE este omis se vor terge toate


rndurile din tabel.
DELETE FROM
dept;
Curs Baze de Date - Gyorodi
Cornelia

Utilizarea subqueri-uri pentru tergerea


rndurilor dintr-o tabel
Putem utiliza subqueri-uri la tergerea rndurilor dintr-o
tabel, bazndu-ne pe valori dintr-o alt tabel. Vom
exemplifica prin urmtorul exemplu:
DELETE FROM employee
WHERE deptno =
(SELECT
deptno
FROM
dept
WHERE
dname ='VNZRI');
n exemplu de mai sus se vor terge toate rndurile din
tabela employee care au numrul de departament egal
cu angajai din departamentul VNZRI.
Curs Baze de Date - Gyorodi
Cornelia

Modificarea valori unei coloane legat


printr-o constrngere de integritate
Nu putem terge un rnd care conine o cheie primar
care a fost utilizat ca i cheie extern ntr-o alt
tabel. De exemplu, tergerea rndurilor din tabela
dept care au coloana deptno =10, va determina apariia
unei erori, deoarece deptno este o cheie primar n
tabela dept i a fost utilizat ca i cheie extern n
tabela emp.
DELETE FROM dept
WHERE deptno = 10;

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Comanda MERGE
Comanda MERGE ndeplinete dou sarcini n
acelai timp. MERGE va face INSERT i
UPDATE simultan. Dac o valoare este lips o
nou valoare se va insera. Dac o valoare
exist, dar este necesar s se modifice, comanda
MERGE o va actualiza.
Pentru a putea executa aceste modificri pe
tabelele bazei de date, este necesar s ai
privilegiul de INSERT i UPDATE pe tabelele
int trebuie i privilegiul SELECT pe tabela
surs
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Funcii n SQL
Exist dou tipuri de funcii n SQL.
funcii care manipuleaz un singur rnd (single-row)
funcii care manipuleaz un grup de rnduri (multiplerow).
Funciile single-row sunt:
Funcii pentru tipul caracter
Funcii pentru tipul numeric
Funcii pentru dat calendaristic
Funcii de conversie dintr-un tip de dat n altul
Funcii speciale : NVL
DECODE
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Funcii pentru tipul caracter


Sunt de dou tipuri:
Funcii de conversie
Funcii de manipulare a caracterelor
Funcii de conversie:
- LOWER ( column/expresie)
- UPPER (column/expresie)
- INITCAP (column/expresie)

-convertete la litere mici o


valoare alfanumeric
- convertete la liter mare
- convertete prima liter
mare restul mici

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Funcii de manipulare a caracterelor


- CONCAT(column/expresie, column/expresie)- concateneaz dou
coloane. Este echivalent cu ||.
- SUBSTR (column/expresie, m [,n]) returneaz caractere din
ir ncepnd de la poziia m, n caractere. Dac n este omis va
returna ncepnd de la m pn la sfritul irului.
- LENGTH (column/expresie) returneaz numrul de caractere.
- INSTR (column/expresie, m) returneaz poziia caracterului
specificat n irul dat de expresie.
- LPAD ( column/expresie, n,'string') aliniaz la dreapta pe
lungimea n, introducnd irul string pe lungimea rmas din
partea stng.

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afieaz informaii pentru angajatul cu numele
'Blake'.
SELECT empno, ename, sal, comm, deptno
FROM
emp
WHERE INITCAP(ename) ='Blake';

Curs Baze de Date - Gyorodi


Cornelia

Funcii de manipulare a caracterelor


Funcia
CONCAT('Good', 'String')
SUBSTR('String', 1, 3)
LENGTH('String')
INSTR('String', 'r')
LPAD(sal, 10, '*')

Rezultatul
GoodString
Str
6
3
******5000

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afieaz informaii despre angajaii care
lucreaz la departamentul FINANCIAR.
SELECT ename, sal, comm, LENGTH(ename)
FROM
emp
WHERE SUBSTR(job, 1, 9) ='FINANCIAR';

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Funcii pentru date numerice


ROUND rotunjete o valoare , specificat zecimal.
TRUNC - truncheaz o valoare specificat zecimal.
MOD - returneaz restul mpririi a dou numere.

Funcia
ROUND(45.926, 2)
TRUNC(45.926, 2)
MOD(1600, 300)

Rezultatul
45.93
45.92
100

Curs Baze de Date - Gyorodi


Cornelia

Funcii pentru date calendaristice


Se pot utiliza urmtoarele operaii:
Operaie
Dat + numr

Rezultat
Dat

Descriere
Adun un numr de zile la o dat

Dat - numr

Dat

Scade un numr de zile dintr-o dat

Dat - Dat

Numr de zile Scade o dat dintr-o alt dat.

Dat+numr/24

Dat

Adun un numr de ore la o dat

Curs Baze de Date - Gyorodi


Cornelia

Funcii pentru date calendaristice


MONTHS_BETWEEN(date1,date2)- returneaz numrul de luni
dintre dou date.
ADD_MONTHS(date, n) - adun un numr n de luni la o dat, n
trebuie s fie ntreg i pozitiv.
NEXT_DAY(date,'sir') - returneaz urmtoarea zi dintr-o dat
specificat, sir poate fi un numr reprezentnd o zi sau un ir de
caractere.
LAST_DAY(date) - returneaz ultima zi dintr-o lun.
ROUND(date[,fmt]) - returneaz data rotunjit la unitile
specificate n formatul fmt. Dac formatul fmt
este omis,
data este rotunjit la data cea mai apropiat.
TRUNC(date[,fmt]) - truncheaz o dat dup formatul specificat
fmt, dac formatul este omis se truncheaz la zi.
Curs Baze de Date - Gyorodi
Cornelia

Exemple
MONTHS_BETWEEN('01-SEP-95', '11-JAN-94')
=> 19.6774194
ADD_MONTHS('11-JAN-94', 6)
NEXT_DAY('01-SEP-95','FRIDAY')
LAST_DAY('01-SEP-95')
ROUND('25-JUL-95','MONTH')
ROUND('25-JUL-95','YEAR')
TRUNC('25-JUL-95','MONTH)
TRUNC('25-JUL-95','YEAR')

Curs Baze de Date - Gyorodi


Cornelia

=> '11-JUL-94'
=> '08-SEP-95'
=> '30-SEP-95'
=> 01-AUG-95
=> 01-JAN-96
=> 01-JUL-95
=> 01-JAN-95

Exemplu
Afieaz numrul angajailor i data angajrii
pentru toi angajaii din 1987.
SELECT ename, hiredate, ROUND(hiredate,'MONTH'),
TRUNC(hiredate,'MONTH')
FROM emp
WHERE hiredate like '%87' ;

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Conversiile explicite de date


TO_CHAR(number/date [,'fmt') convertete o
valoare numeric sau o dat la un ir de caractere,
dup formatul specificat 'fmt'.
TO_NUMBER(char) convertete un ir de caractere
coninnd cifre la un numr.
TO_DATE(char[,'fmt']) convertete un ir de
caractere reprezentnd o dat calendaristic, la tipul
dat dup formatul specificat 'fmt', dac 'fmt' este
omis, formatul de dat implicit este DD-MON-YY.
Formatul model trebuie inclus ntre apostroafe ' i este
case sensitive.
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afieaz numele i data angajrii pentru toi
angajaii din tabela EMP.
SELECT ename, TO_CHAR(hiredate, 'fmDD Month
YYYY') DATA_ANG
FROM emp ;
Convertirea unui ir de caractere la un numr se face
folosind funcia: TO_NUMBER(char).
Convertirea unui ir la o dat se face folosind funcia:
TO_DATE(char[,'fmt']).
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Afim salariul lui SCOTT folosind simbolul $ i
indicatorul de mii.
SELECT TO_CHAR(sal, '$99,999') SALARY
FROM emp
WHERE ename = 'SCOTT ';
Afieaz numele i data angajrii tuturor angajailor
din tabela EMP care s-au angajat n 22 februarie 1981.
SELECT ename, hiredate
FROM emp
WHERE hiredate = TO_DATE('February 22, 1981',
'Month dd, YYYY');
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Funcia NVL
Convertete o valoare NULL la o valoare actual.
Tipurile de date care pot fi folosite sunt: date, number i
char:
NVL(comm, 0)
NVL(hiredate, '01-JAN-97')
NVL(job, 'No job yet').
Sintaxa:
NVL(expr1, expr2)
unde:
expr1 este expresia care poate conine NULL
expr2 este valoarea la care va fi convertit o expresie
NULL.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Afieaz numele, salariul, comisionul i
salariul anual pentru toi angajaii din tabela
EMP, dac comisionul este NULL va fi
convertit la 0.

SELECT ename, sal, comm,


(sal*12)+NVL(comm,0)
FROM emp;

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Funcia DECODE
Este similar cu CASE sau IF-THEN-ELSE.
Are sintaxa:
DECODE(col/expresie, s1, r1[,s2, r2,..][,default])
Funcia DECODE evalueaz expresia, dup care o
compar cu fiecare valoare s1, s2,.. Dac valoarea
expresiei este aceai cu una dintre valorile s1, s2,
atunci se va returna rezultatul corespunztor valorii
gsite. Dac valoarea implicit [default] este omis, o
valoare NULL va fi returnat atunci cnd nu se gsete
nici o valoare identic cu expresia.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
SELECT job, sal,
DECODE(job, 'ANALIST', sal*1.1,
'CLERK', sal*1.15,
'MANAGER',
sal*1.2,
sal)
REVISED_SALARY
FROM emp;

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Aceeai instruciune poate fi scris folosind IFTHEN-ELSE astfel:
IF job = 'ANALIST' THEN sal = sal*1.1
IF job = 'CLERK ' THEN sal = sal*1.15
IF job = 'MANAGER' THEN sal = sal*1.2
ELSE sal = sal

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afieaz numele managerului, cel care nu mai are ef
(mgr este NULL).
SELECT ename,NVL(TO_CHAR(mgr), 'No Manager')
FROM emp
WHERE mgr IS NULL;
OBS: Funciile avnd ca i rezultat un singur rnd, pot fi
ncuibate pn la orice adncime. Funciile ncuibate
sunt evaluate ncepnd cu cel mai adnc nivel spre
nivelul superior.

Curs Baze de Date - Gyorodi


Cornelia

Interogarea mai multor tabele


Folosind o condiie de join putem obine date din mai
multe tabele. Scrierea unei condiii de join se face ntro clauz WHERE.
Rnduri dintr-o tabel pot fi legate cu rnduri dintr-o
alt tabel coninnd aceai valoare n coloane
corespondente, de obicei coloane care conin chei
primare i chei externe. Exist dou tipuri principale
de condiii join :
equijoin
non-equijoin

Curs Baze de Date - Gyorodi


Cornelia

Interogarea mai multor tabele


In plus metodele join includ urmtoarele:
outer join
self join
set operators

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Tipuri de Join
Tipul de Join

Descriere

Inner

Extrage doar acele nregistrri din tabelele


din ambele pri ale join-ului, care satisfac
condiia de join ntre cmpurile implicate n
join.
Inner join-urile reprezint cel mai des folosit
tip de join.

Left (outer)

Extrage toate nregistrrile din tabela din


partea stng a join-ului, i numai acele
nregistrri care satisfac condiia de join din
tabela din partea dreapt a join-ului.

Right (outer)

Extrage doar acele nregistrri din tabela din


partea stng a condiiei de join care satisfac
condiia de join, i toate nregistrrile din
partea dreapt a condiiei de join.

Full

Extrage toate nregistrrile din tabelele din


ambele pri ale condiiei de join, fr a ine
cont dac nregistrrile satisfac condiia de
join sau nu.
Curs Baze de Date - Gyorodi
Cornelia

Equijoin
O condiie de equijoin se va scrie astfel:
SELECT tabel1.coloan, tabel2.coloan
FROM tabel1, tabel2
WHERE tabel1.coloan = tabel2.coloan;

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afieaz numele angajatului, numele
departamentului precum i localitatea unde se
afl departamentul, pentru toi angajai.
SELECT emp.empno, emp.ename, emp.depno,
dept.dname, dept.loc
FROM emp, dept
WHERE emp.depno = dept.depno;

Curs Baze de Date - Gyorodi


Cornelia

Exemplu rescris folosind INNER JOIN


SELECT emp.empno, emp.ename, emp.depno,
dept.dname, dept.loc
FROM emp INNER JOIN dept
ON emp.depno = dept.depno;

Curs Baze de Date - Gyorodi


Cornelia

Observaii
Relaia dintre tabela EMP i DEPT este un
equijoin, valorile din coloana depno din ambele
tabele trebuie s fie egale.
Deoarece coloana depno are acelai nume n
ambele tabele, ea trebuie prefixat cu numele
tabelei pentru a nu exista ambiguiti.
n plus, de condiia de join se poate aduga un
criteriu de cutare n clauza WHERE.

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afieaz numele angajatului, numele
departamentului precum i localitatea unde se
afl departamentul, pentru angajatul cu
numele King.

SELECT ename, e.depno, dname, loc


FROM emp e, dept d
WHERE e.depno = d.depno
AND INICAP(ename) = 'King';
Curs Baze de Date - Gyorodi
Cornelia

Rescrierea exemplului folosind INNER JOIN


SELECT ename, e.depno, dname, loc
FROM emp AS e INNER JOIN dept AS d
ON e.depno = d.depno
WHERE INICAP(ename) = 'King';
OBS: Aliasul tabelei este valid numai n SELECT-ul
curent.
Dac folosim un alias pentru o tabel atunci numele
tabelei trebuie nlocuit cu aliasul specific tabelei .
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Non-Equijoin
EMP:

SALGRADE

Empno Ename

Sal

7839
7698
7782
7566
7654
7499
7844
7900

5000
2850
2450
2975
1250
1600
1500
950

KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES

Grade
1
2
3
4
5

Losal
700
1201
1401
2001
3001

Hisal
1200
1400
2000
3000
9999

Relaia dintre tabela EMP i tabela SALGRADE este


de non-equijoin n sensul c, coloana sal din tabela
EMP este ntre valorile coloanele Losal i Hisal din
tabela SALGRADE.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Afim numele angajailor, salariul i gradul de
salarizare pentru fiecare angajat din tabela
EMP.
SELECT e.ename, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
Obs: Se poate folosi >= AND <= nlocuind astfel
BETWEEN.
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Operatorul OUTER JOIN


Vom utiliza operaia de outer-join pentru a vizualiza rnduri care
nu sunt vizualizate ntr-o condiie de join. Operatorul outer-join
este semnul (+). Scrierea unei condiii de outer-join se va realiza
folosind urmtoarea sintax:
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column(+) = table2.column;
sau
SELECT table.column, table.column
FROM table1, table2
WHERE tabel1.column = tabel2column(+);

Curs Baze de Date - Gyorodi


Cornelia

Operatorul OUTER JOIN

Curs Baze de Date - Gyorodi


Cornelia

Operatorul OUTER JOIN


Rndurile care nu apar la o condiie de join pot fi
returnate folosind operatorul outer-join ntr-o condiie
de join.
Operatorul outer-join este plasat n partea deficient n
informaie. Acest operator va avea ca efect crearea
unor rnduri NULL n tabela deficitar n informaie
pentru infomaia existent n tabela care conine
informaie n plus. Operatorul outer-join (+) poate fi
plasat n oricare dintre tabele dar nu n ambele
simultan.

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Vom considera tabele EMP i DEPT:
ENAME
KING
BLAKE
CLARK
JONES

DEPTNO
10
20
30
10

DEPTNO
10
20
30
40

DNAME
RESEARCH
SALES
OPERATIONS
ACCOUNTING

Pentru afiarea tuturor angajailor i numele tuturor departamentelor vom


scrie urmtoarea secven :
SELECT e.ename, d.depno, d.dname
FROM emp e, dept d
WHERE e.depno (+) = d.depno
ORDER BY e.depno;
Obs: Departamentul ACCOUNTING care nu are angajai va fi i el afiat.
O condiie care implic outer-join nu poate s conin operatoeul IN i nici
o alt condiie folosind operatorul OR.
Curs Baze de Date - Gyorodi
Cornelia

Rescrierea exemplului folosind RIGHT


(OUTER) JOIN
SELECT e.ename, d.depno, d.dname
FROM emp e,
RIGHT JOIN dept d
ON e.depno = d.depno
ORDER BY e.depno;

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

SELF-JOIN
Self-Join = interogarea unei tabele cu ea nsi
Cteodat este nevoie s interoghezi o tabel cu
ea nsi. Vom lua spre exemplificare
urmtoarea tabel:
EMP(ANGAJAI)
EMP(MANAGERI)
EMPNO

ENAME

MGR

EMPNO

ENAME

7839

KING

7698

BLAKE

7839

7839

KING

7782

CLARK

7839

7839

KING

7566

JONES

7698

7698

BLAKE

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
De exemplu, pentru a gsi numele managerului
lui Blake va trebui s parcurgem urtorii pai :
1. Gsirea lui Blake n tabela EMP, cutnd n
coloana ename
2. Gsirea codului managerului pentru Blake
adic mgr, care este 7839.
3. Gsirea persoanei care are empno=7839 i
afiarea numelui acestei persoane. Deci
persoana care are empno=7839 este KING.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Afiarea numelui unui i numele managerului
acelui angajat ( spre exemplu angajul Blake).
SELECT angajati.ename || ' work for ' ||
manager.ename
FROM emp angajati, emp manager
WHERE angajati.mgr = manager.empno
and angajati.nume= Blake '
n acest exemplu tabela EMP a fost interogat cu ea nsi prin
folosirea unor aliasuri cu nume diferit pentru aceei tabel.
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afim numele angajatului salarul angajatului
i numele managerului angajatului i salarul
managerului.
SELECT a.ename, a.salar || ' works for ' ||
m.ename, m.salar
FROM emp a, emp m
WHERE a.mgr = m.empno
n acest exemplu tabela EMP a fost interogat cu ea
nsi prin folosirea unor aliasuri cu nume diferit
pentru aceei tabel.
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Clauza USING

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Funcii pe grup
Aceste funcii opereaz pe seturi de rnduri
avnd un rezultat pe grup.
AVG([DISTINCT | ALL], n)
- returneaz valoarea
medie a lui n, ignornd valorile nule.
COUNT( {*| [DISTINCT | ALL], expr}) - returneaz
numrul de rnduri pentru care expresia expr este
diferit de null. Returneaz toate rndurile selectate
utiliznd * incluznd duplicatele i rndurile cu valori
null.
MAX([DISTINCT | ALL], expr) - returneaz valoarea
maxim a expresiei expr, ignornd valorile null.
Curs Baze de Date - Gyorodi
Cornelia

Funcii pe grup (continuare)


MIN([DISTINCT | ALL], expr) - returneaz valoarea
minim a expresiei expr, ignornd valorile null.
STDDEV([DISTINCT | ALL], x) - returneaz devierea
standard a lui x, ignornd valorile null.
SUM([DISTINCT | ALL], n) - returneaz suma
valorilor lui n, ignornd valorile null.
VARIANCE([DISTINCT | ALL], x) - returneaz
variana lui x, ignornd valorile null.Utiliznd clauza
DISTINCT rezultatul va conine numai rndurile
neduplicate. Clauza ALL determin ca funcia s ia n
considerare i valorile duplicate. Implicit este clauza
ALL.
Curs Baze de Date - Gyorodi
Cornelia

Funcii pe grup (continuare)


Toate funciile exceptnd funcia COUNT(*)
ignor valorile null. Substituirea valorilor null
se realizeaz utiliznd funcia NVL.
Tipul argumentelor pentru funciile COUNT,
MIN i MAX poate fi: CHAR, VARCHAR2,
NUMBER sau DATE.
Putem utiliza funciile AVG, SUM,
VARIANCE i STDDEV pentru coloanele care
conin date numerice.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Afiarea numrului de departamente distincte
din tabela EMP (nu se vor lua i valorile
duplicate)
SELECT COUNT(DISTINCT(deptno))
FROM emp;

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Toate funciile pe grup exceptnd funcia COUNT(*)
ignor valorile nule. Funcia NVL foreaz includerea
valorilor null de ctre funciile pe grup.

n urmtorul exemplu, se va calcula media aritmetic a


comisionului pentru toi angajai din tabela emp, (n
cazul n care coloana comm are valori null, se va
converti la valoarea zero valoarea null).
SELECT AVG(NVL(comm, 0)) "Comisionul annual"
FROM emp;
Curs Baze de Date - Gyorodi
Cornelia

Crearea grupurilor de date: Clauza GROUP BY

n exemplele anterioare, toate funciile pe grup au tratat tabela de


date ca un grup mare de informaii. Uneori este nevoie ca tabela s
fie mprit n grupuri mai mici. Acest lucru se poate realiza
folosind clauza GROUP BY ntr-o comand SELECT, astfel:
SELECT coloane, funcii_pe _grup(coloan)
FROM
tabele
[WHERE
condiii]
[GROUP BY expresia_de_ grupare]
[ORDER BY lista_de_coloane];
unde:
expresia_de_grupare: specific coloanele ale cror valori vor
determina gruparea rndurilor.
Curs Baze de Date - Gyorodi
Cornelia

Crearea grupurilor de date: Clauza GROUP BY

Utiliznd clauza WHERE, putem exclude


rnduri naintea mpririi lor pe grupuri.
Nu putem utiliza aliasul coloanei n clauza
GROUP BY, ci doar numele coloanei.
Implicit rndurile sunt ordonate cresctor dup
numele coloanelor incluse n lista clauzei
GROUP BY.
Ordinea de sortare poate fi modificat
utiliznd clauza ORDER BY.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Afim numrul departamentului i media
aritmetic a salariului pe departament.
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno;
OBS: Cnd utilizm clauza GROUP BY, trebuie s
includem n clauza GROUP BY toate coloanele din lista
SELECT care nu sunt incluse n funciile pe grup (n
exemplu de mai sus coloana deptno).
Curs Baze de Date - Gyorodi
Cornelia

Clauza GROUP BY

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afim media aritmetic a salariului pe
departament, fr s afiam numrul
departamentului.
SELECT AVG(sal)
FROM emp
GROUP BY deptno;
OBS: Coloanele din clauza GROUP BY nu
trebuie neaparat s fie incluse n lista
coloanelor SELECT.
Curs Baze de Date - Gyorodi
Cornelia

Cluaza GROUP BY

Curs Baze de Date - Gyorodi


Cornelia

Clauza GROUP BY

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afim numrul departamentului i media
aritmetic a salariului grupat pe departament
n ordine cresctoare a mediei aritmetice a
salariului pe departament.

SELECT deptno, AVG(sal)


FROM emp
GROUP BY deptno
ORDER BY AVG(sal);
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Uneori este nevoie s afim rezultatele unui grup din
interiorul unui alt grup. Acest lucru se realizeaz
specificnd n clauza GROUP BY lista de coloane. n
clauza GROUP BY pot fi specificate mai multe coloane.

S se afieze suma total a salariului pe fiecare job n


cadrul fiecrui departament.
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY deptno, job;
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Clauza HAVING
Nu putem folosi clauza WHERE pentru a restriciona
grupurile.
Vom exemplifica acest lucru prin urmtorul exemplu:
SELECT deptno, AVG(sal)
FROM emp
WHERE AVG(sal) > 2000
GROUP BY deptno;
OBS: Acest exemplu are o eroare la clauza WHERE
AVG(sal) > 2000 deoarece nu se poate utiliza clauza
WHERE mpreun cu clauza GROUP BY
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Clauza HAVING
Vom utiliza clauza HAVING ntr-o instruciune SELECT
pentru a specifica care dintre grupuri vor fi afiate.
SELECT coloane, funcii_pe _grup(coloan)
FROM
tabele
[WHERE condiii]
[GROUP BY
expresia_de_ grupare]
[HAVING BY
condiie_de_ grupare]
[ORDER BY
lista_de_coloane];
unde:
condiie_de_grupare: specific condiia de restricionare a
grupurilor.
Curs Baze de Date - Gyorodi
Cornelia

Clauza HAVING
Cnd se utilizeaz clauza HAVING ntr-o instruciune
SELECT se vor executa urmtorii pai:
se vor grupa rndurile.
se vor aplica funciile pe grup.
se vor afia grupurile care respect condiia din clauza
HAVING.
OBS: Este recomandat s plasm clauza GROUP BY
nainte de clauza HAVING deoarece este mult mai
logic. Grupurile sunt formate i funciile pe grup sunt
calculate nainte ca, clauza HAVING s fie aplicat
grupurilor din lista SELECT.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Se cere s se afieze salariul total lunar pentru
fiecare funcie (job), pentru care salariul total
este mai mare dect 10 000, ordonat dup
salariul total lunar.
SELECT job, SUM(sal) SUMA_SALAR
FROM
emp
GROUP BY
job
HAVING SUM(sal) > 10.000
ORDER BY
SUM(sal);
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Pentru a afla maximul salariului mediu pe
depatament, vom scrie secvena urmtoare:
SELECT MAX(AVG(sal))
FROM emp
GROUP BY
deptno;
OBS: Funciile pe grup pot fi ncuibate doar
maxim 2 adncimi

Curs Baze de Date - Gyorodi


Cornelia

Ordinea clauzelor n SELECT


Ordinea de evaluare a clauzelor este:
clauza WHERE
clauza GROUP BY
clauza HAVING
clauza ORDER BY este plasat ultima.

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Subinterogrile (subqueries)
O subinterogare este o interogare ale crei rezultate
sunt transmise ca argumente unei alte interogri.
O subinterogare va permite s transmitem setul de
rezultate al unei interogri la alta. Sintaxa general
este urmtoarea:
SELECT
coloane
FROM
tabela
WHERE
expr operator
(SELECT
coloane
FROM
tabela);
operator: include operatorii de comparaie.
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Subinterogrile (subqueries) ( continuare)


Operatorii de comparaie sunt de dou tipuri:

operatori care returneaz un singur rnd


(single-row): >, >=, <, <=, <>

operatori care returneaz mai multe rnduri


(multiple-row):

IN
ANY
ALL
Curs Baze de Date - Gyorodi
Cornelia

Cteva observaii referitoare la utilizarea


subinterogrilor:
O subinterogare trebuie inclus ntre paranteze.
Scrierea unei subinterogri se va face la dreapta
operatorului de comparaie.
Nu putem folosi o clauz ORDER BY ntr-o
subinterogare.
Dou tipuri de operatori de comparaie pot fi utilizai
n subinterogri: operatori care returneaz un singur
rnd (single-row) i operatori care returneaz mai
multe rnduri (multiple-row).
Curs Baze de Date - Gyorodi
Cornelia

Tipuri de subinterogri
Exist 3 tipuri de subinterogri:
Subinterogri care returneaz un singur rnd
(single-row subqueries).

Subinterogri care returneaz mai multe


rnduri (multiple-row subqueries).

Subinterogri care returneaz mai multe


coloane (multiple-column subqueries).
Curs Baze de Date - Gyorodi
Cornelia

Putem scrie o subinterogare n clauze SQL cum


ar fi:
Clauza WHERE
Clauza HAVING
Clauza FROM

Curs Baze de Date - Gyorodi


Cornelia

Subinterogri care returneaz un singur rnd

Subinterogri care returneaz un singur rnd


(single-row subqueries)
S se afieze toi angajai care au aceeai funcie (job) ca
i angajatul cu numele POP.
SELECT
ename, job
FROM
emp
WHERE
job =
(SELECT job
FROM
emp
WHERE empno =7846);
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
S se afieze departamentele (deptno) care au salariul
minim pe departament mai mare dect salariul minim
pe departamentul 20.
SELECT
deptno, MIN(sal)
FROM
emp
GROUP BY deptno
HAVING
MIN(sal) >
(SELECT MIN(sal)
FROM
emp
WHERE deptno =20);
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Subinterogri care returneaz mai multe rnduri


(multiple-row subqueries)
Acestea utilizeaz operatorii multiple-row: IN,
ANY i ALL
IN - verific dac valoarea exist n lista
rezultat din subinterogare.
ANY
- verific dac condiia este
ndeplinit pentru cel puin una din elementele
listei rezultate din subinterogare.
ALL
- verific dac condiia este
ndeplinit pentru toate elementele listei
rezultate din subinterogare.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Afiarea tuturor angajailor care au salariul
egal cu salariul minim pe departamente, se va
realiza n urmtoarea secven:
SELECT ename, sal, deptno
FROM
emp
WHERE sal IN (SELECT MIN(sal)
FROM
emp
GROUP BY deptno);

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afiarea tuturor angajailor care au salariul mai mic
dect salariul angajaiolor din departamentul
'Financiar', excluznd angajai din departamentul
'Financiar', se realizeaz prin urmtoarea secven:
SELECT
ename, job, sal
FROM
emp
WHERE sal <ANY
(SELECT sal
FROM
emp
WHERE job ='Financiar')
AND
job<> 'Financiar';
Curs Baze de Date - Gyorodi
Cornelia

Operatorul ANY
Query principal va compara salariul cu valoarea
maxim returnat de subquery.
< ANY va compara cu valoarea maxim
returnat de subinterogare, deci va returna
valori mai mici dect valoarea maxim.
>ANY va compara cu valoarea minim
returnat de subinterogare, deci va returna
valori mai mari dect valoarea minim.
=ANY este echivalent cu IN.
Curs Baze de Date - Gyorodi
Cornelia

Exemplu
Afiarea tuturor angajailor care au salariul mai mare
dect media aritmetic a salariului pe departamente, se
realizeaz prin urmtoarea secven:
SELECT
ename, job, sal
FROM
emp
WHERE sal >ALL
(SELECT AVG(sal)
FROM
emp
GROUP BY deptno);

Curs Baze de Date - Gyorodi


Cornelia

Operatorul ALL
Query principal va compara salariul cu valoarea
maxim returnat de subquery, 2900.
< ALL va compara cu valoarea minim
returnat de subinterogare, deci va returna
valori mai mici dect valoarea minim.
>ALL va compara cu valoarea maxim
returnat de subinterogare, deci va returna
valori mai mari dect valoarea maxim.
OBS: Operatorul NOT nu poate fi utilizat cu
operatorii IN, ANY i ALL.
Curs Baze de Date - Gyorodi
Cornelia

Subinterogri care returneaz mai multe


coloane (multiple-column subqueries).

Pentru a compara dou sau mai multe coloane


trebuie s compunem dou sau mai multe
clauze WHERE folosind operatorii logici.
Subinterogrile care returneaz mai multe
coloane permit combinarea mai multor clauze
WHERE ntr-una singur.

Comparaiile ntr-o subinterogare care


returneaz mai multe coloane, pot fi comparaii
pereche sau nonpereche
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Exemplu (combinaii pereche)


Afiarea tuturor angajailor care au acelai salariu i
comision cu cel al angajailor din departamentul 30, se
realizeaz prin urmtoarea secven:
SELECT
ename, job, sal, comm, deptno
FROM
emp
WHERE (sal, NVL(comm, -1)) IN
(SELECT sal, NVL(comm, -1)
FROM
emp
WHERE deptno = 30);

Curs Baze de Date - Gyorodi


Cornelia

Exemplu (combinaii nonpereche)


Rescriem exemplu de mai sus folosind comparaii
nonpereche.
SELECT
ename, job, sal, comm, deptno
FROM
emp
WHERE sal IN (SELECT sal
FROM
emp
WHERE deptno = 30)
AND NVL(comm, -1) IN
(SELECT NVL(comm, -1)
FROM
emp
WHERE deptno = 30);
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Exemplu
Afiarea tuturor angajailor care nu au subordonai, se
realizeaz prin secvena:
SELECT angajai.ename
FROM emp
WHERE angajati.empno NOT IN
(SELECT manager.mgr
FROM
emp manager);

OBS : Nu se poate utiliza operatorul NOT IN, deoarece


NOT IN este echivalent cu !=ALL.
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Controlul securitii unei baze de


date
Asigurarea securitii unei baze de date presupune
interzicerea accesului la date, interzicerea modificrii i
distrugerii datelor de ctre utilizatori neautorizai.
Referitor la sfera de aciune a metodelor utilizate
pentru securitatea datelor, pot fi puse n eviden trei
direcii:

controlul accesului la sistem al unor utilizatori neidentificai


sau neautentificai;
controlul accesului ilegal la date (confidenialitate);
controlul modificrii incorecte a datelor (integritate);

Curs Baze de Date - Gyorodi


Cornelia

Controlul accesului utilizatorilor


In acest curs vom discuta despre:

Diferena dintre privilegile obiect i privilegiile


sistem
Comenzile de acordare a accesului la o baz de date
Instruciunea GRANT ON TO pentru
asignarea de privilegii obiectelor din schema proprie
la ali utilizatori
Interogarea dicionarului de date pentru a vizualiza
privilegiile acordate
Curs Baze de Date - Gyorodi
Cornelia

Securitatea bazei de date


Securitatea bazei de date poate fi clasificat n dou categorii:
Securitatea sistem
Securitatea datelor
Securitatea sistem cuprinde accesarea i utilizarea bazei de date la
nivel sistem, cum ar fi: crearea de utilizatori, nume utilizator i
parole, alocarea de spaiu utilizatorilor, acordarea de privilegii
sistem care utilizatorii pot s le execute cum ar fi: crearea de
tabele, view-uri i secvene. Exist mai mult de 100 de privilegii
sistem.
Securitatea datelor (data security-also known as object security)
se refer la privilegiile obiectelor bazei de date i la aciunile care
le pot avea userii pe aceste obiecte. Aceste privilegii includ
instruciunile de DML carevor putea fi executate.
Curs Baze de Date - Gyorodi
Cornelia

Privilegii i schema
Privilegiile sunt acele drepturi de executare a
unor instruciuni SQL
Dreptul de DBA este cel mai mare drept care
permite acordarea de drepturi userilor la baza
de date i la obiectele acesteia
Useri au nevoie de privilegii pe obiectele bazei
de date pentru a manipula aceste obiecte.
Useri pot acorda de asemenea privilegiile lor
altor userii sau altor roluri.
Curs Baze de Date - Gyorodi
Cornelia

Privilegii i schema
O schem este o colecie de obiecte cum ar fi:
tabele, view-uri i secvene.
Schema este ceea ce i aparine unui user al
bazei de date i are acelai nume ca i user-ul.
In this course, your schema name is a
combination of your city, state/country, your
school name, course name and student number.
For example: uswa_skhs_sql01_s22..
Curs Baze de Date - Gyorodi
Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia

Curs Baze de Date - Gyorodi


Cornelia