Professional Documents
Culture Documents
Curs
Specializarea Ingineria Informaiei - anul IV-A
Bibliografie
Felicia Ionescu, Baze de date relationale si aplicatii, Editura Tehnica,
Bucureti, 2004
C. J. Date, An Introduction to Database Systems, 8th Edition, 2004
R. Elmasri and S. B. Navathe, Fundamentals of Database Systems,
Fourth Edition, 2004
J. Ullman, J. Windom, A First Course In Database Systems, Prentice
Hall, 1997
Kevin Kline, Daniel Kline, SQL In A Nutshell, OReilly, 2001
Oracle 11g Documentation http://www.oracle.com/technetwork/database/enterprise-edition/documentation/index.html
Capitolul 1: Introducere
Definiii baze de date, sisteme de baze de date
Componentele sistemelor de baze de date
Arhitectura interna a sistemelor de baze de date
Avantajele oferite de sistemele de baze de date
Clasificari ale sistemelor de baze de date
Clasificare dupa modelul de date
Clasificare dupa numarul de utilizatori
Clasificare dupa numarul de statii pe care este memorata baza de date
Modelarea datelor
Modele conceptuale de nivel inalt
Modele specifice de date
Definitie (in sens larg): O baza de date (database) este o colecie de date
corelate din punct de vedere logic, care reflecta un anumit aspect al lumii
reale i este destinata unui anumit grup de utilizatori. In acest sens pot fi
considerate ca fiind baze de date:
Fisiere de documente sau foi de calcul tabelar (Microsoft Word, Microsoft Excel)
Definitie (in sens restrans): O baz de date este o colecie de date creat i
meninut computerizat, care permite operaii de:
Introducere (insert)
Stergere (delete)
Actualizare (update)
Interogare (query)
Software:
Sisteme de operare, biblioteci, instrumente de dezvoltare, interfete
Sistemul de Gestiune a Bazelor de Date (SGBD) (Database Management
System DBMS) - recepioneaz cererile utilizatorilor de acces la baza de date,
le interpreteaz, execut operaiile corespunztoare i returneaz rezultatul
Aplicatii de baze de date: (Database Applications) sunt programe care ofer
anumite utilizari ale unei baze de date
Utilizator
final
Date
Program
aplicaie
Date
SGBD
Date
Date
Utilizatori:
Programatori de aplicatii
Utilizatori finali
Administratorul bazei de date
Analisti si proiectanti ai bazelor de date
Nivelul extern
Nivelul conceptual
Vedere
utilizator #1
Vedere
utilizator #2
Vedere
utilizator #n
Schema conceptual
SGBD
Nivelul intern
Schema intern
Date
memorate
Arhitectura client-server:
Server (back-end): SGBD-ul si baza de date
Client (front-end): program (programe) de aplicatie
Prof. Felicia Ionescu
Aplicaie
Client
Aplicaie
Client
Aplicaie
Client
Reea
de comunicaie
Server
Server
SGBD
SGBD
BD
BD
Aplicaie
Client
Aplicaie
Client
Reea
de comunicaie
Server
Server
SGBD
SGBD
BD
BD
10
Modelarea datelor
Un model este o abstractizare a unui sistem:
capteaz cele mai importante trsturi caracteristice ale sistemului (concepte)
conceptele trebuie sa fie relevante din punct de vedere al scopului pentru care
se definete modelul respectiv
11
Modelul Entitate-Asociere
Modelul Entitate-Asociere (Entity-Relationship Model) defineste multimile
de entiti i asocierile dintre ele, dar nu impune nici un mod specific de
structurare i prelucrare (gestiune) a datelor; Introdus n 1976 de P.S. Chen
O entitate (entity) este orice exista in realitatea obiectiva si poate fi
identificat n mod distinctiv
Exemple: o persoana, o planta, o activitate, un concept etc.
12
Asocieri
O asociere (relationship) este o legtur (coresponden) ntre entiti din
dou sau mai multe mulimi de entiti; asocierile pot avea atribute
Tipul asocierii (relationship type) se refera la asocierile similare, care pot
fi definite intre entitati din 2 sau mai multe multimi de entitati
Multime de asocieri (relationship set): multimea asocierilor de acelasi tip
O asociere este o instanta a unui tip de asociere si un element al multimii
de asocieri de acel tip
In exprimarea curenta, adeseori nu se face diferentierea dintre asociere, tip
de asociere si multime de asocieri, dar diferenta este evidenta
Gradul unui (tip de) asociere (degree): numrul de (mulimi de) entiti
asociate; dupa grad, asocierile pot fi:
binare (de gradul 2, ntre 2 mulimi de entiti) majoritatea asocierilor
multiple (ntre k mulimi de entiti, k > 2)
13
unul-la-unul 1:1
unul-la-multe- 1:N
14
multe-la-unul- N:1
multe-la-multe- M:N
15
Cardinalitatea asocierilor
Cardinalitatea (multiplicitatea) unei asocieri fa de o mulime de entiti
(cardinality, multiplicity) este numrul maxim de elemente din acea mulime
care pot fi asociate cu un element din alt mulime a asocierii
Exemplu: asocierea unul-la-multe dintre mulimile A i B prezint multiplicitatea
1 fa de mulimea A i multiplicitatea N (se nelege o valoare oarecare N > 1)
fa de mulimea B
16
Diagrama Entitate-Asociere
Diagrama Entitate-Asociere (Entity-Relationship Diagram) reprezint
grafic modelul Entitate-Asociere prin mulimile de entiti i asocierile dintre
acestea
Multimi (tipuri) de entitati:
Puternice (de sine statatoare)
Slabe (depind de alte multimi de entitati)
Notatii:
Tip de entitate puternic
Tip entitate
Tip entitate
Nume
atribut
Atribut
17
Numr
Salariu
Nume
1
SECTII
Cuprind
ANGAJATI
1
M
Lucreaza
Intretin
N
N
DEPENDENTI
Nume
GradRudenie
PROIECTE
Denumire
Buget
18
19
Prenume
DataNasterii
Adresa
Salariu
ANGAJAT
d
SECRETARA
VitezaRedactare
TEHNICIAN
INGINER
Calificare
Specialitate
20
21
FACULTATI
f1
1
N
PROFESORI
f2
f3
PROFESORI
PROFESORI
p1
p2
p3
STUDENTI
N
STUDENTI
(a) Diagrama E-A
STUDENTI
s1
s2
s3
s1
s2
s4
Numai legturi de tipul printe-fiu, care corespund asocierilor 1:1 i 1:N din
modelul E-A
Asocierile M:N se pot reprezenta prin multiplicarea nregistrrilor de tip fiu,
atunci cnd sunt referite de mai multe nregistrri de tip printe
mare redundan a datelor
22
f1
f2
f3
PROFESORI
p1
p2
p3
STUDENTI
s1
s2
s3
s4
Modelul retea
23
24
Modelul obiect-orientat
Modelul obiect (Object Model) este un concept unificator
Necesar in domenii n care se manipuleaz date de tipuri complexe:
proiectarea sistemelor de calcul: programare, hardware, interfete
proiectarea asistat de calculator (CAD-CAM)
sisteme de informaii geografice
fizic, biologie, medicin i altele
Dificultati:
Complexitate in dezvoltare a bazei de date i a aplicaiilor
Interogarile trebuie s fie prevzute explicit in structura datelor
25
Modelul obiect-relational
Modelul obiect-relaional (Object-Relational Model) reprezint extinderea
modelului relaional cu caracteristici ale modelului obiect
Modelul obiect-relaional pstreaz structurarea datelor n relaii, si, in plus:
permite definirea unor noi tipuri de date, ca domenii ale atributelor
permite extinderea tipurilor de date prin motenire
26
SGBDR
SGBDOR
Sisteme de fiiere
SGBDOO
Complexitatea
datelor
27
1970
1980
1990
2000
28
29
30
Indexarea relaiilor
Indexul primar
Indexuri secundare
Atributele pot fi: simple (un element) sau compuse (o submulime de atribute)
Domeniu: o mulime de valori D = {di | i = 1,, n }, definit printr-o specificare
de tip, unde:
D este numele domeniului
di este un element al domeniului care satisface anumite constrngeri
Elementele domeniilor sunt atomice (indivizibile)
O valoare speciala, null, poate apartine oricarui domeniu (inseamna lipsa de
informatie sau valoare necunoscuta)
Prof. Felicia Ionescu
Schema relaiei
Schema relaiei: descriere a unei relaii (tipul, intensiunea relaiei)
Schema relaiei: R(A1,A2,...Ai,...An), unde:
R este numele schemei relaiei
lista ordonat a atributelor sale A1,A2,...Ai,..An
fiecare atribut Ai definit pe domeniul su de definiie, D(Ai)
Gradul relaiei: numrul de atribute ale schemei acelei relaii (n)
Exemplu: STUDENTI (Nume, Prenume, DataNasterii, Adresa, Facultatea)
n mod curent: se foloseste R atat pentru schema cat i pentru relaia insasi
Prof. Felicia Ionescu
Coloane - Atribute
Numele
STUDENTI
Nume
Prenume
DataNasterii
Adresa
Facultatea
Anghelescu
Octavian
1999
Bucuresti
ETTI
Beldiman
Cristina
1998
Bucuresti
ETTI
Boeru
Marius
1999
null
ETTI
Capul
tabelului
Linii - tupluri
Afiarea tabelelor
SGBD-urile ofer instrumnente de proiectare i afisare a tabelelor
De exemplu, afiarea tabelului Employees din baza de date Northwind folosind
toolset-ul SQL Query Analyser din Microsoft SQL Server
Limbajul SQL
Limbajul IBM Sequel dezvoltat ca parte a proiectului System R la IBM San
Jose Research Laboratory (1970)
Redenumit Structured Query Language (SQL)
Standarde SQL - ANSI i ISO:
Anul
Denumire
Caracteristici
1986
SQL-86
1989
SQL-89
Revizii minore
1992
SQL-92
1999
SQL-1999
2003
SQL-2003
2006
SQL-2006
10
Operatori SQL
Operatorii de comparaie returneaz valori logice:
true (1), dac condiia este ndeplinit
false (0) dac condiia nu este ndeplinit
null dac ambii operanzi au valoarea null
A and B
A or B
not A
true
true
true
true
true
false
true
false
false
true
false
true
true
null
null
true
null
null
false
false
false
false
false
null
false
null
null
null
null
null
11
Funcii SQL
Funcii SQL: funcii agregat i funcii scalare.
Funciile agregat calculeaz un rezultat din mai multe linii ale unui tabel
Aceste funcii vor fi detaliate ulterior, la descrierea instruciunii SELECT
Funciile scalare:
Primesc unul sau mai multe argumente i returneaz valoarea calculat sau NULL
n caz de eroare
Argumentele funciilor pot fi constante (literale) sau valori ale atributelor specificate
prin numele coloanelor corespunzatoare
12
Siruri de caractere:
character(n), prescurtat, char(n) - ir de caractere de lungime fix (n)
character varying(n), prescurtat varchar(n) - ir de caractere de lungime variabil,
maximum n
Siruri de bii - secvene de cifre binare (care pot lua valoarea 0 sau 1):
bit(n)) - sir de biti de lungime fix (n)
bit varying(n) sir de biti lungime variabil, maxim n
Prof. Felicia Ionescu
13
14
Domenii SQL
n SQL2 domeniile atributelor se specific pe baza tipurilor de date
predefinite ale limbajului SQL, deci nu corespund ntru totul noiunii de
domeniu relaional
Standardul SQL2 prevede comanda CREATE DOMAIN, care definete un
domeniu pe baza unui tip predefinit SQL2 i cu unele constrngeri
Standardul SQL3 prevede comanda CREATE TYPE care creaz tipuri
definite de utilizator (user-defined types)
n SGBD-urile actuale sunt implementate diferite versiuni din standarde:
n SQL Server se pot crea domenii ale atributelor cu comanda SQL CREATE
DOMAIN
n Oracle (8i, 9i, 10g,11g) se pot crea tipuri de date noi, folosind comanda
CREATE TYPE, care permite gruparea sub un anumit nume a mai multor
atribute i operatii
n PostgreSQL de asemenea se pot crea tipuri de date noi, folosind comanda
CREATE TYPE
15
Conventii de notatie
Pentru prezentarea limbajului SQL i a altor limbaje, biblioteci i interfete
[
] (paranteze drepte)
} (acolade)
| (bar vertical)
[ , . . . n]
element1, . . . . . . .
elementn
lista_elemente
16
Instruciuni SQL
Componenta de definire a datelor din SQL (LDD - Limbajul de Definire a Datelor):
Crearea (CREATE), modificarea (ALTER) i distrugerea (DROP) obiectelor bazei de
date
Obiectele bazei de date sunt: tabele de baz (TABLE), tabele vedere (VIEW), indexuri
(INDEX), proceduri (PROCEDURE), trigere (TRIGGER), utilizatori (USER)
CREATE INDEX,
CREATE USER
DROP VIEW,
DROP FUNCTION,
ALTER FUNCTION,
DROP INDEX,
DROP PROCEDURE,
ALTER PROCEDURE
DROP USER
DROP TRIGGER
17
Crearea tabelelor
Instruciunea CREATE TABLE are urmtoarea sintax:
CREATE TABLE nume_tabel (
col1 domeniu1 [constrngeri_coloana],
col2 domeniu2 [constrngeri_coloana],
.................................
coln domeniun [constrngeri_coloana],
[constrngeri_tabel] );
18
Crearea vederilor
Tabelele create cu instruciunea CREATE TABLE:
se numesc i tabele de baz (base tables)
ele sunt memorate n fiierele bazei de date i pot fi accesate pentru introducerea,
modificarea i regsirea (interogarea) datelor
19
20
Instruciunea SELECT
SELECT - instruciune de interogare, prin care se regsesc informaiile din
unul sau mai multe tabele ale bazei de date dupa un criteriu (conditie) dat
Sintaxa general:
SELECT [DISTINCT] lista_coloane
[FROM lista_tabele]
[WHERE conditie]
[clauze_secundare];
21
Clauza SELECT
Clauza SELECT specific:
lista coloanelor unor tabele (date n lista_tabele)
expresii care vor fi calculate i afiate
Exemple:
SELECT ID, Name, CountryCode, District from city;
SELECT 3*4, cos(45), floor(12.45);
22
Exemple:
SELECT * FROM city WHERE Population > 1000;
SELECT * FROM city WHERE (Population > 200000) AND (CountryCode=ROM);
Prof. Felicia Ionescu
23
Valoarea returnata
COUNT
SUM
MAX
MIN
AVG
24
Funcii agregat
Exemple de funcii agregat fr clauze secundare:
SELECT COUNT(*) FROM city;
25
Instruciunea INSERT
Instruciunea INSERT se folosete pentru introducerea datelor n tabele i are
urmtoarea sintax:
INSERT INTO nume_tabel (col1,col2,...coln) VALUES(val1,val2,...valn);
26
Dac este omis clauza WHERE, vor fi modificate valorile coloanelor din toate
liniile tabelului.
Instruciunea DELETE permite tergerea uneia sau mai multor linii dintr-un
tabel i are sintaxa:
DELETE FROM nume_tabel [WHERE conditie];
Din tabel se terg acele linii care ndeplinesc condiia dat n clauza WHERE.
Dac este omis clauza WHERE, vor fi sterse toate liniile din tabel.
Exemplu:
DELETE FROM ANGAJATI WHERE Nume =Ionescu;
27
Constrngerile inter-relaii - reguli care se impun ntre dou sau mai multe
relaii; asigura integritarea referenial prin intermediul cheilor strine
Prof. Felicia Ionescu
28
29
La crearea unui tabel opiunea NULL este implicit (nu se specific nimic), sau
se poate introduce explicit; optiunea NOT NULL se introduce explicit.
Optiunile NULL i NOT NULL se introduc ca i constrngeri de coloana n
instructiunea SQL CREATE TABLE. Exemplu:
CREATE TABLE ANGAJATI (
Nume
varchar(20) NOT NULL,
Prenume
varchar(20) NOT NULL,
DataNasterii
date NULL,
Functie
varchar(20),
Salariu
numeric);
Prof. Felicia Ionescu
30
MySql 5.0 nu face verificarea CHECK, chiar daca admite acest cuvnt cheie
Prof. Felicia Ionescu
31
Constrngeri de tuplu
O relaie = mulime de tupluri tuplurile unei relaii trebuie s fie distincte (nu
pot exista dou sau mai multe tupluri identice)
Pentru ca tuplurile unei relaii s fie distincte se folosete cte o cheie primar
(primary key) n fiecare relaie
O cheie primar PK a unei relaii este un atribut (simplu sau compus) al acelei
relaii care are proprietatea de unicitate, adic fiecare valoare a cheii primare
este unic n acea relaie. Aceasta nseamn c:
Nu exist dou tupluri distincte (diferite) care s aib aceeai valoare a cheii primare
(sau combinaie de valori) pentru orice stare a relaiei, adic:
ti[PK] tj[PK] dac i j, unde ti i tj sunt 2 tupuri diferite ale relaiei
32
O cheie primar artificial este un atribut (de obicei simplu) care nu reprezint o
proprietate a tipului de entitate sau asociere reprezentat de relaie, ci se adaug
n schema relaiei special pentru identificarea unic a tuplurilor
Exemplu:
ANGAJATI (IdAngajat, CNP, Nume, Prenume, DataNasterii, Adresa, Functia, Salariu):
IdAngajat este o cheie primar artificial
Ar putea fi definite i chei primare naturale prin atribute simple sau compuse care au
proprietatea de unicitate n anumite condiii:
atributul simplu {CNP} valabil numai pentru persoanele din Romania
atributul compus {Nume, Prenume, DataNasterii, Adresa}
33
34
Dac cheia primar este simpl (format dintr-un singur atribut), ea se poate
specifica i ca o constrngere de coloan; exemplu:
CREATE TABLE ANGAJATI (
IdAngajat
int PRIMARY KEY AUTO_INCREMENT,
Nume
varchar(20)
NOT NULL,
Prenume
varchar(20)
NOT NULL,
DataNasterii
Date,
Adresa
varchar(50),
Salariu
numeric) ;
Prof. Felicia Ionescu
35
O cheie candidat poate fi simpl (un atribut), sau compus (mai multe atribute)
Exemplu: ANGAJATI (IdAngajat, CNP, Nume, Prenume, DataNasterii, Adresa,
Functia, Salariu)
SK1 = {IdAngajat, CNP, Nume, Prenume, DataNasterii, Adresa, Functia, Salariu}
SK2 = {CNP, Nume, Prenume, DataNasterii, Adresa}; SK3 = {IdAngajat, CNP}
CK1= {Nume, Prenume, DataNasterii, Adresa}; CK2 = {CNP}; CK3 ={IdAngajat}
Prof. Felicia Ionescu
36
Alegerea cheii primare dintre mai multe chei candidate este arbitrar, dar, din
motive de eficien, se alege cheia cu cel mai mic numr de atribute
Cheile secundare se deosebesc de cele primare prin:
Pot fi modificate prin instruciuni UPDATE, dac se respect proprietatea de unicitate
Cheile secundare compuse admit valori NULL pentru unele din atributele lor
37
Constrngeri inter-relaii
Asocierile (relaionships) 1: N ntre dou mulimi de entiti (din modelul
Entitate-Asociere) se realizeaz n modelul relaional prin chei strine
Exemplu: Pentru a realiza asocierea 1: N dintre relaiile SECTII i ANGAJATI,
se adaug n relaia ANGAJATI cheia strin IdSectie, care reprezint
identificatorul (numrul) seciei n care lucreaz angajatul respectiv:
ANGAJATI (IdAngajat, Nume, Prenume, DataNasterii, Adresa, Salariu, IdSectie)
SECTII
SECTII
ANGAJATI
Diagrama E-A
IdSectie
Nume
Buget
Productie
400000
Proiectare
300000
Cercetare
200000
Documentare
100000
ANGAJATI
IdAngajat
Nume
Prenume
DataNasterii
Adresa
Functia
Salariul
IdSectie
Ionescu
Ion
1960.01.05
Bucuresti
inginer
4000
Popa
Petre
1965.02.97
Bucuresti
tehnician
3200
Carol
Ana
1961.03.06
Bucuresti
secretara
2000
Marin
Radu
1970.03.98
Bucuresti
inginer
4000
38
Cheia strin
Fie dou relaii R1 i R2, ntre care exista o asociere cu raportul 1: N.
O cheie strin (foreign key) este o submulime FK de atribute ale relaiei R2
care refer cheia CK din relaia R1 i satisface urmtoarele condiii:
atributele cheii strine FK sunt definite pe domenii compatibile cu cele ale atributelor
cheii candidate CK a relaiei R1
valorile atributelor FK ntr-un tuplu din relaia R2, fie sunt identice cu valorile atributelor
CK ale unui tuplu oarecare din starea curent a relaiei R1, fie sunt NULL
Dou domenii sunt compatibile dac ele sunt compatibile din punct de vedere al
tipului de date i compatibile semantic (are sens s fie comparate)
n limbajul SQL verificarea domeniilor se rezum la verificarea tipurilor de date, iar
compatibiltatea semantic trebuie s fie asigurat de proiectant
Exemplu:
CREATE TABLE ANGAJATI (
IdAngajat
int PRIMARY KEY,
Nume
varchar(20) NOT NULL,
Prenume
varchar(20) NOT NULL,
IdSecie
int,
CONSTRAINT FK FOREIGN KEY (IdSectie) REFERENCES SECTII(IdSectie));
Prof. Felicia Ionescu
39
Operatia DELETE:
ntr-o relaie care nu este referit tergerea se poate face fr restricii
ntr-o relaie referit se admite: tergere restricionat, tergere n cascad,
anularea (SET NULL) a cheilor strine care refereau tuplul ters
tergerea restricionat interzice tergerea unui tuplu din relaia referit dac
acesta este referit de un tuplu din relaia care o refer
Prof. Felicia Ionescu
40
Exemplu:
CREATE TABLE ANGAJATI (
IdAngajat
int PRIMARY KEY,
Nume
varchar (20) NOT NULL,
........................
Sectie
int,
CONSTRAINT FK FOREIGN KEY (Sectie) REFERENCES SECTII (IdSectii) ,
ON DELETE CASCADE ON UPDATE RESTRICT);
Prof. Felicia Ionescu
41
Nivelul 0
Nivelul 1
1
42
43
(Li)
(pki) (ai, bi, ci, ...)
(Lj) (Lk)
(4)(Marin, .)
(2)(Popa, .)
(Lj)
(Lk)
(1)(Ionescu,..)
(6)(Ionescu,.)
(3)(Carol,...)
(5)(Ene,.)
(7)(Dobre,.)
44
Operatiile de interogare care se fac dup valoarea altor atribute (dect indexul
primar) se execut mult mai ineficient, fiind o cutare ntr-o mulime neordonat
dup acea valoare
Exemplu: Care sunt funcia i salariul angajatului cu numele Dobre ?
Pentru cutare se vor parcurge pe rnd toate tuplurile relaiei (memorate n nodurile
arborelui - exist astfel de algoritmi de parcurgere) pentru a gsi tuplul (sau tuplurile)
cu valoarea atributului Nume egal cu Dobre
Sunt necesari maximum N pai (N este nr total de tupluri ale relaiei)
45
Index secundar normal (care nu este unic - nu are o denumire specific) este
definit pe un atribut A care nu ia valori unice (nu este cheie unic)
Un element (nod) al indexului este compus din valoarea ai a atributului indexat A i
lista (Li1 , Li2 , ) a adreselor (pe hard-disk) a tuplurilor ti1, ti2, care au valoarea ai
a atributului A
Dac relaia are N tupluri, indexul va avea M N elemente
Pentru o structur arbore binar a indexului, fiecare nod mai conine i adresele
nodurilor fii (stnga, dreapta) (nereprezentate n figura urmtoare)
Prof. Felicia Ionescu
46
(Dobre) (L7)
(Carol) (L3)
Prof. Felicia Ionescu
(Ene) (L5)
Cap. 2 - Baze de date relationale
(Marin) (L4)
(Popa) (L2)
47
48
Reuniunea
Intersecia
Diferenta
Produsul Cartesian
Selectia
Proiectia
Jonctiunea
Diviziunea
Limbaje de interogare
Interogarea (query): operaia prin care se obin informatiile dorite dintr-o
baz de date, selectate conform unui anumit criteriu (condiie);
Limbaje de interogare: abstracte si concrete (reale - implementari in diferite
SGBD-uri)
Limbaje de interogare abstracte: algebra relationala si calculul relational
Algebra relationala (relational algebra) - const dintr-o mulime de operaii
care au ca operanzi relaii, iar rezultatul este tot o relaie
Calculul relaional (relational calculus) - bazat pe calculul predicatelor exprim o interogare definind rezultatul dorit ca expresie de calcul relaional
Calculul relational al tuplurilor foloseste variabile de tuplu (variabile
definite pe mulimea tuplurilor unei relaii)
Calculul relational al domeniilor foloseste variabile de domeniu (variabile
definite pe domenii de definiie ale atributelor)
Cele trei limbaje formale sunt echivalente din punct de vedere al interogarilor
Limbajele de interogare reale sunt definite pe baza unuia sau altuia din
limbajele de interogare abstracte, sau pe o combinaie a acestora.
De exemplu, limbajul SQL2 este n cea mai mare parte bazat pe algebra
relaional, dar mai conine i construcii derivate din calculul relaional.
Prof. Felicia Ionescu
Algebra relaional
Algebra relaional (relational algebra) - interogrile sunt expresii compuse
din operatii care au ca operanzi relatii si rezultatul este o relatie
Operatiile algebrei relationale: operatii pe multimi si operatii speciale, la care
se adauga operatia de redenumire (rename) a atributelor (E.Codd)
Operatiile relationale pe multimi acioneaz asupra relaiilor vzute ca mulimi
(de tupluri), fr a lua n consideraie compoziia fiecrui tuplu; acestea sunt:
Reuniunea
Intersecia
Diferena
Produsul cartezian
Restricia
Proiecia
Jonciunea
Diviziunea
Operaia de reuniune
Reuniunea (union) a dou relaii compatibile r(R) i s(S):
q = r s = { t | t r or t s}
Pentru ca r si s sa fie compatibile, trebuie ca:
r si s s aiba acelasi grad (acelasi numar de atribute)
Atributele corespondente (n ordine pozitional) s fie compatibile
rs
Prof. Felicia Ionescu
1
2
1
2
3
rs
r
Diferena (set-difference) a dou relaii compatibile r(R) i s(S):
q = r - s = { t | t r and t s}
Exemplu:
B
1
2
1
2
3
B
1
1
r-s
r
Reuniunea si intersectia sunt comutative si asociative (r s = s r ;
r (s t) = (r s) t); diferenta nu este nici nici comutativa, nici asociativa
Prof. Felicia Ionescu
Intersectia:
SELECT lista_coloane1 FROM tabel1 [WHERE condiie1]
INTERSECT
SELECT lista_coloane2 FROM tabel2 [WHERE condiie2];
Diferenta:
SELECT lista_coloane1 FROM tabel1 [WHERE condiie1]
MINUS
SELECT lista_coloane2 FROM tabel2 [WHERE condiie2];
Operaia de selecie
Seleca (sau restricia select, restriction) ntr-o relatie r(R) - definita astfel:
p(r) = {t | t r and p(t)}
unde p, predicatul selectiei, este o expresie logic compus din termeni conectati prin
operatorii and, or not (i, eventual, paranteze)
n limbajul SQL:
SELECT * FROM tabel WHERE p;
n termenii folosii n limbajul SQL, restricia selecteaz o parte din liniile tabelului
operand
Operatia de proiecie
Proiectia (project) pe atributele A1, A2, .. Ak intr-o relatie r(R) se noteaz:
A1, A2, Ak (r), unde A1 R, A2 R, Ak R
Rezultatul este o relatie cu k atribute, cele din lista data
Daca {A1, A2, Ak} nu contine o supercheie, pot sa apara tupluri duplicat;
teoretic, tuplurile duplicat se elimina, dat fiind ca rezultatul este o multime
Exemplu:
10
20
30
40
A,C (r)
10
11
1
2
4
1
2
a
a
b
a
b
r s
s
r
In SQL trebuie sa fie introduse explicit lista atributelor rezultatului si conditiile
de egalitate ale atributelor comune:
1
2
4
1
2
a
a
b
a
b
a
b
c
d
e
12
Jonciunea extern introduce n plus toate liniile care exit n prima relaie
(pentru LEFT OUTER JOIN) sau n cea de-a doua relaie (pentru RIGHT
OUTER JOIN) i pentru care nu exist linii n ceallalt relaie care s
ndeplineasc condiia de join; exemplu:
SELECT city.Name Oras, Code 'Cod Tara', country.Name Tara, Continent
FROM city RIGHT OUTER JOIN country ON CountryCode=Code
WHERE Continent='Antarctica' OR Continent = 'Europe' ORDER BY Continent;
Se vor afia si rile care nu au nici un oras nscris n tabelul city.
13
Operaia de diviziune
Fie relaiile r(R) si s(S), unde:
R = {A, B} unde A={A1,A2,..Am}, B={ B1,B2,..Bn}
S = {B}
1
2
3
1
2
1
3
1
2
rs
r
Prof. Felicia Ionescu
14
Reuniunea
Diferena
Produsul Cartesian
Restricia (selectia)
Proiecia
15
Formularea interogarilor
Interogarea este operatia prin care se obtin informaiile dorite (care
indeplinesc o anumita conditie) dintr-o baz de date. O interogare:
se formuleaza mai intai n limbaj natural,
apoi se exprima ntr-un limbaj abstract de interogare (algebra relaional sau
calculul relaional),
se transpune n limbajul de interogare al SGBD-ului folosit (ex., limbajul SQL),
iar aplicatia client transmite SGBD-ului instructiunea (sau instructiunile) obtinute
16
17
18
Nume
Prenume
DataNasterii
Adresa
Salariu
IdSectie
SECTII
Buget
Denumire IdSectie
19
FILM_ACTOR
ACTOR
Interogarea: n ce filme au jucat fiecare din actorii din baza de date sakila ?
q = first_name, last_name, title (film film_actor actor)
Instructiunea SQL:
SELECT first_name, last_name, title
FROM FILM, FILM_ACTOR, ACTOR
WHERE FILM.film_id = FILM_ACTOR.film_id
AND ACTOR.actor_id = FILM_ACTOR.actor_id ORDER BY FILM.film_id;
20
21
Subinterogri
Subinterogrile sunt operaii care determin diferite date (valori scalare,
tabele rezultat, numr de elemete etc.) folosite n interogarea de baz
Subinterogrile pot conine la rndul lor alte subinterogri
Exemplul 1: Care sunt angajaii (nume, prenume, adresa) care lucreaz
n aceeai secie cu angajatul cu numele Ionescu i prenumele Ion?
Se determin printr-o subinterogare n ce secie lucreaz angajaul dat
Se selecteaz toi angajaii din acea secie:
SELECT Nume, Prenume, Adresa FROM ANGAJATI
WHERE IdSectie = (SELECT IdSectie FROM ANGAJATI WHERE Nume = 'Ionescu'
AND Prenume = 'Ion');
22
23
Cerine de date
Cerine de
prelucrare
Proiectarea conceptual a
tranzaciilor (indep. de SGBD)
Faza 3: Alegerea
unui SGBD
Faza 4: Proiectare
logic
Faza 5: Proiectare
fizic
Faza 6: Implementare
Testarea datelor
Cap. 4 - Dezvoltarea sistemelor
de baze de date
Proiectarea tranzaciilor
(dependente de SGBD)
Implementarea tranzaciilor
Testarea tranzactiilor
3
SECTII(Nume,Buget)
ANGAJATI(Nume, Prenume, DataNasterii, Adresa, Functie, Salariu)
PROIECTE(Denumire,Termen, Buget)
PRODUSE(Denumire, Descriere)
COMPONENTE(Denumire, Descriere)
FURNIZORI(Nume,Prenume,Adresa) ; CLIENTI(Nume, Prenume, Adresa)
Diagrama E-A:
SECTII
1
COMPONENTE
PROIECTE
COMPOZITII
ACTIVITATI
ACHIZITII
ANGAJATI
PRODUSE
N
VANZARI
N
DEPENDENTI
Prof. Felicia Ionescu
INGINERI
SECRETARE
FURNIZORI
M
N
CLIENTI
6
10
Proiectarea relatiilor
Mulimile de entiti puternice (normale) din diagrama E-A devin relaii:
Numele fiecrei relaii trebuie s fie unic n baza de date
Atributele relatiei corespund atributelor entitilor din multimea de entitati data
Cheia primar se definete:
fie ca o cheie primara natural (combinaie de atribute care definesc n mod unic un tuplu)
fie ca o cheie primar artificial
De exemplu, n relaiile ANGAJATI, SECTII, PROIECTE, COMPONENTE, PRODUSE,
FURNIZORI, CLIENTI s-a adugat cte o cheie primar artificial (IdAngajat, IdSectie etc.)
Mulimile de entiti slabe din diagrama E-A devin relaii aflate n asociere N:1
cu relaia corespunztoare mulimii de entiti de care acestea depind
Pentru realizarea acestei asocieri, n relaia dependent se adaug o cheie strin
care refer cheia primar a relaiei puternice referite; de exemplu: cheia straina
dAngajat in introdusa in relatia DEPENDENTI . De ex:
DEPENDENTI( IdAngajat, Nume, Prenume, DataNasterii, GradRudenie)
11
12
13
14
Relaia n care un atribut poate avea valori multiple (un vector de valori)
este o relaie nenormalizat, care nu este admis de SGBD relaionale
Transformarea unei relaii nenormalizate n relaie normalizat n prima
forma normal (FN1):
se nlocuiete atributul care ar putea avea valori multiple cu cte un atribut
pentru fiecare din posibilitile existente: Exemplu: PERSOANE (IdPersoana,
Nume, Prenume, Adresa,TelefonAcasa, TelefonBirou, TelefonMobil)
se nlocuiete atributul care ar putea avea valori multiple cu o nou relaie care
refer relaia iniial printr-o cheie strin. Exemplu: PERSOANE(IdPersoana,
Nume, Prenume, Adresa), TELEFOANE(NrTelefon, IdPersoana, Descriere)
15
16
17
Instr. SQL
SGBD
Limbajul SQL
Rezultate
Extensii procedurale
ale limbajului SQL
18
Variabilele sunt folosite pentru stocarea in memorie a unor valori care pot fi
testate sau modificate i pot fi folosite pt transferul datelor ctre i de la tabele
Variabilele locale au ca domeniu de definiie blocul, procedura, functia sau
trigger-ul n care au fost declarate
Un bloc este un grup de instructiuni delimitat prin instructiunile: BEGIN ... END;
un bloc este considerat o instructiune compusa
O variabil local se declar si se initializeaza diferit de la un SGBD la altul. ex:
in Transact SQL:
DECLARE @contor INT
in PL/SQL (Oracle): DECLARE CONTOR := 1;
in MySQL:
DECLARE contor INT;
SELECT @contor = 0
SET contor = 0;
REPEAT...UNTIL
WHILE
BREAK
CONTINUE
FOR
19
20
Proceduri stocate
O procedur stocat (stored procedure) este o procedur care
implementeaz o parte din algoritmii de calcul ai aplicaiilor i care este
memorat in baza de date, la fel ca i alte obiecte ale bazei de date
Procedurile stocate se definesc folosind extensiile procedurale ale SQL:
In Transact-SQL: CREATE PROCEDURE nume_proc [parametri] AS instructiune
In PL/SQL (Oracle): CREATE PROCEDURE nume_proc [parametri] AS instructiune
In MySQL: CREATE PROCEDURE nume_proc [parametri] instructiune_compusa
21
Apelul procedurii:
call SP_Media(@media, 'PBD'); /* o variabila precedata de @ este implicit locala */
select @media;
Prof. Felicia Ionescu
22
23
Cursoare
Un cursor (cursor) este o structur (un buffer) care permite memorarea unei
mulimi de linii returnate de o instruciune de interogare, urmata de extragerea
si prelucrarea (eventual repetata) in programele de aplicatii a fiecarei linii
Cursoarele se pot crea folosind limbajul SQL sau extensiile procedurale ale
acestuia
Instruciunile SQL de definire i de operare a cursoarelor:
Definire cursor:
DECLARE nume_cursor [OPTIUNI] CURSOR FOR instructiune_select;
Deschidere cursor (popularea cu datele din tabele): OPEN nume_cursor;
Extragerea unei (sau mai multor) linii dintr-un cursor de la pozitia curenta:
FETCH [FROM] nume_cursor INTO lista_variabile;
Inchiderea cursor: CLOSE nume_cursor;
24
25
Se obtine rezultatul:
@media
6.5
26
Triggere
Un trigger este o procedur stocat special, care este executat automat
atunci cnd se efectueaz operaii de actualizare a relaiilor (INSERT,
DELETE, UPDATE)
Triggerele pot fi create folosind extensiile procedurale ale limbajului SQL;
sintaxa difera de la un SGBD la altul (sunt neportabile):
In Transact-SQL: CREATE TRIGGER nume_trigger ON nume_tabel
{FOR|AFTER|INSTEAD OF} {[DELETE][,INSERT][,UPDATE]} AS instructiuni
In Pl/SQL (Oracle): CREATE TRIGGER nume_trigger {BEFORE|AFTER} [INSERT,
DELETE, UPDATE] [FOR EACH ROW [WHEN conditie]] CALL procedura
In MySQL: CREATE TRIGGER nume_trigger ON tabel FOR EACH ROW instructiune
Utilizarea triggerelor:
Extinderea capacitii SGBD-ului de meninere a integritii datelor relaionale impunerea constrngerile explicite cum sunt dependenele de date (dependene
funcionale sau multivalorice care nu sunt determinate de chei)
Generarea automat a unor valori care rezult din valori ale altor atribute
Jurnalizarea transparent a evenimentelor sau culegerea de date statistice n
legtur cu accesarea relaiilor.
27
Instructiunile dupa FOR EACH ROW se executa de fiecare data cand triggerul
este activat, ceea ce se intampla la fiecare linie afectata de instructiunea de
declansare a triggerului (UPDATE in exemplul dat):
update examene_2 set notaLab = 2 , notaExam = 5
where idStudenti=1 AND idDiscipline = 2;
Cuvintele cheie OLD si NEW permit accesarea coloanelor din linia afectata:
pentru triggere INSERT se poate folosi numai NEW,
pentru triggere DELETE numai OLD,
pentru triggere UPDATE se poate folosi OLD (pentru valorile dinainte de UPDATE)
sau NEW (pentru valorile actualizate).
Prof. Felicia Ionescu
28
29
30
Interfata ODBC
Tehnologia ODBC (Open Database Connectivity) - interfa de programare a
aplicaiilor prin apel de funcii independente de sistemul SGBD folosit
Independen se obine prin drivere specifice fiecrui SGBD
Driverul transform apelurile de funcii ODBC n comenzi SQL (sau ntr-un
limbaj procedural de extensie a limbajului SQL) si le transmite SGBD-ului
Interfaa ODBC
Aplicaie
Administrator de drivere
Driver
Sursa
de date
SGBD i Baza
de date
Driver
Sursa
de date
SGBD i Baza
de date
Driver
Sursa
de date
SGBD i Baza
de date
31
Interfaa JDBC
JDBC este o interfa de programare a aplicaiilor de baze de date
independent de platform i de sistemul SGBD
Interfaa JDBC const din clase si obiecte Java i permite interaciunea cu
baze de date relaionale, precum i cu alte surse de date n format tabelar
Arhitectura JDBC const din mai multe niveluri care asigur independena
funciilor de acces apelate din programele de aplicaie de SGBD
Interfaa
JDBC
Administratorul de drivere
(DriverManager)
Driver JDBC
de retea
Punte JDBCODBC
Driver
combinat
Driver
Java pur
Driver ODBC
Protocol JDBCmiddleware
Prof. Felicia Ionescu
Protocoale de acces
specifice SGBD-urilor
Cap. 4 - Dezvoltarea sistemelor
de baze de date
32
33
Proprietatile tranzactiilor
Operatiile efectuate de tranzactii
Starile tranzactiilor
Planificarea tranzactiilor
Tehnici de control al concurentei
Controlul concurentei prin blocare
Controlul concurentei prin marci de timp
Tranzactii
n mod obinuit, un sistem SGBD deservete mai muli utilizatori, care
acceseaz concurent datele din tabele
Execuia concurent a mai multor procese poate avea loc:
ntr-un sistem uniprocesor, prin partajarea (mprirea) timpului de execuie al
procesorului ntre mai multe procese (multiprogramare)
ntr-un sistem multiprocesor, n care mai multe procese pot fi executate n mod
real simultan, pe mai multe procesoare ale sistemului (multiprocesare)
Exemplu de tranzactie
Exemplu: un sistem de rezervare a locurilor la curse aeriene
1.
2.
Dac exist locuri libere la cursa dorit, atunci se face propriu-zis rezervarea,
prin inserarea unei linii noi n tabelul FACTURI; altfel, nu se face rezervarea
3.
Se tipreste factura
4.
Dac sistemul se defecteaz dup ce s-a executat pasul 2, s-a fcut o rezervare,
dar biletul nu a fost facturat i nici emis
Dac defeciunea are loc dup pasul 3, clientului i se trimite factura, dar el nu a
primit biletul
Dac nu se defecteaz sistemul, dar doi ageni de vnzri atribuie acelai loc la
doi pasageri diferii, atunci vor fi probleme la mbarcarea pasagerilor
Citire improprie (dirty read): T2 citeste X+N, desi X=X+N nu a fost validata (c)
Timp
T1
T2
T1
T2
T1
read(X)
read(X)
read(X)
X=X+N
X=X+N
X=X+N
write(X)
read(X)
X=X-M
write(X)
write(X)
X=X-M
read(X)
T2
read(X)
write(X)
X=X-M
write(X)
write(X)
abort
(a)
(b)
(c)
Starile tranzactiilor
Diagrama de stare a unei tranzactii:
read,
write
begin
end
ACTIV
abort
PARTIAL
VALIDAT
commit
VALIDAT
abort
ABANDONAT
TERMINAT
Pentru refacerea bazei de date, sistemul SGBD menine un fiier jurnal (log
file), n care memoreaz operaiile efectuate de fiecare tranzacie,
identificat printr-un identificator unic (T) generat de sistem
Fiierul jurnal este memorat pe disc i nu este afectat de erori de execuie,
cu excepia unei defectri catastrofice a discului
Fiierul jurnal este salvat periodic pe un suport auxiliar (band magnetic)
Prof. Felicia Ionescu
Planificarea tranzactiilor
O planificare (schedule, sau istorie - history) S a n tranzacii
T1,T2,..Ti,...Tn este o ordonare a operaiilor tranzaciilor astfel nct:
Pentru orice tranzacie Ti care particip n S, operaiile lui Ti n S
respect ordinea iniial din Ti
Alte operaii (ale altor tranzacii Tj, unde j i) pot fi ntreesute cu
operaii ale tranzaciei Ti
T2
T1
T2
read(X) r1(X)
read(X) r2(X)
X=X-N
X=X+M
write(X) w1(X)
write(X) w2(X)
read(Y) r1(Y)
SA
Y=Y+N
write(Y) w1(Y)
read(X) r1(X)
X=X-N
SB
write(X) w1(X)
read(X) r2(X)
read(Y) r1(Y)
X=X+M
Y=Y+N
write(X) w2(X)
write(Y) w1(Y)
10
T2
T1
read(X) r1(X)
read(X) r1(X)
X=X-N
X=X-N
write(X) w1(X)
write(X) w1(X)
read(X) r2(X)
SC
read(Y) r1(Y)
SD
X=X+M
read(X) r2(X)
write(X)- w2(X)
X=X+M
read(Y) r1(Y)
Y=Y+N
Y=Y+N
write(Y) w1(Y)
write(Y) w1(Y)
Prof. Felicia Ionescu
T2
write(X) w2(X)
Cap. 5 - Gestiunea tranzactiilor
11
T1
T2
read(X) r1(X)
read(X) r1(X)
X=X-N
X=X-N
read(X) r2(X)
read(X) r2(X)
write(X) w1(X)
T2
SE
X=X+M
X=X+M
write(X) w1(X)
write(X)- w2(X)
read(Y) r1(Y)
read(Y) r1(Y)
Y=Y+N
Y=Y+N
write(Y) w1(Y)
SF
write(X) w2(X)
write(Y) w1(Y)
12
13
Zavoare binare
Dac zvorul articolului X este liber (L(X)=1), atunci tranzactia:
achiziioneaz zvorul (trecndu-l n starea ocupat prin operatia lock )
execut operaiile necesare asupra articolului X
elibereaz zvorul (trcndu-l in starea liber prin operaia unlock)
14
15
16
T3
T4
T4
lock(Y)
read(Y)
lock(XY)
read(Y)
read(X)
read(Y)
unlock(Y)
X=X+Y
read(X)
write(X)
read(X)
(a)
lock(X)
lock(XY)
X=X+Y
T4 blocata
read(X)
(b)
unlock(X)
read(Y)
write(X)
lock(Y)
Y=X+Y
unlock(XY)
read(Y)
write(Y)
read(X)
Y=X+Y
read(Y)
write(Y)
Y=X+Y
unlock(Y)
write(Y)
lock(X)
unlock(XY)
read(X)
(c)
X=X+Y
write(X)
unlock(X)
17
18
T3
T4
lock(Y)
read(Y)
lock(X)
lock(X)
unlock(Y)
T4 blocata
read(X)
X=X+Y
write(X)
unlock(X)
read(X)
lock(Y)
unlock(X)
Y=X+Y
write(Y)
unlock(Y)
19
20
21
Controlul tranzactiilor
Tehnicile de gestiune a tranzaciilor i de refacere a datelor sunt incluse n
SGBD-uri, iar aplicaiile de baze de date au un control limitat asupra
tranzaciilor prin intermediul unor comenzi SQL
Comenzi SQL pentru tranzacii:
SET TRANSACTION: setare optiuni :
Nivelul de izolare a tranzaciilor (ISOLATION LEVEL)
Modul de refacere a datelor (SET CONSTRAINTS)
Modul de acces la articole - cu valorile posibile READ ONLY, READ WRITE
COMMIT [WORK] terminarea tranzactiei
ROLLBACK [WORK] abandonarea si rularea inapoi a tranzactiei
Nivel de izolare
Citire
impropie
Citire
nerepetabila
READ
UNCOMMITTED
DA
DA
DA
READ
COMMITTED
NU
DA
DA
REPEATABLE
READ
NU
NU
DA
SERIALIZABLE
NU
NU
NU
Citire
fantoma
22
23
24
Proiectarea tranzactiilor
Tranzaciile sunt corecte dac las baza de date ntr-o stare consistent
Tranzaciile sunt cu att mai eficiente cu ct sunt mai scurte (ca timp de
execuie i ca numr de articole ale bazei de date accesate) deoarece astfel:
se limiteaza frecvena de apariie a impasului (n cazul folosirii zvoarelor)
creste eficienei operaiilor de anulare i de blocare a resurselor
25
26
27
28
29
30
Descompunerea relatiilor
Descompunere fara pierdere de informatie la jonctiune
Descompunere cu conservarea DF
Dependentele de date
Dependenele de date (data dependencies) reprezint constrngeri care se
impun valorilor atributelor unei relaii i care determin proprietile relaiei n
raport cu operaiile de inserare, tergere i actualizare a tuplurilor.
O form normal a unei relaii (normal form) presupune anumite condiii pe
care le ndeplinesc valorile atributelor i dependenele de date definite pe
acea relaie
Dependentele de date:
Dependente functionale: E.F. Codd a propus trei forme normale: FN1, FN2, FN3;
apoi a fost introdus forma normal Boyce-Codd (FNBC)
Dependenelor multivalorice: forma normala 4 (FN4)
Dependenelor de jonciune: forma normala 5 (FN5)
Formele normale ale relaiilor formeaz o colecie ordonat (FN1, FN2, FN3,
FNBC, FN4, FN5), i ele impun condiii din ce n ce mai restrictive asupra
dependenelor de date
Ordonarea formelor normale de la FN1 la FN5 nseamn c orice relaie
aflat n FN2 este n FN1, orice relaie n FN3 este n FN1 i FN2 etc.
Normalizarea relaiilor (normalization) const n descompunerea lor, astfel
nct relaiile s fie in forme normale ct mai avansate
Prof. Felicia Ionescu
Nume
Prenume
Adresa
IdProiect
Ore
Ionescu
Ion
Bucuresti
P1
100
Popescu
Petre
Ploiesti
P1
80
Marinescu
Marin
Craiova
P3
200
Ionescu
Ion
Bucuresti
P2
100
Popescu
Petre
Ploiesti
P3
120
Prenume
Adresa
IdAngajat
IdProiect Ore
Ionescu
Ion
Bucuresti
P1
100
Popescu
Petre
Ploiesti
P1
80
Marinescu Marin
Craiova
P1
200
P2
100
P2
120
Cheile relaiilor:
se pot preciza explicit (i atunci ele implic DF corespunztoare)
pot fi deduse din mulimea DF stabilite de proiectant, folosind diferiti algoritmi
Prof. Felicia Ionescu
Prenume
Adresa
Ore
10
11
12
Pentru aflarea cheilor candidate ale unei relaii din mulimea DF:
se consider o supercheie a relaiei
se testeaza condiia de ireductibilitate pentru fiecare din atributele componente
ale supercheii si se elimin orice atribut care poate fi eliminat fr s se piard
proprietatea de unicitate a cheii
Acest algoritm de aflare a cheilor candidate ale unei relaii din mulimea DF
este prezentat in continuare
Prof. Felicia Ionescu
13
14
Descompunerea relatiilor
O descompunere D = {R1, R2,..Ri,...Rk} a schemei de relaie R (relation
schema decomposition) este format din submulimi proprii ale lui R (R1 R,
R2 R,Rk R a caror reuniune este egala cu R (R = R1 R2 Rk)
Proiectiile relatiei r(R) pe submultimile R1, R2,...Ri, Rk (r1 = R1(r), r2 =
R2(r), .. ri = Ri(r), rk = Rk(r)) reprezinta descompunerea relaiei r(R) pe
aceste submulimi de atribute
Fie o relaie cu schema R i mulimea F de DF ale acesteia; o descompunere
a relaiei r(R) este reversibil dac are proprietile de:
Conservarea informatiei (descompunere fr pierdere de informaie la jonciune)
inseamna ca r = r1 r2 ri rk
Conservarea dependenelor funcionale: dac oricare din dependenele din F se
regsete sau poate fi dedus din DF ale relaiilor cu schemele R1,R2,...Ri,Rk
15
16
Dac, prin descompunerea unei relaii, se pierd una sau mai multe DF, pentru
verificarea lor, trebuie s se efectueze mai nti jonciunea relaiilor obtinute
Cele dou proprieti ale unei descompuneri, conservarea informaiei i
conservarea dependenelor funcionale, sunt independente
Prof. Felicia Ionescu
17
Anomaliile se pot evita prin (a) normalizare sau (b) prin impunerea DF
Normalizarea relatiei AP prin descompunere in relatiile A si P:
A(IdAngajat, Nume, Prenume, Adresa)
P(IdAngajat, IdProiect, Ore),
S-a demonstrat ca aceasta descompunere prezinta proprietatile de jonctiune fara
pierdere de informatie si conservarea DF si se poate arata ca A si P sunt in FN2
Prof. Felicia Ionescu
18
19
Exemplu:
Fie tabelul AP cu liniile (1,Ionescu,Ion, Bucuresti,1,50), (1,Ionescu,Ion,
Bucuresti,2,100) si (1,Ionescu,Ion,Bucuresti,3,80)
Se observa redundanta datelor: valorile Ionescu, Ion, Bucuresti sunt memorate
pentru fiecare proiect la care lucreaza angajatul cu IdAngajat = 1
Anomalia de inserare: daca nu se activeaza trigger-ul, se poate insera si linia
(1,Marinescu,Mihai,Bucuresti,4,60), ceea ce inseamna ca angajatul cu
IdAngajat =1 este nedeterminat (este Ionescu Ion sau Marinescu Mihai?)
Aceasta linie nu se poate insera daca s-a activat trigger-ul trigger_AP
Prof. Felicia Ionescu
20
21
23
24
25
26
Exemplu: daca tabelul EP contine linia (1,1) si tabelul (PD) contine linia (1,1),
prin INSERT se pot introduce si valorile (1,1,2) pentru (IdElev, IdDisciplina,
IdProfesor) adica liniile: (1,2) in EP si (2,1) in PD; dar aceste valori nu
respecta constrangerea {IdElev, IdDisciplina} IdProfesor deoarece:
in liniile existente (IdElev, IdDisciplina) = (1,1), iar IdProfesor = 1
in valorile de inserat (IdElev, IdDisciplina) = (1,1), iar IdProfesor = 2
28
Dependente multivalorice
O dependen multivaloric - DMV- (multivalued dependency) XY
specificat pe schema de relatie R = {X,Y,Z} stabilete urmtoarele
constrngeri pe care trebuie s le respecte orice relaie r(R): dac exist
dou tupluri t1 i t2 n r astfel ca t1[X] = t2[X]= x, atunci vor exista i tuplurile
t3 i t4 cu urmtoarele proprieti:
t3[X] = t4[X] = t1[X] = t2[X] = x;
t3[Y] = t1[Y] = y1 i t4[Y] = t2[Y] = y2 ;
t3[Z] = t2[Z] = z2 i t4[Z] = t1[Z] = z1 .
29
Dependente de jonctiune
Fie o schema de relaie R i R1,R2,...Rk submulimi de atribute ale lui R,
unde R1 R2 ... Rk = R. Se spune c exist o dependen de jonciune
(DJ) pe R, notat *(R1,R2,...Rk), dac i numai dac orice relaie r(R) este
egal cu jonciunea proieciilor relaiei pe submulimile R1,R2,..Rk, adic
r = R1(r) R2(r)... Rk(r).
Rezulta ca:
*(R1,R2,...Rk) este o DJ pe R dac i numai dac descompunerea lui R n
proieciile pe R1,R2,...Rk este fr pierdere de informaie la jonctiune
30
31
32
Algoritmi de normalizare
Analiza normalizrii relaiilor trebuie s fie facuta pentru orice proiect de
baze de date, pentru a asigura funcionarea corect a acesteia:
Dac o relaie se pstreaz ntr-o form de normalizare mai redus, atunci
trebuie s se prevad proceduri de verificare i impunere a dependenelor de
date care nu sunt determinate de cheile relaiei (ca si constrngeri explicite)
Dac se normalizeaza o relaie, dar prin descompunere se pierd unele DF,
acestea pot fi impuse explicit prin proceduri stocate sau funcii n programele de
aplicaie, care execut jonciunea ntre relaiile rezultate i impun constrngerea
respectiva
33
Demonstraie:
La fiecare pas de execuie a algoritmului, o relaie Q se descompune n dou
relaii Q1 i Q2, astfel nct Q1 Q2 = X, i Q1 Q2 = Y
Din definiia nchiderii unui atribut rezult c XY, deci, conform teoremei lui
Ullman, aceast descompunere este fr pierdere de informaie la jonciune
Astfel de descompuneri succesive pstreaz caracterul de descompuneri fr
pierdere de informaie la jonciune
34
Executia algoritmului:
Se seteaz D = {R}
Din F se alege DF IdAngajatNume care nu respect condiia impus de FNBC
nchiderea atributului X=IdAngajat este [IdAngajat]+= {IdAngajat, Nume,
Prenume, Adresa, Functie, Salariu} i rezult Y = X+ X = {Nume,Prenume,
Adresa, Functie, Salariu} i Z = R (X Y) = R - X+ = {IdProiect,Ore}.
Se obtine descompunerea D a relaiei R: D = {R11, R12}, unde
R11 = X Y = {IdAngajat, Nume, Prenume, Adresa, Functie, Salariu}; in FN2
R12 = X Z = {IdAngajat, IdProiect, Ore}; in FNBC
In acelasi mod se descompune relaia R11, in relatiile R111 si R112:
R111 = {Functie, Salariu}; este in FNBC
R112 = {IdAngajat, Nume, Prenume, Adresa, Functie}; este in FNBC
35
36