Sunteți pe pagina 1din 22

Baze de date(BD)-structuri relationale

Sisteme de gestiune a bazelor de date(SGBD)

Majoritatea persoanelor desfasoara activitati care implica interactiunea cu BD:


-BD de evidenta:elevilor de pe universitatea,conturilor bancare
-BD pe internet
-BD din organizatii:operatiuni financiare,productie,salarizare,comenzi,plati
-BD in biblioteci,librarii
BD pot avea un numar de inregistrari diferite de la zeci sau sute de inregistrari(o agenda telefonica)
pana la zeci de milioane de inregistrari(BD privind plata impozitelor).
Utilizatorii unei BD au posibilitatea sa efectueze mai multe categorii de operatii asupra datelor
introduse:
-actualizarea datelor memorate(update)
-interogarea BD(query) pentru a regasi anumite informatii selectate dupa un criteriu ales
-introducerea datelor noi(insert)
-stergerea unor date existente(delete)
O BD este o colectie de date corelate dpdv logic care reflecta un anumit aspect a lumii reale si este
destinat unui anumit grup de utilizatori.Astfel datele pot fi create manual(fisele cartilor intr-o
biblioteca) sau computerizat(majoritatea BD) utilizat la momentul de fata.
O BD este o colectie de date creata si mentinuta cu ajutorul unui sistem de calcul ce permite operatii
de introducere,stergere,actualizare si interogare a datelor.
COMPONENTELE UNUI SISTEM DE BAZE DE DATE
Un sistem de BD este un sistem computerizat de mentinere a evidentei unei anumite activitati
folosind BD.
Componentele unui sistem de BD:
-hardware
-software
-utilizatorii
-date persistente
1.Hardware
Sistemele de BD sunt instalate de obicei pe calculatoare personale dar in unele situatii in care
volumul sau nivelul prelucrarilor este complex sunt necesare sisteme multiprocesor foarte puternice.
Performantele BD sunt influentate direct de specificatiile statiei de lucru:marimea unitatii de
stocare,viteza microprocesorului,dimensiunea memoriei interne etc.
2.Software
Intre BD si utilizator exista un nivel software numit SGBD.
Utilizatori<->Program de aplicatie<->SGBD<->BD
SGBD receptioneaza cererile utilizate de acces la BD pentru operatii de introducere, stergere,
modificari sau interogari,le interpreteaza,executa operatiile corespunzator si returneaza rezultatul
catre utilizator.
SGBD ofera o viziune a BD de nivel inalt facand ca utilizatorul sa nu cunoasca organizarea
particulara a sistemului.
Pe langa SGBD mai exista si alte componente software utilizate in crearea si manipularea BD.
3.Utilizatorii
Utilizatorii unui sistem de BD se pot imparti in:
a)Programatorii de aplicatii sunt cei care dezvolta aplicatiile de BD folosind limbajele de
programare. Aplicatiile efectuate se pot executa independent, pot fi aplicatii online sau sa necesite
funct in cadrul unui mediu definit.
b)Utilizatorii finali sunt utilizatorii care acceseaza BD printr-un program de aplicatie care le ofera
anumite drepturi de acces si de prelucrare a datelor.
c)Administratorul BD este acea persoana care are ca sarcina mentinerea functionalitatii BD prin
stabilirea drepturilor de acces ale diferitelor categorii de utilizatori precum si prin efectuarea
operatiunilor periodice de salvare a datelor, monitorizarea performantelor sistemului si restaurarea
datelor cum este necesar.
4.Date
Datele memorate sunt date persistente,care raman memorate independent de executia programelor de
aplicatie.
Datele persistente ale unei BD se introduce, se sterg sau se actualizeaza folosind date de intrare.
Datele de intrare sunt date nepersistente care sunt memorate si astfel devin persistente doar dupa o
validare a SGBD.
Datele de iesire din system sunt date nepersistente provenind din operatii de interogare a BD si sunt
puse la dispozitia utilizatorului sub forma de rapoarte,liste,rapoarte tiparite etc.
Orice SGBD suporta 2 categorii de limbaje,un limbaj de descriere a datelor si un limbaj de
manipulare. Limbajul de descriere a datelor permite definirea conceptual a datelor neavand nici o
legatura cu modul de memorare. Limjalu de manipulare a datelor permite operatii de
introducere,modificare,stergere si interogare a datelor.
ARHITECTURA INTERNA A SISTEMELOR BD
Arhitectura interna a unui system BD contine 3 nivele functionale:
a)extern: o colectie de scheme externe ce sunt vederi ale diferitor grupuri de utilizatori.Exista cate o
vedere individuala a datelor pentru fiecare grup
b)conceptual:contine schema logica a BD
c)intern:schema fizica a BD
O schema externa a BD corespunde unei reprezentari unice pentru toti utilizatorii descriind datele ce
sunt stocate in BD precum si asocierile dintre acestea.
Schema interna(fizica) a BD specifica modul de reprezentare a datelor pe suportul fizic.
Un system BD suporta o schema interna,o schema conceptual si mai multe scheme externe.
Toate aceste scheme sunt reprezentari ale aceleasi colectii de date ce exista doar in nivelul intern.
Toate aceste reprezentari ale datelor sunt gestionate de catre SGBD ce asigura in acelasi timp si
corespondenta intre schema externa si cea conceptuala precum si cea conceptual si cea interna.
AVANTAJELE UTILIZARII BD
Pe langa avantajele de stocare a unor informatii care poate fi realizata si pe suport fizic(hartie)
sistemele BD ofera o serie de avantaje suplimentare fapt care explica gradul mare de raspandire a
acestora.
Avantaje:
-viteza mare de regasire si actualizare a informatiilor
-compactitatea ridicata(volumul ocupat de sisteme BD este mult mai redus decat volumul ocupat de
documente scrie sau alte fisiere necorelate)
-retundenta scazuta a datelor memorate care se obtine prin partajarea datelor intre mai multi
utilizatori si aplicatii
-posibilitatea de introducere a standardelor privind modul de stocare a datelor, ceea ce permite
schimbul intre diferite organizatii
-mentinerea integritatii datelor printr-o politica de securitate bazata pe acces diferit in functie de rolul
utilizatorului(aceasta securitate se face si prin gestionarea tranzactiilor sau refacerea datelor in cazul
de functionare defectuoasa)
-independenta datelor fata de suportul hardware utilizat SGBD ofera o vedere externa a datelor care
nu se modifica odata cu schimbarea suportului fizic de memorare a datelor=imunitatea structurii BD
si a aplicatiilor la modificare ale hardware-ului utilizat.
CLASIFICAREA SISTEMELOR BD
Exista mai multe criteria de clasificare:
1.Dupa modelul de date: majoritatea BD actuale sunt realizate pe baza modelului de date relational
sau a modelului orientat obiect.Datorita complexitatii deosebite in utilizare a modelului orientat
obiect a fost dezvoltat un alt model, modelul obiect relational care combina avantajele celor 2
modele. Modele de date mai vechi:ierarhic,retea.
2.Dupa numarul de utilizatori:majoritatea BD actuale sunt multiutilizatori,permit accesul concurrent
a mai multor utilizatori la aceeasi BD si o alta categorie de BD este cea a sistemelor monoutilizatori
care permit accesul la un moment dat a unui singur utilizator.
3.Dupa numarul de statii pe care este stocata BD:centralizate si distribuite
Un system de BD centralizat este un system BD in care datele in sistemul de gestiune sunt stocate pe
o singura statie de lucru.Un system centralizat poate suporta mai multi utilizatori la un moment dat
accesand sistemul de pe calculatoare diferite dar BD sunt stocate intr-un singur loc pe o singura
statie.
Un system distribuit poate avea atat date cat si sisteme de gestiune distribuite pe mai multe statii
interconectate printr-o retea de comunicatii.
Sistemele de BD pot fi reprezentate dpdv a functionarii printr-o arhitectura client server.
Intr-un system centralizat exista un singur server care este system de gestiune a BD si care poarta
raspunderea in acelasi timp a mai multor utilizatori in cadrul sistemului multiutilizatori sau a unui
singur utilizator in sistemul monoutilizator.
Clientii sunt programe de aplicatii oferite de furnizori BD care permit accesul la server.
Aplicatiile client pot fi executate pe statii diferite conectate printr-o retea de comunicatie cu statia ce
functioneaza ca server.
Aceasta arhitectura permite o prelucrare distribuita a datelor oferind suplimentar posibilitatea de
configurare a unor cerinte particulare.Astfel serverul BD poate fi un system puternic echipat
corespunzator pentru buna functionare a BD in timp ce fiecare client poate fi un calculator obisnuit
capabil sa execute aplicatia dorita.
O BD distribuita este o colectie de date care apartine dpdv logic aceluiasi system iar dpdv fizic poate
fi memorata pe mai multe statii de lucru conectate prin retea de comunicatie.Sistemul care
functioneaza in acest caz se numeste SGBD.
Clientii ruleaza pe statii din retea accesand SGB distribuite.
MODELAREA DATELOR
Un model este o abstractizare a unui system care ia cele mai multe intorsaturi de la nivelul
sistemului.Acestea sunt relevante dpdv al scopului pentru care se defineste modelul
respective.Tehnica de identificare a trasaturilor caracteristice esentiale ale unui system se numeste
abstractizare.
Un model de date stabileste regurile de organizare si interpretare a unei colectii de date.
In proiectarea BD se folosesc de obicei mai multe modele de date:
-conceptuale(de nivel inalt)
-specializate
Un model conceptual contine o descriere concisa a colectiei de date ce modeleaza o activitate dorita.
In acest caz nu se detaliaza modul de prezentare sau de prelucrare a datelor.
Modelele specializate de date(ierarhic,retea,relational,orientat obiect,obiect relational) impun anumite
structuri speciale de reprezentare a multimilor de entitati si a asocierilor dintre acestea.
O BD este reprezentata printr-o schema conceptual specifica.
Trecerea de la conceptual la specific reprezinta etapa de proiectare a BD.
MODELE CONCEPTUALE DE NIVEL DINAMIC(INALT)
Cel mai utilizat model conceptual este entitate-asociere care reprezinta schema conceptual a BD prin
multimi de entitati si asocieri dintre acestea.
Dezvoltarea acestui model astfel incat sa permita extinderea tipului de entitati este cunoscuta ca
modelul entitate-asociere extins.
Proiectarea modelului entitate-asociere sau entitate-asociere-extins este de obicei una dintre primele
etape din proiectarea BD etapa care se mai numeste proiectarea schemei conceptuale.
Modelul entitate-asociere a fost introdus in 1976 si este un model conceput a unei BD care defineste
multimile de entitati si asocieri dintre ele dar nu impune nici un mod specific de structurare si
prelucrare a datelor.
Elementele esentiale ale modelului entitate-asociere sunt entitatile si asocierile dintre acestea.
O entitate este orice poate fi identificat prin mod distinct.O entitate se refera la aspect,la realitati
obiective care poate fi deosebit de restul universului putand reprezenta un obiect fizic,un concept etc.
Atributele prin care este descrisa o entitate se alege pe baza criteriului relevantei relative la domeniul
de interes pentru care se defineste modelul respective astfel incat sa se asigure diferentierea acelei
entitati de restul universului.
Toate entitatile similare pot fi descrise prin aceleasi atribute colectia tuturor entitatilor dintr-o BD
contine o multime de entitati.
Asocierea reprezinta totalitatea legaturilor existente intre datele din BD.Intre entitati exista 1 sau mai
multe aocieri in functie de scopul BD respective.
O asociere reprezinta o corespondenta intre entitati din 2 sau mai multe multimi.
Gradul unei asocieri este dat de numarul de multimi de entitati asociate. Asocierile pot fi binare sau
de gradul II, multiple intre mai mult de 2 multimi de entitati.
Asociatiile binare sunt la randul lor de 3 categorii in functie de numarul de elemente din cele 2
multimi puse in corespondenta:
1.asocieri unu la unu- prin care un element din multimea E1 ii corespunde un singur element din
multimea E2 si reciproc.se noteaza 1:1
2.asocieri unu la mai multe- prin care un element din multimea E1 ii corespunde mai multe elemente
din multimea E2 dar in acelasi timp un element din multimea E2 ii corespunde un singur element din
multimea E1.se noteaza 1:n
3.asocieri multe la multe- prin care un element din E1 ii corespunde 1 sau mai multe elemente din E2
si reciproc.se noteaza m:n
Cardinalitatea sau multiplicitatea unei asocieri fata de o multime de entitati reprezinta numarul
maxim de elemente din acea multime ce pot fi associate cu un element din alta multime a asocierii.
Diagrama entitate-asociere reprezinta modelul entitate-asociere prin multimi de entitati si asocieri
dintre acestea.
Modelul entitate-asociere-extins permite definirea de subtipuri ale unui tip de entitate care
mostenesc attribute de la tipul de entitate pe care il extend(se numeste supertip) si in plus au atribute
specific semnificatiei lor.Prin definirea tipurilor si a subtipurilor de entitati se pot crea ierarhii de
tipuri de entitati pe mai multe nivele.
In principiu modelul entitate-asociere este suficient pentru modelarea aplicatiilor de natura
economico-financiare pe baza de date traditionale. In alte domenii mai complexe este necesara insa
utilizarea modelului extins in domenii ca telecomunicatiile,proiectare tehnologica,cartografiere
geografica etc.
Tipurile de entitati definite astfel de BD nu sunt tocmai complexe pentru care modelul entitate-
asociere nu este sufficient.
Modelul entitate-asociere extins se reprezinta printr-o diagram entitate-asociere extinsa iar ierarhiile
de tipuri se pot crea prin specializare sau generalizare.
Specializarea este un process de abstractizare a datelor pornind de la un tip de entitate dat prin
definirea unui sau mai multe subtipuri differentiate intre ele in functie de rolul specific pe care il au in
modelul de date.
Generalizarea este un process prin care se creeaza un supertip de entitate pornind de la mai multe
tipuri de entitati.Este process de abstractizare invers specializat.
Pentru definirea unei generalizari se identifica atributele commune ale mai multor tipuri de entitati
urmand ca aceste tiputi sa caracterizeze supertipul entiate.
Atributele care difera raman atribute specifice fiecarui tip.
Mostenirea atributelor este proprietatea principal a ierarhiilor de tipuri de entitate create prin
specializare sau generalizare.
Mostenirea dintre un subtip de entitate si supertipul acestuia se reprezinta in diagrama entitate-
asociere extinsa prin o legatura intre subtip si supertipul de entitate corespunzator printr-un semicerc
orientat catre subtip.
In modelul relational reprezentat mostenirii dintre un subtip de entitate si supertipul extins de acesta
printr-o asociere 1:1 implica faptul ca o entitate instant a unui subtip este in asociere cu o entitate de
baza impreuna reprezentand realitatea modelata.
Constrangeri de specializare si generalizare:
In general un supertip poate avea mai multe grupuri de supertipuri reprezentand o specializare dupa
anumite criteria astfel incat subtipurile sunt legate de supertipul respective prin legaturi impreuna cu
o litera d care semnifica constrangerea de disjunctive.
O specializare are proprietate de disjunctive daca o entitate nu poate sa apartina decat unuia din
subtipurile specializarii.
Daca o entitate poate apartine la 2 sau mai multe subtipuri ale unei specializari atunci acea
specializare se numeste specializare cu suprapunere.
In general ******** specializarilor disjuncte se reprezinta prin litera d plasata intr-un cerc localizat
pe legaturile specializarii.Specializarile cu suprapunere se reprezinta similar insa utilizandu-se litera
o(de la OVER LAPPING).
MODELE DE DATE SPECIALIZATE
Principalele metode de date specializate sunt:
-modelul ierarhic
-modelul relational
-modelul obiect
-modelul biect relational
1.Modelul ierarhic
In modelul de date ierarhic o BD se reprezinta printr-o structura ierarhica de inregistrare de date
conectate prin legaturi.Acest model a fost primul analizat in dezvoltarea BD.
Cel mai cunoscut SGBD bazat pe modelul ierarhic este sistemul IMS(Information Management
Sistem) dezvoltat de firma IBM in cadrul programului spatial APOLLO din anii60.
O inregistrare in modelul ierarhic este o instant a unui tip de inregistrare si consta intr-o colectie de
campuri, fiecare camp continand valoarea unui atribut.
Un tip de inregistrare corespunde unui tip de entitate, iar o inregistrare corespunde unei entitati din
modelul entitate-asociere.
Un tip de legatura in modelul ierarhic este un tip de asociere cu raportul de cardinalitate 1:n intre 2
tipuri de inregistrari.
Tipul de inregistrare din partea cu multiplicitate 1 a asocierii este numit parinte in timp ce tipul cu
multiplicitate n este numit fiu.
Schema conceptual a unei BD in modelul ierarhic se reprezinta printr-un numar oarecare de scheme
ierarhice.
O schema ierarhica este un arbore directionat reprezentat de mai multe niveluri in care modurile sunt
tipuri de inregistrare, iar acelea sunt tipuri de lagaturi.
Fiecare nod cu exceptia nodului radacina are o singura legatura cu un nod de pe un nivel superior
numit si nodul parinte,fiecare nod avand una sau mai multe legaturi catre niveluri inferioare.
Se poate stabili o corespondenta intre schema ierarhica si diagram entitate-asociere(EA) in sensul ca
tipurile de inregistrare corespund tipurilor de entitati iar tipurile de legaturi corespund tipurilor de
asociere.
In modelul ierarhic sunt admise doar legaturi de tipul parinte-fiu care corespunde asocierii 1:1: si 1:n
din modelul entitate-asociere(EA).
Asocierea de tip m:n din modelul entitate-asociere nu se pot reprezenta direct cu modelul ierarhic ci
doar prin multiplicarea inregistrarii de tip fiu atunci cand sunt referinte mai multe inregistrate decat
parinte.
Acest lucru conduce la un grad ridicat de redundanta datelor.
Implementarea modului ierarhic se realizeaza prin memorarea explicita a tuturor legaturilor de tip
parinte-fiu in fiecare inregistrare de tip parinte memorandu-se lista adreselor la inregistrarea fiu cu
care este asociat.
Din acest motiv pentru utilizarea modelului ierarhic se pot rezolva doar interogarile pentru care au
fost definite explicit legaturile necesare.
Avantaje:
-simplitatea si eficienta in calcul,dar cu toate acestea datorita redundantei datelor modelul nu mai este
folosit
2.Modelul de date retea
Modelul de date retea foloseste o structura de grafic pentru definirea schemei conceptuale a
BD.Nodurile graficului sunt tipuri de entitati,iar muchiile grafurilor explicit asocierile dintre tipurile
de entitati.
Principala deosebire fata de modelul ierarhic este ca in acest caz legaturile de tip m:n se reprezinta
fara duplicarea inregistrarilor fiecare inregistrare fiind referita in mai multe inregistrari.
Principalul dezavantaj este ca si in acest caz inregistrarea trebuie definite inca din faza de proiectare
prin memorarea explicita a legaturii intre tipurile de entitate.
In momentul actual utilizarea acestui model este restransa fiind utilizat in modelarea scenelor
tridimensionale in realitatea virtual.
3.Modelul relational
Modelul relational se bazeaza pe notiunea de relatie din matematica care corespunde unei multimi de
entitati de acelasi tip si are o reprezentare usor de inteles si de manipulate ce consta dintr-un table
bidimensional compus din linii si coloane.
Fiecare linie din table reprezinta o entitate si este compusa din multimea valorilor atributelor entitatii
respective, fiecare atribut corespunde unei coloane a tabelului.
Modelul relational a fost propus de E.F.CODD in anii 70 fiind realizat in cadrul firmei IBM.
Chiar daca notiunile de table si relatie difera in esenta lor cele 2 denumiri se pot folosi in general
interschimbabil sugerand acelasi lucru.
Principalele caracteristici:
-datele sunt percepute de utilizatori ca tabele si numai ca tabele
-operatorii care pot fi folositi pentru prelucrarea datelor genereaza un table rezultat din tabele
operante.
-asocierea dintre tabele se realizeaza prin intermediul egalitatii valorilor unor attribute commune
Acest lucru permite sa se poata crea orice interogare fara a fi nevoie in prealabil sa fie definite
legaturile explicit dintre cele 2 tabele(asa cum este necesar in cadrul modelelor ierarhic si retea)
Primul system de gestiune al bazelor de date relationale a fost sistemul R dezvoltat de compania IBM
in anii 70.
Pe langa avantajul unui model de date prcis si simplu sistemul relational beneficiaza si de un limbaj
de programare, unanim recunoscut si acceptat numit SQL.
4.Modelul orientat obiect
Modelul orientat obiect este concept unificator in informatica fiind aplicabil in programare in
proiectarea hardware-ului, la a interfetelor, a BD etc.
SGBD orientate obiect se bazeaza pe limbaje de programare orientate obiect si au capacitate de
persistent.In sensul ca datele sunt independente de tipul de viata al programului care le creeaza sau
acceseaza prin memorie pe un suport magnetic.
Acest model a aparut deoarece modelul relational a fost considerat insuficient de expresiv si cu
performante de executie reduse.
Modelul obiect este utilizat in general pentru proiectarea asistata de calculator. Sisteme de informatii
geografice sau medicina.
Caracteristicile fundamentale:
-abstractizarea
-mostenirea
-incapsularea
-modularitatea
In programarea orientat obiect programele sunt organizate ca si colectii de obiecte fiecare obiect fiind
o instant a unei clase.
Fiecare clasa reprezinta abstractizarea unnui tip de entitate din realitatea modelata iar clasele sunt
member ale unei ierarhii de clase corelate intre ele prin relatii de mostenire.
Orice obiect este incapsulat, ceea ce inseamna ca reprez lui nu este vizibila utilizatorilor care au
acces doar la functiile pe care acel obiect este capabil sa le execute.
Clasele si obiectele unui program sunt grupate in module ce pot fi compilate separat ceea ce reduce
complexitatea de manevrare a datelor.
Pentru dezvoltarea unui SGBD orientat obiect se poate aborda una din urmat strategii:
-extinderea unui limbaj de programare orientat obiect cu capacitate de administrare a obiectelor
persistente
-extinderea unui limbaj de programare relational cu capacitate de orientare spre obiect
-dezvoltarea unui limbaj orientat obiect pentru BD complet nou care sa asigure crearea si interogarea
obiectelor persistente.
Intre avantajele SGBD orientat obiect se evidentiaza capacitatea acestora de a define si manevra
tipuri de date complexe care se pot extinde prin mecanismul de mostenire ceea ce duce la cresterea
performantelor.
Principalul dezavantaj il reprezinta complexitatea mare a bazei de date si a aplicatiilor deoarece
programatorii trebuie sa prevada in structura obiectelor toate legaturile necesare tuturor
interogarilor.Cu cat interogarile sunt mai complexe cu atat sunt necesare mai multe legaturi intre
obiecte si deci se complica structura acestora.
5.Modelul obiect relational
Acest model reprezinta extinderea modelului relational cu caracteristici ale modelului orientat obiect
pentru prelucrarea tipurilor de date complexe.In esenta modelul obiect relational pastreaza structura
datelor in relatii reprezentate ca tabele,dar adauga posibilitatea definirii unor noi tipuri de date pentru
domeniile de valoare a atributelor.
Tipurile de date definite de utilizator pot fi extinse prin mecanismul de mostenire si pentru fiecare tip
sau subtip se pot define metode pe care le pot executa cu obiectele de acel tip.
In general dezvoltarea SGBD obiect relational se realizaza prin extinderea sistemelor relationale in
mod gradat adaugandu-se de la o versiune la alta cat mai multe caracteristici posibile ale modelului
obiect pastrand caracteristicile modelului relational.
SQL SERVER- este system de gestiune BD relationale dezvoltat de Microsoft pentru SO.
Windows Microsoft ACCESS este unul dintre cele mai cunoscute SGBD relationale pentru pc,
dispune de interfata grafica care faciliteaza interactiunea cu utiliztorul.
MY SQL-SGBD relationale cu implementari pe S.O. Windows,Linux,Unix.
RELATII
O BD relationala este compusa dintr-o multime finite de relatii fiecare relatie reprezentand un tip de
entitate sau asociere dintre 2 sau mai multe tipuri de entitati din aceasta definitie rezulta ca intr-o BD
fiecare relatie este unica.
O relatie se defineste prin intermediul atributelor sale.
Atributele unei relatii sunt atributele tipului de entitate sau de asociere pe care le reprezinta relatia
respective.Fiecare atribut ale unei relatii are un domeniu de definire si poate lua o singura valoare
pentru fiecare tuplu.
Un domeniu de definitie este o multime cu nume de valori atomice care au acelasi tip, avand o
anumita semnificatie din care isi iau valori atributele relatiilor.
Schema relatiei se noteaza cu 'r' [relatie] (a1,a2....an) este compusa din numele relatie si din lista
ordonata a domeniului sau de definitie notat cu D(ai).
Schema relatie este folosita pentru a descrie relatia respectiva, si se mai numeste tipul sau
intesiteatea relatie.
Numarul de atribute al schemei unei relatii se numeste GRADUL RELATIEI.
O relatie r definita pe schema r(a1 a2 ... an) este o multime de n tupluri, fiecare tuplu fiind o lista
ordonata de n valori notata cu t = v1, v2... vn unde fiecare valoare corespunde unui atribut al relatiei.
OBSERVATIE : din aceasta definitie rezulta ca intr o relatie nu exista tupluri duplicat, adica doua sau
mai multe tupluri identice, pentru ca relatia este o multime matematica de tupluri.
Tot din aceeasi definitie rezulta cardinalitatea relatie reprezentata de nr de tupluri.
O relatie corespunde in general unei multimi de entitati din diagrama entitate - asociere a unei baze
de date, iar un tuplu reprezinta o entitate din multimea de entitati.
Atributele tipului de entitate din modelul conceptual de nivel inalt devin atributele relatie in modelul
relational.
De exemplu relatia angajati se defineste prin angajati (nume, prenume, data_nasterii, adresa, functie,
salariu).
Domeniile de definitie ale atributelor se specifica prin numele domeniului, semnificatia acestuia,
tipul de date si restrictii asupra valorilor in cadrul tipului de date.
De exemplu, domeniul corespunzator campului nume reprezinta domeniul numelor de persoane
reprezentate printr-un sir de maxim 30 de caractere (ne imaginam ca nu exista un nume mai lung de
30 de carectere) in care primul caracter este litera mare urmand ca celelalte litere sa fie mari sau mici.
campul data_nasteri este format din domeniul datelor calendaristice reprezentate prin trei numere
intregi separate prin simbolul -, primul nr reprezentant anul, format din patru cifre, al doilea si al
treilea formate din cate doua cifre (ziua si luna).
Suplimentar pentru campul salarii este reprezentat printr-un nr zecimal.
Intr-o tabela nu este necesar ca fiecare atribut sa aiba un domeniu diferit.
Eeste posibil ca unul sau mai multe domenii sa coincida.
De exemplu domeniul apartinand campului data_nasterii poate fi similar domeniului ce reprezinta
data_angajarii.
REPREZENTAREA RELATIILOR PRIN TABELE
O tabela este o reprezentare a unei relatii si este compusa din urmatoarele parti:
- numele tabelei care este identic cu numele relatiei pe care o reprezinta
- un numar de coloane cu un nr de atribute ale relatiei, fiecare coloana reprezentand un atribut.
- capul tabelei in care se inscriu numele atributelor relatiei, fiecare atribut fiind inscris in coluana
corespunzatoare.
- o multime de linii, fiecare linie corespunzand unui tuplu, deci unei singure entitati, in fiecare
element al unei linii inregistrandu-se valauarea atributului corespunzator coloanei in care se afla
elementul respectiv.
Notiunile de tabela si relatie sunt identice, sugerand acelasi lucru, notiunea de relatie fiind insa o
notiune abstracta.
Reprezentarea unei notiuni abstracte cum este relatia intr-o forma usor de interpretat cum e tabela
reprezinta una din caracteristicile de basa ale modelului relational.
Intr-o tabela nu este importanta ordinea tuplurilor, doarece tabela este definita ca o multime de
tupluri.
ORDONAREA VALORILOR ATRIBUTELOR IN TUPLURI
Tuplul este considerat o lista ordonata de n valori ale atributelor, ordinea valorilor atributelor in
tupluri nefiind importanta atata timp cat se face o legatura intre atribut si valoarea acestuia.
Daca presupunem schema relatiei definita ca o multime de atribute r(a1 a2 ... an) relatia r este o
multime de n tupluri, fiecare tuplu fiind compus dintr-o multime de n valori ordonate t (a1 v1, a2
v2 ..... an vn) unde vi reprezinta valoarea atributului ai din domeniul sau de definitie.
In aceasta definitie ordinea atributelor nu mai conteaza deoarece numele atributului si valoarea lui
sunt grupate impreuna si de aceea aceasta definitie este mai generala.
Catalogul sistemului reprezinta partea centrala a oricarui SGBD in care se memoreaza descrierea
bazelor de date pe care acesta le admisistreaza.
Catalogul sistemului este o mica baza de date in care sunt memorate date despre datele stocate, aceste
informatii fiind numite METADATE.
In sistemele de gestiune a bazelor de date relationale, catalogul este compus din relatii care pot fi
actualizate sau interogate folosind chiar comenzi ale SGBD in catalog sunt descrise relatiile,
interogarile, procedurile stocate sau functiile definite de utilizatori.
LIMBAJUL SQL
Este un limbaj utilizat de majoritatea sistemelor de baze de date relationale pt definirea si
manipularea datelor. A fost inventat in anii70 in cadrul companiei IBM iar in anul 1987 Institutul
American pt Standarde a elaborat un standard pt limbajul SQL.
Majoritatea SGBD urilor relationale actuale suporta standardul SQL 2, fiecare implementand un
diabet specific. In unele implementari ale limbajului pot lipsi unele comenzi standard, dar pot exista
si extensii specifice, care prin utilizare reduc gradul de portabilitate al programelor realizate, adica un
program realizat intr-un astfel de SGBD nu poate functiona pe un alt calculator unde exista un alt tip
de SGBD.
Limbajul SQL foloseste terminii de tabela, linie si coloana pt a desemna o relatie, un tuplu sau un
atribut, deci este orientat catre reprezentarea datelor in tabele, care este mult mai intuitiva pt
proiectanti si pt programatori.
Limbajul SQL cuprinde atat componenta de descriere a datelor relationale cat si componenta de
manipulare a datelor, ambele fiind absolut necesare in gestiunea bazelor de date.
Pe langa aceste componente principale, standardul SQL mai cuprinde si urmatoarele elemente :
1.Controlul tranzactiilor care contine comenzi pt specificarea tranzactiilor
2.Controlul securitatii si al protectiei datelor care contine comenzi de administrare a bazelor de date
pt definirea utilizatorilor si a drepturilor acestora de acces la tebele.
Aceasta componenta este puternic dependenta de SGBD, administrarea bazelor de date reprezentand
o activitate foarte complexa.
Limbajul SQL este un limbaj neprocedural, o instructiune SQL specificand ce informatii trebuie sa
fie setate sau obtinute, netrebuind sa specifice procedura cu care se apreciaza.
Limbajul SQL contine numai instructiuni de definire si manipulare a datelor si nu contine instructiuni
de control al fluxului executiei.
O instructiune SQL este o secventa de elemente componente ce se termina cu i fiecare instructiune
SQL contine o comanda care specifica ce actiune se efectueaza, urmata de alte elemente componente
ce semnifica operatii, clauze sau parametrii. De exemplu, comanda SELECT * FROM studenti
contine comanda SQL SELECT urmata de alte elemente ale instructiunii. Un element al unei
instructiuni poate fi un cuvant cheie , un identificator, o constanta, sau un caracter special. Cuvintele
cheie sunt elementele componente cu semnificatie fixa in limbajul SQL. Acestea pot fi comenzi, de ex
SELECT, INSERT, UPDATE, DELETE, operatori :and,or,not,like, sau clauze :where, set, values.
Identificatorii sunt elemente componente care denumesc tabele, coloane sau alte obiecte ale bazei de
date.
Pe langa acest tip de identificatori simpli, formati de obicei dintr-un singur cuvant, mai exista un tip
de identificatori numiti IDENTIFICATORI DELIMITATI care sunt formati dintr-o secventa de
caractere avand la inceput si la sfarsit simbolul ghilimele.
Constante :pot fi siruri de caractere, numere intregi, numere reale sau nule.
O constanta sir de caractere consta intr-o secventa de caractere delimitata la inceput si la sfarsit de
simbolul apostrof.
Caracterele speciale- unele caractere speciale care nu sunt litere sau cifre pot avea rol de operatori
SQL sau pot avea o semnificatie speciala in cadrul comenzilor SQL.
De exemplu, simbolul (;) este utilizat pt delimitarea sfarsitului unei comenzi. Simbolul (.) este utilizat
ca punct zecimal, iar caracterul (*) este folosit ca operator de inmultire sau cand urmeaza specificarea
tuturor coloanelor dintr-o tabela atunci cand urmeaza dupa cuvantul SELECT.
Expresii, operatori si functii SQL
O expresie SQL consta in unul sau mai multi operanti, operatori si paranteze.
Un operator poate fi numele unei coloane dintr-o tabela, o constanta sau o valoare returnata de o
functie, in timp ce parantezele sunt utilizate pt a preciza ordinea operatiilor, in situatia in care aceasta
ordine este diferita de cea implicita.
Operatorii de comparatie in SQL :
-A Beetween, MIN, AND, MAX, compara A cu doua valori MIN si MAX
-A IN(v1,v2vn) compara A cu o lista de valori v1,v2vn
-A IS NULL compara A cu valoarea nula
-A IS NOT NULL compara A cu NOT NULL
-A LIKE compara A cu un sir de caractere
Operatorii logici ai limbajului SQL sunt notati prin cuvintele cheie AND, OR, NOT. Toti acesti
operatori se aplica unor variabile logice cu 3 valori(adevarat, fals si nul). Valoarea NULL semnifica
lipsa de informatie.
Operatorii relationali sunt notati prin cuvinte cheie cum ar fi UNION, INTERSELECT sau MINUS
Functiile definite in SQL sunt de doua categorii :
-functii agregate
-functii scalare
Functiile agregate calculeaza un rezultat din mai multe linii ale unei tabele (sum, min, max, avg).
Functiile scalare primesc unul sau mai multe argumente si returneaza valoarea calculata sau NULL in
caz de eroare.
TIPURI DE DATE SI DOMENII
In limbajul SQL sunt definite mai multe tipuri de date :numeric, text, sir de caractere, sir de biti, data
calendaristica si timp.
Tipul numeric include numere intregi de diferite dimensiuni.
Sir de caractere- permite definirea sirurilor de caractere de lungime fixa sau variabila.
Duble tipuri reprezinta siruri de n sau mai mici decat n caractere. In cazul celor cu lungime fixa se
completeaza cu spatii libere sirul pana ajunge la lungimea n, iar in cazul celor variabile se memoreaza
doar atatea caractere cate are sirul.
Tipul sir de biti defineste secvente de cifre binare, care pot lua valoare 0 sau 1, de lungime fixa sau
variabila.
Tipurile pt data calendaristica si timp : domeniile atributelor in SQL se specifica pe baza tipurilor de
date predefinite ale limbajului SQL, deci observam ca sunt destul de diferite fata de notiunea
teoretica de domeniu, fiindca nu se face nicio precizare a semnificatiei domeniului.
Instructiuni SQL de definire a datelor
Componenta de definire a datelor limbajului SQL permite modificarea, crearea si distrugerea
obiectelor bazei de date, a vederilor, indexurilor sau a procedurilor.
Crearea se face cu ajutorul instructiunii CREATE avand urmatoarea sintaxa :CREATE TABLE nume
tabela (coloana 1 domeniul 1 [constrangeri coloana 1] coloana n domeniul n [constrangeri coloana
n] [constrangeri tabela].
De ex : create table studenti (cod_matricol (text,(6), nume (text, (35) ), specializare (text(20))
Instructiunea CREATE TABLE defineste atat un tip de relatie cu atributele specificate, cat si o
variabila relatie care initial este vida, nu contine niciun tuplu.
Tabelele create cu instructiunea CREATE TABLE sunt numite si tabele de baza, ele fiind memorate
in fisierele bazei de date si apoi putand fi accesate pt introducerea, modificarea sau integrarea datelor.
Un tabel vedere este un tabel virtual care nu este memorat fizic in fisiere ce reprezinta o solutie dupa
un anumit criteriu a datelor memorate in unul sau mai multe tabele de baza.
Comanda de modificare a tabelelor este ALTER TABLE. Ea permite adaugarea sau stergearea unor
atribute, modificarea domeniilor unor atribute precum si adaugarea, modificarea sau stergerea unor
constrangeri ale tabelei.
Pt stergerea unei coloane dintr-o tabela se utilizeaza cuvantul cheie DROP, in comanda ALTER
TABLE. De exemplu, daca dorim sa stergem coloana specializare din cadrul tabele studenti se face
prin ALTER TABLE studenti DROP specializare.
INSTRUCTIUNI DE MANIPULARE A DATELOR
Instructiunile de manipulare contin una din comenzile SELECT, INSERT, UPDATE, DELETE.
Instructiunea SELECT este instructiunea de interogare a limbajului SQL prin care se regasesc
informatiile dorite din una sau mai multe tabele ale bazei de date.
Sintaxa instructiunii SELECT este SELECT[distinct] lista coloana FROM lista tabele [where
conditie] [clauze secundare]
Ca rezultat al instructiunii SELECT se obtine o tabela care contine coloanele din lista coloanelor ale
acelor linii din produsul cartezian al tabelelor din lista de tabele pt care expresia logica conditie este
adevarata.
In instructiunea SELECT se remarca 3 clauze fundamentale :SELECT, FROM si WHERE.
Clauza SELECT defineste coloanele care vor aparea in rezultat, FROM defineste tabelele in care se
regasesc aceste coloane, iar WHERE defineste conditia pe care toate liniile din tabela relutata trebuie
sa le respecte. Clauzele secundare sunt ORDER BY, GROUP BY si HAVING.
Clauza SELECT introduce lista coloanelor unor tabele sau expresii care vor fi selectate si afisate..
coloanele din lista trebuie sa apartina uneia din tabelele specificate in clauza FROM.
De exemplu SELECT nume FROM salariati va selecta toti salariatii din tabela cu acelasi nume,
conditie obligatorie fiind ca atributul nume sa se regaseasca in tabela salariati. Interogarea de mai sus
poate da doua sau mai mai multe linii identice in cazul in care avem mai multi salariati. In aceasta
situatie, daca se doreste afisarea fiecarui nume o singura data, se va utiliza parametrul DISTINCT pt
eliminarea liniilor duplicat. Interogarea SELECT DISTINCT nume FROM salariati . daca dupa
clauza SELECT in locul numelor de coloane se foloseste simbolul * atunci se vor selecta toate
atributele produsului cartezian al tabelelor specificate in clauza FROM.
SELECT * FROM angajati va afisa toate coloanele cu toate valorile, fiindca nu avem conditie.
In clauza SELECT se pot introduce functii totalizatoare si functii agregate.
Principalele functii agregate sunt :
-COUNT calculeaza nr-ul de linii al rezultatului
-SUM calculeaza suma tuturor valorilor dintr-o coloana
-MAX calculeaza valoarea cea mai mare dintr-o coloana
-MIN calculeaza valoare minima dintr-o coloana
-AVG calculeaza media aritmetica a valorilor dintr-o coloana
Ex : SELECT COUNT (*) FROM angajati ne va da nr-ul total de inregistrari din tabela angajati ,
adica nr-ul de angajati.
In clauza SELECT se pot redenumi atributele sau se pot specifica nume pt expresii, folosind
urmatoarea sintaxa : SELECT nume 1, AS, nume 2 AS nume FROM lista
tabele WHERE conditie
Ex : salariul net pe baza salariului brut stiind ca salariul net reprezinta 65% din salariul brut vom avea
: SELECT nume, sal_brut*0.65 as sal_net FROM angajati
OBS : Noul nume care urmeaza clauzei AS trebuie sa fie un singur sir de caractere, daca sunt mai
multe cuvinte se va considera ca nou nume doar primul cuvant dupa AS, urmand ca celalalt cuvant sa
reprezinte o eroare de sintaxa.
Clauza FROM este obligatorie daca intr-una din clauzele SELECT,WHERE,HAVING apar nume de
coloane ale unor tabele. In acest caz, lista de tabele care insoteste clauza FROM trebuie sa contina
numele tuturor tabelelor separate prin virgula ale caror coloane se folosesc.
Daca lista contine mai mult de o tabela, atunci numarul coloanelor din clauza SELECT trebuie sa fie
diferit, iar daca nu sunt diferite se va specifica numele tabelei din care fac parte coloanele respective.
De exemplu, daca avem si in tabela angajati si in tabela departamente campul nume si se doreste
afisarea numelui anagajatilor alaturi de numele departamentelor in care lucreaza, vom avea SELECT
angajati.nume, departamente.nume FROM angajati, departamente, WHERE
angajati.cod_dep=departamente.cod_dep
Clauza WHERE restrictioneaza tuplurile returnate ca rezultat la acele tupluri care indeplinesc
conditia introdusa de aceasta clauza sub forma unei experesii logice. O expresie logica se construieste
din valori logice, operatori logici (and, or , not) si paranteze. O valoare logica se obtine in mod
obisnuit ca rezultat al comparatiei intre doi operanti, folosind un operator de comparatie. Un operant
poate fi un atribut, o constanta, valoarea unei expresii logice sau valoarea returnata de o functie.
Clauza ORDER BY introduce numele atributului dupa care se face ordonarea liniilor in tabela
rezultat. Ordonarea se face implicit crescator cand campul este un nr, si alfabetic, atunci cand campul
este un sir de caractere. In situatia in care se doreste ordonarea descrescatoare, se va utiliza dupa
numele campului cuvantul DESC. SELECT nume, salariu FROM angajati ORDER BY salariu DESC
ne va face ordonarea salariatilor, pornind de la cel cu salariul cel mai mare, ajungand la cel cu salariul
cel mai mic.
Clauza GROUP BY se foloseste pentru gruparea rezultatelor functiilor agregate in functie de
valoarea uneia sau mai multor coloane. Pt aceasta, in instructiunea SELECT se introduce clauza
GROUP BY urmata de numele coloanei dupa valoarea careia se doreste gruparea rezultatelor functiei
agregate. In acest caz, functia agregata se aplica separat doar pt acele linii care au aceeasi valoare a
atributelor specificate in group by.
SELECT COUNT (*) , cod_depFROM angajati GROUP BY cod_dep- ne va afisa pt fiecare cod de
departament, cati angajati avem.
Clauza HAVING- functiile agregate nu pot fi utilizate impreuna cu o clauza WHERE. Pt folosirea
unei functii agregate intr-o conditie, se va utiliza clauza HAVING, care este asemanatoare cu
WHERE, dar care permite utilizarea functiei agregate in expresia conditionala.
Select nume From angajati Having salariu=max(salariu) va returna numele salariatului cu salariul
maxim.
SUBINTEROGARILE
Mai sunt numite si instructiuni select imbricate. Instructiunile select se pot imbrica pe mai multe
niveluri, o instructiune avand ca argument rezultatul unei alte instructiuni numite subinterogare.
Cea mai cunoscuta sintaxa este : SELECT lista atribute FROM tabela 1 WHERE coloana x IN
(SELECT coloana x FROM tabela 2 WHERE conditie)- in aceasta constructie valoarea de
comparatie din clauza where a primei instructiuni select se defineste printr-o subinterogare car reiese
din alta instructiune select. De exemplu, daca dorim sa afisam numele salariatilor cu salariul cel mai
mare, dar neutilizand having, putem utiliza o subinterogare astfel : SELECT nume FROM angajati
WHERE salariu=(SELECT max(salariu) from angajati)
INSTRUCTIUNEA INSERT
Se utilizeaza pt introducerea datelor in tabele avand urmatoarea sintaxa : INSERT INTO nume tabela
(col1, col 2coln) VALUES (val1, val 2,.val n)
OBSV :- intre valori si numele de coloane trebuie sa existe o corespondenta 1 la 1pt ca fiecare
valoare sa intre pe coloana dorita.
-daca se cunoaste cu exactitate ordinea coloanelor din tabela nu mai este necesara specificarea
acestora in clauza INSERT si este necesara doar introducerea valorilor in aceeasi ordine.
Ex :daca avem tabela salariati (CNP, nume, salariu) : INSERT INTO angajati (salariu, nume, CNP)
values (1000, ana popescu, 384093824902384) sau se pot introduce valori direct in ordinea
coloanelor din tabela : INSERT INTO salariati VALUES (38059830, ana popescu, 1000 )
INSTRUCTIUNEA UPDATE
Permite actualizarea valorii coloanelor din una sau mai multe linii ale unei tabele. Sintaxa generala :
UPDATE nume tabela SET coloana 1=expresie 1, coloana 2=expresie 2..[WHERE conditie]
Clauza WHERE permite ca actualizarea valorilor sa fie facuta doar pt acele linii care indeplinesc
conditia data. Daca este omisa clauza WHERE vor fi modificate valorile coloanei specificate dupa
SET pt toate liniile tabelei. Ex : UPDATE angajati SET salariu=1200 [where nume=ana popescu)
va modifica salariul anagajatei ana popescu la valoarea de 1200
INSTRUCTIUNEA DELETE
Permite stergerea unora sau mai multor linii dintr-o tabela : DELETE from nume tabela WHERE
conditie. Din tabela se sterg acele linii care respecta conditia data in clauza WHERE. Daca clauza
WHERE lipsest, vor fi sterse toate inregistrarile din tabela.
Daca dorim sa stergem din tabela angajati toti angajatii din cadrul departamentului productie :
DELETE FROM angajati [where dep=dep_productie]
CONSTRANGERI DE INTEGRITATE
Sunt reguli care se definesc la proiectarea unei baze de date si trebuie sa fie respectate de orice stare a
acesteia. Relatiile unei BD reflecta realitatea modelata, si de aceea valorile pe care le contin trebuie
sa respecte anumite reguli care sa corespunda celor din realitate.
Constrangerile se pot clasifica dupa locul unde sunt definite si dupa modul in care sunt definite.
Dpdv al locului unde sunt definite, constrangerile pot fi :
-intrarelati
-interrelatie
Constrangerile intrarelatie sunt reguli care se impun in cadrul unei relatii si care asigura integritatea
datelor acesteia. La randul lor, aceste constrangeri sunt de 3 feluri :
1.Constrangeri de domeniu,impun valoarea atributelor si asigura integritatea domeniului atributelor
2.Constrangeri de tuplu, se impun deasupra tuplurilor unei relatii, asigrand identificarea corecta prin
intermediul cheilor
3.Constrangerile impuse, prin care valorile unor atribute, ale unor relatii determina valorile altor
atribute din cadrul aceleiasi relatii
Constrangerile interrelatii se impun intre doua sau mai multe relatii, cele mai importante sunt
constrangerile de integritate referentiala care se realizeaza prin intermediul cheilor straine si asigura
asocierea corecta a relatiilor.
Dpdv al modului de definire, constrangerile unei BD se pot clasifica in constrangeri :
-inerente,
-implicite,
-explicite.
Constrangerile inerente apartin modelului de date, ele nu trebuie specificate cande se face definirea
relatiilor, dar trebuie respectate atunci cand se face aceasta definire.
Constrangerile implicite sunt reguli care se definesc odata cu definirea schemelor relatiilor, sunt
memorate in BD iar sistemul de gestiune verifica si impune respectarea lor. In aceasta categorie se
incadreaza constrangerile de domeniu, de tuplu si cele de integritate referentiala.
Constrangerile explicite sunt constrangeri suplimentare pe care trebuie sa le respecte relatiile unei
BD si care nu sunt impuse automat de SGBD, ci necesita proceduri speciale de verificare si impunere
a respectarii lor.
Constrangerile de domeniul sunt conditii impuse valorilor atributelor astfel incat acestea sa
corespunda semnificatiei pe care o au in realitatea modelata. Dintre constrangerile de domeniu,
constrangerea NOT NULL si constrangerea de valoarea implicita DEFAULT sunt constrangeri cu
caracter general ce se pot aplica oricarui atribut.
Constrangerile interrelatii sunt reguli care se impun intre 2 sau mai multe relatii.
Cele mai multe constrangeri interrelatii sunt constrangerile de inegritate referentiala care se
realizeaza prin cheile straine si asigura asocierea corecta a relatiilor.
Dpdv al modului de def. constrangerile pot fi:
-inerte,
-implicite
-explicite.
Constrangerile inerte - sunt cons...
CONSTRANGERILE TUPLU - cheia primara si cheile secundare.
Orice relatie se defineste ca o multime de tupluri ceaa ce inseamna ca tuplurile trebuie sa fie disticte;
deci val continute in fiecare tuplu trebuie sa fie o combinatie unica pentru a respecta unitatea.
De obicei intr-o schema de relatie exista o submultime de atribute SK (superkey) cu proprietatea ca
nu exista 2 tupluri distincte ale relatie care sa aiba aceiasi combinatie de valori a atributurilor.
O supercheie (SK) a unei relatii este o submultime de atribute ale relatie care prezinta proprietatea de
unicitate adica orice combinatie de valori ale atributele supercheii este unica in orice stare a relatiei;
acest lucru inseamna ca daca se cunoaste combinatia de valori ale atributelor supercheii, atunci acel
tuplu pote fi indentificat in mod unic. Orice relatie are cel putin o supercheie cea formata din
multimea tuturor atributelor sale.
O cheie candidata este o supercheie ireductibila conform definitiei de mai sus aceasta inseamna ca
o cheie candidata trebuie sa respecte urmatoarele 2 proprietati :
1) unicitate - deci nu exista 2 tipuri diferite care sa contina aceiasi combinatie de valori ale atributelor
cheii candidate.
2) ireductibilitate - nu exista nici o submultime proprie nevida a cheii candidate care sa aiba
proprietatea de unicitate.
Acest lucru inseamna ca daca se elimina un atribut oarecare din submultimea cheii candidate, noua
submultime de atribute numai are proprietatea de unitate.
Deci o cheie candidata este o super cheie minimala adica o supercheie din care nu se poate elimina
niciun atribut fara a pierde proprietatea de unitate.
Proprietatea cheii de a avea o valoare unica pentru fiecare tuplu este o constrangere de integritate a
tuplurilor care trebuie respectata de orice stare a relatie in orice moment.
O cheie candidata poate fi compusa dintr-un singur atribut, in acest caz numindu-se simpla, sau
compusa din mai multe atribute numindu-se compusa.
De ex : in relatia angajati (CNP, nume, prenume, salariu) nu se poate desemna ca si cheie
submultimea formata din atributele nume, prenume deoarece nu exista nicio garantie ca nu vor exista
la un mement dat 2 persoane cu acelasi nume si prenume.
O cheie primara este o cheie candidata careia proiectantul ii confera un rol special de accesare si
identificare a tuplurilor relatiei.
Asupra cheii primare se impun urmatoarele restrictii :
- nici o valoare a atributelor cheii primare nu poate fi modificata prin operatii de actualizare a datelor.
- nu se admit valori de nul pentru niciunul din atributele cheii primare.
O cheie secundara este o cheie candidata care nu a fost desemnata de proiectant drept cheie primara
ea putand admite valori de nul daca se respecta conditia de unicitatea valorilor.
Alegerea cheii primare din mai multe chei candidate este arbitrara dar in mod obisnuit se alege cheia
cu nr cel mai mic de atribute.
Doarece conditia de unicitate se refera la fiecare tuplu nou intrus inseamna ca prin introducere noul
tuplu va fi comparat cu toate atributele cheilor primare existante.
O cheie primara compusa din atributele existente ale ti??? de entitate se numeste cheie naturala.
In general cheile naturale sunt compuse din mai multe atribute ceea ce duce la scaderea eficientei
bazei de date.
In practica de cele mai multe ori se folosesc chei artificiale.
De ex : in relatia salariati(nume, prenume, adresa, salariu, departament) putem avea cheia naturala
formata din nume, prenume si adresa sau putem introduce o cheie artificiala cum ar fi de exemplu
cod angajat.
Atributul, cod angajat, este o cheie artificiala prin care se identifica unic fiecare tuplu.
In limbajul SQL constrangerea de cheie primara se introduce prin comanda CREATE TABLE, daca
cheia primara este simpla se specifica la definirea atributului iar daca este compusa se specifica dupa
definirea atributelor ca o constrangere de tabele.
Constrangeri intre relatii - cheia straina.
Asocierile intre tipurile de entitati def in modelul conceput prin diagrama entitate-asociere se
realizeaza modelul relational prin intermediul cheilor straine.
De ex : Daca pp relatiile salariati si departamente intre ele existand o asociere de tipul 1 la n putem
introduce un atribut suplimentar numit cod sectie care va reprezenta identificatorul sectiei in care
lucreaza angajatul respectiv.
Vom avea tabelele angajati (cod-angajat, nume, prenume, adresa, salariu, cod dep) si departamente
(cod dep, denumire, adresa).
In momentul introduceii datelor pentru orice angajat va trebui sa introducem un cod departament care
sa existe in tabela departamente.
Cheia straina este o submultime de atribute ale unei relatii R1 care prefera relatia R2 si satisface
urmatoarele conditii :
1) atributele cheii straine sunt definite pe domenii compatibile cu cele ale atributelor unei chei
candidate din relatia R2.
2) combinatia de valori a atributelor cheii straine intr-un tuplu din relatia R1 fie este identica cu
combinatia de valori ale atributelor cheii candidate a unui tuplu oarecare din stare curenta a relatie
R2, fie ia valoarea NUL.
Relatia care contine cheia straina se numeste relatia care refera, iar relatia care contine cheia
candidata se numeste relatia referita.
Dpdv relational doua domenii sunt compatibile daca ele sunt compatibile semnatic.
De ex:campul cod_dep reprezinta pt ambele tabele salariati si departamente un identificator al
sectiei, pe de alta parte daca relatia salariati are campurile ( nr crt, nume, prenume, salariu, cod_dep)
iar tabela departamente are campurile (nr crt, denumire, adresa) se observa ca atributul nr crt are
intelesuri semantice diferite pt cele doua tabele. Pe de o parte, pt tabela salariati reprezinta numarul
de salariati, iar pt tabela departamente, numarul current al departamentului. In acest caz, legatura
logica intre cele doua tabele se face cu ajutorul campului cod_dep din tabela salariati care trebuie sa
coincide cu numarul current din departamente.
Cheia straina realizeaza asocierea intre relatiile r1 si r2 reprezentand o constrangere intre doua relatii
numita constrangere referentiala.
Integritatea refentiala este proprietatea bazei de date care garanteaza ca orice valoare a unei chei
straine se regaseste printre valorile cheii candidate corespunzatoare din relatia referita sau cheia
straina are valoarea nul.
OBSV: numele atributelor care fac legatura intre cele doua relatii nu trebuie sa fie identic. De
exemplu tabela salariati ( cod sal, nume, prenume, salariu, cod dep) si tabela departamente (cod
departament, denumire, adresa) au ca atribut de lagatura logica cod de psi cod department, desi
numele celor doua campuri difera in momentul introducerii datelor valorile introduce in cod_dep din
tabela angajati trebuie sa se regaseasca intre valorile campului cod_departament din tabela
departamente.
MENTINEREA INTEGRITATII REFERENTIALE A DATELOR
Operatiile de modificare a starii unei relatii (introducere, stergere si modificare) pot afecta
integritatea referentiala a BD daca modificarile se fac intr-o singura relatie, fara a tine cont de
referintele cu alte relatii.
Opertia de introducere se poate face fara restrictii intr-o relatie referita. In schimb la introducerea
unui nou tuplu intr-o relatie care refera trebuie sa se verifice ca relatia referita exista un tuplu care are
valorile atributelor cheii referite egale cu valorile atributelor cheii straine a tuplului de introdus.
De ex, daca dorim sa introducem o noua inregistrare in tabela departamente, introducerea se face
nemijlocit, dar daca dorim sa introducem in tabela angajati un nou angajat, atunci va trebui sa
verificam daca valoarea introdusa la cod_dep in tabela salariati se regaseste in una din valorile
campului cod_dep din departamente.
Operatia de stergere se face fara nicio restrictive intr-o relatie care refera o alta relatie. Intr o relatie
referita stergerea unui tuplu poate fi executata in doua moduri:
-stergerea restrictionata
-stergerea in cascada
Stergerea restrictionata interzice stergerea unui tuplu din relatia referita daca acesta este referit de un
tuplu din relatia care o refera.
Stergerea in cascada permite stergerea unui tuplu din relatia referita daca tuplul sters era referit de
unul sau mai multe tupluri atunci se sterg si acestia din relatia care o refera, iar daca tuplurile care
trebuiesc sterse sunt la randul lor referite de alte tupluri, atunci trebuie sterse si acestea s.a.m.d.
Operatia de actualizare poate fi privita ca o stergere urmata de o introducere, deci restrictiile de
actualizare reprezinta combinatia restrictiilor de introducere si stergere.
INDEXAREA RELATIILOR
Unul dintre avantajele sistemelor de gestiune este ca proiectantul B.D nu trebuie sa cunoasca
informatii detaliate despre organizarea datelor.Acest lucru se realizeaza prin independenta datelor.
Aceasta independenta a datelor nu este completa astfel incat in momentul actual creatorii B.D trebuia
sa ia in considerare influenta modalitatii de stocare a datelor in functionarea diferitelor aplicatii.
Astfel, o buna gestionare a datelor poate conduce la scaderea timpilor necesari executiei asupra
respectivei bazei de date.
Intr-o relatie care este privita ca o colectie de elemente nu sunt admise elemente duplicat.
Operatiile de baza ca in orice colectie de elemente sunt: cautarea, inserarea si stergeerea.
In timpul unei cautari se face parcurgerea tuturor elementelor pentru a se verifica conditiile impuse.
In cazul unei multimi reprezentate printr-o colectie neordonata de elemental timpul de cautare al unui
element creste proportional cu un numar de elemente al multimii deoarece in cazul cel mai
defavorabil este necesara parcurgerea tuturor elementelor colectiei de date respectiva multime este
ordonata. De exemplu, pentru inserarea unui element intr-o multime trebuie cautat mai intai
elementul identic interzice introducerea noului element iar daca nu exista, se permite aceasta
introducere.
Un arbore binar ordonat este un arbore in care eticheta fiecarui mod este mai mare decat etichetele
tuturor modurilor subordinate arborului stang si mai mica decat etichetele modurilor subordinate
arborului drept. In reprezentarea unei multimi printr-un arbore binar ordonat fiecare element al
multimii corespunde unui nod al arborelui iar pozitia nodului in arbore este data de valoarea etichetei
elementului. Timpul de cautare , de inserare si stergere a unui element intr-un arbore binar ordonat
este proportional cu logaritmul dintre nr. total de elemente al arborului.
Un index al unei relatii este o structura auxiliara memorata in bd care permite accesul raportului la
inregistrarea relatiilor prin ordonarea acestora. La definirea unei relatii se stabilesc 2 categorii de
indexuri:
-indexul primar al relatiei : care determina localizarea tuplurilor in fisierele bazei de date
-0, 1 sau mai multe indexuri secundare : care nu modifica localizarea tuplurilor dar sunt folosite
pentru regasirea tuplurilor pentru un criteriu dat,
INDEXUL PRIMAR se defineste pe 1 sau mai multe attribute ale relatiei si reprezinta cheia dupa
care ordoneaza tuplurile relatiei. Fiecare SGBD prevede o anumita modalitate de reprezentare a
indexului primar. In general este utilizat termenul de eticheta de ordonare pentru a nu fi confundat cu
cheia relatiei. Majoritatea SGBD-urilor definesc in mod implicit indexul primar pe cheia primara a
relatiei. Operatiile de cautare sau stergere in care specifica valoarea atributlui index primar se executa
efficient prin calcularea in primul rand a grupului caruia ii apartine tuplul prin aplicarea unei
functiide dispersie asupra valorii atributului index. Procesul continua cu cautarea pozitiei tuplului in
lista inlantuita corespunzatoare grupului.
Daca intr-o operatie de cautare sau stergere nu se specifica valoarea atributului index primar atunci
cautarea unui anumit tuplu presupune parcugurea tuturor listelor si tuturor grupurilor in cazul cel mai
nefavorabil al tabelei de dispersie. Situatia cea mai nefavorabila este aceea in care tuplul cu val
Popescu Alin este ultimul tuplu al relatiei iar pentru stergeerea lui este necesara parcurgerea tuturor
elementelor.
INDEXURILE SECUNDARE : Un index secundar pe un atribut A al unei relatii este o structura care
contine o multime de perechi de forma (V,L) ordonate dupa V fiecare pereche corespunzatoare unui
tuplu al relatiei, V fiind valoarea atributului A iar L este adresa tuplului in structura indexului primar
al relatiei.
SECURITATEA SI PROTECTIA BD
Securitatea si protectia prezinta 2 aspecte fundamentale pe de o parte aspecte etice si legale privind
drepturilor de acces in anumite informatii si pe de alta parte elemente legate de organizarea
sistemelor informatice d.p.d.v al posibilitatilor de acces la datele stocate.
Unele informatii stocate in bd au un caracter strict privat si nu pot fi accesate de persoane
neautorizate.
Diferite reglementari guvernamentale sau legi stabilesc ce informatii privind activitatea persoanelor
sau institutiilor pot fi facute publice si in ce conditii in SGBD-urile cu utilizatori multiplii sist trebuie
sa prevada tehnici care sa specifice dr de acces ale utilizatorilor la obiectivele bd, sa verifice si sa
impuna respectarea acestor drepturi. Aceste sarcini revin unei componente continuate in majoritatea
SGBD-urilor numit SUBSISTEMUL DE AUTORIZARE.
Se permite acordarea/ revocarea drepturilor diferitelor grupuri de utilizatori ale bazei de date astfel
incat acestia sa poata accesa doar acele informatii la care au dreptul.
Din punct de vedere al implementarii subsistemului de autorizare in diferite SGBD-uri obervam mari
diferente, elementele de baza fiind insa aceeleasi.
O tehnica des utilizata de protectie a datelor este criptarea datelor prin care datele importante sunt
codate folosind diferiti algoritmi de codare in momentul in care sunt transmise prin intermediul
retelelor de comunicatie.
Interceptarea datelor criptate este deosebit de dificila dar nu imposibila daca nu este cunoscuta
cheia de codare. In felul acesta, informatia poate fi decripsata si interpretata doar de cei care detin
cheia de decriptare.
In principiu conectarea la o bd se realizeaza printr-o procedura de nume utilizator+parola prin care se
face autentificarea utilizatorului.
Conectarea unui utilizator al unei bd nu este suficienta pentru ca acel utilizator sa beneficieze de date
functionaliste oferite de respectivul SGBD ci el poate beneficia doar de acele drepturi care i-au fost
conferite de administratorul bazei de date.
In cele mai multe SGBD-uri exista 2 niveluri de autorizare : nivelul contului si nivelul relatiilor.
1)La nivelul contului se pot specifica drepturile generale pe care le are utilizatorul respective
independent de relatiile existente in baza de date. Astfel de drepturi sunt CREATE TABLE pentru
crearea relatiilor, CREATE VIEW pentru crearea interogarilor ALTER TABLE pentru adaugarea sau
stergerea atributelor din relatii, DROP pentru stergerea relatiei, INSERT , SELECT, UPDATE,
DELETE pentru operatii la nivelelul datelor.
2)Nivelul relatiilor se aplica fiecarei relatii sau vederi. In acest caz se specifica ce operatii poate
efectua un anumit utilizator asupra relatiei respective. In unele SGBD-uri cele 2 niveluri nu sunt
diferentiale ceea ce creaza o dificultate sporita in coordonarea drepturilor de acces.
TRANSPUNEREA MODELULUI ENTITATE-ASOCIERE IN MODELE RELATIONALE
Schema conceptuala de nivel inalt a unei bd reprezentata printr-o diagrama entitate-asociere poate
fi transpusa in schema conceptuala specifica oricarui model de date(ierarhic,retea,rational,orientat
obiect, obiect relational).
In transpunerea unei scheme conceptual de nivel inalt in schema conceptuala pentru modelul de date
rational tipurile de entitati devin relatii iar asocierile dintre tupurile de entitati devin constrangeri
interrelatii ce se realizeaza prin intermediul cheilor straine.
Pentru transpunerea modelului entitate-asociere in model relational se parcurg in principal 2
etape:
-proiectarea relatiilor corespunzatoare multimilor de entitati din diagrama entitate-asociere
-proiectarea asocierilor ce se reprezinta prin chei straine sau prin relatii de asociere
Proiectarea relatiilor: multimile de entitati puternice din diagrama entitate-asociere devin relatii cu
atributele date de atributele entitatilor. Numele fiecarei relatii trebuie sa fie unic intr-o bd iar numele
unui atribut trebuie sa fie unic in cadrul unei relatii. Pot exista insa attribute cu aceelasi nume in
relatii diferite. In relatiile corespunzatoare multimilor de entitati puternice cheia primara se defineste
ca o cheie naturala, adica ca o combinatie de attribute ce identifica unic fiecare tuplu al relatiei, fie ca
o cheie artificiala. De obicei se utilizeaza chei primare artificiale cum ar fi cod angajat, cod sectie,
cod componenta, cod produsCheia primara a relatiei dependente poate fi formata dintr-o
combinatie dintre atributul cheii straine si alte attribute care asigura posibilitatea de identificare unica
a unui tuplu sau poate fi o cheie artificiala. Multimile de entitati care sunt subtipuri ale unui tip de
entitate dat devin relatii aflate in asociere 1:1 cu relatiile corespunzatoare multimii de entitati a tipului
respective/ super tipului. Pentru a realize aceasta asociere in relatiile corespunzatoare supertipului se
defineste ca o cheie straina care refuza cheia primara din relatia corespunzatoare supertipului de
entitate.
Proiectarea asocierilor: asocierea binara de tipul N:1 dintre 2 multimi de entitati puternice din
diagrama entitate- asociere se realizeaza in modelul rational prin intermediul unei chei straine in
prima rol( cea cu multiplicitatea N) cea care refera cheia primara din din relatia referita. Asocierea
M:N se realizeaza modelul rational prin intermediul unei noi relatii numita relatie de asociere.
Aceasta relatie se afla in asociere M:1 si N:1 cu fiecare din cele 2 relatii date. De exemplu pentru a
prezenta asocierea dintre produse si componentele intre care exista o asociere M:N este necesara
introducerea unei noi relatii numita compozitii care contine cheile straine cod comp si cod produs ce
refera cheile primare cu aceelasi numedin relatiile componentei si produse. Asocierea binara 1:1 intre
2 multimi de entitati puternice se poate transpune in modelul rational in 2 moduri: fie prin
intermediul unei chei straine fiind un caz particular 1-N fie printr-o relatie de asociere M:N .
Asocierea multipla M-N-P se realizeaza asemanator asocierii binare prin intermediul unei noi relatii
care se afla in asociere M-1 si P-1 cu fiecare din relatiile date. De exemplu relatia achizitii realizeaza
asocierea dintre comp furnizori si angajati continand 3 chei straine cod comp, cod furnizori si cod
angajati.
NORMALIZARE. FORME NORMALE
La proiectarea bazelor de date rationale se stabilesc entitatile din realitatea moderata. Modul in care
se pot stabili entitatile unei bd nu este unic si de aceea este necesar sa existe criterii de evaluare a
calitatii entitatilor astefel incat acestea sa asigure integritatea datelor. Procesul de normalizare a fost
propus de E.F.CODD in 1970 urmarind executia asupra unei tabele a unor serii de teste pentru a
studia aparentele la forma normalaCODD a propus 3 forme normale ce au fost preluate apoi de
BOYCE dezvoltand forma normala boyce CODD. Normalizarea datelor poate fi privita ca un process
in timpul caruia schemele de tabela nesatisfacatoare sunt descompuse prin impartirea atributelor in
mai multe tabele cu attribute mai putine si care poseda propritatile dorite.
Obiectivele procesului de normalizare constau in asigurarea faptului ca tabela poseda o buna
arhitectura oferind posibilitatea de modificare prin eliminarea anomalilor ce pot aparea.
Forma normala ofera proiectantului B.D. :
1)Un schelet formal pentru analiza relatiilor bazat pe chei sip e dependenta dunctionala dintre
attribute.
2)Ofera o serie de teste ce pot elimina tabelele individuale astfel incat baza de date relationala poate
fi normalizata in orice grad.
Forma normala de ordinul 1 :
Aceasta forma normala este considerate ca fiind parte a definitiei formale a unei tabele. Ea nu permite
attribute cu mai multe valori, attribute compuse sau combinatii ale lor.
Aceasta stabileste ca domeniul atributelor trebuie sa contina numai valori atomice, iar valoarea
oricarui atribut intr-un tuplu este o valoare unica in domeniul atributului respective. Deci forma
normala 1 nu permite un set de valori sau imbinatia acestora ca valoare a unui atribut pentru un tuplu.
Cu alte cuvinte forma normala 1 nu permite tabele in tabele sau tabele ca attribute ale tuplurilor.
Valorile admise de forma normala 1 sunt atomice sau invizibile pentru un domeniu specificat de
valori.
Forma normala de ordinul 2 :
Cea de-a doua forma normala impune ca fiecare atribut sa fie dependent de fiecare parte a cheii
principale. Mai exact, o tabela indeplineste forma normala 2 daca ea indeplineste forma normala 1 si
contine numai attribute care dau informatii despre cheia tabelei.
De exemplu, daca tabela discipline ar contine campurile cod_disciplina, den, an, professor,
nume_student, nota, data notei, tabela nu ar fi in forma normala 2 pentru ca campurile nume student ,
nota, data notei nu apartin de cheia primara.Pentru a adduce tabela in forma normala 2 este necesara
crearea a doua tabele suplimentare studenti si note. Cele 3 tabele vor avea structura
discipline(cod_disciplina, den , an, professor) studenti( cod_matricol, nume_student, adresa, email),
note( nota, data, cod_student, cod_materie)
Forma normala de ordinal 3:
Pentru a ajunge la aceasta forma , tabela trebuie sa fie deja in prima si a 2 forma normala si in plus
toate campurile non-primare sa depinda numai de campuri primare, De exemplu, pentru tabela
studenti daca avem ca atribut in tabela data nasterii nu mai este necesar un camp suplimentar numit
varsta.
Forma de ordinul BOYCE-CODD:
Este o forma stricta normala de gradul 3 intelegand prin asta ca orice tabela in forma normala
BOYCE-CODD este sa fie in forma normala 3, viceversa nefiind neaparat adevarat. Cele 2 forme
normale sunt asemanatoare, ambele punand conditia ca atributul care determina functionand alte
attribute sa fie o cheie a tabelei.
Forma normala BOYCE-CODD este mai restrictica decat forma normala 3 deoarece in forma
normala BOYCE-CODD se introduce aceasta conditie tututror atributelor atat primare cat si neprime,
pe cand in forma normala 3 conditia sa impuna doar atributele neprime.
Atributele prime sunt atributele care apartin unei chei, iar celelalte se numesc attribute neprime.
Orice tabela formata din 2 atribute este in forma normala boyce-codd , in forma normala 2 si in forma
normala 3. Aceasta tabela compusa din 2 atribute este in forma normala 2 deoarece fie cheia este
formata din ambele attribute si atunci nu exista attribute neprime, fie cheia este formata dintr-unul
dintre attribute ,iar dependenta functionala a celuilalt atribut fata de cheie este totala. Aceasta tabela
din 2 atribute este in forma normala 3 deoarece este in forma normala 2 si nu poate exista nici un
atribut neprim care sa determine functional un alt atribut neprim pentru ca o tabela cu 2 campuri
poate avea cel mult un atribut neprim.
DEPOZITE DE DATE
Depozitele de date si intrumentele de tip OLLAP (online analytical procesal) sunt bazate pe modele
de date multidimensionale. Aceste modele vizualizeaza datele sub forma unui cub n-dimensional.
Cubul de date permite modelarea si vizualizarea datelor in dimensiuni multiple, el este definit prin
dimensiuni si fapte. Dimensiunile exprima perspectivele in care o anumita organizatie doreste sa
pastreze inregistrarea privitoare la tranzactiile desfasurate.
STELE, FULGI DE ZAPADA SI CONSTELATII DE FAPTE
Modelul entitate-asociere este utilizat frecvent in proiectarea bd relationale. Schema bd consta intr-un
set de antitati precum si relatiile dintre acestea. Ca model de date acesta este corespunzator
reprezentarii online a tranzactiilor. Totusi depozitele de date necesita o schema concise, orientate pe
subiecte care faciliteaza analiza online a datelor. Cel mai popular model pentru depozitele de date
este modelul multidimensional. Acesta poate fi in forma de STEA/ FULG DE ZAPADA/
CONSTELATIE.
1)Schema STEA : reprezinta cel mai comun model de date in care depozitul de date contine o tabela
centrala de mari dimensiuni precum si un set de tabele insotitoare numite tabele dimensiune pentru
fiecare dimensiune in parte.
Graful asociat seamana cu o stea in care tabelele dimensiune sunt afisate in jurul tabelului central de
fapte.
2)Schema FULG DE ZAPADA : este o varianta a modelului stea unde o parte din tabelele
dimensiune sunt normalizate. Din acest motiv datele sunt impartite in tabele suplimentare, de aici
rezulta o schema reprezentata printr-un graf similar unui fulg de zapada. Diferenta majora dintre
modelul stea si fulg de zapada este ca tabelele dimensiune din modelul fulg de zapada pot fi pastrate
in forma normalizata ceea ce determina o redundanta scazuta.
Utilizarea acestui model face ca tabelele sa fie usor de intretinut economisind si spatial de stocare
desi aceasta economie de spatiu este neglijata in comparative cu volumul foarte mare de date din
tabela de fapte. Practic modelul fulg de zapada este mai putin raspandit decat cel stea in proiectarea
modelelor de date.
3)Schema CONSTELATIE DE FAPTE :
Aplicatiile sophisticate pot solicita tabele multiple care partajeaza tabelele dimensiune. Acest gen de
schema poate fi vazuta ca o colectie de stele, de aici reiesind si denumirea de schema GALAXIE sau
CONSTELATIE DE FAPTE. Aceasta schema este des utilizata pentru depozitele de date, de obicei
pentru activitati cum ar fi gestiunea clientilor, a produselor, a personalului.

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