Documente Academic
Documente Profesional
Documente Cultură
http://info.tech.pub.ro/~fionescu
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 1/194
7/14/2019 Proiectare Baze de date.pdf
Capitolul 1: Introducere
Definitii – baze de date, sisteme de baze de date
Componentele sistemelor de baze de date
Definitie (in sens larg): O baza de date (database) este o colecţie 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”:
● Fise de evidenta (mentinute manual)
● Fisiere de documente sau foi de calcul tabelar (Microsoft Word, Microsoft Excel)
● Baze de date mentinute computerizat
Definitie (in sens restrans): O baz ă de date este o colecţie de date creată şi
menţinută computerizat, care permite operaţii de:
● Introducere (insert)
● Stergere (delete)
● Actualizare (update)
●
Interogare (query)
Baze de date, 2008 Prof. Felicia Ionescu 3
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 3/194
7/14/2019 Proiectare Baze de date.pdf
Date Date
Utilizator Program
SGBD
final aplicaţie
Date Date
Utilizatori:
● Programatori de aplicatii
● Utilizatori finali
● Administratorul bazei de date
● Analisti si proiectanti ai bazelor de date
Datele persistente – sunt memorate in fisiere pe hard-disk
Limbaje conceptuale pentru lucrul cu bazele de date:
● Limbaje pentru Definirea Datelor(LDD) (Data Definition Languages – DDL)
● Limbaje pentru Manipularea Datelor (LMD) (Data Manipulation Languages –
DML)
Baze de date, 2008 Prof. Felicia Ionescu 5
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 5/194
7/14/2019 Proiectare Baze de date.pdf
Date
memorate
● Sisteme mono-utilizator
● Sisteme multi-utilizator
Clasificare dupa numarul de statii pe care este memorata baza de date:
● Baze de date centralizate
● Baze de date distribuite
Arhitectura client-server:
● Server (back-end): SGBD-ul si baza de date
Reţea
de comunicaţie
Server Server
SGBD SGBD
BD BD
a b
Sisteme de baze de date centralizate: a- mono-utilizator; b- multi-utilizator
Reţea
de comunicaţie
Server Server
SGBD SGBD
BD BD
Modelarea datelor
Un model este o abstractizare a unui sistem:
● captează cele mai importante tr ăsături caracteristice ale sistemului (concepte)
● conceptele trebuie sa fie relevante din punct de vedere al scopului pentru care
se defineşte modelul respectiv
Tehnica de identificare a tr ăsăturilor caracteristice esenţiale ale unui sistem
se numeşte abstractizare.
Un model de date stabileşte regulile de organizare şi interpretare a unei
colecţii de date.
În proiectarea bazelor de date se folosesc 2 categorii de modele:
● Modele conceptuale de nivel înalt (modelul Entitate-Asociere, modelul Entitate-
Asociere Extins) – descriu concis colectiile de date care modelează activitatea
dorită f ăr ă să detalieze modul de reprezentare sau de prelucrare a datelor -
schemă conceptual ă de nivel înalt
mai multe mulţimi de entităţi; asocierile pot avea atribute
Tipul asocierii (relationship type) – se refera la asocierile similare, care pot
fi definite intre 2 sau mai multe multimi de entitati
Multime de asocieri (relationship set ): multimea asocierilor de acelasi tip
O
deasociere
asocieri este o instanta
de acel tip a unui tip de asociere si un element al multimii
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): numărul de (mulţimi de) entităţi
asociate; dupa grad, asocierile pot fi:
● binare (de gradul 2, între 2 mulţimi de entităţi) – majoritatea asocierilor
● multiple (între k mulţimi de entităţi, k > 2) – destul de rare
Categorii de (tipuri de) asocieri binare - după numărul elementelor din
fiecare dintre cele două mulţimi puse în corespondenţă:
● “unul-la-unul” (one-to-one) – 1:1; exemplu: sot-sotie
● ”unul-la-multe” (one-to-many) – 1:N; exemplu: parinte-fii
● “multe-la-unul” (many-to-one) – N:1; exemplu: fii-parinte
● “multe-la-multe” (many-to-many) – M:N; exemplu: profesori-studenti
Baze de date, 2008 Prof. Felicia Ionescu 12
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 12/194
7/14/2019
Categorii de asocieri binare (1)
Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 13/194
7/14/2019
Categorii de asocieri binare (2)
Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 14/194
7/14/2019
Cardinalitatea asocierilor
Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 15/194
7/14/2019
Diagrama Entitate-Asociere Proiectare Baze de date.pdf
Nume
atribut Atribut
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 16/194
7/14/2019 Exemplu de diagrama Entitate-Asociere (1) Proiectare Baze de date.pdf
1 N
SECTII ANGAJATI
Cuprind 1 M
Intretin Lucreaza
N N
DEPENDENTI PROIECTE
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 17/194
7/14/2019
Exemplu de diagrama Entitate-Asociere (2) Proiectare Baze de date.pdf
Asocieri:
● Asocierea SECTII - ANGAJATI - 1:N
● Asocierea ANGAJATI - PROIECTE - M:N
● Asocierea ANGAJATI - DEPENDENTI - 1:N
Raportul
încât de cardinalitate
să reflecte al uneimodul
cât mai corect de este
asocieri stabilit de proiectant astfel
organizare a activităţii modelate
Modul de stabilire a tipurilor de entităţi şi a asocierilor nu este unic: aceeaşi
funcţionalitate se poate obţine printr-o varietate de diagrame E-A
O mulţime de entităţi se denumeste printr-un substantiv, iar o asociere se
denumeste (de regula) printr-un verb, deoarece o asociere reprezintă o
interacţiune între entităţi
Modelul E-A nu precizează modul cum sunt realizate asocierile între
mulţimile de entităţi: acest aspect depinde de modelul de date specializat
utilizat pentru definirea bazei de date
● Exemple: în modelul ierarhic asocierile sunt realizate explicit, prin pointeri de la o
entitate la entităţile asociate; în modelul relaţional asocierile se realizează prin
egalitatea valorilor unor atribute comune ale multimilor de entităţi (chei)
Baze de date, 2008 Prof. Felicia Ionescu 18
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 18/194
7/14/2019 Modelul Entitate-Asociere Extins Proiectare Baze de date.pdf
ANGAJAT
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 19/194
7/14/2019 Modelul de date ierarhic
Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 20/194
7/14/2019
Baze de date ierarhice
Proiectare Baze de date.pdf
FACULTATI
FACULTATI FACULTATI
f 1 f 2 f 3
1
N PROFESORI
PROFESORI PROFESORI
p1 p2 p3
M
N STUDENTI
STUDENTI STUDENTI s1 s2 s3 s1 s2 s4
Numai
modelullegături de tipul părinte-fiu, care corespund asocierilor 1:1 şi 1:N din
E-A
Asocierile M:N se pot reprezenta prin multiplicarea înregistr ărilor de tip fiu,
atunci când sunt referite de mai multe înregistr ări de tip părinte
● mare redundanţă a datelor
Avantaje: simplitatea şi eficienţa de calcul
Deficiente:
● nu exista separare intre descrierea logica si fizica a datelor
● interogarile trebuie să fie prevăzute explicit in structura datelor
Utilizari actuale - aplicatii specializate, baze de date XML
Baze de date, 2008 Prof. Felicia Ionescu 21
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 21/194
7/14/2019
Modelul de date retea
Proiectare Baze de date.pdf
definirea
Modelele schemei
ierarhic siconceptuale a bazei
retea Æ modele de date
pre-relationale
Standardizat în 1971, de o comisie DBTG (Database Task Group).
Sisteme de gestiune comerciale in modelul retea: IDS II (Honeywell),
UNISYS
Nodurile (Burroughs), IDMSde
grafului sunt tipuri (Computer Associates)
entităţi (înregistr
ări - records), iar muchiile
reprezintă asocierile (leg ăturile-links) dintre tipurile de entităţi
Asocierile M:N se reprezintă f ăr ă duplicarea înregistr ărilor, fiecare
înregistrare putând fi referită de mai multe înregistr ări, ceea ce elimină
redundanţa
Dezavantaje:
● aceleasi ca si la modelul ierarhic, la care se adauga
● complexitatea mare in reprezentarea datelor
Actualmente modelul retea este rar utilizat pentru baze de date de uz
general, care necesita interogari
Există domenii în care modelul retea este util, de exemplu, pentru
reprezentarea scenelor virtuale (baze de date grafice)
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 22/194
7/14/2019 Modelul de date relational
Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 23/194
Modelul obiect-orientat
7/14/2019 Proiectare Baze de date.pdf
● medicină şi altele
Strategii pentru dezvoltarea sistemelor de gestiune a bazelor de date
obiect-orientate (SGBDOO):
● Extinderea unui limbaj de programare obiect-orientat cu capacităţi de
administrare a obiectelor persistente: sistemul GemStone (extinde Java si C++)
● Extinderea unui limbaj de programare relaţional cu capacităţi de orientare spre
obiecte. ExemplU: limbajul ODL (Object Query Language) (sau Object SQL),
Există mai multe astfel de sisteme, cum sunt: Ontos, Versant, O2.
● Dezvoltarea unui limbaj obiect-orientat pentru baze de date complet nou: SIM
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 24/194
7/14/2019
Modelul obiect-relational
Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 25/194
7/14/2019
Complexitatea datelor si a interogarilor Proiectare Baze de date.pdf
SGBDR SGBDOR
Complexitatea
datelor
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 26/194
7/14/2019
Evolutia sistemelor de baze de dateProiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 27/194
7/14/2019
Sisteme de Gestiune a Bazelor de date Proiectare Baze de date.pdf
Sisteme Comerciale
Oracle ($$$$)
DB2 (IBM) ($$$)
SQL Server (Microsoft) ($$)
Sisteme Open Source
PostgreSQL
MySQL
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 28/194
7/14/2019 Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 29/194
7/14/2019
Capitolul 2: Modelul Relational
Proiectare Baze de date.pdf
Indexarea relatiilor
● Indexul primar
● Indexuri secundare
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 30/194
Relatii – Atribute – Domenii
7/14/2019 Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Schema relatiei 31/194
7/14/2019 Proiectare Baze de date.pdf
Schema relaţiei: descriere a unei relaţii (tipul, intensiunea relaţiei)
Schema relaţiei: R(A1,A2,...Ai,...An), unde:
● R este numele schemei relaţiei
● lista ordonată a atributelor sale A1,A2,...Ai,..An
● fiecare atribut Ai definit pe domeniul său de definiţie, D(Ai)
In mod curent: se foloseste R atat pentru schema cat si pentru relatia insasi
Baze de date, 2008 Prof. Felicia Ionescu 3
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 32/194
Reprezentarea relatiilor prin tabele
7/14/2019 Proiectare Baze de date.pdf
STUDENTI
Capul
Nume Prenume DataNasterii Adresa Facultatea tabelului
Anghelescu Octavian 1999 Bucuresti ETTI
Beldiman Cristina 1998 Bucuresti ETTI Linii - tupluri
Boeru Marius 1999 null ETTI
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 33/194
Afisarea tabelelor
7/14/2019 Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 34/194
Ordonarea valorilor atributelor in tupluri
7/14/2019 Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Limbajul SQL 35/194
7/14/2019 Proiectare Baze de date.pdf
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 si ISO:
Anul Denumire Caracteristici
1986 SQL-86 Publicat de ANSI (SQL1); ratificat de ISO in 1987
1989 SQL-89 Revizii minore
1992 SQL-92 Revizii majore, redenumit SQL2
Limbajul
care esteSQL
mai foloseste reprezentarea
simplă şi mai prin tabele
intuitivă (foloseste a relatabel,
termenii ţiilor, reprezentare
linie, coloană)
Limbajul SQL cuprinde:
● Componenta de descriere a datelor (Limbaj de Descriere a Datelor – LDD)
● Componenta de manipulare a datelor (Limbaj de Manipulare a Datelor – LMD)
● Alte componente: controlul tranzactiilor, controlul securitatii, protectia datelor etc.
Limbajul SQL este un limbaj neprocedural:
● modul
o instruc ţiune SQL în
(procedura) specific ă ce
care se ă ţii trebuie să fie setate sau obţinute, nu
informa
opereaz
● limbajul SQL nu conţine instrucţiuni de control al fluxului execuţiei (instrucţiuni ca
for, while, if, etc)
Pentru aplica iile de baze de date, s-au dezvoltat extensii procedurale ale
limbajului SQL,ţ biblioteci şi interfeţe de programare care integrează
instrucţiunile SQL
paranteze.
● Parantezele se pot folosi pentru a preciza o anumită ordine a operaţiilor, dacă
aceasta este diferită de ordinea implicită data de precedenta operatorilor.
Un operand poate fi:
● numele unei coloane – in acest caz se foloseste valoarea memorata in acea
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Operatori SQL 39/194
7/14/2019
Toti operatorii de comparaţie returneaza valori logice: Proiectare Baze de date.pdf
A B A and B A or B A 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
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Functii SQL 40/194
7/14/2019 Proiectare Baze de date.pdf
Funcţii SQL: funcţii agregat şi funcţii scalare.
Funcţiile agregat calculează un rezultat din mai multe linii ale unui tabel
● Aceste funcţii vor fi detaliate ulterior, la descrierea instrucţiunii SELECT.
Funcţiile scalare:
● Primesc unul sau mai multe argumente şi returnează valoarea calculată sau NULL
în caz de eroare
● Argumentele funcţiilor pot fi constante (literale) sau valori ale atributelor specificate
prin numele coloanelor corespunzatoare
Tipuri de funcţii scalare SQL:
● Funcţii de calcul trigonometric (sin, cos, tan etc.), funcţii de calcul al logaritmului
(ln, log), al puterii (power ), funcţii de rotunjire (floor , ceil), etc.
● Funcţii pentru manipularea şirurilor de caractere: concat, replace, upper etc.
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Tipuri de date SQL (1) 41/194
7/14/2019 Proiectare Baze de date.pdf
Tipuri de date SQL2: numeric, şiruri de caractere, şiruri de biţi, data
(calendaristică), timp
Tipul numeric:
● numere întregi: integer sau int (4 octeţi), smallint (2 octeţi)
● numere reale reprezentate în virgulă flotanta: float (4 octeţi), real şi double
[precision] (8 octeţi)
● numere zecimale reprezentate cu precizia dorită (tipul numeric sau decimal,
memorate ca şir de caractere): numeric[(p,s)] (sau decimal [(p,s)]), unde p
(precizia) este numărul total de cifre, iar s (scara) este numărul de cifre după
punctul zecimal
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 biţi - secvenţe 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
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Domenii SQL 43/194
7/14/2019 Proiectare Baze de date.pdf
acolade;
introducenumai unulţiunea
în instruc dintrerespectiv
acesteaăse poate
[ , . . . n] Elementul precedent poate fi repetat de n ori;
elementele repetate sunt separate prin virgulă
element1, . . . . . . . Listă de n elemente de acelaşi tip;
elementn elementele repetate sunt separate prin virgulă
lista_elemente Listă de elemente de acelaşi tip separate prin virgulă
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)
Exemple de comenzi SQL de definire a datelor:
CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATE USER
CREATE FUNCTION, CREATE TRIGGER, CREATE PROCEDURE
ALTER TABLE, ALTER VIEW, ALTER FUNCTION, ALTER PROCEDURE
DROP TABLE, DROP VIEW, DROP INDEX, DROP USER
DROP FUNCTION, DROP PROCEDURE, DROP TRIGGER
Componenta de manipulare a datelor din limbajul SQL (Limbajul de Manipulare
a Datelor - LMD) conţine comenzile: SELECT, INSERT, UPDATE si DELETE
Instructiunile SQL se transmit SGBD-ului:
● de catre diferite programe client (client grafic, linie de comanda, program executabil)
● SGBD-ul executa instructiunea SQL
● si returneaza un raspuns (rezultatul operatiei sau un cod de eroare)
Baze de date, 2008 Prof. Felicia Ionescu 17
Pentru
urmata adaugare
de numeleunei coloane
coloanei intr-un tabel
si numele se foloseste
domeniului clauza
(tipul SQL) ADD,
atributului
corespunzator. Exemplu:
ALTER TABLE ANGAJATI ADD DataAngajarii date;
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Instructiunea SELECT 49/194
7/14/2019 SELECT - instrucţiune de interogare, prin care se regăsesc informaţiile din
Proiectare Baze de date.pdf
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];
SELECT returneaza un tabel cu coloanele din “lista_coloane”
● ale acelor linii (tupluri) ale produsului cartezian al tabelelor din “lista_tabele”
pentru care expresia logică “conditie” este adevărată (are valoarea TRUE).
Instructiunea SELECT are urmatoarele secţiuni (clauze):
● Clauza SELECT defineşte lista de coloane a tabelului rezultat
Clauza indic lista de tabele din care se selecteaz rezultatul
● FROM ă ă
● Clauza WHERE defineşte condiţia pe care trebuie să o îndeplinească fiecare
linie a tabelului rezultat
● Clauze secundare (ORDER BY, GROUP BY, HAVING): permit ordonări sau
grupări ale tuplurilor (liniilor) rezultate
Baze de date, 2008 Prof. Felicia Ionescu 21
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Clauza SELECT 50/194
7/14/2019 Clauza SELECT specifica: Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Functii agregat 51/194
7/14/2019 În clauza SELECT se pot introduce şi funcţii agregat (totalizatoare).
Proiectare Baze de date.pdf
Exemple:
SELECT COUNT(*) FROM city;
SELECT MAX(Population) FROM city;
SELECT MIN(Population) FROM city;
SELECT AVG(Population) FROM city;
Exemple:
SELECT * FROM city WHERE Population > 1000;
SELECT * FROM city
WHERE Population BETWEEN 1000 AND 100000 AND CountryCode='NLD';
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Clauze secundare 53/194
7/14/2019
Clauza ORDER BY specifica numele atributului după care se face
Proiectare Baze de date.pdf
descrescatoare:
SELECT * FROMDESC. Exemplu:
city order by CountryCode DESC;
Clauza GROUP BY se foloseşte pentru gruparea rezultatelor funcţiilor
agregat dupa valoarea uneia sau mai multor coloane. Exemplu:
SELECT CountryCode, AVG(Population) FROM city GROUP BY CountryCode;
Clauza HAVING inlocuieste clauza WHERE atunci cand in conditia care
trebuie sa fie indeplinita se folosesc functii agregat. Exemplu:
SELECT CountryCode, AVG(Population) FROM city GROUP BY CountryCode
HAVING AVG(Population) >800000;
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
Instructiunea INSERT 54/194
Instrucţiunea INSERT se foloseşte pentru introducerea datelor în tabele şi
7/14/2019 Proiectare Baze de date.pdf
are urm toarea sintax :
ă ă
INSERT INTO nume_tabel(col1,col2,...coln) VALUES(val1,val2,...valn);
Între valori şi numele de coloane trebuie să existe o corespondenţă
pozitionala. De exemplu:
INSERT INTO SECTII (Numar, Nume, Buget) VALUES (1,‘Productie’, 40000);
Lista de coloane poate să lipsească dacă se introduc valori în toate
coloanele tabelului si în această situatie:
● ordinea valorilor introduse trebuie să respecte ordinea coloanelor tabelului
● ordinea coloanelor provine din ordinea de definire a atributelor prin instrucţiunea
CREATE TABLE, precum şi din operaţiile ulterioare de alterare a tabelului
● ordinea coloanelor se poate afla prin instrucţiunea DESCRIBE nume_tabel.
De exemplu, introducerea unei linii în tabelul
ANGAJATI(IdAngajat,Nume,Prenume,DataNasterii,Adresa,Functia,Salariu)
se poate face cu instrucţiunea:
INSERT INTO ANGAJATI VALUES(100,‘Mihailescu’,
‘Mihai’,‘1950-04-05’,‘Craiova’,’Inginer’, 3000);
Baze de date, 2008 Prof. Felicia Ionescu 26
din una sau mai multe linii ale unui tabel si are sintaxa:
UPDATE nume_tabel SET col1 = expr1 [, . . . n] [WHERE conditie];
Clauza WHERE: actualizarea valorilor se efectueaza numai asupra acelor linii
care îndeplinesc condiţia dată. Exemplu:
UPDATE ANGAJATI SET Adresa = ‘Bucuresti’ WHERE Nume = ‘Popescu’;
Dacă este omisă clauza WHERE, vor fi modificate valorile coloanelor din toate
liniile tabelului.
le respecte
sistemul relaţiile
SGBD, unei baze
ci necesit de date speciale
ă proceduri
şi care nu sunt impuse automat de
de verificare şi impunere
● Exemple:dependenţele de date care nu sunt determinate de cheile relaţiilor
Salariu numeric);
Baze de date, 2008 Prof. Felicia Ionescu 30
● atributul primeşte valoarea implicită (dacă a fost definită) sau valoarea NULL
(dacă nu a fost definită o valoare implicită, dar sunt admise valori NULL);
● dacă nu a fost definită o valoare implicită şi nici nu sunt admise valori NULL, se
generează o eroare. Exemplu:
CREATE TABLE STUDENTI (
Nume varchar (20) NOT NULL,
Prenume varchar (20) NOT NULL,
Tara varchar (20) DEFAULT (‘Romania’) NULL ) ;
Constrângerea de verificare (CHECK) – pentru verificarea valorilor
atributelor printr-o conditie care trebuie sa ia valoarea TRUE.
Se introduce ca o constrangere de tabel in instructiunea CREATE TABLE:
[CONSTRAINT nume_constrangere] CHECK (conditie); Exemplu:
CREATE TABLE ANGAJATI (
Nume varchar(20) NOT NULL,
Prenume varchar(20) NOT NULL,
Salariu numeric,
CONSTRAINT Verificare_Salariu CHECK (Salariu >= 1500 ));
MySql 5.0 nu face verificarea CHECK, chiar daca admite acest cuvânt cheie
Baze de date, 2008 Prof. Felicia Ionescu 31
Constrangeri de tuplu
O relaţie = mulţime de tupluri Æ tuplurile unei relaţii trebuie să fie distincte
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 60/194
7/14/2019
(nu pot exista două sau mai multe tupluri identice)
Proiectare Baze de date.pdf
● Unicitate: nu există două tupluri diferite ale relaţiei care să conţină aceeaşi
combinaţie de valori ale atributelor cheii CK;
● Ireductibilitate: nu există nici o submulţime proprie, nevidă a cheii CK care să
aibă proprietatea de unicitate.
cheie primar ă, celelalte chei candidate fiind numite chei secundare (sau unice)
O cheie primar ă ( primary key ) este o cheie candidată căreia proiectantul îi
confer ă un rol special de identificare a tuplurilor si are următoarele restricţii:
● Nici o valoare a atributelor cheii primare nu poate fi modificată prin operaţii de
actualizare
● Nu se admit valori de NULL pentru nici unul dintre atributele cheii primare
O cheie secundar ă (alternativă, unică) (secondary , alternate, unique key )
este o cheie candidată care nu a fost desemnată ca şi cheie primar ă; cheile
secundare admit valori NULL pentru unele din atributele lor
Alegerea cheii primare dintre mai multe chei candidate este arbitrar ă, dar, din
motive de eficienta, se alege cheia cu cel mai mic număr de atribute
Cheile primare pot fi naturale sau artificiale:
● O cheie primar ă alcatuita din atributele existente ale tipului de entitate se numeşte
cheie naturală; in general, cheile naturale sunt chei compuse
● O cheie primar ă artificială este un atribut care se adaugă în schema relaţiei special
pentru identificarea unică a tuplurilor
Baze de date, 2008 Prof. Felicia Ionescu 33
Constrangeri inter -relatii
Asocierile (relationships) 1:N între multimile de entităţi (din modelul Entitate-
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 64/194
Asociere) se realizează în modelul relaţional prin chei str ăine
7/14/2019 Proiectare Baze de date.pdf
ANGAJATI
IdAngajat Nume Prenume DataNasterii Adresa Salariul IdSectie
1 Ionescu Ion 1960.01.05 Bucuresti 4000 1
2 Popescu Petre 1965.02.97 Bucuresti 3200 1
3 Vasilescu Ana 1961.03.06 Bucuresti 2000 2
4 Ionescu Ion 1970.03.98 Bucuresti 2000 3
Cheia straina
Fie doua relatii R1 si R2, intre care exista o asociere cu raportul 1:N
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 65/194
O cheie str ăină (foreign key ) este o submulţime FK de atribute ale relaţiei R2
7/14/2019 Proiectare Baze de date.pdf
Ş tergerea în cascad ă permite ştergerea unui tuplu din relaţia referită; dacă
tuplul şters era referit de unul sau mai multe tupluri, atunci se şterg şi
acestea din relaţia care o refer ă; dacă tuplurile şterse din relaţia care refer ă
sunt, la rândul lor referite de alte tupluri, atunci trebuie să fie şterse şi
acestea, ş.a.m.d.; se execută deci o ştegere în cascadă
Operaţia UPDATE poate fi privită ca o ştergere urmată de o introducere,
deci restricţiile de actualizare reprezintă combinaţia restricţiilor de
introducere şi de ştergere
In limbajul SQL se specifica opţiunile ON DELETE si ON UPDATE
constrîngerii de cheie str ăină; valorile posibile ale acestor opţiuni sunt:
● RESTRICT - pentru ştergerea restricţionată (este valoare implicita)
● CASCADE - pentru ştergerea în cascadă;
Exemplu:
CREATE TABLE ANGAJATI (
IdAngajat int PRIMARY KEY,
Nume varchar (20) NOT NULL,
........................
CONSTRAINT FK FOREIGN KEY (IdSectie) REFERENCES SECTII(IdSectie) ,
ON DELETE CASCADE );
Baze de date, 2008 Prof. Felicia Ionescu 39
Indexarea relatiilor
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 68/194
Timpul de execuţie a operatiilor asupra datelor din relatii depinde de modul
7/14/2019 Proiectare Baze de date.pdf
de reprezentare
inregistrari a mul
in fisiere peţimii
discde elemente (tupluri) ale relaţiilor, memorate ca
Operaţiile de căutare, inserare şi ştergere a elementelor într-o mulţime se
execută mai rapid dacă elementele mulţimii sunt reprezentate printr-o
colecţie ordonată, ca de exemplu arbori sau tabele de dispersie (hash table)
Deşi o relaţie nu presupune ordonarea tuplurilor sale, pentru accelerarea
operaţiilor de căutare, inserare şi ştergere, se folosesc colecţii ordonate
Un index al unei relaţii este o structur ă auxiliar ă memorată în baza de date
care permite accesul rapid la tuplurile relaţiei prin ordonarea acestora
Structuri folosite in indexare: arbori binari ordonati, tabele de dispersie
(hash-tables) etc.
Exista două categorii de indexuri:
● un index primar al relaţiei, care determină localizarea tuplurilor în fişierele bazei
de date
● zero, unul sau mai multe indexuri secundare, care nu modifică localizarea
tuplurilor, dar sunt folosiţi pentru regăsirea rapida a tuplurilor după un criteriu dat
Baze de date, 2008 Prof. Felicia Ionescu 40
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 71/194
7/14/2019 Proiectare Baze de date.pdf
● Proiectia
● Jonctiunea
● Diviziunea
Interogarea bazelor de date
● Interogarea intr-o singura relatie
● Interogarea in doua sau mai multe relatii
Limbaje de interogare
Interogarea (query ): operaţ ia prin care se obţ in informatiile dorite dintr-o
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 73/194
baz ă de date, selectate conform unui anumit criteriu (condi ţi e);
7/14/2019 Proiectare Baze de date.pdf
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 mulţime de operaţii
care au ca operanzi relaţii, iar rezultatul este tot o relaţie
Calculul relaţ ional (relational calculus) - bazat pe calculul predicatelor -
exprimă o interogare definind rezultatul dorit ca expresie de calcul relaţional
Calculul relational al tuplurilor foloseste variabile de tuplu (variabile
definite pe mulţimea tuplurilor unei relaţii)
Calculul relational al domeniilor foloseste variabile de domeniu (variabile
definite pe domenii de definiţie 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 combinaţie a acestora.
De exemplu, limbajul SQL2 este în cea mai mare parte bazat pe algebra
relaţională, dar mai conţine şi construcţii derivate din calculul relaţional.
Baze de date, 2008 Prof. Felicia Ionescu 2
Algebra relationala
Algebra relaţională (relational algebra) - interogările sunt expresii compuse
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 74/194
din operatii care au ca operanzi relatii si rezultatul este o relatie
7/14/2019
Operatiile algebrei relationale: operatii pe multimi si operatii speciale, la care
Proiectare Baze de date.pdf
● Joncţiunea
● Diviziunea
Proprietatea de închidere: operanzii (unul sau doi operanzi) sunt relatii,
rezultatul este o relaţie; această proprietate permite operaţii imbricate:
proiecţia unei joncţiuni etc.
Baze de date, 2008 Prof. Felicia Ionescu 3
Operatia de Reuniune
Reuniunea (union) a două relaţii compatibile r(R) şi s(S):
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 75/194
q = r ∪ s = { t | t ∈ r or t ∈ s}
7/14/2019
Pentru ca r si s sa fie compatibile, trebuie ca: Proiectare Baze de date.pdf
α 1 α 2 α 1
α 2 β 3 α 2
β 1 s β 1
r β 3
A B A B A B
α 1 α 2 α 2
α 2 β
β 1 s3 r ∩ s
r
Diferenta (set-difference) a două relaţii compatibile r(R) şi s(S):
q = r - s = { t | t ∈ r and t ∉ s}
Exemplu:
A B A B A B
α 1 α 2 α 1
α 2 β 3 β 1
β 1 s
r r-s
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
Baze de date, 2008 Prof. Felicia Ionescu 5
Operatia de Selectie
Selectia (sau restrictia – select, restriction) intr-o relatie r(R) - definita astfel:
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 80/194
7/14/2019 σ p(r) = {t | t ∈ r and p(t)} Proiectare Baze de date.pdf
unde p, predicatul selectiei , este o formula de calcul propozitional compusa din
termeni conectati prin operatorii and (∧), or (v)‚ not (¬)
Fiecare termen este de forma:
<atribut> op <atribut> sau
<atribut> op <constanta>, unde
op este un operator de comparatie: =, ≠, >, ≥. <. ≤
Tuplul t este selectat (introdus in rezultat) daca p(t)=TRUE
InSELECT
limbajul* SQL:
FROM tabel WHERE p;
În termenii folosiţi în limbajul SQL, restric ţ ia selecteaz ă o parte din liniile
tabelului operand
Exemple (MySQL - WORLD):
SELECT * FROM city where CountryCode=‘ROM’;
SELECT * FROM country WHERE Continent='Europe';
SELECT * FROM country WHERE Continent='Europe' and Population > 10000000;
Operatia de Proiectie
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
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 81/194
7/14/2019 Rezultatul este o relatie cu k atribute, cele din lista data
Proiectare Baze de date.pdf
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:
A B C A C A C
α 10 1 α 1 α 1
r α 20 1 α 1 = β 1
β 30 1 β 1 β 2
β 40 2 β 2 ∏A,C (r)
In limbajul SQL proiectia se exprima astfel:
SELECT DISTINCT A1, A2, …Ak FROM R
Daca nu se introduce parametrul DISTINCT, nu se elimina tuplurile duplicat
Exemplu (MySQL, WORLD):
SELECT DISTINCT CountryCode FROM City;
Baze de date, 2008 Prof. Felicia Ionescu 10
Jonc
● seiunea
ţ natural
calculeaz
ă este o relatie q = r
ă produsul s, care
cartesian al celor doua relatii:sep ob
= r ine
ţ
x s, în
P =felul urmăS.B,
{A, R.B, tor:C};
● din tuplurile produsului cartesian se selecteza acele tupluri care au valori egale
pentru atributele comune (B1, B2,...Bn): R.B = S.B, adică R.B1=S.B1, R.B2=S.B2,..
Atributele comune R.B si S.B trebuie să fie compatibile in cele doua relatii;
daca sunt compatibile, ele se considera identice chiar dacă au denumiri
diferite, si în reuniunea atributelor R ∪ S se introduc o singur ă dată
Cazul cel mai frecvent de jonctiune naturala: intre doua relatii asociate (1:N),
atributul comun fiind cheia straina – cheia primara (candidata) referita
Baze de date, 2008 Prof. Felicia Ionescu 11
Operatia de diviziune
Fie relatiile r(R) si s(S), unde:
● R = {A, B} unde A={A1,A2,..Am}, B={ B1,B2,..Bn}
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 84/194
7/14/2019
● S = {B} Proiectare Baze de date.pdf
Înunde tu inseamna
limbajul concatenarea
SQL, diviziunea tupluriloră tprintr-o
se exprim si u instrucţiune SELECT,
introducând explicit toate conditiile impuse valorilor atributelor
Exemplu:
A B B A
α 1 1 α
α 2 2 β
α 3 s r ÷ s
β 1
2
β
δ 1
δ 3
r
Baze de date, 2008 Prof. Felicia Ionescu 13
Formularea interogarilor
Interogarea este operatia prin care se obtin informaţiile dorite (care
indeplinesc o anumita conditie) dintr-o bază de date. O interogare:
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 86/194
● se formuleaza mai intai în limbaj natural,
7/14/2019 ● apoi se exprima într-un limbaj abstract de interogare (algebra relaţională sau
Proiectare Baze de date.pdf
calculul relaţional),
● se transpune în limbajul de interogare al SGBD-ului folosit (ex., limbajul SQL),
● iar aplicatia client transmite SGBD-ului instructiunea (sau instructiunile) obtinute
Sistemul SGBD prelucreaza programul interogarii în mai multe faze:
●analiza lexicală, sintactică şi semantică
●optimizarea interogarii
●generarea codului
●executia si returnarea rezultatului
În algebra relaţională o interogare se formulează printr-o expresie care
defineste următoarele elemente:
● Lista atributelor relaţiei rezultat, care se numesc atribute de proiecţie;
● Lista relaţiilor din care se extrag informaţiile
● Condiţiile pe care trebuie să le îndeplinească tuplurile relaţiei rezultat.
Sunt posibile două situaţii:
● interogări care se rezolvă în cadrul unei singure relaţii
● interogări care se rezolvă folosind două sau mai multe relaţii ale bazei de date
Baze de date, 2008 Prof. Felicia Ionescu 15
SECTII
Fie interogarea: Care sunt numele, prenumele, func ţia şi salariul angajaţilor
care lucrează în secţia cu denumirea ‘Productie’?
q = ∏ Nume, Prenume, Functia, Salariul σDenumire= ‘Productie’ (ANGAJATI >< SECTII)
SELECT Nume, Prenume, Functia, Salariul FROM ANGAJATI, SECTII
WHERE SECTII.IdSectie = ANGAJATI.IdSectie AND Denumire = ‘Productie’;
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 92/194
7/14/2019 Proiectare Baze de date.pdf
● Pana in anii 1970 erau sisteme de fişiere (pe disc sau bandă magnetică)
● Actual se folosesc sisteme de baze de date, care permit gestionarea unor
volume de date mari într-un timp redus, cu protecţia si securitatea datelor
Fazele de dezvoltare a sistemelor de baze de date:
● Analiza şi definirea sistemului : definirea scopului sistemului de baze de date, a
utilizatorilor şi a aplicaţiilor acestuia
● Proiectarea sistemului : în această etapă se realizează proiectul logic şi proiectul
fizic al sistemului, pentru un anumit SGBD ales
● Implementarea: este etapa în care se scriu definiţiile obiectelor bazei de date
(tabele, vederi, etc.) şi se implementează aplicaţiile software
● Testarea şi validarea: noul sistem de baze de date este testat şi validat cât mai
riguros posibil
În mod tipic, dezvoltarea unui sistem de baze de date constă din:
● dezvoltarea structurii si a continutului bazei de date
● dezvoltarea modulelor de prelucrare a datelor
Baze de date, 2008 Prof. Felicia Ionescu 2
Faza 3: Alegerea
unui SGBD
● ce aplica
aplica ţii se
ţii de urmvor executa
ărire (aplicaţii de
a consumurilor, gestiune
aplica ţii de a aplicaţii contabile,
stocurilor,etc.).
salarizare,
Toate acestea sunt informaţii slab structurate, în general în limbaj natural,
pe baza cărora se pot construi diagrame, tabele, grafice etc., manual sau
folosind diferite instrumente software de proiectare
Dar din aceste informatii trebuie sa fie extrase date precise de proiectare a
bazelor de date si a aplicatiilor
Această fază este puternic consumatoare de timp, dar este crucială pentru
succesul sistemului informatic
● (scheme conceptuale
Proiectarea de nivel inalt)
schemei conceptuale si si a tranzactiilor
a schemelor independente
externe de SGBD
dependente de SGBD
(scheme logice) si a tranzactiilor dependente de SGBD
Este recomandabil să se proiecteze mai întâi schema conceptuală de nivel
înalt independentă de SGBD, care este o descriere stabilă a bazei de date
Definirea schemei conceptuale:
● proiectare prin integrarea cerinţelor
● proiectare prin integrarea schemelor externe
Moduri de proiectare conceptuala:
● Proiectare ascendenta (bottom-up): se porneste de la schema conceptuala
universala, care se rafineaza
● Proiectare descendenta (up-bottom) : se porneste de la diagrama E-A, definita pe
baza tipurilor de entitati si a asocierilor dintre acestea
● PRODUSE(Denumire, Descriere)
● COMPONENTE(Denumire, Descriere)
● FURNIZORI(Nume,Prenume,Adresa) ; CLIENTI(Nume, Prenume, Adresa)
Diagrama E-A:
SECTII PROIECTE COMPONENTE
M
1 ACTIVITATI M COMPOZITII
N
N N M
ACHIZITII
PRODUSE
ANGAJATI P
N M
1 VANZARI
d
P
N N
Proiectarea relatiilor
Mulţimile de entităţi puternice (normale) din diagrama E-A devin relaţii:
● Numele fiecărei relaţii trebuie să fie unic în baza de date
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 103/194
● Atributele relatiei corespund atributelor entităţilor din multimea de entitati data
7/14/2019
● Cheia primar ă se defineşte: Proiectare Baze de date.pdf
● fie ca o cheie primara naturală (combinaţie de atribute care definesc în mod unic un tuplu)
● fie ca o cheie primar ă artificială
● De exemplu, în rela ţiile ANGAJATI, SECTII, PROIECTE, COMPONENTE, PRODUSE,
FURNIZORI, CLIENTI s-a adăugat câte o cheie primar ă artificială (IdAngajat, IdSectie etc.)
Mulţimile de entităţi slabe din diagrama E-A devin relaţii aflate în asociere N:1
cu relaţia corespunzătoare mulţimii de entităţi de care acestea depind
● Pentru realizarea acestei asocieri, în relaţia dependentă se adaugă o cheie str ăină
care refer ă cheia primar ă a relaţiei puternice referite; de exemplu: cheia straina
dAngajat in introdusa in relatia DEPENDENTI . De ex:
DEPENDENTI( IdAngajat , Nume, Prenume, DataNasterii, GradRudenie)
realizeaza la fel, printr-o cheie straina in relatia multimii de entitati slabe
Asocierea binar ă M:N dintre două mulţimi de entităţi se realizeaza cu o
noua relaţie, numită relaţ ie de asociere
Aceasta are rapoartele de multiplicitate M :1, respectiv N :1 cu fiecare din
cele două relaţii date, prin intermediul a două chei str ăine
Cheia primar ă a unei relaţii de asociere poate fi:
● o cheie primara artificială
● sau poate fi compusă din cheile str ăine, împreună cu alte atribute ale relaţiei
Exemplu: asocierea
realizeaza cu o relaţie
M:Nde dintre
asociere,
relaţnumit
iile COMPONENTE-PRODUSE
ă COMPOZITII se
● Relatia COMPOZITII contine cheile str ăine IdComponenta şi IdProdus
● Cheia primar ă a relaţiei COMPOZITII poate fi compusă din cheile str ăine
IdComponenta şi IdProdus sau poate fi o cheie artificiala (IdCompozitii )
Baze de date, 2008 Prof. Felicia Ionescu 12
NrTelefon)
acas atributul NrTelefon
ă, al telefonului de la birou,poate lua mai multe
al telefonului etc) (numărul telefonului de
mobil,valori
Relaţia în care un atribut poate avea valori multiple (un vector de valori)
este o relaţie nenormalizată, care nu este admisă de SGBD relaţionale
Transformarea unei relaţii nenormalizate în relaţie normalizată în prima
forma normală (FN1):
● se înlocuieşte atributul care ar putea avea valori multiple cu câte un atribut
pentru fiecare din posibilităţile existente: Exemplu: PERSOANE (IdPersoana,
Nume, Prenume, Adresa,TelefonAcasa, TelefonBirou, TelefonMobil)
● se înlocuieşte atributul care ar putea avea valori multiple cu o nouă relaţie care
refer ă relaţia iniţială printr-o cheie str ăină. Exemplu: PERSOANE(IdPersoana,
Nume, Prenume, Adresa), TELEFOANE(NrTelefon, IdPersoana, Descriere)
Exemple de date in tabele cu diferite tipuri de asocieri
(Embeded
•Interfete de SQL) Extensii
ale procedurale
limbajului SQL
programare a Rezultate
aplicatiilor (API)
Cursoare
Cursoarele pot fi memorate:
● la server, iar clientul primeşte câte o linie (sau un grup de linii) de la server la
fiecare instrucţiune de extragere
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 112/194
● la client şi liniile sunt folosite direct în programul respectiv
7/14/2019 Proiectare Baze de date.pdf
Proceduri stocate
O procedur ă stocată (stored procedure) este o procedur ă care
implementează o parte din algoritmii de calcul ai aplicaţiilor ş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:
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 113/194
In Transact-SQL: CREATE PROCEDURE nume_proc [parametri] AS instructiune
7/14/2019 Proiectare Baze de date.pdf
In PL/SQL (Oracle): CREATE PROCEDURE nume_proc [parametri] AS instructiune
In MySQL: CREATE PROCEDURE nume_proc [parametri] instructiune_compusa
Parametrii pot fi de intrare (IN), de iesire (OUT) sau de intrare-iesire
(INOUT); apelul unei proceduri stocate de c ătre un client (aplicaţie) produce
execuţia de catre SGBD a tuturor instrucţiunilor procedurii şi returnarea
rezultatrlor in parametrii OUT si INOUT
Avantaje - imbunatatirea performantelor sistemului prin:
● Scaderea comunicaţiei între aplicaţie şi serverul bazei de date
● Scaderea timpului de execuţie a sarcinii respective, dat fiind că procedura
stocată este deja compilată, optimizată si memorata, putand fi apelata oricand,
de oricati clienti
Dezavantaje: congestionarea serverului si scaderea performantelor
acestuia, dacă prea multe aplicaţii executa operaţiile de prelucrare pe
server prin intermediul procedurilor stocate
Triggere
Un trigger este o procedur ă stocată specială, care este executată automat
atunci când se efectuează operaţii de actualizare a relaţiilor (INSERT,
DELETE, UPDATE)
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 115/194
Triggerele pot fi create folosind extensiile procedurale ale limbajului SQL;
7/14/2019 sintaxa difera de la un SGBD la altul (sunt neportabile):
Proiectare Baze de date.pdf
trigger-ul
O variabilăînlocal
careăau
sefost declarate
declar
ă si se initializeaza diferit de la un SGBD la altul.
De exemplu:
• in Transact SQL:
DECLARE @contor INT
SELECT @contor = 0
• in PL/SQL (Oracle): DECLARE CONTOR := 1;
• in MySQL: DECLARE contor INT;
SET contor = 0;
Ordinea de execu ţ ie a instruc ţ iunilor este controlată prin instrucţiuni ca:
BEGIN...END REPEAT...UNTIL FOR
GOTO WHILE
IF...ELSE BREAK
RETURN CONTINUE
Baze de date, 2008 Prof. Felicia Ionescu 24
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 118/194
7/14/2019 Proiectare Baze de date.pdf
DROP
CREATEPROCEDURE
PROCEDURE IF EXISTS Medii_Studenti
Medii_Studenti(OUT $$ float, IN s_nume varchar(20),
media
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 119/194
IN s_prenume varchar(20))
7/14/2019 BEGIN Proiectare Baze de date.pdf
Instrucţiunile
prelucrate de SQL integrate în
un instrument programul
software scris(numit
adecvat în limbajul gazdă sunt
preprocesor), fiind
transformate în apeluri de funcţii ale unei biblioteci speciale a SGBD-ului
Rezultatul preprocesării este un program sursă în limbajul gazdă, care
poate fi compilat cu compilatorul limbajului gazd respectiv i apoi legat
ă
(link) cu bibliotecile de sistem şi bibliotecile SGBD-ului ş
Standardul SQL2 specifică suport integrat pentru limbajele PL/1, C, Pascal,
Cobol, Fortran, Mumps. Pentru produsele Oracle, limbajul SQL a fost
integrat în limbajul Java, sub numele de SQLJ
Pentru sistemele Microsoft SQL Server se poate folosi limbajul ESQL/C
(Embedded SQL for C), pentru MySQL exista biblioteca mysqld
date. De exemplu:
● Biblioteci dezvoltate pentru limbajul C ( biblioteca C pentru sistemul Microsoft
SQL Server - DB-Library for C, biblioteca MySQL C API)
● Biblioteci pentru alte limbaje (C++, Perl, PHP, etc)
int main(){
MYSQL * mysql ;
MYSQL_RES * res ;
MYSQL_ROW row ; int i;
mysql = mysql_init(NULL);
mysql_real_connect (mysql, “localhost”, “root”, pwd, “intreprindere”, 0, NULL, 0);
mysql_query (mysql, "select * from ANGAJATI");
while((row = mysql_fetch_row (res))){
for (i=0;i<mysql_num_fields(res); i++) printf("%s ", row[i]);
printf("\n");
}
mysql_close(mysql);
}
Programul client apeleaza functiile din biblioteca pentru conectare la server,
interogare, parcurgerea liniilor rezultat, inchiderea conexiunii
Baze de date, 2008 Prof. Felicia Ionescu 32
Interfata ODBC
Tehnologia ODBC (Open Database Connectivity) - interfaţă de programare a
aplicaţiilor prin apel de funcţii independente de sistemul SGBD folosit
Independenţă se obţine prin drivere specifice fiecărui SGBD
Driverul transformă apelurile de funcţii ODBC în comenzi SQL (sau într-un
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 125/194
limbaj procedural de extensie a limbajului SQL) si le transmite SGBD-ului
7/14/2019 Proiectare Baze de date.pdf
Interfaţa ODBC
Aplicaţie
Administrator de drivere
•
SQLHENV (HENV) - identificator al mediului de executie a operatiilor ODBC
• SQLHDBC (HDBC) - identificator al unei conexiuni cu o sursă de date
• SQLHSTMT (HSTMT) - identificator al unei instrucţiuni SQL
Alocarea identificatorilor se face cu functia: SQLAllocHandle ( )
Instructiunile ODBC (HSTMT) pot fi statice si dinamice (parametrizate)
Instructiunile statice se pot executa:
• direct: SQLExecDirect (SQLHSTMT hstmt, SQLCHAR *instr, SQLINTEGER len);
•
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 129/194
7/14/2019 Proiectare Baze de date.pdf
● DF si cheile relatiilor
Descompunerea relatiilor
● Descompunere fara pierdere de informatie la jonctiune
● Descompunere cu conservarea DF
Formele
● FN1
normale ale relatiilor determinate de DF:
● FN2
● FN3
● FNBC
Dependente multivalorice – forma normala FN4
Dependente de jonctiune – forma normala FN5
Dependentele de date
Dependenţ ele de date (data dependencies) reprezintă constrângeri care se
impun valorilor atributelor unei relaţii şi care determină proprietăţile relaţiei în
raport cu operaţiile de inserare, ştergere şi actualizare a tuplurilor.
O formă normal ă a unei relaţ ii (normal form) presupune anumite condiţii pe
care le îndeplinesc valorile atributelor şi dependenţele de date definite pe
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 131/194
7/14/2019
acea relaţie Proiectare Baze de date.pdf
Dependentele
● Dependentede date: E.F. Codd a propus trei forme normale: FN1, FN2, FN3;
functionale:
apoi a fost introdusă forma normală Boyce-Codd (FNBC)
● Dependenţelor multivalorice: forma normala 4 (FN4)
● Dependenţelor de joncţiune: forma normala 5 (FN5)
Formele normale ale relaţiilor formează o colecţie ordonată (FN1, FN2, FN3,
FNBC, FN4, FN5), şi ele impun condiţii din ce în ce mai restrictive asupra
dependenţelor de date
Ordonarea
aflată în FN2 formelor
este înnormale de rela
FN1, orice la FN1
ţie înlaFN3
FN5este
înseamn ă căşi orice
în FN1 relaţie
FN2 etc.
Normalizarea relaţ iilor (normalization) constă în descompunerea lor, astfel
încât relaţiile să fie in forme normale cât mai avansate
Baze de date, 2008 Prof. Felicia Ionescu 2
● Anomalii de actualizare
atributele care : dacă se modific
au valori redundante, stareaă rela
într-un tuplu valoarea
ţiei poate unuia din ă
deveni inconsistent
valorilor
exista in atributelor
R daca si numai
X din doua
dacatupluri
pentrut 1orice
si t2 din
stare
r (ta1 ∈
relatiei
r si t2 r(R),
∈ r) implica
egalitatea
egalitatea valorilor atributelor Y din acele tupluri, adica:
t1[X] = t2 [X] ⇒ t1[Y ] = t2 [Y ]
Dependentele functionale sunt generalizarea notiunilor de chei ale relatiilor:
orice cheie determina o DF in acea relatie
● Daca Y = R, atunci X este o cheie a relatiei
● Reciproc, daca X este o cheie, Y = R (X → R)
● In acest caz t1[X] = t2 [X] ⇒ t1 = t2 ,dar, cum intr-o relatie nu pot exista doua
tupluri identice, rezulta ca t1 si t2 sunt unul si acelasi tuplu
Cheile relaţiilor:
se pot preciza explicit (şi atunci ele implică DF corespunzătoare)
pot fi deduse din mulţimea DF stabilite de proiectant, folosind diferiti algoritmi
Baze de date, 2008 Prof. Felicia Ionescu 5
(e) {IdAngajat,IdProiect}
(f) {IdAngajat,
→IdAngajat
IdProiect}→IdProiect
2. Augmentarea (augmentation): dacă X →Y, atunci (X ∪ Z) →(Y ∪ Z);
următoarele DF (g şi h) sunt deduse prin augmentare, pornind de la
dependenţele funcţionale (a) şi respectiv (b), augmentate cu Z = {Nume},
respectiv Z = {Prenume} (se stie ca Nume ∪ Nume = Nume etc.)
(g) {IdAngajat, Nume} →Nume
(h) {IdAngajat, Prenume} →Prenume
Prenume
IdAngajat
Adresa
IdProiect
Ore
P_X+ = X+
pentru fiecare DF Y→Z din F
dacă Y ⊆ X+ atunci X+ = X+ ∪ Z
până când P_X+ == X+
Se aplică acest algoritm pentru dependenţele funcţionale din relatia AP:
F AP = {IdAngajat → Nume, IdAngajat → Prenume, IdAngajat → Adresa,
{IdAngajat, IdProiect} → Ore}
Se obtin inchiderile atributelor astfel:
{IdAngajat}+ = {IdAngajat, Nume, Prenume, Adresa}
{IdAngajat, IdProiect}+ = {IdAngajat, IdProiect, Nume, Prenume, Adresa, Ore}
{Nume}+ = {Nume}, {Prenume}+ = {Prenume}, {IdProiect}+ = {IdProiect};
{Adresa}+ = {Adresa}, {Ore}+ = {Ore}
■ Pentru aceasta
supercheie în Rse calculează K în raport cu F; daca K = R, atunci K este
+ +
■ Algoritmul
inchiderea de găatribut
unui sire a cheilor
fata deunei relaţii din
o multime muleste
de DF ţimeaprezentat
DF bazatinpe
continuare
Prinrela
■ ale parcurgerea
ţiei. Dacă repetată a multe
există mai paşilorchei
2 şi candidate,
3, se găseşatunci
te unaordinea
din cheile candidate
găsirii cheilor
candidate depinde de atributul selectat în pasul 1 al algoritmului
■ De exemplu, se aplică algoritmul de mai sus pentru găsirea cheii primare a
relaţiei AP cu mulţimea F AP a DF (definita la inceputul capitolului)
■ Se porneşte cu K = R = {IdAngajat, Nume, Prenume, Adresa, IdProiect, Ore},
se selectează X = Nume şi se verifică dacă {K – X} este supercheie in R
● Pt. aceasta se calculeaza {K – X}+ = {IdAngajat, Nume, Prenume, Adresa, IdProiect,
Ore} = R, deci {IdAngajat, Prenume, Adresa, IdProiect, Ore} este supercheie in R
■ Se
atribute
repeta
potpasul
fi eliminate,
2 pentrusiXse= obtine
Prenume,
K = apoi
{IdAngajat,
X = Adresa
IdProiect}
si X = Ore; aceste
■ Atributele IdProiect, IdAngajat nu se pot elimina din supercheia K, deci K e
cheie
Descompunerea relatiilor
O descompunere D = {R1, R2,..Ri,...Rk} a schemei de relaţ ie R (relation
schema decomposition) este format ă din submul ţ imi 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 relaţ i ei r(R) pe
aceste submul ţ imi de atribute
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 143/194
Fie o relaţie cu schema R şi mulţimea F de DF ale acesteia; o descompunere
7/14/2019 a relaţiei r(R) este reversibil ă dacă are proprietăţile de:
Proiectare Baze de date.pdf
CREATE TRIGGERdone
BEGIN DECLARE `trigger_AP` AFTER0;INSERT ON `normalizare`.`AP` FOR EACH ROW
INT DEFAULT
DECLARE error INT DEFAULT 0;
DECLARE l_nume, l_prenume, l_adresa VARCHAR(20);
DECLARE cursor_AP CURSOR FOR SELECT Nume, Prenume, Adresa FROM AP
WHERE IdAngajat = NEW.IdAngajat;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cursor_AP;
REPEAT FETCH cursor_AP INTO l_nume, l_prenume, l_adresa;
IF NEW.Nume <> l_nume OR NEW.Prenume != l_prenume OR NEW.Adresa <> l_adresa
THEN SET error = 1; END IF;
UNTIL done = 1 OR error = 1
END REPEAT; CLOSE cursor_AP;
IF error = 1 THEN
DELETE FROM AP WHERE IdAngajat=NEW.IdAngajat AND IdProiect=NEW.IdProiect; END IF;
END $$ DELIMITER ;
NEW.Adresa) difera de cele
Daca, dupa parcurgerea existente;
tuturor daca difera,error=1,
liniilor cursorului, se seteaza error linia
se sterge = 1 nou
introdusa, deci in final, linia nu este inserata in tabel.
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,’Popescu’,’Mihai’,’Bucuresti’,4,60), ceea ce inseamna ca angajatul cu IdAngajat =1
este nedeterminat (este Ionescu Ion sau Popescu Mihai?)
● Aceasta linie nu se poate insera daca s-a activat trigger-ul trigger_AP
A treia forma normala (FN3)
Fie o schema de relatie R si multimea F de DF definite pe aceasta. O relaţ ie
r(R) este normalizat ă în FN3, dac ă este în FN2 şi dac ă oricare DF din F + a unui
atribut neprim este determinata de o cheie a relatiei
Exemplu: AFS(IdAngajat,
F AFS={IdAngajat Nume, Prenume,
→Nume, IdAngajat→Prenume,Adresa, Functie,
IdAngajat Salariu)
→ Adresa,
IdAngajat→Functie, Functie→Salariu}.
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 149/194
● Cheia primar ă a relaţiei este IdAngajat, şi poate fi dedusă din F AFS
7/14/2019 Primele patru DF sunt totale, deci rela ia Baze
Proiectare este în FN2
de date.pdf
●
● Relaţia nu este în FN3 datorita DF Functieţ →Salariu; prezinta redundante si anomalii
Normalizare prin descompunere in:
AF(IdAngajat, Nume, Prenume, Adresa, Functie)
FS(Functie, Salariu)
Se demonstreaza ca AF si FS sunt in FN3 si ca descompunerea este reversibila
● Proiectiile multimii F AFS:
F AF={IdAngajat→Nume,IdAngajat→Prenume,IdAngajat → Adresa,IdAngajat→Functie}
FFS = {Functie→Salariu} si se deduc (sau se verifica) cheile relatiilor
● PK AF={IdAngajat}, PKFS={Functie}, deci AF si FS sunt in FN3
● F AF ∪ FFS = F AFS deci descompunerea conserva DF
● AF ∩ FS = {Functie} si ( Functie → Salariu) ∈ F AFS, deci, cf. regulii lui Ullman,
descompunerea este fara pierdere de informatie la jonctiune
Impunerea DF in relatia nenormalizata AFS (1)
Dacă relaţia AFS nu se normalizează, atunci trebuie să se prevadă proceduri
speciale care să verifice şi să impună DF care nu sunt determinate de cheia PK
Se poate inlocui operatia de INSERT cu apelul unei proceduri stocate care
verifica mai intai valorile si executa INSERT numai daca acestea respecta DF
Procedura stocata pentru relatia AFS arata astfel:
DELIMITER $$ DROP PROCEDURE IF EXISTS sp_AFS $$
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 150/194
CREATE PROCEDURE `sp_AFS`(INOUT error INT, s_id INT, s_nume VARCHAR(20), s_prenume
7/14/2019
VARCHAR(20), s_adresa VARCHAR(20),Proiectare
s_functia VARCHAR(20), s_salariu DECIMAL)
Baze de date.pdf
BEGIN DECLARE done INT DEFAULT 0;
DECLARE l_functia VARCHAR(20); DECLARE l_salariu DECIMAL;
DECLARE cursor_AFS CURSOR FOR
SELECT Functia, Salariu FROM AFS WHERE Functia = s_functia;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cursor_AFS;
REPEAT FETCH cursor_AFS INTO l_functia, l_salariu;
IF s_salariu <> l_salariu THEN SET error = 1; END IF;
UNTIL done = 1 OR error = 1
END REPEAT;
CLOSE cursor_AFS;
IF error = 0 THEN
INSERT INTO AFS VALUES (s_id, s_nume, s_prenume, s_adresa, s_functia, s_salariu);END IF;
END$$ DELIMITER ;
CREATE PROCEDURE `sp EDP`(INOUT error INT, s Elev INT, s Disciplina INT, s Profesor INT)
CREATE PROCEDURE sp_EDP (INOUT error INT, s_Elev INT, s_Disciplina INT, s_Profesor INT)
7/14/2019 Proiectare Baze de date.pdf
BEGIN DECLARE
DECLARE done INTCURSOR
cursor_EDP DEFAULTFOR
0; DECLARE l_Disciplina INT;
SELECT IdDisciplina FROM EDP WHERE IdProfesor = s_Profesor;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cursor_EDP;
REPEAT FETCH cursor_EDP INTO l_IdProfesor;
IF s_Disciplina <> l_Disciplina THEN SET error = 1; END IF;
UNTIL done = 1 OR error = 1
END REPEAT;
CLOSE cursor_EDP;
IF error = 0 THEN INSERT INTO EDP VALUES (s_Elev, s_Disciplina, s_Profesor);
END IF; END$$ DELIMITER ;
■ Pentru verificare: se sterge linia(1,2,1) (daca exista) si se executa:
● set @error=0; call sp_EDP(@error,1,2,1); select @error;
● se obtine @error = 1 si nu s-a inserat acest tuplu
Impunerea
Impunerea constrangerilor pierdute prin descompunere (1)
■ Dacă relaţia EDP se normalizeaza prin descompunerea (EP, PD) atunci trebuie
să se prevadă o procedura care să verifice şi să impună constrangerea pierduta
■ Se pot inlocui operatiile de INSERT in tabelele EP, PD cu apelul unei proceduri
stocate care verifica mai intai valorile si executa INSERT numai daca acestea
respecta constrangerea: {IdElev, IdDisciplina} → IdProfesor
DELIMITER $$ DROP PROCEDURE IF EXISTS `sp_EP_PD`$$
CREATE PROCEDURE `sp_EP_PD`(INOUT error INT, s_Elev INT, s_Disciplina INT, s_Profesor INT)155/194
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
BEGIN DECLARE done INT DEFAULT 0;
7/14/2019 Proiectare Baze de date.pdf
DECLARE l_Elev, l_Profesor, l_Disciplina INT;
DECLARE cursor_EP_PD CURSOR FOR
SELECT IdElev, EP.IdProfesor, IdDisciplina FROM EP, PD
WHERE EP.IdProfesor = PD.IdProfesor ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN
REPEAT cursor_EP_PD;
FETCH cursor_EP_PD INTO l_Elev, l_Profesor, l_Disciplina;
IF s_Elev = l_Elev AND s_Disciplina = l_Disciplina AND s_Profesor <> l_Profesor THEN
SET error = 1; END IF;
UNTIL done = 1 OR error = 1
END REPEAT;
CLOSE cursor_EP_PD;
IF error = 0 THEN
INSERT INTO EP VALUES (s_Elev, s_Profesor);
INSERT INTO PD VALUES (s_Profesor, s_Disciplina);
END IF; END$$ DELIMITER ;
Baze de date, 2008 Prof. Felicia Ionescu 26
Impunerea
Impunerea constrangerilor pierdute prin descompunere (2)
■ Procedura sp_EP_PD primeşte ca argumente un flag de eroare şi valorile
celor trei atribute IdElev, IdDisciplină, IdProfesor care trebuie sa respecte
constrângerea {IdElev, IdDisciplina} → IdProfesor
■ În această procedura se creează un cursor în care se încarcă rezultatul
joncţiunii naturale între relaţiile EP şi PD pe atributul comun IdProfesor
■ Pentru fiecare linie a rezultatului joncţiunii EP >< PD se verifică respectarea
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 156/194
constrângerii dorite, testând valorile existente în linia respectivă cu noile valori
7/14/2019 Proiectare Baze de date.pdf
care urmeaz
● daca ă să fie introduse:
această constrângere este respectată, atunci se execută două instrucţiuni
INSERT, cate una in foiecare din tabelele EP si PD
● daca această constrângere nu este respectată, nu se introduce nici o linie
■ Exemplu: daca
prin INSERT setabelul EP contine
pot introduce linia (1,1)
si valorile si pentru
(1,1,2) tabelul (IdElev,
(PD) contine linia (1,1),
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
■ In schimb apelul procedurii: set @error = 0; call sp_EP_PD(@error, 1,1,2); select
@error; produce @error=1 si nu se introduce nici o linie
Dependente multivalorice
O dependenţă multivaloric ă - DMV- (multivalued dependency ) X→→Y
specificat ă pe schema de relatie R = {X,Y,Z} stabileşte următoarele
constrângeri pe care trebuie să le respecte orice relaţ ie r(R): dac ă exist ă
dou
t3 şi ăt4tupluri cu urm i t2 în r propriet
t1ăştoarele astfel ca
ăţ it1[X]
: = t2[X]= x, atunci vor exista şi tuplurile
t3[X] = t4[X] = t1[X] = t2[X] = x;
t3[Y] = t1[Y] = y1 şi t4[Y] = t2[Y] = y2 ;
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 157/194
t3[Z] = t2[Z] = z2 şi t4[Z] = t1[Z] = z1 .
7/14/2019 Proiectare Baze de date.pdf
Datorită simetriei egalităţilor de mai sus, rezulta că, dacă într-o relaţie cu
schema R există DMV X→→Y, atunci există şi X→→Z, unde Z = R−(X∪Y)
O DF este un caz particular al unei DMV: DF X→Y este o DMV X →→ Y cu
restricţia că unei valori a lui X îi corespunde o singur ă valoare a lui Y
O relaţ ie cu schema R este în a patra formă normal ă (FN4) în raport cu o
mul ţ ime F de DF şi DMV dac ă este în FN1 şi dac ă, pentru orice DMV
netrivial ă X→→Y din F+, X este cheie a relaţ iei r(R).
Asemănarea acestei definiţii cu definiţia FNBC: pentru FNBC se impun
restricţii DF, iar pentru FN4 se impun restricţii DMV
Dacă o schemă de relaţie respectă condiţia de FN4, atunci înseamnă că ea
respectă şi condiţia de FNBC
Dependente de jonctiune
Fie o schema de relaţ ie R şi R1,R2,...Rk submul ţ imi de atribute ale lui R,
unde R1 ∪ R2 ∪...∪ Rk = R. Se spune c ă exist ă o dependenţă de jonc ţi une
(DJ) pe R, notat ă *(R1,R2,...Rk), dac ă şi numai dac ă orice relaţ ie r (R ) este
egal ă cu jonc ţ iunea proiec ţ iilor relaţ iei pe submul ţ imile R1,R2,..Rk, adic ă
r = ΠR1(r)>< ΠR2(r)...>< ΠRk(r).
Rezulta ca:
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 158/194
● (R1,R2,...Rk) este o DJ pe R dacă şi numai dacă descompunerea lui R în
7/14/2019
proiecţiile pe R1,R2,...Rk este f ăr Proiectare
ă pierdere de informaţie la jonctiune
Baze de date.pdf
asigura conservarea
Conditiile tuturor
de normalizare DF
in FNBC, FN4 si FN5 se pot rezuma la faptul că
într-o relaţie nu trebuie să existe decât dependenţe determinate de chei
Algoritmi de normalizare
Analiza normalizării relaţiilor trebuie să fie facuta pentru orice proiect de
baze de date, pentru a asigura func ţionarea corectă a acesteia:
● Dacă o relaţie se păstrează într-o formă de normalizare mai redusă, atunci
trebuie să se prevadă proceduri de verificare şi impunere a dependenţelor de
date care nu sunt determinate de cheile relaţiei (ca si constrângeri explicite)
● Dacă se normalizeaza o relaţie, dar prin descompunere se pierd unele DF,
acestea pot fi impuse explicit prin proceduri stocate sau funcţii în programele de
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 161/194
aplicaţie, care execută joncţiunea între relaţiile rezultate şi impun constrângerea
7/14/2019
respectiva Proiectare Baze de date.pdf
R
R112 =
111 {Functie, Salariu};
= {IdAngajat, Nume, este in FNBC
Prenume, Adresa, Functie}; este in FNBC
Se poate demonstra usor ca descompunerea obtinuta D= (R111, R112, R12)
conserva si dependentele functionale
Baze de date, 2008 Prof. Felicia Ionescu 34
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 164/194
7/14/2019 Proiectare Baze de date.pdf
Tranzactii
În mod obişnuit, un sistem SGBD deserveşte mai mulţ i utilizatori, care
accesează concurent datele din tabele
Execuţ ia concurentă a mai multor procese poate avea loc:
● într-un sistem uniprocesor, prin partajarea (împăr ţ irea) timpului de execuţ ie al
procesorului între mai multe procese (multiprogramare)
● într-un sistem multiprocesor, în care mai multe procese pot fi executate în mod
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 166/194
real simultan, pe mai multe procesoare ale sistemului (multiprocesare)
7/14/2019
O tranzac ţi e (transaction) este o unitate
Proiectare Baze de date.pdf
logic ă de prelucrare indivizibil ă
(atomic ă) a datelor unei baze de date prin care se asigur ă consistenţ a
acesteia
O●tranzac ţ ie trebuie să asigure consistenţ a bazei de date in diferite situatii:
tranzactia se execută individual sau concurent cu alte tranzacţ ii
● apar defecte ale sistemului în cursul execuţ iei tranzacţ iei
O tranzac ţi e este o operaţ ie indivizibilă de acces la baza de date care:
● fie se execut
efectuate ă cu bazei
asupra succesdetoate
dateac ţ iunile )şi se termină cu o validare a modificărilor
(commit
● fie nu poate efectua (din diferite motive) toate acţ iunile şi este abandonată şi
anulată (abort , rollback )
Exemplu
Exemplu: un sistem de
de rezervare tranzacti
a locurilor la curseeaeriene
● PASAGERI (IdPasager, Nume, Prenume, Adresa)
● CURSE (IdCursa, AeroportPlecare, AeroportSosire, DataCursa, NrLocuriLibere)
● FACTURI (IdFactura, IdPasager , IdCursa, DataFactura, Pret)
Pentru rezervarea unui loc se efectuează mai multe operaţ ii:
1. Se inserează o linie nouă în tabelul PASAGERI, cu datele pasagerului
2. Dacă există locuri libere la cursa dorită, atunci se face propriu-zis rezervarea,
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 167/194
7/14/2019 prin inserarea unei linii noi în tabelul
ProiectareFACTURI;
Baze de date.pdf altfel, nu se face rezervarea
3. Se tipăreste factura
4. Se emite (tipăreşte) biletul
Probleme care pot sa apara:
● Dacă sistemul se defectează după ce s-a executat pasul 2, s-a f ăcut o rezervare,
dar biletul nu a fost facturat şi nici emis
● Dacă defecţ iunea are loc după pasul 3, clientului i se trimite factura, dar el nu a
primit biletul
● Dac ă nu se defecteaz
doi pasageri ă sistemul,
diferiţ i, atunci dar doi agen
vor fi probleme ţ i de vânzări
la îmbarcarea atribuie acelaşi loc la
pasagerilor
Astfel de probleme ar disparea dacă toate actiunile efectuate pentru o
rezervare ar fi grupate ca o operaţ ie indivizibilă (atomică)
Baze de date, 2008 Prof. Felicia Ionescu 3
se
Un memoreaza mai multe
articol (data item) inregistrari
este un câmp care (tupluri)
memorează valoarea unui atribut
dintr-o înregistrare (tuplu), dar poate fi o înregistrare întreagă sau chiar o
grupare de inregistrari memorate intr-un bloc
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 168/194
7/14/2019
Operaţ iile de acces la un articol X al bazei de date pot fi:
Proiectare Baze de date.pdf
● read(X): citeşte articolul X din baza de date într-o variabilă a programului; pentru
simplificarea notaţ iilor se va considera că variabila în care se citeşte articolul X
este notată, de asemenea, cu X.
Timp T1 T2 T1 T2 T1 T2
read(X) read(X) read(X)
X=X+N
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf
X=X+N X=X+N 169/194
7/14/2019
write(X) read(X)
Proiectare Baze de date.pdf
write(X)
read(X) X=X-M read(X)
X=X-M write(X) X=X-M
write(X) write(X) write(X)
abort
(a) (b) (c)
Citire irepetabil ă (nonrepetable read ): o tranzacţ ie citeşte un articol de două
ori, iar între cele două citiri, o altă tranzacţ ie a modificat chiar acel articol
Citire fantomă ( phantom read ): o tranzacţ ie prelucrează un set de linii
rezultat al unei interogări si în timpul acestei prelucr ări o altă tranzacţ ie
insereaza sau sterge o linie
Baze de date, 2008 Prof. Felicia Ionescu 5
Starile tranzactiilor
Diagrama de stare a unei tranzactii:
read,
write
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 172/194
abort
abort
7/14/2019 Proiectare Baze de date.pdf
ABANDONAT Ă TERMINAT Ă
Pentru refacerea bazei de date, sistemul SGBD menţ ine un fi şier jurnal (log
file), în care memorează operaţ iile efectuate de fiecare tranzacţ ie,
identificat ă printr-un identificator unic (T) generat de sistem
Fişierul jurnal este memorat pe disc şi nu este afectat de erori de execuţ ie,
cu excepţ ia unei defectări catastrofice a discului
Fişierul jurnal este salvat periodic pe un suport auxiliar (band ă magnetică)
Baze de date, 2008 Prof. Felicia Ionescu 8
Planificarea tranzactiilor
O planificare (schedule, sau istorie - history ) S a n tranzacţ ii T1,T2,..Ti,...Tn
este o ordonare a operaţ iilor tranzacţ iilor astfel încât:
● Pentru orice tranzacţ ie Ti care participă în S, operaţ iile lui Ti în S respectă
ordinea iniţ ială din Ti
● Alte operaţ ii (ale altor tranzacţ ii Tj, unde j ≠ i) pot fi întreţ esute cu operaţ ii ale
tranzacţ iei Ti
Două operaţ ii dintr-o planificare sunt conflictuale (conflicting operations)
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 173/194
dacă apar ţi n unor tranzacţ ii diferite, accesează acelaşi articol şi cel puţ in
7/14/2019
una dintre operaţ ii este operaţ ie de scriere Proiectare Baze de date.pdf
Planificar i seriale ale tranzactiilor
Planificarile SA si SB ale tranzactiilor T1 si T2 sunt seriale
T1 T2 T1 T2
read(X) read(X)
X=X-N X=X+M
write(X) write(X)
read(Y) read(X)
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf SA SB 174/194
Y=Y+N X=X-N
7/14/2019 write(Y) write(X)
Proiectare Baze de date.pdf
read(X) read(Y)
X=X+M Y=Y+N
write(X) write(Y)
Daca notam operaţ iile de read, write, commit şi abort cu r, w, c, a, cu indice
numarul tranzacţ iei şi ca parametru articolul pe care l-a citit sau scris, atunci:
SA: r1(X); w1(X); r1(Y); w1(Y); c1; r2(X); w2(X); c2;
SB: r2(X); w2(X); c2; r1(X); w1(X); r1(Y); w1(Y); c1;
In SA, perechile de operaţ ii: (r1(X), w2(X)), ( r2(X), w1(X)) şi (w1(X), w2(X))
sunt conflictuale
Baze de date, 2008 Prof. Felicia Ionescu 10
Planificar i serializabile
serializabile ale tranzactiilor
O planificare a n tranzac ţ ii se numşte serializabil ă, dac ă este echivalent ă cu o
planificare serial ă a celor n tranzac ţ ii
Două planificări sunt echivalente (din punct de vedere al conflictelor) dac ă
oricare pereche de operaţ ii conflictuale se execută în aceeaşi ordine în cele
două planificări
Planificarile SC si SD sunt planificari echivalente cu SA, deci sunt serializabile
Testarea echivalentei unei planificări cu o planificare seriala este costisitoare,
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 175/194
dar se poate asigura serializabilitatea prin controlul concurenţ ei tranzacţ iilor
7/14/2019 Proiectare Baze de date.pdf
T1 T2 T1 T2
read(X) read(X)
X=X-N X=X-N
write(X) write(X)
read(X) SC read(Y) SD
X=X+M read(X)
write(X) X=X+M
read(Y) Y=Y+N
Y=Y+N write(Y)
write(Y) write(X)
Baze de date, 2008 Prof. Felicia Ionescu 11
Zavoare binare
Dacă zăvorul articolului X este liber (L(X)=1), atunci tranzactia:
● achiziţ ionează zăvorul (trecându-l în starea ocupat prin operatia lock )
● execută operaţ iile necesare asupra articolului X
● eliberează zăvorul, prin operaţ ia unlock
Dacă zăvorul articolului X este ocupat (L(X)=0), atunci tranzacţ ia:
● aşteaptă până ce acesta este eliberat (de o altă tranzacţ ie, care şi-a terminat
operaţ iile de acces la acel articol),
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 177/194
● după care execută aceeaşi secvenţă de operaţ ii: blocarea zăvorului, execuţ ia
7/14/2019 operaţ iilor care accesează articolul respectiv
Proiectare şi eliberarea zăvorului
Baze de date.pdf
2. dup ă ce aţ iefectuat
O tranzac să elibereze
e trebuietoate operaţ iilezăde
vorul unui
citire sauarticol X (prin
de scriere operaţ ia unlock(X))
a articolului X
3. O tranzacţ ie nu poate cere un zăvor pe care îl deţ ine deja
4. O tranzacţ ie nu poate elibera un zăvor pe care nu îl deţ ine
Baze de date, 2008 Prof. Felicia Ionescu 13
ţ ţ
efectuat toate operaţ iile de citire sau de scriere a articolului X; operaţ ia de
7/14/2019 eliberare a unui zăvor poate fi executata
Proiectare Baze numai
de date.pdf de o tranzactia care de ţ ine (în
Protocolul
Pentru de blocare
a asigura serializabilitatea planificăin
rilordoua faze
tranzactiilor care(1)
folosesc mai
multe zavoare, pe lângă regulile de utilizare a zăvoarelor, mai este necesar
să se respecte un protocol privind ordinea operatiilor de blocare şi de
eliberare a zăvoarelor, cum este protocolul de blocare in doua faze
Protocolul de blocare în dou ă faze (two-phase locking ) impune ca fiecare
tranzactie sa respecte protocolul de utilizare a zavoarelor si toate opera ţ iile de
blocare a zăvoarelor sa preceada prima operaţ ie de eliberare a unui zăvor
O astfel de tranzacţ ie poate fi divizată în două faze:
● faza de creştere (growing phase), în care pot fi achizi ţ ionate noi zăvoare ale
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 181/194
ă
articolelor care vor fi accesate, dar nici un z vor nu poate fi eliberat
7/14/2019 ● faza de descreştere (shrinking phase ),Baze
Proiectare în decare zăvoarele deţ inute pot fi eliberate,
date.pdf
dar nici un alt zăvor nu mai poate fi achiziţ ionat.
S-a demonstrat că, dacă fiecare tranzacţ ie a unei planificări respectă
protocolul de blocare în două faze, atunci planificarea este serializabilă
Planificarea tranzacţ iilor din figura precedenta (c) nu respectă protocolul de
blocare în două faze deoarece:
● T3 eliberează zăvorul articolului Y înaintea achiziţ ionării zăvorului pentru scrierea
articolului X (write_ lock(X))
● articolului
T4 elibereaz ă zăvorul articolului X înaintea achiziţ ionării zăvorului pentru scrierea
Y (write_lock(Y))
Aceasta planificare este neserializabilă, cu rezultat al execuţ iei incorect, aşa
cum s-a ar ătat mai înainte
Baze de date, 2008 Prof. Felicia Ionescu 17
Ordonarea
■ La operatiilor
lansarea unei opera ţ ii de scriere a dupa
articoluluimarci le de
X (write(X)): timp
● Dacă read_TS(X) > TS(T), atunci tranzacţ ia T trebuie să fie abandonată şi rulată
înapoi, deoarece o altă tranzacţ ie cu o marcă de timp mai mare (deci lansată
după T) a citit deja valoarea lui X, înainte ca T să fi avut şansa să scrie în X
● Dacă write_TS(X) > TS(T), atunci tranzac ţ ia T nu va executa operaţ ia de scriere,
dar va putea continua cu celelalte operaţ ii. Aceasta, deoarece o altă tranzacţ ie, cu
o marcă de timp mai mare a scris deja o valoare în articolul X, care este mai
recentă, iar valoarea pe care ar dori să o înscrie T este deja perimată
● Dacă nu a apărut nici una din situaţ iile precedente, atunci T va executa operaţ ia
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 184/194
de scriere în articolul X şi va seta write_TS(X)=TS(T).
7/14/2019 ■ La lansarea unei operaţ ii de citire aProiectare
articolului X (read(X)):
Baze de date.pdf
● Dacă write_TS(X) > TS(T), atunci tranzac ţ ia T trebuie să fie abandonată şi rulată
înapoi, deoarece o altă tranzacţ ie cu o marcă de timp mai mare a scris deja în
articolul X, înainte ca T să fi avut şansa să citească articolul X
● Dacă write_TS(X) <= TS(T), atunci T va executa operaţ ia de citire din articolul X şi
va seta marca read_TS(X) la cea mai mare dintre valorile TS(T) şi read_TS(X).
■ Ulterior, o tranzacţ ie T care a fost anulată şi rulată înapoi va fi relansată, dar
cu o nouă marcă de timp, corespunzătoare noului moment de lansare
■ Ordonarea după mărcile de timp garantează serializabilitatea planificărilor
■ In acest protocol nu poate sa apara impasul, dar poate apare amânarea
indefinită
Baze de date, 2008 Prof. Felicia Ionescu 20
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 186/194
7/14/2019 ■ Se defineste o tranzactie pentru rezervarea unui loc la o cursa aeriana in
Proiectare Baze de date.pdf
Proiectarea tranzactiilor
■ Tranzacţ iile sunt corecte dacă lasă baza de date într-o stare consistentă
■ Tranzacţ iile sunt cu atât mai eficiente cu cât sunt mai scurte (ca timp de
execu ţ ie şi ca număr de articole ale bazei de date accesate) deoarece astfel:
● se limiteaza frecvenţ a de apariţ ie a impasului (în cazul folosirii zăvoarelor)
● creste eficienţ ei operaţ iilor de anulare şi de blocare a resurselor
■ Ori de câte ori se poate înlocui o tranzac ţ ie complexă, cu număr mare de
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 188/194
operaţ ii şi timp de execuţ ie ridicat, cu mai multe tranzacţ ii scurte, este indicat
să se facă această transformare
7/14/2019 Proiectare Baze de date.pdf
■ De asemenea, pentru menţ inerea tranzacţ iilor cât mai scurte posibil, se
recomandă ca o tranzacţ ie să nu fie pornită până ce nu au fost pregătite toate
datele (citirea datelor de intrare, parcurgerea, analiza şi prelucrarea acestora)
■ Toate operaţ iile de gestiune a tranzacţ iilor şi de refacere a datelor sunt
prevăzute în diferitele componente ale sistemelor SGBD (administratorul de
tranzacţ ii, administratorul de refacere), iar aplica ţ iile:
● trebuie să se prevadă tranzacţ ii corecte
● pot selecta diferite opţ iuni de control al tranzacţ iilor şi de refacere a datelor oferite
de sistemul de gestiune respectiv
Tehnici
Refacerea dederefacere
unei baze a bazelor
date după producerea de (date
unui defect database
recovery ) înseamnă aducerea bazei de date într-o stare precedentă corectă,
din care, eventual, se poate reconstrui o nouă stare corectă şi cât mai
apropiată de momentul apariţ iei defectului
Tehnicile de refacere a bazelor de date sunt, în general, integrate cu tehnicile
de control al concurenţ ei si depind de SGBD
Pentru operaţ iile de refacere se foloseşte fişierul jurnal (log file), şi (sau) o
copie de rezervă a bazei de date (database backup) stocată în general pe
bandă magnetică
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 189/194
Un punct de validare (commit point ) este punctul atins de o tranzacţ ie care
7/14/2019
a executat cu succes toate operaţ Proiectare
iile sale şi le-a înregistrat în fişierul jurnal
Baze de date.pdf
fişierul jurnal
scriere înaintea
în cazul unui ăpunct
unei defect de control nu vor necesita reluarea operaţ iilor de
ri a sistemului
Administratorul de refacere al SGBD-ului (recovery manager ) decide la ce
interval de timp (sau după câte tranzacţ ii) introduce un nou punct de control
Baze de date, 2008 Prof. Felicia Ionescu 25
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 193/194
7/14/2019 Proiectare Baze de date.pdf
http://slidepdf.com/reader/full/proiectare-baze-de-datepdf 194/194