Documente Academic
Documente Profesional
Documente Cultură
O colecţie de date reuneşte date despre o anumită clasă de obiecte (reale sau
conceptuale). De exemplu, în domeniul contabilităţii financiare, colecţia de date
CONTURI conţine informaţiile referitoare la clasa de obiecte conturi: simbolul contului
(SIMB_CONT), denumirea contului (DEN_CONT), tipul contului (TIP_CONT), soldul iniţial
debitor (SID) şi respectiv soldul iniţial creditor (SIC). Evident, un cont dat va avea soldul
iniţial fie debitor, fie creditor. Pentru exemplificare, considerăm colecţia de date
CONTURI.
Din aceste carcateristici decurg următoarele dezavantaje ale organizării datelor după
modelul file based:
redundanţa şi inconsistenţa datelor;
dificultatea accesului – în cazul în care o informaţie este exploatată de mai mulţi
utilizatori, fişierele tradiţionale nu permit accesarea datelor după mai multe
criterii specifice diferiţilor utilizatori sau grupuri de utilizatori;
complexitatea actualizărilor – într-un mediu multiutilizator (multiuser)
efectuarea unei actualizări (modificare, adăugare sau ştergere) poate conduce la
situaţii conflictuale atunci când doi utilizatori vor să modifice simultan aceeaşi
dată; acest gen de conflicte poate fi rezolvat printr-un program supervizor al
prelucrărilor;
probleme de securitate – crearea unor mecanisme de protecţie a datelor
împotriva accesului neautorizat este dificilă;
asigurarea integrităţii datelor – presupune crearea unor proceduri de analiză a
restricţiilor semantice la care sunt supuse datele; acestea formează mecanismul
de integritate;
dificultatea de a obţine răspunsuri rapide la probleme ad-hoc simple – presupune
realizarea unor programe utilizând limbaje procedurale pentru a obţine
răspunsul la o interogare;
inflexibilitatea faţă de schimbările ulterioare din sistemul informaţional;
costul ridicat – datorat gradului de redundanţă a datelor şi efortului necesar
interconectării fişierelor de date pentru a realiza un nivel minim de integritate şi
securitate a datelor.
A patra etapă – este etapa bazelor de date. Sintagma bază de date apare în
anul 1964, în titlul conferinţei Development and Management of a Computer –
Centered Data Base organizată la Santa Monica (California) de System
Development Corporation. Momentul consacrării termenului DATA BASE este
1969, când la CODASYL (Conference On DAta SYstems Language) se prezintă
într-un raport conceptul de bază de date.
14 Baze de date
Definiţia 1.1. DATA reprezintă înregistrarea unei observaţii, obiect, fenomen, imagine,
sunet sau text, într-o formă convenabilă unei prelucrări, interpretări sau transmiteri prin
mijloacele informaticii. Datele reprezintă aspecte elementare nesupuse unei prelucrări şi
neevaluate din punct de vedere al utilităţii.
Definiţia 1.2. INFORMAŢIA este semnificaţia ce poate fi ataşată sau poate fi dedusă
dintr-un ansamblu de date pe baza corelaţiilor dintre acestea, având un scop bine
determinat, de satisfacere a cerinţelor utilizatorilor.
Definiţia 1.3. BAZA DE DATE (Database) este un ansamblu structurat de colecţii de date
operaţionale înregistrate pe suport adresabil, aflate în interdependenţă logică, împreună
cu descrierea datelor şi a relaţiilor dintre ele şi care sunt prelucrate în aplicaţiile
informatice ale unei organizaţii. Baza de date permite operaţii de introducere, ştergere,
actualizare şi interogare a datelor.
BAZE DE DATE ANALITICE - sunt utilizate mai ales în aplicaţiile de prelucrare analitică on-
line (on-line analytical processing – OLAP), când este necesară stocarea şi urmărirea
datelor istorice şi dependente de timp. Sunt importante cînd este necesară urmărirea
tendinţelor, vizualizarea datelor statistice pe o perioadă mai lungă de timp sau
Introducere în baze de date 15
efectuarea unor previziuni tactice sau strategice de afaceri. Datele stocate într-o bază de
date analitică sunt de tip static, adică nu se modifică niciodată (sau foarte rar). Bazele de
date analitice utilizează frecvent bazele de date operaţionale ca sursă principală de date.
Arhitectura internă a unui sistem de baze de date (figura 1.1) - conţine trei nive niveluri
de abstractizare şi percepţie a datelor, introduse în anul 1975, prin raportul ANSI/SPARC
DBMS – Report of the Study Group on Data Base Management Systems (Acronimul
ANSI/SPARC înseamnă American National Standards Institute / Standards Planning And
Requirements Committee):
Nivelul extern (External Schema, User’ View) – este nivelul logic al utilizatorului
individual, care este cel mai apropiat de utilizator. Acesta poate fi un
programator de aplicaţii (administratorul aplicaţiei) sau un utilizator final.
Fiecare utilizator are la dispoziţie un limbaj:
- pentru programatorul de aplicaţii (administratorul aplicaţiei) limbajul poate
fi Java, C++, PL/I, etc.
Introducere în baze de date 17
- pentru utilizatorul final limbajul va fi ori unul de interogare (SQL), ori unul
specializat adaptat cerinţelor utilizatorului.
Schema Schema
externă A - Vederea externă externă B - Vederea externă
interfaţa cu A interfaţa cu B
utilizatorul utilizatorul
Corespondenţa extern/
conceptual pentru B
Corespondenţa extern/
conceptual pentru A
Schema Vederea
conceptuală conceptuală
Sistemul de
Corespondenţa
gestiune a
conceptual/intern
bazelor de date
(SGBD)
Definiţia
structurii de
stocare Baza de date stocată
(schema
(vederea internă)
internă)
Sistemul de gestiune al bazei de date tratează accesul la baza de date după următorul
algoritm:
Pasul 1. Utilizatorul lansează o cerere de acces, folosind un sublimbaj de date (de regulă
SQL).
Pasul 2. Sistemul SGBD acceptă cererea şi o analizează.
Pasul 3. SGBD-ul analizează pe rând schema externă, corespondenţa extern-conceptual,
schema conceptuală, corespondenţa conceptual-intern şi definiţia structurii de
stocare.
Pasul 4. SGBD-ul execută operaţiile necesare în baza de date stocată.
Cereri
compilate
Impunerea
Scheme şi corespon-
denţe sursă şi obiect
Optimizator constrângerilor de
securitate şi
integritate
Cereri
optimizate
Manager de Metadate
execuţie
Baza de date
Date
În fiecare din părţi se regăsesc cele trei niveluri intern, conceptual şi extern.
Din punct de vedere al manipulării datelor, cererile (de exemplu: APPEND, MODIFY,
DELETE ) sunt tratate de analizorul de cereri, care realizează analiza sintactică (conform
gramaticii) şi analiza semantică (conform vizualizării referite sau schemei) şi le traduce
în format intern. O cerere în format intern, care se referă la o vizualizare, este tradusă în
una sau mai multe cereri care fac referinţă la obiecte ce există în baza de date. Această
funcţie este realizată de către un procesor-translator numit controlor de cereri, care
modifică cererile şi în plus asigură controlul drepturilor de acces (autorizează
citirea/scrierea unui obiect) şi controlul integrităţii în cazul actualizărilor. Controlul
integrităţii constă în verificarea dacă baza de date nu a fost “poluată” în timpul
actualizării, adică regulile de coerenţă a datelor se verifică şi după actualizare.
24 Baze de date
Analiza sintactică
Analizor Analiza semantică
Gestiunea schemelor
Modificarea cererilor
Controlor Controlul integrităţii
Controlul automatizării
Dicţionarul Optimizare
datelor Optimizor Elaborarea planului
(metabaza)
Execuţia planului
Executor Metode de acces
Controlul concurenţei
Atomicitatea tranzacţiilor
BD
Executorul este un procesor care are rolul de a executa planul de acces ales şi elaborat
de optimizator. El se bazează pe metodele de acces care permit accesul la fişiere prin
intermediul indecşilor şi / sau legăturilor. La acest nivel este gestionat controlul
accesului concurent şi atomicitatea tranzacţiilor.
Introducere în baze de date 25
Scopul general al unui sistem de gestiune de baze de date este de a asigura dezvoltarea
şi execuţia aplicaţiilor pentru baze de date. După apariţia sistemelor distribuite
(Distributed Database System), arhitecturile operaţionale care s-au impus au fost
arhitecturile client – server.
Arhitectura client – server (Fig.1.4.) include nucleul unui sistem de gestiune de baze de
date numit DMCS (Description Manipulation and Control Sub-system), care funcţionează
în mod server [GAR03]. Limbajul DL (Data Language) este limbajul standard de acces la
SGBD.
Utilizatori finali
Aplicaţii Clienţi
SGBD Server
Baza de date
Serverul – este sistemul de gestiune al bazei de date, care asigură funcţiile prezentate în
paragraful 1.3. În acest context, noţiunea de server reprezintă doar o altă denumire a
sistemului de gestiune al bazei de date.
Reţea de comunicaţii
Server
SGBD
BD
Un sistem de baze de date distribuit (Distributed Database System) poate avea atât
datele cât şi sistemul de gestiune al bazei de date, distribuite pe mai multe staţii
interconectate printr-o reţea de comunicaţie. Un astfel de sistem poate fi reprezentat
asemănător prin prisma structurării client-server (Fig.1.6.).
Reţea de comunicaţii
Server Server
SGBD SGBD
BD BD
Multe aplicații Web utilizează o arhitectură pe trei nivele (three-tier architecture) care
adaugă un nivel intermediar între client şi serverul bazei de date (figura 1.7). Acest nivel
intermediar, în funcție de aplicație, este numit server de aplicație și, uneori, server Web.
Acest server joacă un rol intermediar, prin stocarea regulilor (proceduri şi resticţii) care
sunt utilizate pentru accesul datelor din serverul de baze de date. Se poate realiza astfel
o îmbunătățire a securităţii bazelor de date prin verificarea clientului înainte de a
transmite o cerere către serverul de baze de date. Clientul posedă interfeţe GUI
(Graphical User Interface) și aplicaţii Web specifice. Serverul intermediar acceptă cereri
din partea clientului, procesează cererea și trimite comenzile la serverul de baze de
date.
Tipologia SGBD-urilor este în general funcţie de tipurile de structuri ale datelor pe care
le suportă. Dintre modelele cele mai des întâlnite amintim [ION04]:
modelul ierarhic
modelul reţea
modelul relaţional
modelul orientat-obiect
modelul obiect relaţional
PRODUSE
MATERIALE CLIENTI
Modelul reţea (Network Model). Baza de date utilizează o structură de graf pentru
definirea schemei conceptuale a bazei de date. A apărut după modelul ierarhic şi a fost
standardizat în 1971 de o comisie DBTG (Database Task Group). Nodurile grafului sunt
tipurile de entităţi, iar muchiile reprezintă legăturile dintre tipurile de entităţi. Asocierile
sunt de tipul M:N şi se reprezintă fără duplicarea înregistrărilor, fiecare înregistrare
putând fi referită de mai multe înregistrări. Acest model este în prezent rar folosit
pentru baze de date generale care implică operaţii de interogare. Aplicarea modelului
reţea se întâlneşte în bazele de date grafice utilizate în modelarea realităţii virtuale.
CLI F CLI F
P M P P M M
Complexitatea
interogărilor
SGBDR SGBDOR
Sisteme de SGBDOO
fişiere
Complexitatea
interogărilor
Fig.1.11. Clasificarea SGBD-urilor
(sursa: Ionescu F., Baze de date relaţionale şi aplicaţii)
Microsoft Access este unul din cele mai cunoscute sisteme de gestiune a bazelor de date
relaţionale pe platforme de calculatoare personale. Microsoft Access dispune de un
sistem de control al bazei de date şi o intefaţă grafică pentru interacţiunea cu
utilizatorul. Aplicaţiile de baze de date în MS Access se pot dezvolta cu multă uşurinţă
datorită generatoarelor de aplicaţii (wizards) care permit proiectarea vizuală a bazelor
de date, a formularelor (forms) pentru interfeţele grafice şi a rapoartelor (reports).
Licenţa se cumpără odată cu cumpărarea licenţei produsului Microsoft Office.
1
Scalabilitatea este o proprietate a unui sistem, a unei rețele sau a unui proces, care arată
capacitatea acelui sistem de a suporta corect un volum mai mare de încărcare sau de a permite
mărirea sau extinderea sa (https://ro.wikipedia.org/wiki/Scalabilitate).
2
http://www.agora.ro/stire/oracle-a-lansat-oracle-database-12c-prima-baza-de-date-
conceputa-pentru-cloud
3
https://ro.wikipedia.org/wiki/Cloud_computing
34 Baze de date
Există două seturi de modele care permit clasificarea serviciilor de tip cloud [GRE15]:
Modelele de implementare – cu referire la forma de proprietate, localizarea și
modul de gestionare a infrastructurii de tip cloud: public, privat, hibrid etc.;
Modelele de servicii – cu referire la tipurile de servicii care sunt oferite clienților
prin prin intermediul implementărilor cloud: SaaS, PaaS, IaaS etc.
Modelele de implementare
Cloud-ul public este bazat pe investițiile unei companii mari de software și
destinat consumatorilor globali indiferent de dimensiune șI domeniu de
activitate;
Cloud-ul privat este bazat pe investițiile unei companii sau unui grup de companii
verticalizate, destinat în mare parte exclusiv consumatorilor din interiorul
companiei;
Cloud-ul hibrid este bazat pe folosirea unor servicii oferite de cloud-ul public
interconectate cu entități informaționale interne, destinat în mare parte
companiilor de dimensiuni foarte mari și vizează extinderea anumitor capacități
de procesare internă în scopul satisfacerii cerinţelor consumatorilor din interiorul
companiei.
Cloud-ul de comunitate – bazat pe partajarea în comun a resurselor unui grup de
organizații din cadrul aceluiași domeniu de activitate economico-socială.
Introducere în baze de date 35
Modelele de servicii
SaaS (Software as a Service) reprezintă unul din cele mai utilizate modele de
servicii în cloud prin faptul că permite unui număr mare de utilizatori să
beneficieze în mod gratuit sau plătit de un set de aplicații specifice, standardizate
și necesare în derularea activităților curente. Accesul la aplicații se realizează prin
intermediul browser-elor web sau pentru altele prin intermediul aplicațiilor
client dedicate (ex. Outlook, Skype, DropBox, Google Drive etc.).
PaaS (Platform as a Service) reprezintă unul din cele mai complexe modele de
servicii cloud pentru că este o suită de aplicații și servicii destinate construirii
altor aplicații și servicii, oferind programatorilor seturi specifice de API-uri
(Application Programming Interface). În acest model de servicii dezvoltatorii nu
au nevoie să își instaleze și configureze propriile servere de prelucrare
(middleware), de persistență (baze de date) sau de prezentare (servere web).
IaaS (Infrastructure as a Service) reprezintă unul din cele mai noi modele de
servicii în cloud și permite clienților crearea propriilor infrastructuri de
calculatoare, echipamente de rețea și de stocare. Este cunoscut și sub denumirea
de HaaS (Hardware as a Service) pentru că pune la dispoziție posibilitatea de
configurare a echipamentelor prin specificarea numărului de procesoare și a
tipului lor, cantitatea de memorie RAM alocată, dimensiunea spațiului de stocare
și modul de conectare în rețea.
36 Baze de date
Definiţia 1.5. Entitatea este “ceva ce poate fi identificat ca distinct”. O entitate se referă
la un aspect al realităţii obiective şi poate reprezenta un obiect fizic, o activitate, un
concept, etc.
Definiţia 1.6. Atributul este o proprietate care descrie un anumit aspect al unei entităţi.
O entitate se diferenţiază de alte entităţi printr-un ansamblu de atribute care permit
descrierea precisă a acesteia. Atributele prin care este descrisă o entitate se aleg astfel
încât să fie relevante relativ la domeniul de interes pentru care se defineşte modelul
respectiv.
Definiţia 1.7. Tip de entitate. Toate entităţile similare, care pot fi descrise prin aceleaşi
atribute, aparţin unui tip de entitate.
Definiţia 1.8. Mulţime de entităţi. Este colecţia tuturor entităţilor de acelaşi tip
În proiectarea bazelor de date există două tipuri de entităţi: entităţi tari (puternice,
normale) şi entităţi slabe (dependente). Entitatea tare are o existenţă proprie în cadrul
modelului, în timp ce entitatea slabă nu poate exista decât dacă există o entitate tare cu
care să fie asociată.
Definiţia 1.9. Asocierea este o corespondenţă (corelaţie, legătură) între entităţi din două
sau mai multe mulţimi de entităţi.
Definiţia 1.10. Gradul unei asocieri este dat de numărul de mulţimi de entităţi asociate.
Vom presupune în continuare, pentru simplitate, că asocierile au gradul 2.
Considerăm două mulţimi de entităţi E1 şi E2. Asocierile de gradul 2 pot fi de trei
categorii:
asociere 1:1 (one-to-one) – unei entităţi din E1 îi corespunde o singură entitate
din E2 şi reciproc (de exemplu, asocierea de tip soţ – soţie, mai exact căsătoria
monogamă, sau persoana – ROL la administraţia financiară)
38 Baze de date
Persoana
ROL
asociere 1:N (one-to-many) – unei entităţi din E1 îi corespund una sau mai
multe entităţi din E2, dar fiecărei entităţi din E2 îi corespunde o singură entitate
din E1 (relaţie de tip tată – fiu, sau grupa – student).
Grupa
asociere M:N (many-to-many) – unei entităţi din E1 îi corespund una sau mai
multe entităţi din E2 şi reciproc (relaţie de tip client – produs, adică un client
poate cumpăra mai multe produse şi un produs poate fi cumpărat de mai mulţi
clienţi)
entitate tare
entitate slabă
atribut
asociere 1:N
E1 1 A N E2 între 2 tipuri
de entităţi
cuprinde
1 N
Facultate Cadru didactic
M
1
predă lucrează
N N
Curs Proiect
Există în literatura de specialitate mai multe abordări ale celor două concepte. Modul lor
de tratare este departe de a fi unitar. În unele lucrări, se consideră că banca de date
este formată din:
Baza de date,
Sistemul de gestiune al bazei de date (SGBD).
Alţi autori extind noţiunea de bancă de date şi consideră banca de date formată din :
Baza de date,
Sistemul de gestiune al bazei de date (SGBD),
Hardware – ul necesar funcţionării sistemului,
Programele de aplicaţii,
Utilizatorii.
În cartea L’art des bases de données, autorii S.M. Miranda, J.M. Busta fac o distincţie
clară între cele două concepte *MIR88+:
Baza de date conţine date primare care sunt exploatate cu ajutorul unui SGBD. În cazul
unei interogări, sistemul de gestiune al bazei de date furnizează direct răspunsul.
Banca de date date conţine date referenţiale şi accesul este asigurat cu ajutorul unui
sistem documentar (SD). Sistemul documentar permite o direcţionare către un text
Introducere în baze de date 41
1961 - apariţia sistemului IDS (Integrated Data Storage) al firmei General Electric.
Terminologia utilizată (tipul record şi tipul set) va sta la baza modelului reţea dezvoltat la
"Conference On DAta SYstems and Languages Data Base Task Group" (CODASYL DBTG).
1965-1970 - dezvoltarea sistemelor de gestiune a fişierelor generalizate. IBM dezvoltă
modelul ierarhic şi sistemul IMS (Information Management System). În acceasşi
perioadă apare IMS DB/DC (DataBase/DataCom) care suportă modelul reţea.
În anii 70, domeniul bazelor de date şi sistemelor de gestiune a bazelor de date se
dezvoltă foarte mult, ajungând să fie disciplină universitară şi de cercetare. Apar
numeroase produse comerciale care implementează propunerile raportului CODASYL
DBTG: ISD II (HoneyWell), DMS1100 (UNIVAC), DMS II (Burroughs), etc.
1970 - apare modelul relaţional de date, anunţat de E.F.Codd în articolul A Relational
Model of Data for Large Shared Databanks, publict în CACM, vol. 13, no.6, 1970.
1972 – prima conferinţă internaţională organizată de ACM SIGMOD (Association of
Computing Machinery, Special Interest Group on Management Of Data).
1975 - prima conferinţă internaţională VLDB (Very Large Data Base); publicarea
raportului ANSI-SPARC.
1976 - publicarea modelului Entitate – Asociere de P.P.Chen în articolul The Entity-
Relationship Data Model: Toward a Unified View of Data, apărut în ACM-TODS, vol.1,
no.1, 1976.
1975 - 1980 - dezvoltarea sistemelor relaţionale experimentale: SYSTEM-R (IBM) şi
INGRES (Berkeley, University of California).
1980 - .... apariţia şi comercializarea a numeroase SGBD-uri relaţionale ce au înlocuit
SGBD-urile ierarhice şi reţea. SGBD-urile pot fi utilizate pe microcalculatoare şi se
realizează sisteme din generaţia a patra cu instrumente şi interfeţe multiple.
1990 - .... se dezvoltă numeroase produse a căror complexitate creşte, la un preţ tot mai
scăzut: PowerBuilder (SYSBASE), Oracle Developer, VB (Microsoft), etc. Se dezvoltă
42 Baze de date
Teorema CAP (Consistency, Availability, Partition tolerance), datorată lui Eric Brewer şi
Seth Gibert, formulează constrângerile acestor sisteme de baze de date şi demonstrează
că aceste proprietăţi de consistenţă, disponibilitate şi toleranţă la partiţionare nu pot fi
îndeplinite simultan5.
Consistenţa se referă la consistenţa datelor din punctul de vedere al clienţilor
sistemului. Altfel spus, toţi clienţii văd aceleaşi date tot timpul.
Disponibilitatea presupune că fiecare cerere va primi un răspuns.
Toleranţa la partiţionare este proprietatea sistemului de a funcţiona atunci când
noduri din sistem cad.
Spre exemplu, sistemele care sunt consistente și disponibile nu pot garanta toleranța la
partiționare. Este cazul bazelor de date relaționale, unde datele sunt consistente în
întregul sistem, sunt disponibile tot timpul, dar dacă apare o partiționare, tradusă printr-
o întrerupere a conexiunii între două sau mai multe noduri, funcționarea sistemului ca
ansamblu nu mai este garantată.
4
http://andrei.clubcisco.ro/cursuri/f/f-sym/5master/aac-cc/4_PaaS.pdf
5
http://ctrl-d.ro/tips-and-tricks/introducere-in-tematica-bazelor-de-date-in-cloud/
BAZE DE DATE OLAP. MODELUL MULTIDIMENSIONAL
Sistemele informatice pentru prelucrarea tranzacţiilor (TPS) reprezintă un factor extrem de
important în activitatea unei organizaţii. Bazele de date operaţionale asigură prelucrarea on-line
a tranzacţiilor (on-line transaction processing – OLTP), care presupune toate operaţiile legate de
colectarea, modificarea, trasmiterea şi întreţinerea zilnică a datelor. Aceste baze de date sunt
proiectate pentru optimizarea proceselor curente din organizaţie şi mai puţin pentru analiza
decizională a informaţiilor. În timp, la nivelul unei organizaţii se acumulează un volum
important de date stocate care provin din procesele interne, dar şi din mediul extern. S-au
dezvoltat astfel noi sisteme de aplicaţii de prelucrare analitică on-line (on-line analytical
processing – OLAP) destinate analizei datelor, care reprezintă suportul pentru procesele de
decizie din organizaţie. Din volumele mari de date rezultate din procesele operaţionale,
sistemele OLAP extrag informaţiile necesare procesului decizional.
Aceste sisteme suport pentru decizie, facilitează stocarea şi analiza unor mari volume de date.
Elementul central al unui sistem OLAP este baza sa de date multidimensională (multi-
dimensional database) care conţine informaţii reprezentabile sub forma unui cub de date (data
cube) ce permite analize în mai multe dimensiuni.
Termenul de OLAP a fost introdus de Codd în anul 1993 şi este definit în *CON01+: Sinteza,
analiza şi consolidarea dinamică a unor volume vaste de date multidimensionale.
În 1995, Consiliul OLAP defineşte conceptul OLAP: O categorie de instrumente software care
permite analiştilor şi managerilor să înţeleagă esenţa datelor printr-un acces rapid, consistent şi
interactiv la o mare varietate de viziuni posibile ale informaţiilor, care au fost obţinute prin
transformarea datelor primare astfel încât să reflecte dimensiunile reale ale organizaţiei aşa
cum o percepe şi înţelege utilizatorul [SAB08].
Depozit de date (Data Warehouse). Definiţia lui W. H. Inmon, considerat părintele conceptului,
este: Un depozit de date este o colecţie de date orientate pe subiecte, integrate, istorice şi
nevolatile, fiind destinată fundamentării deciziei manageriale [SAB08].
Mineritul datelor (Data Mining) desemnează tehnici de căutare avansată a informaţiilor ascunse
în datele dintr-un depozit de date [GBD02].
Un sistem OLAP efectuează analize complexe asupra unor mari volume de date stocate în
depozite de date. Aceste analize sunt multidimensionale deoarece studiază un fapt (de
exemplu, vânzările) în funcţie de dimensiuni (de exemplu oraş, produs, timp).
1
Tehnologiile de tip OLAP permit analiștilor și managerilor din organizații să aibă un acces rapid
și interactiv la depozitul de date. Aceste tehnologii de centralizare au scopul de a transforma
informațiile obișnuite în informații de sinteză putându-se face apoi o analiză mai ușoară.
Funcționalitatea OLAP este caracterizată de o analiză dinamică multidimensională a datelor
consolidate din organizație, ce sprijină activitățile analitice și de căutare și regăsire a
informațiilor desfășurate de utilizatorul final:
Calcule și modele ce se aplică dimensiunilor transversale prin intermediul ierarhiilor sau
membrilor;
Analiza tendințelor;
Analiza unor submulțimi obținute prin secționare;
Analiza unor date prin adâncirea nivelurilor de consolidare a datelor;
Analiza bazată pe comparații dimensionale.
O analiză comparativă între sistemele de prelucrare OLTP şi OLAP este prezentată în figura 6.8.
Depozitul de date (Data Warehouse) conține atât date istorice cât și actuale. Datele sunt
ierarhizate şi structurate pentru a putea fi oricând disponibile activităților de prelucrare
analitică on-line, mineritului de date, interogărilor, rapoartelor sau altor aplicații destinate luării
deciziilor.
Noțiunea de depozitare a datelor vizează întregul proces de creare, menținere și exploatare a
unui depozit de date. Alimentarea cu date a depozitului de date se realizează în principal din
bazele de date operaţionale ale organizaţiei cu ajutorul unor instrumente de manipulare a
datelor numite E.T.L. (Extract Transform and Load) care permit:
extragerea datelor sursă din bazele de date operaţionale;
structurarea şi transformarea datelor pentru omogenizare prin aplicarea unor reguli de
gestiune bine precizate;
încărcarea datelor sursă în depozitul de date.
2
Datele, plecând de la bazele sursă, tranzitează către un ODS (Operational Data Store), apoi
către DWH (Data Warehouse) şi în final către magazinele de date (DataMarts)1.
Datele din ODS (Operational Data Store) sunt o simplă copie a datelor din bazele de date
operaţionale OLTP.
Datele din magazinele de date (DataMarts) constituie subansamble din depozitele de date care
oferă o vedere funcţională limitată la un domeniu al organizaţiei, de exemplu informaţii strict
legate de vânzări.
Principalele caracteristici ale datelor dintr-un depozit de date (Data Warehouse) sunt:
Datele sunt orientate subiect.
Datele sunt integrate prin definirea unui referenţial unic; de exemplu, sumele încasate
din activităţi de export în diferite valute sunt transformate într-o monedă unică.
GBP
CHF EUR
USD
încărcare acces
1
http://www.expert-only.com/business-intelligence/concepts/entrepots-de-donnees-ou-
datawarehouses-dwh
3
DataMarts
Compartimentul MK
DataMart
Compartimentul RU
Depozit de date
Figura 6.11. Datamarts pentru compartimentele organizaţiei
Decizia
Modelarea multidimensională
Modelarea multidimensională este o tehnică de proiectare logică folosită pentru vizualizarea
modelelor de date sub forma unui set de variabile cheie pentru activitatea analizată. Aceste
variabile sunt descrise în funcţie de aspectele caracteristice ale activităţii (proces/procese)
analizate [VEL01].
4
permite analize mai complexe şi mai variate. Granularitatea cubului este dată de
granularitatea dimensiunilor, adică de gradul de detaliere al datelor stocate. Evident, un grad
mare de detaliere a datelor conduce la creşterea volumului depozitului de date.
În procesul de analiză, la nivelul cubului n-dimensional, se poate realiza:
- o dezagregare a datelor prin introducerea unei noi dimensiuni în analiză (operaţia drill-
down);
- o reagregare a datelor prin eliminarea unei dimensiuni în analiză (operaţia roll-up).
Ierarhiile permit aranjarea atributelor (membrilor) unei dimensiuni pe mai multe niveluri în
structuri arborescente. De exemplu, în majoritatea analizelor economice o dimensiune
importantă o reprezintă timpul. Pentru dimensiunea timp membrii naturali sunt: anul,
semestrul, trimestrul, luna, săptămâna, ziua. O ierarhie posibilă este prezentată în figura 6.13.
An
Sem. 1 Sem. 2
Trim. 1 Trim. 2 Trim. 3 Trim. 4
L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12
Gradul de împrăştiere al datelor este dat de numărul de celule ale cubului pentru care nu
avem date şi de modul de poziţionare al celulelor care conţin date.
Măsurile (variabilele) sunt atribute numerice ale elementelor din colecţia de fapte şi
reprezintă indicatorii prin care se măsoară performanţele procesului analizat. De exemplu,
într-o analiză a vânzărilor înregistrate într-o reţea de magazine, indicatorii analizaţi sunt:
volumul vînzărilor şi cantitatea vândută.
Colecţia de fapte este un ansamblu format din variabile şi din date de context. Un fapt poate
fi:
- un eveniment (de exemplu o vânzare: ce a fost cumpărat, unde, când, cine a
cumpărat, care a fost preţul),
- starea unui obiect (de exemplu starea stocului: ce este stocat, de când este stocat,
unde este stocat, ce cantitate este stocată),
- modificarea stării unui obiect (de exemplu modificările stocului: cantităţi intrate,
cantităţi ieşite).
Colecţiile de fapte asociate evenimentelor se numesc colecţii de fapte fără fapte şi sunt de
fapt colecţii de fapte fără variabile (măsuri).
5
Autori
Timp
Manifestări
Universitate
Facultate ... Facultate
Departament ... Departament ... ... ... Departament ... ...
Reviste Conferinţe
Reviste ISI Reviste BDI Internaţionale Naţionale
Anul
Semestrul I (lunile 1-6) Semestrul II (lunile 7-12)
6
CAPITOLUL 2
BAZE DE DATE RELAŢIONALE
Tabelul 2.1.
Modelul relaţional Inginerie software
structura relaţională a datelor informaţie
operatorii modelului relaţional proces
restricţiile de integritate integritate
Tabelul 2.2
Formal Uzual Fizic
relaţie tabel fişier
tuplu linie articol
atribut coloană câmp
domeniu tip de dată tip de dată
R1. Regula gestionării datelor. Un SGBD relaţional trebuie să fie capabil să gestioneze o
bază de date numai prin posibilităţile sale relaţionale.
Practic, se apreciază că nicio implementare actuală de SGBDR nu respectă această
regulă, deoarece implementările conţin atât caracteristici relaţionale cât şi caracteristici
nerelaţionale.
R2. Regula reprezentării informaţiei. Într-o bază de date relaţională, informaţia este
reprezentată la nivel logic sub forma unor tabele ce poartă numele de relaţii.
Codd apreciază această regulă ca fiind cea mai importantă. Un SGBD care nu respectă
acestă regulă nu poate fi considerat relaţional.
R3. Regula accesului garantat la date. Fiecare valoare dintr-o bază de date relaţională
trebuie să poată fi adresată în mod logic printr-o combinaţie formată din numele relaţiei,
valoarea cheii primare şi numele atributului.
Limbajul de manipulare a datelor (DML) trebuie să permită accesul la orice valoare
atomică din baza de date relaţională.
R4. Regula reprezentării informaţiei necunoscute. Un sistem relaţional trebuie să
permită utilizatorului definirea unui tip de date numit NULL pentru reprezentarea unei
informaţii necunoscute la momentul respectiv.
Într-un SGBDR trebuie făcută diferenţa la nivelul unui atribut între valoarea zero, un şir
vid de caractere (şir de spaţii) şi o valoare necunoscută la un moment dat (valoarea
NULL).
R5. Regula dicţionarelor de date. Asupra descrierii bazelor de date (informaţii relative la
relaţii, vizualizări, indecşi etc.) trebuie să se poată aplica aceleaşi operaţii ca şi asupra
datelor din baza de date.
Descrierea bazei de date este reprezentată la nivel logic sub forma unor tabele care pot
fi accesate în acelaşi mod ca şi datele efective.
R6. Regula limbajului de interogare. Trebuie să existe cel puţin un limbaj pentru
prelucrarea bazei de date.
Toate implementările SQL respectă această regulă. Limbajul permite utilizatorilor să
definească relaţii şi vizualizări, să regăsească informaţia şi să o actualizeze.
R7. Regula de actualizare a vizualizării. Un SGBD trebuie să poată determina dacă o
vizualizare poate fi actualizată şi să stocheze rezultatul interogării într-un dicţionar de
tipul unui catalog de sistem.
Implementările SQL pot stabili, în funcţie de parametrii de selecţie utilizaţi, dacă
anumite vizualizări pot fi actualizate sau nu.
Baze de date relaţionale 45
R8. Regula limbajului de nivel înalt. Regulile de manipulare asupra unei relaţii luată ca
întreg sunt valabile atât pentru operaţiile de regăsire a datelor, cât şi asupra operaţiilor
de inserare, actualizare şi ştergere a datelor.
Într-un SGBDR operaţiile de manipulare a datelor pot fi aplicate atât în mod interactiv,
cât şi prin program, într-un limbaj gazdă.
R9. Regula independenţei fizice a datelor. Programele de aplicaţie şi activităţile
utilizatorilor nu depind de modul de depunere a datelor sau de modul de acces la date.
Într-un SGBDR schimbarea structurii fizice a datelor (stocare sau acces la date) nu
trebuie să afecteze programele.
R10. Regula independenţei logice a datelor. Programele de aplicaţie trebuie să fie
transparente la modificările de orice tip efectuate asupra datelor.
Modificările efectuate asupra unei relaţii, nu trebuie să afecteze operaţiile de
manipulare a datelor.
R11. Regula independenţei datelor din punct de vedere al integrităţii. Regulile de
integritate trebuie să fie definite într-un sublimbaj relaţional, nu în programul de
aplicaţie. Restricţiile de integritate trebuie să fie definite prin limbajul de definire a
datelor (DDL) şi stocate în catalogul sistemului.
R12. Regula independenţei datelor din punct de vedere al distribuirii. Distribuirea
datelor pe mai multe calculatoare dintr-o reţea de comunicaţii de date, nu trebuie să
afecteze programele de aplicaţie.
Standardul ANSI-SQL nu menţionează această regulă în specificaţiile sale, deoarece este
greu de respectat.
R13. Regula versiunii procedurale a unui SGBD. Orice componentă procedurală a unui
SGBD trebuie să respecte aceleaşi restricţii de integritate ca şi componenta relaţională.
Nu se permite ca printr-o metodă procedurală (de exemplu, un limbaj de nivel inferior)
să se distrugă regulile de integritate exprimate într-un limbaj relaţional. De exemplu,
dacă într-o relaţie valoarea unui atribut este not null, orice altă metodă procedurală de
accesare nu trebuie să permită introducerea unei valori null în această coloană.
Deoarece cele 13 reguli ale lui Codd sunt dificil de respectat s-au definit condiţii
minimale pentru ca un SGBD să fie relaţional. Acestea sunt:
să implementeze modelul de date relaţional prin DDL (Data Definition Language)
şi DML (Data Manipulation Language);
să implementeze un limbaj de interogare relaţional.
Interfaţa utilizatorului
Gestiunea vederilor
R
E
Z Integritatea semantică
U Control
L Autorizarea accesului
T
A
T Optimizarea cererilor
E
Gestiunea planurilor
de execuţie
Tratarea
cererilor
Controlul execuţiei
Executarea
operatorilor algebrici
Gestiune buffer
Gestiunea
Mecanisme de acces accesului
Gestiunea accesului
concurent Securitate
Jurnalizarea
Definiţia 2.2. Domeniul este un ansamblu de valori atomice de acelaşi tip, având o
anumită semnificaţie. Domeniul poate fi definit explicit prin enumerarea tuturor
valorilor sau implicit prin precizarea proprietăţilor pe care le au valorile domeniului
respectiv.
Baze de date relaţionale 47
Exemple:
D1 = {“MK”, “ECTS”, “FB”, “CIG”, “IE”, “MN” }
D2 x | x N , x 0 ,100
D3 = {0, 5, 9, 20}
domeniul D1 este definit explicit prin enumerarea programelor de studii care au în
plan disciplina Baze de date;
domeniul D2 este definit implicit prin specificarea proprietăţilor care pot fi luate de
valorile domeniului;
domeniul D3 este definit explicit prin enumerarea valorilor posibile (în procente) ale
cotelor de TVA (în momentul decembrie 2016).
În modelul relaţional, relaţiile sunt utilizate pentru a păstra informaţii despre obiectele
care vor fi reprezentate în baza de date. Liniile tabelului corespund înregistrărilor
individuale, iar coloanele corespund atributelor. Atributele pot apărea în orice ordine,
relaţia rămânând neschimbată, adică păstrând acelaşi înţeles.
modelului relaţional, acest lucru fiind precizat cu claritate în regula R4. (Regula
reprezentării informaţiei necunoscute) [CON01].
Tabelele de adevăr în logica trivalentă (în care avem valorile True, False, Null) ale
operatorilor logici NOT, OR şi AND sunt:
Definiţia 2.4. Schema relaţiei (schema relaţională) este un element invariant în timp şi
reprezintă mulţimea numelor atributelor corespunzătoare unei relaţii. Pentru fiecare
atribut se precizează domeniul asociat.
Definiţia 2.5. Schema bazei de date relaţionale este formată de mulţimea tuturor
schemelor relaţionale corespunzătoare unei aplicaţii, iar conţinutul curent al relaţiilor la
un moment dat se numeşte bază de date relaţională.
Definiţia 2.6. Cardinalul unei relaţii reprezintă numărul de tupluri din relaţie.
Definiţia 2.7. Gradul unei relaţii (aritatea relaţiei) este numărul de atribute din relaţie.
Definiţia 2.8. Relaţia virtuală (relaţie derivată, viziune) este o relaţie definită implicit pe
baza altor relaţii, prin intermediul unei expresii relaţionale. Stabilirea efectivă a
tuplurilor care compun relaţia virtuală se realizează prin evaluarea expresiei relaţionale
în momentul în care utilizatorul apelează la această relaţie.
Definiţia 2.9. Două relaţii sunt compatibile cu reuniunea dacă au acelaşi grad (aritate) şi
atributele corespondente iau valori pe aceleaşi domenii.
Definiţia 2.10. Cheia unei relaţii reprezintă ansamblul minimal de atribute cu rol de
identificare unică a tuplurilor dintr-o relaţie. Într-o relaţie pot exista mai multe atribute /
combinaţii de atribute cu rol de identificare unică a tuplurilor, există deci mai multe chei
candidate. Dintre aceste chei candidate se alege cheia primară, celelalte devin chei
secundare sau alternante. Orice relaţie are cel puţin o cheie.
Baze de date relaţionale 49
Identificarea unei chei candidat necesită cunoaşterea înţelesului din lumea reală a
atributului sau atributelor implicate, astfel încât să se poată stabili dacă sunt posibile
duplicate. Numai prin utilizarea acestor informaţii semantice, putem fi siguri că o
combinaţie de atribute constituie o cheie candidat.
Definiţia 2.11. Cheia simplă este cheia formată dintr-un singur atribut, iar cheia compusă
este formată din mai multe atribute.
Definiţia 2.13. Domeniul primar este domeniul pe care este definită cheia primară.
Definiţia 2.14. Cheia externă este un atribut/grup de atribute dintr-o relaţie, ale
cărui/căror valori sunt definite pe domeniul primar al altei relaţii.
Definiţia 2.15. Relaţia primară. O relaţie RP este primară, dacă există o altă relaţie R,
legată semantic de ea, care are drept cheie externă, cheia primară a relaţiei considerate
(RP).
Exemple
1. Fie relaţia STUDENT [ NrMatricol, Nume, Facultate, Grupa, Sectia, CNP, Adresa]
Atributele NrMatricol şi CNP au rol de identificare unică a tuplurilor din relaţie;
reprezintă chei candidate. Alegem drept cheie primară atributul NrMatricol, care are
domeniul format din 4 caractere numerice şi este mai uşor de operat. Atributul CNP,
format din 13 caractere numerice devine cheie secundară (alternantă).
Atributele (NrMatricol, Nume) formează o supercheie - are rol de identificare unică a
tuplurilor din relaţie, dar nu este ireductibilă, deoarece atributul NrMatricol, singur,
realizează identificarea unică a tuplurilor.
La limită, se poate considera o supercheie şi mulţimea tuturor atributelor din relaţie:
(NrMatricol, Nume, Facultate, Grupa, Sectia, CNP, Adresa).
Pentru acest exemplu prezentăm în schema legăturilor dintre tabelele bazei de date:
PRODUSE
CONTRACT
# IDprodus
# NrContract Denumire
• IDprodus UM
• IDclient
Data
Cantitate CLIENTI
PretUnitar
# IDclient
Nume
CIF
Adresa
Cont
Tel
Email
1
Alumnus (elev în limba latină, alumni la plural) este un fost elev sau student al unei instituţii de
învăţământ.
52 Baze de date
3.1. INTRODUCERE
Interogarea (query) este operaţia prin care se obţin datele dorite dintr-o bază de date,
selectate conform unor criterii. Deoarece aceasta este cea mai importantă operaţie,
limbajele de manipulare a datelor sunt denumite şi limbaje de interogare.
3.2.1. UNION. Reuniunea a două relaţii R1 şi R2, compatibile cu reuniunea, este dată de
mulţimea tuplurilor care aparţin fie relaţiei R1, fie relaţiei R2, fie ambelor relaţii.
Tuplurile care aparţin ambelor relaţii se introduc în reuniune o singură dată,
adică nu se duplică.
R3
R1 R2
Sintaxa:
R3 = UNION (R1, R2), rezultatul R3 este o relaţie.
Exemplu:
R1 A B R2 A B R3 A B
a b d f a b
c d x y c d
x y h r x y
c d d f
h r
Algebra relaţională 55
R3 R1 - R2 t | t ∈R1 si t R2
R3
R1 R2
Sintaxa:
R3 = DIFFERENCE (R1, R2), rezultatul R3 este o relaţie.
Exemplu:
R1 A B R2 A B R3 A B
a b d f a b
c d x y
x y h r
c d
R3 R1 R2 t | t ∈R1 si t ∈R2
R3
R1 R2
56 Baze de date
Sintaxa:
R3 = INTERSECT (R1, R2), rezultatul R3 este o relaţie.
Exemplu:
R1 A B R2 A B R3 A B
a b d f c d
c d x y x y
x y h r
c d
3.2.4. PRODUCT. Produsul cartezian a două relaţii R1 şi R2, produce o nouă relaţie care
are ca atribute, reuniunea atributelor din cele două relaţii (atributele comune
vor fi luate separat, calificările fiind făcute cu numele relaţiei), iar fiecare
element din R1 se combină (concatenează) cu fiecare element din R2.
Relaţia produs cartezian rezultată are cardinalul egal cu: card (R1) x card (R2).
Astfel, dacă relaţia (tabela) R1 are 1.000 de tupluri (linii) iar relaţia (tabela) R2 are
5.000 de tupluri (linii), rezultă în urma produsului cartezian o relaţie (tabelă) cu
5.000.000 de tupluri (linii).
R3 R1 R2 t 1 ,t 2 | t 1 ∈R1 si t 2 ∈R2
R3
R1 R2
Sintaxa:
R3 = PRODUCT (R1, R2), rezultatul R3 este o relaţie.
Avem:
card (R3) = card (R1) x card (R2) şi
grad (R3) = grad (R1) + grad (R2)
Exemplu:
Algebra relaţională 57
R1 A B R2 A R3 R1. A B R2.A
a b a a b a
c d d c d a
x y x y a
a b d
c d d
x y d
3.2.5. SELECT. Selecţia este o operaţie unară de restricţie care selectează din tuplurile
relaţiei R, acele tupluri care satisfac o condiţie specificată. Condiţia este o
expresie logică (predicat) specificată asupra atributelor relaţiei R. Condiţia poate
cuprinde nume de atribute, constante, operatori logici (and, or, not), operatori
aritmetici de comparare (<, >, =, ≤, ≥, ≠).
S conditie R t | t ∈R si t A
condiţie
Sintaxa:
S = SELECT (R; condiţie), rezultatul S este o relaţie.
R A B C S A B C
x y z t x a
t x a z x b
z x b
c u w
Observaţii.
1. Această operaţie nu trebuie confundată cu instrucţiunea SELECT, care este
instrucţiunea generală de interogare din limbajele de manipulare a datelor.
2. În termenii limbajului de interogare SQL, operaţia de selecţie realizează o
decupare pe orizontală a tabelei operand R.
3. Cardinalul relaţiei rezultat S este mai mic sau egal decât cardinalul relaţiei R.
Egalitatea poate apare în situaţia în care condiţia este adevărată pentru toate
tuplurile din relaţie.
3.2.6. PROJECT. Proiecţia este o operaţie unară de restricţie prin care se selectează din
relaţia R, numai acele atribute specificate explicit în cadrul operaţiei. Relaţia
rezultată P va avea ca atribute submulţimea selectată.
lista atribute
Sintaxa:
P = PROJECT (R; lista atribute), rezultatul P este o relaţie.
Exemplu: P A ,C R
În limbajul algebrei relaţionale avem: P = PROJECT ( R; A,C )
Algebra relaţională 59
R A B C P’ A C P A C
x u x x x x x
z x y z y z y
x z x x x
z y y z y
x t x x x
Observaţii.
1. Dacă în lista atributelor de proiecţie există o cheie a relaţiei operand R, atunci
relaţia rezultat are toate tuplurile distincte, adică relaţiile R şi P vor avea acelaşi
cardinal.
2. Dacă în lista atributelor de proiecţie nu există o cheie a relaţiei operand R, atunci
în relaţia rezultat P pot apare tupluri duplicate care vor fi eliminate. În exemplul
prezentat, după eliminarea tuplurilor duplicate din relaţia intermediară P’ s-a
obţinut relaţia P care conţine două tupluri distincte.
3. Relaţia rezultat P are gradul k, dat de numărul atributelor din listă.
4. În termenii limbajului de interogare SQL, operaţia de proiecţie realizează o
decupare pe verticală a tabelei operand R.
3.2.6.1. EXTENDED – PROJECT. Proiecţia extinsă este o operaţie unară de restricţie prin
care se selectează din relaţia R, atributele specificate explicit în cadrul
operaţiei. Relaţia rezultată P are ca atribute submulţimea selectată, la fel ca la
operatorul PROJECT şi poate conţine în plus:
- atribute noi rezultate din operaţii aritmetice efectuate asupra atributelor din
relaţia R; aceste operaţii vor fi prezentate explicit în lista de atribute;
- apariţii multiple ale unor atribute din relaţia R.
Sintaxa:
P = EXTENDED-PROJECT (R; lista atribute), rezultatul P este o relaţie.
R A B C P D A1 B A2
1 x 20 20 1 x 1
2 z 5 10 2 z 2
3 y 30 90 3 y 3
4 x 15 60 4 x 4
3 u 5 15 3 u 3
60 Baze de date
3.2.7. JOIN (THETA-JOIN). Joncţiunea este o operaţie definită pe două relaţii R1 şi R2.
Relaţia rezultat R3 va fi construită prin concatenarea unor tupluri din R1 cu
tupluri din R2 care satisfac o anumită condiţie (condiţia de joncţiune - )
specificată explicit în cadrul relaţiei. Condiţia de joncţiune - este o expresie
logică (predicat) specificată asupra atributelor relaţiilor R1 şi R2. Condiţia de
joncţiune - poate cuprinde nume de atribute, constante, operatori logici (and,
or, not), operatori aritmetici de comparare (<, >, =, ≤, ≥, ≠).
R1 R2 R1 R2
R3
θ
R1 R2
Sintaxa:
R3 = THETA - JOIN (R1, R2; θ - expresie), rezultatul R3 este o relaţie.
Exemplu:
R3 R1 R2 unde : R1 .A R2 .A
În limbajul algebrei relaţionale avem: R3 = THETA - JOIN ( R1, R2; R1.A > R2.A )
R1 A B C R2 D E A R3 R1. A B C D E R2. A
a x c 0 11 a b y c 0 11 a
b y c 1 13 a b y c 1 13 a
d z g 3 11 a b y c 3 11 a
4 11 d d z g 0 11 a
6 12 d d z g 1 13 a
7 13 c d z g 3 11 a
d z g 7 13 c
3.2.7.1. EQUI – JOIN. Joncţiunea de egalitate este un caz particular al lui THETA – JOIN ,
când este egalitate.
Sintaxa:
R3 = EQUI - JOIN (R1, R2; θ - expresie) , rezultatul R3 este o relaţie.
Exemplu:
R3 R1 R2 unde : R1 .A R2 .A
În limbajul algebrei relaţionale avem: R3 = EQUI - JOIN ( R1, R2; R1.A > R2.A )
R1 A B C R2 D E A R3 R1. A B C D E R2. A
a x c 0 11 a a x c 0 11 a
b y c 1 13 a a x c 1 13 a
d z a 3 11 a a x c 3 11 a
4 11 d d z a 4 11 d
6 12 d d z a 6 12 d
7 13 c
Joncţiunea naturală este joncţiunea cea mai utilizată în practică şi poate fi definită cu
ajutorul operaţiilor de bază: proiecţie, selecţie şi produs cartezian.
Dacă se notează cu:
- condiţia de egalitate între valorile atributelor din intersecţia schemelor relaţiilor
R1 şi R2 (coloanele comune),
atr - reuniunea atributelor celor două scheme (atributele cu acelaşi nume se iau o
singură dată),
atunci:
R3 R1 R2 atr R1 R2
Sintaxa:
R3 = NATURAL - JOIN (R1, R2; atribut(e) joncţiune*), rezultatul R3 fiind o relaţie.
* pentru mărirea clarităţii va apare atributul / atributele de joncţiune.
62 Baze de date
Exemple:
1. Se dau relaţiile: R1 A , B ,C şi R2 B ,C , D
şi condiţia R1 .B R2 .B and R1 .C R2 .C .
Avem atr A , B ,C , D .
R1 A B C R2 B C D R3 A B C D
a b c b c d a b c d
d b c b c e a b c e
b b f a d b d b c d
c a d d b c e
c a d b
2. Se dau relaţiile: R1 A , B ,C şi R2 D , E , A
şi condiţia R1 .A R2 .A
Avem atr A , B ,C , D , E .
R1 A B C R2 D E A R3 A B C D E
a x c 0 11 a a x c 0 11
b y c 1 13 a a x c 1 13
d z a 3 11 a a x c 3 11
4 11 d d z a 4 11
6 12 d d z a 6 12
7 13 c
Observaţie.
Selecţia este un caz particular de joncţiune naturală a unei relaţii cu o relaţie constantă.
Înţelegem prin relaţie constantă o relaţie care are un singur tuplu, eventual redus la o
singură valoare.
Sintaxa:
R3 = SEMI-JOIN (R1, R2; θ - expresie), rezultatul R3 fiind o relaţie.
R3
θ
R1 R2
Exemplu.
R3 R1 R2 unde : R1 .A R2 .A
R1 A B C R2 D E A R3 A B C
a x c 0 11 a a x c
b y c 1 13 a a x c
d z a 3 11 a a x c
4 11 d d z a
6 12 d d z a
7 13 c
Observaţie.
Considerăm joncţiunea naturală dintre R1 A , B1 şi R2 B2 ,C unde B1 şi B2 sunt
atributele de joncţiune.
3.2.7.4. OUTER – JOIN. Joncţiunea dintre două relaţii R1 şi R2 poate conduce la pierdere
de tupluri, dacă relaţiile participante la joncţiune nu au proiecţii identice pe
atributul de joncţiune, adică nu au aceleaşi valori în relaţiile care se joncţionează.
Joncţiunea externă (R3) conţine joncţiunea naturală dintre R1 şi R2, la care se
adaugă tuplurile din R1 şi R2, care nu au participat la joncţiune. În aceste tupluri
se va atribui valorea null pentru atributele relaţiei corespondente.
Sintaxa:
R3 = OUTER-JOIN (R1, R2; atribut(e) joncţiune), rezultatul R3 fiind o relaţie.
64 Baze de date
R3
ext
R1 R2
Exemplu.
R3 R1 ext R2
R1 A B C R2 D E A R3 A B C D E
a x c 0 11 a a x c 0 11
b y c 1 13 a a x c 1 13
d z a 3 11 a a x c 3 11
4 11 d d z a 4 11
6 12 d d z a 6 12
7 13 c b y c null null
c null null 7 13
Observaţii.
În urma joncţiunii naturale se pierd informaţiile din tuplurile < b, y, c > din R1 şi
< 7, 13, c > din R2. Aceste tupluri se adaugă în cazul joncţiunii externe şi se completează
cu null pe atributele relaţiei corespondente. Acest tip de joncţiune externă se mai
numeşte FULL OUTER-JOIN.
Există şi LEFT OUTER-JOIN în care se adaugă numai tuplurile din R1 care nu au participat
la joncţiune:
R1 A B C R2 D E A R3 A B C D E
a x c 0 11 a a x c 0 11
b y c 1 13 a a x c 1 13
d z a 3 11 a a x c 3 11
4 11 d d z a 4 11
6 12 d d z a 6 12
7 13 c b y c null null
Analog, se introduce şi RIGHT OUTER-JOIN în care se adaugă numai tuplurile din R2 care
nu au participat la joncţiune. Pentru exemplul considerat se obţine:
Algebra relaţională 65
R1 A B C R2 D E A R3 A B C D E
a x c 0 11 a a x c 0 11
b y c 1 13 a a x c 1 13
d z a 3 11 a a x c 3 11
4 11 d d z a 4 11
6 12 d d z a 6 12
7 13 c c null null 7 13
ALGEBRA RELAŢIONALĂ (2)
3.2.8. DIVISION. Diviziunea este o operaţie definită pe două relaţii care au schemele:
R1 A1 , A2 ,..., An şi R2 A p1 , A p2 ,..., An .
Relaţia rezultat R3 R1 R2 are schema R3 A1 , A 2 ,..., A p şi este formată din
toate tuplurile care, concatenate cu fiecare tuplu din R2 , dau întotdeauna un
tuplu din R1.
Notăm:
ATR1 A1 , A2 ,..., Ap1 , AP2 ,..., An
ATR2 Ap1 , AP2 ,..., An
Definiţia 1. t R1 R2 dacă t 2 R2 t 1 R1 , astfel încât ATR1 ATR2 t 1 t şi
ATR2 t 1 t 2 .
sau altfel spus:
R1 R2 t | t 2 R2 t ,t 2 R1 ,
unde am notat prin <…> un tuplu dintr-o relaţie.
R1 R2 ATR1 ATR2 R1 ATR1 ATR2 ATR1 ATR2 R1 R2 R1
Operatorul este definit: Relaţie x Relaţie → Relaţie
Sintaxa:
R3 = DIVISION (R1, R2) , rezultatul R3 este o relaţie.
R3
R1 R2
1
În limbajul algebrei relaţionale, diviziunea a două relaţii se poate exprima conform
definiţiei 2, astfel:
Într-o formă agregată, exprimarea pas cu pas de mai sus, se poate scrie:
R = DIVISION (R1, R2) = DIFFERENCE (PROJECT (R1; A1, A2,…, Ap), PROJECT (DIFFERENCE
(PRODUCT (PROJECT (R1; A1, A2,…, Ap), R2), R1); A1, A2,…, Ap))
Rezolvare.
Construim relaţia R2 P care va conţine două tupluri: <P3> şi <P4>.
Codurile angajaţilor care lucrează la proiectele P3 şi P4 sunt date de rezultatul diviziunii
R1 R2 .
R1 K P R2 P
17 P1 P3
17 P2 P4
17 P3
17 P4
29 P1
29 P3
53 P3
53 P4
80 P3
2
Q1 K S K P
17 17 P3
29 29 P3
53 53 P3
80 80 P3
17 P4
29 P4
53 P4
80 P4
Pasul 3. Calculăm T S R1
Pasul 4. Calculăm Q2 ATR1 ATR2 T
T K P Q2 K
29 P4 29
80 P4 80
Pasul 5. Calculăm R1 R2 Q1 Q2
R1 : R2 K
17
53
Rezultatul interogării: angajaţii cu codul <17> şi <53> lucrează simultan în proiectele
<P3> şi <P4>.
3.2.9. RENAME. Redenumirea este un operator care crează o nouă schemă unei relaţii.
Dată relaţia R 2 cu schema relaţiei R2 B1 , B 2 ,..., Bn operatorul dă o nouă
schemă relaţiei cu numele de R1 :
R1 : R1 A1 ,A2 ,...,An R2 sau în notaţie simplificată R1 A1 , A2 ,..., An : R2 .
R1 va fi o relaţie cu atributele A1 , A2 ,..., An şi aceleaşi tupluri ca şi relaţia R 2 .
Operatorul RENAME permite redenumirea numelui unui atribut pentru a putea
aplica operatorii din teoria mulţimilor. Operatorul RENAME modifică doar
numele atributelor, conţinutul tuplurilor din relaţie rămâne neschimbat.
Sintaxa:
R1 = RENAME (R2; A1, A2,..., An) , rezultatul R1 este o relaţie.
sau R1 = RENAME (R2), dacă atributele păstrează acelaşi nume.
3
R1
A1, A2,..., An
R2
Exemplu.
Se dă relaţia R 2 , cu schema R2 B1 , B 2 , B 3. Aplicăm operatorul pentru a obţine
relaţia R1 având schema R1 A1 , B2 , A3 .
Notăm aceasta prin: R1 A1 , B2 , A3 : R2 sau R1 = RENAME (R2; A1, B2, A3).
R2 B1 B2 B3 R1 A1 B2 A3
a x c a x c
b y c b y c
d z a d z a
Fie relaţia CARTE [titlu, an], unde atributul an reprezintă anul apariţiei cărţii. Să se afle
titlul celei mai vechi cărţi.
Rezolvare.
Relaţia rezultat este dată de:
4
T = THETA-JOIN (C1, C2; C1.an>C2.an)
P2 = PROJECT (S; C1.titlu)
R = DIFFERENCE (P1, P2)
CARTE titlu an
Analiza 2005
Modelarea 1999
Proiectarea 2015
Implementarea 2011
Dorim să determinăm titlul celei mai vechi cărţi.
P1 titlu
Analiza
Modelarea
Proiectarea
Implementarea
C1 titlu an C2 titlu an
Analiza 2005 Analiza 2005
Modelarea 1999 Modelarea 1999
Proiectarea 2015 Proiectarea 2015
Implementarea 2011 Implementarea 2011
5
Proiectarea 2015 Proiectarea 2015
Proiectarea 2015 Implementarea 2011
Implementarea 2011 Analiza 2005
Implementarea 2011 Modelarea 1999
Implementarea 2011 Proiectarea 2015
Implementarea 2011 Implementarea 2011
P2 C1.titlu
Analiza
Proiectarea
Implementarea
R titlu
Modelarea
Observaţie.
În a doua variantă, paşii 3 şi 4 (produsul cartezian şi selecţia) sunt înlocuiţi de joncţiunea
T = THETA-JOIN (C1, C2; C1.an>C2.an), iar pasul 5 devine: P2 = PROJECT (T; C1.titlu).
3.2.10. RESTRICT. Restricţia este un operator care crează două relaţii plecând de la o
relaţie R şi o condiţie. Se obţin relaţiile: R1 care conţine tuplurile relaţiei R care
verifică condiţia şi R 2 care conţine tuplurile relaţiei R care nu verifică condiţia.
Acest operator este considerat o extensie a algebrei relaţionale.
6
R1 R2
R
Sintaxa:
R1, R2 = RESTRICT (R; condiţie), rezultatul este format din relaţii R1 şi R2.
input R [ A1, A2 ]
τ (R) = RENAME (R; A3, A4 )
while τ (R) se modifică
do T = THETA-JOIN (R, τ (R); A2 = A3)
P = PROJECT (T; A1, A4)
S = RENAME (P; A3, A4 )
τ (R) = UNION (τ (R), S)
endwhile
output τ (R) {închiderea tranzitivă a relaţiei R}.
7
Sintaxa:
τ(R) = CLOSE (R), rezultatul este relaţia iniţială la care se adaugă tuplurile
rezultate prin tranzitivitate.
V A
PARINTI parinte copil
I D
O D
D R
R V
R A
8
ARBORE ascendent descendent
I D
O D
D R
R V
R A
I R
O R
D V
D A
I V
I A
O V
O A
Aplicarea în continuare a ciclului de operaţii nu mai adaugă niciun tuplu relaţiei ARBORE,
deci procesul de determinare a închiderii tranzitive pentru relaţia PARINTE s-a încheiat.
Observăm că după primul ciclu de operaţii s-au adăugat tuplurile care conţin “nepoţii”,
iar după cel de-al doilea ciclu de operaţii s-au adăugat tuplurile care conţin “strănepoţii”.
La operaţiile descrise anterior se pot adăuga operaţii de calcul pe relaţii. Aceste operaţii
sunt justificate de numeroasele interogări (cereri) mai complexe care necesită operaţii
de calcul. Operaţiile de calcul sunt implementate în toate limbajele de interogare. Aceşti
operatori de calcul formează deci o extensie a operatorilor de bază şi nu pot fi exprimaţi
cu ajutorul acestora.
3.3.1. COUNT - este o operaţie care permite numărarea tuplurilor dintr-o relaţie
(liniilor dintr-o tabelă) care au aceeaşi valoare pe atributul considerat (sau
aceleaşi valori pe atributele considerate). Relaţia rezultantă va conţine numai
atributul (atributele) de regrupare Xi , iar tuplurile vor fi formate din valorile
distincte şi numărul de apariţii.
Notăm:
T COUNTX 1 ,..., X n ( R ) , unde X1,...,Xn sunt atributele de regrupare.
9
T
Count
Operaţia COUNT
Exemplu.
Count(R) Count
6
Sintaxa:
R1 = COUNT (R; X1, X2, ..., Xn), rezultatul R1 este o relaţie.
Relaţia rezultată are schema R1 X 1 , X 2 ,..., X n ,Count .
3.3.2. SUM – este o operaţie care permite efectuarea sumei valorilor atributului Y
pentru fiecare din valorile diferite ale atributelor de regrupare X1,...,Xn . Atributul
Y trebuie să fie numeric.
Notăm:
T SUM X 1 ,..., X n ( R ,Y ) , unde X1,...,Xn sunt atributele de regrupare.
10
Dacă nu este precizat niciun atribut de regrupare, operaţia SUM va determina suma
valorilor atributului Y.
Sum
Operaţia SUM
Exemplu.
3.3.3. MEAN – este o operaţie care permite efectuarea mediei aritmetice a valorilor
atributului Y pentru fiecare din valorile diferite ale atributelor de regrupare
X1,...,Xn . Atributul Y trebuie să fie numeric.
Notăm:
T MEAN X 1 ,...,X n ( R ,Y ) , unde X1,...,Xn sunt atributele de regrupare.
11
Dacă nu este precizat niciun atribut de regrupare, operaţia MEAN va determina media
aritmetică a valorilor atributului Y din toată relaţia.
Mean
...
Operatorul MEAN
Exemplu.
Sintaxa:
R1 = MEAN (R, Y; X1, X2, ..., Xn), rezultatul R1 este o relaţie;
Relaţia rezultată are schema R1 X 1 , X 2 ,..., X n , Mean .
3.3.4. MAX sau MIN - este o operaţie care permite determinarea valorii maxime /
minime a atributului Y pentru fiecare din valorile diferite ale atributelor de
regrupare X1,...,Xn . Atributul Y trebuie să fie numeric.
Notăm:
T MAX X 1 ,...,X n ( R ,Y ) , unde X1,...,Xn sunt atributele de regrupare.
T MIN X 1 ,...,X n ( R ,Y ) , unde X1,...,Xn sunt atributele de regrupare.
12
Dacă nu este precizat niciun atribut de regrupare, operaţia MAX (MIN) va determina
maximul (minimul) valorilor atributului Y din toată relaţia.
T
Max
Sintaxa:
R1 = MAX (R, Y; X1, X2, ..., Xn), rezultatul R1 este o relaţie;
Relaţia rezultată are schema R1 X 1 , X 2 ,..., X n , Max .
13
3.4. PROPRIETĂŢILE OPERATORILOR ALGEBREI RELAŢIONALE
2. Asociativitatea
Operaţiile de reuniune (UNION) , intersecţie (INTERSECT) şi produs cartezian
(PRODUCT) sunt asociative:
R1 R2 R2 R1 R2 R3
R1 R2 R2 R1 R2 R3
R1 R2 R2 R1 R2 R3 .
3. Compunerea
Compunerea proiecţiilor (PROJECT):
A1,A2 ,...,Am B1,B2 ,...,Bn R A1,A2 ,,...,Am R
unde A1, A2 ,..., Am B1, B2 ,..., Bn.
4. Comutarea
Comutarea selecţiei cu proiecţia:
A1,A2 ,...,Am conditie R conditie A1,A2 ,...,Am R
unde atributele din conditie aparţin mulţimii A1, A2 ,..., Am.
15
Comutarea proiecţiei cu joncţiunea:
Dacă A1, A2 ,..., Am , D sunt atribute din R1 , B1, B2 ,..., Bn, D sunt atribute din R 2 şi
: R1 .D R2 .D , atunci:
A1,A2 ,...,Am,B1,B2 ,...,Bn ,D R1 R2 A1,A2 ,...,Am,D R1 B1,B2 ,...Bn ,D R2
Din proprietăţile operatorilor algebrei relaţionale rezultă mai multe reguli care pot fi
aplicate pentru a realiza optimizarea interogărilor [W1]:
R1. Operaţiile de selecţie se execută cât mai repede, deoarece reduc dimensiunile
relaţiilor (numărul de tupluri).
R2. Se recomandă înlocuirea operaţiei de produs cartezian cu operaţia de joncţiune,
pentru a nu mări inutil numărul de tupluri din relaţia rezultată. În cazul produsului
cartezian:
R R1 R2 , numărul numărul de tupluri (linii) din relaţia (tabela) rezultată este:
card R card R1 card R2 .
R3. În cazul unor operaţii succesive de joncţiune, se recomandă să se execute prima cea
care are condiţia cea mai puternică (cea mai restrictivă). Aceasta va conduce la
micşorarea numărului de tupluri din relaţia rezultată. Stabilirea celei mai puternice
condiţii poate rezulta din analiza statistică a datelor conţinute în tabelele bazei de date.
R4. În cazul relaţiilor cu grad mare, adică un număr mare de atribute (coloane) se poate
reduce numărul acestora prin operaţia de proiecţie. Un atribut dintr-o relaţie care nu
este utilizat în operaţiile ulterioare şi nici nu face parte din raportul final poate fi
eliminat. Operaţiile de proiecţie se pot executa la început pentru a reduce gradul
relaţiilor implicate în interogare.
Soluţia 1.
R1 = PRODUCT (FURNIZORI, FACTURI_PRIMITE)
R2 = SELECT (R1; FURNIZORI.cod_furnizor = FACTURI_PRIMITE.cod_furnizor)
R3 = SELECT (R2; (data > 29.11.2016) and (cod_furnizor = ’F171’))
R4 = PROJECT (R3; nr_factura, nume_furnizor, data, valoare)
16
Observaţie. Produsul cartezian al celor două relaţii generează o nouă relaţie (R1) cu
200 x 3000 = 600000 de tupluri.
Soluţia 2.
R1 = NATURAL JOIN (FURNIZORI, FACTURI_PRIMITE; cod_furnizor)
R2 = SELECT (R1; (data > 29.11.2016) and (cod_furnizor = ’F171’))
R3 = PROJECT (R2; nr_factura, nume_furnizor, data, valoare)
Observaţie. Relaţia R1 rezultat al joncţiunii are 3000 de tupluri, iar relaţia R2 rezultată
după operaţia de selecţie are, conform presupunerii, 20 de tupluri.
Soluţia 3.
R1 = SELECT (FACTURI_PRIMITE; (data > 29.11.2016) and (cod_furnizor = ’F171’))
R2 = NATURAL JOIN (FURNIZORI, R1; cod_furnizor)
R3 = PROJECT (R2; nr_factura, nume_furnizor, data, valoare)
Observaţie. Conform presupunerii făcute, relaţia R1 rezultat al selecţiei va avea 20 de
tupluri, iar relaţia R2 obţinută după operaţia de joncţiune va avea tot 20 de tupluri (linii).
Interogările exprimate sub forma unei secvenţe de operaţii ale algebrei relaţionale pot fi
reprezentate printr-un arbore relaţional (relational tree), numit şi arbore de interogare.
Nodurile arborelui corespund reprezentărilor grafice ale operaţiilor prezentate (§3.2 şi
§3.3), iar arcele corespund fluxurilor de date între operaţii. Frunzele arborelui sunt
operanzii (relaţiile), iar rădăcina arborelui (o relaţie) reprezintă rezultatul interogării. Aşa
după cum am prezentat în §3.5 trei soluţii pentru interogarea formulată, pot exista mai
mulţi arbori relaţionali echivalenţi pentru o interogare.
Mai mulţi arbori echivalenţi pot fi deduşi dintr-un arbore dat pe baza proprietăţilor
operatorilor algebrei relaţionale. Astfel, comutarea selecţiei cu joncţiunea, prezentată în
§3.4, este una din cele mai importante transformări de optimizare. Această
transformare cunoscută sub numele restriction pushing, realizează “împingerea”
operaţiei de selecţie la nivelele inferioare ale arborelui de interogare.
Proprietăţile operatorilor algebrei relaţionale permit ca în unele situaţii să nu fie necesar
să se aştepte rezultatul operaţiei precedente pentru a executa operaţia următoare.
Operatorii situaţi pe ramuri distincte ale arborelui pot să fie executaţi în paralel, în mod
independent. Reprezentarea prin arbori realaţionali pune în evidenţă posibilităţile de
calcul paralel, din care rezultă optimizarea interogărilor în acest context.
Prezentăm în continuare arborii relaţionali construiţi pentru cele trei soluţii, prezentate
în paragraful anterior, de rezolvare a interogării Ce facturi s-au primit de la furnizorul cu
codul F171 după 29.11.2016?
Pentru o urmărire mai uşoară a echivalenţei arborele relaţional limbajul algebrei
relaţionale, reluăm soluţiile prezentate în §3.5 de rezolvare a interogării.
17
Soluţia 1 (limbajul algebrei relaţionale)
R4
nr_factura, nume_furnizor,
data, valoare
R3
(data > 29.11.2016) and
(cod_furnizor = ’F171’)
R2
FURNIZORI.cod_furnizor =
FACTURI_PRIMITE.cod_furnizor
R1
FURNIZORI FACTURI_PRIMITE
În ipotezele:
I1. cardinal (FURNIZORI) = 200,
I2. cardinal (FACTURI PRIMITE) = 3000,
I3. după 29.11.2016 s-au primit 20 de facturi de la furnizorul cu codul ‘F171’.
Vom avea:
cardinal (R1) = 600000 gradul relaţiei R1 = 6
cardinal (R2) = 3000 gradul relaţiei R2 = 6
cardinal (R3) = 20 gradul relaţiei R3 = 6
cardinal (R4) = 20 gradul relaţiei R4 = 4
18
Soluţia 2 (limbajul algebrei relaţionale)
R3
nr_factura, nume_furnizor,
data, valoare
R2
R1
cod_furnizor
FURNIZORI FACTURI_PRIMITE
19
Soluţia 3 (limbajul algebrei relaţionale)
R3
nr_factura, nume_furnizor,
data, valoare
R2
cod_furnizor R1
FURNIZORI
(data > 29.11.2016) and
(cod_furnizor = ’F171’)
FACTURI_PRIMITE
20
CAPITOLUL 4
LIMBAJUL SQL
4.1. INTRODUCERE
Instrucţiunea CREATE TABLE este utilizată pentru a crea o nouă tabelă. Această
comandă este utilizată cu precădere dacă mediul de lucru nu posedă instrumente
pentru crearea şi modificarea tabelelor într-o manieră mai facilă, aşa cum are spre
exemplu Microsoft Access.
vom avea:
domeniilor unor câmpuri, precum şi adăugarea sau ştergerea unor constrângeri ale
tabelei.
Exemplul 2. Pentru a adăuga în tabela ANGAJATI1 un câmp nou, numit bonus, de tip
integer vom avea:
Exemplul 4. Dacă dorim ştergerea din tabela ANGAJATI1 a câmpului numit bonus vom
avea:
SELECT este instrucţiunea de interogare a datelor din limbajul SQL. Utilizarea acestei
instrucţiuni generează o tabelă virtuală, numită vedere (view, query). În query se
regăsesc toate informaţiile dorite din una sau mai multe tabele ale bazei de date. Un
query se recrează de fiecare dată când este apelat, pe baza definiţiei stocate în baza de
date.
unde: col1, col2, ... , coln – sunt coloanele (atributele) dorite din tabelele specificate în
clauza FROM;
tab1, tab2, ... , tabm - sunt tabelele din care se face selecţia.
Clauza SELECT defineşte coloanele tabelei rezultat. Rezultatul selecţiei este format din
coloanele col1, col2, ... , coln cu datele rezultate din produsul cartezian al tabelelor tab1,
tab2, ... ,tabm pentru care se respectă eventuala condiţie specificată în clauza WHERE.
Observăm că doar clauzele SELECT şi FROM sunt obligatorii, celelalte reprezentând
opţiuni.
În termenii algebrei relaţionale, clauzele SELECT şi FROM realizează produsul cartezian al
mai multor tabele, urmat de o proiecţie pe coloanele (atributele) dorite din tabelele
specificate. Următoarele secvenţele sunt echivalente:
SELECT col1, col2, ... , coln R1 = PRODUCT (tab1, tab2, ... , tabm)
FROM tab1, tab2, ... , tabm R2 = PROJECT (col1, col2, ... , coln)
Tabela ANGAJATI
Tabela DEPARTAMENTE
Exemplul 6. Dacă dorim afişarea tuturor datelor din tabelă vom avea:
Exemplul 7. Dacă dorim afişarea tuturor angajaţilor din localitatea Braşov care au salariul
mai mare de 1500 vom avea:
Exemplul 8. Dacă dorim afişarea tuturor persoanelor angajate după data de 01.01.2015,
vom avea:
SELECT count(*)
FROM angajati;
Exemplul 10. Dacă dorim afişarea mediei aritmetice a salariului brut vom avea:
SELECT AVG(sal_brut)
FROM angajati;
Observaţie. În instrucţiunea SELECT poate să nu apară clauza FROM, dacă datele nu sunt
conţinute de nicio tabelă. În acest caz, instrucţiunea SELECT conţine o listă de expresii pe
care le calculează.
Exemplul 11. Dacă dorim afişarea rezultatului produsului 50x25 vom avea:
SELECT 50*25;
Dacă se doreşte, în tabela rezultat se pot redenumi coloanele sau se pot denumi
anumite expresii, utilizând clauza AS.
Exemplul 12. Dacă dorim afişarea rezultatului produsului 50x25, iar numele tabelei să fie
REZULTAT vom avea:
Clauza FROM este obligatorie, dacă în clauza SELECT se doreşte afişarea unor coloane
din tabele. Dacă se doreşte selectarea unor coloane din tabele diferite, acestea vor fi
toate enumerate în clauza FROM, despărţite prin virgulă. În cazul în care numele unui
câmp apare în mai multe tabele, atunci pentru a se cunoaşte din ce tabelă se doreşte
respectivul câmp, în clauza FROM, calificarea câmpului se va face prin specificarea
numelui tabelei, de forma:
nume_tabelă.nume_câmp
În clauza WHERE se specifică toate condiţiile necesare pentru datele din tabela rezultat.
În clauza WHERE se pot utiliza şi operatori logici (AND, OR, NOT) şi paranteze.
Exemplul 13. Dacă dorim afişarea angajaţilor din Brasov sau Predeal vom avea:
Clauza ORDER BY face ordonarea liniilor din tabela rezultat după coloana ce urmează
clauzei. Implicit, ordonarea se face în ordine crescătoare sau alfabetică (ordinea
lexicografică), dacă tipul câmpului după care se face ordonarea este de tip text. În cazul
în care se doreşte ordonare invers lexicografică (descrescătoare), atunci numele
coloanei trebuie urmat de cuvântul DESC.
Exemplul 14. Dacă dorim afişarea angajaţilor în ordine descrescătoare vom avea:
SELECT nume
FROM angajati
ORDER BY nume DESC;
Exemplul 15. Dacă dorim numărul de angajaţi din fiecare localitate vom avea:
Exemplul 16. Dacă dorim numărul de angajaţi din Braşov şi Predeal vom avea:
Exemplul 17. Dacă dorim numele angajatului care are salariul egal cu salariul maxim vom
avea:
96 Baze de date
Clauzele IN şi NOT IN specifică dacă valorile unui câmp aparţin sau nu, unei mulţimi
precizate. Această mulţime poate fi formată prin enumerarea elementelor sau printr-o
subinterogare.
Exemplul 18. Dacă dorim numele angajaţilor din Brasov, Bucuresti şi Predeal vom avea:
Sintaxa:
SELECT [domeniu] lista_de_selecţie
FROM tabela1
{ INNER | LEFT [OUTER] | RIGHT [OUTER] } JOIN tabela2
ON condiţie_joncţiune
[WHERE listă_criterii_selecţie];
unde:
lista_de_selectie := { * | nume_atribut [ AS alias] | expresie [ AS alias + - *,… n]
domeniu := { [ ALL | DISTINCT ] [ TOP n [ PERCENT] ] }
condiţie_joncţiune – defineşte legătura dintre atributele diferitelor tabele; în situaţia
unor nume identice de atribute în două tabele distincte, calificarea se va
face cu numele tabelei, de exemplu: tabela1.atribut1; condiţiile de
joncţiune pot fi exprimate prin comparaţii ( <, <=, =, >, >=, <> ) sau
apartenenţă (BETWEEN, IN, NOT IN, LIKE) la un interval sau la valorile
unui atribut dintr-o altă tabelă;
listă_criterii_selecţie – specifică eventuale filtre asupra înregistrărilor (liniilor, tuplurilor)
generate prin procesul de joncţiune.
INNER JOIN – extrage liniile corespondente ce rezultă din condiţia de joncţiune a celor
două tabele;
LEFT JOIN – extrage liniile corespondente ce rezultă din condiţia de joncţiune a celor
două tabele, la care se adaugă liniile care nu au participat la joncţiune din
tabela aflată în partea stângă a operaţiei de joncţiune; specificaţia OUTER
este opţională;
RIGHT JOIN – extrage liniile corespondente ce rezultă din condiţia de joncţiune a celor
două tabele, la care se adaugă liniile care nu au participat la joncţiune din
tabela aflată în partea dreaptă a operaţiei de joncţiune; specificaţia
OUTER este opţională;
FULL JOIN – pentru a evita pierderea de informaţie în urma procesului de joncţiune,
se adaugă în tabela rezultată liniile care nu au participat la joncţiune din
ambele tabele implicate în operaţia de joncţiune; este o combinație între
LEFT JOIN și RIGHT JOIN şi corespunde joncţiunii externe (OUTER JOIN)
prezentată la algebra relaţională.
Observaţie
Operaţia de joncţiune INNER JOIN poate fi simulată prin operaţia de produs cartezian
(FROM) urmată de o selecţie (WHERE). Astfel, sintaxele următoare sunt echivalente:
- pentru exemplificare, introducem angajatul MIHAI care nu are nici o valoare la câmpul
id_dep
Observaţie. În rezultatul afişat apar toate numele angajaţilor, inclusiv ale şefilor, de
exemplu Maria (id_angajat = 13) este singură în departament şi este şefă (id_sef = 13).
INSERT INTO nume_tabela (col1, col2, ... , coln) VALUES (val1,val2,..., valn);
unde:
col1, col2, ... , coln - reprezintă atributele (coloanele) tabelei în care se vor introduce
datele;
val1,val2,..., valn - reprezintă valorile corespunzătoare coloanelor col1, col2, ... , coln.
Exemplul 23. Dacă dorim introducerea în tabela ANGAJAŢI a unui nou angajat cu datele:
Dacă se doreşte introducerea datelor în altă ordine decât cea implicită a coloanelor din
tabelă sau nu se cunoaşte această ordine, trebuie specificată ordinea câmpurilor după
numele tabelei.
Exemplul 24. Dacă dorim introducerea în tabela ANGAJAŢI a unui nou angajat cu datele:
vom avea:
INSERT INTO angajati (id_angajat, adresa, localitate, nume, sal_brut,
id_dep, data_angajarii)
VALUES (19, "str. Agriselor nr. 3", " Constanta", "RALUCA", 1600,
" prod", #10/8/2015#);
Instrucţiunea UPDATE permite modificarea valorilor din coloanele unei tabele pentru
anumite condiţii. Sintaxa generală este:
Exemplul 25. Dacă dorim modificarea tuturor salariilor angajaţilor din departamentul
"prod" la valoarea de 1000 lei vom avea:
UPDATE angajati
SET sal_brut=2000
WHERE id_dep="prod";
Exemplul 26. Dacă dorim modificarea tuturor salariilor angajaţilor din departamentul
"conta" printr-o creştere cu 15% vom avea:
UPDATE angajati
SET sal_brut=sal_brut*115/100
WHERE id_dep="conta";
Instrucţiunea DELETE este utilizată pentru ştergerea uneia sau a mai multor linii dintr-o
tabelă.
Sintaxa instrucţiunii DELETE este:
Utilizând această instrucţiune se vor şterge toate liniile care îndeplinesc condiţia
specificată în clauza WHERE. Dacă este omisă clauza WHERE se vor şterge toate liniile
din tabelă.
Exemplul 27. Dacă dorim ştergerea tuturor angajaţilor din departamentul "conta" vom
avea:
R1 A B R2 A B R3 A B
a b d f a b
c d x y c d
x y h r x y
c d d f
h r
Soluţia 1.
(1) SELECT R1.* INTO R3 FROM R1;
(2) INSERT INTO R3 SELECT R2.* FROM R2;
(3) SELECT * FROM R3;
Limbajul SQL 105
Soluţia 2.
(1) SELECT * INTO R3
FROM (SELECT * FROM R1 UNION SELECT * FROM R2);
(2) SELECT * FROM R3;
Comentariu. Reuniunea se realizează:
(1) cu ajutorul lui UNION şi se crează tabela R3 care nu conţine elemente duplicate;
(2) se listează tabela R3.
Soluţia 3.
(1) SELECT * FROM R1 UNION SELECT * FROM R2;
Comentariu. Reuniunea se realizează cu ajutorul lui UNION prin generarea unei tabele
virtuale (query) care nu conţine elemente (linii, tupluri) duplicate:
106 Baze de date
R1 A B R2 A B R3 A B
a b d f a b
c d x y
x y h r
c d
Soluţia 1.
(1) SELECT DISTINCT R1.*
FROM R1 LEFT JOIN R2 ON R1.A=R2.A
WHERE R2.A IS NULL;
Soluţia 2.
(1) SELECT DISTINCT R1.*
FROM R1
WHERE R1.A NOT IN (SELECT A FROM R2);
R1 A B R2 A B R3 A B
a b d f c d
c d x y x y
x y h r
c d
Soluţia 1.
(1) SELECT tmp.* INTO R3
FROM [SELECT R1.* FROM R1 INNER JOIN R2 ON R1.A=R2.A]. AS tmp;
(2) SELECT * FROM R3;
Comentariu. Se generează o tabelă virtuală tmp, ca rezultat al joncţiunii naturale a
relaţiilor R1 şi R2 pe atributul A (atribut cheie). Tabela tmp va fi memorată în R3. În final
tabela R3 este listată.
Limbajul SQL 107
Soluţia 2.
(1) SELECT R1.* from R1, R2
WHERE R1.A=R2.A AND R1.B=R2.B;
Comentariu. Se generează un query care va conţine tuplurile comune selectate din
produsul cartezian R1 x R2.
R1 A B R2 A R3 R1. A B R2.A
a b a a b a
c d d c d a
x y x y a
a b d
c d d
x y d
Soluţia 1.
(1) SELECT R1.A, B, R2.A FROM R1, R2;
Soluţia 2.
(1) SELECT R1.A, B, R2.A INTO R3
FROM R1, R2;
(2) SELECT * FROM R3;
108 Baze de date
R A B C S A B C
x y z t x a
t x a z x b
z x b
c u w
Soluţia.
(1) SELECT * FROM R WHERE R.B=’x’;
R A B C P’ A C P A C
x u x x x x x
z x y z y z y
x z x x x
z y y z y
x t x x x
Soluţia.
(1) SELECT distinct R.A, R.C FROM R;
Limbajul SQL 109
R1 A B C R2 D E A R3 R1. A B C D E R2. A
a x c 0 11 a b y c 0 11 a
b y c 1 13 a b y c 1 13 a
d z a 3 11 a b y c 3 11 a
4 11 d d z a 0 11 a
6 12 d d z a 1 13 a
7 13 c d z a 3 11 a
d z a 7 13 c
Soluţia 1.
(1) SELECT R1.A, B, C, D, E, R2.A INTO R3
FROM R1, R2 WHERE R1.A>R2.A;
(2) SELECT * FROM R3;
Soluţia 2.
(1) SELECT R1.A, B, C, D, E, R2.A INTO R3
FROM R1 INNER JOIN R2 ON R1.A>R2.A;
R1 A B C R2 D E A R3 A B C D E
a x c 0 11 a a x c 0 11
b y c 1 13 a a x c 1 13
d z a 3 11 a a x c 3 11
4 11 d d z a 4 11
6 12 d d z a 6 12
7 13 c b y c null null
Soluţia.
(1) SELECT R1.*, D, E INTO R3
FROM R1 LEFT JOIN R2 ON R1.A = R2.A;
(2) SELECT * FROM R3;
R1 A B C R2 D E A R3 A B C D E
a x c 0 11 a a x c 0 11
b y c 1 13 a a x c 1 13
d z a 3 11 a a x c 3 11
4 11 d d z a 4 11
6 12 d d z a 6 12
7 13 c c null null 7 13
Soluţia.
(1) SELECT R2.A, B, C, D, E INTO R3
FROM R1 RIGHT JOIN R2 ON R1.A = R2.A;
(2) SELECT * FROM R3;
NORMALIZAREA RELAŢIILOR (2)
Definiţia 5.11. O relaţie este în a doua formă normală notată (2NF), dacă şi numai dacă:
relaţia este în 1NF şi
oricare dintre atributele care nu aparţine cheii primare este complet dependent
funcţional de cheie (nu depinde de o parte a cheii).
Exemplu. Redundanţe care apar în cazul unei relaţii 1NF, care nu este 2NF.
Fie R [A, B, C, D] în care cheia primară este (A, B) şi se manifestă dependenţele:
R1 R
R2 A A R
Observaţie. Conform teoremei de mai sus, relaţia R [A, B, C, D] din exemplul precedent,
în care se manifestă (conform definiţiei 5.3) dependenţa parţială (A, B) → C cu
dependenţa argument dfp B → C, se poate descompune fără pierdere de informaţie în:
R1 [ B, C] şi R2 [A, B, D]
1
Algoritmul 2NF - de aducere a unei relaţii 1NF în 2NF
(eliminarea dependenţelor funcţionale parţiale)
Pasul 1. Pentru fiecare dependenţă funcţională argument dfp se crează o nouă relaţie,
cu schema constituită din determinantul şi determinatul acestei dependenţe.
Dacă există mai multe dependenţe funcţionale argument dfp cu acelaşi
determinant se va crea o singură relaţie formată din determinant luat o singură
dată şi determinaţii dependenţelor considerate.
Pasul 2. Din relaţia iniţială se elimină atributul / atributele care formează determinatul
dependenţelor funcţionale argument dfp.
Pasul 3. Se stabileşte cheia primară a fiecărei noi relaţii create la Pasul 1. Aceasta va fi
formată din determinantul dependenţei funcţionale argument dfp.
Aplicaţie.
Pentru evidenţa autoturismelor închiriate de o firmă se consideră următoarea relaţie:
Cheia relaţiei este (IDclient, nr_auto), iar dependeţele funcţionale care se manifestă
sunt:
2
Observaţie.
relaţia AUTO este în forma normală 1;
dependenţa funcţională (1) este parţială deoarece se manifestă şi dependenţa
funcţională argument dfp (5);
dependenţa funcţională (2) este parţială deoarece se manifestă şi dependenţa
funcţională argument dfp (6);
dependenţa funcţională (3) este parţială deoarece se manifestă şi dependenţa
funcţională argument dfp (7).
Aplicarea Algoritmului 2NF - de aducere a unei relaţii 1NF în 2NF, bazat pe Teorema 2,
conduce la spargerea relaţiei AUTO, în trei relaţii în 2NF:
EVIDENŢA
IDclient Nr auto Data
C234 BV 21 XXI 22.05.2015
C145 BV 19 XIX 17.04.2016
C679 CJ 12 XII 23.05.2016
C089 CT 07 VII 07.04.2014
C445 BV 61 LXI 26.04.2015
CLIENT
IDclient Nume client Adresa
C234 Smith A Castelului 12, Brasov
C145 Lungu M Libertatii 14, Predeal
C679 Tudor A Armoniei 23, Iasi
C089 Stan D Cosbuc 45, Cluj
C445 Bondescu I Caragiale 66, Arad
AUTO
Nr auto Marca
BV 21 XXI Logan 1.4
BV 19 XIX Ford Focus
CJ 12 XII Audi A6
CT 07 VII Opel Astra
BV 61 LXI VW Golf
3
5.3. A TREIA FORMĂ NORMALĂ (3NF)
Observaţie. O altă exprimare: orice atribut ce nu aparţine cheii primare depinde direct
de cheie.
Deoarece relaţia R este în 2NF rezultă că este complet dependent funcţional de cheia
relaţiei şi deci K , adică este un atribut noncheie.
Exemplu. Redundanţe care apar în cazul unei relaţii 2NF, care nu este 3NF.
A B C
a1 b1 c1
a2 b1 c1
a3 b2 c2
a4 b2 c2
R2 A A R
4
Observaţie. Conform teoremei de mai sus, relaţia R [A, B, C] din exemplul precedent, în
care se manifestă dependenţa tranzitivă B → C se descompune fără pierdere de
informaţie în:
R1 [B, C] şi R2 [ A, B]
Pasul 1. Pentru fiecare dependenţă funcţională tranzitivă din cadrul relaţiei considerate,
se crează o nouă relaţie, formată din atributele implicate în această dependenţă.
Pasul 2. Se stabileşte cheia primară a fiecărei noi relaţii create la Pasul 1.
Pasul 3. Se introduc în relaţia iniţială în locul atributelor transferate la Pasul 1, cheile
primare determinate la Pasul 2.
Aplicaţie.
Pentru evidenţa rezultatelor examenului de licenţă, se consideră relaţia:
Cheia relaţiei este nr_matricol, iar dependeţele funcţionale care se manifestă sunt:
Observaţie.
relaţia EXAMEN este în 2NF, deoarece toate valorile atributelor sunt atomice, nu
avem atribute repetitive (1NF) şi nu există dependenţe funcţionale parţiale (2NF)
dependenţele (4) şi (6) arată că atributul departament depinde tranzitiv de cheia
primară a relaţiei.
5
Grafic, această dependenţă tranzitivă poate fi exprimată astfel:
prof_coordonator
dependenţa
nr_matricol funcţională
tranzitivă
departament
Aplicarea Algoritmului 3NF - de aducere a unei relaţii 2NF în 3NF bazat pe Teorema 3,
conduce la spargerea relaţiei EXAMEN, în două relaţii în 3NF:
REZULTAT
Profesor
Nr matricol Nume student Program Nota
coordonator
2345 Ionescu M ECTS 9.45 Zamfir R
5678 Popescu V MK 9.30 Tiron A.
7890 Lungu D CIG 9.70 Oancea C
4567 Costin R FB 9.60 Cristea D
3456 Marinescu H CIG 9.20 Andreescu M
PROFESOR
Profesor Departament
coordinator
Zamfir R MKTS
Tiron A. MKTS
Oancea C FBC
Cristea D FBC
Andreescu M MNIE
6
Proprietăţile unei descompuneri în forma normală trei.
Dependenţele funcţionale sunt reguli invariabile în timp care trebuie verificate de
valorile atributelor din relaţie. Rezultă astfel necesitatea ca o descompunere să conserve
aceste reguli.
Altfel spus, dacă R1, R2 ,..., Rn este descompunerea relaţiei R, închiderea tranzitivă a
mulţimii F de dependenţe funcţionale (DF) a lui R trebuie să fie identică cu reuniunea
dependenţelor funcţionale a mulţimii de relaţii R1, R2 ,..., Rn.
A treia formă normală (3NF) este importantă, deoarece orice relaţie are cel puţin o
descompunere în forma normală trei cu următoarele proprietăţi:
descompunerea conservă dependenţele funcţionale;
descompunerea este fără pierdere de informaţie.
C. J. Date arată în *DAT05+ că definiţia iniţială a lui Codd pentru forma normală 3NF nu
tratează satisfăcător cazul general al unei relaţii care satisface simultan condiţiile:
Definiţia iniţială a formei 3NF a fost înlocuită de definiţia lui Boyce-Codd, în care este
luat în considerare şi acest caz. Reamintim că un determinant este un atribut sau grup
de atribute de care depinde funcţional un alt atribut al relaţiei (determinat). Cu alte
cuvinte, determinantul este o sursă de dependenţe funcţionale.
Definiţia 5.13. O relaţie este în forma normală Boyce-Codd notată (BCNF), dacă şi numai
dacă orice determinant este o cheie candidat.
Definiţia 5.13’. O relaţie este în forma normală Boyce-Codd notată (BCNF), dacă şi
numai dacă, pentru orice dependenţă funcţională totală A → B, A este o cheie a relaţiei.
Notă. Combinaţia condiţiilor 1,2 şi 3 nu apare foarte des în practică. Pentru o relaţie în
care nu apare, formele 3NF şi BCNF sunt echivalente.
7
Exemplu. Redundanţe care apar în cazul unei relaţii care nu este BCNF.
Relaţia R
A B C D
a1 b1 c1 d1
a2 b1 c1 d2
a1 b2 c2 d3
a1 b3 c3 d4
a2 b4 c4 d5
a3 b1 c5 d2
a2 b3 c6 d5
Relaţia R1 Relaţia R2
A C D C B
a1 c1 d1 c1 b1
a2 c1 d2 c2 b2
a1 c2 d3 c3 b3
a1 c3 d4 c4 b4
a2 c4 d5 c5 b1
a3 c5 d2 c6 b3
a2 c6 d5
Pasul 1. Dacă relaţia conţine unul sau cel mult două atribute, nu pot exista dependenţe
noncheie şi deci relaţia este în BCNF.
Pasul 2. Dacă relaţia conţine mai mult de două atribute se caută dacă ea conţine
dependenţe noncheie. Dacă nu există dependenţe noncheie atunci relaţia este
în BCNF.
Pasul 3. Pentru fiecare dependenţă noncheie X → Y se crează două relaţii: una formată
din atributele {X,Y} implicate în această dependenţă, iar cealaltă va avea
schema formată din toate atributele relaţiei iniţiale, mai puţin Y.
Pasul 4. Se reiau paşii 1, 2, 3 pentru relaţiile rezultate la Pasul 3.
8
Observaţie. Pentru ca o relaţie să fie adusă în BCNF nu este obligatoriu să fie în 3NF. Se
pot aduce în BCNF şi relaţii aflate în 1NF şi 2NF deoarece dependenţele funcţionale
parţiale şi cele tranzitive sunt dependenţe noncheie, adică dependenţe funcţionale ale
căror determinanţi nu sunt chei candidat [POI96].
Aplicaţie.
Pentru organizarea activităţii într-o şcoală de muzică instrumentală să considerăm
relaţia:
SCOALA
nr_matricol cod_instrument marca_profesor
E29 I1 P1
E17 I1 P1
E53 I1 P3
E29 I2 P2
E17 I2 P2
E53 I2 P4
Comentarii.
1. Relaţia SCOALA este în 1NF deoarece atributele sale sunt atomice şi nu există
grupuri repetitive.
2. Nu avem dependenţe funcţionale parţiale, deci relaţia este 2NF.
3. Nu avem dependenţe funcţionale tranzitive, deci relaţia este 3NF.
4. La o analiză mai atentă identificăm şi cheia candidat:
(nr_matricol, marca_profesor).
9
Astfel, suntem în condiţiile definite de C.J.Date, în cazul unei relaţii care satisface
simultan condiţiile:
are două chei candidate: (nr_matricol, cod_instrument), (nr_matricol,
marca_profesor)
cele două chei candidate sunt compuse (formate din câte două atribute)
cheile compuse au în comun atributul nr_matricol.
Relaţia SCOALA nu este BCNF, datorită dependenţei funcţionale (2), care ne arată că
există un determinant (marca_profesor) care nu este o cheie candidată.
Relaţia R1 Relaţia R2
nr_matricol marca marca cod_instrument
profesor profesor
E29 P1 P1 I1
E17 P1 P2 I2
E53 P3 P3 I1
E29 P2 P4 I2
E17 P2
E53 P4
10
Teorema 5.4. (Teorema lui Ullman)
Descompunerea D = {R1, R2} a unei relaţii R este o descompunere fără pierdere de
informaţie la joncţiune în raport cu mulţimea F a dependenţelor funcţionale, dacă şi
numai dacă este îndeplinită una din condiţiile:
11
O altă definiţie mai puţin “fuzzy” pentru dependenţa multivaloare:
Definiţia 5.15. Fie relaţia R A1 , A2 ,..., An şi X, Y, Z trei mulţimi de atribute simple sau
compuse din R. Spunem că Y depinde multivaloare de X, sau X multidetermină pe Y dacă
şi numai dacă:
X Y x , y , z si x , y' , z' R x , y' , z si x , y , z' R
pentru orice valori x , y , y' , z , z' cu y y' , z z'.
Comentarii.
Din simetria definiţiei 5.15 rezultă că dependenţa multivaloare X Y implică şi
dependenţa multivaloare complementară X Z .
Dacă notăm prin:
Yx y | x , y , z R şi Z x z | x , y , z R
atunci definiţia 5.15 arată că o valoare dată x a atributului X formează tupluri cu fiecare
element al produsului cartezian Yx Z x . Aceasta înseamnă că mulţimile Yx şi Z x sunt
independente între ele [DOL98].
O dependenţă multivaloare caracterizează o independenţă între două mulţimi de
atribute (Y şi Z) corelate printr-o a treia mulţime X.
O consecinţă importantă a acestei independenţe, aplicabilă în recunoaşterea
dependenţelor multivaloare, este faptul că dacă există dependenţa multivaloare
X Y împreună cu dependenţa multivaloare complementară X Z , atunci între
atributele Y şi Z nu poate exista nicio dependenţă funcţională *DOL98+.
Axioma 3. Tranzitivitatea. X Y şi Y Z X Z Y .
12
Definiţia 5.16. Dependenţa multivaloare X Y a relaţiei R este o dependenţă
multivaloare elementară dacă:
1. Y şi Y X
2. Relaţia R nu conţine nicio altă dependenţă multivaloare de tip X ' Y ' , cu
X ' X şi Y ' Y .
O relaţie BCNF este în 4NF dacă pentru orice dependenţă multivaloare elementară
X Y , X este o super-cheie a lui R.
13
Un exemplu de populare a tabelei:
Constatăm:
Relaţia (tabela) CURS are cheia compusă (profesor, disciplina, limba).
Relaţia CURS este în BCNF deoarece nu există niciun atribut care să depindă
funcţional de un alt atribut.
Conform definiţiei dependenţei multivaloare se identifică în relaţia dată două
dependenţe multivaloare:
profesor disciplina şi profesor lim ba
deci, relaţia CURS nu este în forma normală patru.
Există un mare grad de redundanţă a datelor, care generează anomalii în
operaţiile de actualizare. De exemplu:
- dacă Ardeleanu preia şi cursul de Comerţ electronic atunci trebuie
adăugate în relaţie (tabelă) trei tupluri (linii), presupunând că acest curs
poate fi ţinut în cele trei limbi străine cunoscute (anomalie de adăugare);
- orice operaţie de actualizare necesită modificări în mai multe tupluri;
- dacă Olteanu renunţă la cursul de Comerţ electronic ştergerea celor două
tupluri (linii) din tabelă duce la pierderea informaţiei legate de limbile
străine cunoscute de acesta (anomalie de ştergere).
14
5.8. DEPENDENŢE DE JONCŢIUNE. FORMA NORMALĂ CINCI (5NF)
Definiţia 5.18. Dependenţa de joncţiune. Fie relaţia R A1 , A2 ,..., An şi R1, R2 ,..., Rp o
mulţime de scheme relaţionale care nu sunt disjuncte şi a căror reuniune este R.
Spunem că există o dependenţă de joncţiune de ordinul p între R1, R2 ,..., Rp , notată:
R1, R2 ,..., Rp dacă şi numai dacă R reprezintă în orice moment joncţiunea
proiecţiilor sale pe R1, R2 ,..., Rp , adică:
R atr1 R cond atr2 R cond ... cond atr p R
unde: atri , i 1,2 ,..., p reprezintă mulţimea atributelor corespunzătoare relaţiei Ri ;
cond – este condiţia de joncţiune pe egalitate între atributele comune din
relaţiile care intră în joncţiune.
Observaţii.
Dacă p = 2 dependenţa de joncţiune devine dependenţă multivaloare.
În relaţia R cu schema RX ,Y , Z , fie o dependenţă multivaloare X Y ; avem
deci şi X Z . Acestea corespund dependenţei de joncţiune X Y , X Z .
o dependenţă de joncţiune poate exista numai în cadrul acelor relaţii 4NF care
prezintă chei compuse şi atribute comune în chei.
15
Exemplu.
Fie relaţia RX ,Y , Z populată cu patru tupluri:
R X Y Z
x1 y1 z2
x2 y1 z1
x1 y2 z1
x1 y1 z1
Relaţia este formată numai din chei şi nu presupune nicio dependenţă funcţională sau
dependenţă multivaloare, fiind prin urmare în 4NF.
Relaţiile rezultate în urma proiecţiei şi eliminării tuplurilor duplicate sunt:
R1 X Y R2 Y Z R3 X Z
x2 y1 y1 z2 x1 z2
x1 y2 y2 z1 x2 z1
x1 y1 y1 z1 x1 z1
Joncţiunea dintre R1 şi R2 pe atributul Y conduce la: Q R1 R1.Y R 2.Y R2
Q X Y Z
x1 y1 z2
x2 y1 z2
x2 y1 z1
x1 y2 z1
x1 y1 z1
R X Y Z
x1 y1 z2
x2 y1 z1
x1 y2 z1
x1 y1 z1
Rezultă că relaţia R este egală cu joncţiunea proiecţiilor sale R1, R2, R3 adică,
R R1, R2 , R3, dar nu este egală cu joncţiunea oricăror două dintre acestea.
16
Forma normală cinci (5NF)
Definiţia 5.19. [DAT05]
Dependenţa de joncţiune de ordinul p pentru R, R1, R2 ,..., Rp , este banală, dacă şi
numai dacă, există Ri R .
Următorul exemplu preluat din *DOL98+ este sugestiv pentru analiza unei relaţii în forma
normală cinci.
Fie relaţia R cu schema:
R [ profesor, student, disciplina, limba, nota ]
Facem ipotezele:
un student studiază orice disciplină cu un singur profesor într-o limbă dată;
studentul primeşte o singură notă pentru disciplina respectivă;
există situaţia în care o disciplină este predată la acelaşi program de studiu de
doi profesori în limbi diferite (de exemplu, situaţia unui profesor invitat care
predă în limba engleză şi studenţii optează pentru parcurgerea disciplinei
respective în limba română sau engleză).
Rezultă că avem cheia relaţiei R compusă din două atribute (student, disciplina).
Se identifică următoarele dependenţe funcţionale:
student, disciplina → profesor
student, disciplina → limba
student, disciplina → nota.
Observăm că în relaţia R nu există alte dependenţe funcţionale, decât cele rezultate din:
orice atribut non-cheie depinde de cheie şi nu există dependenţe multivaloare. Rezultă
că relaţia R este în 4NF.
În cadrul acestei relaţii există o dependenţă de joncţiune de ordinul 3, care permite
descompunerea relaţiei R în trei relaţii fără pierderi de informaţie:
17
Conform Definiţiei 5.20 relaţia R este în forma normală cinci (5NF) şi nu mai este
necesară descompunerea în cele trei relaţii R1, R2, R3 deoarece nu mai prezintă interes
din punctul de vedere al normalizării. Existenţa dependenţei de joncţiune
R R1, R2 , R3 nu produce anomalii în operaţiile de actualizare a bazei de date.
Concluzie.
Formele normale 4NF şi 5NF sunt mai dificil de aplicat. În general, în cazurile practice
normalizarea se opreşte la 3NF sau BCNF. Din punct de vedere al performaţei, procesul
de normalizare în fazele superioare nu este întodeauna optimal. De aici a apărut şi ideea
denormalizării.
Denormalizarea este o tehnică de a implementa joncţiunea a două sau mai multe relaţii
în locul relaţiilor individuale iniţiale. Denormalizarea conduce la redundanţe de care
trebuie să ţină cont programele de aplicaţii. Avantajul acestui proces apare în operaţiile
de interogare a bazelor de date, joncţiunea tabelelor fiind înlocuită de o selecţie directă
pe tabela rezultat a joncţiunii.
18