Sunteți pe pagina 1din 67

1

UNIVERSITATEA TRANSILVANIA DIN BRAOV


FACULTATEA DE TIINE ECONOMICE







Prof.dr. DORIN LIXNDROIU Lector dr. RADU LIXNDROIU




BAZE DE DATE
RELAIONALE

introducere n baze de date
algebra relaional (AR)
SQL Access
interogri n AR i Access 2007
normalizarea relaiilor




Note de curs





Anul universitar 2008-2009
2
CAP.1. BAZE DE DATE

1.1. ORGANIZAREA DATELOR (OD)
(Ce presupune organizarea datelor?)
definirea, structurarea, ordonarea i gruparea datelor n colecii de date omogene;
stabilirea relaiilor ntre date, ntre elementele unei colecii, ntre colecii de date;
stocarea datelor pe suport informational.

1.2. OBIECTIVELE ORGANIZRII DATELOR
(De ce este necesar organizarea datelor?)
minimizarea timpului de acces la date;
economie de memorie intern i extern;
asigurarea unicitii datelor;
sistemul OD trebuie s reflecte ct mai fidel toate legturile dintre obiectele,
fenomenele, procesele economice pe care aceste date le reprezint;
asigurarea flexibilitii datelor.

1.3. ETAPE ALE EVOLUTIEI TEHNICILOR DE ORGANIZARE I
PRELUCRARE A DATELOR

Prima etap se adapteaz tipurile de organizare a datelor existente n sistemele de
prelucrare manual la condiiile tehnice impuse de calculator.
- apare fiierul (n general cu organizare secvenial)
- utilizarea benzilor magnetice
- prelucrarea pe loturi (batch processing)

A doua etap este marcat de separarea dintre structura logic de date i structura
fizic. Rezult independena fizic a datelor.
- se utilizeaz fiiere secvenial-indexate i fiiere cu acces direct
- suport extern de memorare discul magnetic
- se asigur independena aplicaiilor de modificrile echipamentelor hardware
(banda, disc, etc.)
- apar primele faciliti simple de protecie a datelor

Caracteristic comun a primelor dou etape: fiecare aplicaie lucreaz cu propriile
fiiere fr a avea nici o legtur cu fiierele utilizate de alte aplicaii.
Inconveniente:
- redundana datelor = > probleme n operaiile de actualizare
- absena unor legturi logice ntre datele din grupuri diferite de fiiere = >
numr mare de fiiere, timp mare de prelucrare
- flexibilitate redus a sistemului la apariia unei noi aplicaii.

A treia etap este definit de apariia fiierelor integrate.
- se reduce redundana datelor, aceleai date fizice pot fi utilizate n comun de ctre
mai multe aplicaii
- rezult o structur logic unitar.
3
Not. Structura integrat constituie originea noiunii de model conceptual (modelul ce
contine descrierile tuturor datelor i a legturilor dintre ele).

A patra etap este etapa bazelor de date.


1.4. SISTEMUL BAZAT PE FISIERE INDEPENDENTE (file based)

Este o colecie de programe de aplicaie care efectueaz servicii pentru utilizatorii finali.
Fiecare program definete i gestioneaz propriile date.

Caracteristici:
datele sunt descrise independent n toate fiierele n care apar
fiecare fiier de date este descris n toate programele care l acceseaz
nu exist control al accesului i manipulrii datelor, n afara celui impus prin
programele de aplicaie.

Dezavantajele tratrii bazate pe fisiere:
redundana i inconsistena datelor
dificultatea accesului
izolarea datelor
complexitatea deosebit a actualizrilor
probleme de securitate
probleme legate de integritatea datelor
costul ridicat
dificultatea de a obine rspunsuri rapide la probleme ad-hoc simple
inflexibilitatea fa de schimbrile ulterioare din sistemul informational.

1.5. BAZE DE DATE

DATA - nregistrarea unei observaii, obiect, fenomen, imagine, sunet sau text, ntr-o
form convenabil unei prelucrri, interpretri sau transmiteri prin mijloacele
informaticii.

INFORMAIA - semnificaia ce poate fi ataat sau poate fi dedus dintr-un ansamblu de
date pe baza asociaiilor dintre acestea.

BAZA DE DATE o colecie de date operaionale nregistrate pe suport adresabil, aflate
n interdependen logic, mpreun cu descrierea datelor i a relaiilor dintre ele i care
sunt prelucrate n aplicaiile informatice ale unei organizaii. Baza de date permite
operaii de introducere, tergere, actualizare i interogare a datelor.

BAZA DE DATE este un ansamblu de date:
- structurate,
- coerente,
- persistente,
4
- cu o redundan minim i controlat,
- independente de programul de aplicaie,
- direct accesibile dup mai multe criterii,
- simultan accesibile de ctre mai muli utilizatori.

ARHITECTURA UNUI SISTEM DE BAZE DE DATE (Database System)
- baza de date propriu-zis n care se memoreaz datele
- sistemul de gestiune al bazei de date (SGBD)
- metabaza de date - dicionarul datelor (DD)
- mijloacele hardware
- personalul (ABD, analiti, programatori, utilizatori finali).

Cerinele minimale care se impun unei baze de date:
- furnizarea n timp util a informaiilor solicitate
- costuri minime n prelucrarea i ntreinerea informaiei
- capacitatea de a satisface, cu aceleai date necesitile informaionale ale unui
numr mare de utilizatori
- flexibilitate - posibilitatea de adaptare la cerine noi, de a da rspunsuri la
interogri neprevzute iniial
- asigurarea unei redundane minime a datelor
- sincronizare exploatarea simultan a datelor de ctre mai muli utilizatori
- confidenialitate asigurarea securitii datelor prin mecanisme de protecie
mpotriva accesului neautorizat
- integritate faciliti de validare i recuperare a datelor deteriorate accidental
- compatibilitate i expandabilitate posibilitatea de valorificare a eforturilor
anterioare i anticiparea nevoilor viitoare
- permisivitate prin ierarhizarea datelor dup criteriul frecvenei acceselor, sau
reorganizri care s creasc performanele BD.

Database Administration (ABD) - Administratorul bazei de date este responsabil cu
realizarea fizic a BD, care include proiectarea, implementarea, exploatarea i
ntreinerea acesteia, securitatea, acordarea drepturilor de acces i controlul integritii.


1.6. SISTEMUL DE GESTIUNE AL BAZELOR DE DATE ( SGBD)
Database Management System (DBMS)

SGBD - un ansamblu de programe (produs software) care permite definirea,actualizarea
i consultarea datelor din baza dedate.

Funciile unui SGBD:
- definirea datelor (DDL Data Definition Language) permite definirea conceptual a
datelor, fr referire la modul de memorare
- manipularea datelor (DML Data Manipulation Language i / sau interfaa cu limbaje
de programare) permite specificarea operaiilor de introducere, actualizare, tergere
i interogare a datelor
5
- controlul integritii datelor
- accesul concurent (folosirea simultan a datelor de mai muli utilizatori)
- confidenialitatea informaiilor din BD
- securitatea n funcionare (DCL Data Control Language)





Arhitectura funcional a unui SGBD
Interfa de generaia a 4-a

Pascal
Visual Fox
Oracle
...
Definire de date

Manipulare

Confidenialitate

Securitate

Interfee
S

G

B

D
Sistem de exploatare
Baze de date Baze de date
Utilizator
6
Obiectivele unui SGBD:
- asigurarea independenei datelor
- asigurarea unor faciliti sporite de utilizare a datelor
- asigurarea unei redundane minime i controlate a datelor din BD (reducerea
redundanelor se face prin identificarea informaiilor comune)
- securitatea i confidenialitatea datelor
- partajabilitatea datelor
- integritatea datelor

Exist mai multe nivele de reprezentare (abstractizare i percepie) a datelor n baza de
date:

Nivelul conceptual este dat de viziunea adminstratorului bazei de date asupra
datelor. Principalele aspecte la acest nivel:
- cu instrumentele oferite de SGBD, administratorul bazei de date realizeaz
structura conceptual a BD;
- viziunea adminstratorului bazei de date este independent de aplicaiile care vor fi
dezvoltate (independen logic);
- rezultatul la acest nivel este schema conceptual.

Nivelul logic este dat de viziunea programatorului de aplicaii asupra datelor.
Principalele aspecte la acest nivel:
- programatorul de aplicaii realizeaz programele pentru descrierea i manipularea
datelor;
- programele implementeaz structura extern (logic) a datelor;
- structura extern este dedus din schema conceptual;
- viziunea programatorului de aplicaii este independent de suportul tehnic de
informaie (independena fizic).

Nivelul fizic (intern) este dat de viziunea programatorului (inginerului) de sistem
asupra datelor. Principalele aspecte la acest nivel:
- programatorul de sistem realizeaz structura intern (fizic);
- structura intern corespunde descrierii datelor pe supotul fizic de informaie;
- structura intern este dedus din cea extern;
- implementarea schemei interne se face cu ajutorul sistemului de gestiune a
fiierelor din SGBD i/sau din sistemul de operare, prin gestiunea fizic a
perifericelor.

Nivelul virtual (extern) este dat de viziunea utilizatorului final asupra sistemului.







7












































Nivele de reprezentare a datelor
Domeniu de aplicaie
Parte a domeniului
obiect de studiu
Entitate-asociere,
semantic
relaional,
funcional etc.
Relaional
n funcie de SGBD
(tabel, nregistrare,
segment, etc.)
Formalisme
SGBD
Baza de date
Scheme externe
Schema conceptual
Schema logic
Schema fizic
CONCEPTUAL
LOGIC
FIZIC
Programe
Factori
cantitativi
Constrngeri ale
SGBD-ului
8
ntr-un raport al ANSI / SPARC (American National Standards Institute / Standards
Planning And Requirements Committee) se disting cel puin trei nivele de reprezentare a
datelor (conceptual, logic i fizic). Pentru fiecare nivel se asociaz o schem.

Comentarii.
Manipularea datelor presupune instrumente i mecanisme ce permit comunicarea:
baz de date - utilizatori. Pentru manipularea datelor, SGBD-urile ofer o serie de
faciliti, incluse n Data Manipulation Language (DML). Aciunea se exprim sub
forma unei fraze a limbajului, care este evaluat i executat de SGBD.
Interfeele sunt alte forme de comunicare care permit SGBD-ului s transmit date
ctre alte limbaje de programare (Pascal, C, C++, Cobol etc.). Aceste interfee permit
accesul i manipularea datelor dintr-o baz de date plecnd de la un program scris
ntr-un limbaj de programare clasic (procedural).

Integritatea datelor. Conceptul de integritate a datelor este relativ la calitatea
informaiei nregistrate. Constrngerile de integritate sunt specificate n definirea
schemei bazei de date.

Accesul concurent. Datele dintr-o baz de date pot fi accesate concurent de mai muli
utilizatori. SGBD-ul trebuie s ofere mecanisme de gestiune a conflictelor de acces.

Confidenialitate. Punerea n comun a datelor pentru mai muli utilizatori impune
problema confidenialitii. Confidenialitatea este asigurat prin nume de utilizator i
parol care genereaz drepturi de acces difereniate.

Securitatea n funcionare. SGBD-ul trebuie s ofere mecanisme care s permit
repunerea rapid a bazei de date n stare operaional, n caz de incident hardware sau
software. Aceste mecanisme sunt bazate pe nregistrarea operaiunilor realizate asupra
bazei de date i reexecutarea lor automat n caz de incident.


1.7. BANCA DE DATE BAZA DE DATE

Exist n literatura de specialitate mai multe abordri ale celor dou concepte. Modul lor
de tratare este departe de a fi unitar. n unele lucrri se consider:

A. Banca de date := Baza de date + SGBD

Ali autori extind noiunea de banc de date i consider banca de date format din :

B. Banca de date := baza de date + hardware + SGBD + programele de aplicaii +
utilizatorii

n cartea Lart des bases de donnes, autorii Miranda S.M., Busta J.M. fac distincia ntre
cele dou concepte:

9
C. Baza de date conine date primare care sunt exploatate cu ajutorul unui SGBD. n
cazul unei interogri, sistemul de gestiune al bazei de date furnizeaz direct rspunsul.
Banca de date date conine date refereniale i accesul este asigurat cu ajutorul unui
sistem documentar (SD). Sistemul documentar permite o direcionare ctre un text (carte,
articol, ...) i dup consultare se obine rspunsul la interogarea formulat.

Exemplu [Miranda, 1988]: Dac se consider atributul stare de sntate avnd mai
multe valori, printre care {...., nebun, ...} i formulm interogarea:
Care a fost starea de sntate a preedintelui Wilson (SUA) ntre 1914-1918 ?
Rspunsul dat de banca de date va fi de genul: Istoria contemporan a SUA, pag. 52, ed.
1980, iar rspunsul efectiv se obine n urma consultrii lucrrii indicate. n cazul unei
baze de date rspunsul va fi direct valoarea atributului stare de sntate: nebun.


1.8. MODELE DE REPREZENTARE A DATELOR

Tipologia SGBD-urilor este n general funcie de tipurile de structuri ale datelor pe care le
suport.
Dintre modelele cele mai ntlnite amintim [Ionescu, 2004]:

modelul ierarhic
modelul reea
modelul relaional
modelul orientat-obiect
modelul obiect relaional

Modelul ierarhic (Hierarchical Model) acesta a fost primul model folosit pentru
dezvoltarea bazelor de date. Modelul permite reprezentarea claselor sau ansamblelor de
obiecte printr-o structur ierarhic de nregistrri. Relaiile de tip "tat-fiu" ntre clase
sunt de tip 1:N. Ansamblul claselor se constituie ntr-un arbore direcionat n care
nodurile sunt tipurile de nregistrri, iar arcele sunt tipurile de legturi.

Modelul reea (Network Model) utilizeaz o structur de graf pentru definirea schemei
conceptuale a bazei de date. Nodurile grafului sunt tipurile de entiti, iar muchiile
reprezint legturile dintre tipurile de entiti. Relaiile sunt de tipul M:N i se reprezint
fr duplicarea nregistrrilor, fiecare nregistrare putnd fi referit de mai multe
nregistrri. Acest model este n prezent rar folosit pentru baze de date generale, care
implic operaii de interogare. Aplicarea modelului reea se ntlnete n bazele de date
grafice utilizate n modelarea realitii virtuale.

Modelul relaional (Relational Model) premite vizualizarea unei baze de date ca un
ansamblu de tabele bidimensionale. Modelul se bazeaz pe noiunea de relaie din
matematic, care corespunde unei mulimi de entiti de acelai tip. Limbajele relaionale
de manipulare a datelor sunt limbaje neprocedurale utilizatorul, de exemplu, formuleaz
interogarea fr s indice procedura (algoritmul) de rezolvare. SGBD-urile relaionale
ofer un limbaj de programare unanim recunoscut i acceptat, limbajul SQL, bazat pe
10
algebra relaional. Pentru limbajul SQL au fost emise mai multe standarde de ctre
International Standardization Office (ISO).

Modelul orientat-obiect (Object Model) este un concept unificator n informatic, fiind
aplicabil n programare, n proiectare hardware-ului, a bazelor de date, etc. Sistemele de
baze de date orientate obiect se bazeaz pe limbajele de programare orientate obiect. Au o
utilizare limitat, mult mai redus dect cea a sistemelor de baze de date relaionale.
Pentru bazele de date orientate obiect exist un limbaj standard standard de interogare
OQL (Object Query Language).

Modelul obiect relaional (Object Relational Model) este considerat urmtorul mare val
n dezvoltarea i ntreinerea bazelor de date. Construcia se poate realiza dezvoltnd
sistemul relaional prin adugarea caracteristicilor obiectuale necesare sau pornind de la
un sistem orientat obiect i adugnd caracteristicile relaionale.


1.9. SCURT ISTORIE A BAZELOR DE DATE

1961 - apariia sistemului IDS (Integrated Data Storage, General Electric). Terminologia
introdus (tipuri de nregistrri i tipuri set) va fi utilizat n modelul reea prezentat la
"Conference On DAta SYstems and Languages Data Base Task Group" (CODASYL
DBTG).
1965-1970 - dezvoltarea sistemelor de gestiune a fiierelor generalizate. IBM a dezvoltat
modelul iererhic i sistemul IMS (Information Management System). n acceasi perioad
apare IMS DB/DC (DataBase/DataCom) care suport modelul reea.
n anii 70, domeniul se dezvolt foarte mult, ajungnd s fie disciplin universitar i de
cercetare. Astfel apar numeroase produse comerciale care implementeaz propunerile
raportului CODASYL DBTGi: ISD II (HoneyWell), DMS1100 (UNIVAC), DMS II
(Burroughs), etc.
1970 - apare modelul relaional de date
1971 - publicarea raportului CODASYL DBTG
1972 prima conferin internaional organizat de ACM SIGMOD (Association of
Computing Machinery, Special Interest Group on Management Of Data)
1975 - prima conferin internaional VLDB (Very Large Data Base); publicarea
raportului ANSI-SPARC
1976 - publicarea modelului Entitate - Asociere
1975 - 1980 - dezvoltarea sistemelor relaionale experimentale: SYSTEM-R (IBM) i
INGRES (Berkeley, University of California)
1980 - .... apariia i comercializarea a numeroase SGBD-uri relaionale ce au nlocuit
SGBD-urile ierarhce i reea. SGBD-urile pot fi utilizate pe microcalculatoare i se
realizeaz sisteme din generaia a patra cu instrumente i interfee multiple.
1990 - .... se dezvolt numeroase produse a cror complexitate crete, la un pre tot mai
sczut: PowerBuilder (SYSBASE), Oracle Developer, VB (Microsoft), etc. Se dezvolt
modelul client-server, ce se folosete n tot mai multe aplicaii economice. Se dezvolt i
produse sotftware ca Excel/ Access (Microsoft) pentru scop personal de o complexitate
mai sczut.
11
1990-1995 - apar baze de date pentru Internet. Sunt utilizate conceptele client-server, i
astfel complexitatea Internet-ului crete exponenial.
2000 - pentru aplicaiile pe Internet apar o serie de instrumente cum ar fi Active Server
Pages, Java Servlets, JDBC, Enterprise Java Beans, ColdFusion, Dream Weaver, Oracle
Developer 2000, Apache, MySQL. Se dezvolt procesarea tranzaciilor online (OLTP)
precum i procesarea analitic de tip OLAP.
Dup 2000 - se dezvolt aplicaii pe arhitectura client-server pentru PDA-uri, tranzacii
cu POS-uri, telefoane mobile. Companiile cele mai reprezentative din domeniu rmn:
IBM, Microsoft i Oracle.


1.10. BAZE DE DATE RELAIONALE

Conceptul de baze de date relaionale (BDR) apare n lucrarea lui E.F.CODD (IBM), A
Relational Model for Large Shared Data Banks, (1970). Modelul de date relaional a fost
perfecionat n anii urmtori de C.J. DATE, R. BOYCE, R. FAGIN, W.W. ARMSTRONG.

Caracteristicile modelului relaional:
datele sunt percepute de utilizatori ca tabele
simplitate i precizie n definirea elementelor de baz (relaii, atribute, domenii)
operatorii relaionali genereaz un tabel rezultat din tabelele operanzi
restriciile de integritate, normalizarea relaiilor, controlul concurenei permit crearea
structurii datelor i a prelucrrii lor ntr-un mod consistent i asigur integritatea i
protecia acestora.

Definiia 1.1. BDR este un ansamblu organizat de tabele (relaii) mpreun cu legturile
dintre ele.

Avantajele BDR fa de fiiere (sisteme file-based) [Velicanu, 2003]:

CRITERIU BDR FIIERE
Independena datelor logic i fizic fizic
Nivele de structurare conceptual, logic, fizic logic i fizic
Deschidere i portabilitate mare mic
Reprezentarea i utilizarea
datelor
simplificat prin model complicat
Structura datelor se pstreaz n dicionarul datelor n programe

E.F.CODD formuleaz 13 reguli pentru evaluarea performanelor unui sistem de gestiune
a bazelor de date relaionale (SGBDR). Aceste reguli exprim cerinele maximale ca un
SGBDR s fie relaional.

Condiiile minimale ca un SGBD s fie relaional, pot fi formulate astfel:
s implementeze modelul de date relaional prin DDL (Data Definition Language) i
DML (Data Manipulation Language)
s implementeze un limbaj de interogare relaional

12

Arhitectura funcional a unui SGBD relaional

Elementele de baz utilizate pentru a descrie datele n modelul relaional din punct de
vedere formal, uzual sau fizic sunt:

Formal Uzual Fizic
relaie tablou fiier
tuplu linie articol
atribut coloan cmp
domeniu tip de dat tip de dat
Interfaa utilizatorului
Gestiunea vederilor
Integritatea semantic
Autorizarea accesului
Optimizarea cererilor
Gestiunea planurilor
de execuie
Controlul execuiei
Executarea
operatorilor algebrici
Gestiunea buffer-ului
Mecanisme de acces
Gestiunea accesului
concurent
Jurnalizarea
Control
Tratarea
cererilor
Gestiunea
accesului
Securitate
R
E
Z
U
L
T
A
T
E
13
Principalele concepte utilizate n bazele de date relaionale

Definiia 1.2. Domeniul este un ansamblu de valori care poate fi definit explicit prin
enumerarea tuturor valorilor sau implicit prin precizarea proprietilor pe care le au
valorile domeniului respectiv.

Exemplu:
D
1
= {MK, ECTS, FB, CIG, IE, MN}
[ ] { } 100 , 0 x , N x | x D
2
=
D
3
= {0, 9, 19}
- domeniul D
1
este definit explicit prin enumerarea programelor de studii care au n
plan disciplina Baze de date;
- domeniul D
2
este definit implicit prin specificarea proprietilor care pot fi luate
de valorile domeniului;
- domeniul D
3
este definit explicit prin enumerarea valorilor posibile (n procente)
ale cotelor de TVA.

( ) { }
n n 1 1 n 2 1 n 2 1
D V ,..., D V unde , V ,..., V , V D ... D D =
Fiecrui domeniu i se asociaz un atribut : ( )
i i i i
D A f , D A : f

Definiia 1.3. Relaia poate fi definit ca o mulime de tupluri ce aparine produsului
cartezian
n 2 1
D ... D D , astfel spus
n 2 1
D ... D D R .
Relaia se poate memora ntr-o tabel bidimensional:

R A
1
A
2
..... A
n
t
1
a
11
a
12
a
1n

t
2
a
21
a
22
a
2n

... ... ... ...
t
m
a
m1
a
m2
..... a
mn


Liniile tabelului formeaz elementele relaiei numite i tupluri.
Notm: tuplul i prin > =<
in 2 i 1 i i
a ,..., a , a t .

Schema relaiei (schema relaional) este un element invariant n timp i este dat de
mulimea numelor atributelor corespunztoare unei relaii. Pentru fiecare atribut se
precizeaz domeniul asociat.
Notm schema unei relaii cu: [ ]
n n 2 2 1 1
D : A ,..., D : A , D : A R
sau pe scurt: [ ]
n 2 1
A ,..., A , A R .

Schema bazei de date relaionale este dat de mulimea tuturor schemelor relaionale
corespunztoare unei aplicaii, iar coninutul curent al relaiilor la un moment dat se
numete baz de date relaional.

Cardinalul unei relaii este dat de numrul de tupluri din relaie.
Gradul unei relaii (aritatea relaiei) este dat de numrul de atribute din relaie.
14
Relaia virtual (relaie derivat, viziune) este definit implicit pe baza altor relaii, prin
intermediul unei expresii relaionale. Stabilirea efectiv a tuplurilor care compun relaia
virtual se realizeaz prin evaluarea expresiei relaionale n momentul n care utilizatorul
apeleaz la aceast relaie.

Domenii compatibile cu reuniunea domeniile au acelai grad (aritate) i atributele
corespondente iau valori n aceleai domenii.

Relaia se prezint ca o mulime de tupluri. Logic, aceast mulime nu poate conine
elemente identice, cu alte cuvinte, relaia nu poate avea tupluri duplicate. Necesitatea
identificrii unui tuplu a condus la noiunea de cheie.

Definiia 1.3. Cheia unei relaii reprezint ansamblul minimal de atribute cu rol de
identificare unic a tuplurilor dintr-o relaie. ntr-o relaie pot exista mai multe atribute /
combinaii de atribute cu rol de identificare unic a tuplurilor, exist deci mai muli
candidai cheie. Dintre acetia ABD-ul alege cheia primar, celelalte devin chei
secundare sau alternante. Orice relaie are cel puin o cheie.

Cheia simpl este cheia format dintr-un singur atribut, iar cheia compus este format
din mai multe atribute.

Domeniul primar este domeniul pe care este definit cheia primar.

Cheia extern este un atribut /grup de atribute dintr-o relaie, ale crui valori sunt definite
pe domeniul primar al altei relaii.

Relaia primar. O relaie RP este primar, dac exist o alt relaie R, legat semantic
de ea, care are drept cheie extern, cheia primar a relaiei considerate (RP).

Exemple.

1. Fie relaia STUDENT [nr_matricol, nume, facultate, grupa, sectia, CNP, adresa]

Atributele nr_matricol i CNP au rol de identificare unic a tuplurilor din relaie;
reprezint candidai cheie. Alegem drept cheie primar atributul nr_matricol, care are
domeniul format din 4 caractere numerice i este mai uor de operat. Atributul CNP,
format din 13 caractere numerice devine cheie secundar (alternant).

2. Se consider relaiile:

PRODUSE [cod_produs, denumire, um]
CONTRACTE [nr_contract, cod_produs, cod_client, data, cantitate, pret_unitar]
CLIENTI [cod_client, nume, CUI, adresa, cont, tel, email]

relaia PRODUSE are cheia primar - cod_produs;
15
relaia CONTRACTE are cheia primar - nr_contract, iar atributele cod_produs i
cod_client sunt chei externe ;
relaia CLIENTI are cheia primar - cod_client, iar atributul CUI este cheie
secundar;
PRODUSE i CLIENTI sunt relaii primare.


1.11. RESTRICIILE DE INTEGRITATE MINIMALE

Restriciile de integritate minimale sunt reguli pe care trebuie s le satisfac datele din
baza de date.

A. Integritatea domeniului const din controlul sintactic i semantic al unei date
oarecare i se refer la definiia tipului domeniului. De exemplu, n cazul unui
domeniu definit explicit prin enumerarea valorilor, trebuie s ne asigurm c
valorile atributului respectiv fac parte din mulimea enumerat. Sau, n cazul unui
domeniu definit implicit, se poate verifica dac numrul unei facturi aparine unui
interval dat.

B. Integritatea entitii se refer la restricii asupra cheii primare. Aceasta trebuie
s fie unic i nenul (atributele cheii primare trebuie s fie diferite de valoarea
null) .

C. Integritatea referirii impune ca valorile cheii externe s figureze printre valorile
cheii primare din relaia referit (relaia primar).





















16
CAP.2. ALGEBRA RELAIONAL

Interogarea (query) este operaia prin care se obin datele dorite dintr-o baz de date,
selectate conform unor criterii. Deoarece aceast operaie este cea mai important
operaie, limbajele de manipulare a datelor sunt denumite i limbaje de interogare.

Pentru formularea conceptual a interogrilor n bazele de date relaionale s-au dezvoltat
dou limbaje abstracte de interogare: algebra relaional i calculul relaional.

Algebra relaional (relational algebra), introdus de Codd n 1970, definete cadrul
formal al limbajelor relaionale pentru baze de date. Algebra relaional introduce o
colecie de operatori algebrici care se aplic relaiilor (tabelelor). Fiecare operaie din
algebra relaional are drept operanzi una sau mai multe relaii, iar rezultatul este tot o
relaie. Aceast uniformitate (proprietatea algebric de nchidere) permite aplicarea de
combinaii de operatori relaiilor.

Prin analogie cu un compilator care, plecnd de la un program surs produce un program
executabil, rezultatul compilrii unei interogri (cereri) de ctre un SGBD relaional este
o expresie algebric care va fi evaluat. n cadrul modelului relaional se consider
limbaje relaionale complete numai acele limbaje de interogare care permit
implementarea tuturor operaiilor prevzute de unul din limbajele abstracte de interogare.
Limbajele de interogare reale implementate n sistemele de baze de date relaionale sunt
limbaje definite pe baza limbajelor abstracte de interogare.

Cunoaterea limbajului abstract de interogare bazat pe algebra relaional este
obligatorie pentru nelegerea aprofundat a modului de execuie a interogrilor.

Algebra relaional conine dou tipuri de operaii:
operaii pe mulimi: reuniunea, intersecia, diferena i produsul cartezian. Pentru
a determina reuniunea, intersecia i diferena a dou relaii, acestea trebuie s fie
compatibile cu reuniunea (trebuie s aib acelai numr de atribute i atributele
corespondente s fie definite pe domenii compatibile, adic s aib formatul
datelor identic).
operaii relaionale: selecia, proiecia, jonciunea i diviziunea.

Operaii de baz - reprezint un ansamblu minimal de operaii, n sensul c niciuna din
operaii nu poate fi exprimat ca o combinaie a celorlalte operaii. Pentru algebra
relaional exist mai multe ansambluri minimale. n continuare prezentarea va considera
ca operaii de baz: trei operaii pe mulimi: reuniunea, diferena, produsul cartezian i
dou operaii relaionale unare: selecia i proiecia. Operatorii de intersecie, jonciune i
diviziune pot fi obinui din cei cinci operatori de baz.

Not. n definirea operatorilor algebrei relaionale vom nota cu:
t un tuplu din relaia R
t(A) subtuplu din R relativ la atributul A.

17
Fiecare operator al algebrei relaionale va fi descris prin signatur. Signatura indic
numrul i tipul operanzilor, precum i tipul rezultatului.

2.1. OPERATORII ALGEBREI RELAIONALE

1. UNION reuniunea a dou relaii R
1
i R
2
, compatibile cu reuniunea, este dat de
mulimea tuplurilor care aparin fie relaiei R
1
, fie relaiei R
2
, fie ambelor relaii.
Tuplurile care aparin ambelor relaii se introduc n reuniune o singur dat, adic nu
se duplic.

Signatura: latie Re latie Re latie Re

{ }
2 1 2 1 3
R t sau R t | t R R R = = U

R
3


R
1
R
2

Exemplu.

R
1
A B
a b
c d
x y

R
2
A B
d f
x y
h r
c d

R
3
A B
a b
c d
x y
d f
h r

Sintaxa:

UNION (R
1
, R
2
) - rezultatul este o relaie.

2. DIFFERENCE diferena a dou relaii R
1
i R
2
, compatibile cu reuniunea, este dat
de mulimea tuplurilor care aparin relaiei R
1
i nu aparin relaiei R
2
..

Signatura: latie Re latie Re latie Re

{ }
2 1 2 1 3
R t si R t | t R R R = =


U
18


R
3


R
1
R
2

Exemplu.

R
1
A B
a b
c d
x y

R
2
A B
d f
x y
h r
c d


R
3
A B
a b

Sintaxa:

DIFFERENCE (R
1
, R
2
) - rezultatul este o relaie.


3. INTERSECT intersecia a dou relaii R
1
i R
2
, compatibile cu reuniunea, este dat
de mulimea tuplurilor care aparin att relaiei R
1
, ct i relaiei R
2
.

Signatura: latie Re latie Re latie Re

{ }
2 1 2 1 3
R t si R t | t R R R = = I

R
3


R
1
R
2


I
_
19
Exemplu.

R
1
A B
a b
c d
x y

R
2
A B
d f
x y
h r
c d

R
3
A B
c d
x y
Sintaxa:

INTERSECT (R
1
, R
2
) - rezultatul este o relaie.

Observaie. Intersecia poate fi exprimat cu ajutorul operaiei de diferen (operaie de
baz):

( ) ( ) R S S S R R S R = = I




4. PRODUCT produsul cartezian a dou relaii R
1
i R
2
, produce o nou relaie care are
ca atribute, reuniunea atributelor din cele dou relaii (atributele comune vor fi luate
separat, calificrile fiind fcute cu numele relaiei), iar fiecare element din R
1
se
combin (concateneaz) cu fiecare element din R
2
.

Signatura: latie Re latie Re latie Re

( ) { }
2 2 1 1 2 1 2 1 3
R t si R t | t , t R R R = =


R
3




Exemplu.

R
1
A B
a b
c d
x y

R
2
A
a
d

R
3
R
1
. A B R
2
.A
a b a
c d a
x y a
a b d
c d d
x y d
R
1
R
2
20
Sintaxa:

PRODUCT (R
1
, R
2
) - rezultatul este o relaie.


5. SELECT este o operaie unar de restricie care selecteaz din tuplurile relaiei R,
acele tupluri care satisfac o condiie specificat. Condiia este o expresie logic
(predicat) specificat asupra atributelor relaiei R. Condiia poate cuprinde nume de
atribute, constante, operatori logici (and, or, not), operatori aritmetici de comparare
(<, >, =, , , ).

Signatura: latie Re ica log Expresie latie Re

( ) ( ) { } A t si R t | t R S
conditie
= =
unde: t(A) definete condiia de selecie ( este un operator aritmetic de
comparare, iar un tuplu care poate fi nlocuit de un atribut sau valoarea unui
atribut).

S



R

Exemplu.
( ) R S
' x ' B=
=

R

A B C
x y z
t x a
z x b
c u w



S

A B C
t x a
z x b

Sintaxa:

SELECT (R; condiie) - rezultatul este o relaie.



condiie
21
Observaii.
1. Aceast operaie nu trebuie confundat cu instruciunea SELECT, care este
instruciunea general de interogare din limbajele de manipulare a datelor.
2. n termenii limbajului de interogare SQL, operaia de selecie realizeaz o
decupare pe orizontal a tabelei operand R.
3. Cardinalul relaiei rezultat S este mai mic sau egal dect cardinalul relaiei R.
Egalitatea poate apare n situaia n care condiia este adevrat pentru toate
tuplurile din relaie.


6. PROJECT - este o operaie unar de restricie prin care se selecteaz din relaia R,
numai acele atribute specificate explicit n cadrul operaiei. Relaia rezultat P va
avea ca atribute submulimea selectat.

Signatura: latie Re atribute Lista latie Re

Fie ] A ,..., A , A [ R
n 2 1
= i { } { }
n 2 1 k 1
A ,..., A , A A ,..., A =

( ) ( ) { }
k 1
a ,..., a t R P = =



P

R

Exemplu.
( ) R P
C , A
=



R

A B C
x u x
z x y
x z x
z y y
x t x

P A C
x x
z y
x x
z y
x x

P

A C
x x
z y

Sintaxa:

PROJECT (R; lista atribute) - rezultatul este o relaie.


lista atribute
22
Observaii.
1. Dac n lista atributelor de proiecie exist o cheie a relaiei operand R, atunci
relaia rezultat are toate tuplurile distincte, adic relaiile R i P vor avea acelai
cardinal.
2. Dac n lista atributelor de proiecie nu exist o cheie a relaiei operand R, atunci
n relaia rezultat P pot apare tupluri duplicate care vor fi eliminate. n exemplul
prezentat dup eliminarea tuplurilor duplicate din relaia intermediar P , s-a
obinut relaia P care conine dou tupluri distincte.
3. Relaia rezultat P are gradul k, dat de numrul atributelor din list.
4. n termenii limbajului de interogare SQL, operaia de proiecie realizeaz o
decupare pe vertical a tabelei operand R.

7. JOIN este o operaie definit pe dou relaii R
1
i R
2
. Relaia rezultat R
3
va fi
construit prin concatenarea unor tupluri din R
1
cu tupluri din R
2
care satisfac o
anumit condiie (condiia de jonciune - ) specificat explicit n cadrul relaiei.
Condiia de jonciune - este o expresie logic (predicat) specificat asupra
atributelor relaiilor R
1
i R
2
. Condiia de jonciune - poate cuprinde nume de
atribute, constante, operatori logici (and, or, not), operatori aritmetici de comparare
(<, >, =, , , ).

Signatura: latie Re resie exp latie Re latie Re

Fie relaiile ] B , A [ R
1 1
= i ] C , B [ R
2 2
= , unde B
1
i B
2
sunt atribute definite pe
acelai domeniu. Atunci:

( ) ( ) { }
2 1 2 1 2 1 3
B t B t si R R t | t R R R

= =

Observaie. Jonciunea se poate exprima n funcie de operaiile de baz: produs
cartezian i selecie astfel:

( )
2 1 2 1
R R R R =









R
1
R
2
R
3

23
Exemplu.
2 1 3
R R R

= unde : R
1
.A > R
2
.A

R
1
A B C
a x c
b y c
d z g

R
2
D E A
0 11 a
1 13 a
3 11 a
4 11 d
6 12 d
7 13 c

R
3
R
1
. A B C D E R
2
. A
b y c 0 11 a
b y c 1 13 a
b y c 3 11 a
d z g 0 11 a
d z g 1 13 a
d z g 3 11 a
d z g 7 13 c

Sintaxa:

THETA - JOIN (R
1
, R
2
; - expresie) - rezultatul este o relaie.


n continuare se prezint patru forme ale operaiei de jonciune.


7.1. EQUI JOIN este un caz particular al lui THETA JOIN , cnd este egalitate.


Exemplu.
2 1 3
R R R

= unde : R
1
.A = R
2
.A

R
1
A B C
a x c
b y c
d z a

R
2
D E A
0 11 a
1 13 a
3 11 a
4 11 d
6 12 d
7 13 c

R
3
R
1
. A B C D E R
2
. A
a x c 0 11 a
a x c 1 13 a
a x c 3 11 a
d z a 4 11 d
d z a 6 12 d

Sintaxa:

EQUI - JOIN (R
1
, R
2
; - expresie) - rezultatul este o relaie.

7.2. NATURAL JOIN este o jonciune pe egalitate (EQUI JOIN) pentru toate
atributele cu acelai nume din cele dou relaii, urmat de o proiecie pe reuniunea
atributelor celor dou relaii.
n cazul EQUI JOIN schema relaiei rezultat conine toate atributele celor doi
operanzi i rezult c n fiecare tuplu al relaiei rezultat vor exista cel puin dou
valori egale. Introducerea jonciunii naturale va elimina aceast redundan.

Schema relaiei rezultat R
3
se obine prin reuniunea atributelor celor dou relaii R
1
i
R
2
(atributele cu acelai nume se iau o singur dat), iar extensia relaiei R
3
va conine
24
tuplurile obinute prin concatenarea tuplurilor din R
1
cu tupluri din R
2
, care au
aceleai valori pentru atributele cu acelai nume.

Jonciunea natural este jonciunea cea mai utilizat n practic i poate fi definit cu
ajutorul operaiilor de baz: proiecie, selecie i produs cartezian.
Dac se noteaz cu:
- condiia de egalitate ntre valorile atributelor din intersecia schemelor relaiilor
R
1
i R
2
(coloanele comune),
atr - reuniunea atributelor celor dou scheme (atributele cu acelai nume se iau o
singur dat),
atunci:

( ) ( )
2 1 atr 2 1 3
R R R R R = =



Exemple.

A. Se dau relaiile: R
1
[A, B, C] i R
2
[B, C, D]
( ) ( ) C . R C . R and B . R B . R
2 1 2 1
= = =
atr = A, B, C, D

R
1
A B C
a b c
d b c
b b f
c a d

R
2
B C D
b c d
b c e
a d b

R
3
A B C D
a b c d
a b c e
d b c d
d b c e
c a d b


B. Se dau relaiile: R
1
[A, B, C] i R
2
[D, E, A]
A . R A . R
2 1
= =
atr = A, B, C, D, E


R
1
A B C
a x c
b y c
d z a

R
2
D E A
0 11 a
1 13 a
3 11 a
4 11 d
6 12 d
7 13 c

R
3
A B C D E
a x c 0 11
a x c 1 13
a x c 3 11
d z a 4 11
d z a 6 12

Sintaxa:

NATURAL - JOIN (R
1
, R
2
; atribut(e) jonciune
*
) - rezultatul este o relaie.

* pentru mrirea claritii va apare atributul / atributele de jonciune.
25

Observaie.
Selecia este un caz particular de jonciune natural a unei relaii cu o relaie constant.
nelegem prin relaie constant o relaie care are un singur tuplu, eventual redus la o
singur valoare.



7.3. SEMI JOIN - este jonciunea dintre dou relaii R
1
i R
2
, urmat de o proiecie pe
atributele relaiei R
1
. Semi jonciunea conserv atributele unei relaii participante la
jonciune (R
1
). Semi jonciunea mai poate fi privit ca o generalizare a operaiei de
selecie, rezultatul fiind o selecie asupra relaiei R
1
, realizat pe baza valorilor din R
2

ale atributului de jonciune.


Exemplu.
2 1 3
R R R

= unde : R
1
.A = R
2
.A

R
1
A B C
a x c
b y c
d z a

R
2
D E A
0 11 a
1 13 a
3 11 a
4 11 d
6 12 d
7 13 c

R
3
A B C
a x c
a x c
a x c
d z a
d z a

Sintaxa:

SEMI - JOIN (R
1
, R
2
; - expresie) - rezultatul este o relaie.

Observaie.
Considerm jonciunea natural dintre ] B , A [ R
1 1
= i ] C , B [ R
2 2
= , unde B
1
i
B
2
sunt atributele de jonciune.

Dac B
1
= B
2
= , atunci jonciunea corespunde produsului cartezian.
Dac A = C = , atunci jonciunea corespunde interseciei.
Dac A = sau C = (dar nu amndou), atunci operaia este o semi-
jonciune.

R
1
R
2
R
3

26

7.4. OUTER JOIN. Jonciunea dintre dou relaii R
1
i R
2
poate conduce la pierdere de
tupluri, dac relaiile participante la jonciune nu au proiecii identice pe atributul de
jonciune, adic nu au aceleai valori n relaiile care se joncioneaz. Relaia rezultat
R
3
conine jonciunea natural dintre R
1
i R
2
, la care se adaug tuplurile din R
1
i R
2
,
care nu au participat la jonciune. n aceste tupluri se va atribui valorea null pentru
atributele relaiei corespondente.




Exemplu.
2 ext 1 3
R R R =

R
1
A B C
a x c
b y c
d z a

R
2
D E A
0 11 a
1 13 a
3 11 a
4 11 d
6 12 d
7 13 c


R
3
A B C D E
a x c 0 11
a x c 1 13
a x c 3 11
d z a 4 11
d z a 6 12
b y c null null
c null null 7 13


Observaii. n urma jonciunii naturale se pierd informaiile din tuplurile < b, y, c > din
R
1
i < 7, 13, c > din R
2
. Aceste tupluri se adaug n cazul jonciunii externe i se
completeaz cu null pe atributele relaiei corespondente.

Sintaxa:

OUTER - JOIN (R
1
, R
2
; atribut(e) jonciune) - rezultatul este o relaie.


8. DIVISION - este o operaie definit pe dou relaii care au schema R
1
[A
1
,
A
2
,..., A
n
] i R
2
[A
p+1
, A
p+2
,..., A
n
]. Relaia rezultat
2 1 3
R R R = are schema R
3
[A
1
,
A
2
,..., A
p
] i este format din toate tuplurile care, concatenate cu fiecare tuplu din R
2
,
dau ntotdeauna un tuplu din R
1
.

Notm: ATR
1
= {A
1
, A
2
,..., A
p+1
, A
p+2
,..., A
n
}
ATR
2
= {A
p+1
, A
p+2
,..., A
n
}
R
1
R
2
R
3
ext
27
Definiia 1.
2 1
R R t dac
1 1 2 2
R t R t , astfel nct ( ) t t
1 ATR ATR
2 1
=


i ( )
2 1 ATR
t t
2
= .

Definiia 2. Diviziunea se poate exprima n funcie de operaiile de baz: produs
cartezian, diferen i proiecie astfel:

( ) ( ) ( ) ( )
1 2 1 ATR ATR ATR ATR 1 ATR ATR 2 1
R R R R R R
2 1 2 1 2 1
=




Signatura: latie Re latie Re latie Re

R
3

R
1
R
2

Problem (Exemplu de diviziune).

Fie relaia R
1
[K, P] unde atributul K are ca valori codurile angajailor unui institut de
cercetare, iar atributul P conine codurile proiectelor n derulare. Un cercettor poate
lucra la unul sau mai multe proiecte. S se determine codurile angajailor angrenai
simultan n proiectele P3 i P4.

Rezolvare.

Construim relaia R
2
[P] care va conine dou tupluri: <P3> i <P4>.
Codurile angajailor care lucreaz la proiectele P3 i P4 sunt date de rezultatul diviziunii
2 1
R R .



R
1
K P
17 P1
17 P2
17 P3
17 P4
29 P1
29 P3
53 P3
53 P4
80 P3

R
2
P
P3
P4
28
Calculm diviziunea conform definiiei 2:
2 1 2 1
Q Q R R =

Pasul 1. Calculm ( )
1 ATR ATR 1
R Q
2 1

= Pasul 2. Calculm
2 1
R Q S =

Q
1
K
17
29
53
80
S

K P
17 P3
29 P3
53 P3
80 P3
17 P4
29 P4
53 P4
80 P4



Pasul 3. Calculm
1
R S T = Pasul 4. Calculm ( ) T Q
2 1
ATR ATR 2
=

T

K P
29 P4
80 P4


T

K
29
80



Pasul 5. Calculm
2 1 2 1
Q Q R R =

R
1
:R
2
K
17
53


Rezultatul interogrii: angajaii cu codul <17> i <53> lucreaz simultan n proiectele
<P3> i <P4>.


Sintaxa:

DIVISION (R
1
, R
2
) - rezultatul este o relaie.








29
2.2 OPERAII DE CALCUL

La operaiile descrise anterior se pot aduga operaii de calcul pe relaii. Aceste operaii
sunt justificate de numeroasele interogri (cereri) care necesit operaii de calcul.
Operaiile de calcul sunt implementate n toate limbajele de interogare. Aceti operatori
de calcul formeaz deci o extensie a operatorilor de baz i nu pot fi exprimai cu ajutorul
acestora.

1. COUNT - este o operaie care permite numrarea tuplurilor dintr-o relaie (liniilor
dintr-o tabel) care au aceeai valoare pe atributul considerat (sau aceleai valori pe
atributele considerate). Relaia rezultant va conine numai atributul (atributele) de
regrupare X
i
, iar tuplurile vor fi formate din valorile distincte i numrul de apariii.

Notm:
) R ( COUNT T
n 1
X ,..., X
= , unde X
1
,...,X
n
sunt atributele de regrupare.
T

R

Operatorul COUNT

Exemplu.

R A B C
a n 17
b o 14
c n 17
d p 13
e m 20
f m 10

Count
B
(R) B Count
n 2
m 2
o 1
p 1

Count
B,C
(R) B C Count
n 17 2
m 20 1
m 10 1
o 14 1
p 13 1

Dac nu este precizat niciun atribut de regrupare, operaia COUNT va determina numrul
de tupluri din relaie:

Count(R) Count
6

Sintaxa:

COUNT (R; X
1
, X
2
, ..., X
n
) - rezultatul este o relaie;
Count...

30

COUNT (R) - rezultatul este un numr (poate fi interpretat i ca o relaie cu un
singur atribut i un singur tuplu, care are ca valoare numrul de linii din tabel).

2. SUM este o operaie care permite efectuarea sumei valorilor atributului Y pentru
fiecare din valorile diferite ale atributelor de regrupare X
1
,...,X
n
. Atributul Y trebuie s fie
numeric.

Notm:
) Y , R ( SUM T
n 1
X ,..., X
= , unde X
1
,...,X
n
sunt atributele de regrupare.


Dac nu este precizat niciun atribut de regrupare, operaia SUM va determina suma
valorilor atributului Y.
T

R

Operatorul SUM
Exemplu.

R A B C
a n 17
b o 14
c n 17
d p 13
e m 20
f m 10

Sum
B
(R,C) B Sum
n 34
m 30
o 14
p 13

Sum(R,C) Sum
91


Sintaxa:

SUM (R, Y; X
1
, X
2
, ..., X
n
) - rezultatul este o relaie;

SUM (R, Y) - rezultatul este un numr (poate fi interpretat i ca o relaie cu un
singur atribut i un singur tuplu, care are ca valoare suma valorilor atributului Y
din toate liniile tabelei).

Sum...
31
3. MEAN este o operaie care permite efectuarea mediei aritmetice a valorilor
atributului Y pentru fiecare din valorile diferite ale atributelor de regrupare X
1
,...,X
n
.
Atributul Y trebuie s fie numeric.

Notm:
) Y , R ( MEAN T
n 1
X ,..., X
= , unde X
1
,...,X
n
sunt atributele de regrupare.

Dac nu este precizat niciun atribut de regrupare, operaia MEAN va determina media
aritmetic a valorilor atributului Y din toat relaia.

T

R

Operatorul MEAN

Exemplu.

R A B C
a n 17
b o 9
c p 21
d n 13
e p 20
f p 10

Mean
B
(R,C) B Sum
n 15
o 9
p 17

Mean(R,C) Sum
15


Sintaxa:

MEAN (R, Y; X
1
, X
2
, ..., X
n
) - rezultatul este o relaie;

MEAN (R, Y) - rezultatul este un numr (poate fi interpretat i ca o relaie
cu un singur atribut i un singur tuplu, care are ca valoare media aritmetic a
valorilor atributului Y din toate liniile tabelei).


4. MAX i MIN - este o operaie care permite determinarea valorii maxime / minime a
atributului Y pentru fiecare din valorile diferite ale atributelor de regrupare X
1
,...,X
n
.
Atributul Y trebuie s fie numeric.

Mean..
..m...
32
Notm:
) Y , R ( MAX T
n 1
X ,..., X
= , unde X
1
,...,X
n
sunt atributele de regrupare.

) Y , R ( MIN T
n 1
X ,..., X
= , unde X
1
,...,X
n
sunt atributele de regrupare.

Dac nu este precizat niciun atribut de regrupare, operaia MAX (MIN) va determina
maximul (minimul) valorilor atributului Y din toat relaia.



T

R

Operatorul MAX (MIN)



Exemplu.

R A B C
a n 17
b o 9
c p 21
d n 13
e p 20
f p 10

Min
B
(R,C) B Min
n 13
o 9
p 10

Max(R,C) Max
21


Sintaxa:

MAX (R, Y; X
1
, X
2
, ..., X
n
) - rezultatul este o relaie;

MAX (R, Y) - rezultatul este un numr (poate fi interpretat i ca o relaie cu un
singur atribut i un singur tuplu, care are ca valoare maximul valorilor atributului
Y din toate liniile tabelei).

Observaie. Pentru operaia MIN sintaxa este analoag.


Max...

33
CAP. 3. LIMBAJUL SQL


SQL (Structured Query Language - Limbaj Structurat de Interogare) este un limbaj de
programare neprocedural specific bazelor de date.
Limbajul SQL este standardizat ANSI-ISO (fiind cel mai popular limbaj de manipulare a
bazelor de date relaionale) i poate fi utilizat n: MySQL, SQL Server, MS Access,
Oracle, DB2, etc.

Pe lng versiunile standardizate ale limbajului SQL, exist i o mulime de dialecte i
variante caracteristice diferitelor SGBD-uri.

Limbajul SQL permite:
manipularea structurii bazelor de date
manipularea datelor coninute

Principalele instuciuni de definire a datelor sunt:
CREATE TABLE
ALTER TABLE
DROP TABLE


3.1. Instruciunea CREATE TABLE

Instruciunea CREATE TABLE este utilizat pentru a crea o nou tabel. Aceast opiune
este utilizat cu precdere dac mediul de lucru nu posed instrumente pentru crearea i
modificarea tabelelor ntr-o manier mai facil, aa cum are spre exemplu Microsoft
Access.

Sintaxa general a instruciunii CREATE TABLE este:

CREATE TABLE nume_tabela (c1 d1 [constrngeri_coloan],
c2 d2 [constrngeri_coloan],
...
cn dn [constrngeri_coloan],
[constrngeri_coloan])

unde: c1, c2, ... , cn - reprezint coloanele tabelei
d1, d2, ... , dn - reprezint domeniile fiecrui cmp

Exemplul 1. Dac dorim crearea unei tabele cu numele angajati1, cu urmtoarele
cmpuri:
34


vom avea:

CREATE TABLE angajati1 (cod_sal int, nume varchar(250), adresa varchar (250),
localitate varchar(250), sal_brut int, cod_dep varchar (10),
data_angajarii date)



Rezultatul afiat pentru exemplul 1


3.2. Instruciunea ALTER TABLE

Pentru modificarea strcturii unei tabele se utilizeaz instruciunea ALTER TABLE.
Aceast instruciune permite adugarea sau tergerea unor cmpuri, modificarea
domeniilor unor cmpuri, precum i adugarea sau tergerea unor constrngeri ale tabelei.

Instruciunea ALTER TABLE are urmtoarele sintaxe:
- pentru adugarea unui nou cmp:

ALTER TABLE nume_tabela ADD nume_coloan domeniu

- pentru tergerea unui cmp

ALTER TABLE nume_tabela DROP nume_coloan

- pentru modificarea constrngerilor unu cmp

ALTER TABLE nume_tabela
ALTER COLUMN nume_coloan domeniu

Exemplul 2. Dac dorim adugarea n tabela angajati1 a unui nou cmp numit bonus de
tip integer vom avea:

ALTER TABLE angajati1 ADD bonus int
35



Rezultatul afiat pentru exemplul 2

Exemplul 3. Dac dorim, n tabela angajati1, modificarea cmpului numit bonus din
integer n tip de caractere cu lungimea maxima de 10 caractere vom avea:

ALTER TABLE angajati1 ALTER COLUMN bonus varchar(10)





Rezultatul afiat pentru exemplul 3

Exemplul 4. Dac dorim tergerea din tabela angajati1 a cmpului numit bonus vom
avea:

ALTER TABLE angajati1
DROP bonus


36


Rezultatul afiat pentru exemplul 4


3.3. Instruciunea DROP TABLE

Pentru tergerea unei tabele se utilizeaz instruciunea DROP TABLE. Aceast
instruciune va face tergerea efectiv a ntregii tabele cu toate datele coninute. Sintaxa
general a instruciunii DROP TABLE este:

DROP TABLE nume_tabela

Exemplul 5. Dac dorim tergerea tabelei angajati1 vom avea:

DROP TABLE angajati1

Principalele instruciuni de manipulare a datelor sunt:
SELECT
INSERT
UPDATE
DELETE


3.4. Instruciunea SELECT

Instruciunea SELECT este instruciunea de interogare a datelor din limbajul SQL.
Utilizarea acestei instruciuni genereaz o tabel virtual, numit vedere (query). n query
se regsesc toate informaiile dorite din unul sau mai multe tabele ale bazei de date.

Sintaxa general a instruciunii SELECT este:

SELECT [DISTINCT] c1, c2, ... , cn
[FROM t1, t2, ... , tm] [WHERE condiie] [clauze secundare]

unde: c1, c2, ... , cn - sunt coloanele dorite din tabelele specficate n clauza FROM
t1, t2, ... , tm - sunt tabelele din care se face selecia

37
Rezultatul seleciei este format din coloanele c1, c2, ... , cn cu datele rezultate din
produsul cartezian al tabelelor t1, t2, ... , tm pentru care se respect eventuala condiie
specificat n clauza WHERE.

Clauza SELECT definete coloanele tabelei rezultat.
Clauza FROM indic unu sau mai multe tabele ce conin datele dorite.
Clauza WHERE definte condiia sau condiiile ce trebuie ndepline de datele din
clauza SELECT.

ntre clauzele secundare amintim: ORDER BY, GROUP BY, HAVING.

Exemplele urmtoare vor fi construite pentru tabela ANGAJATI:



Tabela ANGAJATI

Exemplul 6. Dac dorim afiarea tuturor datelor din tabel vom avea:

SELECT cod_sal, nume, adresa, localitate, sal_brut, cod_dep, data_angajarii
FROM angajati

sau

SELECT * FROM salariati

Observaie. n acest al doilea caz, simblul * nlocuiete toate cmpurile din tabel.

Exemplul 7. Dac dorim afiarea tuturor angajailor din localitatea Brasov ce au salariul
mai mare de 1200 vom avea:

SELECT cod_sal, nume, localitate, sal_brut
FROM angajati
WHERE localitate="brasov" AND salariu_brut>1200

38


Rezultatul afiat pentru exemplul 7

Exemplul 8. Dac dorim afiarea tuturor persoanelor angajate dup data de 01.01.2009
vom avea:

SELECT cod_sal, nume, data_angajarii
FROM angajati
WHERE data_angajarii>=#01-01-2009#



Rezultatul afiat pentru exemplul 8

n clauza SELECT se pot utiliza urmtoarele funcii agregat:
COUNT (numr liniile din tabela rezultat)
SUM (calculeaz suma valorilor dintr-o coloan)
MAX (returneaz valoarea maxim dintr-o coloan)
MIN (returneaz valoarea minim dintr-o coloan)
AVG (returneaz media aritmetic a valorilor dintr-o coloan)

Exemplul 9. Dac dorim afiarea numrului de angajai vom avea:

SELECT count(*)
FROM angajati



Rezultatul afiat pentru exemplul 9




39
Exemplul 10. Dac dorim afiarea mediei aritmetice a salariului brut vom avea:

SELECT AVG(sal_brut)
FROM angajati



Rezultatul afiat pentru exemplul 10

Instruciunea SELECT poate s nu conin nici clauza FROM, dac datele nu sunt
coninute de nicio tabel. n acest caz, instruciunea SELECT conine o list de expresii
pe care le calculeaz.

Exemplul 11. Dac dorim afiarea rezultatului produsului 50x25 vom avea:

SELECT 50*25



Rezultatul afiat pentru exemplul 11

Dac se dorete, n tabela rezultat se pot redenumi coloanele, sau se pot denumi anumite
expresii, utiliznd clauza AS.

Exemplul 12. Dac dorim afiarea rezultatului produsului 50x25, iar numele tabelei s fie
REZULTAT vom avea:

SELECT 50*25 AS rezultat


Rezultatul afiat pentru exemplul 12

Clauza FROM este obligatorie, dac n clauza SELECT se dorete afiarea unor coloane
din tabele. Dac se dorete selectarea unor coloane din tabele diferite, acestea vor fi toate
enumerate n clauza FROM, desprite prin virgul. n cazul n care un cmp apare n mai
mult de o tabel, atunci pentru a se cunoate din ce tabel se dorete respectivul cmp, la
clauza FROM se va specifica i numele tabelei de forma:

nume_tabel.nume_cmp
40
n clauza WHERE se impun toate condiiile necesare pentru datele din tabela rezultat. n
clauza WHERE se pot utiliza i operatorii logici (AND, OR, NOT) i paranteze.

Exemplul 13. Dac dorim afiarea angajailor din Brasov sau Predeal vom avea:

SELECT nume, localitate
FROM angajati
WHERE localitate="brasov" or localitate="predeal"



Rezultatul afiat pentru exemplul 13

Clauza ORDER BY face ordonarea liniilor din tabela rezultat dup coloana ce urmeaz
clauzei. Implicit, ordonarea se face n ordine cresctoare sau alfabetic dac tipul
cmpului dup care se face ordonarea este de tip text. n cazul n care se dorete ordonare
invers lexicografic (descresctoare), atunci numele coloanei trebuie urmat de cuvntul
DESC.

Exemplul 14. Dac dorim afiarea angajailor n ordine descresctoare vom avea:

SELECT nume
FROM angajati
ORDER BY nume DESC



Rezultatul afiat pentru exemplul 14

41
Clauza GROUP BY se utilizeaz pentru gruparea rezultatelor funciilor agregat, n
funcie de valoarea unei sau mai multor coloane. Clauza GROUP BY se utilizeaz la
sfritul instruciunii, fiind urmat de cmpul pentru care se face gruparea rezultatelor
funciei agregat.

Exemplul 15. Dac dorim numrul de angajai din fiecare localitate vom avea:

SELECT COUNT(*) AS numar, localitate
FROM angajati
GROUP BY localitate



Rezultatul afiat pentru exemplul 15

Clauza HAVING se utilizeaz n loc de clauza WHERE, atunci cnd n instruciune se
utilizeaz funcii agregat. Clauza HAVING este asemntoare clauzei WHERE, adic
introduce o condiie pe care trebuie s o respecte liniile din rezultat i n plus permite
utilizarea funciilor agregat n expresia condiional.

Exemplul 16. Dac dorim numrul de angajai din Brasov si Predeal vom avea:

SELECT COUNT(*) AS numar, localitate
FROM angajati
GROUP BY localitate
HAVING localitate="brasov" OR localitate="predeal"



Rezultatul afiat pentru exemplul 16


Subinterogrile reprezint instruciuni SELECT n alte interogri de tip SELECT.
Numim aceast tehnic imbricare. Astfel, instruciunile SELECT se pot imbrica pe mai
multe niveluri, o instruciune avnd ca argument rezultatul unei alte instruciuni, numit
i subinterogare.


42
Exemplul 17. Dac dorim numele angajatului care are salariul egal cu salariul maxim
vom avea:

SELECT nume, sal_brut
FROM angajati
WHERE sal_brut IN
(SELECT MAX(sal_brut) FROM angajati)



Rezultatul afiat pentru exemplul 17

Clauza IN i NOT IN specific dac valorile unui cmp aparin unei mulimi precizate.
Aceast mulime poate fi format prin enumerarea elementelor sau printr-o subinterogare.

Exemplul 18. Dac dorim numele angajailor din Brasov, Bucuresti i Predeal vom avea:

SELECT nume, localitate
FROM angajati
WHERE localitate IN ("brasov", "bucuresti", "predeal")



Rezultatul afiat pentru exemplul 18


3.5. Instruciunea INSERT

Instruciunea INSERT este utilizat pentru introducerea datelor n tabel. Instruciunea
INSERT are urmtoarea sintax:

INSERT INTO nume_tabela (c1,c2,..., cn) VALUES (v1,v2,..., vn)
unde: c1, c2, ... ,cn - reprezint coloanele din tabel n care se vor introduce datele
v1, v2, ... ,vn - reprezint valorile corespunztoare coloanelor c1, c2, ... ,cn

Observaie. ntre valori i numele coloanelor trebuie s existe o coresponden direct.

43
Exemplul 19. Dac dorim introducerea n tabela ANGAJAI a unui nou angajat cu
datele: 18, EMILIA, str. O.Goga nr. 3, bucuresti, 1300, prod, 05.05.2009 vom avea:

INSERT INTO TABLE angajati
VALUES (18, "EMILIA", "str. O.Goga nr. 3", "bucuresti", 1300, " prod", #5/5/2009#);



Rezultatul afiat pentru exemplul 19

Dac se dorete introducerea datelor n alt ordine dect cea implicit a coloanelor din
tabel, sau nu se cunoate aceast ordine, trebuie specificat ordinea cmpurilor dup
numele tabelei.

Exemplul 20. Dac dorim introducerea n tabela ANGAJAI a unui nou angajat cu
datele: 19, str. Agriselor, constanta, raluca, 1300, prod, 10.08..2009 vom avea:

INSERT INTO angajati ( cod_sal, adresa, localitate, nume, sal_brut, cod_dep,
data_angajarii )
VALUES (19, "str. Agriselor nr. 3", "constanta", "RALUCA", 1300, " prod",
#10/8/2009#);



Rezultatul afiat pentru exemplul 20

44
3.6. Instruciunea UPDATE

Instruciunea UPDATE permite modificarea valorilor din coloanele unei tabele pentru
anumite condiii. Sintaxa general este:

UPDATE nume_tabel SET c1=e1 [c2=e2 , ... ,n] [WHERE condiie]

Clauza WHERE impune ca actualizarea valorilor s se fac doar asupra liniilor care
ndeplinesc o serie de condiii. Dac lipsete, se vor modifica toate liniile din tabel.

Exemplul 21. Dac dorim modificarea tuturor salariilor angajailor din departamentul
"prod" la valoarea de 1000 lei vom avea:

UPDATE angajati
SET sal_brut=1000 WHERE cod_dep="prod"



Rezultatul afiat pentru exemplul 21

Valoarea poate fi schimbat i cu valoarea unei expresii calculate. De exemplu:

Exemplul 22. Dac dorim modificarea tuturor salariilor angajailor din departamentul
"conta" n sensul creterii cu 15% vom avea:

UPDATE angajati
SET sal_brut=sal_brut*115/100 WHERE cod_dep="conta"

45


Rezultatul afiat pentru exemplul 22


3.7. Instruciunea DELETE

Instruciunea DELETE este utilizat pentru tergerea uneia sau mai multor linii dintr-o
tabel.
Sintaxa instruciunii DELETE este:

DELETE FROM nume_tabela [WHERE condiie]

Utiliznd aceast instruciune se vor terge toate liniile care ndeplinesc condiia
specificat n clauza WHERE. Dac este omis clauza WHERE se vor terge toate liniile
din tabel.

Exemplul 23. Dac dorim tergerea tuturor angajailor din departamentul "conta" vom
avea:

DELETE FROM angajati
WHERE cod_dep="conta"


46


Rezultatul afiat pentru exemplul 23




































47
CAP. 4. NORMALIZAREA RELAIILOR


1. INTRODUCERE

n activitatea de modelare a bazelor de date problema care se pune este de a stabili
mulimea de relaii care realizeaz o reprezentare fidel a schemei conceptuale, evitnd
incoerena, redundana i pierderile de informaii. Relaiile (tabelele) unei baze de date
se pot stabili n mai multe moduri i de aceea este necesar s existe criterii de evaluare a
calitii relaiilor, pentru ca acestea s asigure integritatea datelor i posibiliti de
interogare performante.

Teoria normalizrii se bazeaz pe observaia c anumite relaii au posibiliti mai bune de
actualizare i interogare dect alte relaii echivalente (care conin aceleai informaii).
Normalizarea relaiilor permite obinerea unei baze de date n care s nu se manifeste
anomalii de actualizare sau stocare.

Pentru a nelege nevoia de normalizare s considerm relaia R care conine informaii
legate de furnizori (cod_funizor, nume_furnizor, localitate, cod_loc) i de produsele care
le ofer (cod_produs, denumire, um, cantitate). Un furnizor poate oferi mai multe
produse, iar un produs poate fi oferit de mai muli furnizori.

R [cod_funizor, cod_produs, nume_furnizor, localitate, cod_loc, denumire, um, cantitate]

Cheia relaiei R este (cod_funizor, cod_produs).

cod_furnizor cod_produs nume_furnizor localit cod_loc denumire um cant
F1 P13 Alfa SRL Brasov 5000 xyz kg 200
F2 P17 Beta SRL Cluj 3000 abc mp 600
F3 P13 Gama SRL Sinaia 2555 xyz kg 800
F1 P17 Alfa SRL Brasov 5000 abc mp 400
F2 P29 Beta SRL Cluj 3000 efg litru 600

Observm c datele despre fiecare furnizor (nume_furnizor, localitate, cod_loc) apar n
fiecare tuplu n care se prezint un produs oferit de un anumit furnizor. Analog, datele
generale despre fiecare produs ( denumire, um) apar n fiecare tuplu n care un furnizor
ofer respectivul produs. Aceste redundane conduc la creterea spaiului de memorare i
la anomalii de actualizare a relaiei.

Anomalii de inserare nu se pot introduce datele generale despre un furnizor
(nume_furnizor, localitate, cod_loc), dac nu exist cel puin un produs pe care acesta
s-l ofere. O alt anomalie de inserare nu putem introduce informaiile generale despre
un produs ( denumire, um), dac nu exist un furnizor care s-l ofere. Aceste anomalii
apar datorit restriciei de integritate care impun ca ntr-o relaie atributele cheie nu pot
s aib valoarea null.

48
Anomalii de tergere dac se terg toate informaiile legate de un furnizor, de exemplu
firma nu mai lucreaz cu furnizorul F2, atunci tuplurile cu cheile <F2, P17> i <F2,
P29> vor fi terse. Se pierd astfel informaiile generale legate de produsul P29,
(denumire, um).

Anomalii de actualizare orice modificare a unei informaii generale legate de un
furnizor trebuie s se propage n toate tuplurile n care apare acel furnizor. Aceasta
mrete timpul de actualizare i crete riscul de incoeren al datelor. Acelai tip de
anomalie apare i n cazul modificrii unei informaii generale despre un produs.

Teoria normalizrii are la baz analiza dependenelor dintre atributele care sunt la
originea fenomenelor de redundan i propune dou scheme de modelare a bazelor de
date relaionale fr anomalii sau pierderi de informaii [Popescu, 1996]:

schema descompunerii schema relaiei universale (relaia universal este
relaia care conine toate atributele care modeleaz sistemul real cercetat) se
descompune prin proiecii succesive n subrelaii; descompunerea se oprete
cnd continuarea ar conduce la pierderi de informaii; procesul de descompunere
este reversibil, ceea ce garanteaz c relaia de plecare (universal) poate fi
regsit prin utilizarea operatorului de jonciune i astfel nicio informaie nu a
fost pierdut;
schema sintezei pornete de la o mulime de atribute independente; pe baza
proprietilor de semantic i legturi ntre atribute se compun relaii care s
evite eventualele anomalii.

Procesul de ameliorare a schemei conceptuale trebuie s satisfac urmtoarele cerine:
s asigure conservarea datelor, adic n schema conceptual final trebuie s
regsim toate datele din cadrul schemei iniiale;
s asigure conservarea dependenelor dintre date, adic n schema conceptual
final fiecare dependen trebuie s aib determinantul i determinatul n
schema aceleiai relaii;
s reprezinte o descompunere minimal a relaiilor iniiale, adic niciuna din
relaiile care compun schema final nu trebuie coninut ntr-o alt relaie din
aceast schem.

Pentru ca informaiile dintr-o baz de date s fie prelucrate ct mai simplu este necesar ca
relaiile s verifice anumite condiii, altfel spus s aib un anumit grad de normalizare.
Forma normal (Normal Form) a unei relaii presupune anumite condiii pe care trebuie
s le ndeplineasc valorile atributelor i dependenele funcionale definite pe aceea
relaie.

E.F.Codd a definit primele trei forme normale (1NF, 2NF, 3NF). Ulterior a fost definit
mai complet 3NF i a primit numele de forma normal Boyce-Codd (BCNF). Formele
normale superioare, definite de R. Fagin, se refer la dependenele multivaloare (4NF) i
dependenele de jonciune (5NF). De remarcat c BCNF, 4NF i 5NF corespund definiiei
unice: orice determinant al unei dependene este o cheie. Diferena este dat de faptul c
49
n cazul BCNF este vorba de dependena funcional, n cazul 4NF de dependena
multivaloare, iar n cazul 5NF de dependena de jonciune [Fotache, 2005].

n continuare ne limitm prezentarea la primele trei forme normale definite de Codd,
considerate n multe lucrri de specialitate a fi suficiente pentru proiectarea corect a
bazelor de date.


2. DEPENDENE FUNCIONALE

Dependena funcional reprezint dependena dintre date prin care se poate identifica un
atribut sau grup de atribute prin intermediul altui atribut sau grup de atribute.

Definiia 4.1. Dependena funcional. Dat o relaie R, spunem c un atribut sau un grup
de atribute Y depinde funcional de un atribut sau grup de atribute X, dac pentru fiecare
valoare a lui X se asociaz o singur valoare a lui Y n orice tuplu din R.
Formal:
( ) ( ) ( ) ( )
2 Y 1 Y 2 X 1 X 2 1
t t t t : avem R t , t = =
sau echivalent: pentru orice tupluri <x, y>, <x, y> din R, x = x y = y.

Vom spune c X determin pe Y sau Y depinde funcional de X i vom nota
X Y .

Atributul (grupul de atribute) X se numete determinant, iar atributul (grupul de atribute)
Y se numete determinat, adic:
determinant determinat.

n cazul exemplului prezentat n introducere identificm urmtoarele dependene
funcionale:

(1) (cod_furnizor, cod_produs) nume_furnizor
(2) (cod_furnizor, cod_produs) localitate
(3) (cod_furnizor, cod_produs) cod_loc
(4) (cod_furnizor, cod_produs) denumire
(5) (cod_furnizor, cod_produs) um
(6) (cod_furnizor, cod_produs) cantitate
(7) cod_furnizor nume_furnizor
(8) cod_furnizor localitate
(9) cod_furnizor cod_loc
(10) cod_produs denumire
(11) cod_produs um
(12) cod_loc localitate




50
Tipuri de dependene funcionale

Definiia 4.2. Dependena funcional trivial.
O dependen funcional X Y este trivial dac X Y .

Definiia 4.3. Dependena funcional parial (dfp).
O dependen funcional X Y este parial dac Y 1 X . i . a X 1 X
Vom numi dependena funcional X1 Y, dependen argument dfp.
Exemplu.
Dependena funcional: (cod_furnizor, cod_produs) nume_furnizor
este parial deoarece se manifest i dependena argument dfp:
cod_furnizor nume_furnizor

Definiia 4.4. Dependena funcional complet (total) (dfc).
O dependen funcional X Y este complet (total) dac nu exist
Y 1 X . i . a X 1 X

Definiia 4.5. Dependena funcional tranzitiv (dft).
O dependen funcional X Y este tranzitiv dac se manifest concomitent
dependenele funcionale: Z X i Z Y.

Exemplu.
Dependena funcional: cod_loc localitate
este tranzitiv deoarece se manifest concomitent i dependenele:
cod_furnizor localitate
cod_furnizor cod_loc

Observaie.
Cheia unei relaii poate fi definit cu ajutorul dependenelor funcionale astfel:
X este o cheie pentru relaia R [X, Y] dac Y depinde funcional de X adic: X Y.
Cheia X este minimal dac dependena funcional X Y este complet.


3. PRIMA FORM NORMAL (1NF)

Definiia 4.6. O relaie este n prima form normal notat (1NF), dac fiecare din
atributele sale are un domeniu atomic (monovaloare). O relaie n 1NF nu conine grupuri
repetitive.

Observaie.
Noiunea de grup repetitiv (mulime de valori) nu exist n modelul relaional.

O relaie nenormalizat poate fi transformat ntr-o relaie 1NF, nlocuind atributul
compus prin atributele simple corespunztoare (spargerea relaiei) sau duplicnd tuplele
de attea ori cte valori exist pentru un atribut dat (spargerea grupului repetitiv).
Exemple de relaii nenormalizate:
51
a) relaie n care un atribut este o relaie

ZBOR [NR_ZBOR, AVION] cu AVION [tip_nava, capacitate]

ZBOR NR_ZBOR AVION
102 (B707, 150)
107 (B737, 180)
108 (AIRB320, 250)
109 (B707, 150)
110 (B747, 300)

Observm c atributul compus AVION din relaia ZBOR este de fapt o relaie cu dou
atribute tip_nava i capacitate (numr de locuri).
Rezultatul trecerii n 1NF prin spargerea relaiei AVION este:

ZBOR 1 NR_ZBOR TIP NAVA CAPCITATE
102 B707 150
107 B737 180
108 AIRB320 250
109 B707 150
110 B747 300

b) relaie n care un atribut este un ansamblu de valori
CATALOG [Nume, Note]

CATALOG NUME NOTE
Einstein 8, 6
Freud 7, 9, 5

Rezultatul trecerii n 1NF, n situaia c numrul maxim de note este cunoscut, prin
spargerea relaiei NOTE este:

CATALOG 1 NUME NOTA 1 NOTA 2 NOTA 3
Einstein 8 6 null
Freud 7 9 5

n cazul spargerii grupului repetitiv NOTE se obine relaia:

CATALOG 2 NUME NOTA
Einstein 8
Einstein 6
Freud 7
Freud 9
Freud 5


52
Teorema 1 (de eliminare a grupurilor repetitive)
Dac R [A
1
, A
2
, ..., A
n
] este o relaie n care A
m+1
, A
m+2
, ..., A
n
formeaz un grup repetitiv,
i {A
1
, A
2
, ..., A
p
} cu p < m este o cheie primar, atunci relaia R se poate descompune n
dou relaii fr grupuri repetitive i pierdere de informaii, astfel:

R1 [A
1
, A
2
, ..., A
m
] = ( ) R
m 2 1
A ,..., A , A


R2 [A
1
, A
2
, ..., A
p
, A
m+1
,..., A
n
] = ( ) R
n 1 m p 2 1
A ,..., A , A ,..., A , A
+


Algoritmul 1NF - de aducere a unei relaii nenormalizate n 1NF
(eliminarea atributelor compuse i repetitive)

Pasul 1. Se trec n relaie n locul atributelor compuse componentele acestora ca atribute
simple.
Pasul 2. Se trec grupurile de atribute repetitive, fiecare ntr-o nou relaie.
Pasul 3. Se introduce n schema fiecrei noi relaii create la Pasul 2 cheia primar a
relaiei din care a fost extras grupul repetitiv.
Pasul 4. Se stabilete cheia primar a fiecrei noi relaii create la Pasul 2. Aceasta va fi
compus din cheia introdus la Pasul 3 (cheia primar iniial) precum i din
unul sau mai multe atribute proprii relaiei.

Exemplu.
Pentru gestionarea crilor dintr-o bibliotec se consider relaia:

CARTE [ cota, nume_autori, titlul, editura, an_apariie, ISBN, cuvinte_cheie]

Cota Nume autori Titlul Editura An
apar.
ISBN Cuvinte-cheie
C104 Ionescu M
Popescu F
Georgescu L
Baze de
date
Economica 2009 978-973-
8204-41-
7
proiectarea bazelor
de date,
SQL Server 2008,
Oracle
C289 Marinescu A Sisteme
informatice
Polirom 2007 978-973-
1978-89-
5
analiza SI,
proiectarea SI,
implementarea SI,
auditul SI

n relaia CARTE (nenormalizat) exist dou grupuri de atribute repetitive: nume_autori
i cuvinte_cheie care creaz mari greuti n stocarea informaiilor i realizarea
interogrilor. Alegem drept cheie primar atributul COTA. Aplicarea Algoritmului 1NF
conduce la urmtoarele relaii:

CARTE 1 [ cota, titlul, editura, an_apariie, ISBN]
AUTORI [ cota, nume autori]
CUVINTE CHEIE [ cota, cuvinte cheie]

53

CARTE 1
Cota Titlul Editura An
aparitie
ISBN
C104 Baze de date Economica 2009 978-973-8204-41-7
C289 Sisteme informatice Polirom 2007 978-973-1978-89-5

AUTORI
Cota Nume autori
C104 Ionescu M
C104 Popescu F
C104 Georgescu L
C289 Marinescu A

CUVINTE CHEIE
Cota Cuvinte cheie
C104 proiectarea bazelor de date
C104 SQL Server 2008
C104 Oracle
C289 analiza SI
C289 proiectarea SI
C289 implementarea SI
C289 auditul SI



4. A DOUA FORM NORMAL (2NF)

Definiia 4.7. O relaie este n a doua form normal notat (2NF), dac relaia este n
(1NF) i oricare dintre atributele care nu aparin cheii primare este complet dependent
funcional de cheie.

Observaie. O relaie n 2NF nu conine dependene funcionale pariale ntre atributele
cheie i celelate atribute.

Exemplu. Redundane care apar n cazul unei relaii 1NF, care nu este 2NF.

Fie R [A, B, C, D] n care cheia primar este (A, B) i se manifest dependenele:

(A, B) C (A, B) D B C

A B C D
a1 b1 c1 d1
a2 b1 c1 d2
a3 b2 c3 d2
a4 b2 c3 d3


54

Teorema 2 ( de descompunere fr pierdere de informaie)
Fie R [A
1
, A
2
, ..., A
n
] o relaie n 1NF i K = {A
1
, A
2
, ..., A
p
} cu p < n este o cheie
primar. Presupunem c exist { } = = K , A ,..., A , A A
n 2 1
, adic este un
atribut noncheie i cu K ( este complet dependent funcional de o
submulime strict de atribute din cheie). Atunci dependena se poate elimina
descompunnd relaia R n urmtoarele dou relaii:

[ ] ( ) R R
1

=

[ ] ( ) R A R
A 2

=

Observaie. Conform teoremei de mai sus, relaia R [A, B, C, D] din exemplul precedent,
n care se manifest dependena parial (A, B) C se descompune fr pierdere de
informaie n:

R
1
[ B, C] i R
2
[A, B, D]


Algoritmul 2NF - de aducere a unei relaii 1NF n 2NF
(eliminarea dependenelor funcionale pariale)

Pasul 1. Pentru fiecare dependen funcional argument dfp se creaz o nou relaie, cu
schema constituit din determinantul i determinatul acestei dependene. Dac
exist mai multe dependene funcionale argument dfp cu acelai determinant se
va crea o singur relaie format din determinant luat o singur dat i
determinaii dependenelor considerate.
Pasul 2. Din relaia iniial se elimin atributul / atributele care formeaz determinatul
dependenelor funcionale argument dfp.
Pasul 3. Se stabilete cheia primar a fiecrei noi relaii create la Pasul 1. Aceasta va fi
format din determinantul dependenei funcionale argument dfp.

Aplicaie.
Pentru evidena autoturismelor nchiriate de o firm clienilor se consider relaia:

AUTO [ nr_client, nume_client, adresa, nr_auto, marca, data ]

Nr client Nume client Adresa Nr auto Marca Data
C234 Smith A Castelului 12, Brasov BV 21 XXI Logan 1.4 22.05.2009
C145 Lungu M Libertatii 14, Predeal BV 19 XIX Ford Focus 17.04.2009
C679 Tudor A Armoniei 23, Iasi CJ 12 XII Audi A6 23.05.2009
C089 Stan D Sadoveanu 45, Cluj CT 07 VII Opel Astra 07.04.2009
C445 Bondescu I Caragiale 66, Arad BV 61 LXI VW Golf 26.04.2009


55

Cheia relaiei este (nr_client, nr_auto), iar dependeele funcionale care se manifest sunt:

(1) (nr_client, nr_auto) nume_client
(2) (nr_client, nr_auto) adresa
(3) (nr_client, nr_auto) marca
(4) (nr_client, nr_auto) data
(5) nr_client nume_client
(6) nr_client adresa
(7) nr_auto marca

Observaie.
- relaia AUTO este n forma normal 1;
- dependena funcional (1) este parial deoarece se manifest i d.f.argument dfp (5);
- dependena funcional (2) este parial deoarece se manifest i d.f.argument dfp (6);
- dependena funcional (3) este parial deoarece se manifest i d.f.argument dfp (7).

Aplicarea Algoritmului 2NF - de aducere a unei relaii 1NF n 2NF bazat pe Teorema 2,
conduce la spargerea relaiei AUTO, n trei relaii n 2NF:

EVIDENTA [ nr_client, nr_auto, data ]
CLIENT [ nr_client, nume_client, adresa ]
AUTO [ nr_auto, marca ]

EVIDENA
Nr client Nr auto Data
C234 BV 21 XXI 22.05.2009
C145 BV 19 XIX 17.04.2009
C679 CJ 12 XII 23.05.2009
C089 CT 07 VII 07.04.2009
C445 BV 61 LXI 26.04.2009

CLIENT
Nr client Nume client Adresa
C234 Smith A Castelului 12, Brasov
C145 Lungu M Libertatii 14, Predeal
C679 Tudor A Armoniei 23, Iasi
C089 Stan D Sadoveanu 45, Cluj
C445 Bondescu I Caragiale 66, Arad

AUTO
Nr auto Marca
BV 21 XXI Logan 1.4
BV 19 XIX Ford Focus
CJ 12 XII Audi A6
CT 07 VII Opel Astra
BV 61 LXI VW Golf

56
5. A TREIA FORM NORMAL (3NF)

Definiia 4.8. O relaie este n a treia form normal notat (3NF), dac relaia este n
(2NF) i oricare dintre atributele care nu aparin cheii primare nu depinde tranzitiv de
cheie.

Observaie. O alt exprimare: orice atribut ce nu aparine cheii primare depinde direct de
cheie.

Fie R o relaie, K cheia primar i presupunem c este un atribut ce depinde tranzitiv de
cheie. Aceasta nseamn c exist un atribut , astfel nct exist dependenele
funcionale:
K i
Deoarece relaia R este n 2NF rezult c este complet dependent funcional de cheia
relaiei i deci = K , adic este un atribut noncheie.

Exemplu. Redundane care apar n cazul unei relaii 2NF, care nu este 3NF.

Fie R [A, B, C] n care cheia primar este A i se manifest dependenele:

A B A C B C

A B C
a1 b1 c1
a2 b1 c1
a3 b2 c2
a4 b2 c2

Teorema 3 - Casey Delobel (de descompunere fr pierdere de informaie)
Fie R [A
1
, A
2
, ..., A
n
] o relaie n 2NF i K este o cheie primar. Dac exist atributul
{ } = = K , A ,..., A , A A
n 2 1
, i cu K ( depinde tranzitiv de cheie),
atunci dependena se poate elimina descompunnd relaia R n urmtoarele dou
relaii:

[ ] ( ) R R
1

=

[ ] ( ) R A R
A 2

=

Observaie. Conform teoremei de mai sus, relaia R [A, B, C] din exemplul precedent, n
care se manifest dependena tranzitiv B C se descompune fr pierdere de
informaie n:

R
1
[B, C] i R
2
[ A, B]


57
Algoritmul 3NF - de aducere a unei relaii 2NF n 3NF
(eliminarea dependenelor funcionale tranzitive)

Pasul 1. Pentru fiecare dependen funcional tranzitiv din cadrul relaiei considerate,
se creaz o nou relaie, format din atributele implicate n aceast dependen.
Pasul 2. Se stabilete cheia primar a fiecrei noi relaii create la Pasul 1.
Pasul 3. Se introduc n relaia iniial n locul atributelor transferate la Pasul 1, cheile
primare detrminate la Pasul 2.

Aplicaie.
Pentru evidena rezultatelor examenului de licen, se consider relaia:

EXAMEN [nr_matricol, nume_student, program_studiu, nota, prof_coordonator, catedra]

Nr matricol Nume student Program Nota Prof coord Catedra
2345 Ionescu M ECTS 9.45 Zamfir R MKTS
5678 Popescu V MK 9.30 Teodorescu N MKTS
7890 Georgescu D CIG 9.70 Oancea C FBC
4567 Constantinescu FB 9.60 Cristea D FBC
3456 Marinescu H CIG 9.20 Andreescu M MNIE

Cheia relaiei este nr_matricol, iar dependeele funcionale care se manifest sunt:

(1) nr_matricol nume_student
(2) nr_matricol program_studii
(3) nr_matricol nota
(4) nr_matricol prof_coordonator
(5) nr_matricol catedra
(6) prof_coordonator catedra

Observaie.
- relaia EXAMEN este n 2NF, deoarece toate valorile atributelor sunt atomice, nu avem
atribute repetitive (1NF) i nu exist dependene funcionale pariale (2NF).
- dependenele (4) i (6) arat ca atributul catedra depinde tranzitiv de cheia primar a
relaiei.

Aplicarea Algoritmului 3NF - de aducere a unei relaii 2NF n 3NF bazat pe Teorema 3,
conduce la spargerea relaiei EXAMEN, n dou relaii n 3NF:

REZULTAT [nr_matricol, nume_student, program_studiu, nota, prof_coordonator]
PROFESOR [prof_coordonator, catedra]






58
REZULTAT
Nr matricol Nume student Program Nota Prof coord
2345 Ionescu M ECTS 9.45 Zamfir R
5678 Popescu V MK 9.30 Teodorescu N
7890 Georgescu D CIG 9.70 Oancea C
4567 Constantinescu FB 9.60 Cristea D
3456 Marinescu H CIG 9.20 Andreescu M

PROFESOR
Prof coord Catedra
Zamfir R MKTS
Teodorescu N MKTS
Oancea C FBC
Cristea D FBC
Andreescu M MNIE


Rezumat.

1NF toate atributele sunt atomice i nu exist atribute repetitive
2NF 1NF + orice atribut noncheie este complet dependent funcional de cheie
(nu exist dependene funcionale pariale)
3NF 2NF + atributele care nu aparin cheii nu depind tranzitiv de cheie
(nu exist dependene funcionale tranzitive /
nu exist dependene funcionale ntre atributele noncheie)






















59
CAP. 5. APLICAII

FIRMA DE COMERCIALIZARE PRODUSE ELECTRONICE

FURNIZORI [cod_furnizor, nume_furnizor, CIF, adresa, localitate, cont, tel, email]
(FURNIZ)

FACTURI_PRIMITE [nr_factura, cod_furnizor, data_factura, valoare, tva_deductibil]
(FACTP)

CLIENTI [cod_client, tip_client, nume_client, adresa, localitate]
(CLI)

PRODUSE [ cod_produs, denumire, um, grupa]
(PROD)

FACTURI_EMISE [nr_factura, data_factura, cod_client, valoare, tva_colectat]
(FACTE)

DETALII_FACTURA [nr_factura, cod_produs, cantitate, pret_unitar]
(FACTD)

P1. Cum se numesc furnizorii din Braov ?

Lista: |cod_furnizor | nume_furnizor | CIF |

AR
R1 = SELECT (FURNIZ; localitate = Brasov)
R2 = PROJECT (R1; cod_furnizor, nume_furnizor, CIF)

MS ACCESS
SELECT cod_furnizor, nume_furnizor, CIF
FROM furniz
WHERE localitate="Brasov";

P2. Lista cu numerele i valorile facturilor primite, ce au fost ntocmite dup 1.03.2009
i au o valoare mai mare de 500 lei?

AR
R1 = SELECT (FACTP; (data_factura > 1.03.2009) and (valoare>500))
R2 = PROJECT (R1; nr_factura, valoare)

MS ACCESS
SELECT nr_factura, valoare
FROM factp
WHERE data_factura>#3/1/2009# AND valoare>500;
60
P3. Care sunt localitile n care firma i are partenerii de afaceri?
Ci clieni exist n fiecare localitate?

AR
R1 = PROJECT (FURNIZ; localitate)
R2 = PROJECT (CLI; localitate)
R3 = UNION (R1, R2)
Q1 = COUNT (CLI; localitate)
Q2 = PROJECT (Q1; localitate, count)

MS ACCESS
SELECT distinct localitate
FROM furniz
UNION (SELECT localitate FROM cli);

SELECT count(*), localitate
FROM cli
GROUP BY localitate;

Dac dorim s vedem ci parteneri comerciali avem in fiecare localitate vom avea:

SELECT Count(*) AS nr, total.localitate
FROM [SELECT cod_furnizor AS cod_partener, localitate FROM furniz
UNION (SELECT cod_client AS cod_partener, localitate FROM cli)]. AS total
GROUP BY total.localitate;


P4. Lista facturilor primite n acest an.

Lista: |nr_factura | data_factura | cod_furnizor | nume_furnizor |

AR
R1 = SELECT (FACTP; data_factura > 1.01.2009)
R2 = NATURAL JOIN (R1, FURNIZ; cod_furnizor)
R3 = PROJECT (R2; nr_factura, data_factura, cod_furnizor, nume_furnizor)

MS ACCESS
SELECT nr_factura, data_factura, factp.cod_furnizor, nume_furnizor
FROM furniz, factp
WHERE factp.cod_furnizor=furniz.cod_furnizor AND data_factura>#1/1/2009#;

Sau:

SELECT nr_factura, data_factura, factp.cod_furnizor, nume_furnizor
FROM furniz, factp
61
WHERE factp.cod_furnizor=furniz.cod_furnizor AND
YEAR(data_factura)=YEAR(DATE());

P5. De la care furnizori s-au primit facturi ntocmite n data de 4.03.2009?

Lista: |nr_factura | cod_furnizor | nume_furnizor |

AR
R1 = SELECT (FACTP; data_factura = 4.03.2009)
R2 = NATURAL JOIN (R1, FURNIZ; cod_furnizor)
R3 = PROJECT (R2; nr_factura, cod_furnizor, nume_furnizor)

Sau:
Q1 = NATURAL JOIN (FACTP, FURNIZ; cod_furnizor)
Q2 = SELECT (Q1; data_factura = 4.03.2009)
Q3 = PROJECT (Q2; nr_factura, cod_furnizor, nume_furnizor)

MS ACCESS
SELECT nr_factura, factp.cod_furnizor, nume_furnizor
FROM factp, furniz
WHERE furniz.cod_furnizor=factp.cod_furnizor AND data_factura=#3/4/2009#;

Sau:

SELECT nr_factura, factp.cod_furnizor, nume_furnizor
FROM factp
INNER JOIN furniz ON furniz.cod_furnizor=factp.cod_furnizor
WHERE data_factura=#3/4/2009#;


P6. n ce localiti se gsesc clienii care au cumprat produsul XYZ?

AR
R1 = SELECT (PROD; denumire = XYZ)
R2 = NATURAL JOIN (R1, FACTD; cod_produs)
R3 = NATURAL JOIN (R2, FACTE; nr_factura)
R4 = NATURAL JOIN (R3, CLI; cod_client)
R5 = PROJECT (R4; localitate)

MS ACCESS
SELECT DISTINCT localitate
FROM cli, prod, facte, pdfe
WHERE facte.cod_client=cli.cod_client
AND facte.nr_factura=pdfe.nr_factura
AND pdfe.cod_produs=prod.cod_produs
AND prod.denumire="xyz";
62
P7. n ce localiti s-a vndut produsul XYZ n perioada 15.04.2009 30.04.2009 ?

AR
R1 = SELECT (PROD; denumire = XYZ)
R2 = NATURAL JOIN (R1, FACTD; cod_produs)
R3 = SELECT (FACTE; (data_factura>14.04.2009) and (data_factura<1.05.2009))
R4 = NATURAL JOIN (R2, R3; nr_factura)
R5 = NATURAL JOIN (R4, CLI; cod_client)
R6 = PROJECT (R5; localitate)

MS ACCESS
SELECT DISTINCT localitate
FROM cli, prod, facte, pdfe
WHERE facte.cod_client=cli.cod_client
AND facte.nr_factura=pdfe.nr_factura
AND pdfe.cod_produs=prod.cod_produs
AND prod.denumire="xyz"
AND data_factura BETWEEN #4/15/2009# AND #4/30/2009#;

Sau:

SELECT DISTINCT localitate
FROM cli, prod, facte, pdfe
WHERE facte.cod_client=cli.cod_client
AND facte.nr_factura=pdfe.nr_factura
AND pdfe.cod_produs=prod.cod_produs
AND prod.denumire="xyz"
AND (data_factura>=#4/15/2009# AND data_factura<=#4/30/2009#);


P8. n care din facturile emise se nregistreaz vnzarea concomitent a tuturor
produselor firmei ?

AR
R1 = PROJECT (FACD; nr_factura, cod_produs)
R2 = PROJECT (PROD; cod_produs)
R3 = DIVISION (R1, R2)

MS ACCESS
SELECT count(*) AS nr_produse, nr_factura
FROM pdfe
GROUP BY nr_factura
HAVING count(*)=(SELECT count(*) FROM prod);


63
P9. n care din facturile emise dup 1 ianuarie 2009 se nregistreaz vnzarea
concomitent a tuturor produselor firmei ?

AR
R1 = NATURAL JOIN (FACTE, FACTD; nr_factura)
R2 = SELECT (R1; data_factura>1.01.2009)
R3 = PROJECT (R2; nr_factura, cod_produs)
R4 = PROJECT (PROD; cod_produs)
R5 = DIVISION (R3, R4)

MS ACCESS
SELECT nr_factura, data_factura
FROM facte
WHERE data_factura>=#01-01-2009# AND nr_factura IN
(SELECT pdfe.nr_factura FROM pdfe, facte GROUP BY pdfe.nr_factura
HAVING count(*)=(SELECT COUNT(*) FROM prod));


P10. Care sunt numerele facturilor emise, n care s-a consemnat vnzarea simultan a
produselor XYZ i ABC ?

AR
R1 = SELECT (PROD; denumire = XYZ)
R2 = NATURAL JOIN (R1, FACTD; cod_produs)
R3 = PROJECT (R2; nr_factura)

R4 = SELECT (PROD; denumire = ABC)
R5 = NATURAL JOIN (R4, FACTD; cod_produs)
R6 = PROJECT (R5; nr_factura)

R7 = INTERSECT (R3, R6)

Varianta 2
R1 = PROJECT (FACTD; nr_factura, cod_produs)
R2 = SELECT (PROD; (denumire = XYZ) or (denumire = ABC))
R3 = PROJECT (R2; cod_produs)
R4 = DIVISION (R1, R3)

MS ACCESS
SELECT DISTINCT facte.nr_factura
FROM cli, prod, facte, pdfe
WHERE facte.cod_client=cli.cod_client
AND facte.nr_factura=pdfe.nr_factura
AND pdfe.cod_produs=prod.cod_produs
AND (prod.denumire="xyz" OR prod.denumire="abc");

64
Sau:

SELECT DISTINCT facte.nr_factura
FROM cli, prod, facte, pdfe
WHERE facte.cod_client=cli.cod_client
AND facte.nr_factura=pdfe.nr_factura
AND pdfe.cod_produs=prod.cod_produs
AND prod.denumire IN ("xyz","abc");

Sau:

SELECT DISTINCT facte.nr_factura
FROM cli, facte, pdfe,
[SELECT * FROM prod WHERE prod.denumire IN ("xyz","abc")]. AS tmp
WHERE facte.cod_client=cli.cod_client
AND facte.nr_factura=pdfe.nr_factura
AND pdfe.cod_produs=prod.cod_produs;


P11. Care este valoarea total a facturilor emise n luna mai 2009 pentru fiecare
client?

Lista: |cod_client | nume_client | valoare totala |

AR
R1 = SELECT (FACTE; (data_factura 01.05.2009) and (data_factura 31.05.2009))
R2 = SUM (R1, valoare; cod_client)
R3 = NATURAL JOIN (R2, CLI; cod_client)
R4 = PROJECT (R3; cod_client, nume_client, sum)

MS ACCESS
SELECT tmp.total, tmp.cod_client, nume_client
FROM cli,
[SELECT sum(valoare) AS total, facte.cod_client FROM facte
WHERE year(data_factura)=2009 AND month(data_factura)=5
GROUP BY facte.cod_client]. AS tmp
WHERE tmp.cod_client=cli.cod_client;


P12. Care este valoarea total a facturilor emise n luna mai 2009 pentru fiecare client
persoan fizic?

Lista: |cod_client | nume_client | valoare totala |

AR
R1 = SELECT (FACTE; (data_factura 01.05.2009) and (data_factura 31.05.2009))
65
R2 = SUM (R1, valoare; cod_client)
R3 = SELECT (CLI; tip_client = F)
R4 = NATURAL JOIN (R2, R3; cod_client)
R5 = PROJECT (R4; cod_client, nume_client, sum)

MS ACCESS
SELECT tmp.total, tmp.cod_client, nume_client
FROM cli,
[SELECT sum(valoare) AS total, cod_client FROM facte
WHERE year(data_factura)=2009 and month(data_factura)=5 and cod_client
IN (SELECT cod_client FROM cli WHERE tip_client="f")
GROUP BY cod_client]. AS tmp
WHERE tmp.cod_client=cli.cod_client;

P13. Care sunt valorile totale TVA colectat i TVA deductibil n luna mai 2009?

AR
R1 = SELECT (FACTE; (data_factura 01.05.2009) and (data_factura 31.05.2009))
R2 = SUM (R1, tva_colectat)
Q1 = SELECT (FACTP; (data_factura 01.05.2009) and (data_factura 31.05.2009))
Q2 = SUM (Q1, tva_deductibil)

MS ACCESS
(SELECT sum(factp.valoare*19/100) AS tva FROM factp)
UNION (SELECT sum(facte.valoare*19/100) AS tva FROM facte);

P14. Care este valoarea maxim a facturilor emise n luna mai 2009 pentru fiecare
client persoan juridic?

Lista: |cod_client | nume_client | valoare maxim factur |

AR
R1 = SELECT (FACTE; (data_factura 01.05.2009) and (data_factura 31.05.2009))
R2 = MAX (R1, valoare; cod_client)
R3 = SELECT (CLI; tip_client = J)
R4 = NATURAL JOIN (R2, R3; cod_client)
R5 = PROJECT (R4; cod_client, nume_client, max)

MS ACCESS
SELECT tmp.total, tmp.cod_client, nume_client
FROM cli,
[SELECT MAX(valoare) AS total, cod_client FROM facte WHERE cod_client
IN (SELECT cod_client FROM cli WHERE tip_client="j")
AND YEAR(data_factura)=2009
AND MONTH(data_factura)=5 GROUP BY cod_client]. AS tmp
WHERE tmp.cod_client=cli.cod_client;
66
BIBLIOGRAFIE

1. AIRINEI D., Depozite de date, Editura Polirom, Iai, 2002.
2. BSC O., Baze de date, Editura ALL, Bucureti, 1997.
3. CONNOLLY Th., .a., Baze de date. Proiectare, Implementare, Gestionare,
Editura Teora, Bucureti, 2001.
4. CONNOLLY Th., .a., Database Systems, Addison-Wesley, 2002.
5. DATE C.J., Baze de date, Editura Plus, Bucureti, 2005.
6. DOLLINGER R., Baze de date i gestiunea tranzaciilor, Editura Albastr,
Cluj Napoca, 1998.
7. DOLLINGER R., Utilizarea sistemului SQL Server, Editura Albastr,
Cluj Napoca, 2001.
8. EAGLESTONE B., .a., Web Database Systems, Mc Graw Hill Book Company,
Londra, 2001.
9. FLORESCU V., .a., Baze de date, Editura Economic, Bucureti, 1999.
10. FOTACHE M., Baze de date relaionale, Editura Junimea, Iai, 1997.
11. FOTACHE M., SQL, Editura Polirom, Iai, 2001.
12. FOTACHE M., Proiectarea bazelor de date, Editura Polirom, 2005.
13. Grupul BDASEIG, Baze de date. Fundamente teoretice i practice,
Editura Infomega, Bucureti, 2002.
14. HERNANDEZ M., Proiectarea bazelor de date, Ed. Teora, 2003.
15. HORGA M., .a., Limbajul SQL n Oracle i Visual FoxPro,
Editura Bibliotheca, Trgovite, 2007.
16. IONESCU F., Baze de date relaionale i aplicaii, Editura Tehnic,
Bucureti, 2004.
17. LUNGU I., .a., Baze de date. Organizare, proiectare i implementare,
Editura ALL Educational, Bucureti, 1995.
18. LUNGU I., .a., Baze de date. Sistemul ORACLE, Ed. Economic,
Bucureti, 2002.
19. LUNGU I., Baze de date ORACLE. Limbajul SQL, Editura ASE,
Bucureti, 2005.
20. MEIER A., Introduction pratique aux bases de donnes relationnelles,
Ed. Springer France, 2006
21. MIRANDA S.M., BUSTA J.M., Lart des bases de donnes, Ed. Eyrolles,
Paris, 1988.
22. PASCU C., .a., Totul despre SQL, Editura Tehnic, Bucureti, 1994.
23. POPA GHE., .a., Sisteme de gestiune a bazelor de date, Editura Cison,
Bucureti, 1996.
24. POPESCU I., Baze de date relaionale, Editura. Universitii din Bucureti,
Bucureti, 1996.
25. POPESCU I., ORACLE 8. Prelucrarea avansat a informaiei, Ed. Tehnic,
Bucureti,1999.
26. POPESCU I., Modelarea bazelor de date, Editura Tehnic, Bucureti, 2001.
27. POPESCU I., .a., Programare avansat n ORACLE 9i, Editura Tehnic,
Bucureti, 2004.

67
28. REBOUL G., Informatique de gestion. Analyse et modle relationnel,
Ed. Dunod, Paris, 1997.
29. STANCIU A., .a., Baze de date. Introducere n SQL SERVER 2008,
Editura Infomega, Bucureti, 2008.
30. STANCIU A., .a., Baze de date Access 2007, Editura Infomega, Bucureti, 2009.
31. TEFAN V., Tehnologii orientate obiect pentru baze de date relaionale,
Editura Infomega, Bucureti, 2006.
32. MBULEA L., Structuri de date i baze de date, Universitatea Babe-Bolyai
Cluj Napoca, 1992.
33. VELICANU M., .a., Sisteme de gestiune a bazelor de date, Editura Petrion,
Bucureti, 2000.
34. VELICANU M., .a., Sisteme de baze de date. Teorie i practic, Editura Petrion,
Bucureti, 2003.

S-ar putea să vă placă și