cursSQL Lectia2
cursSQL Lectia2
1
privind protecţia datelor; operaţiile necesare (încărcare/validare, actualizare, regăsire etc.);
particularităţile activităţii pentru care se realizează baza de date.
Performanţele tehnice ale SGBD-ului se referă la: modelul de date pe care-l implementează;
ponderea utilizării SGBD-ului pe piaţă şi tendinţa; configuraţia de calcul minimă cerută; limbajele
de programare din SGBD; facilităţile de utilizare oferite pentru diferite categorii de utilizatori;
limitele SGBD-ului; optimizările realizate de SGBD; facilităţile tehnice; lucrul cu mediul distribuit
şi concurenţa de date; elementele multimedia; posibilitatea de autodocumentare; instrumentele
specifice oferite.
Proiectarea BDR se realizează prin proiectarea schemelor BDR şi proiectarea modulelor
funcţionale specializate.
Schemele bazei de date sunt: conceptuală, externă şi internă.
a) Proiectarea schemei conceptuale porneşte de la identificarea setului de date necesar
sistemului. Aceste date sunt apoi integrate şi structurate într-o schemă a bazei de date. Pentru acest
lucru se parcurg paşii:
• Stabilirea schemei conceptuale iniţiale rezultă din schema entitate-relaţii ERD. Pentru
acest lucru, fiecare entitate din modelul conceptual este transformată (mapată) într-o colecţie
de date (tabel memorat în fişier), iar pentru fiecare relaţie se definesc cheile aferente.
• Ameliorarea progresivă a schemei conceptuale prin eventuale adăugări de tabele suport
suplimentare, prin eliminarea unor anomalii
b) Proiectare schemei externe are rolul de a specifica vederile fiecărui utilizator asupra
BDR. Pentru acest lucru, din schema conceptuală se identifică datele necesare fiecărei vederi.
Datele obţinute se structurează logic în subscheme ţinând cont de facilităţile de utilizare şi de
cerinţele utilizator. Schema externă devine operaţională prin definirea unor vederi (view-uri) în
SGBD-ul ales şi acordarea drepturilor de acces. Datele dintr-o vedere pot proveni din una sau mai
multe colecţii şi nu ocupă spaţiul fizic.
c) Proiectarea schemei interne presupune stabilirea structurilor de memorare fizică a datelor
şi definirea căilor de acces la date. Acestea sunt specifice fie SGBD-ului (scheme de alocare), fie
sistemului de operare. Proiectarea schemei interne înseamnă estimarea spaţiului fizic pentru BDR,
definirea unui model fizic de alocare (a se vedea dacă SGBD-ul permite explicit acest lucru) şi
definirea unor indecşi pentru accesul direct, după cheie, la date.
Proiectarea modulelor funcţionale ţine cont de concepţia generală a BDR, precum şi de
schemele proiectate anterior. În acest sens, se proiectează fluxul informaţional, modulele de
încărcare şi manipulare a datelor, interfeţele specializate, integrarea elementelor proiectate cu
organizarea şi funcţionarea BDR.
2
2.2 Realizarea componentelor logice
Componentele logice ale unei baze de date (BD) sunt programele de aplicaţie dezvoltate, în
cea mai mare parte, în SGBD-ul ales. Programele se realizează conform modulelor funcţionale
proiectate în etapa anterioară. Componentele logice ţin cont de ieşiri, intrări, prelucrări şi colecţiile
de date. În paralel cu dezvoltarea programelor de aplicaţii se întocmesc şi documentaţiile diferite
(tehnică, de exploatare, de prezentare).
2.3 Punerea în funcţiune şi exploatarea
Se testează funcţiile BDR mai întâi cu date de test, apoi cu date reale. Se încarcă datele în
BDR şi se efectuează procedurile de manipulare, de către beneficiar cu asistenţa proiectantului. Se
definitivează documentaţiile aplicaţiei. Se intră în exploatare curentă de către beneficiar conform
documentaţiei.
2.4 Întreţinerea şi dezvoltarea sistemului
Ulterior punerii în exploatare a BDR, în mod continuu, pot exista factori perturbatori care
generează schimbări în BDR. Factorii pot fi: organizatorici, datoraţi progresului tehnic, rezultaţi din
cerinţele noi ale beneficiarului, din schimbarea metodologiilor etc.
2.5 Relaţii. Tipuri de relaţii între tabele
În bazele de date relaţionale una dintre cele mai importante noţiuni este cea de relaţie.
Practic, tabelele unei baze de date sunt relaţionate între ele. Într-o bază de date relaţională nu este
indicat să avem tabele izolate.
Există trei tipuri de relaţii posibile între tabelele unei baze de date:
- unu-la-unu sau one-to-one (1:1) – unei înregistrări din prima tabelă îi corespunde o singură
înregistrare în cealaltă tabelă;
- unu-la-mai-mulţi sau one-to-many (1:n) – unei înregistrări din prima tabelă îi corespund
mai multe înregistrări în cealaltă tabelă;
- mai-mulţi-la-mai-mulţi sau many-to-many (m:n) – unei înregistrări din prima tabelă îi
corespund una sau mai multe înregistrări din cealaltă tabelă şi reciproc.
Primul caz, relaţia one-to-one este mai puţin utilizată în cazuri concrete. Un exemplu ar fi o
tabelă în care avem persoane şi o tabelă cu acte de identitate (o persoană are un singut act de
identitate sau o persoană are o singură adresă de domiciliu).
Relaţia one-to-many este foarte răspândită (de exemplu, dacă avem o tabelă de clienţi şi una
de facturi – un client poate să aibă mai multe facturi sau dacă avem o tabelă cu elevi şi una cu note
atunci un elev poate să aibă mai multe note).
Relaţia many-to-many este o relaţie în care avem nevoie de o tabelă intermediară de legătură
între cele două tabele (practic relaţia many-to-many se descompune în două relaţii one-to-many).
3
Un exemplu ar putea fi următorul: dacă într-o tabelă avem informaţii despre studenţii unei
facultăţi iar într-o altă tabelă informaţii despre materiile (cursurile) disponibile în cadrul acelei
facultăţi avem următorul tip de relaţie între aceste 2 tabele: un student participă la mai multe cursuri
iar un curs este frecventat de mai mulţi studenţi, rezultă că avem de-a face cu o relaţie many-to-
many între cele 2 tabele.
Această relaţie se descompune în 2 relaţii one-to-many prin introducerea unei tabele
suplimentare care păstrează informaţii de identificare pentru studenţi şi pentru cursurile pe care ei le
frecventează.
Înţelegerea modului de relaţionare al tabelelor dintr-o bază de date reprezintă un pas
fundamental pentru a putea construi o bază de date optimă atunci când proiectăm o aplicaţie.
2.6 Exemplu
Prezentăm în continuare diagrama ERD corespunzătoare unei baze de date în care avem
stocate informaţii despre candidaţii la un examen.
Sunt reprezentate în această diagramă entităţile, atributele fiecărei entităţi, precum şi relaţiile
existente între aceste entităţi.
Urmează apoi o prezentare detaliată a entităţilor modelate în această diagramă.
4
PROFESOR
SUBCOMISIE CALITATE
este alocat # id_profesor are
# id_subcomisie # id_calitate
* nume
* denumire * denumire
e formată * prenume este
deţinută o atributii
o gradul
este formată pentru de
CANDIDAT
este repartizată # id_candidat
* nume
CLASA * initiala PROBA
# id_clasa * prenume # id_proba
* denumire are * cnp susţine * denumire
o mediul este * tip
are aparţine o serii_anterioare susţinută
o taxa
o adresa
o telefon
este urmată o data inscriere
SPECIALIZARE PROIECT
# id_spec dezvoltă # id_proiect
* denumire * tema
o detalii este dezvoltat * cerinte
de o complexitate
5
Tabelele de mai jos prezintă detaliat entităţile modelate în diagramă:
Entitatea: CALITATE
Atribut Tipul de Atribut Identificator Semnificaţia
date folosit obligatoriu unic
id_calitate Numeric Da Da ID-ul ce este asociat calităţii
denumire Şir de Da - Denumirea calităţii deţinută de
caractere profesor în comisie: evaluator,
secretar, preşedinte, etc
atributii Şir de - - Atribuţiile ce decurg din
caractere calitatea deţinută: ex: evaluarea
elevilor, organizarea
examenului etc.
Entitatea: PROFESOR
Atribut Tipul de Atribut Identificator Semnificaţia
date folosit obligatoriu unic
id_profesor Numeric Da Da Id-ul asociat profesorului (ex.
100)
nume Şir de Da - Numele profesorului
caractere
prenume Şir de Da - Prenumele profesorului
caractere
gradul Şir de - Gradul didactic al
caractere profesorului: definitiv, gradul
II, gradul I
Entitatea: SUBCOMISIE
Atribut Tipul de Atribut Identificator Semnificaţia
date folosit obligatoriu unic
id_subcomis Numeric Da Da Id-ul asociat comisiei (ex. 100)
ie
denumire Şir de Da - Denumirea comisiei (ex.
caractere Comisia 1, Comisia 2 etc.)
Entitatea: CLASA
Atribut Tipul de Atribut Identificator Semnificaţia
date folosit obligatoriu unic
id_clasa Numeric Da Da Id-ul asociat clasei (ex. 100)
denumire Şir de Da - Denumirea clasei (ex. XII A,
caractere XII B etc.)
6
Entitatea: SPECIALIZARE
Atribut Tipul de Atribut Identificator Semnificaţia
date obligatoriu unic
folosit
id_specializare Numeric Da Da Id-ul asociat specializării
(ex. 100)
denumire Şir de Da - Denumirea specializării (ex.
caractere Matematică informatică
etc.)
detalii Şir de - - Detaliile specializării
caractere
Entitatea: CANDIDAT
Atribut Tipul de Atribut Identi- Semnificaţia
date folosit obligatoriu ficator
unic
id_candidat Numeric Da Da Id-ul asociat candidatului (ex.
100)
nume Şir de Da - Numele candidatului
caractere
initiala Şir de Da - Iniţiala prenumelui tatălui
caractere
prenume Şir de Da - Prenumele candidatului
caractere
cnp Şir de Da - Codul numeric personal
caractere
mediul Numeric - - Mediul de provenienţă al
candidatului; se foloseşte
codificarea numerică 1 –
mediul urban, 2 – mediul rural
serii_anterioar Numeric - - Candidaţii din seria curentă (nu
e au absolvit cls. XII) nu au
completată valoarea atributului,
cei din seriile anterioare au
valoarea atributului 1
taxa Numeric - - Candidaţii ce nu au mai
susţinut examenul nu au
completată valoarea atributului,
cei din învăţământul particular
şi cei ce au mai susţinut
examenul de minimum 2 ori au
valoarea taxei
adresa Şir de - - Adresa candidatului
caractere
telefon Şir de - - Telefonul candidatului
caractere
data_inscriere Dată - - Data depunerii cererii de
calendaristi înscriere la examenul de atestat
că
7
Entitatea: PROIECT
Atribut Tipul de Atribut Identificator Semnificaţia
date folosit obligatoriu unic
id_proiect Numeric Da Da Id-ul asociat proiectului
(ex. 100)
tema Şir de Da - Denumirea temei (ex.
caractere Agenţie de voiaj)
cerinte Şir de Da - Cerinţele detaliate ale
caractere proiectului
complexitate Şir de - - Complexitatea proiectului
caractere realizat : redusă, medie, etc
Entitatea: PROBA
Atribut Tipul de date Atribut Identificator Semnificaţia
folosit obligatoriu unic
id_proba Numeric Da Da Id-ul asociat probei (ex. 1)
denumire Şir de Da - Denumirea probei (ex.
caractere Programare, Sisteme de
gestiune a bazelor de date,
etc)
tip Şir de Da Tipul probei: probă
caractere practică sau proiect
8
2.8 Convenţii de reprezentare a relaţiilor
1. Linia ce uneşte entităţile relaţionate e formată din două segmente distincte. Tipul
liniei ce pleacă de la entitatea A către entitatea B relevă opţionalitatea relaţiei
A→B: dacă linia este continuă, relaţia este obligatorie – „trebuie”, iar dacă este
discontinuă, relaţia este opţională – „poate”.
2. Denumirea relaţiei A→B este poziţionată lângă entitatea A, deasupra sau
dedesubtul liniei de opţionalitate.
3. Cardinalitatea relaţiei A→B se reprezintă astfel: linia de A la B se termină cu o
linie simplă, în cazul în care o instanţă a entităţii A este pusă în corespondenţă cu
o singură instanţă a entităţii B, şi are forma unui „picior de cioară” în cazul în
care o instanţă a entităţii A este pusă în corespondenţă cu mai multe instanţe ale
entităţii B.
Exemplu:
CANDIDAT
# id_candidat
* nume
CLASA * initiala
# id_clasa * prenume
* denumire are * cnp
o mediul
aparţine o serii_anterioare
o taxa
o adresa
o telefon
o data_inscriere
obţine
CANDIDAT
PROBA
# id_candidat
# id_proba
* nume
* denumire
* initiala
* tip
* prenume
……………..
este evaluată cu
obţine
NOTA
este
# numar _bilet
atribuită este pentru
* nota
ORAŞ
e împărţit e împărţit
aparţine
Relaţie
CARTIER redundantă
e împărţit
aparţine aparţine
ZONĂ REZIDENŢIALĂ
Dacă un oraş e împărţit în unul sau mai multe cartiere, şi un cartier e la rândului
împărţit în mai multe zone rezidenţiale, se poate deduce că oraşul este împărţit în zone
rezidenţiale, fără a fi necesar să marcăm acest lucru în diagramă. Ar apărea o relaţie
ciclică, redundantă.
Relaţia PROFESOR → NOTA ar putea fi considerată redundantă, deoarece din
diagramă rezultă faptul că un candidat aparţine unei clase ce este repartizată unei
13
subcomisii de examinare, formată din doi profesori evaluatori. Se poate deduce deci ce
profesori au evaluat un elev, nefiind necesară o relaţie directă între CANDIDAT şi
NOTA. Pentru a destrăma bucla ar trebui eliminată o relaţie.
Dacă am elimina relaţia PROFESOR → NOTA, neexistând o ierarhie între
relaţiile PROFESOR→SUBCOMISIE→CLASA→CANDIDAT→NOTA, nu am ştii ce
profesor a acordat nota.
Dacă eliminăm relaţia PROFESOR→SUBCOMISIE, nu am cunoaşte (sau ar fi
dificil de aflat) fiecare profesor cărei subcomisii aparţine.
Soluţia este păstrarea diagramei în forma prezentă, nefiind de fapt o situaţie de
redundanţă, deoarece numele relaţiilor nu sugerează că dacă un profesor este alocat unei
subcomisii, el evaluează neapărat. În cazul existenţei unei singure subcomisii, toată
componenţa comisiei (inclusiv preşedintele) este asociată cu această subcomisie.
Rombul existent pe linia relaţiei NOTA → CANDIDAT precizează că relaţia
este non-transferabilă: o notă atribuită unui candidat nu poate fi transferată altui
candidat.
14
PROFESOR are CALITATE
SUBCOMISIE # id_profesor este # id_calitate
este alocat
# id_subcomisie * nume deţinută * denumire
* denumire e formată * prenume de o atributii
o gradul acordă
este formată pentru
CANDIDAT este acordată de
este repartizată # id_candidat
* nume
NOTA
CLASA * initiala
* prenume obţine * numar _bilet
# id_clasa * nota
* denumire are * cnp
este atribuită
o mediul
aparţine o serii_anterioare
are este pentru
o taxa
o adresa
o telefon este evaluată cu
o data inscriere
este urmată PROBA
dezvoltă # id_proba
SPECIALIZARE este dezvoltat de * denumire
# id_spec * tip
* denumire PROIECT
o detalii # id_proiect
* tema
* cerinte
o complexitate Figura 2.6. Diagrama ERD finală
15
2.9 Limbajul SQL. Introducere
Primele sisteme de baze de date relaţionale au apărut în 1970. Cele mai populare SGBD-uri
relaţionale sunt: Oracle, Microsoft SQL Server, MySQL. Toate aceste sisteme de baze de date relaţionale
au în comun limbajul standard de interogare a bazei de date numit SQL.
SQL - Structured Query Language este un limbaj de baze de date realizat pentru a extrage
informaţii şi a administra bazele de date relaţionale. Limbajul SQL a devenit standard ANSI (American
National Standards Institute) în 1986. Fiecare sistem de management al bazei de date (RDBMS -
Relational Database Management System) are propria versiune de limbaj SQL, bazată pe standardul
SQL. Astfel, limbajul SQL folosit în MySQL, fată de limbajul SQL folosit în PostgreSQL sau Oracle,
deşi asemănătoare, au elemente distincte, specifice acelui RDBMS.
MySQL este o aplicaţie comercială pentru managementul bazelor de date relaţionale (pe scurt un
RDBMS) foarte populară, mai ales în dezvoltarea aplicaţiilor web. MySQL este dezvoltată de firma
suedeză MySQL AB ce a fost între timp cumpărata de Sun Microsystems.
Echipele ce au dezvoltat limbajul PHP şi baza de date MySQL au colaborat cu succes de-a lungul
timpului pentru a oferi o interoperabilitate ridicată între cele două programe, astfel încât prima preferinţă
a programatorilor dezvoltatori în PHP pentru baze de date este MySQL.
În plus, PHP are extensii (set de funcţii) pentru a lucra şi cu alte baze de date: PostgreSQL,
Oracle, SQL Server, etc.
2.10 Clienţi MySQL
Sistemele de baze de date sunt concepute într-o arhitectura client-server. Astfel, serverul de baze
de date este programul principal ce stochează şi manipulează datele, şi răspunde clienţilor ce se
conectează la acesta pentru a cere informaţii sau pentru a trimite cereri de altă natură (adăugări,
modificări, etc). Serverul MySQL şi clientul MySQL folosit pentru interogare pot fi instalate pe acelaşi
calculator, dar nu neapărat. Dacă lucrăm local (pe calculatorul propriu) şi folosim un program ca WAMP
server, atât serverul MySQL cât şi clientul MySQL pe care-l alegem, vor fi instalate pe calculatorul
nostru.
În momentul când mutăm baza de date pe un server de hosting, serverul MySQL va fi pe acel
server de hosting iar clientul MySQL poate fi tot pe acel server (de exemplu phpMyAdmin) sau ne putem
conecta cu un client MySQL instalat pe calculatorul nostru.
Aşadar, SQL este un limbaj special conceput pentru comunicarea cu bazele de date.
2.11 Medii de lucru
În continuare vom prezenta programele pe care le vom folosi pentru a testa noţiunile pe care le
vom învăţa. În primul rând avem nevoie de instalarea pe calculator a unui server de baze de date MySQL.
În acest sens vom instala un program numit WAMP care instalează local, pe calculator, un server de
Apache şi unul de baze de date MySQL.
Adresa de la care se poate descărca acest program este următoarea: http://www.wampserver.com/en/
16
Acest program poate fi folosit şi atunci când realizăm aplicaţii web pe calculatorul propriu în
limbajul PHP şi avem nevoie de un server Apache pentru a le testa.
Există şi alte programe care odată instalate pe calculator şi lansate în execuţie ne oferă un server
de baze de date. De exemplu: XAMPP sau EasyPHP.
După instalarea WAMP se lansează în execuţie acest program. La pornire pictograma acestei
aplicaţii se plasează în partea dreaptă a barei de start şi atunci când toate serviciile oferite sunt pornite are
culoarea verde.
17
La Network Type opţiunea este MySQL, întrucât ne conectăm la un server local, la Hostname/IP este
trecută adresa IP corespunzătoare localhost (127.0.0.1).
Conectarea la baza de date se face cu userul root.
Se apasă butonul Open şi se deschide fereastra următoare:
În această fereastră, în partea stângă se observă bazele de date disponbile, iar în partea dreaptă vedem
tabelele bazei de date selectate, dacă există sau avem tab-ul Query care permite scrierea de instrucţiuni
MySQL şi rularea acestora prin acţionarea butonului Execute SQL.
Această lecţie a dezvoltat conceptul de proiectare a unei baze de date relaţionale. Am prezentat în
cadrul ei exemple concrete de realizare a design-ului unei baze de date. Conceptul a fost prezentat şi
explicat pe larg, cu exemple concrete. Tot în cadrul acestei lecţii s-a realizat şi o introducere în limbajul
SQL.
De asemenea, s-a făcut şi o prezentare a aplicaţiilor pe care le vom folosi mai departe pentru
conectarea la o bază de date MySQL şi pentru realizarea de operaţii pe baza de date.
În următoarea lecţie se va trece la prezentarea sintaxei SQL. Vom discuta pe larg despre Limbajul
de Descriere a Datelor (LDD) şi despre comenzile (instrucţiunile) acestui limbaj care se referă la structura
bazei de date şi a tabelelor componente. Va fi prezentată sintaxa precum şi exemple concrete de utilizare
a acestor comenzi. Vor fi prezentate, de asemenea, tipurile de date existente în MySQL.
18