Documente Academic
Documente Profesional
Documente Cultură
Curs 06
Curs 06
2NF
3NF
BCNF
4NF
5NF
Fie relaia:
DCS [Departament, CadruDidactic, DataSedinta],
CDI1
CDI2
O nregistrare n aceast relaie ar putea s fie de tipul dat
.
n tabelul alturat.
.
.
Pentru a nu avea atribute repetitive (pentru ca relaia s fie
CDIm
cel puin n 1NF) trebuie s memorm datele din aceast
Matematica CDM1
nregistrare ca n tabelul de mai jos (s-a trecut date numai pentru
CDM2
o nregistrare din primul tabel).
.
Informatica
CDI1
DI1
.
In acest tabel fiecare cadru didactic
Informatica
CDI1
DI2
.
are aceleai date pentru edin,
........
...
...
CDMp
deci
la
adugarea,
modificarea
sau
Informatica
CDI1
DIn
tergerea liniilor din tabel trebuie fcute unele verificri
Informatica
CDI2
DI1
suplimentare.
Informatica
CDI2
DI2
........
...
...
Informatica
DI1
DI2
.
.
.
DIn
DM1
DM2
.
.
.
DMq
u1 v1 w1
u1 v1 w2
u1 v2 w2
u1 v2 w1
deci .
Pentru relaia DCS (din ex.precedent) avem:
{Departament} {CadruDidactic}, dar i {Departament} {DataSedinta}
Dac R are n schem numai atributele i , deci R[, ], atunci avem numai o
dependen funcional multipl trivial.
Dac R[, , ], i nu este vid, deci exist o dependen funcional multipl
netrivial, atunci se pune problema eliminrii aceste dependene funcionale (pentru a nu face
verificri suplimentare).
Definiie. O relaie R este n 4NF dac este BCNF i nu conine dependene
funcionale multiple netriviale.
Se Di
P1 S1 D2
P1 S2 D1
P2 S1 D1
Exist unele date redundante (apar unele asocieri n mai multe nregistrri):
profesorul P1 pred la secia S1
profesorul P1 pred disciplina D1
la secia S1 se pred disciplina D1
Relaia de mai sus nu se poate descompune n dou relaii (prin proiecie), pentru c prin
join se introduc date noi. Justificm aceast afirmaie prin cele trei proiecii posibile pe dou
atribute.
PrSe Pr
P1
P1
P2
Se
S1
S2
S1
SeDi Se
S1
S2
S1
Di
D2
D1
D1
PrDi
Pr
P1
P1
P2
Di
D2
D1
D1
Se
S1
S1
S2
S1
S1
Di
D2
D1
D1
D2
D1
Concluzia amintit (PrSeDi este 3-decompozabil) este valabil pentru datele precizate
n relaie. Pentru a fi adevrat indiferent de date, trebuie s fie ndeplinite anumite restricii. O
astfel de restricie ar fi:
if (P1, S1) PrSe and (P1, D1) PrDi and (S1, D1) SeDi then (P1, S1, D1) PrSeDi
Aceast restricie se poate nlocui cu alta:
if (P1, S1, D2) PrSeDi and (P1, S2, D1) PrSeDi and (P2, S1, D1) PrSeDi
then (P1, S1, D1) PrSeDi
Considerm urmtoarele date n relaie, cu respectarea restriciei de mai sus:
Pr
Se Di
P1 S1 D2
P1 S2 D1
Pr
Dac (P2, S1, D1) se adaug la relaie, atunci trebuie adugat i nregistrarea
(P1, S1, D1)
Se Di
P1 S1 D2
P1 S2 D1
P2 S1 D1
P1 S1 D1
Dac se terge (P1, S1, D1) din relaie, atunci trebuie terse i alte date, cel
puin (P2, S1, D1) pentru ca restricia s fie ndeplinit.
IS IN
relaie_cu_o_coloan
IS NOT IN
nume_atribut
IS IN
IS NOT IN
relaie
relaie
=
<>
4. Condiie este i oricare din construciile urmtoare:
(condiie)
NOT condiie
condiie1 AND condiie2
condiie1 OR condiie2
unde condiie, condiie1, condiie2 sunt condiii de tipurile 1-4.
In primul tip de condiie apare construcia 'valoare', care poate fi una din tipurile
urmtoare. Pentru fiecare construcie se ia pentru valoare o anumit relaie curent, care
rezult din contextul n care apare aceasta.
expresie - se evalueaz expresia, iar dac apar i denumiri de atribute, atunci acestea se
iau dintr-o nregistrare curent.
COUNT
SUM
MIN
care determin o valoare folosind toate nregistrrile din relaia curent. La determinarea
acestei valori se iau toate valorile atributului precizat ca argument (din toate nregistrrile),
sau numai valorile distincte, dup cum lipsete sau apare cuvntul DISTINCT. Valorile
astfel determinate sunt: numrul de valori (pentru COUNT), suma acestor valori (apare
SUM, valorile trebuie s fie numerice), valoarea medie (apare AVG, valorile trebuie s fie
numerice), valoarea maxim (apare MAX), respectiv valoarea minim (apare MIN).
In continuare se vor preciza operatorii care se pot folosi pentru interogarea bazelor de
date relaionale.
Pentru expresiile din algebra relaional se pot preciza instruciuni echivalente cu
SELECT-SQL.
Selecia a unei relaii R - determin o nou relaie ce are aceeai schem cu a relaiei R.
Din relaia R se iau numai nregistrrile care ndeplinesc o condiie c. Notaia pentru acest
operator este:
c (R ) .
(R) .
Produsul cartezian a dou relaii: R1R2 - care determin o relaie nou ce are ca atribute
concatenarea atributelor din cele dou relaii, iar fiecare nregistrare din R1 se concateneaz
cu fiecare nregistrare din R2.
Echivalent: select * from R1 cross join R2
R1
R
2
Semi joinul dreapta, notat prin R1 R2 , conine nregistrrile din R2 utile pentru joinul
natural R1 R2.
(r1 ) = r ;
2.
(r1 ) = r2 .
R1
r2
rr1
r2
r2
R2
O problem important legat de operatorii descrii mai sus const n determinarea unei
submulimi independente de operatori. O mulime M de operatori este independent dac
eliminnd un operator oarecare op din M se diminueaz puterea mulimii, adic va exista o
relaie obinut cu operatori din M i care nu se poate obine cu operatori din mulimea M - {op}.
Pentru limbajul de interogare descris mai sus, cu operatorii:
{ , , , , , , , ,
, , , , , }
R1 R2 = R1 ( R1 R2 ) ;
R1 c R2= c ( R1 R2 ) ;
R1
R2 ;
(R
(R
Fie R1 [ ], R 2[ ] . Se deduce:
R1 R2 =
(R
R2 ) ,
R1 R2 =
(R
R2 ) .
C R2 ) ] R3 .
1
C R2 ) ].
R1
( R1 )
( R1 ) ,
dar nu
r2
r2
apar n ct.
r2
( R1 ) .
De aici obinem:
((
rr1
R R = ( R ) ( R ) R R .
1
2
1
1
2
1
R2
Gruparea:
Exemple cu operatorii din algebra relaional se vor da pentru urmtoarea baz de date
relaional:
studenti [cod, nume, grupa, media, datanasterii]
grupe [cod, an, sectia]
orar [zi, orainc, orasf, tipactiv, sala, grupa, cod_cadrudid]
cadredid [cod, nume]
1. Numele studenilor dintr-o grup dat
(grupe )
G := { }
cod sec tia =' S '
(studenti )
R := S {
grupa, nume} grupa is in G
select grupa,nume
from studenti
where grupa is in (select cod from grupe where sectia='S')
ST :=
grupa is in
cod
grupe
(studenti )
(ST )
NR := {
grupa, count (*)} group by {grupa }
select grupa,count(*)
from
(select * from studenti
where grupa is in (select cod from grupe where sectia='S')
)
group by grupa
4. Orarul unui student dat
T :=
grupa is in
grupa
studenti
(orar )
(orar )
A :=
( studenti )
nume
=
'
nume
_
dat
'
( B)
D := {
(C )
nume}
{nume}
( cadredid )
(orar
cadredid )
{nume}
orar.cadrudid = cadredid .cod
8. Studenii care au ore n fiecare zi din sptmn (n toate zilele n care sunt activiti
didactice)
A :=
(orar ) , zilele cu ore
{
zi
}
B := studenti
orar
C := {
( B)
nume, zi }
D := C A
Referine:
[Da04] DATE, C.J., An Introduction to Database Systems (8th Edition), Addison-Wesley, 2004,
cap. 7.
[Ga08] GARCIA-MOLINA, H., ULLMAN, J., WIDOM, J., Database Systems: The Complete
Book, Pearson Prentice Hall, 2008], cap. 5.
[Ra07] RAMAKRISHNAN, R., Database Management Systems. McGraw-Hill, 2007, cap. 4,
http://pages.cs.wisc.edu/~dbbook/openAccess/thirdEdition/slides/slides3ed.html
http://infolab.stanford.edu/~ullman/fcdb/slides/slides5.pdf