Sunteți pe pagina 1din 67

UNIVERSITATEA TRANSILVANIA DIN BRAOV FACULTATEA DE TIINE ECONOMICE

Prof.dr. DORIN LIXNDROIU

Lector dr. RADU LIXNDROIU

BAZE DE DATE RELAIONALE


introducere n baze de date algebra relaional (AR) SQL Access interogri n AR i Access 2007 normalizarea relaiilor

Note de curs

Anul universitar 2009-2010


1

CAP.1. BAZE DE DATE 1.1. ORGANIZAREA DATELOR (OD) (Ce presupune organizarea datelor?) definirea, structurarea, ordonarea i gruparea datelor n colecii de date omogene; stabilirea relaiilor ntre date, ntre elementele unei colecii, ntre colecii de date; stocarea datelor pe suport informational. 1.2. OBIECTIVELE ORGANIZRII DATELOR (De ce este necesar organizarea datelor?) minimizarea timpului de acces la date; economie de memorie intern i extern; asigurarea unicitii datelor; sistemul OD trebuie s reflecte ct mai fidel toate legturile dintre obiectele, fenomenele, procesele economice pe care aceste date le reprezint; asigurarea flexibilitii datelor. 1.3. ETAPE ALE EVOLUTIEI TEHNICILOR DE ORGANIZARE I PRELUCRARE A DATELOR Prima etap se adapteaz tipurile de organizare a datelor existente n sistemele de prelucrare manual la condiiile tehnice impuse de calculator. - apare fiierul (n general cu organizare secvenial) - utilizarea benzilor magnetice - prelucrarea pe loturi (batch processing) A doua etap este marcat de separarea dintre structura logic de date i structura fizic. Rezult independena fizic a datelor. - se utilizeaz fiiere secvenial-indexate i fiiere cu acces direct - suport extern de memorare discul magnetic - se asigur independena aplicaiilor de modificrile echipamentelor hardware (banda, disc, etc.) - apar primele faciliti simple de protecie a datelor Caracteristic comun a primelor dou etape: fiecare aplicaie lucreaz cu propriile fiiere fr a avea nici o legtur cu fiierele utilizate de alte aplicaii. Inconveniente: - redundana datelor = > probleme n operaiile de actualizare - absena unor legturi logice ntre datele din grupuri diferite de fiiere = > numr mare de fiiere, timp mare de prelucrare - flexibilitate redus a sistemului la apariia unei noi aplicaii. A treia etap este definit de apariia fiierelor integrate. - se reduce redundana datelor, aceleai date fizice pot fi utilizate n comun de ctre mai multe aplicaii - rezult o structur logic unitar.

Not. Structura integrat constituie originea noiunii de model conceptual (modelul ce contine descrierile tuturor datelor i a legturilor dintre ele). A patra etap este etapa bazelor de date.

1.4. SISTEMUL BAZAT PE FISIERE INDEPENDENTE (file based) Este o colecie de programe de aplicaie care efectueaz servicii pentru utilizatorii finali. Fiecare program definete i gestioneaz propriile date. Caracteristici: datele sunt descrise independent n toate fiierele n care apar fiecare fiier de date este descris n toate programele care l acceseaz nu exist control al accesului i manipulrii datelor, n afara celui impus prin programele de aplicaie. Dezavantajele tratrii bazate pe fisiere: redundana i inconsistena datelor dificultatea accesului izolarea datelor complexitatea deosebit a actualizrilor probleme de securitate probleme legate de integritatea datelor costul ridicat dificultatea de a obine rspunsuri rapide la probleme ad-hoc simple inflexibilitatea fa de schimbrile ulterioare din sistemul informational. 1.5. BAZE DE DATE DATA - nregistrarea unei observaii, obiect, fenomen, imagine, sunet sau text, ntr-o form convenabil unei prelucrri, interpretri sau transmiteri prin mijloacele informaticii. INFORMAIA - semnificaia ce poate fi ataat sau poate fi dedus dintr-un ansamblu de date pe baza asociaiilor dintre acestea. BAZA DE DATE o colecie de date operaionale nregistrate pe suport adresabil, aflate n interdependen logic, mpreun cu descrierea datelor i a relaiilor dintre ele i care sunt prelucrate n aplicaiile informatice ale unei organizaii. Baza de date permite operaii de introducere, tergere, actualizare i interogare a datelor. BAZA DE DATE este un ansamblu de date: - structurate, - coerente, - persistente,

- cu o redundan minim i controlat, - independente de programul de aplicaie, - direct accesibile dup mai multe criterii, - simultan accesibile de ctre mai muli utilizatori. ARHITECTURA UNUI SISTEM DE BAZE DE DATE (Database System) - baza de date propriu-zis n care se memoreaz datele - sistemul de gestiune al bazei de date (SGBD) - metabaza de date - dicionarul datelor (DD) - mijloacele hardware - personalul (ABD, analiti, programatori, utilizatori finali). Cerinele minimale care se impun unei baze de date: - furnizarea n timp util a informaiilor solicitate - costuri minime n prelucrarea i ntreinerea informaiei - capacitatea de a satisface, cu aceleai date necesitile informaionale ale unui numr mare de utilizatori - flexibilitate - posibilitatea de adaptare la cerine noi, de a da rspunsuri la interogri neprevzute iniial - asigurarea unei redundane minime a datelor - sincronizare exploatarea simultan a datelor de ctre mai muli utilizatori - confidenialitate asigurarea securitii datelor prin mecanisme de protecie mpotriva accesului neautorizat - integritate faciliti de validare i recuperare a datelor deteriorate accidental - compatibilitate i expandabilitate posibilitatea de valorificare a eforturilor anterioare i anticiparea nevoilor viitoare - permisivitate prin ierarhizarea datelor dup criteriul frecvenei acceselor, sau reorganizri care s creasc performanele BD. Database Administration (ABD) - Administratorul bazei de date este responsabil cu realizarea fizic a BD, care include proiectarea, implementarea, exploatarea i ntreinerea acesteia, securitatea, acordarea drepturilor de acces i controlul integritii.

1.6. SISTEMUL DE GESTIUNE AL BAZELOR DE DATE ( SGBD) Database Management System (DBMS) SGBD - un ansamblu de programe (produs software) care permite definirea,actualizarea i consultarea datelor din baza dedate. Funciile unui SGBD: - definirea datelor (DDL Data Definition Language) permite definirea conceptual a datelor, fr referire la modul de memorare - manipularea datelor (DML Data Manipulation Language i / sau interfaa cu limbaje de programare) permite specificarea operaiilor de introducere, actualizare, tergere i interogare a datelor

- controlul integritii datelor - accesul concurent (folosirea simultan a datelor de mai muli utilizatori) - confidenialitatea informaiilor din BD - securitatea n funcionare (DCL Data Control Language)

Utilizator

Interfa de generaia a 4-a

Definire de date S Manipulare G Confidenialitate B Securitate D Interfee Pascal Visual Fox Oracle ...

Sistem de exploatare

Baze de date

Baze de date

Arhitectura funcional a unui SGBD 5

Obiectivele unui SGBD: - asigurarea independenei datelor - asigurarea unor faciliti sporite de utilizare a datelor - asigurarea unei redundane minime i controlate a datelor din BD (reducerea redundanelor se face prin identificarea informaiilor comune) - securitatea i confidenialitatea datelor - partajabilitatea datelor - integritatea datelor Exist mai multe nivele de reprezentare (abstractizare i percepie) a datelor n baza de date: Nivelul conceptual este dat de viziunea adminstratorului bazei de date asupra datelor. Principalele aspecte la acest nivel: - cu instrumentele oferite de SGBD, administratorul bazei de date realizeaz structura conceptual a BD; - viziunea adminstratorului bazei de date este independent de aplicaiile care vor fi dezvoltate (independen logic); - rezultatul la acest nivel este schema conceptual. Nivelul logic este dat de viziunea programatorului de aplicaii asupra datelor. Principalele aspecte la acest nivel: - programatorul de aplicaii realizeaz programele pentru descrierea i manipularea datelor; - programele implementeaz structura extern (logic) a datelor; - structura extern este dedus din schema conceptual; - viziunea programatorului de aplicaii este independent de suportul tehnic de informaie (independena fizic). Nivelul fizic (intern) este dat de viziunea programatorului (inginerului) de sistem asupra datelor. Principalele aspecte la acest nivel: - programatorul de sistem realizeaz structura intern (fizic); - structura intern corespunde descrierii datelor pe supotul fizic de informaie; - structura intern este dedus din cea extern; - implementarea schemei interne se face cu ajutorul sistemului de gestiune a fiierelor din SGBD i/sau din sistemul de operare, prin gestiunea fizic a perifericelor. Nivelul virtual (extern) este dat de viziunea utilizatorului final asupra sistemului.

Domeniu de aplicaie Parte a domeniului obiect de studiu

Formalisme Entitate-asociere, semantic relaional, funcional etc.

Schema conceptual

Scheme externe

CONCEPTUAL Relaional Schema logic Factori cantitativi LOGIC n funcie de SGBD (tabel, nregistrare, segment, etc.)

Schema fizic

Constrngeri ale SGBD-ului FIZIC

SGBD Programe

Baza de date

Nivele de reprezentare a datelor

ntr-un raport al ANSI / SPARC (American National Standards Institute / Standards Planning And Requirements Committee) se disting cel puin trei nivele de reprezentare a datelor (conceptual, logic i fizic). Pentru fiecare nivel se asociaz o schem. Comentarii. Manipularea datelor presupune instrumente i mecanisme ce permit comunicarea: baz de date - utilizatori. Pentru manipularea datelor, SGBD-urile ofer o serie de faciliti, incluse n Data Manipulation Language (DML). Aciunea se exprim sub forma unei fraze a limbajului, care este evaluat i executat de SGBD. Interfeele sunt alte forme de comunicare care permit SGBD-ului s transmit date ctre alte limbaje de programare (Pascal, C, C++, Cobol etc.). Aceste interfee permit accesul i manipularea datelor dintr-o baz de date plecnd de la un program scris ntr-un limbaj de programare clasic (procedural). Integritatea datelor. Conceptul de integritate a datelor este relativ la calitatea informaiei nregistrate. Constrngerile de integritate sunt specificate n definirea schemei bazei de date. Accesul concurent. Datele dintr-o baz de date pot fi accesate concurent de mai muli utilizatori. SGBD-ul trebuie s ofere mecanisme de gestiune a conflictelor de acces. Confidenialitate. Punerea n comun a datelor pentru mai muli utilizatori impune problema confidenialitii. Confidenialitatea este asigurat prin nume de utilizator i parol care genereaz drepturi de acces difereniate. Securitatea n funcionare. SGBD-ul trebuie s ofere mecanisme care s permit repunerea rapid a bazei de date n stare operaional, n caz de incident hardware sau software. Aceste mecanisme sunt bazate pe nregistrarea operaiunilor realizate asupra bazei de date i reexecutarea lor automat n caz de incident. 1.7. BANCA DE DATE BAZA DE DATE Exist n literatura de specialitate mai multe abordri ale celor dou concepte. Modul lor de tratare este departe de a fi unitar. n unele lucrri se consider: A. Banca de date := Baza de date + SGBD

Ali autori extind noiunea de banc de date i consider banca de date format din : B. Banca de date := baza de date + hardware + SGBD + programele de aplicaii + utilizatorii

n cartea Lart des bases de donnes, autorii Miranda S.M., Busta J.M. fac distincia ntre cele dou concepte:

C. Baza de date conine date primare care sunt exploatate cu ajutorul unui SGBD. n cazul unei interogri, sistemul de gestiune al bazei de date furnizeaz direct rspunsul. Banca de date date conine date refereniale i accesul este asigurat cu ajutorul unui sistem documentar (SD). Sistemul documentar permite o direcionare ctre un text (carte, articol, ...) i dup consultare se obine rspunsul la interogarea formulat. Exemplu [Miranda, 1988]: Dac se consider atributul stare de sntate avnd mai multe valori, printre care {...., nebun, ...} i formulm interogarea: Care a fost starea de sntate a preedintelui Wilson (SUA) ntre 1914-1918 ? Rspunsul dat de banca de date va fi de genul: Istoria contemporan a SUA, pag. 52, ed. 1980, iar rspunsul efectiv se obine n urma consultrii lucrrii indicate. n cazul unei baze de date rspunsul va fi direct valoarea atributului stare de sntate: nebun.

1.8. MODELE DE REPREZENTARE A DATELOR Tipologia SGBD-urilor este n general funcie de tipurile de structuri ale datelor pe care le suport. Dintre modelele cele mai ntlnite amintim [Ionescu, 2004]: modelul ierarhic modelul reea modelul relaional modelul orientat-obiect modelul obiect relaional

Modelul ierarhic (Hierarchical Model) acesta a fost primul model folosit pentru dezvoltarea bazelor de date. Modelul permite reprezentarea claselor sau ansamblelor de obiecte printr-o structur ierarhic de nregistrri. Relaiile de tip "tat-fiu" ntre clase sunt de tip 1:N. Ansamblul claselor se constituie ntr-un arbore direcionat n care nodurile sunt tipurile de nregistrri, iar arcele sunt tipurile de legturi. Modelul reea (Network Model) utilizeaz o structur de graf pentru definirea schemei conceptuale a bazei de date. Nodurile grafului sunt tipurile de entiti, iar muchiile reprezint legturile dintre tipurile de entiti. Relaiile sunt de tipul M:N i se reprezint fr duplicarea nregistrrilor, fiecare nregistrare putnd fi referit de mai multe nregistrri. Acest model este n prezent rar folosit pentru baze de date generale, care implic operaii de interogare. Aplicarea modelului reea se ntlnete n bazele de date grafice utilizate n modelarea realitii virtuale. Modelul relaional (Relational Model) premite vizualizarea unei baze de date ca un ansamblu de tabele bidimensionale. Modelul se bazeaz pe noiunea de relaie din matematic, care corespunde unei mulimi de entiti de acelai tip. Limbajele relaionale de manipulare a datelor sunt limbaje neprocedurale utilizatorul, de exemplu, formuleaz interogarea fr s indice procedura (algoritmul) de rezolvare. SGBD-urile relaionale ofer un limbaj de programare unanim recunoscut i acceptat, limbajul SQL, bazat pe

algebra relaional. Pentru limbajul SQL au fost emise mai multe standarde de ctre International Standardization Office (ISO). Modelul orientat-obiect (Object Model) este un concept unificator n informatic, fiind aplicabil n programare, n proiectare hardware-ului, a bazelor de date, etc. Sistemele de baze de date orientate obiect se bazeaz pe limbajele de programare orientate obiect. Au o utilizare limitat, mult mai redus dect cea a sistemelor de baze de date relaionale. Pentru bazele de date orientate obiect exist un limbaj standard standard de interogare OQL (Object Query Language). Modelul obiect relaional (Object Relational Model) este considerat urmtorul mare val n dezvoltarea i ntreinerea bazelor de date. Construcia se poate realiza dezvoltnd sistemul relaional prin adugarea caracteristicilor obiectuale necesare sau pornind de la un sistem orientat obiect i adugnd caracteristicile relaionale. 1.9. SCURT ISTORIE A BAZELOR DE DATE 1961 - apariia sistemului IDS (Integrated Data Storage, General Electric). Terminologia introdus (tipuri de nregistrri i tipuri set) va fi utilizat n modelul reea prezentat la "Conference On DAta SYstems and Languages Data Base Task Group" (CODASYL DBTG). 1965-1970 - dezvoltarea sistemelor de gestiune a fiierelor generalizate. IBM a dezvoltat modelul iererhic i sistemul IMS (Information Management System). n acceasi perioad apare IMS DB/DC (DataBase/DataCom) care suport modelul reea. n anii 70, domeniul se dezvolt foarte mult, ajungnd s fie disciplin universitar i de cercetare. Astfel apar numeroase produse comerciale care implementeaz propunerile raportului CODASYL DBTGi: ISD II (HoneyWell), DMS1100 (UNIVAC), DMS II (Burroughs), etc. 1970 - apare modelul relaional de date 1971 - publicarea raportului CODASYL DBTG 1972 prima conferin internaional organizat de ACM SIGMOD (Association of Computing Machinery, Special Interest Group on Management Of Data) 1975 - prima conferin internaional VLDB (Very Large Data Base); publicarea raportului ANSI-SPARC 1976 - publicarea modelului Entitate - Asociere 1975 - 1980 - dezvoltarea sistemelor relaionale experimentale: SYSTEM-R (IBM) i INGRES (Berkeley, University of California) 1980 - .... apariia i comercializarea a numeroase SGBD-uri relaionale ce au nlocuit SGBD-urile ierarhce i reea. SGBD-urile pot fi utilizate pe microcalculatoare i se realizeaz sisteme din generaia a patra cu instrumente i interfee multiple. 1990 - .... se dezvolt numeroase produse a cror complexitate crete, la un pre tot mai sczut: PowerBuilder (SYSBASE), Oracle Developer, VB (Microsoft), etc. Se dezvolt modelul client-server, ce se folosete n tot mai multe aplicaii economice. Se dezvolt i produse sotftware ca Excel/ Access (Microsoft) pentru scop personal de o complexitate mai sczut.

10

1990-1995 - apar baze de date pentru Internet. Sunt utilizate conceptele client-server, i astfel complexitatea Internet-ului crete exponenial. 2000 - pentru aplicaiile pe Internet apar o serie de instrumente cum ar fi Active Server Pages, Java Servlets, JDBC, Enterprise Java Beans, ColdFusion, Dream Weaver, Oracle Developer 2000, Apache, MySQL. Se dezvolt procesarea tranzaciilor online (OLTP) precum i procesarea analitic de tip OLAP. Dup 2000 - se dezvolt aplicaii pe arhitectura client-server pentru PDA-uri, tranzacii cu POS-uri, telefoane mobile. Companiile cele mai reprezentative din domeniu rmn: IBM, Microsoft i Oracle. 1.10. BAZE DE DATE RELAIONALE Conceptul de baze de date relaionale (BDR) apare n lucrarea lui E.F.CODD (IBM), A Relational Model for Large Shared Data Banks, (1970). Modelul de date relaional a fost perfecionat n anii urmtori de C.J. DATE, R. BOYCE, R. FAGIN, W.W. ARMSTRONG. Caracteristicile modelului relaional: datele sunt percepute de utilizatori ca tabele simplitate i precizie n definirea elementelor de baz (relaii, atribute, domenii) operatorii relaionali genereaz un tabel rezultat din tabelele operanzi restriciile de integritate, normalizarea relaiilor, controlul concurenei permit crearea structurii datelor i a prelucrrii lor ntr-un mod consistent i asigur integritatea i protecia acestora. Definiia 1.1. BDR este un ansamblu organizat de tabele (relaii) mpreun cu legturile dintre ele. Avantajele BDR fa de fiiere (sisteme file-based) [Velicanu, 2003]:
CRITERIU Independena datelor Nivele de structurare Deschidere i portabilitate Reprezentarea i utilizarea datelor Structura datelor se pstreaz BDR logic i fizic conceptual, logic, fizic mare simplificat prin model n dicionarul datelor FIIERE fizic logic i fizic mic complicat n programe

E.F.CODD formuleaz 13 reguli pentru evaluarea performanelor unui sistem de gestiune a bazelor de date relaionale (SGBDR). Aceste reguli exprim cerinele maximale ca un SGBDR s fie relaional. Condiiile minimale ca un SGBD s fie relaional, pot fi formulate astfel: s implementeze modelul de date relaional prin DDL (Data Definition Language) i DML (Data Manipulation Language) s implementeze un limbaj de interogare relaional

11

Interfaa utilizatorului Gestiunea vederilor R E Z U L T A T E

Integritatea semantic Autorizarea accesului Control

Optimizarea cererilor Gestiunea planurilor de execuie Tratarea cererilor Controlul execuiei Executarea operatorilor algebrici

Gestiunea buffer-ului Mecanisme de acces

Gestiunea accesului

Gestiunea accesului concurent Jurnalizarea

Securitate

Arhitectura funcional a unui SGBD relaional Elementele de baz utilizate pentru a descrie datele n modelul relaional din punct de vedere formal, uzual sau fizic sunt:
Formal relaie tuplu atribut domeniu Uzual tablou linie coloan tip de dat Fizic fiier articol cmp tip de dat

12

Principalele concepte utilizate n bazele de date relaionale Definiia 1.2. Domeniul este un ansamblu de valori care poate fi definit explicit prin enumerarea tuturor valorilor sau implicit prin precizarea proprietilor pe care le au valorile domeniului respectiv. Exemplu: D1 = {MK, ECTS, FB, CIG, IE, MN} D2 x | x N , x 0,100 D3 = {0, 9, 19} - domeniul D1 este definit explicit prin enumerarea programelor de studii care au n plan disciplina Baze de date; - domeniul D2 este definit implicit prin specificarea proprietilor care pot fi luate de valorile domeniului; - domeniul D3 este definit explicit prin enumerarea valorilor posibile (n procente) ale cotelor de TVA.
V1 ,V2 ,...,Vn , unde V1 f : Ai Fiecrui domeniu i se asociaz un atribut : D1 D2 ... Dn D1 ,...,Vn Di , f Ai Dn Di

Definiia 1.3. Relaia poate fi definit ca o mulime de tupluri ce aparine produsului cartezian D1 D2 ... Dn , astfel spus R D1 D2 ... Dn . Relaia se poate memora ntr-o tabel bidimensional:
R t1 t2 tm A1 a11 a21 ... am1 A2 a12 a22 ... am2 ..... An a1n a2n ... amn

... .....

Liniile tabelului formeaz elementele relaiei numite i tupluri. ti ai1 , ai 2 ,..., ain . Notm: tuplul i prin Schema relaiei (schema relaional) este un element invariant n timp i este dat de mulimea numelor atributelor corespunztoare unei relaii. Pentru fiecare atribut se precizeaz domeniul asociat. Notm schema unei relaii cu: R A1 : D1 , A2 : D2 ,..., An : Dn sau pe scurt: R A1 , A2 ,..., An . Schema bazei de date relaionale este dat de mulimea tuturor schemelor relaionale corespunztoare unei aplicaii, iar coninutul curent al relaiilor la un moment dat se numete baz de date relaional. Cardinalul unei relaii este dat de numrul de tupluri din relaie. Gradul unei relaii (aritatea relaiei) este dat de numrul de atribute din relaie. 13

Relaia virtual (relaie derivat, viziune) este definit implicit pe baza altor relaii, prin intermediul unei expresii relaionale. Stabilirea efectiv a tuplurilor care compun relaia virtual se realizeaz prin evaluarea expresiei relaionale n momentul n care utilizatorul apeleaz la aceast relaie. Domenii compatibile cu reuniunea domeniile au acelai grad (aritate) i atributele corespondente iau valori n aceleai domenii. Relaia se prezint ca o mulime de tupluri. Logic, aceast mulime nu poate conine elemente identice, cu alte cuvinte, relaia nu poate avea tupluri duplicate. Necesitatea identificrii unui tuplu a condus la noiunea de cheie. Definiia 1.3. Cheia unei relaii reprezint ansamblul minimal de atribute cu rol de identificare unic a tuplurilor dintr-o relaie. ntr-o relaie pot exista mai multe atribute / combinaii de atribute cu rol de identificare unic a tuplurilor, exist deci mai muli candidai cheie. Dintre acetia ABD-ul alege cheia primar, celelalte devin chei secundare sau alternante. Orice relaie are cel puin o cheie. Cheia simpl este cheia format dintr-un singur atribut, iar cheia compus este format din mai multe atribute. Domeniul primar este domeniul pe care este definit cheia primar. Cheia extern este un atribut /grup de atribute dintr-o relaie, ale crui valori sunt definite pe domeniul primar al altei relaii. Relaia primar. O relaie RP este primar, dac exist o alt relaie R, legat semantic de ea, care are drept cheie extern, cheia primar a relaiei considerate (RP). Exemple. 1. Fie relaia STUDENT [nr_matricol, nume, facultate, grupa, sectia, CNP, adresa] Atributele nr_matricol i CNP au rol de identificare unic a tuplurilor din relaie; reprezint candidai cheie. Alegem drept cheie primar atributul nr_matricol, care are domeniul format din 4 caractere numerice i este mai uor de operat. Atributul CNP, format din 13 caractere numerice devine cheie secundar (alternant). 2. Se consider relaiile: PRODUSE [cod_produs, denumire, um] CONTRACTE [nr_contract, cod_produs, cod_client, data, cantitate, pret_unitar] CLIENTI [cod_client, nume, CUI, adresa, cont, tel, email] relaia PRODUSE are cheia primar - cod_produs;

14

relaia CONTRACTE are cheia primar - nr_contract, iar atributele cod_produs i cod_client sunt chei externe ; relaia CLIENTI are cheia primar - cod_client, iar atributul CUI este cheie secundar; PRODUSE i CLIENTI sunt relaii primare. 1.11. RESTRICIILE DE INTEGRITATE MINIMALE Restriciile de integritate minimale sunt reguli pe care trebuie s le satisfac datele din baza de date. A. Integritatea domeniului const din controlul sintactic i semantic al unei date oarecare i se refer la definiia tipului domeniului. De exemplu, n cazul unui domeniu definit explicit prin enumerarea valorilor, trebuie s ne asigurm c valorile atributului respectiv fac parte din mulimea enumerat. Sau, n cazul unui domeniu definit implicit, se poate verifica dac numrul unei facturi aparine unui interval dat. B. Integritatea entitii se refer la restricii asupra cheii primare. Aceasta trebuie s fie unic i nenul (atributele cheii primare trebuie s fie diferite de valoarea null) . C. Integritatea referirii impune ca valorile cheii externe s figureze printre valorile cheii primare din relaia referit (relaia primar).

15

CAP.2. ALGEBRA RELAIONAL Interogarea (query) este operaia prin care se obin datele dorite dintr-o baz de date, selectate conform unor criterii. Deoarece aceast operaie este cea mai important operaie, limbajele de manipulare a datelor sunt denumite i limbaje de interogare. Pentru formularea conceptual a interogrilor n bazele de date relaionale s-au dezvoltat dou limbaje abstracte de interogare: algebra relaional i calculul relaional. Algebra relaional (relational algebra), introdus de Codd n 1970, definete cadrul formal al limbajelor relaionale pentru baze de date. Algebra relaional introduce o colecie de operatori algebrici care se aplic relaiilor (tabelelor). Fiecare operaie din algebra relaional are drept operanzi una sau mai multe relaii, iar rezultatul este tot o relaie. Aceast uniformitate (proprietatea algebric de nchidere) permite aplicarea de combinaii de operatori relaiilor. Prin analogie cu un compilator care, plecnd de la un program surs produce un program executabil, rezultatul compilrii unei interogri (cereri) de ctre un SGBD relaional este o expresie algebric care va fi evaluat. n cadrul modelului relaional se consider limbaje relaionale complete numai acele limbaje de interogare care permit implementarea tuturor operaiilor prevzute de unul din limbajele abstracte de interogare. Limbajele de interogare reale implementate n sistemele de baze de date relaionale sunt limbaje definite pe baza limbajelor abstracte de interogare. Cunoaterea limbajului abstract de interogare bazat pe algebra relaional este obligatorie pentru nelegerea aprofundat a modului de execuie a interogrilor. Algebra relaional conine dou tipuri de operaii: operaii pe mulimi: reuniunea, intersecia, diferena i produsul cartezian. Pentru a determina reuniunea, intersecia i diferena a dou relaii, acestea trebuie s fie compatibile cu reuniunea (trebuie s aib acelai numr de atribute i atributele corespondente s fie definite pe domenii compatibile, adic s aib formatul datelor identic). operaii relaionale: selecia, proiecia, jonciunea i diviziunea. Operaii de baz - reprezint un ansamblu minimal de operaii, n sensul c niciuna din operaii nu poate fi exprimat ca o combinaie a celorlalte operaii. Pentru algebra relaional exist mai multe ansambluri minimale. n continuare prezentarea va considera ca operaii de baz: trei operaii pe mulimi: reuniunea, diferena, produsul cartezian i dou operaii relaionale unare: selecia i proiecia. Operatorii de intersecie, jonciune i diviziune pot fi obinui din cei cinci operatori de baz. Not. n definirea operatorilor algebrei relaionale vom nota cu: t un tuplu din relaia R t(A) subtuplu din R relativ la atributul A.

16

Fiecare operator al algebrei relaionale va fi descris prin signatur. Signatura indic numrul i tipul operanzilor, precum i tipul rezultatului. 2.1. OPERATORII ALGEBREI RELAIONALE 1. UNION reuniunea a dou relaii R1 i R2, compatibile cu reuniunea, este dat de mulimea tuplurilor care aparin fie relaiei R1, fie relaiei R2, fie ambelor relaii. Tuplurile care aparin ambelor relaii se introduc n reuniune o singur dat, adic nu se duplic. Signatura:
R3 R1 R2

Re latie Re latie
t |t R1 sau t R2

Re latie

R3

R1 Exemplu.
R1 A a c x B b d y R2 A d x h c B f y r d

R2

R3

A a c x d h

B b d y f r

Sintaxa: UNION (R1, R2) - rezultatul este o relaie.

2. DIFFERENCE diferena a dou relaii R1 i R2, compatibile cu reuniunea, este dat de mulimea tuplurilor care aparin relaiei R1 i nu aparin relaiei R2.. Signatura:
R3 R1 R2

Re latie Re latie
t |t R1 si t R2

Re latie

17

R3

R1 Exemplu.
R1 A a c x B b d y R2 A d x h c B f y r d

R2

R3

A a

B b

Sintaxa: DIFFERENCE (R1, R2) - rezultatul este o relaie.

3. INTERSECT intersecia a dou relaii R1 i R2, compatibile cu reuniunea, este dat de mulimea tuplurilor care aparin att relaiei R1, ct i relaiei R2. Signatura:
R3 R1 R2

Re latie Re latie
t |t R1 si t R2

Re latie

R3

R1

R2

18

Exemplu.
R1 A a c x B b d y R2 A d x h c B f y r d R3 A c x B d y

Sintaxa: INTERSECT (R1, R2) - rezultatul este o relaie.

Observaie. Intersecia poate fi exprimat cu ajutorul operaiei de diferen (operaie de baz):


RS R R S S S R

4. PRODUCT produsul cartezian a dou relaii R1 i R2, produce o nou relaie care are ca atribute, reuniunea atributelor din cele dou relaii (atributele comune vor fi luate separat, calificrile fiind fcute cu numele relaiei), iar fiecare element din R1 se combin (concateneaz) cu fiecare element din R2. Signatura:
R3 R1 R2

Re latie Re latie
t 1 ,t 2 | t 1 R1 si t 2

Re latie
R2

R3

R1

R2

Exemplu.
R1 A a c x B b d y R2 A a d R3 R1. A a c x a c x B R2.A b a d a y a b d d d y d

19

Sintaxa: PRODUCT (R1, R2) - rezultatul este o relaie.

5. SELECT este o operaie unar de restricie care selecteaz din tuplurile relaiei R, acele tupluri care satisfac o condiie specificat. Condiia este o expresie logic (predicat) specificat asupra atributelor relaiei R. Condiia poate cuprinde nume de atribute, constante, operatori logici (and, or, not), operatori aritmetici de comparare (<, >, =, , , ). Signatura:
Re latie Expresie log ica Re latie

S t | t R si t A conditie R unde: t(A) definete condiia de selecie ( este un operator aritmetic de comparare, iar un tuplu care poate fi nlocuit de un atribut sau valoarea unui atribut).

condiie

R Exemplu. S
R A x t z c

B ' x'

R
C z a b w S A t z B x x C a b

B y x x u

Sintaxa: SELECT (R; condiie) - rezultatul este o relaie.

20

Observaii. 1. Aceast operaie nu trebuie confundat cu instruciunea SELECT, care este instruciunea general de interogare din limbajele de manipulare a datelor. 2. n termenii limbajului de interogare SQL, operaia de selecie realizeaz o decupare pe orizontal a tabelei operand R. 3. Cardinalul relaiei rezultat S este mai mic sau egal dect cardinalul relaiei R. Egalitatea poate apare n situaia n care condiia este adevrat pentru toate tuplurile din relaie. 6. PROJECT - este o operaie unar de restricie prin care se selecteaz din relaia R, numai acele atribute specificate explicit n cadrul operaiei. Relaia rezultat P va avea ca atribute submulimea selectat. Signatura: Fie R
P
Re latie Lista atribute Re latie

[ A1 , A2 ,..., An ] i R t a1 ,..., ak

A1 ,..., Ak

A1 , A2 ,..., An

lista atribute

R Exemplu. P

A,C

A x z x z x

B u x z y t

C x y x y x

A x z x z x

C x y x y x

A x z

C x y

Sintaxa: PROJECT (R; lista atribute) - rezultatul este o relaie.

21

Observaii. 1. Dac n lista atributelor de proiecie exist o cheie a relaiei operand R, atunci relaia rezultat are toate tuplurile distincte, adic relaiile R i P vor avea acelai cardinal. 2. Dac n lista atributelor de proiecie nu exist o cheie a relaiei operand R, atunci n relaia rezultat P pot apare tupluri duplicate care vor fi eliminate. n exemplul prezentat dup eliminarea tuplurilor duplicate din relaia intermediar P , s-a obinut relaia P care conine dou tupluri distincte. 3. Relaia rezultat P are gradul k, dat de numrul atributelor din list. 4. n termenii limbajului de interogare SQL, operaia de proiecie realizeaz o decupare pe vertical a tabelei operand R. 7. JOIN este o operaie definit pe dou relaii R1 i R2. Relaia rezultat R3 va fi construit prin concatenarea unor tupluri din R1 cu tupluri din R2 care satisfac o anumit condiie (condiia de jonciune - ) specificat explicit n cadrul relaiei. Condiia de jonciune - este o expresie logic (predicat) specificat asupra atributelor relaiilor R1 i R2. Condiia de jonciune - poate cuprinde nume de atribute, constante, operatori logici (and, or, not), operatori aritmetici de comparare (<, >, =, , , ). Signatura:
Re latie Re latie exp resie Re latie

Fie relaiile R1 [ A, B1 ] i R2 acelai domeniu. Atunci:


R3 R1 R2 t |t

[ B2 ,C ] , unde B1 i B2 sunt atribute definite pe

R1 R2 si t B1

t B2

Observaie. Jonciunea se poate exprima n funcie de operaiile de baz: produs cartezian i selecie astfel:
R1 R2 R1 R2

R3

R1 R2

22

Exemplu. R3
R1 A a b d

R1
B x y z C c c g

R2 unde : R1.A > R2.A


R2 D 0 1 3 4 6 7 E 11 13 11 11 12 13 A a a a d d c R3 R1. A b b b d d d d B C y c y c y c z g z g z g z g D 0 1 3 0 1 3 7 E R2. A 11 a 13 a 11 a 11 a 13 a 11 a 13 c

Sintaxa: THETA - JOIN (R1, R2; - expresie) - rezultatul este o relaie.

n continuare se prezint patru forme ale operaiei de jonciune. 7.1. EQUI JOIN este un caz particular al lui THETA JOIN , cnd este egalitate.

Exemplu. R3
R1 A a b d

R1
B x y z C c c a

R2 unde : R1.A = R2.A


R2 D 0 1 3 4 6 7 E 11 13 11 11 12 13 A a a a d d c R3 R1. A a a a d d B C x c x c x c z a z a D 0 1 3 4 6 E R2. A 11 a 13 a 11 a 11 d 12 d

Sintaxa: EQUI - JOIN (R1, R2; - expresie) - rezultatul este o relaie.

7.2. NATURAL JOIN este o jonciune pe egalitate (EQUI JOIN) pentru toate atributele cu acelai nume din cele dou relaii, urmat de o proiecie pe reuniunea atributelor celor dou relaii. n cazul EQUI JOIN schema relaiei rezultat conine toate atributele celor doi operanzi i rezult c n fiecare tuplu al relaiei rezultat vor exista cel puin dou valori egale. Introducerea jonciunii naturale va elimina aceast redundan. Schema relaiei rezultat R3 se obine prin reuniunea atributelor celor dou relaii R1 i R2 (atributele cu acelai nume se iau o singur dat), iar extensia relaiei R3 va conine

23

tuplurile obinute prin concatenarea tuplurilor din R1 cu tupluri din R2, care au aceleai valori pentru atributele cu acelai nume. Jonciunea natural este jonciunea cea mai utilizat n practic i poate fi definit cu ajutorul operaiilor de baz: proiecie, selecie i produs cartezian. Dac se noteaz cu: - condiia de egalitate ntre valorile atributelor din intersecia schemelor relaiilor R1 i R2 (coloanele comune), atr - reuniunea atributelor celor dou scheme (atributele cu acelai nume se iau o singur dat), atunci:
R3 R1 R2
atr

R1 R2

Exemple. A. Se dau relaiile: R1[A, B, C] i R2 [B, C, D] R1 .B R2 .B and R1 .C R2 .C atr = A, B, C, D


R1 A a d b c B b b b a C c c f d R2 B b b a C c c d D d e b R3 A a a d d c B b b b b a C c c c c d D d e d e b

B. Se dau relaiile: R1 [A, B, C] i R2 [D, E, A] R1 .A R2 .A atr = A, B, C, D, E

R1

A a b d

B x y z

C c c a

R2

D 0 1 3 4 6 7

E 11 13 11 11 12 13

A a a a d d c

R3

A a a a d d

B C x c x c x c z a z a

D 0 1 3 4 6

E 11 13 11 11 12

Sintaxa: NATURAL - JOIN (R1, R2; atribut(e) jonciune*)- rezultatul este o relaie. * pentru mrirea claritii va apare atributul / atributele de jonciune. 24

Observaie. Selecia este un caz particular de jonciune natural a unei relaii cu o relaie constant. nelegem prin relaie constant o relaie care are un singur tuplu, eventual redus la o singur valoare.

7.3. SEMI JOIN - este jonciunea dintre dou relaii R1 i R2 , urmat de o proiecie pe atributele relaiei R1. Semi jonciunea conserv atributele unei relaii participante la jonciune (R1). Semi jonciunea mai poate fi privit ca o generalizare a operaiei de selecie, rezultatul fiind o selecie asupra relaiei R1 , realizat pe baza valorilor din R2 ale atributului de jonciune.

R3

R1 Exemplu. R3
R1 A a b d

R2

R1
B x y z C c c a

R2 unde : R1.A = R2.A


R2 D 0 1 3 4 6 7 E 11 13 11 11 12 13 A a a a d d c R3 A a a a d d B x x x z z C c c c a a

Sintaxa: SEMI - JOIN (R1, R2; - expresie) Observaie. Considerm jonciunea natural dintre R1 B2 sunt atributele de jonciune. - rezultatul este o relaie.

[ A, B1 ] i R2

[ B2 ,C ] , unde B1 i

Dac B1 = B2 = , atunci jonciunea corespunde produsului cartezian. Dac A = C = , atunci jonciunea corespunde interseciei. Dac A = sau C = (dar nu amndou), atunci operaia este o semijonciune.

25

7.4. OUTER JOIN. Jonciunea dintre dou relaii R1 i R2 poate conduce la pierdere de tupluri, dac relaiile participante la jonciune nu au proiecii identice pe atributul de jonciune, adic nu au aceleai valori n relaiile care se joncioneaz. Relaia rezultat R3 conine jonciunea natural dintre R1 i R2, la care se adaug tuplurile din R1 i R2, care nu au participat la jonciune. n aceste tupluri se va atribui valorea null pentru atributele relaiei corespondente.

R3

ext R1 R2

Exemplu. R3
R1 A a b d

R1
B x y z

ext

R2
R2 D 0 1 3 4 6 7 E 11 13 11 11 12 13 A a a a d d c R3 A B C D E a x c 0 11 a x c 1 13 a x c 3 11 d z a 4 11 d z a 6 12 b y c null null c null null 7 13

C c c a

Observaii. n urma jonciunii naturale se pierd informaiile din tuplurile < b, y, c > din R1 i < 7, 13, c > din R2. Aceste tupluri se adaug n cazul jonciunii externe i se completeaz cu null pe atributele relaiei corespondente. Sintaxa: OUTER - JOIN (R1, R2; atribut(e) jonciune) - rezultatul este o relaie.

8. DIVISION - este o operaie definit pe dou relaii care au schema R1 [A1, A2,..., An] i R2 [Ap+1, Ap+2,..., An]. Relaia rezultat R3 R1 R2 are schema R3 [A1, A2,..., Ap] i este format din toate tuplurile care, concatenate cu fiecare tuplu din R2 , dau ntotdeauna un tuplu din R1. Notm: ATR1 = {A1, A2,..., Ap+1, Ap+2,..., An} ATR2 = {Ap+1, Ap+2,..., An}

26

Definiia 1. t i
ATR2 t1

R1 R2 dac
t2 .

t2

R2

t1

R1 , astfel nct

ATR1 ATR2 t1

Definiia 2. Diviziunea se poate exprima n funcie de operaiile de baz: produs cartezian, diferen i proiecie astfel:

R1

R2

ATR1 ATR2

R1

ATR1 ATR2

ATR1 ATR2

R1

R2

R1

Signatura:

Re latie Re latie
R3

Re latie

R1 Problem (Exemplu de diviziune).

R2

Fie relaia R1 [K, P] unde atributul K are ca valori codurile angajailor unui institut de cercetare, iar atributul P conine codurile proiectelor n derulare. Un cercettor poate lucra la unul sau mai multe proiecte. S se determine codurile angajailor angrenai simultan n proiectele P3 i P4. Rezolvare. Construim relaia R2 [P] care va conine dou tupluri: <P3> i <P4>. Codurile angajailor care lucreaz la proiectele P3 i P4 sunt date de rezultatul diviziunii R1 R2 .

R1

K 17 17 17 17 29 29 53 53 80

P P1 P2 P3 P4 P1 P3 P3 P4 P3

R2

P P3 P4

27

Calculm diviziunea conform definiiei 2: Pasul 1. Calculm Q1


Q1 K 17 29 53 80
ATR1 ATR2

R1 R2

Q1 Q2
Q1 R2

R1

Pasul 2. Calculm S
S K 17 29 53 80 17 29 53 80 P P3 P3 P3 P3 P4 P4 P4 P4

Pasul 3. Calculm T
T K 29 80

S
P P4 P4

R1

Pasul 4. Calculm Q2
T K 29 80

ATR1 ATR2

Pasul 5. Calculm R1
R1:R2 K 17 53

R2

Q1 Q2

Rezultatul interogrii: angajaii cu codul <17> i <53> lucreaz simultan n proiectele <P3> i <P4>.

Sintaxa: DIVISION (R1, R2) - rezultatul este o relaie.

28

2.2 OPERAII DE CALCUL La operaiile descrise anterior se pot aduga operaii de calcul pe relaii. Aceste operaii sunt justificate de numeroasele interogri (cereri) care necesit operaii de calcul. Operaiile de calcul sunt implementate n toate limbajele de interogare. Aceti operatori de calcul formeaz deci o extensie a operatorilor de baz i nu pot fi exprimai cu ajutorul acestora. 1. COUNT - este o operaie care permite numrarea tuplurilor dintr-o relaie (liniilor dintr-o tabel) care au aceeai valoare pe atributul considerat (sau aceleai valori pe atributele considerate). Relaia rezultant va conine numai atributul (atributele) de regrupare Xi , iar tuplurile vor fi formate din valorile distincte i numrul de apariii. Notm:

COUNT X 1 ,..., X n ( R ) ,

unde X1,...,Xn sunt atributele de regrupare.


T

Count...

Operatorul COUNT Exemplu.


R A a b c d e f B n o n p m m C 17 14 17 13 20 10 CountB(R) B n m o p Count 2 2 1 1 CountB,C(R) B n m m o p C Count 17 2 20 1 10 1 14 1 13 1

Dac nu este precizat niciun atribut de regrupare, operaia COUNT va determina numrul de tupluri din relaie:
Count(R) Count 6

Sintaxa: COUNT (R; X1, X2, ..., Xn) - rezultatul este o relaie;

29

COUNT (R) - rezultatul este un numr (poate fi interpretat i ca o relaie cu un singur atribut i un singur tuplu, care are ca valoare numrul de linii din tabel). 2. SUM este o operaie care permite efectuarea sumei valorilor atributului Y pentru fiecare din valorile diferite ale atributelor de regrupare X1,...,Xn . Atributul Y trebuie s fie numeric. Notm:

SUM X 1 ,..., X n ( R ,Y ) ,

unde X1,...,Xn sunt atributele de regrupare.

Dac nu este precizat niciun atribut de regrupare, operaia SUM va determina suma valorilor atributului Y.
T

Sum...

Operatorul SUM Exemplu.


R A a b c d e f B n o n p m m C 17 14 17 13 20 10 SumB(R,C) B n m o p Sum 34 30 14 13 Sum(R,C) Sum 91

Sintaxa: SUM (R, Y; X1, X2, ..., Xn) - rezultatul este o relaie; SUM (R, Y) - rezultatul este un numr (poate fi interpretat i ca o relaie cu un singur atribut i un singur tuplu, care are ca valoare suma valorilor atributului Y din toate liniile tabelei).

30

3. MEAN este o operaie care permite efectuarea mediei aritmetice a valorilor atributului Y pentru fiecare din valorile diferite ale atributelor de regrupare X1,...,Xn . Atributul Y trebuie s fie numeric. Notm:

MEAN X 1 ,..., X n ( R ,Y ) , unde X1,...,Xn sunt atributele de regrupare.

Dac nu este precizat niciun atribut de regrupare, operaia MEAN va determina media aritmetic a valorilor atributului Y din toat relaia.
T

Mean.. ..m...

Operatorul MEAN Exemplu.


R A a b c d e f B n o p n p p C 17 9 21 13 20 10 MeanB(R,C) B n o p Sum 15 9 17 Mean(R,C) Sum 15

Sintaxa: MEAN (R, Y; X1, X2, ..., Xn) - rezultatul este o relaie;

MEAN (R, Y) - rezultatul este un numr (poate fi interpretat i ca o relaie cu un singur atribut i un singur tuplu, care are ca valoare media aritmetic a valorilor atributului Y din toate liniile tabelei). 4. MAX i MIN - este o operaie care permite determinarea valorii maxime / minime a atributului Y pentru fiecare din valorile diferite ale atributelor de regrupare X1,...,Xn . Atributul Y trebuie s fie numeric.

31

Notm:

T
T

MAX X 1 ,..., X n ( R ,Y ) ,
MIN X 1 ,..., X n ( R ,Y ) ,

unde X1,...,Xn sunt atributele de regrupare. unde X1,...,Xn sunt atributele de regrupare.

Dac nu este precizat niciun atribut de regrupare, operaia MAX (MIN) va determina maximul (minimul) valorilor atributului Y din toat relaia.

Max...

Operatorul MAX (MIN)

Exemplu.
R A a b c d e f B n o p n p p C 17 9 21 13 20 10 MinB(R,C) B n o p Min 13 9 10 Max(R,C) Max 21

Sintaxa: MAX (R, Y; X1, X2, ..., Xn) - rezultatul este o relaie; MAX (R, Y) - rezultatul este un numr (poate fi interpretat i ca o relaie cu un singur atribut i un singur tuplu, care are ca valoare maximul valorilor atributului Y din toate liniile tabelei). Observaie. Pentru operaia MIN sintaxa este analoag.

32

CAP. 3. LIMBAJUL SQL

SQL (Structured Query Language - Limbaj Structurat de Interogare) este un limbaj de programare neprocedural specific bazelor de date. Limbajul SQL este standardizat ANSI-ISO (fiind cel mai popular limbaj de manipulare a bazelor de date relaionale) i poate fi utilizat n: MySQL, SQL Server, MS Access, Oracle, DB2, etc. Pe lng versiunile standardizate ale limbajului SQL, exist i o mulime de dialecte i variante caracteristice diferitelor SGBD-uri. Limbajul SQL permite: manipularea structurii bazelor de date manipularea datelor coninute Principalele instuciuni de definire a datelor sunt: CREATE TABLE ALTER TABLE DROP TABLE 3.1. Instruciunea CREATE TABLE Instruciunea CREATE TABLE este utilizat pentru a crea o nou tabel. Aceast opiune este utilizat cu precdere dac mediul de lucru nu posed instrumente pentru crearea i modificarea tabelelor ntr-o manier mai facil, aa cum are spre exemplu Microsoft Access. Sintaxa general a instruciunii CREATE TABLE este: CREATE TABLE nume_tabela (c1 d1 [constrngeri_coloan], c2 d2 [constrngeri_coloan], ... cn dn [constrngeri_coloan], [constrngeri_coloan]) unde: c1, c2, ... , cn - reprezint coloanele tabelei d1, d2, ... , dn - reprezint domeniile fiecrui cmp Exemplul 1. Dac dorim crearea unei tabele cu numele angajati1, cu urmtoarele cmpuri:

33

vom avea: CREATE TABLE angajati1 (cod_sal int, nume varchar(250), adresa varchar (250), localitate varchar(250), sal_brut int, cod_dep varchar (10), data_angajarii date)

Rezultatul afiat pentru exemplul 1 3.2. Instruciunea ALTER TABLE Pentru modificarea strcturii unei tabele se utilizeaz instruciunea ALTER TABLE. Aceast instruciune permite adugarea sau tergerea unor cmpuri, modificarea domeniilor unor cmpuri, precum i adugarea sau tergerea unor constrngeri ale tabelei. Instruciunea ALTER TABLE are urmtoarele sintaxe: - pentru adugarea unui nou cmp: ALTER TABLE nume_tabela ADD nume_coloan domeniu - pentru tergerea unui cmp ALTER TABLE nume_tabela DROP nume_coloan - pentru modificarea constrngerilor unu cmp ALTER TABLE nume_tabela ALTER COLUMN nume_coloan domeniu Exemplul 2. Dac dorim adugarea n tabela angajati1 a unui nou cmp numit bonus de tip integer vom avea: ALTER TABLE angajati1 ADD bonus int

34

Rezultatul afiat pentru exemplul 2 Exemplul 3. Dac dorim, n tabela angajati1, modificarea cmpului numit bonus din integer n tip de caractere cu lungimea maxima de 10 caractere vom avea: ALTER TABLE angajati1 ALTER COLUMN bonus varchar(10)

Rezultatul afiat pentru exemplul 3 Exemplul 4. Dac dorim tergerea din tabela angajati1 a cmpului numit bonus vom avea: ALTER TABLE angajati1 DROP bonus

35

Rezultatul afiat pentru exemplul 4 3.3. Instruciunea DROP TABLE Pentru tergerea unei tabele se utilizeaz instruciunea DROP TABLE. Aceast instruciune va face tergerea efectiv a ntregii tabele cu toate datele coninute. Sintaxa general a instruciunii DROP TABLE este: DROP TABLE nume_tabela Exemplul 5. Dac dorim tergerea tabelei angajati1 vom avea: DROP TABLE angajati1 Principalele instruciuni de manipulare a datelor sunt: SELECT INSERT UPDATE DELETE 3.4. Instruciunea SELECT Instruciunea SELECT este instruciunea de interogare a datelor din limbajul SQL. Utilizarea acestei instruciuni genereaz o tabel virtual, numit vedere (query). n query se regsesc toate informaiile dorite din unul sau mai multe tabele ale bazei de date. Sintaxa general a instruciunii SELECT este: SELECT [DISTINCT] c1, c2, ... , cn [FROM t1, t2, ... , tm] [WHERE condiie] [clauze secundare] unde: c1, c2, ... , cn - sunt coloanele dorite din tabelele specficate n clauza FROM t1, t2, ... , tm - sunt tabelele din care se face selecia

36

Rezultatul seleciei este format din coloanele c1, c2, ... , cn cu datele rezultate din produsul cartezian al tabelelor t1, t2, ... , tm pentru care se respect eventuala condiie specificat n clauza WHERE. Clauza SELECT definete coloanele tabelei rezultat. Clauza FROM indic unu sau mai multe tabele ce conin datele dorite. Clauza WHERE definte condiia sau condiiile ce trebuie ndepline de datele din clauza SELECT. ntre clauzele secundare amintim: ORDER BY, GROUP BY, HAVING. Exemplele urmtoare vor fi construite pentru tabela ANGAJATI:

Tabela ANGAJATI Exemplul 6. Dac dorim afiarea tuturor datelor din tabel vom avea: SELECT cod_sal, nume, adresa, localitate, sal_brut, cod_dep, data_angajarii FROM angajati sau SELECT * FROM salariati Observaie. n acest al doilea caz, simblul * nlocuiete toate cmpurile din tabel. Exemplul 7. Dac dorim afiarea tuturor angajailor din localitatea Brasov ce au salariul mai mare de 1200 vom avea: SELECT cod_sal, nume, localitate, sal_brut FROM angajati WHERE localitate="brasov" AND salariu_brut>1200

37

Rezultatul afiat pentru exemplul 7 Exemplul 8. Dac dorim afiarea tuturor persoanelor angajate dup data de 01.01.2009 vom avea: SELECT cod_sal, nume, data_angajarii FROM angajati WHERE data_angajarii>=#01-01-2009#

Rezultatul afiat pentru exemplul 8 n clauza SELECT se pot utiliza urmtoarele funcii agregat: COUNT (numr liniile din tabela rezultat) SUM (calculeaz suma valorilor dintr-o coloan) MAX (returneaz valoarea maxim dintr-o coloan) MIN (returneaz valoarea minim dintr-o coloan) AVG (returneaz media aritmetic a valorilor dintr-o coloan) Exemplul 9. Dac dorim afiarea numrului de angajai vom avea: SELECT count(*) FROM angajati

Rezultatul afiat pentru exemplul 9

38

Exemplul 10. Dac dorim afiarea mediei aritmetice a salariului brut vom avea: SELECT AVG(sal_brut) FROM angajati

Rezultatul afiat pentru exemplul 10 Instruciunea SELECT poate s nu conin nici clauza FROM, dac datele nu sunt coninute de nicio tabel. n acest caz, instruciunea SELECT conine o list de expresii pe care le calculeaz. Exemplul 11. Dac dorim afiarea rezultatului produsului 50x25 vom avea: SELECT 50*25

Rezultatul afiat pentru exemplul 11 Dac se dorete, n tabela rezultat se pot redenumi coloanele, sau se pot denumi anumite expresii, utiliznd clauza AS. Exemplul 12. Dac dorim afiarea rezultatului produsului 50x25, iar numele tabelei s fie REZULTAT vom avea: SELECT 50*25 AS rezultat

Rezultatul afiat pentru exemplul 12 Clauza FROM este obligatorie, dac n clauza SELECT se dorete afiarea unor coloane din tabele. Dac se dorete selectarea unor coloane din tabele diferite, acestea vor fi toate enumerate n clauza FROM, desprite prin virgul. n cazul n care un cmp apare n mai mult de o tabel, atunci pentru a se cunoate din ce tabel se dorete respectivul cmp, la clauza FROM se va specifica i numele tabelei de forma: nume_tabel.nume_cmp

39

n clauza WHERE se impun toate condiiile necesare pentru datele din tabela rezultat. n clauza WHERE se pot utiliza i operatorii logici (AND, OR, NOT) i paranteze. Exemplul 13. Dac dorim afiarea angajailor din Brasov sau Predeal vom avea: SELECT nume, localitate FROM angajati WHERE localitate="brasov" or localitate="predeal"

Rezultatul afiat pentru exemplul 13 Clauza ORDER BY face ordonarea liniilor din tabela rezultat dup coloana ce urmeaz clauzei. Implicit, ordonarea se face n ordine cresctoare sau alfabetic dac tipul cmpului dup care se face ordonarea este de tip text. n cazul n care se dorete ordonare invers lexicografic (descresctoare), atunci numele coloanei trebuie urmat de cuvntul DESC. Exemplul 14. Dac dorim afiarea angajailor n ordine descresctoare vom avea: SELECT nume FROM angajati ORDER BY nume DESC

Rezultatul afiat pentru exemplul 14

40

Clauza GROUP BY se utilizeaz pentru gruparea rezultatelor funciilor agregat, n funcie de valoarea unei sau mai multor coloane. Clauza GROUP BY se utilizeaz la sfritul instruciunii, fiind urmat de cmpul pentru care se face gruparea rezultatelor funciei agregat. Exemplul 15. Dac dorim numrul de angajai din fiecare localitate vom avea: SELECT COUNT(*) AS numar, localitate FROM angajati GROUP BY localitate

Rezultatul afiat pentru exemplul 15 Clauza HAVING se utilizeaz n loc de clauza WHERE, atunci cnd n instruciune se utilizeaz funcii agregat. Clauza HAVING este asemntoare clauzei WHERE, adic introduce o condiie pe care trebuie s o respecte liniile din rezultat i n plus permite utilizarea funciilor agregat n expresia condiional. Exemplul 16. Dac dorim numrul de angajai din Brasov si Predeal vom avea: SELECT COUNT(*) AS numar, localitate FROM angajati GROUP BY localitate HAVING localitate="brasov" OR localitate="predeal"

Rezultatul afiat pentru exemplul 16 Subinterogrile reprezint instruciuni SELECT n alte interogri de tip SELECT. Numim aceast tehnic imbricare. Astfel, instruciunile SELECT se pot imbrica pe mai multe niveluri, o instruciune avnd ca argument rezultatul unei alte instruciuni, numit i subinterogare.

41

Exemplul 17. Dac dorim numele angajatului care are salariul egal cu salariul maxim vom avea: SELECT nume, sal_brut FROM angajati WHERE sal_brut IN (SELECT MAX(sal_brut) FROM angajati)

Rezultatul afiat pentru exemplul 17 Clauza IN i NOT IN specific dac valorile unui cmp aparin unei mulimi precizate. Aceast mulime poate fi format prin enumerarea elementelor sau printr-o subinterogare. Exemplul 18. Dac dorim numele angajailor din Brasov, Bucuresti i Predeal vom avea: SELECT nume, localitate FROM angajati WHERE localitate IN ("brasov", "bucuresti", "predeal")

Rezultatul afiat pentru exemplul 18 3.5. Instruciunea INSERT Instruciunea INSERT este utilizat pentru introducerea datelor n tabel. Instruciunea INSERT are urmtoarea sintax: INSERT INTO nume_tabela (c1,c2,..., cn) VALUES (v1,v2,..., vn) unde: c1, c2, ... ,cn - reprezint coloanele din tabel n care se vor introduce datele v1, v2, ... ,vn - reprezint valorile corespunztoare coloanelor c1, c2, ... ,cn Observaie. ntre valori i numele coloanelor trebuie s existe o coresponden direct.

42

Exemplul 19. Dac dorim introducerea n tabela ANGAJAI a unui nou angajat cu datele: 18, EMILIA, str. O.Goga nr. 3, bucuresti, 1300, prod, 05.05.2009 vom avea: INSERT INTO TABLE angajati VALUES (18, "EMILIA", "str. O.Goga nr. 3", "bucuresti", 1300, " prod", #5/5/2009#);

Rezultatul afiat pentru exemplul 19 Dac se dorete introducerea datelor n alt ordine dect cea implicit a coloanelor din tabel, sau nu se cunoate aceast ordine, trebuie specificat ordinea cmpurilor dup numele tabelei. Exemplul 20. Dac dorim introducerea n tabela ANGAJAI a unui nou angajat cu datele: 19, str. Agriselor, constanta, raluca, 1300, prod, 10.08..2009 vom avea: INSERT INTO angajati ( cod_sal, adresa, localitate, nume, sal_brut, cod_dep, data_angajarii ) VALUES (19, "str. Agriselor nr. 3", "constanta", "RALUCA", 1300, " prod", #10/8/2009#);

Rezultatul afiat pentru exemplul 20

43

3.6. Instruciunea UPDATE Instruciunea UPDATE permite modificarea valorilor din coloanele unei tabele pentru anumite condiii. Sintaxa general este: UPDATE nume_tabel SET c1=e1 [c2=e2 , ... ,n] [WHERE condiie] Clauza WHERE impune ca actualizarea valorilor s se fac doar asupra liniilor care ndeplinesc o serie de condiii. Dac lipsete, se vor modifica toate liniile din tabel. Exemplul 21. Dac dorim modificarea tuturor salariilor angajailor din departamentul "prod" la valoarea de 1000 lei vom avea: UPDATE angajati SET sal_brut=1000 WHERE cod_dep="prod"

Rezultatul afiat pentru exemplul 21 Valoarea poate fi schimbat i cu valoarea unei expresii calculate. De exemplu: Exemplul 22. Dac dorim modificarea tuturor salariilor angajailor din departamentul "conta" n sensul creterii cu 15% vom avea: UPDATE angajati SET sal_brut=sal_brut*115/100 WHERE cod_dep="conta"

44

Rezultatul afiat pentru exemplul 22 3.7. Instruciunea DELETE Instruciunea DELETE este utilizat pentru tergerea uneia sau mai multor linii dintr-o tabel. Sintaxa instruciunii DELETE este: DELETE FROM nume_tabela [WHERE condiie] Utiliznd aceast instruciune se vor terge toate liniile care ndeplinesc condiia specificat n clauza WHERE. Dac este omis clauza WHERE se vor terge toate liniile din tabel. Exemplul 23. Dac dorim tergerea tuturor angajailor din departamentul "conta" vom avea: DELETE FROM angajati WHERE cod_dep="conta"

45

Rezultatul afiat pentru exemplul 23

46

CAP. 4. NORMALIZAREA RELAIILOR

1. INTRODUCERE n activitatea de modelare a bazelor de date problema care se pune este de a stabili mulimea de relaii care realizeaz o reprezentare fidel a schemei conceptuale, evitnd incoerena, redundana i pierderile de informaii. Relaiile (tabelele) unei baze de date se pot stabili n mai multe moduri i de aceea este necesar s existe criterii de evaluare a calitii relaiilor, pentru ca acestea s asigure integritatea datelor i posibiliti de interogare performante. Teoria normalizrii se bazeaz pe observaia c anumite relaii au posibiliti mai bune de actualizare i interogare dect alte relaii echivalente (care conin aceleai informaii). Normalizarea relaiilor permite obinerea unei baze de date n care s nu se manifeste anomalii de actualizare sau stocare. Pentru a nelege nevoia de normalizare s considerm relaia R care conine informaii legate de furnizori (cod_funizor, nume_furnizor, localitate, cod_loc) i de produsele care le ofer (cod_produs, denumire, um, cantitate). Un furnizor poate oferi mai multe produse, iar un produs poate fi oferit de mai muli furnizori. R [cod_funizor, cod_produs, nume_furnizor, localitate, cod_loc, denumire, um, cantitate] Cheia relaiei R este (cod_funizor, cod_produs).
cod_furnizor
F1 F2 F3 F1 F2

cod_produs
P13 P17 P13 P17 P29

nume_furnizor
Alfa SRL Beta SRL Gama SRL Alfa SRL Beta SRL

localit
Brasov Cluj Sinaia Brasov Cluj

cod_loc
5000 3000 2555 5000 3000

denumire
xyz abc xyz abc efg

um
kg mp kg mp litru

cant
200 600 800 400 600

Observm c datele despre fiecare furnizor (nume_furnizor, localitate, cod_loc) apar n fiecare tuplu n care se prezint un produs oferit de un anumit furnizor. Analog, datele generale despre fiecare produs ( denumire, um) apar n fiecare tuplu n care un furnizor ofer respectivul produs. Aceste redundane conduc la creterea spaiului de memorare i la anomalii de actualizare a relaiei. Anomalii de inserare nu se pot introduce datele generale despre un furnizor (nume_furnizor, localitate, cod_loc), dac nu exist cel puin un produs pe care acesta s-l ofere. O alt anomalie de inserare nu putem introduce informaiile generale despre un produs ( denumire, um), dac nu exist un furnizor care s-l ofere. Aceste anomalii apar datorit restriciei de integritate care impun ca ntr-o relaie atributele cheie nu pot s aib valoarea null.

47

Anomalii de tergere dac se terg toate informaiile legate de un furnizor, de exemplu firma nu mai lucreaz cu furnizorul F2, atunci tuplurile cu cheile <F2, P17> i <F2, P29> vor fi terse. Se pierd astfel informaiile generale legate de produsul P29, (denumire, um). Anomalii de actualizare orice modificare a unei informaii generale legate de un furnizor trebuie s se propage n toate tuplurile n care apare acel furnizor. Aceasta mrete timpul de actualizare i crete riscul de incoeren al datelor. Acelai tip de anomalie apare i n cazul modificrii unei informaii generale despre un produs. Teoria normalizrii are la baz analiza dependenelor dintre atributele care sunt la originea fenomenelor de redundan i propune dou scheme de modelare a bazelor de date relaionale fr anomalii sau pierderi de informaii [Popescu, 1996]: schema descompunerii schema relaiei universale (relaia universal este relaia care conine toate atributele care modeleaz sistemul real cercetat) se descompune prin proiecii succesive n subrelaii; descompunerea se oprete cnd continuarea ar conduce la pierderi de informaii; procesul de descompunere este reversibil, ceea ce garanteaz c relaia de plecare (universal) poate fi regsit prin utilizarea operatorului de jonciune i astfel nicio informaie nu a fost pierdut; schema sintezei pornete de la o mulime de atribute independente; pe baza proprietilor de semantic i legturi ntre atribute se compun relaii care s evite eventualele anomalii. Procesul de ameliorare a schemei conceptuale trebuie s satisfac urmtoarele cerine: s asigure conservarea datelor, adic n schema conceptual final trebuie s regsim toate datele din cadrul schemei iniiale; s asigure conservarea dependenelor dintre date, adic n schema conceptual final fiecare dependen trebuie s aib determinantul i determinatul n schema aceleiai relaii; s reprezinte o descompunere minimal a relaiilor iniiale, adic niciuna din relaiile care compun schema final nu trebuie coninut ntr-o alt relaie din aceast schem. Pentru ca informaiile dintr-o baz de date s fie prelucrate ct mai simplu este necesar ca relaiile s verifice anumite condiii, altfel spus s aib un anumit grad de normalizare. Forma normal (Normal Form) a unei relaii presupune anumite condiii pe care trebuie s le ndeplineasc valorile atributelor i dependenele funcionale definite pe aceea relaie. E.F.Codd a definit primele trei forme normale (1NF, 2NF, 3NF). Ulterior a fost definit mai complet 3NF i a primit numele de forma normal Boyce-Codd (BCNF). Formele normale superioare, definite de R. Fagin, se refer la dependenele multivaloare (4NF) i dependenele de jonciune (5NF). De remarcat c BCNF, 4NF i 5NF corespund definiiei unice: orice determinant al unei dependene este o cheie. Diferena este dat de faptul c

48

n cazul BCNF este vorba de dependena funcional, n cazul 4NF de dependena multivaloare, iar n cazul 5NF de dependena de jonciune [Fotache, 2005]. n continuare ne limitm prezentarea la primele trei forme normale definite de Codd, considerate n multe lucrri de specialitate a fi suficiente pentru proiectarea corect a bazelor de date. 2. DEPENDENE FUNCIONALE Dependena funcional reprezint dependena dintre date prin care se poate identifica un atribut sau grup de atribute prin intermediul altui atribut sau grup de atribute. Definiia 4.1. Dependena funcional. Dat o relaie R, spunem c un atribut sau un grup de atribute Y depinde funcional de un atribut sau grup de atribute X, dac pentru fiecare valoare a lui X se asociaz o singur valoare a lui Y n orice tuplu din R. Formal: t1 ,t 2 R avem : X t1 X t2 Y t1 Y t2 sau echivalent: pentru orice tupluri <x, y>, <x, y> din R, x = x y = y. Vom spune c X determin pe Y sau Y depinde funcional de X i vom nota XY. Atributul (grupul de atribute) X se numete determinant, iar atributul (grupul de atribute) Y se numete determinat, adic: determinant determinat. n cazul exemplului prezentat n introducere identificm urmtoarele dependene funcionale: (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (cod_furnizor, cod_produs) nume_furnizor (cod_furnizor, cod_produs) localitate (cod_furnizor, cod_produs) cod_loc (cod_furnizor, cod_produs) denumire (cod_furnizor, cod_produs) um (cod_furnizor, cod_produs) cantitate cod_furnizor nume_furnizor cod_furnizor localitate cod_furnizor cod_loc cod_produs denumire cod_produs um cod_loc localitate

49

Tipuri de dependene funcionale Definiia 4.2. Dependena funcional trivial. O dependen funcional X Y este trivial dac Y

X.

Definiia 4.3. Dependena funcional parial (dfp). O dependen funcional X Y este parial dac X 1 X a.i . X 1 Y Vom numi dependena funcional X1 Y, dependen argument dfp. Exemplu. Dependena funcional: (cod_furnizor, cod_produs) nume_furnizor este parial deoarece se manifest i dependena argument dfp: cod_furnizor nume_furnizor Definiia 4.4. Dependena funcional complet (total) (dfc). O dependen funcional X Y este complet (total) dac nu exist X 1 X a .i . X 1 Y Definiia 4.5. Dependena funcional tranzitiv (dft). O dependen funcional X Y este tranzitiv dac se manifest concomitent dependenele funcionale: Z X i Z Y. Exemplu. Dependena funcional: cod_loc localitate este tranzitiv deoarece se manifest concomitent i dependenele: cod_furnizor localitate cod_furnizor cod_loc Observaie. Cheia unei relaii poate fi definit cu ajutorul dependenelor funcionale astfel: X este o cheie pentru relaia R [X, Y] dac Y depinde funcional de X adic: X Y. Cheia X este minimal dac dependena funcional X Y este complet. 3. PRIMA FORM NORMAL (1NF) Definiia 4.6. O relaie este n prima form normal notat (1NF), dac fiecare din atributele sale are un domeniu atomic (monovaloare). O relaie n 1NF nu conine grupuri repetitive. Observaie. Noiunea de grup repetitiv (mulime de valori) nu exist n modelul relaional. O relaie nenormalizat poate fi transformat ntr-o relaie 1NF, nlocuind atributul compus prin atributele simple corespunztoare (spargerea relaiei) sau duplicnd tuplele de attea ori cte valori exist pentru un atribut dat (spargerea grupului repetitiv). Exemple de relaii nenormalizate:

50

a) relaie n care un atribut este o relaie ZBOR [NR_ZBOR, AVION] cu AVION [tip_nava, capacitate]
ZBOR NR_ZBOR AVION

102 107 108 109 110

(B707, 150) (B737, 180) (AIRB320, 250) (B707, 150) (B747, 300)

Observm c atributul compus AVION din relaia ZBOR este de fapt o relaie cu dou atribute tip_nava i capacitate (numr de locuri). Rezultatul trecerii n 1NF prin spargerea relaiei AVION este:
ZBOR 1 NR_ZBOR TIP NAVA CAPCITATE

102 107 108 109 110

B707 B737 AIRB320 B707 B747

150 180 250 150 300

b) relaie n care un atribut este un ansamblu de valori CATALOG [Nume, Note]


CATALOG NUME NOTE

Einstein Freud

8, 6 7, 9, 5

Rezultatul trecerii n 1NF, n situaia c numrul maxim de note este cunoscut, prin spargerea relaiei NOTE este:
CATALOG 1 NUME NOTA 1 NOTA 2 NOTA 3

Einstein Freud

8 7

6 9

null 5

n cazul spargerii grupului repetitiv NOTE se obine relaia:


CATALOG 2 NUME NOTA

Einstein Einstein Freud Freud Freud

8 6 7 9 5

51

Teorema 1 (de eliminare a grupurilor repetitive) Dac R [A1, A2, ..., An] este o relaie n care Am+1, Am+2, ..., An formeaz un grup repetitiv, i {A1, A2, ..., Ap} cu p < m este o cheie primar, atunci relaia R se poate descompune n dou relaii fr grupuri repetitive i pierdere de informaii, astfel: R1 [A1, A2, ..., Am] =
A1 , A2 ,...,Am

R
A1 , A2 ,..., A p , Am
1 ,..., An

R2 [A1, A2, ..., Ap, Am+1,..., An] =

Algoritmul 1NF - de aducere a unei relaii nenormalizate n 1NF (eliminarea atributelor compuse i repetitive) Pasul 1. Se trec n relaie n locul atributelor compuse componentele acestora ca atribute simple. Pasul 2. Se trec grupurile de atribute repetitive, fiecare ntr-o nou relaie. Pasul 3. Se introduce n schema fiecrei noi relaii create la Pasul 2 cheia primar a relaiei din care a fost extras grupul repetitiv. Pasul 4. Se stabilete cheia primar a fiecrei noi relaii create la Pasul 2. Aceasta va fi compus din cheia introdus la Pasul 3 (cheia primar iniial) precum i din unul sau mai multe atribute proprii relaiei. Exemplu. Pentru gestionarea crilor dintr-o bibliotec se consider relaia: CARTE [ cota, nume_autori, titlul, editura, an_apariie, ISBN, cuvinte_cheie]
Cota C104 Nume autori Ionescu M Popescu F Georgescu L Marinescu A Titlul Baze de date Editura Economica An apar. 2009 ISBN 978-9738204-417 978-9731978-895 Cuvinte-cheie proiectarea bazelor de date, SQL Server 2008, Oracle analiza SI, proiectarea SI, implementarea SI, auditul SI

C289

Sisteme informatice

Polirom

2007

n relaia CARTE (nenormalizat) exist dou grupuri de atribute repetitive: nume_autori i cuvinte_cheie care creaz mari greuti n stocarea informaiilor i realizarea interogrilor. Alegem drept cheie primar atributul COTA. Aplicarea Algoritmului 1NF conduce la urmtoarele relaii: CARTE 1 [ cota, titlul, editura, an_apariie, ISBN] AUTORI [ cota, nume autori] CUVINTE CHEIE [ cota, cuvinte cheie]

52

CARTE 1
Cota C104 C289 Titlul Baze de date Sisteme informatice Editura Economica Polirom An aparitie 2009 2007 ISBN 978-973-8204-41-7 978-973-1978-89-5

AUTORI
Cota C104 C104 C104 C289 Nume autori Ionescu M Popescu F Georgescu L Marinescu A

CUVINTE CHEIE
Cota C104 C104 C104 C289 C289 C289 C289 Cuvinte cheie proiectarea bazelor de date SQL Server 2008 Oracle analiza SI proiectarea SI implementarea SI auditul SI

4. A DOUA FORM NORMAL (2NF) Definiia 4.7. O relaie este n a doua form normal notat (2NF), dac relaia este n (1NF) i oricare dintre atributele care nu aparin cheii primare este complet dependent funcional de cheie. Observaie. O relaie n 2NF nu conine dependene funcionale pariale ntre atributele cheie i celelate atribute. Exemplu. Redundane care apar n cazul unei relaii 1NF, care nu este 2NF. Fie R [A, B, C, D] n care cheia primar este (A, B) i se manifest dependenele: (A, B) C A
a1 a2 a3 a4

(A, B) D B
b1 b1 b2 b2

BC
D d1 d2 d2 d3

C
c1 c1 c3 c3

53

Teorema 2 ( de descompunere fr pierdere de informaie) Fie R [A1, A2, ..., An] o relaie n 1NF i K = {A1, A2, ..., Ap} cu p < n este o cheie A A1 , A2 ,..., An , K primar. Presupunem c exist , adic este un atribut noncheie i cu K ( este complet dependent funcional de o submulime strict de atribute din cheie). Atunci dependena se poate elimina descompunnd relaia R n urmtoarele dou relaii:

R1 R2 A
A

R R

Observaie. Conform teoremei de mai sus, relaia R [A, B, C, D] din exemplul precedent, n care se manifest dependena parial (A, B) C se descompune fr pierdere de informaie n: R1 [ B, C] i R2 [A, B, D]

Algoritmul 2NF - de aducere a unei relaii 1NF n 2NF (eliminarea dependenelor funcionale pariale) Pasul 1. Pentru fiecare dependen funcional argument dfp se creaz o nou relaie, cu schema constituit din determinantul i determinatul acestei dependene. Dac exist mai multe dependene funcionale argument dfp cu acelai determinant se va crea o singur relaie format din determinant luat o singur dat i determinaii dependenelor considerate. Pasul 2. Din relaia iniial se elimin atributul / atributele care formeaz determinatul dependenelor funcionale argument dfp. Pasul 3. Se stabilete cheia primar a fiecrei noi relaii create la Pasul 1. Aceasta va fi format din determinantul dependenei funcionale argument dfp. Aplicaie. Pentru evidena autoturismelor nchiriate de o firm clienilor se consider relaia: AUTO [ nr_client, nume_client, adresa, nr_auto, marca, data ]
Nr client C234 C145 C679 C089 C445 Nume client Smith A Lungu M Tudor A Stan D Bondescu I Adresa Castelului 12, Brasov Libertatii 14, Predeal Armoniei 23, Iasi Sadoveanu 45, Cluj Caragiale 66, Arad Nr auto BV 21 XXI BV 19 XIX CJ 12 XII CT 07 VII BV 61 LXI Marca Logan 1.4 Ford Focus Audi A6 Opel Astra VW Golf Data 22.05.2009 17.04.2009 23.05.2009 07.04.2009 26.04.2009

54

Cheia relaiei este (nr_client, nr_auto), iar dependeele funcionale care se manifest sunt: (1) (nr_client, nr_auto) nume_client (2) (nr_client, nr_auto) adresa (3) (nr_client, nr_auto) marca (4) (nr_client, nr_auto) data (5) nr_client nume_client (6) nr_client adresa (7) nr_auto marca Observaie. - relaia AUTO este n forma normal 1; - dependena funcional (1) este parial deoarece se manifest i d.f.argument dfp (5); - dependena funcional (2) este parial deoarece se manifest i d.f.argument dfp (6); - dependena funcional (3) este parial deoarece se manifest i d.f.argument dfp (7). Aplicarea Algoritmului 2NF - de aducere a unei relaii 1NF n 2NF bazat pe Teorema 2, conduce la spargerea relaiei AUTO, n trei relaii n 2NF: EVIDENTA [ nr_client, nr_auto, data ] CLIENT [ nr_client, nume_client, adresa ] AUTO [ nr_auto, marca ] EVIDENA
Nr client C234 C145 C679 C089 C445 Nr auto BV 21 XXI BV 19 XIX CJ 12 XII CT 07 VII BV 61 LXI Data 22.05.2009 17.04.2009 23.05.2009 07.04.2009 26.04.2009

CLIENT
Nr client C234 C145 C679 C089 C445 Nume client Smith A Lungu M Tudor A Stan D Bondescu I Adresa Castelului 12, Brasov Libertatii 14, Predeal Armoniei 23, Iasi Sadoveanu 45, Cluj Caragiale 66, Arad

AUTO
Nr auto BV 21 XXI BV 19 XIX CJ 12 XII CT 07 VII BV 61 LXI Marca Logan 1.4 Ford Focus Audi A6 Opel Astra VW Golf

55

5. A TREIA FORM NORMAL (3NF) Definiia 4.8. O relaie este n a treia form normal notat (3NF), dac relaia este n (2NF) i oricare dintre atributele care nu aparin cheii primare nu depinde tranzitiv de cheie. Observaie. O alt exprimare: orice atribut ce nu aparine cheii primare depinde direct de cheie. Fie R o relaie, K cheia primar i presupunem c este un atribut ce depinde tranzitiv de cheie. Aceasta nseamn c exist un atribut , astfel nct exist dependenele funcionale: K i Deoarece relaia R este n 2NF rezult c este complet dependent funcional de cheia relaiei i deci K , adic este un atribut noncheie. Exemplu. Redundane care apar n cazul unei relaii 2NF, care nu este 3NF. Fie R [A, B, C] n care cheia primar este A i se manifest dependenele: AB A
a1 a2 a3 a4

AC B
b1 b1 b2 b2

BC C
c1 c1 c2 c2

Teorema 3 - Casey Delobel (de descompunere fr pierdere de informaie) Fie R [A1, A2, ..., An] o relaie n 2NF i K este o cheie primar. Dac exist atributul A A1 , A2 ,..., An , K , i cu K ( depinde tranzitiv de cheie), atunci dependena se poate elimina descompunnd relaia R n urmtoarele dou relaii:

R1

R
A

R2 A

Observaie. Conform teoremei de mai sus, relaia R [A, B, C] din exemplul precedent, n care se manifest dependena tranzitiv B C se descompune fr pierdere de informaie n: R1 [B, C] i R2 [ A, B]

56

Algoritmul 3NF - de aducere a unei relaii 2NF n 3NF (eliminarea dependenelor funcionale tranzitive) Pasul 1. Pentru fiecare dependen funcional tranzitiv din cadrul relaiei considerate, se creaz o nou relaie, format din atributele implicate n aceast dependen. Pasul 2. Se stabilete cheia primar a fiecrei noi relaii create la Pasul 1. Pasul 3. Se introduc n relaia iniial n locul atributelor transferate la Pasul 1, cheile primare detrminate la Pasul 2. Aplicaie. Pentru evidena rezultatelor examenului de licen, se consider relaia: EXAMEN [nr_matricol, nume_student, program_studiu, nota, prof_coordonator, catedra]
Nr matricol 2345 5678 7890 4567 3456 Nume student Ionescu M Popescu V Georgescu D Constantinescu Marinescu H Program ECTS MK CIG FB CIG Nota 9.45 9.30 9.70 9.60 9.20 Prof coord Zamfir R Teodorescu N Oancea C Cristea D Andreescu M Catedra MKTS MKTS FBC FBC MNIE

Cheia relaiei este nr_matricol, iar dependeele funcionale care se manifest sunt: (1) nr_matricol nume_student (2) nr_matricol program_studii (3) nr_matricol nota (4) nr_matricol prof_coordonator (5) nr_matricol catedra (6) prof_coordonator catedra Observaie. - relaia EXAMEN este n 2NF, deoarece toate valorile atributelor sunt atomice, nu avem atribute repetitive (1NF) i nu exist dependene funcionale pariale (2NF). - dependenele (4) i (6) arat ca atributul catedra depinde tranzitiv de cheia primar a relaiei. Aplicarea Algoritmului 3NF - de aducere a unei relaii 2NF n 3NF bazat pe Teorema 3, conduce la spargerea relaiei EXAMEN, n dou relaii n 3NF: REZULTAT [nr_matricol, nume_student, program_studiu, nota, prof_coordonator] PROFESOR [prof_coordonator, catedra]

57

REZULTAT
Nr matricol 2345 5678 7890 4567 3456 Nume student Ionescu M Popescu V Georgescu D Constantinescu Marinescu H Program ECTS MK CIG FB CIG Nota 9.45 9.30 9.70 9.60 9.20 Prof coord Zamfir R Teodorescu N Oancea C Cristea D Andreescu M

PROFESOR
Prof coord Zamfir R Teodorescu N Oancea C Cristea D Andreescu M Catedra MKTS MKTS FBC FBC MNIE

Rezumat. 1NF toate atributele sunt atomice i nu exist atribute repetitive 2NF 1NF + orice atribut noncheie este complet dependent funcional de cheie (nu exist dependene funcionale pariale) 3NF 2NF + atributele care nu aparin cheii nu depind tranzitiv de cheie (nu exist dependene funcionale tranzitive / nu exist dependene funcionale ntre atributele noncheie)

58

CAP. 5. APLICAII FIRMA DE COMERCIALIZARE PRODUSE ELECTRONICE FURNIZORI [cod_furnizor, nume_furnizor, CIF, adresa, localitate, cont, tel, email] (FURNIZ) FACTURI_PRIMITE [nr_factura, cod_furnizor, data_factura, valoare, tva_deductibil] (FACTP) CLIENTI [cod_client, tip_client, nume_client, adresa, localitate] (CLI) PRODUSE [ cod_produs, denumire, um, grupa] (PROD) FACTURI_EMISE [nr_factura, data_factura, cod_client, valoare, tva_colectat] (FACTE) DETALII_FACTURA [nr_factura, cod_produs, cantitate, pret_unitar] (FACTD) P1. Cum se numesc furnizorii din Braov ? Lista: |cod_furnizor | nume_furnizor | CIF | AR R1 = SELECT (FURNIZ; localitate = Brasov) R2 = PROJECT (R1; cod_furnizor, nume_furnizor, CIF) MS ACCESS SELECT cod_furnizor, nume_furnizor, CIF FROM furniz WHERE localitate="Brasov"; P2. Lista cu numerele i valorile facturilor primite, ce au fost ntocmite dup 1.03.2009 i au o valoare mai mare de 500 lei? AR R1 = SELECT (FACTP; (data_factura > 1.03.2009) and (valoare>500)) R2 = PROJECT (R1; nr_factura, valoare) MS ACCESS SELECT nr_factura, valoare FROM factp WHERE data_factura>#3/1/2009# AND valoare>500;

59

P3. Care sunt localitile n care firma i are partenerii de afaceri? Ci clieni exist n fiecare localitate? AR R1 = PROJECT (FURNIZ; localitate) R2 = PROJECT (CLI; localitate) R3 = UNION (R1, R2) Q1 = COUNT (CLI; localitate) Q2 = PROJECT (Q1; localitate, count) MS ACCESS SELECT distinct localitate FROM furniz UNION (SELECT localitate FROM cli); SELECT count(*), localitate FROM cli GROUP BY localitate; Dac dorim s vedem ci parteneri comerciali avem in fiecare localitate vom avea: SELECT Count(*) AS nr, total.localitate FROM [SELECT cod_furnizor AS cod_partener, localitate FROM furniz UNION (SELECT cod_client AS cod_partener, localitate FROM cli)]. AS total GROUP BY total.localitate;

P4. Lista facturilor primite n acest an. Lista: |nr_factura | data_factura | cod_furnizor | nume_furnizor | AR R1 = SELECT (FACTP; data_factura > 1.01.2009) R2 = NATURAL JOIN (R1, FURNIZ; cod_furnizor) R3 = PROJECT (R2; nr_factura, data_factura, cod_furnizor, nume_furnizor) MS ACCESS SELECT nr_factura, data_factura, factp.cod_furnizor, nume_furnizor FROM furniz, factp WHERE factp.cod_furnizor=furniz.cod_furnizor AND data_factura>#1/1/2009#; Sau: SELECT nr_factura, data_factura, factp.cod_furnizor, nume_furnizor FROM furniz, factp

60

WHERE factp.cod_furnizor=furniz.cod_furnizor AND YEAR(data_factura)=YEAR(DATE()); P5. De la care furnizori s-au primit facturi ntocmite n data de 4.03.2009? Lista: |nr_factura | cod_furnizor | nume_furnizor | AR R1 = SELECT (FACTP; data_factura = 4.03.2009) R2 = NATURAL JOIN (R1, FURNIZ; cod_furnizor) R3 = PROJECT (R2; nr_factura, cod_furnizor, nume_furnizor) Sau: Q1 = NATURAL JOIN (FACTP, FURNIZ; cod_furnizor) Q2 = SELECT (Q1; data_factura = 4.03.2009) Q3 = PROJECT (Q2; nr_factura, cod_furnizor, nume_furnizor) MS ACCESS SELECT nr_factura, factp.cod_furnizor, nume_furnizor FROM factp, furniz WHERE furniz.cod_furnizor=factp.cod_furnizor AND data_factura=#3/4/2009#; Sau: SELECT nr_factura, factp.cod_furnizor, nume_furnizor FROM factp INNER JOIN furniz ON furniz.cod_furnizor=factp.cod_furnizor WHERE data_factura=#3/4/2009#; P6. n ce localiti se gsesc clienii care au cumprat produsul XYZ? AR R1 = SELECT (PROD; denumire = XYZ) R2 = NATURAL JOIN (R1, FACTD; cod_produs) R3 = NATURAL JOIN (R2, FACTE; nr_factura) R4 = NATURAL JOIN (R3, CLI; cod_client) R5 = PROJECT (R4; localitate) MS ACCESS SELECT DISTINCT localitate FROM cli, prod, facte, pdfe WHERE facte.cod_client=cli.cod_client AND facte.nr_factura=pdfe.nr_factura AND pdfe.cod_produs=prod.cod_produs AND prod.denumire="xyz";

61

P7. n ce localiti s-a vndut produsul XYZ n perioada 15.04.2009 30.04.2009 ? AR R1 = SELECT (PROD; denumire = XYZ) R2 = NATURAL JOIN (R1, FACTD; cod_produs) R3 = SELECT (FACTE; (data_factura>14.04.2009) and (data_factura<1.05.2009)) R4 = NATURAL JOIN (R2, R3; nr_factura) R5 = NATURAL JOIN (R4, CLI; cod_client) R6 = PROJECT (R5; localitate) MS ACCESS SELECT DISTINCT localitate FROM cli, prod, facte, pdfe WHERE facte.cod_client=cli.cod_client AND facte.nr_factura=pdfe.nr_factura AND pdfe.cod_produs=prod.cod_produs AND prod.denumire="xyz" AND data_factura BETWEEN #4/15/2009# AND #4/30/2009#; Sau: SELECT DISTINCT localitate FROM cli, prod, facte, pdfe WHERE facte.cod_client=cli.cod_client AND facte.nr_factura=pdfe.nr_factura AND pdfe.cod_produs=prod.cod_produs AND prod.denumire="xyz" AND (data_factura>=#4/15/2009# AND data_factura<=#4/30/2009#); P8. n care din facturile emise se nregistreaz vnzarea concomitent a tuturor produselor firmei ? AR R1 = PROJECT (FACD; nr_factura, cod_produs) R2 = PROJECT (PROD; cod_produs) R3 = DIVISION (R1, R2) MS ACCESS SELECT count(*) AS nr_produse, nr_factura FROM pdfe GROUP BY nr_factura HAVING count(*)=(SELECT count(*) FROM prod);

62

P9. n care din facturile emise dup 1 ianuarie 2009 se nregistreaz vnzarea concomitent a tuturor produselor firmei ? AR R1 = NATURAL JOIN (FACTE, FACTD; nr_factura) R2 = SELECT (R1; data_factura>1.01.2009) R3 = PROJECT (R2; nr_factura, cod_produs) R4 = PROJECT (PROD; cod_produs) R5 = DIVISION (R3, R4) MS ACCESS SELECT nr_factura, data_factura FROM facte WHERE data_factura>=#01-01-2009# AND nr_factura IN (SELECT pdfe.nr_factura FROM pdfe, facte GROUP BY pdfe.nr_factura HAVING count(*)=(SELECT COUNT(*) FROM prod)); P10. Care sunt numerele facturilor emise, n care s-a consemnat vnzarea simultan a produselor XYZ i ABC ? AR R1 = SELECT (PROD; denumire = XYZ) R2 = NATURAL JOIN (R1, FACTD; cod_produs) R3 = PROJECT (R2; nr_factura) R4 = SELECT (PROD; denumire = ABC) R5 = NATURAL JOIN (R4, FACTD; cod_produs) R6 = PROJECT (R5; nr_factura) R7 = INTERSECT (R3, R6) Varianta 2 R1 = PROJECT (FACTD; nr_factura, cod_produs) R2 = SELECT (PROD; (denumire = XYZ) or (denumire = ABC)) R3 = PROJECT (R2; cod_produs) R4 = DIVISION (R1, R3) MS ACCESS SELECT DISTINCT facte.nr_factura FROM cli, prod, facte, pdfe WHERE facte.cod_client=cli.cod_client AND facte.nr_factura=pdfe.nr_factura AND pdfe.cod_produs=prod.cod_produs AND (prod.denumire="xyz" OR prod.denumire="abc");

63

Sau: SELECT DISTINCT facte.nr_factura FROM cli, prod, facte, pdfe WHERE facte.cod_client=cli.cod_client AND facte.nr_factura=pdfe.nr_factura AND pdfe.cod_produs=prod.cod_produs AND prod.denumire IN ("xyz","abc"); Sau: SELECT DISTINCT facte.nr_factura FROM cli, facte, pdfe, [SELECT * FROM prod WHERE prod.denumire IN ("xyz","abc")]. AS tmp WHERE facte.cod_client=cli.cod_client AND facte.nr_factura=pdfe.nr_factura AND pdfe.cod_produs=prod.cod_produs; P11. Care este valoarea total a facturilor emise n luna mai 2009 pentru fiecare client? Lista: |cod_client | nume_client | valoare totala | AR R1 = SELECT (FACTE; (data_factura 01.05.2009) and (data_factura 31.05.2009)) R2 = SUM (R1, valoare; cod_client) R3 = NATURAL JOIN (R2, CLI; cod_client) R4 = PROJECT (R3; cod_client, nume_client, sum) MS ACCESS SELECT tmp.total, tmp.cod_client, nume_client FROM cli, [SELECT sum(valoare) AS total, facte.cod_client FROM facte WHERE year(data_factura)=2009 AND month(data_factura)=5 GROUP BY facte.cod_client]. AS tmp WHERE tmp.cod_client=cli.cod_client; P12. Care este valoarea total a facturilor emise n luna mai 2009 pentru fiecare client persoan fizic? Lista: |cod_client | nume_client | valoare totala | AR R1 = SELECT (FACTE; (data_factura 01.05.2009) and (data_factura 31.05.2009))

64

R2 = SUM (R1, valoare; cod_client) R3 = SELECT (CLI; tip_client = F) R4 = NATURAL JOIN (R2, R3; cod_client) R5 = PROJECT (R4; cod_client, nume_client, sum) MS ACCESS SELECT tmp.total, tmp.cod_client, nume_client FROM cli, [SELECT sum(valoare) AS total, cod_client FROM facte WHERE year(data_factura)=2009 and month(data_factura)=5 and cod_client IN (SELECT cod_client FROM cli WHERE tip_client="f") GROUP BY cod_client]. AS tmp WHERE tmp.cod_client=cli.cod_client; P13. Care sunt valorile totale TVA colectat i TVA deductibil n luna mai 2009? AR R1 = SELECT (FACTE; (data_factura 01.05.2009) and (data_factura 31.05.2009)) R2 = SUM (R1, tva_colectat) Q1 = SELECT (FACTP; (data_factura 01.05.2009) and (data_factura 31.05.2009)) Q2 = SUM (Q1, tva_deductibil) MS ACCESS (SELECT sum(factp.valoare*19/100) AS tva FROM factp) UNION (SELECT sum(facte.valoare*19/100) AS tva FROM facte); P14. Care este valoarea maxim a facturilor emise n luna mai 2009 pentru fiecare client persoan juridic? Lista: |cod_client | nume_client | valoare maxim factur | AR R1 = SELECT (FACTE; (data_factura 01.05.2009) and (data_factura 31.05.2009)) R2 = MAX (R1, valoare; cod_client) R3 = SELECT (CLI; tip_client = J) R4 = NATURAL JOIN (R2, R3; cod_client) R5 = PROJECT (R4; cod_client, nume_client, max) MS ACCESS SELECT tmp.total, tmp.cod_client, nume_client FROM cli, [SELECT MAX(valoare) AS total, cod_client FROM facte WHERE cod_client IN (SELECT cod_client FROM cli WHERE tip_client="j") AND YEAR(data_factura)=2009 AND MONTH(data_factura)=5 GROUP BY cod_client]. AS tmp WHERE tmp.cod_client=cli.cod_client;

65

BIBLIOGRAFIE 1. AIRINEI D., Depozite de date, Editura Polirom, Iai, 2002. 2. BSC O., Baze de date, Editura ALL, Bucureti, 1997. 3. CONNOLLY Th., .a., Baze de date. Proiectare, Implementare, Gestionare, Editura Teora, Bucureti, 2001. 4. CONNOLLY Th., .a., Database Systems, Addison-Wesley, 2002. 5. DATE C.J., Baze de date, Editura Plus, Bucureti, 2005. 6. DOLLINGER R., Baze de date i gestiunea tranzaciilor, Editura Albastr, Cluj Napoca, 1998. 7. DOLLINGER R., Utilizarea sistemului SQL Server, Editura Albastr, Cluj Napoca, 2001. 8. EAGLESTONE B., .a., Web Database Systems, Mc Graw Hill Book Company, Londra, 2001. 9. FLORESCU V., .a., Baze de date, Editura Economic, Bucureti, 1999. 10. FOTACHE M., Baze de date relaionale, Editura Junimea, Iai, 1997. 11. FOTACHE M., SQL, Editura Polirom, Iai, 2001. 12. FOTACHE M., Proiectarea bazelor de date, Editura Polirom, 2005. 13. Grupul BDASEIG, Baze de date. Fundamente teoretice i practice, Editura Infomega, Bucureti, 2002. 14. HERNANDEZ M., Proiectarea bazelor de date, Ed. Teora, 2003. 15. HORGA M., .a., Limbajul SQL n Oracle i Visual FoxPro, Editura Bibliotheca, Trgovite, 2007. 16. IONESCU F., Baze de date relaionale i aplicaii, Editura Tehnic, Bucureti, 2004. 17. LUNGU I., .a., Baze de date. Organizare, proiectare i implementare, Editura ALL Educational, Bucureti, 1995. 18. LUNGU I., .a., Baze de date. Sistemul ORACLE, Ed. Economic, Bucureti, 2002. 19. LUNGU I., Baze de date ORACLE. Limbajul SQL, Editura ASE, Bucureti, 2005. 20. MEIER A., Introduction pratique aux bases de donnes relationnelles, Ed. Springer France, 2006 21. MIRANDA S.M., BUSTA J.M., Lart des bases de donnes, Ed. Eyrolles, Paris, 1988. 22. PASCU C., .a., Totul despre SQL, Editura Tehnic, Bucureti, 1994. 23. POPA GHE., .a., Sisteme de gestiune a bazelor de date, Editura Cison, Bucureti, 1996. 24. POPESCU I., Baze de date relaionale, Editura. Universitii din Bucureti, Bucureti, 1996. 25. POPESCU I., ORACLE 8. Prelucrarea avansat a informaiei, Ed. Tehnic, Bucureti,1999. 26. POPESCU I., Modelarea bazelor de date, Editura Tehnic, Bucureti, 2001. 27. POPESCU I., .a., Programare avansat n ORACLE 9i, Editura Tehnic, Bucureti, 2004.

66

28. REBOUL G., Informatique de gestion. Analyse et modle relationnel, Ed. Dunod, Paris, 1997. 29. STANCIU A., .a., Baze de date. Introducere n SQL SERVER 2008, Editura Infomega, Bucureti, 2008. 30. STANCIU A., .a., Baze de date Access 2007, Editura Infomega, Bucureti, 2009. 31. TEFAN V., Tehnologii orientate obiect pentru baze de date relaionale, Editura Infomega, Bucureti, 2006. 32. MBULEA L., Structuri de date i baze de date, Universitatea Babe-Bolyai Cluj Napoca, 1992. 33. VELICANU M., .a., Sisteme de gestiune a bazelor de date, Editura Petrion, Bucureti, 2000. 34. VELICANU M., .a., Sisteme de baze de date. Teorie i practic, Editura Petrion, Bucureti, 2003.

67

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