Documente Academic
Documente Profesional
Documente Cultură
BAZE DE DATE
CURS 3
MODELUL DE DATE
RELAŢIONAL
MODELUL DE DATE RELAŢIONAL
1. Structura relaţională
2. Operatorii relaţionali
3. Restricţiile de integritate
1. STRUCTURA RELAŢIONALĂ
Domeniu
Relaţie
Atribut
Tuplu
Cheie
Schemă
DOMENIUL
• Reprezintă un ansamblu de valori, caracterizat
printr-un nume.
• Un domeniu se poate defini:
– explicit, prin enumerarea tuturor valorilor aparţinând
acestuia
De exemplu, tuplurile:
<"Maria", "F", 50>,
<"Vasile", "M", 15>,
<"Vasile", "M", 20>,
<"Vasile", "F", 100>
aparţin produsului cartezian: D3 D1 D2.
RELAŢIA
TUPLUL
Tuplul reprezintă linia unei tabele de date şi nu are nume.
CHEIA
Cheia desemnează un atribut sau un ansamblu de atribute
care are rolul de a identifica o înregistrare dintr-o tabelă.
SCHEMA UNEI RELAŢII
• Ai,……, Am (R)
• R[Ai,..., Am]
• PROJECT(R, Ai,..., Am)
ANGAJATI Varsta,salariu
Nume Varsta Salariu Varsta Salariu
Ion 25 3000 25 3000
Varsta Salariu
Mihai 30 2000 30 2000
25 3000
Anca 25 3000 25 3000
30 2000
Sofia 30 2000 30 2000
Mircea 30 2000 30 2000
EXEMPLU SQL
FROM angajati;
R A1 A2 A3 A4
SELECŢIA
• δcondiţie (R)
• R [condiţie]
• RESTRICT (R, condiţie)
ANGAJATI
Nume Varsta Salariu δ(salariu>2000 or nume=Mircea)
Ion 25 3000 Nume Varsta Salariu
Mihai 30 2000 Ion 25 3000
Anca 25 3000 Anca 25 3000
Sofia 30 2000 Mircea 30 2000
Mircea 30 2000
EXEMPLU SQL
SELECT *
FROM angajati
• R1 x R2
• PRODUCT (R1, R2) Angajati x Comenzi
ID Nume NRC Data ID
• TIMES (R1, R2) 1 Ion 1 01.01.11 1
Angajati Comenzi
1 Ion 2 07.01.11 2
ID Nume NR Data ID
C 1 Ion 3 08.01.11 3
1 Ion
1 01.01.11 1 1 Ion 4 08.01.11 2
2 Mihai
2 07.01.11 2 1 Ion 5 09.01.11
3 Anca
3 08.01.11 3 2 Mihai 1 01.01.11 1
4 Sofia
4 08.01.11 2 2 Mihai 2 07.01.11 2
5 Mircea
5 09.01.11 …… ……. …… …… ……
EXEMPLU SQL
SELECT *
FROM angajati, comenzi;
SELECT *
FROM angajati CROSS JOIN comenzi;
JONCŢIUNE
Angajati Comenzi
EXEMPLE SQL
SELECT *
FROM angajati a, comenzi c
WHERE a.id_ang=c.id_ang;
SELECT *
FROM angajati a JOIN comenzi c
ON a.id_ang=c.id_ang;
SELECT *
FROM angajati a JOIN comenzi c
USING (id_Ang);
JONCŢIUNEA NATURALĂ
Clienti Angajati
DIFERENŢA
– R1 – R2
– REMOVE (R1, R2)
– MINUS (R1, R2)
DIFERENŢA
NU!
DE CE?
Clienti – Comenzi
Clienti – Comenzi
DA
CE AFIŞEAZĂ?
INTERSECŢIA
– R1 R2
– INTERSECT (R1, R2)
– AND (R1, R2)
INTERSECŢIA
Clienti Comenzi
CE AFIŞEAZĂ?
ALŢI OPERATORI
Diviziunea
Complementarea
Spargerea unei relaţii
Închiderea tranzitivă
CALCULUL RELAŢIONAL
• Rezultă:
– Calcul relaţional orientat pe tuplu
– Calcul relaţional orientat pe domeniu
OPERATORI
Conectivele (conectorii):
• Conjuncţia
• Disjuncţia
• Negaţia
Cuantificatorii:
• Cuantificatorul existenţial
• Cuantificatorul universal
RESTRICŢIILE DE INTEGRITATE
Restricţii de comportament:
De domeniu
Temporare
RESTRICŢIA DE UNICITATE A
CHEII
• NOT NULL
– nu permite valori NULL (nespecificate) în coloanele unei tabele;
• UNIQUE
– nu permite valori duplicat în coloanele unei tabele;
• PRIMARY KEY
– nu permite valori duplicate sau NULL în coloana sau coloanele definite astfel;
• FOREIGN KEY
– presupune ca fiecare valoare din coloana sau setul de coloane definit astfel să aibă o
valoare corespondentă identică în tabela de legătură, tabelă în care coloana
corespondentă este definită cu restricţia UNIQUE sau PRIMARY KEY;
• CHECK
– elimină valorile care nu satisfac anumite cerinţe (condiţii) logice.
EXEMPLIFICARE SQL-ORACLE
EXEMPLIFICARE SQL-ORACLE
EXEMPLIFICARE SQL-ORACLE
GRILA 1
Într-o bază de date relaţională, fie relaţia R1. În urma aplicării unei
operaţii pe relaţia R1 se obţine o nouă relaţie R2, care conţine doar o
parte dintre atributele relaţiei R1 şi tupluri distincte. Precizaţi ce
operator al algebrei relaţionale realizează această operaţie:
a)produsul cartezian
b)diferenţa
c)reuniunea
d)selecţia
e)proiecţia
GRILA 2
• Fie două tabele COMENZI şi FIRME fiecare având câte 20 de înregistrări. O firmă
poate da mai multe comenzi, o comandă trebuie dată de către o singură firmă. Care din
următoarele afirmaţii este adevărată:
a) Un left join între COMENZI şi FIRME nu poate returna acelaşi număr de înregistrări
ca un right join între FIRME şi COMENZI
b) Un full join între cele două tabele nu poate returna acelaşi număr de înregistrări ca un
left join între FIRME şi COMENZI
c) Produsul cartezian între cele două tabele nu returnează mai multe înregistrări decât un
full join între aceleaşi tabele
d) Un inner join între FIRME şi COMENZI poate returna acelaşi număr de înregistrări
ca un right join între aceleaşi tabele
e) Toate afirmaţiile de mai sus sunt false
GRILA 5