BDC01

37
Capitolul 1. Noţiuni fundamentale 1.1. Generalităţi În lumea modernă bogăţia unei organizaţii (instituţie, firmă, ONG, etc.) este constituită - pe lângă resursele materiale şi umane - şi din informaţia aflată la dispoziţie. Pentru ca această resursă importantă să poată fi exploatată cu rezultate profitabile trebuie ca ea să fie gestionată eficient. Cea mai optimă metodă existentă la ora actuală este crearea, utilizarea şi întreţinerea unor Sistemele de gestiune a bazelor de date computerizate. Prin Bază de date (BD) se înţelege o colecţie de informaţii stocate pe calculator astfel încât acestea să poată fi accesate, modificate sau şterse. Sistemul de gestiune a bazelor de date (SGBD) este un software care realizează interfaţa între sistemul de operare al calculatorului şi beneficiarul care solicită informaţii din BD. Cele mai importante funcţii ale SGBD sunt: stocarea, regăsirea şi actualizarea datelor din BD – utilizatorul poate crea consulta şi manipula informaţiile; crearea şi întreţinerea dicţionarului de date (catalogul de sistem); facilitarea accesului simultan al mai multor utilizatori la BD; păstrarea unor copii de siguranţă (back-up) şi recuperarea datelor în cazul căderii sistemului; 1

description

,

Transcript of BDC01

Page 1: BDC01

Capitolul 1. Noţiuni fundamentale

1.1. Generalităţi

În lumea modernă bogăţia unei organizaţii (instituţie, firmă, ONG, etc.) este constituită - pe lângă resursele materiale şi umane - şi din informaţia aflată la dispoziţie. Pentru ca această resursă importantă să poată fi exploatată cu rezultate profitabile trebuie ca ea să fie gestionată eficient. Cea mai optimă metodă existentă la ora actuală este crearea, utilizarea şi întreţinerea unor Sistemele de gestiune a bazelor de date computerizate.

Prin Bază de date (BD) se înţelege o colecţie de informaţii stocate pe calculator astfel încât acestea să poată fi accesate, modificate sau şterse. Sistemul de gestiune a bazelor de date (SGBD) este un software care realizează interfaţa între sistemul de operare al calculatorului şi beneficiarul care solicită informaţii din BD.

Cele mai importante funcţii ale SGBD sunt: stocarea, regăsirea şi actualizarea datelor din BD – utilizatorul

poate crea consulta şi manipula informaţiile; crearea şi întreţinerea dicţionarului de date (catalogul de

sistem); facilitarea accesului simultan al mai multor utilizatori la BD; păstrarea unor copii de siguranţă (back-up) şi recuperarea

datelor în cazul căderii sistemului; securizarea datelor prin parolarea accesului utilizatorilor şi

gestiunea drepturilor de intervenţie în BD.Organizarea informaţiilor sub forma unor BD şi accesarea lor prin

intermediul SGBD aduce o serie de avantaje între care cele mai importante sunt:

independenţa datelor – schimbările structurale în BD nu afectează programele de aplicaţie;

coerenţa datelor – modificarea unei înregistrări este percepută de toţi utilizatorii sistemului;

integritatea datelor – printr-un sistem de restricţii SGBD obligă utilizatorii să introducă date complete şi în formatul cerut pentru fiecare nou obiect introdus în BD;

reducerea redundanţei – se evită repetarea unor date în mai multe locaţii în BD. Prin urmare se economiseşte spaţiul de stocare (hard-disk);

controlul centralizat al datelor – administratorul BD deţine dreptul gestionării şi controlului în BD;

1

Page 2: BDC01

creşterea eficienţei accesului la informaţie – selecţia şi manipularea unor mari cantităţi de date în timp real permite analiza şi extragerea unor concluzii;

creşterea securităţii – posibilitatea protejării prin parolare a accesului la date;

limbaj de interogare – SGBD permite accesarea datelor prin intermediul unui limbaj de interogare. Un asemenea limbaj poate fi un:- limbaj algebric în care interogările asupra relaţiilor sunt

exprimate prin intermediul unor operatori aplicaţi asupra lor (ex. SQL)

- limbaj bazat pe calcul relaţional în care interogările asupra relaţiilor sunt exprimate prin intermediul unor condiţii (predicate) pe care înregistrările (tuplele) relaţiilor trebuie să le satisfacă. Există limbaje orientate pe înregistrări (ex. QUEL, Ingress) şi limbaje orientate pe domenii (ex. QBE)

În ultimele trei decenii modelul relaţional s-a impus net ca soluţie preferată în majoritatea implementărilor de SGBD-uri. Prin urmare marea majoritate a mediilor software de gestionare a BD sunt concepute conform acestui model.

Fiecare dată are două caracteristici de fundamentale: identificatorul, tipul.Identificatorul este numele atribuit datei prin care aceasta este

indicată şi care permite ulterior accesarea ei. Tipul datei stabileşte modul în care data este memorată şi modul în care operatorii şi funcţiile o prelucrează. O dată poate fi text, număr, dată calendaristică, etc.

Datele pot fi elementare (simple, scalare) sau compuse (complexe). Datele compuse sunt divizibile în mai multe date simple. Un exemplu de dată simplă este Numărul de telefon (Tel) al unui angajat, iar o dată compusă este Adresa (Adr) care cuprinde judeţ, oraş, strada, număr, etc.

Analizând cele de mai sus în contextul caracteristicilor fundamentale, se poate estima că data identificată de Tel trebuie să fie de tip număr, iar cea numită Adr este de tip text. De exemplu în dialectul MySQL ele se declară cu sintaxa:

Tel int(9);Adr varchar(30);

adică un întreg care are întotdeauna 9 cifre (3 cifre prefixul localităţii şi 6 numărul propriu-zis), respectiv un şir cu lungime variabilă între 0 şi 30 de caractere alfanumerice.

TEST

2

Page 3: BDC01

1.1.1. Printr-o bază de date se înţelege:a. un fişier cu date;b. colecţie de informaţii stocate astfel încât să poată fi regăsite,

modificate sau şterse;c. un tabel cu înregistrări.

1.1.2. Principalele funcţii ale unui SGBD sunt:a. stocarea, regăsirea şi actualizarea datelor;b. facilitează accesul simultan al mai multor utilizatori;c. securizarea datelor prin parolare.

1.1.3. Avantajele accesării datelor printr-un SGBD sunt:a. asigurarea integrităţii datelor;b. reducerea redondanţei;c. creşterea securităţii.

1.1.4. Limbajele de interogare utilizate în gestiunea BD pot fi:a. algebrice;b. logice;c. relaţionale.

1.1.5. Datele stocate într-o bază de date sunt:a. scalare;b. vectoriale;c. complexe1.

1.2. Colecţii de date

O colecţie de date reprezintă un ansamblu de date omogene.Omogenitatea nu trebuie privită în sensul restrâns al uniformităţii. În

acest context se consideră omogene toate datele implicate într-o aceeaşi aplicaţie.

Între colecţiile de date se stabilesc relaţii concretizate prin reguli, algoritmi matematici sau metode de calcul prin care unei date îi corespund: nici una, una sau mai multe date. În consecinţă aşa cum se arată în Figura 1.1. există relaţii de corespondenţă de tip:

una la una – când unei date dintr-o colecţie îi corespunde o singură dată din altă colecţie;

una la mai multe - când unei date dintr-o colecţie îi corespunde mai multe date din altă colecţie;

1 Răspunsuri: 1.1.1. b; 1.1.2. a, b, c; 1.1.3. a, b, c; 1.1.4. a, c; 1.1.5. a, c

3

Page 4: BDC01

mai multe la una - când mai multor date dintr-o colecţie le corespund o aceeaşi dată din altă colecţie;

mai multe la mai multe - când mai multor date dintr-o colecţie le corespund mai multe date din altă colecţie.

a. b.

c. d.

Figura 1.1. Tipuri de relaţii dintre datele a două colecţiia. Corespondenţă ”unu la unu”b. Corespondenţă ”unu la mai mulţi”c. Corespondenţă ”mai mulţi la unu”d. Corespondenţă ”mai mulţi la mai mulţi”

a.

b. c.

Figura 1.2. Tipuri de relaţiia. Relaţie unidirecţionalăb. Relaţie bidirecţionalăc. Echivalenţa unei relaţii bidirecţionale cu

două relaţii unidirecţionale

De asemenea relaţiile dintre datele din două colecţii pot fi unidirecţionale sau bidirecţionale. O relaţie este unidirecţională atunci când stabilirea corespondenţei se face plecând de la data din Colecţia 1, iar data sau datele din Colecţia 2 sunt cele determinate. Colecţia 1 este colecţie

4

Colecţia 1 Colecţia 2 Colecţia 1 Colecţia 2

Colecţia 1 Colecţia 2Colecţia 1 Colecţia 2

Colecţia 1 Colecţia 2Colecţia 1 Colecţia 2

Colecţia primară

Colecţia secundară

Page 5: BDC01

primară iar Colecţia 2 este secundară. Dacă relaţia este bidirecţională se poate pleca de la oricare din cele două colecţii obţinându-se acelaşi efect.

În Figura 1.2. se schematizează aceste tipuri şi se demonstrează că o corespondenţă bidirecţională se poate reduce la două relaţii unidirecţionale. O colecţie de date poate fi independentă sau legată de una ori mai multe alte colecţii de date. În general, în Sistemele de gestiune a bazelor de date relaţionale, detectarea legăturilor între colecţii reprezintă un capitol important în efortul de proiectare conceptuală.

TEST

1.2.1. O colecţie de date reprezintă:a. un set de date scalare;b. un ansamblu de date omogene,c. un vector.

1.2.2. Între două colecţii de date se poate stabili:a. o corespondenţă;b. o relaţie de subsidiaritate;c. o relaţie de recurenţă.

1.2.3. Corespondenţa între două colecţii poate fi:a. una la una;b. una la mai multe;c. mai multe la mai multe.

1.2.4. Relaţia între două colecţii poate fi:a. nondirecţională;b. unidirecţională;c. bidirecţională.

1.2.5. O colecţie de date poate fi legată printr-o relaţie de:a. doar de o singură altă colecţie;b. mai multe alte colecţii;c. nici una, una sau mai multe colecţii2.

1.3. Structuri de date

O colecţie de date căreia i se ataşează un mecanism de localizare (identificare, selecţie) a datelor componente devine o Structură de date.

2 Răspunsuri: 1.2.1. b; 1.2.2. a; 1.2.3. a, b, c; 1.2.4. b, c; 1.2.5. b, c.

5

Page 6: BDC01

Mecanismul de selecţie este implementat de sistemul de operare, de sistemul de gestiune sau de programele aplicative. În SGBD moderne, acest mecanism este furnizat de sistemul de gestiune.

Structurile de date nu conţin şi procedurile propriu-zise de procesare a datelor, dar definirea lor presupune şi precizarea mecanismului de acces la date. Există două tipuri fundamentale de mecanisme de acces:

secvenţial – accesarea unei date din colecţie presupune parcurgerea tuturor datelor de dinaintea acesteia,

direct – accesarea se face direct (de exemplu prin evaluarea unei expresii) fără a mai parcurge datele anterioare.

Pe baza acestora se pot elabora alte tipuri derivate de mecanisme de acces mai complexe între care şi mecanismul specific indecşilor, foarte utilizat în SGBD moderne.

Structurile simple de date sunt: punctuale – datele izolate fără relaţii de corespondenţă; liniare – datele legate secvenţial una după alta; circulare (inel) - caz particular de structură liniară; stea – o dată centrală aflată în legătură cu toate celelalte date; arborescentă – structurare ierarhică a datelor; reţea – fiecare dată este legată de una sau mai multe alte date

din colecţie.

AtributeCâmp 1 Câmp 2 ... Câmp N

Înregistrări

Tupla 1

Tupla 2

...

Tupla M

Figura 1.3. Structura tabelară

În viaţa reală se utilizează structurile complexe rezultate din combinaţia celor de mai sus. Între acestea structurile tabelare şi cele relaţionale constituie modurile standard de organizare a datelor în SGBD relaţionale (MySQL, Oracle, Ms Access, etc.).

Structurile tabelare sunt schematizate în Figura 1.3. şi cuprind coloane numite atribute (câmpuri) şi rânduri ce conţin înregistrări (tuple) ale unor date complexe. Se poate observa că structura tabelară este în fapt

6

Dată complexă 1Dată complexă 2

Dată complexă M

Page 7: BDC01

o structură liniară de date complexe omogene (datele simple componente sunt identice ca tip şi aranjare).

Structura relaţională este o structură arborescentă de tabele aşa cum se exemplifică în Figura 1.4. Legăturile dintre tabele reprezintă relaţiile unilaterale sau bilaterale între atributele acestora.

Figura 1.4. Structura relaţională

Pentru fiecare problemă de gestionare a unei baze de date există mai multe soluţii şi în consecinţă mai multe scheme logice de reprezentare a datelor. O asemenea schemă specifică tabelele componente, câmpurile componente şi mulţimea relaţiilor ce le leagă. O bună proiectare a sistemului de gestiune bazei de date conduce la o schemă logică articulată coerent şi un spaţiu de stocare minimizat prin reducerea redundanţei datelor.

Spre exemplu, propunem spre analiză situaţia unui depozit de materiale de construcţii. În situaţia în care încercam memorarea tuturor informaţiilor într-un singur tabel rezultă un fişier conţinând repetiţii.

Tabelul 1.1. este simplu şi relativ uşor de utilizat dacă numărul înregistrărilor nu creşte foarte mult. Spaţiul necesar memorării datelor este însă prost gestionat fiindcă există informaţii care se repetă. De exemplu unitatea de măsură pentru un material care provine de la mai mulţi furnizori este rescrisă pentru fiecare apariţie a materialului respectiv. De asemenea codul fiscal al unui furnizor apare în dreptul fiecărui articol cumpărat de la acesta. Dacă pe lângă intrări se iau în considerare şi ieşirile atunci coloanele corespunzătoare beneficiarilor vor aduce probleme similare.

În plus, o firmă care investeşte în punerea la punct a unui SGBD are pretenţia rezonabilă ca acest sistem să rezolve gestionarea unui set mai larg de informaţii legate nu doar de materialele de construcţii tranzacţionate ci şi eventual datele de personal, salarizare, relaţii contractuale, contabilitate etc. Prin urmare soluţia relaţională prezentată în setul de tabele 1.2. prezintă nu doar avantajul reducerii redundanţei ci şi pe acela de a permite dezvoltarea SGBD pentru rezolvarea tuturor fluxurilor informaţionale ale organizaţiei.

7

Page 8: BDC01

Tabel unicNume

materialUM Cali-

tateDenumirefurnizor

Cod fiscalfurnizor

Canti-tate

P.U.(euro)

...

... ... ... ... ... ... ... ...Ciment t 1 Dino Grup 6546781 256 280 ...Gresie m2 1 ItalConstruct 4235112 13200 20 ...Cărămizi buc. 2 MatCons 3287923 546000 0.1 ...

... ... ... ... ... ... ... ...

... 1 ...Bolţari buc. 1 MatCons 3287923 126000 0.3 ...Gresie m2 2 Mondial 1879224 8340 15 ...

... ... ... ... ... ... ... ...Tabelul 1.1. Soluţia „Tabel unic”

StocuriCod

materialCalitate Cod

furnizorCantitate Preţ

unitar... ... ... ... ... ...

cim. 1 dn_grp 256 120 ...grs. 1 ital 13200 15 ...grs 2 iups 8340 8 ...crm. 2 matc 546000 0.1 ...blt. 1 matc 12600 0.3 ...

... ... ... ... ... ...

Materiale FurnizoriCodmat.

Denumire UM ... Codfurniz.

Numefurnizor

Codfiscal

...

... ... ... ... ... ... ... ...cim ciment t ... dn_grp DinoGrup 654678

1...

grs gresie m2 ... ital ItalCeram 4235112

crm caramizi buc.

... matc MatCons 3287923

...

blt bolţari buc.

iups IUPS 1879224

... ... ... ... ... ... ... ...Tabelul 1.2. Soluţia relaţională

În concluzie o Bază de date relaţională este compusă din unul sau mai multe tabele între care sunt stabilite relaţii (legături). Construirea unei baze de date relaţionale presupune deci două etape:

construcţia tabelelor - operaţie statică, structura tabelelor este stabilită încă înainte de încărcarea datelor,

8

Page 9: BDC01

stabilirea relaţiilor – operaţie dinamică aflată în legătură cu programele de prelucrare.

Figura 1.6. Selectarea automată a înregistrărilor corespunzătoare într-un lanţ de tabele

Prin structura lor tabelele au ca unitate de lucru înregistrarea (rândul de tabel). Introducerea unei date complexe noi trebuie deci să satisfacă o condiţie de rigoare – să fie completate cu informaţie toate câmpurile rândului. În mod identic eliminarea unei date din bază trebuie să fie făcută prin ştergerea tuturor atributelor adică a întregului rând.

Odată stabilite relaţiile unidirecţionale între tabele accesul la informaţii se face printr-un mecanism specific, adică selectarea unei înregistrări în tabela principală (conducătoare) produce selecţia automată a înregistrărilor corespunzătoare în tabelele secundare (conduse). Acest mecanism funcţionează în mod similar şi în situaţia unui lanţ de tabele legate prin relaţii unidirecţionale aşa cum se arată în figura 1.6.

De obicei într-o bază de date relaţională există un singur tabel conducător (rădăcina grafului arborescent) restul tabelelor fiind direct sau indirect legate de acesta într-o structură de forma celei prezentate în figura 1.5. În practică există şi excepţii de la această regulă care se pot schematiza ca structuri arborescente cu două sau mai multe rădăcini.

Modelul relaţional a fost formulat şi publicat la începutul anilor ’70 de matematicianul Edgar F. Codd cercetător la laboratoarele IBM. Ulterior Codd a stabilit şi un set de 13 „reguli de fidelitate”. Acestea sunt:

Regula 0. Pentru a fi relaţional un SGBD trebuie să fie capabil să gestioneze o bază de date exclusiv prin intermediul caracteristicilor sale relaţionale. (Regula de bază)

Regula 1. Într-o bază de date relaţională informaţia este reprezentată la nivel logic într-un singur fel şi anume sub formă tabelară. (Regula reprezentării informaţiei)

Regula 2. Fiecare dată dintr-o bază de date relaţională trebuie să fie adresată în mod logic printr-o combinaţie formată din numele tabelului,

9

Tabela 1

Înregistrarea k1

Tabela 2

Înregistrarea k2

Tabela 3

Înregistrarea k3

Tabela 4

Înregistrarea k4

Page 10: BDC01

valoarea cheii primare şi numele câmpului. (Regula accesului garantat la date)

Regula 3. Un SGBD în totalitate relaţional trebuie să permită utilizatorului definirea unui tip de date denumit „NULL” pentru reprezentarea unei informaţii necunoscute la momentul respectiv şi aceasta într-un mod sistematic pentru orice tip de date. (Regula reprezentării informaţiei necunoscute)

Regula 4. Asupra descrierii bazelor de date trebuie să se poată aplica aceleaşi operaţii ca cele asupra datelor din baza de date. (Regula dicţionarelor de date)

Regula 5. Un SGBD relaţional trebuie să poată permite utilizarea a cel puţin un limbaj care să aibă următoarele caracteristici: să permită definirea datelor, definirea vizualizărilor, manipularea datelor (interactiv şi prin program), restricţii de integritate, restricţii de autorizare şi realizarea tranzacţiilor. (Regula limbajului de interogare)

Regula 6. Un SGBD relaţional trebuie să poată determina dacă o vizualizare poate fi actualizată şi să stocheze rezultatul interogării într-un catalog de sistem. (Regula de actualizare a vizualizării)

Regula 7. Regulile de manipulare asupra unei relaţii luată ca întreg sunt valabile atât pentru operaţiile de regăsire a datelor, cât şi pentru operaţiile de inserare, actualizare şi ştergere a datelor. (Regula limbajului de nivel înalt)

Regula 8. Într-un SGBD relaţional trebuie să se separe aspectul fizic al datelor ( metodele de stocare şi acces) de aspectul logic, şi anume programele de aplicaţie. (Regula independenţei fizice a datelor)

Regula 9. Programele de aplicaţie trebuie să fie transparente la modificările de orice fel efectuate asupra datelor. (Regula independenţei logice a datelor)

Regula 10. Un SGBD relaţional trebuie să permită atât definirea unor restricţii de integritate asupra bazelor de date prin intermediul limbajului cât şi stocarea lor în dicţionare de tipul cataloagelor de sistem. (Regula independenţei datelor din punct de vedere al integrităţii)

Regula 11. Distribuirea datelor pe mai multe calculatoare dintr-o reţea nu trebuie să afecteze programele de aplicaţii. (Regula independenţei datelor din punct de vedere al distribuirii)

Regula 12. Orice componentă procedurală a unui SGBD trebuie să respecte aceleaşi restricţii de integritate ca şi componenta relaţională. (Regula versiunii procedurale a SGBD)

Nici un SGBD nu respectă ad literam toate aceste reguli şi prin urmare nu există actualmente nici un SGBD relaţional pur. Ceea ce se apreciază prin analiza numărului de reguli respectate şi al gradului de respectare a lor, este însă măsura în care un SGBD se apropie de modelul ideal.

10

Page 11: BDC01

TEST

1.3.1. O structură de date reprezintă:a. o colecţie de date complexe;b. o colecţie de date scalare,c. o colecţie de date cu un mecanism de localizare.

1.3.2. Mecanismul de accesare al datelor poate fi:a. relaţional;b. secvenţial;c. direct.

1.3.3. O structură tabelară este divizibilă în:a. înregistrări;b. câmpuri;c. predicate.

1.3.4. O bază de date relaţională conţine:a. un tabel conducător (rădăcină);b. o structură arborescentă de tabele;c. un set de reguli de fidelitate.

1.3.5. E.F. Codd a definit treisprezece reguli de fidelitate pentru:a. clienţii bazei de date;b. administratorul bazei de date;c. bazele de date relaţionale 3.

1.4. Elemente de Algebră relaţională

Manipularea datelor într-o bază de date relaţională trebuie să cuprindă:

introducerea datelor, regăsirea datelor, modificarea datelor, eliminarea datelor.Baza teoretică fundamentală pentru orice limbaj de interogare

relaţional este algebra relaţională care constă dintr-o mulţime de operatori pentru manipularea relaţiilor. Aceşti operatori sunt primitivele pe baza cărora sunt construite limbajele actuale de interogare. Cunoaşterea algebrei relaţionale este deci un instrument util pentru înţelegerea în

3 Răspunsuri: 1.3.1. c; 1.3.2. b, c; 1.3.3. a, b; 1.3.4. a, b; 1.3.5. c.

11

Page 12: BDC01

profunzime a unor aspecte legate de proiectarea bazelor de date, optimizarea interogărilor, distribuirea bazelor de date relaţionale, etc.

Există opt operatori ce acţionează asupra tabelelor de intrare şi generează un tabel de ieşire. Ei pot fi clasificaţi în: operatori unari dacă operează cu un singur tabel de intrare sau binari dacă operează asupra a două tabele.

De asemenea operatorii algebrei relaţionale pot fi clasificaţi în: operatori de bază (SELECT, PROJECT, UNION, DIFFERENCE, PRODUCT) şi operatori derivaţi (INTERSECT, DIVIDE, JOIN).

Operatorul SELECT este un operator unar care extrage înregistrările ce satisfac o anumită condiţie. Sintaxa sa este:

SELECT T WHERE Cunde T este tabelul unde se face selecţia iar C este condiţia de analizat.

De exemplu dacă se cere să se selecteze toate înregistrările din A (tabelul 1.3.a) care satisfac condiţia să aibă câmpul Fax adevărat (are fax-ul pe acelaşi număr cu telefonul) se execută comanda:

SELECT A WHERE Fax

Cod_client Nume_client Telefon Fax Mod_plata... ... ... ... ...263 Pop Ionel 143566 Yes card264 Şerban Vasile 264538 Yes card265 Roth Alfred 311698 No cash... ... ... ... ...

Tabelul 1.3.a.

Rezultatul aplicării selecţiei este:

Cod_client Nume_client Telefon Fax Mod_plata... ... ... ... ...263 Pop Ionel 143566 Yes card264 Şerban Vasile 264538 Yes card... ... ... ... ...

Tabelul 1.3.b.

Deci operatorul a ales din tabelul 1.3.a. acele înregistrări care au atributul Fax = true (Yes). După WHERE se pun întotdeauna condiţii al căror răspuns este de tipul true/false. În general este vorba de expresii ce cuprind comparaţii între numele atributelor şi constante, comparaţii efectuate cu operatorii aritmetici: <,=,>,>=,<=,!=. O expresie poate cuprinde mai multe comparaţii legate între ele prin operatorii logici: AND, OR, NOT.

12

Page 13: BDC01

Cod_client Nume_client Telefon Fax Mod_plata... ... ... ... ...263 Pop Ionel 143566 Yes card... ... ... ... ...

Tabelul 1.3.c.

Prin urmare comanda:SELECT A WHERE Fax AND Cod_client<264

are drept rezultat tabelul 1.3.c.Operatorul SELECT este util pentru filtrarea datelor dintr-o bază de

date funcţie de un criteriu referitor la unul sau mai multe din câmpurile tabelului. Deci acest operator este folosit pentru filtre, interogări şi rapoarte.

Operatorul PROJECT este un operator unar care are rolul de a returna domeniul unui câmp al tabelului analizat. Sintaxa sa este:

PROJECT T ON Funde T este tabelul iar F este câmpul al cărui domeniu este returnat. De exemplu, dacă asupra tabelului A (tabel 1.3.a) se execută linia de cod:

PROJECT A ON Mod_plata

Mod_plata...cardcash...

Tabel 1.3.d.

se observă că rezultatul este reluarea coloanei corespunzând atributului cu eliminarea repetiţiilor. PROJECT se poate aplica simultan şi mai multor câmpuri, de exemplu:

PROJECT A ON Mod_plata, Fax

Fax Mod_plata... ...Yes cardNo cash... ...

Tabel 1.3.d.

şi rezultă o listă a tuturor combinaţiilor de date din cele două câmpuri. În cazul de faţă este posibil ca pe alte rânduri să existe şi (Yes, cash) sau (No, card), dar în cele trei prezentate sunt doar perechile de valori (Yes, card) şi (No, cash).

13

Page 14: BDC01

Operatorul UNION este un operator binar, deci are două tabele de intrare şi se generează un tablou ce conţine toate înregistrările distincte cuprinse în cele două intrări. Operatorul combină doar tablourile cu un număr similar de atribute definite respectiv pe aceleaşi domenii. Sintaxa acestui operator este:

T1 UNION T2unde T1 şi T2 sunt două tablouri cu acelaşi număr de câmpuri, fiecare câmp având respectiv aceleaşi domenii. De exemplu dacă se aplică UNION pentru tabelele A şi B din setul de tabele 1.4.a:

A UNION B

A BCod

produsNume

produsCod

produsNume

produs245 Faianţă 144 Beton167 Cărămizi 213 Gresie216 Mozaic 134 Bolţari

Tabelele 1.4.a.

rezultă tabloul C care este reuniunea mulţimilor de înregistrări ale celor două tablouri iniţiale:

CCod

produsNume

produs245 Faianţă167 Cărămizi216 Mozaic144 Beton213 Gresie134 Bolţari

Tabelul 1.4.b.

A*Cod

produsNume

produs245 Faianţă167 Cărămizi216 Mozaic189 Adeziv

Tabelul 1.4.c.

14

Page 15: BDC01

UNION se poate utiliza şi pentru adăugarea unei înregistrări noi într-un tabel. În consecinţă acest operator asigură posibilitatea de a completa o bază de date cu înregistrări noi. De exemplu:

A UNION < 189, adeziv>produce completarea tabelului cu noua înregistrare aşa cum se vede în tabelul 1.4.c. (A*).

Operatorul MINUS (DIFFERENCE) este un operator binar în care din cele două tablouri de intrare se selectează înregistrările care nu sunt comune. Operatorul combină de asemenea tablourile cu un număr similar de atribute definite respectiv pe aceleaşi domenii. Sintaxa acestui operator este:

T1 MINUS T2unde T1 şi T2 sunt două tablouri cu acelaşi număr de câmpuri, fiecare câmp având respectiv aceleaşi domenii. De exemplu dacă se aplică MINUS pentru tabelele A şi B din setul de tabele 1.5.a:

A MINUS B

A BCod

produsNume

produsCod

produsNume

produs245 Faianţă 216 Mozaic213 Gresie 213 Gresie216 Mozaic 134 Bolţari

Tabelele 1.5.a.

rezultă tabloul C care este disjuncţia celor două mulţimii de înregistrări din tablourile iniţiale:

CCod

produsNume

produs245 Faianţă134 Bolţari

Tabelul 1.5.b.

MINUS se poate utiliza şi pentru ştergerea unei înregistrări dintr-un tabel. În consecinţă acest operator asigură posibilitatea de a elimina o tuplă din bază de date. De exemplu:

A MINUS < 245, Faianţă>produce eliminarea din tabel a înregistrării aşa cum se vede în tabelul 1.5.c. (A**):

15

Page 16: BDC01

A**Cod

produsNume

produs213 Gresie216 Mozaic

Tabelele 1.5.c.

Operatorul PRODUCT este un operator binar în care din cele două tablouri de intrare se combină într-un produs cartezian. Sintaxa operatorului este:

T1 PRODUCT T2unde T1 şi T2 sunt cele două tablouri de intrare. De exemplu dacă se aplică PRODUCT pentru tabelele A şi B din setul de tabele 1.6.a:

A PRODUCT B

A BNume

produsDepozit

Faianţă AradGresie Timişoara

Tabelele 1.6.a.

rezultă tabloul C care cuprinde toate combinaţiile ce se pot face cu înregistrările din tablourile iniţiale:

CNume

produsDepozit

Faianţă AradGresie AradFaianţă TimişoaraGresie Timişoara

Tabelul 1.6.b.

Operatorul DIVIDE este un operator binar în care primul din cele două tablouri de intrare este supus unei selecţii după un criteriu dat de un atribut al celui de al doilea tablou.

Sintaxa operatorului este:DIVIDE T1 BY T2

unde T1 şi T2 sunt cele două tablouri de intrare. De exemplu dacă se aplică DIVIDE pentru tabelele A şi B din setul de tabele 1.7.a:

DIVIDE A BY B

16

Page 17: BDC01

rezultă tabloul D1 care cuprinde toate produsele care satisfac condiţia de a avea instrucţiuni de utilizare în română. Pentru operaţiunea

DIVIDE A BY Crezultă tabloul D2 care cuprinde toate produsele care satisfac condiţia de a avea instrucţiuni de utilizare în engleză şi franceză.

A BNume prod. Instrucţiuni Limba instrucţiuni

Aspirator Română RomânăAspirator Engleză EnglezăAspirator Franceză FrancezăMixer RomânăMixer FrancezăVideorecorder Română CVideorecorder Engleză Limba instrucţiuniTV Franceză FrancezăTV Engleză Engleză

Tabelele 1.7.a.D1 D2

Numeprodus

Numeprodus

Aspirator AspiratorMixer TVVideorecorder

Tabelul 1.7.b. Tabelul 1.7.c.

Prin urmare cu ajutorul operatorului DIVIDE se pot executa interogări asupra unei baze de date rezultând setul de înregistrări care satisfac o anumită condiţie în mod similar cu expresiile utilizând operatorul SELECT. În cazul utilizării operatorului DIVIDE însă se face selecţia unor înregistrări dintr-un tabel după un criteriu privind un câmp al altui tabel.

Operatorul INTERSECT este un operator binar. El are două tabele de intrare şi prin aplicarea lui se selectează toate înregistrările cuprinse în ambele. Operatorul combină doar tablourile cu un număr similar de atribute definite respectiv pe aceleaşi domenii. Sintaxa acestui operator este:

T1 INTERSECT T2unde T1 şi T2 sunt două tablouri cu acelaşi număr de câmpuri, fiecare câmp având respectiv aceleaşi domenii. De exemplu dacă se aplică UNION pentru tabelele A şi B din setul de tabele 1.8.a:

A INTERSECT B

17

Page 18: BDC01

A BCod

produsNume

produsCod

produsNume

produs245 Faianţă 144 Beton213 Gresie 213 Gresie216 Mozaic 134 Bolţari

Tabelele 1.8.a.

rezultă tabloul C care este intersecţia mulţimilor de înregistrări ale celor două tablouri iniţiale:

CCod

produsNume

produs213 Gresie

Tabelul 1.8.b.

Operatorul JOIN este un operator binar care permite regăsirea informaţiei din mai multe tabele corelate. Cele două tablouri de intrare sunt combinate într-un nou tabel în care fiecare înregistrare este o combinaţie a tuplelor iniţiale. Combinaţia înregistrărilor se poate face doar dacă tuplele ce se combină sunt similare. Există cinci tipuri operatori derivaţi JOIN:

a. NATURAL JOINb. EQUI-JOIN (STRAIGHT-JOIN)c. THETA-JOINd. SEMI-JOINe. OUTER-JOIN (LEFT-JOIN)

a. Operatorul NATURAL JOIN

NATURAL JOIN combină înregistrările ce au atribute comune din cele două tabele. Înregistrările dintr-un tabel fără corespondent în celălalt nu apar în rezultatul final. Sintaxa operatorului este:

JOIN T1 AND T2De exemplu: JOIN A AND B

A BCod

produsNume

produsNume

produsPreţ

216 Mozaic Bolţari 0.3213 Gresie Gresie 8167 Cărămizi Cărămizi 0.1

Tabelele 1.9.a.

18

Page 19: BDC01

C=JOIN A AND BCod

produsNume

produsPreţ

213 Gresie 8167 Cărămizi 0.1

Tabelul 1.9.b.

b. Operatorul EQUI-JOIN

EQUI-JOIN este similar cu NATURAL-JOIN, dar cuprinde o condiţie ce specifică atributul prin care se realizează corelaţia între cele două tablouri. Sintaxa operatorului este:

JOIN T1 AND T2 WHERE T1.k=T2.lEx.1 JOIN A AND B WHERE A.Nume_produs=B. Nume_produs

A BCod

produsNume

produsNume

produsPreţ

216 Mozaic Bolţari 0.3213 Gresie Gresie 8167 Caramizi Caramizi 0.1

Tabelele 1.10.a.

C=JOIN A AND B WHERE ...Cod

produsNume

produsNume

produsPreţ

213 Gresie Gresie 8167 Caramizi Caramizi 0.1

Tabelul 1.10.b.

Se poate observa că în tabloul de ieşire apar toate coloanele din cele două tabele aşa încât Nume_produs este afişat de două ori. Un asemenea operator este prin urmare util în situaţiile când relaţia dintre cele două tabele se stabileşte prin intermediul unor coloane neidentice.

A(Produse alimentare) B(Suplinitori pentru post)Cod_a Produs Pret Cod_s Inlocuitor Pret_sA001 Carne 5 S001 Soia 2A002 Unt 3 S002 Margarină 1

A003Pateu ficat

3S003

Pate ciuperci

2

A004 Frisca 2 S004 Hulala 1Tabelele 1.11.a.

19

Page 20: BDC01

JOIN A AND B WHERE F(A.Cod_a,B. Cod_s)=1

F(A.Cod_a,B. Cod_s) este o funcţie care elimină prefixele ’A’ şi ’S’ din cele două coduri şi apoi cercetează identitatea şirurilor rezultate. F returnează 1 în caz de egalitate şi 0 în caz contrar.

CCod_a Produs Pret Cod_s Inlocuitor Pret_sA001 Carne 5 S001 Soia 2A002 Unt 3 S002 Margarină 1

A003Pateu ficat

3S003 Pate ciuperci

2

A004 Frisca 2 S004 Hulala 1Tabelul 1.11.b.

c. Operatorul THETA-JOIN

THETA-JOIN este varianta generalizată a operatorului EQUI-JOIN deoarece relaţia de corelare nu este o egalitate ci devine o comparaţie. Sintaxa operatorului este:

JOIN T1 AND T2 WHERE T1.k T2.lÎn locul se pot folosi oricare din operatorii de comparaţie (<‚ <=, >,

=>, !=, =).

A(Manopera_frizerie) B(Materiale consumabile)Cod Serviciu Pret_s Cod Mat. Pret_m

S001 Tuns 3 S001 Deodorant 2S002 Frezat 1 S002 Fixativ 2S003 Masaj 1 S003 Parfum 4S004 Barbierit 2 S004 Spuma ras 1

Tabelele 1.12.a.

JOIN A AND B WHERE A.Pret_m>B. Pret_s AND A.Cod=B.Cod

C=JOIN A AND B WHERE ...Cod Serviciu Pret_s Mat. Pret_m

S001 Tuns 3 Deodorant 2S004 Barbierit 2 Spuma ras 1

Tabelul 1.12.b.

20

Page 21: BDC01

Urmare a operaţiei THETA-JOIN în tabloul de ieşire apar doar acele înregistrări care satisfac preţul manoperei unui anumit serviciu să fie mai mare decât preţul materialelor folosite.

d. Operatorul SEMI-JOIN

Operatorul SEMI-JOIN generează un tabel de ieşire ce cuprinde toate tuplele din primul tabel T1 corelate cu oricare din tuplele tabloului T2 astfel încât condiţia specificată în clauza WHERE să fie îndeplinită. Sintaxa operatorului este:

S JOIN T1 AND T2 WHERE T1.k=T2.lEx.1 S JOIN A AND B WHERE A.Nume_produs=B.Nume_produs

A BCod

produsNume

produsNume

produsPreţ

216 Mozaic Bolţari 0.3213 Gresie Gresie 8167 Cărămizi Cărămizi 0.1

Tabelele 1.13.a.

C=S JOIN A AND B ...

Codprodus

Nume produs

213 Gresie167 Cărămizi

Tabelul 1.13.b.

Se poate observa că în tabloul de ieşire apar doar coloanele din A şi înregistrările care satisfac condiţia din clauza WHERE.

e. Operatorul OUTER-JOIN

Operatorul OUTER-JOIN spre deosebire de celelalte variante generează un tabel de ieşire ce cuprinde toate tuplele din primul tabel T1 adică inclusiv acelea care nu au corespondent în tabelul T2.

O JOIN T1 AND T2 WHERE T1.k=T2.lExemplul 1: O JOIN A AND B WHERE A.Nume_produs=B. Nume_produs

Tabelelul A conţine codul şi numele unor materiale de construcţii, iar tabelul B conţine numele şi preţul lor. Prin urmare tabloul C va reuni înregistrările corespunzătoare fiecărui sortiment.

21

Page 22: BDC01

A BCod

produsNume

produsNume

produsPret

216 Mozaic Bolţari 0.3213 Gresie Gresie 8167 Caramizi Caramizi 0.1

Tabelele 1.13.a.

Se poate observa că în tabloul C apare şi Materialul 216, Mozaic din A. Pentru această înregistrare nu există preţ în B aşa încât în coloana respectivă se afişează NULL. În practică această operaţie denumită LEFT JOIN este folosită tocmai pentru a obţine tuplele fără corespondent. Extragerea lor din totalul tuplelor se poate face cu o propoziţie SELECT având o clauză WHERE C.Pret IS NULL

C=OJOIN A AND B ...Cod

produsNume

produsPret

216 Mozaic NULL213 Gresie 8167 Caramizi 0.1

Tabelul 1.13.b.

TEST

1.4.1. Operatorii algebrei relaţionale pot fi:a. unari;b. binari,c. ternari.

1.4.2. Operatorul SELECT are sintaxa:a. SELECT T;b. SELECT T WHERE condiţie;c. SELECT T(a) WHERE condiţie.

1.4.3. Operatorul UNION:a. este binar;b. combină doar tablourile cu un număr similar de atribute definite

respectiv pe aceleaşi domenii;c. generează un tablou ce conţine toate înregistrările distincte

cuprinse în cele două intrări.

1.4.4. Operatorul EQUI JOIN are forma:

22

Page 23: BDC01

a. JOIN T1 AND T2 WHERE T1.k<T2.l;b. JOIN T1 AND T2 WHERE T1.k=T2.l;c. JOIN T1 AND T2 WHERE T1.k>T2.l .

1.4.5. Operatorul THETA JOIN are forma:a. JOIN T1 AND T2 WHERE T1.k<T2.l;b. JOIN T1 AND T2 WHERE T1.k=T2.l;c. JOIN T1 AND T2 WHERE T1.k>T2.l4.

1.5. Limbajul SQL

Limbajul Structured Query Language (pronunţat ”es-q-el” sau ”sii-q-el”) reprezintă la ora actuală limbajul standard pentru SGBD relaţionale. Limbajul SQL a fost creat pentru a permite utilizatorilor: să creeze structura unei baze de date, să efectueze operaţii de gestionare a datelor (inserarea, editarea, ştergerea) şi să efectueze interogări pentru a procesa datele brute în vederea obţinerii informaţiilor utile.

Limbajul cuprinde două componente principale (sub-seturi de instrucţiuni):

- sub-limbajul de definire a datelor (Data Definition Language DDL) utilizat pentru definirea structurii bazei de date,

- sub-limbajul de manipulare a datelor (Data Manipulation Language DML) folosit pentru regăsirea şi reactualizarea datelor.

Schema unei BD descrie tabelele, câmpurile tabelelor, domeniile de variaţie ale acestora, restricţiile de integritate, drepturile utilizatorilor, vizualizări şi detalii privind implementarea fizică. O bază de date cuprinde în structura sa: tabele, vizualizări, sinonime, indecşi şi cataloage.

Caracteristicile principale ale limbajului SQL sunt: este orientat cu precădere pe specificarea datelor cerute şi nu a

procedurilor (limbaj neprocedural orientat spre transformări), structura instrucţiunilor constă în cuvinte standard în limba

engleză, este utilizabil de către o gamă largă de utilizatori (administratori,

programatori de aplicaţii, clienţi, etc.), are format liber adică nu obligă la structuri spaţiale rigide şi nu

este sensibil la tipul de litere majuscule sau litere mici. Singura excepţie o reprezintă datele de tip caracter. De exemplu POPESCU Popescu

Limbajul SQL nu este un standard unic căci dezvoltarea sa în timp a condus ca în diferite etape setul de tipuri de date utilizat şi instrucţiunile

4 Răspunsuri: 1.4.1. a, b; 1.4.2. b; 1.4.3. a, b, c; 1.4.4. b; 1.4.5. a, c.

23

Page 24: BDC01

sale să fie modificate şi dezvoltate. În general standardul ISO 92 este astăzi acceptat formal şi de facto în majoritatea aplicaţiilor comerciale. Totuşi există ”dialecte” ale limbajului proprii fiecăruia dintre producătorii de software de gestiune a BD. Prin urmare în cadrul diferitelor medii care utilizează SQL pentru crearea, manipularea şi gestionarea bazelor de date relaţionale sunt utilizate diverse variante corespunzând unor stadii mai noi sau mai vechi de evoluţie a limbajului şi preferinţelor particulare ale firmei care a creat mediul. Există deci câte un dialect SQL relativ diferit pentru DB2 (IBM), ORACLE, Visual FoxPro, MySQL, etc. In cele ce urmează se va prezenta dialectul MySQL deoarece acest mediu de dezvoltare al sistemelor de gestiune a BD este considerat de autori simplu şi eficient.

TEST

1.5.1. Limbajul SQL este un limbaj ce permite:a. crearea unei baze de date;b. gestionarea datelor,c. interogarea bazelor de date.

1.5.2. Limbajul SQL conţine următoarele subseturi:a. Limbaj de definire a datelor;b. Limbaj de manipulare a datelor;c. Limbaj de gestionare a datelor.

1.5.3. Schema unei baze de date cuprinde:a. tabelele, atributele şi domeniile acestora;b. restricţiile de integritate;c. drepturile utilizatorilor.

1.5.4. Limbajul SQL este :a. un standard unic;b. un limbaj cu dialecte relativ diferite între ele;c. o familie de limbaje independente fără elemente comune .

1.5.5. MySQL este:a. un mediu de dezvoltare a SGBD relaţionale;b. un limbaj de definire a datelor;c. un dialect al SQL5.

1.6. Temă de casă

5 Răspunsuri: 1.5.1. a, b, c; 1.5.2. a, b; 1.5.3. a, b, c; 1.5.4. b; 1.5.5. a, c.

24

Page 25: BDC01

Să se implementeze în Microsoft Acces Bazele de date utilizate ca exemplu pe parcursul acestui capitol. Să se experimenteze posibilitatea executării unor interogări ce au efect similar cu operaţiunile JOIN din paragraful anterior.

1.7. Rezumat

Prin Bază de date se înţelege o colecţie de informaţii stocate pe calculator astfel încât acestea să poată fi accesate, modificate sau şterse. Sistemul de gestiune a bazelor de date este un software care realizează interfaţa între sistemul de operare al calculatorului şi beneficiarul care solicită informaţii din baza de date.

O colecţie de date căreia i se ataşează un mecanism de localizare a datelor componente devine o Structură de date. Mecanismul de selecţie este implementat de sistemul de operare, de sistemul de gestiune sau de programele aplicative. În SGBD moderne, acest mecanism este furnizat de sistemul de gestiune. Există două tipuri fundamentale de mecanisme de acces: secvenţial şi direct.

Manipularea datelor într-o bază de date relaţională trebuie să cuprindă: introducerea datelor, regăsirea datelor, modificarea datelor, eliminarea datelor. Baza teoretică fundamentală pentru orice limbaj de interogare relaţional este algebra relaţională care constă dintr-o mulţime de operatori pentru manipularea relaţiilor. Aceşti operatori sunt primitivele pe baza cărora sunt construite limbajele actuale de interogare. Există opt operatori ce acţionează asupra tabelelor de intrare şi generează un tabel de ieşire. Ei sunt: SELECT, PROJECT, UNION, DIFFERENCE, PRODUCT, INTERSECT, DIVIDE şi JOIN.

Limbajul Structured Query Language este limbajul standard pentru SGBD relaţionale. Limbajul SQL a fost creat pentru a permite utilizatorilor: să creeze structura unei baze de date, să efectueze operaţii de gestionare a datelor şi să efectueze interogări pentru procesarea datelor. Limbajul cuprinde două seturi de instrucţiuni: sub-limbajul de definire a datelor şi sub-limbajul de manipulare a datelor.

25