Documente Academic
Documente Profesional
Documente Cultură
BAZE DE DATE
SUPORT DE CURS
Uz intern
Bacău
2007
CUPRINS
2
Capitolul 1. INTRODUCERE IN STUDIUL LIMBAJELOR DE PROGRAMARE
3
de prelucrare prin care se realizează introducerea/extragerea datelor în/din
sistem, efectuarea operaţiunilor de calcul, efectuarea transferului de date între
diferite zone de memorie etc.;
de organizare (de structurare internă a programului) ce asigură codificarea
structurilor de control şi de apelare sau de salt la alte programe.
Ansamblul activităţilor de concepere, dezvoltare şi întreţinere a programelor poartă
denumirea de programare. Programul scris de om se numeşte program-sursă. Pentru a putea
fi înţeles de calculator el trebuie adus în format executabil. Obţinerea formatului executabil se
realizează prin traducere, cu ajutorul unor programe speciale, care pot fi interpretoare sau
compilatoare.
Figura 1.1 ilustrează procesul de programare.
Problema
Programator execută
Calculator
(utilizator) programul
4
Industrializarea activităţii de programare a determinat apariţia, în 1968, a conceptului
de ingineria programării (software engineering), un domeniu al informaticii care se ocupă
cu identificarea celor mai adecvate soluţii, metode, procedee şi instrumente care să conducă,
în condiţii optime de productivitate şi eficienţă, la elaborarea de produse-program
performante. De la ingineria programării s-a trecut apoi la ingineria programării asistate de
calculator (CASE- Computer Aided Software Engineering). Altfel spus, calculatorul îşi face
singur programele, numai că trebuie să-i furnizăm singuri intrările într-un mod ordonat, după
anumite reguli.
La primele limbaje de programare trecerea de la programele sursă la programele
executabile se realiza prin comenzi distincte în care se specificau explicit operaţiunile de
efectuat. Ulterior, evoluţia s-a orientat către medii de programare. Mediile de programare
reprezintă pachete de programe care asigură integrarea următoarelor funcţii: introducerea şi
editarea programului sursă, interpretarea sau compilarea, respectiv editarea de legături,
încărcarea şi lansarea în execuţie, depanarea programului. Actualmente majoritatea limbajelor
de programare sunt integrate în medii de programare. Spre exemplu, Visual Basic se poate
considera că reprezintă un mediu de programare care oferă un editor de texte, un interpretor,
un încărcător de programe, un depanator de programe. În puls, oferă facilităţi de gestionare a
fişierelor prin meniul FILE şi o informare completă şi rapidă prin sistemul HELP.
Program
executabil 1. Asamblare Asamblor
2. Execuţie Date
Rezultate
finale
5
Fig. nr.1.2. Tratarea programelor în limbaje de asamblare
6
P.S.
1. Compilare/ Compilator/
ProgramO. interpretare interpretor
2. Editarede Editor de
P.O. imagine legături legături
memorie
3. Execuţie Date
executabil
Rezultate
finale
7
Evenimentul ce a perturbat evoluţia limbajelor procedurale a fost apariţia şi, mai ales,
răspândirea PC-urilor. La mijlocul anilor ’80 a început declinul mainframe-urilor si al
prelucrării centralizate a datelor. Managerii erau încântaţi de posibilităţile pe care le oferea
PC-ul în a-şi rezolva singuri multe din probleme, mai ales odată cu apariţia interfeţelor
grafice. Utilizatorii de PC-uri nu-şi propuneau să rezolve probleme complicate şi să dezvolte
aplicaţii complexe, astfel că nu aveau nevoie de limbaje declarative. Ei cereau limbaje grafice,
prietenoase, de aceea limbajele procedurale au evoluat altfel decât către declarativ. A IV-a
generaţie de limbaje de programare a fost orientată către utilizatori, fiind numită şi generaţia
utilizatorilor finali. Producătorii de software s-au orientat către crearea de instrumente şi
medii de lucru prietenoase, iar accentul s-a mutat pe interfaţa cu utilizatorul. O interfaţă
grafică, simplă, dar nu simplistă, care să ofere utilizatorului un mediu de lucru eficient şi
prietenos în acelaşi timp a devenit cheia unui soft de succes.
Caracteristicile limbajelor de generaţia a IV-a pot fi rezumate astfel:
neproceduralitate, interfaţă prietenoasă şi eficacitate.
Majoritatea specialiştilor grupează limbajele din generaţia a-4-a în următoarele clase
de produse:
limbaje (instrumente) de interogare;
generatoare de rapoarte;
generatoare de aplicaţii şi /sau proiecte;
generatoare de grafice;
instrumente de sprijinire a deciziilor.
La ora actuală constructorii de software oferă produse care integrează toate aceste
funcţiuni. De exemplu, programul de calcul tabelar EXCEL este un instrument de sprijinire a
procesului decizional, dar care oferă şi o vastă gamă de alte facilităţi: generarea graficelor,
obţinerea, actualizarea şi interogarea bazelor de date, generarea rapoartelor etc.
Limbajele de interogare la rândul lor pot fi de două tipuri:
limbaje de interogare simplă care permit consultarea fişierelor şi bazelor de date pe un
singur tip de înregistrare logică utilizând un criteriu de selecţie mai puţin complex;
limbaje de interogare complexă care permit consultarea mai multor tipuri de înregistrări
logice din una sau mai multe baze de date devenind posibilă asocierea unor structuri
foarte diferite.
În cea de a doua subgrupă intră SQL (Structure Query Language), QBE (Query By
Example), Hiper Talk, INTTELECT, etc. Cea mai mare răspândire o cunoaşte SQL, un
nucleu SQL fiind prezent în orice sistem de gestiune a bazelor de date (Acces, FoxPro,
Oracle).
Generatoarele de rapoarte îndeplinesc, în principal, trei funcţii esenţiale: selecţia
informaţiilor solicitate, ordonarea datelor după criterii prestabilite şi editarea rapoartelor într-
o structură formalizată folosind un număr minim de instrucţiuni de programare.
În general, toate sistemele de gestiune a bazelor de date precum şi programele de
calcul tabelar (spreadsheet-urile) au încorporate generatoare de rapoarte. Cele mai populare
instrumente din această categorie sunt: Easytrieve Plus, Datatrieve, Mark V1.
Există şi generatoare de rapoarte care sunt proiectate pentru a fi utilizate de către
specialişti – RPG III (Report Program Generator).
Generatoarele de aplicaţii şi/sau proiecte se adresează în special utilizatorilor
cunoscători ai tehnicilor de programare. Ele permit ca pe baza unor descrieri externe a datelor
şi a modului de organizare, prelucrare şi afişare a acestora să se accelereze generarea
(codarea) programelor, folosind un limbaj specific sau chiar un limbaj de generaţia a-3-a
(COBOL). Intră în această clasă de generatoare CSP (Cross System Product), FOCUS,
Mantis, Natural, NOMAD2, RAMIS 1, IDEAL MAPPER, modulele de tip RAD pentru
dezvoltarea rapidă a aplicaţiilor.
1
Oprea, D., Premisele şi consecinţele informatizării contabilităţii, Ed. Graphix, Iaşi,
1994, p. 96
8
O categorie aparte o reprezintă pachetele-aplicaţii specializate pentru aplicaţii
economice generale (finanţe-contabilitate) sau chiar numai pentru procesări de texte,
tehnoredactări (DeskTop Publishing).
Generatoarele de grafice sunt instrumente ce permit reprezentarea sub formă grafică
(histograme, bare, linii, cercuri etc. bi sau tridimensionale, cu opţiuni de culoare, text,
legendă), a rezultatelor prelucrării datelor. Ele sunt independente (Tell-al Graph, SAS,
ADRS/B6) sau încorporate în spreadsheet-uri (LOTUS, QUATTRO, EXCEL) sau SGBD-uri
(FoxGraph).
Instrumentele de sprijinire a deciziilor se adresează experţilor din diferite domenii
de activitate (finanţe, management, contabilitate, marketing etc.) pentru elaborarea şi
urmărirea bugetelor, analiza investiţiilor, studiul pieţei etc. permiţând realizarea simulării şi
modelării matematice a fenomenelor economice. Intră în această clasă programele de calcul
tabelar (QUATTRO, LOTUS, EXCEL ş.a.), pachetele program statistice (SPSS, SAS etc.).
Generaţia a V-a cuprinde limbajele care sunt sau vor fi îndreptate spre exploatarea
bazelor de cunoştinţe, crearea sistemelor expert şi, mai general, spre rezolvarea problemelor
legate de inteligenţa artificială.
După cum se observă limbajele au evoluat continuu, aşa cum rezultă din figura 1.4.
9
Limbajele procedurale (numite şi limbaje de nivel înalt) sunt utilizate pentru a
descrie un algoritm de rezolvare a unei probleme. Se descriu complet operaţiunile care se
execută şi ordinea de execuţie a acestora. Ele răspund la întrebarea CUM?. Exemple:
COBOL, FORTRAN, BASIC, ALGOL, PASCAL.
Limbajele neprocedurale (numite şi limbaje de nivel foarte înalt) oferă soluţia de
rezolvare a unei probleme, dar fără a da detalii asupra modului concret de rezolvare. Ele
răspund la întrebarea CE?. Exemplu: limbajele din SGBD, PROLOG, LISP.
Limbajele speciale descriu funcţii specifice ale produselor-program. De exemplu,
procesorul Word are inclus un limbaj de scriere a macrourilor.
Limbajele orientate pe problemă deservesc domenii restrânse de activitate. Astfel
de limbaje sunt limbajele de simulare, ca, de exemplu, GPSS (General Purpose System
Simulation) care este conceput pentru descrierea şi rezolvarea problemelor de simulare.
3
Cristea , V. , Dicţionar de informatică, Editura Ştiinţifică şi enciclopedică,
Bucureşti , 1981, p. 240
10
Datele structurate sunt colecţii de date elementare care, într-un anumit sens, sunt în
relaţii unele cu altele. Natura relaţiei se stabileşte la crearea structurii şi poate diferi în funcţie
de nivelurile de abstractizare.
Cele mai utilizate date structurate sunt:
• articolul;
• fişierul;
• tabloul.
Articolul este o structură de tip arborescent ale cărui câmpuri (câmpul reprezentând o
mărime ce poate lua valori diferite dintr-o multitudine de valori posibile, face excepţie câmpul
boolean care poate lua doar două valori) sunt descendenţii rădăcinii (nivelul 1), subcâmpurile
sunt descendenţii câmpurilor (nivelul 2) ş.a.m.d. Câmpurile unui articol pot fi date elementare
sau grupuri de date de diverse tipuri. În principiu fiecare câmp sau subcâmp se defineşte prin
următoarele atribute:
• nume - un cod unic de identificare;
• tip - natura datei;
• lungime - numărul total de caractere;
• partea zecimală – specificată numai pentru datele numerice.
De exemplu, articolul PRODUSE poate avea în structură următoarele câmpuri:
Nume Tip Lungime Partea zecimală
CODPROD N 5 0
DENUMIRE C 10
PREŢ N 9 2
STOC N 8 2
Fişierul este o structură de date omogene din punct de vedere a semnificaţiilor şi a
cerinţelor de prelucrare, înregistrate pe un suport şi care pot fi exploatate individual.
Într-un fişier trebuie să distingem articolul tip (structura articolului) care este o
modalitate de a descrie dacă un obiect aparţine sau nu la o clasă de obiecte, de realizările
(articolele) care sunt elemente ale clasei de obiecte descrise.
Tabloul este o colecţie de date de acelaşi tip, aranjate într-o structură rectangulară, cu
una sau mai multe dimensiuni. Tablourile cu o dimensiune se numesc vectori, iar cele cu mai
multe dimensiuni se numesc matrici sau masive. Pentru fiecare dimensiune se asociază un
indice ale cărui valori sunt folosite pentru referirea elementelor tabloului.
Ex. T (i1, i2...ik), unde k reprezintă numărul de dimensiuni, iar i1, i2....ik sunt
elementele tabloului T.
De exemplu, pentru introducerea notelor obţinute de studenţi în cele 2 sesiuni, fiecare
sesiune având câte 5 examene, definim variabila Nota(2,5). Vom obţine un tablou de variabile
astfel: Nota(1,1), Nota(1,2), Nota(1,3), Nota(1,4), Nota(1,5), Nota(2,1), etc.
În Visual FoxPro, de exemplu, declararea unui tablou poate fi realizată cu comanda
DIMENSION:
DIMENSION VECT(3), MATR(5,10)
NOTE se defineşte vectorul VECT cu 3 elemente şi matricea MATR cu
5 linii şi 10 coloane.
Prelucrarea datelor presupune parcurgerea unei succesiuni ordonate de operaţii care
acţionează asupra mărimilor. Ele se pot grupa în următoarele categorii:
operaţiuni de atribuire;
operaţiuni de calcul;
operaţiuni de decizie;
operaţiuni de intrare /ieşire;
operaţiuni de transfer a controlului.
11
Operaţiuni de atribuire sunt acelea prin care unui câmp i se atribuie o anumită
valoare predefinită sau rezultatul evaluării unei expresii.
TOTVAL = 0
SF = SID + RD – RC
Operaţii de calcul se definesc pe mulţimea numerelor reale. Dintre acestea fac parte
operaţia de adunare, scădere, înmulţire, împărţire, ridicare la putere, calculul unor expresii
numerice etc.
Ca operatori se utilizează:
+ pentru adunare;
- pentru scădere;
* pentru înmulţire;
/ pentru împărţire;
** pentru ridicare la putere.
De asemenea, în cadrul expresiilor se pot utiliza şi parantezele, evaluarea acestora
făcându-se după regulile din algebră.
Exemplu: SALAR NET = ((NRORLUCR * TO) + SPORV) - IMPOZ
a = (b * c)**2 + 650
Operaţiunile de decizie sunt utilizate pentru a delimita valoarea logică a unei
propoziţii: adevărat sau fals. Ele condiţionează executarea unor operaţii sau grupuri de
operaţiuni. Operatorii utilizaţi pentru scrierea condiţiilor pot fi operatori relaţionali (=, >, <,
≠) şi operatori logici (AND, OR şi NOT).
Exemplu:
IF STOCSIGUR < 10000 THEN PRINT "ATENŢIE! E NECESARĂ
REAPROVIZIONAREA"
ENDIF
sau
FOR MEDIA > 9.50 .AND. DOMICILIU ='NON IAŞI' PRINT 'DREPT DE
CAZARE'
Operaţiunile de intrare/ieşire vizează realizarea transferului de date între memoria
externă şi cea internă şi invers. Pentru optimizarea operaţiei de intrare/ieşire se interpun zone
tampon (buffere), atât pentru intrare, cât şi pentru ieşire conform schemei următoare (figura
nr. 1.5):
Zonatampon
Zonåde
intrare Z. ARTICOL COD DEN UM CANT PREº
X
Zonåde VALOARE
lucru
12
Cele mai utilizate operaţii de I/E sunt cele de deschidere şi închidere a fişierelor şi de
citire şi scriere date.
Operaţiunile de transfer a controlului sunt operaţii de salt şi de apelare. Cele de
salt au rolul de a preda controlul unei alte operaţiuni decât cea imediat următoare, iar cele de
apel, determină lansarea în execuţie a unor proceduri (grupuri de operaţiuni), evitându-se
descrierea lor, de mai multe ori, în cadrul algoritmului.
Schematic derularea unei secvenţe de operaţiuni de apel se prezintă astfel (figura nr.
1.6.):
13
Cea mai importantă producătoare de compilatoare COBOL (firma britanică Micro
FOCUS) a lansat în 1994 COBOL orientat pe obiecte pentru microcalculatoare. La ora
actuală, pentru microcalculatoare, firma Micro Focus oferă compilatoare COBOL care permit:
dezvoltarea de aplicaţii (inclusiv cu facilităţi grafice) pentru lucrul în reţelele de
calculatoare;
dezvoltarea de aplicaţii cross-platform destinate unei game largi de echipamente şi
sisteme de operare;
asigurarea portabilităţii la nivel de programe sursă.
COBOL reprezintă un software complex cu un înalt grad de generalizare şi care
asigură independenţa programelor faţă de componentele hardware.
BASIC (Begginner’s All Purpose Instruction Code) este unul din cele mai utilizate
limbaje de generaţia a III-a, poate şi pentru faptul că a fost livrat odată cu sistemul de operare
MS-DOS, fiind inclus între aplicaţiile acestuia (universalitatea şi simplitatea limbajului a
determinat includerea sa în sistemele de operare). Totul a început în 1963, când profesorii
Kurtz şi Kemeny de la colegiul Darmouth, SUA încep lucrul la un nou limbaj, care să
înlocuiască Fortran şi lucrul cu cartele perforate. În 1964 este lansată prima versiune, sub
numele BASIC care avea 12 instrucţiuni. Prima versiune pentru microcalculatoare a fost
lansată în 1972. În 1975, Bill Gates şi Paul Allen au scris primul interpreter BASIC pentru
microcalculatoare care ocupa doar 7 KB de memorie, compania Microsoft care a apărut apoi
susţinând BASIC-ul prin includerea lui în pachetul sistemului de operare MS-DOS (începând
de la versiunea 5.0). Au apărut apoi zeci de versiuni de BASIC, cu diferiţi autori, multe dintre
ele incompatibile, ajungând să fie denumit de unii “limbajul programatorilor neprofesionişti”.
De aceea, în 1983 ANSI hotărăşte elaborarea unui standard pentru limbajul BASIC. Acest
limbaj a cunoscut diverse variante, cele mai răspândite fiind BASICA, GWBASIC, QBASIC,
Turbo Basic şi, nu în ultimul rând, Visual Basic.
PASCAL este un limbaj popular în mediul universitar (mai ales în facultăţile de
informatică şi matematică). A apărut în 1968 şi a fost denumit după matematicianul francez
Blaise Pascal. Este un limbaj universal, caracterizat prin simplitate, eficienţă, accesibilitate
(chiar şi pentru începători) şi care prezintă (încă de la prima versiune) toate elementele
specifice programării structurate. Sunt păreri care apreciază că învăţarea limbajului PASCAL
este indispensabilă pentru formarea unor informaticieni. Dezavantaje: slaba gestionare a
datelor organizate în fişiere şi incapacitatea de a manipula volume mari de date. Limbajul a
cunoscut mai multe versiuni adaptate diverselor metode de prelucrare (Pascal secvenţial,
Pascal concurent, Pascal obiectual). Pascal a stat la baza elaborării de noi limbaje precum
MODULA-1, MODULA-2, ADA. Ultimele versiuni, produse de firma Borland, au apărut sub
numele Turbo PASCAL, cu un succes remarcabil pe piaţă.
ADA, (Automatic Data Acquisition şi totodată numele contesei de Lovelace Augusta
Ada Byron, considerată a fi primul programator din lume), elaborat la Departamentul
Apărării SUA pentru aplicaţii tehnico-ştiinţifice în 1979. Are multe din elementele limbajului
PASCAL, dar este mult mai complex, fiind considerat unul din cele mai dificile limbaje.
Folosit iniţial în domeniul militar, la ora actuală, datorită ]facilităţilor oferite este larg utilizat
şi în aplicaţiile economice.
C a fost produs de Bell Laboratories la începutul anilor ’70 (dezvoltă limbajul B
elaborat de laboratoarele Bell). Este un limbaj orientat spre asigurarea fluxurilor de
instrucţiuni, conducând la elaborarea de programe compacte, bine structurate. Destinat iniţial
programatorilor de sistem, şi-a lărgit aria de utilizatori odată cu extinderea sistemului de
operare UNIX. Este limbajul de programare cu cea mai impresionantă evoluţie şi extindere în
anii ’90. C-ul preia de la limbajele de tip PASCAL gradul ridicat de portabilitate, iar de la
limbajele de asamblare rapiditatea în execuţia şi gestionarea eficientă a memoriei. Rămâne
totuşi un limbaj pentru profesionişti, multe aplicaţii (procesoare de texte, spreadsheet-uri sau
SGBD-uri) fiind scrise cu ajutorul limbajului C. În plus, ultimele versiuni ale acestui limbaj
au transformat C într-un limbaj orientat pe obiect (C++). Principalii producători sunt Borland
(C++), Microsoft (Quick C, Visual C), Symantec.
14
RPG (Report Program Generator) este un limbaj dezvoltat de către firma IBM la
mijlocul anilor ’60 odată cu lansarea unei noi linii de minicalculatoare proiectate pentru
afacerile mici şi mijlocii. Limbajul permite ca pe baza unor specificaţii ale utilizatorului, să se
genereze codul unui program care lansat în execuţie va conduce la obţinerea rapidă şi cu un
cost relativ redus, a rapoartelor dorite. PL/1 (Programming Language 1) este un limbaj lansat
de către firma IBM la începutul anilor ’60, îmbinând facilităţile din FORTRAN pentru
aplicaţii ştiinţifice cu cele din COBOL pentru aplicaţiile economice. La ora actuală acesta nu
este foarte popular, utilizarea lui fiind limitată datorită faptului că este complex şi greu de
învăţat
LISP (LISt Processing) este un limbaj adecvat inteligenţei artificiale, utilizat mai ales
în cercetare şi în domeniul inteligenţei artificiale. A apărut în 1958 la Institutul Tehnologiei
din Massachussets, dar a fost considerat prea avansat pentru tehnologia vremii. Spre deosebire
de celelalte limbaje prezentate, care sunt imperative, LISP este un limbaj funcţional. LISP nu
face deosebirea între date şi prelucrări, acestea fiind considerate obiecte şi tratate la fel. Se pot
declara douǎ tipuri de obiecte: atomi şi liste.
PROLOG (PROgramming in LOGic) a fost fundamentat în 1972 la Universitatea din
Marsilia pentru aplicaţii de inteligenţă artificială şi face parte din familia limbajelor
declarative (nu algoritmice). A fost orientat spre demonstrarea de teoreme şi înţelegerea
limbajului natural. Permite reprezentarea şi utilizarea cunoştinţelor, fiind utilizat în crearea de
sisteme expert. PROLOG este considerat o răzvratire împotriva modului de programare impus
de modelul Von Neumann, iar în 1982 proiectul japonez de realizare a calculatoarelor de
generaţia a V-a prevede folosirea ca limbaj de bază a limbajului PROLOG.
Smalltalk a fost dezvoltat la mijlocul anilor ’70 de către firma Xerox Corporation şi a
fost primul limbaj specific programării orientată pe obiecte. Acest limbaj nu este greu de
învăţat şi utilizat dar reclamă schimbarea în întregime a modului de gândire a unui program.
Se prevede ca în viitor Smalltalk alături de celelalte limbaje orientate pe obiect să cunoască o
dezvoltare şi utilizare deosebită.
JAVA este un limbaj orientat pe obiecte dezvoltat de firma Sun Microsystems. Are ca
scop asigurarea comunicării între echipamente eterogene şi distribuirea formatului executabil
al programelor în reţea, fiind limbajul cel mai utilizat în reţeaua INTERNET. Acest limbaj
operează cu tipuri obişnuite de date, dispune de instrucţiuni speciale de protecţie şi oferă
facilităţi de programare de tip animaţie, orientare obiect, distribuţie. Codul Java este portabil,
acelaşi program putând fi rulat pe orice platformă care deţine acest mediu de execuţie.
O parte din limbajele de programare, prin diversele lor versiuni, nu pot fi încadrate
strict într-o anume generaţie. Fiind supuse continuu perfecţionării, ele tind spre generaţia
superioară celei în care au fost proiectate iniţial.
4
Sammet, J.,E., Programming Languages: History and Fundamentals, N.J. Prentice-Hall, 1969
15
Tipul echipamentelor hardware disponibile utilizatorului
Înaintea alegerii limbajului trebuie efectuată o analiză a resurselor fizice existente şi a celor
care urmează să fie achiziţionate. Această analiză trebuie să stabilească dacă sunt asigurate
resursele minime pentru dezvoltarea şi exploatarea aplicaţiilor. În felul acesta se urmăreşte
utilizarea eficientă a limbajului pe echipamentele din dotare.
Gradul de dependenţa faţă de echipamentul folosit şi sistemul de operare
Conform acestui criteriu trebuie ales un limbaj de programare care să poată fi folosit fără
probleme sub sistemul de operare sub care lucrează echipamentele din dotare. În plus, trebuie
asigurată portabilitatea programelor în cazul în care se vor achiziţiona noi resurse informatice.
Trebuie asigurată creşterea gradului de portabilitate cel puţin la nivel de program sursă.
Evaluarea rezultatelor obţinute prin folosirea anterioară de către alţi utilizator
Acest criteriu cere realizarea unei documentări prealabile privind problemele cu care s-au
confruntat alţi utilizatori ai limbajului (existenţa /inexistenţa unei documentaţii de învăţare şi
utilizare, posibilităţile/facilităţile de rezolvare a problemelor practice etc.).
Eficienţa scontată prin exploatare.
Această eficienţă implică stabilirea parametrilor de exploatare pe fiecare etapă de realizare a
programelor /produselor-program(scriere, testare, implementare, utilizare). Se are în vedere
atât eficienţa execuţiei programului, mai ales la programele des utilizate cât şi eficienţa
globală care ia în considerare toate fazele de elaborare şi utilizare (scriere, testare, exploatare
şi întreţinere). În acest context performanţa limbajului poate deveni o problemă mai puţin
importantă.
Caracteristicile tehnice şi funcţionale generale.
Alegerea unui limbaj trebuie sa ţină seama şi de gradul de standardizare a acestuia, ştiut fiind
că, în general, la standardizarea unui produs informatic se au în vedere parametrii ce privesc
simplitatea în exploatare, generalitatea în aplicare, naturaleţea, consistenţa şi conciziunea în
exprimare.
Cerinţe de ordin economic
Aceste cerinţe ţin seama de resursele financiare de care dispune utilizatorul , resurse care
trebuie să acopere atât achiziţionarea şi exploatarea propriu-zisă a limbajului, cât şi
organizarea şi pregătirea prealabilă a personalului.
Având în vedere cele de mai sus rezultă că alegerea unui limbaj este o decizie care
trebuie susţinută printr-o serie de analize de ordin tehnic, funcţional şi economic.
16
CAPITOLUL 2. BAZE DE DATE ŞI SISTEME DE GESTIUNE A BAZELOR
DE DATE
2.1 Concepte utilizate în studiul bazelor de date şi al sistemelor de gestiune a bazelor de
date
2.2. Modele de structurare a datelor în baze de date
2.3. Sisteme de gestiune a bazelor de date
2.4. Protecţia şi securitatea bazelor de date
2.5. Administrarea datelor şi a bazelor de date
5
O’Brian, Op. cit., pp. 244-246
6
Fotache, M., Baze de date relaţionale, Organizare, interogare şi normalizare, Ediţia a II-a, Editura
Junimea, Iaşi, 1997, p. 25
17
datelor solicitate. În lipsa acestor programe, pentru obţinerea informaţiilor dorite utilizatorul
procedează la extragerea manuală.
4. Costul ridicat de exploatare ca urmare a dublării datelor;
Exploatarea fişierelor independente presupune un cost ridicat, atât în ceea ce priveşte
resursele informatice (hardware şi software), cât şi cele legate de personalul utilizat.
5. Separarea şi izolarea datelor;
Atunci când datele sunt izolate în fişiere separate, programatorul de aplicaţii trebuie să se
asigure că sunt extrase datele corecte, fiind astfel necesară sincronizarea prelucrării datelor
din fişiere diferite, această operaţiune fiind dificilă când sunt solicitate date din mai mult de
două fişiere.
6. Formate de fişiere incompatibile, ceea ce face dificilă prelucrarea lor simultană
Deoarece structura fişierelor este încorporată în programele de aplicaţii, ea este
dependentă de limbajul de programare în care sunt scrise acestea. De exemplu, structura unui
fişier generat de un program scris cu limbajul COBOL poate să fie diferită de cea a unuia
generat cu un program în limbajul C. De aceea sunt necesare programe de transformare a
fişierelor într-un format comun.
7. Dependenţa datelor faţă de programele de aplicaţii
Organizarea fişierelor, adresa lor fizică în memorie şi programele de aplicaţii folosite
pentru accesarea fişierelor sunt interdependente. Astfel, schimbările legate de dispunerea pe
suportul de memorie, de structura datelor şi modificarea înregistrărilor unui fişier presupun
modificări în toate programele în care este referit fişierul respectiv. Întreţinerea acestor
programe este dificilă putând genera incoerenţe în fişierele de date. Incoerenţa şi lipsa de
integritate sunt extrem de dificil de corectat deoarece nu există un dicţionar central pentru
urmărirea definirii datelor.
Toate aceste probleme care apar în sistemul ce prelucrează fişiere îşi găsesc rezolvarea prin
folosirea bazelor de date şi a sistemelor de gestiune a bazelor de date. Datele stocate în baze
sunt independente atât faţă de programele de aplicaţii care le folosesc, cât şi faţă de tipul de
memorie utilizat.
18
despre date). Natura autodescriptivă a bazelor de date este cea care determină independenţa
program-date.
BAZA DE DATE
Fişier de date 1
7
COnference on DAta SYstems Languages – Conferinţa despre Limbajele Sistemelor de Date
8
Lungu, I., ş.a., Baze de date, Organizare, proiectare şi implementare, Editura All, Bucureşti, 1995,
p.13
9
Aceste elemente sunt numite diferit în literatura de specialitate. Vezi Roşca, I., ş.a. Baze de date şi
SGBD, Bucureşti, 1986; Lungu, I., ş.a., Op., cit.,; Fotache, M., Baze de date relaţionale, Editura
Junimea, 1997
19
O bază de date trebuie să satisfacă cinci condiţii esenţiale10:
• O bună reprezentare a realităţii înconjurătoare, adică baza de date trebuie să
ofere întotdeauna o imagine fidelă a realităţii prin informaţii fiabile şi actualizate;
• O non-redundanţă a informaţiei, informaţia conţinută în baza de date trebuind să
fie unică din punct de vedere semantic şi fizic;
• O independenţă a datelor faţă de prelucrări; datele constituie imaginea fidelă a
lumii reale, programele de aplicaţii trebuind să fie concepute în raport cu această
structură a datelor;
• Securitatea şi confidenţialitatea datelor; securitatea datelor trebuie asigurată prin
proceduri fizice, iar confidenţialitatea prin proceduri care să împiedice accesul
utilizatorilor neautorizaţi;
• Performanţe în exploatare, orice cerere de prelucrare trebuind să fie satisfăcută
într-un timp convenabil utilizatorului, ceea ce presupune folosirea unor tehnici de
optimizare pentru reducerea timpului de prelucrare.
Dicţionarele de date
Accesul utilizatorilor la informaţiile despre structura unei baze de date se realizează prin
intermediul dicţionarului de date.
În principal, un dicţionar îndeplineşte următoarele funcţii:
• definirea şi gestionarea datelor elementare ale întreprinderii (cod, etichetă, atribute,
reprezentare etc.);
• definirea şi gestionarea ansamblurilor de date;
• definirea şi gestionarea relaţiilor, de dependenţă sau ierarhice, dintre date;
• descrierea din trei puncte de vedere a utilizării datelor:
administrativ: care sunt posturile de lucru ce vor apela datele şi care va fi utilizarea
acestor date?
logic: care sunt fişierele sau bazele de date în care intră elementele descrise?;
organic: în care unităţi de prelucrare vor fi utilizate elementele descrise?
În plus dicţionarele de date permit automatizarea operaţiilor de scriere, de descriere a
fişierelor sau ecranelor, de control etc. utile pentru întreţinerea şi dezvoltarea dosarelor de
programe.
Bazele de date sunt concepute pentru a prelucra un volum mare de informaţii.
Gestiunea acestora impune nu numai o structurare riguroasă a datelor, dar şi o raţionalizare a
procedurilor de acces şi prelucrare. Pentru a putea fi exploatată de către utilizatori o bază de
date trebuie să aibă asociat un set de programe, numit generic sistem de gestiune a bazelor de
date care să permită exploatarea raţională a datelor conţinute. Obiectivul esenţial al unui
sistem de gestiune a bazelor de date este, deci, furnizarea unui mediu eficient, adaptat
utilizatorilor care doresc să consulte sau să actualizeze informaţiile conţinute în baza de date.
Sistemul de gestiune a bazelor de date reprezintă un ansamblu coordonat de programe
care permite descrierea, memorarea, manipularea, interogarea şi tratarea datelor conţinute într-o
bază de date. El trebuie, de asemenea, să asigure securitatea şi confidenţialitatea datelor într-un
mediu multi-utilizator.
Principalele beneficii ale bazelor de date constau în:
• integrarea în aceeaşi structură a tuturor datelor pertinente ale unui sistem;
• gestionarea acestor date printr-un software specializat (SGBD);
• oferirea unei vederi parţiale asupra ansamblului de date necesare fiecărui
utilizator;
• asigurarea partajării datelor între diferiţi utilizatori.
Moréjon, J., Principes et conception d’une base de données relationnelle, Les Editions d’organisation,
10
Paris, 1992, p. 20
20
Niveluri de abstractizare a datelor în bazele de date
Abordarea datelor în contextul bazelor de date se face pe trei niveluri, considerate
niveluri de abstractizare:
Nivelul intern este nivelul elementar la care pot fi considerate datele şi se referă la
modul în care sunt stocate datele pe suporturi - disc magnetic, bandă magnetică, disc optic etc.
La acest nivel structura datelor este foarte detaliată. Nivelul intern cuprinde structurile de date
şi organizările fişierelor utilizate pentru stocarea datelor pe dispozitivele de stocare. El
tratează probleme cum ar fi: alocarea spaţiului de stocare pentru date şi indexuri, descrierile
înregistrărilor pentru stocare, cu dimensiunile de stocare pentru articolele de date, plasarea
înregistrărilor, tehnicile de comprimare şi de codificare a datelor. Nivelul intern
interacţionează cu metodele de acces al sistemului de operare (tehnici de administrare a
fişierelor, pentru stocarea şi regăsirea înregistrărilor de date) pentru a plasa datele pe
suporturile de stocare, a regăsi datele, a realiza indexurile.
Nivelul conceptual corespunde administratorului bazei de date care proiectează
structura logică a bazei de date. Asigură o viziune globală. a bazei de date, descriind ce date
sunt stocate în baza de date şi relaţiile dintre acestea. La acest nivel structura bazei de date se
concretizează în schema conceptuală. Nivelul conceptual asigură atât transpunerea, cât şi
independenţa dorită dintre nivelul extern şi cel intern.
Nivelul conceptual reprezintă toate entităţile, atributele şi relaţiile dintre ele, contrângerile
asupra datelor, informaţii semantice despre date, informaţii privind securitatea şi integritatea.
Nivelul extern reprezintă vederea utilizatorului asupra bazei de date ce descrie acea
parte a bazei de date relevantă pentru fiecare utilizator. Recurgerea la acest nivel de
abstractizare se face pentru simplificarea interacţiunii utilizator-bază de date. Acest nivel
corespunde utilizatorilor care pot avea viziuni diferite asupra bazei de date pe baza unor
subscheme proprii. Vederea externă include numai acele entităţi, atribute şi relaţii din lumea
reală de care este interesat utilizatorul. Se urmăreşte satisfacarea cerinţelor tuturor utilizatorilor
în condiţiile unei redundanţe minime şi controlate a datelor.
Văzută prin prisma celor trei niveluri, baza de date poate fi reprezentată ca în figura
nr.2.3.11
INTERFAŢA A INTERFAŢA B
INTERFAŢA
Schema internă
BAZA DE DATE MEMORATĂ PE DISC
21
programele de aplicaţii şi invers. Posibilitatea modificării structurii la un nivel, fără a afecta
structura celorlalte niveluri este întâlnită sub numele de independenţa datelor, prezentă sub
două forme:
• independenţa fizică de date, adică posibilitatea modificării structurii bazei de
date la nivel intern (cum ar fi utilizarea unor organizări ale fişierelor sau structuri de
stocare diferite, a unor dispozitive diferite de stocare, modificarea de indexuri sau de
algoritmi hash), fără a fi necesară schimbarea structurii conceptuale şi rescrierea
programelor de prelucrare a datelor. Asemenea modificări sunt necesare pentru
ameliorarea performanţelor de lucru (viteză de acces, mărimea fişierelor etc.). Autonomia
fizică este cea care asigură şi portabilitatea bazei de date de pe un sistem de calcul pe
altul fără modificarea schemei conceptuale şi a programelor;
• independenţa logică de date se referă la faptul că modificarea schemei
conceptuale a bazei de date (cum ar fi adăugarea sau eliminarea unor entităţi, atribute
sau relaţii) nu necesită şi modificarea schemei externe sau rescrierea programelor de
aplicaţii.
Este important să se facă distincţie între descrierea bazei de date şi baza de date
însăşi. Descrierea bazei de date constituie schema bazei de date. Ea este specificată în timpul
procesului de proiectare a bazei de date şi este schimbată rareori. Setul de date din baza de
date se numeşte instanţa bazei de date. Mai multe instanţe ale bazei de date pot corespunde
aceleiaşi scheme a bazei de date.
12
Pescaru, V., ş.a., Fişiere, baze de date şi bănci de date, Editura Tehnică, Bucureşti, 1976, p. 13
22
C o l e c ¡i i
d e d a te
C o l e c ¡i i C o l e c ¡i i
d e d a te d e d a te
C o l e c ¡i i
d e d a te
Dacă în anii ‘70 şi la începutul anilor ’80, noţiunea cvasi-utilizată era cea de bancă de
date, în lucrările din ultimii ani, termenul devine din ce în ce mai puţin invocat, majoritatea
lucrărilor de profil, ca şi toţi marii furnizori de software fac trimitere, aproape exclusiv, la
noţiunile de bază de date şi SGBD.
23
Componentele unui depozit de date sunt următoarele:13
1. instrumente pentru modelarea datelor, asociate adesea cu instrumente de tip CASE;
2. o enciclopedie a metadatelor care păstrează informaţiile relevante despre fiecare
dată a depozitului de date (ce reprezintă, tipul său, unde se găseşte, cum poate fi accesată,
formatul său, etc.);
3. baza de date - nucleu care este centrul depozitului şi ia forma bazelor de date
(foarte rar a fişierelor independente);
4. instrumente pentru transpotul datelor, proiectate pentru a muta copii ale datelor din
sistemul operaţional în baza de date;
5. instrumentele pentru extragerea, rafinarea şi standardizarea datelor, sarcini foarte
dificile în condiţiile în care informaţiile sunt foarte complexe, iar instrumentele de lucru
eterogene;
6. middleware care asigură conectivitatea în cadrul reţelelor de calculatoare atunci
când datele sunt preluate din mai multe baze de date sau o bază de date este distribuită pe mai
multe noduri ale unei reţele;
7. instrumente pentru accesul utilizatorilor la date şi furnizarea informaţiilor care
cuprind instrumente de tipul interfaţă grafică utilizator (GUI) sau navigatoare (browsere) Web
ce permit utilizatorilor să acceseze şi analizeze informaţiile din depozitul de date.
Una din preocuparea actuală a producătorilor de instrumente de construire a
depozitelor de date este integrarea celor şapte categorii de instrumente prezentate mai sus într-
un produs atotcuprinzător, ceea ce unii au reuşit într-o oarecare măsură.14
Din punct de vedere al ariei de întindere, se întâlnesc trei modele de depozite de date:
depozite de întreprindere, data marts şi depozite virtuale.
Un depozit de întreprindere colectează toate informaţiile despre subiecte care privesc
întreaga organizaţie. El necesită cheltuieli mai mari pentru modelare şi ani de zile pentru
proiectare şi realizare. El conţine de regulă date detaliate, dar şi date agregate, iar ca ordin de
mărime porneşte de la câţiva gigabytes până la sute de gigabytes, terabytes sau mai mult.
Un data marts poate fi considerat un subansamblu al unui depozit de date, mai uşor de
construit şi întreţinut şi mai puiţin scump. El conţine un subset al volumului de date din
organizaţie, specific unui grup de utilizatori. Domeniul este limitat la subiecte specifice. De
exemplu, un data mats pentru marketing limitează subiectele la clienţi, articole, vânzări. Un
depozit virtual este un set de viziuni (views) asupra bazelor de date operaţionale. Este uşor de
construit, dar necesită capacităţi suplimentare pe serverele de baze de date. Pentru eficienţa
procesării interogărilor, numai unele din viziunile de agregare pot fi materializate.
Baza de date reprezintă "inima" depozitului. În practică, baza de date nucleu se poate
regăsi sub forma fişierelor independente de date (mai rar), poate fi o bază de date relaţională
sau multidimensională. În prezent se pune tot mai mult accent pe bazele de date
multidimensionale care sunt concepute pentru optimizarea analizei indicatorilor (cifră de
afaceri, marjă…) în raport cu dimensiunile care le sunt asociate (timp, produs, regiune…). Ele
simplifică gestiunea volumelor mici sau mijlocii de date, sunt adaptate la rezolvarea unor
probleme concrete (fiind utilizate mai ales pentru analize sofisticate cum ar fi simulările sau
predicţiile), adaptându-se astfel foarte bine în contexul depozitelor de date.
În ceea ce priveşte instrumentele de analiză şi acces la informaţii, două categorii,
instrumentele de interogare şi cele OLAP se regăsesc pentru a combina accesul liber la
informaţii şi funcţiile de analiză, fiind concepute pentru a răspunde nevoilor foarte diverse ale
utilizatorilor finali. Astfel, anumiţi utilizatori sunt autonomi şi doresc un acces liber la
informaţii fără a se îngriji de căile de acces la date. Instrumentele de tip interogare răspund
nevoilor lor. Aceste instrumente favorizează formularea de interogări bazându-se pe logica
asamblistă a bazelor de date relaţionale. Ele permit, de exemplu, obţinerea listei cu numele şi
prenumele clienţilor care au cumpărat un anumit produs în cursul ultimelor trei luni. Alţi
utilizatori exprimă cerinţe de analiză, ceea ce necesită o informaţie bine pregătită şi foarte
organizată. Instrumentele de tip OLAP (On-Line Analytical Processing) sunt mai bine
13
Fotache, M., Op. cit., p. 56
14
Fotache, M., Depozitul de date, în Tribuna economică nr.36 /1998, p.49
24
adaptate exigenţelor lor. Prelucrarea analitică on-line este un nou instrument la dispoziţia
managerilor şi analiştilor pentru examinarea interactivă şi manipularea unui volum mare de
date analitice sau agregate sub diverse forme. OLAP înseamnă analiza relaţiilor complexe
între mii şi chiar milioane de date pentru a descoperi tendinţe, modele şi excepţii. Operaţiile
fundamentale în OLAP sunt consolidarea, forajul (drill down) şi disecarea (slice and dice).
Consolidarea înseamnă agregarea datelor ce poate fi o simplă sumarizare sau o grupare
complexă, implicând date aflate în legătură. Forajul este operaţiunea inversă şi se referă la
afişarea datelor detaliate, pornind de la cele consolidate. Disecarea porneşte de la capacitatea
OLAP de a privi o bază de date din mai multe perspective. Ea se realizează cel mai adesea de-
a lungul unei axe de timp pentru a analiza tendinţele şi a descoperi modele de evoluţie.
Alţi utilizatori au nevoie de instrumente de data mining care permit structurarea
informaţiei fără preocuparea pentru modul în care datele sunt puse în corelaţie, prin punerea
în funcţiune a unor mecanisme de inducţie.
Prelucrarea analitică on-line, referită de regulă ca OLAP (On Line Analytical
Processing) răspunde la întrebări pe care managerii şi le pun la modul concret. Singura
trăsătură comună a acestor întrebări este caracterul lor multidimensional. Există totuşi câteva
tipuri uzuale de întrebări, care pot arunca o lumină asupra complexităţii instrumentelor care
trebuie să furnizeze răspunsuri:
• Raporturi multidimensionale. De exemplu: Care este contribuţia la vânzările
săptămânale totale a produselor informatice vândute prin magazinele situate în
regiunea Moldova între 10 şi 20 septembrie?
• Comparaţii. De exemplu: Care este media abaterii procentuale de la planul de vânzări
în lunile acestui an comparativ cu anul trecut?
• Clasificări şi profiluri statistice. De exemplu: Care este volumul vânzărilor şi media
profitului pentru primii 20% dintre distribuitori şi care este contribuţia acestora la
totalul vânzărilor pe trimestrul trecut?
• Agregări libere. De exemplu: Care sunt veniturile realizate în ultimele patru trimestre
de filialele judeţene din regiunea Moldova?
• Evaluări What-If. De exemplu: În ce măsură ar influenţa profitul total o creştere cu 10
procente a vânzărilor în judeţele din Moldova?
Instrumentele de data mining explorează bazele de date şi extrag din acestea o
multitudine de informaţii asupra tendinţelor şi previziunilor. Câmpul de acţiune al data
mining cuprinde nu numai analiza datelor, ci şi a textelor.
Depozitele de date nu înseamnă totuşi numai avantaje, ci ele ridică o serie de
probleme înre care menţionăm:
• dimensiunile extrem de mari la care pot ajunge, de ordinul gigaocteţilor, ceea ce
ridică problema suporturilor de stocare, ca şi asigurarea unei viteze rezonabile de
acces la date;
• costuri de dezvoltare foarte mari şi timp îndelungat necesar pentru construirea lor;
• dificultatea integrării diferitelor platforme hardware şi software existente în cadrul
întreprinderii.
25
În literatura de specialitate se întâlneşte şi concepţia potrivit căreia proiectarea unei baze de
date este un proces în doi paşi16:
• etapa proiectării conceptuale (independentă de SGBD) - ar consta în analiza
sistemului;
• etapa proiectării fizice (în funcţie de un anumit SGBD) - grupează activităţile de
proiectare a structurii, încărcare, exploatare şi întreţinere a bazei de date.
Obiectivele proiectării bazei de date pot fi grupate în două categorii:
1. cerinţe funcţionale:
• rapoartele (situaţiile de ieşire) necesare;
• cererile, interogările care pot apărea;
• alte ieşiri care ar putea fi trimise altor sisteme de prelucrare a datelor;
• toate actualizările necesare;
• toate calculele necesare;
• toate restricţiile sistemului (de exemplu, restricţii funcţionale sau restricţii de
comportament);
• toate sinonimele utilizate pentru un atribut dat;
2. restricţiile fizice (volumul prelucrărilor şi evaluarea performanţelor):
• numărul, dimensiunile şi frecvenţa rapoartelor;
• timpul de răspuns pentru fiecare interogare;
• timpul de răspuns pentru fiecare actualizare;
• măsurile de securitate prin restricţionarea accesului.
16
Pratt, P.J., Adamski, J.J., Database Systems. Management and Design, Boyd&Fraser, Boston, 1991,
p. 285
26
• stabilirea succesiunii evenimentelor şi construirea unei diagrame care să descrie
fluxul acestora (diagramă a stărilor de tranziţie, a fluxului de evenimente).
Analiza cerinţelor informaţionale (analiza funcţională)
Urmăreşte determinarea transformărilor pe care le suportă datele în sistemul studiat,
în scopul satisfacerii cerinţelor informaţionale aferente acestui sistem. Transformările de date
se prezintă sub forma unui flux al prelucrărilor, in care nodurile reflectă procesele şi arcele
fluxurile informaţionale.
Construirea modelului funcţional implică o serie de etape:
• identificarea datelor de ieşire şi a celor de intrare;
• construirea de diagrame de flux;
• identificarea restricţiilor pentru anumite date;
• precizarea unor criterii de optimizare a prelucrărilor.
Integrarea modelelor sistemului
În etapa de proiectare, modelele static şi dinamic sunt complet independente de
SGBD (aplicaţiile) ce urmează a se folosi, pe când modelul funcţional este orientat
preponderent spre acestea.
Rezultatele cercetării din etapele anterioare sunt supuse unui proces de integrare, în
urma căruia se obţine o viziune de ansamblu a sistemului studiat. Cu această ocazie se
testează completitudinea şi consistenţa modelelor static şi dinamic, anume dacă informaţiile
dispun de coerenţă şi dacă nu au fost omise la analiză unele elemente informaţionale. În caz
de necesitate, în această etapă se pot aduce completări modelului.
Ca urmare a integrării, dispare independenţa faţă de aplicaţii a modelelor static şi dinamic, ca
şi orientarea spre aplicaţii a modelului funcţional. Este un avantaj, deoarece pe de o parte
orientarea excesivă spre aplicaţii complică în mod inutil modelul şi-i scad adaptabilitatea, iar
pe de altă parte efectuarea unei analize complet independente de aplicaţii presupune un mare
consum de resurse de toate tipurile.
17
Lungu, I. şi colab., Op. cit., p. 53
27
• portabilitatea SGBD;
• portabilitatea datelor şi programelor de aplicaţii;
• condiţiile de încărcare, exploatare şi întreţinere a BD;
3. cerinţe de ordin economic:
• încadrarea în bugetul destinat acestui scop;
• timpul necesar pentru implementarea sistemului (inclusiv pregătirea
utilizatorilor).
În urma analizei acestor cerinţe, ca şi a SGBD-urilor disponibile şi a modului cum ele oferă
răspuns la cerinţele utilizatorilor, se decide care va fi SGBD utilizat.
Proiectarea schemei conceptuale
În accepţiunea cea mai simplă, schema conceptuală semnifică descrierea datelor şi a
relaţiilor dintre acestea. Elaborarea schemei conceptuale presupune:
• stabilirea colecţiilor de date şi a conţinutului acestora;
• determinarea legăturilor dintre colecţiile de date;
• testarea şi revizuirea eventuală a schemei obţinute;
• descrierea schemei conceptuale în maniera proprie SGBD ales.
În stabilirea colecţiilor de date şi a legăturilor dintre acestea se porneşte de la
entităţile identificate în etapa de analiză. Astfel, în cazul unui proces economic oarecare,
aceste entităţi vor fi participanţii la procesul în cauză. Spre exemplu, în cazul unei activităţi
comerciale, putem identifica la prima vedere câteva entităţi: cumpărător, vânzător, marfă etc.
Pentru aceste entităţi se vor preciza atributele sau proprietăţile care prezintă interes
pentru utilizatorii informaţiei, eventual şi o serie de atribute auxiliare, utilizate pentru a
exprima legături între entităţi.
Aceste entităţi alcătuiesc modelul semantic. Nu este obligatoriu ca fiecare
componentă a acestui model să atragă constituirea unei colecţii de date distincte. Ąn practică,
pentru îmbunătăţirea performanţelor aplicaţiilor (în special optimizarea timpului de acces la
date), poate opera o sporire, dar şi o reducere a numărului de colecţii de date proiectate iniţial.
În realizarea colecţiilor de date se poate porni şi de la documentele de ieşire (cele care
conţin informaţiile de care are nevoie utilizatorul), caz în care toate atributele identificate
concură la alcătuirea unui dicţionar de date şi urmează a fi grupate în funcţie de anumite
legături identificabile între atribute.
Modul de reprezentare a legăturilor dintre colecţiile de date identificate diferă în
funcţie de modelul datelor pe care-l implică SGBD utilizat. Spre exemplu, pentru modelele
ierarhic şi reţea se utilizează pointeri, iar pentru modelul relaţional, chei externe (străine).
Testarea schemei conceptuale presupune verificarea corectitudinii (a modului în care
aceasta ilustrează cerinţele utilizatorilor) şi consistenţei acesteia (a corespondenţei dintre
legăturile determinate şi lumea reală). De asemenea, trebuie ca redundanţa datelor să se
situeze la un nivel minim. Dacă în această etapă se identifică erori, se poate reveni la etapa de
proiectare şi uneori chiar la cea de analiză a sistemului.
În ceea ce priveşte descrierea schemei conceptuale, aceasta comportă transpunerea schemei în
limbajul de manipulare a datelor specific SGBD ales. Rezultatul acestui proces îl constituie
schema (în accepţiune CODASYL18) bazei de date.
18
abreviere de la "Conference on Data Systems Languages"
28
(subschema) ca pe o parte componentă a schemei conceptuale, dar care poate înregistra
diferenţe în ceea ce priveşte alcătuirea, faţă de schema conceptuală.
29
X 1
Y 1
X 2
Y 2
.
.
.
.
X n
Y n
D o m en iu C o d o m en iu
Fig. 2.5 Relaţia de tip 1-1
• 1-n (una la mai multe) în care unei realizări din domeniu îi corespunde 0, una sau
mai multe realizări din codomeniu. (figura nr. 2.6)
X 1
Y 1
Y 2
.Y 3.
Y 4
X 2 Y 5
D o m en iu C o d o m en iu
X 1
X 2 Y
X 3
D o m en iu C o d o m en iu
X 1
Y 1
Y 2
.Y 3.
X 2
Y 4
D o m en iu C o d o m en iu
Fig. 2.8.Relaţia n-m
Relaţiile n-are presupun existenţa unei interdependenţe logice între realizările unei
mulţimi de caracteristici definită pe o mulţime de tupluri.
Mecanismul de selecţie şi de identificare a componentelor unei baze de date
presupune existenţa unei structuri de date. Concret o structură de date reprezintă o colecţie
de date între care s-au stabilit anumite relaţii. Structurile de date care au aceeaşi organizare şi
30
sunt supuse prelucrărilor cu un grup de operatori de bază cu o semantică predefinită formează
un anumit tip de structură.
Principalele tipuri de structuri sunt19: punctuală, liniară, arborescentă, reţea,
relaţională. Dintre acestea sunt considerate de bază structurile liniară şi arborescentă. Prin
combinarea lor în funcţie de opţiunile utilizatorilor, pot fi construite şi alte structuri cu grade
diferite de complexitate.
Modelul de date orientat spre obiecte extinde definiţia unei entităţi pentru a include
nu numai atributele care descriu starea obiectului, ci şi acţiunile asociate acestuia, respectiv
comportamentul. Se spune că obiectul încapsulează atât starea, cât şi comportamentul.
Modelul de date orientat pe obiecte reprezintă un model logic de date care conţine
semantica obiectelor, acceptată în programarea orientată pe obiecte.
Modelarea orientată obiect devine din ce în ce mai populară datorită abilităţii de a
reprezenta relaţii complexe ca şi de a reprezenta datele şi procesarea acestora cu ajutorul unor
notaţii consistente.
Un model al datelor este o abstractizare a lumii reale ce permite "tratarea"
complexităţii inerente în cazul problemelor din lumea reală prin concentrarea atenţiei asupra
19
Lungu, I., Op. cit., p. 6
31
caracteristicilor esenţiale şi interesante ale datelor de care are nevoie o organizaţie. Un model
orientat obiect este construit în jurul "obiectelor" tot aşa cum modelul E-A are la bază
entităţile. Totuşi un obiect încapsulează atât datele cât şi comportamentul, ceea ce permite
utilizarea unei abordări orientate obiect nu doar pentru modelarea datelor, ci şi pentru
modelarea proceselor. Pentru a modela cu stricteţe o aplicaţie din lumea reală trebuie să se
modeleze atât datele, cât şi procesele ce acţionează asupra datelor. Modelarea orientată obiect
asigură un mediu puternic pentru dezvoltarea unor sisteme complexe, datorită posibilităţii de
captare a datelor şi a proceselor şi datorită mai ales, moştenirii şi reutilizării codului.
Ciclul de viaţă al proiectării orientate obiect constă din reprezentarea progresivă a
obiectelor în cadrul a trei faze: analiză, proiectare şi implementare. Acest ciclu de viaţă este
similar cu cel al dezvoltării sistemelor. În primele etape, modelul pe care îl creăm este
abstract, concentrându-se asupra calităţii externe a sistemului. Pe măsură ce modelul
evoluează, acesta devine din ce în ce mai detaliat, atenţia deplasându-se spre cum va fi
construit sistemul şi mai ales, cum va funcţiona. Accentul în modelare trebuie pus pe analiză
şi proiectare, în special pe problemele conceptuale front-end, faţă de problemele de
implementare back-end ce restricţionează opţiunile de proiectare20.
În etapa de analiză este dezvoltat un model al aplicaţiei din lumea reală ce reprezintă
proprietăţile sale importante. Modelul abstractizează concepte din domeniul aplicaţiei şi
descrie ce anume trebuie să realizeze sistemul mai degrabă decât cum va fi realizat acest
lucru. Modelul specifică în special comportamentul funcţional al sistemului, independent de
problemele legate de mediul în care va fi implementat în final. Trebuie să se aloce suficient
timp pentru înţelegerea clară a tuturor cerinţelor problemei în discuţie. Modelul de analiză
captează aceste cerinţe în mod precis, concis şi cu acurateţe.
În faza de proiectare orientată obiect se defineşte cum va fi realizat modelul de
analiză orientată obiect în cadrul mediului de implementare. Există trei motive pentru
utilizarea proiectării orientate obiect:
1. Modelul de analiză nu este suficient de formal pentru a fi implementat direct într-un
limbaj de programare. Pentru a ne deplasa către codul sursă trebuie să rafinăm mai întâi
obiectele prin adoptarea unei decizii privind operatorii ce vor fi asiguraţi de un obiect,
cum ar trebui să arate comunicaţia între obiecte, ce mesaje vor fi transmise etc.
2. Sistemul actual trebuie să fie adaptat mediului în care sistemul va fi implementat. Pentru a
realiza acest lucru, modelul de analiză trebuie să fie transformat într-un model conceptual
de proiectare, luând în considerare diferiţi factori cum ar fi: cerinţele de performanţă,
cerinţele de timp real şi concurenţă, hardware-ul şi software-ul implicat, SGBD-ul şi
limbajele de programare ce vor fi adoptate etc.
3. Rezultatele etapei de analiză pot fi validate cu ajutorul proiectării orientate obiect. În
acestă etapă putem verifica dacă rezultatele furnizate de analiză sunt adecvate pentru
construirea sistemului şi dacă este necesar să se efectueze modificări asupra modelului de
analiză.
Pentru dezvoltarea modelului de proiectare trebuie să fie identificate şi investigate
consecinţele pe care le va avea mediul de implementare asupra proiectării. Toate deciziile de
proiectare strategice (cum va fi implementat SGBD-ul, cum vor fi asigurate comunicaţiile
între procese şi tratarea erorilor, care componente vor fi reutilizate) vor fi adoptate şi vor fi
apoi încorporate într-un prim model de proiectare adaptat mediului de dezvoltare. În final,
modelul este formalizat pentru a descrie modul în care obiectele interacţionează unele cu
altele pentru fiecare scenariu sau caz.
Rumbaugh separă activitatea de proiectare în două etape: proiectarea sistemului şi
proiectarea obiectelor.
La proiectarea sistemulul trebuie propusă o arhitectură globală a sistemului care îl
organizează în componente, numite subsisteme şi asigură contextul necesar adoptării
deciziilor cum ar fi identificarea concurenţei, alocarea subsistemelor pe procesoare şi task-uri,
20
Rumbaugh, J., Blaha, M., Premerlani, W., Eddy, F., Lorensen, W., Object-Oriented Modelling and
Design, Pretice-Hall, 1991
32
asigurarea accesului la resursele globale, selectarea modalităţilor de implementare a
controlului software etc.
În etapa de proiectare a obiectelor va fi construit un model de proiectare prin
adăugarea unor detalii de implementare cum ar fi: restructurarea claselor pentru eficienţă,
structurile interne de date şi algoritmii pentru implementarea fiecărei clase, implementarea
controlului şi a asociaţiilor (legăturilor), precum şi împărţirea în module fizice în concordanţă
cu strategia adoptată în timpul proiectării sistemului. Clasele de obiecte specifice domeniului
aplicaţiei din cadrul modelului de analiză vor fi îmbogăţite cu o serie de elemente specifice
procedurilor de calcul în scopul optimizării performanţelor.
Etapa de proiectare este urmată de o etapă de implementare. În această fază, proiectul
este implementat cu ajutorul unui limbaj de programare sau a unui SGBD. Translatarea
proiectului în cod sursă este un proces relativ uşor datorită faptului că modelul de proiectare
încorporează deja o serie de aspecte ale limbajului de programare şi SGBD-ului ales.
Unele din avantajele des citate în favoarea orientării spre obiecte sunt:
• Definiţia unui sistem prin intermediul obiectelor facilitează construcţia de
componente software care seamănă îndeaproape cu domeniul de aplicaţie, contribuind
astfel la proiectarea şi înţelegerea sistemelor;
• Datorită încapsulării şi ascunderii informaţiilor, întrebuinţarea obiectelor şi mesajelor
încurajează proiectarea modulară;
• Implementarea unui obiect nu depinde de structura internă a acestuia, ci de modul
cum acesta răspunde la mesaje;
• Întrebuinţarea claselor şi a moştenirii promovează dezvoltarea de componente
reutilizabile şi extensibile în contrucţia de noi sisteme sau pentru actualizarea celor
existente.
O bază de date orientată spre obiecte este o colecţie de obiecte persistente şi
partajabile care sunt definite de un model de date orientat pe obiecte. Un sistem SGBD
orientat pe obiecte este administratorul unei baze de date orientată pe obiecte.
Aspecte structurale ale modelului de date orientat pe obiecte:
• Obiectele sunt entităţi de bază care încorporează structuri de date şi operaţii;
• Fiecare obiect are un identificator unic, atribuit de sistem;
• Clasele descriu tipuri generice de obiecte;
• Conceptul de clasă este strâns legat de conceptul de moştenire;
• Clasele formează ierarhii de clase;
• Definirea unei clase este mecanismul de specificare a schemei bazei de date;
• Schema bazei de date se poate extinde prin definirea de noi clase;
• Definirea unei clase poate include atribute de tipuri definite de utilizator (imagine,
sunet);
• Se admit referiri recursive.
Operaţii ale modelului de date orientat pe obiecte:
• Obiectele comunică prin mesaje;
• Un mesaj poate fi trimis instanţelor din mai multe clase;
• Metodele pot fi definite, şterse sau modificate;
• Clasele pot fi definite, şterse sau modificate;
• Instanţa unei clase poate fi actualizată prin metode ce modifică valorile variabilelor
propriei instanţe.
Reguli de integritate ale modelului de date orientat pe obiecte:
• Obiectele trebuie să respecte caracteristicile clasei din care fac parte;
• Obiectele sunt încapsulate;
• Un obiect nu există fără să aibă un identificator; dacă obiectul este şters, se şterge şi
identificatorul;
• Restricţia de integritate cunoscută de la modelul relaţional nu este implementată (nu
există posibilitatea de ştergere în cascadă).
33
Modelele orientate pe înregistrare sunt utilizate pentru reprezentarea atât a
structurii logice a bazei de date, cât şi a conţinutului acesteia. Un dezavantaj principal este
absenţa instrumentelor prin care să se specifice restricţiile datelor. Cele mai utilizate sunt:
modelul relaţional, modelul ierarhic şi modelul reţea.
Modelul relaţional reprezintă datele şi legăturile dintre ele sub forma unor tabele, în
care liniile şi coloanele reprezintă un element distinct al bazei de date. Exemplu -
FURNIZORI FACTURI-PRIMITE
Furnizor Adresa Localitate Furnizor Număr Data Valoare
Alfa Unirii 2 Iaşi Alfa SRL 12540 12/02/07 1259.8
SRL
Beta SA Apelor 5 Bacău Beta SA 14870 14/02/07 3265
Gama Viilor 56 Iaşi Alfa SRL 24550 22/02/07 2987.5
SA
Gama SA 18960 28/02/07 5420
Modelul ierarhic reprezintă structura datelor sub forma unui arbore, alcătuit din mai
multe noduri; unele sunt noduri-părinte, altele sunt noduri-copil. Partea superioară este
rădăcina. Un fiu nu poate exista independent de tatăl său, iar orice fiu poate fi la rândul său
tată, deci poate avea unul sau mai mulţi fii.
Primul model utilizat pentru organizarea datelor în baze de date, modelul ierarhic se
bazează deci pe structura arborescentă şi pe relaţiile 1-1 şi 1-n, prezentându-se sub forma unui
arbore, în care se regăsesc pe un prim nivel – rădăcina (nodul-părinte), iar pe nivele următoare
diferite elemente subordonate (noduri-copil). Nodul-părinte poate avea subordonate mai multe
noduri-copil în timp ce un nod-copil poate avea un singur părinte. Rezultă că relaţia părinte-
copil poate fi de tip 1-n, iar relaţia copil părinte poate fi doar de tip 1-1.
Acest model asigură organizarea datelor pe orice tip de suport magnetic şi reducerea
timpului de acces la înregistrări. El are însă o serie de limite în special în operaţiile de
actualizare când adăugarea de noi înregistrări, cu excepţia celor din colecţia de date rădăcină,
se poate efectua numai cu specificarea colecţiilor de date superioare, iar ştergerea unei
înregistrări duce la eliminarea fizică a tuturor înregistrărilor subordonate.
În figura nr.2.11 este prezentat un exemplu de model ierarhic:
FACTURI-
EMISE
34
Astfel reţeaua este un graf orientat alcătuit din noduri conectate prin arce. Nodurile corespund
tipurilor de înregistrare, iar arcele pointerilor. În felul acesta este permisă introducerea
înregistrărilor artificiale pentru a reprezenta legăturile n-are (n>2)
FACTURI-EMISE
35
2546 13/02/07 2365
Alfa SRL Unirii 2 Iaşi R12548171
3560 15/02/07 1879
Funcţia care atrage o entitate într-o asociaţie se numeşte rol. Clarificarea rolului
fiecărei clase de entităţi este esenţială în proiectarea bazei de date. De exemplu, pentru clasa
de asociaţii CUMPĂRARE, rolul fiecărei entităţi din clasa FURNIZORI este întocmeşte, iar
rolul fiecărei entităţi din clasa FACTURI-PRIMITE este-întocmită. Formularea rolului pemite
identificarea unui cuplu entităţi-asociaţii.
Pentru reprezentarea grafică a unei diagrame entităţi-asociaţii, în literatura de specialitate au
fost propuse mai multe soluţii. Una din cele mai utilizate este prezentată mai în figura nr.
2.14.
FURNIZORI FACTURI
Nume Număr
Adresă întocmeşte este Dată
CUMPĂRARE
Localitate întocmită Valoare
Cod_fiscal
Fig. nr. 2.14. Diagrama entitate-asociaţii
FURNIZORI FACTURI
Nume Număr
Adresă CUMPĂRARE Dată
Localitate Valoare
Cod_fiscal
Fig. nr. 2.15. Reprezentare grafică prin metoda Merise
36
Cele mai simple, dar şi cele mai utilizate sunt asociaţii binare. În practică apar deseori
şi asociaţii ternare.
Cardinalitatea defineşte numărul de entităţi dintr-o clasă de care poate fi legată o
entitate dată prin intermediul unei asociaţii. Considerând cazul unei asociaţii binare, există
patru cardinalităţi posibile (vezi fig nr. 2.16 şi 2.18):
x1 y1 x1 y1
x2 y2 x2 y2
x3 y3 x3 y3
x4 y4 y4
TIP 1 la 1 TIP 1 la n
Fig. nr.2.16
- cardinalitatea de tip 1 la 1, în care unei entităţi din clasa X îi este asociată o
singură entitate din clasa Y şi reciproc. Pentru exemplul clasei de asociaţii CUMPĂRARE, ar
avea o astfel de cardinalitate dacă fiecare factură ar fi întocmită de un singur furnizor (perfect
adevărat) şi fiecare furnizor ar întocmi o singură factură (nerealist).
- cardinalitatea de tip 1 la n, în care o entitate din clasa X poate fi asociată la n
entităţi din clasa Y, în timp ce fiecare entitate din clasa Y poate fi asociată unei singure
entităţi din clasa X. Clasa de asociaţii VÂNZARE are o astfel de cardinalitate, pentru că
pentru fiecare client se pot întocmi mai multe facturi, dar o factură are un singur client (figura
2.17).
Observaţie: Într-o diagramă entităţi-asociaţii, cardinalitatea este reprezentată prin indicarea, în
dreptul clasei de entităţi a numărului maxim de asociaţii la care poate participa o entitate din
clasa respectivă. Un client poate fi asociat la n facturi emise, dar o factură poate fi asociată
unui singur client. De remarcat că reprezentarea grafică cardinalităţii se face invers faţă de
modul de citire al acesteia.
CLIENTI FACTURI
Nume n 1 Numar
Adresa VANZARE Data
Localitate Valoare
Cod_fiscal
Fig. nr. 2.17
- cardinalitatea de tip n la 1, în care o entitate din clasa X este asociată unei singure entităţi
din clasa Y, iar orice entitate din Y poate fi asociată la n entităţi din X. Este inversa
cardinalităţii de tip 1 la n.
- cardinalitatea de tip n la n, în care orice entitate din X poate fi asociată mai multor entităţi
din Y, iar o entitate din Y este asociabilă mai multor entităţi din X.
37
x1 y1 x1 y1
x2 y2 x2 y2
x3 y3 x3 y3
x4 x4
x5
TIPnla 1 TIPnla n
Fig nr .2.18
Caracterul obligatoriu sau facultativ este legat de conceptul de restricţie de
dependenţă. Dacă existenţa entităţii A din clasa X depinde de existenţa entităţii B din clasa Y
se spune că A este dependentă de B. În acest caz, ştergerea entităţii B din BD atrage după sine
ştergerea şi a entităţii A. Entitatea B este numită entitate dominantă. În clasa de asociaţii
VÂNZARE, clasa de entităţi FACTURI este dependentă de clasa de entităţi CLIENŢI, deci
CLIENŢI este o clasă dominantă.
În lucrările de specialitate, restricţia de dependenţă dintre două clase de entităţi se
exprimă prin sintagma “clase de asociaţii obligatorii sau faculative”. Astfel, clasa de asociaţii
VÂNZARE este obligatorie pentru FACTURI (nu poate apare o factură emisă în absenţa unei
vânzări) şi facultativă pentru clasa de entităţi CLIENŢI. Se spune că numărul minim de
asociaţii din VÂNZARE în care poate apare o entitate din FACTURI este 1, iar numărul
minim de asociaţii în care poate apare un client este 0. În diagramele E-A, în dreptul fiecărei
clase de entităţi apare o pereche de valori: prima arată cardinalitatea minimă, care este
legată de caracterul obligatoriu/facultativ al clasei de asociaţii pentru clasa de entităţi
respectivă, iar a doua valoare reprezintă cardinalitatea maximă (ceea ce s-a prezentat mai
sus) (vezi figura nr. 2.19).
CLIENTI FACTURI
Nume 0,n 1,1 Numar
Adresa VANZARE Data
Localitate Valoare
Cod_fiscal
Fig. nr. 2.19
Diagrama din figura 2.19 poate fi interpretată astfel: fiecare entitate din clasa
CLIENŢI poate apare în maxim n asociaţii din clasa VÂNZARE şi minim în 0 (nici una), iar
fiecare entitate din clasa FACTURI poate apare în maxim 1 asociaţiidin clasa VÂNZARE şi
minim 1 asociaţie din această clasă.
38
1. Permite utilizatorilor să definească baza de date, de obicei printr-un limbaj de definire a
datelor (DDL). Limbajul DDL permite utilizatorilor specificarea tipurilor de date şi a
structurilor, în timp ce constrângerile asupra datelor sunt stocate în baza de date
2. Permite utilizatorilor să insereze, să reactualizeze, să şteargă şi să extragă date din baza de
date, de obicei printr-un limbaj de manipulare a datelor (DML). Faptul că există un
depozit central al tuturor datelor şi descrierilor acestora permite limbajului DML să ofere
o facilitate de interogare generală a acestor date, denumită limbaj de interogare. Existenţa
unui limbaj de interogare elimină dificultăţile sistemelor bazate pe fişiere unde utilizatorul
este constrâns să lucreze cu un set fix de interogări pentru a evita proliferarea de
programe care creează probleme majore privind gestionarea acestora. Există două tipuri
de limbaje DML - procedurale şi neprocedurale care se deosebesc în funcţie de operaţiile
de extragere. De obicei, cele procedurale tratează baza de date înregistrare cu înregistrare,
în timp ce cele neprocedurale operează asupra unor seturi de înregistrări. În consecinţă,
limbajele procedurale specifică cum se obţine rezultatul unei instrucţiuni DML, iar cele
neprocedurale descriu numai ce date vor fi obţinute. Cel mai obişnuit tip de limbaj
neprocedural este limbajul structurat de interogare (SQL) care reprezintă acum atât
limbajul standard, cât şi cel de facto pentru SGBD relaţionale.
3. Oferă accesul controlat la baza de date. De exemplu, poate furniza
- un sistem de securitate care previne accesarea bazei de date de către utilizatori
neautorizaţi
- un sistem de integritate care menţine concordanţa datelor stocate
- un sistem de control al concurenţei care permite accesul partajat la baza de date
- un sistem de control al refacerii care restaurează baza de date într-o stare precedentă
concordantă ca urmare a unei defecţiuni în hardware sau software
- un catalog accesibil utilizatorilor care conţine descrieri ale datelor din baza de date
SGBD-ul prezintă şi o facilitate cunoscută sub denumirea de mecanism de
vizualizare care permite fiecărui utilizator să-şi definească propriul mod de vizualizare a bazei
de date. Limbajul DML permite definirea de moduri de vizualizare în care acestea reprezintă
un subset al bazei de date.
Avantajele SGBD
- controlul redundanţei datelor
- coerenţa datelor
- mai multe informaţii de la aceeaşi cantitate de date
- partajarea datelor
- integritatea crescută a datelor
- securitatea crescută
- aplicarea standardelor
- economia de scală
- echilibru între cerinţe aflate în conflict
- îmbunătăţirea accesibilităţii datelor şi capacităţii de răspuns
- productivitatea crescută
- capacitatea de întreţinere îmbunătăţită, prin independenţa de date
- concurenţa îmbunătăţită
- îmbunătăţirea serviciilor de salvare de siguranţă şi refacere
39
• limbajul de manipulare a datelor (LMD);
• utilitare de întreţinere a bazei de date;
• componente de control a programelor de aplicaţii.
Programele de gestiune a bazelor de date (PGBD) Această clasă de module
realizează accesul fizic la date ca urmare a unei comenzi primite printr-un program de
aplicaţii sau interactiv prin intermediul ecranului.
Limbajul de descriere a datelor (LDD) permite traducerea (compilare sau
interpretare, după caz) şi descrierea naturii datelor şi a legăturilor lor logice fie la nivelul
global (sub forma schemei conceptuale), fie la nivelul specific fiecărei aplicaţii (sub forma
schemei externe sau sub-schemă).
Limbajul de manipulare a datelor (LMD) permite gestionarea şi actualizarea
datelor dintr-o bază de date.
Utilitare de întreţinere a bazei de date
Un SGBD trebuie să ofere o gamă variată de programe utilitare care să permită
gestionarea de către un operator a bazei de date. Utilitarele variază de la un sistem la altul şi
depind de complexitatea SGBD-ului. Acestea pot efectua următoarele operaţii21:
• crearea versiunii iniţiale a bazei de date şi încărcarea acesteia folosindu-se fie o
copie creată anterior, fie date neorganizate;
• crearea şi actualizarea jurnalelor tranzacţiilor realizate asupra bazelor de date.
Acest utilitar controlează fiecare tranzacţie reţinând în jurnal următoarele
informaţii:
• identificatorii de program, de utilizator şi terminalul folosit;
• determinarea “timpului-maşină”;
• structura şi conţinutul bazei înainte şi după tranzacţie;
• natura tranzacţiei (sistem sau aplicaţie);
• înscrierea datelor transmise tampoanelor SGBD-ului în jurnalul
sistemului;
• reorganizarea bazei de date pentru recuperarea spaţiului vid;
• reorganizarea structurii fizice şi logice după tranzacţie;
• restructurarea bazei de date după un incident logic sau fizic, cu refacerea stării
existente anterior acestuia. Restaurarea este determinată de existenta în cadrul
SGBD-urilor a aşa-numitelor puncte-de-reluare (Checkpoint)22 în cazul unor
întreruperi în exploatarea unei baze de date, reluarea exploatării se va face nu de
la începutul bazei de date, ci de la Checkpointul precedent;
• diverse statistici ce permit cunoaşterea activităţii şi utilizării bazei de date;
• actualizarea schemei şi sub-schemei fără rescrierea şi compilarea lor;
• detectarea “spărgătorilor” regulilor de integritate definite, fără a fi necesară
intrarea în baza de date;
• realizarea unei copii permanente a bazei de date în scopuri de securitate.
Componentele de control
Acestea constituie mijloace de prevenire şi corectare a anumitor erori ce pot să apară
în condiţii “multi-utilizator”.
Integritatea bazei de date poate fi privită din mai multe puncte de vedere:
• dacă datele trebuie să fie modificate printr-o aplicaţie, atunci secvenţa completă a
acestei operaţii trebuie protejată de orice propagare sau interferenţă cu alte
aplicaţii;
• dacă o aplicaţie efectuează doar o citire a datelor, atunci execuţia acesteia trebuie
să interzică modificarea datelor astfel încât să se evite riscul invalidării datelor
citite în prealabil. Se asigură astfel blocarea actualizării în timpul operaţiei de
citire;
21
Saleh, I., Op. cit., p. 13
22
Ginguay, M., Lauret, A., Dictionnaire d’informatique, Ed. Masson, Paris, 1990, p. 215
40
• în cazul în care cel puţin două aplicaţii accesează concurent aceeaşi dată în cadrul
unei operaţii de actualizare, atunci integritatea bazei de date este “ameninţată”.
Schematic structura unui SGBD pate fi prezentată ca în figura 2.20:
A d m i n i s tr a to r u l
U ti l i z a to r i
BD
P ro g ram e d e
S tr u c tu r a B D a p l i c a ¡i i
LDD LM D
PG BD
U t. î n tr e ¡i n e r e C o m p . c o n tr o l
SG B D
B aza
de
d a te
23
Fotache, M., Op. cit., p. 37
41
• administratorul de date care operează la nivelul schemei de date precizând
necesarul şi disponibilitatea datelor;
• programatorii de aplicaţii şi utilizatorii finali care comunică cu SGBD-ul prin
intermediul limbajului de manipulare sau a limbajului de interogare.
Într-o altă viziune utilizatorii pot fi structuraţi astfel24:
1. utilizatorii liberi sau conversaţionali, reprezintă beneficiarii (utilizatorii neinformaticieni)
a informaţiilor care nu dispun de cunoştinţe despre structura bazei de date şi nici despre
sistemul de calcul pe care este implementată baza de date. În schimb au la dispoziţie
limbaje de interogare a bazei de date într-o formă simplistă;
2. utilizatori programatori care utilizează limbaje de manipulare realizând proceduri
complexe de exploatare a bazei de date. Aceşti utilizatori cunosc atât structura bazei de
date cât şi particularităţile sistemului de operare, ceea ce le dă posibilitatea să exploateze
toate facilităţile oferite de baza de date;
3. administratorul bazei de date care are cel mai important rol în funcţionarea şi exploatarea
optimă a întregului sistem, asigurând realizarea obiectivelor şi funcţiilor SGBD-ului.
O ultimă clasificare asupra căreia ne-am oprit grupează utilizatorii în trei mari
categorii25:
utilizatori finali – care interacţionează cu baza de date prin intermediul unui limbaj de
interogare sau care apelează programe scrise de programatorii de aplicaţii;
programatorii de aplicaţii care au rolul de a crea programele de aplicaţii ale bazei de date,
utilizând limbajul de manipulare a datelor;
administratorul bazei de date care este o persoană sau un grup de persoane responsabil cu
controlul general al sistemului.
Pe lângă aceste categorii de utilizatori, bazele de date pot fi accesate fraudulos de
persoane cu cunoştinţe de specialitate care încearcă să sustragă sau să distrugă informaţii,
provocând daune proprietarilor băncilor de date. Aceşti utilizatori sunt cunoscuţi sub numele
de hacker-i.
2.4.1. Teleprelucrarea
Program de
aplicaţie 1
Utilizator 1 Sistem
operare Sistem
(control operare
Program de SGBD (date)
Utilizator 2 comunicaţii)
aplicaţie 2
Baza de
Program de date
Utilizator n aplicaţie 3
24
Lungu, I., ş.a. Op. cit., p. 19
25
Sabău, Ghe., Op. cit., p. 18
42
Toată procesarea este efectuată pe acelaşi calculator. Terminalele utilizatorilor sunt
incapabile să funcţioneze singure, ele fiind legate la calculatorul central. Utilizatorii transmit
mesaje şi date de la terminale către calculatorul central. Subsistemul de control al
comunicaţiilor din cadrul sistemului de operare primeşte mesajele şi datele şi le transmite
programului de aplicaţii al utilizatorului corespunzător, acesta apelând la serviciile SGBD-
ului. În acelaşi mod, mesajele sunt transmise înapoi la terminalul utilizatorului.
SGBD-ul utilizează partea de management a datelor din cadrul sistemului de operare
pentru a procesa datele din baza de date. Toate comenzile din cadrul unui astfel de sistem sunt
generate de calculatorul central şi transmise pe canale de comunicaţie, sistemul numindu-se
“cu teleprelucrare” (tele=distanţă).
Pe lângă sarcina rulării programelor aplicaţie şi a sistemului SGBD, calculatorul
central trebuie să preia şi o cantitate semnificativă de muncă din partea terminalelor (de
exemplu, formatarea datelor pentru afişarea pe ecran).
Pe măsură ce raportul preţ/performanţă al calculatoarelor a crescut, tendinţa a fost de
utilizare a altor alternative ce implică mai multe calculatoare: arhitecturile fişier - server şi
client - server.
Client 1
Client 2
.
. Server de fişiere
.
Program Sistem de
aplicaţii 2
operare
Utilizator N SGBD (reţea)
Program
aplicaţii 3
Client N
43
2.4.3. Arhitectura client/server
44
Componenta de comunicaţie este asociată întotdeauna cu o reţea de comunicaţie ce
asigură suportul pentru circulaţia sub formă de mesaje a tuturor cererilor clienţilor şi a
răspunsurilor serverelor.
În cadrul arhitecturii client/server, clienţii au următorul rol:
• Asigură interfaţa bazei de date cu utilizatorul;
• Acceptă şi verifică sintaxa intrărilor (datelor) utilizatorilor;
• Generează cererile utilizatorilor pentru baza de date şi le transmite serverului;
• Recepţionează rezultatele de la server;
• Formatează rezultatele.
Serverul are următorele funcţii:
• Primeşte şi procesează cererile clienţilor pentru baza de date;
• Verifică autorizarea;
• Garantează că nu sunt încălcate contrângerile de integritate;
• Efectuează procesarea interogare/reactualizare şi trimite clientului răspunsul;
• Întreţine catalogul de sistem care descrie datele;
• Oferă acces simultan la baza de date;
• Asigură restaurarea şi refacerea bazei de date;
• Optimizează interogarea bazei de date.
Procesele client sunt procese proactive, iniţiind comunicaţia cu procesele server, în
timp ce procesele server sunt reactive, aşteptând cererile proceselor client.
Program
aplicaţii 1 Sistem de
Utilizator 1 operare
(reţea)
Program
aplicaţii 2 LAN
Client 1
Sistem de
Program operare Sistem de Sistem de
Utilizator 2 aplicaţii 2 (reţea) operare SGBD operare
(reţea) BD
(date)
Client 2
.
.
.
Server de BD
Program
aplicaţii 2 Sistem de
Utilizator N operare
(reţea)
Program
aplicaţii 3
Client N
45
• Servicii de tranzacţii oferite de către un server de tranzacţii conectat la un server de
baze de date;
• Alte servicii, incluzând servicii audio, video, CD-ROM, backup etc.
Componenta comunicaţie se referă la un software cu rol special care:
• Este amplasat logic între procesele client şi server;
• Asigură servicii specializate pentru a "ascunde" clienţilor detaliile protocoalelor de
comunicaţie în reţea şi a protocoalelor propriu-zise ale serverului.
Pentru a-şi îndeplini funcţiile, software-ul de comunicaţie posedă următoarele două
nivele:
• Nivelul fizic se referă la modul în care calculatoarele client şi server sunt conectate
fizic;
• Nivelul logic se ocupă de comunicaţia dintre procesele client şi server, fiind nivelul
protocoalelor de comunicaţie interprocese care asigură "conversaţia".
Componentele unei arhitecturi client-server trebuie să se conformeze următoarelor
principii fundamentale pentru a interacţiona corect:
- Independenţa hardware care impune ca procesele server, client şi de comunicaţie să
funcţioneze pe diferite platforme hardware fără diferenţe funcţionale.
- Independenţa software faţă de sistemele de operare, faţă de sistemele de operare în
reţea, faţă de aplicaţii care impune ca procesele server, client şi de comunicaţie să
funcţioneze în condiţiile existenţei unor diferite sisteme de operare, protocoale software şi
aplicaţii, fără diferenţe funcţionale.
- Accesul liber la serviciile oferite de servere trebuie asigurat tuturor clienţilor unui
sistem. Aceste servicii nu trebuie să depindă de locaţiile clienţilor sau serverelor. Un alt
factor cheie este acela că serviciile sunt furnizate doar la cerere.
- Distribuirea proceselor impune respectarea următoarelor reguli:
• Procesele client şi server trebuie să fie entităţi autonome cu funcţiuni bine definite,
conducând astfel la creşterea modularităţii şi flexibilităţii întregului sistem.
• Maximizarea utilizării locale a resurselor, atât la nivelul clienţilor, cât şi la nivelul
serverelor
• Asigurarea scalabilităţii, în sensul existenţei posibilităţii de extensie rapidă a sistemului
• Asigurarea interoperabilităţii şi integrării.
- Standardele trebuie să guverneze interfaţa cu utilizatorii, accesul la date, protocoalele de
reţea, comunicaţia interprocese. În prezent, din multitudinea de procese se remarcă două,
pentru accesul la date şi anume ODBC (Open Data Base Connectivity) şi IDAPI (Integrated
Database Application Programming Interface).
Există multe avantaje ale arhitecturii client/server:
• Permite un acces mai larg la bazele de date existente;
• Are performanţe crescute - dacă clienţii şi serverul se află pe calculatoare diferite,
atunci diferite unităţi centrale de prelucrare pot procesa aplicaţii în paralel; reglarea
serverului este mai uşor de efectuat dacă singura sa sarcină este de a efectua
prelucrarea bazei de date;
• Reduce costurilor dispozitivelor hardware - numai serverul necesită o capacitate de
stocare şi o putere de prelucrare suficiente pentru a stoca şi gestiona baza de date;
• Reduce costurile comunicaţiilor - aplicaţiile execută o parte din operaţii la client care
trimite prin reţea numai cererea de acces la baza de date, ceea ce face ca pe reţea să
circule mai puţine date;
• Măreşte coerenţa - serverul poate trata verificările de integritate astfel încât
constrângerile trebuie definite şi validate într-un singur loc, fără a fi necesar ca fiecare
program aplicaţie să execute propriile verificări.
Principalul dezavantaj al arhitecturii client/server este cel legat de control.
Calculatoarele client operează simultan şi din acest motiv procesează aplicaţiile în paralel,
ceea ce determină posibilitatea apariţiei unor pierderi de date la actualizări.
În contextul bazelor de date, arhitectura client/server înseamnă:
46
• Clientul administrază interfaţa cu utilizatorul şi logica aplicaţiei, acţionând ca o staţie
de lucru sofisticată pe care sunt executate aplicaţiile bazei de date.
• Clientul preia cererea utilizatorului, verifică sintaxa şi generează cererea pentru baza
de date în limbajul SQL sau în alt limbaj de baze de date, adecvat logicii aplicaţiei. Pe
urmă transmite mesajul serverului, aşteaptă un răspuns şi îl formatează pentru
utilizatorul final.
• Serverul acceptă şi procesează cererea pentru baza de date după care transmite
rezultatul clientului. Procesarea implică verificarea autorizării, asigurarea integrităţii,
întreţinerea catalogului de sistem şi procese de interogare şi reactualizare. În plus, se
asigură controlul simultaneităţii şi reconstrucţiei.
Nu putem încheia abordarea privind bazele de date în arhitectura client/server fără să
amintim de adaptabilitatea organică pentru Internet. Majoritatea serviciilor Internetului se
desfăşoară în regim client/server (banala navigare înseamnă un utilizator accesând datele
dintr-un site-server prin intermediul unei aplicaţii client care este browserul de Web), astfel că
devine naturală implicarea SGBDR-urilor în aplicaţii Internet de genul e-business sau e-
commerce26.
26
Băduţ, M., O perspectivă asupra bazelor de date, PC Report nr.12/1998
47
• explicite, adică acelea care prezintă clauze pentru stabilirea punctelor de început şi de
sfârşit (BEGIN TRANSACTION, COMMIT/END TRANSACTION, ROLLBACK).
Tranzacţiile nu produc anomalii dacă au loc de o manieră succesivă (execuţie serială).
Cum din motive de performanţă execuţia seriala nu este posibilă pe sisteme multiutilizator, se
apelează la tehnica blocării pentru a asigura o execuţie serializabilă a tranzacţiilor. În cea mai
simplă formă, blocarea constă în interzicerea accesului altor procese la datele implicate într-o
tranzacţie, până ce aceasta nu se finalizează. Blocarea poate avea loc la nivel de bază de date,
fişier, grup de înregistrări, înregistrare sau chiar câmp. Totuşi, blocarea nu este atât de
restrictivă, în sensul că:
• se permite citirea de către un utilizator a datelor accesate spre citire de alt utilizator
(blocare partajabilă);
• nu se permite citirea de către alţi utilizatori a datelor accesate în scopul actualizării
de alt utilizator (blocare exclusivă).
Blocarea se realizează prin emiterea de către o tranzacţii a unei cereri explicite de
blocare.
Accesul concurent şi complexitatea mecanismului de blocare sunt influenţate de
granularitatea blocării. Se intuieşte uşor faptul că blocarea întregii baze de date este mai
neeconomicoasă decât alte tipuri de blocare, dar blocarea unui singur câmp complică foarte
mult mecanismul de blocare. În practică, SGBD execută blocarea la nivel de înregistrare, grup
de înregistrări sau fişier.
O problemă specială o constituie interblocarea (deadlock), care constă în blocarea de către
două tranzacţii a anumitor resurse, apoi fiecare solicită resursele blocate de cealaltă. Există
două strategii de rezolvare a interblocării:
• prevenirea interblocării: fiecare tranzacţie blochează de la început toate resursele de
care are nevoie, astfel că alte tranzacţii nu le vor putea accesa; cum este imposibil de cunoscut
dinainte ce resurse sunt necesare, metoda are o slabă aplicabilitate practică;
• soluţionarea interblocării: se blochează resursele pe măsura ce tranzacţia le solicită,
deci interblocarea poate surveni, dar apoi se folosesc metode pentru detectarea şi eliminarea
sa. Pentru aceasta, sistemul poate să ţină evidenţa tranzacţiilor în curs, deci a înregistrărilor
accesate. Dacă survine interblocarea, una dintre părţi va fi victima, adică tranzacţia sa va fi
abandonată. Toate resursele vor fi deblocate iar utilizatorul va fi anunţat despre acest lucru.
Procesul întrerupt poate fi: cel cu cele mai multe resurse blocate; cel cu cele mai putine
resurse blocate; cel mai vechi; cel mai recent; cel cu cea mai mică prioritate la execuţie; cel
care nu a realizat încă actualizarea BD etc.
Aceste precizări sunt valabile pentru calculatoarele mari, SGBD micro având facilităţi mult
mai modeste de control al tranzacţiilor concurente.
Salvarea şi restaurarea bazei de date
Aceste operaţii au ca scop readucerea bazei de date în starea consistentă în care se
afla înainte de unele evenimente care au alterat consistenţa datelor, precum: funcţionare
anormală a SGBD-ului sau sistemului de operare, defecţiune a suportului fizic pe care este
memorată baza de date.
O stare consistentă este una în care sunt reflectate rezultatele finale ale execuţiei unor
tranzacţii, nici o tranzacţie nu este în curs de execuţie şi sunt satisfăcute restricţiile semantice
necesare.
Există mai multe tehnici de restaurare. Una dintre ele constă în terminarea
tranzacţiilor active la momentul defecţiunii. Informaţiile necesare restaurării pot îmbrăca
forma unor copii de siguranţă, jurnale ale tranzacţiilor (succesiunea cronologică a
prelucrărilor), puncte de control (checkpoints) şi jurnale ale imaginilor (rezultatele
prelucrărilor succesive). Restaurarea se poate face automat sau manual.
Securitatea bazei de date
Interzicerea accesului neautorizat la date îmbracă forma unui set de măsuri de
protecţie umane, hardware şi software.
Prima şi cea mai simplă măsură este izolarea fizică a sistemului de calcul de
persoanele neautorizate (acolo unde este posibil).
48
Accesul la resursele sistemului poate avea loc prin facilităţi ca parole, profile
utilizator sau matrici ale drepturilor de acces (privilegii, reguli de autorizare).
49
- implicarea într-o gamă largă de activităţi ca planificarea, analiza, proiectarea,
implementarea şi asigurarea securităţii bazei de date
- asigurarea unei documentaţii complete care să includă modelul întreprinderii, standardele,
politicile, procedurile, utilizarea dicţionarului de date şi controlul asupra utilizatorilor
finali
- menţinerea contactului cu utilzatorii pentru a determina noile cerinţe şi a rezolva
dificultăţile privind accesul la date sau performanţele
Administratorul bazei de date este implicat în proiectarea fizică a bazei de date şi în
implementarea efectivă a acesteia pe suporturile fizice de memorare, în impunerea
standardelor de securitate şi protecţie, precum şi în activităţile de salvare şi restaurare a bazei
de date.
Funcţiile generale ale administrării datelor şi bazelor de date sunt următoarele:
- stabilirea politicilor, procedurilor şi standardelor organizaţiei în materie de date, ca
măsuri de protecţie a datelor şi a bazei de date
- politicile datelor sunt reprezentate de o serie de specificaţii care explicitează
scopurile administrării datelor (de exemlu, "fiecare utilizator trebuie să posede o
parolă"
- procedurile asociate datelor sunt exprimări ale unor acţiuni ce trebuie
întreprinse pentru efectuarea unor anumite activităţi; de exemplu, procedurile de
salvare şi restaurare a datelor ce trebuie cunoscute de către toţi utilizatorii
- standardele asociate datelor sunt convenţii explicite ce trebuie urmate pentru
a facilita cunatificarea nivelului de calitate a datelor şi a bazei de date; de
exemplu, convenţiile de notaţie pentru obiectele componente ale unei baze de
date trebuie standardizate, urmând a fi respectate întocmai de către toţi
programatorii de aplicaţii.
- planificarea ce presupune administrarea eficientă a datelor şi a bazei de date implică atât
înţelegerea cu exactitate a nevoilor reale ale organizaţiei, cât şi abilitatea de a contribui la
dezvoltarea unei arhitecturi informaţionale care să satisfacă nevoile organizaţiei
- rezolvarea conflictelor de date. Bazele de date sunt utilizate cu scopul de a fi partajate;
mai mult, de regulă, bazele de date implică date ce provin de la mai multe departamente
din cadrul organizaţiei. În acest context, administratorilor datelor şi a bazelor de date le
revine misiunea de a media conflictele generate de asumarea dreptului de proprietate
asupra datelor din partea unor utilizatori
- gestionarea depozitului intern de date al cărui conţinut este reprezentat de metadatele
ce descriu datele şi resursele de procesare a datelor unei organizaţii. În prezent depozitele
de date înlocuiesc dicţionarele de date în majoritatea organizaţiilor, constituind
instrumente esenţiale de sprijinire a activităţilor de administrare a datelor şi a bazelor de
date
- selectarea componentelor hadware şi software. Evaluarea şi selectarea componentelor
hardware şi software este un factor cheie în administrarea eficientă a datelor unei
organizaţii, aspectul cel mai important fiind cel al asigurării permanente a unei
compatibilităţi depline între componentele hardware şi cele software
- gestionarea aspectelor privind securitatea şi confidenţialitatea datelor. Scopul
asigurării protecţiei şi securităţii datelor este de a preveni apariţia unor ameninţări
intenţionate sau accidentale la adresa integrităţii datelor şi a accesului la date. Asigurarea
protecţiei datelor se concretizează în elaborarea şi implementarea unor planuri detaliate de
securitate a datelor ce includ:
- politici şi proceduri administrative
- protecţii ale datelor la nivel fizic
- protecţii ale sistemului de gestiune a bazei de date, ce includ:
- perspective sau subscheme care restricţionează accesul utilizatorilor
- reguli de autorizare care identifică utilizatorii şi restricţionează
acţiunile pe care aceştia le pot efectua asupra bazei de date
50
- proceduri definite de utilizatori ce impun restricţii şi limitări
adiţionale asupra utilizării bazei de date
- proceduri de criptare ce conduc la criptarea datelor din baza de date
într-un format neinteligibil
- scheme de autentificare ce identifică fără ambiguitate persoanele ce
intenţionează să acceseze baza de date
- facilităţi suplimentare de salvare, monitorizare şi verificare care
conduc la uşurarea activităţii de restaurare.
- asigurarea procedurilor specifice de salvare şi restaurare
51
Capitolul 3. MODELUL RELAŢIONAL AL DATELOR
52
− mulţimea numelor atributelor unei relaţii (coloanelor unei tabele) împreună cu numele
relaţiei reprezintă o schemă a unei relaţii.
nume relatie
atribut
Obiecte-inventar
schema
relatiei
Cod-Furnizor Cod-ob-inv Den-ob-inv. UM PU Cantitate
Elementele de bază ale organizării datelor sunt prezentate comparativ, formal, uzual
sau fizic în Tabelul nr. 3.1.
Tabelul 3.1
Formal Uzual Fizic
relaţie tabel (tabelă) Fişier
tuplu rând (linie) înregistrare
atribut coloană câmp
53
de atribute, ale cărui valori sunt fie Null, fie se regăsesc în mulţimea valorilor cheii primare
ale altei relaţii.
Fie, de exemplu, relaţiile R1 (A, B, C, ...) şi R2 (M, N, O, ..., A) în care atributele A,
respectiv M, sunt cheile primare. Atributul A este cheia străină a relaţiei R2.
Regulile de integritate ale modelului relaţional sunt următoarele:
Regula 1: unicitatea cheii primare- cheia primară trebuie să fie minimală şi să aibă
valori unice
Regula 2: integritatea entităţii - atributul/atributele ce compun cheia primară trebuie
să aibă valori diferite de Null
Regula 3: integritatea referenţială- valorile atributului /atributelor cheii străine
trebuie să fie sau Null sau să fie prezente în cadrul valorilor cheii primare asociate.
Descrierea unei baze de date relaţionale presupune să se aibă în vedere două aspecte
ale acesteia: structura (sau schema) şi conţinutul (sau instanţierea).
Conţinutul unei relaţii este ansamblul tuplurilor ce o alcătuiesc la un moment dat. Se
modifică în timp.
Schema poate fi definită ca un ansamblu de relaţii asociate semantic prin domeniul
lor de definiţie şi prin restricţii de integritate. Este independentă de timp şi este componenta
permanentă a unei relaţii.
După C.J. Date, schema baza de date cuprinde:
• numele relaţiilor şi ale atributelor fiecărei relaţii;
• restricţiile de integritate, care sunt de trei feluri:
- restricţiile cheilor primare;
- restricţii referenţiale care decurg din existenţa cheilor străine;
- alte restricţii (cum sunt cele de comportament27).
Schema simplificată a unei baze de date relaţionale cuprinde numele tabelelor şi
enumerarea atributelor acestora, atributele-cheie fiind subliniate.
EX: Baza de date DESFACERE, alcătuită din tabelele CLIENŢI şi FACTURI-
EMISE
CLIENŢI(Cod_client, Nume_client, Localitate, Cod_fiscal)
FACTURI-EMISE(Număr_factură, Data_factură, Valoare, Cod_client)
Prezentarea grafică a unei baze de date respectă următoarele reguli:
• o tabelă se reprezintă pe două linii, pe prima fiind scris numele tabelei, iar pe
a doua numele atributelor;
• cheia primară este plasată prima;
• numele coloanelor cu atribute ce alcătuiesc cheia primară se subliniază;
• o restricţie referenţială este reprezentată printr-o săgeată care pleacă de la
numele coloanei de referinţă şi are vârful la atributul corespunzător din tabela cu care intră în
legătură.
CLIENŢI
Cod_client Nume_client Localitate Cod_fiscal
FACTURI_EMISE
Număr_factură Data_factură Valoare Cod_client
27
Restricţiile de comportament pot fi, cel mai adesea, de domeniu şi temporale. Cele de domeniu
impun ca valorile unui atribut să se încadreze între anumite limite. Cele temporale impun ca valorile
rezultate în urma actualizării să fie altele decât cele anterioare actualizării.
54
modifica atât structura, cât şi conţinutul bazei de date, dar de regulă, structura bazei de date
este relativ constantă pe tot parcursul utilizării acesteia.
Codd a formulat, în 1985, setul celor 13 reguli în raport cu care un sistem de gestiune
a bazelor de date poate fi considerat sistem relaţional, apreciindu-se, de fapt, măsura în care
sistemul este relaţional (numărul regulilor pe care le respectă).
R0 Regula fundamentală Un sistem de gestiune a bazelor de date relaţionale
trebuie să fie capabil să gestioneze o bază de date cu
ajutorul facilităţilor sale relaţionale.
R1 Regula reprezentării La nivelul logic, toate informaţiile dintr-o bază de date
informaţiei relaţională sunt reprezentate explicit ca valori în tabele
R2 Regula accesului garantat Orice valoare a oricărui atribut din cadrul oricărei
la date relaţii trebuie să poată fi regăsită prin specificarea
numelui relaţiei, a numelui atributului şi a valorii cheii
primare.
R3 Regula reprezentării SGBD-ul asigură un suport sistematic pentru
informaţiei necunoscute tratamentul valorilor nule (date necunoscute sau
neaplicabile), diferit de valorile prestabilite şi
independent de orice domeniu
R4 Regula catalogului dinamic Descrierea bazei de date şi a componentelor sale este
on-line realizată la nivel logic sub formă de tabele, putând fi
interogată în timp real prin intermediul limbajului de
manipulare a bazei de date.
R5 Regula limbajului de Este obligatorie existenţa unui limbaj de manipulare a
interogare datelor cu ajutorul căruia să se poată crea relaţii şi
vederi (perspective asupra bazei de date), să se poată
actualiza şi regăsi date etc.
R6 Regula actualizării Este obligatorie existenţa unui mecanism de
vederilor determinare a posibilităţii de actualizare sau nu a unei
tabele virtuale (vederi).
R7 Regula limbajului de nivel Limbajul de manipulare a datelor nu trebuie să
înalt conducă utilizatorul la explorarea relaţiilor tuplu cu
tuplu, pentru a regăsi datele dorite.
R8 Regula independenţei fizice Este necesar ca aspectele fizice ale stocării sau
a datelor accesului la date să fie separate de aspectele logice (de
organizare) ale datelor.
R9 Regula independenţei logice Este necesar ca modificările asupra datelor să nu
a datelor afecteze în nici un mod funcţionarea programelor de
aplicaţie şi nici operaţiile de manipulare a datelor.
R10 Regula independenţei Regulile de integritate a datelor trebuie să fie definite
datelor din punctul de în catalogul de sistem, independent de programele de
vedere al integrităţii aplicaţie.
R11 Regula independenţei Distribuirea datelor pe mai multe calculatoare din
datelor din punctul de cadrul unei reţele nu trebuie să afecteze programele de
vedere al distribuirii aplicaţie.
R12 Regula de nonsubversiune Atunci când SGBD posedă un limbaj de nivel inferior
(cod-maşină sau de asamblare), acesta nu poate
încălca regulile de integritate definite prin limbajul
relaţional al bazei de date
În literatura de specialitate se obişnuieşte ca, în funcţie de tipul cerinţelor exprimate,
regulile să fie grupate în 5 categorii:
• reguli de bază (fundamentale) R0 şi R12;
• reguli structurale R1 şi R6;
• reguli privind integritatea datelor R3 şi R10;
• reguli privind manipularea datelor R2, R4, R5, R7;
55
• reguli privind independenţa datelor R8, R9, R11.
Avantajele modelului relaţional în comparaţie cu celelalte tipuri de modele sunt:
• independenţa sporită a programelor de aplicaţii faţă de modul de reprezentare
internă a datelor şi metodele de acces la date;
• definirea unei structuri conceptuale, optime minimizând redundanţa datelor şi
anomaliile la actualizare (prin tehnica de normalizare);
• utilizarea unor limbaje procedurale, bazate pe algebra relaţională, şi a unor
limbaje neprocedurale care contribuie la îmbunătăţirea comunicării dintre sistem
şi utilizatorii neinformaticieni;
• integritatea şi confidenţialitatea datelor, prin folosirea unor mecanisme proprii;
• utilizarea paralelismului în prelucrarea datelor, deoarece manipularea datelor se
realizează numai la nivel de relaţie.
Tabela CLIENŢI2
Nume_client Localitate Cod_fiscal
Alfa SRL Iaşi R19548710
Gama SA Iaşi R19852201
Delta SRL Bacău R17256007
Omega SA Roman R17466540
Presupunem că două firme fuzionează. Ambele folosesc acelaşi SGBD, iar structurile
tabelelor au fost transformate, devenind identice. Care vor fi clienţii firmei rezultate după
fuzionare? Prin reuniunea tabelelor CLIENŢI1 şi CLIENŢI2 se obţine tabela CLIENŢI_NOI:
56
Tabela CLIENŢI_NOI
Nume_client Localitate Cod_fiscal
Alfa SRL Iaşi R19548710
Anca SRL Iaşi R19852553
Omega SA Roman R17466540
Star SRL Bacău R12586330
Amigo SRL Bacău R17256007
Select SRL Leţcani R17885330
Gama SA Iaşi R19852201
Delta SRL Bacău R17256007
Deci, CLIENŢI_NOI ← CLIENŢI1 ∪ CLIENŢI2
Din tabela CLIENŢI2 s-au preluat două tupluri, deoarece celelalte există deja în
tabela CLIENŢI1. Se elimină, deci, dublurile.
Intersecţia
Intersecţia reprezintă operaţia între două relaţii R1 şi R2 unicompatibile, rezultatul
fiind o relaţie R3 cu aceeaşi schemă şi care conţine tuplurile comune relaţiilor R1 şi R2.
Se scrie R3 ← R1 ∩ R2
Exemplu: Pornind de la aceleaşi tabele trebuie să răspundem la întrebarea: Care sunt
clienţii comuni celor două firme? Răspunsul îl constituie tabela CLIENŢI_COMUNI care va
arăta astfel:
Tabela CLIENŢI_COMUNI
Nume_client Localitate Cod_fiscal
Alfa SRL Iaşi R19548710
Omega SA Roman R17466540
Deci, CLIENŢI_COMUNI ← CLIENŢI1 ∩ CLIENŢI2.
O tabelă rezultată prin intersecţia a două tabele va conţine numai acele tupluri care
prezintă valori identice pentru toate atributele.
Diferenţa
Diferenţa este operaţia între două relaţii R1 şi R2 unicompatibile (care au aceeaşi
schemă), obţinându-se relaţia R3 cu aceeaşi schemă şi care conţine ansamblul realizărilor
constituit din tuplurile relaţiei R1 care diferă de cele existente în relaţia R2.
Se scrie R3 ← R1 – R2
Exemplu: Care sunt clienţii pe care îi are numai prima firmă? Răspunsul va fi tabela
NUMAI_CLIENŢI1, obţinută prin diferenţa între cele două tabele, astfel:
Tabela NUMAI_CLIENŢI1
Nume_client Localitate Cod_fiscal
Anca SRL Iaşi R19852553
Star SRL Bacău R12586330
Amigo SRL Bacău R17256007
Select SRL Leţcani R17885330
NUMAI_CLIENŢI1 ← CLIENŢI1 – CLIENŢI2
Diferenţa presupune deci eliminarea tuplurilor comune celor două relaţii, tabela
rezultat reţinând doar tuplurile primei relaţii, care nu sunt şi în relaţia a doua.
Produsul cartezian
Produsul cartezian este operaţia între două relaţii R1 şi R2 ce are ca rezultat o relaţie
R3 a cărei schemă se obţine prin juxtapunerea schemelor relaţiilor R1 şi R2. Relaţia R3
cuprinde toate combinaţiile n-uplurilor din relaţiile R1 şi R2.
57
Se notează R3 ← R1 x R2
Exemplu: Considerăm tabela CLIENŢI2 de mai sus şi tabela FACTURI.
Tabela FACTURI
Nr_factură Data Nume_client Val_factură
12540 12/02/07 Delta SRL 2300.08
15780 15/02/07 Gama SA 2564
47100 17/02/07 Delta SRL 8790
Produsul cartezian al celor două tabele va avea ca rezultat tabela Facturi_Clienţi, care
va arăta astfel:
Tabela FACTURI_CLIENŢI
Clienţi2. Clienţi2 Clienţi2. Facturi. Facturi. Facturi. Facturi.
Nume_client Localitate Cod_fiscal Nr_factură Data Nume_client Val_factură
Alfa SRL Iaşi R19548710 12540 12/02/07 Delta SRL 2300.08
Alfa SRL Iaşi R19548710 15780 15/02/07 Gama SA 2564
Alfa SRL Iaşi R19548710 47100 17/02/07 Delta SRL 8790
Gama SA Iaşi R19852201 12540 12/02/07 Delta SRL 2300.08
Gama SA Iaşi R19852201 15780 15/02/07 Gama SA 2564
Gama SA Iaşi R19852201 47100 17/02/07 Delta SA 8790
Delta SRL Bacău R17256007 12540 12/02/07 Delta SRL 2300.08
Delta SRL Bacău R17256007 15780 15/02/07 Gama SA 2564
Delta SRL Bacău R17256007 47100 17/02/07 Delta SRL 8790
Omega SA Roman R17466540 12540 12/02/07 Delta SRL 2300.08
Omega SA Roman R17466540 15780 15/02/07 Gama SA 2564
Omega SA Roman R17466540 47100 17/02/07 Delta SRL 8790
După cum se observă, prima linie a tabelei rezultat este combinaţia (concatenarea)
între prima linie a tabelei CLIENŢI2 şi prima linie a tabelei FACTURI, a doua este
combinaţia între prima linie din CLIENŢI2 cu a doua din FACTURI ş.a.m.d.
Cum tabela Clienţi2 are patru linii, iar tabela Facturi are trei linii, tabela rezultată prin
produsul cartezian va avea 4 x 3, adică 12 linii.
Firesc, se ridică problema utilităţii acestei operaţii. Practic, produsul cartezian nu este
utilizat niciodată direct, există însă operatori algebrici care derivă sau se bazează pe acesta.
Operatori relaţionali
Operatorii relaţionali se împart în:
operatori unari de restricţie (selecţia şi proiecţia);
operatori binari de extensie (joncţiunea şi diviziunea).
Selecţia
Selecţia (restricţia) este operaţia pe o relaţie R1 care produce o nouă relaţie R2 cu
aceeaşi schemă şi în care tuplurile verifică o condiţie exprimată explicit. Practic prin selecţie
se elimină/suprimă realizările (liniile) care nu satisfac condiţia impusă. Prin urmare
cardinalitatea noii relaţii R2 va fi mai mică sau cel mult egală cu cardinalitatea relaţiei R1.
Se notează R2 ← Selecţie (R1, < expresie - logică> )
R2 este tabela rezultat care va ave aceeaşi schemă ca şi R1.
Exemplu: Considerăm tabelele CLIENŢI1 şi FACTURI.
1. Care sunt clienţii cu sediul în Iaşi? Răspunsul se obţine prin aplicarea
operatorului SELECŢIE asupra relaţiei CLIENŢI. Tabela rezultat va conţine doar tuplurile
care prezintă valoarea atributului Localitate egală cu şirul de caractere „Iaşi”
Se scrie R2 ← SELECŢIE(CLIENŢI, Localitate = „Iaşi”)
58
Tabela R2 va arăta astfel:
Proiecţia
Proiecţia (decupajul vertical) reprezintă o operaţie pe o singură relaţie R1 şi are ca
rezultat o relaţie R2 redusă la atributele menţionate explicit în operanzi. Tuplurile din relaţia
R2 sunt unice.
Prin proiecţie se trece la o relaţie de grad inferior relaţiei R1.
Se notează R2 ← Proiecţie (R1; Atribut1, Atribut2, ..., Atributn) sau R2 ← R1
(Atribut1, Atribut2,...)
R2 este tabela rezultat, a cărei schemă va fi diferită de a tabelei R1, fiind formată
doar din atributele specificate. Dacă nu există tupluri identice, ea va avea acelaşi număr de
linii ca şi tabela R1.
Exemplu:
1) Care sunt localităţile în care firma are clienţi?
RR1 ← PROIECŢIE (CLIENŢI, Localitate)
2) Care sunt numele clienţilor firmei?
RR2 ← CLIENŢI (Nume_client)
RR1
Localitate
Iaşi
Roman
Bacău
Leţcani
În tabela RR1 au fost eliminate valorile identice ale atributului Localitate.
RR2
Nume_client
Alfa SRL
Anca SRL
Omega SRL
Star SRL
Amigo SRL
Select SRL
În tabela RR2 numărul de linii este identic cu cel al tabelei CLIENŢI.
Joncţiunea
Joncţiunea (Join sau Theta-joncţiune) reprezintă o operaţie între două relaţii R1 şi R2
care are ca rezultat o relaţie R3 cu o schemă obţinută prin concatenarea schemelor primelor
două. Conţinutul relaţiei îl reprezintă ansamblul tuplurilor obţinute prin concatenarea
tuplurilor din R1 şi R2 care verifică o condiţie stabilită între atributele celor două relaţii.
Condiţia se construieşte cu ajutorul operatorilor: < .> . > = . < = . ≠ .
59
Considerăm relaţiile R1 (A1, A2, ... , An) şi R2 B1, B2, ..., Bm). Ai şi Bj sunt două
atribute definite pe acelaşi domeniu şi ⊗ mulţimea operatorilor pentru comparaţii ce pot fi
aplicaţi celor două atribute. Joncţiunea relaţiei R1, prin Ai cu relaţia R2, prin Bj, notată:
R1 (Ai ⊗ Bj) R2
este relaţia R3 ale cărei tupluri sunt obţinute prin concatenarea fiecărui tuplu al relaţiei R1 cu
tuplurile relaţiei R2 pentru care este adevărată condiţia instituită între Ai şi Bj.
Joncţiunea este echivalenta unui produs cartezian urmat de o selecţie.
În lucrul cu bazele de date relaţionale se utilizează cu precădere echijoncţiunea, care
este un caz particular al theta-joncţiunii, în care se utilizează operatorul de egalitate. Echi-
joncţiunea se reprezintă astfel: R3 ← ECHIJONCŢIUNE (R1, R2, Ai = Bj)
Exemplu: Considerăm tabelele CLIENŢI şi FACTURI. Proprietatea comună a celor două
relaţii este Cod_client, care este cheie primară în tabela CLIENŢI şi cheie străină în tabela
FACTURI.
Tabela CLIENŢI
Cod_client Nume_client Localitate
1000 Alfa SRL Iaşi
1001 Gama SA Iaşi
1002 Delta SRL Bacău
1003 Omega SA Roman
Tabela FACTURI
Nr_factură Data_factură Cod_client Valoare_factură
12540 12/02/07 1001 2300.08
15780 15/02/07 1001 2564
21630 10/02/07 1002 1256
47100 17/02/07 1000 8790
Diviziunea
Este cel mai complex dintre operatorii algebrei relaţionale. În definire se porneşte de
la două relaţii: R1(X,Y) şi R2(Y). R1 are două atribute sau grupe de atribute, iar R2 are un
singur atribut sau grup de atribute Y, definit pe acelaşi domeniu ca şi în R1.
60
Diviziunea relaţională R1 ÷ R2 are ca rezultat o relaţie R3(X), defnită ca ansamblul
subtuplurilor R1(X) pentru care produsul lor cartezian cu R2(Y) este un ansamblu al
R1(X,Y).
xi ∈ R3 dacă şi numai dacă ∀ y i ∈ Y ∈ R2 → ∃ (xi, yi) ∈ R1
Se notează R3 ← R1 ÷ R2
Tabela R1 se numeşte deîmpărţit,iar tabela R2 se numeşte divizor.
Pentru exemplificare vom considera X şi Y atribute şi nu grupe de atribute.
R1
X Y
X1 y1
X3 y1
X5 y1
X1 y2
X2 y2
X3 y2
X4 y2
X1 y3
X5 y3
X3 y3
X2 y3
X4 y3
R2
Y
Y1
Y2
Y3
Determinarea relaţiei R3 prin diviziune este sinonimă cu rezolvarea problemei. Care
dintre x1, x2, x3, x4, x5 apar în R1, în tupluri(linii) împreună cu toate tuplurile din R2 (y1,
y2, y3)?
Se parcurg pe rând valorile xi ale atributului X din tabela R1 şi se constată că y1 şi x3
apar în tupluri cu toate valorile atributului Y din R2, deci tabela R3 va fi:
R3
X
X1
X3
Diviziunea nu este un operator fundamental, funcţionalitatea sa este obţinută prin
combinarea operatorilor produs cartezian, diferenţă şi proiecţie.
61
Formal, considerăm relaţia R{A1, A2, ..., An} şi două grupe de atribute X şi Y. Se
spune că există o dependenţă funcţională între X şi Y, dacă:
• fiecare valoare a lui X poate fi asociată unei singure valori a lui Y;
• două valori identice ale lui X nu pot fi asociate decât aceleiaşi valori a lui Y.
Se notează: X →Y
Se consideră tabela FACTURI.
FACTURI
Număr_factură Data_ factură Cod_client Val_factură
În tabela FACTURI, elementul cheie este Număr_factură. Dacă este cunoscut, atunci
vom afla şi data facturii, clientul pentru care s-a întocmit şi valoarea ei. Deci,
Număr_factură → Data_factură
Număr_factură → Cod_client
Număr_factură → Val_factură
Implicit, în orice relaţie R există dependenţele funcţionale:
cheia primară a lui R → celelalte atribute ale lui R
Dependenţele funcţionale care prezintă la sursă două sau mai multe atribute
sunt dependenţe funcţionale cu sursă compusă.
62
Fie relaţia R{A1, A2, ..., An} şi X, Y şi Z trei subansamble ale ansamblului {A1,
A2, ..., An}. Există o dependenţă multivaloare între grupurile de atribute X şi Y ale relaţiei R
dacă şi numai dacă:
• la fiecare valoare a lui X poate fi asociată una sau mai multe valori ale lui Y;
• această asociaţie nu depinde de valorile lui Z.
Considerăm o relaţie R{A1, A2, ..., Ai} şi N subansamble de atribute X 1, X2, ..., XN.
Se spune că există o dependenţă de joncţiune de ordinul N între X1, X2, ..., XN dacă şi numai
dacă R este joncţiunea proiecţiilor sale pe X1, X2, ..., XN. Dacă N=2, avem de-a face cu o
dependenţă multivaloare.
28
Filip, M., Grama, A., Medii de programare. Abordări teoretice, Ed. Fides, Iaşi, 1998, p.204
63
10547 13/02/07 Iulius SRL Iaşi R19456700 3564
10548 14/02/07 Toni SRL Bacău R18790654 3650
10549 14/02/07 Anca SRL Roman R17466540 4100.080
10550 15/02/07 Select SA Bacău R13666589 3864
10551 15/02/07 Anca SRL Roman R17466540 3290
Acest lucru se observă din exemplul de mai sus - este aşa-numita redundanţă logică.
Anomaliile de stocare apar, de exemplu, în cazul în care un client îşi schimbă codul fiscal sau
sediul, caz în care trebuie să modificăm toate liniile pe care apare clientul respectiv şi nu o
singură dată, cum ar fi logic. În consecinţă, este necesară fragmentarea bazei în mai multe
tabele care vor fi legate prin restricţii de integritate referenţială. Este important modul în care
se realizează acest lucru, pentru a nu se pierde informaţii, pe de o parte, iar pe de altă parte
dacă va rezulta un număr mare de tabele, acestea vor fi dificil de controlat, în ceea ce priveşte
respectarea restricţiilor.
Deci, obiectivul normalizării poate fi formulat astfel: minimizarea redundanţei,
eliminarea pierderilor de informaţii şi asigurarea unei viteze optime de acces la date.
1F N
2F N DF
3F N
BCNF
4F N DM V
5F N DJ
29
Codd, E.F., Further normalization of the database relational model, DataBase Systems, Courant
Computer Science Symposia Series, Vol.6, Englewood Cliffs, N.J.,Prentice-Hall, 1972
30
Filip, M., Grama, A., Op. cit., p.205
64
În relaţia FACT_CL prezentată anterior toate atributele sunt atomice. Deci, relaţia FACT_CL
este în 1FN.
CL
Cod_cl Nume_client Localitate Strada Judeţ Cod_post
65
Pentru trecerea în 3FN se parcurg următorii paşi:
• se identifică toate atributele ne-cheie şi care sunt surse ale unor dependenţe funcţionale;
• pentru fiecare atribut ne-cheie care este sursă de dependenţe funcţionale se constituie câte
o relaţie în care cheie primară va fi atributul respectiv, iar celelalte atribute vor fi
destinaţiile din dependenţele funcţionale.
Relaţia FACT este în 3FN pentru că nu este nici o dependenţă funcţională între un atribut ne-
cheie şi celelalte atribute. În relaţia CL, există dependenţele funcţionale:
Cod_post → Stradă
Cod_post → Localitate
Cod_post → Judeţ
Cod_post este un atribut ne-cheie, sursă în dependenţe funcţionale cu Strada,
Localitate şi Judeţ. Tabela CL se descompune în tabelele CLIENŢI şi CODP, astfel:
CLIENTI
Cod_cl Nume_client Cod_post
CODP
Cod_post Strada Localitate Judeţ
În 3FN, relaţia FACT_CL de la care am pornit se prezintă sub forma a trei relaţii:
FACT, CLIENTI, CODP
66
Capitolul 4. LIMBAJE DE INTEROGARE A BAZELOR DE DATE – SQL
4.1. SQL - Evoluţie şi performanţe
4.2. Comenzi pentru descrierea datelor;
4.3. Comenzi pentru interogarea bazelor de date
4.4. Comenyi pentru actualizarea bazei de date
67
standardizată a erorilor, modificarea schemei bazei de date (DROP, ALTER, REVOKE,
GRANT), SQL dinamic, modificări şi ştergeri referenţiale în cascadă, amânarea verificării
restricţiilor, niveluri de consistenţă a tranzacţiilor etc.
Pe lângă ANSI, ale cărui standarde au cea mai largă audienţă, mai există şi alte
organisme de standardizare SQL. X/Open este un grup de firme vest-europene care a adoptat
SQL ca nucleu al unei întregi serii de standarde menite să asigure realizarea unui mediu
general pentru aplicaţii portabile, grefat pe sistemul de operare UNIX.
IBM a avut un aport incontestabil la apariţia şi maturizarea SQL, fiind un producător
cu mare influenţă în lumea SGBD-urilor, iar produsul său, DB2, este unul din standardele de
facto ale SQL.
În 1989 un grup de producători de instrumente dedicate bazelor de date au format
SQL Access Group, în vederea realizării conexiunilor dintre SGBDR-urile fiecăruia, pe baza
unor specificaţii comune, din care un prim set a fost publicat în 1991 sub titulatura RDA
(Remote Database Access). Specificaţiile RDA n-au reuşit să se impună pe piaţa SGBD-
urilor.
La insistenţele firmei Microsoft, SQL Access Group şi-a concentrat eforturile pentru
elaborarea unei interfeţe-standard pentru SQL. Pe baza unui set de propuneri înaintat de
Microsoft, în 1992 au rezultat specificaţiile CLI (Call Level Interface). Acestea reprezintă un
ansamblu de funcţii şi proceduri pentru conectarea bazelor de date prin SQL în medii multi-
utilizator şi multi-platformă. Având drept reper CLI, Microsoft elaborează şi implementează
în acelaşi an un set propriu, ODBC (Open DataBase Conectivity), care a devenit standard în
materie de interfaţă SQL pentru microcalculatoare compatibile IBM PC în vederea accesării
bazelor de date relaţionale.
Standardul SQL:1999, denumit iniţial SQL3, are ca principale orientări:
transformarea acestuia într-un limbaj complet, în vederea definirii şi gestionării obiectelor
complexe şi persistente. Aceasta include: generalizare şi specializare, moşteniri multiple,
polimorfism, încapsulare, tipuri de date definite de utilizator, triggere şi proceduri stocate,
suport pentru sisteme bazate pe gestiunea cunoştinţelor, expresii privind interogări recursive
şi instrumente adecvate de administrare a datelor.
Standardul SQL:2003 are drept caracteristici majore: caracteristici legate de XML,
funcţii window, secvenţe standardizate şi coloane cu valori auto-generate (incluzând coloane-
identitate).
Standardul SQL:2006 defineşte căi prin care SQL poate fi utilizat împreună cu XML,
căi de a importa şi stoca date XML într-o bază de date SQL, de a le manipula în cadrul acelei
baze de date şi de a le publica.
Din punctul de vedere al utilizatorului final, obiectivul principal al SQL constă în a
oferi utilizatorului mijloacele necesare formulării unei consultări numai prin descrierea
rezultatului dorit, cu ajutorul unei expresii logice, fără a fi necesară şi explicitarea modului
efectiv în care se face căutarea în baza de date. Altfel spus, utilizatorul specifică rezultatul,
iar sistemul se ocupă de procedura de căutare.
Deşi este considerat, în primul rând, un limbaj de interogare, SQL este mult mai mult
decât un instrument de consultare a bazelor de date, deoarece permite, în egală măsură:
• definirea datelor;
• consultarea bazei de date;
• manipularea datelor din bază;
• controlul accesului;
• partajarea bazei între mai mulţi utilizatori ai acesteia;
• menţinerea integrităţii bazei de date.
După Groff şi Weinberg, principalele atuuri ale SQL sunt:
• Independenţa de producător, nefiind o tehnologie proprietară;
• Portabilitate între diferite sisteme de operare;
• Este standardizat;
• "Filosofia" sa se bazează pe modelul relaţional de organizare a datelor;
• Este un limbaj de nivel înalt, cu o structură care se apropie de limba engleză;
68
• Furnizează răspunsuri la numeroase interogări simple, ad-hoc, neprevăzute
iniţial;
• Constituie suportul programatic pentru accesul la baza de date;
• Permite multiple imagini asupra datelor bazei;
• Este un limbaj relaţional complet;
• Permite definirea dinamică a datelor, în sensul modificării structurii bazei chiar
în timp ce o parte din utilizatori sunt conectaţi la baza de date;
• Constituie un excelent suport pentru implementarea arhitecturilor client-server.
Limbajul SQL constituie un exemplu de limbaj orientat spre tansformări sau limbaj
proiectat să utilizeze relaţiile pentru a transforma intrările în ieşirile cerute. Ca limbaj, SQL
are două componente principale:
- un limbaj de definire a datelor pentru definirea structurii bazei de date (DDL)
- un limbaj de manipulare a datelor (DML) pentru regăsirea şi reactualizarea datelor.
Limbajul SQL conţine numai comenzi de definire şi manipulare şi nu conţine comenzi de
flux de control. Cu alte cuvinte nu există comenzi IF…THEN…ELSE, GO TO, DO…
WHILE sau alte comenzi care să ofere un flux de control. Acestea trebuie implementate prin
utilizarea unui limbaj de programare sau de control al lucrărilor sau interactiv prin decizii ale
utilizatorului. Datorită acestui fapt, limbajul SQL poate fi utilizat în două moduri. Prima
modalitate este de a folosi limbajul SQL interactiv, prin introducerea instrucţiunilor de la un
terminal. A doua este de a integra instrucţiunile SQL într-un limbaj procedural.
SQL este un limbaj relativ uşor de învăţat:
• Este un limbaj neprocedural - se specifică ce informaţii sunt cerute şi nu cum sunt
obţinute (limbajul SQL nu necesită specificarea metodelor de acces la date).
• SQL este un limbaj modern, cu format liber, ceea ce înseamnă că nu este necesar ca
fragmentele de comenzi să fie scrise în anumite locuri de pe ecran. Totuşi o comandă (sau
un set de comenzi SQL) este mai lizibilă dacă se foloseşte indentarea şi alinierea. De
exemplu:
- fiecare clauză din cadrul unei comenzi trebuie să înceapă pe o linie nouă;
- începutul fiecărei clauze trebuie să fie aliniat cu începutul celorlalte;
- dacă o clauză are mai multe părţi, fiecare dintre ele trebuie să apară pe câte o linie
separată şi trebuie să fie indentată faţă de începutul clauzei pentru a indica relaţia.
• Structura comenzilor constă în cuvinte standard din limba engleză, cum ar fi CREATE
TABLE, INSERT; SELECT.
• Limbajul SQL poate fi folosit de o gamă largă de utilizatori, inclusiv administratorii de
baze de date, programatorii de aplicaţii şi alte tipuri de utilizatori.
SQL este primul şi deocamdată singurul limbaj de baze de date standardizat care se
bucură de o acceptare largă.
Cele mai multe "dialecte" SQL admit următoarele tipuri de date:
• SMALLINT: întregi - scurte (4 poziţii, reprezentate pe 16 biţi),
• INTEGER sau INT: întregi - lungi (9 poziţii, 32 biţi),
• NUMERIC(m,n) sau DECIMAL(m,n) sau DEC(m,n) - reale, cu un total de m
poziţii, din care n la partea fracţionară,
• FLOAT: reale, virgulă mobilă (20 poziţii pentru mantisă),
• REAL : real, virgulă mobilă
• DOUBLE PRECISION: reale, virgulă mobilă, dublă precizie (30 poziţii pentru
mantisă),
• CHAR(n) sau CHARACTER(n): şir de caractere de lungime n (max. 240),
• VARCHAR(n) sau CHAR VARYING(n) sau CHARACTER VARYING(n): şir
de caractere de lungime variabilă (max. 254),
• DATE: dată calendaristică
• TIME: ora
69
• TIMESTAMP: an, lună, zi, ora, minutul, secunda, plus o fracţiune zecimală
dintr-o secundă.
Principalele comenzi ale SQL, care se regăsesc, într-o formă sau alta, în multe dintre
SGBDR-urile actuale sunt următoarele:
CLIENŢI
CodClient NumeClient Adresa Localitate
1001 TEXTILA SA Bld. Copou, 87 Iaşi
1002 MODERN SRL Bld. Gării, 22 Focşani
1003 OCCO SRL NULL Iaşi
1004 FILATURA SA Bld. Unirii, 145 Focşani
1005 INTEGRATA SA I.V.Viteazu, 115 Paşcani
1006 AMI SRL Galaţiului, 72 Bacău
1007 AXON SRL Silvestru, 2 Iaşi
1008 ALFA SRL Prosperităţii, 15 Paşcani
FACTURIEMISE
NrFactură CodClient DataFactură ValoareTotală TVAColectată
111111 1003 17.06. 2007 1700 271.42
111112 1001 17.06.2007 285 45.5
111113 1004 18.06.2007 585 93.4
111114 1003 18.06.2007 2850 455.04
111115 1008 18.06.2007 3570 570
111116 1008 19.06.2007 870 138.9
70
111117 1006 20.06.2007 1100 175.63
111118 1007 23.06.2007 1500 239.49
111119 1005 24.06.2007 4725 754.41
111120 1003 24.06.2007 300 47.89
111121 1001 24.06.2007 425 67.85
111122 1007 24.06.2007 875 139.7
111123 1006 25.06.2007 660 105.3
111124 1004 25.06.2007 3850 614.7
111125 1003 30.06.2007 1280 204.37
111126 1002 01.07.2007 5425 866.17
Fig. nr. 4.1. Baza de date utilizată în exemple
71
Ştergerea unei tabele din baza de date este realizabilă cu ajutorul comenzii DROP
TABLE. De obicei, această comandă se utilizează atunci când pe parcursul lucrului s-au creat
tabele intermediare, temporare. Ştergerea unei asemenea tabele, denumită de exemplu
TEMP1, se declanşează prin comanda:
DROP TABLE TEMP1
În SQL o interogare se formulează printr-o frază SELECT. Aceasta prezintă trei clauze
principale: SELECT, FROM şi WHERE.
• SELECT corespunde operatorului proiecţie din algebra relaţională, fiind utilizată pentru
desemnarea listei de atribute (coloanele) din tabela-rezultat;
• FROM este cea care permite enumerarea relaţiilor din care vor fi extrase informaţiile
aferente consultării;
• prin WHERE se desemnează predicatul selectiv al algebrei relaţionale, relativ la atribute
ale relaţiilor care apar în clauza FROM.
La modul general (şi simplist) o consultare simplă în SQL poate fi prezentată astfel:
SELECT C1, C2, ..., Cn
FROM R1, R2, ..., Rm
WHERE P
Execuţia unei fraze SELECT se conc1retizează în obţinerea unei tabele (relaţii) rezultat.
Acestă poate fi o tabelă propriu-zisă sau o tabelă temporară (care, de obicei, nu poate fi
actualizată), dar şi o tabelă derivată (imagine). Uneori tabela rezultat poate fi obţinută sub
forma unei variabile-tablou.
Ci - reprezintă coloanele (care sunt atribute sau expresii de atribute) tabelei-rezultat;
Rj - sunt relaţiile ce trebuie parcurse pentru obţinerea rezultatului;
P - este predicatul (condiţia) simplu sau compus ce trebuie îndeplinit de tupluri
pentru a fi incluse în tabela-rezultat.
Când clauza WHERE este omisă, se consideră implicit că predicatul P are valoarea
logică "adevărat".
Dacă în locul coloanelor C1, C2, ... Cn apare simbolul "*", în tabela-rezultat vor fi
incluse toate coloanele (atributele) din toate relaţiile specificate în clauza FROM. De
asemenea, în tabela-rezultat, nu este obligatoriu ca atributele să prezinte nume identic cu cel
din tabela enumerată în clauza FROM. Schimbarea numelui se realizează prin opţiunea AS .
Rezultatul unei fraze SELECT îl vom considera ca fiind sub forma unei tabele oarecare.
Trebuie avute în vedere, însă, că rezultatul interogării poate fi obţinut şi sub forma unei tabele
temporare sau chiar a unei variabile-tablou (matrice). În unele SGBD-uri, cum ar fi FoxPro,
formatul general al frazei SELECT conţine şi clauza INTO.
SELECT …
FROM …
INTO destinaţie
WHERE…
În destinaţie poate fi specificată o tabelă "normală", o tabelă temporară (tabelă care se
şterge automat la închiderea sa) sau o variabilă-tablou. Dacă clauza INTO nu este utilizată,
atunci în urma interogării se obţine o tabelă temporară cu numele predeterminat (Query).
Uneori, tabela rezultat ("normală" sau temporară) "încalcă" poruncile modelului
relaţional. Conform restricţiei de entitate, într-o relaţie nu pot exista două linii identice. Or, în
SQL, tabela obţinută dintr-o consultare poate conţine două sau mai multe tupluri identice.
Spre deosebire de algebra relaţională, în SQL nu se elimină automat tuplurile identice
(dublurile) din tabela-rezultat. Pentru aceasta este necesară utilizarea opţiunii DISTINCT:
SELECT DISTINCT C1, C2, ..., Cn
FROM R1, R2, ..., Rm
WHERE P
În concluzie, o frază SELECT, în forma în care a fost prezentată, corespunde:
• unei selecţii algebrice (clauza WHERE - P)
72
• unei proiecţii (SELECT - Ci)
• unui produs cartezian (FROM - R1 ⊗ R2 ⊗ ... ⊗ Rm)
şi conduce la obţinerea unei noi relaţii (tabele-rezultat) cu n coloane, fiecare coloană
fiind:
• un atribut din R1, R2, ..., Rm sau
• o expresie calculată pe baza unor atribute din R1, R2, ..., Rm.
Exemplu
Intersecţia
Pentru realizarea intersecţiei a două tabele, R1 şi R2 se utilizează operatorul
INTERSECT:
SELECT *
73
FROM R1
INTERSECT
SELECT *
FROM R2
Dacă în produsele profesionale, precum DB2 sau Oracle, operatorul este prezent, în
altele, precum Visual FoxPro, INTERSECT rămâne un deziderat, funcţionalitatea sa
realizându-se prin subconsultări (operatorii IN şi EXISTS) sau, uneori, prin joncţiune.
Diferenţa
Diferenţa dintre tabelele R1 şi R2 se realizează utilizând operatorul MINUS sau
EXCEPT. Fraza SELECT următoare funcţionează în Oracle.
SELECT *
FROM R1
MINUS
SELECT *
FROM R2
Produsul cartezian
În SQL nu există operator explicit pentru efectuarea produsului cartezian. Dacă în clauza
FROM apar două relaţii, R1 şi R2, atunci, în lipsa unei condiţii de joncţiune formulată în
clauza WHERE, tabela rezultat va conţine liniile obţinute din produsul cartezian R1 ⊗ R2.
SELECT *
FROM R1, R2
Operatorul AND a fost utilizat pentru a introduce un "ŞI" logic, după cum OR se
utilizează pentru “SAU” logic. În SQL, pentru comparare, în afara "clasicilor": >, >=, <, <=,
=, ≠ (<>), mai pot fi utilizaţi şi alţi operatori, dintre care în acest paragraf ne vom opri la:
BETWEEN (între, cuprins între),
LIKE (ca şi, la fel ca),
IN (în) şi
IS NULL.
Operatorul BETWEEN
Acest operator permite specificarea unui interval de valori în care trebuie să se încadreze
câmpul sau expresia testată. Intervalul se referă la valori numerice sau la date calendaristice.
Exemplul 2
Care sunt facturile emise după 23.06.2007 şi care au valoarea cuprinsă între 3000 şi
4000 lei ?
Fără operatorul BETWEEN fraza SELECT se scrie:
74
SELECT *
FROM FACTURIEMISE
WHERE DataFactură > {23.06.2007} AND
ValoareTotala >= 3000 AND ValoareTotala <= 4000
Utilizând operatorul BETWEEN se poate scrie:
SELECT *
FROM FACTURIEMISE
WHERE DataFactură > {23.06.2007} AND ValoareTotala BETWEEN
3000 AND 4000
Operatorul LIKE
Acest operator se foloseşte pentru a compara un atribut de tip şir de caractere (de
exemplu NumeClient, Adresa, Localitate) cu un literal (constantă de tip şir de caractere).
Astfel, dacă se doreşte obţinerea unei tabele-rezultat care să conţină numai clienţii ai căror
nume începe cu litera M, putem scrie predicatul din clauza WHERE sub forma: NumeClient
LIKE "M%". Deoarece după litera M apare semnul "%", se vor extrage din tabela CLIENŢI
toate tuplurile pentru care valoarea atributului NumeClient începe cu litera M, indiferent de
lungimea acestuia (ex. MELCRET, MIGAS, MITA, MATSUSHITA etc.). Despre semnul
"%" se spune că este un specificator multiplu, joker sau mască.
Un alt specificator multiplu utilizat în multe versiuni SQL este liniuţa de subliniere ("_").
Spre deosebire de "%", "_" substituie un singur caracter. Diferenţa dintre cei doi specificatori
multipli este pusă în evidenţă în exemplele următoare.
Exemplul 3
Care sunt clienţii ai căror nume este format din şapte caractere, începe cu litera A şi
sunt societăţi cu răspundere limitată (SRL-uri) ?
SELECT *
FROM CLIENŢI
WHERE NumeClient LIKE "A__ SRL"
Rezultat:
CodClien NumeClient Adresa Localitate
t
1006 AMI SRL Galaţiului, 72 Bacău
Exemplul 4
Dacă în exemplu 3 s-ar fi utilizat simbolul "%":
SELECT *
FROM CLIENŢI
WHERE NumeClient LIKE "A%SRL",
am fi obţinut:
Rezultat:
CodClient NumeClient Adresa Localitate
1006 AMI SRL Galaţiului, 72 Bacău
1007 AXON SRL Silvestru, 2 Iaşi
1008 ALFA SRL Prosperităţii, 15 Paşcani
În concluzie, "_" înlocuieşte (substituie) un singur caracter, în timp ce "%" înlocuieşte un
şir de caractere de lungime variabilă (între 0 şi n caractere). Cei doi specificatori multipli pot
fi utilizaţi împreună.
Operatorul IN
Format general:
expresie1 IN (expresie2, expresie3, ...)
75
Rezultatul evaluării unui predicat ce conţine acest operator va fi "adevărat" dacă valoarea
expresiei1 este egală cu (cel puţin) una din valorile: expresie2, expresie3, ... Este util atunci
când condiţiile de selecţie sunt mai complexe.
Exemplul 5
Care sunt clienţii din Iaşi şi Bacău ?
Fără utilizarea operatorului IN se scrie:
SELECT *
FROM CLIENTI
WHERE Localitate= "Iaşi" OR Localitate= "Bacău”
Utilizând operatorul IN:
SELECT *
FROM CLIENTI
WHERE Localitate IN ("Iaşi", "Bacău)
Rezultat
CodClient NumeClient Adresa Localitate
1001 TEXTILA SA Bld. Copou, 87 Iaşi
1003 OCCO SRL NULL Iaşi
1006 AMI SRL Galaţiului, 72 Bacău
1007 AXON SRL Silvestru, 2 Iaşi
Operatorul IS NULL
O valoare nulă este o valoare nedefinită. Este posibil ca la adăugarea unei linii într-o
tabelă valorile unor atribute să fie necunoscute. În aceste cazuri valoarea atributului pentru
tuplul respectiv este nulă. Reamintim că, prin definiţie, nu se admit valori nule pentru grupul
atributelor care constituie cheia primară a relaţiei.
Exemplul 6
Dacă se doreşte aflarea clienţilor pentru care nu s-a introdus adresa, se poate scrie:
SELECT *
FROM CLIENTI
WHERE Adresa IS NULL
Rezultat:
CodClient NumeClient Adresa Localitate
1003 OCCO SRL NULL Iaşi
Observaţii
• Valoarea NULL nu se confundă cu valoarea zero (pentru atributele numerice) sau cu
valoarea "spaţiu" (pentru atributele de tip şir de caractere)
• Operatorul NULL se utilizează cu IS şi nu cu semnul "=". Dacă s-ar utiliza forma
expresie = NULL şi nu expresie IS NULL, rezultatul evaluării va fi întotdeauna fals,
chiar dacă expresia nu este nulă.
Exemplul 1
Care sunt localităţile în care firma are clienţi ?
76
Este necesară parcurgerea relaţiei CLIENTI, singurul atribut care interesează fiind
Localitate. Deoarece SQL nu elimină dublurile automat, dacă se doreşte ca în tabela-rezultat o
localitate să figureze o singură dată, se utilizează opţiunea DISTINCT:
SELECT DISTINCT Localitate
FROM CLIENTI
Rezultat:
Localitate
Iaşi
Focşani
Bacău
Paşcani
Joncţiunea
SQL nu prezintă clauze sau operatori speciali pentru realizarea theta-joncţiunii, echi-
joncţiunii sau joncţiunii naturale. Dar, aşa cum am văzut, o joncţiune este o combinaţie de
produs cartezian şi selecţie.
Exemplu:
Care sunt facurile emise clienţilor din municipiul Iaşi ?
SELECT NrFactura, NumeClient, Localitate
FROM FACTURIEMISE, CLIENŢI
WHERE FACTURIEMISE.CodClient = CLIENŢI.CodClient
AND Localitate=”Iaşi”
sau
SELECT NrFactura, NumeClient, Localitate
FROM FACTURIEMISE INNER JOIN CLIENŢI
ON WHERE FACTURIEMISE.CodClient = CLIENŢI.CodClient
WHERE Localitate=”Iaşi”
Rezultat:
NrFactură NumeClient Localitate
111111 OCCO SRL Iaşi
111112 TEXTILA SA Iaşi
111114 OCCO SRL Iaşi
111118 AXON SRL Iaşi
111120 OCCO SRL Iaşi
111121 TEXTILA SA Iaşi
77
111122 AXON SRL Iaşi
111125 OCCO SRL Iaşi
Sub-consultări. Operatorul IN
O altă facilitate deosebit de importantă a limbajului SQL o constituie posibilitatea
includerii (imbricării) a două sau mai multe fraze SELECT, astfel încât pot fi formulate
interogări cu mare grad de complexitate.
Operatorul IN poate fi utilizat şi pentru includerea unei fraze SELECT într-o altă frază
SELECT.
Exemplul 1
Care sunt facturile emise în aceeaşi zi în care a fost întocmită factura 111114 ?
SELECT *
FROM FACTURIEMISE
WHERE DataFactură IN
(SELECT DataFactură
FROM FACTURIEMISE
WHERE NrFactură=111114)
Observaţie
Sub-consultarea
SELECT DataFactură
FROM FACTURIEMISE
WHERE NrFactură=111114
are ca rezultat o tabelă alcătuită dintr-o singură coloană (DataFactură) şi o singură linie
ce conţine valoarea atributului DataFactură pentru factura 111114:
DataFactură
18.06.2007
Clauza WHERE DataFactură IN determină căutarea în tabela FACTURIEMISE a
tuturor tuplurilor (liniilor) care au valoarea atributului DataFactură egală cu una din valorile
tuplurilor (în cazul nostru, egală cu valoarea tuplului) din tabela obţinută prin "sub-
consultare". Cu alte cuvinte, în acest caz WHERE Data IN va selecta toate facturile pentru
care data emiterii este 18.06.2007.
Rezultat:
NrFactură CodClient DataFactură ValoareTotală TVAColectată
111113 1004 18.06.2007 585 93.4
111114 1003 18.06.2007 2850 455.04
111115 1008 18.06.2007 3570 570
Exemplul 2
Care sunt facturile emise în alte zile decât cea în care a fost întocmită factura 111114 ?
SELECT *
FROM FACTURIEMISE
WHERE DataFactură NOT IN
(SELECT DataFactură
FROM FACTURIEMISE
WHERE NrFactură=111114)
S-a utilizat negaţia, testându-se non-apartenenţa la o relaţie creată printr-o sub-frază
SELECT.
Exemplul 3
Care sunt clienţii cărora li s-au trimis facturi întocmite în aceeaşi zi cu factura 111114 ?
SELECT DISTINCT NumeClient
78
FROM CLIENŢI
WHERE CodClient IN
(SELECT CodClient
FROM FACTURIEMISE
WHERE DataFactură IN
(SELECT DataFactură
FROM FACTURIEMISE
WHERE NrFactură=111114))
Am ilustrat modul în care pot fi imbricate (înlănţuite, incluse) trei fraze SELECT. O altă
soluţie pentru rezolvarea aceleaşi probleme este şi:
Se poate reţine, ca regulă generală, că aproape orice consultare poate fi redactată în mai
multe moduri, în funcţie de experienţa şi imaginaţia celui care o formulează.
Funcţia COUNT contorizează valorile unei coloane, altfel spus, numără, într-o relaţie,
câte valori diferite de NULL are coloana specificată.
Exemplul 1
Câţi clienţi are firma ?
SELECT COUNT (CodClient) AS Nr_Clienti
FROM CLIENTI
Rezultat:
Nr_Clienti
8
În funcţia COUNT se poate utiliza ca argument, în locul numelui unei coloane, semnul *;
în acest caz se va determina câte linii are tabela la care se aplică funcţia respectivă.
Exemplul 2
La câţi clienţi s-au trimis facturi ?
SELECT COUNT(*)
FROM CLIENTI
WHERE CodClient IN
(SELECT CodClient
79
FROM FACTURIEMISE)
Rezultatul corect poate fi însă obţinut şi prin utilizarea clauzei DISTINCT astfel:
SELECT COUNT (DISTINCT CodClient)
FROM FACTURIEMISE
Exemplul 3
Care este valoarea totală a facturilor emise ?
SELECT SUM (ValoareTotala) AS Total_FE
FROM FACTURIEMISE
Rezultat:
Total_FE
30000
Exemplul 4
Care este totalul valorii facturilor trimise clientului AXON SRL ?
SELECT SUM (ValoareTotala) AS Total_FE_AXON
FROM FACTURIEMISE, CLIENTI
WHERE FACTURIEMISE.CodClient = CLIENTI.CodClient
AND NumeClient = "AXON SRL"
Funcţiile MAX şi MIN determină valorile maxime, respectiv minime ale unei coloane
în cadrul unei tabele.
Exemplul 5
Care este cea mai mică valoare a unei facturi emise ?
SELECT MIN(ValoareTotala) AS ValMinima
FROM FACTURIEMISE
Rezultat
ValMinima
285
Exemplul 6
Care este factura emisă ce are cea mai mare valoare ?
SELECT NrFactură, ValoareTotala
FROM FACTURIEMISE
WHERE ValoareTotala = (SELECT MAX (ValoareTotala)
FROM FACTURIEMISE)
Rezultat:
NrFactura ValoareTotala
111126 5425
80
Rezultatul unei fraze SELECT ce conţine clauza GROUP BY este o tabelă care va fi
obţinută prin regruparea tuturor liniilor din tabelele enumerate în FROM, care prezintă o
aceeaşi valoare pentru o coloană sau un grup de coloane.
Formatul general este:
SELECT coloană1, coloană2, ...., coloanăm
FROM tabelă
GROUP BY coloană-de-regrupare
Exemplu 1
Care este totalul zilnic al valorii facturilor emise ?
SELECT DataFactură, SUM (ValoareTotala)
FROM FACTURIEMISE
GROUP BY DataFactură
În acest caz tabela-rezultat va avea un număr de linii egal cu numărul de date
calendaristice distincte din tabela FACTURIEMISE. Pentru toate facturile aferente unei zile
se va calcula suma valorilor, datorită utilizării funcţiei SUM(ValoareTotala).
Succesiunea paşilor este următoarea:
1. Se ordonează liniile tabelei FACTURIEMISE în funcţie de valoarea atributului
DataFactură:
81
111122 1007 24.06.2007 875 139.7
111123 1006 25.06.2007 660 105.37
111124 1004 25.06.2007 3850 614.7
111125 1003 30.06.2007 1280 204.36
111126 1002 01.07.2007 5425 866.17
3. Pentru fiecare din cele nouă grupuri se calculează suma valorilor atributului
ValoareTotala.
Tabela - rezultat final va avea nouă linii:
DataFactură SUM(ValoareTotala)
17.06.2007 1985
18.06.2007 7005
19.06.2007 870
20.06.2007 1100
23.06.2007 1500
24.06.2007 6325
25.06.2007 4510
30.06.2007 1280
01.07.2007 5425
Exemplul 2
Care este numărul facturilor emise pentru fiecare client ?
SELECT NumeClient, COUNT(NrFactură)
FROM FACTURIEMISE, CLIENTI
WHERE FACTURIEMISE.CodClient=CLIENTI.CodClient
GROUP BY FACTURIEMISE.CodClient
Observaţie
Până la standardul SQL99 şi publicarea Amendamentului OLAP la acest standard, în
SQL nu puteau fi calculate, prin GROUP BY, subtotaluri pe mai multe niveluri, pentru
aceasta fiind necesară scrierea de programe în SGBD-ul respectiv.
Clauza HAVING permite introducerea unor restricţii care sunt aplicate grupurilor de
tupluri, deci nu tuplurilor "individuale", aşa cum "face" clauza WHERE. Din tabela rezultat
sunt eliminate toate grupurile care nu satisfac condiţia specificată.
Clauza HAVING "lucrează" împreună cu o clauză GROUP BY, fiind practic o clauză
WHERE aplicată acesteia.
Formatul general este:
SELECT coloană 1, coloană 2, .... , coloană m
FROM tabelă
GROUP BY coloană-de-regrupare
HAVING caracteristică-de-grup
Exemplul 3
Pentru facturile emise interesează valoarea zilnică a acestora (în funcţie de data la care
au fost întocmite, dar numai dacă aceasta (valoarea zilnică) este de mai mare de cinci mii lei.
SELECT DataFactură, SUM(ValoareTotala)
FROM FACTURIEMISE
GROUP BY DataFactură
HAVING SUM(ValoareTotala) > 5000
La execuţia acestei fraze, se parcurg cei trei paşi prezentaţi la exemplul 1, apoi, din
cele nouă tupluri obţinute prin grupare, sunt extrase numai cele care îndeplinesc condiţia
SUM(ValoareTotala) > 5000.
Rezultat:
Data SUM(ValoareTotala)
82
18.06.2007 7005
24.06.2007 6325
01.07.2007 5425
Exemplul 4
Să se afişeze ziua în care s-au întocmit cele mai multe facturi.
SELECT DataFactură
FROM FACTURIEMISE
GROUP BY DataFactură
HAVING COUNT(*) >= ALL
(SELECT COUNT(*)
FROM FACTURIEMISE
GROUP BY DataFactură)
Exemplul 5
Care sunt clienţii pentru care s-au întocmit numai două facturi?
SELECT NumeClient
FROM CLIENTI INNER JOIN FACTURIEMISE
ON CLIENTI.CODCLIENT=FACTURIEMISE.CODCLIENT
GROUP BY NumeClient
HAVING COUNT(NrFactura)=2
sau
SELECT NumeClient
FROM CLIENTI
WHERE CodClient IN
(SELECT CodClient
FROM FACTURIEMISE
GROUP BY CodClient
HAVING COUNT(NrFactura)=2)
Exemplu 6
Care sunt zilele în care s-au întocmit cel puţin trei facturi?
SELECT DataFact , Count(*) as Nr
FROM FacturiEmise
GROUP BY DataFact
HAVING COUNT(*)>=3
Adăugarea de înregistrări
Adăugarea de noi linii într-o tabelă se realizează cu comanda INSERT care are
următoarea sintaxă:
Format: INSERT
INTO tabelă [(listă_câmpuri)]
VALUES (listă_valori)
Exemplul 1
83
Să presupunem că, la un moment dat, întreprinderea vinde produse şi firmei RODEX
SRL care are sediul pe strada Sapienţei, nr.44 bis, în localitatea Iaşi. Acest nou client trebuie
"introdus" în baza de date, operaţiune care în SQL, se realizează prin comanda:
INSERT
INTO CLIENŢI
VALUES (1009, "RODEX SRL", "Sapienţei, 44 bis", “Iaşi”)
Fraza INSERT de mai sus poate fi scrisă şi sub forma:
INSERT
INTO CLIENŢI (CodClient, NumeClient, Adresa, Localitate)
VALUES (1009, "RODEX SRL", "Sapienţei 44 bis", "Iaşi").
După cum se observă, după numele tabelei (CLIENŢI) au fost enumerate toate atributele
pentru care se introduc valori prin clauza VALUES.
Dacă nu s-ar fi cunoscut adresa clientului RODEX, atunci fraza INSERT ar fi avut
forma:
INSERT
INTO CLIENŢI (CodClient, NumeClient, Adresa, Localitate)
VALUES (1009, "RODEX SRL", NULL, "Iaşi")
În noua linie a tabelei CLIENŢI valoarea atributului Adresa va fi NULL.
Se putea folosi şi forma:
INSERT
INTO CLIENŢI
VALUES (1009, "RODEX SRL", " ", "Iaşi")
În urma execuţiei acestei comenzi, valoarea atributului Adresa va fi " " (un spaţiu), deci
diferită de NULL.
Ştergerea înregistrărilor
Operaţiunea de eliminare a uneia sau mai multor linii dintr-o tabelă se realizează prin
comanda DELETE care are următoarea sintaxă:
DELETE
FROM nume-tabelă
WHERE predicat
Exemplul 2
Să se elimine din tabela CLIENŢI linia aferentă clientului MODERN SRL (cod 1002).
DELETE
FROM CLIENŢI
WHERE CodClient = 1002
Exemplu 3
Să se şteargă datele referitoare la facturile emise clienţilor din oraşul Focşani.
DELETE
FROM FACTURIEMISE
WHERE CodClient IN
(SELECT CodClient
FROM CLIENŢI
WHERE Localitate = "Focşani")
În general, ştergerea unor linii trebuie privită cu multă circumspecţie, deoarece atunci
când linia de şters conţine valori ale unor atribute ce apar în alte tabele ca şi chei străine,
există riscul pierderii integrităţii referenţiale.
Standardul SQL92 permite la crearea unei tabele descrierea acţiunii care se va derula la
ştergerea unei linii părinte în cazul în care există linii copil. Spre exemplu, se poate refuza
ştergerea de linii din tabela CLIENŢI, dacă la crearea tabelei FACTURIEMISE se specifică:
84
ValoareTotala decimal (15) not NULL,
TVAColectata decimal (14) ,
PRIMARY KEY (NrFactură),
FOREIGN KEY (CodClient) REFERENCES CLIENŢI
ON DELETE RESTRICT)
Exemplul 4
Noua adresă a clientului Modern SRL este “Bulevardul Victoriei nr. 21”. Să se opereze
modificarea în baza de date.
Se actualizează atributul Adresa din tabela Clienţi.
UPDATE CLIENŢI
SET Adresa=“Bulevardul Victoriei nr. 21”
WHERE NumeClient=”Modern SRL”
85
Bibliografie
1. Airinei, D., ş.a., Modele de aplicaţii practice în Microsoft Excel şi Visual FoxPro,
Editura Sedcom Libris, Iaşi, 2003
2. Bazian, Menachem, Totul despre Visual FoxPro 6.0, Editura Teora, Bucureşti,
2001
3. Bâscă, O., Baze de date, Editura All, Bucureşti, 1997
4. Bot, Ed, Leonhard, Woody, Microsoft Office XP, traducere de Simona şi Titi
Preda, Editura Teora, Bucureşti, 2003
5. Conolly, T., Begg, C., Strachan, A., Baze de date,. Proiectare, implementare,
gestionare, Editura Teora, Bucureşti, 2001
6. Florescu, V., ş.a., Baze de date, Editura Economica, Bucureşti, 1999
7. Forta, B., SQL în lecţii de 10 minute, traducere de Mihai Mănăstireanu, Editura
Teora, Bucureşti, 2007
8. Fotache, M., Baze de date relaţionale. Organizare, interogare şi normalizare,
Editura Junimea, Iaşi, 1997
9. Fotache, M., SQL. Dialecte DB2, Oracle, Visual FoxPro, Editura Polirom, Iaşi,
2001
10. Fotache, M., Proiectarea bazelor de date. Normalizare, postnormalizare, Editura
Polirom, Iaşi, 2005
11. Fotache, M., Brava, I., Strîmbei, C., Creţu, L., Visual FoxPro. Ghidul dezvoltării
aplicaţiilor profesioanle, Editura Polirom, Iaşi, 2002
12. Hernandez, M. J., Proiectarea bazelor de date, Editura Teora, Bucureşti, 2003
13. Lungu, I. şi colectiv, Baze de date. Organizare, proiectare şi implementare,
Editura ALL, Bucureşti, 1995
14. Melnic, A., Medii de programare, Editura TehnoPress, Iaşi, 2005
15. Miloşescu, M., Baze de date în Visual FoxPro, Editura Teora, Bucureşti, 2003
16. Năstase, P., Tehnologia bazelor de date, Access 2000, Editura Economică,
Bucureşti, 2000
17. Oppel, A., SQL fără mistere, traducere de Cristian Mocanu, Florin Moraru,
Editura Rosetti Educational, Bucureşti, 2006
18. *** Microsoft Office, Access 2003, traducere de Cristian
Mocanu, Editura Teora, Bucureşti, 2004
86