20
1.Definiţiile BD şi SGBD. Funcţionalităţi. Exemple. BD - colectie persistenta de informatii structurate, organizata si construita pentru facilitarea accesului si prelucrarii eficiente, unic definit o singură dată şi utilizat simultan de mai multi utilizatori. BD este o resursă comună şi partajată. BD contine nu numai date ci şi descrierea acestora. Descrierea datelor - de dictionar de date (catalog de sistem, metadate) reprezintă date despre date. Utilizatorii BD pot accesa datele memorate prin intermediul unui program - Sistem de Gestiune a Bazei de Date - SGBD -Database Management System-DBMS, ce receptioneaza cererile utilizatorilor (pentru operatii de introducere, stergere, modificare sau interogare), le interpreteaza, executa operatiile corespunzatoare si returneaza rezultatul catre utilizatori. Un SGBD - un produs software ce asigură interacţiunea cu o BD, permiţând definirea, consultarea şi actualizarea datelor din BD. Toate cererile de acces la BD sunt tratate şi controlate de către SGBD. . Obiectivul principal al unui SGBD este de a separa datele de programele de aplicatie. SGBD constituie o interfa intre utilizatori si baza de date si consta din programe care interactioneaza cu programele de aplicatie ale utilizatorului si cu baza de date 2. Proprietatea „Nonredundanţa” în BD. Exemplu. Asigurarea unei redundante minime şi controlate a datelor – este al doilea obiectiv major al organizării datelor în BD. Aceasta înseamnă că se urmăreşte pe cât posibil ca fiecare dată să apară numai o singură dată în BD, indiferent de numărul de utilizatori care o accesează. Duplicarea datelor se păstrează doar pentru a asigura coerenta bazei de date, redundanta, trebuie redusă la minim şi mentinută sub control. Redundanta minimă se asigură prin tehnicile de proiectare a BD 3. Proprietatea „Independenţa” în BD. Independenta - problema a carei rezolvare tine de organizarea optima a oricarei BD. Independenta datelor inseamna ca exista o delimitare neta intre reprezentarea fizica a datelor si imaginea pe care o are utilizatorul asupra acestor date.Problema independentei datelor prezinta 2 aspecete: Independenta fizica-masura a imunitatii aplicatiilor fata de modificarile in structura fizica de merorare a datelor. Independenta logica-se refera la imunitate a modelului propriu al fiecarui utilizator fata de modificarile in structura logica globala a BD. Independenta logica este legata in primul rand de problema adaugarii de noi unitati logice (campuri, inregistrari) la structura BD si/sau de modificarea relatiilor existente intre ele. 4. Utilizatorii BD şi rolurile lor. Exemple. neinformaticieni – beneficiarii informaţiei, nu tre să cunoască structura BD, nu tre să programeze aplicaţii, ci doar să le folosească prin intermediul unei interfeţe suficient de prietenoase. informaticieni – crează structura BD şi realizează procedurile complexe de exploatare a BD; administratorul BD – utilizator special, cu rol hotărâtor în funcţionarea optimă a întregului sistem.. 5.Arhitectura ANSI/X3/SPARC

Baze de Date

Embed Size (px)

Citation preview

Page 1: Baze de Date

1Definiţiile BD şi SGBD Funcţionalităţi ExempleBD - colectie persistenta de informatii structurate organizata si construita pentru facilitarea accesului si prelucrarii eficiente unic definit o singură dată şi utilizat simultan de mai multi utilizatori BD este o resursă comună şi partajată BD contine nu numai date ci şi descrierea acestora Descrierea datelor - de dictionar de date (catalog de sistem metadate) reprezintă date despre date Utilizatorii BD pot accesa datele memorate prin intermediul unui program - Sistem de Gestiune a Bazei de Date - SGBD -Database Management System-DBMS ce receptioneaza cererile utilizatorilor (pentru operatii de introducere stergere modificare sau interogare) le interpreteaza executa operatiile corespunzatoare si returneaza rezultatul catre utilizatori Un SGBD - un produs software ce asigură interacţiunea cu o BD permiţacircnd definirea consultarea şi actualizarea datelor din BD Toate cererile de acces la BD sunt tratate şi controlate de către SGBD Obiectivul principal al unui SGBD este de a separa datele de programele de aplicatie SGBD constituie o interfa intre utilizatori si baza de date si consta din programe care interactioneaza cu programele de aplicatie ale utilizatorului si cu baza de date2 Proprietatea bdquoNonredundanţardquo icircn BD Exemplu Asigurarea unei redundante minime şi controlate a datelor ndash este al doilea obiectiv major al organizării datelor icircn BD Aceasta icircnseamnă că se urmăreşte pe cacirct posibil ca fiecare dată să apară numai o singură dată icircn BD indiferent de numărul de utilizatori care o accesează Duplicarea datelor se păstrează doar pentru a asigura coerenta bazei de date redundanta trebuie redusă la minim şi mentinută sub control Redundanta minimă se asigură prin tehnicile de proiectare a BD 3 Proprietatea bdquoIndependenţardquo icircn BDIndependenta - problema a carei rezolvare tine de organizarea optima a oricarei BD Independenta datelor inseamna ca exista o delimitare neta intre reprezentarea fizica a datelor si imaginea pe care o are utilizatorul asupra acestor dateProblema independentei datelor prezinta 2 aspeceteIndependenta fizica-masura a imunitatii aplicatiilor fata de modificarile in structura fizica de merorare a datelorIndependenta logica-se refera la imunitate a modelului propriu al fiecarui utilizator fata de modificarile in structura logica globala a BD Independenta logica este legata in primul rand de problema adaugarii de noi unitati logice (campuri inregistrari) la structura BD sisau de modificarea relatiilor existente intre ele4 Utilizatorii BD şi rolurile lor Exemple

neinformaticieni ndash beneficiarii informaţiei nu tre să cunoască structura BD nu tre să programeze aplicaţii ci doar să le folosească prin intermediul unei interfeţe suficient de prietenoase

informaticieni ndash crează structura BD şi realizează procedurile complexe de exploatare a BD administratorul BD ndash utilizator special cu rol hotăracirctor icircn funcţionarea optimă a icircntregului sistem

5Arhitectura ANSIX3SPARCArhitectura internă a unui sistem de BD conform standardului ANSIX3SPARC conţine trei niveluri funcţionale bull Nivelul intern ndash constituit din schema internă ce descrie structura de stocare fizică a datelor icircn BD utilizacircnd un model al datelor fizice La acest nivel se descriu detaliile complete ale stocării şi modul de acces la date bull Nivelul conceptual ndash sau schema conceptuală descrie structura icircntregii BD pt o cumunitate de utilizatori La nivel conceptual se face o descriere completă a BD ascunzacircndu-se detaliile legate de stocarea fizică şi detaliind descrierea entităţilor tipurilor de date relaţiile dintre ele şi restricţiile asociatebull Nivelul extern ndash sau nivelul vizual (utilizator) include o colecţie de scheme externe ce descriu BD prin prisma diferiţilor utilizatori6Nivelul fizic de abstracţie icircn BD Modele de date ExempleAbstractizare ndashprocesul de identificare a caracteristicilor distinctive a unei clase sau obiect fără a fi nevoie de a procesa toate informaţiile referitoare la clasă sau obiect Fisiere-secventiale-sortate in ordinea cresterii cheii primareAvem acces la instructiunea n daca am trecut prin instructiunea n-1-indexat secventiale-index este fisierul auxuliar anexat la cel de bazaIndexsii se construiesc pentru fiecare cheie secundaraFaciliteaza accesul-B-arbori-daca sint numai pointeri si nu date atunci se numesc B+-arbori-tabele de dispersie(hash-table)fisiere cu acces direct7Nivelul logic de abstracţie icircn BD Modele de date ExempleModele de date-ierarhic - Nod artificial

-retea programarea devine complicata

-relational(propus de Codd 1970)8Nivelul conceptual de abstracţie icircn BD Modele de date ExempleSchema conceptuală - reprezentare a tuturor informatiilor continute de BD icircntr-o formă abstractă Ea reprezintă o viziune o vedere a datelor aşa cum sunt ele icircn realitate fără a tine cont de modul icircn care vede datele fiecare utilizator Nivelul conceptual reprezintă o vedere generală a BD Acest nivel descrie ce date sunt stocate icircn BD şi relatiile dintre acestea Pentru o BD există o singură schemă conceptualăLa acest nivel se construieste schema conceptuala a BDModele de date-entitatea asocieriiElementeentitati si asocieri intre entitatiAtribute(numeprenume)UML-limbaj universal de modelare-retele semantice-model ce se foloseste in baze de cunostinte9Nivelul de abstracţie a viziunilor utilizatorilor icircn BD Modele de date ExempleO vedere externă poate fi considerată ca fiind din punctul de vedere al utilizatorului individual continutul bd adică ceea ce bdquovederdquo el din baza de date Acest nivel descrie acea parte a bazei de date care este relevantă pentru fiecare utilizator schema externă fiind formată din multimea de sub-schemelor externe10Etapa de proiectare fizică a bazelor de date lucrul interactiv cu utilizatorii cacirct de mulţi trebuie urmărirea unei metodologii structurate de-a lungul procesului de modelare a datelor utilizarea unei abordări coordonată prin date icircncorporarea consideraţiilor structurale şi de integritate icircn modelul de date combinarea tehnicil de conceptualizare normalizare şi validare a tranzacţ icircn metodologia de modelare a datelor utilizarea diagramelor pentru a reprezenta cacirct mai mult din modelul de date utilizarea unui limbaj de proiectare a BD Data Base Design Language (BDDL) pt a reprezenta semantica suplimentară a datelor construirea unui dicţionar care să suplimenteze diagramele modelului de date disponibilitatea de a repeta anumite etape11Etapa de proiectare logică a bazelor de dateConstruirea tabelelor si a legaturilor dintre acesteaEtapele metodologiei de organizare logică a bazelor de date pentrumodelul relaţional sunt următoareleConstruirea şi validarea modelului de date logice pentru fiecarevedere a utilizatorilorConstruirea şi validarea modelului de date logic globalEtapa E2 are ca obiectiv realizarea unui model de date logic ndash bazat pemodelul de date conceptual al vederii utilizatorului asupra icircntreprinderii ndash urmatde validarea acestuia prin utilizarea tehnicii de normalizare şi conformtranzacţiilor ceruteOperaţiile efectuate icircn cadrul acestei etape (E2) suntE21 Transpunerea modelului de date conceptual local icircn modelul de date logiclocalE22 Extragerea relaţiilor din modelul de date logic localE23 Validarea modelului prin utilizarea normalizăriiE24 Validarea modelului conform tranzacţiilor utilizatoruluiE25 Desenarea diagramei Entitate ndash Relaţie (ER)E26 Definirea constracircngerilor de integritateE27 Revizuirea modelului de date logic loca icircmpreună cu utilizatoriiLa icircncheierea acestei etape (E2) trebuie să se obţină un model al vederilor utilizatorului care să fie riguros cuprinzător şi fără echivoc Dacă sunt respectate aceste cerinţe se va dispune icircn acest stadiu de un fundament solidpentru a putea trece la etapa următoare (E3) care constă icircn combinarea modelelor de date logice locale individuale pentru a realiza un model de date logic global al icircntreprinderii12Analiza cerinţelor informaţionale la etapa de proiectare conceptuală a bazelor de date

Se aduna informatia de la diviziuni si subdiviziuni Prima etapă icircn proiectarea BD constă icircn realizarea unor modele de date conceptuale pt fiecare vedere a utilizatorilor asupra icircntreprinderii O vedere a utilizatorului reprezintă datele cerute de către un anumit utilizator pentru a lua o decizie corectă sau a efectua o anumită activitate De obicei vederea unui utilizator constituie o zonă funcţională a icircntreprinderii cum ar fi producţia marketing vacircnzările personalul contabilitatea sau controlul aprovizionării Un utilizator poate fi o persoană reală sau un grup de persoane ce utilizează icircn mod direct sistemul Utilizatorul se poate referi la un raport produs de către sistem sau poate solicita rezultatele unei tranzacţii ce trebuie acceptată de către acestea Vederile utilizatorilor pot fi identificate folosind diverse metode pot fi examinate diagramele de flux de date ce au fost realizate mai icircnainte pt de a identifica zonele funcţionale şi posibil funcţiile individuale ar putea fi chestionaţi utilizatorii se pot examina procedurile rapoartele şi formulările şisau observa icircntreprinderea icircn funcţiune13Modelarea viziunilor utilizatorului la etapa de proiectare conceptuală a bazelor de dateConsta din 3 etape-analiza cerintelor informationale-modelarea schemelor conceptuale particulare (viziunile user)-integrarea schemei particulare si crearea schemei globale14 Integrarea viziunilor utilizatorilor şi proiectarea schemei conceptuale globale a BDRezultatul integrării tehnologiei bazelor de date cu cea a reţelelor de calculatoare sunt BD distribuite - Sunt BD logic integrate dar fizic distribuite pe mai multe sisteme de calcul Integrarea BD distribuite se face cu ajutorul celor trei tipuri de de scheme care sunt implementate1schema globală ndash defineşteşi descrie toate informaţiile din baza de date distribuită icircn reţea2schema de fragmentare ndash descrie legăturile dintre o colecţie globalăşi fragmentele sale E de tipul unu la mai mulţi şi are forma unei ierarhii3schema de alocare ndash descrie modul de distribuire a segmentelor pe calculatoarele(nodurile) din reţea Fiecare segment va avea o alocare fizică pe unul sau mai multe calculatoare Schema de alocare introduce o redundanţă minimă şi controlată un anumit segment se poate regăsi fizic pe mai multe calculatoare15Elementele modelului relaţional atribute domenii tupluri Definiţii şi exempleEntitate - un obiect real sau conceptual cu o existenta independenta este un obiect cu existenta fizica persoana particulara automobil companie activitate curs universitar etcOrice entitate are o serie de proprietati numite si atribute ce particularizeaza entitatea respectiva De exemplu pentru o entitate angajat se pot enumera o serie de atribute cum sint nume adresa data nasterii sex salariu Atributul este o utilizare sub un nume oarecare a unui domeniu

icircntr-o relaţie pot exista mai multe atribute derivate din acelaşi domeniu icircn termenii abstractizărilor un domeniu este o generalizare a unor atribute

Domeniul reprezintă ansamblul de valori admisibile pentru o componentă a unei relaţii domeniul numelor de oraşe domeniul numelor de persoane domeniul numerelor icircntregi etc

Tuplu-secventa de elemente care merg unul dupa altul dar nu fixam ordineaRelaţie TabelaTuplu LinieinregistrareCardinalitate Numar de liniiAtribut ColoanaCimpGrad Numar de coloaneDomeniu Multime de valori valide16Elementele modelului relaţional schemă relaţională relaţie BD schemă a BD Modelul clasic de BD -modelul relaţional unde datele sunt memorate icircn tabele Relatie-multimea finita de tupluriRelaţiile icircntre 2 tabele sunt unidirecţionale astfel o tabelă devine principală cealaltă devine subordonată Schema relatiei-capul BD - un ansamblu de date structurate accesibile unei comunităţi de utilizatoriSchema BD poate fi reprezentată printr-o diagramă de structură icircn care sunt puse icircn evidenţă şi legăturile dintre tabele17 Noţiunea de cheie Tipuri de chei ExempleCheiendashun camp sau o asociatie de campuri ce are valori distincte NOT NULL pentru fiecare inregistrare din BDCheie primară garantează unicitatea şi minimalitatea şi obligă mulţimea de atribute să fie cheie primară Pentru aceasta se utilizeaza clauza PRIMARY KEY Cheie secundară garantează unicitatea atributelor ^^ astfel declarateSe utilizează clauza UNIQUEŞi obligatoriu trebuie adiţional specificat NOT NULL Restrictia precizeaza faptul ca un camp este o cheie straina fiind cheie primara a altei tabele Definire in tabela angajat a cheii straine pentru campul D_nr CREATE TABLE Angajat (NUME VARCHAR(15) INI CHAR(1) PREN VARCHAR(12)

SSN CHAR(9) CONSTRAINTS ang_PK PRIMARY KEYDAT_NA CHAR(8)ADR VARCHAR(30)SEX CHAR(1)SALARIU INTEGERSSSN CHAR(9)D_NR INTEGER CONSTRAINTS ang_FK REFERENCES departament(D_nr) FOREIGN KEY(D_nr) on delete cascade|on delete set NULL)18 Constracircngeri de integritate structurale ExempleNot nullspecifica faptul ca un cimp nu poate avea valori necunoscutenullUniquedetermina comportamentul cimpurilor care nu fac parte din cheia primaraConstringerea Unique asigura ca valorile duplicate nu vor fi introduse pentru cimpurile specificateInsa cimpurile specificate pot avea valori nuleiar sistemul creeaza automat din ele un index pentru facilitatea cautarii in tabeleCheia primaracimpurile nu pot contine valori duplicateCheia externaun cimp sau o multime de cimpuri ce orespund cheii primare a altui tabelCheia primara se utilizeaza pentru a defini legaturile dintre tabeleExtabelul comenzi contine codfurnizor ca cheie primaracod furnizor din tabela furniozor este cheie externa pentru tabelul comenzi19 Constracircngeri de integritate comportamentale ExempleCheck limiteaza valorile care pot fi luate de un cimp (sau mai multe cimpuri)In cazul actualizarii BD sistemul testeaza constringerea booleana care urmeaza dupa cuv rezervat checkDaca adevarat-este acceptata actualizareaex CHECK(ldquoan studiurdquo BETWEEN 1 and 5)Reguliorice restricţie are asociat un nume (explicit sau implicit)Dacă folosim CONSTRAINT atunci numele trebuie dat explicitCheile multiple pot fi definite doar la nivelul tabeleiNOT NULL doar la nivelul coloanei20 Operaţii de actualizare a relaţiilorINSERT ndash Adaugă un tuplu sau mai multe icircntr-o relaţie1048708 UPDATE ndash Modifică valorile unor atribute icircntro relaţie specificată icircn tuplurile specificate deun criteriu1048708 DELETE ndash Şterge tuplurile dintr-o relaţie care satisfac un criteriu specificat

21 Operaţiile tradiţionale pe mulţimi uniunea intersecţia şi diferenţa Proprietăţi ExempleOperatiile binare asupra relatiilor uniunea intersectia si diferenta necesita ca operanzii (relatiile) sa fie defintii pe scheme compatibileUniunea a doua relatii compatibile r(R) si s(S) notata cu r U s e o relatie definita pe schema R sau S si consta din tuplurile ce apartin relatiilor r sau s Operatia uniunea are doua proprietati Ea e comutativa adica r U s = s U r Ea este si asociativa adics (r U s) U q = rU(s U q) pentru relaiile mutual compatibile r s si qIntersectia a doua relatii compatibile r(R) si s(S) notata cu r cap sneste o relatie definita peschema R sau S si consta din tuplurile ce apartin concomitent relatiilor r si sDiferenta a doua relatii compatibile r(R) si s(S) notata cu r s este o relatie definita pe multimea de atribute R sau S si are icircn calitate de tupluri toate tuplurile din relatia r ce nu sunt icircn s

Diferena nu se bucura de proprietatea comutativa adica r s ne s r Totodata nu e nici asociativa adica (r s) q ne r (s q) fiindca (r s) q = r (s U q) pentru orice relaii mutual

compatibile r s si q

Intersectia q=rcaps

Diferenta q1=rs q2=sr

22 Operaţia produsul cartezian Proprietăţi ExempleProdusul cartezian a doua relatii r(A1hellipAn) si s(B1hellipBm) notat cu r 10487081048708s este o multime de tupluri (si nu icircntotdeauna o relatie) definite pe multimea de atribute A1hellipAn B1hellipBm Tuplurile reprezinta toate posibilele asociatii de tupluri din r si s daca tr Є r si ts Є s atunci concatenatia trts este un tuplu icircn r 10487081048708s pentru orice pereche de tupluri tr si ts din r si s respectiv exista un tuplu t icircn r 10487081048708s icircncacirct t[Ai]=tr[Ai] 1leilen si t[Bj]=ts[Bj1048708 1lejlem

Produsul cartezian nu este o operatie comutativa Icircn schimb se bucura de proprietatea asociativa23 Operaţiile complement şi complement activ Proprietăţi ExempleFie relatia r(R) Notam prin tup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor Complementul relatiei r notat cu ־r este ־r = tup(R) rFie r o relatie asupra schemei R AЄR si adom(A) = a|aЄdom(A) amp Ǝ tЄrampt[A] =a Multimea de valori adom(A) se numeste domeniul activ al atributului A Notam cu atup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor active Atunci complementul activ notat cu ~r este ~r = atup(R) r Complementul activ

Complementul24 Operaţia selecţia Proprietăţi ExempleSelectia este o operatie unara Pentru selectarea unor tupluri dintr-o

relatie e necesara specificarea conditiilor de selectare Icircn rezultat se obtine o relatie ce e o submultime de tupluri a relatiei initialeSelectia relatiei r (R) conform formulei F unde F e aplicabila relatiei r(R) e o submultime a relatiei r(R) notata cu σF(r) ce consta din toate tuplurile tЄr ce satisfac F adica σF(r) = 1048708t | t Є r amp F(t)1048708

Selectia s=σ((A = B) amp (D10487085))(r)

25 Operaţia proiecţia Proprietăţi ExempleProiectia e o operatie unara Proiectia relatiei r asupra multimii de atribute X notata cu πx(r) e o relatie cu schema X ce consta din X-valorile tuturor tuplurilor din r πx(r) = 1048708t 1048708X10487081048708| t Є r1048708

Proiectia s = πAC(r)26 Operaţia joncţiune Proprietăţi ExempleFie doua relatii r(R) si s(S) Jonctiunea relatiilor r si s (notatia uzuala r|x|s) este o relatie cu schema RS Tuplul t apartine relatiei rezultat daca exista tuplurile tr si ts icircn r si s respectiv si satisfac t[R]=tr si t[S]=ts adica r |x| s = t | t[R] = tramp t[S] = tsamp trЄ r amp ts Є s Deci fiecare tuplu din relatia rezultat este o concatenare a unui tuplu din r cu un tuplu din s ce au (RcapS)-valori egale Atributele cu acelasi nume icircn schema relatiei rezultat se iau o singura data Operatia jonctiunea nu este comutativa Icircn schimb ea se bucura de proprietatea asociativa

Jonctiunea q = r |x| s27 Interacţiunea dintre operaţiile joncţiunea şi proiecţia ExempleFie relatiile r(A B) si s(B C) Notam q=r|x|s si r1 = πAB(q) Icircn urma operatiilor observam ca tuplurile relatiei r1 constituie o submultime proprie a relatiei r

28 Operaţia θ-joncţiune Proprietăţi Exempleθ-jonctiunea relatiilor r(R) si s(S) notata cu r|x|AθBs este o multime de tupluri concatenate de forma trts unde tr Є r ts Є s si tr(A) θ ts(B) adicar|x|AθBs = trts | tr Є r amp ts Є s amp tr(A) θ ts(B)Operatia θ-jonctiunea poate fi exprimata prin operatiile produsul cartezian si selectia Rezultatul unei θ-jonctiuni este acelasi cu rezultatul unei selectii operate asupra unui produs cartezian adica r|x|AθBs = σAθB(r 10487081048708s)

29 Operaţia semijoncţiunea Proprietăţi Exemple

Semijonctiunea e o operatie binara Ea consta icircn construirea unei relatii din cele doua si e formata numai din tuplurile unei singure relatii ce participa la jonctiune Fie doua relatii r(R) si s(S) Semijonctiunea relatiei r si s notata cur|x s este o multime de tupluri determinata de expresia r|x s = πR(r|x|s)

Semijonctiunea q =r|xs30 Operaţia divizarea Proprietăţi ExempleFie r(R) si s(S) doua relaii si S R Notam Q = R S Diviziunea relatiei r la relatia s notata cu r1048708s este o relatie definita pe multimea de atribute Q r1048708s = t| pentru tsЄ s(S) Ǝ tr Є r(R) ce satisface tr[Q]=t si tr[S]=tsOperatia diviziunea poate fi conceputa drept operatie inversa produsului cartezian Fie q=r1048708s Atunci q1048708s produce o relatie cu schema R si relatia q va contine numarul maximal de tupluri ce ar satisface expresia q1048708s r

Diviziunea q= r1048708s31Componentele limbajului SQL2Definirea datelor categorii de date tipul acestora legături reguli de validare formatareManipularea datelor selectarea oricărui cacircmp de date filtrarea datelor sortarea corelarea cu alte informaţii şi totalizarea rezultatelor actualizare ştergere copiere icircn alt tabelControlul datelor definirea utilizatorilor cu drept de citire actualizare şi inserare date partajarea datelor DDL Limbaj de definire a datelor Mulţime de instrucţiuni care permitDefinirea modificarea şi eliminarea schemelor de relaţii (tabele)Crearea indecşilorDefinirea viziunilorSpecificarea constracircngerilor de integritate

Exemplu CREATE ALTER DROP DML Limbaj de manipulare a datelorMulţime de instrucţiuni care permit Consultarea actualizarea şi ştergerea obiectelor create cu DDL cum ar fi tabelele indecşi etc Este bazat pe algebra şi calculul relaţional Exemple SELECT INSERT UPDATEdeleTe DCL Limbaj de control al datelor Mulţime de instrucţiuni care permit Definirea permiselor de acces la BD Exemple GRANT REVOKE32 Tipuri de date numerice icircn SQL2 şi Transact SQL Exemple

IntregiINTEGER 4 octeţi numere icircntre -2147483648 şi 2147483648SMALLINT 2 octeţi numere icircntre -32768 şi 32767TINYINT 1 octet numere de la 0 la 255ZecimaleNUMERIC(MD)DECIMAL(MD)Norma SQL2 impune atributelor de tip NUMERIC să accepte numere cu un număr exact de cifre zecimale icircn timp ce atributele de tip DECIMAL nuNumerice aproximativeREAL numere cu precizie simplă cu cel puţin 7 cifre semnificativeDOUBLE PRECISION sau FLOATW reprezintă numere cu dublă precizie cu cel puţin 15 cifre semnificative33 Tipuri de date secvenţe de caractere icircn SQL2 şi Transact SQL Exemple CHAR(N) (sau CHARACTER(N)) secvenţă de lungime fixăVARCHAR(N) (sau CHAR VARYING(N) sau CHARACTER VARYING(N)) secvenţă de lungime variabilă cu cel mult N caractereTEXTSecvente de biti BIT(N) de lungime fixăVARBIT(N) (sau BIT VARYING(N)) lungime variabilă cu cel mult N biţi34 Tipuri de date temporale icircn SQL2 şi Transact SQL ExempleDATE YYYY-MM-DDTIME HH-MM-SSTIME-STAMPYYYY-MM-DD-HH-MM-SS-FF35 Definirea schemei unei relaţii icircn SQL2 ExempleO schema relatie R data prin R(A1A2An) reprezinta un set al atributelor Ai Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R Di este domeniul lui Ai si se noteaza dom(Ai) O schema relatie este utilizata pentru descrierea relatiei R unde R este numele relatiei Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei Fie de exemplu o schema relatie de grad 7 ce descrie studentii intr-o universitate STUDENT(Nume SSN Telefon Adresa_stabila Adresa_flotanta Virsta Directie_specializare)36 Constracircngeri de comportament icircn SQL2 ExempleSpecifica caracteristicile independente ale unui atribut(sau domeniu)Ele exprima semanticca elementelor domeniilorDe exemplu valorile atributului Nota_med trebuie sa fie mai mare decit zerodar nu poate depasi zeceSau nici o persoana de virsta 25 ani nu poate avea o vechime in munca de 37 de aniDeci conform acestei restrictii valorile atributului trebuie sa se incadreze intre anumite limite37 Constracircngeri structurale icircn SQL2 ExempleSpecifica legatura dintre atribute(sau domenii)Aici putem identifica asa numita dependenta de multime de atributeAngajat Salariu Departament Manager In relatia personalun manager este in acelasi timp un angajatdar nu orice angajat este managerDeci avem ca dom(manager) Ui dom (angajat)

38 Modificarea şi suprimarea schemei relaţionale icircn SQL2 Exemple1 Drop table comanda pentru stergerea unei relatiiDROP TABLE Angajat2Alter table modificarea schemei relationaleALTER TABLE nume_relatie TIP_modif (definitie)Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT expresie] [constrangere])ExALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT ldquomediirdquo CONSTRAINT ang_stud NOT NULL)Stergerea unui campALTER TABLE nume_relatie DROP COLUMN nume_coloana [CASCADE CONSTRAINTS]SauALTER TABLE nume_relatie DROP (lisata coloane) [CASCADE CONSTRAINTS]ExALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSN

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 2: Baze de Date

-retea programarea devine complicata

-relational(propus de Codd 1970)8Nivelul conceptual de abstracţie icircn BD Modele de date ExempleSchema conceptuală - reprezentare a tuturor informatiilor continute de BD icircntr-o formă abstractă Ea reprezintă o viziune o vedere a datelor aşa cum sunt ele icircn realitate fără a tine cont de modul icircn care vede datele fiecare utilizator Nivelul conceptual reprezintă o vedere generală a BD Acest nivel descrie ce date sunt stocate icircn BD şi relatiile dintre acestea Pentru o BD există o singură schemă conceptualăLa acest nivel se construieste schema conceptuala a BDModele de date-entitatea asocieriiElementeentitati si asocieri intre entitatiAtribute(numeprenume)UML-limbaj universal de modelare-retele semantice-model ce se foloseste in baze de cunostinte9Nivelul de abstracţie a viziunilor utilizatorilor icircn BD Modele de date ExempleO vedere externă poate fi considerată ca fiind din punctul de vedere al utilizatorului individual continutul bd adică ceea ce bdquovederdquo el din baza de date Acest nivel descrie acea parte a bazei de date care este relevantă pentru fiecare utilizator schema externă fiind formată din multimea de sub-schemelor externe10Etapa de proiectare fizică a bazelor de date lucrul interactiv cu utilizatorii cacirct de mulţi trebuie urmărirea unei metodologii structurate de-a lungul procesului de modelare a datelor utilizarea unei abordări coordonată prin date icircncorporarea consideraţiilor structurale şi de integritate icircn modelul de date combinarea tehnicil de conceptualizare normalizare şi validare a tranzacţ icircn metodologia de modelare a datelor utilizarea diagramelor pentru a reprezenta cacirct mai mult din modelul de date utilizarea unui limbaj de proiectare a BD Data Base Design Language (BDDL) pt a reprezenta semantica suplimentară a datelor construirea unui dicţionar care să suplimenteze diagramele modelului de date disponibilitatea de a repeta anumite etape11Etapa de proiectare logică a bazelor de dateConstruirea tabelelor si a legaturilor dintre acesteaEtapele metodologiei de organizare logică a bazelor de date pentrumodelul relaţional sunt următoareleConstruirea şi validarea modelului de date logice pentru fiecarevedere a utilizatorilorConstruirea şi validarea modelului de date logic globalEtapa E2 are ca obiectiv realizarea unui model de date logic ndash bazat pemodelul de date conceptual al vederii utilizatorului asupra icircntreprinderii ndash urmatde validarea acestuia prin utilizarea tehnicii de normalizare şi conformtranzacţiilor ceruteOperaţiile efectuate icircn cadrul acestei etape (E2) suntE21 Transpunerea modelului de date conceptual local icircn modelul de date logiclocalE22 Extragerea relaţiilor din modelul de date logic localE23 Validarea modelului prin utilizarea normalizăriiE24 Validarea modelului conform tranzacţiilor utilizatoruluiE25 Desenarea diagramei Entitate ndash Relaţie (ER)E26 Definirea constracircngerilor de integritateE27 Revizuirea modelului de date logic loca icircmpreună cu utilizatoriiLa icircncheierea acestei etape (E2) trebuie să se obţină un model al vederilor utilizatorului care să fie riguros cuprinzător şi fără echivoc Dacă sunt respectate aceste cerinţe se va dispune icircn acest stadiu de un fundament solidpentru a putea trece la etapa următoare (E3) care constă icircn combinarea modelelor de date logice locale individuale pentru a realiza un model de date logic global al icircntreprinderii12Analiza cerinţelor informaţionale la etapa de proiectare conceptuală a bazelor de date

Se aduna informatia de la diviziuni si subdiviziuni Prima etapă icircn proiectarea BD constă icircn realizarea unor modele de date conceptuale pt fiecare vedere a utilizatorilor asupra icircntreprinderii O vedere a utilizatorului reprezintă datele cerute de către un anumit utilizator pentru a lua o decizie corectă sau a efectua o anumită activitate De obicei vederea unui utilizator constituie o zonă funcţională a icircntreprinderii cum ar fi producţia marketing vacircnzările personalul contabilitatea sau controlul aprovizionării Un utilizator poate fi o persoană reală sau un grup de persoane ce utilizează icircn mod direct sistemul Utilizatorul se poate referi la un raport produs de către sistem sau poate solicita rezultatele unei tranzacţii ce trebuie acceptată de către acestea Vederile utilizatorilor pot fi identificate folosind diverse metode pot fi examinate diagramele de flux de date ce au fost realizate mai icircnainte pt de a identifica zonele funcţionale şi posibil funcţiile individuale ar putea fi chestionaţi utilizatorii se pot examina procedurile rapoartele şi formulările şisau observa icircntreprinderea icircn funcţiune13Modelarea viziunilor utilizatorului la etapa de proiectare conceptuală a bazelor de dateConsta din 3 etape-analiza cerintelor informationale-modelarea schemelor conceptuale particulare (viziunile user)-integrarea schemei particulare si crearea schemei globale14 Integrarea viziunilor utilizatorilor şi proiectarea schemei conceptuale globale a BDRezultatul integrării tehnologiei bazelor de date cu cea a reţelelor de calculatoare sunt BD distribuite - Sunt BD logic integrate dar fizic distribuite pe mai multe sisteme de calcul Integrarea BD distribuite se face cu ajutorul celor trei tipuri de de scheme care sunt implementate1schema globală ndash defineşteşi descrie toate informaţiile din baza de date distribuită icircn reţea2schema de fragmentare ndash descrie legăturile dintre o colecţie globalăşi fragmentele sale E de tipul unu la mai mulţi şi are forma unei ierarhii3schema de alocare ndash descrie modul de distribuire a segmentelor pe calculatoarele(nodurile) din reţea Fiecare segment va avea o alocare fizică pe unul sau mai multe calculatoare Schema de alocare introduce o redundanţă minimă şi controlată un anumit segment se poate regăsi fizic pe mai multe calculatoare15Elementele modelului relaţional atribute domenii tupluri Definiţii şi exempleEntitate - un obiect real sau conceptual cu o existenta independenta este un obiect cu existenta fizica persoana particulara automobil companie activitate curs universitar etcOrice entitate are o serie de proprietati numite si atribute ce particularizeaza entitatea respectiva De exemplu pentru o entitate angajat se pot enumera o serie de atribute cum sint nume adresa data nasterii sex salariu Atributul este o utilizare sub un nume oarecare a unui domeniu

icircntr-o relaţie pot exista mai multe atribute derivate din acelaşi domeniu icircn termenii abstractizărilor un domeniu este o generalizare a unor atribute

Domeniul reprezintă ansamblul de valori admisibile pentru o componentă a unei relaţii domeniul numelor de oraşe domeniul numelor de persoane domeniul numerelor icircntregi etc

Tuplu-secventa de elemente care merg unul dupa altul dar nu fixam ordineaRelaţie TabelaTuplu LinieinregistrareCardinalitate Numar de liniiAtribut ColoanaCimpGrad Numar de coloaneDomeniu Multime de valori valide16Elementele modelului relaţional schemă relaţională relaţie BD schemă a BD Modelul clasic de BD -modelul relaţional unde datele sunt memorate icircn tabele Relatie-multimea finita de tupluriRelaţiile icircntre 2 tabele sunt unidirecţionale astfel o tabelă devine principală cealaltă devine subordonată Schema relatiei-capul BD - un ansamblu de date structurate accesibile unei comunităţi de utilizatoriSchema BD poate fi reprezentată printr-o diagramă de structură icircn care sunt puse icircn evidenţă şi legăturile dintre tabele17 Noţiunea de cheie Tipuri de chei ExempleCheiendashun camp sau o asociatie de campuri ce are valori distincte NOT NULL pentru fiecare inregistrare din BDCheie primară garantează unicitatea şi minimalitatea şi obligă mulţimea de atribute să fie cheie primară Pentru aceasta se utilizeaza clauza PRIMARY KEY Cheie secundară garantează unicitatea atributelor ^^ astfel declarateSe utilizează clauza UNIQUEŞi obligatoriu trebuie adiţional specificat NOT NULL Restrictia precizeaza faptul ca un camp este o cheie straina fiind cheie primara a altei tabele Definire in tabela angajat a cheii straine pentru campul D_nr CREATE TABLE Angajat (NUME VARCHAR(15) INI CHAR(1) PREN VARCHAR(12)

SSN CHAR(9) CONSTRAINTS ang_PK PRIMARY KEYDAT_NA CHAR(8)ADR VARCHAR(30)SEX CHAR(1)SALARIU INTEGERSSSN CHAR(9)D_NR INTEGER CONSTRAINTS ang_FK REFERENCES departament(D_nr) FOREIGN KEY(D_nr) on delete cascade|on delete set NULL)18 Constracircngeri de integritate structurale ExempleNot nullspecifica faptul ca un cimp nu poate avea valori necunoscutenullUniquedetermina comportamentul cimpurilor care nu fac parte din cheia primaraConstringerea Unique asigura ca valorile duplicate nu vor fi introduse pentru cimpurile specificateInsa cimpurile specificate pot avea valori nuleiar sistemul creeaza automat din ele un index pentru facilitatea cautarii in tabeleCheia primaracimpurile nu pot contine valori duplicateCheia externaun cimp sau o multime de cimpuri ce orespund cheii primare a altui tabelCheia primara se utilizeaza pentru a defini legaturile dintre tabeleExtabelul comenzi contine codfurnizor ca cheie primaracod furnizor din tabela furniozor este cheie externa pentru tabelul comenzi19 Constracircngeri de integritate comportamentale ExempleCheck limiteaza valorile care pot fi luate de un cimp (sau mai multe cimpuri)In cazul actualizarii BD sistemul testeaza constringerea booleana care urmeaza dupa cuv rezervat checkDaca adevarat-este acceptata actualizareaex CHECK(ldquoan studiurdquo BETWEEN 1 and 5)Reguliorice restricţie are asociat un nume (explicit sau implicit)Dacă folosim CONSTRAINT atunci numele trebuie dat explicitCheile multiple pot fi definite doar la nivelul tabeleiNOT NULL doar la nivelul coloanei20 Operaţii de actualizare a relaţiilorINSERT ndash Adaugă un tuplu sau mai multe icircntr-o relaţie1048708 UPDATE ndash Modifică valorile unor atribute icircntro relaţie specificată icircn tuplurile specificate deun criteriu1048708 DELETE ndash Şterge tuplurile dintr-o relaţie care satisfac un criteriu specificat

21 Operaţiile tradiţionale pe mulţimi uniunea intersecţia şi diferenţa Proprietăţi ExempleOperatiile binare asupra relatiilor uniunea intersectia si diferenta necesita ca operanzii (relatiile) sa fie defintii pe scheme compatibileUniunea a doua relatii compatibile r(R) si s(S) notata cu r U s e o relatie definita pe schema R sau S si consta din tuplurile ce apartin relatiilor r sau s Operatia uniunea are doua proprietati Ea e comutativa adica r U s = s U r Ea este si asociativa adics (r U s) U q = rU(s U q) pentru relaiile mutual compatibile r s si qIntersectia a doua relatii compatibile r(R) si s(S) notata cu r cap sneste o relatie definita peschema R sau S si consta din tuplurile ce apartin concomitent relatiilor r si sDiferenta a doua relatii compatibile r(R) si s(S) notata cu r s este o relatie definita pe multimea de atribute R sau S si are icircn calitate de tupluri toate tuplurile din relatia r ce nu sunt icircn s

Diferena nu se bucura de proprietatea comutativa adica r s ne s r Totodata nu e nici asociativa adica (r s) q ne r (s q) fiindca (r s) q = r (s U q) pentru orice relaii mutual

compatibile r s si q

Intersectia q=rcaps

Diferenta q1=rs q2=sr

22 Operaţia produsul cartezian Proprietăţi ExempleProdusul cartezian a doua relatii r(A1hellipAn) si s(B1hellipBm) notat cu r 10487081048708s este o multime de tupluri (si nu icircntotdeauna o relatie) definite pe multimea de atribute A1hellipAn B1hellipBm Tuplurile reprezinta toate posibilele asociatii de tupluri din r si s daca tr Є r si ts Є s atunci concatenatia trts este un tuplu icircn r 10487081048708s pentru orice pereche de tupluri tr si ts din r si s respectiv exista un tuplu t icircn r 10487081048708s icircncacirct t[Ai]=tr[Ai] 1leilen si t[Bj]=ts[Bj1048708 1lejlem

Produsul cartezian nu este o operatie comutativa Icircn schimb se bucura de proprietatea asociativa23 Operaţiile complement şi complement activ Proprietăţi ExempleFie relatia r(R) Notam prin tup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor Complementul relatiei r notat cu ־r este ־r = tup(R) rFie r o relatie asupra schemei R AЄR si adom(A) = a|aЄdom(A) amp Ǝ tЄrampt[A] =a Multimea de valori adom(A) se numeste domeniul activ al atributului A Notam cu atup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor active Atunci complementul activ notat cu ~r este ~r = atup(R) r Complementul activ

Complementul24 Operaţia selecţia Proprietăţi ExempleSelectia este o operatie unara Pentru selectarea unor tupluri dintr-o

relatie e necesara specificarea conditiilor de selectare Icircn rezultat se obtine o relatie ce e o submultime de tupluri a relatiei initialeSelectia relatiei r (R) conform formulei F unde F e aplicabila relatiei r(R) e o submultime a relatiei r(R) notata cu σF(r) ce consta din toate tuplurile tЄr ce satisfac F adica σF(r) = 1048708t | t Є r amp F(t)1048708

Selectia s=σ((A = B) amp (D10487085))(r)

25 Operaţia proiecţia Proprietăţi ExempleProiectia e o operatie unara Proiectia relatiei r asupra multimii de atribute X notata cu πx(r) e o relatie cu schema X ce consta din X-valorile tuturor tuplurilor din r πx(r) = 1048708t 1048708X10487081048708| t Є r1048708

Proiectia s = πAC(r)26 Operaţia joncţiune Proprietăţi ExempleFie doua relatii r(R) si s(S) Jonctiunea relatiilor r si s (notatia uzuala r|x|s) este o relatie cu schema RS Tuplul t apartine relatiei rezultat daca exista tuplurile tr si ts icircn r si s respectiv si satisfac t[R]=tr si t[S]=ts adica r |x| s = t | t[R] = tramp t[S] = tsamp trЄ r amp ts Є s Deci fiecare tuplu din relatia rezultat este o concatenare a unui tuplu din r cu un tuplu din s ce au (RcapS)-valori egale Atributele cu acelasi nume icircn schema relatiei rezultat se iau o singura data Operatia jonctiunea nu este comutativa Icircn schimb ea se bucura de proprietatea asociativa

Jonctiunea q = r |x| s27 Interacţiunea dintre operaţiile joncţiunea şi proiecţia ExempleFie relatiile r(A B) si s(B C) Notam q=r|x|s si r1 = πAB(q) Icircn urma operatiilor observam ca tuplurile relatiei r1 constituie o submultime proprie a relatiei r

28 Operaţia θ-joncţiune Proprietăţi Exempleθ-jonctiunea relatiilor r(R) si s(S) notata cu r|x|AθBs este o multime de tupluri concatenate de forma trts unde tr Є r ts Є s si tr(A) θ ts(B) adicar|x|AθBs = trts | tr Є r amp ts Є s amp tr(A) θ ts(B)Operatia θ-jonctiunea poate fi exprimata prin operatiile produsul cartezian si selectia Rezultatul unei θ-jonctiuni este acelasi cu rezultatul unei selectii operate asupra unui produs cartezian adica r|x|AθBs = σAθB(r 10487081048708s)

29 Operaţia semijoncţiunea Proprietăţi Exemple

Semijonctiunea e o operatie binara Ea consta icircn construirea unei relatii din cele doua si e formata numai din tuplurile unei singure relatii ce participa la jonctiune Fie doua relatii r(R) si s(S) Semijonctiunea relatiei r si s notata cur|x s este o multime de tupluri determinata de expresia r|x s = πR(r|x|s)

Semijonctiunea q =r|xs30 Operaţia divizarea Proprietăţi ExempleFie r(R) si s(S) doua relaii si S R Notam Q = R S Diviziunea relatiei r la relatia s notata cu r1048708s este o relatie definita pe multimea de atribute Q r1048708s = t| pentru tsЄ s(S) Ǝ tr Є r(R) ce satisface tr[Q]=t si tr[S]=tsOperatia diviziunea poate fi conceputa drept operatie inversa produsului cartezian Fie q=r1048708s Atunci q1048708s produce o relatie cu schema R si relatia q va contine numarul maximal de tupluri ce ar satisface expresia q1048708s r

Diviziunea q= r1048708s31Componentele limbajului SQL2Definirea datelor categorii de date tipul acestora legături reguli de validare formatareManipularea datelor selectarea oricărui cacircmp de date filtrarea datelor sortarea corelarea cu alte informaţii şi totalizarea rezultatelor actualizare ştergere copiere icircn alt tabelControlul datelor definirea utilizatorilor cu drept de citire actualizare şi inserare date partajarea datelor DDL Limbaj de definire a datelor Mulţime de instrucţiuni care permitDefinirea modificarea şi eliminarea schemelor de relaţii (tabele)Crearea indecşilorDefinirea viziunilorSpecificarea constracircngerilor de integritate

Exemplu CREATE ALTER DROP DML Limbaj de manipulare a datelorMulţime de instrucţiuni care permit Consultarea actualizarea şi ştergerea obiectelor create cu DDL cum ar fi tabelele indecşi etc Este bazat pe algebra şi calculul relaţional Exemple SELECT INSERT UPDATEdeleTe DCL Limbaj de control al datelor Mulţime de instrucţiuni care permit Definirea permiselor de acces la BD Exemple GRANT REVOKE32 Tipuri de date numerice icircn SQL2 şi Transact SQL Exemple

IntregiINTEGER 4 octeţi numere icircntre -2147483648 şi 2147483648SMALLINT 2 octeţi numere icircntre -32768 şi 32767TINYINT 1 octet numere de la 0 la 255ZecimaleNUMERIC(MD)DECIMAL(MD)Norma SQL2 impune atributelor de tip NUMERIC să accepte numere cu un număr exact de cifre zecimale icircn timp ce atributele de tip DECIMAL nuNumerice aproximativeREAL numere cu precizie simplă cu cel puţin 7 cifre semnificativeDOUBLE PRECISION sau FLOATW reprezintă numere cu dublă precizie cu cel puţin 15 cifre semnificative33 Tipuri de date secvenţe de caractere icircn SQL2 şi Transact SQL Exemple CHAR(N) (sau CHARACTER(N)) secvenţă de lungime fixăVARCHAR(N) (sau CHAR VARYING(N) sau CHARACTER VARYING(N)) secvenţă de lungime variabilă cu cel mult N caractereTEXTSecvente de biti BIT(N) de lungime fixăVARBIT(N) (sau BIT VARYING(N)) lungime variabilă cu cel mult N biţi34 Tipuri de date temporale icircn SQL2 şi Transact SQL ExempleDATE YYYY-MM-DDTIME HH-MM-SSTIME-STAMPYYYY-MM-DD-HH-MM-SS-FF35 Definirea schemei unei relaţii icircn SQL2 ExempleO schema relatie R data prin R(A1A2An) reprezinta un set al atributelor Ai Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R Di este domeniul lui Ai si se noteaza dom(Ai) O schema relatie este utilizata pentru descrierea relatiei R unde R este numele relatiei Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei Fie de exemplu o schema relatie de grad 7 ce descrie studentii intr-o universitate STUDENT(Nume SSN Telefon Adresa_stabila Adresa_flotanta Virsta Directie_specializare)36 Constracircngeri de comportament icircn SQL2 ExempleSpecifica caracteristicile independente ale unui atribut(sau domeniu)Ele exprima semanticca elementelor domeniilorDe exemplu valorile atributului Nota_med trebuie sa fie mai mare decit zerodar nu poate depasi zeceSau nici o persoana de virsta 25 ani nu poate avea o vechime in munca de 37 de aniDeci conform acestei restrictii valorile atributului trebuie sa se incadreze intre anumite limite37 Constracircngeri structurale icircn SQL2 ExempleSpecifica legatura dintre atribute(sau domenii)Aici putem identifica asa numita dependenta de multime de atributeAngajat Salariu Departament Manager In relatia personalun manager este in acelasi timp un angajatdar nu orice angajat este managerDeci avem ca dom(manager) Ui dom (angajat)

38 Modificarea şi suprimarea schemei relaţionale icircn SQL2 Exemple1 Drop table comanda pentru stergerea unei relatiiDROP TABLE Angajat2Alter table modificarea schemei relationaleALTER TABLE nume_relatie TIP_modif (definitie)Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT expresie] [constrangere])ExALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT ldquomediirdquo CONSTRAINT ang_stud NOT NULL)Stergerea unui campALTER TABLE nume_relatie DROP COLUMN nume_coloana [CASCADE CONSTRAINTS]SauALTER TABLE nume_relatie DROP (lisata coloane) [CASCADE CONSTRAINTS]ExALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSN

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 3: Baze de Date

Se aduna informatia de la diviziuni si subdiviziuni Prima etapă icircn proiectarea BD constă icircn realizarea unor modele de date conceptuale pt fiecare vedere a utilizatorilor asupra icircntreprinderii O vedere a utilizatorului reprezintă datele cerute de către un anumit utilizator pentru a lua o decizie corectă sau a efectua o anumită activitate De obicei vederea unui utilizator constituie o zonă funcţională a icircntreprinderii cum ar fi producţia marketing vacircnzările personalul contabilitatea sau controlul aprovizionării Un utilizator poate fi o persoană reală sau un grup de persoane ce utilizează icircn mod direct sistemul Utilizatorul se poate referi la un raport produs de către sistem sau poate solicita rezultatele unei tranzacţii ce trebuie acceptată de către acestea Vederile utilizatorilor pot fi identificate folosind diverse metode pot fi examinate diagramele de flux de date ce au fost realizate mai icircnainte pt de a identifica zonele funcţionale şi posibil funcţiile individuale ar putea fi chestionaţi utilizatorii se pot examina procedurile rapoartele şi formulările şisau observa icircntreprinderea icircn funcţiune13Modelarea viziunilor utilizatorului la etapa de proiectare conceptuală a bazelor de dateConsta din 3 etape-analiza cerintelor informationale-modelarea schemelor conceptuale particulare (viziunile user)-integrarea schemei particulare si crearea schemei globale14 Integrarea viziunilor utilizatorilor şi proiectarea schemei conceptuale globale a BDRezultatul integrării tehnologiei bazelor de date cu cea a reţelelor de calculatoare sunt BD distribuite - Sunt BD logic integrate dar fizic distribuite pe mai multe sisteme de calcul Integrarea BD distribuite se face cu ajutorul celor trei tipuri de de scheme care sunt implementate1schema globală ndash defineşteşi descrie toate informaţiile din baza de date distribuită icircn reţea2schema de fragmentare ndash descrie legăturile dintre o colecţie globalăşi fragmentele sale E de tipul unu la mai mulţi şi are forma unei ierarhii3schema de alocare ndash descrie modul de distribuire a segmentelor pe calculatoarele(nodurile) din reţea Fiecare segment va avea o alocare fizică pe unul sau mai multe calculatoare Schema de alocare introduce o redundanţă minimă şi controlată un anumit segment se poate regăsi fizic pe mai multe calculatoare15Elementele modelului relaţional atribute domenii tupluri Definiţii şi exempleEntitate - un obiect real sau conceptual cu o existenta independenta este un obiect cu existenta fizica persoana particulara automobil companie activitate curs universitar etcOrice entitate are o serie de proprietati numite si atribute ce particularizeaza entitatea respectiva De exemplu pentru o entitate angajat se pot enumera o serie de atribute cum sint nume adresa data nasterii sex salariu Atributul este o utilizare sub un nume oarecare a unui domeniu

icircntr-o relaţie pot exista mai multe atribute derivate din acelaşi domeniu icircn termenii abstractizărilor un domeniu este o generalizare a unor atribute

Domeniul reprezintă ansamblul de valori admisibile pentru o componentă a unei relaţii domeniul numelor de oraşe domeniul numelor de persoane domeniul numerelor icircntregi etc

Tuplu-secventa de elemente care merg unul dupa altul dar nu fixam ordineaRelaţie TabelaTuplu LinieinregistrareCardinalitate Numar de liniiAtribut ColoanaCimpGrad Numar de coloaneDomeniu Multime de valori valide16Elementele modelului relaţional schemă relaţională relaţie BD schemă a BD Modelul clasic de BD -modelul relaţional unde datele sunt memorate icircn tabele Relatie-multimea finita de tupluriRelaţiile icircntre 2 tabele sunt unidirecţionale astfel o tabelă devine principală cealaltă devine subordonată Schema relatiei-capul BD - un ansamblu de date structurate accesibile unei comunităţi de utilizatoriSchema BD poate fi reprezentată printr-o diagramă de structură icircn care sunt puse icircn evidenţă şi legăturile dintre tabele17 Noţiunea de cheie Tipuri de chei ExempleCheiendashun camp sau o asociatie de campuri ce are valori distincte NOT NULL pentru fiecare inregistrare din BDCheie primară garantează unicitatea şi minimalitatea şi obligă mulţimea de atribute să fie cheie primară Pentru aceasta se utilizeaza clauza PRIMARY KEY Cheie secundară garantează unicitatea atributelor ^^ astfel declarateSe utilizează clauza UNIQUEŞi obligatoriu trebuie adiţional specificat NOT NULL Restrictia precizeaza faptul ca un camp este o cheie straina fiind cheie primara a altei tabele Definire in tabela angajat a cheii straine pentru campul D_nr CREATE TABLE Angajat (NUME VARCHAR(15) INI CHAR(1) PREN VARCHAR(12)

SSN CHAR(9) CONSTRAINTS ang_PK PRIMARY KEYDAT_NA CHAR(8)ADR VARCHAR(30)SEX CHAR(1)SALARIU INTEGERSSSN CHAR(9)D_NR INTEGER CONSTRAINTS ang_FK REFERENCES departament(D_nr) FOREIGN KEY(D_nr) on delete cascade|on delete set NULL)18 Constracircngeri de integritate structurale ExempleNot nullspecifica faptul ca un cimp nu poate avea valori necunoscutenullUniquedetermina comportamentul cimpurilor care nu fac parte din cheia primaraConstringerea Unique asigura ca valorile duplicate nu vor fi introduse pentru cimpurile specificateInsa cimpurile specificate pot avea valori nuleiar sistemul creeaza automat din ele un index pentru facilitatea cautarii in tabeleCheia primaracimpurile nu pot contine valori duplicateCheia externaun cimp sau o multime de cimpuri ce orespund cheii primare a altui tabelCheia primara se utilizeaza pentru a defini legaturile dintre tabeleExtabelul comenzi contine codfurnizor ca cheie primaracod furnizor din tabela furniozor este cheie externa pentru tabelul comenzi19 Constracircngeri de integritate comportamentale ExempleCheck limiteaza valorile care pot fi luate de un cimp (sau mai multe cimpuri)In cazul actualizarii BD sistemul testeaza constringerea booleana care urmeaza dupa cuv rezervat checkDaca adevarat-este acceptata actualizareaex CHECK(ldquoan studiurdquo BETWEEN 1 and 5)Reguliorice restricţie are asociat un nume (explicit sau implicit)Dacă folosim CONSTRAINT atunci numele trebuie dat explicitCheile multiple pot fi definite doar la nivelul tabeleiNOT NULL doar la nivelul coloanei20 Operaţii de actualizare a relaţiilorINSERT ndash Adaugă un tuplu sau mai multe icircntr-o relaţie1048708 UPDATE ndash Modifică valorile unor atribute icircntro relaţie specificată icircn tuplurile specificate deun criteriu1048708 DELETE ndash Şterge tuplurile dintr-o relaţie care satisfac un criteriu specificat

21 Operaţiile tradiţionale pe mulţimi uniunea intersecţia şi diferenţa Proprietăţi ExempleOperatiile binare asupra relatiilor uniunea intersectia si diferenta necesita ca operanzii (relatiile) sa fie defintii pe scheme compatibileUniunea a doua relatii compatibile r(R) si s(S) notata cu r U s e o relatie definita pe schema R sau S si consta din tuplurile ce apartin relatiilor r sau s Operatia uniunea are doua proprietati Ea e comutativa adica r U s = s U r Ea este si asociativa adics (r U s) U q = rU(s U q) pentru relaiile mutual compatibile r s si qIntersectia a doua relatii compatibile r(R) si s(S) notata cu r cap sneste o relatie definita peschema R sau S si consta din tuplurile ce apartin concomitent relatiilor r si sDiferenta a doua relatii compatibile r(R) si s(S) notata cu r s este o relatie definita pe multimea de atribute R sau S si are icircn calitate de tupluri toate tuplurile din relatia r ce nu sunt icircn s

Diferena nu se bucura de proprietatea comutativa adica r s ne s r Totodata nu e nici asociativa adica (r s) q ne r (s q) fiindca (r s) q = r (s U q) pentru orice relaii mutual

compatibile r s si q

Intersectia q=rcaps

Diferenta q1=rs q2=sr

22 Operaţia produsul cartezian Proprietăţi ExempleProdusul cartezian a doua relatii r(A1hellipAn) si s(B1hellipBm) notat cu r 10487081048708s este o multime de tupluri (si nu icircntotdeauna o relatie) definite pe multimea de atribute A1hellipAn B1hellipBm Tuplurile reprezinta toate posibilele asociatii de tupluri din r si s daca tr Є r si ts Є s atunci concatenatia trts este un tuplu icircn r 10487081048708s pentru orice pereche de tupluri tr si ts din r si s respectiv exista un tuplu t icircn r 10487081048708s icircncacirct t[Ai]=tr[Ai] 1leilen si t[Bj]=ts[Bj1048708 1lejlem

Produsul cartezian nu este o operatie comutativa Icircn schimb se bucura de proprietatea asociativa23 Operaţiile complement şi complement activ Proprietăţi ExempleFie relatia r(R) Notam prin tup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor Complementul relatiei r notat cu ־r este ־r = tup(R) rFie r o relatie asupra schemei R AЄR si adom(A) = a|aЄdom(A) amp Ǝ tЄrampt[A] =a Multimea de valori adom(A) se numeste domeniul activ al atributului A Notam cu atup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor active Atunci complementul activ notat cu ~r este ~r = atup(R) r Complementul activ

Complementul24 Operaţia selecţia Proprietăţi ExempleSelectia este o operatie unara Pentru selectarea unor tupluri dintr-o

relatie e necesara specificarea conditiilor de selectare Icircn rezultat se obtine o relatie ce e o submultime de tupluri a relatiei initialeSelectia relatiei r (R) conform formulei F unde F e aplicabila relatiei r(R) e o submultime a relatiei r(R) notata cu σF(r) ce consta din toate tuplurile tЄr ce satisfac F adica σF(r) = 1048708t | t Є r amp F(t)1048708

Selectia s=σ((A = B) amp (D10487085))(r)

25 Operaţia proiecţia Proprietăţi ExempleProiectia e o operatie unara Proiectia relatiei r asupra multimii de atribute X notata cu πx(r) e o relatie cu schema X ce consta din X-valorile tuturor tuplurilor din r πx(r) = 1048708t 1048708X10487081048708| t Є r1048708

Proiectia s = πAC(r)26 Operaţia joncţiune Proprietăţi ExempleFie doua relatii r(R) si s(S) Jonctiunea relatiilor r si s (notatia uzuala r|x|s) este o relatie cu schema RS Tuplul t apartine relatiei rezultat daca exista tuplurile tr si ts icircn r si s respectiv si satisfac t[R]=tr si t[S]=ts adica r |x| s = t | t[R] = tramp t[S] = tsamp trЄ r amp ts Є s Deci fiecare tuplu din relatia rezultat este o concatenare a unui tuplu din r cu un tuplu din s ce au (RcapS)-valori egale Atributele cu acelasi nume icircn schema relatiei rezultat se iau o singura data Operatia jonctiunea nu este comutativa Icircn schimb ea se bucura de proprietatea asociativa

Jonctiunea q = r |x| s27 Interacţiunea dintre operaţiile joncţiunea şi proiecţia ExempleFie relatiile r(A B) si s(B C) Notam q=r|x|s si r1 = πAB(q) Icircn urma operatiilor observam ca tuplurile relatiei r1 constituie o submultime proprie a relatiei r

28 Operaţia θ-joncţiune Proprietăţi Exempleθ-jonctiunea relatiilor r(R) si s(S) notata cu r|x|AθBs este o multime de tupluri concatenate de forma trts unde tr Є r ts Є s si tr(A) θ ts(B) adicar|x|AθBs = trts | tr Є r amp ts Є s amp tr(A) θ ts(B)Operatia θ-jonctiunea poate fi exprimata prin operatiile produsul cartezian si selectia Rezultatul unei θ-jonctiuni este acelasi cu rezultatul unei selectii operate asupra unui produs cartezian adica r|x|AθBs = σAθB(r 10487081048708s)

29 Operaţia semijoncţiunea Proprietăţi Exemple

Semijonctiunea e o operatie binara Ea consta icircn construirea unei relatii din cele doua si e formata numai din tuplurile unei singure relatii ce participa la jonctiune Fie doua relatii r(R) si s(S) Semijonctiunea relatiei r si s notata cur|x s este o multime de tupluri determinata de expresia r|x s = πR(r|x|s)

Semijonctiunea q =r|xs30 Operaţia divizarea Proprietăţi ExempleFie r(R) si s(S) doua relaii si S R Notam Q = R S Diviziunea relatiei r la relatia s notata cu r1048708s este o relatie definita pe multimea de atribute Q r1048708s = t| pentru tsЄ s(S) Ǝ tr Є r(R) ce satisface tr[Q]=t si tr[S]=tsOperatia diviziunea poate fi conceputa drept operatie inversa produsului cartezian Fie q=r1048708s Atunci q1048708s produce o relatie cu schema R si relatia q va contine numarul maximal de tupluri ce ar satisface expresia q1048708s r

Diviziunea q= r1048708s31Componentele limbajului SQL2Definirea datelor categorii de date tipul acestora legături reguli de validare formatareManipularea datelor selectarea oricărui cacircmp de date filtrarea datelor sortarea corelarea cu alte informaţii şi totalizarea rezultatelor actualizare ştergere copiere icircn alt tabelControlul datelor definirea utilizatorilor cu drept de citire actualizare şi inserare date partajarea datelor DDL Limbaj de definire a datelor Mulţime de instrucţiuni care permitDefinirea modificarea şi eliminarea schemelor de relaţii (tabele)Crearea indecşilorDefinirea viziunilorSpecificarea constracircngerilor de integritate

Exemplu CREATE ALTER DROP DML Limbaj de manipulare a datelorMulţime de instrucţiuni care permit Consultarea actualizarea şi ştergerea obiectelor create cu DDL cum ar fi tabelele indecşi etc Este bazat pe algebra şi calculul relaţional Exemple SELECT INSERT UPDATEdeleTe DCL Limbaj de control al datelor Mulţime de instrucţiuni care permit Definirea permiselor de acces la BD Exemple GRANT REVOKE32 Tipuri de date numerice icircn SQL2 şi Transact SQL Exemple

IntregiINTEGER 4 octeţi numere icircntre -2147483648 şi 2147483648SMALLINT 2 octeţi numere icircntre -32768 şi 32767TINYINT 1 octet numere de la 0 la 255ZecimaleNUMERIC(MD)DECIMAL(MD)Norma SQL2 impune atributelor de tip NUMERIC să accepte numere cu un număr exact de cifre zecimale icircn timp ce atributele de tip DECIMAL nuNumerice aproximativeREAL numere cu precizie simplă cu cel puţin 7 cifre semnificativeDOUBLE PRECISION sau FLOATW reprezintă numere cu dublă precizie cu cel puţin 15 cifre semnificative33 Tipuri de date secvenţe de caractere icircn SQL2 şi Transact SQL Exemple CHAR(N) (sau CHARACTER(N)) secvenţă de lungime fixăVARCHAR(N) (sau CHAR VARYING(N) sau CHARACTER VARYING(N)) secvenţă de lungime variabilă cu cel mult N caractereTEXTSecvente de biti BIT(N) de lungime fixăVARBIT(N) (sau BIT VARYING(N)) lungime variabilă cu cel mult N biţi34 Tipuri de date temporale icircn SQL2 şi Transact SQL ExempleDATE YYYY-MM-DDTIME HH-MM-SSTIME-STAMPYYYY-MM-DD-HH-MM-SS-FF35 Definirea schemei unei relaţii icircn SQL2 ExempleO schema relatie R data prin R(A1A2An) reprezinta un set al atributelor Ai Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R Di este domeniul lui Ai si se noteaza dom(Ai) O schema relatie este utilizata pentru descrierea relatiei R unde R este numele relatiei Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei Fie de exemplu o schema relatie de grad 7 ce descrie studentii intr-o universitate STUDENT(Nume SSN Telefon Adresa_stabila Adresa_flotanta Virsta Directie_specializare)36 Constracircngeri de comportament icircn SQL2 ExempleSpecifica caracteristicile independente ale unui atribut(sau domeniu)Ele exprima semanticca elementelor domeniilorDe exemplu valorile atributului Nota_med trebuie sa fie mai mare decit zerodar nu poate depasi zeceSau nici o persoana de virsta 25 ani nu poate avea o vechime in munca de 37 de aniDeci conform acestei restrictii valorile atributului trebuie sa se incadreze intre anumite limite37 Constracircngeri structurale icircn SQL2 ExempleSpecifica legatura dintre atribute(sau domenii)Aici putem identifica asa numita dependenta de multime de atributeAngajat Salariu Departament Manager In relatia personalun manager este in acelasi timp un angajatdar nu orice angajat este managerDeci avem ca dom(manager) Ui dom (angajat)

38 Modificarea şi suprimarea schemei relaţionale icircn SQL2 Exemple1 Drop table comanda pentru stergerea unei relatiiDROP TABLE Angajat2Alter table modificarea schemei relationaleALTER TABLE nume_relatie TIP_modif (definitie)Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT expresie] [constrangere])ExALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT ldquomediirdquo CONSTRAINT ang_stud NOT NULL)Stergerea unui campALTER TABLE nume_relatie DROP COLUMN nume_coloana [CASCADE CONSTRAINTS]SauALTER TABLE nume_relatie DROP (lisata coloane) [CASCADE CONSTRAINTS]ExALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSN

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 4: Baze de Date

SSN CHAR(9) CONSTRAINTS ang_PK PRIMARY KEYDAT_NA CHAR(8)ADR VARCHAR(30)SEX CHAR(1)SALARIU INTEGERSSSN CHAR(9)D_NR INTEGER CONSTRAINTS ang_FK REFERENCES departament(D_nr) FOREIGN KEY(D_nr) on delete cascade|on delete set NULL)18 Constracircngeri de integritate structurale ExempleNot nullspecifica faptul ca un cimp nu poate avea valori necunoscutenullUniquedetermina comportamentul cimpurilor care nu fac parte din cheia primaraConstringerea Unique asigura ca valorile duplicate nu vor fi introduse pentru cimpurile specificateInsa cimpurile specificate pot avea valori nuleiar sistemul creeaza automat din ele un index pentru facilitatea cautarii in tabeleCheia primaracimpurile nu pot contine valori duplicateCheia externaun cimp sau o multime de cimpuri ce orespund cheii primare a altui tabelCheia primara se utilizeaza pentru a defini legaturile dintre tabeleExtabelul comenzi contine codfurnizor ca cheie primaracod furnizor din tabela furniozor este cheie externa pentru tabelul comenzi19 Constracircngeri de integritate comportamentale ExempleCheck limiteaza valorile care pot fi luate de un cimp (sau mai multe cimpuri)In cazul actualizarii BD sistemul testeaza constringerea booleana care urmeaza dupa cuv rezervat checkDaca adevarat-este acceptata actualizareaex CHECK(ldquoan studiurdquo BETWEEN 1 and 5)Reguliorice restricţie are asociat un nume (explicit sau implicit)Dacă folosim CONSTRAINT atunci numele trebuie dat explicitCheile multiple pot fi definite doar la nivelul tabeleiNOT NULL doar la nivelul coloanei20 Operaţii de actualizare a relaţiilorINSERT ndash Adaugă un tuplu sau mai multe icircntr-o relaţie1048708 UPDATE ndash Modifică valorile unor atribute icircntro relaţie specificată icircn tuplurile specificate deun criteriu1048708 DELETE ndash Şterge tuplurile dintr-o relaţie care satisfac un criteriu specificat

21 Operaţiile tradiţionale pe mulţimi uniunea intersecţia şi diferenţa Proprietăţi ExempleOperatiile binare asupra relatiilor uniunea intersectia si diferenta necesita ca operanzii (relatiile) sa fie defintii pe scheme compatibileUniunea a doua relatii compatibile r(R) si s(S) notata cu r U s e o relatie definita pe schema R sau S si consta din tuplurile ce apartin relatiilor r sau s Operatia uniunea are doua proprietati Ea e comutativa adica r U s = s U r Ea este si asociativa adics (r U s) U q = rU(s U q) pentru relaiile mutual compatibile r s si qIntersectia a doua relatii compatibile r(R) si s(S) notata cu r cap sneste o relatie definita peschema R sau S si consta din tuplurile ce apartin concomitent relatiilor r si sDiferenta a doua relatii compatibile r(R) si s(S) notata cu r s este o relatie definita pe multimea de atribute R sau S si are icircn calitate de tupluri toate tuplurile din relatia r ce nu sunt icircn s

Diferena nu se bucura de proprietatea comutativa adica r s ne s r Totodata nu e nici asociativa adica (r s) q ne r (s q) fiindca (r s) q = r (s U q) pentru orice relaii mutual

compatibile r s si q

Intersectia q=rcaps

Diferenta q1=rs q2=sr

22 Operaţia produsul cartezian Proprietăţi ExempleProdusul cartezian a doua relatii r(A1hellipAn) si s(B1hellipBm) notat cu r 10487081048708s este o multime de tupluri (si nu icircntotdeauna o relatie) definite pe multimea de atribute A1hellipAn B1hellipBm Tuplurile reprezinta toate posibilele asociatii de tupluri din r si s daca tr Є r si ts Є s atunci concatenatia trts este un tuplu icircn r 10487081048708s pentru orice pereche de tupluri tr si ts din r si s respectiv exista un tuplu t icircn r 10487081048708s icircncacirct t[Ai]=tr[Ai] 1leilen si t[Bj]=ts[Bj1048708 1lejlem

Produsul cartezian nu este o operatie comutativa Icircn schimb se bucura de proprietatea asociativa23 Operaţiile complement şi complement activ Proprietăţi ExempleFie relatia r(R) Notam prin tup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor Complementul relatiei r notat cu ־r este ־r = tup(R) rFie r o relatie asupra schemei R AЄR si adom(A) = a|aЄdom(A) amp Ǝ tЄrampt[A] =a Multimea de valori adom(A) se numeste domeniul activ al atributului A Notam cu atup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor active Atunci complementul activ notat cu ~r este ~r = atup(R) r Complementul activ

Complementul24 Operaţia selecţia Proprietăţi ExempleSelectia este o operatie unara Pentru selectarea unor tupluri dintr-o

relatie e necesara specificarea conditiilor de selectare Icircn rezultat se obtine o relatie ce e o submultime de tupluri a relatiei initialeSelectia relatiei r (R) conform formulei F unde F e aplicabila relatiei r(R) e o submultime a relatiei r(R) notata cu σF(r) ce consta din toate tuplurile tЄr ce satisfac F adica σF(r) = 1048708t | t Є r amp F(t)1048708

Selectia s=σ((A = B) amp (D10487085))(r)

25 Operaţia proiecţia Proprietăţi ExempleProiectia e o operatie unara Proiectia relatiei r asupra multimii de atribute X notata cu πx(r) e o relatie cu schema X ce consta din X-valorile tuturor tuplurilor din r πx(r) = 1048708t 1048708X10487081048708| t Є r1048708

Proiectia s = πAC(r)26 Operaţia joncţiune Proprietăţi ExempleFie doua relatii r(R) si s(S) Jonctiunea relatiilor r si s (notatia uzuala r|x|s) este o relatie cu schema RS Tuplul t apartine relatiei rezultat daca exista tuplurile tr si ts icircn r si s respectiv si satisfac t[R]=tr si t[S]=ts adica r |x| s = t | t[R] = tramp t[S] = tsamp trЄ r amp ts Є s Deci fiecare tuplu din relatia rezultat este o concatenare a unui tuplu din r cu un tuplu din s ce au (RcapS)-valori egale Atributele cu acelasi nume icircn schema relatiei rezultat se iau o singura data Operatia jonctiunea nu este comutativa Icircn schimb ea se bucura de proprietatea asociativa

Jonctiunea q = r |x| s27 Interacţiunea dintre operaţiile joncţiunea şi proiecţia ExempleFie relatiile r(A B) si s(B C) Notam q=r|x|s si r1 = πAB(q) Icircn urma operatiilor observam ca tuplurile relatiei r1 constituie o submultime proprie a relatiei r

28 Operaţia θ-joncţiune Proprietăţi Exempleθ-jonctiunea relatiilor r(R) si s(S) notata cu r|x|AθBs este o multime de tupluri concatenate de forma trts unde tr Є r ts Є s si tr(A) θ ts(B) adicar|x|AθBs = trts | tr Є r amp ts Є s amp tr(A) θ ts(B)Operatia θ-jonctiunea poate fi exprimata prin operatiile produsul cartezian si selectia Rezultatul unei θ-jonctiuni este acelasi cu rezultatul unei selectii operate asupra unui produs cartezian adica r|x|AθBs = σAθB(r 10487081048708s)

29 Operaţia semijoncţiunea Proprietăţi Exemple

Semijonctiunea e o operatie binara Ea consta icircn construirea unei relatii din cele doua si e formata numai din tuplurile unei singure relatii ce participa la jonctiune Fie doua relatii r(R) si s(S) Semijonctiunea relatiei r si s notata cur|x s este o multime de tupluri determinata de expresia r|x s = πR(r|x|s)

Semijonctiunea q =r|xs30 Operaţia divizarea Proprietăţi ExempleFie r(R) si s(S) doua relaii si S R Notam Q = R S Diviziunea relatiei r la relatia s notata cu r1048708s este o relatie definita pe multimea de atribute Q r1048708s = t| pentru tsЄ s(S) Ǝ tr Є r(R) ce satisface tr[Q]=t si tr[S]=tsOperatia diviziunea poate fi conceputa drept operatie inversa produsului cartezian Fie q=r1048708s Atunci q1048708s produce o relatie cu schema R si relatia q va contine numarul maximal de tupluri ce ar satisface expresia q1048708s r

Diviziunea q= r1048708s31Componentele limbajului SQL2Definirea datelor categorii de date tipul acestora legături reguli de validare formatareManipularea datelor selectarea oricărui cacircmp de date filtrarea datelor sortarea corelarea cu alte informaţii şi totalizarea rezultatelor actualizare ştergere copiere icircn alt tabelControlul datelor definirea utilizatorilor cu drept de citire actualizare şi inserare date partajarea datelor DDL Limbaj de definire a datelor Mulţime de instrucţiuni care permitDefinirea modificarea şi eliminarea schemelor de relaţii (tabele)Crearea indecşilorDefinirea viziunilorSpecificarea constracircngerilor de integritate

Exemplu CREATE ALTER DROP DML Limbaj de manipulare a datelorMulţime de instrucţiuni care permit Consultarea actualizarea şi ştergerea obiectelor create cu DDL cum ar fi tabelele indecşi etc Este bazat pe algebra şi calculul relaţional Exemple SELECT INSERT UPDATEdeleTe DCL Limbaj de control al datelor Mulţime de instrucţiuni care permit Definirea permiselor de acces la BD Exemple GRANT REVOKE32 Tipuri de date numerice icircn SQL2 şi Transact SQL Exemple

IntregiINTEGER 4 octeţi numere icircntre -2147483648 şi 2147483648SMALLINT 2 octeţi numere icircntre -32768 şi 32767TINYINT 1 octet numere de la 0 la 255ZecimaleNUMERIC(MD)DECIMAL(MD)Norma SQL2 impune atributelor de tip NUMERIC să accepte numere cu un număr exact de cifre zecimale icircn timp ce atributele de tip DECIMAL nuNumerice aproximativeREAL numere cu precizie simplă cu cel puţin 7 cifre semnificativeDOUBLE PRECISION sau FLOATW reprezintă numere cu dublă precizie cu cel puţin 15 cifre semnificative33 Tipuri de date secvenţe de caractere icircn SQL2 şi Transact SQL Exemple CHAR(N) (sau CHARACTER(N)) secvenţă de lungime fixăVARCHAR(N) (sau CHAR VARYING(N) sau CHARACTER VARYING(N)) secvenţă de lungime variabilă cu cel mult N caractereTEXTSecvente de biti BIT(N) de lungime fixăVARBIT(N) (sau BIT VARYING(N)) lungime variabilă cu cel mult N biţi34 Tipuri de date temporale icircn SQL2 şi Transact SQL ExempleDATE YYYY-MM-DDTIME HH-MM-SSTIME-STAMPYYYY-MM-DD-HH-MM-SS-FF35 Definirea schemei unei relaţii icircn SQL2 ExempleO schema relatie R data prin R(A1A2An) reprezinta un set al atributelor Ai Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R Di este domeniul lui Ai si se noteaza dom(Ai) O schema relatie este utilizata pentru descrierea relatiei R unde R este numele relatiei Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei Fie de exemplu o schema relatie de grad 7 ce descrie studentii intr-o universitate STUDENT(Nume SSN Telefon Adresa_stabila Adresa_flotanta Virsta Directie_specializare)36 Constracircngeri de comportament icircn SQL2 ExempleSpecifica caracteristicile independente ale unui atribut(sau domeniu)Ele exprima semanticca elementelor domeniilorDe exemplu valorile atributului Nota_med trebuie sa fie mai mare decit zerodar nu poate depasi zeceSau nici o persoana de virsta 25 ani nu poate avea o vechime in munca de 37 de aniDeci conform acestei restrictii valorile atributului trebuie sa se incadreze intre anumite limite37 Constracircngeri structurale icircn SQL2 ExempleSpecifica legatura dintre atribute(sau domenii)Aici putem identifica asa numita dependenta de multime de atributeAngajat Salariu Departament Manager In relatia personalun manager este in acelasi timp un angajatdar nu orice angajat este managerDeci avem ca dom(manager) Ui dom (angajat)

38 Modificarea şi suprimarea schemei relaţionale icircn SQL2 Exemple1 Drop table comanda pentru stergerea unei relatiiDROP TABLE Angajat2Alter table modificarea schemei relationaleALTER TABLE nume_relatie TIP_modif (definitie)Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT expresie] [constrangere])ExALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT ldquomediirdquo CONSTRAINT ang_stud NOT NULL)Stergerea unui campALTER TABLE nume_relatie DROP COLUMN nume_coloana [CASCADE CONSTRAINTS]SauALTER TABLE nume_relatie DROP (lisata coloane) [CASCADE CONSTRAINTS]ExALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSN

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 5: Baze de Date

Diferenta q1=rs q2=sr

22 Operaţia produsul cartezian Proprietăţi ExempleProdusul cartezian a doua relatii r(A1hellipAn) si s(B1hellipBm) notat cu r 10487081048708s este o multime de tupluri (si nu icircntotdeauna o relatie) definite pe multimea de atribute A1hellipAn B1hellipBm Tuplurile reprezinta toate posibilele asociatii de tupluri din r si s daca tr Є r si ts Є s atunci concatenatia trts este un tuplu icircn r 10487081048708s pentru orice pereche de tupluri tr si ts din r si s respectiv exista un tuplu t icircn r 10487081048708s icircncacirct t[Ai]=tr[Ai] 1leilen si t[Bj]=ts[Bj1048708 1lejlem

Produsul cartezian nu este o operatie comutativa Icircn schimb se bucura de proprietatea asociativa23 Operaţiile complement şi complement activ Proprietăţi ExempleFie relatia r(R) Notam prin tup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor Complementul relatiei r notat cu ־r este ־r = tup(R) rFie r o relatie asupra schemei R AЄR si adom(A) = a|aЄdom(A) amp Ǝ tЄrampt[A] =a Multimea de valori adom(A) se numeste domeniul activ al atributului A Notam cu atup(R) multimea tuturor tuplurilor asupra atributelor schemei R si a domeniilor lor active Atunci complementul activ notat cu ~r este ~r = atup(R) r Complementul activ

Complementul24 Operaţia selecţia Proprietăţi ExempleSelectia este o operatie unara Pentru selectarea unor tupluri dintr-o

relatie e necesara specificarea conditiilor de selectare Icircn rezultat se obtine o relatie ce e o submultime de tupluri a relatiei initialeSelectia relatiei r (R) conform formulei F unde F e aplicabila relatiei r(R) e o submultime a relatiei r(R) notata cu σF(r) ce consta din toate tuplurile tЄr ce satisfac F adica σF(r) = 1048708t | t Є r amp F(t)1048708

Selectia s=σ((A = B) amp (D10487085))(r)

25 Operaţia proiecţia Proprietăţi ExempleProiectia e o operatie unara Proiectia relatiei r asupra multimii de atribute X notata cu πx(r) e o relatie cu schema X ce consta din X-valorile tuturor tuplurilor din r πx(r) = 1048708t 1048708X10487081048708| t Є r1048708

Proiectia s = πAC(r)26 Operaţia joncţiune Proprietăţi ExempleFie doua relatii r(R) si s(S) Jonctiunea relatiilor r si s (notatia uzuala r|x|s) este o relatie cu schema RS Tuplul t apartine relatiei rezultat daca exista tuplurile tr si ts icircn r si s respectiv si satisfac t[R]=tr si t[S]=ts adica r |x| s = t | t[R] = tramp t[S] = tsamp trЄ r amp ts Є s Deci fiecare tuplu din relatia rezultat este o concatenare a unui tuplu din r cu un tuplu din s ce au (RcapS)-valori egale Atributele cu acelasi nume icircn schema relatiei rezultat se iau o singura data Operatia jonctiunea nu este comutativa Icircn schimb ea se bucura de proprietatea asociativa

Jonctiunea q = r |x| s27 Interacţiunea dintre operaţiile joncţiunea şi proiecţia ExempleFie relatiile r(A B) si s(B C) Notam q=r|x|s si r1 = πAB(q) Icircn urma operatiilor observam ca tuplurile relatiei r1 constituie o submultime proprie a relatiei r

28 Operaţia θ-joncţiune Proprietăţi Exempleθ-jonctiunea relatiilor r(R) si s(S) notata cu r|x|AθBs este o multime de tupluri concatenate de forma trts unde tr Є r ts Є s si tr(A) θ ts(B) adicar|x|AθBs = trts | tr Є r amp ts Є s amp tr(A) θ ts(B)Operatia θ-jonctiunea poate fi exprimata prin operatiile produsul cartezian si selectia Rezultatul unei θ-jonctiuni este acelasi cu rezultatul unei selectii operate asupra unui produs cartezian adica r|x|AθBs = σAθB(r 10487081048708s)

29 Operaţia semijoncţiunea Proprietăţi Exemple

Semijonctiunea e o operatie binara Ea consta icircn construirea unei relatii din cele doua si e formata numai din tuplurile unei singure relatii ce participa la jonctiune Fie doua relatii r(R) si s(S) Semijonctiunea relatiei r si s notata cur|x s este o multime de tupluri determinata de expresia r|x s = πR(r|x|s)

Semijonctiunea q =r|xs30 Operaţia divizarea Proprietăţi ExempleFie r(R) si s(S) doua relaii si S R Notam Q = R S Diviziunea relatiei r la relatia s notata cu r1048708s este o relatie definita pe multimea de atribute Q r1048708s = t| pentru tsЄ s(S) Ǝ tr Є r(R) ce satisface tr[Q]=t si tr[S]=tsOperatia diviziunea poate fi conceputa drept operatie inversa produsului cartezian Fie q=r1048708s Atunci q1048708s produce o relatie cu schema R si relatia q va contine numarul maximal de tupluri ce ar satisface expresia q1048708s r

Diviziunea q= r1048708s31Componentele limbajului SQL2Definirea datelor categorii de date tipul acestora legături reguli de validare formatareManipularea datelor selectarea oricărui cacircmp de date filtrarea datelor sortarea corelarea cu alte informaţii şi totalizarea rezultatelor actualizare ştergere copiere icircn alt tabelControlul datelor definirea utilizatorilor cu drept de citire actualizare şi inserare date partajarea datelor DDL Limbaj de definire a datelor Mulţime de instrucţiuni care permitDefinirea modificarea şi eliminarea schemelor de relaţii (tabele)Crearea indecşilorDefinirea viziunilorSpecificarea constracircngerilor de integritate

Exemplu CREATE ALTER DROP DML Limbaj de manipulare a datelorMulţime de instrucţiuni care permit Consultarea actualizarea şi ştergerea obiectelor create cu DDL cum ar fi tabelele indecşi etc Este bazat pe algebra şi calculul relaţional Exemple SELECT INSERT UPDATEdeleTe DCL Limbaj de control al datelor Mulţime de instrucţiuni care permit Definirea permiselor de acces la BD Exemple GRANT REVOKE32 Tipuri de date numerice icircn SQL2 şi Transact SQL Exemple

IntregiINTEGER 4 octeţi numere icircntre -2147483648 şi 2147483648SMALLINT 2 octeţi numere icircntre -32768 şi 32767TINYINT 1 octet numere de la 0 la 255ZecimaleNUMERIC(MD)DECIMAL(MD)Norma SQL2 impune atributelor de tip NUMERIC să accepte numere cu un număr exact de cifre zecimale icircn timp ce atributele de tip DECIMAL nuNumerice aproximativeREAL numere cu precizie simplă cu cel puţin 7 cifre semnificativeDOUBLE PRECISION sau FLOATW reprezintă numere cu dublă precizie cu cel puţin 15 cifre semnificative33 Tipuri de date secvenţe de caractere icircn SQL2 şi Transact SQL Exemple CHAR(N) (sau CHARACTER(N)) secvenţă de lungime fixăVARCHAR(N) (sau CHAR VARYING(N) sau CHARACTER VARYING(N)) secvenţă de lungime variabilă cu cel mult N caractereTEXTSecvente de biti BIT(N) de lungime fixăVARBIT(N) (sau BIT VARYING(N)) lungime variabilă cu cel mult N biţi34 Tipuri de date temporale icircn SQL2 şi Transact SQL ExempleDATE YYYY-MM-DDTIME HH-MM-SSTIME-STAMPYYYY-MM-DD-HH-MM-SS-FF35 Definirea schemei unei relaţii icircn SQL2 ExempleO schema relatie R data prin R(A1A2An) reprezinta un set al atributelor Ai Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R Di este domeniul lui Ai si se noteaza dom(Ai) O schema relatie este utilizata pentru descrierea relatiei R unde R este numele relatiei Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei Fie de exemplu o schema relatie de grad 7 ce descrie studentii intr-o universitate STUDENT(Nume SSN Telefon Adresa_stabila Adresa_flotanta Virsta Directie_specializare)36 Constracircngeri de comportament icircn SQL2 ExempleSpecifica caracteristicile independente ale unui atribut(sau domeniu)Ele exprima semanticca elementelor domeniilorDe exemplu valorile atributului Nota_med trebuie sa fie mai mare decit zerodar nu poate depasi zeceSau nici o persoana de virsta 25 ani nu poate avea o vechime in munca de 37 de aniDeci conform acestei restrictii valorile atributului trebuie sa se incadreze intre anumite limite37 Constracircngeri structurale icircn SQL2 ExempleSpecifica legatura dintre atribute(sau domenii)Aici putem identifica asa numita dependenta de multime de atributeAngajat Salariu Departament Manager In relatia personalun manager este in acelasi timp un angajatdar nu orice angajat este managerDeci avem ca dom(manager) Ui dom (angajat)

38 Modificarea şi suprimarea schemei relaţionale icircn SQL2 Exemple1 Drop table comanda pentru stergerea unei relatiiDROP TABLE Angajat2Alter table modificarea schemei relationaleALTER TABLE nume_relatie TIP_modif (definitie)Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT expresie] [constrangere])ExALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT ldquomediirdquo CONSTRAINT ang_stud NOT NULL)Stergerea unui campALTER TABLE nume_relatie DROP COLUMN nume_coloana [CASCADE CONSTRAINTS]SauALTER TABLE nume_relatie DROP (lisata coloane) [CASCADE CONSTRAINTS]ExALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSN

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 6: Baze de Date

Proiectia s = πAC(r)26 Operaţia joncţiune Proprietăţi ExempleFie doua relatii r(R) si s(S) Jonctiunea relatiilor r si s (notatia uzuala r|x|s) este o relatie cu schema RS Tuplul t apartine relatiei rezultat daca exista tuplurile tr si ts icircn r si s respectiv si satisfac t[R]=tr si t[S]=ts adica r |x| s = t | t[R] = tramp t[S] = tsamp trЄ r amp ts Є s Deci fiecare tuplu din relatia rezultat este o concatenare a unui tuplu din r cu un tuplu din s ce au (RcapS)-valori egale Atributele cu acelasi nume icircn schema relatiei rezultat se iau o singura data Operatia jonctiunea nu este comutativa Icircn schimb ea se bucura de proprietatea asociativa

Jonctiunea q = r |x| s27 Interacţiunea dintre operaţiile joncţiunea şi proiecţia ExempleFie relatiile r(A B) si s(B C) Notam q=r|x|s si r1 = πAB(q) Icircn urma operatiilor observam ca tuplurile relatiei r1 constituie o submultime proprie a relatiei r

28 Operaţia θ-joncţiune Proprietăţi Exempleθ-jonctiunea relatiilor r(R) si s(S) notata cu r|x|AθBs este o multime de tupluri concatenate de forma trts unde tr Є r ts Є s si tr(A) θ ts(B) adicar|x|AθBs = trts | tr Є r amp ts Є s amp tr(A) θ ts(B)Operatia θ-jonctiunea poate fi exprimata prin operatiile produsul cartezian si selectia Rezultatul unei θ-jonctiuni este acelasi cu rezultatul unei selectii operate asupra unui produs cartezian adica r|x|AθBs = σAθB(r 10487081048708s)

29 Operaţia semijoncţiunea Proprietăţi Exemple

Semijonctiunea e o operatie binara Ea consta icircn construirea unei relatii din cele doua si e formata numai din tuplurile unei singure relatii ce participa la jonctiune Fie doua relatii r(R) si s(S) Semijonctiunea relatiei r si s notata cur|x s este o multime de tupluri determinata de expresia r|x s = πR(r|x|s)

Semijonctiunea q =r|xs30 Operaţia divizarea Proprietăţi ExempleFie r(R) si s(S) doua relaii si S R Notam Q = R S Diviziunea relatiei r la relatia s notata cu r1048708s este o relatie definita pe multimea de atribute Q r1048708s = t| pentru tsЄ s(S) Ǝ tr Є r(R) ce satisface tr[Q]=t si tr[S]=tsOperatia diviziunea poate fi conceputa drept operatie inversa produsului cartezian Fie q=r1048708s Atunci q1048708s produce o relatie cu schema R si relatia q va contine numarul maximal de tupluri ce ar satisface expresia q1048708s r

Diviziunea q= r1048708s31Componentele limbajului SQL2Definirea datelor categorii de date tipul acestora legături reguli de validare formatareManipularea datelor selectarea oricărui cacircmp de date filtrarea datelor sortarea corelarea cu alte informaţii şi totalizarea rezultatelor actualizare ştergere copiere icircn alt tabelControlul datelor definirea utilizatorilor cu drept de citire actualizare şi inserare date partajarea datelor DDL Limbaj de definire a datelor Mulţime de instrucţiuni care permitDefinirea modificarea şi eliminarea schemelor de relaţii (tabele)Crearea indecşilorDefinirea viziunilorSpecificarea constracircngerilor de integritate

Exemplu CREATE ALTER DROP DML Limbaj de manipulare a datelorMulţime de instrucţiuni care permit Consultarea actualizarea şi ştergerea obiectelor create cu DDL cum ar fi tabelele indecşi etc Este bazat pe algebra şi calculul relaţional Exemple SELECT INSERT UPDATEdeleTe DCL Limbaj de control al datelor Mulţime de instrucţiuni care permit Definirea permiselor de acces la BD Exemple GRANT REVOKE32 Tipuri de date numerice icircn SQL2 şi Transact SQL Exemple

IntregiINTEGER 4 octeţi numere icircntre -2147483648 şi 2147483648SMALLINT 2 octeţi numere icircntre -32768 şi 32767TINYINT 1 octet numere de la 0 la 255ZecimaleNUMERIC(MD)DECIMAL(MD)Norma SQL2 impune atributelor de tip NUMERIC să accepte numere cu un număr exact de cifre zecimale icircn timp ce atributele de tip DECIMAL nuNumerice aproximativeREAL numere cu precizie simplă cu cel puţin 7 cifre semnificativeDOUBLE PRECISION sau FLOATW reprezintă numere cu dublă precizie cu cel puţin 15 cifre semnificative33 Tipuri de date secvenţe de caractere icircn SQL2 şi Transact SQL Exemple CHAR(N) (sau CHARACTER(N)) secvenţă de lungime fixăVARCHAR(N) (sau CHAR VARYING(N) sau CHARACTER VARYING(N)) secvenţă de lungime variabilă cu cel mult N caractereTEXTSecvente de biti BIT(N) de lungime fixăVARBIT(N) (sau BIT VARYING(N)) lungime variabilă cu cel mult N biţi34 Tipuri de date temporale icircn SQL2 şi Transact SQL ExempleDATE YYYY-MM-DDTIME HH-MM-SSTIME-STAMPYYYY-MM-DD-HH-MM-SS-FF35 Definirea schemei unei relaţii icircn SQL2 ExempleO schema relatie R data prin R(A1A2An) reprezinta un set al atributelor Ai Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R Di este domeniul lui Ai si se noteaza dom(Ai) O schema relatie este utilizata pentru descrierea relatiei R unde R este numele relatiei Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei Fie de exemplu o schema relatie de grad 7 ce descrie studentii intr-o universitate STUDENT(Nume SSN Telefon Adresa_stabila Adresa_flotanta Virsta Directie_specializare)36 Constracircngeri de comportament icircn SQL2 ExempleSpecifica caracteristicile independente ale unui atribut(sau domeniu)Ele exprima semanticca elementelor domeniilorDe exemplu valorile atributului Nota_med trebuie sa fie mai mare decit zerodar nu poate depasi zeceSau nici o persoana de virsta 25 ani nu poate avea o vechime in munca de 37 de aniDeci conform acestei restrictii valorile atributului trebuie sa se incadreze intre anumite limite37 Constracircngeri structurale icircn SQL2 ExempleSpecifica legatura dintre atribute(sau domenii)Aici putem identifica asa numita dependenta de multime de atributeAngajat Salariu Departament Manager In relatia personalun manager este in acelasi timp un angajatdar nu orice angajat este managerDeci avem ca dom(manager) Ui dom (angajat)

38 Modificarea şi suprimarea schemei relaţionale icircn SQL2 Exemple1 Drop table comanda pentru stergerea unei relatiiDROP TABLE Angajat2Alter table modificarea schemei relationaleALTER TABLE nume_relatie TIP_modif (definitie)Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT expresie] [constrangere])ExALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT ldquomediirdquo CONSTRAINT ang_stud NOT NULL)Stergerea unui campALTER TABLE nume_relatie DROP COLUMN nume_coloana [CASCADE CONSTRAINTS]SauALTER TABLE nume_relatie DROP (lisata coloane) [CASCADE CONSTRAINTS]ExALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSN

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 7: Baze de Date

Semijonctiunea e o operatie binara Ea consta icircn construirea unei relatii din cele doua si e formata numai din tuplurile unei singure relatii ce participa la jonctiune Fie doua relatii r(R) si s(S) Semijonctiunea relatiei r si s notata cur|x s este o multime de tupluri determinata de expresia r|x s = πR(r|x|s)

Semijonctiunea q =r|xs30 Operaţia divizarea Proprietăţi ExempleFie r(R) si s(S) doua relaii si S R Notam Q = R S Diviziunea relatiei r la relatia s notata cu r1048708s este o relatie definita pe multimea de atribute Q r1048708s = t| pentru tsЄ s(S) Ǝ tr Є r(R) ce satisface tr[Q]=t si tr[S]=tsOperatia diviziunea poate fi conceputa drept operatie inversa produsului cartezian Fie q=r1048708s Atunci q1048708s produce o relatie cu schema R si relatia q va contine numarul maximal de tupluri ce ar satisface expresia q1048708s r

Diviziunea q= r1048708s31Componentele limbajului SQL2Definirea datelor categorii de date tipul acestora legături reguli de validare formatareManipularea datelor selectarea oricărui cacircmp de date filtrarea datelor sortarea corelarea cu alte informaţii şi totalizarea rezultatelor actualizare ştergere copiere icircn alt tabelControlul datelor definirea utilizatorilor cu drept de citire actualizare şi inserare date partajarea datelor DDL Limbaj de definire a datelor Mulţime de instrucţiuni care permitDefinirea modificarea şi eliminarea schemelor de relaţii (tabele)Crearea indecşilorDefinirea viziunilorSpecificarea constracircngerilor de integritate

Exemplu CREATE ALTER DROP DML Limbaj de manipulare a datelorMulţime de instrucţiuni care permit Consultarea actualizarea şi ştergerea obiectelor create cu DDL cum ar fi tabelele indecşi etc Este bazat pe algebra şi calculul relaţional Exemple SELECT INSERT UPDATEdeleTe DCL Limbaj de control al datelor Mulţime de instrucţiuni care permit Definirea permiselor de acces la BD Exemple GRANT REVOKE32 Tipuri de date numerice icircn SQL2 şi Transact SQL Exemple

IntregiINTEGER 4 octeţi numere icircntre -2147483648 şi 2147483648SMALLINT 2 octeţi numere icircntre -32768 şi 32767TINYINT 1 octet numere de la 0 la 255ZecimaleNUMERIC(MD)DECIMAL(MD)Norma SQL2 impune atributelor de tip NUMERIC să accepte numere cu un număr exact de cifre zecimale icircn timp ce atributele de tip DECIMAL nuNumerice aproximativeREAL numere cu precizie simplă cu cel puţin 7 cifre semnificativeDOUBLE PRECISION sau FLOATW reprezintă numere cu dublă precizie cu cel puţin 15 cifre semnificative33 Tipuri de date secvenţe de caractere icircn SQL2 şi Transact SQL Exemple CHAR(N) (sau CHARACTER(N)) secvenţă de lungime fixăVARCHAR(N) (sau CHAR VARYING(N) sau CHARACTER VARYING(N)) secvenţă de lungime variabilă cu cel mult N caractereTEXTSecvente de biti BIT(N) de lungime fixăVARBIT(N) (sau BIT VARYING(N)) lungime variabilă cu cel mult N biţi34 Tipuri de date temporale icircn SQL2 şi Transact SQL ExempleDATE YYYY-MM-DDTIME HH-MM-SSTIME-STAMPYYYY-MM-DD-HH-MM-SS-FF35 Definirea schemei unei relaţii icircn SQL2 ExempleO schema relatie R data prin R(A1A2An) reprezinta un set al atributelor Ai Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R Di este domeniul lui Ai si se noteaza dom(Ai) O schema relatie este utilizata pentru descrierea relatiei R unde R este numele relatiei Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei Fie de exemplu o schema relatie de grad 7 ce descrie studentii intr-o universitate STUDENT(Nume SSN Telefon Adresa_stabila Adresa_flotanta Virsta Directie_specializare)36 Constracircngeri de comportament icircn SQL2 ExempleSpecifica caracteristicile independente ale unui atribut(sau domeniu)Ele exprima semanticca elementelor domeniilorDe exemplu valorile atributului Nota_med trebuie sa fie mai mare decit zerodar nu poate depasi zeceSau nici o persoana de virsta 25 ani nu poate avea o vechime in munca de 37 de aniDeci conform acestei restrictii valorile atributului trebuie sa se incadreze intre anumite limite37 Constracircngeri structurale icircn SQL2 ExempleSpecifica legatura dintre atribute(sau domenii)Aici putem identifica asa numita dependenta de multime de atributeAngajat Salariu Departament Manager In relatia personalun manager este in acelasi timp un angajatdar nu orice angajat este managerDeci avem ca dom(manager) Ui dom (angajat)

38 Modificarea şi suprimarea schemei relaţionale icircn SQL2 Exemple1 Drop table comanda pentru stergerea unei relatiiDROP TABLE Angajat2Alter table modificarea schemei relationaleALTER TABLE nume_relatie TIP_modif (definitie)Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT expresie] [constrangere])ExALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT ldquomediirdquo CONSTRAINT ang_stud NOT NULL)Stergerea unui campALTER TABLE nume_relatie DROP COLUMN nume_coloana [CASCADE CONSTRAINTS]SauALTER TABLE nume_relatie DROP (lisata coloane) [CASCADE CONSTRAINTS]ExALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSN

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 8: Baze de Date

IntregiINTEGER 4 octeţi numere icircntre -2147483648 şi 2147483648SMALLINT 2 octeţi numere icircntre -32768 şi 32767TINYINT 1 octet numere de la 0 la 255ZecimaleNUMERIC(MD)DECIMAL(MD)Norma SQL2 impune atributelor de tip NUMERIC să accepte numere cu un număr exact de cifre zecimale icircn timp ce atributele de tip DECIMAL nuNumerice aproximativeREAL numere cu precizie simplă cu cel puţin 7 cifre semnificativeDOUBLE PRECISION sau FLOATW reprezintă numere cu dublă precizie cu cel puţin 15 cifre semnificative33 Tipuri de date secvenţe de caractere icircn SQL2 şi Transact SQL Exemple CHAR(N) (sau CHARACTER(N)) secvenţă de lungime fixăVARCHAR(N) (sau CHAR VARYING(N) sau CHARACTER VARYING(N)) secvenţă de lungime variabilă cu cel mult N caractereTEXTSecvente de biti BIT(N) de lungime fixăVARBIT(N) (sau BIT VARYING(N)) lungime variabilă cu cel mult N biţi34 Tipuri de date temporale icircn SQL2 şi Transact SQL ExempleDATE YYYY-MM-DDTIME HH-MM-SSTIME-STAMPYYYY-MM-DD-HH-MM-SS-FF35 Definirea schemei unei relaţii icircn SQL2 ExempleO schema relatie R data prin R(A1A2An) reprezinta un set al atributelor Ai Fiecare atribut Ai joaca rolul numelui acelui domeniu Di in relatia R Di este domeniul lui Ai si se noteaza dom(Ai) O schema relatie este utilizata pentru descrierea relatiei R unde R este numele relatiei Se defineste gradul relatiei ca fiind numarul atributelor n ale schemei relatiei Fie de exemplu o schema relatie de grad 7 ce descrie studentii intr-o universitate STUDENT(Nume SSN Telefon Adresa_stabila Adresa_flotanta Virsta Directie_specializare)36 Constracircngeri de comportament icircn SQL2 ExempleSpecifica caracteristicile independente ale unui atribut(sau domeniu)Ele exprima semanticca elementelor domeniilorDe exemplu valorile atributului Nota_med trebuie sa fie mai mare decit zerodar nu poate depasi zeceSau nici o persoana de virsta 25 ani nu poate avea o vechime in munca de 37 de aniDeci conform acestei restrictii valorile atributului trebuie sa se incadreze intre anumite limite37 Constracircngeri structurale icircn SQL2 ExempleSpecifica legatura dintre atribute(sau domenii)Aici putem identifica asa numita dependenta de multime de atributeAngajat Salariu Departament Manager In relatia personalun manager este in acelasi timp un angajatdar nu orice angajat este managerDeci avem ca dom(manager) Ui dom (angajat)

38 Modificarea şi suprimarea schemei relaţionale icircn SQL2 Exemple1 Drop table comanda pentru stergerea unei relatiiDROP TABLE Angajat2Alter table modificarea schemei relationaleALTER TABLE nume_relatie TIP_modif (definitie)Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT expresie] [constrangere])ExALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT ldquomediirdquo CONSTRAINT ang_stud NOT NULL)Stergerea unui campALTER TABLE nume_relatie DROP COLUMN nume_coloana [CASCADE CONSTRAINTS]SauALTER TABLE nume_relatie DROP (lisata coloane) [CASCADE CONSTRAINTS]ExALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSN

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 9: Baze de Date

Optiunea CASCADE CONSTRAINTS sterge suplimentar toate constrangerile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY39 Cele mai simple interogări (numai cu proiecţia) icircn SQL2 ExempleSELECT ltcoloanegt FROM lttabelgt where conditieSELECT stuName stuAddress FROM student40 Interogări cu criterii de selecţie icircn SQL2 ExempleSELECT FROM functionari WHERE Varsta lt 28 AND Dept = 1SELECT FROM functionariWHERE Varsta BETWEEN 18 AND 30SELECT FROM funcţionari WHERE Nume IN (Gheorghe Cacircmpeanu Adrian Paiu)SELECT Nume Prenume FROM persoane ORDER BY Nume PrenumeSELECT nume FROM functionari WHERE nume LIKErsquolinrsquoSELECT avg(pret) as Pret_med from imprimante 40Interogări cu criterii de selecţie icircn SQL2 ExempleInterogarile cu criterii de selectie in SQL sunt utilizate pu selectarea datelor din tabeleAre urmatoarea sintaxa de bazaSELECT[TIP]ltlista de cimpurigtFROMltlista de tabelegt[CONDITIE]Lista de cimpuri-lista de cimpuri ce trebuie selectateLista de tabele-lista de tabele de unde datele trebuie sa fie selectateCONDITIE-defineste un filtru pu interogare folosind unele clause ca WHEREEX ModelPret FROM pc_uri WHERE Cd=rsquo40xrsquo ORDER BY Pret41Interogări cu funcţii de agregare icircn SQL2 Exemple Fde agreg-prelucreaza multimi de inregistrari(linii) ale tabelului si returneaza un anumit rezultatMajoritatea acestor functiide obiceiactioneaza asupra tuturor liniilor tabeluluiEle accepat parametriiAll-face ca functia sa considere toate inregistrarile inclusiv cele duplicateDISTINCT-face ca funct Sa considere numai inregistrarile ce nu poseda o valoare duplicataAVG-returneaza media aritmetica a lui xCOUNT-returneaza nr de linii a interogariiMAXMIN-returneaza valoarea maxima sau minima a exprMAX sau MIN ([DISTINCT|ALL)] expr)EX SELECT AVG(Viteza) As Viteza_medie MAX(Viteza) As Viteza_maxima MIN(Viteza) As Viteza_minina42Interogări cu agregarea tuplurilor icircn SQL2 Exemple43 Interogări de actualizare (inserare şi ştergere) a datelor icircn SQL2 ExempleLimbajul TRANSACT-SQL propune 3 instructiuni ce corespund celor 3 operatii de actualizare a bazei de dateinserarea(instructiunea INSERT)-pentru inserarea datelorsuprimarea(instructiunea DELETE)-pu stergerea datelor si modificarea(instructiunea UPDATE)-pu modificarea datelorToate optiunile se asupra tabelelor (fizice sau virtuale) si actualizearea se petrece la nivel de linie de tabelEXCREATE TABLE clienti(Cod_client INTTara CHAR(2)DEFAULT(sbquoMDrsquo)Nume CHAR(20)) INSERT clienti (Cod_clientTaraNume)VALUES(12340rsquoMDrsquorsquoIon Petrachersquo) INSERT clienti DEFAULT VALUES INSERT clienti VALUES (12560rsquoFRrsquorsquoJack Londonrsquo)44 Interogări de actualizare (modificare) a datelor icircn SQL2 ExempleUPDATE-operatia de modificare a continutului unuia sau a mai multor cimpuri ale tuplurilorSintaxa instructiunii UPDATE lttabelgt SETltcoloanagt=ltvaloare nouagt WHERE ltconditiegt In caz cind nici o conditie nu e impusa toate cimpurile tuturor inregistrarilor vor fi alterate de valorile noiEX UPDATE functionari SET Sector=rsquoAdministratiersquo WHERE Sector=rsquoFinantersquo SELECT FROM functionari ORDER BY Sector45 Interogări cu uniuni icircn SQL2 ExempleOperatia UNION-permite fuzionarea a doua selectii pentru a obtine o multime de tupluri egala cu uniunea acestor doua selectiiEX SELECT produseModel Pret FROM produsepc_uri WHERE produseModel=pc_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produselaptop_uri WHERE produseModel=laptop_uriModel AND Producator=rsquoBrsquo UNION SELECT produseModelPret FROM produseimprimante

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 10: Baze de Date

WHERE produseModel=imprimanteModel AND Producator=rsquoBrsquo46Interogări cu intersecţii icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPT Pentru a gasi valori ce coincid in doua sau mai multe tabele se poate utiliza instructiunea INTERSECTEX SELECT Model FROM produse INTERSECT SELECT Model FROM pc_uriDaca INTERSECT este substituit cu EXCEPT se obtine un rezultatintr-un felinvers celui precedentadica se vor afisa modelele de produse din primul tabel care nu sunt in al doilea tabel

47Interogări cu diferenţe icircn SQL2 ExempleInterogarile cu operatiile uniuneintersectia si diferenta sunt foarte aproape de interogarile scrise in algebra relationalaSe formuleaza doua interogari care construiesc relatii cu scheme compatibile adica cu acelasi nr de atribute si de acelasi tip si aceste cereri sunt legate cu cuvintele cheie UNIONINTERSECT sau EXCEPTEX SELECT Model FROM produse EXCEPT SELECT Model FROM pc_uri48Interogări cu joncţiuni icircn SQL2 ExempleDeseoripu a obtine un rezultat complet este necesara selectarea datelor din doua sau mai multe tabeleTabelele din BD sunt legate intre ele prin cheiEste importantindeosebirolul cheii primare care face ca coloanele ce o constituie sa posede o valoare unica pu fiece rindDe exe necesar sa se afiseze producatorul si viteza laptopurilorAtributul viteza se afla in tabelul laptop_uriInformatia referitoare la producatori se afla in tabelul produserezultatul este ordonat dupa cimpul ProducatorEX SELECT ProducatorViteza FROM produselaptop_uri WHERE produseModel=laptop_uriModel ORDER BY ProducatorCU Jonctiune internaEX SELECT ProducatorViteza FROM produse INNER JOIN laptop_uri ON produseModel=laptop_uriModel ORDER BY Producator49Interogări imbricate cu ALL icircn SQL2 ExempleSubinterogare este o cerere care restituie un singur atribut Interogarea utilizată in comparaŃie se defineste in interiorul predicatului din clauza where si se numeste interogare imbricatăAll - face ca functia sa considere toate inregistrarile inclusive cele duplicateCuvantul cheie all specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu toate valorile returnate de interogareSă se găsească departamentele in care nu lucrează nici un angajat cu numele Ionescuselect Deptfrom Departamentwhere Dept ltgt all (select Deptfrom Angajatiwhere Nume = rsquoIonescursquo)Această interogare poate fi exprimată cu ajutorul operatorului diferenŃăselect Deptfrom Departamentexceptselect Deptfrom Angajatiwhere Nume = rsquoIonescursquo 50 Interogări imbricate cu ANY icircn SQL2 Exemple Cuvantul cheie any specifică faptul că linia este validă dacă valoarea atributului se află inrelatie cu cel putin o valoare returnată de interogarea imbricatăSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Exemplu Să se găsească angajaŃii ce lucrează intr-un departament din Iasiselect Nume Prenumefrom Angajati

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 11: Baze de Date

where Dept = any (select Deptfrom Departamentwhere Oras = rsquoIasirsquo)ObservaŃie Această interogare poate fi rezolvată prin realizarea unei joncŃiuni intre celedouă tabele 51 Interogări imbricate cu EXISTS icircn SQL2 Exemple Acest operator acceptă ca parametru o interogare imbricată sireturnează valoarea adevărat doar dacă interogarea nu produce un rezultat vidSă se găsească persoanele care au acelasi nume si prenume dar coduri diferiteselect from Persoana Pwhere exists (select from Persoana P1where P1Nume = PNume andP1Prenume = PPrenume andP1Cod ltgt PCod ) 52 Interogări imbricate cu IN icircn SQL2 ExempleSQL pune la dispozitie doi operatori pentru a reprezenta apartenenta la o multime sinegatia sa in si not in Acesti operatori sunt echivalenti cu = any respectiv ltgt allselect Deptfrom Angajatiwhere Salariu = any sau in (select max(Salariu)from Angajati) 53 Interogări imbricate cu bdquo=rdquo icircn SQL2 ExempleSe consideră tabelele ANGAJATI si DEPARTAMENT prezentate in figura 51Să se găsească departamentele in care lucrează angajatii ce castigă cel mai mare salariuselect Deptfrom Angajatiwhere Salariu = any (select max(Salariu)from Angajati)sauselect Deptfrom Angajatiwhere Salariu gt= all (select Salariufrom Angajati)Observatii10487081048708Desi cele două interogări sunt echivalente este indicată folosirea functiiloragregat deoarece sunt mai concludente si se execută mai eficient10487081048708In cazul primei interogări nu există nici o diferenŃa dacă in loc de operatorul anyse foloseste operatorul all (deoarece interogarea internă are ca rezultat o singurălinie) 54 Definirea utilizatorilor şi accesului la BD icircn SQL2 ExempleIn functie de modul de exploatare a bazei de date utilizatorii se pot impărti inadministratorul bazei de date (DBA) ndash persoana responsabilă de proiectarea controlul siadministrarea bazei de dateprogramatorii de aplicatii ndash definesc si creează programele ce accesează BDutilizatorii obisnuiti ndash cei care utilizează efectiv BD- utilizatori finali ndash utilizează tranzactii (spre exemplu programe ce realizeazăactivităŃi frecvente si predefinite- utilizatori ocazionali ndash capabili să utilizeze limbaje interactive pentru a accesaBD formuland interogări (sau actualizări) de diferite tipuriPentru a putea lucra cu baze de date trebuie sa avem instalat un server de baze de dateTrebuie sa realizam conexiunea sh sa accesam in sfirsit datele 55Definirea permiselor asupra relaţiilor icircn SQL2 ExempleSGBD-urile permit datelor să fie considerate drept resurse comune ale organizatieidisponibile tuturor membrilor autorizati10487081048708BD furnizează un model standardizat si precis al acelei părti a lumii reale careprezintă interes pentru organizatie model folosit in aplicaŃiile existente si care cu

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 12: Baze de Date

extensiile necesare poate fi folosit in aplicatii viitoare10487081048708SGBD-urile oferă posibilitatea unui control centralizat al datelor10487081048708Partajarea bazelor de date permite reducerea redundantei si inconsistentei datelor10487081048708Independenta datelor caracteristica fundamentală a SGBD-urilor favorizeazădezvoltarea de aplicatii mai flexibile si mai usor de modificat 55 Definirea permiselor asupra relaţiilor icircn SQL2 ExempleIdee nam ce o avut in vedere pp )56 Definirea sinonimilor icircn SQL2 ExempleSinonimele pot fi utilizate in interogari sau procedure stocate in loc de numele originale ale obiectelor din 23 sau 4 parti De exemplu este nevoie de executat o interogare catre un obiect de stocat pe alt serverAtunci pt a accesa acest obiect e necesar sa se scrie numele lui implicitNume_serverNume_baza_de_dateNume_schemaNume_ObiectUtilizind un sinonim creat in schema curentaobiectul poate fi accesat doar specificind sinonimul respectivUn sinonim apartine unei scheme ca si alte obiecte ale schemeiNumele unui sinonim trebuie sa fie unicUn sinonim poate fi creat pt urmat obiecte din BDtabelele definite de utilizator(inclusive tabelele temporare atit locale cit sh globale)viziuniprocedure stocatefunctiiUn sinonim nu poate fi obiect de baza pt alt sinonimUn sinonim nu poate referi o functie de agregare definite de utilizatorDoar numele unui sinonim executa legatura intre acesta si obiectul de bazaExistenta si tipul de verificarea drepturilor de acces catre obiectul de baza sunt aminate pina la rulareprin urmare acelasi nume ca si obiectul de baza originalDe exemplu se considera un sinonim cumparaturi care face referire la dbovinzari in BD calculatoareDaca tabelul dbovinzari este sters si inlocuit cu o viziune numita dbovinzariatunci cumparaturi acum se refera la viziunea dbovinzariUrmatorul exemplu creaza un sinonim notebook pt obiectul d ebazalaptop_ri din vaza de calculatoare apoi interogheaza BDutilizind sinonimul creatUse calculatoareGoCreate Synonym notebook for calculatoaredbolaptop_uriGoSelect from notebookGo 57 Blocarea relaţiilor şi gestiunea tranzacţiilor icircn SQL2Sistemul blocheaza icircn mod automat o linie icircn numele unei tranzactii pentru a icircmpiedica alte tranzactii sa blocheze aceeasi linie Aceasta blocare icircmpiedica manipularea simultana a unei Unii de catre doua tranzactii distincte prevenindu-se astfel interferenta distructiva a instructiunilor DDL si DML contradictorii De exemplu Oracfe icircmpiedica distrugerea unui tabel daca exista tranzactii nefinalizate icircn care este implicat tabelul respectiv Aceste blocari ale datelor sunt anulate automat atunci cacircnd tranzactia este finalizata Blocarea implicita a datelor decurge automat pentru toate instructiunile SQL astfel icircncacirct nu este necesar ca utilizatorii bazei de date sa blocheze liniile icircn mod explicit icircn mod prestabilit Oracle blocheaza resursele la nivelul cel mai scazut posibilTranzactiile sunt grupuri logice de instructiuni SQL Fiecare tranzactie se icircncheie fie cu o finalizare fie cu o derulare icircnapoi Finalizarile duc la salvarea permanenta a modificarilor bazei de date efectuate de catre tranzactie Derularile icircnapoi anuleaza toate modificarile bazei de date efectuate de catre tranzactieGestionarea tranzactiilor asigura concurenta si coerenta datelor pentru toti utilizatorii bazei de date icircn lipsa gestiunii tranzactiilor calitatea si precizia datelor ar fi compromise iar BD ar deveni aproape de neutilizat58 Definirea viziunilor icircn SQL2 ExempleO viziune (VIEW) este un table virtual al carui continut este definit de o interogareO V poate fi create din unul sau mai multe tabele ale BDViziunile sunt folosite pentru a concentrasimplifica si personalize fiecare patrundere a utilizatorului in BDEle pot fi folosite si ca mecanisme de securitate permitind utilizatorului sa acceseze date prin intermediului viziunilorfara a acorda utilizatorilor permisiuni sa acceseze tabelele de baza direztViziunile pot fi deasemenea folosite atunci cind sunt copiate date din SQL server si pentru partajarea datelor2 tipuri de creare a viziunilorFolosind instructiunea Create view a limbajului transact_sqlFolosind VEW Designer al componentei SQ server management studioPrincipii de creare a viziunilorO V poate fi create numai in baza de data in uzTotusi tabelele si viziunile ce se refera la o viziune noua pot exista in alte baze de date sau cjiar pe alte servere

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta

Page 13: Baze de Date

Pot fi construite viziuni asupra altor viziuni sau procedure ce se refera la viziuniAsupra V nu pot fi construiti indecsi sau definiti indecsi full-textO V fie exemplu2 in BD calculatoare poate fi definite folosind limb SQL de exempluUse calculatoareGoIf object_ID(lsquoexemplul2rsquorsquoVrsquo) is not null drop view exemplul2GoCreate View exemplul2 As select Model from produse 59Definirea indecşilor icircn SQL2 ExempleUn index este un obiect al schemei bazei de date care facilitează accesarea rapidă şi univocă a datelor Icircn anumite condiţii viteza de execuţie a cererilor După ce indexul a fost creat utilizatorului nu i se mai cere nici o operaţie directă asupra lui el va fi folosit şi icircntreţinut automat de către SGBDSintaxa pentru crearea unui index este următoareaCREATE INDEX nume_index ON nume_tabela (nume_coloana1 [ nume coloana2 hellip])

Exemplu crearea unui index după coloana număr factură icircn tabela facturiCREATE INDEX nr_factura_index ON facturi (nrfact)

Pentru tabele mici folosirea indecşilor nu aduce icircmbunătăţiri de performanţă Se folosesc atunci cacircnd coloanele după care se creează indecşii conţin o diversitate mare de informaţii sau multe valori NULL Indecşii optimizează interogările atunci cacircnd acestea returnează o cantitate mică de date Indecşii cresc viteza de regăsire a datelor dar icircncetinesc actualizarea datelor datorită faptului că sistemul trebuie să actualizeze şi fişierele index Icircn general este foarte util să se creeze indecşi după cacircmpuri care se folosesc icircn operaţii de join

Ştergerea unui index se face cu comanda DROP INDEXDROP INDEX nume_index [ON nume_tabela] 60Definirea constracircngerilor şi aserţiunilor icircn SQL2 ExemplePt formularea unor restrictii mai generale decit cele corespunzind tabelelor si coloanelor SQL da posibilitatea folosirii unei intructiuni specifice cu sintaxaCreate assertion ltconstraint_namegt check(search_condition)Spre deosebire de restrictiile de tabele si de coloane asertiunile nu sint associate cu nici o definitie de tabela particularaAsertiunile sunt folosite de obicei pt a formula restrictii asupra mai multor tabeleRemarcam ca pt a satisface restrictiaconditia din clauza check trebuie sa furmizeze o valoare fie truefie unknownVederile si Aseriunile se folosesc intransportul schemelor conceputale din modelul EEA si din UML in modelul relationalExemplu de adaugare de constringereAlter Table task Constraint Foreign Key (newtaskind)references newtask(newtaskid)O constringere se poate adauga si la crearea tabeluluiConstringeri de integritateCheile primarevalori implicite pt cimpuriDaca integritatea bazei de date nu este asigurataadica nu sint respectate constringerile de integritatea se spune ca BD este incosistenta