Documente Academic
Documente Profesional
Documente Cultură
Curs 7 PDF
Curs 7 PDF
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
(D1D2D3….)
caracterizat printr-o denumire
conţine tupluri cu semnificaţie
Mihaela Muntean-2016
Structura modelului relaţional
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
…. …. ….
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 :
unde : 301D1
‘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
…. …. ….
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).
LMD (SELECT-SQL)
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.
Actualizări (adaugări/ştergeri/modificări)
limbaje de interogare
simple dar puternice
fundamentate teoretic
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
Mihaela Muntean-2016
Comanda SELECT
Mihaela Muntean-2016
Produsul cartezian
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
….. ….
Mihaela Muntean-2016
Selecţia
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;
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;
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
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
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’)))
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)
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
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
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
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
proprietarul obiectului,
privilegii :
SELECT
INSERT (atribut)
DELETE
REFERENCES(atribut)
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') ;
Mihaela Muntean-2016
DELETE *
FROM clienti
WHERE loc="Deva";
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
Mihaela Muntean-2016
Exemple (Access)
Mihaela Muntean-2016
SELECT denc FROM clienti;
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;
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 ;
Mihaela Muntean-2016
Mihaela Muntean-2016
Mihaela Muntean-2016
Etapele normalizării unei relaţii
(FN1FN3)
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)
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
Mihaela Muntean-2016
Mihaela Muntean-2016
Mihaela Muntean-2016
Relaţie normalizată în FN3
o singură dependenţă tranzitivă şi anume atributul spor
depinde de atributul functia.
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: ...............