Documente Academic
Documente Profesional
Documente Cultură
Baza de Date Cig
Baza de Date Cig
BAZE DE DATE
CURS PENTRU NVMNT LA DISTAN
BAZE DE DATE
BAZE DE DATE
CUPRINS
1. Introducere
1.1. Evoluia organizrii datelor
1.1.1. Organizarea nregistrrilor n fiiere
1.1.2. Limitele tratrii bazate pe fiiere
1.1.3. Avantajele sistemelor de gestiune a bazelor de date
1.1.4. Dezavantajele sistemelor de gestiune a bazelor de date
1.2. INDEPENDENA DATELOR. LIMBAJELE DE DEFINIRE I MANIPULARE A
DATELOR
1.2.1. Independena datelor
1.2.2. Limbajele bazelor de date
1.2.2.1. Limbajul de definire a datelor
1.2.2.1.1. Definirea schemei n SQL
1.2.2.1.2. Utilizarea interogrilor SQL n cadrul aplicaiilor
1.2.2.2. Limbajul de manipulare a datelor
1.2.2.2.1. Extragerea informaiilor din bazele de date
1.2.3. Alte caracteristici SQL
1.2.4. Query-By-Example (QBE)
1.3. SISTEME DE GESTIUNE A BAZELOR DE DATE
1.3.1. Componentele unui sistem de gestiune al bazelor de date
1.3.1.1. Componenta hardware
1.3.1.2. Componenta software
1.3.1.3. Date
1.3.1.4. Proceduri
1.3.1.5. Resursele umane
1.3.2. Componentele unui sistem de gestiune a bazelor de date
1.3.3. Funciile sistemelor de gestiune a bazelor de date
2. Modelarea datelor
2.1. Modele de date: reea, ierarhice, relaionale, obiectuale, hibrid
2.1.1. Istoricul bazelor de date
2.1.2. Funciile modelelor
2.1.3. Modele de date bazate pe nregistrri
2.1.3.1. Modelul ierarhic
2.1.3.2. modelul reea
2.1.3.3. modelul relational
2.1.4. Modele logice orientate pe obiecte
2.1.4.1. modelul entitate-relaie;
2.1.4.2. modelul orientat pe obiecte;
2.1.4.3. modelul obiectual-relaional;
2.1.5. Modele fizice de date
2.1.6. Avantajele bazelor de date relaionale
2.1.7. Chei
2.1.7.1. Cheia candidat
2.1.7.2. Cheia primar
2.1.7.3. Cheie alternativ
2.1.7.4. Cheie extern
3
BAZE DE DATE
BAZE DE DATE
CONTINUT
1. INTRODUCERE N BAZE DE DATE
OBIECTIVE
Data file 1
Data file 1
Application 1
Output 1
Application 2
Output 2
DBMS
Data file 1
Logical child
relationship
Database 2
Database 1
5
BAZE DE DATE
FN 1
FN 2
FN 3
FNBC FN 4
FN 5
OBIECTIVE
nsuirea de cunotine referitoare la limbajul de manipulare a datelor.
Utilizarea interogrilor simple i a interogrilor ce folosesc mai multe tabele.
Captarea de informaii referitoare la sistemele ce folosesc limbajul de interogare structurat al
datelor.
Definirea vederilor, cunoaterea rolurilor acestora precum i a modului lor de utilizare.
Cunoaterea de elemente referitoare la vederile simple, vederile agregat i vederile de validare.
Cunoaterea caracteristicilor vederilor.
Cunoaterea condiiilor n care se pot realiza actualizri n baza de date cu ajutorul vederilor.
BAZE DE DATE
Lucrari de laborator
1.
2.
3.
4.
5.
6.
BAZE DE DATE
BAZE DE DATE
Pentru a face diferena dintre date i informaii, Hernandez propune urmtoarea axiom:
Datele reprezint ceea ce se nmagazineaz; informaia reprezint ceea ce se extrage.
Cu alte cuvinte, datele trebuie extrase n aa fel din baza de date nct s capete semnificaie.
Evoluia n timp a metodelor de organizare a datelor e legat de soluiile tehnice de nmagazinare a
acestora i cuprinde nivelele:
1. Nivelul I - organizarea datelor n fiiere clasice;
2. Nivelul II - organizarea mixt n fiiere;
3. Nivelul III - organizarea datelor n bazele de date clasice;
4. Nivelul IV - organizarea datelor n bazele de date relaionale;
5. Nivelul V - organizarea datelor n baze de date distribuite.
n cadrul acestei evoluii se disting etapele:
Etapa I - este perioada caracterizat de nregistrarea datelor pe benzi magnetice. Aceast etap se
apropie mult de sistemul manual de organizare a datelor (ndosariere - datele sunt
organizate, n principal, sub form de fiiere secveniale datorit suportului magnetic
(benzi)). Programatorii erau nevoii s efectueze o serie de operaii de gestiune a
datelor, datorit puternicei legturi dintre aplicaii i date.
n aceast etap se remarc urmtoarele caracteristici:
- structura logic coincide cu cea fizic i, prin urmare, programatorul trebuie s
descrie i organizarea fizic a datelor pe suport, lucru incomod, la schimbarea
suportului;
- prelucrarea se face pe loturi;
- dependena aplicaiilor fa de date (o modificare n structura datelor sau a
dispozitivului de memorare implic modificri ale programelor de aplicaie i
recompilarea lor i, ca urmare, trebuie ca datele s fie redefinite n cadrul aplicaiei
ori de cte ori apare o modificare n structura bazei de date);
- redundan mare n memorarea datelor datorit faptului c aceleai date sunt
memorate separat pentru fiecare aplicaie ce are nevoie de ele;
- legturile dintre fiiere trebuie specificate n cadrul programelor aplicaie;
- fiecare aplicaie are propriile date i este singura care le poate folosi;
- programele realizeaz numai operaii simple de intrare/ieire.
Etapa a II-a - este caracterizat de nregistrarea datelor pe discul magnetic. Datele se pot organiza
acum att n fiiere secvenial-indexate ct i n fiiere cu acces direct. Anterior
acestei etape datele erau nmagazinate n fiiere obinuite, fie n format ISAM
(Indexed Sequential Access Method) fie n format VSAM (Virtual Storage Access
Method). Datele sunt nmagazinate i extrase acum n uniti numite blocuri sau
pagini. Spre deosebire de nmagazinarea n memoria RAM, timpul necesar
extragerii unei pagini difer n funcie de localizarea acesteia pe disc.
Caracteristicile corespunztoare acestei etape sunt:
- structura logic nu mai coincide cu cea fizic, ceea ce face ca programatorul s nu
mai fie nevoit s descrie i organizarea fizic a datelor pe suport, acest lucru fiind
fcut de ctre componentele specializate ale sistemului de operare;
- prelucrarea se face online sau n timp real;
- schimbarea unitii de memorare nu implic modificarea programelor;
- se menine redundan mare deoarece, de multe ori, aceleai date sunt pstrate n
mai multe fiiere;
- datele sunt nestructurate;
- mentenana bazei de date are un cost foarte ridicat;
9
BAZE DE DATE
-
Etapa a III-a - este caracterizat de apariia bazelor de date. Datele se pot organiza acum sub forma
unor fiiere integrate. Acestea permit realizarea mai multor fiiere logice pe baza
acelorai date fizice.
Caracteristici corespunztoare acestei etape sunt:
- organizarea fizic a datelor e independent de programele de aplicaii;
- se pot constitui fiiere logice n funcie de baza de date;
- se remarc un control integrat al datelor prin:
- reducerea redundanei datelor fiind posibil folosirea n comun a acelorai date
fizice de ctre mai multe aplicaii;
- accesul la date la nivel de cmp;
- eliminarea inconsistenelor;
- asigurarea controlului concurenei;
- asigurarea integritii datelor;
- gestiunea datelor;
- introducerea standardelor de disponibilitate a sistemelor;
- mbuntirea securitii datelor;
- asigurarea accesului la date dup chei multiple;
- organizarea datelor e realizat de o component software (data management);
- creterea independenei datelor, prin asigurarea transparenei detaliilor referitoare
la organizarea conceptual, structurile de stocare i strategiile de acces ale
utilizatorilor la:
- nivel logic:
- transparena organizrii conceptuale;
- transparena strategiilor logice de acces;
- nivel fizic:
- transparena organizrii nmagazinrii fizice;
- transparena cilor fizice de acces.
Etapa a IV-a - se caracterizeaz prin asigurarea independenei logice i fizice a datelor fa de
programele de aplicaie. Aceasta se realizeaz prin intermediul administratorului
de baze de date cu ajutorul descrierii datelor la un nivel logic global.
Caracteristicile specifice acestei etape sunt:
- datele sunt descrise la nivel logic global;
10
BAZE DE DATE
BAZE DE DATE
unei noi nregistrri este disponibil n locul indicat, nregistrarea poate fi plasat n acel loc, altfel ea
trebuie plasat n alt loc, iar pointerii trebuie reorganizai. n aceast situaie anumite nregistrri nu
se vor afla n ordinea fizic specificat. Dac numrul de nregistrri care nu se afl n ordinea fizic
specificat este mic, nu vor exista probleme deosebite, dar dac acest numr crete prea mult
pointerii trebuie reorganizai, ceea ce presupune un mare consum de resurse i, prin urmare, astfel
de operaii trebuie efectuate numai atunci cnd sistemul nu este deloc sau este slab solicitat. Dac
inserrile se fac rar, fiierul poate fi pstrat n ordinea fizic stabilit iniial, reorganizarea
pointerilor fcndu-se la apariia oricrei noi inserri, caz n care nu mai sunt necesare cmpurile de
pointeri.
Organizarea fiierelor n grupuri
O situaie foarte bun se ntlnete atunci cnd, n bazele de date de mici dimensiuni, fiecare tabel
se afl ntr-un fiier separat, iar nregistrrile au o lungime fix, ceea ce va conduce la reducerea
dimensiunii programelor. Multe dintre sistemele de baze de date utilizate pe scar larg nu folosesc
n mod direct sistemul de operare pentru gestiunea fiierelor. n aceast situaie, bazei de date i este
alocat un singur fiier de mari dimensiuni, toate tabelele fiind pstrate n cadrul unui singur fiier. O
astfel de structur pune la un loc nregistrri din mai multe tabele, permind prelucrarea eficient a
jonciunilor. Dac nregistrrile nu pot fi plasate toate ntr-un singur bloc, cele rmase vor apare n
blocurile adiacente. Structura, cunoscut sub numele de grup, permite citirea celor mai multe dintre
nregistrri cu ajutorul unui singur bloc.
Utilizarea grupurilor este foarte util n cazul prelucrrii particulare a unui anumit tip de jonciuni,
dar poate conduce la scderea performanelor n cazul altor tipuri de interogri.
nmagazinarea metadatelor n catalog
Informaiile referitoare la obiectele bazei de date sunt pstrate n alte tabele cunoscute sub numele
de catalogul bazei de date, care conine:
- denumirile tabelelor;
- denumirile cmpurilor tabelelor;
- domeniile de valori i lungimea cmpurilor;
- denumirile u definiiile vederilor;
- constrngerile de integritate (informaii despre cheile primar i extern).
Catalogul mai conine date despre utilizatorii sistemului (numele i condiiile de acces ale
acestora), precum i (posibil) date descriptive i statistice, cum ar fi:
- numrul de nregistrri din fiecare tabel;
- metoda de stocare folosit n cazul fiecrui tabel (de exemplu, n grup).
De asemenea mai trebuie pstrate date referitoare indecii folosii n cadrul fiecrui tabel
(denumirea indexului, denumirea tabelului pe care se aplic indexul respectiv, tipul indexului,
cmpurile pe care se aplic indexul). Se poate spune c, de fapt, toate aceste date formeaz o alt
baz de date n miniatur. Baza de date poate fi folosit pentru a nmagazina date despre propria
structur, ceea ce va conduce la o structur mai complex a sistemului, permind utilizarea la
maxim a puterii bazei de date prin asigurarea accesului rapid la datele sistemului.
Modalitatea optim de reprezentare a datelor sistemului poate fi aleas de ctre proiectantul
sistemului, o posibil reprezentare fiind urmtoarea:
Schema catalogului sistemului = (nume tabel, numr de atribute).
Schema atributelor = (nume atribut, nume tabel, tip de dat, poziie, dimensiune).
Schema utilizatorului = (nume utilizator, cont de utilizator, cheia de criptare, grup).
Schema de indexare = (numele indexului, numele tabelului, tipul indexului, atributul indexului).
Schema vederii = (numele vederii, definirea vederii).
12
BAZE DE DATE
Dublarea datelor
Se manifest prin faptul c aceleai date se pot afla n dou sau mai multe fiiere n funcie de
numrul aplicaiilor sau al utilizatorilor. n aceast situaie pot apare o serie de probleme, cum ar fi:
a) creterea costurilor prin creterea spaiului de memorare a datelor;
b) apariia inconsistenei datelor prin faptul c o anumit dat poate fi
memorat n mai multe locuri; atunci cnd exist mai multe copii ale
aceleiai date e posibil ca prin actualizarea unora dintre ele s existe valori
diferite ale acelorai date (inconsisten); inconsistena mai poate apare i la
introducerea greit a unor date;
c) imposibilitatea introducerii unor standarde;
d) imposibilitatea aplicrii restriciilor de securitate;
e) imposibilitatea meninerii integritii datelor (consisten i validare).
Dependena datelor
Structura fizic i stocarea fiierelor de date i nregistrrilor sunt definite n codul aplicaiei.
Aceasta nseamn c orice modificare efectuat n structura existent impune scrierea unui program
de tip exe-off (adic un program ce este rulat o singur dat, dup care poate fi nlturat). Acest
program trebuie:
a) s deschid fiierul iniial pentru a fi citit;
b) s creeze un fiier temporar cu noua structur;
c) s citeasc o nregistrare din fiierul iniial, s transforme datele pentru a le
ncadra n noua structur i s scrie fiierul temporar. Acest lucru trebuie
repetat pentru toate nregistrrile din fiierul iniial;
d) s tearg fiierul iniial;
e) s redenumeasc fiierul temporar cu numele fiierului iniial;
f) s modifice toate programele ce apeleaz fiierul iniial pentru a se conforma
noii structuri.
Toate aceste operaii necesit mult timp i sunt supuse pericolului de apariie a erorilor. Dac
structura unui fiier trebuie modificat, trebuie modificat i programul care l folosete, deoarece
programul tie prea multe lucruri despre structura acestuia. Diferena dintre conceptul de fiier i
cel de baz de date este reprezentat n figurile urmtoare:
13
BAZE DE DATE
Date fiier 1
Aplicaie 1
Rezultat 1
Aplicaie 2
Rezultat 2
Date fiier 1
Date fiier 1
Date fiier 1
Date fiier 1
Aplicaie 1
Rezultat 1
Aplicaie 2
Rezultat 2
SGBD
Date fiier 1
14
BAZE DE DATE
15
BAZE DE DATE
BAZE DE DATE
Query Language (sau SEQueL). Ulterior numele i-a fost schimbat n SQL (Structured Query
Language, pronunat sequel sau S-Q-L). Produsele ulterioare ale firmei IBM, SQL/DS i, apoi,
popularul DB2 folosesc acest limbaj. SQL se bazeaz pe calculul relaional ce are n vedere
utilizarea de variabile constituite din tupluri. n 1986, Institutul Naional American pentru Standarde
(ANSI) a elaborat i lansat standardele SQL contribuind astfel la extinderea acestuia n ntreaga
comunitate a productorilor de baze de date care, dei are numeroase variante, folosete totui
acelai set de comenzi i structuri de baz standardizate.
Instane i scheme
Bazele de date se modific des n decursul timpului. Datele aflate ntr-o baz de date la un anumit
moment dat alctuiesc o instan a acelei baze de date. Proiectul general al bazei de date este
denumit schema bazei de date. O schem reprezint o descriere a datelor conform modelului de
date propus. Schema bazei de date reprezint ceea ce n limbajele de programare clasice este
cunoscut sub numele de definirea tipurilor de date, iar instana unei baze de date este ceea ce n
limbajele de programare clasice este cunoscut sub denumirea de valoarea unei variabile.
Schema bazei de date reprezint descrierea general a bazei de date i conine:
- informaiile fizice de proiectare;
- informaii referitoare la utilizator;
- descrieri de nivel nalt ale tranzaciilor i aplicaiilor precum i legturile utilizatorilor cu ele;
- relaiile dintre date i tranzacii;
- statistici de utilizare.
n funcie de nivelul de abstractizare corespunztor exist urmtoarele tipuri de scheme:
1. Schema extern (subschema) se afl la nivel superior i corespunde unei valori a datelor. Ea
descrie vederile bazei de date ce se folosesc ntr-o anumit aplicaie i corespunde schemei
conceptuale. Schema reprezint vederea utilizatorilor asupra datelor (aplicaia).
2. Schema conceptual (logic) corespunde nivelului conceptual i descrie articolele, relaiile i
constrngerile dintre ele. Ea este o descriere abstract i integrat a tuturor datelor, independent
de sistemul de gestiune al bazelor de date folosit i trebuie s corespund schemei interne.
Schema reprezint perspectiva sistemului de gestiune al bazelor de date.
3. Schema intern se afl la nivel inferior i conine definiiile tuturor nregistrrilor stocate n
baza de date, metodele de reprezentare, cmpurile i indexurile datelor (descrie modul de
stocare fizic a datelor precum i structurile de acces la date). Schema reprezint perspectiva
realizrii sistemului/implementrii.
Sistemul de gestiune al bazelor de date efectueaz corespondene ntre cele trei tipuri de scheme
pentru a le corela. Dac se produce o modificare la nivel fizic, schema intern trebuie modificat,
dar schema conceptual poate rmne neatins. Corespondenele efectuate ntre vederile
utilizatorilor (nivelul extern) i stocarea fizic a datelor (nivelul intern) ajut la ascunderea
complexitii nivelului fizic, ceea ce face s creasc flexibilitatea i posibilitile de adaptare.
Sistemul SGBD trebuie s verifice dac fiecare schem extern poate fi derivat din schema
conceptual. Pentru a stabili corespondena dintre fiecare schem extern i cea intern, sistemul
trebuie s foloseasc informaiile din schema conceptual.
Schema relaional
Structura relaional a unei baze de date mai este cunoscut i sub denumirea de schem relaional
(sau metastructur datorit faptului c ea descrie structura datelor). O schem relaional reprezint
o descriere a unei colecii particulare de date, folosind un anumit model dat. Aceasta predefinete
posibilele stri ale bazei de date, n sensul c nici o stare a unei baze de date nu poate conine date
care s nu fie obinute n urma instanierii schemei respectivei baze de date i nici o stare a unei
baze de date nu poate conine o asociere ntre dou seturi de date dac aceast asociere nu a fost
definit n schema bazei de date. n plus, procedurile de manipulare a datelor trebuie s fie separate
17
BAZE DE DATE
de date. Modelul relaional al datelor este cel mai utilizat model pe plan mondial la ora actual.
Conceptul de baz ce fundamenteaz acest model este relaia, transformat ntr-un tabel ce conine
rnduri i coloane. Fiecare relaie are o schem ce descrie coloanele sau cmpurile tabelului. n
practic, schema bazei de date conine:
a. definiia tipurilor de date;
b. definiia relaiilor, specificnd pentru fiecare dintre ele:
- intensia (numele tuturor atributelor);
- cheia primar.
De obicei, ntr-un sistem relaional att schema conceptual ct i schema extern sunt relaionale.
Pentru a prezenta proiectul unei baze de date independent de orice limbaj de definire a datelor, de
obicei, se folosete o notaie general acceptat care are formatul:
<nume relatie>: <lista numelor atributelor>
O astfel de notaie este util n scopul clarificrii organizrii generale a bazei de date, dar nu
lmurete o serie de detalii referitoare, n special, la proprietile domeniilor de valori ale
atributelor. O definire mai complet care utilizeaz limbajul de definire a datelor se poate face cu
ajutorul notaiei originale propus de Codd, n care componentele sunt descrise n amnunt. Cu
ajutorul acestei notaii se pot crea entitile, atributele, domeniile de valori precum i cheile sub
forma unor entiti ale schemei bazei de date. Un astfel de limbaj definete doar structura acestor
entiti, nu i coninutul lor.
BAZE DE DATE
Modificrile fcute n schema intern se fac cu scopul mbuntirii performanelor bazei de date.
Independena de date este un concept care rmne de multe ori un deziderat greu de realizat, chiar i
n cazul sistemelor din ce n ce mai performante ale zilelor noastre. Totui, bazele de date
relaionale, datorit limbajelor relaionale pe care le folosesc, ofer un nalt grad de independen
fa de date. Dei, aa cum am artat, ntr-un sistem relaional att schema conceptual ct i cea
extern sunt, ambele, relaionale, totui, schema conceptual se construiete cu ajutorul unor
instrumente ce au un caracter mult mai general dect cel oferit de modelul relaional.
Presupunnd, de exemplu, c o vedere nu mai este necesar unui utilizator, datorit faptului c
anumite atribute nu mai sunt de actualitate, alte atribute din baza de date prezentnd interes pentru
acesta, se poate efectua o modificare n clauza SELECT pentru a rspunde cererii de modificare.
Att timp ct fiecare vedere este definit separat n funcie de schema conceptual i att timp ct
schema conceptual nu se modific, orice vedere creat pe baza acelei scheme poate fi actualizat
fr a afecta celelalte vederi.
Independena de date se mai folosete i atunci cnd se dorete s se obin o independen a
vederilor utilizatorilor fa de schema conceptual. De obicei, dac relaiile i atributele la care se
face referire n definiia vederii nu sunt eliminate cu ocazia unei modificri, vederea nu va fi
afectat de modificare. n acest fel, cererile suplimentare de modificare pot fi efectuate fr teama
c ele ar putea afecta aplicaiile existente care folosesc acea baz de date.
n sfrit, independena de date se mai refer i la faptul c este posibil modificarea schemei prin
care se realizeaz nmagazinarea fizic a datelor, fr a afecta schemele conceptual, respectiv
extern.
BAZE DE DATE
consult mai nti catalogul de sistem pentru a accesa corect datele. Teoretic, sunt trei limbaje de
definire a datelor:
- pentru schema extern;
- pentru schema conceptual;
- pentru schema intern.
Limbajul de definire a datelor conine comenzi necesare urmtoarelor operaii:
- definirea schemelor de relaie;
- eliminarea relaiilor;
- crearea indecilor;
- modificarea schemelor.
Limbajul de definire a datelor permite specificarea urmtoarelor informaii necesare n orice baz
de date:
- schema fiecrei relaii din baza de date;
- domeniul de valori asociat fiecrui atribut;
- constrngerile de integritate;
- setul de indeci care se creeaz pentru fiecare relaie n parte;
- informaii referitoare la securitatea sistemului i la modul de acces la acesta;
- structura de nmagazinare fizic pe disc a datelor.
constrangere_de_integritate1
n care r reprezint numele relaiei, AI reprezint numele unui atribut, iar DI reprezint domeniul n
care ia valori acel atribut. Constrngerile de integritate permise sunt cheia primar (Aj1; : : :;Ajm) i
regulile de validare a domeniului de valori (check(P)).
O cheie primar trebuie s ndeplineasc dou condiii:
- valorile cheii primare trebuie s fie unice;
- ntr-o cheie primar nu trebuie s apar valori nule.
Standardul SQL-92 consider c apariia constrngerii not null n cheia primar este un fapt
redundant, dar standardul SQL-89 cere definirea explicit a acestui lucru. Regulile de validare a
domeniului de valori (check) se dovedesc a fi extrem de utile la creterea funcionalitii bazei de
date dar, uneori, sunt foarte costisitoare, aa cum se ntmpl, de exemplu, n cazul folosirii cheii
externe.
n cazul n care se dorete eliminarea unei relaii din baza de date trebuie folosit urmtoarea relaie:
DROP TABLE r
n care A reprezint atributul, iar D reprezint domeniul de valori ce trebuie atribuit acestuia.
20
BAZE DE DATE
Instruciunile SQL admise sunt: DECLARE CURSOR, OPEN i FETCH care prelucreaz datele
din baza de date nregistrare cu nregistrare, precum i instruciunile de modificare, inserare sau
tergere a datelor.
Componenta dinamic SQL permite crearea i utilizarea de interogri SQL care s se modifice n
timpul rulrii aplicaiilor. De asemenea, n standardul SQL-92 sunt introduse module ce permit
definirea procedurilor n SQL.
21
BAZE DE DATE
n care fiecare AI reprezint un atribut, fiecare ri reprezint o relaie, iar P este un predicat, ceea ce
este echivalent expresiei:
A1;A2;:::;An (_P (r1 _ r2 _ : : :_rm))
Dac se omite clauza WHERE, predicatul P are valoarea True. Lista atributelor poate fi nlocuit
printr-un caracter * pentru a le alege pe toate. Prin intermediul SQL se alctuiete produsul
cartezian pe baza relaiilor precizate, se poate efectua o selecie cu ajutorul unui predicat, dup care
se poate face o proiecie pe anumite atribute. Rezultatul unei interogri SQL este tot o relaie i, n
mod implicit, nregistrrile duplicat nu sunt eliminate. n lista de selecie se pot afla i operaii
aritmetice.
Clauza WHERE
Predicatele pot avea orice grad de complexitate i pot implica:
- conexiuni logice de tip and, or, sau not;
- expresii aritmetice ce conin constante sau valori ale tuplurilor;
- operatorul between utilizat pentru definirea domeniilor de valori ale variabilelor.
Clauza FROM
Clauza FROM n sine, definete un produs cartezian calculat pe baza relaiilor care sunt specificate
n cadrul acesteia. SQL nu ofer echivalentul jonciunii naturale, dar aceasta poate fi exprimat cu
ajutorul unui produs cartezian urmate de operaiile de selecie i proiecie. Variabilele, care n SQL
sunt reprezentate de tuplurile relaiilor, se definesc n clauza FROM, putnd fi folosite n cadrul
expresiilor.
Operaia de redenumire
Redenumirea reprezint un mecanism utilizat la schimbarea numelor relaiilor sau atributelor.
Pentru aceasta se poate folosi clauza AS ce poate s apar att n clauza SELECT ct i n clauza
FROM, sub forma:
Nume_vechi AS nume_nou
Operaii cu iruri
Cele mai frecvente operaii fcute cu irurile de caractere sunt cele n care se folosesc operatorii
Like sau Not Like cu scopul regsirii unor seturi de caractere specificate. Se mai pot folosi i o serie
de alte funcii caracter, cum ar fi concatenarea, extragerea subirurilor, determinarea lungimii unui
22
BAZE DE DATE
ir de caractere .a.m.d.
Tupluri duplicat
Limbajele formale de interogare se bazeaz pe relaiile matematice. Din acest motiv, n cadrul
relaiilor nu sunt permise nregistrrile duplicat dar, deoarece eliminarea acestora este extrem de
costisitoare SQL admite duplicatele. Dac se dorete eliminarea acestora se poate folosi clauza
DISTINCT, iar dac se dorete s se obin asigurarea c nregistrrile duplicat nu sunt eliminate se
folosete clauza ALL.
Operaii cu mulimi
SQL folosete n acest caz reuniunea, intersecia i diferena. Prin operaia de reuniune se elimin
duplicatele dar, dac nu se urmrete acest lucru se poate folosi clauza UNION ALL. n cazul
operaiei de diferen se poate face precizarea c standardul SQL din 1986 prevedea pentru aceast
operaie clauza MINUS, n timp ce standardul din 1992 a redenumit clauza care este folosit astzi
sub denumirea de EXCEPT.
Funcii agregat
SQL poate opera cu funcii pe grupuri de tupluri folosind clauza GROUP BY. Atributele respective
sunt folosite pentru a forma grupuri ce au aceleai valori, astfel nct SQL poate determina:
- valoarea medie (Avg);
- valoarea minim (Min);
- valoarea maxim (Max);
- suma total a valorilor (Sum);
- numrul total al nregistrrilor din grup.
Toate aceste funcii sunt denumite funcii agregat sau totalizatoare. Astfel de funcii ntorc drept
rezultat o singur valoare. Dac n aceeai interogare apare att clauza WHERE ct i clauza
HAVING, predicatul clauzei WHERE este aplicat primul. Acele tupluri care ndeplinesc condiia
impus se introduc n cadrul unor grupuri cu ajutorul clauzei GROUP BY. Clauza HAVING este
aplicat fiecrui grup care se formeaz. Grupurile ce ndeplinesc condiia impus prin clauza
HAVING sunt utilizate de clauza SELECT pentru a genera tuplurile rezultat. Dac nu exist o
clauz HAVING, tuplurile ce ndeplinesc condiia impus de clauza WHERE sunt tratate ca i cum
ar fi un singur grup.
Conceptul de NULL
Interogrile n care nu se cunosc toate valorile ce trebuie afiate pun probleme, deoarece o valoare
necunoscut nu poate fi comparat sau utilizat ca parte a unei funcii agregat. Toate comparaiile
care implic valori necunoscute sunt false prin definiie. Pentru a determina dac n setul de
rezultate se afl valori necunoscute se poate utiliza cuvntul cheie NULL n scopul efecturii unui
astfel de test. Toate funciile agregat, cu excepia funciei COUNT ignor tuplurile ce au valori
necunoscute.
23
BAZE DE DATE
Subinterogri imbricate
Membru al unui set de nregistrri
Pentru a determina acest lucru se pot folosi operatorii In i Not In.
Relaii derivate
Standardul SQl-92 permite utilizarea unei subinterogri n cadrul clauzei FROM. Dac se ntmpl
acest lucru, relaiei rezultat trebuie s i se dea un nume, iar atributele trebuie redenumite.
tergeri
Eliminarea tuplurilor din cadrul unei relaii se exprim n mod asemntor unei interogri, cu
deosebirea c n locul afirii tuplurilor rezultat, acestea sunt eliminate din cadrul relaiei respective,
aa cum se poate vedea din sintaxa:
DELETE FROM r
WHERE P
Sunt eliminate acele tupluri din relaia r care ndeplinesc condiia specificat n predicatul P. Dac
se omite clauza WHERE, sunt eliminate toate tuplurile din cadrul relaiei. Se pot elimina doar
tuplurile dintr-o singur relaie la un moment dat, dar se poate asocia un numr nelimitat de relaii
cu ajutorul unei clauze SELECT-FROM-WHERE ce se poate introduce n cadrul unei clauze
WHERE a clauzei DELETE. O astfel de tehnic trebuie ns folosit cu pruden deoarece poate
24
BAZE DE DATE
duce la apariia de ambiguiti. Se recomand ca naintea utilizrii clauzei DELETE s se fac toate
testele necesare, marcndu-se tuplurile ce urmeaz a fi terse.
Inserri
Inserarea unei noi nregistrri n cadrul unei relaii se face fie prin specificarea unui tuplu, fie prin
utilizarea unei interogri al crei rezultat este setul de tupluri ce urmeaz a fi inserat. Valorile
atributelor tuplurilor inserate trebuie s respecte constrngerile de domeniu impuse.
nainte de a efectua o operaie de inserare se recomand evaluarea complet a unei instruciuni
SELECT corespondent pentru a evita apariia de probleme. Este posibil ca nu toate atributele
tuplurilor inserate s aibe valori i, prin urmare, n acest caz acestea trebuie s fie declarate ca fiind
necunoscute.
Actualizri
Operaia de actualizare permite modificarea anumitor valori n cadrul tuplurilor fr a fi necesar
modificarea lor complet. n general, clauza WHERE aplicat clauzei UPDATE poate conine orice
construcie corect acceptat ntr-o clauz SELECT obinuit. O clauz SELECT imbricat n
cadrul unei clauze UPDATE poate asocia o relaie care trebuie actualizat.
BAZE DE DATE
legate de scrierea numelor tabelelor sau atributelor acestora, aa cum s-ar putea ntmpla n cazul
folosirii limbajului SQL. Interfaa oferit este un editor structurat pe baza unui limbaj grafic.
BAZE DE DATE
sistemul bazei de date sunt specificate cu ajutorul unui set de definiii folosit cu scopul ascunderii
detaliilor de implementare a schemelor bazei de date
BAZE DE DATE
1.3.1.3. Date
Datele acioneaz ca o punte de legtur ntre componentele main (hardware i software) i
componenta uman. Baza de date conine att datele operaionale (setul de nregistrri pe care se
lucreaz) ct i metadatele. Structura bazei de date este numit schem.
1.3.1.4. Proceduri
Procedurile reprezint instruciunile i regulile aplicate n proiectarea i utilizarea bazei de date.
Acestea pot fi:
- deschiderea unei sesiuni de lucru n sistemul de gestiune al bazei de date;
- pornirea sau oprirea sistemului de gestiune al bazei de date;
- utilizarea unui program de aplicaie sau a unei funcii a sistemului de gestiune al bazei de date;
- efectuarea de copii de siguran;
- tratarea defeciunilor hardware i software;
- modificarea structurii unui tabel, reorganizarea bazei de date, mbuntirea performanelor,
arhivarea datelor.
BAZE DE DATE
3.
a)
b)
4.
-
29
BAZE DE DATE
Preprocesorul
DML
Codul programului
obiect
Metode de
acces
Buffer
Utilizatori
Administratorul
bazei de date
Interogri
Schema bazei
de date
SGBD
Procesor de
interogare
Administrator
baza de date
Compilator
DDL
Administrator catalog
Administrator de
fiiere
Catalogul
sistemului
Baza de date
30
BAZE DE DATE
Codul
programului obiect
Procesorul de
interogare
Controlul de autorizare
Verificatorul de
integritate
Procesorul
de comand
Administratorul
de tranzacii
Administratorul
de date
Metode de
acces
Buffer
Administratorul
de buffer
Administratorul de
catalog
Administratorul
bazei de date
Optimizatorul
de interogare
Planificatorul
Administratorul
de reconstituire
Administratorul
de fiiere
Catalogul
sistemului
Baza de date
31
BAZE DE DATE
Controlul de autorizare care verific dac utilizatorul are dreptul de a efectua operaia
cerut.
- Administratorul de fiiere.
- Administratorul de buffer care rspunde de transferul datelor dintre memoria principal
i dispozitivele de stocare secundare.
Administratorul de tranzacii este utilizat pentru a controla atomicitatea i concurena
tranzaciilor n scopul pstrrii consistenei i durabilitii bazei de date. O tranzacie
reprezint o colecie de operaii aplicate bazei de date care sunt efectuate toate deodat sub
forma unei singure uniti logice. Aceast component este alctuit din:
- Administratorul de tranzacii.
- Administratorul de blocare.
- Administratorul de reconstituire care garanteaz c baza de date rmne ntr-o stare
coerent dup ce n baza de date a aprut o eroare. Acesta este responsabil de reluarea
sau abandonarea unei tranzacii.
-
32
BAZE DE DATE
Sistemul de gestiune al bazei de date trebuie s garanteze c nu vor avea loc interferene
atunci cnd mai muli utilizatori acceseaz baza de date.
33
BAZE DE DATE
2. Modelarea datelor
2.1. Modele de date: reea, ierarhice, relaionale, obiectuale, hibrid
naintea construirii unei baze de date este necesar elaborarea unui model de date utilizat pentru
reprezentarea datelor. Un astfel de model se dovedete a fi de mare ajutor la nelegerea datelor i la
luarea celor mai bune decizii de proiectare n cadrul modelului fizic.
Un model este o abstractizare i o structur ce simbolizeaz toate caracteristicile entitilor eseniale
ce prezint interes pentru utilizator, o reprezentare i o reflectare a lumii reale (Universul
Discursului).
Un model de date reprezint o colecie integrat de concepte necesare descrierii datelor, relaiilor
dintre ele, precum i a constrngerilor asupra datelor (Connolly .a. 1998). Modelul de date este
utilizat la descrierea schemei bazei de date, definind structura datelor, legturile dintre acestea,
semantica lor, precum i constrngerile impuse, dei nu este obligatoriu ca ntotdeauna acestea s
fie regsite n orice model de date. Pe scurt, un model de date este utilizat pentru a reprezenta date
despre date.
Modelele de date ofer nelegerea descriptiv necesar definirii schemelor logice i externe i sunt
utile descrierii formale a schemei bazei de date.
Schema logic a unei baze de date reprezint o descriere abstract a unei poriuni din realitatea
modelat mpreun cu instanele bazei de date.
Un model de date este alctuit din trei elemente de baz:
34
BAZE DE DATE
-
entiti;
atribute;
- relaii.
O entitate reprezint un obiect sau concept din lumea real, cum ar fi de exemplu un student sau un
curs descris n cadrul bazei de date.
Un atribut reprezint acele caracteristici ce descriu aspecte sau condiii ale unei entiti, cum ar fi
de exemplu numele studentului sau situaia acestuia.
Relaia stabilit ntre dou sau mai multe entiti reprezint o interaciune ntre acele entiti, cum
ar fi de exemplu asocierea dintre un student i cursul pe care l urmeaz.
Aa cum artau Elmasri i Navathe, modelele de date ajut la nelegerea datelor asociate logic.
2.1.1. Istoricul bazelor de date
n continuare se vor prezenta cteva dintre cele mai importante evenimente petrecute pe parcursul
dezvoltrii bazelor de date.
-
n anul 1961 Charles Bachman proiecteaz Integrated Data Store (IDS) predecesorul
modelului reea.
Spre sfritul anilor 60, IBM creeaz Information Management System: IMS bazat pe
modelul ierarhic.
Spre sfritul anilor 60, grupul CODASYL (Committee for Data System Languages) definete
/standardizeaz modelul reea.
n anii 80 apar sistemele de gestiune a bazelor de date printre care: DB2, Oracle, Sybase,
Informix, DBase, Paradox.
ntre anii 1990 i 2000 apar concepte precum OODB, ORDB (Postgres), Data Warehouse,
OLAP, Data Mining, GIS, Mobile DB, Multimedia DB, Web DB, XML DB.
Inabilitatea bazelor de date de a lucra eficient n cadrul fiierelor obinuite cu date ce implic
utilizarea grupurilor repetitive de date a condus la dezvoltarea unei mari varieti de structuri de
baze de date, numite de obicei i modele de baze de date.
-
BAZE DE DATE
Modelul ierarhic
Din punct de vedere istoric, acesta a fost primul model de date ce a fundamentat un sistem de
gestiune al bazelor de date i a fost dezvoltat de ctre firma IBM pentru produsul su IMS care
utiliza limbajul DL/1.
Rdcina
Printe
Copil
Printe
36
Copil
Copil
BAZE DE DATE
Modelul ierarhic lucreaz cu grupuri repetitive prin utilizarea unei structuri de date ce se bazeaz pe
parcurgerea de sus n jos a unui arbore: datele aflate n nregistrrile primare reprezint ramurile
arborelui, n timp ce datele ce formeaz grupurile repetitive reprezint frunzele acestuia.
Avantajul modelului ierarhic este acela c metodele folosite la regsirea nregistrrilor asociate din
baza de date sunt mai simple dect cele folosite n modelul reea.
Intensia modelului de date ierarhic este reprezentat cu ajutorul unui arbore de definiie ce
reprezint o diagram a structurii de date n care sensul legturilor funcionale este ntotdeauna de la
nodul printe ctre nodul copil. O astfel de diagram este un graf orientat alctuit cu scopul
reprezentrii tipurilor de entiti i a relaiilor dintre acestea. Nodurile grafului corespund tipurilor
de entiti, iar arcele grafului reprezint legturile funcionale dintre tipurile de entiti.
Extensia modelului de date ierarhic se reprezint sub forma unui tabel n care fiecare linie a
tabelului este o nregistrare ce corespunde unei instanieri a tipului de entitate. n tabele sunt
permise duplicatele i, prin urmare, pot exista dou instanieri identice ale aceluiai tip de entitate.
Un singur tabel din baza de date are rolul de rdcin a arborelui n timp ce restul tabelelor
formeaz mulimea prinilor i copiilor arborelui.
Figura 2.1. Modelul ierahic
O relaie ntr-o baz de date ierarhic este reprezentat prin intermediul perechii printe/copil. n
acest tip de relaie, tabelul printe poate fi asociat cu unul sau mai multe tabele copil, dar un singur
tabel copil poate fi asociat doar cu un singur tabel printe. Aceste tabele sunt asociate n mod
explicit cu ajutorul unor pointeri sau pe baza unui aranjament fizic al nregistrrilor n tabele.
Utilizatorul acceseaz datele pornind din rdcina arborelui i parcurge un anumit drum unic pn
ajunge la datele cutate. O astfel de metod de acces cere utilizatorului o foarte bun cunoatere a
structurii bazei de date.
Un avantaj al utilizrii bazelor de date ierarhice este acela c utilizatorul poate extrage datele foarte
rapid datorit legturilor explicite definite n structura tabelelor. Un alt avantaj este acela c
integritatea referenial se obine prin crearea structurii i nu poate fi nclcat, ceea ce face ca o
nregistrare din tabelul copil s fie obligatoriu asociat unei nregistrri existente n tabelul printe,
iar o nregistrare tears din tabelul printe s impun eliminarea tuturor nregistrrilor asociate din
tabelul copil.
Probleme deosebite vor apare n momentul n care utilizatorul dorete s introduc o nregistrare n
tabelul copil care nu are asocieri cu nici o nregistrare din tabelul printe. Acest tip de baz de date
nu poate suporta asocierile complexe i, de aceea, deseori sunt probleme referitoare la redundana
datelor, deoarece este posibil s-i fie permis introducerea de date inconsistente. Aceast problem
poate fi ns rezolvat prin crearea a dou baze de date pentru a nlocui tipurile de relaii muli-lamuli, aa cum se prezint n figura de mai jos:
Relaie logic
copil
Baza de date 2
Baza de date 1
BAZE DE DATE
model de date pentru a remedia problemele tot mai presante referitoare la redundana datelor i la
rezolvarea asocierilor complexe dintre nregistrri.
Modelul reea
Modelul reea a fost creat, n special, ca o ncercare de a rezolva unele dintre problemele modelului
ierarhic.
Nod proprietar
1
Set structura
M
Nod membru
Figura 2.3. Modelul reea
Aa cum se poate observa din figura 2.3., structura unei baze de date de tip reea se poate reprezenta
cu ajutorul conceptelor de noduri i seturi. Un nod reprezint o colecie de nregistrri, n timp ce un
set stabilete i reprezint relaiile din cadrul unei bazei de date de tip reea. O astfel de construcie
transparent relaioneaz o pereche de noduri prin utilizarea unuia dintre ele sub denumirea de
proprietar, iar a celuilalt sub denumirea de membru.
Structura de tip set este o construcie ce stabilete i reprezint o relaie din cadrul bazei de date
reea (reprezint o mbuntire remarcabil fa de relaia printe/copil). O astfel de structur
suport o relaie de unu-la-muli, ceea ce nseamn faptul c o nregistrare din nodul proprietar
poate fi relaionat cu una sau mai multe nregistrri aparintoare nodului membru, dar unei
singure nregistrri din nodul membru i este asociat o singur nregistrare din nodul proprietar.
Mai mult dect att, o nregistrare aparintoare nodului membru nu poate exista fr s fie asociat
unei nregistrri existente n nodul proprietar.
ntre o pereche de noduri se pot defini unul sau mai multe seturi, iar un singur nod poate fi implicat
n seturi cu alte noduri din baza de date. Utilizatorul poate accesa date din cadrul unei baze de date
de tip reea prin cea mai potrivit structur de seturi. Spre deosebire de bazele de date ierarhice, n
care accesul trebuie s nceap cu nodul rdcin, n bazele de date de tip reea utilizatorul poate
accesa datele indiferent de nod pe baza structurilor de tip set.
CODASYL a dezvoltat limbajul Common Business-Oriented Language (COBOL) pentru a scrie
aplicaii ce folosesc datele din bazele de date de tip reea. Cu toate dezavantajele pe care le are,
modelul de baze de date propus de CODASYL mai are i astzi o larg rspndire n ntreaga lume.
Bazele de date CODASYL folosesc n locul termenului de tabel, termenul de tip de nregistrare, dar
caracteristicile acestuia nu difer cu nimic fa de cele ale unui tabel. Tipurile de nregistrri conin
pointeri la nregistrrile provenite din alte tipuri de nregistrri. Un pointer este o valoare ce
specific locaia unei nregistrri ntr-un fiier sau n memorie. De exemplu, nregistrarea ce conine
date referitoare la un student, conine un pointer la o not a acestuia, care n replic va conine un
pointer la o alt not ce aparine acelui student, .a.m.d. Termenul generic utilizat la descrierea
tipurilor de nregistrri bazate pe pointeri este lista de legtur. Pointerii asociaz nregistrrile ntro structur organizat, numit reea.
Bazele de date de tip reea au performane excelente n cazul regsirii seturilor de nregistrri ce
aparin unui anumit obiect, deoarece relaiile dintre nregistrri (pointeri) reprezint parte
constitutiv a bazei de date. n acelai timp, se permite utilizatorilor crearea de interogri mult mai
complexe dect cele ce se pot elabora prin intermediul bazelor de date ierarhice, dar viteza bazelor
de date de tip reea scade atunci cnd se dorete cutarea nregistrrilor pe baza unor criterii
38
BAZE DE DATE
specificate. Principalul dezavantaj al acestui tip de baze de date este legat de faptul c utilizatorul
este obligat s cunoasc foarte bine structura bazei de date pentru a se putea descurca cu structurile
de seturi. Totodat, aplicaiile ce lucreaz cu astfel de baze de date (n principal programele
COBOL) trebuie s actualizeze att valorile datelor ct i pointerii nregistrrilor ce se adaug, terg
sau se modific. Necesitatea actualizrii secveniale att a datelor ct i a pointerilor duce la
creterea complexitii proceselor n care sunt implicate tranzacii.
Un alt dezavantaj este acela c nu este uoar modificarea structurii bazei de date fr a afecta
programele aplicaie care lucreaz cu aceasta. Deoarece, aa cum s-a artat, o relaie este definit n
mod explicit sub forma unei structuri de tip set, aceasta nu poate fi modificat fr a afecta
programele aplicaie ce folosesc aceast structur la cutarea datelor. Dac se modific o astfel de
structur, trebuie modificate n mod corespunztor toate asocierile acesteia definite n programele
aplicaie.
Intensia modelului de baze de date de tip reea este un graf cu arce numerotate pentru a indica
drumul ce trebuie parcurs, deoarece un tip de entitate copil poate fi conectat la mai multe tipuri de
entiti printe sau la acelai tip de entitate printe prin mai multe arce.
Extensia acestui model este un tabel ce permite introducerea de nregistrri duplicat, dar
nregistrrile pot fi ordonate.
Modelul relaional
Acesta este cel mai folosit model de date folosit astzi n ntreaga lume, fiind un model de tip
entitate-relaie bazat pe elaborarea unui model conceptual. Modelul relaional al unei baze de date
permite extinderea bazelor de date la nivelul calculatoarelor personale nemaifiind obligatorie
utilizarea echipamentelor costisitoare cerute de minicalculatoare sau de calculatoarele de tip
mainfraime.
Modelul a fost dezvoltat de ctre Dr. E. F. Codd de la San Jose Research Laboratories ce
aparineau firmei IBM n anul 1970. Cele mai importante caracteristici ale modelului relaional sunt
simplitatea, suportul teoretic solid, precum i cele trei elemente componente de baz.
Un astfel de model este simplu deoarece el poate fi descris cu ajutorul unui numr mic de concepte
care se refer la relaii (structuri de date bidimensionale ce au proprieti speciale), rnduri (datele
aflate n cadrul relaiilor), coloane (cmpurile datelor din rndurile corespunztoare) i chei
(mecanismul de identificare i asociere a rndurilor aflate n unul sau mai multe tabele).
Modelul relaional are un suport teoretic foarte solid deoarece se bazeaz pe teoria matematic a
seturilor, ceea ce nseamn faptul c toate operaiile sunt ncheiate cu succes, iar rezultatele
operaiilor sunt predictibile.
Cele trei componente ale modelului relaional sunt:
a. componenta de structur a datelor (relaii cu proprieti speciale);
b. componenta de manipulare a datelor (operaii predefinite prin care tehnologia relaional
folosete un optimizator inteligent pentru a gsi calea de acces la date);
c. componenta de integritate a datelor (reguli necesare proteciei datelor la efectuarea unor operaii
incorecte).
Principalul avantaj al modelului relaional este acela c nu este necesar utilizarea att a pointerilor
ct i a datelor n cadrul tabelelor, folosind n schimb relaii pentru a accesa valori corespondente
din mai multe tabele.
O relaie const dintr-o asociere ntre nregistrrile aflate n dou tabele ce au aceleai valori ale
atributelor. Deoarece tabelele relaionale nu conin pointeri, datele aflate n astfel de tabele sunt
independente de metodele folosite de ctre sistemul de gestiune al datelor n lucrul cu nregistrrile
tabelelor.
39
BAZE DE DATE
Intensia modelului relaional este o schem relaional cu una sau mai multe scheme de relaie.
Fiecare schem de relaie are propriul nume i propriile atribute.
Extensia modelului relaional este un tabel ce nu permite nregistrri duplicat. Fiecare schem de
relaie introduce un tabel n schema relaional. Modelul de date relaional folosete tabele
bidimensionale ce reprezint entitile i const din rnduri i coloane. O coloan reprezint un
atribut al unei entiti ce mai poart i denumirea de cmp sau proprietate. Un rnd reprezint un
tuplu care este o instan a unui tip de entitate sau de relaie sau orice altceva din baza de date. De
obicei una dintre coloanele tabelului este numit cheie primar i are o valoare unic (Brown, The
Relational Model).
Simplitatea modelului bazei de date relaionale const din simplitatea conceptelor cu care opereaz:
structuri simple i abstracte de date, independena fizic de date, cadrul puternic, general i realist
oferit aplicaiilor .a.m.d.
Modelul relaional ofer o interfa flexibil ce este prevzut cu cele mai potrivite componente
necesare oricrui utilizator la toate nivelele, oferind o mare independen a datelor (produsul obinut
este relativ independent de implementarea intern).
Baza de date relaional const din unul sau mai multe relaii sau tabele. Principalele concepte ale
modelului relaional sunt:
1. Atributul este o coloan ce are un nume propriu i unic ntr-o relaie (cmp). Fiecare relaie
conine o list de atribute (sau coloane) definite pe un anumit domeniu.
2. Domeniul reprezint setul posibil de valori pe care l poate avea unul sau mai multe atribute.
Utilizatorul poate defini domeniul de definiie, dar numai n anumite produse i poate defini
propriile domenii.
3. Tuplu un rnd din cadrul unei relaii (nregistrare). Un rnd dintr-un tabel reprezint asocierea
dintre seturile de valori. Fiecare relaie conine un set de tupluri (sau rnduri).
4. Intensia structura unei relaii mpreun cu specificaiile i constrngerile de domeniu aplicate.
Se modific rar.
5. Extensia starea relaiei (valorile din cadrul unei relaii se pot modifica). Reprezint coninutul
curent al bazei de date ce corespunde schemei bazei de date i se modific frecvent.
6. Gradul numrul de atribute dintr-o relaie.
7. Cardinalitatea numrul de tupluri dintr-o relaie.
8. Baza de date relaional reprezint o colecie de relaii ce pot fi modificate (tabele). O astfel
de colecie este descris sub forma unui set de scheme de relaii din cadrul bazei de date, numite
scheme relaionale ale bazei de date. Relaiile sunt alctuite din dou pri:
-
ntre tabele nu exist o asociere explicit (nici una vizibil cuiva care acceseaz datele);
fiecare rnd din cadrul unui tabel are acelai set de coloane;
fiecare coloan are un singur tip de dat (nu sunt acceptate redefiniri pentru diferite valori).
40
BAZE DE DATE
Modelul entitate-relaie
Se bazeaz pe o percepie a lumii reale ca fiind alctuit dintr-o colecie de obiecte de baz sau
concepte (entiti) mpreun cu relaiile care se stabilesc ntre ele. Fiecare entitate are asociat un set
de atribute care o descriu, iar o relaie reprezint o asociere dintre dou sau mai multe entiti.
Mulimile tuturor entitilor sau relaiilor de acelai tip sunt cunoscute sub denumirea de tipuri de
entiti sau relaii. Un alt element important n cadrul diagramelor entitate-relaie l reprezint
precizarea constrngerilor de cardinalitate care exprim numrul de entiti asociate altui tip de
entitate prin intermediul unui tip de relaie.
BAZE DE DATE
Esenial pentru un astfel de model este faptul c proiectantul bazei de date poate opera cu fiecare
element al bazei de date, inclusiv cu setul de operaii ce manipuleaz datele din cadrul bazei de date
n cadrul aplicaiei scrise ntr-un limbaj orientat pe obiecte.
De aceast dat ns nu mai exist o separare clar ntre date i aplicaie. Spre deosebire de modelul
relaional, care are un suport teoretic extrem de solid, modelul orientat pe obiecte nu prezint o
astfel de caracteristic, ceea ce face s nu existe un consens n definirea lor. Totui, organizaia
OMG (Object Management Group) a depus mari eforturi, reuind s propun un model ce a devenit
standard pentru toate sistemele de gestiune a bazelor de date orientate pe obiecte.
Modelul obiectual-relaional
Acest model (cunoscut iniial sub numele de model de date relaional extins) a extins modelul
relaional prin introducerea unor serii de elemente i caracteristici specifice modelului obiectual,
cum ar fi: clase, ncapsulare, motenire. Cele mai cunoscute produse de pe pia sunt: Postgres,
Informix, DB2, Oracle.
Scopul acestei extinderi a fost acela de a permite bazelor de date relaionale s opereze cu tipuri
complexe de date, cum ar fi: imagini audio, video, elemente de proiectare. Modelul se afl nc la
stadiul incipient de dezvoltare, chiar dac este promovat de cei mai mari productori de pe pia de
produse de baze de date.
2.1.5. Modele fizice de date
Sunt modele utilizate la descrierea datelor la cel mai de jos nivel. Ele conin informaii despre
structura nregistrrilor, ordinea nregistrrilor, precum i cile de acces la date. Din aceast
categorie fac parte:
- modelul unificat al datelor;
- memoria cadru.
2.1.6. Avantajele bazelor de date relaionale
Sunt urmtoarele:
- Integritate ncorporat la mai multe nivele. Integritatea datelor este integrat n cadrul
modelului la nivel de cmp pentru a asigura precizia datelor. La nivel de tabel asigur faptul c
o nregistrare nu mai poate fi introdus nc o dat n baza de date, precum i detectarea lipsei
valorilor din cmpurile cheie primar. La nivel de relaie asigur validitatea acestora ntre
tabele. La nivel logic, asigur acurateea logic a datelor.
- Independena logic i fizic a datelor de programele aplicaie: nici modificrile efectuate de
ctre utilizator modelului logic al bazei de date, nici modificrile efectuate de ctre
productorul bazei de date implementrii fizice a acesteia, nu vor afecta programele aplicaiilor
care utilizeaz baza de date.
- Garanteaz consistena i precizia datelor: datele sunt consistente i precise datorit multiplelor
nivele de integritate ce pot fi introduse n baza de date.
- Extragerea cu uurin a datelor din baza de date. n urma comenzilor introduse de ctre
utilizator, datele din baza de date pot fi extrase fie dintr-un singur tabel, fie dintr-o multitudine
de tabele asociate prin intermediul relaiilor, ceea ce ofer posibilitatea prezentrii datelor ntrun numr nelimitat de moduri.
Acestea i alte avantaje au adus beneficii extrem de importante comunitii de afaceri i tuturor
acelora care au nevoie de colectarea i nmagazinarea de date. Deocamdat, bazele de date
relaionale dein supremaia pe piaa acestor produse, fiind alese n cele mai multe dintre cazuri.
Pn de curnd, cel mai mare dezavantaj al bazelor de date relaionale l reprezenta faptul c
programele aplicaie care le foloseau erau foarte lente n execuie. Problema nu era una a bazelor de
date relaionale, ci tehnologiei deficitare de care se dispunea la momentul introducerii modelului.
42
BAZE DE DATE
ncepnd cu anii 90 paii nainte fcui att n domeniul hardware ct i software au fcut ca o
astfel de problem s fie din ce n ce mai puin vizibil.
2.1.7. Chei
O cheie este un cmp ce are o valoare unic, corespunztoare fiecrei nregistrri dintr-un
tabel. Sunt mai multe tipuri de chei, fiecare avnd propriile caracteristici.
BAZE DE DATE
nc din cele mai vechi timpuri oamenii au avut nevoie de informaii. O dat cu informaia a aprut
i necesitatea schimbului de informaii. Pentru aceasta era nevoie de un suport material care s
stocheze informaia i s o transmit mai departe. S-a nceput cu cioplirea informaiilor n piatr i
s-a continuat cu alte i alte soluii pn n zilele noastre, cnd asistm la decderea unui suport
(hrtia) i ridicarea altuia (suportul electromagnetic).
Odat cu evoluia omenirii, informaia a crescut ca dimensiune, punndu-se, prin urmare, problema
stocrii unei mari cantiti de date. De asemenea, o alt problem este regsirea informaiei i, odat
cu aceasta, rapiditatea obinerii rezultatului. nc din zorii civilizaiei IT s-a observat c - pe lng
calculele ce erau preponderente n tehnologia informatic embrionar - computerele s-ar preta i la
nmagazinarea i exploatarea volumelor mari de informaii. Astfel, ncepnd cu anul 1948 s-au fcut
mai multe studii, cercetri i experimente privind stocarea datelor, iar de-a lungul timpului s-au
manifestat mai multe modele, arhitecturi i tehnologii privind bazele de date. Acceptnd un punct
de vedere oarecum teoretic, fr ns a intra in detalii aride, vom trece in revist principalele modele
de concepie i organizare a bazelor de date, dup care ne vom ocupa de arhitecturile de
implementare a sistemelor de gestiune a bazelor de date (SGBD).
2.2.2. Istoric
Pn spre anii 80 contau doar mainframe-urile, minisistemele i supercomputerele, bazele de date
fiind foarte mari (rspunznd unor cerine dure impuse de beneficiari pretenioi, pentru c doar
acetia aveau puterea financiar de a achiziiona tehnica motivat de probleme complexe i critice este uor s ne imaginm baze de date referindu-se la sute de mii sau milioane de entiti).
Tendinele forau mereu limite, iar de aici derivau problematici provocatoare privind performana,
accesibilitatea i mentenabilitatea. Prin anii 70, modelul relaional s-a cristalizat ca soluie viabil,
iar lupta concurenial dintre marii juctori de pe piaa bazelor de date se va da pn in vremea
noastr pe arena SGBDR i SQL.
Mult timp modelul de organizare centralizat (datele sunt depozitate pe un sistem central de unde
utilizatorii le acceseaz) a raspuns cel mai bine cerinelor de exploatare a bazelor de date. i astzi
pentru aproape orice mediu departamental (sau grup de lucru) organizarea centralizat a
informaiilor - i nu ne referim neaprat la baze de date (de exemplu, sistemele de gestiune i
control al circulaiei documentelor - unde documentele pot fi orice: documentaii, proiecte, desene
CAD, arhive etc.) - constituie o prim opiune.
Odat cu rspndirea i dezvoltarea calculatoarelor s-au deschis i orizonturile, iar ca o prima
tendin s-a dovedit necesitatea descentralizrii i interoperrii. Proliferarea diverselor platforme
(hardware i/sau sisteme de operare) au forat definirea de standarde de schimb de date i de
comunicaii, precum i dezvoltarea reelelor eterogene.
Iar pentru c lucrurile se ntmplau odat cu afluxul calculatoarelor personale, inevitabil
programatorii s-au gndit la ceva intre SGBD i spreadsheet, iar de aici la apariia unor baze de date
desktop de genul lui dBASE n-a fost dect pasul materializrii.
Evoluia ramurii desktop a bazelor de date s-a fcut in paralel cu mainstream-ul, dar influenndu-se
reciproc. Cele mai evidente tendine se pot descrie pe scurt astfel: bazele de date mici doreau s-i
dezvolte funcionaliti de sistem relaional (s poat defini relaii i s ncorporeze SQL) i s-i
extind limitele, iar cele mari i-au aplecat atenia asupra accesibilitii, materializat prin interfee
utilizator facile chiar i pentru activitile administrative (o interfa de calitate ajunge deseori un
argument de pia).
BAZE DE DATE
conectate la calculatorul central) prin intermediul unor aplicaii de exploatare rezidente tot pe
mainframe.
Modelul s-a dovedit performant i sigur att n implementare, ct i n utilizare, dar au existat i
cteva puncte sensibile. Problema delicat la mainframe-uri nu este numrul de utilizatori suportai
(cum am fi tentai s credem), ci faptul c aplicaiile au o infrastructur rigida, a cror extindere
determin implicaii dure de organizare i administrare, pe lng creterile nedorite ale traficului de
date prin reea.
Extincia dinozaurilor n-a fost deloc complet: muli nc mai fac fa aplicaiilor critice (care nici
nu pot fi ntrerupte fr pierderi), iar interoperabilitatea cu arhitecturile moderne nu-i incomodeaz
deloc, ba parca-i retriesc o a doua tineree...
BAZE DE DATE
Un astfel de server nelege att natura cererii ct i structura i localizarea datelor, majoritatea
calculelor fiind efectuate de motorul bazei de date.
Clientul are doar o interfa grafic cu care poate accesa baza de date de pe server, folosind aplicaii
pentru a transmite comenzi SQL serverului bazei de date, rezultatele fiind primite sub form de
tabele. Exemple de astfel de produse sunt: ORACLE, SQL Server, DB2, Sybase i Informix. Prin
inerea sub control, de ctre un server, a tuturor fiierelor bazelor de date, arhitectura client-server
ofer o fiabilitate ridicat i o serie de alte caracteristici avantajoase ce nu pot fi oferite de
arhitectura file-server, cum ar fi:
1. Copie de siguran ce poate fi creat n timpul lucrului prin utilizarea unui planificator
automat ce face copii ale bazelor de date fr a fi necesar ntreruperea conexiunii cu
utilizatorii.
2. Tranzacii sigure prin jurnalizarea tranzaciilor, astfel nct actualizrile efectuate prin
intermediul unei tranzacii pot fi n orice moment refcute sau anulate, ajungndu-se astfel la
ultima stare consistent anterioar nceperii tranzaciei respective, indiferent dac eroarea se
produce la client sau la server. Dei motorul Microsoft Jet i fiierele .mdb ofer posibilitatea
efecturii de tranzacii, acestea nu sunt gestionate prin intermediul unui jurnal separat, iar datele
pot fi distruse fr a mai fi posibil refacerea lor.
3. Fiabilitate i protecie sporit a datelor. O baz de date n model file-server poate fi
reparat, n cazul apariiei unei erori, dar n acest caz utilizatorul trebuie deconectat, lucru care
se ntmpl foarte rar n cazul modelului client-server.
4. Procesarea mai rapid a interogrilor. Dac se folosete un fiier .mdb prin intermediul unei
reele, trebuie ncrcat motorul Jet al bazei de date la clientul la care se face cererea de
prelucrare. n acest fel traficul pe reea este foarte mare, fiind necesar transportul unei mari
cantiti de date, mai ales atunci cnd baza de date este foarte mare. n cazul modelului clientserver, prelucrrile se efectueaz direct pe server, care de obicei, este mult mai performant
dect maina clientului. Prelucrarea pe server duce la o ncrcare mult mai mare a acestuia dect
n cazul modelului file-server, dar traficul pe reea va fi substanial sczut. Prezentnd un
exemplu cu 5 utilizatori, se constat faptul c n situaia modelului file-server este posibil
blocarea reelei, deoarece toate bazele de date trebuie aduse pe calculatorul local. Din acest
motiv, atunci cnd utilizatorii pun ntrebri complexe serverului se poate ca reeaua s nu mai
fac fa solicitrilor.
n concluzie, soluiile file-server nu sunt recomandate ntreprinderilor de mari dimensiuni sau
aplicaiilor extinse, preferndu-se n acest caz soluia client-server care scade traficul de pe reea
i asigur o fiabilitatea mult crescut a sistemelor.
n acelai timp, suntem ispitii s credem, ca un reflex al superficialitii (acesta fiind unul dintre
marile riscuri actuale ale informatizrii), c dac se implementeaz o baza de date ce depete - s
zicem - un milion de nregistrri, baza de date desktop (mediu integrat) nu mai face fa i trebuie s
ne orientam ctre un alt tip de SGBDR. Pentru operarea n regim monoutilizator lucrurile nu se
prezint chiar aa: performanele (viteze de accesare i procesare a datelor) sunt ct se poate de
comparabile dac este vorba de un hardware bine echilibrat (un PC care s suporte fr probleme un
SGBDR mare va favoriza i baza de date integrat). n acest caz altele sunt criteriile care ne
orienteaz catre SGBDR-uri mari organizate in model client/server:
- operarea multiuser concurenial (considerat punctual, nici aici avantajele nu sunt nete deoarece
un FoxPro/LAN cu file-server face fa onorabil);
- descongestionarea traficului prin reea datorit transmiterii doar a datelor int (adic un minim);
- controlul drepturilor utilizatorilor i monitorizarea activitii (conectare i aplicaii);
- implementri unice de logic centralizat (reguli, proceduri, declanatoare - existente doar la
nivelul serverului);
- gestionarea tranzaciilor, aspect care devine capital/critic atunci cnd se administreaz un sistem
complex de date distribuite sau un mediu OLTP (on-line transactions processing); ceva mai recent sub influena Internetului - tranzaciile au loc prin comunicaie asincron (conversaionala) sau chiar
fr confirmare ("fire-and-forget);
46
BAZE DE DATE
47
BAZE DE DATE
comanda din produsele expuse completnd un formular din pagina Web (controlat printr-un script),
se declaneaz o alt serie de comunicaii ntre client i server.
BAZE DE DATE
BAZE DE DATE
Modelarea realizat cu ajutorul unei diagrame entitate-relaie este un proces iterativ. De obicei, nu
exist o singur soluie i, ca urmare, nici o singur diagram de acest fel. Din acest motiv se
practic crearea mai multor diagrame entitate-relaie urmat de rafinarea fiecrei variante din care
se va alege ulterior, mpreun cu beneficiarul bazei de date, diagrama optim. De remarcat este
faptul c, de cele mai multe ori, nu se poate spune c o variant este mai bun dect alta, dar unele
variante pot oferi soluii mai bune dect altele.
BAZE DE DATE
Pasul 9. Unificarea modelelor logice locale n cadrul unui singur model loc global. Se
urmresc:
- revederea numelor tipurilor de entiti i a cheilor primare;
- revederea numelor relaiilor;
- aducerea n cadrul unui singur model a tipurilor de entiti din cadrul modelelor
logice locale;
- introducerea n cadrul modelului logic global a tipurilor de entiti specifice
fiecrei vederi logice locale;
- aducerea n cadrul unui singur model a tipurilor de relaii din cadrul modelelor
logice locale;
- cutarea tipurilor de entiti i relaii lips;
- verificarea cheilor externe;
- verificarea constrngerilor de integritate;
- crearea modelului logic global de date;
- actualizarea documentaiei.
Pasul 10. Validarea modelului logic global. Se face prin utilizarea normalizrii.
Pasul 11. Prevederea modificrilor ce trebuie efectuate n vederea dezvoltrilor
ulterioare.
Pasul 12. Revizuirea modelului logic global mpreun cu beneficiarul bazei de date.
BAZE DE DATE
Descompuneri
Fie U o schem de relaie. Un set de scheme de relaii {R1 , R2 , ... , Rn} reprezint o descompunere a
lui U dac i numai dac:
U = R1 R2 Rn
i dac la reunire nu se pierde informaie.
O descompunere {R, T} a lui U se face fr pierdere de informaie (referitor la setul de
constrngeri) dac:
U = R T
Dei descompunerea unui tabel n tabele mai mici este de dorit dintr-un anumit punct de vedere, n
scopul reducerii redundanelor i evitrii anomaliilor, totui o astfel de ntreprindere implic
anumite riscuri care, n principal, se manifest sub dou aspecte:
- posibila pierdere de informaie;
- posibila pierdere a dependenelor.
Se prezint n continuare un exemplu de pierdere de informaie.
Descompunerea R = {A, B}
A
A(r)
52
B(r)
BAZE DE DATE
R1 = {A} R2 = {B}
A ( r)
B ( r)
A
Proprietile descompunerii
O schem relaional R care are o mulime de dependene funcionale F se descompune n relaiile
R1 i R2.
1. Lipsa pierderii de informaie.
Se verific dac cel puin una dintre urmtoarele dependene se afl n F+
R1 R2 R1
R1 R2 R2
Dac nu, descompunerea se poate face cu pierdere.
2. Pstrarea dependenelor.
Fie Fi o mulime de dependene din F+ ce conine doar atributele relaiei Ri (cu notaia: Fi =
Ri ( F + ) ).
Se verific dac (F1 F2)+= F+. Dac se modific o relaie nu trebuie s se verifice dac se
pstreaz dependenele n celelalte relaii.
3. Eliminarea redundanelor.
Dependene funcionale
Dependenele funcionale sunt constrngeri aplicate mulimii de relaii din baza de date. Acestea
permit exprimarea unor fapte din lumea real. Noiunea generalizeaz ideea de supercheie. K este o
supercheie a relaiei R dac n orice situaie n care t1[K] = t2[K], t1[R] = t2[R].
Dependenele funcionale permit exprimarea constrngerilor ce nu pot fi exprimate prin intermediul
supercheilor (cheia primar, cheia candidat). O mulime F de dependene funcionale poate fi
folosit n dou moduri:
- pentru a specifica constrngerile aplicate relaiilor;
- pentru a verifica dac relaiile mai sunt valabile n cazul aplicrii mulimii de dependene
funcionale.
Un atribut A este dependent funcional de o mulime de atribute B dac i numai dac:
- valoarea lui A este determinat numai prin intermediul valorilor lui B;
- valorile lui B determin n mod unic o valoare a lui A
Dependena funcional se reprezint astfel:
BA
ceea ce nseamn c o valoare a lui B afecteaz valoarea lui A. O valoare a lui A nu afecteaz o
valoare a lui B. B reprezint determinantul, A reprezint dependentul/determinatul.
Dependenele funcionale sunt utilizate n scopul verificrii corectitudinii unei relaii.
53
BAZE DE DATE
Exemple:
a. K este o supercheie a relaiei R dac K R astfel nct pentru orice t1[k] = t2[k], t1[R]= t2[R]. K
determin funcional toate atributele dintr-un tuplu al lui R.
b. Eliminarea redundanelor (dependena parial, dependena tranzitiv, dependena funcional
propriu-zis, aseriunile logice ce implic dependene funcionale).
c. Verificarea constrngerilor aplicate pe un set de relaii.
d. Verificarea corectitudinii modelului entitate-relaie.
e. Verificarea reprezentrilor ntlnite n diagramele entitate-relaie (atribute ale unor entiti
incorect alese, stabilirea de constrngeri de cardinalitate eronate, lipsa tipurilor de relaie unu-lamuli corespunztoare tipului de entitate ales sau existena atributelor multivaloare).
Dndu-se o relaie R care are o mulime de dependene funcionale F, i o cheie K se impune
identificarea atributelor independente:
1. Cheia trebuie s identifice toate atributele unei relaii i dac un atribut depinde doar de o parte
a cheii, atunci se spune c el este parial dependent de cheie.
2. Dac un atribut depinde de o cheie n mod tranzitiv, atunci el depinde n mod direct de alt
atribut i, ca urmare, este independent de cheie. Atributul este dependent tranzitiv fa de cheie
3. Dependenele funcionale sunt transparente modelului entitate-relaie.
BAZE DE DATE
Dependene multivalorice
Urmtorul pas necesar este cel de determinare a tuturor dependenelor multivalorice care sunt
generate n mod logic de o mulime dat de dependene multivalorice.
Fie R o schem de relaie i R , R . n relaia R exist o dependen multivaloric
dac n orice relaie r( R), oricare ar fi perechile de tupluri t1 i t2 din r pentru t1[] = t2[],
exist tuplurile t3 i t4 n r astfel nct:
t1[] = t2[] = t3[] = t4[]
t3[] = t1[]
t3[ R -] = t2[ R - ]
t4[] = t2[]
t4[ R -] = t1[ R -]
Reprezentarea tabelar a dependenei multivalorice este:
t1
t2
t3
t4
a1 ai
a1 ai
a1 ai
a1 ai
ai+1aj
bi+1bj
ai+1aj
bi+1bj
R--
aj+1an
bj+1bn
bj+1bn
aj+1an
Fie R o schem de relaie cu o mulime de atribute ce se pot divide n trei submulimi nevide, A, B,
C. A B (A l multidetermin pe B) dac i numai dac pentru toate relaiile posibile r( R)
{a1 , b1 , c1} r i {a1 , b2 , c2} r rezult
{a1 , b1 , c2} r i {a1 , b2 , c1} r
Definiia de mai sus presupune formalizarea noiunii prin care unei valori oarecare a lui A i este
asociat o mulime de valori ale lui B i o mulime de valori ale lui C, iar mulimile B i C sunt
independente una fa de alta.
Dependenele multivalorice sunt utilizate n dou moduri:
1. Pentru a verifica corectitudinea relaiilor n cazul apariiei unei mulimi de dependene
funcionale i multivaloare.
2. Pentru a specifica constrngerile aplicate mulimii de relaii.
Dac o relaie r nu satisface o dependen multivaloric, se poate crea o alt relaie r care satisface
dependena multivaloric prin adugarea de tupluri relaiei r.
Aici se folosete acelai concept ca i n cazul dependenelor funcionale. Fie D o mulime de
dependene funcionale i multivalorice. Mulimea D+ a lui D reprezint mulimea tuturor
dependenelor funcionale i multivalorice generate de D. Mulimea D+ se poate calcula pe baza
mulimii D, cu ajutorul definiiilor formale ale dependenelor funcionale i multivalorice dar,
pentru a determina mulimea dependenelor, sunt mai uor de folosit regulile de inferen.
Urmtoarea list de reguli de inferen aplicate dependenelor funcionale i multivalorice este
necesar i suficient (primele trei reguli reprezint axiomele lui Armstrong):
1. Reflexivitatea. Dac reprezint mulimea atributelor i , atunci .
2. Augmentarea. Dac i nu este o mulime de atribute, atunci .
3. Tranzitivitatea. Dac i , atunci .
4. Complementaritatea. Dac , atunci R - - .
5. Augmentarea multivaloric. Dac , iar R i , atunci .
6. Tranzitivitatea multivaloric. Dac i , atunci - .
55
BAZE DE DATE
, atunci
Pstrarea dependenelor
Problema pstrrii dependenelor, atunci cnd vorbim despre dependenele multivalorice, nu este la
fel de simpl ca n cazul dependenelor funcionale. O descompunere a schemei R n schemele
R1,R2, . . .,Rn este o descompunere cu pstrarea dependenelor, corespunztoare mulimii D a
dependenelor funcionale i multivalorice dac, pentru fiecare mulime de relaii r1(R1), r2(R2), . . . ,
rn(Rn) oricare ar fi i, ri satisface Di (restricia mulimii D pe Ri), exist o relaie r(R) care satisface
mulimea D i pentru care ri = Ri(r), oricare ar fi i.
Dac se d o mulime de dependene funcionale i multivalorice, proiectul bazei de date ar
trebui s ndeplineasc urmtoarele trei criterii:
1. S fie adus la forma normal 4.
2. S pstreze dependenele.
3. S nu piard informaie.
Dac nu pot fi ndeplinite toate cele trei criterii, se poate ajunge la un compromis, cerndu-se
respectarea doar a primelor dou criterii.
R2 (r)
Fiecare dependen de cuplare de forma *(R1, R2) este, din acest motiv, echivalent cu o dependen
multivaloric. Exist ns dependene de cuplare care nu sunt echivalente cu nici o dependen
multivaloric. Cel mai simplu exemplu de astfel de dependen l reprezint schema:
R = {A, B, C}
cu dependena de cuplare:
*((A, B), (B, C), (A, C))
care nu este echivalent cu nici o mulime de dependene multivalorice.
Aa cum dependena multivaloric reprezint o modalitate prin care se demonstreaz independena
unei perechi de relaii, dependena de cuplare este o modalitate de a demonstra c elementele unei
56
BAZE DE DATE
mulimi de relaii sunt independente unele fa de altele. Noiunea de independen a relaiilor este
o consecin natural a modului general de definire a unei relaii.
n cazul dependenelor funcionale i multivalorice, este posibil folosirea unui set de reguli
necesare i suficiente. Din pcate un set de reguli asemntor nu exist i n cazul dependenelor
de cuplare.
FN 1
FN 2
FN 3
FNBC FN 4
FN 5
57
BAZE DE DATE
58
BAZE DE DATE
BAZE DE DATE
coloane aparintoare tabelului respectiv. Accesul la date trebuie s se fac simplu, fr a exista
ambiguiti n exprimare. Modelul relaional nu se preocup de aspectele fizice ale extragerii datelor
din tabele. Aceast regul afirm faptul c utilizatorul trebuie s aibe acces la datele stocate n baza
de date doar prin intermediul numelor i valorilor. Cheia primar, prin care se identific n mod unic
o anumit nregistrare din cadrul unui tabel, reprezint elementul fundamental al modelului
relaional. ntr-un tabel nu poate exista dect o singur cheie primar care nu are voie s primeasc
valori NULL.
BAZE DE DATE
O vedere este un tabel virtual, care provine din cel puin un tabel de baz i genereaz o serie de
reprezentri ale datelor vizibile utilizatorilor. Tabelele de baz sunt tabelele reale ale bazei de date,
cu reprezentare concret n mediul de stocare. Deoarece vederile nu nmagazineaz date ci
interogri, acestea sunt numite tabele virtuale (Johnson, 1997).
Date a luat n discuie dou principii importante ce trebuie avute n vedere la actualizarea unei
vederi:
Principiul interschimbabilitii care afirm faptul c nu trebuie s se fac nici un fel de deosebire
ntre tabelele de baz i vederi i
Principiul relativitii bazei de date prin care tabelele bazei de date sunt considerate a fi tabele de
baz din punct de vedere al utilizatorului (Date, 2000).
BAZE DE DATE
asemenea trebuie s fie posibil modificarea unor astfel de constrngeri aa cum cere logica
aplicaiei fr a afecta celelalte aplicaii (Date, 1991).
Constrngerile de integritate sunt reguli prin care sistemul de gestiune al bazelor de date mpiedic
baza de date s ajung ntr-o stare inconsistent. Potrivit celor afirmate de ctre Date n 2001, regula
de aur a independenei integritii este: Nu trebuie s fie permis nici un fel de operaie care s
lase o anumit valoare ntr-o stare care s contrazic predicatul impus. n acest fel nu poate avea
loc nici o tranzacie care ar ncerca s lase baza de date ntr-o stare care s nu corespund
propriei condiii impuse.
Constrngerile de integritate sunt:
1. Constrngeri NOT NULL
Aceast constrngere este preferat de standardul ISO n comenzile CREATE i ALTER TABLE.
Constrngerea interzice nmagazinarea n baza de date a valorilor NULL, ceea ce nseamn c nu se
permite ca anumite coloane s fie goale (Connolly et al., 1999).
2. Clauza UNIQUE
Clauza UNIQUE specific una sau mai multe coloane care identific n mod unic fiecare
nregistrare din cadrul unui tabel. n acelai timp, fiecare coloan ce apare n clauza UNIQUE
trebuie s fie declarat ca fiind NOT NULL.
SQL anuleaz orice operaie de inserare sau actualizare care are tendina de a genera valori duplicat
n cheile candidat. ntr-un tabel nu este permis dect o singur cheie primar, iar clauza UNIQUE
se folosete numai dac a fost aleas cheia primar i este necesar ca valorile altei coloane s fie
unice.
3. Clauza PRIMARY KEY (integritatea entitii)
Cheia primar a unui tabel trebuie s conin o valoare unic nenul pentru fiecare nregistrare
introdus n tabel. Standardul ISO impune integritatea entitii prin intermediul clauzei cheii
primare ce apare n instruciuni precum CREATE sau ALTER TABLE (Connolly et al., 1999).
4. FOREIGN KEY (integritatea referenial)
O cheie extern este un cmp dintr-un tabel ce corespunde coloanei cheie candidat dintr-un alt tabel.
O valoare a cheii externe trebuie s aib o valoare corespondent n tabelul printe. Tabelul ce
conine cheia extern se numete tabelul referit, copil sau extern, n timp ce tabelul ce conine cheia
candidat se numete tabelul de referin, primar, sau printe (Rennhackkamp, 1996).
Integritatea referenial are semnificaia faptului c nici o baz de date relaional nu poate conine
valori necorespunztoare ale cheii externe. Cheie extern necorespunztoare reprezint o valoare a
cheii externe dintr-un tabel referit pentru care nu exist valoare n tabelul de referin. Cu alte
cuvinte, constrngerea specific faptul c dac B l refer pe A, atunci A trebuie s existe. Date
afirm faptul c, de multe ori, nu este posibil utilizarea unei interogri convenabile pentru a obine
un anumit rspuns. Din acest motiv, trebuie s se poat specifica o aciune referenial de tipul
CALL proc(), n care proc reprezint procedura creat de utilizator (Date, 2000).
Actualizrile bazei de date au loc ntotdeauna la nivel atomic, ceea ce nseamn totul sau nimic,
chiar dac sunt implicate actualizri pe mai multe valori, ca n cazul aciunii refereniale
CASCADE (Date, 2000).
Standardul ISO propune introducerea cheii externe prin intermediul clauzei FOREIGN KEY ce
apare n cadrul comenzilor de creare sau modificare a structurii unui tabel. De exemplu, dac
tabelul B are o cheie extern care face referire la o coloan din tabelul A, integritatea referenial
interzice introducerea unei valori n tabelul B care nu are corespondent n tabelul A. n plus, regulile
de integritate referenial pot avea n vedere i faptul c ori de cte ori se elimin o valoare din
tabelul A, valorile corespunztoare din tabelul B pot fi i ele eliminate, ceea ce este cunoscut sub
denumirea de tergere n cascad. Regulile de integritate referenial mai pot specifica i faptul c
ori de cte ori se modific o valoare din tabelul A, toate valorile corespunztoare din tabelul B sunt
i ele modificate automat, ceea ce este cunoscut sub denumirea de actualizare n cascad
(Webopedia, Referential Integrity).
SQL prevede urmtoarele opiuni ce pot fi alese n astfel de situaii (Connolly et al., 1999):
62
BAZE DE DATE
1. CASCADE: prin tergerea unei nregistrri din tabelul printe automat se elimin toate
nregistrrile corespunztoare din tabelul copil. Deoarece nregistrrile eliminate pot conine o cheie
candidat utilizat drept cheie extern n alt tabel, regulile cheii externe se aplic i n tabelul
respectiv, .a.m.d.
2. SET NULL: terge nregistrarea din tabelul printe i provoac setarea coloanelor cheie extern
din tabelul copil la valoarea NULL, dar o astfel de operaie este posibil numai dac coloanele cheii
externe nu au setat opiunea NOT NULL.
3. SET DEFAULT: terge nregistrarea din tabelul printe i provoac setarea fiecrei componente
a cheii externe din tabelul copil la valoarea implicit specificat, dar operaia este valabil numai
dac coloanele cheii primare au setat opiunea DEFAULT.
4. NO ACTION: resping operaia de tergere din tabelul printe, fiind opiunea implicit dac nu se
introduc explicit reguli pentru ON DELETE.
5. Constrngerea CHECK
Exist dou tipuri de constrngeri CHECK. Una dintre ele este denumit constrngere de domeniu,
deoarece stabilete mulimea de valori pe care o poate lua un atribut, iar cealalt se numete
constrngerea logic utilizat cu scopul de a pune n eviden anumite condiii suplimentare
(Connolly et al, 1999).
Standardul ISO prevede astfel de constrngeri ce pot fi introduse n cadrul comenzilor de creare sau
modificare a unui tabel. Clauza CHECK permite definirea unei constrngeri pe o coloan sau pe
ntregul tabel. n cazul utilizrii clauzei la nivel de coloan, aceasta nu poate face referire dect la
coloana respectiv (Connolly et al, 1999).
Cel puin urmtoarele dou constrngeri trebuie s existe n orice baz de date relaional:
a. Integritatea entitii: nici o component a cheii primare nu are voie s aibe valoarea NULL.
b. Integritatea referenial: pentru fiecare valoare nenul a cheii externe din baza de date
relaional, trebuie s existe o valoare corespunztoare din acelai domeniu de valori i de
acelai tip (cheia primar).
63
BAZE DE DATE
3.4.1. DESCRIERE
Bazele de date sunt folosite pentru stocarea informatiilor in vederea furnizarii ulterioare in functie
de solicitarea primita.
MySQL este un sistem de baze de date functional independent.
In PHP exista functii pentru toate operatiile executate asupra bazelor de date MySQL.
Administrarea MySQL se poate face din linie de comanda sau folosind browserul si accesand
aplicatia numita PHPMyAdmin scrisa in PHP.
3.4.2. Operaii asupra bazelor de date
Cele mai uzuale operatii cu bazele de date sunt:
Comanda Semnificatie
CREATE creaza o baza de date sau un tabel
DROP
sterge o baza de date sau un tabel
INSERT
adauga inregistrari intr-un tabel
DELETE sterge inregistrari dintr-un tabel
UPDATE updateaza inregistrarile dintr-un tabel
SELECT
selecteaza un tabel
ALTER
alterarea unui tabel
3.4.3. Tipuri de date MySQL
In MySQL spatiul alocat pe discul serverului este functie de tipul de date. Cateva din tipurile de
date folosite in bazele de date MySQL sunt:
Tip
Semnificatie
int()
numar intreg
32 biti
Bigint()
numar intreg
64 biti
tinyint()
numar intreg (-128 la 127 sau 0 la 255)
8 biti
mediumint() numar intreg
24 biti
smallint() numar intreg
16 biti
char()
sectiune cu lungime fixa de la 0 la 255 caractere
varchar()
sectiune cu lungime variabila de la 0 la 255 caractere
float()
numar mic cu virgula flotanta
Double
numar mare cu virgula flotanta
Text
sir cu maximum 65535 caractere
date()
data in format YYYY-MM-DD
Date
data in format YYYY-MM-DD HH:MM:SS
Time
ora in format HH:MM:SS
Pentru ca baza de date sa fuctioneze mai bine coloanelor li s-au adaugat modificatori de coloana.
Tipul de date intregi incep de la valori negative la pozitive. Daca se adauga optiunea UNSIGNED,
care este un modificator de coloana, nu vor mai fi valori negative ci vor incepe de la 0.
64
BAZE DE DATE
Alti
modificatori
sunt:
AUTO_INCREMENT functioneaza cu orice tip intreg. La fiecare rand nou adaugat in baza de
date numarul asociat va fi incrementat.
NULL
inseamna
fara
valoare
(diferit
de
spatiu
sau
zero).
NOT
NULL
inseamna
ca
orice
inregistrare
va
fi
considerata
ceva.
PRIMARY KEY este rolul primei coloane din tabel, totodata reprezentand elementul de referinta
pentru fiecare linie.
3.4.4. Comenzi elementare MySQL
Cele mai frecvent utilizate comenzi MySQL sunt prezentate n coloana de mai jos. Ele sunt mult
mai multe, dar aici nu doresc dect s fac o scurt prezentare, urmnd ca voi s studiai n detaliu
comenzile utiliznd manualul oficial pe care l gsii la adresa http://dev.mysql.com/doc/
SHOW DATABASES;
# afieaz o list cu numele bazelor de date
existente
USE numele_bazei_de_date
# alegerea bazei de date cu care lucrm n
continuare
SHOW TABLES;
# afieaz tabelele existente n baza curent
SHOW COLUMNS;
# afieaz informaii despre coloanele unui tabel
CREATE DATABASE numele_bazei;
# creaz o baz de date cu numele respectiv
CREATE TABLE tabel_unu (camp_a TEXT);
# creaz tabelul 'tabel_unu' cu un cmp numit
'camp_a' al crui tip este TEXT
CREATE TABLE tabel_unu (camp_a TEXT, # creaz tabelul 'tabel_unu' cu un cmp numit
camp_b INT, camp_c TINYINT);
'camp_a' al crui tip este TEXT, un cmp numit
'camp_b' n care datele de pe coloana respectiv
vor fi numere ntregi i n cmpul 'camp_c' vor fi
introduse doar numere ntre -128 i 127
DROP TABLE tabel_unu;
# terge tabelul numit 'tabel_unu'
DROP DATABASE numele_bazei;
# terge baza de date cu numele 'numele_bazei'
INSERT INTO tabel (camp1, camp2, camp3)# introduce n tabelul cu numele 'tabel', n
VALUES (valoarea1, valoarea2, valoarea3);
'campul1' 'valoarea1', n 'campul2' 'valoarea2' i
n 'campul3' 'valoarea3'. Iata cum ar arta n
format tabelar:
campul1
campul2
campul3
valoarea1
valoarea2
valoarea3
INSERT INTO tabel (camp1, camp2) VALUES# Se poate omite una din coloane, dac avem 5
(valoarea1, valoarea2);
coloane, dar vrem s introducem numai n 3,
specificm cmpul i valoarea doar pentru cele pe
care le vrem, restul le ignorm.
campul1
campul2
campul3
valoarea1
valoarea2
INSERT INTO tabel
valoarea2, valoarea3);
VALUES
BAZE DE DATE
BAZE DE DATE
nume de tabel sau de cmp cuvinte rezervate (nume de funcii, tipuri de caractere din MySQL
precum CREATE, DROP sau COLUMN). Se pot folosi nume de tabele care conin spaii dar n
practic trebuie s ncadrai numele ntre back-ticks ` (semnul ` l gsii pe tasta aflat imediat sub
Escape i nainte de 1).
Exemplu:
CREATE
TABLE
`tabel
al
carui
nume
are
spatii`
(`camp
1`,
TEXT);
SHOW COLUMNS FROM `tabel al carui nume are spatii`;
Semnul * este definit n MySQL ca nsemnnd tot/toate.
Semnul % este folosit n interogrile MySQL dac vrem s gsim cuvntul oriunde n cadrul
textului. Mai exact:
%cuvant_cautat - dac vrem s afieze toate cuvintele care se termin cu 'cuvantul_cautat' (pot fi i
cteva caractere)
cuvant_cautat%
afieaz
toate
cuvintele
care
ncep
cu
'cuvantul_cautat'
%cuvant_cautat% - afieaz toate cuvintele care conin 'cuvantul_cautat' oriunde n text.
Putem afla cte nregistrri sunt pentru un criteriu de selecie cu ajutorul lui count(). Putem afla
astfel cte nregistrri sunt n total n tabel sau cte nregistrri sunt n tabel al cror cmp este cel
cautat...
Cu ajutorul instruciunii GROUP BY putem "grupa" rezultatele astfel nct s nu vedem duplicatele
i s vedem doar valorile unice. Pentru a limita numrul ncepnd de la nregistrarea 10 nc 5
nregistrri).
Pentru tergerea nregistrrilor dintr-un tabel se folosete comanda DELETE. Pentru tergerea unui
tabel sau a unei baze de date comanda este DROP.
Comanda UPDATE se folosete cnd vrem s modificm coninutul unei nregistrri fr a o terge.
Dac dorim s schimbm structura unui tabel existent sau s adugm alte coloane folosim
comanda ALTER TABLE.
INDECSI - Cel mai folosit tip de index este id-ul. Id-ul este un numr unic de identificare pentru un
element distinct (un rnd) al unui tabel. Un exemplu de id din viaa real este numerotarea cd-urilor.
Cnd avei un cd nou l numerotai i l punei n raft la sfrit iar n catalog putei s l punei sortat
dup titlu sau dup numrul de ordine. La fel i ntr-o baz de date, putei crea un cmp care s
introduc automat un nr pentru fiecare rnd nou adugat n baza de date i la afiare putei s l
folosii
(de
exemplu
la
vizualizarea
ultimilor
10
vizitatori
folosii
id-ul).
Pentru a creea un index avem urmtoarele comenzi:
S zicem c avem o baz de date numit lista cu un cmp caseta i adugm cmpul id_casete comanda este urmtoarea:
ALTER TABLE `caseta` ADD `id_caseta` INT;
ALTER TABLE `caseta` CHANGE `id_caseta` `id_caseta` INT(11) UNSIGNED NOT NULL;
ALTER TABLE `caseta` ADD PRIMARY KEY (id_caseta);
ALTER TABLE `caseta` CHANGE `id_caseta` `id_caseta` INT(11) UNSIGNED DEFAULT "0"
NOT NULL AUTO_INCREMENT;
i din acest moment, orice caset nou introdus va avea automat un nr de ordine. Este posibil ca
toat niruirea de comenzi de mai sus s se poat face printr-o singur linie de cod, dar este mai
sigur s facei cte o modificare n parte dect toate odat, pentru a detecta eventualele erori. Este
bine s creai un id la nceputul tabelului, cnd nu avei intrri n baza de date, pentru a face
incrementarea automat, altfel e posibil s v dea erori. Cu ajutorul id-ului putei afia de exemplu
noutaile, cu o comand de genul - afieaz ultimele 10 intrri sortate dup id..., tiind c
ntotdeauna ultima intrare are numrul cel mai mare...
Ct de mare poate fi un tabel?
MySQL stocheaz fizic datele unui tabel ntr-un fiier pe hard disc i cu ct tabelul e mai mare, cu
att mrimea acestui fiier crete. Versiunea 3.22 a MySQL are o limit de 4 GB pentru mrimea
unui tabel. n versiunile superioare aceast limit este extins pn la 8 milioane TB pentru tipul de
tabel MyISAM. Cu toate acestea, sistemele de operare pot avea propriile limitri ale mrimii
67
BAZE DE DATE
fiierelor. Mrimea impicit a tabelelor MySQL este de aproximativ 4 GB. Putei verifica mrimea
maxim pentru un tabel cu ajutorul
68
BAZE DE DATE
Destinaie specific dac se va obine 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 interogrii se obine o tabel temporar cu numele predeterminat (Query).
Uneori, tabela rezultat ("normal" sau temporar) "ncalc" poruncile modelului relaional.
Conform restriciei de entitate, ntr-o relaie nu pot exista dou linii identice. Or, n SQL, tabela
obinut dintr-o consultare poate conine dou sau mai multe tupluri identice.
Spre deosebire de algebra relaional, n SQL nu se elimin automat tuplurile identice
(dublurile) din tabela-rezultat. Pentru aceasta este necesar utilizarea opiunii DISTINCT:
SELECT DISTINCT C1, C2, ..., Cn
FROM R1, R2, ..., Rm
WHERE P
LOCALITI
CodPosta
Localitate
l
6600
Iai
5300
Focani
5725
Pacani
6750
Tg. Frumos
CLIENI
CodClien
t
1001
1002
1003
1004
1005
1006
1007
1008
Jude
Iai
Vrancea
Iai
Iai
NumeClient
TEXTILA SA
MODERN SRL
OCCO SRL
FILATURA SA
INTEGRATA SA
AMI SRL
AXON SRL
ALFA SRL
Adresa
Bld. Copou, 87
Bld. Grii, 22
NULL
Bld. Unirii, 145
I.V.Viteazu, 115
Galaiului, 72
Silvestru, 2
Prosperitii, 15
CodPostal
6600
5300
6600
5300
5725
6750
6600
5725
FACTURIEMISE
NrFactur CodClient
111111
1003
111112
1001
111113
1004
111114
1003
111115
1008
111116
1008
111117
1006
111118
1007
111119
1005
111120
1003
111121
1001
111122
1007
111123
1006
Data
17.06.2000
17.06.2000
18.06.2000
18.06.2000
18.06.2000
19.06.2000
20.06.2000
23.06.2000
24.06.2000
24.06.2000
24.06.2000
24.06.2000
25.06.2000
ValoareTotal
17000000
2850000
5850000
28500000
35700000
8700000
11000000
15000000
47250000
3000000
4250000
8750000
6600000
69
TVAColectat
2714286
455042
934034
4550420
5700000
1389076
1756303
2394958
7544118
478992
678571
1397059
1053782
BAZE DE DATE
111124
111125
111126
25.06.2000
30.06.2000
01.07.2000
38650000
12850500
54250000
6171008
2051761
8661765
Tabela rezultat din figura 6.2 conine dou atribute: NrFactur i ValFaraTVA. Ultimul este
un cmp calculat.
70
BAZE DE DATE
Operatorul pentru reuniune este deci UNION. De remarcat c, la reuniune, SQL elimin
automat dublurile, deci nu este necesar utilizarea clauzei DISTINCT. Operatorul UNION este
prezent n toate SGBD-urile importante.
Intersecia
Pentru realizarea interseciei a dou tabele, R1 i R2 se utilizeaz operatorul INTERSECT:
SELECT *
FROM R1
INTERSECT
SELECT *
FROM R2
Dac n produsele profesionale, precum DB2 (IBM) sau Oracle operatorul este prezent, n
schimb multe din cele din categoria uoar, precum Visual Fox Pro, INTERSECT rmne un
deziderat, funcionalitatea sa realizndu-se prin subconsultri (operatorii IN i EXISTS) sau, uneori,
prin jonciune.
Diferena
Diferena dintre tabelele R1 i R2 se realizeaz utiliznd operatorul MINUS sau EXCEPT.
Fraza SELECT urmtoare funcioneaz n Oracle.
SELECT *
FROM R1
MINUS
SELECT *
FROM R2
n DB2 MINUS trebuie nlocuit cu EXCEPT, iar n Visual FoxPro exist nici MINUS i nici
EXCEPT, astfel nct, ca i n cazul interseciei, este necesar a se recurgere la ali operatori, precum
IN sau EXISTS.
Produsul cartezian
n SQL nu exist operator explicit pentru efectuarea produsului cartezian. Dac n clauza
FROM apar dou relaii, R1 i R2, atunci, n lipsa unei condiii de jonciune formulat n clauza
WHERE, tabela rezultat va conine liniile obinute din produsul cartezian R1 R2.
SELECT *
FROM R1, R2
71
BAZE DE DATE
SELECT *
FROM LOCALITI
WHERE Jude = "Iai"
Rezultat:
CodPostal
6600
5725
6750
Localitate
Iai
Pacani
Tg. Frumos
Jude
Iai
Iai
Iai
Exemplu 2
Care dintre facturile emise dup 23.06.98 prezint valoarea mai mare sau egal cu 3 000 000 lei ?
SELECT *
FROM FACTURIEMISE
WHERE Data > {23.06.2000} AND ValoareTotala >= 3000000
Rezultat:
NrFactur
CodClient
111119
1005
111124
1004
111126
1002
Data
24.06.2000
25.06.2000
01.07.2000
ValoareTotal
4 725 000
3 850 000
5 425 000
TVAColectat
850 500
693 000
976 500
Dup cum se observ, 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 operatorilor "clasici"
specificai mai sus, pot fi utilizai i ali 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
cmpul/expresia testat. Acest interval se refer la valori numerice sau la date calendaristice.
Exemplu 3
Se reformuleaz ultima interogare:
Care sunt facturile emise dup 23.06.2000 i care au valoarea cuprins ntre 3 000 000 i
4 000 000 lei ?
Fr operatorul BETWEEN fraza SELECT se scrie:
SELECT *
FROM FACTURIEMISE
WHERE Data > {23.06.2000} AND
ValoareTotala >= 3000000 AND ValoareTotala <= 4000000
Utiliznd operatorul BETWEEN se poate scrie:
SELECT *
FROM FACTURIEMISE
WHERE Data > {23.06.2000} AND ValoareTotala BETWEEN 3000000 AND 4000000
Operatorul LIKE
Acest operator se folosete pentru a compara un atribut de tip ir de caractere (ex.
NumeClient, Adresa, Localitate) cu un literal (constant de tip ir de caractere). Astfel, dac se
72
BAZE DE DATE
dorete obinerea unei tabele-rezultat care s conin numai clienii ai cror 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 CLIENI 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 liniua de subliniere ("_").
Spre deosebire de "%", "_" substituie un singur caracter. Diferena dintre cei doi specificatori
multipli este pus n eviden n exemplele urmtoare.
Exemplu 4
Care sunt clienii ai cror nume este format din apte caractere, ncepe cu litera A i sunt societi
cu rspundere limitat (SRL-uri) ?
SELECT *
FROM CLIENI
WHERE NumeClient LIKE "A__ SRL"
Rezultatul va fi cel din figura 6.3.
SELECT *
FROM CLIENI
WHERE NumeClient LIKE "A%SRL",
rezultatul ar fi fost cel din figura 6.4.
Rezultatul evalurii unui predicat ce conine acest operator va fi "adevrat" dac valoarea
expresiei1 este egal cu (cel puin) una din valorile: expresie2, expresie3, ... Este util atunci cnd
condiiile de selecie sunt mai complexe.
73
BAZE DE DATE
Exemplu 6
Care sunt localitile din judeele Iai i Vaslui?
Fr utilizarea operatorului IN interogarea se scrie:
SELECT *
FROM LOCALITI
WHERE Jude = "Iai" OR Jude = "Vaslui"
Utiliznd operatorul IN:
SELECT *
FROM LOCALITI
WHERE Jude IN ("Iai", "Vaslui")
Operatorul IS NULL
O valoare nul este o valoare nedefinit. Este posibil ca la adugarea unei linii ntr-o tabel,
valorile unor atribute s fie necunoscute. n aceste cazuri valoarea atributului pentru tuplul respectiv
este nul. Reamintim c, prin definiie, nu se admit valori nule pentru grupul atributelor care
constituie cheia primar a relaiei.
Exemplu 7
Dac se dorete aflarea clienilor pentru care nu s-a introdus adresa, interogarea se poate scrie:
SELECT *
FROM CLIENTI
WHERE Adresa IS NULL
Cum n baza noastr de date, numai clientului OCCO SRL nu-i cunoatem adresa, rezultatul
interogrii este cel din figura 6.5.
Observaii
d. Valoarea NULL nu se confund cu valoarea zero (pentru atributele numerice) sau cu valoarea
"spaiu" (pentru atributele de tip ir de caractere)
e. Operatorul NULL se utilizeaz cu IS i nu cu semnul "=". Dac s-ar utiliza forma expresie =
NULL i nu expresie IS NULL, rezultatul evalurii va fi ntotdeauna fals, chiar dac expresia
nu este nul !
74
BAZE DE DATE
Exemplu 2
Care este denumirea fiecrei localiti i judeul n care se afl ?
SELECT Localitate, Jude
FROM LOCALITI
Prezentarea localitilor n ordinea alfabetic a numelui acestora este posibil prin apelnd la
clauza ORDER BY:
SELECT Localitate, Jude
FROM LOCALITI
ORDER BY Localitate
75
BAZE DE DATE
Din cele 32 de linii sunt selectate cele care ndeplinesc condiia de jonciune, CLIENI.CodPostal = LOCALITI.CodPostal, i pe cea suplimentar - Localitate=Focsani. n final,
rezultatul este cel din figura 6.8.
Exemplu 3
Care sunt facturile emise clienilor din judeul Iai ?
SELECT NrFactura
FROM FACTURIEMISE, CLIENI, LOCALITI
WHERE FACTURIEMISE.CodClient = CLIENI.CodClient
76
BAZE DE DATE
Jonciunea celor dou instane, FE1 i FE2, ale tabelei FACTURIEMISE dup condiia
FE1.Data = FE2.Data:
SELECT *
FROM FACTURIEMISE FE1 INNER JOIN FACTURIEMISE FE2
ON FE1.Data= FE2.Data
conduce la un rezultat precum cel din figura 6.10.
77
BAZE DE DATE
Din cele 38 de linii, prin predicatul FE2.NrFactura=111113 rmn numai 3, cele din figura
6.9.
Exemplu 5
Care sunt clienii crora NU le-am ntocmit facturi pe 18/06/2000 ?
La aceast problem se pot formula mai multe soluii. Una ar fi bazat pe diferena dintre toi
clienii (extrai din tabela CLIENI) i cei crora le-am trimis facturi pe 18 iunie. innd seama c
numele clientului este cheie alternativ, deci unic, se poate scrie:
SELECT NumeClient
FROM CLIENTI
MINUS
SELECT NumeClient
FROM CLIENTI INNER JOIN FACTURIEMISE
ON
CLIENTI.CodClient=FACTURIEMISE.CodClient
Data={^2000/06/18}
AND
78
BAZE DE DATE
Prima observaie: n rezultat sunt incluse toi clienii, adic, toate nregistrrile din tabela
CLIENI. A doua observaie: jonciunea nu mai este de tip INNER i LEFT OUTER, adic extern
la stnga. Cum dintre CLIENI i FACTURIEMISE, cea de la stnga este prima, rezult c n
rezultat sunt extrase toate liniile din aceasta, chiar dac nu au linii corespondente n tabela din
dreapta. n cazul nostru, TEXTILA SA, MODERN SRL, INTEGRATA SA, AMI SRL AXON
SRL nu au fcut cumprturi de la firma noastr pe 18 iunie 2000. Ne dm seama de acest lucru
observnd c pe liniile coresponde acestora, valorile atributelor preluate din FACTURIEMISE sunt
NULL.
Astfel nct, pentru a rspunde punctual la problema pus, ar trebui extrase liniile n care, n
urma jonciunii externe, FE.NrFactur (sau oricare alt atribut din FE) este NULL. Paradoxal sau nu,
fraza urmtoare nu obine rezultatul scontat n VFP:
SELECT *
FROM CLIENTI C LEFT OUTER JOIN FACTURIEMISE FE
ON C.CodClient=FE.CodClient AND Data={^2000/06/18}
WHERE FE.NrFactura IS NULL
Funcia NVL convertete valorile nule ale atributului NrFactura n 0. Principial, soluia bazat
pe NVL are acelai mecanism ca i precedenta interogare. Cu singura diferen c funcioneaz,
dup reiese din figura 6.12.
Firete, pentru a obine numai numele clienilor, este necesar nlocuirea asteriscului din
clauza SELECT cu atributul NumeClient.
Ar mai fi de adugat c exist trei tipuri de jonciune extern: la stnga (LEFT OUTER
JOIN), la dreapta (RIGHT OUTER JOIN) i total (FULL OUTER JOIN). La jonciunea extern
la dreapta sunt extrase liniile echi-jonciunii plus liniile tabelei din dreapta ce nu ndeplinesc
79
BAZE DE DATE
condiia formulat prin predicatul de jonciune. Jonciunea extern total reprezint, n fapt,
reuniunea (cu eliminarea dublurilor) jonciunilor la stnga i la dreapta.
Sub-consultri. Operatorul IN
O alt facilitate deosebit de important a limbajului SQL o constituie posibilitatea includerii
(imbricrii) a dou sau mai multe fraze SELECT, astfel nct pot fi formulate interogri cu mare
grad de complexitate.
Operatorul IN poate fi utilizat i pentru includerea unei fraze SELECT ntr-o alt fraz
SELECT.
Exemplu 1
Care sunt facturile emise n aceeai zi n care a fost ntocmit factura 111113 ?
SELECT *
FROM FACTURIEMISE
WHERE Data IN
(SELECT Data
FROM FACTURIEMISE
WHERE NrFactur=111113)
Sub-consultarea
SELECT Data
FROM FACTURIEMISE
WHERE NrFactur=111114
are ca rezultat o tabel alctuit dintr-o singur coloan (Data) i o singur linie ce conine
valoarea atributului Data pentru factura 111113, ca n figura 6.13:
Exemplu 2
Care sunt facturile emise n alte zile dect cea n care a fost ntocmit factura 111113?
SELECT *
FROM FACTURIEMISE
80
BAZE DE DATE
S-a utilizat negaia, testndu-se non-apartenena la o relaie creat printr-o sub-fraz SELECT
(vezi figura nr. 6.15).
Figura nr. 6.15. Facturile emise n alte zile dect factura 111113
Exemplu 3
Care sunt clienii crora li s-au trimis facturi ntocmite n aceeai zi cu factura 111113?
SELECT DISTINCT NumeClient
FROM CLIENI
WHERE CodClient IN
(SELECT CodClient
FROM FACTURIEMISE
WHERE Data IN
(SELECT Data
FROM FACTURIEMISE
WHERE NrFactur=111113))
Am ilustrat modul n care pot fi imbricate (nlnuite, incluse) trei fraze SELECT. Soluia
este valabil n SGBD-urile profesionale (DB2, Oracle), nu ns i n VFP, n care orice
interogare poate fi desfutata pe maximum dou nivele (SELECT-ul principal, plus un nivel de
sub-consultri). Pentru a reduce numrul straturilor de corelare, se poate folosi, n acest caz,
jonciunea:
SELECT DISTINCT NumeClient
FROM CLIENI, FACTURIEMISE
WHERE CLIENI.CodClient=FACTURIEMISE.CodClient
AND Data IN
(SELECT Data
FROM FACTURIEMISE
WHERE NrFactura=111113)
Rezultatul din figura 6.16 demonstreaz c soluia este viabil.
81
BAZE DE DATE
Se poate reine, ca regul general, c aproape orice consultare poate fi redactat n mai multe
moduri, n funcie de experiena i imaginaia celui care o formuleaz.
n funcia COUNT se poate utiliza ca argument, n locul numelui unei coloane, semnul *; n
acest caz se va determina cte linii are tabela la care se aplic funcia respectiv.
Exemplu 2
82
BAZE DE DATE
Exemplu 4
83
BAZE DE DATE
Prin asocierea unei clauze HAVING la o clauz GROUP BY este posibil selectarea
anumitor grupe de tupluri ce ndeplinesc un criteriu.
Rezultatul unei fraze SELECT ce conine clauza GROUP BY este o tabel care va fi
obinut prin regruparea tuturor liniilor din tabelele enumerate n FROM, care prezint o aceeai
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
2. Se formeaz cte un grup pentru fiecare valoare distinct a atributului Data - vezi figura
6.20.
84
BAZE DE DATE
3. Pentru fiecare din cele nou grupuri se calculeaz suma valorilor atributului
ValoareTotala. Tabela rezultat va avea nou linii, ca n figura 6.21.
Exemplu 2
ON FACTURIEMISE.CodClient = CLIENTI.CodClient
GROUP BY FACTURIEMISE.CodClient
BAZE DE DATE
Pentru facturile emise intereseaz valoarea zilnic a acestora (n funcie de data la care au
fost ntocmite, dar numai dac aceasta (valoarea zilnic) este de mai mare de cinci
milioane lei.
SELECT Data, SUM(ValoareTotala)
FROM FACTURIEMISE
GROUP BY Data
HAVING SUM(ValoareTotala) > 15000000
La execuia acestei fraze, se parcurg cei trei pai prezentai la exemplul 1, apoi, din cele nou tupluri
obinute
prin
grupare,
sunt
extrase
numai
cele
care
ndeplinesc
condiia
SUM(ValoareTotala)>15000000. Rezultatul final este cel din figura 6.22.
Exemplu 4
GROUP BY Data)
Din pcate, nici acest tip de interogare (prezena subconsultrilor n clauza HAVING) nu este
agreat de Visual FoxPro, astfel nct este necesar utilizarea mai multor fraze SELECT i salvarea
rezultatelor intermediare fie n tabele derivate (view-uri), fie n cursoare (NR_PE_ZILE) care, n
VFP sunt tabele temporare a cror via este limitat de nchiderea lor, explicit sau implicit:
SELECT Data, COUNT(*) AS Nr ;
FROM FACTURIEMISE ;
BAZE DE DATE
Coninutul cursorului NR_PE_ZILE, precum i rezultatul final sunt cele din figura 6.23.
Adugarea de nregistrri
Exemplu 1
S presupunem c, la un moment dat, ntreprinderea vinde produse i firmei RODEX SRL care are
sediul pe strada Sapienei, nr.44 bis, n localitatea Iai.
Acest nou client trebuie "introdus" n baza de date, operaiune care n SQL, se realizeaz prin
comanda:
INSERT
INTO CLIENI
VALUES (1009, RODEX SRL, Sapienei, 44 bis, 6600)
Fraza INSERT de mai sus poate fi scris i sub forma
INSERT
INTO CLIENI (CodClient, NumeClient, Adresa, CodPostal)
VALUES (5009, RODEX SRL, Sapienei 44 bis, 6600).
Dup cum se observ, dup numele tabelei (CLIENI) 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 una din formele:
INSERT
INTO CLIENI (CodClient, NumeClient, Adresa, CodPostal)
VALUES (5009, "RODEX SRL", NULL, 6600)
sau
87
BAZE DE DATE
INSERT
INTO CLIENI (CodClient, NumeClient, CodPostal)
VALUES (5009, RODEX SRL, 6600)
n noua linie a tabelei CLIENI valoarea atributului Adresa va fi NULL.
tergerea de nregistrri
Operaiunea de eliminarea a una sau mai multe linii dintr-o tabel, pe baza unui predicat, se
realizeaz n SQL prin comanda DELETE care are sintaxa:
DELETE
FROM nume-tabel
WHERE predicat
Exemplu 2
S se elimine din tabela CLIENI linia aferent clientului MODERN SRL (cod 1002).
DELETE
FROM CLIENI
WHERE CodClient = 1002
Exemplu 3
S se tearg datele referitoare la fiecare vnzare de produs pentru clienii din oraul Focani.
DELETE
FROM FACTURIEMISE
WHERE CodClient IN
(SELECT CodClient
FROM CLIENI, LOCALITI
ON DELETE RESTRICT)
BAZE DE DATE
UPDATE CLIENI
SET CodClient = CodClient + 2000
Exemplul este suficient de neinspirat, deoarece n practic modificarea codului clienilor
antreneaz modificarea valorilor acestui atribut n toate tabelele n care apare (n cazul nostru
FACTURIEMISE), datorit faptului c este o cheie strin.
3.4.6. Aplicaii rezolvate
Se consider o aplicaie de gestiune economic care ruleaz ntr-o entitate economic. Baza de date
(gest_ec) conine urmtoarele tabele:
PRODUSE
Cod depozit Cod
Denumire
Stoc
Data curenta Unitate de
(CODD)
Produs
Produs
(STOC)
(DATACRT) msur
(CODP)
(DENP)
(UM)
Int(11)
Int(11)
Varchar(60) Double(12,3) date
Varchar(3)
PRETURI
Cod produs
(CODP)
INT(11)
COMENZI
nr.comand
(NRCOM)
Int(11)
Pret maxim
Pret minim
Data de inceput
(PRETMAX)
(PRETMIN)
(DATAI)
DOUBLE(12,2) DOUBLE(12,2) DATE
Cod produs
(CODP)
Int(10)
Cod client
(CODCL)
Int(10)
Data livrarii
(DATAL)
date
DEPOZITE
Cod depozit(CODD)
Int(10)
Varchar (50)
SALARIATI
Marca
Nume
(MARCA) (NUME)
Functie
(FUNCT)
Int(10)
Char(50)
Char(20)
CLIENI
Cod client
CODL
Denumire
client
Cod
depozit
(CODD)
Int(10)
Salariu
(SALA)
Int(10)
89
Data de sfrit
(DATASF)
DATE
Cantitate
Pret
(CANT)
(PRET)
Double(10,2) Double(10,2)
Nr. De salariai
(NRSAL)
Int(2)
Venit
suplimentar
(VENS)
Int(10)
Cod
superior
(CODS)
Int(10)
Adresa
Telefon
Sold
(ADRESA) (TELEFON) (SOLD)
BAZE DE DATE
Int(10)
(DENCL)
Char(50)
(REGCOM)
Char(20)
Char(50)
Char(10)
Double(12,3)
1. S se creeze tabelele
CREATE TABLE PRODUSE (CODD INTEGER NOT NULL, CODP INTEGER NOT NULL,
DENP VARCHAR(50) NOT NULL, STOC DOUBLE(10,3), DATACRT DATE, UM
VARCHAR(3), PRIMARY KEY (CODD,CODP), FOREIGN KEY (CODD) REFERENCES
DEPOZITE(CODD), FOREIGN KEY (CODP) REFERENCES PRETURI(CODP) );
CREATE TABLE PRETURI (CODP INTEGER NOT NULL PRIMARY KEY, PRETMAX
DOUBLE(10,2) NOT NULL, PRETMIN DOUBLE(10,2) NOT NULL, DATAI DATE NOT
NULL, DATASF DATE
NOT NULL, FOREIGN KEY (CODP) REFERENCES
COMENZI(CODP));
CREATE TABLE COMENZI (NRCOM INTEGER NOT NULL, CODP INTEGER NOT NULL,
CODC INTEGER NOT NULL, DATAL DATE, CANT DOUBLE(10,3) NOT NULL, PRET
DOUBLE(10,2) NOT NULL, FOREIGN KEY (CODC) REFERENCES CLIENTI(CODC));
CREATE TABLE DEPOZITE (CODD INTEGER NOT NULL PRIMARY KEZ, DEND
VARCHAR(50) NOT NULL, NRSAL INTEGER NOT NULL , DATACRT DATE, UM
VARCHAR(3), FOREIGN KEY (CODD) REFERENCES SALARIATI(CODD));
CREATE TABLE SALARIATI (MARCA INTEGER NOT NULL PRIMARY KEY, NUME
VARCHAR(50) NOT NULL, FUNCT VARCHAR(20), CODD INTEGER NOT NULL, SALA
INTEGER NOT NULL, CODS INTEGER NOT NULL);
CREATE TABLE CLIENTI (CODC INTEGER NOT NULL PRIMARY KEY , DENC
VARCHAR(50) NOT NULL, CODFISCAL VARCHAR(20) NOT NULL, REGCOM
VARCHAR(20) NOT NULL, ADRESA VARCHAR(50) NOT NULL, TELEFON VARCHAR(20)
NOT NULL, SOLD DOUBLE(10,2));
2. sa se insereze in tabela SALARIATI urmatoarele inregistrari
Marca Nume
Funct
Codd
Sala
Vens
Cods
1111 AVRAM ION
VANZATOR 100000
21200
1000
1000
1222 BARBU DAN
VANZATOR 120000
20750
2000
1000
1000 COMAN RADU SEF DEP
130000
35000
2500
1000
3500 DAN ION
VANZATOR 160000
24500
3550
2500
2500 VLAD VASILE
SEF DEP
160000
36500
1500
2500
3700 MANU DAN
VANZATOR 160000
27500
2500
2500
2650 VLAD ION
VANZATOR 120000
25060
3500
1000
Insert into salariati set marca=1111,nume=AVRAM ION,funct=vanzator, codd=100000,
sala=21200, vens=1000, cods=1000; sau
Insert into salariati value (1111,AVRAM ION,vanzator,100000,21200,1000,1000);
3. S se selecteze toate coloanele din tabela SALARIATI.
SELECT * FROM SALARIATI;
4. Sa se selecteze coloanele MARCA,NUME,SALA,VENS din tabela SALARIATI;
Select marca,nume,sala,vens from SALARIATI ;
5. Sa se selecteze NUME din tabela SALARIATI
SELECT NUME FROM SALARIATI ;
6. Sa se selecteze coloana FUNCT din tabela SALARIATI in variantele utilizarii si neutilizarii
clauzei distinct.
90
BAZE DE DATE
BAZE DE DATE
10. Sa se afiseze cimpurile CODP, DENP, STOC si CANT, utilizand criteriul egalitatii OUTERJOIN, pe campul comun CODP (se afiseaza datele despre datele despre acele produse pentru care
exista comenzi dar nu sunt in nomenclatorul de produse). Liniile sa fie ordonate crescator dupa
campul CODP.
11.Sa se afiseze numele si marca acelor angajati al caror nume se pronunta asemanator cu DORU DAN.
12. Sa se selecteze campurile NUME si FUNCT ale salariatilor cu functia identica cu a lui RADU IOANA.
13. Sa se selecteze codul produsului, data maxima admisa de practicare a unui pret si data curenta pentru
acele produse care indeplinesc conditia ca DATASF+10 sa fie mai mare decit SYSDATE,
14. Sa se selecteze cimpurile MARCA, NUME, SALA, VENS pentru salariatii care au alta functie decat cea
de vanzator.
92
BAZE DE DATE
15. Sa se selecteze crescator dupa salariu, angajatii cu functia vinzator, si pentru care marca superiorului
este 1000.
16. Sa se selecteze si afiseze valoarea medie zilnica a comenzilor ce trebuie onorate in perioada 01-03 Iulie
2005.
17. Sa se afiseze primele 5 carcatere din nume, marca si primul carcater din functie, pentru toti angajatii.
18. Sa se afiseze o situatie finala prin care sa fie redate cimpurile NUME si MARCA angajatului reunite
intr-un camp comun, denumit "INFORMATIE" si cimpul venituri totale anuale denumit VENIT_ANUAL.
Selectia este ceruta pentru angajatii cu codul superiorului egal cu 1000.
19. Sa se selecteze campurile NUME si CODD ale angajatilor cu codul superiorului 1000 si care au
aceeasi functie cu DORU DAN. Sa se afiseze numai salariatii pentru care exista corespondenta de
CODD in tabelele DEPOZITE si SALARIATI. Datele sa fie ordonate crescator dupa valorile CODD si
NUME.
20.Sa se selecteze cimpurile CODP, DENP, PRET, PRETMAX, PRETMIN pentru produsele al caror pret
negociat este cuprins intre pretul maxim si pretul minim. Ordonarea sa se faca crescator dupa campul CODP.
21. Din tabela COMENZI (definita prin etichetele T1 si T2) sa se selecteze CODP, CODC, in conditiile in
care valoarea comenzii este mai mare ca 500000 lei. (JOIN -ul unei tabele pe ea insasi).
22. Sa se afiseze toate coloanele pentru salariatii cu functia vanzator, care au salariul mai mare ca 3500000
lei si lucreaza in subordinea superiorului cu codul 1000.
23. Sa se selecteze coloanele CODP, DATASF la produsele cu codul mai mare ca 13333, afisind ziua si luna
in litere iar anul cu patru cifre.
24. Sa se selecteze coloanele MARCA, NUME, CODD, VENS ordonate crescator dupa codul depozitului si
veniturile suplimentare.
25. Sa se selecteze toate coloanele din tabela SALARIATI.
26.Sa se afiseze valoarea totala a salariilor si veniturilor suplimentare pentru salariatii cu functia 'VINZATO'.
27. Sa se selecteze salariatii al caror nume are o lungime de noua caractere.
28. se selecteze coloanele MARCA, NUME, CODD din tabela SALARIATI, daca venitul suplimentar este
mai mare decat salariul.
29. Sa se selecteze din tabela PRETURI valorile cimpului CODP si DATASF. Data de sfirsit (DATASF) sa
se prezinte insotita de timpul intern, exprimat in diverse forme de afisare.
30. Sa se afiseze numarul de valori nenule inregistrate in coloana VENS din tabela SALARIATI.
Referinte bibliogafice
1. Moraru, S., Perniu, L. Web-applications on databases in electrical domain, Ed. Lux Libris,
2004.
2. Connolly, T., Begg, C., Strachan, A. Baze de date, Ed. Teora, 2000.
3. Connolly, T., Begg, C., Strachan, A. Database Systems A Practical Approach to Design,
Implementation and Management, Addison Wesley Longman Limited 1995, 1998
4. Florescu, V. and co. Databases. Practical and Teoretical Approach, Infomega, 2001
5. Velicanu, M., Lungu, I., Bodea C., Ioni, C., Bdescu G. Database Management Systems,
Editura Petrion, 2000
6. Popescu, I. Database Design, Editura Tehnic, 2001
7. Sabu G., Avram V. Computer Systems and Databases, Editura Oscar Print
8. Henderson, K. The Gurus Guide to Transact-SQL, Addison Wesley, 2000
9. Waymire, R., Sawtell, R. Sams Teach Zourself Microsoft SQL Server 2000 in 21 Days, Sams
Publishing, 2001
10. Henderson, K. The Gurus Guide to SQL Server Stored Procedures, XML, and HTML
Addison Weslwey, 2002
11. Reingruber, M. C., Gregory W. The Data Modeling Handbook, John Wiley & Sons, 1994.
12. Martin J. An end users guide to Data Base, Prentice Hall, 1981
13. Carter J. The relational database, Chapman & Hall, 1995
14. Fleming, von Halle, The Handbook of RelationalDatabase Design, Addison-Wesley.
15. Chen, P. P. The entity-relationship model: toward a unified view of data, ACM Trans. on
Database Systems, 1976.
16. Batini, C., S. Ceri, S. B. Navathe, C. Batini Conceptual Database Design: an
Entity/Relationship Approach, Addison-Wesley, Reading MA, 1991.
93
BAZE DE DATE
17. R. Jennings, P. Hipson Database Developer's Guide with Visual C++ 4, Second Edition,
Sams Publishing, 1996
18. Date, C.J. An Introduction to Database Systems (5th ed.). CA: AddisonWesley, 1991.
19. Date, C.J. An Introduction to Database Systems (7th ed.). CA: AddisonWesley, 2000.
20. Elmasri, R., Navathe, S.B. Fundamentals of Database Systems (3rd ed.).
CA: Addison-Wesley, 2000.
21. Johnson, J.L. Database: Model, Languages, Design. NY: Oxford University
Press, 1997.
22. Robson, W. Strategic Management & Information Systems (2nd ed).
Pitman, 1997.
23. Avery, B. The Relational Model, Kingston University, [PDF document] URL
http://www.kingston.ac.uk/~ku12492/MBIT/model.pdf.
24. Brown, C.E. The Relational Model, Database learning module,
http://www2.bus.orst.edu/faculty/brownc/lectures/db_tutor/relational_model.
htm#3.1%20Rela-tional%20Data%20Model%20Concepts.
25. Bull, M. Codds Rules for RDBMS, MB-online publication. West Yorkshire,
2002, URL http://hometown.aol.com/mbaddenda/art120.html.
26. Parkhurst, T. Codds 12 rules. DATA MANAGEMENT STRATEGIES,
http://www.itworld.com/nl/db_mgr/09022002/pf_index.html, 2002, Feb. 9.
27. Rennhackkamp, M. Relational Integrity Control, DBMS online Server side.
http://www.dbmsmag.com/9606d17.html, 1996 June.
28. Webopedia, Referential Integrity,
http://www.webopedia.com/TERM/r/referential_integrity.html.
29. Codd, E. "Is Your DBMS Really Relational?" and "Does Your DBMS Run By the Rules?"
ComputerWorld, October 14 and October 21, 1985.
30. Hernandez J. M. Database Design for Mere Mortals, Addison Wesley, 1996
31. Davies, C.T., Recovery Semantics for a DB/DC System, In Proc. ACM Annual Conference,
1973.
32. Eswaran, K.P., Gray, J.N., Lorie, R.A., Traiger, I.L. The Notions of Consistency and
Predicate Locks in a Database System, CACM 19,11, 1976
33. Scheuerl, S, J.G. Modelling Recovery in Database Systems, School of Mathematical and
Computational Sciences University of St Andrews, 1997
34. Yovits, M. C. Advances in Computers, Vol. 38. (Ed.), Academic Press, 1994.
35. Hernandez, M. J. Database design for mere mortals : a hands-on guide to relational database
design, 2nd ed., Addison Wesley, 2003.
94