Baze de date

130
Baze de date Curs 1 1 Baze de date Prof. dr. ing. Dorin Carstoiu

description

Curs baze de date

Transcript of Baze de date

Page 1: Baze de date

Baze de date Curs 1 1

Baze de dateProf. dr. ing. Dorin Carstoiu

Page 2: Baze de date

Curs 1 2Baze de date

Biliografie

1. A. Ullman, DataBase Design, 19722. D. Carstoiu, Tehnologia bazelor de date, Lit. UPB, 19923. D. Carstoiu, Baze de date relationale, Ed Printech, 19994. D. Carstoiu, Retele globale, Note de curs an VI SAD, Fac.

Automatica si Calculatoare.5. F. Radulescu, Baze de date Internet, Ed. Printech, 20006. F. Radulescu, PL1, Ed. Printech, 20057. *** Oracle PL18. *** Microsoft SQL9. *** MySql, PHP.

Page 3: Baze de date

Curs 1 3Baze de date

1. Introducere

1. Definitii (baza de date, mediu de baza de date, programe de baze de date si aplicatii)

2. Structuri de date specifice in baze de date3. Operatii specifice in baze de date4. Facilitati suplimentare in medii de baze de date5. Clasificari medii de baze de date6. DataBase Management System (DBMS)

Page 4: Baze de date

Curs 1 4Baze de date

1. DefinitiiO baza de date este o colectie persistenta de informatii structurate, organizata si construita pentru facilitarea accesului si prelucrarii eficiente.Un mediu de baze de date este constituit din totalitatea programelor ce permit definirea, manipularea, vizualizarea, stocarea si gestionarea accesului la date.

Componente aplicatii baze de dateBaza de date propriuzisaPrograme de aplicatie

Proiectarea aplicatiilor necesita respectarea secventei: proiectarea bazei de date si apoi a programelor de manipulare.

Page 5: Baze de date

Curs 1 5Baze de date

2. Structuri de date specifice in baze de dateO baza de date este organizata ca o colectie de tabele, similare cu

tabelele pastrate pe formate tiparite.

Cap de tabel Structura

Coloane (field)

Randuri (inregistrari – records)

Top

Bottom

Orice tabela are asociat un nume fizic si un nume logic.

Page 6: Baze de date

Curs 1 6Baze de date

Structura unei tabelePrin definirea structurii unei tabele se intelege stabilirea numelui

campurilor, a tipurilor de date si a formatelor asociate.Nume camp - sir de caractere, similar cu numele variabilelor in limbajele de programare, limitat ca lungime functie de mediul debaze de dateTip data, format – tip generic functie de numarul de octeti necesari pentru stocare (defineste mai mult formatul de afisare nu cel destocare)

- Tip sir de caractere StringCaracterVarchar

Formatul dat de numarul de caracter din sir. Ex 20

- Numeric genericIntegerFloatRealSerial

Formatul definit ca (m.n)

M –nr. Digiti inclusiv punctul zecimal

N – nr. Digiti dupa punctul zecimal

Page 7: Baze de date

Curs 1 7Baze de date

- Data calendaristica format implicit pentru reprezentare an, luna, zi. Multiple formate de afisare.

- Time format pentru reprezentarea momentului de timp. Multiple formate de afisare.

- Logical (boolean) Format implicit cu reprezentare pe un octet cu valori posibile T/F (true/false)

- Blob Format binar pentru dimensiuni mari (imagini…).

- Memo Format implicit prin care in baza se patreaza un index la continutul unui fisier de tip text. Este format nestructurat si nu permite cautare dupa continut.

Campmemo

Fisier text asociat

Page 8: Baze de date

Curs 1 8Baze de date

OBS. Tipurile definite sunt tipuri generice, ele difera de la un mediu la altul.

Strucura tabela:Nume_tabela (nume_camp1 tip_data [format],

nume_camp2 tip_data [format],…….. )

OBS. Campurile pot avea o serie de atribute suplimentare privind restrictiile de integritate (not null, primary key, forign key etc). Campurile au asociata ordine fizica/Fiecare camp este vazut ca o variabila careia ii este atribuita valoarea corespunzatoare din inregistrarea curenta. La fiecare tabela se asociaza un indicator de inregistrare. Indicatorul de inregistrare se modifica functie de inregistrarea curenta.O baza de date este constituita dintr-o colectie de tabele intre care exista o serie de asocieri sau relatii:

Ex: Mybase(tabela_1, tabela_2, …., tabela_n)

Page 9: Baze de date

Curs 1 9Baze de date

3. Operatii specifice in baze de datePentru manipularea datelor o serie de operatii sunt executate:

FIND gasirea inregistrarii ce indeplineste un anumit criteriuFIND NEXT gasirea inregistrarii urmatoareREAD vizualizarea inregistrariiUPDATE reactualizarea continutului unei inregistrariMODIFY modificarea structurii unei tabeleAPPEND adaugarea unei noi inregistrariINSERT inserarea unei noi inregistrariDELETE stergerea unei inregistrariSORT reorganizarea continutului unei tabele

OBS. Pentru ca o operatie sa fie executata este nevoie ca utilizatorul sa aiba drepturi corespunzatoare

Page 10: Baze de date

Curs 1 10Baze de date

4. Facilitati suplimentare in medii de baze de date

O serie de caracteristici diferentiaza mediile de baze de date:

BACKUPRECOVERYROLLBACKROLLFORWARDARHITECTURA CLIENT/SERVERSISTEM TRANZACTIONAL1010ACCES CONCURENTADMINISTRARE DREPTURI ACCES

Page 11: Baze de date

Curs 1 11Baze de date

5. Clasificare medii de baze de date1. Dupa modelul datelor

Model relational (peste 90%) -bazat pe modelul entitate asociereModel distribuitModel ierarhizat

2. Dupa costMedii comerciale (<1000$) Fox, Access,…Medii profesionale (>1000$) Oracle, Progress, Informics, DB2…

Atentie: Medii fara costuri - paradigma3. Dupa arhitectura aplicatie:

Medii monouser (nu acces partajat la aceeasi resursa)Medii multiuser

4. Dupa limbajul de dezvoltare aplicatii:Limbaj nativLimbaj gazda

Page 12: Baze de date

Curs 1 12Baze de date

5. Dupa limbajul de implementare cereri:Limbaje SQL (Structured Query Language) – raspandire mare;Limbaje QBE (Query By Exemple) – Paradox;Limbaje 4GL – Progress

6. Dupa interfata utilizator:Interfata alfanumerica;Interfata grafica

7. Dupa platformaPlatforma WindowsPlatforma LinuxPlatforma Unix

Page 13: Baze de date

Curs 1 13Baze de date

4. DataBase Management System (DBMS)

Nucleul central al oricarui mediu de baze de date este DataBase Management System (DBMS) sau SGBD.

DBMS consta dintr-o colectie de programe ce asigura definirea structurilor de date, stocarea datelor, manipularea acestora, vizualizarea, administrarea accesului.

Componente:1. Data Definition Language (DDL)2. Storage Definition Language (SDL)3. View Definition Language (VDL)4. Data Manipulation Language (DML)5. DataBase Administrator (DBA)

Page 14: Baze de date

Curs 1 14Baze de date

1.Data Definition Language (DDL)

Programe specializate ce permit crearea structurii bazei de date, a structurii tabelelor si a relatiilor dintre acestea. Prin DDL se genereaza entitatea baza de date si se permite modificarea structurii acesteia. Tipiurile de date permise depind de mediul de implementare. La operatiile de import/export datele sunt convertite in formatul propriu pentru destinatie.De cele mai multe ori nu se garanteaza integritatea datelor la migrarea de la un mediu la altul sau chiar la versiuni ale aceluiasi mediu.Restrictiile impuse campurilor determina anomalii la migrare.

Page 15: Baze de date

Curs 1 15Baze de date

2. Storage Definition Language (SDL)

Componenta de regula invazibila utilizatoruluiEste inclusa in nucleul mediului si asigura modalitatea de stocare a bazei in memoria externa.Structura de stocare nu asociaza pentru fiecare tabela un fisier.Modalitatea de stocare este dependenta de organizarea memoriei externe si de facilitatile de acces oferite.Lucreaza in conjunctie cu DBA pentru a restrictiona accesul nepermis la date.Utilizatorii pot utiliza propriile mecanisme de stocare fara a garanta ca sunt superioare celor folosite de mediu.La bazele de date comerciale componenta lipseste si este suplinita de resurse ale sistemului de operare.

Page 16: Baze de date

Curs 1 16Baze de date

3. View Definition Language (VDL)

Destinata vizualizarii datelor stocate in baza de date.Permite crearea de tabele view prin care se faciliteaza procesarile ulterioare.Tabelele view nu sunt tabele permanente dar pot fi utilizate similar cu acestea.Pot fi realizate cereri in care sunt invocate tabele view.Nu se regaseste in toate mediile de baze de date.

Page 17: Baze de date

Curs 1 17Baze de date

4. Data Manipulation Language (DML)

Componenta esentiala in stabilirea performantelor unui mediu de baze de dateDeternina modul de implementare a limbajului de cereri.Este singura componenta standardizata (modele SQL, QBE, 4GL)Limiteaza dimensiunea bazei de dateInclude algoritmi de optimizare a executiei cererilor.Are facilitati suplimentare la baze de date distribuite

Page 18: Baze de date

Curs 1 18Baze de date

5. DataBase Administrator (DBA)

Nu se regaseste in toate mediile de baze de dateAsigura stabilirea drepturilor de acces ale utilizatorilor la baza de dateImplementeaza concepte de securitatea datelorOpereaza impreuna cu STL.Asigura securizare intrinseca plus securizare bazata pe sistemul de operare.

Page 19: Baze de date

Baze de date Curs 2-3 1

Curs 2-3Prof. dr. ing. Dorin Carstoiu

Page 20: Baze de date

Curs 2-3 2Baze de date

Cuprins

1. Modelul datelor2. Enttitati, atribute, relatii3. Modelul entitate relatie (E-R)4.4. Memorarea datelor, fisiere, organizareMemorarea datelor, fisiere, organizare5.5. Metode de cautare pentru acces la dateMetode de cautare pentru acces la date

Page 21: Baze de date

Curs 2-3 3Baze de date

1. Modele de date, scheme si instante1. Modele de date, scheme si instante

Definitie: Se defineste modelul datelor ca un set de concepte ce poate modelul datelor ca un set de concepte ce poate fi utilizat in descrierea structurii datelorfi utilizat in descrierea structurii datelor. Prin structura bazei de datestructura bazei de datese intelege tipul datelor, legatura dintre ele, restrictiile ce trebuiesc indeplinite de date. O arhitectura de date asociata unei baze de date poate fi reprezentata pe trei niveluri, avind ca scop separarea aplicatiilor utilizatorului de baza de date fizica.

Nivel extern Grup 1 ……. Grup n

Nivel conceptual Schema conceptuala

Nivel Schema interna intern

Mediul de stocare

Page 22: Baze de date

Curs 2-3 4Baze de date

Nivelul internNivelul intern constituit din schema interna ce descrie structura de stocare fizica a datelor in baza de dateNivelul conceptualNivelul conceptual sau schema conceptuala descrie structura intregii baze de date pentru o comunitate de utilizatori. La nivelul conceptual se face o descriere completa a bazei de date, ascunzind detaliile legate de stocarea fizica, concentrindu-se asupra descrierii entitatilor, tipurilor de date, relatiilor dintre ele, precum si a restrictiilor asociate. Nivelul externNivelul extern sau nivelul vizual (utilizator), include o colectie de scheme externe ce descriu baza de date prin prisma diferitilor utilizatori. Fiecare grup utilizator descrie baza de date prin prismapropriilor interese. Exista tendinta la acest nivel ca grupuri de utilizatori sa ascunda detalii de care nu sint interesate. Si la acestnivel se pot folosi modele de implementare sau modele de nivelinalt.

Page 23: Baze de date

Curs 2-3 5Baze de date

Modele conceptuale de nivel inalt (extern, conceptual)Modele conceptuale de nivel inalt (extern, conceptual)

Cerintele pentru constructia unei baze de date aferenta unei companii, numita COMPANIE.Compania are un numar de angajati organizati pe departamente, siurmareste realizarea unor proiecte. Compania este organizata in departamente, fiecare departament are un nume, un numar de cod, un numar de angajati (minim 6), putind avea mai multe sedii.Un departament este implicat in mai multe proiecte, fiecare din ele are un nume, un numar de cod, si o singura locatie.Se pastreaza pentru fiecare angajat numele, numarul de cod (social security number - ssn), adresa, salariul, sex, data de nastere. Orice angajat este afiliat la un departament, insa poate lucra la mai multeproiecte ce nu sunt neaparat coordonate de acelasi departament. Trebuie deci stocat si numarul de ore alocate saptaminal pentrufiecare proiect. De asemenea, fiecare angajat are un sef direct, numit si supervizor.Lista persoanelor in intretinerea fiecarui angajat este importantaintrucit este utilizata la calculul impozitului, lista contine numele, sex, data nasterii.

Page 24: Baze de date

Curs 2-3 6Baze de date

2. Entitati, atribute, relatii

O entitate este un obiect real sau conceptual, cu o O entitate este un obiect real sau conceptual, cu o existenta independenta. O entitate este un obiect cu existenta independenta. O entitate este un obiect cu existenta fizica, persoana particulara, automobil, existenta fizica, persoana particulara, automobil, companie, activitate, curs universitar, etc.companie, activitate, curs universitar, etc.Orice entitate are o serie de proprietati numite si atributeatributece particularizeaza entitatea respectiva. De exemplu, pentru o entitate angajat se pot enumera o serie de atribute cum sint nume, adresa, data nasterii, sex, salariu.

Ex:e1={Nume=Vasile Ionescu, Adresa=Dreptatii - 211, Sector 6, Virsta = 40, Telefon=6621311}e2={ Nume=U.P.B., Sediu=Splaiul Independentei - 313, Rector=V. Constantinescu}

Page 25: Baze de date

Curs 2-3 7Baze de date

Atribut compus. Unele atribute pot fi impartite in parti mai mici cu semnificatie independenta. Un astfel de atribut este un atribut compuscompus. Un exemplu este cel al atributului adresa, ce poate fi subdivizat in atributele componente Oras, Judet, Cod postal, Strada. Atributele ce nu sint compuse se numesc atribute atomiceatomice. Valoarea atributelor compusee se formeaza prin concatenarea valorilor atributelor atomice.Multe atribute au valoare unica pentru o entitate particulara si sint numite atribute cu o singurasingura valoarevaloare. Spre exemplu virsta unei persoane. Exista atribute ce pot lua mai multe valori dintr-un set finit, ca de exemplu gradele didactice intr-o universitate, culoarea unuiautomobil, etc. Acestea sint atribute cu maimai multemulte valorivalori.. AtributeleAtributelederivatederivate sint atributele ce se pot determina din relatiile ce exista intreele ca de exemplu, virsta unei persoane ce se poate determina din data curenta si data de nastere.

Page 26: Baze de date

Curs 2-3 8Baze de date

O baza de date este constituita in mod uzual din grupe de entitati similare. Fiecare angajat este caracterizat de aceleasi atribute, dar fiecare entitate angajat va avea un set propriu de valori ce il caracterizeaza. Entitatile ce sint caracterizate de aceleasi atribute se numesc entitatientitati tiptip. Pentru entitatea tip ANGAJAT avind atributele Nume, Virsta, Salariu, se dau mai jos ca exemplu doua entitati particulare.

e1(Popescu Vasile, 43, 3880)e2(Dumitriu Petre, 32, 3240)

Descrierea atributelor entitatii tip este numita schema entitatii schema entitatii Uzual, o entitate tip contine un atribut ce are valori distincte pentrufiecare entitate individuala. Acest atribut este numit atrtibutatrtibut cheiecheie, iarvalorile sale pot fi utilizate pentru identificarea in mod unic a entitatilor componente. O cheie poate fi formata si din mai multe atribute, avind proprietateaca prin combinarea valorilor acestora se obtine un set de valoridistinct.

Page 27: Baze de date

Curs 2-3 9Baze de date

Pentru a se distinge, atributele compuse vor fi reprezentate intre paranteze. Se poate face prima descriere a bazei de date COMPANIEO entitate tip DEPARTAMENT avind atributele Nume, Numar, Locatie (Sediu), Manager, Data de la care are aceasta functie. Entitatea tip PROIECT cu atributele Nume, Numar, Locatie, Departamentul ce coordoneaza proiectul, cu atribut cheie oricaredintre Nume sau Numar.Entitatea tip ANGAJAT cu atributele Nume, SSN, Sex, Data nasterii, Adresa, Salariu, Departament si Supervizor. Atributele Nume si Adresa pot fi atribute compuse.O entitate tip INTRETINUT cu atributele Angajat, Nume, Sex, Data de nastere, Tip relatie (referitor la relatia dintre angajat si persoanaaflata in intretinere).In aceasta incercare de definire nu s-a tinut cont de faptul ca un angajat poate sa lucreze la mai multe proiecte, nu apare in acestcaz indicat numarul de ore pe saptamina alocate unui anumitproiect. Poate fi avut in vedere in cadrul entitatii ANGAJAT prinatributul compus Lucreaza_la ce ar avea componentele(Proiect,Ore). O alta alternativa poate fi introducerea unui atributcompus cu mai multe valori la entitatea PROIECT, atribut ce are componentele (Angajat, Ore).

Page 28: Baze de date

Curs 2-3 10Baze de date

O relatie tiprelatie tip R intre n entitati tip E1,E2,...,En este o asociatie de entitati de acelasi tip.O relatie instanta ri arata de fapt ca entitatile participante in ri sint in relatii ce corespund lumii reale. De exemplu relatia LUCREAZA_PENTRU intre entitatile tip ANGAJAT si DEPARTAMENT asociaza fiecare angajat cu departamentul pentru care acesta lucreaza. Se defineste rangul sau gradul unei relatiirangul sau gradul unei relatii tip ca numarul entitatilor tip ca numarul entitatilor tip participantetip participante.Daca relatia se stabileste intre elementele aceleiasi entitati se spune ca s-a stabilit o relatie recursivarelatie recursiva. Ca exemplu, relatia SUPERVIZOR se stabileste intre angajati si supervizor, relatie in care ambii sintmembrii aceleiasi entitati. RestrictiaRestrictia de de cardinalitatecardinalitate este marcata de numarul relatiilor instantala care o entitate poate sa participe. Se simbolizeaza prin (m:n)RestrictiaRestrictia de de participareparticipare specifica conditia de existenta a unei relatii. Pot exista restrictii de participare partiala sau totala.

Page 29: Baze de date

Curs 2-3 11Baze de date

3. Model E-R

Modelul pentru BD Companie Ini Nume Ssn Numar Nume Pren Nume Loc Adresa Salariu (1.1) (4.N) ANGAJAT Lucreaza DEPARTAMENT Sex (0.n) (1.1) (0.n) Dat_n (0.n) (1.n) Manager Ore Supervisor (0.n) (1.n) Control Relatie Lucreaza_la (1.n) (1.n) (1.1) Nume INTRETINUT Nume PROIECT Relatie Dat_n Numar Sex Loc

Page 30: Baze de date

Curs 2-3 12Baze de date

4. MEMORAREA DATELOR, FISIERE, ORGANIZARE4. MEMORAREA DATELOR, FISIERE, ORGANIZARE

Mediul de stocare poate fi impartit in doua categorii:stocarea primarastocarea primara priveste acel mediu asupra caruia se poate opera direct de catre unitatea centrala. stocarea secundarastocarea secundara se efera la toate mediile externe de memorare, cum sunt discul magnetic, banda magnetica, disc optic, caracterizate de capacitate mare, cost redus, dar cu un timp de acces mult mai mare decit memoria interna.

Justificarea stocarii externe:volumul prea mare pentru a fi stocate in memoria principala;datele ramin dupa intreruperea sursei de alimentare, adica au caracter permanent;costul pe unitatea de informatie este mult mai mic;asigura transportabilitatea intre mai multe masini

Page 31: Baze de date

Curs 2-3 13Baze de date

Informatia este stocata pe suprafata discului pe cercuri concentrice cu diametre distincte numite pistepiste ((tracktrack)). La discurile compactate pistele de aceeasi raza formeaza un cilindrucilindru. Fiecare pista este impartita in mai multe blocuriblocuri, ce apartin unui sectorsector. Marimea unui bloc este cuprinsa uzual intre 512 si 4096 octeti functie de sistemul de operare aferent. Separarea blocurilor se face prin spatii de lungime fixa numite gap interblocgap interbloc, ce contine informatii speciale de control scrise in momentul initializarii discului. Orice referire la informatiile stocate pe disc este o referire la un bloc. Adresa blocului este obtinuta prin combinarea numarului suprafetei, numarului pistei (intr-o suprafata) si numarului blocului (in cadrulunei piste).Accesul la informatiile de pe disc se face prin citirea unui bloc siaducerea acestuia in memoria principala intr-un spatiu continuunumit bufferbuffer. Cind mai multe blocuri se transfera in memoria interna, existentamai multor buffere face ca viteza de transfer sa creasca.

Page 32: Baze de date

Curs 2-3 14Baze de date

Inregistrari cu lungime fixa

Inregistrari cu lungime variabila

In general, un bloc contine mai multe inregistrari, dar pot exista inregistrari ce incep intr-un bloc si se termina in alt bloc, functie de

dimensiunea tipica a inregistrarii.

Page 33: Baze de date

Curs 2-3 15Baze de date

Daca se noteaza numarul de octeti ai unui bloc cu B, si cu R numarul de octeti ai unei inregistrari (valabil doar pentru inregistrarile de lungime fixa), numarul inregistrarilor ce pot fi stocate intr-un bloc va fi dat de realtia:

bfr = [B/R] in care,bfr - reprezinta numarul de inregistrari pe bloc (blocking factor rate)numarul de inregistrari pe bloc (blocking factor rate)[x] - reprezinta functia parte intreaga.In general R nu divide pe B, deci, daca nu sint inregistrari ce trec dintr-un bloc in altul, in fiecare bloc folosit ramine un spatiu neocupat de B-(bfr*R) octeti.

Alocarea blocurilorAlocarea contiguaAlocarea contigua sau consecutiva a blocurilorAlocareaAlocarea cu cu legaturilegaturi este metoda caracterizata de existenta unorpointeri de inlantuire a blocurilor. AlocareaAlocarea indexataindexata utilizeaza unul sau mai multe blocuri index cecontin pointeri la blocurile cu inregistrarile de date.

Page 34: Baze de date

Curs 2-3 16Baze de date

5. Metode de cautare

1. Cautare liniara (secventiala)2. Cautare binara. Se considera un fisier secvential cu N inregistrari,

ale carui chei sint in ordine crescatoare k1 < k2 <....< kN, cautarea avind ca scop gasirea inregistrarii cu cheia k.

Pas1 Stabileste l=1 si u=NPas1 Stabileste l=1 si u=NPas2 Obtine mijlocul secventei. Daca inregistrarea cu cheia k sePas2 Obtine mijlocul secventei. Daca inregistrarea cu cheia k segaseste in secventa, atunci kl<=k<=ku Daca u <= l, gaseste in secventa, atunci kl<=k<=ku Daca u <= l, inregistrarea nu exista. Stop.inregistrarea nu exista. Stop.

Daca u >l atunci i = [(l+u)/2], mijlocul aproximativ al seDaca u >l atunci i = [(l+u)/2], mijlocul aproximativ al secventeicventeiPas3 Daca k < ki, salt la pasul 4Pas3 Daca k < ki, salt la pasul 4

Daca k > ki, salt la pasul 5Daca k > ki, salt la pasul 5Altfel k = ki, inregistrare gasita. Stop.Altfel k = ki, inregistrare gasita. Stop.

Pas4 Stabileste u = iPas4 Stabileste u = i--1, salt la 1, salt la pasulpasul 22Pas5 Pas5 StabilesteStabileste l = i+1, salt la l = i+1, salt la pasulpasul 22

Page 35: Baze de date

Curs 2-3 17Baze de date

Cautare binara uniforma Cautare Shar (nod radacina [log2n)Cautare Fibonacci

HASHPointer = functie_hash(camp_hash) si indica grupul in care se gaseste inregistrarea.Utilizata atat la stocare cat si la citire

Page 36: Baze de date

Curs 2-3 18Baze de date

Hash

Grup1Grup2Grup3

Grup nOverflow 1

Overflow k

Grupuri initiale (date de valorile functiei hash)

Grupuri overflow

Page 37: Baze de date

Baze de date Curs 4 1

Curs 4Prof. dr. ing. Dorin Carstoiu

Page 38: Baze de date

Curs 4 2Baze de date

Cuprins

1. Definire index2. Tipuri de indecsi3. Index primar4.4. Index secundarIndex secundar5.5. Index de grup (cluster)Index de grup (cluster)6.6. Index multinivel (arbori B, arbori B+)Index multinivel (arbori B, arbori B+)

Page 39: Baze de date

Curs 4 3Baze de date

1. 1. Definire indexAcest capitol trateaza structurile de date aditionale, numite si indexindex, ce

sint stocate pe disc si sunt utilizate pentru accesul la inregistrari.Ideea structurii de acces indexate este similara cu cea utilizata uzual in

textele din carti. O carte, listeaza la sfirsit termenii importanti aranjati in ordine alfabetica.

La fiecare termen din aceasta lista este furnizata o succesiune a numarului paginilor la care termenul apare si este explicat.

Utilizind indexul se gaseste lista adreselor (in cazul de fata numarulpaginii) de localizare a termenului in carte.

In concluzie, scopul indexarii este de a indica adresa exacta a datei de interes.Un index este construit uzual dupa un singur cimp al fisierului numitsi cimpcimp indexindex, ce asociaza la fiecare valoare a cimpului index o listade pointeri catre toate blocurile ce contin inregistrarea cu valoareaspecificata. Avantajul indexarii rezida in faptul ca valorile in index sint ordonate, asa ca aici pot fi aplicate metode de cautare binara. Cum structura index este mult mai redusa decit tabela de date, eficienta cautarii binare in acesta structura creste.

Page 40: Baze de date

Curs 4 4Baze de date

2. Tipuri de indecsi

Index primar.Index primar. Un index primarUn index primar esteeste realizatrealizat pepe bazabaza unuiunui atributatributcheie la o tabelacheie la o tabela ordonataordonata dupadupa campulcampul cheie.cheie.IndexulIndexul secundarsecundar poatepoate fifi construitconstruit dupa un camp cheie al tabelei de dupa un camp cheie al tabelei de date, insadate, insa tabelatabela nunu esteeste ordonataordonata dupadupa acest campacest campIndex de grup.Index de grup. DacaDaca cimpul de indecsarecimpul de indecsare nunu este un cimpeste un cimp cheie, cheie, putandputand aveaavea pentrupentru maimai multemulte inregistrariinregistrari aceeasiaceeasi valoarevaloare structurastructuraaditionala de accesaditionala de acces poartapoarta denumirea de index de grup (clustering denumirea de index de grup (clustering index). La o tabela de date se pot construiiindex). La o tabela de date se pot construii oricateoricate structuri de index structuri de index de grupde grup functie de atributelefunctie de atributele utilizateutilizate pentrupentru constructiaconstructia sa.sa.Index multinivelIndex multinivel atunciatunci candcand indexul se indexul se trateazatrateaza ca o ca o tabelatabela la care la care se se construiesteconstruieste index in index in continuarecontinuare. . ExistaExista maimai multemulte metodemetode de de implementareimplementare prinprin arboriarbori B B sausau arboriarbori B+.B+.

ObsObs. . TrebuieTrebuie inteleasainteleasa diferentadiferenta majoramajora intreintre indexareindexare sisi sortaresortare. . IndexareaIndexarea esteeste o o metodametoda de de accesacces logic logic pepe candcand sortareasortarea se se referareferala la reorganizareareorganizarea tabeleitabelei pentrupentru a forma o a forma o altaalta ordineordine fizicafizica..

Page 41: Baze de date

Curs 4 5Baze de date

3. 3. Index primarUn index primarindex primar este un fisier ordonat cu inregistrari de lungime fixa

avind doua cimpuri. Primul cimp al indexului este de acelasi tip cu un cimp cheie ordonat al tabelei de date, al doilea cimp este un pointer catre un bloc de date (o adresa a blocului). Cimpul cheie de ordonare se mai numeste si cheiacheia primaraprimara a tabelei de date. Asociatia celor doua cimpuri formeaza intrarea indexintrarea index sauinregistrarea index, pentru fiecare bloc al tabelei de date. Cum tabela de date este ordonat dupa valorile cimpului index in fisierul index valoarea primului cimp este data de valoarea cimpului index de la prima inregistrare a blocului. Al doilea cimp, cel ce semnificaun pointer este de tip intreg si indica adresa blocului. Se poatedescrie structura fisierului index ca fiind formata din perechi de forma < K(i) , P(i) >, pentru i luind valori de la 1 la numarul blocurilorin care este stocata tabela de date.

Numarul total al intrarilor index in fisierul index este egal cu numarulblocurilor disc folosite pentru stocarea tabelei de date. Valoareacimpului index al primei inregistrari dintr-un bloc al tabelei de date se mai numeste si valoarevaloare de de ancorareancorare si inregistrarea, inregistrareinregistrarede de ancorareancorare a blocului.

Page 42: Baze de date

Curs 4 6Baze de date

Un index primar este un exemplu de index nondens datorita faptului ca are cite o intrare pentru fiecare bloc, fata de indexul dens ce asociaza cite o intrare pentru fiecare inregistrare a tabelei de date.

Indexul primar necesita mai putine blocuri pentru stocare datorita faptului ca;asociaza cite o singura inregistrare unui bloc de date;o inregistrare index ocupa mult mai putini octeti decit o inregistrare a tabelei de date. Ca efect cautarea intr-un fisier index este mult mai rapida decit intr-o tabela de date, putind fi utilizate si metode de cautare binara.O inregistrare pentru care valoarea cheii primare este k se gasestein blocul i daca este indeplinita conditia k(i)<=k<k(i+1). Adresablocului i este P(i) si inregistrarile in acest bloc sint fizic ordonatedupa cimpul cheie.

Page 43: Baze de date

Curs 4 7Baze de date

Exemplu de index primar

TABELA DE DATENum e Ssn … … … … … … . Dep_nr

Fisier index Abrudan C heie Poin ter ancorare bloc

Acosta Abrudan Adam A dam

Vovc Vovc

Page 44: Baze de date

Curs 4 8Baze de date

Pentru a evalua avantajele indexarii primare se considera o tabela de date ordonat dupa un cimp cheie, ce contine r=30000 inregistrari. Tabela este stocata pe disc in blocuri avind dimensiunea B=1024 octeti. Toate inregistrarile sint de lungime fixa si ocupa R=100 octetifiecare. Se calculeaza mai intii numarul de blocuri necesare pentrumemorarea tabelei de date. Astfel numarul de inregistrari pe bloc se calculeaza ca fiind bfr=[B/R]=[1024/100], obtinind bfr=10. Pentrutoata tabela se va obtine numarul de blocuri b=[r/bfr]=[30000/10]=3000. O cautare binara in tabela de date necesita aproximativ [log2b] +1 operatii de citire bloc, deci [log23000] + 1=13 blocuri.Se considera ca lungimea cimpului cheie de ordonare a fisieruluieste de 9 octeti si ca un pointer catre un bloc poate fi stocat pe 6 octeti, deci dimensiunea unei intrari index este Ri=V+P=9+6=15 octeti. Numarul intrarilor index dintr-un bloc devinebfri=[B/Ri]=[1024/15]=68, numarul de inregistrari index este dat de numarul blocurilor tabelei de date, in cazul de fata ri=3000. Ca urmare pentru stocarea indexului sint necesare un numar de blocuribi=[ri/bfri]+1=[3000/68]+1=46. Cautarea binara in fisierul index necesita aproximativ [log2bi] operatii de citire bloc, adica[log245]+1=6. In total pentru a se gasi inregistrarea va fi necesaracitirea a 7 blocuri, 6 apartinind fisierului index si unul apartinindtabelei de date, cel in care se afla sau nu inregistrarea cautata.

Page 45: Baze de date

Curs 4 9Baze de date

4. Index secundarMetoda de indexareMetoda de indexare secundara se aplica la tabelesecundara se aplica la tabele neordonate, neordonate, campul de indexarecampul de indexare fiind camp cheie.fiind camp cheie.Se consideraSe considera maimai intii un index secundarintii un index secundar dupa un cimpdupa un cimp cheie din cheie din tabela de date. Un astfel de cimptabela de date. Un astfel de cimp esteeste numitnumit sisi cheiecheie secundara a secundara a tabelei. Acesta are o intrare index pentrutabelei. Acesta are o intrare index pentru fiecarefiecare inregistrare din inregistrare din tabela de date. Se obtinetabela de date. Se obtine astfel un index dens, avind cite o intrareastfel un index dens, avind cite o intrarepentrupentru fiecarefiecare inregistrare din tabelainregistrare din tabela primara. primara. Pornind de la faptul ca indexulPornind de la faptul ca indexul secundar are structura <K(i),P(i)> si secundar are structura <K(i),P(i)> si ca inregistrarile index sintca inregistrarile index sint ordonateordonate prinprin valoareavaloarea K(i) se pot folosiK(i) se pot folosimetodele de cautaremetodele de cautare binara. Din cauza ca inregistrarile de date in binara. Din cauza ca inregistrarile de date in tabeletabele de date de date nunu sintsint ordonateordonate dupadupa cimpulcimpul cheiecheie nunu poatepoate fifiutilizatautilizata tehnicatehnica de de ancorareancorare bloc, bloc, iariar intrarileintrarile index index sintsint create create pentrupentru fiecarefiecare inregistrareinregistrare din din tavelatavela de date, de date, nunu pentrupentru bloc ca la bloc ca la indexulindexul primarprimar. . IndexulIndexul secundarsecundar ocupaocupa maimai multmult spatiuspatiu decitdecit indexulindexul primarprimar datoritadatoritanumaruluinumarului multmult maimai mare de mare de intrariintrari. . OricumOricum timpultimpul de de cautarecautare in in tabeletabele noordonatenoordonate farafara index index esteeste multmult maritmarit pentrupentru ca ca nunu se se poatepoateutilizautiliza decitdecit metodametoda cautariicautarii liniareliniare, , ceeaceea cece presupunepresupune citireacitirea peperind a rind a blocurilorblocurilor pinapina la la gasireagasirea inregistrariiinregistrarii de de interesinteres, , numarulnumarulmediumediu al al blocurilorblocurilor cititecitite fiindfiind aproximativaproximativ b/2. b/2.

Page 46: Baze de date

Curs 4 10Baze de date

PentruPentru analizaanaliza performantelor se considera ca si la indexareaperformantelor se considera ca si la indexarea primara o primara o tabela cu r=30000 inregistraritabela cu r=30000 inregistrari fiecare cu marimea R=100 octeti, cu fiecare cu marimea R=100 octeti, cu marimeamarimea unui bloc de 1024 octeti. Tabelaunui bloc de 1024 octeti. Tabela necesitanecesita pentrupentru stocare stocare b=3000 blocuri, iar la o cautareb=3000 blocuri, iar la o cautare liniara se citesc b/2 deci 1500 de liniara se citesc b/2 deci 1500 de blocuri. Se considera un index secundarblocuri. Se considera un index secundar pentru un cimppentru un cimp neordonat neordonat al fisierului, cu valoareaal fisierului, cu valoarea reprezentatareprezentata pe V=9 octetipe V=9 octeti si cu P=6 octeti. si cu P=6 octeti. DimensiuneaDimensiunea uneiunei inregistrari din fisierul index esteinregistrari din fisierul index este Ri=V+P=9+6=15 Ri=V+P=9+6=15 octeti. Numarul de inregistrari index pe bloc vaocteti. Numarul de inregistrari index pe bloc va fifi bfri=[1024/15]=68. bfri=[1024/15]=68. Cum numarulCum numarul inregistrarilor index esteinregistrarilor index este egal cu numarul egal cu numarul inregistrarilorinregistrarilor tabeleitabelei de date, in de date, in cazulcazul de de fatafata 30000 se 30000 se obtineobtinebi=[ri/bfri]+1=[30000/68]+1=443. bi=[ri/bfri]+1=[30000/68]+1=443. FiindcaFiindca fisierulfisierul index index secundarsecundar esteesteordonatordonat, , cautareacautarea uneiunei inregistrariinregistrari se se poatepoate face face prinprin matodematode de de cautarecautare binarabinara necesitindnecesitind citireacitirea a [loga [log22bi]+1=[logbi]+1=[log22442]+1=9 442]+1=9 blocuriblocuri. . La La celecele 9 9 blocuriblocuri maimai esteeste necesarnecesar sasa se se adaugeadauge un bloc un bloc cecereprezintareprezinta bloculblocul de date in de date in interiorulinteriorul caruiacaruia se se procedeazaprocedeaza la la cautarecautare liniaraliniara..

Page 47: Baze de date

Curs 4 11Baze de date

Exemplu index secundar

TABELA DE DATEDep_nr Nume Ssn ……………….

Fisier index 5 Cheie Pointer 2 ancorare bloc 1

102 1 2 31 3 1042 4 3 5 312

1042 513 4

Page 48: Baze de date

Curs 4 12Baze de date

5. Index de grup (cluster)5. Index de grup (cluster)

Astfel de indexi sint folositi cind inregistrarile tabelei de date sintordonate fizic dupa un cimp noncheie, sau neordonate dupa un camp noncheie.

Tabela ordonata

T A BE LA D E D A T ED ep_n r N um e Ssn … … … … … … .

F isier in dex 1 C h eie Poin ter 1 an corare bloc 1

2 1 2 2 3 3 4 3 5 4

102 102

Page 49: Baze de date

Curs 4 13Baze de date

Tabela nordonata

TABELA DE DATEDep_nr Nume Ssn ……………….

Fisier index 1 Cheie Pointer 21 ancorare bloc 3

7 1 3 3 7 21 21 23

1234 3

Page 50: Baze de date

Curs 4 14Baze de date

Sint posibile mai multe optiuni de implementare a indexuluisecundar. Se dau mai jos citeva din aceste posibilitati.

1. Includerea mai multor intrari in fisierul index ce au aceeasi valoarepentru cimpul K(i), cite una pentru fiecare inregistrare a tabelei de date.

2. Includerea in fisierul index a unor inregistrari cu lungime variabila, cu un cimp al valorii K(i) si o lista a pointerilor <P(i,1),P(i,2),...,P(i,j)> ce indica toate blocurile ce contininregistrari ce au valoarea cimpului K(i). Desigur ca la acesteoptiuni algoritmii de cautare se modifica in mod corespunzator.Varianta cea mai des utilizata este de a folosi intrari index de lungime fixa, cu o singura intrare pentru fiecare valoare distincta a cimpului index. Pointerul P(i) indica un nou nivel de redirectarecontinind pointeri multiplii catre toate blocurile ce contininregistrari cu valoarea K(i). Deci intrarea index are structura<K(i),P(i)>, iar blocurile inregistrarilor pointer au structura<P(i,1),P(i,2),...,P(i,j)>. Daca inregistrarile cu valoarea cimpuluiK(i) ocupa mai mult de un bloc se poate utiliza o lista de inlantuireblocuri.

Page 51: Baze de date

Curs 4 15Baze de date

6. Index multinivel (arbori B, arbori B+)Index multinivel (arbori B, arbori B+)

Metodele de indexare descrise pina in prezent opereaza cu un fisier index ordonat. Aupra fisierului index se aplica metode de cautarebinara pentru localizarea inregistrarilor cu valoarea specificata in cimpul index. Cautarea binara cere aproximativ log2bi operatii de acces la blocuri pentru un index cu bi blocuri. Se observa ca la fiecare pas algoritmul reduce numarul inregistrarilor pe care le exploreaza la jumatate (prin impartirea la 2). Esenta metodei de indexare multinivel este de a reduce de bfri ori, la fiecare pas, numarul inregistrarilor din index ce sint explorate, pornind de la faptul ca de regula bfri este mai mare decit 2. Valoarea bfri estenumita si ""fanfan--outout"" al indexului multinivel si va fi notata cu fo. Astfel intr-un index multinivel numarul operatiilor de acces la blocuri este de aproximativ [logfobi], care este mult mai mica decitin cazul cautarii binare daca fo este mai mare decit 2.

Page 52: Baze de date

Curs 4 16Baze de date

Exemplu de index multinivel

TABELA DE DATEDep_nr Nume Ssn ……………….

Top index Index 1 Cheie Pointer nivel 1 21 ancorare bloc 22

1 7 1 3 21 4 3

7 4

2122

1032

Page 53: Baze de date

Curs 4 17Baze de date

Arbori B

Un arbore B de ordin p, construit dupa un cimp cheie al fisierului de date satisface urmatoarele restrictii:1. Fiecare nod intern in arborele B are structura<P1,<K1,Pr1>,P2,<K2,Pr2>,...,<Kq-1,Prq-1>,Pq>

cu q<=p, in care, Pi este un pointer la un nou nod arbore numit si pointer arborepointer arbore, pointerii Pri fiind pointeri datapointeri data, pointeri catre blocuri in tabela de date ce contin inregistrarea cu cheia k.2 In fiecare nod K1<K2<....<Kq-1

Valoarea inregistrarii cu cheia X in subarborele punctat de Pi este data de conditiile Ki-1<X<Ki pentru 1<i<q, X<Ki pentru i=1 si Ki-1<X pentru i=q4. Fiecare nod are cel mult p pointeri arbore5. Fiecare nod exceptind radacina si nodurile frunza au cel putin[p/2] pointeri arbore. Nodul radacina are cel putin doi pointeri.6. Un nod cu q pointeri arbore, q<=p, contine q-1 valori ale cimpuluicheie, deci q-1 pointeri data7. Toate nodurile frunza sint la acelasi nivel, au aceeasi structuraexceptind faptul ca toti pointeri arbore Pi sint nuli.

Page 54: Baze de date

Curs 4 18Baze de date

Structura nod intern

< P1 , K1 , Pr1, P2... , Ki-1 , Pri-1 , Pi, Ki , .. , Kq-1 , Prq-1, Pq >

Index X X X -------- ----------- ---------- X<K1 Ki-1<X<Ki Kq-1<X

Pointer arbore Pointer data

Page 55: Baze de date

Curs 4 19Baze de date

Exemplu de arbore B

* 5,o * 8,o * o pointer data * pointer arbore

pointer null

1,o 3,o 6,o 7,o 9,o 12,o

Page 56: Baze de date

Curs 4 20Baze de date

Arbori B+1. Fiecare nod intern are structura

<P1,K1, P2,K2,...,Pq-1,Kq-1, Pq>unde q<=p si fiecare Pi reprezinta un pointer arbore.

2. In fiecare nod este indeplinita conditiaK1<K2<....<Kq-1, q<=p3. Pentru toate valorile cimpului de cautare X in subarborele punctat prin Pi se indeplineste relatia

Ki-1<X=Ki pentru 1<i<q, X<=Ki pentru i=1 si Ki-1<X pentru i=q4. Fiecare nod intern are cel mult p pointeri arbore.5. Fiecare nod intern exceptind radacina are cel putin [p/2] pointeri arbore. Nodul radacina are cel putin doi pointeri arbore daca este un nod intern si q<=p pointeri data daca este nod frunza.6. Un nod intern cu q pointeri, q<=p, are q-1 valori ale cimpului de cautare.

Pentru nodurile frunza sint indeplinite urmatoarele restrictii1. Fiecare nod frunza este de forma

<<K1,Pr1>,<K2,Pr2>,...,<Kq-1,Pq-1>,Pnext>unde q<=p, fiecare Pri este un pointer data si Pnext indica urmatorul nod frunza

al arborelui B+.2. In fiecare nod frunza este indeplinita conditia

K1<K2<,...,<Kq-1, q<=p

Page 57: Baze de date

Curs 4 21Baze de date

Arbore B+

< P 1 , K 1 , P 2 . . . , K i-1 , P i , K i , . . , K q -1 , P q , . . . >

In d ex X X X - - - - - - - - - - - - - - - - - - - - - - - - - - - - - X ≤K 1 K i-1< X ≤K i K q -1< X

< K1 , Pr1, K2... , Ki-1 , Pri-1 , Ki , .. , Kq-1 , Prq-1, Pnest >

Pointer data Pointer spre nod frunza

Page 58: Baze de date

Curs 4 22Baze de date

Operare arbore B+

A rbore in itia l 5 o 8 o in sera re 1

* 5 * in sera re 3 si 7

1 o 5 o 8 o

* 3 * 5 *

1 o 3 o 5 o 7 o 8 o

Page 59: Baze de date

Baze de date Curs 5 1

Curs 5Prof. dr. ing. Dorin Carstoiu

Page 60: Baze de date

Curs 5 2Baze de date

Cuprins

1.1. Modelul relational al datelor si algebra relationalaModelul relational al datelor si algebra relationala2. Operatia SELECT3. Operatia PROJECT4.4. Set teoretic (REUNIUNE, INTERSECTIE, Set teoretic (REUNIUNE, INTERSECTIE,

DIFERENTA, PRODUS CARTEZIAN)DIFERENTA, PRODUS CARTEZIAN)5.5. Operatia JOINOperatia JOIN6.6. FunctiiFunctii7.7. ExempleExemple

Page 61: Baze de date

Curs 5 3Baze de date

1. Modelul relational al datelor si algebra relationala1. Modelul relational al datelor si algebra relationalaIn terminologia relationala, un rind al tabelei este denumit nn--upluuplu, o coloana poarta denumirea de atributatribut iar tabela se numeste relatierelatie. Tipul datelor descriind tipul valorilor ce pot apare in fiecare coloana este numit si domeniudomeniu. Un domeniudomeniu D este reprezentat de un set de valori atomice.Este foarte util sa se specifice pentru un domeniu un nume relevant pentru interpretarea valorilor datelor, ca de exemplu pentru relatia aferenta entitatilor student, numele relatiei poate fi asignat la valoarea STUDENT, iar atributele sale ca in exemplul de mai jos:

NUMENUME :Setul numelor persoanelorNR_TELNR_TEL :Numarul de telefon reprezentat pe 8 digiti DEP_NRDEP_NR :Numarul departamentului la care studentul studiaza

Conceptul matematic ce acopera modelul relational este produsul cartezian al listei domeniilor. Un domeniu este un simplu set devalori ca de exemplu setul intregilor. Produsul cartezian al domeniilor D1,D2,...Dn sau D1xD2,x..xDn este setul tuturor n_uplurilor (v1,v2,...,vn) in care vi∈Di. O relatie este reprezentata de orice subset al produsului cartezian al unuia sau mai multor domenii.

Page 62: Baze de date

Curs 5 4Baze de date

O O schema relatie R schema relatie R data prin R(A1,A2,...,An) reprezinta un set al data prin R(A1,A2,...,An) reprezinta un set al atributelor Ai. Fiecare atribut Ai joaca rolul numelui acelui doatributelor Ai. Fiecare atribut Ai joaca rolul numelui acelui domeniu meniu Di in relatia R. Di este Di in relatia R. Di este domeniuldomeniul lui Ai si se noteaza lui Ai si se noteaza dom(Ai)dom(Ai). O . O schema relatie este utilizata pentru descrierea relatiei R, undeschema relatie este utilizata pentru descrierea relatiei R, unde R R este este numelenumele relatiei. Se defineste relatiei. Se defineste gradul relatiei gradul relatiei ca fiind numarul ca fiind numarul atributelor n ale schemei relatiei. Fie de exemplu o schema relatributelor n ale schemei relatiei. Fie de exemplu o schema relatie atie de grad 7, ce descrie studentii intrde grad 7, ce descrie studentii intr--o universitate:o universitate:

STUDENT(Nume, SSN, Telefon, Adresa_stabila, STUDENT(Nume, SSN, Telefon, Adresa_stabila, Adresa_flotanta, Virsta, Directie_specializare)Adresa_flotanta, Virsta, Directie_specializare)O relatie r(sau O relatie r(sau relatie instantarelatie instanta) a unei relatii R(A1,A2,...,An) notata ) a unei relatii R(A1,A2,...,An) notata prin r(R), se reprezinta ca un set al nprin r(R), se reprezinta ca un set al n--uplurilor ti, asa ca uplurilor ti, asa ca r=(t1,t2,...,tm). Fiecare nr=(t1,t2,...,tm). Fiecare n--uplu t este o lista ordonata de n valori uplu t este o lista ordonata de n valori t=<v1,v2,...,vn>, unde fiecare valoare vi pentru i=1,n este un t=<v1,v2,...,vn>, unde fiecare valoare vi pentru i=1,n este un element al dom(Ai) sau o valoare speciala nula. Se utilizeaza deelement al dom(Ai) sau o valoare speciala nula. Se utilizeaza deasemenea in mod curent termenii asemenea in mod curent termenii relatie intensivarelatie intensiva pentru R pentru R respectiv respectiv relatie extensivarelatie extensiva pentru relatia instanta r(R).pentru relatia instanta r(R).Se poate da pentru o relatie urmatoarea definitie:Se poate da pentru o relatie urmatoarea definitie:O relatie r(R) este un subset al produsului cartezian al domeniiO relatie r(R) este un subset al produsului cartezian al domeniilor ce lor ce defineste Rdefineste R

r(R)r(R)⊂⊂ (dom(A1),dom(A2),...,dom(An))(dom(A1),dom(A2),...,dom(An))

Page 63: Baze de date

Curs 5 5Baze de date

Produsul cartezian contine toate combinatiile domeniilor. Deci, notind numarul valorilor sau cardinalitatea domeniului D prin [D]cardinalitatea domeniului D prin [D], si presupunind ca toate domeniile sint finite, numarul total al n-uplurilor in produsul cartezian va fi dat de

[dom(A1)]*[dom(A2)]*....*[dom(An)]Caracteristici ale relatiilor

ordinea nordinea n--uplurilor intruplurilor intr--o relatieo relatie. Se spune despre doua relatii in care ordinea atributelor este diferita ca sint identice.ordonarea valorilor intrordonarea valorilor intr--un nun n--upluuplu. Un n-uplu este o lista ordonata de n valori. Desi, la nivel logic ordinea atributelor si valorile lor nu este importanta, trebuie mentinuta corespondenta intre atribute si valori. O relatie r a schemei relatiei R=(A1,A2,...,An) este un set finit de n-upluri r=(t1,t2,...,tm) unde fiecare n-uplu ti este o forma impachetata dupa R, cu D o reuniune a domeniilor atributelor, D=dom(A1)∪dom(A2) ∪....∪dom(An). In aceasta definitie t(Ai) este o valoare din dom(Ai) pentru i=1,n. valorile intrvalorile intr--un nun n--upluuplu. Fiecare valoare in n-uplu este o valoare atomica ce nu poate fi divizata in fragmente. Daca sint atribute care nu au valori aplicabile la anumite n-upluri, atunci va fi reprezentata o valoare speciala numita atributul nullatributul null.interpretarea unei relatiiinterpretarea unei relatii. O schema relatie poate fi interpretata ca o declaratie sau un tip de asertiune.

Page 64: Baze de date

Curs 5 6Baze de date

Se defineste schema bazei de date relationale Sschema bazei de date relationale S ca un set al schemei relatiilor S=[R1,R2,...,Rm] impreuna cu un set al restrictiilor de integritate. Se defineste instanta unei baze de dateinstanta unei baze de date relationale ca un set al relatiilor instanta [r1,r2,...,rm]. Se da mai jos, schema bazei de date relationale COMPANIE, avind relatiile ANGAJAT, DEPARTAMENT, LOC_DEP, PROIECT, LUCREAZA_LA, INTRETINUT.ANGAJAT (Nume, Ini, Pren, Ssn, Dat_Na, Adr, Sex, Salariu, Sssn, D_Nr) DEPARTAMENT(Dep_Nume, Dep_Nr, Dep_Manager, Dat_Inc_Manager)LOC_DEP(Dep_Nr, Dep_Loc )PROIECT(P_Nume, P_Nr, P_Loc, Dep_Nr)LUCREAZA_LA(A_Ssn, P-Nr , Ore)INTRETINUT(A_Ssn , C_Nume, Sex, Data_N, Relatie)

Page 65: Baze de date

Curs 5 7Baze de date

2. Operatia SELECTOperatia SELECT

Relatia ce rezulta dupa operatia SELECT contine aceleasi atribute cu relatia initiala, asupra careia se face operatia. Se poate spune ca in general operatia SELECT are urmatoarea sintaxa:

S<conditie selectie>(<nume relatie>)Expresiile booleene specificate in <conditie selectie>, fac parte din

clase de forma:<nume atribut> <operatie comparatie> <valoare constanta>

sau <nume atribut> <operatie comparatie> <nume atribut>

unde, <nume atribut> este numele unui atribut al relatiei definite; <operatie

comparatie> este data de unul din operatorii {=,<,<=,>,>=,#}, iar <valoare constanta> este o constanta.

Exemple:SD_NR=4(ANGAJAT)SSALARIU>4000(ANGAJAT)

Page 66: Baze de date

Curs 5 8Baze de date

S(D_NR=3 .AND. SALARIU>4000) .OR. (D_NR=4)(ANGAJAT)Semnificatia operatiilor booleene este:

(cond1 .AND. cond2) adevarata daca ambele conditii sint adevarate, altfel falsa.(cond1 .OR. cond2) este adevarata daca fie conditia 1, fie conditia 2 este adevarata.(.NOT. cond) este adevarata atunci cind conditia este falsa.Faptul ca operatia se aplica la o singura relatie face ca operatorul de selectie sa fie unarunar. De asemenea, operatia se aplica la fiecare n_uplu individual, iar gradul relatiei rezultante in urma unei operatii SELECT este egal cu gradul relatiei initiale R. Operatia SELECT este comutativacomutativa adica

S<cond1>(S<cond2>(R))=S<cond2>(S<cond2>(R))O cascada de operatii SELECT se pot combina utilizind operatorul

AND.S<cond1>(S<cond2>(...(S<condn>(R))..)=S<cond1>.AND.<cond2>

.AND.…………….AND. <condn>(R)

Page 67: Baze de date

Curs 5 9Baze de date

3. Operatia PROJECTOperatia PROJECTDaca se considera o baza de date ca o tabela atunci operatia Daca se considera o baza de date ca o tabela atunci operatia SELECT selecteaza acele rinduri din tabela ce corespund conditieSELECT selecteaza acele rinduri din tabela ce corespund conditiei i de selectie. Operatia PROJECT este utilizata pentru a selecta nude selectie. Operatia PROJECT este utilizata pentru a selecta numai mai acele coloane ce corespund listei atributelor specificate. Se acele coloane ce corespund listei atributelor specificate. Se presupune ca se doreste obtinerea pentru angajatii companiei a presupune ca se doreste obtinerea pentru angajatii companiei a numelui si prenumelui. numelui si prenumelui.

PPNUME, PRENNUME, PREN(ANGAJAT)(ANGAJAT)Se observa ca forma generala a unei operatii PROJECT esteSe observa ca forma generala a unei operatii PROJECT estePP<lista atribute><lista atribute>(<nume relatie>)(<nume relatie>)

unde,unde,P este simbolul utilizat pentru operatia PROJECT;P este simbolul utilizat pentru operatia PROJECT;<lista atribute> reprezinta lista atributelor relatiei specifica<lista atribute> reprezinta lista atributelor relatiei specificate prin te prin <nume relatie>.<nume relatie>.Operatia PROJECT nu este in general comutativa. Aplicarea unei succesiuni de operatii PROJECT, daca succesiunea este valida, este echivalenta cu o singura operatie PROJECT. P<lista1>(P<lista2>(R))=P<lista1>(R)Operatia este valida numai daca lista2 contine toate atributele din lista1

Page 68: Baze de date

Curs 5 10Baze de date

Se considera ca exemplu, obtinerea relatiei ce contine numele, prenumele si salariul angajatilor ce lucreaza in departamentul 3. Pentru aceasta este necesara aplicarea atit a relatiei SELECT cit si a relatiei PROJECT. Aplicarea pe rind a operatiilor SELECT si PROJECT duce la crearea unei relatii intermediare notata in exemplul de mai jos REL1.

REL1= SD_NR=3(ANGAJAT)REZULTAT = PNUME,PREN,SALARIU(REL1)

A doua varianta, cea a utilizarii unei operatii compuse, asiguraobtinerea relatiei rezultat fara o relatie intermediara.

REZULTAT = PNUME,PREN,SALARIU(SD_NR=3(ANGAJAT))Aplicarea secventelor complexe de operatii poate rezolva si problema redenumirii atributelor in relatiile intermediare. Astfel, redenumirea atributelor in relatia rezultat se exemplifica in urmatorul exemplu

TEMP = SD_NR=5(ANGAJAT)REZ(P_NUME,U_NUME,SALARIU) = PNUME,PREN,SALARIU(TEMP)

Page 69: Baze de date

Curs 5 11Baze de date

4. Setul teoretic al operatiilor4. Setul teoretic al operatiilor

Prin operatii matematice se inteleg operatiile standard cum sintREUNIUNE, INTERSECTIE, DIFERENTA. Operatiile din aceasta categorie se aplica asupra a doua relatii, deci fac parte din categoria operatiilor binarebinare. Ca exemplu, se presupune ca se doreste lista numerelor de cod (Social Security Number) a tuturor angajatilor ce lucreaza in departamentul 3 sau sint supervizori angajati ai departamentului 3. O modalitate de realizare este data mai jos:

REL1= SD_NR=3(ANGAJAT)REL2 = PSSN(REL1)REL3(Ssn) = PSSSN(REL1)REZ = REL2 ∪ REL3

Aplicarea operatiei REUNIUNE asupra unei baze de date relationale nu este posibila intotdeauna. Referitor la operatiile de mai sus este necesar ca cele doua relatii sa aiba acelasi tip de n-upluri conditie numita si compatibilitatea reuniuniicompatibilitatea reuniunii.

Page 70: Baze de date

Curs 5 12Baze de date

Se spune ca doua relatii R(A1,A2,...An) si S(A1,A2,...,An) sint compatibile reuniuniicompatibile reuniunii daca au acelasi grad n, si daca dom(Ai) este identic cu dom(Bi) pentru 1<=i<=n. Altfel spus, cele doua relatii au acelasi numar de atribute si atributele caracterizeaza acelasi domeniu.Fie doua relatii R si S. Se pot defini operatiile teoretice pe cele doua relatii astfel:REUNIUNEA este operatia al carei rezultat include toate n-uplurile ce sint fie in R, fie in S, fie in ambele relatii R si S. Executia elimina n-uplurile duplicat, relatia rezultanta se noteaza prin R∪S.INTERSECTIA este operatia ce asociaza relatiei R∩S acele n-upluri ce sint continute atit in relatia R cit si in relatia S.DIFERENTA notata R\S contine toate n-uplurile ce se gasesc in relatia R si nu se gasesc in relatia S.

Page 71: Baze de date

Curs 5 13Baze de date

Rezultatul produsului cartezian intre relatiile R(A1,A2,..,An) si S(B1,B2,...,Bm) este o relatie Q(A1,A2,..,An,B1,B2,..,Bm) avind m+n atribute in ordinea specificata. In relatia rezultanta se combina un n-uplu al relatiei R cu fiecare n-uplu al relatiei S, asa ca, daca R are nr n-upluri si S are ns n-upluri, atunci Q=RxS va avea nr*ns n-upluri. Ca exemplu, se considera cerinta de obtinere pentru fiecare angajata de sex feminin lista numelor persoanelor pe care le are in intretinere. O posibilitate este:

REL1 = SSEX='F'(ANGAJAT)REL2 = PNUME,PREN,SSN(REL1)REL3 = REL2 x INTRETINUT (produs cartezian)REL4 = SSSN=A_SSN(REL3)REZ = PNUME,PREN,C_NUME(REL4)

REL3 este rezultatul aplicarii produsului cartezian intre REL2 si relatia INTRETINUT.

Page 72: Baze de date

Curs 5 14Baze de date

5. Operatia JOIN

Operatia JOIN este utilizata pentru combinarea n-uplurilor relationale din doua relatii intr-o singura relatie. Este una din operatiile specifice bazelor de date relationale cu mai mult de o relatie, permitind construirea de noi relatii pe baza celor existente. Se considera ca se doreste sa se obtina numele managerului fiecarui departament. Pentru aceasta este necesara combinarea n-uplurilor ANGAJAT cu n-uplurile DEPARTAMENT si selectarea acelora pentru care atributele Ssn si Dep_manager au valori egale. Aceasta poate fi realizata prin utilizarea operatiei JOIN, astfel:

REL1 = DEPARTAMENT >< DEP_MANAGER=SSNANGAJATREZ = PDEP_NUME,NUME,PREN(REL1)

In concluzie operatia JOIN intre doua relatii R(A1,A2,..,An) si S(B1,B2,..,Bm) are structuraR><<cond join>S

avind ca rezultat o relatie Q cu n+m atribute Q(A1,A2,..,An,B1,..Bm) in aceasta ordine, fiind similara cu produsul cartezian dar, sint retinute numai acele n-upluri ce satisfac in plus conditia de join.

Page 73: Baze de date

Curs 5 15Baze de date

Structura tipica a unei conditii join este:<conditie> AND <conditie> AND <conditie> AND..AND <conditie>unde, fiecare conditie este de forma Ai@Bi, cu Ai atribut al relatiei R si

Bi atribut al relatiei S. Sigur ca aceasta conditie nu poate fi adevarata decit daca atributele Ai si Bi reprezinta acelasi domeniu. Operatia notata simbolic @ esta asimilata cu una din operatiile {=,<,<=,>=,>,#}. Se remarca faptul ca n-uplurile la care atributele JOIN sint nulle nu apar la rezultat.

Cele mai obisnuite operatii JOIN invoca numai conditii de egalitate, motiv pentru care operatia se va numi EQUIJOIN. In aceasta situatie se obtin la rezultat mai multe perechi de atribute care au aceeasi valoare, ca urmare a indeplinirii egalitatii. Intrucit relatia obtinuta este superflua, o noua operatie numita si NATURAL JOIN elimina al doilea atribut din conditia de egalitate. Se va nota NATURAL JOIN cu * avind semnificatia de EQUIJOIN urmat de eliminarea atributelor superflue. Se da mai jos un exemplu

PROIECT_DEPART = PROIECT * DEP_NR=DEP_NRDEPARTAMENT

Page 74: Baze de date

Curs 5 16Baze de date

O oparatie ceruta des in baze de date este DIVISION, operatie cedoreste sa dea raspuns la intrebari de tipul "care este numele angajatilor ce lucreaza la aceleasi proiecte ca si angajatul Popescu Vasile ?". Pentru rezolvare se procedeaza astfel:

1. se determina lista proiectelor la care lucreaza Popescu Vasile, obtinind o noua relatie REL2

REL1 = SNUME='POPESCU' .AND. PREN='VASILE'(ANGAJAT)REL2 = PP_NR(LUCREAZA_LA * A_SSN=SSNREL1)

2. se creeaza relatia ce include perechea atributelor <P_NR, A_SSN>, pentru angajatii ce lucreaza la proiectul ce are numarul <P_NR>

REL3 = PP_NR,A_SSN(LUCREAZA-LA) 3. in final se aplica relatia DIVISION la doua relatii, ce va identifica

angajatii doriti.REL4(SSN) = REL3+REL2REZ = PNUME,PREN(REL4 * ANGAJAT)

Page 75: Baze de date

Curs 5 17Baze de date

JOIN aditionalJOIN aditionalOperatia JOIN se aplica doar la n-uplurile ce satisfac conditia de join. Ca exemplu, la NATURAL JOIN intre relatiile R si S, toate n-uplurile ce au atribute identice in cele doua relatii apar in rezultat, iar cele ce nu satisfac conditia sint eliminate din rezultat. Un set de operatii numit si JOIN ADITIONAL este creat pentru pastrarea tuturor n-uplurilor din R , S sau din ambele. De exemplu, pentru lista tuturor angajatilor si lista departamentelor la care sint manageri se poate aplica o operatie JOIN ADITIONAL STING (LEFT OUTER JOIN), operatie cu simbulul ]><, care va retine fiecare n-uplu din prima relatie sau relatia stinga R, iar acolo unde conditiile join nu sint adevarate atributele lui S in rezultat au valori nule.REL1 = (ANGAJAT) ]>< SSN=DEP_MANAGER(DEPARTAMENT)REZ = PNUME,INI,PREN,DEP_NUME(REL1)Similar pentru JOIN ADITIONAL DREPT

Page 76: Baze de date

Curs 5 18Baze de date

6. Functii

Primul tip de cereri ce nu pot fi exprimate prin algebra relationala sint cererile specificind functii matematice agregate asupra colectiilor de valori din baza de date. De exemplu, se presupunecererea de calcul a marimii salariului tuturor angajatilor. Principalele functii ce pot fi aplicate valorilor numerice sint SUM, AVERAGE,MAXIMUM, MINIMUM, pe cind asupra n-uplurilor se poate aplica functia COUNT. Oricare din aceste functii se aplica la toate n-uplurile unei relatii.O a doua categorie de cereri se refera la aplicarea unor functiiagregat independente pentru fiecare grup unor grupuri de n-upluri. Ca exemplu, se considera grupul angajatilor care lucreaza in cadrul aceluiasi departament, particularizati prin valoarea atributului D_nr, pentru care se poate determina marimea salariului asociat.

Page 77: Baze de date

Curs 5 19Baze de date

O operatie de tip functie poate fi definita pentru specificarea acestor tipuri de cereri<grupul atributelor>F<lista functii>(<nume relatie>)

unde,<grupul atributelor> este o lista a atributelor relatiei specificate prin <nume relatie>;<lista functii> se refera la o lista cu perechii <functie>,<atribut>.

Astfel, se considera baza de date COMPANIE la care se doreste sa se obtina pentru fiecare departament, numarul angajatilor, valoareasalariilor angajatilor departamentului. Relatia rezultata are atributele D_NR, NUMAR_ANGAJATI, MEDIE_SALARIU obtinute prin aplicarea functiilor COUNT si AVERAGE in conjunctie cu atributulde grupare.R(D_NR, NUMAR_ANGAJATI, MEDIE_SALARIU) =

D_NRFCOUNT SSN, AVERAGE SALARIU(ANGAJAT)

Page 78: Baze de date

Curs 5 20Baze de date

Daca in schimb nu se specifica atributele de grup atunci functia se aplica la toate n-uplurile relatiei, obtinind o relatie cu un singur n-uplu, De exemplu aplicarea operatieiFCOUNT SSN, AVERAGE SALARIU(ANGAJAT)

Page 79: Baze de date

Curs 5 21Baze de date

7. Exemple

Ex.1. Sa se gaseasca adresa tuturor angajatilor ce lucreaza pentru departamentul 'Cercetare,.CERCET_DEPART = SDEP_NUME='Cercetare'(DEPARTAMENT)

CERCET_DEPART_ANGAJAT = (CERCET_DEPART ><D_NR=DEP_NR ANGAJAT)REZ = PNUME,INI,PREN,ADR(CERCET_DEPART_ANGAJAT)

Ex.2. Pentru fiecare proiect localizat in 'Bucuresti', se cere lista numarului proiectului, numarul departamentului coodornator, numele managerului departamentului, adresa si data sa de nastere.BUC_PROIECT = SP_LOC='BUCURESTI'(PROIECT)COORD_DEP = (BUC_PROIECT >< DEP_NR=DEP_NRDEPARTAMENT)PROIECT_DEP_MANAGER = (COORD_DEP >< DEP_MANAGER=SSNANGAJAT)REZ = PP_NR,DEP_NR,NUME,INI,PREN,ADR,DAT_NA(PROIECT_DEP_MANAGER)

Page 80: Baze de date

Curs 5 22Baze de date

Ex.3. Sa se gaseasca numele angajatilor care lucreaza la toate proiectele controlate de departamentul cu numarul 5.DEP5_PROIECT(P_NR) = PP_NR(SDEP_NR=5(PROIECT)ANG_PROIECT(SSN,P_NR) = PA_SSN,P_NR(LUCREAZA_LA)REZ1 = ANG_PROIECT + DEP5_PROIECTREZ = PNUME,INI,PREN(REZ1*ANGAJAT)

Ex.4. Sa se gaseasca lista tuturor angajatilor care au in intretinere doua sau mai multe persoane. In mod strict aceasta nu poate fi rezolvata prin operatii ale algebrei relationale. Pentru aceasta se utilizeaza functia COUNT ce nu face parte din operatiile algebrei relationale. In formularea de mai jos s-a presupus ca persoanele in intretinerea unui anumit angajat au nume distincte.REL1(SSN,NR_DE_INTRETINUTI) = A_SSN F COUNTC_NUME(INTRETINUT)REL1 = SNR_DE_INTRETINUTI>2(REL1)REZ = P NUME,INI,PREN (REL1 * ANGAJAT)

Page 81: Baze de date

Curs 5 23Baze de date

Ex.5. Sa se gaseasca lista numelor angajatilor care nu au persoane in intretinere.REL1 = PSSN (ANGAJAT)ANG_CU_INTRETINUT = PA_SSN(INTRETINUT)ANG_FARA_INTRETINUT = (REL1 - ANG_CU_INTRETINUT)REZ = PNUME,INI,PREN(ANG_FARA_INTRETINUT * ANGAJAT)

Ex.6. Sa se gaseasca lista managerilor care au cel putin o persoana in intretinere.REL1(SSN) = PDEP_MANAGER(DEPARTAMENT)ANG_CU_INTRETINUT = PA_SSN(INTRETINUT)MANAGER_CU_INTRETINUT = (REL1 II ANG_CU_INTRETINUT)REZ = PNUME,INI,PREN(MANAGER_CU_INTRETINUT * ANGAJAT)

Page 82: Baze de date

Baze de date Curs 6 1

Curs 6Prof. dr. ing. Dorin Carstoiu

Page 83: Baze de date

Curs 6 2Baze de date

Cuprins

1.1. Limbaje de cereri in modelul relationalLimbaje de cereri in modelul relational2. Model intern (model de stocare) 3. Definirea datelor in SQL4.4. Restrictii de integritate in definirea bazei Restrictii de integritate in definirea bazei

de datede date5.5. Modificare structura tabeleModificare structura tabele6.6. Structura fraza SQLStructura fraza SQL

Page 84: Baze de date

Curs 6 3Baze de date

1. Limbaje de cereri in modelul relational1. Limbaje de cereri in modelul relationalIn cursul anterior s-au prezentat principalele operatii ale algebrei relationale. In acest curs se incepe prezentarea unui limbaj de implementare a acestor operatii intr-o baza de date relationala. In general aceste operatii sint implementate intr-un limbaj de nivel inalt, operatiile se aplica la intreaga relatie, cererea unei operatii a algebrei relationale este scrisa ca o secventa de operatii ce produc rezultatul dorit. In algebra relationala atunci cind se specifica o operatie complexa, utilizatorul are responsabilitatea ordinii de executie a operatiilor. Cele mai multe DBMS contin o interfata de nivel inalt, utilizatorul formulind cererea prin prisma rezultatului dorit urmind ca DBMS sa ia decizia asupra modului de realizare. Cel mai cunoscut dintre limbajele implementate partial sau complet in diferite DBMS este SQL (Structured Query LanguageInitial SQL a fost numit si SEQUEL (Structured QUEry Language) construit si implementat de IBM si a fost destinat pentru implementarea interfetei pentru baza de date relationala numita si SYSTEM R.

Page 85: Baze de date

Curs 6 4Baze de date

SQL este un limbaj de baze de date ce suporta declaratii SQL este un limbaj de baze de date ce suporta declaratii pentru definirea datelor, modificarea si reorganizarea pentru definirea datelor, modificarea si reorganizarea acestora. Deci SQL inglobeaza atat DDL, DML si VDL. acestora. Deci SQL inglobeaza atat DDL, DML si VDL. In plus are facilitati privind definirea si vizualizarea bazei In plus are facilitati privind definirea si vizualizarea bazei de date, crearea si intretinertea indexilor in fisierele ce de date, crearea si intretinertea indexilor in fisierele ce reprezinta relatii. Se descrie in continuare topica SQL reprezinta relatii. Se descrie in continuare topica SQL implementata ca interfata pentru diferite baze de date implementata ca interfata pentru diferite baze de date relationale implementate in peste 90% din mediile de relationale implementate in peste 90% din mediile de baze de date cunoscute.baze de date cunoscute.

Page 86: Baze de date

Curs 6 5Baze de date

2. Model intern (model de stocare)

Avem urmatorul paralelism de interpretare intre algebra relationala si modelul de stocare

Schema relationala

Relatie

Atribut

Atribut cheie

Schema BD

Tabela

Camp

Cheie candidata

Page 87: Baze de date

Curs 6 6Baze de date

Definitii:Cheie candidata – un camp sau o asociatie de campuri ce are valori distincte NOT NULL pentru fiecare inregistrare din baza de dateCheie primara (PRIMARY KEY) – o cheie candidata a tabelei Cheie straina (FOREIGN KEY) – un camp al unei tabele ce are asociat acelasi tip de data cu un camp al altei tabele ce este o cheie primaraCamp UNIQUE – un camp al unei tabele ce are valori distincte pentru fiecare inregistrare, dar care poate avea si valoare nula. Doua valori nule in acelasi camp al unei tabele sunt consideratedistincte.Camp NOT NULL – un camp al unei tabele ce nu poate avea valori nule fara nici o restrictie de existenta a valorilor identice. Camp cu valoare DEFAULT – un camp al unei tabele a carui valoare implicita este data de o expresie. Cand valoarea nu a fost precizata acesta ia valoarea default

Page 88: Baze de date

Curs 6 7Baze de date

3. Definirea datelor in SQL

Comanda CREATE TABLEComanda CREATE TABLEAceasta comanda este utilizata pentru definirea unei noi tabele specificata prin numele, campurile, tipurile de data, formate si restrictii de integritate.Pentru fiecare camp se va specifica un nume, un tip de data si un domeniu de valori. Definirea structurii bazei de date COMPANIE fara restrictii:CREATE TABLE CREATE TABLE Angajat (NUME VARCHAR(15),

INI CHAR(1), PREN VARCHAR(12),SSN CHAR(9),DAT_NA CHAR(8),ADR VARCHAR(30),SEX CHAR(1),SALARIU INTEGER,SSSN CHAR(9),D_NR INTEGER);

Page 89: Baze de date

Curs 6 8Baze de date

CREATE TABLE departamentCREATE TABLE departament (DEP_NUME VARCHAR(20),DEP_NR INTEGER,DEP_MAN CHAR(9),DAT_I_MAN CHAR(8));

CREATE TABLE loc_depCREATE TABLE loc_dep (DEP_NR INTEGER,DEP_LOC VARCHAR(30));

CREATE TABLE CREATE TABLE proiect (P_NUME VARCHAR(15),P_NR INTEGER,P_LOC VARCHAR(30),DEP_NR INTEGER);

CREATE TABLE lucreaza _laCREATE TABLE lucreaza _la (A_SSN CHAR(9),P_NR INTEGER,ORE DECIMAL(3,1));

CREATE TABLE intretinutCREATE TABLE intretinut (A_SSN CHAR(9),C_NUME VARCHAR(20),SEX CHAR(1),DATA_N CHAR(8),RELATIE VARCHAR(10));

Page 90: Baze de date

Curs 6 9Baze de date

4. Restrictii de integritate in definirea bazei de dateRestrictii de integritate in definirea bazei de date

O buna definire a unei baze de date trebuie sa surprinda relatiile intre tabele si restrictiile privind valorile posibile pentru anumite campuri.Acest obiectiv este atins prin specificarea restrictiilor de integritateimpuse structurilor de date tabelare.

Tipuri de restrictii:PRIMARY KEYUNIQUEFOREIGN KEYNOT NULLCHECK

O restrictie poate fi precizata la nivel de camp, numita si in linie sau la nivel de tabela. De foarte multe ori o restrictie poate fi precizata fie la nivel de camp fie la nivel de tabela. Sunt totusi situatii in care o restrictie nu poate fi precizata la nivel de camp, fiind obligatorie precizarea sa la nivel de tabela.

Page 91: Baze de date

Curs 6 10Baze de date

1. Primary keyRestrictia precizeaza faptul ca un camp sau o asociatie de campuri

reprezinta o cheie primara.Definire la camp in tabela angajat

CREATE TABLE CREATE TABLE Angajat (NUME VARCHAR(15),INI CHAR(1), PREN VARCHAR(12),SSN CHAR(9) CONSTRAINTS ang_PK

PRIMARY KEY,DAT_NA CHAR(8),ADR VARCHAR(30),SEX CHAR(1),SALARIU INTEGER,SSSN CHAR(9),D_NR INTEGER);

Page 92: Baze de date

Curs 6 11Baze de date

Definire la nivel de tabela (lucreaza_la)CREATE TABLE lucreaza _laCREATE TABLE lucreaza _la (A_SSN CHAR(9),

P_NR INTEGER,ORE DECIMAL(3,1),

CONSTRAINT lucr_PK PRIMARY KEY(A_SSN, P_NR));OBS:1. Daca cheia primara este formata dintr-un singur camp restrictia se

poate formula fie la nivel de camp fie la nivel de tabela, pe cand in situatia in care cheia primara este o asociatie de campuri restrictia se precizeaza la nivel de tabela.

2. O tabela are o singura cheie primara3. Cheia primara este una dintre cheile candidate

Page 93: Baze de date

Curs 6 12Baze de date

2. FOREIGN KEYRestrictia precizeaza faptul ca un camp este o cheie straina fiind cheie

primara a altei tabeleDefinire in tabela angajat a cheii straine pentru campul D_nr:CREATE TABLE CREATE TABLE Angajat (NUME VARCHAR(15),

INI CHAR(1), PREN VARCHAR(12),SSN CHAR(9) CONSTRAINTS ang_PK

PRIMARY KEY,DAT_NA CHAR(8),ADR VARCHAR(30),SEX CHAR(1),SALARIU INTEGER,SSSN CHAR(9),D_NR INTEGER CONSTRAINTS ang_FK

REFERENCES departament(D_nr) FOREIGN KEY(D_nr) on delete cascade|on delete set NULL);

Page 94: Baze de date

Curs 6 13Baze de date

OBS:1. O cheie straina face referire la o tabela in care campul referit este

o cheie primara2. Modul de tratare a integritatii este definit prin specificarea

actiunilor intreprinde de SGBD.Pentru introducerea unei inregistrari noi cu o valoare specificata a cheii straine este necesar ca in tabela referita aceasta valoare sa existeLa stergerea inregistrarii din tabela de referinta cu valoarea specificata in tabela cu restrictia de cheie straina se produce:

1. Stergerea inregistrarilor daca s-a precizat on delete cascade2. Asignarea valorii NULL daca s-a precizat on delete set NULL3.3. Valorile NULL sunt considerate distincteValorile NULL sunt considerate distincte

Page 95: Baze de date

Curs 6 14Baze de date

3. UNIQUERestrictie impusa oricarui camp prin care nu se accepta valori diferite

de NULL identiceExemplu in tabela departamentCREATE TABLE departamentCREATE TABLE departament (DEP_NUME VARCHAR(20),

DEP_NR INTEGER CONSTRAINT dep_PK PRIMARY KEY,

DEP_MAN CHAR(9) CONSTRAINT dep_FK REFERENCES angajat(SSN) FOREIGN KEY on delete cascade,

DAT_I_MAN CHAR(8) UNIQUE);Sau

DAT_I_MAN CHAR(8) CONSTRAINT data_unic UNIQUESau la tabela

CONSTRAINT data_unic UNIQUE(DAT_I_MAN)Pot fi precizate mai multe campuri avand restrictia UNIQUE

Page 96: Baze de date

Curs 6 15Baze de date

4. NOT NULLRestrictia statueaza faptul ca valoare campului nu poate fi nula la nici o

inregistrare

Fie tabela angajatCREATE TABLE CREATE TABLE Angajat (NUME VARCHAR(15) NOT NULL,

INI CHAR(1), PREN VARCHAR(12) NOT NULL,SSN CHAR(9) CONSTRAINTS ang_PK

PRIMARY KEY,DAT_NA CHAR(8) NOT NULL,ADR VARCHAR(30),SEX CHAR(1),SALARIU INTEGER,SSSN CHAR(9),D_NR INTEGER CONSTRAINTS ang_FK

REFERENCES departament(D_nr) FOREIGN KEY on delete cascade|on delete set NULL);

Page 97: Baze de date

Curs 6 16Baze de date

5. CHECKRestrictie privind valorile posibile ale unui camp ce poate fi atasata unui

camp sau global mal multor campuriEx: Sa consideram tabela student intr-o universitate la care pentru

campurile “an studiu” si bursa se impun restrictii de valori intre 1 si 5, respectiv trei valori distincte posibile pentru bursa 120, 160 210.

CREATE TABLE Student (nume VARCHAR(10) NOT NULL,…“an studiu” INTEGER CHECK(“an studiu” BETWEEN 1

and 5),bursa INTEGER CHECK(bursa = 120 or bursa = 160

or bursa = 210)…….)sauCREATE TABLE Student (nume VARCHAR(10) NOT NULL,…

“an studiu” INTEGER,bursa INTEGER,

CONSTRAINT bursa_an CHECK(“an studiu” >0 and “an studiu<6 and (bursa = 120 or bursa = 160 or bursa = 210))…….)

Page 98: Baze de date

Curs 6 17Baze de date

OBS:In primul exemplu au fost puse restrictii pe campuri pe cand in al doilea restrictiile sunt puse global pe tabelaCampul an studiu avand avand denumirea separata prin blank a fost inclus intre semne de grupare “ “S-a utilizat atat conditie logica cat si functia betweenAu fost specificate si alte restrictii in structura tabelei, cum este restrictia NOT NULL.

Valoare DEFAULTDe multe ori se specifica la un camp valoarea sa implicita.CREATE TABLE Student (nume VARCHAR(10) NOT

NULL,…“an studiu” INTEGER DEFAULT 1,bursa INTEGER,

CONSTRAINTS CHECK(“an studiu” >0 and “an studiu<6 and (bursa = 120 or bursa = 160 or bursa = 210))…….)

Page 99: Baze de date

Curs 6 18Baze de date

5. Modificare structura tabele1. Drop table comanda pentru stergerea unei tabele

DROP TABLE Angajat2. Alter table modificarea structurii unei tabeleALTER TABLE nume_tabela TIP_modif (definitie)

Adaugarea unui campALTER TABLE angajat ADD (nume_camp tip_data [DEFAULT

expresie] [constrangere])Ex:ALTER TABLE angajat ADD (studii VARCHAR(15) DEFAULT “medii”

CONSTRAINT ang_stud NOT NULL)OBS:

Daca tabela contine cel putin o inregistrare noua coloana va avea valori nuleImpunerea unei restrictii NOT NULL se poate face doar daca tabela nu are nici o inregistrareColoana adaugata este ultima coloana in ordine fizica

Page 100: Baze de date

Curs 6 19Baze de date

Stergerea unui campALTER TABLE nume_tabela DROP COLUMN nume_coloana

[CASCADE CONSTRAINTS]SauALTER TABLE nume_tabela DROP (lisata coloane) [CASCADE

CONSTRAINTS]Ex:ALTER TABLE angajat DROP (SSSN)ALTER TABLE angajat DROP COLUMN SSSNOBS:

Cererea se poate executa atat la tabele cu inregistrari cat si faraDaca tabela contine o singura coloana aceasta nu poate fi stearsaOptiunea CASCADE CONSTRAINTS sterge suplimentar toate restrictiile de integritate in care sunt implicate coloanele sterse inclusiv cele de tip FOREIGN KEY

Page 101: Baze de date

Curs 6 20Baze de date

Stergerea este o operatie costisitoare si poate fi facuta in doua etape:

1. Marcare ca neutilizata cu SET UNUSEDEx: ALTER TABLE nume_tabela SET UNUSED (lista coloane)SauALTER TABLE nume_tabela SET UNUSED COLUMN nume_coloana

Marcarea ca neutilizate are electul:Nu mai apar in structura afisata la DESCROBENu pot fi folosite in cereri SQLSe pot adauga coloane cu acelasi nume cu cel al coloanelor sterse

2. Stergerea efectiva a coloanelor marcate ca neutilizate prinALTER TABLE nume_tabela DROP UNUSED COLUMNS

Page 102: Baze de date

Curs 6 21Baze de date

Modificarea definirii unei coloane

ALTER TABLE nume_tabela MODIFY (nume_coloana [tip_data] [DEFAULT expresie] [constrangere]

Ex: ALTER TABLE angajat MODIFY (D_nr INTEGER CONSTRAINT ang_FK REFERENCES departament(D_nr) on delete set NULL)

Efecte:Poate fi schimbat tipul de date al coloaneiPoate fi asociata o noua valoare implicitaSe poate adauga o constrangere Pot fi realizate toate in aceeasi operatie

OBS finala: Pentru ca operatiile DDL sa fie permise utilizatorul tyrebuie sa detina drepturile necesare setate prin sistemul de administrare.

Page 103: Baze de date

Curs 6 22Baze de date

Adaugarea unei constrangeri

ALTER TABLE nume_tabela ADD [CONSTRAINT nume_constrangere] tip(coloana)

Ex: In tabela departament campul d_nume nu poate fi NULL sau sa aiba valori identice si lungimea minima a sa este de 7 caractere:

ALTER TABLE departament ADD CONSTRAINT nume_nenul CHECK (d_nume IS NOT NULL)

ALTER TABLE departament ADD CONSTRAINT nume_unic UNIQUE(d-nume)

ALTER TABLE departament ADD CONSTRAINT nume_7 CHECK (LENGTH(d_nume)>6)

Page 104: Baze de date

Curs 6 23Baze de date

Stergerea unei constrangeri

ALTER TABLE nume_tabela DROP PRIMARY KEY [CASCADE]ALTER TABLE nume_tabela DROP UNIQUE (lisata_coloane)

[CASCADE]ALTER TABLE nume_tabela DROP CONSTRAINT nume [CASCADE]Efect:

DROP PRIMARY KEY si UNIQUE sterge constrangere de tip cheie primara/valoare unica chiar daca constrangerea nu are un nume asociat.DROP CONSTRAINT specifica stergerea unei constrangeri cu nume asociatOptiunea CASCADE se aplica daca sunt constrangeri dependente si se specifica stergerea acestora.

Page 105: Baze de date

Curs 6 24Baze de date

Activarea si dezactivarea unei constrangeri1. DezactivareALTER TABLE nume_tabela DISABLE PRIMARY KEY [CASCADE]ALTER TABLE nume_tabela DISABLE UNIQUE (lisata_coloane)

[CASCADE]ALTER TABLE nume_tabela DISABLE CONSTRAINT nume

[CASCADE]2. ActivareALTER TABLE nume_tabela ENABLE PRIMARY KEYALTER TABLE nume_tabela ENABLE UNIQUE (lisata_coloane)ALTER TABLE nume_tabela ENABLE CONSTRAINT numeEfecte:

Optiunea CASCADE duce la dezactivarea suplimentara a tuturor constrangerilor dependenteLa ENABLE CONSTAINT se verifica consistenta datelor si daca constrangerile nu sunt conforme cu datele nu activeaza constrangerea si transmite mesaj de eroare.

Page 106: Baze de date

Curs 6 25Baze de date

5. Structura cerere fraza SQLStructura cerere fraza SQL

Cererile SQL fac parte din componenta DML. O fraza SQL include mai multe clauze ce sunt executate dupa optimizare de catre SQL.

Structura generala:SELECT lista campuri si functii

FROM lista tabeleWHERE conditii de tio select, joinGROUP BY lista campuri grupareHAVING conditii pe functiiORDER BY lista campuri grupare

Numai clauzele SELECT, FROM sunt obligatorii celelalte sunt dependente de natura cererii. Ordinea clauzelor group by, having, order by poate fi modificataRezultatul executiei este tot o tabela, de regula temporara si se suprainscrie

Page 107: Baze de date

Baze de date Curs 7 1

Curs 7Prof. dr. ing. Dorin Carstoiu

Page 108: Baze de date

Curs 7 2Baze de date

Cuprins

1.1. Tipuri de cereriTipuri de cereri2.2. Dictionarul de dateDictionarul de date3.3. Cereri SQL la o singura tabelaCereri SQL la o singura tabela4.4. Cereri SQL la mai multe tabeleCereri SQL la mai multe tabele5.5. Join SQLJoin SQL--33

Page 109: Baze de date

Curs 7 3Baze de date

1. Tipuri de cereri

Cereri care implementeaza limbajul de definire a datelor1. CREATE2. ALTER3. DROP

Cereri care implementeaza limbajul de manipulare a datelor1. INSERT2. DELETE3. UPDATE4. SELECT

Cereri care implementeaza limbajul de control al datelor1. GRANT2. REVOKE

Page 110: Baze de date

Curs 7 4Baze de date

1. Dictionarul de date1. Dictionarul de dateUn SGBD relational necesita ca datele interne sa fie organizate si stocate in acelasi mod cu datele utilizatorilor si aplicatiilor ce le folosescSGBD tine datele intr-o structura numita dictionarul de date al sistemului sub forma de tabele pe care utilizatorii care au drepturile necesare le pot accesa printr-o serie de vederi sausinonime.Fiecare vedere are un prefix al numelui ce defineste categoriarespectiva

1. Prefixul USER_ este comun utilizatorilor prin care se pot accesainformatii despre obiectele detinute de utilizator

2. Prefixul ALL_ este specific vederilor ce contin informatii despretoate tabelele la care utilizatorul are acces

3. Prefixul DBA_ este folosit pentru vederile accesibile doarutilizatorilor care su privilegii de administrator al bazei de date

Voi prezenta cateva dintre vederile importante pentru utilizator

Page 111: Baze de date

Curs 7 5Baze de date

Vedere USER_CATALOGContine numele tabelelor, vederilor, secventelor si sinonimelor detinute

de utilizator. Aceasta vedre are doua coloane (numele obiectului, tipul obiectului)

SELECT * FOM USER_CATALOGTABLE_NAME TABLE_TYPE

ANGAJAT TABLE

Vedere USER_OBJECTSContine numele, tipul si alte informatii despre obiectele detinute de

utilizator, inclusiv indecsiSELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS

Vedere USER_CONSTRAINTSVederea contine informatii despre constrangerile definite de utilizator.

Page 112: Baze de date

Curs 7 6Baze de date

Coloanele uzuale ale vederii sunt:CONSTRAINT_NAME: numele constrangeriiCONSTRAINT_TYPE: tipul constrangerii codificat astfel P – cheieprimara, U – unique, R – integritate referentiala (cheie straina), C –check si not nullSEARCH_CONDITION – conditia asociata constrangerii

Ex: SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,

SEARCH_CONDITION FROM USER_CONSTRAINTS

Cererea produce un rezultat cu trei coloane

Page 113: Baze de date

Curs 7 7Baze de date

Vedere USER_CONS_COLUMNSContine informatii despre coloanele ce sunt implicate in restrictiile de

integritateEx:SELECT CONSTRAINT_NAME, COLUMN_NAME

FROM USER_CONS_COLUMNSWHERE CONSTRAINT_NAME=‘nume_constrangere’

Produce a tabela cu 2 coloane avand numele restrictiei specificata in caluza WHERE si numele coloanei la care se aplica restrictia

Obs: In Oracle exista peste 2000 de vederi puse la dispozitiautilizatorului grupate in diferite categorii. Liata tuturor vederilor esteobtinuta prin cererea:

SELECT VIEW_NAME FROM ALL_VIEWS

Page 114: Baze de date

Curs 7 8Baze de date

3. Cereri pe o singura tabelaO cerere SQL este formata din mai multe clauze, fiecare clauzaincepe cu un cavant cheie. Prima clauza determina si tipul cererii.

SELECT [DISTINCT] lisata de expresiiFROM nume_tabelaWHERE conditie_coloaneORDER BY criterii_sortare_rezultatEfect:

Se parcurg toate liniile tabelei invocate prin clauza FORM.Daca conditia din clauza WHERE este indeplinita se adauga liniile la rezultat. Cand WHERE lipseste sunt adaugate toate liniile.Listaq rezultat este data de lista de expresii a clauzei SELECTFara DISTINCT se vor elimina duplicatele din rezultatRezultatul este sortat functie de criteriile specificate in clauza ORDER BY. Daca lipseste ordinea este dependenta de ordinea din tabela initiala.

Page 115: Baze de date

Curs 7 9Baze de date

Caracteristici rezultatat:Numar de coloane este egal cu numarul de expresii din clauza SELECTNumarul de linii este egal cu numarul liniilor ce indeplinesc conditiaWHEREParcurgerea liniilor este facuta pe baza serverului de baze de date si nu se garanteaza ordinea rezultratelor daca nu se invoca clauza ORDER BY.

O cerere simpla:SELECT nume, prenumeFROM Angajat

Returneaza numele si prenumele angajatilor companiei.Daca sae doreste afisare tuturor coloanelor se poate utiliza caracterul

*. Ordinea fizica este data de ordinea fizica a coloanelor tabelei.SELECT *FROM angajat

Page 116: Baze de date

Curs 7 10Baze de date

Invocarea constantelorIn select pot fi invocate constante numerice, sir de caractere sau NULL.Ex: SELECT ‘Salariul persoanei ’, Nume, Prenume, ‘ este ‘, Salariu

FROM Angajatva genera o tabela cu 5 coloane in care in prima coloana se culege

constanta Salariul persoanei si in coloana 4 constanta este, coloanele 2, 3 si 5 aduc informatii din tabela Angajat.Expresii aritmetice

Elementele din lista SELECT pot fi expresii complexe continand functii si operatori. Operatori disponibili: *, /, +, -.

Ex: SELECT Nume, Prenume, Salariu, (Salariu + 100)*1.1FROM Angajat

Genereaza o tabela cu 4 coloane, coloana 4 fiind o coloana calculata dupa expresia precizata.

Page 117: Baze de date

Curs 7 11Baze de date

Expresii concatenateOperatorul de concatenare (||) permite crearea de coloane ce culeg

informatii dintr-o expresie ce contine constante si rezultate ale operatiilor efectuate asupra coloanelor.

Ex: SELECT ‘Salariul persoanei ’ || Nume || ‘ ‘ || Prenume || ‘ este ‘ || Salariu || ‘ lei’FROM Angajat

Genereaza o tabela cu un singur camp. In acest exemplu numele coloanei este data de expresia din clauza SELECT. Aceasta expresia poate excede numarul de caractere permise pentru definirea unui camp si este necesara redefinirea sa prin introducerea de ALIAS la coloana.

Ex: SELECT ‘Salariul persoanei ’ || Nume || ‘ ‘ || Prenume || ‘ este ‘ || Salariu || ‘ lei’ AS DescriereFROM Angajat

AS poate fi omis fara nici un efect asupra rezultatului:……………. ‘ lei’ Descriere

Page 118: Baze de date

Curs 7 12Baze de date

Eliminarea duplicatelorPot fi obtinute inregistrari identice daca nu se invoca in clauza SELECT

un camp cheie.Ex: SELECT Slalariu FROM AngajatVa genera inregistrari identice daca in companie sunt angajati cu

acelasi salariu. Utilizarea cuvantului cheie DISTICT elimina duplicatele

Ex: SELECT DISTINCT Slalariu FROM AngajatIn toate cererile anterioare operatiile se executa pentru toate

inregistrarile din tabela. Specificarea unei conditii de selectie poate fi realizata prin introducerea clauzei WHERE expresie_logica, expresie ce este evaluata pentru fiecare inregistrare a tabelei aducand in rezultat acele inregistrari pentru care rezultatul evaluarii este TRUE

Ex: SELECT Nume, Prenume FROM Angajat WHERE D_nr=4

Page 119: Baze de date

Curs 7 13Baze de date

Operatori de comparatie la clauza WHEREOperatori uzuali:

Egal =Mai mare >Mai mare sau egal >=Mai mic <Mai mic sau egal <=Diferit <> != ^=

Conditii compusePot fi formulate conditii complexe cu operatorii logici AND OR NOT si

paranteze de gruppareEx: (D_nr = 3 and Salariu >400) or (D_nr = 5 and Salariu*1.1<=300)

Page 120: Baze de date

Curs 7 14Baze de date

Operatorul BETWEENOperatorul specifica apartenenta unei valori la un interval inchis

expresie BETWEEN valoare_minima AND valoare_maximaEx: SELECT Nume, Prenume, Salariu

FROM AngajatWHERE Salariu >300 and D_nr BETWEEN 2 AND 5Operatorul IN

Operatorul testeaza apartenenta unei valori la o multimeexpresie IN (val_1, val_1,…,val_N)

EX: SELECT Nume, Prenume, SalariuFROM AngajatWHERE Salariu >300 and D_nr IN (2, 4, 6)

In lista de valori a operatorului IN poate fi inclus si NULL, NOT NULLOperatorul poate fi negat NOT IN (lista_valori)

Page 121: Baze de date

Curs 7 15Baze de date

Operatorul LIKESe utilizeaza pentru a testa daca valoarea unei expresii respecta un

anumit sablonexpresie LIKE ‘SABLON’ [ESCAPE ‘caracter’]

Sablonul se pune intre apostrofi si poate contine caracterele _ si %:_ inlocuieste un caracter% inlocuieste orice sir de caractere, inclusiv sir vid

Ex: SELECT Nume, Prenume FROM Angajat WHERE UPPER(Prenume) LIKE ‘ ‘A%A’Operatorul IS NULL

Valorile NULL au proprietati deferite, ele nu pot fi utilizate in expresii cu operatori de egalitate sau diferit. Pentru acestea se utilizeaza IS NULL si IS NOT NULL

Ex: SELECT Nume, Prenume FROM Angajat WHERE sssn IS NULL

Page 122: Baze de date

Curs 7 16Baze de date

Clauza ORDER BYORDER BY specifica ordinea inregistrarilor in tabela produsa de

cerere. Pot fi invocate atat nume de coloane ce apar in rezultat cat si nume de coloane ce nu apar in rezultat. Coloanele de ordonaresunt tratate un ordinea specificarii la clauza ORDER BY, ordineadefault este ascendent (ASC), DESC specifica ordine descrescatoare.

Ex: SELECT Nume, Prenume, D_nr, SalariuFrom AngajatWHERE D_nr IN (1,3,5) and Salariu >200 and Sssn IS NULLORDER BY D_nr ASC, Salariu DESC, Nume

Poate fi invocata in ORDER BY si ordinea coloanelorEx: SELECT Nume, Prenume, D_nr, Salariu

From AngajatWHERE D_nr IN (1,3,5) and Salariu >200 and Sssn IS NULLORDER BY 3 ASC, 4 DESC, 1

Page 123: Baze de date

Curs 7 17Baze de date

4. Cereri SQL pe mai multe tabele

Aceste creri implementeaza operatiile algebrei relationale produs cartezian si JOIN.Clauza FROM va contine o lista de tabele.Clauza WHERE va contine conditii de corelare a inregistrarilor din diverse tabele numita si conditie JOIN.O conditie JOIN este numita equjoin daca se specifica o egalitate intre valorile coloanelor ce definesc conditia.Daca conditia nu specifica egalitate atunci se spune ca este non-equjoin.Daca coloanele ce participa la o operatie equjoin au acelasi nume se va numi natural join.Pot fi luate in consideratie si situatiile in care se adauga in rezultat si inregistrari ce nu indeplinesc conditia JOIN numita si join extern (outer join).

Page 124: Baze de date

Curs 7 18Baze de date

Produs cartezianOperatia se produce atunci cand in clauza WHERE nu se specifica nici

o conditie intre campurile tabelelor.Ex: SELECT *

FROM Angajat, DepartamentWHERE D_nr = 4Equjoin

Consideram doar combinarea inregistrarilor tabelei Angajat cu cele din departament dar numai pentru departamentul din care face parte un anumit angajat.

SELECT Nume, Prenume, D_nume, D_locationFROM Angajat, DepartamentWHERE D_nr = Dep_nr

Daca cele doua campuri au acelasi nume in tabelele Angajat si Departament obtinem o operatie natural JOIN. Din punctul de vedere al rezultatului nu este nici o diferenta.

Page 125: Baze de date

Curs 7 19Baze de date

Sunt situatii atunci cand se fac operatii cu mai multe tabele ca o conditie sa devina ambigua datorita existentei campurilor cu acelasi nume. Tehnica uzuala este cea de utilizare ALIAS pentru tabela.Alias implicit – numele tabelei.

Ex: SELECT Angajat.Nume, Angajat.Prenume, Departament.D_nume, Departament.D_locationFROM Angajat, DepartamentWHERE Angajat.D_nr = Departament.Dep_nrAlias explicit – nume asociat tabelei.

Ex: SELECT A.Nume, A.Prenume, D.D_nume, D.D_locationFROM Angajat A, Departament DWHERE A.D_nr = D.Dep_nr

Un alias explicit este foarte util atunci cand se executa o operatie de JOIN intre o tabela si ea insasi (self-join). In acest caz aceeasi tabela este vazuta ca doua instante.

Page 126: Baze de date

Curs 7 20Baze de date

De exemplu obtinerea mumelui si prenumelui fiecarui angajat si al supervizorului sau.SELECTSELECT A.NUME,A.PREN,S.NUME, S.PRENFROMFROM ANGAJAT A, ANGAJAT SWHEREWHERE A.SSSN=S.SSNAlte exempleSELECTSELECT P_NR,DEP_NUME, NUME, INI, PREN, ADR, DAT_NA

FROMFROM PROIECT, DEPARTAMENT, ANGAJATWHEREWHERE PROIECT.DEP_NR=DEPARTAMENT.DEP_NR AND

DEP_MAN=SSN AND P_LOC='Brazi‘Cererea de listare pentru fiecare proiect localizat in 'Brazi' a

numarului proiectului, numarului departamentului ce il coordoneaza, numelui, adresei si datei de nastere a managerului departamentului

Page 127: Baze de date

Curs 7 21Baze de date

SELECTSELECT P_NR,DEP_NUME,NUME,INI,PREN,ADR,DAT_NA

FROMFROM PROIECT P,DEPARTAMENT D,ANGAJATWHEREWHERE P.DEP_NR=D.DEP_NR AND DEP_MAN=SSN AND P_LOC='Brazi‘Join extern (outher join)

Cererea de listare a numelor si prenumelor angajatilor impreuna cu supervizorii lor, iar pentru angajatii ce nu au supervizor numele si prenumele supervizorilor va fi NULL.SELECTSELECT A.NUME,A.PREN,S.NUME, S.PRENFROMFROM ANGAJAT A, ANGAJAT SWHEREWHERE A.SSSN (+)=S.SSNJoin extern poate fi invocat si cu alte conditii decat egalitate sau

BETWEEN sau LIKE

Page 128: Baze de date

Curs 7 22Baze de date

5. JOIN SQL-3De la versiunea 9i Oracle recunoaste si sintaxa SQL-3. Se remarca

faptul ca aceste operatii pot fi executate utilizand sintaxele descrise.Clauza CROSS JOIN

Realizeaza produs cartezian. Spre deosebire de sintaxele anterioare a doua tabela nu se precizeaza in FROM ci in caluza CROSS JOINSELECT [DISTINCT] lista_expresiiFROM tabela1CROSS JOIN tabela2

Clauza JOIN .. USINGSe utilizeaza cand in cele doua tabele invocate la join coloanele au

acelasi nume, operatia fiind de tip equjoinSELECT [DISTINCT] lista_expresiiFROM tabela1JOIN tabela2 USING (nume_coloane)

Page 129: Baze de date

Curs 7 23Baze de date

Clauza NATURAL JOINEste un caz particular al clauzei JOIN .. USING. Nu se mai specifica

coloanele dupa care se face join si Oracle considera egalitatea intre valorile tuturor coloanelor cu acelasi nume.SELECT [DISTINCT] lista_expresiiFROM tabela1NATURAL JOIN tabela2

Clauza JOIN .. ONClauza implementeaza un join general. Conditia si eventual conditiile

suplimentare se pun la ONSELECT [DISTINCT] lista_expresiiFROM tabela1JOIN tabela2 ON (expresie_logica)

Page 130: Baze de date

Curs 7 24Baze de date

Clauza OUTER JOIN .. ONEste un join extern cu sintaxa

SELECT [DISTINCT] lista_expresiiFROM tabela1LEFT | RIGHT | FULL OUTER JOIN tabela2 ON (tabela1.nume_col

= tabela2.nume_col)Interpretare:

LEFT – valorile nule provin din tabela 2RIGHT – valorile nule provin din tabela 1FULL – reuniunea dintre LEFT si RIGHT