Documente Academic
Documente Profesional
Documente Cultură
SGBD PDF
SGBD PDF
Utilizatori
Programe i aplicatii
Management System) este un pachet software de nivel nalt care permite proiectarea,
construirea i administrarea bazelor de date dedicate rezolvrii problemelor din cele
mai variate domenii ale vieii reale.
Exemple
IMS, DB2 (pn la DB9, de la IBM), Ingres II (de la Computer Associates International
Inc.), Oracle 8i (de la Oracle Corporation), Ms Access (studiat n clasa a X-a), FoxPro
(de la Microsoft), Paradox, Visual dBase (de la Borland), Sybase Adapted Server
(de la Sybase Inc.), IRIS (de la Hewlett-Packard).
Atenie
Nu orice colecie de date este o baz de date. De exemplu, lista crilor dintr-o
bibliotec NU este o baz de date ci un simplu inventar de obiecte, o list, un tabel.
Prin urmare, fa de un inventar (un tabel), o baz de date are urmtoarele proprieti:
este o colecie de date coerent din punct de vedere logic i avnd un neles
intrinsec (de exemplu: din baza de date asociat bibliotecii liceului nu vor face parte
crile de telefon sau lista de materiale didactice din laboratorul de chimie);
Cuvntul dat este de origine latin i provine de la verbul a da. n limba englez,
substantivul dat (date, la plural) se traduce prin datum (data, la plural). Exemple de
date sunt: cantitile de mere obinute anual ntr-o livad de pomi fructiferi, activitile
turistice propuse de ghid participanilor la o excursie; modificrile climatice suferite de o
regiune a globului terestru de-a lungul unui numr de ani, cursul bancar al unei valute
de-a lungul unei luni sau a unui an calendaristic etc.
Exist o diferen esenial ntre date, informaii i cunotine:
1. datele sunt informaii primare care au fost doar culese i inregistrate;
2. informaiile sunt date prelucrate, structurate (validate, corectate, organizate,
sortate, relaionate);
3. cunotinele sunt informaii contextualizate.
Arhitectura sistemelor de gestiune a bazelor de date este puternic determinat de
modelul de date al bazelor de date. Dincolo de definiiile date pn acum, ce este de
fapt o baz de date? Este un obiect (asemenea numerelor, funciilor, mulimilor)? Este
o metod (asemenea algoritmilor, procedurilor)?
O baz de date este n primul rnd un model al microuniversului la care se
refer.
Model = (n sens strict) un sistem teoretic sau material cu ajutorul cruia pot fi studiate
indirect proprietile i transformrile unui alt sistem, mai complex, cu care primul
sistem prezint o analogie;
= (n sens larg) ceea ce poate servi ca orientare pentru reproduceri (un tipar). (cf. DEX)
O baz de date ofer un anumit grad de abstractizare a datelor (asemenea celor mai
multe limbaje de programare), ascunznd detaliile de implementare, detalii care nu
sunt necesare celor mai muli dintre utilizatori. Cu alte cuvinte, programele specifice
unei baze de date nu depind de modul de stocare i accesare a datelor la nivel fizic.
Acest concept se numete independen a datelor, se realizeaz cu ajutorul unui
model de date (Data Model1) i este principalul mecanism care asigur partajarea
datelor din baza de date ntre diferitele aplicaii care le acceseaz.
Model de date = un ansamblu format din:
1) o colecie de concepte necesare pentru descrierea structurii bazei de date (a
tipurilor de date incluse n baza de date, a relaiilor dintre ele i a restriciilor
(Constraints) pe care trebuie s le respecte);
2) un set de operaii de baz (care s specifice modul de efectuare a extragerii i
actualizrii datelor din baza de date).
(a)
(b)
legaturi de tip pointer (adrese de locaii fizice de memorie). Inregistrrile care formau
baza de date erau organizate:
n modelul ierarhic: ca o mulime de arbori;
n modelul reea: ca o mulime de grafuri.
Ambele modele prerelaionale permiteau accesul la date de-a lungul unor drumuri
(ci) predefinite, explicit stabilite la nivelul programelor de aplicaii (de unde i numele
de modele navigante). Ca urmare, orice modificare a structurii bazei de date antrena
modificarea acestor ci n programele deja scrise. Exemple: pentru modelul ierarhic:
IMS (amintit mai sus); pentru modelul reea: IDS II (de la Honeywell), IMAGE (de la
Hewlett Packard).
Aplicaie: Modelarea activitii didactice
Intr-o facultate, cadrele didactice desfoar activiti didactice de curs sau examen;
aceste activiti sunt pentru studeni i se desfoar n locaii (amfiteatre sau
laboratoare). De asemenea, cadrele didactice particip la proiecte de cercetare
tiinific. Figura 2 prezint modelul ierarhic al bazei de date; Figura 3 prezint modelul
reea.
Facultate
Student
Activitate didactic
Curs
Locaie
Cadru didactic
Examen
Proiect
Desfurare
Curs
Examen
Locaie
Inscriere
Activitate didactic
Facultate
Student
Predare
Proiect
Cadru didactic
E.F. Codd s-a nscut la 23 august 1923 n Portland, Marea Britanie, i a murit n 18 aprilie
2003, n Florida. A fcut studii de matematic i chimie la Oxford i s-a mutat n Statele Unite n
1948, pentru a lucra la IBM. A introdus termenul OLAP (OnLine Analytical Processing) i a
impus modelul relaional; a avut, de asemenea, contribuii n domeniul modelelor de
calculabilitate prin lucrrile sale privind automatele celulare. A obinut de dou ori Premiul
Turing: n 1981 i 1994.
6
(a)
(b)
(c)
Figura 4: Operaii cu tabele: (a) selecie; (b) proiecie, (c) asociere
Numele modelului (model relaional) provine de la conceptul matematic de
relaie. Aa cum o funcie f : {1, 2,,n} N R are mai multe reprezentri
convenionale, dintre care cea mai comod este cea de vector, tot astfel relaia poate
avea mai multe reprezentri, una dintre ele fiind tabela. Din acest motiv, cel puin la
nivel informal, termenii de relaie i tabel pot fi considerai sinonimi.
Principalele concepte cu care lucreaz modelul de date de tip relaional sunt
(exemplificarea se face pentru baza de date asociat unui liceu):
(II) Modelul hibrid extinde modelul relaional oferind un set de tipuri de date mai
bogat, i include i orientarea obiect. Se incearc astfel combinarea avantajelor celor
dou abordri: cea relaional i cea orientat obiect. Astfel, atributele i instanele
entitilor pot avea tipuri complexe i pot evita unele dintre restriciile specifice
modelului relaional. De exemplu, n timp ce n modelul relaional fiecare atribut trebuie
s ia pentru fiecare instan a unei entiti o valoare i numai una din domeniul lui de
definiie, n modelul hibrid poate lua un subset de valori (de exemplu: pentru un angajat
oarecare, atributul Telefon poate lua ca valori numrul telefonului fix de acas i de la
servicu, al telefonului mobil propriu i de serviciu, dac angajatul dispune de toate
patru).
Cel mai cunoscut exemplu: Informix Universal Server care combin tehnologiile
relaionale i orientate obiect din dou produse preexistente: Informix i Illustra.
Principalele avantaje i dezavantaje ale modelelor de date (i ale sistemelor de
gestiune a bazelor de date corespunztoare) au fost sintetizate de M. Stonebraker prin
diagrama din Figura 7 (vezi [18]): modelul relaional permite realizarea chiar
simultan a unor interogri variate i rapide dar complexitatea datelor stocate nu
difer prea mult de complexitatea datelor memorate n baze de date de tip ierarhic sau
reea; cu modelul orientat obiect se poate stoca informaie variat i complex (de la
texte la sunete i imagini) dar viteza de interogare (n cazul imaginilor i mai ales al
sunetelor) este foarte sczut; modelul care pare s elimine toate dezavantajele i s
cumuleze toate avantajele modelelor anterioare este modelul obiect-relaional.
Faciliti de
interogare /
asistena multi-user
SGBD relaionale
SGBD prerelaionale
SGBD hibride
SGBD orientate obiect
Complexitatea datelor /
posibile extinderi
Schema
extern 1
Schema
extern 2
Nivelul conceptual
(structura logic a BD):
ansamblul datelor stocate
n BD i a relaiilor dintre
ele (fr detalii de
implementare)
Schema
extern 3
Schema
conceptual
Nivelul intern:
implementarea fizic a BD
(structuri de date,
indexare, acces)
Schema
intern
Baza
de date
6
7
descrie datele stocate n baza de date i relaiile dintre ele dar nu conine detalii
referitoare modul de stocare a datelor pe suportul fizic (numrului de octei
ocupai pe disc etc.).
Scopul arhitecturii pe cele trei nivele este acela de separare a percepiei fiecrui
utilizator individual aspura datelor de modul de reprezentare fizic a acestora n baza
de date. Figura 2 ilustreaz acest lucru reprezentnd nivelul intern, nivelul conceptual
i dou vederi corespunztoare la nivelul extern: una aparinnd unui utilizator de PL/I,
cealalt aparinnd unui utilizator de COBOL.
Nivel extern (PL/I)
Nivel
(COBOL)
DCL 1 ANG,
2 ANG# CHAR(6),
2 SAL
FIXED BIN(31);
Nivel conceptual
extern
01 ANGAJ.
02 CODANGAJ
02 CODDEPT
PIC X(6).
PIC X(6).
ANGAJAT
COD_ANGAJAT
CHARACTER (6)
COD_DEPARTAMENT CHARACTER (4)
SALARIU
NUMERIC (5)
Nivel intern
STORED__ANG
PREFIX
ANG#
DEPT#
SALAR
BYTES=20
TYPE=BYTE(6), OFFSET=0
TYPE=BYTE(6), OFFSET=6, INDEX=ANGX
TYPE=BYTE(4), OFFSET=12
TYPE=FULLWORD, OFFSET=16
10
Schema
extern
Schema
intern
Proiectarea la nivel fizic
Stocare
fizic
11
Entitate i Instan
Prin entitate nelegem mulimea tuturor elementelor de un anumit tip (care prezint
aceleai caracteristici distinctive).
Prin instan a unei entiti nelegem un singur element, bine individualizat, unic, din
mulimea elementelor care formeaz entitatea respectiv.
Observaie
Entitile dintr-o baz de date pot fi disjuncte sau nu; n al doilea caz avem de a
face cu subentiti (de exemlu, entitile Piloi i MecaniciDeBord sunt disjuncte i
sunt subentiti ale entitii PersonalNavigant).
Intr-o baz de date pot exista entiti a cror existen este determinat de
existena altora (de exemplu, entitatea PersoaneInIntretinere depinde de entitatea
Salariai); primele se numesc entiti dependente, celelalte se numesc entiti
principale.
Definiie
Atribut = o caracteristic a unei entiti.
Un atribut posed un nume i pentru fiecare instan a entitii poate lua o
valoare dintr-o mulime fixat de valori, numit domeniul de valori ale atributului.
Atributele se pot clasifica dup complexitate n:
atribute compuse i atribute simple sau elementare, dup cum ele se mai pot
descompune sau nu n alte atribute, de mai mic complexitate. Exist atribute care nu
pot fi dect simple (atributele Capital, Suprafat, Continent ale entitii Tari). Exist
ns atribute care pot fi considerate fie simple, fie compuse. De exemplu: atributul
DataNasterii cu valorile: 1 ianuarie 2000, 2 Mai 1990 etc. poate fi privit fie ca un atribut
simplu, fie ca unul compus din atributele Zi, Lun, An. Este indicat s l tratm ca un
atribut compus dac prevedem necesitatea de a avea acces direct la luna sau anul de
natere al unei persoane nregistrate n baza de date. Dac ns o astfel de necesitate
nu este probabil i dac dorim s simplificm structura entitii (i deci a bazei de
date) atunci este preferabil s l tratm ca atribut simplu;
Atributele se pot clasifica dup mulimea de valori n:
atribute cu valori unice i atribute cu valori multile, dup cum ele pot lua pentru
instanele entitii respective cte o singur valoare (de exemplu, atributele Capital,
Suprafat, Continent ale entitii Tri) sau, dimpotriv, pentru unele instane pot lua
cte o singur valoare, pentru altele mai multe valori iar pentru altete nici o valoare (de
exemplu, atributul OrasCuMinimum2MilioaneLocuitori al entitii Tri). Cnd este cazul,
se pot defini limite inferioare i/sau superioare pentru numrul de valori pe care le
poate lua un astfel de atribut pentru o instan oarecare (de exemplu, putem specifica
faptul c atributul NrTelefon al entitii Persoane poate lua minimum o valoare
telefonul de serviciu i maximum trei.
Atributele se pot clasifica dup stabilitate n:
atribute de baz i atribute derivate, dup cum ele au valori de sine stttoare
sau care pot fi calculate din valorile altor atribute. De exemplu, s considerm entitile
corelate Cri, cu atributul NumrAutori i Autori, cu atributul Titlu; atributul
NumrAutori este un atribut derivat: valorile pe care le ia pentru diferite instane ale
entitii Cri pot fi calculate pe baza numrului de apariii ale atributului Titlu pentru
diferite instane ale entitii Autori.
Utilizarea instanelor unei entiti ridic dou probleme foarte importante:
modul de adresare a fiecrei instane a unei entiti;
determinarea instanelor care se repet.
Pentru a simplifica referirea la instanele unei entiti s-a recurs la mecanismul
identificatorului unic (sau al cheii primare).
Definiie
Identificatorul unic (sau cheie primar) = un atribut sau cea mai mic mulime de
atribute ale unei entiti care iau, pentru fiecare instan a entitii respective, o valoare
i numai una. Atunci cnd nici un atribut sau grup de atribute ale entitii rezonabil de
12
13
Fie mulimile Marca = {Dacia, Ford, Fiat, Audi, Opel, Volvo}, Tip = {benzin, motorin},
CapacCil = {1100, 1200, 1300, 1400, 1600}, NrLoc = {4,5}, NrUi = {2, 4, 5}. Atunci,
entitatea Automobil poate fi reprezentat ca o relaie peste aceste mulimi:
Automobil Marca x Tip x CapacCil x NrLoc x NrUi
Iat cteva instane ale acestei entiti: (Dacia, benzin, 1400, 5, 4), (Dacia, motorin,
1400, 5, 4), (Dacia, benzin, 1100, 5, 4), (Dacia, motorin, 1400, 5, 5), (Ford, motorin,
1400, 5, 5), (Ford, benzin, 1600, 5, 4), (Fiat, benzin, 1300, 5, 4), (Fiat, benzin,
1100, 5, 4), (Audi, motorin, 1600, 5, 4), (Opel, benzin, 1400, 5, 5), (Volvo, benzin,
1400, 5, 5), (Volvo, motorin, 1600, 5, 4).
Dac generalizm exemplul de mai sus obinem:
E A1 x A2 x x An
unde am notat cu E entitatea i cu A1, A2, , An mulimile de valori (domeniile)
atributelor sale. Un element al acestei relaii (adic un tuplu al produsului cartezian)
reprezint o instan ei a entitii E i const din valori particulare ale atributelor.
Pentru simplitatea reprezentrii, entitile nu sunt reprezentate ca mulimi de
tupluri (ca n exemplul nostru de mai sus) ci ca tabele (vezi Tabelul 4), tot aa cum, n
loc s notm cu <(3,5) instana relaiei de ordine < N X N dintre numerele naturale
3 i 5, scriem 3 < 5.
Marca
Dacia
Dacia
Dacia
Dacia
Ford
Ford
Fiat
Fiat
Audi
Opel
Volvo
Volvo
Tip
benzin
motorin
benzin
motorin
motorin
benzin
benzin
benzin
motorin
benzin
benzin
motorin
CapacCil
1400
1400
1100
1400
1400
1600
1300
1100
1600
1400
1400
1600
NrLoc
5
5
5
5
5
5
5
5
5
5
5
5
NrUi
4
4
4
5
5
4
4
4
4
5
5
4
14
15
(1.) includem n descrierea relaiei (aici: Comand) pe post de chei externe dou
atribute care s corespund atributelor care funcioneaz drept chei primare pentru
cele dou entiti (aici: CodClient i CodFurnizor);
(2.) reducem astfel stabilirea unei relaii n-m (aici: relaia dintre Clieni i Furnizori) la
stabilirea a dou relaii 1-m (aici: relaiile dintre Clieni i Comand i respectiv
dintre Furnizori i Comand).
16
17
18
Normalizare = un proces prin care un set de relaii care ncalc anumite principii de
proiectare este nlocuit cu un alt set de relaii adecvat, coerent i bine structurat.
Acest proces se desfoar n mai multe etape: n fiecare etap se urmrete
eliminarea unui alt tip de defecte ale relaiilor astfel nct, pe msur ce relaiile trec n
forme normale superioare, ele devin din ce n ce mai puin vulnerabile fa de
anomaliile de actualizare a datelor.
Pentru a prezenta procesul de normalizare, este necesar s definim urmtoarele
dou concepte:
anomalie la actualizare,
dependen funcional.
Pentru simplificare, vom utiliza acolo unde este cazul reprezentarea prin
tabele a entitilor i relaiilor din baza de date.
B. Anomalii la actualizare
Unul dintre principalele obiective n proiectarea bazelor de date este eliminarea
redundanelor (a nregistrrii acelorai date de mai multe ori). Fie, de exemplu,
entitile :
Elevi {CNP, CodClas, Nume, Prenume, Adres};
Clase {CodClas, Locaie, NrBanci, NrTable};
EleviClase {CNP, Nume, Prenume, Adres, CodClas, Locaie, NrBanci, NrTable}.
Dac n baza de date includem tabelele Elevi i Clase nu vom avea redundane
n date; n schimb, dac includem tabelele Clase i EleviClase (sau Elevi i
EleviClase) redundana va fi evident.
Tabelele care conin date redundante pot genera probleme n momentul
actualizrii informaiei. Acestea se numesc anomalii la actualizare i sunt de trei
tipuri:
1. anomalii la adugare;
2. anomalii la tergere;
3. anomalii la modificare.
Le vom ilustra prin exemple pentru cazul n care n baza de date includem tabelele
Clase i EleviClase definite n schema conceptual de mai sus:
CodClas
XIB
XA
IXC
Locaie
Cam23
Cam12
Cam15
NrBanci
18
21
18
NrTable
3
2
2
Nume
Savu
Rosu
Banu
Rona
Mares
Prn
Ion
R
M
C
D
Adr
B
CJ
B
AR
DJ
CodCl
IXC
XA
XA
IXC
XIB
Loc
Cam09
Cam15
Cam15
Cam09
Cam23
NrB
15
21
21
15
18
NrT
2
3
3
2
3
19
Nume
Savu
Rosu
Banu
Rona
Mares
Olaru
Manu
Prn
Ion
R
M
C
D
S
D
Adr
B
CJ
B
AR
DJ
TL
PL
CodCl
IXC
XA
XA
IXC
XIB
XIB
XIB
Loc
Cam09
Cam15
Cam15
Cam09
Cam23
Cam23
Cam23
NrB
15
21
21
15
18
18
18
NrT
2
3
3
2
3
3
2
Nume
Savu
Rosu
Banu
Rona
Mares
Null
Prn
Ion
R
M
C
D
Nul
Adr
B
CJ
B
AR
DJ
Null
CodCl
XIB
XIB
XA
IXC
XIB
XE
Loc
Cam23
Cam23
Cam15
Cam09
Cam21
Cam11
NrB
18
18
21
15
21
16
NrT
3
3
3
2
3
2
Locaie
Cam12
Cam15
Nume
Savu
Rosu
Banu
Rona
Mares
Prn
Ion
R
M
C
D
NrBanci
21
18
Adr
B
CJ
B
AR
DJ
CodCl
XIB
XIB
XA
IXC
XIB
Loc
Cam23
Cam23
Cam15
Cam09
Cam21
NrTable
2
2
NrB
18
18
21
15
21
NrT
3
3
3
2
3
Figura 15: Datele despre clasa a XIB au fost terse din tabela Clase
dar datele elevilor din acea clas au rmas n tabela EleviClase
20
Locaie
Cam23
Cam12
Cam15
NrBanci
20
21
18
NrTable
4
2
2
Nume
Savu
Rosu
Banu
Rona
Mares
Prn
Ion
R
M
C
D
Adr
B
CJ
B
AR
DJ
CodCl
XIB
XIB
XA
IXC
XIB
Loc
Cam23
Cam23
Cam15
Cam09
Cam21
NrB
18
18
21
15
21
NrT
3
3
3
2
3
C. Dependene funcionale
Procesul de normalizare se bazeaz pe examinarea relaiilor dintre atributele
entitilor, oglindite prin conceptul de dependen funcional.
Definiie
Dependen funcional = o restricie care apare ntre atributele unei entiti la nivelul
semanticii (semnificaiei) acestora: fie a1 i a2 atributele unei entiti E; spunem c
atributul a2 este dependent funcional de atributul a1 dac fiecrei valori a atributului
a1 i corespunde o valoare i numai una a atributului a2 .
Observaie
Observm c unei valori a atributului a2 i pot corespunde mai multe valori ale
atributului a1. (putem spune c a1 este argumentul iar a2 este imaginea unei funcii
n sensul matematic al cuvntului).
Se pot afla n dependen funcional nu numai atribute individuale ci i grupuri de
atribute. Vom ignora dependenele triviale, adic dependenele a1 a2 n care a2
depinde funcional de un subset al a1.
Notm dependena funcional a atributelor a1 i a2 prin
a 1 a2
i o reprezentm grafic ca n Figura 7.
atributul a2 depinde
a1
a2
funcional de a1
21
Dac examinm celulele din coloana tipAuto (precum i din coloana Soferi)
constatm c tabela Garaje se afl n form nenormalizat. Ca urmare, tabela
trebuie trecut n FN1.
Definiie
Relaie aflat n prima forma normal (FN1) = o relaie cu proprietatea c oricare
dintre celulele tabelei care o reprezint convenional conine o valoare i numai una (nu
exist atribute cu valori multiple).
Se cunosc dou metode de a aduce o relaie n FN1; o vom prezenta pe cea mai
eficient dintre ele (vom presupune c un singur atribut nu respect condiia din FN1):
Aducerea unei relaii la FN1
Fie E o entitate (aici: Garaje), a atributul su (aici: tipAuto) responsabil pentru forma
nenormalizat a tabelei T corespunztoare entitii (aici: tabela Garaje11).
Aducerea tabelei la FN1 necesit:
(1.) eliminarea atributului a din entitatea E / a coloanei corespunztoare din tabela
T (aici: a coloanei TipAuto din tabela Garaje11; denumim Garaje22 tabela astfel
rezultat);
(2.) crearea pornind de la atributul a a unei noi entiti E' ; fie T' tabela care o
reprezint (aici: pe baza atributului TipAuto crem entitatea Vehicule cu cheia primar
NrInmatr i atributele: TipAuto, Marca, NrStele, NrLocuri, Culoare);
(3.) stabilirea relaiei dintre cele dou entiti, relaie care este dup caz de tip 1-m
sau n-m (aici: relaia dintre entitile Garaje i Vehicule este de tip 1-m). Prin
urmare, cheia primar a entitii E trebuie s inclus cu rol de cheie extern
printre atributele entitii E' (aici: includem atributul CodGaraj cu rol de cheie
primar pentru entitatea Garaje pe post de cheie extern pentru entitatea Vehicule).
23
Atenie
Intr-o relaie pot exista mai multe atribute cu valori multiple, deci care s fie fiecare la
rndul su responsabile pentru forma nenormalizat a relaiei (tabelei). In acest caz,
aducerea relaiei la FN1 se desfoare n tot atia pai cte astfel de atribute exist
(aici: noua tabel Garaje22 este tot n form nenormalizat din cauza atributului
Soferi). Prin urmare, vom proceda pentru acest atribut aa cum am procedat i pentru
atributul TipAuto: a se vedea Figura 12 (tabela Garaje33 aflat acum n FN1) i
Figura 13 (tabela Soferi nou creat) precum i Figura 14 (tabela de jonciune Conduc
prin care vom realiza relaia de tip nm dintre entitile nou create Soferi i
Vehicule).
24
25
Atenie
Procesul de aducere la FN1 a evideniat necesitatea inregistrrii unor informaii
noi: numerele de nmatriculare ale autovehiculelor (la primul pas), datele personale ale
oferilor (la al doilea pas). Pe de alt parte, n forma iniial, nenormalizat, tabela
Garaje11 coninea o serie de informaii auxiliare (ce tip de vehicule se afl n fiecare
garaj, ce oferi le conduc) care se pot pierde la normalizare. Acest lucru poate fi evitat
dac ntre noile entiti aprute prin normalizare se stabilesc relaiile corespunztoare
(aici: la primul pas s-a stabilit o relaie 1-m ntre entitatea Garaje modificat i
entitatea Vehicule nou creat, iar la pasul al doilea s-a stabilit o relaie nm ntre
entitile nou create Soferi i Vehicule, deoarece n principiu un ofer poate
conduce mai multe vehicule i un vehicul poate fi condus de mai muli oferi iar o
restricie contextual a bazei de date poate stipula ce vehicule poate conduce fiecare
ofer i ce oferi pot conduce fiecare vehicul. De aceea, am creat tabela de jonciune
Conduc cu atributele CNP, NrInmatr. Acestea sunt chei primare n tabelele Soferi
respectiv Vehicule i sunt chei externe n tabela Conduc, dar formeaz mpreun
cheia primar pentru tabela Conduc).
26
27
Observaie
FN2 se refer numai la relaii a cror cheie primar este format din mai multe atribute
deoarece se bazeaz pe conceptul de dependen funcional complet.
Definiie
Dependena funcional complet
Fie a1 i a2 dou (mulimi de) atribute ale entitii E; spunem c a2 este complet
dependent funcional de a1 dac i numai dac a2 este dependent funcional de a1
dar nu este dependent funcional de nicio submulime proprie a lui a1.
Dac, dimpotriv, putem elimina un atribut din mulimea de atribute a1 iar a2 continu
s fie dependent funcional de a1 atunci spunem c a2 este doar parial dependent
funcional de a1.
Contraexemplu
S examinm relaia Vehicule din exemplul de mai sus: dependena funcional
NrInmatr, TipAuto CodGaraj
nu este complet: atributul CodGaraj este dependent funcional de un subset al
{NrInmatr, TipAuto }, i anume de NrInmatr.
Definiie
A doua form normal
O relaie este n FN2 dac i numai dac:
(1) este deja n FN1;
(2) oricare dintre atributele sale care nu fac parte din cheia primar este complet
dependent funcional de cheia primar.
Aducerea unei relaii la FN2
Fie E o entitate aflat n FN1; aducerea ei la FN2 necesit:
(1.) identificarea tuturor dependenelor funcionale dintre atributele entitii E;
(2.) descompunerea relaiei E ntr-un numr de noi relaii astfel:
o
fiecare dependen funcional complet definete o nou relaie;
o
din fiecare dependen funcional parial se elimin acea parte a cheii
primare care este rspunztoare de incompletitudinea dependenei i apoi se
definete noua relaie.
(3.) stabilirea relaiilor dintre noile entiti (n scopul recuperrii informaii de legatur,
pierdute eventual prin inlocuirea entitii iniiale cu entitile normalizate).
Aducerea unei relaii la FN2
28
Ilustrm metoda de mai sus pentru entitatea AngajaiProiecte din Figura 17. La
prima vedere, fiecare dintre atributele entitii: NumeAng, titluPrj, nrOre, dataPredrii
depinde funcional de cheia primar a acesteia: CNP, codPrj. Aplicnd definiia
dependenei funcionale complete observm c numai atributul nrOre depinde
funcional complet de ambele atribute care formeaz cheia primar (a se vedea
dependena funcional d.f.1 din Figura 17). Celelalte dependene sunt pariale; din ele
obinem urmtoarele dependene complete: d.f.2 i d.f.3. Ca urmare, vom nlocui
entitatea AngajaiProiecte cu entitile AP1, AP2, AP3 (Figura 18) i vom stabili
relaiile dintre ele.
d.f.2
d.f.1
CNP
codPrj
nrOre
NumeAng
titluPrj
dataPredrii
d.f.3
Figura 27: Dependenele funcionale complete din entitatea AngajaiProiecte
AP1
CNP
AP2
codPrj
nrOre
CNP
NumeAng
AP3
codPrj
titluPrj
dataPredrii
29
Exemplu
S examinm relaia EleviClase din paragraful 4.2:
CNP
Nume
Prn
Adr
CodCl
Loc
NrB
NrT
1900530123
Savu
Ion
IXC
Cam09
15
1900924456
Rosu
CJ
XA
Cam15
21
2900225789
Banu
XA
Cam15
21
2900807246
Rona
AR
IXC
Cam09
15
1901010357
Mares
DJ
XIB
Cam23
18
30
Definiie
A treia form normal
O relaie este n FN3 dac i numai dac:
(1) este deja n FN2;
(2) nici unul dintre atributele sale care nu fac parte din cheia primar nu este, prin
tranzitivitate, dependent funcional de cheia primar.
Aducerea unei relaii la FN3
Fie E o entitate (aici: AngajaiFiliale) aflat n FN2 i a1 , a2 i a3 trei atribute ale
sale cu proprietatea c: a1 a2 i a2 a3 (aici: CNP, CodFil , LocFil : CNP
CodFil , CodFil LocFil):
Aducerea tabelei la FN3 necesit:
(1.) identificarea tuturor dependenelor tranzitive dintre atributele entitii E;
(2.) descompunerea relaiei E ntr-un numr de noi relaii astfel:
o
atributul a1 impreun cu toate atributele care depind funcional de el (deci
inclusiv a2 ) formeaz o nou relaie (aici: atributele CNP, NumeAng, Adresa,
Oras, codFil formeaz entitatea Ang1);
o
atributul a2 impreun cu atributul a3 i cu alte atribute care depind funcional
de a1 prin tranzitivitate formeaz o nou relaie (aici: atributul NumeFil se
adaug atributelor CodFil i LocFil pentru a forma entitatea Fil1);
(3.) definirea atributului a2 drept cheie primar a celei de-a doua entiti nou create;
(4.) stabilirea relaiilor dintre noile entiti (n scopul recuperrii informaiilor de
legatur, pierdute eventual prin inlocuirea entitii iniiale cu entiti normalizate).
CNP
NumeAng Adresa
Oras
CodFil
NumeFil
LocFil
NumeAng
Adresa
Oras
CodFil
31
FN1
FN2
FN3
Condiie de verificat
Toate atributele relaiei
trebuie s fie atomice
Relaia este n FN1;
Cheia sa primar const
din mai multe atribute;
Toate atributele care nu
fac parte din cheia primar
sunt complet dependente
funcional de cheia primar
Relaia este n FN2;
Nici un atribut care nu
face parte dintr-o cheie
candidat nu este funcional
dependent de un alt atribut
care nu face nici el parte
dintr-o cheie candidat (nici
un atribut care nu face
parte
dintr-o
cheie
candidat nu este funcional
dependent
de
cheia
primar prin tranzitivitate)
Soluie (normalizare)
Fiecare atribut neatomic se
transform intr-o nou relaie
Fiecare parte a cheii primare,
mpreun cu atributele care
depind funcional complet de ea
formeaz o nou relaie;
Se stabilesc relaiile necesare
ntre noile relaii care au nlocuito pe cea iniial
Se pstreaz n relaia iniial
numai cheia primar i atributele
care depind funcional de ea
direct
(inclusiv
atributul
"incriminat");
Se creeaz cte o nou
relaie din fiecare atribut care nu
face parte din cheia primar
mpreun cu toate atributele
(care nu fac nici ele parte din
cheia primar a relaiei iniiale)
care sunt dependente funcional
de acesta;
Se stabilesc relaiile necesare
ntre noile relaii i relaia iniial
modificat
32
34
Limbajul SQL este n cea mai mare parte bazat pe algebra relaional, dar
mai conine i construcii derivate din calculul relaional.
Limbajul ISBL (Information System Base Language) al firmei IBM este bazat
n ntregime pe algebra relaional.
35
relaionale mai mult dect complete, coninnd i operaii care nu sunt prevzute n
limbajele relaionale abstracte, ca de exemplu, efectuarea unor calcule aritmetice
asupra valorilor unor atribute (sum, medie, minim, maxim), funcii de tiprire a
relaiilor, etc.
Limbajul SQL este limbajul cel mai utilizat n sistemele relaionale.
2.2. Codul SQL
Ilustram
AssistRom.mdb:
codul
SQL
cu
ajutorul
unei
baze
de
date
Ms
Access,
Instructiunea SELECT
Efect:
Se returneaza informatia ceruta sub forma unui set de inregistrari.
Sintaxa:
SELECT [predicat] { * | tabel.* | [tabel.]camp1 [AS alias1] [, [tabel.]camp2
[AS alias2] [, ...]]}
FROM expresie_tabel [, ...] [IN baza_de_date_externa]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
Instructiunea SELECT are urmatoarele parti:
predicat
36
este unul dintre urmatoarele predicate: ALL, DISTINCT, DISTINCTROW, sau TOP.
Predicatul folosit determina o restrictionare a numarului de inregistrari returnate. Daca
nu este specificat, se ia implicit predicatul ALL;
*(asterisc)
indica faptul ca trebuie selectate toate campurile din tabelele specificate;
tabel
numele tabelului care contine campurile care intereseaza pentru selectia inregistrarilor;
camp1, camp2
numele campurilor care contin datele ce trebuie returnate. Daca sunt indicate mai
multe campuri, atunci datele acestora sunt returnate conform ordinii din lista de
campuri;
alias1, alias2
nume de coloane care pot fi folosite ca antete pentru campuri in locul antetelor
respective din tabel;
expresie_tabel
o expresie care identifica unul sau mai multe tabele din care vor fi returnate date.
Expresia poate fi un nume unic de tabel, numele unei interogari deja salvate sau o
combinatie obtinuta prin oricare dintre cele 3 tipuri de asociere: INNER JOIN, LEFT
JOIN, sau RIGHT JOIN;
baza_de_date_externa
numele BD care contine tabelul / tabelele specificate in expresie_tabel, daca acestea
nu fac parte din BD curenta;
Sintaxa minimala pentru instructiunea SELECT este:
SELECT campuri FROM tabel;
Clauzele WHERE,GROUP BY, HAVING, ORDER BY si WITH OWNERACCESS
OPTION au rolul de a organiza setul de inregistrari returnate si de a introduce restrictii
suplimentare asupra acestuia. Astfel,
daca trebuie eliminate inregistrarile duplicate sau afisate numai o parte dintre
inregistrari etc., atunci trebuie introdus un predicat adecvat: DISTINCTROW, TOPn
etc.,
daca trebuie afisate valorile unui camp atunci numele acestuia trebuie inserat dupa
verbul SELECT, in lista_de_campuri; daca mai multe campuri din tabele diferite au
acelasi nume ele atunci numele lor va fi precedat de numele tabelului,
daca interogarea se bazeaza pe un tabel si / sau interogare deja creata atunci
numele acestuia trebuie sa fie inclus in expresia_tabel a clauzei FROM,
daca inregistrarile returnate de interogare trebuie filtrate atunci criteriile de filtrare se
introduc prin clauza WHERE,
daca trebuie efectuata o grupare a inregistrarilor si o filtrare a inregistrarilor grupate
atunci campul sau campurile dupa care se grupeaza se introduc prin clauza GROUP
BY iar criteriile de filtrare prin clauza HAVING,
daca inregistrarile returnate de interogare trebuie sortate atunci campul-cheie de
sortare si ordinea de sortare se indica in clauza ORDER BY,
daca proprietarul BD se schimba atunci trebuie indicata noua valoare, Owners, in
clauza WITH_OWNERACCESS_OPTION.
37
Modul de lucru
Programul parcurge tabelul / tabelele specificate in parametrul expresie_tabel, extrage
coloanele indicate in parametrii camp1, camp2 etc., selecteaza inregistrarile care
verifica criteriul de selectie si sorteaza sau grupeaza inregistrarile rezultate in ordinea
specificata.
Observatie
Instructiunile SELECT este specifica interogarilor simple (de selectie); ea nu modifica
datele din BD. Verbul SELECT este, de obicei, primul cuvant dintr-o instructiune SQL.
Cele mai frecvent folosite instructiuni SQL sunt SELECT si SELECT INTO.
Exemple
Afisarea numelui si prenumelui clientilor firmei AsistRom
SELECT NumeClient, Prenume FROM Clienti;
Utilizarea asteriscului pentru a selecta toate campurile dintr-un tabel.
In exemplul de mai jos se selecteaza toate campurile din tabelul Clienti
SELECT * FROM Clienti;
Utilizarea operatorului . (punct) pentru cazul in care tabelele din clauza FROM contin
campuri cu acelasi nume. Atunci, toate campurile care apar in instructiunea SELECT
trebuie insotite de numele tabelului din care provin.
In exemplul de mai jos campul CodCentru apare si in tabelul Clienti si in tabelul
CentreCons; instructiunea SQL trebuie sa selecteze numele clientilor din tabelul
Clienti si denumirea completa a centrului din tabelul CentreCons (vezi codul SQL al
interogarii Q_SubQuery_Clienti_CentreCons din BD AsistRom )
SELECT
DISTINCTROW
Clienti.CodClient,
Clienti.NumeClient,
Clienti.Prenume,
(SELECT [NumeCentru] FROM [CentreCons]
WHERE [Clienti].[CodCentru] = [CentreCons].[CodCentru])
AS [Centrul de Consultanta]
FROM CentreCons INNER JOIN Clienti
ON CentreCons.CodCentru = Clienti.CodCentru;
Utilizarea clauzei AS pentru crearea in RecordSet (setul de inregistrari intoarse de
interogare) a unui nume de camp diferit de cel din tabel.
In exemplul de mai jos campul TelefonAcasa capata in RecordSet numele
NrTelefon
SELECT Clienti.TelefonAcasa AS NrTelefon FROM Clienti;
Aceasta manevra este recomandata mai ales in cazul utilizarii in interogare a functiilor
predefinite din categori Total sau a criteriilor care returneaza rezultate ambigui sau
duplicate. Clauza AS creeaza un nume alternativ pentru campulrezultat intors de
interogare. In exemplul de mai jos, clauza AS atribuie numele TotalNrClienti campului
in care se face numararea acestora
SELECT COUNT(CodClient) AS TotalNrClienti FROM Clienti;
Utilizarea clauzei AS pentru duplicarea unui camp in vederea efectuarii unor calcule.
In exemplul de mai jos, pretul actual al caietelor produse este returnat in campul
denumit CostActual iar in campul CostPropus este afisat noul pret al caietelor daca
38
pretul unitar creste cu 10% (vezi codul SQL al interogarii Q_AS_Produse din BD
AsistRom )
SELECT Produse.CodFirma, Produse.CodProdus, Produse.NumeProdus,
Produse.PretUnitar, Produse.Cantitate, [PretUnitar] * [Cantitate] AS Cost,
[Cost]*1.1 AS CostPropus FROM Produse;
In exemplul de mai jos sunt numarate produsele din tabelul Produse si este calculat
pretul unitar mediu si pretul unitar maxim (vezi Q_CountAvgMax_Produse din BD
AsistRom )
SELECT Count(*) AS NrTotalProduse, Avg(PretUnitar) AS [Pret Unitar
Mediu], Max([PretUnitar]) AS [Pret Unitar Maxim] FROM Produse;
Includerea unui text intre valorile numerice returnate.
In exemplul urmator sunt afisate pentru fiecare produs din tabelul Produse numele si
pretul sau unitar (aflate in campurile NumeProdus, respectiv PretUnitar), separate
de secventa are urmatorul pret unitar (vezi Q_ConcatText_Produse din BD
AsistRom )
SELECT NumeProdus, 'are urmatorul pret unitar,
PretUnitar
FROM
Produse;
Definirea unui filtru de selectie pentru inregistrarile returnate.
In exemplul urmator sunt afisate numele si prenumele clientilor absolventi ai
Universitatii din Bucuresti
SELECT [Prenume], [NumeClient] FROM [Clienti]
WHERE [Studii] = "Univ.Bucuresti";
In exemplul urmator sunt afisate numele si prenumele clientilor din tabelul Clienti care
au apelat la un centru de consultanta al carui cod se afla printre codurile din formularul
deschis CentreConsNoi
SELECT [Prenume], [NumeClient] FROM [Clienti]
WHERE [CodCentru] = Forms![CentreConsNoi]![CodCentru];
Selectarea inregistrarilor in vederea efectuarii unui calcul.
In exemplul urmator este calculat pretul unitar mediu numai pentru produsele al caror
pret unitar depaseste valoarea 5; acest pret mediu este afisat in campul nou creat
numit PretulUnitarMediuPeste5
SELECT Avg([PretUnitar]) AS [PretulUnitarMediuPeste5]
FROM [Produse] WHERE [PretUnitar] > 5;
Gruparea inregistrarilor in vederea efectuarii unui calcul la nivelul fiecarui grup de
inregistrari, dupa ce au fost eliminate inregistarile care nu verifica un criteriu de selectie
anumit.
In exemplul urmator este calculat pretul unitar mediu al produselor al caror pret unitar
depaseste
valoarea
5
la
nivelul
fiecarei
firme
(vezi
Q_GroupBy_Where_Produse_Firma din BD AsistRom )
SELECT Produse.CodFirma, Count(Produse.CodFirma) AS NumarProduse,
Avg(Produse.PretUnitar) AS PretulUnitarMediuPeste5 FROM Produse
WHERE
GROUP BY
Produse.CodFirma;
39
In exemplul urmator este calculat numarul total de produse fabricat de fiecare firma,
numai daca firma respectiva produce cel putin doua sortimente distincte (vezi
Q_GroupBy_Having_Produse din BD AsistRom )
SELECT
Produse.CodFirma,
Count([Produse].[CodFirma])
AS
NumarProduse
FROM Produse
GROUP BY Produse.CodFirma
HAVING Count ([CodFirma]) >= 2;
Clauza FROM
Efect
Specifica tabelele sau interogarile care contin campurile enumerate in instructiunea
SQL.
Sintaxa
SELECT lista_de_campuri
FROM expresie_tabel [, ...] [IN baza_de_date_externa]
O instructiune SELECT care foloseste clauza FROM are urmatoarele parti:
lista_de_campuri
numele campurilor (inclusiv alias-uri) folosite in interogare si, eventual: functii
predefinite SQL, predicate de selectie SQL (ALL, DISTINCT, DISTINCTROW, or TOP)
sau alte optiuni ale instructiunii SELECT
expresie_tabel
o expresie care identifica unul sau mai multe tabele din care vor fi returnate date.
Expresia poate fi un nume unic de tabel, numele unei interogari deja salvate sau o
combinatie obtinuta prin oricare dintre cele 3 tipuri de asociere: INNER JOIN, LEFT
JOIN, sau RIGHT JOIN;
baza_de_date_externa
drumul complet catre BD externa care contine toate tabelele din expresia_tabel.
Observatii
Clauza FROM este obligatorie pentru orice instructiune SELECT;
Ordinea numelor tabelelor in expresia-tabel nu este semnificativa;
Exemple
Afisarea numelui si prenumelui clientilor din tabelul Clienti
SELECT Prenume, NumeClient
FROM Clienti;
Afisarea tuturor informatiilor despre clienti (deci a tuturor campurilor din tabelul
Clienti)
SELECT * FROM Clienti;
Numararea clientilor (deci a valorilor din campul CodCentru din tabelul Clienti);
rezultatul este depus in campul NrTotalClienti
SELECT Count(CodCentru) AS NrTotalClienti FROM Clienti;
40
Calculul noului pret unitar al produselor firmelor-client in urma aplicarii unei cresteri de
10% (in tabelul Produse valorile din campul PretUnitar preturile actuale raman
neschimbate)
SELECT Produse.CodFirma, Produse.CodProdus, Produse.NumeProdus,
Produse.Cantitate, Produse.PretUnitar AS PretActual,
PretUnitar * 1.1 AS PretPropus FROM Produse;
Clauza IN
Efect
Identifica tabele in orice BD externa creata cu o aplicatie compatibila cu MS Access:
FoxPro, dBASE etc.
Sintaxa pentru identificarea unui tabel-destinatie
[SELECT | INSERT] INTO destinatie IN
{drum | ["drum" "tip"] | ["" [tip; DATABASE = drum]]}
Sintaxa pentru identificarea unui tabel-sursa
FROM expresie_tabel IN
{drum| ["drum" "tip"] | ["" [tip; DATABASE = drum]]}
O instructiune SELECT care contine o clauza IN are urmatoarele parti:
destinatie
numele bazei de date externe in care sunt inserate informatiile;
expresie_tabel
o expresie care identifica unul sau mai multe tabele din care vor fi returnate date.
Expresia poate fi un nume unic de tabel, numele unei interogari deja salvate sau o
41
combinatie obtinuta prin oricare dintre cele 3 tipuri de asociere: INNER JOIN, LEFT
JOIN, sau RIGHT JOIN;
drum
drumul complet catre directorul sau fisierul care contine tabelul;
tip
extensia specifica aplicatiei cu care a fost creata BD externa, daca este alta decat MS
Access.
Predicatele ALL, DISTINCT, DISTINCTROW, TOP
Efect
Specifica inregistrarile selectate de interogarile SQL
Sintaxa
SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM tabel
O instructiune SELECT care foloseste aceste predicate are urmatoarele parti:
ALL
Este predicatul implicit. Programul selecteaza toate inregistrarile care indeplinesc
criteriul specificat in instructiunea SQL.
Urmatoarele instructiuni SQL sunt echivalente si returneaza toate inregistrarile din
tabelul CentreCons (ordonate dupa valorile campului CodCentru)
SELECT ALL * FROM CentreCons ORDER BY CodCentru;
SELECT * FROM CentreCons ORDER BY CodCentru;
DISTINCT
Omite inregistrarile care contin aceleasi date in campurile selectate (pentru a fi incluse
in RecordSet, valorile campului din instructiunea SELECT trebuie sa fie unice; daca
apar mai multe campuri in instructiunea SELECT atunci combinatia valorilor lor pentru
fiecare inregistrare trebuie sa fie unica).
De exemplu, trebuie verificat daca fiecare centru de consultanta este activ (are cel
putin un client). Vom folosi urmatoarele premize: in tabelul Clienti exista un camp
numit CodCentru care contine codul centrului de consultanta la care s-a inregistrat
clientul (deci, vom baza interogarea pe tabelul Clienti); o inregistrare dintr-un tabel
este considerata fara duplicate (unica) numai in cazul in care combinatia valorilor din
toate campurile sale este unica la nivelul intregului tabel (deci, dintre toate campurile
tabelului Clienti vom include in interogare numai campul CodCentru); un camp dintrun tabel este considerat cu valori unice numai daca oricare dintre valorile sale nu se
repeta in nici-o inregistrare din tabel (deci, vom specifica in instructiunea SELECT
predicatul DISTINCT). Prin urmare, se foloseste codul:
SELECT DISTINCT CodCentru FROM Clienti;
Daca se elimina predicatul DISTINCT atunci sunt returnate toate valorile (cu duplicate
cu tot) din campul CodCentru.
DISTINCTROW
Omite inregistrarile duplicate, nu numai pe cele care contin campuri duplicate.
Problema de mai sus, listarea centrelor de consultanta care au cel putin un client poate
fi rezolvata mai complicat - si astfel: stiind ca tabelul CentreCons nu contine
inregistrari duplicate dar tabelul Clienti contine, se creeaza o interogare pe baza
tabelelor CentreCons si Clienti si se foloseste o instructiune SELECT cu predicatul
DISTINCTROW, adica
SELECT DISTINCTROW NumeCentru
FROM Clienti INNER JOIN CentreCons
ON Clienti.CodCentru = CentreCons.CodCentru
42
ORDER BY NumeCentru;
Daca se omite parametrul DISTINCTROW, interogarea produce, pentru fiecare centru,
atatea inregistrari cati clienti are centrul respectiv.
TOP n [PERCENT]
Returneaza un anume numar de inregistrari aflate pe primele sau pe ultimele locuri ale
unui set de inregistrari specificate intr-o clauza ORDER BY.
Sa presupunem ca trebuie returnate primele 2 firme din Bucuresti care au cel mai mare
numar de angajati (vezi QFirma_Topn din BD AsistRom )
SELECT TOP 2
NumeFirma, CodOras, NrSalariati FROM Firma
WHERE CodOras = "B" ORDER BY NrSalariati DESC;
Sa presupunem ca trebuie returnate primele 30% firme care au cel mai mare numar de
angajati
SELECT TOP 30 PERCENT
Firma.NumeFirma, Firma.NrSalariati FROM Firma
ORDER BY Firma.NrSalariati DESC;
Clauza GROUP BY
Efect
Combina intr-o inregistrare unica toate inregistrarile care au aceeasi valoare in
campurile specificate in instructiunea SELECT; daca instructiunea SELECT contine si
o functie predefinita SQL (SUM, COUNT etc.) este inclusa valoarea acesteia pentru
fiecare dintre inregistrarile astfel create.
Sintaxa
SELECT lista_de_campuri FROM expresie_tabel
[WHERE criterii_de_selectie]
GROUP BY lista_campurilor_grupate
O instructiune SELECT care contine clauza GROUP BY are urmatoarele parti:
lista_de_campuri
reprezinta numele (inclusiv alias-urile) campurilor din tabelul de baza din care se extrag
date si, eventual: functiile predefinite SQL, predicatele de selectie (ALL, DISTINCT
etc.) si alte optiuni ale instructiunii SELECT;
expresie_tabel
o expresie care identifica unul sau mai multe tabele ale caror date vor fi actualizate.
Expresia poate fi un nume unic de tabel, numele unei interogari deja salvate sau o
combinatie obtinuta prin oricare dintre cele 3 tipuri de asociere: INNER JOIN, LEFT
JOIN, sau RIGHT JOIN;
criterii_de_selectie
reprezinta criteriile de selectie; daca instructiunea SELECT comporta si o clauza
WHERE atunci programul BD Microsoft Jet grupeaza valorile numai dupa ce aplica
criteriile WHERE asupra inregistrarilor;
lista_campurilor_grupate
consta din numele a maximum 10 campuri folosite pentru gruparea inregistrarilor;
ordinea de grupare este ordinea in care apar campurile in grila QBE.
Exemple
43
Exemple
44
Observatie
45
CodCentru,
Sum(ClientNou)
AS
SumtOfClientNou
FROM
Clienti
GROUP BY CodCentru
HAVING Sum(ClientNou) <> 0
Clauza ORDER BY
Efect
Sorteaza, crescator sau descrescator, dupa unul sau mai multe campuri, inregistrarile
returnate de o interogare.
Sintaxa
SELECT lista_de_campuri FROM expresie_tabel
WHERE criterii_de_selectie
[ORDER BY camp1 [ASC | DESC ][, camp2 [ASC | DESC ]][, ...]]]
O instructiune SELECT care contine clauza ORDER BY are urmatoarele parti:
lista_de_campuri
reprezinta numele (inclusiv alias-urile) campurilor din tabelul de baza din care se extrag
date si, eventual: functiile predefinite SQL, predicatele de selectie (ALL, DISTINCT
etc.) si alte optiuni ale instructiunii SELECT;
expresie_tabel
o expresie care identifica unul sau mai multe tabele ale caror date vor fi actualizate.
Expresia poate fi un nume unic de tabel, numele unei interogari deja salvate sau o
combinatie obtinuta prin oricare dintre cele 3 tipuri de asociere: INNER JOIN, LEFT
JOIN, sau RIGHT JOIN;
criterii_de_selectie
o expresie pe care trebuie s-o satisfaca o inregistrare pentru a fi returnata in dynaset;
ea poate contine pana la 40 de operanzi combinati prin operatori logici; daca
46
INNER JOIN
tabel2
ON
tabel1.camp1
oper_relat
47
Exemplu
Afisarea numelui complet al clientilor,
al firmei si al centrului consultat
SELECT Clienti.Prenume & " "
& Clienti.NumeClient AS [Nume
Client],
Firma.NumeFirma
AS
[Nume
Firma],
CentreCons.NumeCentru
AS
[Nume Centru Cons]
FROM (CentreCons
INNER JOIN Clienti ON CentreCons.CodCentru = Clienti.CodCentru)
INNER JOIN Firma ON Clienti.CodFirma = Firma.CodFirma;
Operatiile LEFT JOIN si RIGHT JOIN
48
Efect
Combina inregistrarile din 2 tabele corelate folosite intr-o clauza FROM.
Sintaxa
FROM tabel1 [ LEFT | RIGHT ] JOIN tabel2
ON tabel1.camp1 oper_relat tabel2.camp2
Operatia LEFT | RIGHT JOIN are urmatoarele parti:
tabel1, tabel2
numele tabelelor ale caror inregistrari sunt corelate;
camp1, camp2
numele campurilor de legatura; daca nu sunt numerice ele trebuie sa fie de acelasi tip
si sa contina acelasi fel de date dar nu trebuie sa aiba neaparat acelasi nume;
oper_relat
oricare dintre operatorii relationali: "=," "<," ">," "<=," ">=," sau "<>."
Exemple
Afisarea tuturor firmelor, fie ca au produse fie ca nu au
(relatia 1 m se bazeaza pe campul CodFirma
SELECT
DISTINCT
Firma.NumeFirma,
Produse.NumeProdus FROM
Firma
LEFTJOIN
Produse
ON
Firma.CodFirma
=
Produse.CodFirma;
Afisarea tuturor produselor, fie ca este mentionata
firma producatoare fie ca nu (aceeasi relatie ca mai
sus)
SELECT
DISTINCT
Firma.NumeFirma,
Produse.NumeProdus FROM Firma
RIGHT JOIN Produse ON Firma.CodFirma = Produse.CodFirma ORDER BY
NumeFirma, NumeProdus;
Interogarea parametrizata
Definitie O interogare parametrizata este o interogare a carei executie consta in
afisarea unei casete-dialog predefinite in care utilizatorul poate introduce criteriul de
selectie sau valoarea care trebuie sa apara intr-un camp. Se poate folosi aceasta
facilitate si pentru criterii complexe: de exemplu, se poate crea o interogare
parametrizata prin care sa se afiseze inregistrarile a caror data calendaristica este
cuprinsa intre anumite limite.
Interogarile parametrizate sunt comode pentru construirea formularelor si rapoartelor.
De exemplu, un raport lunar al incasarilor se poate baza pe o interogare parametrizata;
cand se da comanda de listare a raportului, SGBD afiseaza caseta-dialog solicitand
luna la care trebuie sa se refere raportul; utilizatorul introduce informatia respectiva si
raportul corespunzator lunii este listat.
Pentru parametrizarea interogarilor cu criterii complexe se procedeaza analog, SGBD
afisand atatea casete-dialog cate ii sunt necesare pentru stabilirea criteriului de
interogare. Sa presupunem ca trebuie afisati clientii ai caror firme au fost infiintate intre
1995 si 1997. Pentru aceasta se creeaza mai intai o interogare simpla pe baza
tabelului Firma; in linia Criteria a campului Start se introduce criteriul parametrizat
Between [Data initiala:] And [Data finala:]; cand se executa interogarea se tasteaza in
prima caseta-dialog valoarea 1/1/95 (1 ianuarie 1995) iar in a doua caseta-dialog
valoarea 12/31/96 (31 decembrie 1996)
49
SHORT
LONG
CURRENCY
SINGLE
DOUBLE
DATETIME
(vezi DOUBLE)
LONGTEXT
LONGBINARY
GUID
Memorare
1 caracter
pe byte
1 byte
Declaratia PARAMETERS
Efect
Specifica numele si tipul de date al fiecarui parametru dintr-o interogare parametrizata.
Sintaxa
PARAMETERS nume tip_de_data [, nume tip_de_data [, ...]]
O declaratie PARAMETERS are urmatoarele parti:
nume
numele parametrului. El este asignat proprietatii Name a obiectului si folosit pentru
identificarea parametrului respectiv in colectia Parameters. Acest nume apare in
caseta-dialog creata si afisata de SGBD la executarea interogarii parametrizate. De
aceea textele cu spatii trebuie incluse in paranteze drepte;
tip_de_data
un tip de data recunoscut de program.
Exemple
Declararea unei liste de parametri
50
AS
Tally
FROM Produse INNER JOIN [Comenzi]
ON Produse.CodProdus = [Comenzi].CodProdus
GROUP BY CodCategorie, NumeProdus
HAVING CodCategorie = [Dati codul categoriei:];
Interogarea de tip tabel intersectat (Crosstab Query)
Definitie O interogare de tip tabel intersectat sintetizeaza datele in mod cu totul diferit
fata de o interogarea simpla (de selectie) desi afiseaza rezultatul sub forma unei foi de
date. Ea este tot o interogare pentru calcule, dar acestea sunt mai complexe, deoarece
datele campului sunt grupate dupa 2 criterii simultan. De exemplu, daca trebuie
numarati clientii in functie de subiectul solicitat (plan de afaceri, asistenta etc.) si de
consultantul solicitat atunci o interogare de selectie ar duplica in mod inutil informatia,
si asa greu de urmarit.
O interogare Crosstab procedeaza astfel:
efectueaza calculul dorit (sumare, numarare, valoare medie etc.) asupra datelor din
campul corespunzator din tabelul de baza (aici campul CodClient din tabelul
Consultante); vom numi acest camp camp principal,
identifica cele doua campuri ale caror valori distincte la nivelul fiecarui camp vor
deveni valorile celor doua criterii astfel: valorile distincte ale primului camp devin
antete de coloane, valorile distincte ale celui de-al doilea camp devin etichete de
linii (aici, valorile campului Subiect : Asistenta, Consultanta, PlanDeAfaceri,
respectiv valorile campului CodConsultant : AZ, DM, IU, MS); vom numi
aceste campuri camp-antete respectiv camp-etichete,
afiseaza la intersectia liniei i cu coloana j rezultatul care verifica valoarea din eticheta
liniei i si valoarea din antetul coloanei j (aici, la intersectia liniei AZ cu coloana
Asistenta este afisat numarul clientilor care au solicitat Asistenta consultantului
AZ, de exemplu).
Rezultatul obtinut cu o interogare Crosstab se poate obtine mai simplu cu ajutorul
unei tabele pivot din Ms Excel, importata sub forma unui tabel in BD Access. Pentru
crearea tabelei pivot se poate apela procedura de asistenta PivotTable Wizard.
In concluzie, o interogare Crosstab genereaza grupuri imbricate de inregistrari; ea are
nevoie de cel putin 3 campuri: unul pentru efectuarea calculelor, unul pentru antetele
de coloane si unul, doua sau trei campuri pentru etichetele de linii. Evident, este
51
53
54
Crearea unui tabel de siguranta in care sa fie depuse inregistrarile vechi, devenite
inutile, care urmeaza sa fie sterse.
De exemplu, inregistrarile din tabelul Produse corespunzatoare produselor iesite din
fabricatie pot fi depuse intr-un tabel creat astfel, inainte de a fi sterse din tabelul
Produse.
Crearea unui tabel temporar de catre un utilizator intr-o BD accesata in retea.
Sa presupunem ca BD AsistRom este folosita in retea; evident, expertii fiecarui centru
de consultanta sunt in primul rand interesati de informatia privitoare la proprii clienti. Ei
isi pot crea un tabel temporar extragand din tabelul Clienti inregistrarile care au in
campul CodCentru codul centrului respectiv si pot crea cu ele un tabel nou cu ajutorul
unei interogari MakeTable, la care pot renunta oricand. Daca operatiile de creare de
tabele temporare si de stergere a acestora (cu instructiunea SQL DROP TABLE
nume_tabel) se repeta frecvent atunci se impune compactarea cu regularitate a BD
Crearea rapoartelor care sa afiseze informatii inregistrate la un anumit moment de
timp.
De exemplu, trebuie afisate firmele care au solicitat asistenta firmei AsistRom chiar in
anul in care s-au infiintat. Se poate, evident, crea o interogare pe baza tabelului Firma
si apoi un raport bazat pe aceasta interogare. Raportul si interogarea vor contine insa
numai firmele create in 1997, si - intrucat ele se bazeaza pe datele curente din tabelul
Firma nu permit obtinerea informatiei similare cu privire la anul 1996, 1995 etc.
Stiind ca va fi solicitat un astfel de raport anual se poate crea o interogare MakeTable
pe baza tabelului Firma in fiecare an pe 31 Decembrie (filtrand inregistrarile dupa
campul Start). Apoi se poate crea raportul solicitat pe baza tabelului asociat anului
respectiv, iar tabelul provizoriu poate fi sters sau pastrat.
Accelerarea crearii formularelor si rapoartelor bazate prin intermediul unei interogari pe mai multe tabele.
Fiecare afisare a raportului presupune executia interogarii, deci consuma timp. Este
preferabila extragerea inregistrarilor necesare din tabelele respective si depunerea lor
intr-un tabel nou cu ajutorul unei interogari MakeTable si bazarea raportului pe acest
tabel. Dezavantajul este ca tabelul nou creat nu se actualizeaza automat la modificarea
tabelelor din care si-a extras inregistrarile.
Sintaxa instructiunii SELECT INTO
SELECT camp1[, camp2[, ...]] INTO tabel_nou [IN baza_de_date_externa]
FROM expresie_tabel
unde:
camp1, camp2
numele campurilor care trebuie copiate in noul tabel;
tabel_nou
numele noului tabel care trebuie creat
baza_de_date_externa
calea catre o BD externa
expresie_tabel
o expresie care identifica unul sau mai multe tabele din care provin datele pentru
crearea noului tabel. Expresia poate fi un nume unic de tabel, numele unei interogari
deja salvate sau o combinatie obtinuta prin oricare dintre cele 3 tipuri de asociere:
INNER JOIN, LEFT JOIN, sau RIGHT JOIN;
Observatii
55
Datele din tabelul nou creat mostenesc numai tipul de data si dimensiunea campurilor
din tabelul de baza; ele nu mostenesc insa si celelalte proprietati ale campurilor si
nici setarea cheii primare.
Numele dat noului tabel nu trebuie sa coincida cu numele unui tabel existent deoarece
atribuirea numelui respectiv pentru noul tabel presupune stergerea tabelului deja
existent.
Exemple
Crearea unei copii de siguranta pentru tabelul Consultante, denumita ConsultanteBk
SolicitariCons
56
Efect
Determina stergerea unui grup de inregistrari dintr-un tabel sau din mai multe tabele
simultan. O interogare Delete nu actioneaza asupra campurilor ci asupra inregistrarilor
in totalitate (de exemplu, pot fi sterse printr-o singura operatie toate informatiile
referitoare la centrele de consultanta din tabelul CentreCons care nu au nici un
client);
Utilizare
Stergerea unui grup de inregistrari dintr-un singur tabel.
Stergerea unui grup de inregistrari din mai multe tabele aflate in relatia 1 1 sau 1 m
atunci cand optiunea Cascade Delete Related Fields a relatiei nu a fost selectata
(daca insa criteriile de selectie se refera atat la campuri din tabelul 1 cat si la
campuri din tabelul m atunci interogarea trebuie executata de 2 ori deoarece ea
nu poate sterge printr-o singura operatie atat inregistrarile din tabelul principal cat si
pe cele din tabelul secundar).
Sintaxa instructiunii DELETE
DELETE [tabel.*] FROM tabel
WHERE criterii_de_selectie
unde:
tabel
numele optional al tabelului din care se sterg inregistrari
tabel
numele obligatoriu al tabelului din care se sterg inregistrari
criterii_de_selectie
o expresie pe care trebuie s-o satisfaca o inregistrare pentru a fi stearsa; ea poate
contine pana la 40 de operanzi combinati prin operatori logici. Numai inregistrarile care
satisfac criteriile de selectie vor fi sterse.
Exemplu
Stergerea inregistrarilor dintr-un tabel independent care verifica un criteriu de selectie.
De exemplu, trebuie sterse inregistrarile referitoare la produsele cu pret unitar mai
mare decat 6 unitati
DELETE * FROM Produse WHERE PretUnitar >= 6;
Interogarile specifice SQL
Definitie O interogare SQL este o interogare care modifca insasi structura unui tabel.
Ea nu poate fi creata decat cu ajutorul unei instructiuni SQL .
Clasificare
Exista urmatoarele tipuri de interogari SQL:
interogarea Union (de combinare): combina 2 sau mai multe tabele;
interogarea PassThrough (de transferare): permite aplicatiei SGBD sa transmita
altui SGBD instructiuni SQL si sa primeasca inapoi inregistrari;
interogarea DataDefiniton (de definire a datelor): defineste sau modifica structura
unui tabel.
Interogarea Union (Combinare)
Efect
Combina campurile (coloanele) corespunzatoare din 2 sau mai multe tabele sau
interogari intr-un singur camp (coloana) cu ajutorul unei operatii UNION.
De exemplu, daca fiecare centru de consultanta isi gestioneaza propriile tabele
Clienti, Firma, Consultante, Produse, acestea trebuie fuzionate periodic in tabele
unice; pentru aceasta, se creeaza o interogare Union care combina toate tabelele
58
59
60
61
62
63
AND
[CodFirma] = AFD)
Determinarea produselor al caror pret unitar depaseste pretul unitar mediu in celula
Criteria a campului PretUnitar din grila QBE se introduce expresia:
> (SELECT AVG([PretUnitar]) FROM [Produse])
Determinarea firmelor care produc caiete de matematica si de muzica in celula
Criteria a campului CodFirma se introduce expresia:
ALL (SELECT [CodFirma] FROM [Produse]
WHERE ([NumeProdus] LIKE "*caiet matematica*")
OR ([NumeProdus] LIKE "*caiet muzica*"))
Determinarea firmelor pentru care valoarea totala a productiei depaseste valoarea
medie intai se creeaza un camp nou introducand in prima celula Fields libera
expresia:
Total: [PretUnitar] * [Cantitate]
apoi se introduce in celula Criteria a acestuia expresia:
> ALL (SELECT AVG([PretUnitar] * [Cantitate]) FROM [Produse])
2.3. Algebra relaional
n algebra relaional (relational algebra) o interogare se formuleaz printr-o
expresie constnd dintr-o secven de identificatori (nume de relaii, nume de atribute),
constante i operatori. Pentru exprimarea unei interogri printr-o expresie de algebr
relaional, trebuie s fie precizate urmtoarele elemente:
65
(R)
lista_atribute
conditie
conditie
conine toate tuplurile ce aparin fie relaiei R, fie relaiei S, fie ambelor relaii. Tuplurile
care aparin ambelor relaii se introduc n relaia rezultat o singur dat, adic nu se
duplic.
Intersecia a dou relaii compatibile R i S este o relaie Q = R S care
I
2,...
atributele primei relaii plus toate atributele celei de-a doua relaii. Pentru a se obine
tuplurile relaiei rezultat se combin (se concateneaz) valorile atributelor fiecrui tuplu
din prima relaie cu valorile atributelor tuturor tuplurilor din cea de-a doua relaie.
66
cond1
(R)) =
cond2
cond2
(R))
cond1
cond1
(..
cond2
(R)..)) =
condn
(R)
operaiei de proiecie conine numai atributele din lista de atribute dat ca parametru,
care este o submulime nevid a mulimii atributelor relaiei operand.
Dac lista atributelor de proiecie este o cheie (sau conine o cheie) a relaiei
operand, atunci relaia rezultat are toate tuplurile distincte. n aceast situaie numrul
de tupluri ale relaiei rezultat este egal cu numrul de tupluri ale relaiei operand.
Dac lista de atribute nu este o cheie (sau nu conine o cheie) a relaiei
operand, atunci este posibil ca prin proiecie s se obin dou sau mai multe tupluri
identice, dar n relaia rezultat sunt eliminate tuplurile duplicat.
Jonciunea (cuplarea) - (join) este o operaie binar a algebrei relaionale
prin care se combin tuplurile a dou relaii ntr-o singur relaie.
67
tupluri, unul din relaia R (cu atributele A ,A ,....A ), iar cellalt din relaia S (cu
1
unde fiecare condiie parial (cond ) este o variabil logic, rezultat al unei operaii de
i
comparaie # (unde # poate fi unul din operatorii: =, , <, , >, ) asupra valorilor a
dou atribute A (care aparine relaiei R) i Bi (care aparine relaiei S), deci:
i
cond = A # B
i
Q = R >< S =
J
A1,.An,B1,.Bm,C1,.Ck
(R S)
68
R(A,B) i S(B) astfel nct mulimea atributelor relaiei S s fie o submulime a mulimii
atributelor relaiei R. Relaia Q obinut prin operaia de diviziune are ca atribute toate
D
atributele diferenei celor dou mulimi de atribute (adic acele atribute care aparin
relaiei R i nu aparin relaiei S) i conine acele tupluri t[A] care au proprietatea c
pentru orice tuplu s din S exist un tuplu t n R care are atributul B egal cu tuplul s. Se
poate scrie:
Q (A) = R S =
(R)
D
R.B = S.B
69
La fel ca i reuniunea, operaia de intersecie se exprim n SQL ca
intersecie a dou tabele obinute ca rezultat a dou comenzi SELECT, cu sintaxa:
SELECT lista_coloane1 FROM tabel1 [WHERE condiie1]
INTERSECT
SELECT lista_coloane2 FROM tabel2 [WHERE condiie2];
Operaia de diferen se exprim n SQL ca diferen a dou tabele
obinute ca rezultat a dou comenzi SELECT, cu sintaxa:
SELECT lista_coloane1 FROM tabel1 [WHERE condiie1]
MINUS
SELECT lista_coloane2 FROM tabel2 [WHERE condiie2];
n limbajul SQL, produsul cartezian a dou tabele R i S se obine ca o
variant a instruciunii SELECT, ntr-una din formele:
SELECT * FROM R,S;
SELECT lista_coloane FROM R,S;
n prima form, limbajul SQL admite operaia produs cartezian i n situaia n
care n cele dou relaii operand exist dou atribute cu acelai nume, subnelegnduse c atributele rezultatului sunt ordonate, mai nti fiind atributele primei relatii, urmate
de atributele celei de-a doua relatii.
Pentru cea de-a dou form, atributele cu acelai nume trebuie s fie
calificate cu numele relaiei respective.
Restricia se exprim printr-o form particular a instruciunii SELECT,
n care lista de atribute este format din toate atributele unei singure relaii, iar clauza
WHERE este obligatorie i introduce condiia de restricie:
SELECT * FROM tabel WHERE conditie [clauze_secundare];
Deci in SQL restricia selecteaz o parte din liniile tabelului operand.
Operaia de proiecie se obine prin introducerea listei de coloane n
instruciunea SELECT ca lista a atributelor de proiecie. Sub forma:
SELECT DISTINCT lista_coloane FROM nume_tabel;
instruciunea SELECT reprezint o operaie de proiecie asupra relaiei nume_tabel pe
atributele date n lista_coloane.
Dac lipsete clauza DISTINCT i lista de atribute nu este o supercheie a
relaiei, rezultatul operaiei poate conine tupluri duplicat (deci nu este o relaie n
sensul definiiei din modelul relaional), astfel in SQL proiecia realizeaz o selecie a
coloanelor unui tabel.
-jonciunea se poate exprima direct cu o instruciune SELECT pe dou
sau mai multe tabele, condiia de jonciune fiind introdus prin clauza WHERE.
O jonciune natural se poate exprima n limbajul SQL numai n mod
explicit, adic trebuie ca lista de atribute a instruciunii SELECT s conin numai
atributele diferite din cele dou relaii (fiecare atribut de jonciune se introduce o
singur dat), iar n clauza WHERE trebuie introdus condiia de egalitate a atributelor
corespondente.
Diviziunea se exprim introducnd n instruciunea SELECT explicit lista
atributelor de proiecie i condiia de egalitate a atributelor corespondente din cele
dou relaii prin clauza WHERE.
Exist dou situaii de rezolvare a interogarilor: interogri care se rezolv n
cadrul unei singure relaii i interogri care se rezolv folosind dou sau mai multe
relaii ale bazei de date.
70
Interogrile ntr-o singur relaie se fac atunci cnd toate atributele care
intervin n interogare (atributele de proiecie i atributele din condiie) sunt atribute ale
unei singure relaii R i se poate rezolva la nivelul acelei relaii, ca o proiecie (pe
atributele relaiei rezultat) a restriciei cu condiia impus asupra relaiei date, prin
expresia:
Q=
(R)
lista_atribute
conditie
conditie
FURNIZORI
SECTII
PRENUME
71
-------------------- -------------------Ionescu
Ion
Mihailescu
Dan
Pavelescu
Ioana
Petrescu
Ana
Popescu
Petre
Radu
Mihaela
NUME
PRENUME
-------------------- -------------------Popescu
Petre
Diferenta pe tabelele ANGAJATI si FURNIZORI:
72
IDANGAJAT NUME PRENUME DATANASTERII ADRESA FUNCIE SALARIU IDSECTIE IDSECTIE NUME
------------- ---------- ------------- ------------------ ---------- ----------- ----------- ------------ ---------------------------------------------- -------1
Ionescu
Ion
11.12.1960
Bucureti inginer 5000
1
1
Proiectare
2
Popescu Petre
10.04.1967
Bucureti arhitect 4500
1
1
Proiectare
3
Pavelescu Ioana
11.03.1970
Bucureti desenator 2500
1
1
Proiectare
4
Radu
Mihaela
04.06.1966
Bucureti contabil 3500
2
1
Proiectare
5
Ionescu
Ion
08.10.1965
Bucureti casier
2000
2
1
Proiectare
1
Ionescu
Ion
11.12.1960
Bucureti inginer 5000
1
2
Contabilitat
2
Popescu Petre
10.04.1967
BucurestI arhitect 4500
1
2
Contabilitat
3
Pavelescu Ioana
11.03.1970
BucurestI desenator 2500
1
2
Contabilitat
4
Radu
Mihaela
04.06.1966
Bucureti contabil 3500
2
2
Contabilitat
5
Ionescu
Ion
08.10.1965
Bucureti casier
2000
2
1
Proiectare
Jonctiunea naturala a tabelelor ANGAJATII si SECTII se obtine legand
coloanele IdSectie ale celor doua tabele:
SELECT IdAngajat,ANGAJATI.Nume,Prenume,DataNasterii,
Adresa,Salariu,SECTII.IdSectie,SECTII.Nume,Locatie
FROM ANGAJATI,SECTII
WHERE ANGAJATI.IdSectie = SECTII.IdSectie;
Rezultatul acestei instructiuni este:
IDANGAJAT NUME
PRENUME DATANASTERII ADRESA SALARIU IDSECTIE NUMESECTIE LOCAIE
--------------- --------------- --------------- ---------------------- ------------- --------------- -------------- ------------------- ------------1
Ionescu
Ion
11.12.1960
Bucureti 5000
1
Proiectare
Bucureti
2
Popescu Petre
10.04.1967
Bucureti 4500
1
Proiectare
Bucurest
3
Pavelescu Ioana
11.03.1970
Bucureti 2500
1
Proiectare
Bucurest
4
Radu
Mihaela
04.06.1966
Bucuresti 3500
2
Contabilitate
Ploiest
5
Ionescu
Ion
08.10.1965
Bucureti 2000
2
Contabilitate
Ploiesti
Interogare intr-o singur relatie: Care sunt numele,prenumele si salariul
angajailor in sectia cu numarul 1? Raspunsul la aceasta intrebare se obtine cu
urmatoarea interogare pe tabela ANGAJATI:
SELECT Nume,Prenume,Salariu FROM ANGAJATI WHERE IdSectie = 1;
Rezultatul este:
NUME
PRENUME
SALARIU
-------------------- -------------------- -----------------------Ionescu
Ion
5000
Popescu
Petre
4500
Pavelescu
Ioana
2500
Interogare n dou relaii: Care sunt numele,prenumele si salariul angajailor in
sectia cu numele Contabilitate? Raspunsul la aceasta intrebare se obtine cu o
interogare de tip jomctiune pe tabelele ANGAJATI si SECTII:
SELECT ANGAJATI.Nume,Prenume,Salariu
FROM ANGAJATI,SECTII
WHERE ANGAJATI.IdSectie = SECTII.IdSectie and SECTII.Nume=' Contabilitate';
Rezultatul este:
NUME
PRENUME
SALARIU
-------------------- -------------------- ----------------------Radu
Mihaela
3500
Ionescu
Ion
2000
2.4. Optimizarea interogrilor folosind limbajul SQL
n condiiile realizrii de aplicaii bazate pe tehnologia client/server i
destinate lucrului n reea, fie local sau Internet, este deosebit de important fiecare
aspect care determin mbuntirea performanelor unei baze de date. Pe lng
73
msurile ce pot fi luate n privina creterii capacitii hardware se pot cuta soluii
pentru a optimiza aplicaiile astfel nct s ruleze mult mai repede. :
Urmtoarele patru tehnici mbuntesc performanele interogrilor folosind
limbajul SQL pe o baza de date Oracle:
utilizarea clauzei WHERE n detrimentul clauzei HAVING.
Exemplu: Se dorete gruparea cantitilor vndute pe produse i se utilizeaz
clauza HAVING pentru a selecta numai anumite produse (produsele cu denumirile
Chocolade sau Tarte au sucre). Dac n loc de HAVING se utilizeaz WHERE, se
reduce numrul liniilor (nregistrrilor) care trebuie grupate, deci aceasta este maniera
mai eficient, n condiiile n care rezultatul este acelai.
SELECT Products.ProductName,
Sum([Order
Details].Quantity)
SumOfQuantity
FROM
Products INNER JOIN [Order
Details] ON Products.ProductID = [Order
Details].ProductID
WHERE
Products.ProductName=Chocolade Or
Products.ProductName=Tarte au sucre
GROUP BY Products.ProductName;
SELECT
Products.ProductName,
Sum([Order
Details].Quantity) SumOfQuantity
FROM Products INNER JOIN [Order
Details]
ON Products.ProductID = [Order
Details].ProductID
GROUP BY Products.ProductName
HAVING
Products.ProductName=Chocolade Or
Products.ProductName=Tarte au sucre;
utilizarea cuvntului cheie DISTINCT pentru a gsi o list de nregistrri distincte,
n loc de GROUP BY.
Exemplu: Dac se dorete selectarea numai a produselor pentru care s-au
nregistrat comenzi, trebuie aplicat un SELECT asupra tabelei ORDER DETAILS din
baza de date Northwind. Pentru a furniza o singur dat denumirea produsului, se
poate folosi DISTINCT sau GROUP BY, cu precizarea c prima variant este mai
eficient n cazul unei baze de date cu dimensiuni foarte mari (de ordinul milioanelor de
nregistrri):
SELECT
DISTINCT
Details].ProductID
FROM [Order Details];
(B)
3. DATAWAREHOUSE
3.1. Introducere n depozitele de date
Conceptul original de depozit de date a fost definit de IBM ca fiind un depozit de
informaii i prezentat ca o soluie pentru accesarea datelor deinute n sisteme nonrelaionale. Datorit complexitii i problemelor de perfoman asociate cu
implementarea unor asemenea soluii, ncercrile de a crea un depozit de informaii au
fost respinse. De atunci conceptul de depozit de date a fost de mai multe ori abordat ,
dar numai n ultimii ani aceast soluie a fost vzut ca fiind una viabil i valoroas.
Ultimul i cel mai de succes avocat al depozitelor de date este William H. Inmon, care
a catigat titlul de printe al depozitelor de date datorit promovrii active a acestui
concept.
Conform definiiei lui William H. Inmon din 1993, un depozit de date este a
subject-oriented, integrated, time-variant and nonvolatile collection of data in support of
management's decision making process. Privind enunul cu ochiul unui matematician,
acesta ar putea fi descompus ntr-o definiie ("un depozit de date este o colectie de
date destinate fundamentrii deciziei manageriale") i o caracterizare ("o astfel de
75
colecie de date este (1) tematic, (2) integrat, (3) corelat cu contextul temporal i (4)
permanent").
Depozitul de date (Warehousing) copii ale datelor din mai multe surse sunt
stocate ntr-o singur baz de date, numit depozit de date. Este posibil ca nainte de
stocarea n depozit, datele s fie procesate n anumite moduri, de ex. datele pot fi
76
filtrate, relaiile pot fi unite sau agregate. Depozitul de date se actualizeaz periodic, de
obicei acest proces desfurndu-se noaptea. ntrucat datele sunt copiate din surse,
acestea au nevoie de anumite transformri ca s fie conforme cu schema depozitului
de date.
77
78
ajungnd uneori la zece ani, n funcie de dinamica evoluiei pieei i, deci, de relevana
datelor cu caracter istoric pentru nevoile analizei.
Din punct de vedere tehnic, acesta implic faptul c orice nregistrare din
depozitul de date poate fi plasat n timp. Orice cheie de acces cuprinde i o variabil
temporal.
D. Permanena
Esena aplicaiilor operaionale este actualizarea continu a coleciilor de date,
actualizare realizat n general pe baz tranzacional. Orice tranzacie procesat
implic inserarea unor noi nregistrri, modificarea sau eventual tergerea altora etc.
Cu totul altfel stau lucrurile n cazul depozitului de informaii, unde o astfel de dinamic
lipsete. Practic, singura actualizare care se realizeaz aici este adugarea periodic a
unor date extrase din sistemele operative. Din punctul de vedere al aplicaiilor care
folosesc depozitul de date, accesul la date este doar pentru citire.
Din punctul de vedere al proiectrii, acest diferen este extrem de important. n
sistemul operaional, o tranzacie trebuie s duc colecia de date dintr-o stare
consistent ntr-o alt stare consistent, iar aceast implic mecanisme extrem de
complexe de meninere a integritii datelor, mai ales n situaia sistemelor intens
concureniale: mecanisme de jurnalizare, mecanisme de salvare/restaurare/refacere,
mecanisme de detectare a blocrilor circulare (deadlock) etc. n cazul depozitelor de
date aceste mecanisme sunt inutile, astfel c gradul de libertate ctigat poate fi utilizat
pentru optimizarea accesului la date prin denormalizare, sintetizare, statistici ale
accesrii datelor i reorganizare dinamic a indexrii etc.
Totui, indiferent de definiia depozitului de date, scopul principal al acestuia este
de a integra datele corporaiilor mari ntr-un singur depozit din care utilizatorii pot rula
diverse interogri, pot produce rapoarte i efectua analize.
79
luarea deciziilor strategice i servete un numr relativ mic de utilizatori care sunt, n
general, manageri.
80
82
83
84
85
Oricine a formulat vreodat interogri asupra bazelor de date este contient de faptul
c exprimarea unor asemenea intrebri depeste posibilitile oricrui instrument
user-friendy de raportare. Devine evident necesitatea unor instrumente specializate
OLAP.
A. Caliti
Un bun instrument OLAP trebuie:
S poat s susin analize sofisticate.
S poat fi utilizat eficient de diverse categorii de utilizatori. Managerii de pe
diverse nivele ierarhice nu formeaz o clas omogen de utilizatori din perspectiva
aptitudinilor i abilitilor tehnice. Pentru a putea fi eficient utilizat, trebuie s furnizeze
viziuni intuitive, multidimensionale asupra datelor, s permit o navigare liber i o
prezentare ct mai natural a rezultatelor.
S fie scalabil la volume orict de mari de date. Volumele depozitelor de date sunt
imense, iar creterea lor este continu.
S permit accesul concurent al unui mare numr de utilizatori. Depozitul de date
este centrul informaional al ntregii organizaii i este de presupus c o mare parte
dintre angajai l vor utiliza.
S fie uor de ntreinut i de configurat. Nevoile informaionale ale unei organizaii
evolueaz, iar instrumentele de analiz trebuie s se adapteze n mod continuu.
S fie bazate pe o arhitectur deschis. Evoluia tehnologic poate aduce
schimbri radicale n structura sistemului informaional, care ns nu trebuie s
afecteze instrumentaia utilizat pentru analiz.
B. Arhitectura
Fiind o tehnologie relativ nou, modelul care s-a impus pentru sistemele orientate
spre analiz multidimensional este unul de tip client/server pe trei niveluri.
Bazele de date formeaz nivelul cel mai de jos, responsabil cu stocarea i
regsirea datelor. De regul aplicaiile tranzacionale utilizeaz sisteme relaionale, dar
pentru depozitele de date se folosesc i sisteme multidimensionale. Dat fiind volumul
mare de date, este recomandabil ca SGBD-urile folosite s ofere suport pentru
prelucrri paralele (SMP i MPP; interogri, ncrcri i indexri paralele) i distribuite,
s dispun de mecanisme performante de indexare i de optimizare, s ofere un nalt
nivel de siguran.
Logica aplicaiei este susinut de un "motor analitic" (OLAP Engine), servind ca
server pentru instrumentele desktop. Din perspectiva SGBD-ului care administreaz
depozitul de date, motorul analitic este un client.
Logica prezentrii este reprezentat de instrumentele mnuite de utilizatorul final.
Acestea au acces la datele din depozit prin intermediul motorului analitic. Dac motorul
analitic este un instrument foarte specializat i care de regul este cumprat "de gata",
aplicaiile front-end folosite de utilizatorii finali sunt extrem de diverse. Exist aplicaii
generale care rspund suficient de bine nevoilor unei categorii largi de utilizatori, exist
instrumente specializate pe domenii (cum ar fi de pild analiza financiar) i, n fine,
exist posibilitatea de a dezvolta instrumente foarte specifice unor anumite nevoi,
utiliznd medii de dezvoltare comerciale (de pild Visual Basic) i interfeele de
programare furnizare de serverul OLAP.
86
88
Orizontul temporal al celor dou sisteme este diferit. Exist o suprapunere foarte
mic ntre cele dou.
Depozitul de date conine i date sintetizate, care nu exist niciodat n sistemele
operaionale.
La preluarea n depozitul de date, datele sunt supuse unor transformri radicale
att din punct de vedere fizic ct i logic.
Conform aprecierii lui W. Inmon, redundana datelor ntre cele dou sisteme are de
regul o rat mai mic de 1%. Dar chiar dac acest rat ar fi mult mai mare, valoarea
depozitului de date este imens, deoarece ofer managementului organizaiei o
imagine unic, coerent i semnificativ asupra datelor relevante din perspectiva
analizei economice.
Mai mult, instrumente specializate OLAP permit utilizatorilor s exploreze efectiv
aceast baz informaional, fr a avea nevoie de intermedierea unui serviciu
specializat. Iar ntr-un context economic n care o decizie luat dimineaa are deja
efecte sensibile la ora prnzului, "efectiv" nseamn de fapt "vital".
89
Dar acesta este abia nceputul, deoarece datele trebuie s treac printr-un proces
complex de consolidare. Acest proces implic:
eliminarea datelor nerelevante (a cror semnificaie se leag de procesul
tranzacional, cum ar fi de pild numrul poziiei din factur);
conversia la codificri i reprezentri unitare (conform unor convenii clar
stabilite de administraia depozitului);
curirea datelor (prin eliminarea inconsistenelor i reconstituirea datelor parial
distruse, completarea informaiilor lips cu valori implicite etc);
reorganizarea datelor (adugarea informaiilor temporale unde este cazul,
denormalizare i rearanjare dup subiecte etc).
n afar de datele provenite din sistemul operaional, o cerin tot mai actual o
reprezint consolidarea i integrarea n depozitul de date a datelor provenind din alte
surse. Printre acestea se remarc datele non-relaionale cum ar fi texte, e-mail, foi de
calcul, imagini, obiecte multimedia, baze de date geografice, chiar i reguli comerciale
(business rules). De asemenea, alte surse de date externe pot fi sistemele
operaionale ale partenerilor de afaceri, bazele de date publice sau informaiile
furnizate pe baz de abonament (cotaii bursiere, buletine meteorologice etc).
B. Up-flow
Prin procesul de intrare n depozitul informaional, datele capt un plus de claritate
i de semnificaie. Dar odat ajunse n Data Warehouse ele nu rmn n acest stadiu,
ci se mbogesc n continuare printr-o serie de alte transformri. Aceste procese sunt
numite n mod generic up-flow i au rolul de a aduga valoare informaional datelor
colectate.
Principalele procedee utilizate n acest scop sunt:
Sintetizare. Datele intr n depozit la nivel de detaliu. Cu toate c instrumentele
de analiz pot aplica funcii de agregare, pentru optimizarea accesului la astfel de
informaii de sintez anumite astfel de operaii sunt realizate chiar de administraia
depozitului de informaii. Sintetizarea se realizeaz pe baza dimensiunilor cele mai
utilizate i poate implica nu doar nsumarea unor valori, ci i medii, valori
minime/maxime sau valori obinute prin procedee statistice complexe. Un exemplu
simplu este sintetizarea pe axa timpului. Dac granularitatea este, de pild, la nivelul
zilei, se pot precalcula totaluri sptmanale, lunare, trimestriale i anuale. De
asemenea se pot calcula medii, se pot determina zilele de minim sau maxim (pe lun,
pe trimestru, etc), se pot calcula dispersii etc.
mpachetare. Utilizarea informaiei din depozit nu se face doar on-line. Pentru
cea mai mare parte dintre nevoile informaionale ale organizaiei se utilizeaz sistemul
abonamentelor: un anumit beneficiar (un funcionar, un birou, un departament etc.) are
nevoie de anumite informaii, la un anume nivel de sintetizare, la anumite intervale de
timp. Aceste informaii pot fi livrate ca simple rapoarte, dar cel mai adesea ele trebuie
livrate n formate care s permit beneficiarului s le utilizeze n continuare pentru
analize, prezentri, raportri etc. Cel mai adesea datele se furnizeaz ca foi de calcul,
documente text, baze de date personale, eventual grafice, animaii etc., toate ntr-un
format propriu utilizatorului. De pild datele pot fi plasate n multiple file de calcul
tabelar, n diverse nivele de detaliere, continnd eventual i prezentri grafice.
90
Distribuire. De cele mai multe ori diverse grupuri de utilizatori sunt interesate
doar de anumite categorii de date, astfel ncat pentru a crete disponibilitatea
informaiilor se realizeaz nite mici depozite departamentale, coninnd replici pariale
(cuprinznd doar datele de interes specific) ale depozitului central. Alt situaie
frecvent este cnd repartizarea teritorial a organizaiei impune multiplicarea
depozitului de date n mai multe locuri (de pild replicarea integral sau parial la
filialele din teritoriu). Pe msur ce tehnologiile de stocare i procesare distribuit se
maturizeaz, arhitectura centralizat a depozitelor de informatii va fi nlocuit de o
arhitectur distribuit.
C. Down-flow
Acest flux se refer la administrarea datelor i este destinat s menin "vitalitatea"
depozitului de date. Datorit faptului c se lucreaz cu volume imense de date (de
regul peste 500 GB), se impune o ierarhizare a prioritii datelor n funcie de gradul
lor de utilizare. n general, datele vechi nu se mai consult la nivel de detaliu: foarte
rare sunt cazurile n care cineva este interesat de numrul de buci dintr-un anumit
produs vndute ntr-o anumit zi a anului 1991 la un anumit magazin. Aceste date vor
fi transferate pe un suport mai lent (discuri optice, band magnetic, etc), pstrand la
nivelele de prioritate nalt doar anumite nivele de sintetizare.
n esent, acest flux trebuie s asigure c nici o informaie important nu se pierde
i totodat c informaiile mai puin actuale sau mai puin importante nu blocheaz n
mod inutil canalele de comunicaie i mediile de stocare cu acces rapid.
D. Out-flow
Ieirea datelor spre utilizatori reprezint asa-numitul out-flow. Prin aceast
deschidere, valoarea informaional creat prin data warehousing devine disponibil
pentru ntreaga organizaie, oferind un substanial suport pentru conducerea optim a
activitii. Ca i n cazul fluxul de intrare, fluxul de ieire este posibil doar cu suportul
unui middleware funcional. Spre deosebire de in-flow, unde legtura se fcea mai ales
ctre bazele de date ale sistemului tranzacional, n acest caz middleware-ul trebuie s
vizeze staiile de lucru ale clienilor. Out-flow reprezint "tejgheaua" depozitului de
date.
Exist dou activiti principale care formeaz acest flux:
Accesarea datelor. Aceast activitate se caracterizeaz prin faptul c iniiativa
aparine clientului, care solicit informaiile de care are nevoie. Cererile de acces la
date pot fi de natur ocazional (interogri ad-hoc), de rutin (zilnice, sptmnale etc)
sau, n unele cazuri, chiar n timp-real (continue).
Livrarea datelor. n acest caz iniiativa aparine depozitului de date, care trimite
din proprie iniiativ anumite date ctre anumii clieni. Data Warehouse face publice
diverse obiecte (business objects) care sunt actualizate periodic iar clienii pot s-i
aleag seturile de obiecte care le sunt cele mai utile i s le primeasc automat.
Acestea sunt de regul mpachetate n formate uzuale i pot fi reflectate automat n
documente (prin legturi dinamice de gen publish/subscribe sau DDE).
Deciziile luate pe baza analizei economice facilitate de informaia din depozitul de
date se vor concretiza n operaii economice, consemnate prin tranzacii n sistemul
operativ, care la rndul lui va crea viitoarele date de intrare n depozitul de date. Uneori
91
influena deciziilor poate fi estimat sau msurat tot prin instrumente de analiz. La
modul teoretic mcar, putem considera c acest flux este conectat la fluxul de intrare,
procesul decizional formnd un cerc nchis.
E. Meta-flow
Metadatele, fiind date despre date, descriu structura i coninutul depozitului de
date. Dar cum structura i coninutul au la rndul lor o dinamic, exprimat prin cele
patru fluxuri descrise pn acum, rezult c exist i o dinamic a metadatelor. n
principiu, acest meta-flow descrie i conecteaz cele patru fluxuri, fiind un meta-model
al dinamicii depozitului de date.
Depozitul de date nu este o aplicaie care s poat fi cumprat "de gata". Mai
mult, ea nu este proiectat odat pentru totdeauna. Adaptabilitatea sistemului
operaional la conditiile mereu noi ale activitii impune o adaptabilitate
corespunztoare a sistemului informaional. Dac apar schimbri n aplicaiile
organizaiei, ele trebuie s se reflecte n definiiile procedurilor de intrare asfel ncat s
nu afecteze ieirile. De asemenea, schimbrile n cerinele utilizatorilor trebuie s poat
fi rezolvate prin adaptarea corespunztoare a fluxurilor interne.
Exist dou aspecte importante legate de meta-flow:
meta-flow este instrumentul principal de administrare a depozitului de date.
Cum acest depozit este de fapt puntea dintre datele brute i instrumentele de analiz,
o bun proiectare a acestui flux trebuie s asigure imunitatea fiecrui subsistem n
parte la schimbri intervenite n celelalte.
meta-flow nseamn de fapt modelare, att a sistemului informatic, ct i a
activitii de ansamblu. Ispita perfeciunii ne-ar putea ndemna s ncepem proiectarea
unui Information Warehouse cu modelarea activitii ntregii organizaii i a sistemului
informatic. Probabil c dintre toate abordrile posibile, aceasta este cea mai
pguboas: practic, nu exist anse de a termina vreodat (cu att mai puin n timp
util) o astfel de analiz. Adevrata provocare a proiectrii i administrrii unui depozit
de date este de a obine rezultate imediate i de a permite o evoluie continu a
sistemului prin mbuntiri succesive. Iar cheia succesului n aceast direcie o
reprezint dinamica metadatelor.
92
93
Figura 1
Figura 2
94
95
Concluzii
Pentru a rspunde la ntrebarea dac este sau nu necesar un depozit de date,
trebuie s ncepem prin a analiza modul de obinere a unui raport
ntr-un mediu IT
clasic prin comparaie cu un mediu IT cu aplicaii integrate (hub and spoke) i care
beneficiaz i de o component de depozit de date.
Aceast analiz simpl ar arta c diferenele de cost pentru obinerea i
executarea aceluiai tip de raport pot fi de cteva zeci de ori mai mici n favoarea
mediului IT ce conine un depozit de date. Motivele pentru care apar aceste diferene
in de costurile mai mari ntr-un mediu IT classic, de colectarea datelor prin implicarea
mai multor resurse, de timpul mai mare alocat acestei sarcini i, implicit, de dificultatea
respectrii unor termene.
Mai mult, mediul clasic este incapabil s ofere rspunsuri on line.
O alt diferen const n calitatea datelor, care, ntr-un mediu classic, au o
cantitate mare de balast, de informaii inutile i irelevante pentru raportul n discuie.
Aceste date sortate cu o granularitate mai mare fac raportul mai lung, mai ineficient i,
implicit, mai scump de obinut. Mediile IT clasice nu au fost gndite pentru optimizarea
rapoartelor, ci au fost orientate ctre procese, iar structura lor intern nu permite
aceasta.
Pe de alt parte obiectivul dezvoltrii depozitelor de date este optimizarea
sistemului de raportri i nu ar trebui s constituie o surpriz costurile mult mai mici. Nu
doar executarea raportului inseamn un cost redus pentru o arhitectura ce conine un
depozit de date, ci i dezvoltarea raportului ca munc suplimentar a departamentului
IT. n mediul clasic trebuie mai inti integrate datele i apoi executat raportul, n timp ce
ntr-un depozit de date acestea sunt deja integrate i disponibile imediat.
Cu un depozit de date, un analist are la dispoziie metadate care i reduc timpul de
cutate i identificare a informaiilor relevante i i permit s se concentreze
preponderent pe construirea raportului. Mai mult, ntr-un depozit de date un raport deja
realizat poate fi identificat imediat i folosit pentru generarea unuia nou, ceea ce
nseamn timp de reacie mai bun, lucru imposibil ntr-un mediu IT clasic. Un alt
element ce contribuie la reducerea costurilor ntr-un depozit de date este identificarea
simpl a istoricului datelor, a relevanei i a exactitii acestora, activitate de asemenea
dificil i consumatoare de timp. Mai mult, posibilitile de sintetizare dintr-un depozit
de date contribuie la reducerea costurilor.
Ultimul aspect important este acela c ntr-un mediu IT clasic exist riscul ca
realizarea raportului s nu fie posibil, n timp ce realizarea unui raport intr-un depozit
de date este o sarcin obinuit.
Dincolo de costurile obinerii i executrii raportului, exist diferene majore n
viteza de dezvoltare. ntr-un mediu clasic obinerea unui raport dureaz o perioad mai
mare de timp, n timp ce ntr-un depozit de date acesta se obine imediat sau chiar n
timp real. Alte aspecte de notat ar mai fi cele legate de modificrile care pot fi aduse
unui raport, mai ales c aceasta implic o munc de descoperire, fr ca finalitatea s
fie ntotdeauna evident. Depozitul de date este mediul ideal pentru un proces de
descoperire i schimbare frecvent, astfel nct un raport iniial este doar un punct de
plecare.
96
97
98
99
ntr-un sistem digital, fiecare cadru este reprezentat sub forma unei grile
dreptunghiulare de puncte luminoase numite pixeli. Pentru o imagine n alb i negru, un
bit (0 sau 1) este suficient pentru reprezentarea unui pixel. Nivelurile de gri (n numr
standard de 256) se pot reprezenta dac fiecare pixel este codificat pe 8 biti.
Sistemele color uzuale cu 256 de culori folosesc n consecin tot 8 biti pentru
reprezentarea unui pixel. Evident, pentru reprezentarea unui numr mai mare de culori
ar trebui utilizai mai muli bii n codificarea fiecrui pixel dar introducerea unui numr
mai mare de culori nu este relevant din moment ce ochiul uman nu ar putea distinge
diferene infime ntre dou nuane apropiate.
O imagine reinut prin codificarea fiecrui pixel coninut este de tip BiT-Map (hart
de bii) i are dimensiuni destul de mari. Un format de dimensiuni mult mai mici pentru
memorarea imaginilor i, n consecin, larg utilizat, este GIF. Exist programe care
permit conversia unor tipuri de reprezentri ale imaginilor n alte tipuri de reprezentri
conversia fiierelor de tip imagine static.
Configuraiile obinuite ale monitoarelor de calculator sunt: 640480 pixeli (VGA),
800600 pixeli (SVGA), 1024768 pixeli (XVGA). Aceast caracteristic, dat de
numrul de pixeli de pe ecran, se numete rezoluie. Raportul dintre numrul de pixeli
pe orizontal i vertical, important pentru simetria figurilor, se numete raport de
aspect i are valoarea 4/3.
Numrul de cadre derulate pe secund pentru imaginile animate, ca i n cazul
analogic, este de cel putin 25. Monitoarele de nalt calitate a calculatoarelor
redeseneaz ecranul de 75 de ori pe secund (sau chiar mai mult) iar pentru eliminarea
plpirii, acelai cadru de reafiseaz de cteva ori la rnd. Procesul de reafiare este
simplificat de faptul c ntr-un calculator imaginea ecranului este memorat.
C. Compresia datelor multimedia memorate si transmise
Informaiile multimedia au dimensiuni foarte mari; de aceea, pentru transmiterea lor
trebuie gsit o form comprimat echivalent sau foarte apropiat - cu o dimensiune
considerabil redus dar pstrnd n esen aceleai informaii. Un factor important n
buna funcionare a transmisiilor multimedia actuale l constituie aplicarea tehnicilor de
compresie dezvoltate n ultimele decenii.
Pstrarea ntr-o form comprimat a datelor multimedia are avantaje evidente si din
punctul de vedere al memoriei externe necesare pentru a le reine. n plus, trebuie s
existe produse soft capabile s prelucreze datele n acea form.
Compresia datelor transmise presupune aplicarea unui algoritm de codificare a
datelor nainte de a le emite i a unui algoritm de decodificare la destinaie (acesta din
urm va reconstrui forma iniial, sau o form foarte apropiat de aceasta, din datele
comprimate). Practic, este important ca algoritmul de decodificare s fie rapid i puin
costisitor din punctul de vedere al resurselor folosite fiindc ntr-o reea de calculatoare,
un fiier comprimat reprezentnd informaii multimedia poate fi accesat i transferat
repetat, de mai muli utilizatori. n cazul n care anumite informaii multimedia se
transmit n timp real - de exemplu, n videoconferine, codificarea rapid a datelor este
de asemenea important pentru a se asigura eficiena transmisiei.
Aceste necesiti, la care se adaug faptul c diferene minore n secvenele
multimedia sunt adesea imperceptibile de ctre om, dau o caracteristic important a
codificrilor / decodificrilor multimedia: procesul de codificare / decodificare nu trebuie
100
s fie perfect reversibil dar trebuie s fie rapid si s furnizeze o form comprimat
foarte apropiat de forma iniial, i de dimensiuni convenabile. Acceptarea unui numr
mic de informaii pierdute este foarte avantajoas pentru ratele de compresie uzual
necesare. Astfel, algoritmii de compresie cu pierderi mici de informaie n rezultat fa
de forma original sunt adesea preferai celor care furnizeaz o ieire absolut identic
dar sunt mai costisitori.
Urmrind aceste principii, n 1993 au fost adoptate dou standarde de codificare:
pentru compresia imaginilor statice cu tonuri continue - standardul JPEG (Joint
Photografic Experts Group) iar pentru filme - MPEG (Motion Picture Experts Group),
care folosete codificarea JPEG pentru fiecare cadru separat.
Aceste tipuri de codificri sunt foarte importante pentru eficiena memorrii i
transmiterii imaginilor statice i animate; de exemplu, o imagine va fi mult mai
convenabil memorat n format JPEG dect n format BMP.
D. Probleme care apar n bazele de date multimedia
Aplicaiile multimedia conin mii de imagini statice i dinamice, documente, texte,
segmente audio i video; organizarea acestora depinde de modelarea structurilor i a
coninutului de date.
O prim problem este generat de conflictul care apare ntre aplicarea tehnicilor
bazelor de date i a celor de regsire a informaiilor. n sistemele de baze de date,
modelarea coninutului de date nu este o problem deoarece datele au o structur
rigid. Pe de alt parte, regsirea informaiilor se ocup n special cu modelarea
contextului documentului (prin cuvinte cheie, indexuri, reele semantice, etc).
Design-ul conceptual, logic i fizic este urmtoarea problem care apare i la care
nu exist nc un rspuns clar.
Stocarea datelor multimedia pe suporturi standard; aceast etap prezint
probleme de reprezentare i compresie/decompresie. Tendina n prezent este de
arhivare a informaiilor astfel nct s se reduc dimensiunea zonei tampon n timpul
operaiilor de intrare/ieire. O modalitate de a elimina aceste probleme este folosirea
standardelor ca JPEG sau MPEG; pentru bitmap-uri exist BLOB (Binary Large Object)
care faciliteaz stocarea i regsirea datelor. Pentru documente exist deja aplicaii,
cum sunt Encode/Uuencode (Windows), Tar (Unix), etc., care realizeaz compresia/
decompresia acestora (deocamdat n stadiu incipient de dezvoltare).
Regsirea informaiilor este o problem mai ales n cazul imaginilor dinamice i al
segmentelor audio i video, deoarece de multe ori acestea conin informaiile relevante.
Pentru bazele de date regsirea se face cu ajutorul limbajului de interogare (SQL) i a
structurilor indexate. Problemele care apar se datoreaz n primul rnd navigatoarelor
(foarte diferite) cu care se lucreaz, deoarece fiecare interpreteaz n mod diferit
imaginile, n funcie de platforma pe care ruleaz. n al doilea rnd, exist o limitare
fizic a driverelor cu care se lucreaz pentru regsirea acestor tipuri de informaii; n
multe cazuri informaiile nu pot fi accesate, navigatorul anunnd printr-un mesaj soft-ul
necesar.
O alt problem care apare este cea a performanei. Pentru aplicaiile multimedia
ce conin simple documente i text, constrngerile de performan sunt subiectiv
determinate de ctre utilizatori. n cazul aplicaiilor cu imagine video n micare, sau
sincronizare audio-video, se poate vorbi de o limitare fizic.
101
Internetul
Un prim rspuns la aceste probleme a fost apariia Webului.
Accesarea publicaiilor Web se face cu ajutorul unor soft-uri numite browsere
(Mosaic fiind primul aprut, Internet Explorer, Netscape, etc.), iar scrierea lor se
realizeaz cu ajutorul limbajului HTML (HyperText Markup Language), bazat pe
legturile hipertext.
Pentru folosirea ntregii puteri a multimediei, sistemul trebuie s aib un model de
construcie care s-i permit utilizatorului folosirea de legturi ntre oricare dou noduri
arbitrare ale reelei. Legturile hypermedia realizeaz acest lucru i pot avea mai multe
forme:
pot fi nsoite de o descriere detaliat sau nu a lor
pot s porneasc de la un nod dat sau de la oricare nod
pot fi direcionate sau nedirecionate
La un sistem de informare bazat pe regsirea datelor multimedia, mecanismul de
interogare trebuie s aib acces att la legturi, ct i la informaiile asociate acestora.
Sistemul trebuie s fie facil att pentru definirea imaginilor nsoite de legturi, ca i
pentru definirea legturilor publice i private.
Ierarhizarea informaiilor este procedeul folosit n prezent n bazele de date
multimedia, fiind n acelai timp i primul pas pe care trebuie s-l fac cel ce creeaz
astfel de informaii. O legtur hipermedia generat automat nu prezint nici o
informaie despre nodurile intermediare care au fost conectate. Pe de alt parte,
legturile generate manual i informaiile asociate lor pot fi folosite la obinerea mai
multor informaii despre nodurile care se conecteaz. Se deprinde de aici concluzia c
este necear o prezentare ierarhizat, bazat pe legturi (bidirecionate) nsoite de
informaii a unei astfel de baze de date multimedia. n prezent, documentele multimedia
sunt prezentate ierarhizat prin intermediul limbajului HTML.
HTML-ul pe lng faptul c este un limbaj simplu i total independent de hardware,
permite realizarea tuturor acestor proprieti importante ale oricrui sistem ce folosete
informaii multimedia. Dar editorul HTML nu este WYSIWYG. n prezent exist
procesoare de documente Web care pot fi utilizate att la crearea ct i la formatarea
documentelor HTML, pstrnd caracteristicile acestuia. Dintre acestea cele mai
rspndite sunt: HotMetaL, HTML Assistant, Spider, WebAuthor.
Regsirea informaiei prin folosirea imaginilor indexate a fost rezolvat n mai multe
moduri, fr a da satisfacie total.
Prima abordare folosete tehnica de procesare a imaginilor la identificarea
automat a anumitor obiecte. O problem care apare aici se refer la scal (mrimea
imaginii). Tehnologiile permit ca n documente s se ncarce imaginea, ntr-o prim
faz, la scar redus, ceea ce ar rezolva oarecum problema stocrii acestora.
O alt metod se bazeaz pe una din urmtoarele tehnici de indexare manual a
termenilor i/sau expresiilor ce nsoesc imaginea repectiv:
clasificarea imaginilor ierarhic, dintr-o anumit categorie,
folosirea cuvintelor cheie (analog indexrii documentelor),
utilizarea schemei entitate-atribut-relatie (Leung 1992).
Realizarea tuturor acestor aplicaii n condiii optime nu trebuie s elimine
asigurarea cerinelor unei baze de date, cum sunt: timp minim de acces la date, s
garanteze integritatea, securitatea i independena datelor.
102
103