Sunteți pe pagina 1din 98

Modelul relaţional

Elementele unui model de date


pentru baze de date
 Structura modelului
 definirea obiectelor (entităţilor) şi a caracteristicilor
(câmpurilor-atributelor) asociate
 definirea legăturilor dintre obiecte (asocieri).
 Operatorii care acţionează asupra structurii de
date
 Reguli de integritate - restricţii care asigură
menţinerea corectitudinii datelor şi coerenţa lor.

Mihaela Muntean-2016
Modelul relaţional
 a fost propus de E.F. Codd de la IBM în 1970
pentru a asigura independenţa datelor.
 a fost implementat în SGBD-uri comerciale în
1981.
 este cel mai utilizat model de date
 IBM, Informix, Oracle, SQL Server, etc.
 integrarea facilităţilor oferite de modelul orientat obiect
în modelul relaţional- modelul relaţional obiectual
 Informix Universal Server, Oracle, DB2

Mihaela Muntean-2016
Modelul relaţional
 este bazat pe noţiunea matematică de
relaţie.
 relaţiile sunt reprezentate natural prin
tabele.

Mihaela Muntean-2016
Structura modelului relaţional
 Domeniul este un ansamblu de valori, caracterizat
printr-o denumire.
 explicit : D1:{“F”, “M”})
 implicit : D2:{a| a N})
 Relaţia (tabela) reprezintă un subansamblu al
produsului cartezian al mai multor domenii
(D1D2D3….)
 caracterizat printr-o denumire
 conţine tupluri cu semnificaţie

Mihaela Muntean-2016
Structura modelului relaţional

Nrmatricol:D1 Nume:D2 Facultate:D3


301 Popa Elena COM
302 Anton Dan REI
…. …. ….

Relaţia STUDENTI:
D1: {x| x N, x[1, 10000]}
D2: domeniul cu numele de persoane
D3: {“CSIE”, “COM”, “REI”, “MK”, “FIN”, “MAN”}

Mihaela Muntean-2016
Structura modelului relaţional
 Atributul - coloana unei tabele, caracterizată
printr-o denumire.
 Numele atributului exprimă, de obicei, semnificaţia
valorilor luate dintr-un domeniu corespunzător.
 Fiecare atribut îşi ia valorile dintr-un domeniu.
 Mai multe atribute pot lua valori din acelaşi domeniu
 Ordinea atributelor nu trebuie să prezinte nici o
importanţă.

Mihaela Muntean-2016
Structura modelului relaţional

Relatia Studenti
Nrmatricol:D1 Facultate:D3 Nume:D2
301 COM Popa Elena
302 REI Anton Dan
…. …. ….

Nrmatricol:D1 Nume:D2 Facultate:D3


301 Popa Elena COM
302 Anton Dan REI
…. …. ….
Mihaela Muntean-2016
Structura modelului relaţional
 Tuplul este linia dintr-o tabelă şi nu are o
denumire
 ordinea liniilor (tuplurilor) nu trebuie să
prezinte nici o importanţă.
 numărul tuplurilor dintr-o relaţie reprezintă
cardinalul relaţiei,
 numărul valorilor dintr-un tuplu defineşte
gradul relaţiei.

Mihaela Muntean-2016
Structura modelului relaţional
 Valorile unui tuplu al unei relații R aparţin produsului cartezian
al domeniilor relației R.
 De exemplu, tabela Studenti conține :

tuplul <301, ‘Popa Elena’, ‘COM’>

unde : 301D1
‘Popa Elena’D2
‘COM’D3

Mihaela Muntean-2016
Structura modelului relaţional
 Schema unei relaţii
STUDENTI(nrmatricol: number(4), nume: varchar(50),
facultate: varchar2(4))
Nrmatricol:D1 Facultate:D3 Nume:D2
301 COM Popa Elena
302 REI Anton Dan
…. …. ….

Cardinalitatea relaţiei (nr. tupluri)=1000 tupluri

Mihaela Muntean-2016
Structura modelului relaţional
 Cheia primară este un atribut sau un ansamblu
de atribute cu ajutorul căruia se poate identifica
unic un tuplu dintr-o relație.

Mihaela Muntean-2016
Definirea asocierilor
 Se face logic construind asocieri între diferite tabele:
 atribute de legătură (chei externe-foreign key).

 în tabelele implicate în asociere (1:1, 1:m)

 în tabele distincte (m:m)

 LMD (SELECT-SQL)

 LDD (Create table….foreign key…references…)

Mihaela Muntean-2016
Mihaela Muntean-2016
Operatorii modelului relaţional
 operaţiile ce se pot executa pe datele stocate în baze de date
 Cereri (interogări) - “citiri de date” din baza de date.

 Să se afişeze studentii care participă la un anumit curs.

 Actualizări (adaugări/ştergeri/modificări)

 limbaje de interogare
 simple dar puternice

 fundamentate teoretic

 algebra relaţională/calculul relaţional

 permit optimizarea cererilor

Mihaela Muntean-2016
Algebra relaţională
 oferă o colecţie de operatori relaţionali care
acţionează la nivel de relaţie
 Operatori de bază (introduşi de Codd) :
 reuniunea
 diferenţa
 produsul cartezian
 proiecţia
 selecţia
 joncţiunea.

Mihaela Muntean-2016
Mihaela Muntean-2016
comenzi
Clienti nrcom datai termen val codc

codc denc loc 1000 10/8/2011 11/10/2011 1800 1

1Deck Computers Bucuresti 1001 10/10/2011 11/30/2011 200 2

2Python Bucuresti 1002 10/2/2011 11/20/2011 200 3

3Expert Computers Cluj 1003 10/8/2011 11/15/2011 1000 1

4Acer Cluj 1004 10/9/2011 11/15/2011 200 1


1005 10/9/2011 11/16/2011 200 1
1006 10/12/2011 12/20/2011 300 4
1007 10/12/2011 12/15/2011 200 3
1008 10/13/2011 11/25/2011 200 2
1009 10/17/2011 11/25/2011 400 4

Mihaela Muntean-2016
Comanda SELECT

Select atribut [[as] alias {, atribut [as] alias]}


From tabela [[as] alias] {, [[as] alias]}
[where conditii_pe_tupluri]
[group by listă_de_atribute_pentru_grupare]
[having condiţii_pe_grupuri]
[order by lista_de_atribute_pentru_ordonare]

Mihaela Muntean-2016
Produsul cartezian

 constă din construirea unei noi relaţii R3 a cărei schemă


se obţine prin concatenarea schemelor relaţiilor R1 şi
R2.
 Relația R3 conține toate combinaţiile tuplurilor din R1 şi
R2.
 Notaţie: R1R2.

Mihaela Muntean-2016
SELECT * FROM clienti , comenzi ;
comenzi.co
clienti.codc denc loc nrcom datai termen val
dc
1 Deck Bucuresti 1000 11/8/2006 11/10/2006 195000000 2
Computers
2 Python Bucuresti 1000 11/8/2006 11/10/2006 195000000 2
3 Expert Cluj 1000 11/8/2006 11/10/2006 195000000 2
Computers
4 Acer Cluj 1000 11/8/2006 11/10/2006 195000000 2
1 Deck Bucuresti 1003 11/8/2006 11/15/2006 10000000 1
Computers
2 Python Bucuresti 1003 11/8/2006 11/15/2006 10000000 1
3 Expert Cluj 1003 11/8/2006 11/15/2006 10000000 1
Computers
4 Acer Cluj 1003 11/8/2006 11/15/2006 10000000 1
1 Deck Bucuresti 1001 10/10/2006 11/30/2006 2000000 2
Computers
2 Python Bucuresti 1001 10/10/2006 11/30/2006 2000000 2
3 Expert Cluj 1001 10/10/2006 11/30/2006 2000000 2
Computers
4 Acer Cluj 1001 10/10/2006 11/30/2006 2000000 2
1 Deck Bucuresti 1002 11/2/2006 11/20/2006 2000000 3
Computers
2 Python Bucuresti 1002 11/2/2006 11/20/2006 2000000 3
3 Expert Cluj 1002 11/2/2006 11/20/2006 2000000 3
Computers
Produsul cartezian

denc nrcom
Python 1010
Python 1009
Python 1008
Python 1007
Python 1006
Python 1005
Python 1004
….. ….

Select denc, nrcom from clienti, comenzi;

Mihaela Muntean-2016
Selecţia

 produce o subrelaţie R1 a unei relaţii R.


 subrelaţia obţinută va conţine tuplurile relaţiei R
care satisfac o anumită condiţie.
 Notație:  condiţie (R).

Mihaela Muntean-2016
Select denc from clienti where loc=’Bucuresti’;

Mihaela Muntean-2016
Select denc from clienti where loc=’Bucuresti’;

Mihaela Muntean-2016
Proiecţia
 constă din construirea unei relaţii P în care se regăsesc
numai acele atribute din relația R specificate explicit în
cadrul operaţiei.
 suprimarea unor atribute din R înseamnă efectuarea
unor “tăieturi verticale” asupra lui R care pot avea ca
efect apariţia unor tupluri duplicate care se cer a fi
eliminate.
 Notaţie: R(Ai, Aj, …….Am).

Mihaela Muntean-2016
Select loc from clienti;
clienti
codc denc loc
1 Deck Computers Bucuresti
2 Python Bucuresti
3 Expert Computers Cluj
4 Acer Cluj

Mihaela Muntean-2016
Select distinct loc from clienti;

Mihaela Muntean-2016
Joncţiunea
 este o derivată a produsului cartezian și reprezintă o
operaţie definită pe două relaţii R1 şi R2, operaţie care
constă din construirea unei noi relaţii R3 prin
concatenarea unor tupluri din R1 cu tupluri din R2.
 se concatenează acele tupluri din R1 şi R2 care satisfac o
anumită condiţie specificată explicit în cadrul operaţiei.
 Notaţie: JOIN (R1, R2, condiţie).

Mihaela Muntean-2016
Tipuri de jonctiuni:
 joncţiune de egalitate (equi-join);
 joncţiune externă (outer-join);
 joncţiune care utilizează un alt operator de comparaţie
diferit de (=)

Mihaela Muntean-2016
Joncţiune de egalitate:
Select * from clienti inner join comenzi on
clienti.codc = comenzi.codc;
jonctiune_de_egalitate
clienti.
denc loc nrcom datai termen val comenzi.codc
codc
1 Deck Computers Bucuresti 1000 10/8/2011 11/10/2011 1800 1
1 Deck Computers Bucuresti 1003 10/8/2011 11/15/2011 1000 1
1 Deck Computers Bucuresti 1004 10/9/2011 11/15/2011 200 1
1 Deck Computers Bucuresti 1005 10/9/2011 11/16/2011 200 1
2 Python Bucuresti 1001 10/10/2011 11/30/2011 200 2
2 Python Bucuresti 1008 10/13/2011 11/25/2011 200 2
3 Expert Computers Cluj 1002 10/2/2011 11/20/2011 200 3
3 Expert Computers Cluj 1007 10/12/2011 12/15/2011 200 3
4 Acer Cluj 1006 10/12/2011 12/20/2011 300 4
4 Acer Cluj 1009 10/17/2011 11/25/2011 400 4
4 Acer Cluj 1010 10/12/2011 11/21/2011 1000 4

Mihaela Muntean-2016
SELECT clienti.denc, comenzi.nrcom
FROM clienti INNER JOIN comenzi
ON clienti.codc = comenzi.codc;

Mihaela Muntean-2016
Mihaela Muntean-2016
Joncţiunea externă (outer join)
 este o operaţie prin care din două relaţii R1 şi R2 se
obţine o nouă relaţie R3 prin joncţiunea relaţiilor R1 şi
R2, relaţie la care sunt adăugate şi tuplurile din R1 şi R2
care nu au participat la joncţiunea de egalitate.
 aceste tupluri sunt completate în R3 cu valori null pentru
atributele relaţiei corespondente (R2 respectiv R1).
Notaţie: EXT-JOIN(R1, R2).
 trei variante: “stânga”, “dreapta” şi “completă”.

Mihaela Muntean-2016
Left outer join
R2
Departament Sef Select r1.angajat, r1.departament, r2.sef
Producție Marinescu from r1 left outer join r2
Contabilitate Bujor on r1.departament=r2.departament;

Angajat Departament Sef


R1 Ionescu Vânzări null
Angajat Departament Popescu Producţie Marinescu
Ionescu Vânzări Dumitru Producţie Marinescu
Popescu Producţie
Dumitru Producţie

Select r1.angajat, r1.departament, r2.sef


from r1 inner join r2
on r1.departament=r2.departament;
Mihaela Muntean-2016
Right outer join
R2
Departament Sef Select r1.angajat, r1.departament, r2.sef
Producție Marinescu from r1 right outer join r2 on
Contabilitate Bujor r1.departament=r2.departament;

Angajat Departament Sef


R1 Popescu Producţie Marinescu
Angajat Departament Dumitru Producţie Marinescu
Ionescu Vânzări null Contabilitate Bujor
Popescu Producţie
Dumitru Producţie

Mihaela Muntean-2016
Jonctiune externa completa
R2
Departament Sef Select r1.angajat, r1.departament, r2.sef
Producție Marinescu from r1 full outer join r2 on
Contabilitate Bujor r1.departament=r2.departament;

R1 Angajat Departament Sef


Angajat Departament Ionescu Vanzari null
Ionescu Vânzări Popescu Producţie Marinescu
Popescu Producţie Dumitru Producţie Marinescu
Dumitru Producţie null Contabilitate Bujor

Mihaela Muntean-2016
Restricţiile de integritate
 reguli pe care trebuie să le satisfacă datele
pentru a putea fi considerate corecte şi coerente
 restricţii de integritate structurale
 restricţii de integritate de comportament (semantice)
 gestionate de regula in afara modelului de date
 triggeri, codul aplicatiei

Mihaela Muntean-2016
Restricţii de integritate structurale
 sunt specifice modelului relaţional
 se definesc prin compararea unor valori ale
datelor din cadrul tabelelor:
 Restricţia de unicitate a cheii
 Restricţia referenţială
 Restricţia entităţii

Mihaela Muntean-2016
Restricţiile de integritate minimale

 sunt definite toate în raport cu noţiunea de cheie a unei


relaţii
 Cheia unei relaţii este un ansamblu minim de atribute
prin care se poate identifica unic orice tuplu din relaţie
 un atribut (cheie simplă)
 mai multe (cheie compusă).
 pot exista mai multe combinaţii de atribute cu proprietatea de
identificare a tuplurilor (chei candidate).
 cheie primară
 LDD (create table-SQL, alter table-SQL)
 Dictionarul BD – informatii despre restrictii
Mihaela Muntean-2016
Restricţiile de integritate
minimale
 Restricţia de unicitate a cheii
 într-o relaţie să nu existe două tupluri cu aceeaşi
valoare pentru ansamblul atributelor cheie.
 Restricţia entităţii
 într-o relaţie atributele din cheia primară să nu ia
valori null.
 informaţia incompletă în modelul relaţional- se
utilizează o tehnică simplă -valoarea null

Mihaela Muntean-2016
Tipuri de valori null
 Valoare necunoscută
 Valoarea inexistentă

Mihaela Muntean-2016
Restricţia referenţială
 impune ca într-o relaţie R1 care referă o relaţie R2
(există o legătură) valorile cheii externe să figureze
printre valorile cheii primare din relaţia R2 sau să fie
valori null (nedefinite).
 Relaţia R1 - relaţia care referă
 R2 relaţia referită.
 o asociere nu poate exista decât între parteneri cunoscuţi,
definiţi.
 atunci când într-o anumită situaţie, asocierea nu e
aplicabilă, unul dintre parteneri va fi desemnat prin
valoarea null cu semnificaţia de partener inexistent.

Mihaela Muntean-2016
Mihaela Muntean-2016
Mihaela Muntean-2016
 Alte restricţii :
 Restricţii de domeniu (domeniul să se încadreze între
anumite valori).
 Check (cantitatea >500)

Mihaela Muntean-2016
Mihaela Muntean-2016
Mihaela Muntean-2016
Limbajul SQL
(structured query language)
 a fost dezvoltat ca parte a proiectului SystemR al lui IBM
Corporation–SEQUEL (1974)/ Structured English Query
Language
 1979 Relational Software Inc. (acum Oracle) a introdus prima
implementare comercială a lui SQL.
 primul standard 1986, revizuit în 1989 (SQL-89)
 al doilea standard 1992 (SQL-92)
 al treilea standard 1999 (SQL-99)
 SQL-2008, SQL-2011
 cele mai multe SGBDR implementează facilităţile de bază ale
standardului, dar oferă uneori şi extensii ale standardului (de
exemplu Oracle)

Mihaela Muntean-2016
Mihaela Muntean-2016

Limbajul SQL
 interogarea datelor (SELECT);
 actualizarea datelor (INSERT/ UPDATE/ DELETE);
 crearea bazei de date, modificarea structurii bazei de date și ștergerea bazei de
date, precum și a elementelor componente (tabele, tabele virtuale, indecși,
triggeri, funcții stocate, etc): CREATE, ALTER, DROP;
 controlul accesului la datele stocate în baza de date (GRANT/REVOKE);
 asigurarea consistenței și integrității bazei de date prin:
 triggeri pe baza de date. In Oracle, triggerii pe baza de date sunt blocuri

PL/SQL care se execută atunci când apare un eveniment (insert/ update/


delete);
 restricţiile de integritate.

 controlul tranzacțiilor (COMMIT, ROLLBACK);


 operații OLAP (ROLLUP, slice, dice, pivotare, etc);
 Etc.
Facilităţi de descriere a datelor la nivel
logic oferite de SQL standard

 Definirea domeniilor de valori


 predefinite de standard
 char/character , number (precizie, scala), integer, date,
etc.
 definite de utilizator (CREATE DOMAIN)

Mihaela Muntean-2016
Facilităţi de descriere a datelor la
nivel logic oferite de SQL standard
 Definirea unei tabele (Oracle)
Create table clienti (codc number(3) primary key,
denc varchar2(30) not null, loc varchar2(20), zona varchar2(1),
check(zona in(‘N’, ‘S’, ‘E’, ‘V’)))

create table comenzi (nrcom number(5) primary key,


datai date, val number(10), codc number(3),
foreign key(codc) references clienti(codc))

Mihaela Muntean-2016
Mihaela Muntean-2016
Mihaela Muntean-2016
Utilizarea comenzii Create table in SGBDR Acces

Mihaela Muntean-2016
Definirea restricţiilor de
integritate
 se declară atunci când se creează tabelele
 pot fi ulterior adăugate/ şterse/ dezactivate (ALTER TABLE ADD/
DROP/ DISABLE/ ENABLE)
 Restricţia entităţii (not null)

 Restricţia unicităţii (unique)

Nume character(20) not null, Prenume character(20) not null, unique


(nume, prenume),

Nume character(20) not null unique, prenume character(20) not null


unique

 Restricţia de cheie primară (primary key) include restricţia


entităţii, restricţia unicităţii
Mihaela Muntean-2016
Adaugarea unei restrictii in SGBDR Oracle (utilizarea comenzii
ALTER TABLE

Mihaela Muntean-2016
Definirea restricţiilor de
integritate
 restricţia referenţială (foreign key …references)
 se pot asocia politici de reacţie la nerespectarea restricţiei
referenţiale. Aceste politici operează pe tabela ce referă, după
ce se execută modificările în tabela referită. Se pot defini
următoarele reacţii:
 Cascade : propagă modificarea

 Set null: setează pe null atributul referit

 Set default: asociază valoarea implicită atributului referit

 No action: interzice modificarea în tabela referită

reacţiile pot depinde de eveniment:


On <delete|update> <cascade|set null|set default|no action>

Mihaela Muntean-2016
Mihaela Muntean-2016
 Modificarea structurii unei tabele
 Ex in Oracle :
Alter table clienti add column adresa char(30)

 Stergerea tabelelor
Drop table comenzi

Mihaela Muntean-2016
Utilizarea comenzii DROP TABLE – SGBDR Oracle

Mihaela Muntean-2016
Facilităţi de descriere a datelor la nivel
extern oferite de SQL standard

 Crearea tabelelor virtuale (view)


 este o prezentare a datelor din una sau mai multe
tabele şi poate fi gândită ca o “cerere stocată”;
 nu conţine date, îşi derivă datele din tabelele de
bază, dar poate fi interogata, actualizata cu unele
restricţii;
 toate operaţiile executate pe tabela virtuală vor
afecta tabelele de bază corespunzătoare;

Mihaela Muntean-2016
Tabela virtuală
 oferă un nivel suplimentar de securitate prin restricţionarea
accesului la un set predeterminat de rânduri şi coloane ale unei
tabele;
 ascunde complexitatea datelor
 ascunde faptul că datele provin de la mai multe tabele de
bază
 simplifică interogarea pentru utilizator.
 prezintă datele într-o formă/aspect diferit de tabelele de bază.
 se poate modifica numele coloanelor fără a afecta tabelele
de bază;
 stochează cereri complexe.
 prin salvarea cererii ca o tabelă virtuală, calculele sunt
executate numai atunci când tabela virtuală este interogată.
Mihaela Muntean-2016
Mihaela Muntean-2016
Crearea unei tabele virtuale in Oracle – utilizarea comenzii
CREATE VIEW

CREATE VIEW CLIENTI_COM AS


SELECT denc as client, count (nrcom) as comenzi FROM clienti, comenzi
where clienti.codc=comenzi.codc group by denc;
Acordarea drepturilor de acces
la baza de date

 Obiective în asigurarea securităţii datelor:


 păstrarea secretului
 asigurarea integrităţii datelor
 valabilitatea datelor

Mihaela Muntean-2016
Controlul accesului la date
 stabilirea unei politici de securitate (se specifica cine
este autorizat si ce este autorizat sa faca)
 utilizarea unui mecanism de securitate ce permite
asigurarea unei politici de securitate:
 accesul bazat pe notiunea de privilegii (discretionary access
control)
 accesul bazat pe notiunea de clase de securitate (mandatory
access control)

Mihaela Muntean-2016
Accesul bazat pe notiunea de privilegii

 Un privilegiu este caracterizat de:


 obiect,

 proprietarul obiectului,

 utilizatorul care primeşte privilegiul,

 dreptul primit pe obiect,

 posibilitatea de a se transmite mai departe acest drept altor


utilizatori.
 Proprietarul unei tabele/tabele virtuale primeşte automat toate
drepturile asupra acestor obiecte.
 Proprietarul unui obiect poate acorda drepturi altor utilizatori pe
obiectul său.
 SGBD este cel care monitorizează cine primeşte sau pierde
privilegiile
Mihaela Muntean-2016
Mihaela Muntean-2016

Accesul bazat pe notiunea de privilegii


 GRANT <privilegii|all privilegii> ON obiect TO utilizatori [WITH GRANT
OPTION]

 privilegii :
 SELECT

 INSERT (atribut)

 DELETE

 REFERENCES(atribut)

 Numai proprietarul poate executa CREATE, ALTER şi DROP.

Exemple:
GRANT INSERT, SELECT ON tabela to student
GRANT DELETE ON tabela TO student WITH GRANT OPTION
GRANT UPDATE (atribut) ON tabela TO student
GRANT SELECT ON tabela_virtuala TO stud1, stud2
REVOKE privilegii on obiect from utilizatori [restrict|cascade]
Acordarea unui privilegiu - in SGBDR Oracle

Mihaela Muntean-2016
Mihaela Muntean-2016
Grant SELECT on "MIHAELA"."CLIENTI_COM" to "SCOTT";
REVOKE SELECT on "MIHAELA"."CLIENTI_COM" from "SCOTT";

Mihaela Muntean-2016
Facilităti de manipulare a datelor
oferite de SQL
 actualizarea tabelelor /tabelelor virtuale:
 INSERT
 UPDATE
 DELETE
 nu toate SGBDR permit actualizarea
tabelelor virtuale

Mihaela Muntean-2016
Exemple (Oracle)
 Se adauga un tuplu in tabela Clienti
insert into clienti values (5, 'Vector Software', 'Bucuresti') ;

 Se modifica localitatea pt clientul cu codul 5


update clienti set loc='Cluj' where codc =5;

 Se sterg clientii din Cluj


delete from clienti where loc='Cluj';

Mihaela Muntean-2016
DELETE *
FROM clienti
WHERE loc="Deva";

Utilizarea comenzii DELETE – SGBDR Access

Mihaela Muntean-2016
Comanda SELECT
 interogarea bazei de date
 cereri ce utilizează una sau mai multe tabele
 subcereri
 cereri ierarhice
 simularea operatorilor algebrei relaţionale
 selecţie, proiecţie, produs cartezian, joncţiune, reuniune,
intersecţie, diferenţă
 agregarea datelor utilizând funcţiile de agregare.

Mihaela Muntean-2016
Comanda SELECT

Select atribut [[as] alias {, atribut [as] alias]}


From tabela [[as] alias] {, [[as] alias]}
[where conditii_pe_tupluri]
[group by listă_de_atribute_pentru_grupare]
[having condiţii_pe_grupuri]
[order by lista_de_atribute_pentru_ordonare]

Mihaela Muntean-2016
Exemple (Access)

Mihaela Muntean-2016
SELECT denc FROM clienti;

Sa se afiseze denumirea clientilor


SELECT clienti.codc, clienti.denc FROM clienti ORDER BY clienti.denc desc;

Sa
Sa se afiseze codul
se afiseze codul clientilor
si denumirea clientilor, lor ,
si denumirea
ordonati alfabetic descrescator
ordonati alfabetic descrescator dupa denumire

Mihaela Muntean-2016
Mihaela Muntean-2016
SELECT clienti.loc, count(clienti.denc) as numarclienti FROM clienti group by loc;

Sa se afiseze nr de clienti din fiecare oras


SELECT produse.denp AS denumire, Sum(produse.pu*randcomanda.cant) AS vanzari
FROM produse INNER JOIN randcomanda
ON produse.codp=randcomanda.codp
GROUP BY produse.denp;

Sa se afiseze pt fiecare produs vanzarile


realizate

Mihaela Muntean-2016
Mihaela Muntean-2016
SELECT produse.denp as denumire,
Sum(produse.pu*randcomanda.cant) AS vanzari
FROM produse INNER JOIN randcomanda on produse.codp=randcomanda.codp
GROUP BY produse.denp
HAVING Sum(produse.pu*randcomanda.cant) >600 ;

Sa se afiseze produsele la care


vanzarile >600 RON

Mihaela Muntean-2016
Mihaela Muntean-2016

Tehnica normalizarii relatiilor

 Anomaliile de actualizare sunt datorate dependenţelor


care se manifestă între date și care determină creşterea
redundanţei datelor şi reducerea flexibilităţii structurii
bazei de date.
 Aceasta tehnică este construită în jurul conceptului de
forme normale (FN).
 Iniţial E.F. Codd a definit 3 forme normale: FN1, FN2,
FN3.
 Ulterior au fost definite două noi forme normale: FN4,
FN5.
Etapele normalizării unei relaţii
(FN1FN3)

Pasul 1: atributele conţin valori elementare


Relaţie nenormalizată (atomice- nu sunt date la nivel de grup) şi orice
tuplu nu trebuie să aibă grupuri repetitive.
Relaţia trebuie să fie ruptă în două sau mai multe
relaţii.
Relaţie normalizată în FN1
Pasul 2: verifică daca atributele noncheie sunt
complet dependente de cheia primară.
Toate dependenţele parţiale sunt eliminate şi plasate
în altă relaţie.
Relaţie normalizată în FN2

Pasul 3: elimină orice dependenţă tranzitivă (când


un atribut noncheie este dependent de alt atribut
Relaţie normalizată în FN3 noncheie).

Mihaela Muntean-2016
Etapele normalizării unei relaţii
(FN1FN3)
 Prin atribut simplu (atribut atomic) se înţelege un atribut care nu mai poate fi
descompus în alte atribute, în caz contrar, atributul este compus (atribut
neatomic).
 Exemplu:
 Data calendaristică – este un atribut compus: zi, lună, an;

 Adresa – este un atribut compus: strada, nr, bloc, scara, etaj, apartament,

localitate, judeţ;
 Un grup repetitiv este un atribut (grup de atribute) dintr-o relaţie care apare cu
valori multiple pentru o singură apariţie a cheii primare a relaţiei nenormalizate.
R (codang, nume, salariu, denumireproiect, buget, functie,
datainceperii proiectului, data finalizarii, nrorelucrate,
spor):
Cod Nume Salariu Denumire Buget functie Spor (% Datai Dataf Nrore
ang (Ron) proiect (mil din
euro) salariu)

1 Brad 2000 Marte 2 Tehnician 2% 1.11.2016 1.11.2017 30

2 Grigore 3500 Jupiter 15 Proiectant 3% 10.10.2016 10.05.2017 100


Venus 15 Proiectant 3% 10.10.2016 10.10.2017 300

3 Popescu 5500 Venus 15 Manager 5% 10.10.2016 10.10.2017 100


Jupiter 15 Consultant 4% 10.10.2016 10.05.2017 200
Marte 2 Consultant 4% 1.11.2016 1.11.2017 300

4 Marin 4800 Marte 2 Manager 5% 1.11.2016 1.11.2017 50


Venus 15 proiectant 3% 10.10.2016 10.10.2017 70
100

5 Ionescu 4800 Venus 15 Proiectant 3% 10.10.2016 10.10.2017 100


Jupiter 15 Manager 5% 10.10.2016 10.05.2017 200

Mihaela Muntean-2016
Grupul de atribute (denumireproiect, buget, functie, datai, dataf, nrore)
este un grup repetitiv care se va elimina și relația R este în FN1.

Anomalie la stergere

Redundanta datelor, anomalie la modificare


Cod Nume Salariu Denumire Buget Funcţie spor datai dataf nrore
ang (ron) Proiect (mil $)

1 Brad 2000 Marte 2 tehnician 2 1.11.2016 1.11.2017 30

2 Grigore 3500 Jupiter 15 proiectant 3 10.10.2016 10.05.2017 100

2 Grigore 3500 Venus 15 proiectant 3 10.10.2016 10.10.2017 300

3 Popescu 5500 Venus 15 manager 5 10.10.2016 10.10.2017 100

3 Popescu 5500 Jupiter 15 consultant 4 …. …. ….

3 Popescu 5500 Marte 2 consultant 4 …. …. ….

4 Marin 4800 Marte 2 manager 5 …. …. ….

4 Marin 4800 Venus 15 proiectant 3 …. …. ….

5 Ionescu 4800 Venus 15 proiectant 3 …. …. ….

5 Ionescu 4800 Jupiter 15 manager 5 …. …. ….


Anomalii:
 valoarea salariului pentru fiecare angajat se repetă (redundanţa datelor);
 dacă salariul unui angajat se modifică trebuie să modificăm valoarea în toate
tuplurile corespunzatoare (anomalie la modificare);
 dacă un angajat nu mai lucrează la nici un proiect (de ex, Brad), dar nu
pleacă din firmă, toate tuplurile corespunzătoare sunt şterse, chiar dacă se
pierd informaţii despre nume şi salariu (anomalie la ştergere);
 dacă avem informaţii despre un nou angajat, nu putem să le adăugam, dacă
angajatul nu lucrează la un proiect (cheie primară compusă-nu acceptă valori
null pentru proiect) (anomalie la inserare).
 De ce apar astfel de anomalii???
O explicaţie intuitivă: se utilizează o singură relaţie pentru a reprezenta
informaţii de tipuri diferite (şi anume: angajaţii cu salariile lor, proiectele cu
bugetele lor, participarea angajaţilor la proiecte, cu funcţiile lor).

Mihaela Muntean-2016
Mihaela Muntean-2016

Relaţie normalizată în FN2


cheia relatiei este cheie compusa din atributele: codang, proiect

 Atributele nume, salariu depind funcțional parțial


numai de atributul codang.
 Atributele functie, nrore, spor depind de toată cheia.
 Atributele buget, datai, dataf depind funcţional parţial
numai de atributul denumireproiect
 Relația R se descompune în trei relații:
FN2
 Angajat (codang, numeangajat, salariu)
 Proiecte (denumireproiect, buget,datai, dataf)
 participare (denumireproiect, codang, functia, nrore,
spor)
Angajat Participare Proiecte
codang denumireproiect denumireproiect
Nume codang Buget
salariu Functia Data inceperii
Nrore Data finalizarii
spor etc

Mihaela Muntean-2016
Relaţie normalizată în FN3
o singură dependenţă tranzitivă şi anume atributul spor
depinde de atributul functia.

Se elimină prin descompunerea relaţiei Participare

Angajat Participare
codang denumireproiect Proiecte
Nume codang denumireproiect
salariu Functia Buget
Nrore Data inceperii
Data finalizarii
etc
Functii
functia
spor

Mihaela Muntean-2016
R2 Departament Sef R1 Angajat Departament
Producție Marinescu Ionescu Vânzări
Contabilitate Bujor Popescu Producţie
Intrebari Dumitru Producţie

 Completati corect:
 Restricţia entităţii impune ca într-o relaţie:………………..
 Rolul unui SGBD este de a:……………………………
 In SQL, pentru a modifica valorile unui atribut se utilizează comanda: ……….
 In SGBDR Access se pot defini urmatoarele restrictii de integritate:…………
 Se considera tabelele R1 si R2:
 Pentru a afisa angajatii din departamentul Vanzari se utilizeaza comanda SQL:
 Precizați ce operator al algebrei relaționale se utilizează pentru a afisa seful
departamentului de Productie
 La departamentul de Productie se angajeaza o noua persoana . Ce comanda SQL
utilizati pentru ca aceasta persoana sa apara in tabela R1
 Dorim ca pentru fiecare angajat sa apara obligatoriu si informatii despre adresa
lor. Ce comanda SQL utilizam si ce restrictii de integritate trebuie sa definim?
Intrebari
 Se considera relatia nenormalizata Studenti (nrmatricol, nume, adresa, sex,
stare civila, cod_curs, denumire_curs, tip_curs, numar_credite_curs,
nota_curs). Un student participa la mm cursuri si primeste o nota pentru fiecare
curs la care participa. Un curs poate fi optional/obligatoriu si are alocat un numar
de credite. La un curs pot participa mm studenti.
 Cheia primară a relației este: ...............

 Aduceti relatia in FN2

 Aduceti relatia in FN3

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