Baze de Date Curs

133
BAZE DE DATE CURS ş.l. dr. ing. ec. Mirela Danubianu [email protected] C209

description

BAZE DE DATE

Transcript of Baze de Date Curs

Page 1: Baze de Date Curs

BAZE DE DATECURS

ş.l. dr. ing. ec. Mirela Danubianu

[email protected]

C209

Admin
Text Box
Page 2: Baze de Date Curs

Scopul cursului

� Prezentarea conceptelor fundamentalede baze de date

� Utilizarea SGBD-ului Visual FoxPro 9.0

Page 3: Baze de Date Curs

Necesitatea studierii bazelor de date...

� Trecerea de la stadiul efectuării de calcule către nevoia de informaţii

(ex. sisteme suport pentru decizii);

� Creşterea volumului şi a diversităţii datelor de prelucrat;

� Limitele posibilităţilor de analiză ale factorului uman;

� Evoluţia tehnologiilor informatice;

� Extinderea domeniilor de utilizare a aplicaţiilor de baze de date

� Extinderea cercetărilor fundamentate pe domeniul bazelor de date

către depozite de date (Data Warehousing), analiza datelor (OLAP) ,

explorarea datelor (Data Mining) şi descoperirea cunoştinţelor din

bazele de date (KDD)

Page 4: Baze de Date Curs

Scurt istoric al organizării şi prelucrării datelor

� Sisteme tradiţionale bazate pe fişiere (1950-1960)� SGBD bazate pe modelul de date ierarhic sau reţea (1970)� SGBD relaţionale

� Apariţia modelului relaţional (1970)� Dezvoltarea SGBD relaţionale (1970)� Apariţia SGBDR comerciale (1980)� Maturizarea tehnolohgiei relationale pentru SGBD (1990)

� Sisteme de baze de date obiect-relaţionale� Sisteme de baze de date deductive şi sisteme de baze de date orientate

obiect.� Sisteme de baze de date orientate spre aplicaţii

� Baze de date spaţiale, temporale, multimedia, Web...� Sisteme de depozitare a datelor (Data warehousing), sisteme de analiză a

datelor şi sisteme de explorare a datelor (data mining)

Page 5: Baze de Date Curs

Evolutia activităţii de organizare şi prelucrare a datelor

� Colecţie de programe aplicaţie, care efectuează servicii pentru utilizatoriifinali, cum ar fi producerea de rapoarte. Fiecare program defineşte şi gestionează propriile sale date.

� Fişierul = principalul tip de organizare a datelor.

- fiecare dată este descrisă independent în toate fişierele în care apare

- între fişiere nu există o relaţie definită explicit

Sisteme tradiţionale bazate pe fişiere

Data1

Fişier 1 Prelucrare 1 Raport 1Data2

Data 3

Data1

Fişier 2 Prelucrare2 Raport 1Data 3

Data 4 Raport 1

Raport 1

Raport n

Page 6: Baze de Date Curs

Ce probleme apar la sistemele bazate pe fişiere?

� Caracteristicile sistemelor de prelucrare bazate pe fişiere� Răspunsul la o nouă problemă implică scrierea unei noi aplicaţii care

creează fişierele de date corespunzătoare � Pentru o organizaţie fişierele de date au formate diferite iar aplicaţiile pot

fi scrise în limbaje diferite�� ProblemProblemee

� Redundanţă şi inconsistenţă a datelor (cum pot fi actualizate datele din toate fişierele?)

� Dificultăţi în accesarea datelor (necesitatea unor noi programe de aplicaţie?)

� Izolarea datelor (diferite formate, diferite fişiere)� Imposibilitatea controlului concurenţei (utilizatori multipli)� Probleme de securitate� Probleme de integritate a datelor (satisfacerea constrângerilor?)

Page 7: Baze de Date Curs

Evolutia activitatii de organizare si prelucrare a datelor

� Cauze ale limitării tratarii anterioare:

� Definitia datelor este încorporata înprogramele aplicatie

� Nu exista controlul accesului simanipularii datelor

� Baza de date –

� Colectie partajata de date, între care existarelatii logice si o descriere a acestor date, proiectata pentru a satisface necesitatileinformationale ale unei organizatii.

� Colectie autodescrisa de înregistrariintegrate.

� Acumulări de date aflate în interdependenţă, cu o anumită organizare, în vederea obţinerii operative a unor informaţii utile despre un anumit subiect.

� Ansamblu de date interconectate, împreună cu descrierea lor, care răspunde calităţilor de centralizare, coordonare, integrare şi difuzie a informaţiilor şi care asigură satisfacerea tuturor necesităţilor de prelucrare ale utilizatorilor din sistem.

Tratarea prin baze de date

Fisier 1

Fisier 2

Fisier n

Catalog de

date

Aplic. 1 Aplic n

� Concluzie: este un depozit de date unic, de volum mare care este definito singura data si este utilizat simultande mai multe departamente şi

utilizatori.

Utiliz1 Utiliz n

Page 8: Baze de Date Curs

M. Danubianu - Baze de date 8

Tratarea prin baze de date

� Schema bazei de date consta in descrierea generala a bazei de date.� Este specificată în procesul de proiectare şi se modifică foarte rar

� Instanta bazei de date este data de setul de date operationale din bazala orice moment dat� se modifica frecvent

� Natura autodescriptiva a datelor duce la independenta program-date

� analiza necesitatilor informationale ale unei organizatii --> identificareaentitatilor, a atributelor si a legaturilor dintre ele

�� ExempluExemplu

� baza de date Universitate

� entitati : Studenti, Profesori, Cursuri, Sectii,…� atribute (proprietati): Nr. Matricol, Nume, Prenume, Data de nastere, adresa,

etc.� legături: Studentii asistă la cursuri

� Profesorii susţin cursuri� Cursurile se bazează pe cunoştinţele altor cursuri, etc

Admin
Text Box
Page 9: Baze de Date Curs

� separarea definiţiei datelor de programele de aplicaţie presupune existenţa unei definiţii interne si a unei definiţii externe a datelor => abstractizare a datelor

� avantaj: permite modificarea definiţiei interne a unui obiect fără a afecta utilizatorii acestuia dacă definiţia externă rămâne aceeaşi

� modelul extern - descrierile care se referă strict la datele unei aplicaţii� avantaje:

� reducerea redundanţei� evitarea inconsistenţei� posibilitatea partajării datelor� încurajarea introducerii standardelor� posibilitatea aplicării restricţiilor de securitate� menţinerea integrităţtii datelor

Tratarea prin baze de date

Page 10: Baze de Date Curs

Aplicaţii de baze de date

� Tranzacţii bancare� Linii aeriene: rezervări, planificări � Universităţi: evidenţa studenţilor, situaţia şcolară…

� Vânzări: evidenţă clienţi, produse, cumpărări� Urmărirea producţiei: producţie, inventar,

comenzi, lanţul de furnizori� Resurse umane: înregistrarea angajaţilor,

salarizare, etc…

Page 11: Baze de Date Curs

Arhitectura bazelor de dateArhitectura ANSI/SPARC cu trei niveluri ()

� 1971 grupul DBTG (Data Base Task

Group) propune o terminologiestandard si o arhitectură pe doua

niveluri: - schema - abordare d.p.d.v. al

sistemului si- subschema - abordare d.p.d.v. al

utilizatorului

� 1975 comitetul ANSI/SPaRC -abordare pe trei niveluri, cu un catalog

de sistem.

� Scop: separarea fiecărei vederi a utilizatorilor bazei de date de modul în care aceasta este reprezentată fizic

� Presupune: necesitatea unei zone independente de implementare care săizoleze programele de consideraţiilede reprezentare de bază

Vedere1 Vedere 2 Vedere n

Schema conceptuală

Schema fizică

Baza de date

Organizarea fizică

a datelor

Nivelul

intern

Nivelul

conceptual

Nivelul

extern

Page 12: Baze de Date Curs

Arhitectura bazelor de dateArhitectura ANSI/SPARC cu trei niveluri

� Nivelul intern - (baza de date fizică) = colecţie de fişiere care conţin datele fizice, la care se adaugă structuri auxiliare menite să asigureaccesul operativ la aceste date (directoare, indecşi, tabele de dispersie…)� probleme tratate:

� alocarea spaţiului de stocare pentru date şi indecşi� descrierile înregistrărilor pentru stocare (cu dimensiunile

articolelor de date)� plasarea înregistrărilor� tehnici de comprimare a datelor şi de codificare a acestora

� concluzie: schimbarea sistemului de operare sau modificări în configuraţia echipamentelor hardware pot atrage modificări ale bazei de date fizice, dar acestea nu vor afecta celelalte nivele

Page 13: Baze de Date Curs

Arhitectura bazelor de dateArhitectura ANSI/SPARC cu trei niveluri

� Nivelul conceptual - abstractizare a unei părţi din lumea reală, şi descrie structura logica a datelor (ce date sunt stocate într-o bază de date şi relaţiile dintre acestea, prin specificarea unor constrângeri)� constrângeri: proprietăţi ale datelor ce nu pot fi exprimate prin

descrieri de structură ( restricţii asupra valorilor pe care le pot luadatele sau restrictii privind legăturile dintre diferite unităţi logice)

� probleme tratate:

� specificarea entităţilor , a atributelor şi a relaţiilor dintre ele� constrângeri asupra datelor� informaţii de securitate şi integritate a datelor

� realizează independenţa fizică a datelor

� concluzie: integrează viziunile tuturor utilizatorilor asupra bazeide date

Page 14: Baze de Date Curs

Arhitectura bazelor de dateArhitectura ANSI/SPARC cu trei niveluri

� Nivelul extern - vederea utilizatorului asupra bazei de date� descrie acea parte a bazei de date care este relevantă pentru fiecare

utilizator� cuprinde: unitati logice din modelul conceptual şi unitati logice care

nu exista in modelul conceptual si care nu au corespondent direct in baza de date fizica - unităţi logice virtuale

� fiecărui utilizator îi corespunde un model extern propriu, individualizat in raport cu cerinţele specifice

� termenul folosit pentru modelul extern este VEDERE� avantaje:

� asigurarea securitatii bazei de date prin limitarea accesului la date a anumitor categorii de utilizatori, sau prin acordarea de drepturide acces diferite pentru un utilizator în cadrul mai multor vederi

� viziune individualizată şi simplificată asupra bazei de date� realizează independenţa logică a datelor

Page 15: Baze de Date Curs

adresaVârstaPrenumeNumenrmatr

Vedere 1 Vedere 2

grupaNumenrmatr

grupaadresaDDNPrenumeNumenrmatrNivel

Conceptual

struct STUDENT {int nrmatr;int grupa;char nume [15];char prenume [15];struct date DDN;char adresa [20];struct STUDENT *next; /* pointer către următoarea înregistrare */

}; index nrmatr; index grupa; /* defineşte indecşii for staff */

Nivel

Intern

Page 16: Baze de Date Curs

Independenţa datelor

� ∃ unei delimitări nete între reprezentarea fizică a datelor şi imaginea pe care o are utilizatorul despre aceste date

� Independenţa datelor este de două feluri:

� fizică

� logică

� Independenţa fizică dă măsura imunităţii aplicaţiilor faţă de modificările în structura fizică de memorare a datelor

� presupune că aplicaţiile nu conţin nici o referire explicită la tipulfişierelor în care sunt memorate datele, la tipul dispozitivului de memorare sau la strategia de acces la date

Page 17: Baze de Date Curs

Independenţa datelor

� Independenţa logică a datelor se referă la imunitatea modelului propriu al fiecărui utilizator faţă de modificările în structura logică globală a bazei de date.� Se referă în special la problema adăugării de noi unităţi logice (câmpuri)

la structura bazei de date şi/sau la modificarea acestora şi a relaţiilor dintreele.

� Permite:� dezvoltarea bazei de date fără a afecta utilizatorii care nu au nevoie de

noile date� reorganizarea bazei de date - regruparea câmpurilor în înregistrări, şi

definirea de noi câmpuri pe baza celor existente� problema delicată - eliminarea unei entităţi logice din baza de date -

afectează utilizatorii care fac referire la entitatea eliminată� d.p.d.v. al utilizatorului, problema independenţei logice se manifestă legat de

operaţiile pe care sistemul îi permite să le efectueze asupra datelor din modelulpropriu astfel incât să nu afecteze modelul altor utilizatori care folosesc parţialsau total aceleaşi date.

Page 18: Baze de Date Curs

Avantajele utilizării bazelor de date

� Memorarea convenabilă şi eficientă a datelor şi posibilitatea generării de informaţii din volume mari de date

� Beneficii majore:� Eficienţă şi scalabilitate în ceea ce priveşte accesul la date şi regăsirea

acestora

� Independenţa datelor

� Redundanţă controlată

� Posibilitatea de a asigura integritatea şi securitatea datelor

� Facilităţi de acces concurent asupra datelor şi posibilitatea recuperării acestora în cazul unui defect

� Încurajarea introducerii standardelor

� Administrarea uniformă a datelor

� Analiza datelor ( tehnici OLAP şi Data Mining)

Page 19: Baze de Date Curs

Sisteme de gestiune a bazelor de date

Page 20: Baze de Date Curs

Bazele de date…

� … sunt colecţii de date, cu organizare specifică,� … din punct de vedere logic, sunt considerate depozite centralizate, la

care au acces mai mulţi utilizatori,� … permit oparaţii asupra unui volum însemnat de date,� … necesiă spaţii şi medii corespunzătoare pentru stocare,

� � Solicită sisteme de gestiune care să corespundă acestor caracteristici

Page 21: Baze de Date Curs

SISTEME DE GESTIUNE A BAZELOR DE DATE (SGBD)

� Un SGBD reprezintă un sistem de programe care permit utilizatoruluidefinirea, crearea, întreţinerea bazei de date si accesul controlat la aceasta.

� Oferă:� facilităţi de descriere a datelor - prin intermediul limbajului de descriere

a datelor(DDL) � specificarea tipurilor de date si a structurilor� specificarea constrângerilor asupra datelor

� facilităţi de manipulare a datelor - prin limbajul de manipulare a datelor(DML)

� inserare de date� ştergerea de date� extragerea şi interogarea datelor

� ∃ două tipuri de limbaje de manipulare a datelor:� limbaje procedurale - tratează bazele de date înregistrare cu

înregistrare si specifică cum se va obtine rezultatul dorit

� limbaje neprocedurale - operează asupra unor seturi de înregistrări sidescriu numai ce date vor fi obtinute (SQL)

Page 22: Baze de Date Curs

SISTEME DE GESTIUNE A BAZELOR DE DATE (SGBD)

� ... mai oferă:� accesul controlat la baza de date - presupune existenţa:

� unui sistem de securitate - previne accesarea bazei de date de către utilizatori neautorizaţi

� unui sistem de integritate - menţine concordanţa datelor stocate� unui sistem de control al concurenţei - permite accesul partajat la

baza de date� unui sistem de control al refacerii - restaurează baza de date într-o

stare precedentă concordantă, în cazul unei defecţiuni hard sau soft� unui catalog accesibil utilizatorilor - care conţine descrierea

datelor din bază� un mecanism de vizualizare - permite fiecărui utilizator să-şi

definească propriul mod de vizualizare a bazei de date;� o colecţie de utilitare: editoare de rapoarte, generatoare de

aplicaţii, programe asistent, module de proiectare, posibilităţi de dezvoltare a unor aplicaţtii de tip CASE, etc.

Page 23: Baze de Date Curs

DDL şi DML

� Limbajul de definire a datelor (Data Definition Language - DDL)� Specifică schemaschema unei baze de date ca un set de definiţii� Specifică structurile de memorare structurile de memorare şşi metodele de accesi metodele de acces� Instrucţiunile DDL sunt compilate, rezultând un set de tabele

despre care sunt memorate date (metadate) într-un fişier special : dicdicţţionarul de dateionarul de date

� Limbajul de manipulare a datelor (Data Manipulation Language -DML)� Regăsirea informaţiilor din bazele de date ( QL Query language)� Inserarea/ştergerea/actualizarea informaţiilor in bazele de date

� Un limbaj de interogare este o parte a DML care implică numai regăsirea de informaţii.

� Limbajul de definire a vederilor ( VDL View Definition Language )

Page 24: Baze de Date Curs

Mediul SGBD

Hardware SoftwareProceduri PersoaneDate

Administratorul de baze de date

Utilizatorii bazei de date

Proiectanţii bazei de date

Programatorii de aplicaţii

Utilizatorii finali

Specialişti Nespecialişti

Pr. b.d. logice Pr. b.d. fizice

Page 25: Baze de Date Curs

SGBD Funcţiile unui SGBD

� 1982 -Codd a enumerat 8 servicii care trebuie realizate de către un SGBD complet:

1. stocarea, regăsirea şi reactualizarea datelor2. un catalog accesibil utilizatorului care să conţină descrierile

articolelor de date (caracteristică a arhitecturii ANSI/SPARC)� conţine meta-date (date despre date)

3. asigurarea tranzacţiilor� tranzacţia constă într-o serie de acţiuni realizate de un singur utilizator

sau un program aplicaţie prin care se accesează sau se schimbă conţinutulbazei de date.

� SGBD furnizează un mecanism care garantează ca sunt efectuate toatereactualizările corespunzătoare unei anumite tranzacţii sau că nu se efectuează nici una

4. servicii de control concurente� mecanism care garantează că baza de date este corect reactualizată

atunci când mai mulţi utilizatori efectuează simultan astfel de operaţii

Page 26: Baze de Date Curs

SGBD Funcţiile unui SGBD

5. servicii de reconstituire� mecanism de reconstituire a unei baze de date în cazul în care

aceasta este deteriorată într-un fel oarecare6. servicii de autorizare

� se garantează accesul la date numai pentru utilizatorii autorizaţi => securitatea datelor

7. suport pentru comunicarea datelor8. servicii de integritate

� mijloace care asigură că atât datele din baza de date cât şi modificările acestora respectă anumite reguli

� servicii suplimentare:� servicii pentru promovarea independenţei de date� servicii utilitare

Page 27: Baze de Date Curs

Avantajele si dezavantajele utilizarii SGBD-urilor

� Avantaje� controlul redundanţei datelor� asigurarea coerenţei datelor� mai multe informaţii obţinute din

aceeaşi cantitate de date� posibilitatea partajării datelor� integritate crescută a datelor� securitate crescută� concurenţă imbunătăţită� posibilitatea aplicării standardelor� economie de scală� productivitate crescută� servicii de salvare de siguranţă şi

refacere

� Dezavantaje:� complexitate� dimensiune� costul sistemelor SGBD� costuri adiţionale pentru elemente

hardware� costul conversiei� performanţa� impactul crescut al unei

defecţiuni

Page 28: Baze de Date Curs

M. Danubianu - Baze de date 1

BAZE DE DATECURS 2

Modelul relaţional

Page 29: Baze de Date Curs

M. Danubianu - Baze de date 2

De ce se studiază modelul relaţional

� Cel mai utilizat model de date� IBM (DB2), Microsoft (ACESS, FoxPro şi SQLServer),

Oracle (9i, 10g), Sybase, MySQL, etc.� Sisteme superioare celor implementate pe baza modelelor mai

vechi� IMS de la IBM (modelul ierarhic) şi CODASYL (modelul

reţea)� Competitori actuali: modelul orientat pe obiecte şi modelul

obiect relaţional� ObjectStore, Versant, Ontos� Informix Universal Server, UniSQL, O2

Page 30: Baze de Date Curs

M. Danubianu - Baze de date 3

Modelul de date relaţional

� 1970 F.E.Codd - “ Un model relational de date pentru bănci de date partajate de dimensiuni mari”

� Obiective: � să permită un grad înalt de independenţă a datelor� să furnizeze baze solide pentru tratarea coerenţei şi a

problemelor de redundanţă a datelor --> este introdus conceptulde relaţii normalizate = relaţii care nu conţin grupuri ce se repetă

� să permită expansiunea limbajelor de manipulare a datelor orientate spre seturi

� Datele se prezintă sub forma de tabele ( fie că se referă la entităţi, fie că se referă la legăturile dintre acestea)

� Caracteristici : � este orientat spre multimi� a permis introducerea unor limbaje neprocedurale de manipulare a datelor� nu este orientat spre sistemul de calcul.

Page 31: Baze de Date Curs

M. Danubianu - Baze de date 4

� Orice tabel este o mulţime ale cărei elemente sunt linii sau coloane� numărul liniilor din tabel la un moment dat = cardinalitate� numarul de coloane din tabel = n = gradul (aritatea )

Domeniul reprezintă ansamblul de valori admisibile pentru o componentă a unuitabel

� domeniul numelor de oraşe, domeniul numelor de persoane, domeniulnumerelor întregi, etc

Două domenii sunt compatibile dacă ele sunt comparabile din punct de vederesemantic (dacă mulţimile de valori care le definesc nu sunt disjuncte)

� noţiunea de domeniu interpretat restricţionează problema compatibilităţii domeniilor chiar în cazul în care, conform definiţiei, două domenii ar ficompatibile

proprietăţi:� într-un tabel nu există două linii identice (stă la baza definirii

conceptului de cheie a unui tabel)� ordinea liniilor intr-un tabel este arbitrară

Page 32: Baze de Date Curs

M. Danubianu - Baze de date 5

Terminologie

Nume Preţ Categorie Editura

Visual FoxPro 1999 tehnic TEORA

Office 2000 299 tehnic Microsoft

Informatica 149 ştiinţific ALL

Contabilitate 203 economic Polirom

Tupluri sau rânduri sau înregistrări

Atribute sau câmpuriTabel sau relaţie Produse:

Page 33: Baze de Date Curs

M. Danubianu - Baze de date 6

Structuri de reprezentare

� Baza de date relaţională = un set de tabele normalizate.

Page 34: Baze de Date Curs

M. Danubianu - Baze de date 7

Structuri de reprezentare

� ∃ o singură formă de structurare a datelor – relatiile - se utilizează atât pentrureprezentarea tipurilor de entităti cât si a legăturilor dintre acestea.

� Descrierea unei baze de date relaţionale - printr-o schemă relatională, care constă din una sau mai multe scheme de relaţie

� Schema de relatie este formată din denumirea unei relaţii urmată de un set de atribute:

� Facultate (Codf, Nume, Adresa)� Personal (Codpers, Nume, Funcţie,Salariu, Codf)� Profesori (Codp, Nume, Funcţie, Disciplină, Codf)� Student (Matr, Nume, Incadrare, Sit_scolară, An, Sex)� Nota (Matr, Codp, Nota)

� reprezentarea legăturilor dintre tipurile de entităti foloseşte doua tehnici:� propagarea cheilor dintr-o schemă de relatie in alta - pentru reprezentarea

legăturilor de tip 1: 1 sau 1: N� crearea unei scheme de relatie separate - de jonctiune- pentru reprezentarea

oricărui tip de legătură, inclusiv a celor de tip N:M� instanţa unei baze de date = totalitatea datelor operaţionale conţinute în baza

de date la orice moment de timp. (un tabel conţinând valorile curente pentru atribute)

Page 35: Baze de Date Curs

M. Danubianu - Baze de date 8

Exemplu de instanţă a relaţiei STUDENT

sid nume login specializare adresa

53666 Axinte ax@cs cs S V

53688 Drăgan dr@ee ee NT

53650 Croitoru cr@mat mat BT

� Cardinalitate = 3, grad = 5 , toate rândurile sunt distincte

Page 36: Baze de Date Curs

M. Danubianu - Baze de date 9

Chei relaţionale

Supercheie - un atribut sau un set de atribute care identifică în mod unic un tuplu al unei relaţii.� Poate conţine atribute adiţionale care nu sunt strict necesare identificării

unui tuplu� Cheie candidat (K) a unei relatii R - o supercheie pentru care nici o submulţime

nu este supercheie in cadrul relaţiei respective.Proprietăţile cheii candidat K: unicitate - valorile cheii identifica in mod unicorice tuplu al unei relatii

� ireductibilitateTipuri de chei candidat:

� simple� compuse - atributele care o compun sunt atribute prime ( celelalte

atribute sunt neprime)� Cheie primară este cheia candidat care este selectată pentru a identifica în mod

unic tuplurile unei relaţii.� Restricţii:

� nu sunt admise valori nedefinite pentru nici un atribut al cheii primare� nici o valoare a unui atribut dintr-o cheie primara nu poate fi modificat

printr-o operatie de actualizare

Page 37: Baze de Date Curs

M. Danubianu - Baze de date 10

Chei alternative sunt cheile candidat care nu sunt selectate drept cheiprimare.

Cheia străină este un atribut sau o multime de atribute din cadrul uneirelaţii provenite prin propagarea unei chei candidat a unei alte relaţii.� Valoarea unei chei străine = o referinţă la tuplul a cărei valoare

este identică cu cea a cheii străine.� Relaţia care conţine cheia străină - relaţie de referinţă

� relaţia care conţine cheia care s-a propagat ca şi cheie straină -relaţie referită

Page 38: Baze de Date Curs

M. Danubianu - Baze de date 11

Integritatea relaţională

� Integritatea relaţională ⇒ set de reguli cu rolul de a garanta că datele suntcorecte.

1. Constrângeri de domeniu

2. Integritatea entităţilor

3. Integritatea referenţială

4. Constrângeri de întreprindere

�Constrângerile de integritate se bazează pe semantica realităţii descrise prin relaţiile bazei de date.

�Se poate verifica dacă o instanţă a bazei de date violează o constrângere de integritate, dar nu se poate NICIODATĂ afirma că o constrângere este adevărată prin verificarea unei instanţe.

�O constrângere de integritate este o stare referitoare la toate toate

instaninstanţţele posibileele posibile ale unei baze de date!

�Integritatea entităţilor (constrângere de cheie primară) şi integritatea referenţială (constrângere de chei străine) sunt cele mai generale constrângeri de integritate.

Page 39: Baze de Date Curs

M. Danubianu - Baze de date 12

Integritatea entitatilor(constrângeri asupra cheii primare)

� Se aplică cheilor primare ale relaţiilor de bază.

� Relaţie de baza = relaţie ce corespunde unei entităţi în schema conceptuală, şi ale cărei tupluri sunt stocate fizic în baza de date

� Într-o relaţie de bază nici un atribut al unei chei primare nu poate fi null.

� Null - valoare a unui atribut care este în mod curent necunoscută sau care nu este aplicabilă unui anumit tuplu.� modalitate de tratare a datelor incomplete sau deosebite� nu trebuie confundat cu o valoare numerică egală cu zero sau cu un şir de

caractere completat cu spatii. � este tratată diferit faţă de alte valori=> pot să apara probleme de

implementare, ca urmare a faptului că trebuie renunţat la logica booleană(specifică calculului predictiv de ordinul întâi) şi trebuie lucrat cu o logică polivalentă ( tri sau cvadrivalenta)

Page 40: Baze de Date Curs

M. Danubianu - Baze de date 13

Integritatea referenţială (constrângeri de cheie străină)

♦ Principiul integrităţii referinţei - enunţat de Codd în 1979 sub următoarea formă:

♦ Dacă A este o cheie primară monoatribut în relaţia R1 şi B este

o componentă a unei chei primare multiatribut în relaţia R2, B fiind

definită pe acelaşi domeniu cu atributul A, atunci mulţimea valorilor

lui B în R2 trebuie să fie inclusă în mulţimea valorilor lui A în R1.

♦ Dacă B este o cheie străină în R2 rezultată prin propagarea unei

chei primare A din R1, atunci orice valoare a lui B din R2 trebuie

să se regăsească printre valorile lui A din R1.

♦ Dacă într-o relaţie există o cheie străină, valoarea acesteia

trebuie ori să coincidă cu valoarea unei chei candidat a unui

tuplu în relaţia sa de bază, ori să fie în întregime null.

Page 41: Baze de Date Curs

M. Danubianu - Baze de date 14

♦ => constrângeri referenţiale -> pot fi reprezentate prin diagramereferenţiale = grafuri ale căror noduri reprezintă relaţii, iar arcelereprezintă constrângeri referenţiale. Sensul arcului este de la relaţia de referinţă către relaţia referită.

♦ pot exista cicluri, numite cicluri referenţiale şi chiar cicluri de lungime unitară, caz în care relaţia referită este una şi aceeaşi cu cea de referinţă. => relaţie autoreferită.

Page 42: Baze de Date Curs

M. Danubianu - Baze de date 15

Exemple: Facultate (Codf, Nume, Adresa)

� Profesori (Codp, Nume, Funcţie, Disciplină, Codf)

� Student (Matr, Nume, Incadrare, Sit_scolară, An, Sex)

� Nota (Matr, Codp, Nota)

♦ FACULTATE � PROFESORI � NOTA � STUDENT

Page 43: Baze de Date Curs

M. Danubianu - Baze de date 16

Integritatea referentială - continuare

♦ Poate fi afectată de operaţiile de adăugare, ştergere şi actualizare.

♦ Relaţii de referinţă♦ Operaţia de adăugare - valorile tutoror atributelor care fac parte dintr-o cheie străină trebuie să se

regăsească printre valorile atributelor pe care le referă în relaţiile referite.♦ Operaţia de ştergere - fără nici un fel de restricţii d.p.d.v. al condiţiilor de integritate referenţială.♦ Operaţia de actualizare = o operaţie de ştergere urmată de una de adăugare..

♦ Relaţiile referite♦ Operaţia de adăugare - fără restricţii♦ Operaţia de ştergere - posibil ca în relaţiile de referinţă să existe tuple care fac referire la tuplul

care se şterge. => una dintre următoarele două opţiuni: ştergerea restricţionată sau ştergerea

cascadată.♦ Ştergerea restricţionată- nu se acceptă ştergerea unui tuplu din relaţia referită dacă acesta

este referit de cel puţin un tuplu din relaţia de referinţă.♦ Ştergerea cascadată - ştergerea unui tuplu din relaţia referită va fi urmaţă de ştergerea tuturor

tuplelor din relaţiile de referinţă care fac referire la tuplul şters. Dacă tuplurile şterse din relaţiade referinţă sunt, la rândul lor referite de alte tuple, atunci ştergerea se propagă, în cascadă, asupra tuplurilor care fac referire la cele din urmă ş.a.m.d.

♦ Operaţia de actualizare Actualizarea unei chei dintr-o relaţie referită se poate face în două moduri:♦ actualizare restricţionată♦ actualizare cascadată -

♦ problema integrităţii - abordată în două variante: declarativ sau procedural.

Page 44: Baze de Date Curs

M. Danubianu - Baze de date 17

Proprietăţile, avantajele şi limitele modeluluirelaţional

� Proprietăţi:� nu exista tupluri identice� ordinea liniilor si a coloanelor este arbitrară� articolele unui domeniu sunt omogene� fiecare atribut defineşte un domeniu şi nu se poate repeta în cadrul

aceleiaşi relaţii� toate valorile unui domeniu sunt considerate atomice

Avantaje

•independenţa datelor•redundanţă minimă•supleţe in comunicarea cu utilizatorul

Limite:necesita volum mare de spaţiu

•nu lucrează cu obiectecomplexe•nu realizează gestiuneadatelor distribuite•nu realizează gestiuneacunoştinţelor•pot să apară fenomene de inconsistenţă

Page 45: Baze de Date Curs

M. Danubianu - Baze de date 18

Concluzii

� Reprezentare tabelară a datelor

� Simplu şi intuitiv

� Cel mai utilizat pentru implementarea SGBD-urilor comerciale

� Constrângerile de integritate pot fi specificate de DBA pe

baza semnificaţiilor aplicaţiilor. SGBD-ul verifică violarea

acestor constrângeri

� A permis dezvoltarea limbajelor de interogare neprocedurale

Page 46: Baze de Date Curs

M. Danubianu - Baze de date 1

BAZE DE DATECURS 3

Limbaje relaţionale

Page 47: Baze de Date Curs

M. Danubianu - Baze de date 2

Limbaje relaţionale formale

Limbajele de interogare: permit manipularea şi regăsirea datelor dintr-obază de date.

Modelul relaţional acceptă limbaje de interogare simple care:– au fundamente formale puternice, bazate pe logică– permit optimizări multiple

Limbaj de interogare ≠ limbaj de programare!– nu sunt limbaje complete - nu permit instrucţiuni de control al fluxului

programului.– nu sunt destinate pentru calcule complexe.– permit accesul uşor şi eficient la mulţimi de date de dimensiuni mari.

Se bazează pe două tipuri de mecanisme:- algebric – noile relaţii se obţin aplicând operatori specializaţi asupra

uneia sau mai multor relaţii din baza de date- logic – filtrele se obţin cu ajutorul unor formule logice pe care

tuplurile rezultatului trebuie să le satisfacă

Page 48: Baze de Date Curs

M. Danubianu - Baze de date 3

La baza limbajelor de interogare “reale” (SQL, QBE…) stau două formalismematematice:

Algebra Relaţională: are caracter operaţional (procedural)� util pentru reprezentarea planurilor de execuţie.

Calcul relaţional: permite descrierea rezultatului aşteptat (Non-operational, neprocedural, declarativ)

� Sunt limbaje formale, neprietenoase

� Înţelegerea algebrei şi a calculului relaţional este cheia

înţelegerii SQL!

Page 49: Baze de Date Curs

M. Danubianu - Baze de date 4

Caracteristici

� Interogările sunt aplicate instanţelor unei relaţii. Intrările şiieşirile unei interogări sunt relaţii.� Interogarea este evaluată utilizând instanţe ale fiecărei

relaţii de intrare şi produce o instanţă a relaţiei de ieşire.

� De regulă numele câmpurilor din relaţiile rezultat sunt “moştenite” din relaţiile originale.

Personal

Cnp Nume Funcţie Salar

056 Lupu Prof 6000000456 Marinescu Assist 4000000872 Ilea Conf 5500000659 Stoica asist 3500000

Page 50: Baze de Date Curs

M. Danubianu - Baze de date 5

ALGEBRA RELAŢIONALĂ

• formalism propus de Codd

• colecţie de operatori care permit manipularea relaţiilor.

• utilizaţi pentru a specifica solicitările de regăsire a datelor(principala operaţie care se execută asupra datelor din bazelede date= consultarea)

• rezultatul aplicării acestor operatori este tot o relaţie ⇒ieşirea unei operaţii poate fi intrare pentru o altă operaţie ⇒proprietatea de închidere

• permite combinarea expresiilor

Page 51: Baze de Date Curs

M. Danubianu - Baze de date 6

Operatorii algebrei relaţionale

� D.p.d.v. al numărului de operatori asupra cărora acţionează� operatori unari: selecţia, proiecţia� operatori binari: reuniune, intersecţie, diferenţă, diviziune, produs

cartezian, joncţiune

� d.p.d.v al tipului operatorilor:� operatori pe mulţimi: reuniunea, intersecţia, diferenţa şi produsul cartezian� operatori relaţionali specifici (iau în considrare caracterul de tuplu al

elementelor componente ale relaţiilor) selecţia, proiecţia

� d.p.d.v. al modului de implementare:� operatori fundamentali� operatori derivaţi

� Redenumirea relaţiilor şi atributelor: redenumirea

Page 52: Baze de Date Curs

M. Danubianu - Baze de date 7

Algebra Relaţională

� Proiecţia ( π ) Şterge coloanele nedorite din relaţie.

� Selecţia ( ) Selectează o submulţime a înregistrărilor dintr-orelaţie.

� Produs cartezian ( x ) Permite combinarea a două relaţii.

� Diferenţă ( - ) Tuplele din relaţia 1, care nu sunt în relaţia 2.

� Reuniune ( ∪ ) Tuplele din relaţia 1 şi din relaţia 2.

� Operaţiile:intersecţie , join, diviziune şi redenumirenu sunt esenţiale dar sunt foarte utile.

∩, ><, / ,ρDeoarece fiecare operaţie întoarce o relaţie, operaţiile pot fi compuse.

σ

Page 53: Baze de Date Curs

M. Danubianu - Baze de date 8

Selecţia( σσσσp)

� Selectează rândurile care satisfac o condiţie (predicat) de selecţie.

� Nu există duplicate în instanţarelaţiei de ieşire. (De ce?)

� Schema rezultatului esteidentică cu schema relaţiei de intrare.

� Relaţia rezultat poate fi intrare pentru o altă operaţiealgebrică.

�condiţie de selecţie (predicatul selectiv) - expresie care conţine: nume

de câmpuri, constante şi operatori relaţionali sau logici

Evaluarea predicatului întoarce o valoare logică de tipul TRUE sau

FALSE.

Page 54: Baze de Date Curs

M. Danubianu - Baze de date 9

Exemplu

PERSONAL (cnp, nume, pren, funcţie, loc_m, salar)

Cnp Nume Pren Funcţie Loc_m Salar

056 Lupu Adriana Prof FIE 600 456 Marinescu Dana Assist FSE 400 872 Ilea Dan Conf FS 550 659 Stoica Ileana asist FIE 350

Care sunt persoanele cu salarii mai mari de 500 lei?

σsalar>500 ( Personal )

Cnp Nume Pren Funcţie Loc_m Salar

056 Lupu Adriana Prof FIE 600 872 Ilea Dan Conf FS 550

Page 55: Baze de Date Curs

M. Danubianu - Baze de date 10

Proiecţia( listă câmpuri)

� Generează o relaţie care conţinedoar acele câmpuri din lista de proiecţie� şterge câmpurile care nu apar în

listă.� Schema relaţiei rezultat conţine

exact câmpurile din lista de proiecţie, (au aceleaşi nume din relaţia originală)

π

�Operatorul de proiecţie elimină duplicatele! (De ce????)�este o operaţie costisitoare�SGBD-urile reale omit adesea eliminarea tuplelor duplicat

Page 56: Baze de Date Curs

M. Danubianu - Baze de date 11

Exempu

Să se realizeze o listă cu salariile întregului personal care să conţină numai detaliile: Cnp, Nume, Funcţie, Salar.

πcnp,nume,functie,salar,.( Personal )

Cnp Nume Funcţie Salar

056 Lupu Prof 600 456 Marinescu Assist 400 872 Ilea Conf 550 659 Stoica asist 350

Page 57: Baze de Date Curs

M. Danubianu - Baze de date 12

Reuniunea (R ∪∪∪∪ S)

(Selecţia tuplurilor distincte a două relaţii)

� Reuniunea a două relaţii R şi S cu i respectiv j tuplurieste obţinută prin concatenarea lor într-o relaţie cu maxim (i+j) tupluri, tuplurile duble fiind eliminate.

� Relaţiile R şi S trebuie să fie compatibile la reuniune.� acelaşi număr de câmpuri� câmpurile ‘corespunzătoare’ au acelaşi domeniu.

� Ce schemă va avea relaţia rezultat?� Se poate utiliza şi pentru adăugarea de noi tuple într-o

relaţie, � unul din operanzi va fi constituit din valorile

atributelor care se adaugă, în ordinea în care apar ele în relaţia respectivă

� ∃ posibilitatea compatibilizării la reuniune a unor scheme de relaţie care nu sunt compatibile, dar în care existăcâmpuri comune?

Page 58: Baze de Date Curs

M. Danubianu - Baze de date 13

ExempluStudC StudAII

Care sunt toţi studenţii specializării Calculatoare şi automatizări?

StudC ∪ StudAII

Page 59: Baze de Date Curs

M. Danubianu - Baze de date 14

Intersecţia(R ∩∩∩∩ S)

� defineşte o relaţie ce constă în mulţimea tuturor

tuplurilor care se află atât în relaţia R cât şi în relaţia S.

� cele două relaţii trebuie să fie compatibile la reuniune.

� operator binar, comutativ , derivat.

� poate fi exprimată ca o diferenţă, astfel:

R∩S =R-(R-S) = S-(S-R)

Page 60: Baze de Date Curs

M. Danubianu - Baze de date 15

Exemplu 1

Ce produse care sunt în stoc au mai fost comandate?

Page 61: Baze de Date Curs

M. Danubianu - Baze de date 16

Exemplu 2

AVERSA SA2935467

ELIANA 1198034

MICROPIC2439873

OLPO SRL1034567

DenumireCUI

Client_X1 Client_X2

Care sunt clientii comuni?

AVERSA SA2935467

OLPO SRL1034567

DenumireCUI

Client_X1 ∩πcui,denumire Client_X2

5683456

2935467

2394560

1034567

CUI

ATAC SRL

AVERSA SA

IUPS

OLPO SRL

Denumire

Galati

021345627PrimaveriiBucuresti

Suceava

532567N.BalcescuSuceava

TelefonStradaLocalitate

Page 62: Baze de Date Curs

M. Danubianu - Baze de date 17

Diferenţa R-S

(Selecţia tuplelor carte apar numai într-o relaţie)

� Defineşte o relaţie ce constă în tuplurile care sunt în

relaţia R, dar nu şi în relaţia S.

� Relaţiile R şi S trebuie să fie compatibile la reuniune.

� Operaţie binară, necomutativă

� Se poate utiliza pentru ştergerea tuplurilor dintr-o

relaţie.

Page 63: Baze de Date Curs

M. Danubianu - Baze de date 18

Produsul cartezian� defineşte o relaţie care reprezintă o concatenare a fiecărui tuplu din

relaţia R cu fiecare tuplu din relaţia S.

� Shema relaţiei rezultat conţine câte un câmp pentru fiecare câmpdin S1 şi din R1,

� Dacă R şi S sunt de grad m, respectiv n , şi de cardinalitate i, respectiv j, produsul cartezian al celor două relaţii RxS este o relaţie de grad m+n şi de cardinalitate i*j.

� Dacă este posibil numele câmpurilor sunt moştenite din relaţiile originale� Dacă cele două relaţii conţin câmpuri cu acelaşi nume, denumirile acestora

conţin ca prefix denumirea relaţiei, pentru a menţine unicitatea denumirilor în cadrul unei relaţii.

Page 64: Baze de Date Curs

M. Danubianu - Baze de date 19

PRODUSE x DEPOZITE

Exemplu

Să se găsească toate combinaţiile posibile de produse şi depozite.

Page 65: Baze de Date Curs

M. Danubianu - Baze de date 20

Joncţiunea (JOIN, uniunea)� operaţie binară care are ca rezultat o nouă relaţie în

care fiecare tuplu este o combinaţie a unui tuplu din

prima relaţie cu un tuplu din a doua relaţie.

� derivată a produsului cartezian� Există diferite forme :

- theta- JOIN- echi- JOIN- natural JOIN (uniunea naturală);- outer JOIN (uniunea externă);- semi JOIN (semi-uniunea).

� Schema relaţiei rezultat - aceeaşi ca la produsul cartezian� conţine mai puţine tupluri decât produsul cartezian- poate

fi calculat mai eficient

Page 66: Baze de Date Curs

M. Danubianu - Baze de date 21

Theta –JOIN R⟩⟨⟩⟨⟩⟨⟩⟨ p S

� defineşte o relaţie care conţine tuplurile ce satisfac

predicatul p din produsul cartezian al relaţiilor R şi S.

� este echivalentă cu efectuarea unei selecţii asupra produsului cartezian al celor două relaţii operand.

� Predicatul p este de forma : R.a θθθθ S.b

� θθθθ operator de comparare ( <,<=,>,>=, =)

� Gradul operaţiei de theta-uniune este suma gradelor

relaţiilor operand R şi S.

� In cazul în care predicatul p conţine numai egalitatea (=), se foloseşte termenul de echi-uniune(echi-joncţiune).

R⟩⟨⟩⟨⟩⟨⟩⟨ p S=σσσσp (RxS)

Page 67: Baze de Date Curs

M. Danubianu - Baze de date 22

Exemplu-FACTURI( numar, codp, cantitate, data) şi -COMENZI (numar, data, cod_ben), cu următoarele instanţe:

Care sunt comenzile care au fost onorate? (pentru care s-au emis facturi)

Facturi ⟩⟨⟩⟨⟩⟨⟩⟨ facturi.numar=comenzi.numar Comenzi

Page 68: Baze de Date Curs

M. Danubianu - Baze de date 23

Natural Join R⟩⟨⟩⟨⟩⟨⟩⟨ S•echi-uniune a două relaţii R şi S pe toate atributele comune. O apariţie a

fiecărui atribut comun este eliminată din rezultat.

•Gradul este dat de suma gradelor relaţiilor R şi S, minus numărul atributelor comuneCOMENZI (numar, data, cod_ben),

BENEFICIARI (cod_ben, nume, adresa), cu următoarele instanţe

Page 69: Baze de Date Curs

M. Danubianu - Baze de date 24

OUTER JOIN (Uniunea externă)

R ⊃3 S (stânga) ; R 8⊂ S (dreapta)� Uneori, la uniunea a două relaţii nu există o valoare similară în

coloanele comune. Chiar în aceste condiţii rândul respectiv poate să apară în relaţia rezultat, dacă se utilizează operatorul de uniune externă.

� Uniunea externă stânga este o uniune în care tuplurile din relaţia

R, care nu au valori similare în coloanele comune ale relaţiei S,

sunt de asemenea incluse în relaţia rezultantă.

� Uniunea externă dreapta păstrează în relaţia rezultantă tuplurile din

relaţia S care nu au valori similare în coloanele comune cu R.

� Există şi operaţia de uniune externă completă.

� Valorile lipsă din relaţie sunt stabilite la valoarea null.

� Avantaj: păstrează informaţii care în alt tip de uniune ar fi fost pierdute.

Page 70: Baze de Date Curs

M. Danubianu - Baze de date 25

Fie relaţiile din exemplul anterior . Prin aplicarea operatorului de uniune externă (dreapta) se obţine:

OJOIN COMENZI AND BENEFICIARI

Page 71: Baze de Date Curs

M. Danubianu - Baze de date 26

Diviziunea

� Nu este un operator primar, dar este util în exprimarea unorinterogări de tipul:

Găsiţi beneficiarii care au contractat toate serviciilefurnizate de o societate.

� Fie 2 relaţii: A cu 2 câmpuri, x şi y;

� B cu un singur câmp y:

� A/B =

� A/B conţine toate tuplele x (beneficiarii) a.î. pentru fiecare tuplu y (serviciu) din B, există un tuplu xy în A.

� In general, x şi y poate fi orice mulţime de câmpuri; yreprezintă câmpurile din B, şi x ∪ y reprezintă mulţimeacâmpurilor din A.

{ }x x y A y B| ,∃ ∈ ∀ ∈

Page 72: Baze de Date Curs

M. Danubianu - Baze de date 27

Exemple A/B

x ys1 p1s1 p2s1 p3s1 p4s2 p1s2 p2s3 p2

s4 p2

s4 p4A

yp2

B1

yp2p4B2

yp1p2p4B3

xs1s2s3s4A/B1

xs1s4

A/B2

xs1A/B3

Page 73: Baze de Date Curs

M. Danubianu - Baze de date 28

Exprimarea diviziunii cu ajutoruloperatorilor fundamentali

� Ideea: A/B, calculează toate valorile x care nu sunt “descalificate” de valori y din B.

� O valoare x este descalificată dacă prin ataşarea unei valori y din B, se obţine un tuplu xy care nu se găseşte în A.

Valorile x descalificate sunt:

A/B:

π πx x A B A(( ( ) ) )× −

π x A( ) − toate tuplele descalificate

A/B: π x A( ) − π πx x A B A(( ( ) ) )× −

Page 74: Baze de Date Curs

M. Danubianu - Baze de date 29

Formularea interogărilor în algebra relaţională

� Schema bazei de date folosită pentru exemplificare

Agenţi (zona, cod, nume, adresa, telefon, manager, tip_ag)

Contracte (cod, tip_pr, tip_m, cant, index_v, index_n, act_idx)

Facturi ( cod, număr, data, tip_pr, pret, cant, val)

Tipuri (tip_pr, den)

Page 75: Baze de Date Curs

M. Danubianu - Baze de date 30

Numele şi adresa agenţilor din zona ZAMCA?

Soluţia 1:

V= σzona="ZAMCA" ( Agenti )

R= Πnume,adresa (V)

Soluţia 2

R=Πnume,adresa (σ zona="ZAMCA" ( Agenti ))

Page 76: Baze de Date Curs

M. Danubianu - Baze de date 31

Care sunt agenţii din zona centrală care au încheiat contracte?

V1= Πcod (AGENTI)

V2= Πcod (CONTRACTE)

V3= V1 ∩ V2 (codurile agenţilor care au contracte)

V4= V3 ►◄ AGENTI

V5= σzona="CENTRALA" (V4 )

� σzona="CENTRALA" (Πcod (AGENTI) ∩ Πcod (CONTRACTE)

►◄ AGENTI)

Page 77: Baze de Date Curs

M. Danubianu - Baze de date 1

BAZE DE DATE Curs 4

SQL

Page 78: Baze de Date Curs

M. Danubianu - Baze de date 2

LIMBAJUL SQL - Obiective şi caracteristici

- crearea bazelor de date şi a structurilor pentru relaţii;- efectuarea de operaţii elementare de gestiune a datelor, precum

inserarea, modificarea şi ştergerea acestora din cadrul relaţiilor;- efectuarea interogărilor începând cu cele simple până la cele complexe, în

scopul transformării datelor brute în informaţii.- operaţiile se realizează cu un efort minim din partea utilizatorului, - structura comenzilor şi sintaxa acestora este relativ uşor de învăţat.� limbajul este portabil, - respectă un standard recunoscut astfel încât să se

poată utiliza aceeaşi structură şi sintaxă a comenzilor la trecerea de la un SGBD la altul

� SQL prezintă două componente principale:- un limbaj de definire a datelor (DDL) utilizat pentru definirea

structurii bazei de date şi- un limbaj de manipulare a datelor (DML) pentru regăsirea şi

reactualizarea datelor.

Page 79: Baze de Date Curs

M. Danubianu - Baze de date 3

� standardul SQL nu conţine comenzi de control (nu existăinstrucţiuni de tipul IF..THEN..ELSE, GO TO, DO..WHILE sau alte comenzi care să genereze un flux de control) ⇒ poate fi utilizat în două moduri:

- interactiv prin introducerea instrucţiunilor de la un terminal;

- prin integrarea instrucţiunilor SQL într-un limbaj

procedural.� Are următoarele caracteristici:

- limbaj neprocedural.

- are un format liber;- comenzile sunt structurate pe baza unor cuvinte

standard din limba engleză ( Create, Select, Insert..)

Page 80: Baze de Date Curs

M. Danubianu - Baze de date 4

Pentru manipularea datelor SELECT Extragerea datelor din baza de dateINSERT Adăugarea de noi linii într-un tabelDELETE Stergerea de linii dintr-un tabelUPDATE Modificarea valorilor unor atributeCREATE TABLE Adăugarea unui nou tabel la baza de datePentru definirea bazei de

date DROP TABLE Stergerea unui tabel din baza de dateALTER TABLE Modificarea structurii unei baze de dateCREATE VIEW Crearea unuitabel virtual (vedere)DROP VIEW Stergerea unui tabel virtualGRANT Acordarea unor drepturi pentru utilizatoriPentru controlul accesului

la baza de date REVOKE Revocarea unor drepturi pentru utilizatoriCOMMIT Marchează sfârşitul unei tranzacţiiPentru controlul

tranzacţiilor ROLLBACK Abandonează tranzacţia în curs.

Principalele comenzi SQL

Page 81: Baze de Date Curs

M. Danubianu - Baze de date 5

Terminologie şi convenţii de scriere

a comenzilor SQL

� In limbajul SQL standardizat se utilizează termenii de tabele , coloane

şi rânduri.

� O instrucţiune SQL este formată din cuvinte rezervate şi cuvinte

definite de utilizator. � Cuvintele rezervate :

- au un înţeles fix, trebuie scrise exact cum este necesar şi nu pot fi împărţite în mai multe rânduri.

� Cuvintele definite de utilizator :

- sunt formate de către acesta, conform unor anumite reguli de sintaxă şi reprezintă denumirile diverselor obiecte din baza de date, cum ar fi relaţiile, coloanele , vederile, indexurile etc.

� Majoritatea compnentelor unei instrucţiuni SQL nu sunt sensibile la

tipul de litere. � excepţie importantă - faptul că datele de tip caracter literal trebuie

să fie scrise exact cum apar în baza de date.

Page 82: Baze de Date Curs

M. Danubianu - Baze de date 6

Consultarea datelor în SQL

� Operaţia fundamentală în SQL este consultarea� fraza SELECT - prezintă trei clauze principale : SELECT, FROM şi

WHERE.• SELECT corespunde operatorului de proiecţie din algebra

relaţională, şi este utilizat pentru desemnarea listei de atribute(coloane, câmpuri) din tabelul rezultat;

• FROM permite enumerarea tabelelor din care vor fi extrasedatele aferente consultării;

• WHERE desemnează predicatul selectiv al algebreirelaţionale, relativ la atributele relaţiilor care apar în clauzaFROM.

� comandă extrem de puternică echivalentul operaţiilor de selecţie,

proiecţie şi uniune din algebra relaţională

Page 83: Baze de Date Curs

M. Danubianu - Baze de date 7

SELECT

[ALL | DISTINCT] [*]

[<alias>.]<camp>

[AS <nume_nou>]

[, [<alias>.]<camp>

[AS <nume_nou>] ...]

FROM <tabel>

[<local_alias>]

[, <tabel> [<local_alias>] ...]

[WHERE <cond_leg> [AND <cond_leg> ...]

[AND | OR <cond_filtru> [AND | OR <cond_filtru> ...]]]

[GROUP BY <lista_campuri>]

[HAVING <cond_filtru>]

[ORDER BY <camp_ord> [ASC | DESC] [, <camp_ord> [ASC |

DESC] ...]]

- Alias reprezintă aliasul atribuit relaţiei - câmp este numele câmpului selectat - nume_nou numele câmpului selectat în noul tabel - local_alias aliasul local atribuit de utilizator; - cond_leg condiţia de legătură între tabelele în care se manipulează datele; - cond_filtru condiţia de filtrare a înregistrărilor; - listă _câmpuri listă a câmpurilor în funcţie de care se face gruparea

înregistrărilor - câmp_ord câmpul după care se face ordonarea înregistrărilor

Forma generală a instrucţiunii SELECT este:

Page 84: Baze de Date Curs

M. Danubianu - Baze de date 8

Secvenţa de prelucrare a unei fraze SELECT...

� ...este următoarea:

- FROM - specifică tabelul sau tabelele care vor fi utilizate;- WHERE - filtrează rândurile supuse unei anumite condiţii

sau conţine condiţia de joncţiune între mai multe tabele- GROUP BY - formează grupuri de rânduri cu aceleaşi

valori ale coloanelor din lista de parametri;- HAVING - filtrează grupurile supuse unei anumite condiţii;- SELECT - specifică ce coloane vor apărea în tabelul

rezultat;- ORDER BY - specifică ordinea ieşirii.

� Operaţia SELECT este închisă: rezultatul unei interogări unui tabel

este un alt tabel. � rezultatul poate fi un tabel "normal" (tabel salvat pe disc), un tabel

temporar (cursor - tabel care se şterge automat la închiderea uneisesiuni de lucru) sau chiar o variabilă-tablou (matrice).

Page 85: Baze de Date Curs

M. Danubianu - Baze de date 9

Interogări în SQL

� Agenţi1 (zona, cod, nume, adresa, telefon, manager, tip_ag)

� Agenţi2 (zona, cod, nume, adresa, telefon, manager, tip_ag)

� Contracte (cod, tip_pr, tip_m, cant, index_v, index_n, act_idx)

� Facturi ( cod, număr, data, tip_pr, pret, cant, val)

� Nrsp (seria, nrs, număr, data, pag, anulat, ult_pag)

� Tipuri (tip_pr, den)

� Agenţi1 - agentii economici mari

� Agenţi2 - ceilalţi agenţi economici

Page 86: Baze de Date Curs

M. Danubianu - Baze de date 10

Selecţia

� Ce agenti economici mari au sediul în zona BURDUJENI?

� intervine un singur tabel şi anume Agenti1. In clauza WHERE aparepredicatul de selecţie (conditia) : zona="BURDUJENI"

SELECT *FROM AGENTI1

WHERE zona="BURDUJENI"

� Care sunt facturile emise în data de 29.01.1999, cu valoare mai mare

de 2000000 corespunzător apei potabile?

SELECT *FROM FACTURI

WHERE DATA={29.01.1999} AND TIP=12 AND VAL >2000000

Page 87: Baze de Date Curs

M. Danubianu - Baze de date 11

Operatorul BETWEEN

� Se poate reformula ultima interogare astfel: Care sunt facturile

pentru care valoarea consumului de apă potabilă este mai mare de

1500000 şi mai mică de 4000000?

� Se poate folosi următoarea instrucţiune:SELECT *FROM FACTURIWHERE Tip=12 AND Val>1500000 AND val <4000000

� Aceeaşi interogare se poate scrie astfel:SELECT *FROM FACTURIWHERE Tip=12 AND Val BETWEEN 1500000 AND 4000000

Page 88: Baze de Date Curs

M. Danubianu - Baze de date 12

Operatorul LIKE

� Se foloseşte pentru a compara un atribut de tip şir de caractere

cu un literal (constantă de tip şir de caractere).

� %, "_" este un specificator multiplu, joker sau mască.

� Care sunt agenţii al căror nume începe cu "S" şi sunt

societăţi pe acţiuni?

SELECT *

FROM Agenti1

WHERE Nume LIKE "S%SA"

Page 89: Baze de Date Curs

M. Danubianu - Baze de date 13

Operatorul IN

� Are următorul format general:� expresie1 IN (expresie2, expresie3,..)

� Rezultatul evaluării unui predicat care conţine acest operator va fi"adevărat" dacă valoarea expresiei1 este egală cu cel puţin una din valorile: expresie2, expresie3, .. şi este util atunci când condiţiile de selecţie sunt mai complexe.

� Care sunt agenţii din zonele: CENTRALĂ şi ZAMCA?

SELECT * FROM AGENTI1

WHERE Zona = "CENTRALĂ" OR Zona="ZAMCA"� Sau

SELECT * FROM AGENTI1

WHERE Zona IN (CENTRALĂ, ZAMCA)

Page 90: Baze de Date Curs

M. Danubianu - Baze de date 14

Operatorul IS NULL

� Care sunt agenţii pentru care nu s-a introdus numele managerului?

SELECT *FROM AGENTI1

WHERE manger IS NULL

� Notă: Operatorul NULL se utilizează cu IS şi nu cu semnul "=".

Utilizarea unei expresii de forma =NULL ar conduce la un rezultat

care va fi întotdeauna fals, chiar dacă expresia nu este nulă.

Page 91: Baze de Date Curs

M. Danubianu - Baze de date 15

Proiecţia� In ce zone ale oraşului îşi au sediul agenţii comerciali, clienţi ai

firmei?

SELECT DISTINCT ZonaFROM Agenti

� Care este numele fiecărui agent comercial şi adresa sa?

SELECT Nume, AdresaFROM Agenti

� prezentarea ordonată a agenţilor - ORDER BY.SELECT *

FROM AGENTI ORDER BY Nume

� dacă se doreşrte ordonarea descrescătoare se foloseşte următoareaformulare:

SELECT *FROM Agenţi

ORDER BY Zona ASCENDING, Nume DESCENDING

Page 92: Baze de Date Curs

M. Danubianu - Baze de date 16

Reflectarea operatorilor asamblişti (pe mulţimi)Reuniunea

� Pornind de la tabelele Agenti1 şi Agenti2 , tabelul reuniune care reprezintă tabelul AGENTI va fi obţinut în SQL prin fraza:

SELECT *FROM AGENTI1

UNION

SELECT *FROM AGENTI2

� SQL elimină automat dublurile, deci nu este necesară utilizareaclauzei DISTINCT.

Page 93: Baze de Date Curs

M. Danubianu - Baze de date 17

Diferenţa

� Fie două tabele cu date de identificare pentru clienţii a două

societăţi: Clienţi1 şi Clienţi2.

� Să se găsească care sunt clienţii societăţii 1 care nu sunt şi clienţi ai societăţii2.

SELECT *FROM Clienţi1

MINUS

SELECT *FROM Clienţi2

Page 94: Baze de Date Curs

M. Danubianu - Baze de date 18

Intersecţia

� Să se găsească codurile agenţilor economici care au contract de

furnizare servicii.SELECT codFROM Agenţi

INTERSECT

SELECT codFROM Contracte

� sau , ţinând cont de faptul că este un operator drivat:SELECT cod

FROM AgenţiMINUS

(SELECT codFROM Agenţi

MINUS

SELECT codFROM Contracte)

Page 95: Baze de Date Curs

M. Danubianu - Baze de date 19

Produsul cartezian

SELECT *

FROM Agenţi, Contracte

Page 96: Baze de Date Curs

M. Danubianu - Baze de date 20

Joncţiunea în SQL

� trebuie ţinut cont de faptul că joncţiunea este o combinaţie de produs cartezian şi selecţie.

� Căror agenţi le-au fost listate facturile şi care sunt seriile

şi numerele speciale alocate acestora?

SELECT DISTINCT Agenti.cod, nume, Adresa, NRSP.seria, NRSP.nrs

FROM Agenti, Facturi, NRSPWHERE Agenţi.cod=facturi.cod AND facturi.numar=NRSP.numar

AND facturi.data=NRSP.data

Page 97: Baze de Date Curs

M. Danubianu - Baze de date 21

� Dacă s-ar fi dorit ca relaţia rezultat să conţină toate atributele celor două

tabele, fraza SELECT ar fi avut una din următoarele forme:

SELECT Agenti.* , NRSP.*

FROM Agenti,facturi, NRSP

WHERE Agenţi.cod=facturi.cod and facturi.numar=NRSP.numar and

facturi.data=NRSP.data

� sau

SELECT *

FROM Agenti,facturi, NRSP

WHERE Agenţi.cod=facturi.cod and facturi.numar=NRSP.numar and

facturi.data=NRSP.data

Page 98: Baze de Date Curs

M. Danubianu - Baze de date 22

� In ce zone ale oraşului se găsesc agentii economici cărora li s-a facturat o sumă mai mare de 1.000.000 lei pentru apa potabilă?

SELECT DISTINCT ZonaFROM Agenti, FacturiWHERE Tip=12 AND Val>1000000 AND Agenti.cod=Facturi.cod

� In ce zone ale oraşului se găsesc agentii economici ale căror facturisunt listaste pe mai mult de un formular tip şi care au consumat mai mult de 1000 mc apă potabilă? (condiţia care se va impune este ca încâmpul ULTPAG să se găsească o valoare mai mare de 1).SELECT DISTINCT Zona

FROM Agenti, Facturi, NRSPWHERE NRSP.ULTPAG>1 AND NRSP.numar=FACTURI.numar AND NRSP.data=FACTURI.data AND Facturi.tip=12 and Facturi.cant>1000 ANDFacturi.cod=Agenti.cod

Page 99: Baze de Date Curs

M. Danubianu - Baze de date 23

Subconsultări

� posibilitatea imbricării a două sau mai multe fraze SELECT astfelîncât pot fi formulate interogări cu mare grad de complexitate

� Forma generală a unei subconsultări: SELECT listă_câmpuri1

FROM Listă_tabele1WHERE câmp1 operator

(SELECT listă_câmpuri2FROM Listă_tabele2WHERE condiţii)

unde operator poate fi:IN sau NOT INEXIST sau NOT EXISTALL, ANY etc.

� Subconsultări : corelate sau necorelate

Page 100: Baze de Date Curs

M. Danubianu - Baze de date 24

Operatorul IN (NOT IN)

Care sunt facturile emise în aceeaşizi cu cele pentru agentul

economic cu codul 16?

SELECT *

FROM Facturi

WHERE Data IN

(SELECT Data

FROM Facturi

WHERE Cod=16)

Rezultatul subconsultării

(SELECT Data

FROM Facturi

WHERE Cod=16)

esteun tabel cu o coloană (Data)

Data

27-Ian- 1999

27-Ian- 1999Clauza WHERE Data IN determinăcăutarea în tabelul Facturi a tuturortuplurilor (liniilor) care au valoareaatributului Data egală cu una din valorile tuplurilor din tabelul obţinutprin subconsultare

Page 101: Baze de Date Curs

M. Danubianu - Baze de date 25

� Care sunt facturile emise în alte zile decât cea în care a fost întocmităfactura 10013?

SELECT *FROM FacturiWHERE Data NOT IN

(SELECT DataFROM FacturiWHERE Număr=10013)

� Să se găsească codurile agenţilor economici care au contract de

furnizare servicii.

SELECT codFROM AgenţiWHERE cod IN

(SELECT codFROM Contracte)

Page 102: Baze de Date Curs

M. Danubianu - Baze de date 26

� Fie două tabele cu date de identificare pentru clienţii a două

societăţi: Clienţi1 şi Clienţi2. Cele două relaţii au structuri identice:

cod, nume, adresa, localitate.

� Să se găsească care sunt clienţii societăţii 1 care nu sunt şi

clienţi ai societăţii2.

� Acelaşi rezultat ca cel obţinut prin folosirea operatorului MINUS se

va obţine în urma utilizării frazei:SELECT *FROM Clienţi1WHERE (cod, nume, adresa, localitate) NOT IN

(SELECT cod, nume, adresa, localitateFROM Clienţi2)

Page 103: Baze de Date Curs

M. Danubianu - Baze de date 27

Operatorii ALL, SOME şi ANY

� ALL, SOME şi ANY permit utilizarea unui predicat de comparaţiecare este aplicat rezultatului unei subconsultări.

� predicat de comparaţie -un predicat care conţine unul din operatorii: =,>=,<=,<,> sau ≠.

� Care sunt numerele facturilor emise ale căror valori corespunzătoare

pentru apa potabilă sunt superioare oricărei valori corespunzătoare

apei potabile din facturile emise pe 27.01.1999?

SELECT număr

FROM FACTURI

WHERE Tip=12 AND val>ALL

(SELECT val

FROM FACTURI

WHERE Tip=12 AND Data={27.01.1999})

Page 104: Baze de Date Curs

M. Danubianu - Baze de date 28

� Care sunt numerele facturilor primite care au valoarea mai mare

decât valoarea,cel puţin a uneia dintre facturile care au fost emise

pe 27.01.1999 pentru apa potabilă?

SELECT număr

FROM Facturi

WHERE Val>ANY

(SELECT val

FROM Facturi

WHERE tip=12 AND Data={27.01.1999})

Page 105: Baze de Date Curs

M. Danubianu - Baze de date 29

Funcţiile predefinite: COUNT, SUM, AVG, MAX, MIN

� Formatul general al unei fraze SELECT ce conţine funcţii predefinite:

SELECT fcţ_pred1, fcţ_pred2,..fcţ_predn

FROM listă de tabele

WHERE condiţii

� In lipsa opţiunii GROUP BY, dacă în clauza SELECT este prezentă o

funcţie predefinită, tabelul rezultat va conţine o singură linie.

Page 106: Baze de Date Curs

M. Danubianu - Baze de date 30

Funcţia COUNT

� Contorizează valorile unei coloane - numără, într-o relaţie câte valoridiferite de null are coloana specificată.

� Câţi clienţi are firma?

SELECT COUNT (cod) AS nr_clientiFROM Agenti

� Câte formulare de facturi au fost anulate?

SELECT COUNT (anulat)FROM NRSPWHERE anulat="Da”

� Câte facturi s-au emis în data de 29.01.1999

SELECT COUNT (DISTINCT numar)FROM FACTURIWHERE Data={29.01.1999}

� se poate utiliza ca argument în locul numelui unei coloane semnul *; � se va determina câte linii are tabelul la care se aplică funcţia respectivă

Page 107: Baze de Date Curs

M. Danubianu - Baze de date 31

Funcţia SUM

� Calculează suma valorilor unei coloane.� Care este valoarea totală a facturilor emise?

SELECT SUM(Val) AS Total_feFROM Facturi

� Care este valoarea apei potabile facturate?

SELECT SUM(Val) AS Total_feFROM Facturi

WHERE tip=12� Care este valoarea facturii emise pentru AKROM AKAL?

SELECT SUM(val) AS Total_ELCOFROM FACTURIWHERE cod IN

(SELECT codFROM AGENTIWHERE nume="AKROM AKAL" )

Page 108: Baze de Date Curs

M. Danubianu - Baze de date 32

Funcţia AVG

� Calculează media aritmetică a unei coloane într-un tabel oarecare� Care este valoarea medie a prestaţiilor facturate în factura cu

numărul 10589?SELECT AVG (Pret*Cant) AS Medie_10589FROM FACTURIWHERE Numar=10589

� Valoarea medie a tuturor facturilor nu poate fi calculată cu funcţiaAVG. In acest caz este necesară utilizarea opţiunii GROUP BY.

� Care este valoarea medie facturată pentru serviciile de canal înzonele Burdujeni şi Iţcani?

SELECT AVG (Pret*Cant) AS Medie_canalFROM FACTURIWHERE tip=22 AND cod IN

(SELECT codFROM AGENTIWHERE Zona IN ("BURDUJENI","Iţcani"))

Page 109: Baze de Date Curs

M. Danubianu - Baze de date 33

Gruparea tuplurilor. Clauzele GROUP BY şi HAVING

� GROUP BY permite formarea grupurilor de tupluri într-o relaţie pebaza valorilor comune ale unei coloane.

� asocierea unei clauze HAVING la o clauză GROUP BY face posibilăselectarea anumitor grupe de tupluri care îndeplinesc un criteriu.

� Formatul general al clauzei GROUP BY este:SELECT col1, col2,..colnFROM tabelGROUP BY coloană de grupare

� Care este totalul valorilor facturate pentru fiecare serviciu prestat?SELECT Tip, Produs, SUM(val)FROM FACTURI GROUP BY Tip

� tabelul rezultat va aveaun număr de linii egal cu numărul tipurilor de prestaţii distincte din tabelul Facturi. Pentru toate poziţiile din facturicare se referă la un anumit produs se va calcula suma valorilordeoarece se foloseşte funcţia SUM.

Page 110: Baze de Date Curs

M. Danubianu - Baze de date 34

� Succesiunea fazelor de rezolvare a interogării este următoarea:� se ordonează liniile tabelului Facturi în funcţie de

valoarea atributului Tip

� se formează câte un grup pentru fiecare valoaredistinctă a atributului Tip

� Pentru fiecare grup se calculează suma valoriloratributului valoare. Tabelul rezultat va avea două linii.

Page 111: Baze de Date Curs

M. Danubianu - Baze de date 35

� Care este numărul facturilor trimise în fiecare zonă a orasului?

SELECT Zona, COUNT(numar)FROM AGENTI, NRSPWHERE AGENTI.cod=NRSP.cod GROUP BY AGENTI.Zona

� Care este valoarea totală a facturilor emise, pe zile, pentru fiecare zona ?

SELECT Zona, Data, SUM (val)FROM Facturi, AgentiWHERE Facturi.cod=Agenţi.codGROUP BY Zona, Data

Page 112: Baze de Date Curs

M. Danubianu - Baze de date 36

Clauza HAVING

� Permite introducerea unor restricţii care sunt aplicate grupurilor de

tupluri, deci nu tuplurilor individuale, aşa cum acţionează clauza

WHERE. Din tabelul rezultat sunt eliminate toate tuplurile care nu

satisfac condiţia dată.

� Clauza HAVING lucrează împreună cu o clauză GROUP BY, fiind

practic o clauză WHERE aplicată acesteia. Formatul general este:

SELECT col1, col2,..coln

FROM tabel

GROUP BY coloană de regrupare

HAVING caract eristică de grup

Page 113: Baze de Date Curs

M. Danubianu - Baze de date 37

� Pentru facturile emise, interesează valoarea zilnică, dar numai dacăaceastă valoare este mai mare de 5.000.000 lei.

SELECT Data, SUM(val)FROM FacturiGROUP BY DataHAVING SUM(val)>5000000

� Care sunt agenţii pentru care, în facturi, există mai mult de douăpoziţii pentru un produs furnizat?

SELECT numeFROM AgentiWHERE cod IN

(SELECT codFROM FACTURIGROUP BY tip, codHAVING COUNT(*)>2)

Page 114: Baze de Date Curs

M. Danubianu - Baze de date 38

Actualizarea datelor în SQL

� implică trei acţiuni posibile :� adăugarea de noi linii la cele existente într-un tabel� ştergerea unor linii din tabel� modificarea valorii unor atribute.

Page 115: Baze de Date Curs

M. Danubianu - Baze de date 39

Adăugarea datelor în SQL - INSERT

INSERT INTO NumeTab [(NumeCâmp1 [, NumeCâmp2, ...])]VALUES (eExpr1 [, eExpr2, ...])

INSERT INTO NumeTab FROM ARRAY Nume | FROM MEMVAR

� Comanda INSERT poate fi asociată cu o subinterogare, care să furnizeze valorile care trebuie adăugate

INSERT INTO NumeTab1 [(NumeCâmp1 [, NumeCâmp2, ...])]

SELECT [(NumeCâmp1 [, NumeCâmp2, ...])]FROM NumeTab2WHERE conditii

� Subinterogarea se poate utiliza în locul unui nume de tabel în clauza INTO a comenzii INSERT:

INSERT INTO(SELECT [(NumeCâmp1 [, NumeCâmp2, ...])]FROM NumeTab2)

VALUES (eExpr1 [, eExpr2, ...])

Page 116: Baze de Date Curs

M. Danubianu - Baze de date 40

Adăugarea datelor în SQL - Exemple1. INSERT INTO agenti (cod, zona, nume, adresa, telefon, manager, tip_ag)

VALUES ("2349","ZAMCA","SONIC", "Visinilor 7", "0787964321","0")

2. INSERT INTO agentiVALUES ("2349","ZAMCA","SONIC", "Visinilor 7", "0787964321","0")

3. INSERT INTO agenti1 (cod, zona, nume, adresa, telefon, manager, tip_ag)

SELECT cod, zona, nume, adresa, telefon, manager, tip_agFROM agenti2WHERE zona ="OBCINI"

4. INSERT INTO(SELECT cod, zona, nume, adresa, telefon, manager, tip_agFROM agenti)VALUES ("2349","ZAMCA","SONIC", "Visinilor 7", "0787964321","0")

Page 117: Baze de Date Curs

M. Danubianu - Baze de date 41

DELETE FROM [NumeBD!]NumeTab[WHERE CondFiltru1 [AND | OR CondFiltru2 ...]]

Sau în combinaţie cu subinterogari

DELETE FROM [NumeBD!]NumeTab[WHERE câmp operator

(SELECT câmpFROM NumeTabelWHERE condiţii)]

Sunt variante SQL care, la crearea unui tabel, permit descrierea acţiunii care se va derula la ştergerea unei linii ( restricţionare sau stergere cascadată). DE CE???

DELETE FROM facturiWHERE cod =

(SELECT codFROM agentiWHERE nume = "ELCO S.A.");

Stergerea de linii din tabel - DELETE

Page 118: Baze de Date Curs

M. Danubianu - Baze de date 42

UPDATE [NumeBD1!]NumeTabe1

SET NumeCâmp1 = Expr1

[, NumeCâmp2 = Expr2 ...]

WHERE CondFiltru1 [AND | OR CondFiltru2 ...]]

Sau folosind subinterogările

UPDATE NumeTabe1

SET NumeCâmp1 = (SELECT NumeCâmp1

FROM NumeTabe1

WHERE condiţii),[NumeCâmp2 = (SELECT NumeCâmp2

FROM NumeTabe1

WHERE condiţii),]WHERE conditii

Actualizarea valorilor câmpurilor - UPDATE

Page 119: Baze de Date Curs

M. Danubianu - Baze de date 43

1. UPDATE angajatiSET tip_ag = (SELECT tip_ag

FROM angajatiWHERE cod ="205"),

telefon = (SELECT telefonFROM angajatiWHERE cod ="205")

WHERE cod= "114"

2. UPDATE agentiSET tip_ag= (SELECT tip_ag

FROM angajatiWHERE cod ="205"),

WHERE cod= (SELECT codFROM agentiWHERE nume ="ELCO SA")

Actualizarea valorilor câmpurilor - UPDATE

Page 120: Baze de Date Curs

M. Danubianu - Baze de date 44

Vederi

� vedere este o relaţie virtuală- o relaţie care nu este de fapt de sine stătătoare, ci este derivată, în mod dinamic din una sau mai multe relaţii de bază

� în realitate, nu există în baza de date - este produsă la un moment dat la cererea unui anumit utilizator

� relaţia de bază este o relaţie cu o anumită denumire, corespunzătoare unei entităţi din schema conceptuală, ale cărei tupluri sunt stocate fizic în baza de date.

� vederea este rezultatul dinamic al uneia sau mai multor operaţii relaţionale, care acţionează asupra relaţiilor de bază pentru a realiza o altă relaţie

Page 121: Baze de Date Curs

M. Danubianu - Baze de date 45

� Vederile � sunt dinamice

� furnizează un mecanism de securitate puternic şi flexibil

� ascunderea unor părţi ale bazei de date faţă de anumiţi utilizatori,

� permit utilizatorilor accesarea datelor într-un mod personalizat, conform cerinţelor lor şi

� pot simplifica operaţiile complexe asupra relaţiilor de bază.

Page 122: Baze de Date Curs

M. Danubianu - Baze de date 46

Crearea vederilor

CREATE SQL VIEW [NumeVedere ] [REMOTE][CONNECTION NumeConexiune ][SHARE]| CONNECTION NumeSursaDate][AS SQL SELECT Statement]

Vedere “orizontală”

CREATE VIEW ag_zamcaAS SELECT *FROM agenti

WHERE zona="Zamca"

Vedere “verticală”

CREATE VIEW date_ag_zamcaAS SELECT cod, nume, adresaFROM agentiWHERE zona="Zamca"

CREATE VIEW tot_ag_zamca AS SELECT nume, zona

FROM agenti1WHERE zona="Zamca"

UNIONSELECT nume, zona

FROM agenti2WHERE zona="Zamca"

Page 123: Baze de Date Curs

M. Danubianu - Baze de date 47

Definirea unei vederi pe baza altor vederi

� o vedere poate fi utilizată în expresia de definire a altei vederi� o vedere V1 este direct dependentă de o altă vedere V2 dacă V2 este

utilizată în expresia de definire a vederii V1� o vedere V1 este dependentă de V2 dacă:

� V1 depinde direct de V2 sau� Există o cale de dependenţe de la V1 la V2

� o vedere este recursivă dacă depinde de ea însăşi� Expansiunea unei vederi este procesul de înlocuire a definiţiei unei

vederi în expresia de definire a altei vederi� Constă în următoarea succcesiune de paşi:Fie E expresia de definire a vederii curenterepetă

găseşte orice nume de vedere Vi din Eînlocuieşte Vi prin expresia sa de definiţie

până când nu mai există nume de vederi în E

� Atâta timp cât definiţia vederii curente nu este recursivă, bucla este finită

Page 124: Baze de Date Curs

M. Danubianu - Baze de date 48

Eliminarea unei vederi

DROP VIEW NumeVedere [RESTRICT|CASCADE]

Page 125: Baze de Date Curs

M. Danubianu - Baze de date 49

Definirea datelor în SQL

� instrucţiunile SQL din limbajul de definire a datelor permit: � crearea bazelor de date

� crearea structurii conceptuale pentru tabele

� eliminarea tabelelor din baza de date

� crearea indecşilor

� actualizarea structurii tabelelor

Page 126: Baze de Date Curs

M. Danubianu - Baze de date 50

Crearea structurii conceptuale a tabelelor -

CREATE TABLE

� Definirea tabelelor se face prin comanda CREATE TABLE a cărei formă generală este:

CREATE TABLE | DBF NumeTabel [NAME Nume_LungTabel] [FREE](NumeCâmp1 TipCâmp [(n[,d])][NULL | NOT NULL] [PRIMARY KEY | UNIQUE][CHECK Expr1 [ERROR Mesaj1]][DEFAULT Expr2] [REFERENCES NumeTabel2 [TAG NumeTag1]][NOCPTRANS]

[, FieldName2 …][, PRIMARY KEY Expr3 TAG NumeTag2|, UNIQUE Expr4 TAG NumeTag3][, FOREIGN KEY Expr5 TAG NumeTag4REFERENCES NumeTabel3 [TAG NumeTag5]][, CHECK Expr6 [ERROR Mesaj2]])| FROM ARRAY NumeMatrice

Page 127: Baze de Date Curs

M. Danubianu - Baze de date 51

NUMBER (n ,d ) Numere reale cu n poziţii, din care d zecimale FLOAT Numere reale, virgulă mobilă INTEGER Numere întregi (32 biţi) DOUBLE PRECISION Reale, virgulă mobilă, dublă precizie CHAR Caractere VARCHAR Sir de caractere de lungime variabilă (max 255) DATE Dată calendaristică TIME Ora LOGICAL

logic

Tipurile de date permise în standardul SQL

Page 128: Baze de Date Curs

M. Danubianu - Baze de date 52

Exemplu 1� Agenţi1 (cod, zona, nume, adresa, telefon, manager, tip_ag)

CREATE TABLE agenti(cod char(4) not null primary key,zona varchar(15),nume varchar(15),adresa varchar(20),telefon char(10),manager varchar(20),tip_ag char(1))

Nota: dacă un câmp se declară primary key în SQL-89 este necesar să se specifice în clar condiţia de not null

Page 129: Baze de Date Curs

M. Danubianu - Baze de date 53

Exemplu 2� Agenţi1 (cod, zona, nume, adresa, telefon, manager, tip_ag)

CREATE TABLE agenti(cod char(4),zona varchar(15),nume varchar(15),adresa varchar(20),telefon char(10),manager varchar(20),tip_ag char(1),primary key (cod))

Nota: dacă un câmp se declară primary key SQL-92 asigură automat condiţia de not

null

- această formă este în general folosită pentru tabelele care au chei compuse

Page 130: Baze de Date Curs

M. Danubianu - Baze de date 54

Modificarea structurii conceptuale a

bazei de date- ALTER TABLE.

� Se referă la modificarea ulterioară a schemei de relaţie (a structurii conceptuale) pentru un tabel (adăugare sau ştergere de câmpuri sau modificarea caracteristicilor unui câmp)

ALTER TABLE NumeTabe1ADD | ALTER [COLUMN] NumeCâmp1TipCâmp [(n[, d])][NULL | NOT NULL][CHECK Expr1 [ERROR cMesaj1]][DEFAULT Expr2][PRIMARY KEY | UNIQUE][REFERENCES NumeTabel2 [TAG NumeTag1]]

* Determină adăugarea unei coloane sau modificarea caracteristicilor unei coloane din tabel

Page 131: Baze de Date Curs

M. Danubianu - Baze de date 55

…sau…

ALTER TABLE NumeTabel1

ALTER [COLUMN] NumeCâmp

[NULL | NOT NULL][SET DEFAULT Expr1]

[SET CHECK Expr2 [ERROR Mesaj2]]

Page 132: Baze de Date Curs

M. Danubianu - Baze de date 56

…sau…ALTER TABLE NumeTabe1

[DROP [COLUMN] NumeCâmp][SET CHECK Expr1 [ERROR Mesaj1]]

[DROP CHECK][ADD PRIMARY KEY Expr2 TAG NumeTag1]

[DROP PRIMARY KEY][ADD UNIQUE Expr3 [TAG NumeTag2 ]]

[DROP UNIQUE TAG NumeTag3][ADD FOREIGN KEY [Expr4] TAG NumeTag4REFERENCES NumeTab2 [TAG NumeTag5]]

[DROP FOREIGN KEY TAG NumeTag6 [SAVE]][RENAME COLUMN NumeCâmp TO NumeCâmp_nou][NOVALIDATE]

* Se elimină o coloană sau se adaugă, respectiv se elimină constrângeri în tabel

Page 133: Baze de Date Curs

M. Danubianu - Baze de date 57

Inlăturarea unui tabel

DROP TABLE NumeTabel | NumeFişier | ? [RECYCLE]

� are ca efect înlăturarea unui tabel din baza de date curentă şi ştergerea acestuia de pe disc