Documente Academic
Documente Profesional
Documente Cultură
3
odată cu creşterea activităţii unei organizaţii, ceea ce face ca soluţiile (privite iniţial ca fiind
cele mai adecvate) să nu mai fie potrivite. Mai mult, pe măsură ce lista devine tot mai mare,
încep să apară redundanţe şi inconsistenţe la nivelul datelor gestionate. Datele devin greu de
înţeles sub forma listei, iar posibilităţile de căutare, regăsire şi extragere a subseturilor de
date pentru revizuire, actualizare sau utilizare devin extrem de limitate. Odată cu apariţia
acestor probleme, o idee bună, chiar o necesitate în anumite situaţii, ar fi aceea al
transferului acestor date într-o bază de date creată cu ajutorul unui sistem de gestiune al
bazelor de date.
În prezent ne este tot mai clar faptul că explozia informaţională este de ani buni
trăsătura definitorie care caracterizează activităţile fiecărei organizaţii sau instituţii, indiferent
de domeniul său de activitate. Volumul tot mai însemnat de informaţii nu mai poate fi utilizat
eficient cu ajutorul mijloacelor tradiţionale. Practic, constatăm că procesul de prelucrare
automată a datelor prin intermediul sistemelor electronice de calcul a devenit o necesitate
pentru majoritatea domeniilor de activitate. În acest context, putem afirma că cea mai
evoluată metodă de organizare a datelor în vederea prelucrării lor automate o întâlnim la
bazele de date.
În literatura de specialitate există numeroase definiţii aferente conceptului de bază de
date. În continuare vom prezenta câteva dintre ele, care, în opinia noastră, acoperă cel mai
bine conceptul de bază de date.
„O bază de date conţine toate informaţiile necesare despre obiectele ce intervin într-o
mulţime de aplicaţii, relaţii logice între aceste informaţii şi tehnicile de prelucrare
corespunzătoare. În bazele de date are loc o integrare a datelor, în sensul că mai multe
fişiere sunt privite în ansamblu, eliminându-se pe cât posibil acele informaţii redundante. De
asemenea, este permis accesul simultan la aceleaşi date, care se regăsesc în acelaşi loc
sau sunt distribuite spaţial, a mai multor persoane de pregătiri diferite, fiecare cu stilul
personal de lucru” [Bâscă, 1997, p.11].
Referitor la definiţia prezentată anterior, putem spune că avem unele reţineri în ceea
ce priveşte utilizarea conceptului de informaţie. Astfel, autorul vede baza de date ca un
ansamblu de informaţii, părere pe care o împărtăşim parţial şi numai în cazul în care se face
referire la baza de date în general, dar nu şi la o bază de date relaţională. Este cert faptul că
atunci când facem referire la baza de date relaţională, nu putem vorbi de informaţii, ci numai
de date.
„Totodată, putem privi baza de date ca ansambluri unitare de date, structurate,
corelate logic între ele şi memorate împreună cu descrierea formală a structurii lor şi a
legăturilor logice dintre ele, a cărui gestionare este realizată de un sistem software unitar şi
specializat, numit sistem de gestiune a bazei de date” [Georgescu, Georgescu, 2005, p.63].
O definiţie completă şi explicativă a noţiunii de bază de date este oferită în [Velicanu et
al., 2003, p.51]. Astfel, aceasta reprezintă un ansamblu de colecţii de date:
• organizat, pe niveluri de organizare a datelor (conceptual, logic, fizic), aşa cum reiese şi
din arhitectura pe niveluri a unui sistem de baze de date;
• coerent, conform restricţiilor de integritate şi a legăturilor dintre date, care rezultă din
modelul logic aferent;
• structurat, conform unui model de date pentru bazele de date;
• cu redundanţă minimă şi controlată, care este asigurată prin modelul de date implementat
şi prin tehnicile de proiectare ale bazei de date;
• accesibil mai multor utilizatori în timp real, adică mai mulţi utilizatori, concomitent, pot
obţine informaţiile dorite atunci când au nevoie de ele.
4
Profesorul M. Fotache prezintă şi analizează o definiţie academică a bazei de date.
Astfel, în opinia acestuia, baza de date reprezintă un ansamblu structurat de fişiere care
grupează datele prelucrate în aplicaţiile informatice ale unei persoane, grup de persoane,
întreprinderi, instituţii, etc. Din punct de vedere formal, defineşte baza de date ca „o colecţie
de date aflate în interdependenţă, împreună cu descrierea datelor şi relaţiilor dintre ele sau,
similar, o colecţie de date folosită într-o organizaţie, colecţie care este automatizată, partajată,
definită riguros (formalizată) şi controlată la nivel central” [Fotache, 2005, p.14].
Plecând de la definiţiile prezentate anterior, putem afirma că o bază de date
relaţională reprezintă o colecţie partajată de date, între care există diferite legături logice
(împreună cu o descriere a acestora), proiectată pentru a satisface necesităţile
informaţionale ale fiecărei organizaţii. Totodată, putem privi o bază de date ca un instrument
pentru organizarea şi colectarea tuturor informaţiilor, astfel încât să se satisfacă toate
necesităţile informaţionale ale utilizatorilor ei.
Definiţia prezentată anterior trebuie analizată în detaliu pentru a putea fi în măsură să
dobândim o mai bună înţelegere a conceptului de bază de date. Baza de date reprezintă un
depozit de date unic, larg, care este definit o singură dată şi este utilizat simultan de diferite
departamente sau utilizatori. Această soluţie substituie crearea mai multor fişiere separate cu
date de cele mai multe ori considerate a fi redundante şi presupune integrarea tuturor datelor
necesare, dublarea lor fiind în acest caz minimală. De aici decurge un prim avantaj
semnificativ: baza de date nu mai este deţinută de un singur departament, ci constituie acum
o resursă comună, partajată. Pe de altă parte, baza de date conţine nu numai datele
operaţionale ale unei organizaţii sau instituţii, ci şi o descriere a acestora, întâlnite în
literatură sub denumirea de metadate (date despre date).
Atunci când analizăm necesităţile informaţionale ale unei organizaţii, avem în vedere
în principal identificarea entităţilor, atributelor şi relaţiilor. Putem privi o entitate ca un obiect
distinct (o persoană, un departament, un concept sau un eveniment) care aparţine unei
organizaţii şi care trebuie reprezentat în baza de date. Atributul este o proprietate care
descrie un aspect oarecare al obiectului pe care dorim să-l înregistrăm, iar relaţia se referă la
o asociaţie între diferite entităţi. Astfel, putem spune că baza de date conţine entităţile,
atributele, dar şi relaţiile (legăturile) logice dintre ele. În capitolul 4 vom arăta cum se
concretizează din punct de vedere practic legăturile logice dintre relaţii, prin introducerea
conceptului de cheie străină.
5
b. software-ul – este aferent realizării şi exploatării bazei de date şi conţine:
• sistemul de gestiune a bazei de date;
• programele de aplicaţie dezvoltate, în cea mai mare parte, într-un sistem de
gestiune a bazelor de date.
c. elementele auxiliare – sunt componentele care contribuie la realizarea şi funcţionarea
întregului sistem de baze de date:
1. un set de proceduri automate (rutine) şi manuale;
2. reglementări legale şi administrative;
3. mijloace hardware utilizate;
4. persoane implicate pe categorii de utilizatori.
SGBD
Administrator Structura
baza de date conceptuala Conceptual
S.O. ...
Inginer
Structura interna
(analist) de B a z ă d e d at e (fizica) Fizic
sistem
6
• rezultatul nivelului conceptual este schema conceptuală;
• realizarea schemei corespunde unei activităţi de modelare pentru că este vorba
despre o transpunere în termeni abstracţi a entităţilor lumii reale;
• odată definită, schema conceptuală trebuie confruntată cu lumea reală pentru
identificarea şi soluţionarea neconcordanţelor sau a omisiunilor; datorită caracterului
său global şi unitar, se recomandă ca schema conceptuală să fie gestionată de o
singură persoană [Georgescu, Georgescu, 2005, p.67].
b. nivelul logic – este dat de viziunea programatorului asupra datelor. Legat de acest nivel
se pot prezenta următoarele aspecte:
• programatorul realizează programele de aplicaţie pentru descrierea şi manipularea
datelor, scrise într-un SGBD;
• programele implementează structura externă (logică) a datelor;
• structura externă este dedusă din structura conceptuală;
• structura externă reprezintă viziunea programatorului asupra bazei de date pentru o
anumită aplicaţie;
• viziunea programatorului este independentă de suportul tehnic de informaţie
(independenţa fizică);
• rezultatul nivelului logic este schema externă, ca parte din schema conceptuală,
implementată cu ajutorul unui SGBD.
c. nivelul fizic – este dat de viziunea analistului (inginerului) de sistem asupra datelor şi are
rolul de a descrie modul în care sunt stocate datele în baza de date. Aferent nivelului fizic
putem menţiona următoarele:
• analistul de sistem este cel căruia îi revine sarcina de a realiza structura internă
(fizică);
• structura internă este dedusă din cea externă conform unor tehnici şi metode de
alocare pe suport fizic;
• structura internă corespunde descrierii datelor pe suportul fizic de informaţie;
• rezultatul la nivelul fizic este schema internă (fizică) care se defineşte în termeni de
fişiere şi înregistrări;
• implementarea schemei interne se face cu ajutorul sistemului de gestiune a fişierelor
(SGF) din cadrul SGBD-ului şi/sau din sistemul de operare, prin gestiunea fizică a
perifericelor.
7
Proiectarea şi administrarea unei baze de date
1
E-R – Entitate – Relaţie
2
OO – Orientat Obiect
3
OR – Obiectual – Relaţional
10
Sisteme de gestiune a bazelor de date
În sens larg putem defini sistemul de gestiune a bazelor de date (SGBD) ca un sistem
de programe care permite utilizatorilor definirea, generarea şi întreţinerea unei baze de date,
precum şi accesul controlat la aceasta. În [Velicanu et al., 2003, p.94] SGBD-ul este definit
ca un ansamblu complex de programe care asigură interfaţa între o bază de date şi utilizatorii
acesteia. Totodată, autorii consideră SGBD-ul o componentă software a unui sistem de baze
de date care este capabil să interacţioneze cu toate celelalte componente ale acestuia,
asigurând legătura şi independenţa între elementele sistemului.
Un SGBD oferă utilizatorului posibilitatea de a accesa datele prin intermediul unui
limbaj de nivel înalt, apropiat de modul obişnuit de exprimare, pentru a obţine informaţii,
utilizatorul făcând abstracţie de mijloacele şi metodele folosite pentru alegerea datelor
implicate şi a modului de memorare a lor. SGBD-ul este practic o interfaţă între utilizatori şi
sistemul de operare.
Termenul de bază de date se va referi la datele de prelucrat, la modul de organizare a
acestora pe suportul fizic de memorare, iar termenul de gestiune va semnifica totalitatea
operaţiilor ce se aplică asupra datelor din baza de date.
12
permite regăsirea datelor pe baza informaţiilor de adresare din fişierele de index;
salvarea şi restaurarea datelor;
blocarea şi deblocarea datelor în cazul operaţiilor fizice la nivelul memoriei externe;
• subsistemul instrumentelor de proiectare – dispune de un set de instrumente software
care permit proiectarea şi generarea bazei de date şi a aplicaţiilor care descriu modul de
utilizare a bazei de date. Această componentă permite definirea:
structurii tabelelor din baza de date;
machetelor de interfaţă cu utilizatorul;
a formatului rapoartelor şi cererilor de interogare a bazei de date.
Subsistemul instrumentelor de proiectare poate include:
limbaje de descriere a datelor (LDD) 4 ;
limbaje de manevrare a datelor;
limbaje de interogare a datelor din baza de date;
editoare de cod;
generatoare de cod care să permită definirea interfeţei cu utilizatorul, a rapoartelor,
meniurilor, etc.;
un sistem de asistenţă on-line pentru autodocumentarea utilizatorului.
• subsistemul de execuţie – permite execuţia aplicaţiilor sau cererilor de consultare a bazei
de date, formulate prin utilizarea instrumentelor subsistemului de proiectare, prin
consultarea dicţionarului de date şi generarea tranzacţiilor. Aceasta este componenta
care garantează autonomia logică a datelor în baza de date şi are rolul de a intermedia
operaţiile cu baza de date prin consultarea descrierii organizării logice a datelor
memorate în structura bazei de date. Practic, fiecare operaţie de actualizare sau
consultare a bazei de date se realizează prin identificarea formatelor de descriere a
datelor din dicţionarul de date şi conectarea acestor descrieri din schema internă a bazei
de date
Funcţiile SGBD-ului
În [Velicanu et al., 2003, p.104-107] se arată că îndeplinirea tuturor obiectivelor unui
SGBD se realizează prin intermediul unor componente care permit efectuarea unor operaţii
specifice. În funcţie de natura lor, dar şi de scopul urmărit, operaţiile pot fi grupate pe
activităţi. Activităţile acceptă şi ele o grupare pe funcţii astfel încât, una sau mai multe
activităţi, relativ omogene, vor realiza o funcţie anume. Ţinând cont de complexitatea unui
SGBD, de facilităţile pe care le pune la dispoziţie, de limbajele utilizate, precum şi de modul
de implementare al modelului de date, gruparea activităţilor pe funcţii are un anumit caracter
relativ.
Plecând de la modelul de date pe care îl implementează, SGBD-urile se
caracterizează printr-un număr de particularităţi identificate prin operaţii şi activităţi specifice.
În pofida acestor particularităţi, există câteva funcţii general valabile pentru toate tipurile de
SGBD; acestea sunt funcţii importante, pe care un sistem software, dacă nu le are în
totalitate, nu poate fi considerat SGBD. Astfel, principalele funcţii pe care le putem atribui
unui SGBD sunt: descrierea datelor, manipularea datelor, utilizarea şi administrarea bazei de
date.
4
Un limbaj de descrierea a datelor permite descrierea componenţei bazei de date, a structurii acesteia , a relaţiilor dintre
componentele ei, precum şi a tuturor drepturilor de acces ale utilizatorilor la baza de date.
13
Descrierea datelor
Prin intermediul funcţiei de descriere a datelor, fiecare SGBD permite definirea unei
structuri a bazei de date cu ajutorul limbajului de definire a datelor (LDD). Definirea datelor
poate fi realizată la nivel conceptual, logic şi fizic. Se descriu atributele din cadrul structurii
bazei de date, legăturile dintre entităţile acesteia sau dintre atributele aceleiaşi entităţi, se
definesc criteriile de validare a datelor (dacă este cazul), metodele care asigură accesarea
datelor, precum şi aspectele care se referă la asigurarea integrităţii datelor. Concretizarea
acestei funcţii este schema bazei de date, memorată în cod intern. Memorarea se face într-
un fişier, ceea ce permite afişarea şi actualizarea structurii bazei de date, în orice moment de
timp.
Această funcţie a fost mult automatizată în timp, limbajul de descriere a datelor
beneficiind în prezent de puţine comenzi. Acest limbaj este specific fiecărui SGBD, dar el
mereu realizează descrierea lor conform elementelor modelului de date pe care îl
implementează SGBD-ul respectiv. Astfel se realizează definirea şi descrierea entităţilor şi a
caracteristicilor lor, definirea legăturilor dintre obiectele identificate (asocierile) şi a regulilor
de integritate specifice modelului de date.
Manipularea datelor
Funcţia de manipulare a datelor este cea mai complexă şi realizează actualizarea şi
regăsirea datelor din baza de date, cu ajutorul limbajului de manipulare a datelor 5 .
Manipularea datelor este cea mai folosită funcţie în bazele de date, fiind cea mai bine
suportată de sistemul de gestiune a bazelor de date faţă de oricare alt sistem de gestionare a
datelor din memoria externă. Practic, un SGBD manipulează datele într-o manieră eficientă,
folosind în acest scop diferite tehnici şi metode de optimizare a accesului şi a alocării
spaţiului din memoria calculatorului.
Menţionam în paragraful anterior că limbajul de manipulare a datelor este cel care
asigură realizarea acestei funcţii. În ceea ce-l priveşte, acest limbaj trebuie să respecte
restricţiile de integritate a datelor şi să implementeze operatorii din modelul de date pe care
se bazează SGBD-ul căruia îi aparţine.
Această funcţie presupune derularea următoarelor activităţi:
• încărcarea datelor în baza de date - se realizează prin operaţii automatizate sau
programate ce asigură şi criteriile de validare necesare;
• actualizarea bazei de date – se referă la operaţiile de adăugare, modificare şi ştergere de
înregistrări. La operaţiile de adăugare şi de modificare se păstrează aceleaşi criterii de
validare care s-au folosit şi la activitatea de încărcare a datelor. Actualizarea se
realizează numai autorizat, prin asigurarea unei protecţii corespunzătoare a datelor,
pentru a se păstra coerenţa bazei de date.
• prelucrarea datelor – presupune realizarea operaţiilor de selecţie, ordonare, etc. efectuate
asupra entităţilor bazei de date. Acestea sunt, de obicei, operaţii pregătitoare activităţii de
regăsire a datelor. Multe din operaţiile de prelucrare sunt realizate cu ajutorul operatorilor
din modelul de date pe care îl implementează SGBD-ul.
• regăsirea (interogarea) datelor – presupune realizarea operaţiilor de vizualizare (afişare
pe ecran, imprimare pe hârtie), răsfoire, editarea unor documente de ieşire (rapoarte).
Documentele de ieşire pot fi intermediare sau finale şi se pot obţine pe diferiţi suporţi
tehnici de informaţie (ecran, hârtie, mediu magnetic, mediu optic). Ele pot avea cele mai
5
În literatură întâlnim frecvent şi Limbaj de Manevrare a Datelor
14
diferite forme (punctuale, liste, rapoarte, grafice, imagini, sunet, video, etc) şi se pot
obţine după cele mai diferite criterii de regăsire.
Funcţia de utilizare
Această funcţie are rolul de a asigura interfeţele necesare care să permită
comunicarea utilizatorilor cu baza de date (cu alte cuvinte, să asigure legătura dintre utilizator
şi baza de date). Pentru realizarea acestei funcţii, SGBD-ul trebuie să ofere facilităţi pentru
mai multe categorii de utilizatori ai bazei de date, şi anume: neinformaticieni, specialişti
(informaticieni) şi administratorul.
Utilizatorii neinformaticieni reprezintă principala categorie a beneficiarilor de informaţii
(utilizatori finali şi intensivi) din baza de date. SGBD-ul le oferă acestora limbaje
neprocedurale, dar şi alte facilităţi de interogare (generatoare, utilitare, etc.) a bazei de date
într-o formă simplă şi interactivă. Aceşti utilizatori nu trebuie să cunoască structura bazei de
date şi nu trebuie să ştie să programeze, SGBD-ul sprijinindu-i în manieră interactivă în
utilizarea bazei de date. În acest sens SGBD-ul oferă:
• meniuri cu opţiuni sugestive;
• ferestre de lucru;
• şabloane pentru diferite forme;
• asistenţi tip Wizard;
• autodocumentarea (help-uri, mesaje/ferestre explicative).
Spre deosebire de utilizatorii neinformaticieni, cei specialişti în informatică sunt în
măsură să creeze structura bazei de date şi să realizeze proceduri complexe de exploatare a
acesteia. SGBD-ul oferă acestor utilizatori limbajul de descriere şi limbajul de manipulare a
datelor precum şi interfeţe cu limbaje universale. Acestea sunt de complexitate şi putere
diferită, de la un SGBD la altul, oferind atât elemente neprocedurale cât şi procedurale
specialistului în informatică. Cu aceste elemente el poate să descrie schema bazei de date şi
să asigure manipularea complexă a datelor.
Administrarea bazei de date
Funcţia de administrare este una destul de complexă şi din acest motiv se consideră
că este doar de competenţa administratorului bazei de date.
Administratorul, care are o bogată experienţă de analiză, proiectare şi programare,
organizează şi administrează baza de date în toate etapele de realizare a acesteia. Astfel, el
organizează baza de date conform unei anumite metodologii, realizează schema
conceptuală a acesteia şi coordonează proiectarea ei. Pentru toate aceste aspecte, SGBD-ul
oferă o serie de instrumente CASE, precum şi o serie de utilitare specializate.
În etapa de exploatare a bazei de date, administratorul îndeplineşte mai multe roluri:
• de a autoriza accesul la date (crează conturi de acces, parole, etc.);
• de a reface baza de date în caz de incidente (prin jurnalizare, copii de siguranţă);
• de a utiliza eficient spaţiul de memorie internă şi externă (prin organizare, rutine de
optimizare);
• de a realiza o serie de analize statistice din baza de date (număr şi tip de utilizatori,
număr de accese, număr de actualizări, etc.).
Pentru fiecare din activităţile menţionate mai sus, SGBD-ul oferă instrumente şi tehnici
de lucru.
15
Abordarea relaţională a bazelor de date
Înainte de a prezenta principalele aspecte care caracterizează modelul relaţional,
considerăm că este oportună definirea conceptului de bază de date relaţională. După o
îndelungă analiză şi sinteză a definiţiilor formulate de cercetătorii consacraţi ai domeniului,
dar şi profesori de seama care au analizat această paradigmă, putem afirma pe scurt că o
bază de date relaţională reprezintă colecţii organizate de date şi corelate din punct de vedere
logic. La o simplă analiză a definiţiei, observăm că ea impune două direcţii de studiu:
1. colecţii organizate de date;
2. colecţii corelate logic.
În acest context, pe parcursul capitolului, plecând de la prezentarea aspectelor fundamentale
care caracterizează modelul relaţional al bazelor de date, vom argumenta definiţia prezentată
anterior şi implicit cele două direcţii de studiu.
Atunci când luăm în discuţie abordarea relaţională a bazelor de date, vom analiza în
principal trei direcţii:
• structura datelor – are în vedere definirea domeniilor şi a relaţiilor corespunzătoare
acestor domenii;
• integritatea datelor – se referă la definirea restricţiilor de integritate care au rolul de a
proteja datele bazei de date; lipsa unor restricţii de integritate ar putea avea ca efect
alterarea conţinutului bazei de date şi obţinerea unor rezultate eronate;
• prelucrarea datelor – se realizează prin intermediul operaţiilor specifice algebrei
relaţionale sau calculului relaţional.
După cum sugerează şi numele, modelul relaţional se bazează pe noţiunea de relaţie
care este definită din punct de vedere matematic ca o submulţime a produsului cartezian a
unei liste (finite) de mulţimi, numite domenii. Fiecare element al unei relaţii poartă numele de
tuplu, iar numărul de domenii se numeşte aritate. Într-o relaţie, fiecare domeniu se identifică
printr-un nume, numit atribut, iar mulţimea numelor atributelor unei relaţii formează schema
acesteia. Fie relaţia din exemplul 4.1:
Exemplul 4.2
Student ( cnp nr_matr nume pren facult spec )
16
1701212120139 1234 Popa Dan FSE IE
2731210176143 1987 Darie Alina FD AP
1801009129145 4432 Mihnea Ion FSE FB
Exemplul 4.3
Student ( cnp nr_matr nume pren facult spec )
17
1701212120139 1234 Popa Dan FSE IE
2731210176143 1987 Darie Dan FD AP
1801009129145 4432 Popa Ion FSE IE
În continuare ne vom opri asupra celor două atribute rămase, şi anume cnp şi nr_matr.
Cu siguranţă, că la întrebarea „Sunt atributele cnp şi nr_matr chei candidat?” am primi un
singur răspuns: „DA”. Aşa să fie oare? Nu este aşa. Iar argumentul este dat de exemplul 4.4.
Exemplul 4.4
Student ( cnp nr_matr nume pren facult spec )
1701212120139 1234 Popa Dan FSE IE
2731210176143 1987 Darie Dan FD AP
2731210176143 5634 Darie Dan FSE FB
Aşa cum observăm, pe domeniul aferent atributului cnp, avem două valori identice:
este situaţia în care o persoană este studentă la două facultăţi diferite (şi nu este singura
situaţie posibilă). Deci, nici atributul cnp nu poate fi cheie candidat. De ce am ajuns să facem
o astfel de greşeală şi să considerăm că cnp poate fi cheie? Probabil că ne-am gândit la
faptul că nu pot existat două persoane cu acelaşi CNP. Este adevărat: nu există două
persoane cu acelaşi CNP, însă schema relaţiei Student nu conţine doar atribute despre o
persoană, ceea ce înseamnă că trebuia să ne gândim dacă pentru un anume CNP putem
identifica cel puţin o valoare a unui alt atribut care să se modifice faţă de tuplul de la care am
plecat.
În ceea ce priveşte atributul nr_matr, putem spune că el este cheie candidat. Cum
arătăm asta? Să plecăm de la situaţie din exemplul 4.5.
Exemplul 4.5
Student ( Cnp nr_matr nume pren facult spec )
1701212120139 1234 Popa Dan FSE IE
? 1234 ? ? ? ?
Astfel, considerăm că avem un tuplu care reprezintă un student cu numărul matricol
1234, care este la facultatea FSE, specializarea IE. Dacă vom putea înlocui semnul întrebării
aferent unui atribut cu o valoare diferită de cea aflată pe celălalt tuplu (evident, pentru acelaşi
atribut), atunci cele două tupluri diferă, ceea ce înseamnă că putem avea valori duplicate pe
domeniul respectiv de valori. În mod cert, un student cu o anumită matricolă (în cazul nostru
1234) nu poate avea alt cod numeric personal, alt nume sau alt prenume. De asemenea, un
student nu poate fi la două specializări diferite (în aceeaşi facultate sau în facultăţi diferite)
având aceeaşi matricolă. Asta înseamnă că dacă pe tuplul doi am avea 1234 ca matricolă,
atunci toate celelalte valori ar fi identice cu cele de la primul tuplu, situaţie care ar face ca
cele două tupluri să fie identice şi aşa cum aminteam în prima parte, o astfel de situaţie nu
este permisă (acest aspect este reprezentat în exemplul 4.6). Deci, atributul nr_matr este
cheie candidat a relaţiei Student.
Exemplul 4.6
Student ( cnp nr_matr nume pren facult spec )
1701212120139 1234 Popa Dan FSE IE
1701212120139 1234 Popa Dan FSE IE
Odată identificată o cheie candidat, procesul nu este finalizat. În continuare va trebui
să căutăm şi diferite combinaţii de atribute care ar putea fi cheie. Singurul lucru clar este
18
acela că atributul nr_matr nu poate face parte din nici o cheie compusă (cheia trebuie să fie
formată din numărul minim de atribute care identifică în mod unic tuplurile unei relaţii). Dacă
vom avea în vedere algoritmul descris anterior, vom mai identifica o cheie candidat:
cnp+facult+spec. De ce toate trei? Dacă ne-am gândi la atributele cnp+facult am vedea că un
student într-o facultate, poate fi la mai multe specializări (spre exemplu, la forme diferite de
învăţământ) în timp ce pentru combinaţia de atribute cnp+spec ar putea apare valori
duplicate în cazul în care mai multe facultăţi ar avea o aceeaşi specializare. Însă, în situaţia
în care le analizăm pe toate trei am ajunge la concluzia că o persoană nu poate face aceeaşi
specializare de două ori într-o facultate 6 .
Sintetizând, pentru relaţia Student am identificat două chei candidat:
• nr_matr;
• cnp+facult+spec.
Dintre cele două chei candidat, vom alege cheia primară ca fiind nr_matr deoarece are
mai puţine atribute decât cealaltă cheie, ceea ce înseamnă că, în final vom avea:
• chei candidat: nr_matr, cnp+facult+spec;
• cheie primară: nr_matr;
• cheie alternantă: cnp+facult+spec.
Astfel, în final, relaţia noastră ar arăta astfel:
Aşa cum observăm, atributul/atributele care formează cheia primară a relaţiei vor
apare subliniate.
În mod normal, relaţia de mai sus este una nenormalizată şi este evident că ea
introduce redundanţă. Astfel, ar fi mai simplu dacă datele referitoare la facultăţi, respectiv
specializări, le-am gestiona separat, în relaţii de sine stătătoare. În acest caz, redundanţa ar
fi în mare măsură înlăturată, iar procesul de identificare a cheilor ar fi mult simplificat. Astfel,
în exemplul 4.8 vom descompune relaţia în alte trei relaţii:
Exemplul 4.8
Student (cnp, nr_matr, nume, pren)
Facultate (facult, profil)
Specializare (spec, formă_înv)
În relaţia Facultate, atributul facult este cheie primară deoarece considerăm că nu pot
exista două facultăţi cu acelaşi nume în cadrul unei universităţi. De asemenea, atributele
spec şi formă_înv formează cheia primară în relaţia Specializare numai luate împreună
deoarece o anumită specializare poate apare la diferite forme de învăţământ (spre exemplu,
specializarea Contabilitate şi Informatică de Gestiune are studenţi şi la forma de învăţământ
Zi, şi la Ifr).
6
Mecanismul de identificare corectă şi completă a cheilor unei relaţii se va realiza numai după parcurgerea şi înţelegerea
procesului de normalizare a unei baze de date relaţionale.
19
Astfel, prin descompunerea relaţiei iniţiale în cele trei relaţii din exemplul 4.8 am
argumentat prima parte a definiţiei bazei de date relaţionale. Aşa cum observăm, în acest
moment structura noastră este formată din trei colecţii organizate în care:
• Student conţine doar date de strudenţi;
• Facultate include ca realizări (tupluri) doar facultăţile gestionate;
• Specializare care se referă la specializările fiecărei facultăţi gestionate.
20
Legitimaţie ( nr_leg valabilitate )
12121 2
23456 2
187654 3
După migrarea cheii primare sub forma cheii străine, putem spune că am realizat
legătura între relaţiile asociate, astfel încât să putem spune despre un client ce număr de
legitimaţie are, sau plecând de la numărul legitimaţiei, să putem identifica fără ambiguitate
care este deţinătorul acesteia.
21
Pentru a avea o evidenţă clară a apartenenţei unui student la o specializare, va trebui
să realizăm legătura dintre cele două relaţii. Ca şi în cazul primului tip de legătură, şi de
această dată vom pleca de la identificarea tipurilor de relaţii, răspunzând pe rând la
întrebarea: „Unui tuplu din relaţia X câte tupluri în relaţia Y îi pot corespunde”, unde X şi Y
sunt cele două relaţii pe care le asociem.
a. Identificarea tipului pentru relaţia Student: întrebarea la care trebuie să răspundem este:
„Un student la câte specializări poate fi?”. La această întrebare, o parte din cititori ar
putea spune că un student poate fi la una sau mai multe specializări, în timp ce alţii
consideră că un student nu poate fi decât la o singură specializare. Răspunsul corect este
cel de-al doilea deoarece un student, care are asociată o anumită matricolă, nu poate fi la
mai multe specializări. Este clar că o persoană, cu un anume cod numeric personal,
poate fi la mai multe specializări, caz în care numărul matricol este altul. Altfel spus,
studentul Popa Dan cu matricola 1111 nu poate aparţine decât unei singure specializări.
Concluzionând vom afirma despre Student că este relaţie fiu.
b. Identificarea tipului pentru relaţia Specializare – în acest caz, răspunsul la întrebarea: „La
o specializare câţi studenţi pot fi înmatriculaţi?” este „mai mulţi”, ceea ce înseamnă că
unui tuplu din relaţia Specializare îi corespund mai multe tupluri din relaţia Student. În
acest caz, Specializare este relaţie părinte.
Plecând de la analiza făcută anterior, am stabilit că relaţia Student este fiu în timp ce
relaţia Specializare este părinte: legătura dintre cele două se va realiza prin migrarea cheii
primare din relaţia părinte (cod_spec din Specializare) sub formă de cheie străină în relaţia
Student, iar modelul va arăta ca în exemplul 4.12.
Exemplul 4.12:
Student ( nr_matr cnp nume pren cod_spec )
1111 1701212120139 Popa Dan 61
2222 2711010120121 Darie Alina 52
3333 1721209145123 Preda Marin 61
22
Exemplul 4.13:
Factură ( serie_fact nr_fact val_fact data_fact )
DX 1111 100 10.10.2008
VR 2222 200 10.10.2008
DF 3333 300 12.10.2008
Aşa cum se observă, legătura de tipul mai mulţi la mai mulţi a fost pusă în evidenţă
prin noua relaţie generată: Aprovizionare. În cadrul acesteia, pe primele două tupluri am pus
în evidenţă faptul că o factură (DX 1111) poate conţine mai multe produse (conţine produsele
cu codul 11 şi 33) în timp ce un produs (cel cu codul 11) poate fi achiziţionat prin intermediul
mai multor facturi (se găseşte atât pe factura DX 1111 cât şi pe DF 3333).
În cadrul relaţiei Aprovizionare observăm un nou atribut, care nu se regăsea la nivelul
relaţiilor pe care le-am asociat. Acest atribut apare în cadrul acestei noi relaţii deoarece o
realizare a acestuia are loc numai atunci când asociem câte un tuplu din fiecare relaţie (nu
putem avea o cantitate aprovizionată dacă există produsul, dar nu există factura şi, în acelaşi
timp, nici dacă există factura şi nu există produsul).
23
Revenind la exemplul 4.8, vom asocia cele trei relaţii cu scopul de a putea preciza cu
claritate facultatea şi specializarea la care este înmatriculat fiecare student.
Exemplul 4.15
Student ( nr_matr nume pren )
111 Preda Marin
222 Darie Alina
333 Ionescu Cătălin
În urma asocierii celor trei relaţii, se va genera o nouă relaţie care se va identifica prin
intermediul atributelor nr_matr, facult şi cod_spec, aşa cum se observă în exemplul 4.16.
Exemplul 4.16
Studiu ( nr_matr facult cod_spec )
111 Ştiinţe Economice 751
222 Drept 662
333 Ştiinţe Economice 751
Cu ajutorul acestei noi relaţii, putem spune despre Preda Marin că este student la
facultatea de Ştiinţe Economice, la specializarea FB, forma de învăţământ IFR.
Abia în acest moment putem spune că am argumentat pe deplin definiţia bazei de
date relaţionale: am creat diferite colecţii de date organizate, după care am stabilit legăturile
logice dintre acestea pentru a avea o viziune completă asupra întregului volum de date care
formează respectiva bază de date. În acest fel, utilizatorul va putea, prin intermediul
comenzilor de interogare specifice SGBD-ului utilizat, să acceseze şi să utilizeze în acelaşi
timp toate datele gestionate în baza de date.
24
produsul cartezian, proiecţia şi selecţia. Dintre aceste cinci operaţii, primele trei presupun
existenţa a două relaţii în timp ce următoarele se aplică pentru o singură relaţie.
1. Reuniunea. Reuniunea a două relaţii A şi B 7 , notată A ∪ B , este o relaţie care va avea
schema identică cu a relaţiilor reunite şi care va include ca tupluri, toate tuplurile celor două
relaţii, considerate o singură dată.
Exemplul 4.17
Stud1 ( nr_matr nume pren )
111 Preda Marin
222 Darie Alina
333 Ionescu Cătălin
2. Diferenţa. Diferenţa a două relaţii A şi B 8 , notată A \ B , este o relaţie care va avea schema
identică cu a relaţiilor iniţiale şi ca realizări toate tuplurile primei relaţii care nu se regăsesc în
cea de-a doua relaţie.
Astfel, dacă realizăm diferenţa relaţiilor Stud1 şi Stud2 din exemplul 4.17, rezultatul
este următorul:
Stud1\ Stud2 = ( nr_matr nume pren )
111 Preda Marin
222 Darie Alina
3. Produsul cartezian. Fie relaţiile A (cu aritatea a) şi B (cu aritatea b) 9 . Produsul cartezian
al celor două relaţii, notat A × B este o relaţie care are aritatea a+b şi care va conţine toate
tuplurile rezultate prin concatenarea unui tuplu din A cu fiecare tuplu din B. Trebuie menţionat
faptul că atunci când schemele celor două relaţii includ şi atribute comune, atunci în schema
produsului cartezian, cele două atribute vor apare de două ori, însă cu nume diferite (o relaţie
nu poate avea două atribute cu acelaşi nume).
Exemplul 4.18
Student ( nr_matr nume pren )
111 Preda Marin
222 Darie Alina
333 Ionescu Cătălin
7
Relaţiile A şi B trebuie să aibă aceeaşi schemă definită pe aceleaşi domenii.
8
Relaţiile A şi B trebuie să aibă aceeaşi schemă definită pe aceleaşi domenii.
9
Schemele relaţiilor A şi B sunt diferite, dar pot exista atribute comune.
25
Disciplină ( cod_disc denumire tip_disc )
SE1 Baze de date curs
SE2 Baze de date laborator
SE3 Contabilitate Seminar
Aşa cum se observă, aritatea ambelor relaţii este 3, ceea ce înseamnă că după
realizarea produsului cartezian asupra celor două relaţii, aritatea va fi 6 (relaţia rezultată în
urma operaţiei Student × Disciplină va avea şase atribute), aşa cum se observă mai jos:
26
Plecând de la relaţia de mai sus, dacă dorim să realizăm o selecţie a studenţilor cu
media mai mare sau egală cu opt, vom ajunge la următoare relaţie:
Pe lângă operaţiile amintite anterior, se mai pot utiliza şi alte operaţii, numite operaţii
derivate şi care se bazează pe operaţiile de bază. Utilizarea în practică a operaţiilor derivate
oferă o flexibilitate sporită a cererilor de interogare a bazei de date şi facilitează, în cele mai
multe situaţii, obţinerea unor răspunsuri mai rapide. Dintre operaţiile derivate utilizate mai
frecvent amintim:
6. Intersecţia. Intersecţia a două relaţii A şi B 10 , notată A ∩ B , este o relaţie care va avea
schema identică cu a relaţiilor intersectate, iar ca realizări doar tuplurile comune celor două
relaţii.
Exemplul 4.21
Stud1 ( nr_matr nume pren )
111 Preda Marin
222 Darie Alina
333 Ionescu Cătălin
10
Relaţiile A şi B trebuie să aibă aceeaşi schemă definită pe aceleaşi domenii.
11
În cazul uniunii, cele două atribute trebuie să fie câte unul din fiecare relaţie.
27
Exemplul 4.22 Fie următoarele relaţii:
Aprov ( s_fact nr_fact cod_prod cant_a )
DX 1122 P1 20
DX 1122 P2 10
JZ 2233 P3 15
DX 1122 P1 20 C1 20
DX 1122 P2 10 C1 20
DX 1122 P2 10 C2 12
DX 1122 P2 10 C3 10
JZ 2233 P3 15 C1 20
În cazul în care condiţia este cant_a=cant_c, atunci vom avea o echiuniune a celor
două relaţii, aşa cum se observă în exemplul 4.23:
28
Exemplul 4.23: Echiuniunea relaţiilor Aprov şi Comandă.
Aprov | X | Comandă= ( s_fact nr_fact cod_prod cant_a cod_cmd cant_c )
cant _ a =
cant _ c
DX 1122 P1 20 C1 20
DX 1122 P2 10 C3 10
29
| Student X Disc |= (nr_matr nume pren den_disc notă )
222 Darie Alin Birotică 10
333 Moga Dana Finanţe 9
333 Moga Dana Birotică 8
9. Uniunea externă. Uniunea externă (outer join) va include toate tuplurile uniunii naturale, la
care se adaugă câte un tuplu pentru acele tupluri dintr-o relaţie care nu au corespondent în
cealaltă relaţie. Tuplurile adăugate au valoarea NULL pentru toate atributele ce nu apar în
relaţia din care provin. Uniunea externă se notează astfel: A | ⊗ | B, unde A şi B sunt cele
două relaţii.
Plecând de la relaţiile Student şi Disc din exemplul 4.23 şi de la uniunea naturală
Student | X | Disc, vom avea următoarea uniune externă:
Exemplul 4.24
Student | ⊗ | Disc = (nr_matr nume pren den_disc notă )
111 Popa Dan NULL NULL
222 Darie Alin Birotică 10
333 Moga Dana Finanţe 9
333 Moga Dana Birotică 8
Aşa cum se observă, în relaţia Student există un singur tuplu care nu are
corespondent în relaţia Disc: în acest caz, tuplul va fi adăugat în relaţia aferentă uniunii
externe, iar valorile aferente atributelor din relaţia Disc pentru care nu există corespondent
vor primi valoarea NULL. În ceea ce priveşte relaţia Disc, nu există nici un tuplu care să nu
aibă corespondent în relaţia Student (altfel spus, valorile 222 şi 333, ca realizări ale
atributului nr_matr în relaţia Disc, se regăsesc în relaţia Student pe domeniul de valori al
atributului nr_matr).
De asemenea, există două operaţii derivate din uniunea externă şi anume uniune
externă stânga (left outer join) şi uniune externă dreapta (right outer join). În ceea ce priveşte
uniunea externă stânga, relaţia va conţine toate tuplurile uniunii naturale la care se vor
adăuga cele ale primei relaţii (considerată relaţia din stânga) care nu au corespondent în
relaţia din dreapta. În dreptul acestor valori se va trece valoarea NULL (exemplul 2.25). În
mod similar se realizează uniunea externă stânga, numai că în acest caz vor fi adăugate
uniunii naturale doar tuplurile relaţiei din dreapta (exemplul 2.26).
Exemplul 4.25
Student | ⊗ Disc = (nr_matr nume pren den_disc notă )
111 Popa Dan NULL NULL
222 Darie Alin Birotică 10
333 Moga Dana Finanţe 9
333 Moga Dana Birotică 8
Exemplul 4.26
Student ⊗ | Disc = (nr_matr nume pren den_disc notă )
222 Darie Alin Birotică 10
333 Moga Dana Finanţe 9
333 Moga Dana Birotică 8
30
Bibliografie
1. [Bâscă, 1997] Bâscă, O., Baze de date, Editura All, Bucureşti, 1997.
2. [Connoly et al., 2002] Connoly, T., Begg, C., Strachan, A., Database Systems – A
practical Approach to Design, Implementation and Management, Second Edition, Addison
Wesley Limited, 2002.
3. [Date, 1994] Date, J., An introduction to Database Systems, ed. Addison Wesley, 1994.
4. [Date, 2004] Date, J., An introduction to database systems, ediţia a VIII-a, Pearson
Addison Wesley, 2004.
5. [Diaz, 2000] Diaz, O., Advanced database technology and design, ed. Piattini, 2000.
6. [Fotache, 2005] Fotache, M., Proiectarea bazelor de date. Normalizare şi postnormalizare.
Implementări SQL şi Oracle, Editura Polirom, Iaşi, 2005.
7. [Garsia-Molina et al., 2002] Garcia-Molina, H., Ullman, H., Widom, J., Database Systems.
The complete Book, Prentice Hall, Upper Saddle Riner, 2002.
8. [Georgescu, Georgescu, 2005] Georgescu, C., Georgescu, M., Baze de date relaţionale
şi multidimensionale, Editura Didactică şi Pedagogică R.A., Bucureşti, 2005.
9. [Lungu, Bodea, 1995] Lungu, I., Bodea, C., Baze de date – organizare, proiectare şi
implementare, Editura All, Bucureşti, 1995.
10. [Popa et al., 1994] Popa, Ghe., Stanciu, A., Ivancenco, V., Mareş, V., SGBD, Editura All,
Bucureşti, 1994.
11. [Popescu, 2001] Popescu, I., Modelarea bazelor de date, Editura Tehnică, Bucureşti,
2001.
12. [Trandafir et al., 2007] Trandafir, R., Nistorescu, M., Mierluş-Mazilu, I., Baze de date
relaţionale, Bucureşti, 2007.
13. [Velicanu et al., 2000] Velicanu, M., Bodea, C., Lungu, I., Ioniţă, I., Bădescu, G., Sisteme
de gestiune a bazelor de date, Editura Petrion, Bucureşti, 2000.
14. [Velicanu et al., 2003] Velicanu, M., Lungu, I., Muntean, M., Ionescu, S., Sisteme de baze
de date – teorie şi practică, Editura Petrion, Bucureşti, 2003.
15. http://vega.unitbv.ro/~cataron/Courses/BD/BD_Cap_2.pdf.
31