Sunteți pe pagina 1din 194

Proiectarea Bazelor de Date

Curs Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei Anul IV A (INF)

Prof. Felicia Ionescu


http://info.tech.pub.ro/~fionescu

Capitolul 1: Introducere
Definitii 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

Evolutia sistemelor de baze de date

Baze de date, 2008

Prof. Felicia Ionescu

Sisteme de baze de date


Bazele de date se folosesc in aproape toate domeniile de activitate actuale:
Activitati bancare si comerciale (vanzari produse) Productie (gestiunea stocurilor, gestiunea financiar-contabila, salarizare etc.) Evidenta populatiei, taxe si impozite Servicii (servicii medicale, rezervari bilete de calatorie etc.)

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:
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 colecie de date creat i meninut computerizat, care permite operaii de:
Introducere (insert) Stergere (delete) Actualizare (update) Interogare (query) Prof. Felicia Ionescu 3

Baze de date, 2008

Componentele unui Sistem de Baze de Date (1)


Un sistem de baze de date (Database System) este un sistem computerizat de meninere a evidenei unei anumite activiti, folosind baze de date Componentele unui sistem de baze de date sunt: hardware, software, utilizatori si date persistente Hardware:
Sistemele de baze de date sunt instalate pe calculatoare de uz general Bazele de date sunt memorate fizic ca fisiere pe discuri magnetice (hard-discuri)

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
Baze de date, 2008 Prof. Felicia Ionescu 4

Componentele unui Sistem de Baze de Date (2)


Baza de date
Date Date

Utilizator final

Program aplicaie

SGBD
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

Arhitectura interna a unui Sistem de BD


Arhitectura pe 3 niveluri relativ independente: nivelul intern, nivelul conceptual i nivelul extern (Standard ANSI/X3/SPARC -1975) Schema descrierea datelor pe un anumit nivel: schema interna, conceptuala si scheme externe (vedere utilizator) Corespondente intre niveluri (mappings)
Vedere utilizator #1 Vedere utilizator #2 Vedere utilizator #n

Nivelul extern

Nivelul conceptual

Schema conceptual SGBD

Nivelul intern

Schema intern

Date memorate

Baze de date, 2008

Prof. Felicia Ionescu

Avantaje oferite de Sistemele de BD


Compactitate ridicat a datelor Reprezentarea unor asocieri complexe intre date Timp de dezvoltare a bazelor de date redus Viteza mare de actualizare si regasire a datelor Redundanta controlata a datelor (si cat mai scazuta) Flexibilitate, mentinerea datelor actualizate la zi Independenta datelor fata de suportul hardware utilizat Securitatea datelor: autentificarea utilizatorilor si autorizarea accesului Impunerea de restrictii (constrangeri) de integritate la introducerea si actualizarea datelor Mentinerea integritatii datelor in caz de defecte: salvare si refacere Posibilitatea de partajare a datelor intre mai multe categorii de utilizatori Posibilitatea de introducere a standardelor
Baze de date, 2008 Prof. Felicia Ionescu 7

Clasificarea Sistemelor de Baze de Date (1)


Clasificare dupa modelul de date:
Modelul de ierarhic de date Modelul de date retea Modelul relational Modelul obiect-orientat Modelul obiect-relational

Clasificare dupa numarul de utilizatori


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 Client (front-end): program (programe) de aplicatie
Baze de date, 2008 Prof. Felicia Ionescu 8

Clasificarea Sistemelor de Baze de Date (2)


Aplicaie Client Aplicaie Client Aplicaie Client Reea de comunicaie Server SGBD BD a Server SGBD BD b Aplicaie Client

Sisteme de baze de date centralizate: a- mono-utilizator; b- multi-utilizator


Aplicaie Client Aplicaie Client Reea de comunicaie Server SGBD BD Server SGBD BD Aplicaie Client

Sistem de baze de date distribuit


Baze de date, 2008 Prof. Felicia Ionescu 9

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

Tehnica de identificare a trsturilor caracteristice eseniale ale unui sistem se numete abstractizare. Un model de date stabilete regulile de organizare i interpretare a unei colecii de date. n proiectarea bazelor de date se folosesc 2 categorii de modele:
Modele conceptuale de nivel nalt (modelul Entitate-Asociere, modelul EntitateAsociere Extins) descriu concis colectiile de date care modeleaz activitatea dorit fr s detalieze modul de reprezentare sau de prelucrare a datelor schem conceptual de nivel nalt Modele specializate (modelul ierarhic, modelul reea, modelul relaional, etc.) descriu reprezentarea mulimilor de entiti i a asocierilor dintre acestea prin structuri de date specifice - schem conceptual (logic)

Trecerea de la modelul conceptual de nivel nalt la un model de date specific proiectare logic a bazei de date.
Baze de date, 2008 Prof. Felicia Ionescu 10

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.

Un atribut (attribute) este o proprietate care descrie un anumit aspect al unei entiti
Exemple: persoanele au nume, prenume, adresa etc.

Tip de entitate (entity type): se refera la entittile similare, care pot fi descrise prin aceleasi atribute
Exemple: tipul persoana, tipul planta

Multime de entitati (entities set): colecia tuturor entitilor de acelai tip dintr-o baz de date constituie o mulime de entiti
Exemple: multimea tuturor persoanelor, multimea tuturor plantelor

O entitate este o instanta a unui tip de entitate si un element al multimii de entitati de acel tip In exprimarea curenta, adeseori nu se face diferentierea dintre entitate, tip de entitate si multime de entitati, dar diferenta este evidenta Asemanare cu modelul obiect: tip de entitate - clasa; entitate - obiect
Baze de date, 2008 Prof. Felicia Ionescu 11

Asocieri
O asociere (relationship) este o 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 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) destul de rare

Categorii de (tipuri de) asocieri binare - dup numrul elementelor din fiecare dintre cele dou mulimi 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
Prof. Felicia Ionescu 12

Baze de date, 2008

Categorii de asocieri binare (1)

unul-la-unul 1:1

unul-la-multe- 1:N

Asocieri binare intre multimile de entitati A si B


Baze de date, 2008 Prof. Felicia Ionescu 13

Categorii de asocieri binare (2)

multe-la-unul- N:1

multe-la-multe- M:N

Asocieri binare intre multimile de entitati A si B


Baze de date, 2008 Prof. Felicia Ionescu 14

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

Raport de cardinalitate (cardinality ratio): raportul dintre valorile cardinalitilor unei asocieri fa de dou din mulimile de entiti asociate
Exemple pentru asocieri binare: 1:1, 1:N, N:1, M:N Asocierile multiple (k-are, k > 2) prezint cte un raport de cardinalitate pentru fiecare pereche de mulimi de entiti pe care le asociaz.

Baze de date, 2008

Prof. Felicia Ionescu

15

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 entitate Tip de entitate puternic

Tip entitate

Tip de entitate slab

Nume atribut

Atribut

Asociere binar 1:N ntre 2 tipuri de entiti

Baze de date, 2008

Prof. Felicia Ionescu

16

Exemplu de diagrama Entitate-Asociere (1)


Multimi de entitati puternice:
SECTII (Numar, Nume, Buget) ANGAJATI (Nume, Prenume, DataNasterii, Adresa, Functie, Salariu) PROIECTE (Denumire, DataInceperii, Termen, Buget)

Multimi de entitati slabe: DEPENDENTI (Nume, Prenume, DataNasterii, GradRud)


Numr Buget Nume Salariu

1 SECTII Cuprind

N 1 Intretin N DEPENDENTI

ANGAJATI M Lucreaza N PROIECTE

Nume

GradRudenie

Denumire

Buget

Baze de date, 2008

Prof. Felicia Ionescu

17

Exemplu de diagrama Entitate-Asociere (2)


Asocieri:
Asocierea SECTII - ANGAJATI - 1:N Asocierea ANGAJATI - PROIECTE - M:N Asocierea ANGAJATI - DEPENDENTI - 1:N

Raportul de cardinalitate al unei asocieri este stabilit de proiectant astfel nct s reflecte ct mai corect modul de organizare a activitii modelate Modul de stabilire a tipurilor de entiti i a asocierilor nu este unic: aceeai funcionalitate se poate obine printr-o varietate de diagrame E-A O mulime de entiti se denumeste printr-un substantiv, iar o asociere se denumeste (de regula) printr-un verb, deoarece o asociere reprezint o interaciune ntre entiti Modelul E-A nu precizeaz modul cum sunt realizate asocierile ntre mulimile de entiti: 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 entitile asociate; n modelul relaional asocierile se realizeaz prin egalitatea valorilor unor atribute comune ale multimilor de entiti (chei)
Baze de date, 2008 Prof. Felicia Ionescu 18

Modelul Entitate-Asociere Extins


Modelul Entitate-Asociere Extins (Enhanced Entity-Relationship Model) permite definirea de subtipuri ale unui tip de entiti, care motenesc atribute de la tipul de entitate respectiv Crearea ierarhiilor: specializare si generalizare Tipurile i a subtipurie formeaza ierarhii de tipuri de entiti complexe, organizate pe mai multe niveluri Diagrama Entitate-Asociere Extinsa
Nume Prenume DataNasterii Adresa Salariu

ANGAJAT d

SECRETARA

TEHNICIAN

INGINER

VitezaRedactare

Calificare

Specialitate

Baze de date, 2008

Prof. Felicia Ionescu

19

Modelul de date ierarhic


Modelul ierarhic (Hierarchical Model): baza de date se reprezinta printr-o structur ierarhic de nregistrri (records) conectate prin legturi (links).
A fost primul model folosit pentru dezvoltarea bazelor de date Cel mai cunoscut SGBD ierarhic: sistemul IMS (Information Management System) dezvoltat de IBM n programulde cercetri Apollo, n perioada anilor 1960

O nregistrare de date n modelul ierarhic este o instan a unui tip de nregistrare (record type) i const dintr-o colecie de cmpuri (fields), fiecare cmp coninnd valoarea unui atribut. Un tip de legtur n modelul ierarhic: tip de asociere cu raportul de cardinalitate 1:N (printe-fiu) ntre dou tipuri de nregistrri Schema conceptual a unei baze de date n modelul ierarhic se reprezint printr-un numr oarecare de scheme ierarhice O schem ierarhic este un arbore direcionat, reprezentat pe mai multe niveluri, n care nodurile sunt tipuri de nregistrri, iar arcele sunt tipuri de legturi
Baze de date, 2008 Prof. Felicia Ionescu 20

Baze de date ierarhice


FACULTATI FACULTATI 1 N PROFESORI M N STUDENTI (a) Diagrama E-A STUDENTI (b) Schema ierarhica s1 s2 s3 s1 s2 FACULTATI f1 f2 f3 PROFESORI PROFESORI p1 p2 p3 STUDENTI s4

(c) Arbori de instantiare a datelor

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

Avantaje: simplitatea i eficiena de calcul Deficiente:


nu exista separare intre descrierea logica si fizica a datelor interogarile trebuie s fie prevzute explicit in structura datelor

Utilizari actuale - aplicatii specializate, baze de date XML


Baze de date, 2008 Prof. Felicia Ionescu 21

Modelul de date retea


Modelul reea (Network Model) folosete o structur de graf pentru definirea schemei conceptuale a bazei de date Modelele ierarhic si retea modele pre-relationale Standardizat n 1971, de o comisie DBTG (Database Task Group). Sisteme de gestiune comerciale in modelul retea: IDS II (Honeywell), UNISYS (Burroughs), IDMS (Computer Associates) Nodurile grafului sunt tipuri de entiti (nregistrri - records), iar muchiile reprezint asocierile (legturile-links) dintre tipurile de entiti Asocierile M:N se reprezint fr duplicarea nregistrrilor, fiecare nregistrare putnd fi referit de mai multe nregistrri, ceea ce elimin redundana 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)
Baze de date, 2008 Prof. Felicia Ionescu 22

Modelul de date relational


Modelul relaional (Relational Model) se bazeaz pe noiunea de relaie (relation) din matematic, care corespunde unei mulimi de entiti Fundamentat de E.F. Codd (IBM), prin lucrarea "Un model Relaional de Date pentru Bnci Mari de Date Partajate" (1970) Dezvoltare extraordinara a sistemelor de gestiune a bazelor de date relationale, datorit simplitii i a fundamentrii matematice a modelului Alte lucrri ale cercetatorilor C.J. Date, P. Chen, R. Boyce, J.D. Ullman, R. Fagin, W. Armstrong, M. Stonebraker etc. au perfecionat modelul relaional Primul Sistem de Gestiune a Bazelor de Date Relaionale (SGBDR) a fost prototipul System R (IBM, 1970) Dup aceasta numeroase companii au realizat sisteme de gestiune relaionale: Oracle, Microsoft, Ingres, Sybase SGBDR folosesc limbajul SQL (Structured Query Language), pentru care au fost emise mai multe standarde ANSI (American National Standardization Institute) si ISO (International Standardization Office) Majoritatea SGBD-urilor relaionale actuale implementeaz versiunea SQL2 (SQL92) si/sau SQL3 (SQL99)
Baze de date, 2008 Prof. Felicia Ionescu 23

Modelul obiect-orientat
Modelul obiect (Object Model) este un concept unificator Necesar in domenii in care se manipuleaza date de tipuri complexe:
proiectarea sistemelor de calcul: programare, hardware, interfete, baze de date proiectarea asistat de calculator in alte domenii sisteme de informaii geografice medicin i altele

Strategii pentru dezvoltarea sistemelor de gestiune a bazelor de date obiect-orientate (SGBDOO):


Extinderea unui limbaj de programare obiect-orientat cu capaciti de administrare a obiectelor persistente: sistemul GemStone (extinde Java si C++) Extinderea unui limbaj de programare relaional cu capaciti 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 (Semantic Information Manager).

Dificultati:
Complexitate in dezvoltare a bazei de date i a aplicaiilor Interogarile trebuie s fie prevzute explicit in structura datelor

Utilizare SGBDOO: cam 5% din sistemele de gestiune actuale


Baze de date, 2008 Prof. Felicia Ionescu 24

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

Sistemele de gestiune a bazelor de date obiect-relaionale (SGBDOR) se realizeaz prin extinderea sistemelor relaionale, de regula n mod gradat, adugndu-se de la o versiune la alta ct mai multe caracteristici posibile ale modelului obiect Aceasta abordare asigur rularea n continuare a aplicaiilor relaionale existente n noile versiuni de sisteme SGBDOR, ceea ce permite productorilor (Oracle, Informix i IBM) s-i pstreze clienii i domeniile de utilizare Limbajele de programare pentru SGBDOR sunt standarde mai recente ale limbajului SQL: SQL3 (SQL1999), SQL-2003, SQL-2006

Baze de date, 2008

Prof. Felicia Ionescu

25

Complexitatea datelor si a interogarilor


Clasificare propusa de M. Stonebraker (1996)
Complexitatea interogrilor

SGBDR

SGBDOR

Sisteme de fiiere

SGBDOO
Complexitatea datelor

SGBDR prelucreaz tipuri simple de date, dar permit interogri complexe SGBDOO prelucreaz tipuri de date complexe, dar n care rezolvarea interogrilor este destul de dificil SGBDOR permit prelucrarea datelor complexe i rezolvarea interogrilor complexe; sistemele de baze de date obiect-relaionale sunt considerate sisteme de baze de date universale
Baze de date, 2008 Prof. Felicia Ionescu 26

Evolutia sistemelor de baze de date


1960 Modele prerelationale: ierarhic si retea Primele produse de baze de date (DBOM, IMS, IDS, Total, IDMS) Standarde Codasyl Modelul relational prototipuri de SGBDR Lucrari teoretice asupra modelului relational Arhitectura interna pe 3 niveluri a bazelor de date (ANSI and Codasyl) Modelul Entitate-Asociere Dezvoltarea SGBDR comerciale Primul standard SQL (ANSI, ISO) Baze de date distribuite Arhitectura client/server a sistemelor de baze de date (two-tier arch.) Baze de date obiect-orientate Baze de date obiect-relationale Standarde SQL: SQL 92, SQL 99 Arhitectura pe 3 niveluri a sistemelor de baze de date (three-tier arch.) Baze de date in sistemul WWW (World Wide Web)
Prof. Felicia Ionescu 27

1970

1980

1990

2000

Baze de date, 2008

Sisteme de Gestiune a Bazelor de date


Sisteme Comerciale Oracle ($$$$) DB2 (IBM) ($$$) SQL Server (Microsoft) ($$) Sisteme Open Source PostgreSQL MySQL

Baze de date, 2008

Prof. Felicia Ionescu

28

Baze de date, 2008

Prof. Felicia Ionescu

29

Capitolul 2: Modelul Relational


Relatii, atribute, domenii; schema relatiei Reprezentarea relatiilor prin tabele Limbajul SQL:
Conventii lexicale Expresii, operatori, functii Instructiuni de definire a datelor: CREATE, ALTER, DROP Instructiuni de manipulare a datelor: SELECT, INSERT, UPDATE, DELETE

Constrangerile de integritate ale relatiilor


Constrangeri de domeniu Constrangeri de tuplu: cheia primara chei secundare Constrangeri de integritate referentiala chei straine

Indexarea relatiilor
Indexul primar Indexuri secundare

Baze de date, 2008

Prof. Felicia Ionescu

Relatii Atribute Domenii


Modelul relational: E.F.Codd, 1970 IBM O baz de date relaional este compus dintr-o mulime finit de relaii
fiecare relaie reprezinta o multime (tip) de entitati sau o multime (tip) de asocieri fiecare relatie este unica intr-o baza de date o relatie se defineste prin intermediul atributelor sale

Atributele unei relaii corespund atributelor tipului de entitate sau de asociere pe care l reprezint relaia respectiv
fiecare atribut are un nume (Ai) si un domeniu de definiie D(Ai) pentru o entitate data, un atribut poate lua o singur valoare (scalar)

Atributele pot fi: simple (un element) sau compuse (o submultime de atribute) Domeniu: o multime 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 constrangeri Elementele domeniilor sunt atomice (indivizibile) O valoare speciala, null, apartine oricarui domeniu (inseamna lipsa de informatie sau valoare necunoscuta)
Baze de date, 2008 Prof. Felicia Ionescu 2

Schema relatiei
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 relatii (n) Exemplu: STUDENTI (Nume, Prenume, DataNasterii, Adresa, Facultatea)

O relaie r definita prin schema R(A1,A2,...Ai,...An) este:


o mulime finita de n-tupluri t tuplul t este o list ordonat de n valori: t = <v1,v2,...vi,...vn>, unde 1 i n vi este o valoare a atributului Ai, vi D(Ai)

Relatia r(R): r este variabila, instanta a schemei (tipului) R


Valoarea variabilei: starea sau extensiunea relatiei Numarul de tupluri ale unei relatii: cardinalitatea relatiei Fiecare tuplu este unic intr-o relatie (nu exista tupluri duplicat) Corespondenta: relatiemultime de entitati (sau de asocieri); tuplu entitate

In mod curent: se foloseste R atat pentru schema cat si pentru relatia insasi
Baze de date, 2008 Prof. Felicia Ionescu 3

Reprezentarea relatiilor prin tabele


Un tabel (table) = reprezentarea grafica a unei relaii; compus din:
Numele tabelului - identic cu numele relaiei Coloanele corespund atributelor relatiei Capul tabelului- contine numele atributelor (coloanelor) schema relatiei O mulime de linii, fiecare linie corespunznd unui tuplu starea relatiei Valori ale atributelor fiecarui tuplu

Exemplu: Tabelul care reprezinta relatia (starea relatiei) STUDENTI


Numele STUDENTI Nume Anghelescu Beldiman Boeru Prenume Octavian Cristina Marius DataNasterii 1999 1998 1999 Adresa Bucuresti Bucuresti null Facultatea ETTI ETTI ETTI Linii - tupluri Coloane - Atribute Valori atribute Capul tabelului

Tabelul sugereaza ordonarea atributelor (coloanelor) si a tuplurilor (liniilor) ceea ce nu corespunde modelului matematic (relatie = multime de tupluri)
Baze de date, 2008 Prof. Felicia Ionescu 4

Afisarea tabelelor
SGBD-urile ofera instrumnente de proiectare si afisare a tabelelor
De exemplu, afisarea tabelului Employees din baza de date Northwind folosind toolset-ul SQL Query Analyser din Microsoft SQL Server

Baze de date, 2008

Prof. Felicia Ionescu

Ordonarea valorilor atributelor in tupluri


Din punct de vedere logic, ordinea valorilor atributelor ntr-un tuplu nu conteaza; aceast structurare poate fi exprimat prin urmtoarele definiii: Schema relaiei: R = {A1,A2, ...Ai,...An} (o mulime de atribute) Relaia r(R): o mulime de n-tupluri t, unde:
fiecare tuplu t este o mulime de n perechi ordonate <Ai,vi>, unde 1 i n, t = {<A1,v1>,<A2,v2>,...<Ai,vi>, ...<An,vn>} vi este valoarea atributului Ai, vi D(Ai)

Observatii asupra celor doua definitii:


A doua definitie a relaiei este mult mai general decat prima definitie Dar prima definitie simplific notaiile i corespunde reprezentrii prin tabel a relaiei i de aceea va fi folosit n continuare destul de frecvent n implementrile reale, exist o anumit ordine a valorilor atributelor memorate in fisiere, dar aceasta nu este relevant din punct de vedere logic

Baze de date, 2008

Prof. Felicia Ionescu

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 si ISO:
Anul 1986 1989 1992 1999 2003 2006 Denumire SQL-86 SQL-89 SQL-92 SQL-1999 SQL-2003 SQL-2006 Caracteristici Publicat de ANSI (SQL1); ratificat de ISO in 1987 Revizii minore Revizii majore, redenumit SQL2 Redenumit SQL3, adauga unele caracteristici obiect-relationale Adauga unele trasaturi referitoare la limbajul XML Utilizare SQL in conjunctie cu XML

Fiecare SGBDR implementeaz un dialect al limbajului SQL, ceea ce micoreaz gradul de portabilitate a aplicaiilor n diferitele implementri ale limbajului SQL pot s lipseasc unele comenzi prevzute n standard, dar pot exista extensii specifice
Baze de date, 2008 Prof. Felicia Ionescu 7

Caracteristicile generale ale limbajului SQL


Limbajul SQL foloseste reprezentarea prin tabele a relaiilor, reprezentare care este mai simpl i mai intuitiv (foloseste termenii tabel, 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:


o instruciune SQL specific ce informaii trebuie s fie setate sau obinute, nu modul (procedura) n care se opereaz limbajul SQL nu conine instruciuni de control al fluxului execuiei (instruciuni ca for, while, if, etc)

Pentru aplicaiile de baze de date, s-au dezvoltat extensii procedurale ale limbajului SQL, biblioteci i interfee de programare care integreaz instruciunile SQL

Baze de date, 2008

Prof. Felicia Ionescu

Structura lexicala a limbajului SQL


O instruciune SQL (statement) este o secven de elemente - de regula terminat cu semnul punct i virgul (;) Fiecare instruciune SQL conine o comand SQL (command), care specific ce aciune se efectueaz, urmat de alte elemente, care specific operaii, clauze, parametri etc.
Exemplu: SELECT * FROM ANGAJATI;

Elementele (tokens) instruciunilor SQL


cuvnte cheie (key words): CREATE, INSERT, SELECT , WHERE, FROM etc. identificatori (identifiers):
simpli - numai caractere alfa-numerice si underscore(_): ANGAJATI, Nume, Prenume etc. delimitati (quoted) - pot contine orice caracter, foloseste ghilimele : Nume, Prenume etc.

constante (literali): 1000, 100.5, Ionescu, NULL caractere speciale: *, ., ;

Spaiile albe (whitespaces) separa elementele: spaiu, linie nou, tab O instructiune se poate scrie pe una sau mai multe linii, iar ntr-o linie se pot introduce una sau mai multe instructiuni Limbajul SQL este case-insensitive (nu deosebeste literele mici de cele mari) cu exceptia identificatorilor delimitati (quoted) care sunt case-sensitive
Baze de date, 2008 Prof. Felicia Ionescu 9

Expresii si operatori in limbajul SQL


O expresie SQL const dintr-unul sau mai muli operanzi, operatori i paranteze.
Parantezele se pot folosi pentru a preciza o anumit ordine a operaiilor, 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 colona intr-una sau mai multe linii ale tabelului o constant (literal) valoarea returnat de o functie

Un operator SQL este exprimat prin:


unul sau mai mai multe caractere speciale; exemple: +, -, *, /, %, <<, >> etc. un cuvnt cheie; exemple: AND, OR, NOT, LIKE etc.

Operatori SQL: binari sau unari (dupa numarul de operanzi) Operatori SQL: aritmetici, logici, de comparaie SQL, relationali
Operatori aritmetici de operatii cu numere intregi sau reale: +, -, *, /, %, ^ Operatori aritmetici orientati pe biti: ~, &, |, # Operatori aritmetici de comparatie: <, >, =, <> (sau !=), <=, >= Operatori de comparatie SQL: IS NULL, IS NOT NULL, BETWEEN, IN, LIKE Operatori relationali: UNION, INTERSECT, MINUS
Prof. Felicia Ionescu 10

Baze de date, 2008

Operatori SQL
Toti operatorii de comparaie returneaza valori logice:
true (1), dac condiia este ndeplinit false (0) dac condiia nu este ndeplinit null dac ambii operanzi au valoarea null

Operatorii logici (NOT, AND, OR):


se aplic unor variabile logice trivalente (cu 3 valori: true (1), false (0) inull lipsa de informatie) returneaz o valoare logic trivalent A
true true true false false null

B
true false null false null null

A and B
true false null false false null

A or B
true true true false null null

A
true false null

not A
false true null

Baze de date, 2008

Prof. Felicia Ionescu

11

Functii 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

Tipuri de funcii scalare SQL:


Funcii de calcul trigonometric (sin, cos, tan etc.), funcii de calcul al logaritmului (ln, log), al puterii (power), funcii de rotunjire (floor, ceil), etc. Funcii pentru manipularea irurilor de caractere: concat, replace, upper etc. Funcii pentru data calendaristic i timp: add_months, next_day, last_day etc. Funcii de conversie: to_number, to_char etc.

Funciile scalare se folosesc n expresii, care pot s apar n diferite clauze ale instruciunilor SQL
Baze de date, 2008 Prof. Felicia Ionescu 12

Tipuri de date SQL (1)


Tipuri de date SQL2: numeric, iruri de caractere, iruri de bii, data (calendaristic), timp Tipul numeric:
numere ntregi: integer sau int (4 octei), smallint (2 octei) numere reale reprezentate n virgul flotanta: float (4 octei), real i double [precision] (8 octei) 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 numrul total de cifre, iar s (scara) este numrul 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 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
Baze de date, 2008 Prof. Felicia Ionescu 13

Tipuri de date SQL (2)


Tipurile SQL pentru data calendaristic i timp sunt: date, time, timestamp, interval:
Tipul date: memorarea datelor calendaristice prin utilizarea a trei cmpuri (year, month, day), n formatul yyyy-mm-dd; se admit numai date valide Tipul time: memorarea timpului, folosind trei cmpuri (hour, minute, second) n formatul HH:MM:SS; se admit numai valori valide Tipul timestamp(p): memorarea combinat a datei calendaristice i a timpului, cu precizia p pentru cmpul second. Valoarea implicit a lui p este 6 Tipul interval este utilizat pentru memorarea intervalelor de timp

Variante de tipuri de date SQL specifice n diferite sisteme SGBD; Exemple:


SGBD Microsoft SQL Server: tinyint - numr ntreg pe 1 octet SGBD Oracle: varchar2 - ir de caractere de lungime variabil

Standardul SQL2 nu suport tipuri de date i operaii definite de utilizator Standardul SQL3 suport tipuri de date i operaii definite de utilizator, care sunt caracteristice ale modelului de date obiect-relaional Actualmente, productorii de sisteme de baze de date relaionale introduc treptat diferite caracteristici ale modelului obiect-relaional cuprinse in SQL3
Baze de date, 2008 Prof. Felicia Ionescu 14

Domenii SQL
In SQL2 domeniile atributelor se specific pe baza tipurilor de date predefinite ale limbajului SQL, deci nu corespund intru totul cu noiunea de domeniu relaional Standardul SQL2 prevede comanda CREATE DOMAIN, care defineste un domeniu pe baza unui tip predefinit SQL2 i cu unele constrngeri Aceast comand nu prea este implementat n sistemele de gestiune actuale, care prefer alte soluii de definire a domeniilor. De exemplu:
In SQL Server, se pot crea aa-numitele tipuri definite de utilizator (userdefined types), echivalente cu domeniile create cu comanda SQL CREATE DOMAIN, folosind o procedur stocat n Oracle (8i, 9i, 10g) se pot crea tipuri de date noi, folosind comanda CREATE TYPE, care permite gruparea sub un anumit nume a mai multor atribute, de diferite tipuri (predefinite sau definite de utilizator) In PostgreSQL se pot crea tipuri de date noi, folosind comanda CREATE TYPE

Baze de date, 2008

Prof. Felicia Ionescu

15

Conventii de notatie
Pentru prezentarea limbajului SQL si a altor limbaje, biblioteci si interfete
[ { ] (paranteze drepte) } (acolade) Element opional al instruciunii Element obligatoriu al instruciunii Separ elementele din parantezele drepte sau acolade; numai unul dintre acestea se poate introduce n instruciunea respectiv Elementul precedent poate fi repetat de n ori; elementele repetate sunt separate prin virgul List de n elemente de acelai tip; elementele repetate sunt separate prin virgul List de elemente de acelai tip separate prin virgul

| (bar vertical)

[ , . . . n] element1, . . . . . . . elementn lista_elemente

Caracterele folosite pentru a specifica o anumit convenie sintactic (paranteze, bara vertical, virgula, etc.) nu apar n instruciunile propriu-zise Listele de elemente (compuse din mai multe elemente separate prin virgul) vor fi exprimate fie folosind una cele trei din construciile de mai sus, care se potrivete cel mai bine instruciunii respective
Baze de date, 2008 Prof. Felicia Ionescu 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)

Exemple de comenzi SQL de definire a datelor:


CREATE TABLE, CREATE VIEW, ALTER TABLE, ALTER VIEW, DROP TABLE, DROP VIEW, DROP FUNCTION, CREATE INDEX, CREATE USER ALTER PROCEDURE CREATE FUNCTION, CREATE TRIGGER, CREATE PROCEDURE ALTER FUNCTION, DROP INDEX, DROP USER

DROP PROCEDURE,

DROP TRIGGER

Componenta de manipulare a datelor din limbajul SQL (Limbajul de Manipulare a Datelor - LMD) conine 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

Crearea tabelelor
Instruciunea CREATE TABLE are urmtoarea sintax:
CREATE TABLE nume_tabel ( col1 domeniu1 [constrangeri_coloana], col2 domeniu2 [constrangeri_coloana], ................................. coln domeniun [constrangeri_coloana], [constrangeri_tabel] );

Constrngerile impuse fiecrei coloane (atribut), ca i constrngerile de tabel, sunt opionale i vor fi discutate n sectiunea urmtoare. Exemplu:
CREATE TABLE ANGAJATI ( Nume varchar(20), Prenume varchar(20), DataNasterii date, Adresa varchar(50), Functie varchar(20), Salariu numeric);

Instruciunea CREATE TABLE definete att tipul relaiei ct i o variabil relaie care iniial este vid (nu conine nici un tuplu)
Baze de date, 2008 Prof. Felicia Ionescu 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

Un tabel vedere (view) este un tabel virtual care:


nu este memorat fizic n fiiere reprezint o selecie (dup un anumit criteriu) a datelor memorate n unul sau mai multe tabele de baz

Un tabel vedere secreeaza cu instruciunea SQL:


CREATE VIEW nume_vedere AS (SELECT...);

Formatul comenzii SELECT va fi descris n capitolul urmtor Datele (valorile atributelor) sunt memorate o singur dat, n tabelele de baz, dar pot fi accesate att prin tabelele de baz ct i prin tabelele vederi Un tabel vedere este ntotdeauna actualizat ("la zi"), adic orice modificare efectuat n tabelele de baz se regsete imediat n orice tabel vedere creat pe baza acestora
Baze de date, 2008 Prof. Felicia Ionescu 19

Modificarea si stergerea tabelelor si a vederilor


Comanda de modificare a tabelelor (ALTER TABLE) permite:
adugarea sau tergerea unor atribute modificarea domeniilor unor atribute adugarea, modificarea sau tergerea unor constrngeri ale tabelului

Pentru adaugare unei coloane intr-un tabel se foloseste clauza ADD, urmata de numele coloanei si numele domeniului (tipul SQL) atributului corespunzator. Exemplu:
ALTER TABLE ANGAJATI ADD DataAngajarii date;

Pentru tergerea unei coloane dintr-un tabel se folosete clauzaDROP, urmata de numele coloanei care se va sterge. Exemplu:
ALTER TABLE ANGAJATI DROP DataAngajarii;

Instruciunile de tergere a tabelelor de baz i a vederilor sunt:


DROP TABLE nume_tabel; DROP VIEW nume_vedere;

Baze de date, 2008

Prof. Felicia Ionescu

20

Instructiunea 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];

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 adevrat (are valoarea TRUE).

Instructiunea SELECT are urmatoarele seciuni (clauze):


Clauza SELECT definete lista de coloane a tabelului rezultat Clauza FROM indic lista de tabele din care se selecteaz rezultatul Clauza WHERE definete condiia pe care trebuie s o ndeplineasc fiecare linie a tabelului rezultat Clauze secundare (ORDER BY, GROUP BY, HAVING): permit ordonri sau grupri ale tuplurilor (liniilor) rezultate
Baze de date, 2008 Prof. Felicia Ionescu 21

Clauza SELECT
Clauza SELECT specifica:
lista coloanelor unor tabele (date in 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);

Eliminarea liniilor duplicat cu parametrul DISTINCT. Exemplu:


SELECT [DISTINCT] CountryCode FROM city;

Selectarea tuturor coloanelor produsului cartezian al tabelelor date - cu caracterul * ca si lista_coloane. Exemplu:
SELECT * FROM city;

n clauza SELECT se pot redenumi coloanele tabelelor sau se pot specifica nume pentru expresii, folosind urmtoarea sintax:
SELECT nume1 [AS] noul_nume1 [,...n] FROM lista_tabele [alte_clauze]; SELECT ID, Name Oras, CountryCode Cod Tara FROM city;

Baze de date, 2008

Prof. Felicia Ionescu

22

Functii agregat
n clauza SELECT se pot introduce i funcii agregat (totalizatoare). Funciile agregat definite n limbajul SQL2 sunt urmtoarele:
Functia COUNT SUM MAX MIN AVG Valoarea returnata Numarul de linii al tabelului rezultat Suma valorilor din coloana data ca argument Valoarea maxima din coloana data ca argument Valoarea minima din coloana data ca argument Valoarea medie din coloana data ca argument

Exemple:
SELECT COUNT(*) FROM city; SELECT MAX(Population) FROM city; SELECT MIN(Population) FROM city; SELECT AVG(Population) FROM city;
Baze de date, 2008 Prof. Felicia Ionescu 23

Clauzele FROM si WHERE


Clauza FROM specifica lista_tabele din care se selecteaza rezultatul Numele coloanelor din lista_coloane (clauza SELECT) trebuie s fie distincte Dac nu sunt distincte, se calific unele coloane cu numele tabelului caruia i aparin - folosind operatorul punct (.). De exemplu:
SELECT ANGAJATI.Nume, SECTII.Nume FROM ANGAJATI, SECTII;

Clauza WHERE specifica conditia pe care trebuie sa o ndeplinesca rezultatul:


conditia este o expresie logic compusa din valori logice, operatori logici (NOT, AND, OR) i paranteze o valoare logic se obtine ca rezultat al comparaiei ntre doi operanzi folosind un operator de comparaie un operand poate fi un atribut (nume de coloan), o constant, valoarea unei expresii aritmetice sau o valoare returnat de o funcie operatorii de comparaie pot fi operatori aritmetici sau operatori SQL de comparaie

Exemple:
SELECT * FROM city WHERE Population > 1000; SELECT * FROM city WHERE Population BETWEEN 1000 AND 100000 AND CountryCode='NLD';
Baze de date, 2008 Prof. Felicia Ionescu 24

Clauze secundare
Clauza ORDER BY specifica numele atributului dup care se face ordonarea liniilor tabelului rezultat SELECT * FROM city order by CountryCode; Ordonarea n ordine cresctoare: parametrul ASC (implicit); in ordine descrescatoare: DESC. Exemplu:
SELECT * FROM city order by CountryCode DESC;

Clauza GROUP BY se folosete pentru gruparea rezultatelor funciilor 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;

Baze de date, 2008

Prof. Felicia Ionescu

25

Instructiunea 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);

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 instruciunea CREATE TABLE, precum i din operaiile ulterioare de alterare a tabelului ordinea coloanelor se poate afla prin instruciunea DESCRIBE nume_tabel.

De exemplu, introducerea unei linii n tabelul ANGAJATI(IdAngajat,Nume,Prenume,DataNasterii,Adresa,Functia,Salariu) se poate face cu instruciunea:


INSERT INTO ANGAJATI VALUES(100,Mihailescu, Mihai,1950-04-05,Craiova,Inginer, 3000);
Baze de date, 2008 Prof. Felicia Ionescu 26

Instructiunile UPDATE si DELETE


Instruciunea UPDATE permite actualizarea valorilor coloanelor (atributelor) 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 condiia dat. Exemplu:
UPDATE ANGAJATI SET Adresa = Bucuresti WHERE Nume = Popescu;

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;

Baze de date, 2008

Prof. Felicia Ionescu

27

Constrangeri de integritate (1)


Constrngerile de integritate (integrity constraints) sunt reguli care:
se definesc la proiectarea bazei de date trebuie s fie respectate de orice stare a acesteia astfel incat datele memorate s corespund cat mai bine celor din realitate

Clasificare dupa locul unde se definesc: constrangeri de coloana si constrangeri de tabel (in instructiunea CREATE TABLE) Clasificare dupa numarul de relatii implicate: constrngeri intra-relaie i constrngeri inter-relaii. Constrngerile intra-relaie - reguli care se impun n cadrul unei singure relaii; de trei categorii:
Constrngeri de domeniu - condiii ce se impun valorilor domeniilor atributelor Constrngeri de tuplu - condiii ce se impun tuplurilor unei relaii prin chei (primare sau secundare). Constrngeri impuse prin dependene de date (dependene funcionale, multivalorice sau de jonciune); acestea sunt constrngeri intre valorile atributelor dintr-o relaie

Constrngerile inter-relaii - reguli care se impun ntre dou sau mai multe relaii; asigura integritarea referenial prin intermediul cheilor strine
Baze de date, 2008 Prof. Felicia Ionescu 28

Constrangeri de integritate (2)


Clasificare din punct de vedere al modului de definire: constrngeri inerente, implicite i explicite. Constrngerile inerente sunt cele ale modelului de date nsui, care nu trebuie s fie specificate la definirea relaiilor, dar sunt respectate prin modul n care se construiesc relaiile
De exemplu: n modelul relaional constrngerea ca valoarea fiecrui atribut s fie atomic (indivizibil) este o constrngere inerent

Constrngerile implicite sunt reguli care se definesc odat cu definirea schemelor relaiilor, sunt memorate n baza de date i sistemul de gestiune verific i impune automat respectarea acestora
Exemple: connstrngerile de domeniu, constrngerile de tuplu i constrngerile de integritate referenial sunt constrngeri implicite.

Constrngerile explicite sunt constrngeri suplimentare pe care trebuie s le respecte relaiile unei baze de date i care nu sunt impuse automat de sistemul SGBD, ci necesit proceduri speciale de verificare i impunere
Exemple:dependenele de date care nu sunt determinate de cheile relaiilor

Baze de date, 2008

Prof. Felicia Ionescu

29

Constrangeri de domeniu (1)


Constrngerile de domeniu: constrngerea NOT NULL, constrngerea de valoare implicit (DEFAULT), constrngerea de verificare (CHECK) Constrngerea NOT NULL nsemna c atributul respectiv nu poate lua valoarea NULL n nici un tuplu al relaiei. Valoarea NULL a unui atribut ntr-un tuplu semnific faptul c valoarea acelui atribut nu este cunoscut pentru acel tuplu. Exemple:
nu se cunoaste deloc data de nastere a unei personalitati istorice; nu se cunoate valoarea unui atribut in momentul inserarii tuplului, dar aceasta va fi cunoscuta si completat ulterior

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 si NOT NULL se introduc ca si constrangeri de coloana in instructiunea SQL CREATE TABLE. Exemplu:
CREATE TABLE ANGAJATI ( Nume varchar(20) NOT NULL, Prenume varchar(20) NOT NULL, DataNasterii date NULL, Adresa varchar(50) NOT NULL, Functie varchar(20), Salariu numeric);
Baze de date, 2008 Prof. Felicia Ionescu 30

Constrangeri de domeniu (2)


Constrangerea de valoare implicita a unui atribut (DEFAULT): daca la inserarea unui tuplu nu se specific valoarea unui atribut, atunci:
atributul primete 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 ) ;

Constrngerea 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 cuvnt cheie
Baze de date, 2008 Prof. Felicia Ionescu 31

Constrangeri de tuplu
O relaie = mulime de tupluri tuplurile unei relaii trebuie s fie distincte (nu pot exista dou sau mai multe tupluri identice) O supercheie (superkey) este o submulime SK de atribute ale relaiei care prezint proprietatea de unicitate (orice combinaie de valori ale atributelor supercheii este unic pentru orice stare a relaiei), adic:
ti[SK] tj[SK] dac i j, unde ti si tj sunt 2 tupuri ale relatiei

Rezulta c, dac se cunoate valoarea (combinaia de valori ale atributelor) supercheii, atunci acel tuplu poate fi identificat n mod unic O cheie candidat (candidate key) este o supercheie ireductibil:
Unicitate: nu exist dou tupluri diferite ale relaiei care s conin aceeai combinaie de valori ale atributelor cheii CK; Ireductibilitate: nu exist nici o submulime proprie, nevid a cheii CK care s aib proprietatea de unicitate.

O cheie candidat este o supercheie minimal (ireductibil) si poate fi simpl (un singur atribut), sau compus (mai multe atribute) Proprietatea de unicitate a cheii (candidate) este o constrngere de integritate a tuplurilor
Baze de date, 2008 Prof. Felicia Ionescu 32

Chei primare si secundare (1)


Atunci cnd exist mai multe chei candidate, una dintre ele se alege ca i cheie primar, celelalte chei candidate fiind numite chei secundare (sau unice) O cheie primar (primary key) este o cheie candidat creia proiectantul i confer un rol special de identificare a tuplurilor si are urmtoarele restricii:
Nici o valoare a atributelor cheii primare nu poate fi modificat prin operaii 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 numr de atribute Cheile primare pot fi naturale sau artificiale:
O cheie primar alcatuita din atributele existente ale tipului de entitate se numete cheie natural; in general, cheile naturale sunt chei compuse O cheie primar artificial este un atribut care se adaug n schema relaiei special pentru identificarea unic a tuplurilor
Baze de date, 2008 Prof. Felicia Ionescu 33

Chei primare si secundare (2)


De exemplu, atributul compus {Nume, Prenume, DataNasterii, Adresa} din relaia ANGAJATI (IdAngajat, Nume, Prenume, DataNasterii, Adresa, Salariu) poate fi considerat cheie candidata si poate fi desemnat ca si cheie primara O solutie mai eficienta este adaugarea unei chei primare artificiale, IdAngajat:
ANGAJATI (IdAngajat, Nume, Prenume, DataNasterii, Adresa, Salariu)

Cheia primar se introduce prin instructiunea CREATE TABLE


In general, cheia primar se defineste ca o constrngere de tabel sub forma: [CONSTRAINT nume_constr] PRIMARY KEY (lista_atribute) Dac cheia primar este simpl (format dintr-un singur atribut), ea se poate specifica si ca o constrngere de coloana

Cheile secundare se definesc folosind specificatorul UNIQUE n locul specificatorului PRIMARY KEY. Exemplu:
CREATE TABLE SECTII ( IdSectie int PRIMARY KEY, Nume varchar(50) NOT NULL, Buget numeric);
Baze de date, 2008 Prof. Felicia Ionescu 34

Chei primare si secundare (3)


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, [CONSTRAINT UK] UNIQUE [KEY] (Nume,Prenume,DataNasterii,Adresa));

Modul de asigurare a unicitii valorii cheii primare artificiale depinde de sistemul SGBD folosit. De exemplu:
In Microsoft SQL Server se pot obine valori unice ale cheii primare folosind parametrul IDENTITY, care asigur incrementarea valorii atributului cheii la introducerea fiecrei linii noi. n sistemele Oracle se pot genera chei artificiale folosind obiecte SEQUENCE; un obiect SEQUENCE geneaza un numar unic la fiecare apel al metodei NEXTVAL In MySQL, se foloseste parametrul AUTO_INCREMENT pentru generarea numerelor unice pentru cheile primare.

SGBD-urile interzic introducerea liniilor (tuplurilor) care vau valori identice ale cheilor primare sau secundare (daca nu exista valori NULL) (Exemple)
Baze de date, 2008 Prof. Felicia Ionescu 35

Constrangeri inter-relatii
Asocierile (relationships) 1:N ntre multimile de entiti (din modelul EntitateAsociere) se realizeaz n modelul relaional prin chei strine Exemplu: Pentru a realiza asocierea 1:N dintre relaiile SECTII si ANGAJATI, se adaug n relaia ANGAJATI atributul IdSectie, care reprezint identificatorul (numrul) seciei n care lucreaz angajatul respectiv:
ANGAJATI (IdAngajat, Nume, Prenume, DataNasterii, Adresa, Salariu, IdSectie)
SECTII SECTII 1 N
IdSectie Nume Productie Proiectare Cercetare Documentare Buget 400000 300000 200000 100000

ANGAJATI

1 2 3 4

Diagrama E-A

ANGAJATI
IdAngajat 1 2 3 4 Nume Ionescu Popescu Vasilescu Ionescu Prenume Ion Petre Ana Ion DataNasterii 1960.01.05 1965.02.97 1961.03.06 1970.03.98 Adresa Bucuresti Bucuresti Bucuresti Bucuresti Salariul 4000 3200 2000 2000 IdSectie 1 1 2 3

Baze de date, 2008

Prof. Felicia Ionescu

36

Cheia straina
Fie doua relatii R1 si R2, intre care exista o asociere cu raportul 1:N O cheie strin (foreign key) este o submulime FK de atribute ale relaiei R2 care refer relaia R1 (relatia referita) i satisface urmtoarele condiii:
atributele cheii strine FK sunt definite pe domenii compatibile cu cele ale atributelor unei cheii candidate CK a relaiei R1 valorile atributelor FK ntr-un tuplu din relaia R2, fie sunt identice cu valorile atributelor CK a unui tuplu oarecare din starea curent a relaiei R1, fie sunt NULL

Cheia strin reprezint o constrngere referenial intre cele 2 relatii Dou domenii sunt compatibile dac ele sunt comparabile din punct de vedere semantic (are sens sa fie comparate) n limbajul SQL verificarea domeniilor se rezum la verificarea tipurilor de date, iar compatibiltatea semantic trebuie s fie asigurat de proiectant Cheia strin se specific la crearea tabelului printr-o constrngere de tabel:
[CONSTRAINT nume_constr] FOREIGN KEY (cheie_straina) REFERENCES relatia_referita (cheie_candidata)

Exemplu:
CREATE TABLE ANGAJATI ( IdAngajat int PRIMARY KEY, Nume varchar(20) NOT NULL, Prenume varchar(20) NOT NULL, IdSecie int, UNIQUE (Nume,Prenume), CONSTRAINT FK FOREIGN KEY (IdSectie) REFERENCES SECTII(IdSectie));
Baze de date, 2008 Prof. Felicia Ionescu 37

Mentinerea integritatii referentiale a relatiilor (1)


Integritatea referenial (referential integrity) este proprietatea bazei de date prin care orice cheie strina:
fie are o valoare care se regsete printre valorile cheii candidate referite fie are valoarea NULL

Pentru mentinerea integritatii referentiale trebuie sa fie inpuse restrictii operaiilor de modificare a strii relaiilor (INSERT, DELETE, UPDATE) Restriciile care se impun operaiilor de modificare a relaiilor depind de rolul relaiei (relaie care refer, relaie referit, sau poate avea ambele roluri) Operaia INSERT:
ntr-o relaie referit se poate face fr restricii ntr-o relaie care refer (care conine o cheie strin): trebuie s se verifice c n relaia referit exist un tuplu care are valorile atributelor cheii referite egale cu valorile atributelor cheii strine a tuplului de introdus; dac aceast condiie nu este satisfcut, operaia de introducere este refuzat.

Operatia DELETE:
Intr-o relatie care refera se poate face fara restrictii Intr-o relatie referita se poate face tergere restricionat sau tergere n cascad.
Baze de date, 2008 Prof. Felicia Ionescu 38

Mentinerea integritatii referentiale a relatiilor (2)


tergerea restricionat interzice tergerea unui tuplu din relaia referit dac acesta este referit de un tuplu din relaia care o refer tergerea n cascad permite tergerea unui tuplu din relaia referit; dac tuplul ters era referit de unul sau mai multe tupluri, atunci se terg i acestea din relaia care o refer; dac tuplurile terse din relaia care refer sunt, la rndul lor referite de alte tupluri, atunci trebuie s fie terse i acestea, .a.m.d.; se execut deci o tegere n cascad Operaia UPDATE poate fi privit ca o tergere urmat de o introducere, deci restriciile de actualizare reprezint combinaia restriciilor de introducere i de tergere In limbajul SQL se specifica opiunile ON DELETE si ON UPDATE constrngerii de cheie strin; valorile posibile ale acestor opiuni sunt:
RESTRICT - pentru tergerea restricionat (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
Timpul de execuie a operatiilor asupra datelor din relatii depinde de modul de reprezentare a mulimii de elemente (tupluri) ale relaiilor, memorate ca inregistrari in fisiere pe disc Operaiile de cutare, inserare i tergere a elementelor ntr-o mulime se execut mai rapid dac elementele mulimii sunt reprezentate printr-o colecie ordonat, ca de exemplu arbori sau tabele de dispersie (hash table) Dei o relaie nu presupune ordonarea tuplurilor sale, pentru accelerarea operaiilor de cutare, inserare i tergere, se folosesc colecii ordonate Un index al unei relaii este o structur auxiliar memorat n baza de date care permite accesul rapid la tuplurile relaiei 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 relaiei, care determin localizarea tuplurilor n fiierele bazei de date zero, unul sau mai multe indexuri secundare, care nu modific localizarea tuplurilor, dar sunt folosii pentru regsirea rapida a tuplurilor dup un criteriu dat
Baze de date, 2008 Prof. Felicia Ionescu 40

Indexul primar si indexuri secundare


Indexul primar (primary index) se definete pe unul sau mai multe atribute ale relaiei i reprezint cheia (eticheta) dup care se ordoneaz tuplurile relaiei In general, sistemele SGBD definesc n mod implicit indexul primar pe cheia primar a relaiei Operaiile de interogare care se fac dupa valoarea atributului index primar se execut eficient, fiind o cautare intr-o multime ordonata dupa acea valoare
Exemplu: Care este numele angajatului cu identificatorul 2?

Operatiile de interogare care se fac dupa valoarea altor atribute (decat indexul primar) se executa mult mai ineficient, fiind o cautare intr-o multime neordonata dupa acea valoare
Exemplu: Care este adresa angajatului cu numele Ionescu ?

Pentru rezolvarea mai eficient a unor astfel de interogri se pot defini indexuri secundare pe acele atribute care intervin frecvent n interogri Un index secundar pe un atribut A al unei relaii (secondary index) este o structur care conine o mulime de perechi (v,L) ordonate dup v; fiecare pereche corespunde unui tuplu al relaiei, v este valoarea atributului A, iar L este adresa tuplului respectiv n structura indexului primar al relaiei Un index secundar nu modific adresa de memorare a unui tuplu (care este coninut n structura indexului primar), dar conine informaii care permit identificarea rapid a unui tuplu dup valoarea atributului acestui index
Baze de date, 2008 Prof. Felicia Ionescu 41

Definirea indexurilor secundare


Indexurile secundare au avantaje si dezavantaje:
Avantaje: Accelereaza operatiile de interogare care se fac dupa valoarea indexului Dezavantaje: ocupa spatiu de memorie si consuma timp la actualizarea relatiilor

n general, se recomand utilizarea unui numr ct mai mic de indexuri secundare, definite pe atributele care intervin cel mai frecvent n interogari Indexurile sunt folosite pentru mbuntirea performanelor bazelor de date i nu fac parte din modelul relaional de baz. Majoritatea sistemelor SGBD conin instruciuni pentru crearea indexurilor:
CREATE [optiuni] INDEX nume_index ON tabel (lista_atribute);

Forma exact i opiunile acestei instruciuni variaz de la un sistem SGBD la altul. Una din opiunile care se pot introduce n instruciunea CREATE INDEX este opiunea UNIQUE, care specific faptul c nu pot exista dou tupluri cu aceeai combinaie de valori ale atributelor indexului, deci acele atribute reprezint o cheie unic a relaiei. Unele sisteme SGBD adaug cte un index secundar pentru fiecare cheie unic, definit prin constrngerea UNIQUE din comanda CREATE TABLE:
ALTER TABLE angajati ADD UNIQUE INDEX Pr (Prenume);
Baze de date, 2008 Prof. Felicia Ionescu 42

Baze de date, 2008

Prof. Felicia Ionescu

43

Capitolul 3: Interogarea bazelor de date


Limbaje de interogare Algebra relationala si calculul relational Operatiile pe multimi ale algebrei relationale
Reuniunea Intersectia Diferenta Produsul Cartesian Selectia Proiectia Jonctiunea Diviziunea

Operatiile speciale ale algebrei relationale

Interogarea bazelor de date


Interogarea intr-o singura relatie Interogarea in doua sau mai multe relatii

Baze de date, 2008

Prof. Felicia Ionescu

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.
Baze de date, 2008 Prof. Felicia Ionescu 2

Algebra relationala
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

Operaiile relaionale speciale iau n consideraie compoziia tuplurilor, formate din valori ale atributelor relaiilor; acestea sunt:
Restricia Proiecia Jonciunea Diviziunea

Proprietatea de nchidere: operanzii (unul sau doi operanzi) sunt relatii, rezultatul este o relaie; aceast proprietate permite operaii imbricate: proiecia unei jonciuni etc.
Baze de date, 2008 Prof. Felicia Ionescu 3

Operatia 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 sa aiba acelasi grad (acelasi numar de atribute) Atributele corespondente (in ordine pozitionala) sa fie compatibile

Tuplurile care aparin ambelor relaii se introduc n relaia rezultat o singur dat (nu se duplic) Relatia rezultat are un numar de tupluri (cardinalitatea) mai mic sau egal cu suma numerelor de tupluri ale celor doi operanzi Exemplu: A B 1 2 1 r
Baze de date, 2008 Prof. Felicia Ionescu

B 2 3 s

B 1 2 1 3
4

rs

Operatiile de Intersectie si Diferenta


Intersectia (set-intersection) a dou relaii 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 s 2 3 2

rs

r Diferenta (set-difference) a dou relaii compatibile r(R) i s(S): q = r - s = { t | t r and t s} Exemplu: A 1 2 1 B A s B 2 3 A 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
Baze de date, 2008 Prof. Felicia Ionescu 5

Operatia de Produs Cartesian


Produsul cartesian (Cartesian-Product) a dou relaii r(R) i s(S): q = r x s = { tp | t r and p s}, Q = R S Se presupune ca multimile R si S sunt disjuncte, adica R S = Daca atributele din R si S nu sunt disjuncte, atunci (unele):
se pot redenumi (RENAME nume_atribut AS noul_nume_atribut) sau se pot califica cu numele relatiei careia ii apartin (folosind operatorul punct)

Tuplurile relaiei rezultat se obtin prin concatenarea valorilor atributelor fiecrui tuplu din prima relaie cu valorile atributelor tuturor tuplurilor din a doua relaie Relatia rezultata are numarul de tupluri (cardinalitatea) egal cu produsul numarului de tupluri ale relatiilor operand A B C D E Exemplu: C D E A B 1 10 a 10 a 1 10 a 1 10 a 1 20 b 2 20 b 1 10 b r 10 b 2 10 a 2 10 a s 2 20 b 2 10 b rxs Baze de date, 2008 Prof. Felicia Ionescu 6

Exprimarea operatiilor pe multimi in SQL (1)


Reuniunea:
SELECT lista_coloane1 FROM tabel1 [WHERE condiie1] UNION SELECT lista_coloane2 FROM tabel2 [WHERE condiie2];

Exemplu (MySQL, Intreprindere):


SELECT Nume, Prenume, Adresa FROM FURNIZORI UNION SELECT Nume, Prenume, Adresa FROM CLIENTI; Afiseaza numele tuturor furnizorilor si al clientilor, precum si adresa acestora

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];

Baze de date, 2008

Prof. Felicia Ionescu

Exprimarea operatiilor pe multimi in SQL (2)


Produsul Cartesian:
SELECT * from R, S; SELECT lista_col_R, lista_col_S from R, S; Exemplu (MySQL, Intreprindere): SELECT * FROM ANGAJATI, SECTII; SELECT IdAngajat, Nume, Prenume, DataNasterii, Adresa, Functia, Salariu, ANGAJATI.IdSectie, SECTII.IdSectie, Denumire, Buget FROM ANGAJATI, SECTII;

Produsul Cartesian este implementat in toate SGBD-urile (instructiunea SQL SELECT) In sistemul Oracle sunt implementate toate operatiile pe multimi In alte SGBD-uri nu sunt implementate toate operaiile pe mulimi; in SQL Server 2000 si in MySQL 5.0 nu sunt implementate operaiile INTERSECT i MINUS
Baze de date, 2008 Prof. Felicia Ionescu 8

Operatia de Selectie
Selectia (sau restrictia select, restriction) intr-o relatie r(R) - definita astfel:

p(r) = {t | t r and p(t)}


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> <atribut> op op <atribut> sau <constanta>, unde

op este un operator de comparatie: =, , >, . <. Tuplul t este selectat (introdus in rezultat) daca p(t)=TRUE

In limbajul SQL:
SELECT * FROM tabel WHERE p; n termenii folosii n limbajul SQL, restricia 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;
Baze de date, 2008 Prof. Felicia Ionescu 9

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 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: A B 10 20 30 40 C 1 1 1 2 A C 1 1 1 2 = A C 1 1 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

Operatia de jonctiune naturala (1)


Jonctiunea naturala (natural join) combina tuplurile din doua relatii Fie multimile de atribute: A = {A1,A2,...Am} , B= {B1,B2,...Bn}, C={C1,C2,Ck} si doua relatii r(R) si s(S), unde:
R ={A, B}, S = {B, C} deci atributele R S = B = {B1, B2,...Bn} sunt comune celor dou relaii

Jonciunea natural este o relatie q = r >< s, care se obine n felul urmtor:


se calculeaz produsul cartesian al celor doua relatii: p = r x s, P = {A, R.B, S.B, 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,.. se face proiectia rezultatului pe multimea de atribute R S = {A, B, C}

Schema relatiei rezultat este Q = R S = {A, B, C} q = r >< s = A,B,C (r.B1=s.B1 AND r.B2=s.B2 AND r.Bn = s.Bn) (r x s) 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 jonctiune naturala (2)


Exemplul 1: r >< s = A,B,C,D,E (r.D = s.D ) (r x s)
A B 1 2 4 1 2 C D a a b a b D a b c d e E A B 1 2 4 1 2 C D E a a b a b s r r >< s In SQL trebuie sa fie introduse explicit lista atributelor rezultatului si conditiile de egalitate ale atributelor comune:

SELECT A,B,C,D,E FROM R, S WHERE R.D = S.D;

Exemplul 2: ANGAJATI >< SECTII; cheia straina: ANGAJATI.IdSectie


SELECT IdAngajat, Nume, Prenume, DataNasterii, Adresa, Functia, Salariul, ANGAJATI.IdSectie, Denumire, Buget FROM ANGAJATI, SECTII WHERE ANGAJATI.IdSectie=SECTII.IdSectie;

Exemplul 3: (MySQL - SAKILA) city >< country; cheia straina: city.country_id


SELECT city_id, city, city.country_id, city.last_update, country, country.last_update from city, country where city.country_id=country.country_id order by city;
Baze de date, 2008 Prof. Felicia Ionescu 12

Operatia de diviziune
Fie relatiile r(R) si s(S), unde:
R = {A, B} unde A={A1,A2,..Am}, B={ B1,B2,..Bn} S = {B}

Relaia q = r s are schema Q = R S = {A} si: r s = { t | t R-S (r) u s ( tu r ) }


unde tu inseamna concatenarea tuplurilor t si u

n limbajul SQL, diviziunea se exprim printr-o instruciune SELECT, introducnd explicit toate conditiile impuse valorilor atributelor Exemplu: A B A B


r
Baze de date, 2008

1 2 3 1 2 1 3

1 2 s


rs

Prof. Felicia Ionescu

13

Concluzii: operatiile algebrei relationale


Algebra relaional este o colecie de operaii asupra relaiilor Cele opt operaii propuse de E.F.Codd nu constituie o mulime minim de operaii ale algebrei relaionale Mulimea minim de operaii ale algebrei relaionale consta din cinci operaii primitive, pe baza crora se poate construi orice expresie de algebra relaionala:
Reuniunea Diferena Produsul Cartesian Restricia (selectia) Proiecia

Celelalte operaii se pot exprima prin intermediul acestora:


Intersecia se poate exprima prin expresia: R S = R (R S); Jonciunea este o proiecie a unei restricii a produsului cartezian al relaiilor; Diviziunea este o proiecie a unei restricii asupra relaiei demprit

Si celelalte trei operaii sunt deosebit de utile n formularea interogrilor, astfel nct algebra relaional a pstrat toate cele opt operaii propuse de E.F.Codd, la care s-a adugat operaia de redenumire a atributelor

Baze de date, 2008

Prof. Felicia Ionescu

14

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

Sistemul SGBD prelucreaza programul interogarii n mai multe faze:


analiza lexical, sintactic i semantic optimizarea interogarii generarea codului executia si returnarea rezultatului

n algebra relaional o interogare se formuleaz printr-o expresie care defineste urmtoarele elemente:
Lista atributelor relaiei rezultat, care se numesc atribute de proiecie; Lista relaiilor din care se extrag informaiile Condiiile pe care trebuie s le ndeplineasc tuplurile relaiei rezultat.

Sunt posibile dou situaii:


interogri care se rezolv n cadrul unei singure relaii interogri care se rezolv folosind dou sau mai multe relaii ale bazei de date
Baze de date, 2008 Prof. Felicia Ionescu 15

Interogari intr-o singura relatie


Interogare in relatia r(R):
Expresia de algebra relationala: q = lista_atribute p(r) Instructiunea SQL: SELECT lista_atribute FROM R WHERE p = TRUE;

Exemplul 1: Fie relaia ANGAJATI i interogarea: Care sunt numele i prenumele angajailor care au un salariu mai mare sau egal cu 2000?.
Expresia de algebr relaional: q = Nume, Prenume Salariul >= 2000 (ANGAJATI) Instruciunea SQL: SELECT Nume, Prenume, Salariul FROM ANGAJATI WHERE Salariul >= 2000;

Exemplul 2: (MySQL - WORLD): Care sunt numele si populatia oraselor din tara cu codul ROM ?
Expresia de algebr relaional: q = Name, Population country_id=ROM (city) Instructiunea SQL: SELECT Name, CountryCode, Population FROM city WHERE CountryCode=ROM';

Exemplul 3: Fie relaia ANGAJATI i interogarea: Care sunt numele, prenumele si adresa angajailor care lucreaza in sectia numarul 1?.
Expresia de algebr relaional: q = Nume, Prenume, Salariul IdSectie = 1 (ANGAJATI) Instructiunea SQL: SELECT Nume, Prenume, Adresa FROM ANGAJATI WHERE IdSectie=1;
Baze de date, 2008 Prof. Felicia Ionescu 16

Interogari in doua sau mai multe relatii


Daca atributele de proiecie i atributele din condiia de interogare nu aparin unei singure relaii, pentru rezolvarea interogrii trebuie s fie folosite toate acele relaiile care, mpreun, conin aceste atribute Conceptual, o astfel de interogare se rezolv astfel:
se construieste mai nti o relaie care s conin toate atributele implicate prin combinarea relaiilor necesare, folosind operaii de produs cartezian sau jonciuni; in relatia obtinuta se aplica o selectie (restrictie) (cu condiia de interogare p); apoi se face proiecia (pe atributele de proiecie).

Expresia generala de algebra relationala a interogarii este: q = lista_atribute p(r x s x t...) Daca intre relatiile din produsul cartesian exista atribute comune care trebuie sa aiba valori egale (de regula, perechile cheie strin - cheie candidata) atunci se vor face operaii de jonciune: q = lista_atribute p AND conditii-join(r >< s >< t...) In limbajul SQL, o interogare se exprima prin forma generala a instructiunii SELECT, in care clauza WHERE combina atat conditiile impuse valorilor atributelor (predicatul p) cat si conditiile de jonctiune naturala (egalitatea valorilor atributelor comune)
Baze de date, 2008 Prof. Felicia Ionescu 17

Exemplu: interogare in doua relatii


Fie interogarea: Care sunt numele, prenumele, funcia, salariul i denumirea seciei n care lucreaz angajaii? Expresia de algebr relaional este: q = Nume, Prenume, Functia, Salariul, Denumire (ANGAJATI >< SECTII) Instructiunea SQL corespunzatoare acestei interogri:
SELECT Nume, Prenume, Functia, Salariul FROM ANGAJATI, SECTII WHERE SECTII.IdSectie = ANGAJATI.IdSectie

Se efectueaza o navigare n baza de date, pe atributul comun (IdSectie)


ANGAJATI
IdAngajat Nume Prenume DataNasterii Adresa Salariul IdSectie

SECTII
Buget Denumire IdSectie

Fie interogarea: Care sunt numele, prenumele, funcia i salariul angajailor care lucreaz n secia 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; Prof. Felicia Ionescu

Baze de date, 2008

18

Exemplu: interogare in trei relatii (1)


Fie urmatoarele relatii asociate din baza de date SAKILA (MySQL):
film (film_id, title, description, release_year, ....) category (category_id, name, last_update) film_category (film_id, category_id, last_update)
film 1 N film_category N 1 category

Interogarea: Care sunt titlul (film.title) si categoria(category.name) filmelor din baza de date sakila ? q = title,name (film >< film_category >< category) Instructiunea SQL:
SELECT title, name FROM film, film_category, category WHERE film.film_id=film_category.film_id AND category.category_id= film_category.category_id;

Baze de date, 2008

Prof. Felicia Ionescu

19

Exemplu: interogare in trei relatii (2)


Detalierea interogarii: Care sunt titlurile filmelor, numele categoriei (name) i anul lansrii (release_year) pentru cele din categoria actiune (Action)? Care sunt filmele (film_id, title, description etc) i category_id acestora?
q1(Q1) = film >< film_category unde Q1 ={film_id, title, description, release_year, ...., category_id, last_update} Atributul comun pe care s-a efectuat jonctiunea este scris ingrosat (bold)

Care sunt filmele si numele categoriei (name) acestora?


q2(Q2) = q1 >< category = film >< film_category >< category unde Q2 = {film_id, title, description, release_year, ...., category_id, film_category.last_update, name, category.last_update}

Care sunt titlurile filmelor, numele categoriei i anul lansrii filmelor din categoria Action? q(Q) = name = Action (q2) = name = Action (film >< film_category >< category ) Instructiunea SQL:
SELECT title, name, release_year FROM film, film_category, category WHERE film.film_id = film_category.film_id AND film_category.category_id = category.category_id AND name = Action;
Baze de date, 2008 Prof. Felicia Ionescu 20

Baze de date, 2008

Prof. Felicia Ionescu

21

Capitolul 4: Dezvoltarea sistemelor de baze de date


Fazele de dezvoltare a bazelor de date
Colectarea si analiza cerintelor Proiectarea bazelor de date
Proiectarea conceptuala a bazelor de date Alegerea unui SGBD Proiectarea logica a bazelor de date Proiectarea fizica a bazelor de date

Implementarea bazelor de date

Dezvoltarea aplicatiilor de baze de date


Limbaje procedurale de extensie a limbajului SQL
Limbajul Transact-SQL Cursoare, proceduri stocate, functii, triggere

Limbajul SQL integrat (Embeded SQL) Interfete de programare a aplicatiilor de baze de date
Interfata ODBC Interfata JDBC
Baze de date, 2008 Prof. Felicia Ionescu 1

Dezvoltarea sistemelor de baze de date (1)


Sistemul informatic (information system) al unei organizatii include toate resursele acelei organizaii care sunt implicate n colectarea, administrarea, utilizarea i diseminarea informaiilor Sistemele informatice:
Pana in anii 1970 erau sisteme de fiiere (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 protecia 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 aplicaiilor 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 definiiile obiectelor bazei de date (tabele, vederi, etc.) i se implementeaz aplicaiile software Testarea i validarea: noul sistem de baze de date este testat i validat ct 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

Dezvoltarea sistemelor de baze de date (2)


Fazele importante de dezvoltare a sistemelor de baze de date sunt:
Faza 1: Colectarea i analiza cerinelor Faza 2: Proiectare conceptual Faza 3: Alegerea unui SGBD Faza 4: Proiectare logic Faza 5: Proiectare fizic Faza 6: Implementare Proiectarea schemei conceptuale i a schemelor externe (dependente de SGBD) Proiectarea schemei interne (dependent de SGBD) Instruciuni de descriere a datelor (LDD) (dependente de SGBD) Testarea datelor Prof. Felicia Ionescu Implementarea tranzaciilor (dependente de SGBD) Testarea tranzactiilor 3 Proiectarea tranzaciilor (dependente de SGBD) Cerine de date Cerine de prelucrare Proiectarea tranzaciilor (independente de SGBD)

Proiectarea schemei conceptuale i a schemelor externe (independente de SGBD)

Faza 7: Testare si validare Baze de date, 2008

Colectarea si analiza cerintelor


nainte de a se proiecta efectiv o baz de date (in cadrul unui sistem informatic sistem de baze de date), este necesar s se cunoasc:
ce rezultate se ateapt utilizatorii poteniali s obin de la baza de date respectiv ce informaii primare sunt disponibile pentru acestea ce aplicaii se vor executa (aplicaii de gestiune a stocurilor, aplicaii contabile, aplicaii de urmrire a consumurilor, aplicaii de salarizare, etc.).

Toate acestea sunt informaii slab structurate, n general n limbaj natural, pe baza crora 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

Baze de date, 2008

Prof. Felicia Ionescu

Proiectarea conceptuala a bazelor de date


Proiectarea bazelor de date:
Proiectarea schemei conceptuale a bazei de date Proiectarea schemelor externe (vederi ale urilizatorilor) Proiectarea tranzactiilor

Dependenta proiectarii de SGBD-ul folosit:


Proiectarea schemei conceptuale si a schemelor externe independente de SGBD (scheme conceptuale de nivel inalt) si a tranzactiilor independente de SGBD Proiectarea schemei conceptuale si a schemelor externe dependente de SGBD (scheme logice) si a tranzactiilor dependente de SGBD

Este recomandabil s se proiecteze mai nti schema conceptual de nivel nalt independent de SGBD, care este o descriere stabil a bazei de date Definirea schemei conceptuale:
proiectare prin integrarea cerinelor 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
Baze de date, 2008 Prof. Felicia Ionescu 5

Exemplu de proiectare a unei baze de date


Baza de date INTREPRINDERE cu multimile de entitati puternice:
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 N ANGAJATI 1
d

PROIECTE ACTIVITATI M N ACHIZITII P

COMPONENTE COMPOZITII M N
M

N PRODUSE VANZARI P M N

N DEPENDENTI Baze de date, 2008 INGINERI SECRETARE Prof. Felicia Ionescu FURNIZORI

CLIENTI 6

Alegerea unui SGBD


Factori pentru alegerea unui SGBD: tehnici, economici i administrativi Factorii tehnici:
Modelul de date (ierarhic, reea, relaional, obiect-orientat, obiect-relaional) Capacitatea de stocare a datelor Posibilitile de control al concurenei i de refacere a datelor Configuraia hardware-software necesar Cerine de dezvoltare a programelor de aplicaii (limbaje, compilatoare etc.)

Factorii economici i administrativi:


Costul de achiziie a software-ului, care include costul de baz, la care se adaug diferite opiuni (opiuni de salvare-refacere, documentaie, limbaje i interfee de programare, drivere, etc.) Costul de ntreinere, pentru a obine serviciul furnizorului de meninere la zi a versiunii SGBD. Costul de pregtire a personalului se refer la cursurile care se organizeaz pentru persoanele care se ocup cu ntreinerea i operarea sistemului Cunotinele de programare a personalului ntr-un anumit SGBD

Beneficiile achiziionrii unui anumit SGBD nu sunt uor de apreciat sau de msurat, dar analiza raportului cost-performane poate da o imagine a rezultatelor obinute
Baze de date, 2008 Prof. Felicia Ionescu 7

Proiectarea logica a bazelor de date


Se porneste de la schema conceptual i schemele externe de nivel nalt independente de SGBD (diagrama E-A), si se realizeaz schema logica (diagrama logica) si schemele (vederile) externe pentru sistemul SGBD ales Proiectarea logic poate fi realizat n dou subfaze:
Transpunerea schemei logice n modelul de date al sistemului SGBD ales, dar independent de sistemul de gestiune propriu-zis Rafinarea schemei logice i a schemelor externe obinute anterior, astfel nct s se utilizeze ct mai multe din facilitile oferite de sistemul SGBD ales (modul de generare a cheilor primare, definirea constrngerilor, etc.)

Transpunerea modelului Entitate-Asociere (diagrama E-A) n model relaional:


Proiectarea relaiilor corespunztoare mulimilor de entiti din diagrama E-A Proiectarea asocierilor; asocierile se pot reprezenta prin chei strine sau prin relaii de asociere; acestea sunt relaii suplimentare care se adaug n schema conceptual a bazei de date relaionale pentru a reprezenta asocierile M:N

In mod frecvent, etapele de proiectare conceptuala si proiectare logica se efectueaza impreuna, proiecatand schema (diagrama) logica a bazei de date cu ajutorul toolset-urilor de dezvoltare oferite de SGBD-ul utilizat
Baze de date, 2008 Prof. Felicia Ionescu 8

Diagrama logica a bazei de date INTREPRINDERE (1)


Dezvoltata in Microsoft Access

Baze de date, 2008

Prof. Felicia Ionescu

Diagrama logica a bazei de date INTREPRINDERE (2)


Dezvoltata in MySQL Workbench

Baze de date, 2008

Prof. Felicia Ionescu

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)

Cheia primar a relaiei dependente poate fi:


o combinaie format din atributul cheie strin i alte atribute care asigur posibilitatea de identificare unic a unui tuplu sau poate fi o cheie artificial. De ex: (IdAngajat, Nume, Prenume ) sau o cheie primara artificiala (de ex. idDependenti) Baze de date, 2008 Prof. Felicia Ionescu 11

Proiectarea asocierilor (1)


Asocierea binar 1: N dintre dou mulimi de entiti puternice se realizeaza prin intermediul unei chei strine n a doua relaie (cea cu multiplicitatea N a asocierii) care refer cheia primar din prima relaie
De exemplu, asocierea 1:N ntre relaiile SECTII ANGAJATI se realizeaz prin cheia strin IdSecie din relatia ANGAJATI

Asocierea binar 1: N intre relaia corespunztoare unei mulimi de entiti puternice si relatia corespunztoare unei mulimi de entiti slabe se realizeaza la fel, printr-o cheie straina in relatia multimii de entitati slabe Asocierea binar M:N dintre dou mulimi de entiti se realizeaza cu o noua relaie, numit relaie de asociere Aceasta are rapoartele de multiplicitate M :1, respectiv N :1 cu fiecare din cele dou relaii date, prin intermediul a dou chei strine Cheia primar a unei relaii de asociere poate fi:
o cheie primara artificial sau poate fi compus din cheile strine, mpreun cu alte atribute ale relaiei

Exemplu: asocierea M:N dintre relaiile COMPONENTE-PRODUSE se realizeaza cu o relaie de asociere, numit COMPOZITII
Relatia COMPOZITII contine cheile strine IdComponenta i IdProdus Cheia primar a relaiei COMPOZITII poate fi compus din cheile strine IdComponenta i IdProdus sau poate fi o cheie artificiala (IdCompozitii)
Baze de date, 2008 Prof. Felicia Ionescu 12

Proiectarea asocierilor (2)


Asocierea binar 1:1 ntre dou mulimi de entiti puternice se poate transpune n modelul relaional n dou moduri:
fie prin intermediul unei chei strine (caz particular al asocierii 1:N), fie printr-o relaie de asociere (caz particular al unei asocierii M:N).

Exemplu: intre relaiile SOTI, SOTII, se realizeaza o asociere 1:1 cu o cheie straina introdusa intr-una dintre relatii:
SOTI (IdSoti, Nume, Prenume, DataNasterii, Adresa) SOTII (IdSotii,Nume, Prenume, DataNasterii, Adresa, IdSoti)

Realizarea asocierii 1:1 ntre dou relaii folosind o relatie de asociere


De exemplu: CASATORII(IdSot, IdSotie, DataCasatoriei)

Asocierea binar 1:1 dintre o mulime de entiti de subtip i mulimea de entiti supertip este tot o asociere1:1 ntre relaiile corespunztoare Se realizeaza prin definirea n relaia corespunztoare subtipului de entitati a unei chei strine, care este n acelai timp i cheie primar
De exemplu: INGINERI(IdAngajat, Specialiatea)

Exemple de date in tabele asociate


Baze de date, 2008 Prof. Felicia Ionescu 13

Proiectarea asocierilor (3)


Asocierea multipl M:N:P:. se realizeaz la fel ca asocierea binar, prin intermediul unei noi relaii care se afl n asociere M:1, N:1, P:1, etc, cu fiecare din relaiile date. Pentru aceasta, in relatia de asociere se introduc chei straine care refera relatiile care se asociaza, fiecare cheie strin referind cheia primar dintr-una din relaiile asociate. Cheia primar a unei relaii de asociere multipl poate fi:
o cheie primara artificial sau poate fi compus din toate cheile strine, eventual mpreun cu alte atribute De exemplu: asocierea ntre relaiile COMPONENTE, FURNIZORI, ANGAJATI se realizeaza prin relatia ACHIZITII (IdComponenta, IdFurnizor, IdAngajat, Data, NrComponente, PretUnitar)

In concluzie, n modelul relaional toate asocierile se realizeaz prin chei strine Proiectare directa (forward engineering): se proiecteaza schema logica, se exporta un script, care se poate executa si se obtine baza de date Proiectare inversa (reverse engineering): se creeaza baza de date (de exemplu, in Msql Query Browser), se genereaza scriptul (cu comanda mysqldump u root p database_name > script_name.sql), se importa scriptul (de ex. in Msql Workbench), care va desena diagrama logica a bazei de date
Baze de date, 2008 Prof. Felicia Ionescu 14

Proiectarea relatiilor normalizate in prima forma normala


O relaie este normalizat n prima form normal (FN1) dac fiecare atribut ia numai valori atomice i scalare din domeniul su de definiie. O situaie frecvent ntlnit este aceea n care un atribut poate lua mai multe valori pentru fiecare entitate
De exemplu, n mulimea de entiti PERSOANE (Nume, Prenume, Adresa, NrTelefon) atributul NrTelefon poate lua mai multe valori (numrul telefonului de acas, al telefonului de la birou, al telefonului mobil, etc)

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)

Exemple de date in tabele cu diferite tipuri de asocieri


Baze de date, 2008 Prof. Felicia Ionescu 15

Proiectarea fizica a bazelor de date


Fiecare SGBD ofer o varietate de opiuni de organizare a fiierelor i a modului de acces la datele stocate:
indexuri tipuri de fisiere gruparea nregistrrilor corelate n aceleai blocuri pe disc (clustering)

Proiectarea fizic a bazei de date este procesul de alegere a acestor structuri de memorare i de acces la fiierele bazei de date, pentru a obine performane ct mai bune pentru SGBD-ul ales, pentru ct mai multe din aplicaiile proiectate Parametrii generali de alegere a opiunilor proiectului fizic al bazei de date:
Timpul de rspuns: intervalul de timp dintre lansarea n execuie a unei tranzacii i primirea rspunsului la acea tranzacii Utilizarea spaiului de memorare: dimensiunea spaiului pe disc utilizat de fiierele bazei de date i de structurile de acces la date Capacitatea tranzacional (transaction throughput): numrul mediu de tranzacii care pot fi prelucrate pe minut de ctre sistemul de baze de date

Baze de date, 2008

Prof. Felicia Ionescu

16

Implementarea bazelor de date


n faza de implementare a bazelor de date relaionale:
Se creeaz obiectele principale ale bazei de date (tabele, vederi, indexuri), pe baza proiectului logic i a proiectului fizic, folosind limbajul de descriere a datelor (LDD) oferit de sistemul SGBD ales, sau toolset-uri grafice (de ex. table editor) sau prin executia scriptului generat de un toolset de proiectare Se implementeaz procedurile care asigur verificarea i forarea tuturor constrngerilor explicite (aseriuni, dependene de date care nu sunt determinate de chei ale relaiilor), a cror previziune i documentare a fost realizat n faza de proiectare logic a bazei de date Se populeaza baza de date cu informatii obinute prin conversia unor date existente sub form de fiiere sau introduse direct n tabele

Tot n aceast faz programatorii de aplicaii implementeaz, pe baza specificaiilor conceptuale ale tranzaciilor, programele de aplicaii, n diferite tehnologii de programare disponibile (limbaje procedurale de extensie a limbajului SQL, limbajul SQL integrat, interfee i biblioteci de programare) Dup crearea i popularea bazei de date i implementarea programelor de aplicaii se poate trece la etapa de testare si operare a sistemului de baze de date, n paralel cu monitorizarea i ntreinerea acestuia
Baze de date, 2008 Prof. Felicia Ionescu 17

Dezvoltarea aplicatiilor de baze de date


Aplicaiile de baze asigura:
interfaa (grafic) cu utilizatorii implementarea algoritmilor de calcul necesari interfaa cu sistemele de gestiune a bazelor de date
Aplicatie de baza de date Utilizatori
Limbajul SQL integrat (Embeded SQL) Interfete de programare a aplicatiilor (API) Instr. SQL

SGBD
Limbajul SQL Extensii procedurale ale limbajului SQL

Rezultate

Limbajul SQL, folosit in SGBD-uri este un limbaj neprocedural, adica nu prevede instruciuni de control al ordinii de execuie a operaiilor De aceea SGBD-urile mai folosesc si extensii procedurale a limbajului SQL:
PL/SQL in sistemele Oracle, PL/PLGSQL in sistemele PostGreSQL Transact-SQL in sistemele Microsoft SQL Server Extensie SQL in MySQL (asemanatoare cu Transact SQL) etc.

Aplicatiile de baze de date folosesc:


Limbajul SQL integrat intr-un limbaj de nivel inalt (Embeded SQL) Interfete de programare a aplicatiilor (API) (call level interface)
Baze de date, 2008 Prof. Felicia Ionescu 18

Limbaje procedurale de extensie a SQL


Extensiile procedurale ale limbajului SQL:
combin instruciuni SQL cu instruciuni pentru controlul ordinii de execuie (bucle while, instruciuni condiionale if etc.) ofera suport de crearea cursoarelor, a procedurilor stocate, a funciilor definite de utilizator i a declanatorilor (triggere)

Un cursor (cursor) este o structur care permite memorarea (intr-un buffer n memorie) a unei mulimi de linii returnate de o instruciune de interogare, urmata de extragerea si prelucrarea (eventual repetata) in programele de aplicatii a fiecarei linii (sau a unui grup de linii) Cursoarele se pot crea folosind:
Limbajul SQL sau extensiile procedurale ale acestuia Limbajul SQL integrat (Embedded SQL) Interfeele si bibliotecile de programare a aplicaiilor (ODBC, JDBC)

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;
Baze de date, 2008 Prof. Felicia Ionescu 19

Cursoare
Cursoarele pot fi memorate:
la server, iar clientul primete cte o linie (sau un grup de linii) de la server la fiecare instruciune de extragere la client i liniile sunt folosite direct n programul respectiv

Cursoarele create prin intermediul limbajului SQL (sau a unei extensii a acestuia) sunt cursoare la server i pot fi definite in funcii i proceduri stocate in server Prin intermediul interfeelor de programare se pot defini att cursoare la server ct i cursoare la client In general, cursoarele la server sunt mai avantajoase dect cursoarele la client, deoarece cursoarele la client necesit ca ntreaga mulime de linii rezultat s fie transferat dintr-o dat de la server la client, chiar dac ulterior, din diferite cauze, clientul nu va folosi dect o parte din liniile pe care le-a primit prin reea i le-a memorat

Baze de date, 2008

Prof. Felicia Ionescu

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

Parametrii pot fi de intrare (IN), de iesire (OUT) sau de intrare-iesire (INOUT); apelul unei proceduri stocate de ctre un client (aplicaie) produce execuia de catre SGBD a tuturor instruciunilor procedurii i returnarea rezultatrlor in parametrii OUT si INOUT Avantaje - imbunatatirea performantelor sistemului prin:
Scaderea comunicaiei ntre aplicaie i serverul bazei de date Scaderea timpului de execuie 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 aplicaii executa operaiile de prelucrare pe server prin intermediul procedurilor stocate
Baze de date, 2008 Prof. Felicia Ionescu 21

Functii definite de utilizator


O funcie definit de utilizator (user-defined function) este o funcie memorat in baza de date, la fel ca o procedur stocat O funcie are numai parametri de intrare, returneaz ntotdeauna o valoare i poate fi folosit direct n expresii (o procedur stocat poate s returneze zero, una sau mai multe valori prin parametrii de tip OUT sau INOUT) Functiile se definesc folosind extensiile procedurale ale limbajului SQL:
In Transact-SQL: CREATE FUNCTION nume_func [parametri] AS instructiune In PL/SQL (Oracle): CREATE FUNCTION nume_func [parametri] AS instructiune In MySQL: CREATE FUNCTION nume_func [parametri] instructiune_compusa

Exemplu de creare a unei functii in MySQL:


DELIMITER $$ DROP FUNCTION IF EXISTS Func_Media$$ CREATE FUNCTION Func_Media(disc varchar(4)) RETURNS float BEGIN DECLARE nota_medie float; SELECT AVG(nota) INTO nota_medie FROM DISCIPLINE, EXAMENE WHERE DISCIPLINE.idDiscipline = EXAMENE.idDiscipline AND Acronim = disc; RETURN nota_medie; END$$ DELIMITER ;

Utilizarea intr-o expresie: select Func_Media('PBD')*2;


Baze de date, 2008 Prof. Felicia Ionescu 22

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.

Baze de date, 2008

Prof. Felicia Ionescu

23

Domenii si variabile locale


Domenii locale: proceduri stocate, functii, triggere, blocuri (delimitate prin instructiunile: BEGIN ... END); un bloc este considerat o instructiune compusa Variabilele locale sunt folosite pentru stocarea in memorie a unor valori care pot fi testate sau modificate (ca n orice alt limbaj) i, n plus, pentru transferul datelor ctre i de la tabelele bazei de date Variabilele locale au ca domeniu de definiie blocul procedura, functia sau trigger-ul n care au fost declarate O variabil local se declar si se initializeaza diferit de la un SGBD la altul. De exemplu:
in Transact SQL: in PL/SQL (Oracle): in MySQL: DECLARE @contor INT SELECT @contor = 0 DECLARE CONTOR := 1; DECLARE contor INT; SET contor = 0; REPEAT...UNTIL WHILE BREAK CONTINUE FOR

Ordinea de execuie a instruciunilor este controlat prin instruciuni ca:


BEGIN...END GOTO IF...ELSE RETURN
Baze de date, 2008

Prof. Felicia Ionescu

24

Instructiuni SQL extinse


Extensiile procedurale definesc clauze suplimentare in instructiunile SQL, astfel nct acestea s poat fi folosite n combinaie cu variabilele locale De exemplu - instruciunea SELECT prin care se incarca valori ale unor atribute selectate din baza de date in variabile locale:
In Transact-SQL: In PL/SQL (Oracle): In MySQL: SELECT @var1 = col1, @var2 = col2, ... @varn = coln FROM lista_tabele WHERE conditie SELECT lista_coloane INTO lista_variabile FROM lista_tabele [WHERE conditie] [optiuni] SELECT lista_coloane INTO lista_variabile FROM lista_tabele [WHERE conditie] [optiuni]

Astfel de instruciuni sunt utile pentru interogrile care returneaz o singur linie, deoarece variabilele locale sunt setate cu valorile atributelor din prima linie a rezultatului, iar valorile din celelalte linii se pierd. De ex. (in MySQL):
DECLARE id_angajat int; DECLARE s_nume, s_prenume varchar(20); SET id_angajat = 5; SELECT Nume, Prenume INTO s_nume, s_prenume FROM ANGAJATI WHERE IdAngajat = id_angajat

Atunci cnd o interogare returneaz o mulime de linii, se foloseste un cursor Variabilele locale mai pot fi folosite n clauza WHERE a instructiunii SELECT precum si in instructiunile INSERT sau UPDATE (ca valori introduse)
Baze de date, 2008 Prof. Felicia Ionescu 25

Exemplu: Procedura stocata in MySQL


Folosim tabelele: Studenti, Examene, Discipline:

Procedura stocata: Calculul mediei notelor la o disciplina data:


DELIMITER $$ /* se redefineste delimitatorul deoarece ; este obligatoriu intre instr. din blocuri */ DROP PROCEDURE IF EXISTS SP_Media $$ CREATE PROCEDURE SP_Media (OUT media float, IN disciplina varchar(4)) BEGIN SELECT AVG(nota) INTO media FROM DISCIPLINE, EXAMENE WHERE DISCIPLINE.idDiscipline = EXAMENE.idDiscipline AND Acronim = disciplina; END$$ DELIMITER ;

Apelul procedurii:
call SP_Media(@media, 'PBD'); /* o variabila precedata de @ este implicit locala */ select @media;
Baze de date, 2008 Prof. Felicia Ionescu 26

Exemplu: Cursor intr-o procedura stocata MySQL (1)


Procedura: Calculul mediei unui student dat (nume, prenume)
DELIMITER $$ DROP PROCEDURE IF EXISTS Medii_Studenti $$ CREATE PROCEDURE Medii_Studenti(OUT media float, IN s_nume varchar(20), IN s_prenume varchar(20)) BEGIN DECLARE done INT DEFAULT 0; DECLARE student, id_student INT; /*Crearea cursorului*/ DECLARE cursor_examene CURSOR FOR SELECT idStudenti, avg(nota) FROM EXAMENE GROUP BY idStudenti; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; SELECT idStudenti INTO student FROM STUDENTI WHERE Nume = s_nume AND Prenume = s_prenume; OPEN cursor_examene; REPEAT FETCH cursor_examene INTO id_student, media; UNTIL done = 1 OR id_student = student END REPEAT; CLOSE cursor_examene; END$$ DELIMITER ;
Baze de date, 2008 Prof. Felicia Ionescu 27

Exemplu: Cursor intr-o procedura stocata MySQL (2)


Pentru parcurgerea liniilor cursorului se defineste un handler pentru conditia de terminare a parcurgerii liniilor cursorului (not found); un handler este un fel de rutina de tratare a exceptiilor Apelul procedurii:
SET @nume = 'Popescu', @prenume = 'Marius'; call Medii_Studenti(@media, 'Popescu', 'Marius'); select @nume, @prenume, @media;

Se obtine rezultatul:

@nume Popescu

@prenume Marius

@media 6.5

Parcurgerea liniilor cursorului se poate face si cu instructiunea while:


FETCH cursor_examene INTO id_student, media; WHILE done = 0 AND id_student <> student DO FETCH cursor_examene INTO id_student, media; END WHILE;

Declararea unei variabile locale (cu instructiunea DECLARE) se poate face numai intr-un bloc BEGIN ... END si numai la inceputul acestuia Declaratiile trebuie sa fie facute intr-o anumita ordine: cursoarele se declara inaintea declararii handler-elor, iar variabilele locale inaintea declararii cursoarelor si a handler-elor
Baze de date, 2008 Prof. Felicia Ionescu 28

Exemplu: trigger in MySQL


Se defineste un trigger care genereaza coloana nota in tabelul examene_2(idExamene, idDiscipline, notaLab, notaExam, nota):
DELIMITER $$ DROP TRIGGER IF EXISTS calcul_nota $$ CREATE TRIGGER calcul_nota BEFORE UPDATE ON `examene_2` FOR EACH ROW BEGIN SET NEW.nota = NEW.notaLab + NEW.notaExam; END; $$ DELIMITER ;

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).
Baze de date, 2008 Prof. Felicia Ionescu 29

Limbajul SQL integrat (Embeded SQL)


n limbajul SQL integrat (Embeded SQL) instruciunile limbajului SQL sunt incluse direct n codul programului surs scris ntr-un limbaj gazd de nivel nalt (Ada, PL/1, Pascal, Fortran, Cobol, C) Controlul fluxului de operaii este realizat prin instruciunile limbajului gazd, iar operaiile cu baza de date sunt realizate prin instruciuni SQL Instruciunile SQL integrate n programul scris n limbajul gazd sunt prelucrate de un instrument software adecvat (numit preprocesor), fiind transformate n apeluri de funcii ale unei biblioteci speciale a SGBD-ului Rezultatul preprocesrii 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
Baze de date, 2008 Prof. Felicia Ionescu 30

Interfete si biblioteci de programare a aplicatiilor de baze de date


In general se folosesc 2 categorii de interfete de programare a aplicatiilor de baze de date: interfete specifice unui anumit SGBD si interfete independente de SGBD Interfete specifice unui anumit SGBD sunt biblioteci care contin funcii i macrodefiniii ce permit aplicaiilor s interacioneze cu serverul bazei de 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)

Interfee independente de SGBD, cu un grad ridicat de generalitate, care pot fi folosite pentru mai multe tipuri de SGBD-uri; cele mai cunoscute sunt:
Interfata ODBC (Open DataBase Connectivity) Interfata JDBC (Java DataBase Connectivity)

Baze de date, 2008

Prof. Felicia Ionescu

31

Exemplu: Client pentru MySQL C API


Programul client se link-eaza cu biblioteca libmysql si comunica cu serverul pentru a introduce, citi si modifica datele din tabele
#include <windows.h> #include <stdio.h> #include <string.h> #include <mysql.h> char pwd[ ] = ...."; 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 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 Driver Driver

Sursa de date

Sursa de date

Sursa de date

SGBD i Baza de date

SGBD i Baza de date

SGBD i Baza de date

Baze de date, 2008

Prof. Felicia Ionescu

33

Tipuri de date si functii ODBC


ODBC definete dou seturi de tipuri de date si corespondenta intre ele:
tipuri ODBC SQL - corespund tipurilor SQL n care sunt memorate datele n tabelele bazei de date tipuri ODBC C - corespund tipurilor C ale variabilelor (locale) n care se ncarc i se prelucreaz datele n programele de aplicaii

Identificatorii ODBC: SQLHANDLE cu mai multe variante:


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 instruciuni 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); cu preparare: SQLPrepare(SQLHSTMT hstmt, SQLCHAR *instr, SQLINTEGER len); SQLExecute (SQLHSTMT hstmt);

Instructiunile dinamice folosesc prepararea si marcarea (cu ?) a parametrilor


Baze de date, 2008 Prof. Felicia Ionescu 34

Exemplu: program ODBC (1)


#include <windows.h> #include <stdio.h> #include <string.h> #include <sql.h> #include <sqlext.h> #define LEN 128 int main () { SQLRETURN rc; // Cod de retur al apelurilor ODBC SQLHENV henv; // Handle pentru environment SQLHDBC hdbc; // Handle de conectare SQLHSTMT hstmt; // Handle pentru instruciuni ODBC SQLCHAR comanda[LEN]; // Buffer comanda SQL SQLCHAR sursaDate[ ] = intreprindere; SQLCHAR szUID[ ] = root, szAuthStr[]= parola; SQLCHAR sNume[LEN], sPrenume[LEN], sAdresa[LEN]; SQLINTEGER nId, cbNume, cbPrenume, cbAdresa, cbId=0; // Alocare handler HENV SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HENV,&henv); // Setarea versiunii driverului ODBC3 SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); SQLConnect (hdbc, sursaDate, SQL_NTS, szUID, (SWORD)strlen((const char*) (szUID)), szAuthStr,(SWORD)strlen((const char*)(szAuthStr)));
Baze de date, 2008 Prof. Felicia Ionescu 35

Exemplu: program ODBC (2)


// Alocare handle HSTMT SQLAllocHandle (SQL_HANDLE_STMT,hdbc, &hstmt); // Actualizarea tabelului ANGAJATI strcpy ((char*)comanda, UPDATE ANGAJATI SET Adresa = Bacau WHERE IdAngajat=1); SQLExecDirect (hstmt, comanda, SQL_NTS); strcpy ((char*)comanda, UPDATE ANGAJATI SET Adresa = Cluj WHERE IdAngajat=2); SQLExecDirect (hstmt, comanda, SQL_NTS); // Afisarea liniilor tabelului ANGAJATI strcpy ((char*)comanda, select * from ANGAJATI); SQLPrepare (hstmt, comanda, strlen((const char*)comanda)); rc = SQLExecute (hstmt); while ((rc=SQLFetch(hstmt))!= SQL_NO_DATA){ SQLGetData(hstmt, 1, SQL_C_LONG, &nId, 0, &cbId); SQLGetData(hstmt, 2, SQL_C_CHAR, sNume, LEN, &cbNume); SQLGetData(hstmt, 3, SQL_C_CHAR, sPrenume, LEN, &cbPrenume); SQLGetData(hstmt, 5, SQL_C_CHAR,sAdresa, LEN, &cbAdresa); printf(%10d %20s %20s %20s\n, nId, sNume, sPrenume, sAdresa); } SQLFreeStmt (hstmt, SQL_DROP); SQLDisconnect (hdbc); SQLFreeConnect (hdbc); SQLFreeEnv (henv); }
Baze de date, 2008 Prof. Felicia Ionescu 36

Baze de date, 2008

Prof. Felicia Ionescu

37

Capitolul 5: Normalizarea relatiilor


Dependentele de date si formele normale ale relatiilor Redundanta datelor si anomaliile de actualizare a relatiilor Dependentele functionale (DF)
Tipuri de DF Multimi de DF DF si cheile relatiilor

Descompunerea relatiilor
Descompunere fara pierdere de informatie la jonctiune Descompunere cu conservarea DF

Formele normale ale relatiilor determinate de DF:


FN1 FN2 FN3 FNBC

Dependente multivalorice forma normala FN4 Dependente de jonctiune forma normala FN5
Baze de date, 2008 Prof. Felicia Ionescu 1

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
Baze de date, 2008 Prof. Felicia Ionescu 2

Redundanta datelor si anomaliile de actualizare


In relatia AP, cu cheia primara PK={IdAngajat, IdProiect} sunt valori redundante ale atributelor: Nume, prenume, Adresa
Anomalii de inserare: nu se pot introduce date despre un angajat (numele, prenumele, adresa) dac nu exist cel puin un proiect la care acesta s lucreze Anomalii de tergere: dac se terg toate tuplurile referitoare la un anumit, se pot pierde toate datele referitoare la acei angajai care lucreaz doar la proiectul respectiv Anomalii de actualizare: dac se modific ntr-un tuplu valoarea unuia din atributele care au valori redundante, starea relaiei poate deveni inconsistent IdAngajat 1 2 3 1 2 Nume Ionescu Popescu Marinescu Ionescu Popescu Prenume Ion Petre Marin Ion Petre Adresa Bucuresti Ploiesti Craiova Bucuresti Ploiesti IdProiect P1 P1 P1 P2 P2 100 80 200 100 120 Ore

Baze de date, 2008

Prof. Felicia Ionescu

Eliminarea anomaliilor datorate redundantei


Eliminarea anomaliilor provocate de redundanta datelor se poate face:
Fie prin prevederea unor proceduri stocate (sau triggere) care sa verifice corectitudinea fiecarei operatii de actualizare a relatiilor Fie prin descompunerea relatiilor care prezinta redundante in relatii mai simple; exemplu: descompunerea relatiei AP in 2 relatii, A si P A P IdAngajat Nume 1 2 3 Ionescu Popescu Prenume Ion Petre Adresa Bucuresti Ploiesti Craiova IdAngajat 1 2 3 1 2 IdProiect Ore P1 P1 P1 P2 P2 100 80 200 100 120

Marinescu Marin

Baze de date, 2008

Relatiile A si P au un grad de normalizare mai ridicat si nu mai au anomalii Dar unele interogari sunt mai ineficiente in A si P decat in AP z Exemplu: Care este numrul de ore lucrate de Ionescu la proiectul P1 ?: Q1 = Ore Nume ='Ionescu' AND IdProiect ='P1 (AP) Q2 = Ore Nume ='Ionescu' AND IdProiect ='P1 (A>< P)
Prof. Felicia Ionescu

Dependente functionale
Dependentele funcionale (functional dependencies) sunt constrangeri in relatii, prin care valoarea unui anumit set de atribute determina in mod unic valoarea altor atribute Fie R o schema de relatie si doua submultimi ale atributelor sale: X R and Y R Dependenta functionala (DF) XY exista in R daca si numai daca pentru orice stare a relatiei r(R), egalitatea valorilor atributelor X din doua tupluri t1 si t2 din r (t1 r si t2 r) implica 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 relaiilor:
se pot preciza explicit (i atunci ele implic DF corespunztoare) pot fi deduse din mulimea DF stabilite de proiectant, folosind diferiti algoritmi
Baze de date, 2008 Prof. Felicia Ionescu 5

Tipuri de dependene funcionale


O multime F de dependente functionale in R defineste constrangerile pe care trebuie sa le respecte orice relatie r(R) pentru a fi legala (corecta)
Se spune ca F se mentine in R daca toate relatiile legale pe R ( r(R)) satisfac multimea de dependente functionale F Reciproc, o relatie r este legala in raport cu o multime de dependente functionale F, daca r satisface F

Dependene funcionale triviale si ne-triviale


O dependenta functionala este triviala daca este satisfacuta de orice stare a relatiei; in general X Y este triviala daca Y X Celelalte dependente (in care Y nu este o submultime a lui X) sunt ne-triviale

Dependenele funcionale pariale si totale


O dependen funcional X Y este parial (partial dependency) dac exist o submulime proprie Z a lui X (Z X) care determin funcional pe Y (Z Y) O dependen funcional X Y este total (full dependency), dac nu exist nici o submulime proprie Z a lui X care s determine funcional pe Y . Rezulta:
dac atributul X este simplu, dependena funcional X Y este total dac X este o cheie candidat a lui R, atunci dependena X R este total

Atributele care aparin unei chei se numesc atribute prime, iar celelalte se numesc atribute neprime
Baze de date, 2008 Prof. Felicia Ionescu 6

Multimi de dependente functionale (1)


Proiectantul bazei de date specific acele dependene funcionale ntre atribute care sunt evidente din punct de vedere semantic; de ex, in AP:
(a) IdAngajat Nume (b) IdAngajat Prenume (c) IdAngajat Adresa (d) {IdAngajat,IdProiect} Ore

Din acestea se pot deduce si alte DF, folosind regulile de deducere (inferen - inference rules) ale lui Armstrong: 1. Reflexivitatea (reflexivity): dac Y X, atunci X Y; prin aceast regul se deduc DF triviale; de exemplu n relaia AP:
(e) {IdAngajat, IdProiect} IdAngajat (f) {IdAngajat, IdProiect} IdProiect

2. Augmentarea (augmentation): dac X Y, atunci (X Z) (Y Z); urmtoarele DF (g i h) sunt deduse prin augmentare, pornind de la dependenele funcionale (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

Baze de date, 2008

Prof. Felicia Ionescu

Multimi de dependente functionale (2)


3. Tranzitivitatea (transitivity): dac XY i YZ, atunci XZ. De exemplu, din DF (a) i (e) rezult:
{IdAngajat,IdProiect} Nume

Aceste trei reguli sunt suficiente pentru calculul tuturor dependenelor funcionale pe care le implic o mulime dat de DF Din aceste reguli de baz se pot deduce i alte reguli; de exemplu:
Proiecia (projection): dac X(Y Z), atunci XY i XZ Reuniunea (union): dac XY i XZ, atunci X(Y Z) Pseudo-tranzitivitatea (pseudo-transitivity): dac XY i (W Y) Z, atunci (W X) Z.

Reprezentarea dependentelor functionale:


Nume IdAngajat IdProiect Prenume Adresa Ore

Baze de date, 2008

Prof. Felicia Ionescu

Inchiderea unei multimi de DF


Fiind dat o mulime F de DF, mulimea tuturor DF care sunt implicate de F se numete nchiderea mulimii F (closure set of F) i se noteaz F+
F+ se poate deduce prin aplicarea repetat a regulilor de inferen asupra DF din F Pentru a testa daca o DF XY poate fi dedus dintr-o mulime F de DF, se afla nchiderea F+ a mulimii F i se testeaz dac (XY)F+ Dou mulimi de DF, E i F sunt echivalente dac nchiderile lor sunt egale (E+ = F+); adica: DF E DF F+ i DF F DF E+

O mulime G de DF este minim dac satisface urmtoarele condiii:


membrul drept al oricrei DF din G este un atribut simplu; orice dependen funcional din G este total; mulimea G este ireductibil, adic, dac se exclude o DF din G, mulimea rezultat H nu este echivalent cu G (adic H+ G+).

Acoperirea minim a unei mulimi F de DF (minimal cover of a set F of DFs) este o mulime minim de dependene funcionale G care este echivalent cu F, adic G+ = F+
Pot exista mai multe acoperiri minime ale unei mulimi de DF

Baze de date, 2008

Prof. Felicia Ionescu

Dependenele funcionale i cheile relaiilor


In orice relaie pot exista dou categorii de DF:
DF determinate de cheile relaiei; astfel de DF nu produc redundana datelor i nici anomalii de actualizare a relaiei DF n care atributul determinant nu este o cheie a relaiei; astfel de DF produc redundana datelor i anomalii de actualizare a relaiei

DF determinate de chei (primar sau secundara) sunt constrngeri implicite, coninute n definiia relaiei i sunt verificate i impuse automat de SGBD
Proiectantul bazei de date nu trebuie s prevad nimic suplimentar pentru ca aceste constrngeri s fie satisfcute de orice stare a relaiei

DF n care atributul determinant nu este o cheie sunt constrngeri explicite, care nu sunt verificate i nici impuse de SGBD Pentru DF n care atributul determinant nu este o cheie, se aplica una din urmatoarele solutii:
(a) Se accepta astfel de DF, dar se asigura verificarea i impunerea lor procedurala, prin triggere, proceduri stocate, sau funcii n programele de aplicaii (b) Se descompune relatia in relatii mai simple, in care nu mai exista astfel de DF, dar trebuie verificate conditiile de descompunere reversibila
Baze de date, 2008 Prof. Felicia Ionescu 10

Inchiderea unui atribut fata de o multime de DF (1)


nchiderea unui atribut fa de o mulime F de DF (the closure of an atribute under F). Fie un atribut X al unei relaii pe care este definit mulimea F de DF; mulimea X+ a tuturor atributelor determinate de X (XX+) se numete nchiderea lui X n raport cu F Algoritmul prin care se poate deduce inchiderea unui atribut:
1. se seteaz X+ = X 2. repet P_X+ = X+ pentru fiecare DF YZ din F dac Y X+ atunci X+ = X+ Z pn cnd P_X+ == X+

Se aplic acest algoritm pentru dependenele funcionale din relatia AP:


FAP = {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}
Baze de date, 2008 Prof. Felicia Ionescu 11

Inchiderea unui atribut fata de o multime de DF (2)


Din algoritmul de mai sus se poate deduce c nchiderea unui atribut care nu determin funcional nici un alt atribut (nu apare n partea stng a nici unei DF) este chiar atributul respectiv:
{Nume}+ = {Nume}, {Prenume}+ = {Prenume}, {Adresa}+ = {Adresa}, {Ore}+ = {Ore}

Algoritmul de calcul al nchiderii unui atribut fa de o mulime F de DF poate fi folosit pentru a verifica dac o DF dat XY este consecina logic a mulimii F (daca (XY) F+) Pentru aceasta, se calculeaz X+ fa de F; dac Y X+, atunci (XY) F+, deci XY este consecina logic a lui F Acest algoritm poate fi folosit i pentru a verifica dac un atribut K (simplu sau compus) este supercheie a relaiei R cu mulimea F de DF Pentru aceasta se calculeaz K+ n raport cu F; daca K+ = R, atunci K este supercheie n R Dintr-o supercheie se pot deduce cheile relaiei, testnd condiia de ireductibilitate pentru fiecare din atributele componente ale supercheii Algoritmul de gsire a cheilor unei relaii din mulimea DF bazat pe inchiderea unui atribut fata de o multime de DF este prezentat in continuare

Baze de date, 2008

Prof. Felicia Ionescu

12

Aflarea cheilor unei relaii din multimea DF


Fiind dat o relaie cu schema R i mulimea F a DF pe aceast relaie, cheile candidate K ale relaiei se pot afla cu urmatorul algoritm:
1. se seteaz K = R i se selecteaz din K un atribut X (preferabil nedeterminant); 2. se testeaz (K X) pe baza multimii F: dac (K X) este supercheie a relaiei R, atunci K = (K X), altfel K nu se modifica 3. se selecteaz un alt atribut X din K i se reia pasul 2, pana cand (K-X) nu mai este supercheie in R

Prin parcurgerea repetat a pailor 2 i 3, se gsete una din cheile candidate ale relaiei. Dac exist mai multe chei candidate, atunci ordinea gsirii cheilor candidate depinde de atributul selectat n pasul 1 al algoritmului De exemplu, se aplic algoritmul de mai sus pentru gsirea cheii primare a relaiei AP cu mulimea FAP a DF (definita la inceputul capitolului) Se pornete 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 repeta pasul 2 pentru X = Prenume, apoi X = Adresa si X = Ore; aceste atribute pot fi eliminate, si se obtine K = {IdAngajat, IdProiect} Atributele IdProiect, IdAngajat nu se pot elimina din supercheia K, deci K e cheie
Baze de date, 2008 Prof. Felicia Ionescu 13

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:
Jonciune fr pierdere de informaie (conservarea informatiei); 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

Teorema lui Ullman. Descompunerea D = {R1, R2} a unei scheme de relaie R este o descompunere fr pierdere de informaie la jonciune n raport cu mulimea F de DF, dac i numai dac este ndeplinit una din condiiile: (a) ((R1 R2) (R1 - R2)) F+, sau (b) ((R1 R2) (R2 - R1)) F+
Dac R1 R2 este o cheie a uneia dintre relaiile R1 sau R2, atunci descompunerea este fr pierdere de informaie la jonciune;
Demonstratie: dac (R1 R2) este o supercheie n R1, atunci ea determina functional orice submultime de atribute din R1, inclusiv (R1 - R2) adic (R1 R2) (R1 - R2); La fel se demonstreaza daca (R1 R2) este o supercheie n R2 Baze de date, 2008 Prof. Felicia Ionescu 14

Jonctiune fara pierdere de informatie


Lipsa acestei proprieti se manifest n mod paradoxal prin apariia unor tupluri noi (parazite) n relaia obinut prin jonciunea relaiilor r1,r2,...ri,...rk, tupluri care nu existau n relaia r(R) Exemplu: descompunerea relaiei AP n relaiile A i P:
A P = {IdAngajat}, A P = {Nume,Prenume,Adresa}; P A = {IdProiect,Ore} Din DF IdAngajatNume, IdAngajatPrenume, IdAngajat Adresa Se deduce: IdAngajat{Nume, Prenume, Adresa} (cf. regulii de reuniune a DF) Rezult: ((A P)(A P)) F+ Deci, conform teoremei lui Ullman desc. este fr pierdere de informaie la jonciune

Descompunerea succesiv fr pierdere de informaie la jonciune


Dac o descompunere D = {R1,R2,...Ri,...Rk} a unei scheme R este fr pierdere de informaie la jonciune n raport cu mulimea F de DF i D1 = {Q1,Q2,...Qm} este o descompunere fr pierdere de informaie la jonciune a lui R1 n raport cu proiecia lui F pe R1, atunci descompunerea D2 = {Q1,Q2,...Qm,R2,...Rk} este o descompunere fr pierdere de informaie a lui R n raport cu F

Aceast proprietate permite descompunerea fr pierdere de informaie la jonciune a unei relaii n mai multe etape (mai nti in dou relaii, apoi fiecare dintre acestea se descompune n alte dou relaii, .a.m.d)
Baze de date, 2008 Prof. Felicia Ionescu 15

Conservarea dependenelor funcionale


O descompunere D = {R1, R2, ...Ri,...Rk} a unei scheme de relaie R prezint proprietatea de conservare a mulimii F de DF, dac reuniunea proieciilor lui F pe schemele de relaii Ri (unde 1 i k) este echivalent cu F, adic: ((R1(F)) (R2(F)) ... (Rk(F)))+ = F+ Proiecia unei mulimi de dependene funcionale. Fiind dat mulimea F de DF definite pe R, i o descompunere D = {R1,R2,..Rk} a lui R, proiecia lui F pe Ri (unde 1 i k), notat Ri(F), este mulimea de DF XY F+, astfel nct X Ri i Y Ri Exemplu: descompunerea relaiei AP in relaiile A i P:
FAP = {IdAngajatNume, IdAngajatPrenume, IdAngajatAdresa,{IdAngajat,IdProiect}Ore} Proieciile mulimii FAP pe A si P sunt: A(FAP) = {IdAngajatNume, IdAngajatPrenume, IdAngajatAdresa} P(FAP) = {{IdAngajat,IdProiect}Ore} Dat fiind c A(FAP) P(FAP) = FAP, rezult c aceast descompunere conserv DF

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
Baze de date, 2008 Prof. Felicia Ionescu 16

Formele normale ale relatiilor (FN1 si FN2)


O relaie este normalizat n prima form normal (FN1) dac fiecare atribut ia numai valori atomice i scalare din domeniul su de definiie
Sistemele SGBD relaionale nu admit relaii care s nu fie cel puin n FN1, dar proiectarea relaiilor normalizate n FN1 este intotdeauna posibila

Fie o schema de relatie R si multimea F de DF definite pe aceasta. O relaie r(R) este normalizat n FN2, dac este n FN1 i dac n F+ nu exist nici o DF parial a unui atribut neprim fa de o cheie a relaiei Exemplu: relatia AP cu multimea FAP de DF este in FN1, dar nu este in FN2:
FAP = {IdAngajat Nume, IdAngajat Prenume, IdAngajat Adresa, {IdAngajat, IdProiect} Ore} Cheia primara este {IdAngajat, IdProiect}, deci {IdAngajat, IdProiect}Nume Aceast DF se poate deduce din FAP; cf. reflexivitatii, {IdAngajat, IdProiect} IdAngajat; cf.tranzitivitatii, daca IdAngajatNume, {IdAngajat, IdProiect}Nume DF {IdAngajat, IdProiect}Nume este parial deoarece exista: IdAngajatNume Rezult c relaia AP nu este n FN2, deci prezinta redundante si anomalii

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
Baze de date, 2008 Prof. Felicia Ionescu 17

Impunerea DF in relatia nenormalizata AP (1)


Dac relaia AP nu se normalizeaz, atunci trebuie s se prevad proceduri speciale care s verifice i s impun DF care nu sunt determinate cheia PK La orice operaie de actualizare un trigger verifica valorile care urmeaz s fie introduse i nu se admit doi sau mai muli angajai cu acelasi identificator (IdAngajat) dar cu nume, prenume sau adres diferite Trigger-ul pentru relatia AP arata astfel:
DELIMITER $$ DROP TRIGGER `normalizare`.`trigger_AP`$$ CREATE TRIGGER `trigger_AP` AFTER INSERT ON `normalizare`.`AP` FOR EACH ROW BEGIN DECLARE done INT DEFAULT 0; 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 ;

Baze de date, 2008

Prof. Felicia Ionescu

18

Impunerea DF in relatia nenormalizata AP(2)


Trigger-ul este de tip AFTER INSERT, astfel ca linia dorita se insereaza mai intai in tabel, cu verificarea de catre SGBD a unicitatii cheii primare Dupa inserare se citesc intr-un cursor toate liniile care au pentru IdAngajat valoarea nou inserata (NEW.IdAngajat) Se parcurg liniile cursorului si se verifica daca valorile nou introduse ale atributelor Nume, Prenume, Adresa (NEW.Nume, NEW.Prenume, NEW.Adresa) difera de cele existente; daca difera, se seteaza error = 1 Daca, dupa parcurgerea tuturor liniilor cursorului, error=1, se sterge linia 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
Baze de date, 2008 Prof. Felicia Ionescu 19

A treia forma normala (FN3)


Fie o schema de relatie R si multimea F de DF definite pe aceasta. O relaie 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, Nume, Prenume, Adresa, Functie, Salariu) FAFS={IdAngajatNume, IdAngajatPrenume, IdAngajat Adresa, IdAngajatFunctie, FunctieSalariu}.
Cheia primar a relaiei este IdAngajat, i poate fi dedus din FAFS Primele patru DF sunt totale, deci relaia este n FN2 Relaia nu este n FN3 datorita DF FunctieSalariu; 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 FAFS: FAF={IdAngajatNume,IdAngajatPrenume,IdAngajat Adresa,IdAngajatFunctie} FFS = {FunctieSalariu} si se deduc (sau se verifica) cheile relatiilor PKAF={IdAngajat}, PKFS={Functie}, deci AF si FS sunt in FN3 FAF FFS = FAFS deci descompunerea conserva DF AF FS = {Functie} si ( Functie Salariu) FAFS, deci, cf. regulii lui Ullman, descompunerea este fara pierdere de informatie la jonctiune
Baze de date, 2008 Prof. Felicia Ionescu 20

Impunerea DF in relatia nenormalizata AFS (1)


Dac relaia 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 $$ CREATE PROCEDURE `sp_AFS`(INOUT error INT, s_id INT, s_nume VARCHAR(20), s_prenume VARCHAR(20), s_adresa VARCHAR(20), s_functia VARCHAR(20), s_salariu DECIMAL) 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 ; Baze de date, 2008 Prof. Felicia Ionescu 21

Impunerea DF in relatia nenormalizata AFS (2)


Fie tabelul AFS care contine liniile: (1, Ionescu,Ion,Bucuresti,inginer,2000), (2, Popescu,Petre,Craiova,inginer,2000) Se observa redundanta datelor: valoarea salariului este memorata de fiecare data pentru o functie anume, desi trebuie sa fie aceeasi (conform DF Functie Salariu) Datorita redundantei exista si anomalii: se poate insera linia (1, Mateescu, Viorel,Bucuresti,inginer, 2100), care nu respecta DF Functie Salariu: pentru functia inginer se admite si salariul 2000 si salariul 2100 Inserarea liniilor in tabelul AFS prin apelul procedurii stocate sp_AFS inlatura aceasta anomalii De exemplu, la apelul procedurii stocate:
SET @error = 0; call sp_AFS(@error, 5, 'Druga', 'Ciprian', 'Bucuresti','inginer', 2001); select @error;

se obtine @error=1 si linia respectiva nu va fi introdusa in tabelul AFS

Baze de date, 2008

Prof. Felicia Ionescu

22

Forma normala Boyce-Codd (FNBC)


Fie schema de relatie R si multimea F de DF definite pe aceasta. O relaie r(R) este n forma normal Boyce-Codd (FNBC) n raport cu F dac este n FN1 i dac orice DF netrivial din F+ este determinata de o cheie a relaiei Este evident c o relaie n FNBC este n FN3, dar o relaie n FN3 poate s fie sau nu n FNBC Exemplu: relaia EDP(IdElev, IdDisciplina,IdProfesor), cu cheia PK= {IdElev, IdDisciplina} i cu mulimea FEDP de DF:
FEDP = {{IdElev,IdDisciplina}IdProfesor, IdProfesorIdDisciplina}

Se consider c relaia este n FN1; din FEDP se observ c nu exist DF pariale fa de cheia relaiei (deci relaia este n FN2) i nu exist nici o DF a unui atribut neprim fa de un alt atribut neprim, deci relaia este n FN3 Relaia EDP nu este n FNBC, datorit DF a atributului prim IdDisciplina fa de atributul neprim IdProfesor; aceasta relatie prezint redundante de date i anomalii de actualizare Exemplu: fie starea in care tabelul EDP contine liniile (1,1,1) si (2,1,1)
redundanta: disciplina (1) predata de profesorul 1 este memorata de doua ori in tuplurile (1,1,1) si (2,1,1) anomalie de inserare: se poate insera si tuplul (1,2,1) care nu respecta DF IdProfesorIdDisciplina (profesorul 1 preda si disciplina 1 si disciplina 2)
Baze de date, 2008 Prof. Felicia Ionescu 23

Impunerea DF in relatia nenormalizata EDP


Dac relaia EDP nu se normalizeaza, atunci trebuie s se prevad o procedura care s verifice i s impun DF (IdProfesorIdDisciplina) care nu este determinata de cheia relatiei, pentru operatiile de INSERT si UPDATE De ex: se inlocuieste operatia INSERTcu apelul unei proceduri stocate care verifica mai intai valorile si executa INSERT numai daca acestea respecta DF
DELIMITER $$ DROP PROCEDURE IF EXISTS `sp_EDP`$$ CREATE PROCEDURE `sp_EDP`(INOUT error INT, s_Elev INT, s_Disciplina INT, s_Profesor INT) BEGIN DECLARE done INT DEFAULT 0; DECLARE l_Disciplina INT; DECLARE cursor_EDP CURSOR FOR 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
Baze de date, 2008 Prof. Felicia Ionescu 24

Normalizarea relatiei EDP


Normalizarea relaiei EDP astfel nct relaiile obinute s fie n FNBC se poate face prin descompunerea acesteia. Se pot ncerca trei descompuneri:
D1 = {EP,PD}, unde EP = {IdElev, IdProfesor}, PD = {IdProfesor, IdDisciplina}; D2 = {ED,PD}, unde ED = {IdElev, IdDisciplin}, PD = {IdProfesor, IdDisciplina}; D3 = {EP,ED}, unde EP = {IdElev, IdProfesor}, ED = {IdElev, IdDisciplina}.

Se poate observa c relaiile rezultate n oricare din aceste descompuneri sunt relaii n FNBC (fiind relaii formate din dou atribute). Dintre cele trei descompuneri, descompunerea D1 prezint proprietatea de jonciune fr pierdere de informaie. ntr-adevr, EP PD = {IdProfesor}, PD EP = {IdDisciplina} i IdProfesorIdDisciplina, deci este ndeplinit condiia lui Ullman de conservare a informaiei. Celelalte descompuneri, D2 i D3, nu ndeplinesc aceast condiie. In oricare din aceste descompuneri se pierde dependena funcional {IdElev,IdDisciplina}IdProfesor, deci relaia EDP nu poate fi descompus n mod reversibil n relaii FNBC.
Baze de date, 2008 Prof. Felicia Ionescu 25

Impunerea constrangerilor pierdute prin descompunere (1)


Dac relaia 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) BEGIN DECLARE done INT DEFAULT 0; 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 cursor_EP_PD; REPEAT 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 constrangerilor pierdute prin descompunere (2)


Procedura sp_EP_PD primete ca argumente un flag de eroare i valorile celor trei atribute IdElev, IdDisciplin, IdProfesor care trebuie sa respecte constrngerea {IdElev, IdDisciplina} IdProfesor n aceast procedura se creeaz un cursor n care se ncarc rezultatul jonciunii naturale ntre relaiile EP i PD pe atributul comun IdProfesor Pentru fiecare linie a rezultatului jonciunii EP >< PD se verific respectarea constrngerii dorite, testnd valorile existente n linia respectiv cu noile valori care urmeaz s fie introduse:
daca aceast constrngere este respectat, atunci se execut dou instruciuni INSERT, cate una in foiecare din tabelele EP si PD daca aceast constrngere nu este respectat, nu se introduce nici o linie

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

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
Baze de date, 2008 Prof. Felicia Ionescu 27

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 .

Datorit simetriei egalitilor de mai sus, rezulta c, dac ntr-o relaie cu schema R exist DMV XY, atunci exist i XZ, unde Z = R(XY) O DF este un caz particular al unei DMV: DF XY este o DMV X Y cu restricia c unei valori a lui X i corespunde o singur valoare a lui Y O relaie cu schema R este n a patra form normal (FN4) n raport cu o mulime F de DF i DMV dac este n FN1 i dac, pentru orice DMV netrivial XY din F+, X este cheie a relaiei r(R). Asemnarea acestei definiii cu definiia FNBC: pentru FNBC se impun restricii DF, iar pentru FN4 se impun restricii DMV Dac o schem de relaie respect condiia de FN4, atunci nseamn c ea respect i condiia de FNBC
Baze de date, 2008 Prof. Felicia Ionescu 28

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 Relaia r(R) este k-decompozabil fr pierdere de informaie dac exist o DJ *(R1,R2,...Rk)

Tipuri de DJ (dupa valoarea lui k):


Cazul k = 1 reprezint o DJ trivial Cazul k = 2 al unei DJ este o DMV; o DMV XY n relaia r(R) reprezint o DJ *(XY, XZ), unde Z = R(X Y). In cazul k > 2, DJ nu mai sunt echivalente cu DMV

DJ sunt dificil de identificat i nu exist reguli de deducere (inferen) care s genereze toate DJ pornind de la o mulime dat Datorit acestor aspecte, analiza DJ are un pronunat caracter intuitiv
Baze de date, 2008 Prof. Felicia Ionescu 29

Forma normala FN5


O relaie cu schema R este n a cincea form normal (FN5) n raport cu o mulime F de dependene funcionale, multivalorice sau de jonciune dac este n FN1 i dac, pentru orice dependen de jonciune *(R1,R2,... Ri,...Rk) din F+, Ri (unde 1 i k) este o cheie a relaiei r(R) Avnd n vedere faptul c o dependen multivaloric este un caz special de dependen de jonciune, iar o dependen funcional este un caz special de dependen multivaloric, se poate afirma c o relaie care este n FN5, este implicit n FN4, deci i n FNBC, .a.m.d. S-a demonstrat c orice relaie poate fi transformat n relaii FN5 (FN4, FNBC etc.) printr-o descompunere fr pierdere de informaie, dar nu se asigura conservarea tuturor DF Conditiile de normalizare in FNBC, FN4 si FN5 se pot rezuma la faptul c ntr-o relaie nu trebuie s existe dect dependene determinate de chei

Baze de date, 2008

Prof. Felicia Ionescu

30

Proiectarea relatiilor normalizate


Normalizarea relaiilor asigur un proiect al bazei de date mai concis i de aceea se consider c a normaliza este avantajos, chiar dac normalizarea nu este o garanie c s-a realizat cel mai bun model Proiectarea bazelor de date pornind de la diagrama Entitate-Asociere conduce, n general, la relaii normalizate, deoarece:
Relaiile corespunztoare mulimilor de entiti sunt, de regul, relaii normalizate, dat fiind c toate atributele descriu tipul de entitate respectiv. Relaiile de asociere binar, care conin dou chei strine care refer cheile primare din cele dou relaii pe care le asociaz, rezult tot ca relaii normalizate Relaiile care modeleaz asocierile multiple pot s rezulte nenormalizate i necesit operaii de normalizare suplimentare

Dar, cu ct nivelul de normalizare crete, cu att se obin mai multe relaii cu grad mai mic i pentru fiecare interogare sunt necesare mai multe operaii de jonciune, ceea ce face ca timpul de execuie a interogrilor s creasc; in general, se recomand ca:
relaiile asupra crora se efectueaz operaii de actualizare frecvente s fie normalizate ntr-o form normal ct mai avansat relaiile asupra crora se efectueaz interogri frecvente pot fi pstrate ntr-o form de normalizare mai redus

Mentinerea unei relaii ntr-o form de normalizare mai redus se numete denormalizare, i are scopul de a obine performane ridicate la interogri
Baze de date, 2008 Prof. Felicia Ionescu 31

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

S-a demonstrat si exista algoritmi prin care orice relatie poate fi descompusa reversibil (cu conservarea informatiei si conservarea DF) in relatii in formele normale FN2 sau FN3 S-a demonstrat si exista algoritmi prin care orice relatie poate fi descompusa in relatii FN2, FN3, FNBC, FN4 sau FN5 fara pierdere de informatie la jonctiune, dar se pot pierde unele DF; algoritmul foloseste notiunea de inchiderea unui atribut fata de o multime F de DF

Baze de date, 2008

Prof. Felicia Ionescu

32

Descompunerea fara pierdere de informatie la jonctiune (1)


Fiind dat o relaie cu schema R i mulimea F de DF, o descompunere D fr pierdere de informaie la jonciune n relaii ntr-o form normal dorit (FNBC, FN4, FN5) se poate obine aplicnd algoritmul urmtor:
1. se seteaz D = {R}; 2. att timp ct n D exist o relaie Q (cu mulimea FQ a DF) care nu se afl n forma normal dorit: - se alege o DF X Y din FQ i se construiete nchiderea X+ a atributului X i mulimea Y = X+ X; - n D se nlocuiete relaia Q cu dou relaii: Q1 = X Y i Q2 = X Z, unde Z = Q (X Y);

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
Baze de date, 2008 Prof. Felicia Ionescu 33

Descompunerea fara pierdere de informatie la jonctiune (2)


Exemplu de aplicare a algoritmului pentru descompunerea in relatii FNBC a relatiei R = {dAngajat, Nume, Prenume, Adresa, Functie, Salariu, IdProiect, Ore} cu PK = {IdAngajat, IdProiect}, aflata n FN1 i cu mulimea F de DF
F = {IdAngajatNume,IdAngajatPreume, IdAngajatAdresa,IdAngajatFunctie, FunctieSalariu, {IdAngajat,IdProiect}Ore}

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) = {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

Se poate demonstra usor ca descompunerea obtinuta D= (R111, R112, R12) conserva si dependentele functionale
Baze de date, 2008 Prof. Felicia Ionescu 34

Baze de date, 2008

Prof. Felicia Ionescu

35

Capitolul 6: Gestiunea tranzactiilor


Tranzactii Anomalii de acces concurent la bazele de date
Actualizare pierduta Citire improprie Citire irepetabila Citire fantoma

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

Tehnici de refacere a bazelor de date


Baze de date, 2008 Prof. Felicia Ionescu 1

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)

O tranzacie (transaction) este o unitate logic de prelucrare indivizibil (atomic) a datelor unei baze de date prin care se asigur consistena acesteia O tranzacie trebuie s asigure consistena bazei de date in diferite situatii:
tranzactia se execut individual sau concurent cu alte tranzacii apar defecte ale sistemului n cursul execuiei tranzaciei

O tranzacie este o operaie indivizibil de acces la baza de date care:


fie se execut cu succes toate aciunile i se termin cu o validare a modificrilor efectuate asupra bazei de date (commit) fie nu poate efectua (din diferite motive) toate aciunile i este abandonat i anulat (abort, rollback)
Baze de date, 2008 Prof. Felicia Ionescu 2

Exemplu de tranzactie

Exemplu: un sistem de rezervare a locurilor la curse aeriene


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 operaii:


1. 2. 3. 4. Se insereaz o linie nou n tabelul PASAGERI, cu datele pasagerului 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 Se tipreste factura Se emite (tiprete) biletul 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

Probleme care pot sa apara:

Astfel de probleme ar disparea dac toate actiunile efectuate pentru o rezervare ar fi grupate ca o operaie indivizibil (atomic)
Prof. Felicia Ionescu 3

Baze de date, 2008

Anomalii de acces concurent la bazele de date (1)


Unitatea de transfer a datelor ntre discul magnetic i memoria principal a sistemului este un bloc, care corespunde unui sector de pe disc si in care se memoreaza mai multe inregistrari (tupluri) Un articol (data item) este un cmp care memoreaz valoarea unui atribut dintr-o nregistrare (tuplu), dar poate fi o nregistrare ntreag sau chiar o grupare de inregistrari memorate intr-un bloc Operaiile de acces la un articol X al bazei de date pot fi:
read(X): citete articolul X din baza de date ntr-o variabil a programului; pentru simplificarea notaiilor se va considera c variabila n care se citete articolul X este notat, de asemenea, cu X. write(X): scrie variabila de program X n articolul X al bazei de date.

Tranzaciile lansate de diferii utilizatori se pot executa concurent i este posibil s actualizeze aceleai articole ale bazei de date Dac execuia concurent a tranzaciilor este necontrolat, este posibil ca baza de date s ajung ntr-o stare inconsistent (incorect), chiar dac:
fiecare tranzacie n parte a fost executat corect nu au aprut defecte de funcionare ale sistemului
Baze de date, 2008 Prof. Felicia Ionescu 4

Anomalii de acces concurent la bazele de date (2)


Actualizare pierduta (lost update): rezulta X=X-M (b) in loc de valoarea

corecta X= X+N-M (a)


T1 read(X) X=X+N write(X) read(X) X=X-M write(X) T2

Citire improprie (dirty read): T2 citeste X+N, desi X=X+N nu a fost validata (c)
Timp T1 read(X) X=X+N read(X) X=X-M write(X) write(X) abort T2 T1 read(X) X=X+N write(X) read(X) X=X-M write(X) T2

(a)

(b)

(c)

Citire irepetabil (nonrepetable read): o tranzacie citete un articol de dou ori, iar ntre cele dou citiri, o alt tranzacie a modificat chiar acel articol Citire fantom (phantom read): o tranzacie prelucreaz un set de linii rezultat al unei interogri si n timpul acestei prelucrri o alt tranzacie insereaza sau sterge o linie
Baze de date, 2008 Prof. Felicia Ionescu 5

Proprietatile tranzactiilor (ACID)


Atomicitatea (atomicity): proprietatea unei tranzacii de a reprezenta o unitate de execuie indivizibil, adic de a executa totul sau nimic Consistena (consistency): proprietatea unei tranzactii de a efectua modificri corecte ale bazei de date
o tranzacie transform baza de date dintr-o stare consistent n alt stare consistent starea unei baze de date este consistent dac respect toate constrngerile de integritate implicite sau explicite

Izolarea (isolation): proprietatea unei tranzacii de a face vizibile modificrile efectuate numai dup ce a fost validat (committed)
Dac rezultatele pariale ale unei tranzacii sunt vizibile altor tranzacii nainte de validarea acesteia i dac se ntmpl ca aceast tranzacie s fie abandonat i anulat (rollback), atunci toate tranzaciile care au accesat rezultatele pariale ale acesteia vor trebui s fie anulate Aceste operaii de anulare pot produce, la rndul lor alte anulri, .a.m.d.

Durabilitarea (durability): proprietatea prin care, dup validarea unei tranzacii, modificrile efectuate de aceasta n baza de date nu vor mai fi pierdute datorit unor defectri ulterioare a sistemului
Baze de date, 2008 Prof. Felicia Ionescu 6

Operatiile efectuate de tranzactii


Operaiile efectuate de o tranzacie i nregistrate de administratorul de refacere (recovery manager):
begin: nceputul execuiei unei tranzacii read sau write: operaii de citire sau scriere a articolelor din baza de date end: marcheaz terminarea operaiilor de scriere sau citire din baza de date, ceea ce nseamn c tranzacia se poate termina; totui, este posibil s fie necesare unele operaii de verificare nainte de validarea (commit) tranzaciei. commit: terminarea cu succes a tranzaciei, validarea tuturor modificrilor efectuate n baza de date i vizibilitatea modificrilor efectuate pentru alte tranzacii; din acest moment, modificrile efectuate nu mai pot fi anulate, nici pierdute printr-o defectare ulterioar a sistemului rollback (sau abort): semnifica faptul c tranzacia a fost abandonat i c orice efect pe care tranzacia l-a avut asupra bazei de date trebuie s fie anulat (printro rulare napoi a operaiilor). undo: operaie similar operaiei rollback, dar se aplic unei singure operaii, nu unei ntregi tranzacii. redo: specific faptul c unele operaii ale unei tranzacii trebuie s fie executate din nou pentru a se putea valida ntreaga tranzacie.

Ultimele dou operaii sunt necesare numai n anumite tehnici de refacere


Baze de date, 2008 Prof. Felicia Ionescu 7

Starile tranzactiilor
Diagrama de stare a unei tranzactii:
read, write begin ACTIV abort end 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)
Baze de date, 2008 Prof. Felicia Ionescu 8

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

Dou operaii dintr-o planificare sunt conflictuale (conflicting operations) dac aparin unor tranzacii diferite, acceseaz acelai articol i cel puin una dintre operaii este operaie de scriere Planificri seriale (serial schedules): o planificare S se numete serial dac pentru orice tranzacie T participant n planificare, toate operaiile din T se execut consecutiv n S; altfel, planificarea se numete neserial Orice planificare seriala a unor tranzactii corecte este corecta, dar nu permite ntreeserea operaiilor i concurena tranzaciilor De aceea, n cazul sistemelor de baze de date cu utilizatori multipli se folosesc planificrile serializabile, care admit concurena, asigurnd n aceelai timp consistena bazei de date
Baze de date, 2008 Prof. Felicia Ionescu 9

Planificari seriale ale tranzactiilor


Planificarile SA si SB ale tranzactiilor T1 si T2 sunt seriale
T1 read(X) X=X-N write(X) read(Y) Y=Y+N write(Y) read(X) X=X+M write(X) SA read(X) X=X-N write(X) read(Y) Y=Y+N write(Y) T2 T1 T2 read(X) X=X+M write(X) SB

Daca notam operaiile de read, write, commit i abort cu r, w, c, a, cu indice numarul tranzaciei 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 operaii: (r1(X), w2(X)), ( r2(X), w1(X)) i (w1(X), w2(X)) sunt conflictuale
Baze de date, 2008 Prof. Felicia Ionescu 10

Planificari serializabile ale tranzactiilor


O planificare a n tranzacii se numte serializabil, dac este echivalent cu o planificare serial a celor n tranzacii Dou planificri sunt echivalente (din punct de vedere al conflictelor) dac oricare pereche de operaii conflictuale se execut n aceeai ordine n cele dou planificri Planificarile SC si SD sunt planificari echivalente cu SA, deci sunt serializabile Testarea echivalentei unei planificri cu o planificare seriala este costisitoare, dar se poate asigura serializabilitatea prin controlul concurenei tranzaciilor
T1 read(X) X=X-N write(X) read(X) X=X+M write(X) read(Y) Y=Y+N write(Y) Baze de date, 2008 Prof. Felicia Ionescu Y=Y+N write(Y) write(X) 11 SC T2 read(X) X=X-N write(X) read(Y) read(X) X=X+M SD T1 T2

Tehnici de control al concurentei


Pentru a asigura proprietile ACID ale tranzaciilor i, prin aceasta, consistena datelor, este necesar controlul execuiei concurente a tranzaciilor Cele mai utilizate tehnici de control al concurenei sunt:
Tehnici bazate pe blocarea accesului la date prin zvoare (locks) Tehnici bazate pe mrci de timp (timestamps)

Protocoalele de control al concurenei sunt implementate de SGBD-uri:


programatorii de aplicaii nu opereaz explicit cu zvoare sau mrci de timp ei stabilesc opiunile prin care sistemul SGBD adopt anumite tehnici de control

Un zvor (lock) este o variabil L(X) asociat cu un articol X al bazei de date care descrie starea acelui articol n raport cu operaiile care i se pot aplica Tipuri de zavoare utilizate in SGBD-uri:
zvoare binare zvoare cu stri multiple

Un zvor binar (binary lock) poate avea dou stri: liber (sau neblocat - free, unlocked) i ocupat (sau blocat - busy, locked) sau, mai simplu, strile 1 i 0 Asupra unui zvor binar L(X)se pot executa dou operaii:
operaia de blocare, lock(X) operaia de eliberare, unlock(X)
Baze de date, 2008 Prof. Felicia Ionescu 12

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, prin operaia unlock

Dac zvorul articolului X este ocupat (L(X)=0), atunci tranzacia:


ateapt pn ce acesta este eliberat (de o alt tranzacie, care i-a terminat operaiile de acces la acel articol), dup care execut aceeai secven de operaii: blocarea zvorului, execuia operaiilor care acceseaz articolul respectiv i eliberarea zvorului

Operaia de blocare se executat ca operaie indivizibil (folosind instruciuni speciale de tip TestAndSet) Regulile pe care trebuie s le respecte fiecare tranzacie care folosete un zvor binar:
1. O tranzacie trebuie s blocheze zvorul articolului X (prin operatia lock(X)), nainte de a efectua orice operaie de citire sau de scriere a articolului X 2. O tranzacie trebuie s elibereze zvorul unui articol X (prin operaia unlock(X)) dup ce a efectuat toate operaiile de citire sau de scriere a articolului X 3. O tranzacie nu poate cere un zvor pe care l deine deja 4. O tranzacie nu poate elibera un zvor pe care nu l deine
Baze de date, 2008 Prof. Felicia Ionescu 13

Zavoare cu stari multiple (1)


Tehnica zvoarelor binare este prea restrictiv i limiteaz n mod nejustificat concurena n execuia tranzaciilor De exemplu, mai multe tranzacii pot efectua operaii de citire n mod concurent, fr ca acest lucru s afecteze consistena bazei de date, dar acest lucru este interzis n tehnica zvoarelor binare De aceea, multe sisteme de gestiune a bazelor de date utilizeaz si zvoare cu stri multiple Un zvor cu stri multiple (multiple-mode lock) poate fi ntr-una din urmtoarele trei stri:
liber (neblocat, unlocked): zvorul nu este deinut de nici o tranzacie i prima tranzacie care lanseaz o operaie de blocare l poate obine blocat pentru citire (read-locked):oricte tranzacii pot deine zvorul respectiv i pot efectua operaii de citire a articolului protejat de acesta, dar nici o tranzacie nu poate scrie n acel articol blocat pentru scriere (write-locked): o singur tranzacie poate deine zvorul i poate citi sau scrie n articolul protejat de acesta, nici o alt tranzacie neputnd accesa articolul respectiv, nici pentru scriere nici pentru citire

Operatiile de blocare pentru citire, blocare pentru scriere si deblocare a unui zavor multiplu al articolului X se noteaza: read_lock(X), write_lock(X) si unlock(X)
Baze de date, 2008 Prof. Felicia Ionescu 14

Zavoare cu stari multiple (2)


Orice tranzacie care utilizeaz un zvor cu stri multiple trebuie s respecte urmtoarele reguli:
1. O tranzacie trebuie s execute o operaie de blocare partajat sau exclusiv a zvorului articolului X (read_lock(X) sau write_lock(X)) nainte de a efectua orice operaie de citire a articolului X 2. O tranzacie trebuie s execute o operaie de blocare exclusiv a zvorului articolului X (write_lock(X)) nainte de a efectua orice operaie de scriere a lui X 3. O tranzacie trebuie s elibereze zvorul unui articol X (unlock(X)) dup ce a efectuat toate operaiile de citire sau de scriere a articolului X; operaia de eliberare a unui zvor poate fi executata numai de o tranzactia care deine (n mod exclusiv sau partajat) acel zavor 4. O tranzacie nu poate executa o operaie read_lock(X) dac deine deja, n mod partajat sau exclusiv, zvorul articolului X; aceast cerin poate fi slbit (relaxata) astfel: o tranzacie care deine un zvor partajat pentru articolul X poate s ntreasc (upgrade) aceast deinere la o deinere exclusiv prin operaia write_lock(X) 5. O tranzacie nu poate lansa o operaie write_lock(X) dac deine deja, n mod partajat sau exclusiv, zvorul articolului X; la fel ca i cerina precedent, aceast cerin poate fi slbit astfel:o tranzacie care deine un zvor exclusiv pentru articolul X poate s slbeasc (downgrade) aceast deinere la o deinere partajat prin operaia read_lock(X)
Baze de date, 2008 Prof. Felicia Ionescu 15

Blocarea folosind zavoare


Fie tranzactiile T3,T4, o planificarea seriala (a) si planificarile neseriale (b) si (c)
Daca se foloseste un singur zavor pentru toate articolele grupate (XY) si se respecta protocolul de utilizare a zavoarelor, se obtin planificari serializabile (b) Daca se folosesc mai multe zavoare, se pot obtine planificari neserializabile (c), chiar daca se respecta protocolul de utiliz. a zavoarelor T3 T4
T3 read(Y) read(X) X=X+Y write(X) read(X) read(Y) Y=X+Y write(Y) T4 T3 write_lock(XY) read(Y) read(X) write_lock(XY) X=X+Y write(X) unlock(XY) read(X) read(Y) Y=X+Y write(Y) write_lock(X) read(X) X=X+Y write(X) unlock(X) unlock(XY) T4 blocata T4 read_lock(Y) read(Y) unlock(Y) read_lock(X) read(X) unlock(X) write_lock(Y) read(Y) Y=X+Y write(Y) unlock(Y)

(a)

(b)

(c)

Fie: X=20, Y=30:

planificarile (a) si (b): rezultat corect (X=50, Y=80) planificarea neseriala(c): rezultat eronat (X=50,Y=50)
Baze de date, 2008 Prof. Felicia Ionescu

16

Protocolul de blocare in doua faze (1)


Pentru a asigura serializabilitatea planificrilor tranzactiilor care folosesc mai multe zavoare, pe lng regulile de utilizare a zvoarelor, mai este necesar s se respecte un protocol privind ordinea operatiilor de blocare i de eliberare a zvoarelor, 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 operaiile de blocare a zvoarelor sa preceada prima operaie de eliberare a unui zvor O astfel de tranzacie poate fi divizat n dou faze:
faza de cretere (growing phase), n care pot fi achiziionate noi zvoare ale articolelor care vor fi accesate, dar nici un zvor nu poate fi eliberat faza de descretere (shrinking phase), n care zvoarele deinute pot fi eliberate, dar nici un alt zvor nu mai poate fi achiziionat.

S-a demonstrat c, dac fiecare tranzacie a unei planificri respect protocolul de blocare n dou faze, atunci planificarea este serializabil Planificarea tranzaciilor din figura precedenta (c) nu respect protocolul de blocare n dou faze deoarece:
T3 elibereaz zvorul articolului Y naintea achiziionrii zvorului pentru scrierea articolului X (write_ lock(X)) T4 elibereaz zvorul articolului X naintea achiziionrii zvorului pentru scrierea articolului Y (write_lock(Y))

Aceasta planificare este neserializabil, cu rezultat al execuiei incorect, aa cum s-a artat mai nainte
Baze de date, 2008 Prof. Felicia Ionescu 17

Protocolul de blocare in doua faze (2)


Planificarea din figura alaturata este serializabil, echivalent cu planificarea serial T3, T4 (cu rezultat corect X=50, Y=80) Daca T3 lanseaz operaia de blocare a zvorului articolului X naintea tranzaciei T4, tranzacia T4 este blocata, asteptnd eliberarea zvorului articolului X, dup care efectueaza restul operaiilor Probleme care apar la utilizarea zvoarelor:
impasul (deadlock): blocarea execuiei tranzaciilor atunci cnd dou sau mai multe tranzacii se ateapt una pe ceallalt ca s elibereze un zvor; exista tehnici de prevenire si de eliminare a impasului amnarea permanent (nfometare) (livelock, indefinit postponement, starvation): o tranzacie se afl n stare de amnare nedefinit dac ea nu poate continua execuia o perioad lung de timp, n timp ce toate celelalte tranzacii se execut normal; prevenirea se face prin asigurarea unei politici echilibrate de obtinere (blocare) a zavoarelor
Baze de date, 2008 Prof. Felicia Ionescu
T3 read_lock(Y) read(Y) write_lock(X) read_lock(X) unlock(Y) read(X) X=X+Y write(X) unlock(X) read(X) write_lock(Y) unlock(X) Y=X+Y write(Y) unlock(Y) T4 blocata T4

18

Controlul concurentei bazat pe marci de timp


O marc de timp (timestamp) este un identificator unic al unei tranzacii, creat de sistemul de gestiune a bazei de date, care se bazeaz pe timpul de start al tranzaciei O marc de timp se poate crea:
fie folosind valoarea curent a ceasului sistemului de operare fie folosind un numrtor care este incrementat la fiecare asignare a unei noi mrci, n ordinea de lansare a tranzaciilor

O tranzacie T va avea o marc de timp unic, notat TS(T) Pentru fiecare articol X al bazei de date se definesc dou mrci de timp:
read_TS(X) - marca de timp de citire a articolului X; este cea mai mare marc de timp dintre toate mrcile de timp ale tranzaciilor care au citit articolul X write_TS(X) - marca de timp de scriere a articolului X; este cea mai mare marc de timp dintre toate mrcile de timp ale tranzaciilor care au scris n articolul X

Serializabilitatea planificrilor se obine dac se impun anumite condiii ordinii de accesare a articolelor de mai multe tranzacii concurente, n funcie de mrcile de timp ale acestora
Baze de date, 2008 Prof. Felicia Ionescu 19

Ordonarea operatiilor dupa marcile de timp


La lansarea unei operaii de scriere a articolului X (write(X)):
Dac read_TS(X) > TS(T), atunci tranzacia T trebuie s fie abandonat i rulat napoi, deoarece o alt tranzacie 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 tranzacia T nu va executa operaia de scriere, dar va putea continua cu celelalte operaii. Aceasta, deoarece o alt tranzacie, 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 aprut nici una din situaiile precedente, atunci T va executa operaia de scriere n articolul X i va seta write_TS(X)=TS(T).

La lansarea unei operaii de citire a articolului X (read(X)):


Dac write_TS(X) > TS(T), atunci tranzacia T trebuie s fie abandonat i rulat napoi, deoarece o alt tranzacie 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 operaia 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 tranzacie T care a fost anulat i rulat napoi va fi relansat, dar cu o nou marc de timp, corespunztoare noului moment de lansare Ordonarea dup mrcile de timp garanteaz serializabilitatea planificrilor In acest protocol nu poate sa apara impasul, dar poate apare amnarea indefinit
Baze de date, 2008 Prof. Felicia Ionescu 20

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

Pentru orice nivel de izolare (ISOLATION LEVEL) este prevenita pierderea actualizarilor, dar se admit unele citiri incorecte, asa cum se vede in tabel

Nivel de izolare READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE

Citire impropie DA NU NU NU

Citire nerepetabila DA DA NU NU

Citire fantoma DA DA DA NU 21

Baze de date, 2008

Prof. Felicia Ionescu

Exemplu de tranzactie in MySQL (1)


In mod MySQL o tranzactie se lanseaza cu comanda START TRANSACTION Fie baza de date ZBORURI cu tabelele descrise la inceputul capitolului:

Se defineste o tranzactie pentru rezervarea unui loc la o cursa aeriana in procedura stocata sp_rezervari() Daca tabelul CURSE contine linia (1, Bucuresti, Paris, 2008-12-30,1) si se apeleaza: sp_rezervari(@rez, 100, Ionescu, Ion, Craiova, Bucuresti, Paris, 2009-12-30, 500) atunci: Se obtine @rez=1 (executie corecta)
NrLocuriLibere in tabelul CURSE este decrementat cu 1 (mai sunt 0 locuri) Tabelul PASAGERI va contine si linia (100, Ionescu, Ion, Craiova) Tabelul FACTURI va contine si linia: (1, 100,1,2008-12-28,500)

Daca se incearca inca o rezervare, se obtine @rez=0 si nicio modificare in tabele (s-a executat rollback)
Baze de date, 2008 Prof. Felicia Ionescu 22

Exemplu de tranzactie in MySQL (2)


DELIMITER $$ DROP PROCEDURE IF EXISTS `zboruri`.`sp_rezervari` $$ CREATE PROCEDURE `zboruri`.`sp_rezervari`(OUT rezultat INT, s_pasager INT, s_nume varchar(20), s_prenume varchar(20), s_adresa varchar(20), plecare varchar(20), sosire varchar(20), s_data date, s_pret decimal) BEGIN DECLARE l_cursa, l_locuri INT; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; SET autocommit = 0; START TRANSACTION; INSERT INTO PASAGERI values(s_pasager, s_nume, s_prenume, s_adresa); SELECT IdCursa, NrLocuriLibere INTO l_cursa, l_locuri FROM CURSE WHERE AeroportPlecare=plecare AND AeroportSosire=sosire AND DataCursa = s_data; IF l_locuri > 0 THEN BEGIN UPDATE CURSE SET NrLocuriLibere = l_locuri - 1; INSERT INTO FACTURI(IdPasager,IdCursa, DataFactura,Pret) values (s_pasager, l_cursa, CURDATE(), s_pret); COMMIT; SET rezultat = 1; END; ELSE BEGIN ROLLBACK; SET rezultat = 0; END; END IF; END $$ DELIMITER ;
Baze de date, 2008 Prof. Felicia Ionescu 23

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

Ori de cte ori se poate nlocui o tranzacie complex, cu numr mare de operaii i timp de execuie ridicat, cu mai multe tranzacii scurte, este indicat s se fac aceast transformare De asemenea, pentru meninerea tranzaciilor ct mai scurte posibil, se recomand ca o tranzacie s nu fie pornit pn ce nu au fost pregtite toate datele (citirea datelor de intrare, parcurgerea, analiza i prelucrarea acestora) Toate operaiile de gestiune a tranzaciilor i de refacere a datelor sunt prevzute n diferitele componente ale sistemelor SGBD (administratorul de tranzacii, administratorul de refacere), iar aplicaiile:
trebuie s se prevad tranzacii corecte pot selecta diferite opiuni de control al tranzaciilor i de refacere a datelor oferite de sistemul de gestiune respectiv
Baze de date, 2008 Prof. Felicia Ionescu 24

Tehnici de refacere a bazelor de date


Refacerea unei baze de date dup producerea 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 ct mai apropiat de momentul apariiei defectului Tehnicile de refacere a bazelor de date sunt, n general, integrate cu tehnicile de control al concurenei si depind de SGBD Pentru operaiile de refacere se folosete fiierul jurnal (log file), i (sau) o copie de rezerv a bazei de date (database backup) stocat n general pe band magnetic Un punct de validare (commit point) este punctul atins de o tranzacie care a executat cu succes toate operaiile sale i le-a nregistrat n fiierul jurnal
ntr-un astfel de punct, o tranzacie T nscrie n fiierul jurnal operaia [commit,T] i, de asemenea, trebuie s scrie blocul din bufferul de scriere n fiierul jurnal

Un punct de control (checkpoint) este nscris n fiierul jurnal atunci cnd se scriu n fiierele bazei de date toate rezultatele operaiilor de scriere ale tranzaciilor validate
Aceasta nseamn c toate tranzaciile care au nregistrarea [commit,T] nscris n fiierul jurnal naintea unui punct de control nu vor necesita reluarea operaiilor de scriere n cazul unei defectri a sistemului

Administratorul de refacere al SGBD-ului (recovery manager) decide la ce interval de timp (sau dup cte tranzacii) introduce un nou punct de control
Baze de date, 2008 Prof. Felicia Ionescu 25

Refacerea datelor dupa defecte necatastrofice


Dac baza de date nu este distrus fizic, dar a devenit inconsistent datorit unui defect necatastrofic, atunci strategia de refacere const n:
anularea modificrilor care au produs inconsistena (prin operaii undo) executarea din nou a modificrilor care s-au pierdut (prin operaii redo)

n acest caz nu este necesar copia de rezerv, ci se folosete starea actual a bazei de date i fiierul jurnal Exista dou tehnici de refacere a datelor dupa defecte necatastrofice:
Refacerea cu actualizare amnat (deferred update) Refacerea cu actualizare imediat (immediate update)

Pentru refacerea cu actualizare amanata se executa urmatoarele operatii:


Se parcurge fiierul jurnal n sens invers, ncepnd de la ultima nregistrare, pn se ntlnete primul punct de control Se construieste o list a tranzaciilor validate, n care se introduc toate tranzaciile T care au o nregistrare de tipul [commit,T] n fiierul jurnal ntre punctul de control considerat i sfritul fiierului jurnal, Se construieste o list a tranzaciilor nevalidate, n care se introduc toate tranzaciile T care au o nregistrare de start ([begin,T]) n fiierul jurnal, dar nu au i nregistrarea corespunztoare de validare. Dup aceasta, se execut reluarea (REDO) tuturor operaiilor de scriere (write(X)) ale tranzaciilor validate, n ordinea n care apar n fiierul jurnal, iar tranzaciile nevalidate sunt relansate
Baze de date, 2008 Prof. Felicia Ionescu 26

Refacerea cu actualizare imediata


In tehnicile de refacere cu actualizare imediat, atunci cnd o tranzacie lanseaz o comand de actualizare a bazei de date, actualizarea este efectuat imediat, fr s se mai atepte ajungerea la un punct de validare In majoritatea acestor tehnici se impune ca modificarea s fie mai nti memorat n fiierul jurnal (pe disc), nainte de a fi aplicat bazei de date; aceast regul este cunoscut sub numele de protocol de scriere n avans a fiierului jurnal (write-ahead log protocol) Dac se admite actualizarea imediat, atunci la refacere trebuie s se poat anula (prin operaii undo) modificrile efectuate de o tranzacie, dac aceasta eueaz ulterior din diferite motive In felul acesta se efectueaza rularea napoi (rollback) a tranzaciei Tehnica de refacere cu actualizare imediat are avantajul simplitii operaiilor de scriere, care se efectueaz direct n baza de date, fr s fie necesar s se atepte atingerea unui punct de validare pentru transferarea datelor n baza de date Dezavantajul acestei metode este faptul c pot apare anulri n cascad, care necesit operaii complicate de refacere
Baze de date, 2008 Prof. Felicia Ionescu 27

Refacerea datelor dupa defecte catastrofice


Dac baza de date a fost puternic distrus datorit unei defectri serioase a discului, atunci se restaureaz starea bazei de date din copia de rezerv a bazei de date (database backup) Ultima copie salvat se ncarc de pe band pe disc (dup ce acesta a fost nlocuit sau reparat) i sistemul este repornit Totui, tranzaciile efectuate de la ultima operaie de salvare pn n momentul apariiei defectului se pierd Deoarece fiierul jurnal este mult mai mic dect fiierele bazei de date, se obinuiete ca acesta s fie salvat mai des dect baza de date nsi i s fie iniializat la fiecare operaie de salvare a bazei de date In aceast situaie, dup ncrcarea ultimei copii salvate a bazei de date se folosete fiierul jurnal pentru a reface toate tranzaciile validate existente n copia salvat a fiierului jurnal (care este mai recent dect copia salvat a bazei de date)

Baze de date, 2008

Prof. Felicia Ionescu

28

Baze de date, 2008

Prof. Felicia Ionescu

29

S-ar putea să vă placă și