SPECIALIZAREA: ………………. ………….. ……. Lucrare de licență Baze de date relaționale – aspecte teoretice și practice Coordonator… [631079]
1
UNIVERSITATEA …………………. ……………………….. ……….
FACULTATEA …………………………….. …….. ……………
SPECIALIZAREA: ………………. ………….. …….
Lucrare de licență
Baze de date relaționale
– aspecte teoretice și practice
Coordonator științific, Student: [anonimizat]. dr. ………….. ………………………………………
Sesiunea 2019
2
Cuprins
Listă de figuri ………………………….. ………………………….. ………………………….. …………………. 3
Listă de secven țe de cod sursă ………………………….. ………………………….. ………………………. 4
Listă de tabele ………………………….. ………………………….. ………………………….. ………………… 4
1. INTRODUCERE ………………………….. ………………………….. ………………………….. ……… 6
2. ASPECTE TEORETICE ………………………….. ………………………….. ……………………….. 7
2.1 Noțiuni de bază ………………………….. ………………………….. ………………………….. ……. 7
2.2 Sistem informatic ………………………….. ………………………….. ………………………….. …. 7
2.3 Baze de date ………………………….. ………………………….. ………………………….. ………… 8
2.4 Diagrama entitate -relație ………………………….. ………………………….. ………………….. 12
2.5 Modelul relațional ………………………….. ………………………….. ………………………….. . 14
2.6 Transformarea entităților și relațiilor în model relațional ………………………….. ….. 18
2.7 Normalizarea relațiilor ………………………….. ………………………….. …………………….. 22
2.8 Prima formă normală (1FN) ………………………….. ………………………….. ……………… 25
2.9 A doua formă normală (2FN) ………………………….. ………………………….. …………… 28
2.10 A treia formă normală (3FN) ………………………….. ………………………….. …………. 29
3. ASPECTE TEHNOLOGICE ………………………….. ………………………….. ………………… 32
3.1 Descrierea mediilor de programare și a softwarelor utilizate …………………………. 32
3.2 Limbajul HTML ………………………….. ………………………….. ………………………….. …. 32
3.3 Fundamente ………………………….. ………………………….. ………………………….. ……….. 33
3.4 CSS (Cascading Style Sheets) ………………………….. ………………………….. ………….. 36
3.5 Instalarea pachetului de programe xampp (utilizat in cazul aplicației) ……………. 37
3.6 Instalare și setare ………………………….. ………………………….. ………………………….. … 37
3.7 Scrierea programelor PHP ………………………….. ………………………….. ……………….. 40
3.8 Limitari și reguli ale variabilelor ………………………….. ………………………….. ………. 41
3.9 Tipuri de date in PHP ………………………….. ………………………….. ………………………. 41
3.10 Sistemul de baze de date MySQL ………………………….. ………………………….. …… 42
3.11 Serverul Apache ………………………….. ………………………….. ………………………….. . 44
4. PROIECT INFORMATIC ………………………….. ………………………….. ……………………. 53
4.1 Cerințele aplicației ………………………….. ………………………….. ………………………….. 53
4.2 Proiectarea aplicației ………………………….. ………………………….. ……………………….. 58
3
4.3 Exemple de utilizare ………………………….. ………………………….. ……………………….. 60
4.4 Implementarea și testarea aplicatiei ………………………….. ………………………….. …… 66
4.5 Validarea a plicatiei ………………………….. ………………………….. …………………………. 72
5. CONCLUZII ………………………….. ………………………….. ………………………….. ………….. 74
BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. …………… 76
Listă de figuri
Figura 1 – Arhitectura SGBD pe două niveluri ………………………….. ………………………….. . 11
Figura 2 – Arhitectura SGBD pe trei niveluri ………………………….. ………………………….. … 11
Figura 3 – Diagramă ER ………………………….. ………………………….. ………………………….. …. 13
Figura 4 – Relație ………………………….. ………………………….. ………………………….. ………….. 13
Figura 5 – Diagrama Entitate -Relație a bazei de date book_sc ………………………….. ……… 14
Figura 6 – Diagrama unei baze de date conform modelului relațional ……………………….. 15
Figura 7 – Înregistrările conexe legate cu o "cheie", în modelul relațional …………………. 15
Figura 8 – Diagrama ER ………………………….. ………………………….. ………………………….. …. 19
Figura 9 – Identificarea atributelor și cheii primare ………………………….. …………………….. 20
Figura 10 – Cheia străină ………………………….. ………………………….. ………………………….. … 20
Figura 11 – Relație 0:N ………………………….. ………………………….. ………………………….. ….. 21
Figura 12 – Cheia compusă ………………………….. ………………………….. …………………………. 21
Figura 13 – Diagrama rezultată ………………………….. ………………………….. ……………………. 21
Figura 14 – Structura bazei de date ………………………….. ………………………….. ………………. 60
Figura 15 – Pagina de start și meniul principal ………………………….. ………………………….. . 61
Figura 16 – Lista cărților din categoria aleasă ………………………….. ………………………….. .. 61
Figura 17 – Informații detaliate despre cartea selectată ………………………….. ……………….. 62
Figura 18 – Coșul de cumpărături ………………………….. ………………………….. ………………… 62
Figura 19 – Formularul pentru datele personale și datele de livrare ………………………….. . 63
Figura 20 – Formularul pentru plata cu cardul ………………………….. ………………………….. . 64
Figura 21 – Finalizarea plății si trimiterea cu succes a comenzii ………………………….. ….. 64
Figura 22 – Logare administrator ………………………….. ………………………….. ………………… 65
Figura 23 – Meniul principal al administratorului ………………………….. ………………………. 65
Figura 24 – Formular pentru a adăuga a nouă carte ………………………….. …………………….. 66
4
Figura 2 5 – Adăugarea cu succes a unei cărți ………………………….. ………………………….. … 66
Figura 26 – Crearea bazei de date si a tabelului de clienți ………………………….. ……………. 67
Listă de secven țe de cod sursă
Fragment d e cod sursă 1 – Afișarea coșului de cumpărături ………………………….. ………… 69
Fragment de cod sursă 2 – Funcția de inserare a unei noi categorii în baza de date …….. 70
Fragment de cod sursă 3 – Funcția de inserare a unei noi cărți în baza de date …………… 70
Fragment de cod sursă 4 – Funcția de actualizare a unei categorii ………………………….. … 71
Fragment de cod sursă 5 – Funcția de actualizare a unei cărți ………………………….. ………. 71
Fragment de cod sursă 6 – Funcți a de ștergere a unei categori ………………………….. …….. 72
Fragment de cod sursă 7 – Funcția de ștergere a unei cărți ………………………….. ………….. 72
Listă de tabele
Tabel 1 – Exemplu de date nenormalizate ………………………….. ………………………….. ……… 23
Tabel 2 – Tabel clienți ………………………….. ………………………….. ………………………….. ……. 24
Tabel 3 – Tabel tranzacții ………………………….. ………………………….. ………………………….. .. 24
Tabel 4 – Design care încalcă 1FN ………………………….. ………………………….. ……………….. 25
Tabel 5 – Solutie aparentă de 1FN ………………………….. ………………………….. ……………….. 26
Tabel 6 – Design pentru a ajunge la 1FN ………………………….. ………………………….. ………. 27
Tabel 7 – Tabelul Numelor clienților – în 1FN ………………………….. ………………………….. .. 27
Tabel 8 – Tabelul Clienți Numere de telefon – în 1FN ………………………….. …………………. 27
Tabel 9 – Relație care nu respectă 2FN ………………………….. ………………………….. …………. 28
Tabel 10 – Tabel producători – în 2FN ………………………….. ………………………….. ………….. 29
Tabel 11 – Tabel mod ele – în 2FN ………………………….. ………………………….. ………………… 29
Tabel 12 – Relație care e în 2FN dar nu e în 3FN ………………………….. ……………………….. 30
Tabel 13 – Tabel caștigători turneu – în 3FN ………………………….. ………………………….. ….. 31
Tabel 14 – Tabel Data nasterii caștigătorilor – în 3FN ………………………….. …………………. 31
Tabel 15 – Tabel de cerin țe ………………………….. ………………………….. …………………………. 57
Tabel 16 – Detaliere caz de ut ilizare – Utilizator Guest ………………………….. ………………. 58
Tabel 17 – Detaliere caz de utilizare – Administrator ………………………….. …………………. 58
5
Tabel 18 – Caz de testare – Logare cu succes ………………………….. ………………………….. .. 73
Tabel 19 – Caz de testare – Logare fără succes ………………………….. ………………………….. 73
6
1. INTRODUCERE
Acest proiect tratează aspecte teoretice ale proiectării bazelor de date relaționale
și transpune aceste aspecte în practică prin crearea unei aplicații web util izând limbajele
PHP, CSS, HT ML. Pentru proie ctarea bazei de date s-a folosit sistemul de gestiune a
bazalor de date MySQL.
În capitolul I am descris sistemul informatic, utilizarea lui și etapele ciclului de
viață ale unui sistem informatic, reușind să integrez și să implementez ideea ce a stat la
bază aplicației construite. De asemenea am descris noțiune de bază despre bazele de date.
În capitolul II am exemplificat mediile de programare și software -lor utilizat e în
crearea aplicației, prezentând mai multe exemple de c od HTML , PHP și MySql.
În capitolul III am făcut referire la proiectul informatic realizat , o librărie librărie
electronică, disponibila pentru web , am descris cerințele aplicației, arhitec tura ei, am
oferit diferite exemple de utilizare, pentru fiecare operație în parte și am prezentat modul
de validare a aplicației. Programul asigură mai multe funcționalități folosite în
administrarea și gestionarea unei librării electronice cât și pentru vânzarea cărților și
achitarea lor prin in termediul cardurilor de credit.
7
2. ASPECTE TEORETICE
2.1 Noțiuni de baz ă
Calculatoarele sunt folosite în foarte multe domenii în viața de zi cu zi. De la
ingineri la doctori, studenți, profesori, organizații guvernamentale, toți folosesc
computerele pentru a îndeplini sarcini specifice, pentru divertisment sau doar pentru a
îndeplini mai ușor munca în birou. Calculatoarele ne -au ușurat viața. Printre avanta jele
folosirii calculatoarelor se numără faptul că oferă o mare precizie și performață, de
asemenea calculatoarele pot realiza o sarcină de lucru într-un timp foarte scurt, în
contextul în care aceeași sarcina rezolvata manual ar dura mult timp. Calculatoarele au
dus industria și întreprinderile la un nivel complet nou. Acestea sunt folosite la domiciliu
în scopuri de lucru și de divertisment, la birou, în spitale, în organizaț ii guvernamentale.
Datele care sunt introduse într -o aplicație într -un calculator necesită o interpretare
pentru a deveni informații. Pentru a traduce datele către informații, trebuie luați în
considerare mai mulți factori cunoscuți. Termenul de metadate este folosit pentru a face
referire la datele cunoscute despre date. Metadatele pot fi implicite, specificate sau
oferite . Datele privind evenimentele sau procesele fizice vor avea, de asemenea, o
componentă temporală. În aproape toate cazurile, această co mponentă temporală este
implicită. Acesta este cazul când un program , cum ar fi un magazin online primește o
comandă de la un client. Când comanda este primită, se presupune că datele au ca
referință temporală: "acum". Deci, aplicația înregistrează împreun ă cu datele de comandă
și data și ora. Când programul afișează comenzile primite, trebuie să raporteze și data și
ora (metadatele) pentru fiecare comandă . Acesta este un exemplu de procesare a datelor
și traducerea lor în informații .
2.2 Sistem informatic
Un sistem informatic este un computer de bază, complet și funcțional, care
include toate componentele hardware și software necesare pentru a -l face funcțional
pentru un utilizator. Acesta ar treb ui să aibă capacitatea de a citi informații de intrare, de
a procesa a date și de a crea informații din datele procesate , pentru a fi stocate în baza de
date și / sau pentru a fi afișate utilizatorului. Un sistem informatic permite utilizatorilor să
introd ucă, să manipuleze și să stocheze date. Sistemele informatice includ de obicei un
8
calculator , un monitor, o tastatură, un mouse și alte componente opționale. Toate aceste
componente pot fi integrate și în unități all -in-one, cum ar fi un laptop.
În timpul etapei de procesare a datelor, sunt fu rnizate seturi de instrucțiuni ,
cunoscute sub denumirea de programe , pentru a instrui sistemul să știe ce să fa că cu
datele introduse de utilizator . Fără aceste programe, calculatorul nu ar ști cum să
proceseze datele care intră în sistem, iar datele ar putea fi eliminate. Cunoscut ca un
calculator de programe stocate local , acest tip de calculator este cel mai frecvent utilizat
astăzi. Este foarte flexibil, deoarece poate procesa orice sarcină prin încărcarea unui
program din memorie. Sistemele informatice pot lucra singur e sau pot accesa alte
dispozitive externe sau conectate la alte sisteme informatice.
2.3 Baze de date
O bază de date, uneori numită și "bancă de date", reprezintă o modalitate de
stocare a unor informații și date pe un suport extern (un dispozitiv de stocare), cu
posibilitatea regăsirii rapide a acestora . O bază de date este o colecție de informații care
este organizată astfel încât să fie ușor accesibilă, gestionată și actualizată. Datele sunt
organizate în rânduri, coloane și tabele și sunt indexate pentru a facilita găsirea
informațiilor relevante. Datele sunt actualizate, extinse și șterse pe măsură ce se adaugă
informații noi. Bazele de date conțin, de obicei, agregări ale înregistrărilor sau fișierelor
de date, cum ar fi tranzacțiile de vânzare, cataloagele produselor și profilurile clienților.
De obicei, un administrator de baze de date oferă utilizatorilor posibilitatea de a
controla accesul la citire / scriere, specifică generarea de rapo arte și analizează gradul de
utilizare a bazei de date . Unele baze de date oferă compatibilitatea ACID (atomicitate,
consistență, izolare și durabilitate) pentru a garanta că datele sunt coerente și că
tranzacțiile sunt complete. Bazele de date sunt p redom inante în sistemele mari , dar sunt
prezente și pe stațiile de lucru distribuite mai mici și pe calculatoarele personale.
Un Sistem de gestiune a bazelor de date (SGBD) definește o categorie de
programe care sunt capabile de crearea și gestionarea bazelor d e date. SGBD oferă
utilizatorilor și programatorilor o modalitate sistematică de a crea, prelua, actualiza și
gestiona datele. Acesta funcționează în principal ca o interfață între baza de date și
utilizatorii finali sau aplicații, asigurând că datele sunt organizate în mod corect și rămân
ușor accesibile.
9
Clasificare a SGBD
Există mai multe criterii pe baza cărora se clasifică sisteme de gestiune a bazelor
de date , cum ar fi modelul de date, numerul de utilizatori și distribuția bazelor de date,
toate des crise mai jos.
Clasifi carea bazată pe modelul de date conține c el mai popula r model de date
utilizat astăzi: modelul de date relațional. Sisteme precum Oracle, MS SQL Server, DB2
și MySQL oferă suport pentru acest model. Alte modele tradiționale, cum ar f i modelele
de date ierarhice și modelele de date de rețea, sunt încă folosite în industrie, în principal
pe platformele mainframe (calculatoare mari folosite de instituții guvernamentale ș i
industriale) . Cu toate acestea, ele nu sunt utilizate în mod obișn uit datorită complexității
lor. Acestea sunt denumite modele tradiționale, deoarece au precedat modelul relațional.
Clasificare bazată pe numărul de utilizatori pe care îi suportă un sistem de bază se
împarte în sisteme pentru un singur utilizator, care s uportă un singur utilizator la un
moment dat, sau un sistem e de baze de date cu mai mulți utilizatori, care suportă
simultan mai mulți utilizatori.
Clasificarea baza tă pe distribuția bazei de date conține patru categorii de sisteme
de distribuție principa le pent ru sistemele de baze de date. Primul ar fi sistemul
centralizat de baze de date în care SGBD și baza de date sunt stocate într -un singur site
care es te utilizat și de alte sisteme. În s istemul de baze de date distribuit , baza de date
actuală și SGBD sunt distribuite la diverse site -uri care sunt conectate printr -o rețea de
calculatoare . Sistemele omogene de baze de date distribuite utilizează același SGBD din
mai multe site -uri. Schimbul de date între aceste site -uri poate fi ușor de efectuat . De
exemplu, sistemele de informații dintr -o bibliotecă ale aceluiași furnizor, utilizează
același SGBD , care permite schimbul facil de date între diversele site-uri ale bibliotecii.
Într-un sistem de baze de date distribuite eterogene, diferite site -uri ar putea să utilizeze
diferite SGBD , dar există și alte programe comune care să sprijine schimbul de date între
aceste site -uri. De exemplu, diferitele sisteme de baze de date ale bibliotecilor folosesc
același format de catalogare, care poate fi citit de calculat or, pentru a susține schimbul de
date de bibliotecă.
10
Arhitectura unui SGBD
Un sistem de gestiune a bazelor de date nu este întotdeauna direct disponibil
pentru utilizatori și aplicații pentru a accesa și a stoca date în el. Un sistem de
gestiune a bazelo r de date poate fi centralizat (toate datele stocate într -o singură
locație), descentralizat (mai multe copii ale bazei de date în locații diferite) sau
ierarhic, în funcție de arhitectura sa.
Există, de asemenea, o arhitectură 1 -tier bazată pe 1 nivel de baze de date,
aceasta fiind atunci când baza de date este direct disponibilă utilizatorului pentru a
stoca date. În general, o astfel de configurare este folosită pentru dezvoltarea
aplicațiilor locale, unde programatorii comunică direct cu baza de date ș i pentru a
primi un răspuns rapid. Dar din punct de vedere logic arhitectura bazelor de date este
de două tipuri: arhitectura pe două niveluri (2-tier) și arhitectura pe trei niveluri (3-
tier).
Arhitectura SGBD pe două niveluri (2-tier) include un strat reprezentat de
aplicație, între utilizator și SGBD , care este responsabil să comunice cererea
utilizatorului către sistemul de gestionare a bazei de date și apoi să trimită răspu nsul
din SGBD către utilizator. O interfață a aplicație cunoscută sub numele d e ODBC
(Open Database Connectivity) furnizează un API (Application Programming
Interface ) care permite programului clientului să apeleze SGBD . Majoritatea
furnizorilor de SGBD furnizează d rivere ODBC pentru SGBD -ul lor. O astfel de
arhitectură furnizează s ecuritatea suplimentară a SGBD , deoarece nu este expusă
direct utilizatorului final. De asemenea, securitatea poate fi îmbunătățită prin cererea
de autentificare a utilizatorilor si prin adăuga rea de verificări de securitate în cardul
aplicației de asemene a.
11
Figura 1 – Arhitectura SGBD pe două niveluri
Arhitectura bazei de date pe trei niveluri este arhitectura cea mai frecvent
utilizată pentru aplicațiile web.
Figura 2 – Arhitectura SGBD pe trei nivelu ri
Este o extensie a arhitecturii pe 2 niveluri . În arhitectura pe două niveluri,
avem o aplicație care poate fi accesat ă programatic pentru a efectua diverse operații
pe SGBD . Aplicația în general înțelege limbajul de acces la baze de date și
procesează cererile utilizatorilor finali către SGBD. În arhitectura pe trei niveluri, se
adaugă un nou nivel, între aplicație și utlizator / client, interfața grafică cu utilizatorul
(GUI – Graphical User Interface ), pentru ca utilizatorul final să interacționeze cu
SGBD. Pentru utilizatorul final, stratul GUI este sistemul de baze de date, iar
utilizatorul final nu are nicio idee despre stratul de aplicație și despre sistemul SGBD.
12
În MySQL, pagina PHPMyAdmin, este cel mai bun exemplu de arhitectură bazată pe
3 nive luri DBMS.
2.4 Diagrama entitate -relație
Modelul ER (Entitate -Relație) este o diagramă de model conceptual de date la
nivel înalt. Modelul entitate -relație se bazează pe noțiunea de entități din lumea reală și
relația dintre ele. Modelarea ER ajută la a anali za în mod sistematic cerințele de date
pentru a produce o bază de date bine concepută. Deci, este considerată o bună practică de
a realiza modelarea ER înaint e de a implementa baza de date. Diagramele ER sunt un
instrument vizual care este util pentru a re prezenta modelul ER. A fost propus de Peter
Chen în 1971 pentru a crea o convenție uniformă care să poată fi folosită pentru baza de
date relațională și pentru rețea. El și -a propus să utilizeze un model ER ca o abordare
conceptuală de modelare.
Entitățile reprezintă un lucru din lumea reală. Poate fi un lucru fizic sau pur și
simplu un fapt sau un eveniment care se întâmplă în lumea reală. O entitate poate fi un
loc, o persoana, un obiect , un evenimentul sau un concept , care stochează datele în baza
de dat e. Caracteristicile entităților trebuie să aibă un atribut și o cheie unică. Fiecare
entitate este alcătuită din anumite "atribute" care reprezintă acea entitate. Câteva exemple
de entități care fac parte din categoriile enumerate mai sus ar fi: pentru o e ntitate care
reprezintă o p ersoana , aceafta poate fi: angajat, student, p acient ; un loc : magazin,
mlădire ; un obiect: mașină, produs; un e veniment: vânzare, înregistrare, reînnoire ; un
concept: cont, c urs.
Un set de entități este un grup de entități simil are. Poate conține entități cu valori
similare de distribuire a atributelor. Entitățile sunt reprezentate de proprietățile lor, care
se numesc și atribute. Toate atributele au valori separate. De exemplu, o entitate student
poate avea nume, vârstă, clasă ca atribute.
Un alt exemplu de entități: o universitate poate avea câteva departamente. Toate
aceste departamente angajează diferiți lectori și oferă mai multe cursuri, iar studenții se
înscriu la diferite cursuri, iar legătura în diagrama ER se face precu m în Figura 3.
13
Figura 3 – Diagramă ER
Relația este o asociere între două sau mai multe entități. De exemplu, Ionuț
lucrează în departamentul de chimie ( Figura 4). Entitățile participă la relații. Putem
identifica adesea relațiile cu verbe sau expresii.
Figura 4 – Relație
Atributul este o proprietate cu valoare unică, fie de tip entitate, fie de tip de
relație. De exemplu, un curs poate avea atribute: ora, data, durata, locul etc. Un atribut
este reprezentat de o elipsă. Există mai multe tipuri de atribute . Atribut ul simplu nu poate
fi împărțit mai departe, d e exemplu, numărul matricol al unui student. Acesta s e ma i
numește și o valoare atomică. Atributul compus permite spargerea sau separarea lui. D e
exemplu, numele complet al unui student poate fi separat în prenume și nume. Atribut ul
derivat nu este inclus în baza de date fizică, c u toate acestea, valorile lui sunt derivat e din
alte atribute prezente în baza de date. De exemplu, vârsta nu trebuie să fie stocată direct,
în schimb, acesta ar trebui să fie derivat din data de naștere a respectivei persoane.
Atribut ul multiplu conține valorile multivaluate, care pot avea mai mu lte valori.
Cardinalitatea definește atributele numerice ale relației dintre două e ntități sau
seturi de entități. Sunt patru tipuri de relații cardinale. Relația unu la unu (1 -1 – One-to-
one) presupune ca o entitate din setul de entități X poate fi asoci ată cu cel mult o entitate
a setului de entități Y și invers. De exemplu: u n student se poate înregistra pentru
numeroase cursuri. Cu toate acestea, în diagramă toate aceste cursuri au o singură linie
înapoi la acel student.
Cheia primară este o coloană di ntr-o tabelă de bază relațională specială (sau o
combinație de coloane) desemnată pentru a identifica în mod unic toate înregistrările
tabelului. Caracteristicile principale ale cheii primare sunt: trebuie să conțină o valoare
14
unică pentru fiecare rând de date, nu poate conține valori nule, o cheie primară este fie o
coloană dintr -o tabelă existentă, fie o coloană generată în mod specific de către baza de
date, conform unei secvențe definite. Conceptul de cheie primară este esențial pentru o
bază de date re lațională eficientă. Fără cheia primară și conceptele de cheie străine strâns
legate, bazele de dat e relaționale nu ar funcționa. Aproape toate persoanele se întâlnesc
în viața de zi cu zi cu cu cheile primare din bazele de date, dar fără ca să știe. De
exemplu, elevii primesc numere de identificare unice (număr matricol), în mod obișnuit,
iar toți cetățenii din România dispun de cod numeric personal (CNP) atribuite de stat și
identificabile în mod unic.
Un alt exemplu de diagrama Entitate – Relație este p rezentat in Figura 5. Se pot
observa cheile primare simple sau compuse, relațiile dintre tabele, atributele, tipul și
dimensiunea acestora.
Figura 5 – Diagrama Entitate -Relație a bazei de date book_sc
2.5 Modelul relațional
Modelul relațional pentru gestionarea bazelor de date este o abordare a gestionării
datelor utilizând o structură și un limbaj compatibil cu logica predicatului de ordinul întâi
15
descrisă în 1969 de către omul de știi nță engl ez Edgar F. Codd este reprezentată în
termeni de tupluri, grupate în relații. O bază de date organizată în termeni de model
relațional este o bază de date relațională.
Figura 6 – Diagrama unei baze de da te conform modelului relaț ional
Scopul modelului relațional este de a furniza o metodă declarativă pentru
specificarea datelor și a interogărilor: utilizatorii afișează în mod direct ce informații
conține baza de date și ce informații doresc de la ea și lăsa software -ul sistemului de
gestionare a bazelor de date să aibă grijă să descrie structurile de date pentru stocarea
datele și procedurile de recuperare pentru a răspunde la întrebări.
Figura 7 – Înregistrările conexe legate cu o "cheie", în modelul rel ațional
Cele mai multe baze de date relaționale utilizează definiția datelor SQL și același
limba j de interogare. Un tabel dintr -o schemă de bază de date SQL cor espunde unei
variabile predicat ; conținutul unui tabel într -o relație; constrângerile cheie, al te
16
constrângeri și interogările SQL corespund predicatelor. Cu toate aces tea, bazele de date
SQL se abat de la modelul relațional în multe detalii, iar Codd a argumentat în mod ferm
împotriva abaterilor care compromit principiile originale.
Există numeroa se avantaje în folosirea modelului relațional. Simplitatea este unul
ditre ele, structurile modelului relațional fiind construite într -un mod care evită
complexitatea. Structura tabelului este o organizată intuitiv, familiară majorității
utilizatorilor, în special celor care au lucrat cu foi de calcul fizice sau software, au
verificat registrele sau alte date tabulare. Datele sunt organizate în mod natural în cadrul
modelului, simplificând dezvoltar ea și utilizarea bazei de date.
Datele sunt ușor de recuper are, î n cadrul modelului relațional, accesarea datelor
într-o bază de date nu necesită navigarea pe o cale rigidă printr -un copac sau o ierarhie.
Utilizatorii pot interoga orice tabel din baza de date și pot combina tabelele conexe
utilizând funcții specia le de conectare pentru a include datele relevante conținute în alte
tabele ale rezultatelor. Rezultatele pot fi filtrate în funcție de conținutul oricărei coloane
și de orice număr de coloane, permițând utilizatorilor să obțină cu ușurință rezultate
semnif icative. Utilizatorii pot alege care coloane să sa fie incluse în rezultate, astfel încât
să fie afișate numai datele relevante.
Integritatea datelor este o caracteristică esențială a modelului relațional.
Verificările riguroase asupra dateler introduse asigură că datele se încadrează în intervale
acceptate și există datele solicitate. Integritatea referențială între tabele împiedică
înregistrarea datelor incomplete . Integritatea datelor contribuie la asigurarea exactității și
consecvenței datelor.
Flexibil itate reprezintă un alt avantaj al m odelul ui relational de baze de date.
Acesta fiind în mod natural scalabil și extensibil, oferind o structură flexibilă care să
răspundă cerințelor în schimbare și cantităților tot mai mari de date. Modelul relațional
permite modificarea cu ușurință a unei structuri de bază de date fără a afecta datele sau
restul bazei de date. Analistul bazei de date poate adăuga, elimina și modifica rapid și
ușor tabelele și coloanele dintr -o bază de date existentă pentru a îndeplini cer ințele
clienților . Nu există teoretic nici o limită a numărului de rânduri, coloane sau tabele. În
realitate, creșterea și schimbarea sunt limitate de sistemul de gestionare a bazelor de date
17
relaționale și de hardware -ul de calcul fizic, iar modificările pot afecta aplicațiile externe
proiectate pentru o structură spe cifică a bazei de date.
Există o metodologie sistematică pentru asigurarea unui design bazei de date
relaționale fără anomalii care pot afecta integritatea și exactitatea bazei de date.
"Norma lizarea bazei de date" oferă un set de reguli, calități și obiective pentru proiectarea
și revizuirea unei structuri de baze de date. Obiectivele de normalizare sunt descrise în
nivele numite "forme normale". Fiecare nivel de normalizare trebuie completat înainte de
a trece la nivelul următor. Un design de baze de date este în general considerat normalizat
atunci când îndeplinește cerințele celei de a treia forme normale. Normalizarea oferă
designerilor încredere a că designul bazei de date este robust și de încredere.
Reguli de integritate a datelor
Integritatea datelor este completitudinea, precizia și coerența datelor. Acest lucru
poate fi indicat de absența modificării între două instanțe sau între două actualizări ale
unei înregistrări de date, ceea ce î nseamnă că datele sunt intacte și neschimbate.
Integritatea datelor este, de obicei, impusă în timpul fazei de proiectare a bazei de date
prin utilizarea procedurilor și regulilor standard. Integritatea datelor poate fi menținută
prin utilizarea diferitelo r metode de verificare a erorilor și a procedurilor de validare.
Integritatea datelor este aplicată atât în modele de baze de date ierarhice, cât și în bazele
de date relaționale. Următoarele trei constrângeri de integritate sunt utilizate într -o
structu ră de baze de date relaționale pentru a atinge integritatea datelor:
Integritatea entității: aceasta se referă la conceptul de chei primare. Regula
prevede că fiecare tabel trebuie să aibă propria cheie primară și că fiecare cheie trebuie să
fie unică și s a nu fie nulă.
Integritatea referențială: Acesta este conceptul de chei străine. Norma afirmă că
valoarea cheii externe poate fi în două stări. Prima stare este că valoarea cheii externe se
va referi la o valoare a cheii primare a unui alt tabel sau poate fi nulă. Fiind nulă ar putea
însemna pur și simplu că nu există relații sau că relația este necunoscută.
Integritatea domeniului: Aceasta afirmă că toate coloanele dintr -o bază de date
relațională sunt într -un domeniu definit.
Conceptul de integritate a da telor asigură că toate datele dintr -o bază de date pot fi
urmărite și conectate la alte date. Acest lucru asigură că totul este recuperabil și căutat.
18
Având un singur sistem de integritate a datelor, bine definit și bine controlat, crește
stabilitatea, per formanța, reutilizarea și mentenabilitatea. Dacă una dintre aceste
caracteristici nu poate fi implementată în baza de date, aceasta trebuie implementată prin
software.
2.6 Transformarea entităților și relațiilor în model relațional
Două modele foarte importan te utilizate în proiectarea bazei de date sunt modelul
de entitate -relație (ER) și modelul relațional. În modelul E R, datele sunt reprezentate
folosind entită ți, iar relațiile sunt definite între aceste entități. Cu toate acestea, cu
modelul relațional, en titățile și relațiile acestora respectă reguli stricte.
În proiectarea bazei de date d e obicei, prima dată este dezvolt at un model ER și
apo ieste transformat într -un model relațional. Modelul rela țional este similar modelului
ER, dar se bazează pe o ram ură matematica numită algebră relațională, și ca ata re, există
definiții stricte și reguli privind elementele acestui model. Câteva dintre aceste definiții și
reguli sunt următoarele:
O relație este definită ca o tabelă bidimen sională care conține rânduri și coloane.
Rândurile sunt instanțe ale entității și coloanele sunt atribute ale entitate.
Oricare două rânduri din tabel nu trebuie să fie identice – fiecare rând trebuie să
fie unic , iar ordinea rândurilor nu este importantă.
Fiecare coloană trebuie s ă aibă un nume unic, iar ordinea coloanelor nu este
importantă. Ele trebuie să conțină și valori unice – valori multiple și grupurile
repetate nu sunt permise.
O cheie este un grup de unul sau mai multe atribute care identifică în mod unic un
rând. F iecare tabel trebuie să aibă o cheie. Deoarece fiecare rând din tabel este
unic, cheia care este folosit ă pentru a distinge un rând de altul poate fi alcătuit ă
dintr -un singur atribut sau poate fi compus , poate conține mai multe atribute.
Fiecare coloană (atribu t) într -un tabel trebuie să depindă numai de cheia primară.
Aceasta nu ar trebui să depindă de nici o altă coloană din tabel sau de o parte a
cheii primare, dacă este o cheie compusă.
Exemplu de transformare a unui model E R în mod el rațional :
19
Modelul ent itate-relație: O diagramă E R este utilizat ă pentru a reprezenta modelul
ER. Aceasta c onține toate entitățile cunoscute pentru scenariul dat, atributele,
identificatorii și relațiile care exi stă printre entități.
Figura 8 – Diagr ama ER
În Figura 8 Identificatorii unici sunt indicați cu un asterisc (*) și identificatori non –
unici cu un plus (+).
Transformare:
Pasul 1:
Se identifică în mod clar cheia primară și atributele pentru fiecare e ntitate definită
în modelul ER și se asigură că este în conformitate c u regulile modelului relațional . În
Figura 9 fiecare entitate are cheia primară identifi cată clar (notată cu PK – Primary Key) și
atributele care satisfac regulile discuta te anterior. Acesta devine un tabel în model ul
relațional.
20
Figura 9 – Identificarea atributelor și cheii primare
Pasul 2:
Se g rupează împreună tabelele ( cele care mai devreme reprezentau entități) ș i
relațiile acestora care au un cardinalitatea unei relații 0:1 sau 1:1. Opțional, se precizează
ce poate și trebuie să se întâmple într -o relație, iar cardinalitatea indică numărul
evenime ntelor entității într -o relație. Se menține structura inițială, nu se schimbă
principala sa structură, cheia primară sau oricare dintre atributele sale. Cheia primară a
celuilalt tabel din relație devine o cheie străină . Acest lucru este indicat de un FK –
Foreign Key în tabelul de absorbție.
Figura 10 – Cheia străină
În cazul în care cardinalitatea dintre relația absorbită și cealaltă tabelă în relație a
fost de ordinul N (0: N sau 1: N), atunci tabelul modificat devine o parte a unei relații
unu-la-mulți în noul model relațional. În caz contrar, dacă cardinalitatea dintre relația
absorbită și cealaltă tabelă din relație a fost 1 (0: 1 sau 1: 1), atunci noua relație devine o
relație unică în noul model relațional.
Pasul 3:
Relațiile rămase , ale căror cardinalități sunt N (1: N sau 0: N) pe ambel e părți
devin noi t abele în noul model relațional.
21
Figura 11 – Relație 0:N
Cheile primare din cele două tabele implicate în relație devin o cheie primară
compusă în noul tabel, iar tabelul nou are de obicei un nume care este o formă combinată
a celor două nume de tabele originale.
Figura 12 – Cheia compusă
Tabela nou creată devine o parte importantă a relației dintre ambele tabele și astfel
se creează o relație multiplă cu cele două tabele preexistent e. În unele cazuri, tabelul nou
creat poate avea propriile atribute.
Diagra ma rezultată este prezentată în Figura 13.
Figura 13 – Diagrama rezultată
În timp ce dia grama E R afișează natu ra logică a datelor existente în domeniul
utilizatorului, modelul relațional arată modul în care aceste date vor fi reprezentate într –
un sistem relațional d e gestionare a bazelor de date . Acest model este important deoarece
22
sistemele de gestionare a bazelo r de date cele mai comune și populare utilizate astăzi sunt
relaționale, iar diagramele de modele relaționale pot fi implementate direct pe orice
SGBDR .
2.7 Normalizarea relațiilor
Procesul de normalizare a bazei de date constă în structurarea unei baze de da te
relaționale în conformitate cu o serie de așa -numite forme normale pentru a reduce
redundanța datelor și a îmbunătăți integritatea datelor. Aceste principii au fost inițial
propuse de Edgar F. Codd ca parte integrantă a modelului său relațional.
Normal izarea presupune organizarea coloanelor (atributelor) și a tabelelor
(relațiilor) unei baze de date pentru a se asigura că dependențele lor sunt impuse în mod
corespunzător de constrângerile de integritate ale bazei de date. Normalizarea se
realizează prin fie prin aplicarea unor reguli formale fie printr -un proces de sinteză
(crearea unui nou design al bazei de date), fie prin descompunere (îmbunătățirea unui
design de bază de date existent).
Atunci când se face o încercare pentru a modifica (actualiza, i nsera în sau șterge)
o relație, trei reacții nedorite pot să apară în relațiile care nu au fost suficient de
normalizate.
Anomalia de actualizare în care a celeași informații pot fi exprimate pe mai multe
rânduri; prin urmare actualizările relației pot du ce la inconsecvențe logice. De exemplu,
fiecare înregistrare dintr -o relație "Abilități angajați" poate conține un ID de angajat, o
adresă de angajat și o abilitate; prin urmare, în cazul în care e necesar să se aplice o
schimbare de adresă pentru un anumi t angajat , modificarea trebuie făcută în mai multe
înregistrări (câte una pentru fiecare abilitate). Acest fenomen este cunoscut ca o anomalie
de actualizare.
Există circumstanțe în care anumite fapte nu pot fi înregistrate deloc. De exemplu,
fiecare înre gistrare într -o relație "Facultatea și Cursurile" poate conține un număr de
identificare a Facultății, Numele Facultății, Data angajării și Codul cursului. Prin urmare,
putem înregistra detaliile oricărui membru al facultății care predă cel puțin un curs, dar
nu putem înregistra un nou membru al facultății care nu a fost încă însărcinat să predea
cursuri, cu excepția faptului că a stabilit Codul cursului la nul. Acest fenomen este
cuno scut ca o anomalie de inserție.
23
În anumite circumstanțe, ștergerea datel or care reprezintă anumite fapte necesită
ștergerea datelor care reprezintă fapte complet diferite. Relația "Facultatea și Cursurile"
descrisă în exemplul precedent suferă de acest tip de anomalie, pentru că în cazul în care
un membru al facultății încetea ză temporar să fie însărcinat cu or ice cursuri, trebuie să
ștergem înregistr arile pe care apare acest membru al facultății , ștergând de asemenea,
membrului facultății, cu excepția cazului în care setăm Codul cursului la nul. Acest
fenomen este cuno scut ca o anomalie de ștergere.
O bază de date complet normalizată permite ca structura sa să fie extinsă pentru a
se adapta la noi tipuri de date fără a schimba prea mult structura existentă. Ca urmare,
aplicațiile care interacționează cu ba za de date sunt afec tate minim. Relațiile normalizate
și relația dintre o relație normalizată și alta, oglindesc conceptele din lumea reală și
relațiile dintre ele.
De exemplu i nterogarea și manipularea datelor dintr -o structură de date care nu
este normalizată, cum ar fi re prezentarea următoare a clienților non -FNC, tranzacțiile cu
cărți de credit implică o complexitate mai mare decât este cu adevărat necesară:
Client Client ID Tranzacții
Ioan 1 Tr. ID Data Suma
12890 14-Oct-2018 −87
12904 15-Oct-2018 −50
Teodora 2 Tr.
ID Data Suma
12898 14-Oct-2018 −21
Andrei 3 Tr. ID Data Suma
12907 15-Oct-2018 −18
14920 20-Nov-2018 −70
15003 27-Nov-2018 −60
Tabel 1 – Exemplu de date nenormalizate
Fiecărui client îi corespunde unui "grup repetat" de t ranzacții. Prin urmare,
evaluarea automată a oricărei interogări referitoare la tranzacțiile clienților ar implica în
general două etape: d espachetarea grupurilor de tranzacții ale unuia sau mai multor clienți
care să permită examinarea tranzacțiilor indiv iduale dintr – un grup și d erivarea unui
rezultat de interogare bazat pe rezultatele primei etape .
24
De exemplu, pentru a afla suma monetară a tuturor tranzacțiilor c are au avut loc
în octombrie 2018 pentru toți clienții, sistemul ar trebui să știe că trebu ie mai întâi să
despacheteze grupul de tranzacții al fiecărui client, apoi suma Sumei tuturor tranzacțiilor
astfel obținute unde Data tranzac ției este în luna octombrie 2018.
Una dintre ideile importante ale lui Codd a fost legată de complexitatea
structu rală care poate fi redusă. Reducerea complexității st ructurale oferă utilizatorilor,
aplicațiilor dar și SGBD -ului mai multă putere și flexibilitate pentru formularea și
evaluarea interogărilor. Un echivalent mai normalizat al structurii de mai sus ar pute a
arăta astfel:
Tabel 2 – Tabel clienți
Client ID Tr. ID Data Suma
1 12890 14-Oct-2018 −87
1 12904 15-Oct-2018 −50
2 12898 14-Oct-2018 −21
3 12907 15-Oct-2018 −18
3 14920 20-Nov-2018 −70
3 15003 27-Nov-2018 −60
Tabel 3 – Tabel tranzacții
În structura modificată, cheia este {ClientID} în prima relație și {ClientID, Tr.
ID} în cea de -a doua relație. Acum, fiecare rând reprezintă o tranzacție individuală c u
cartea de credit, iar SGBD poate obține răspunsul de interes, pur și simplu prin găsirea
tuturor rândurilor cu o dată care se încadrează în luna octombrie și însumarea Sumelor.
Structura de date plasează toate valorile pe picior de egalitate, expunând fi ecare direct la
SGBD , astfel încât fiecare poate participa direct la interogări. Î n situația precedentă unele
valori erau încorporate în structuri de nivel inferior care t rebuiau tratate în mod special. Client Client ID
Ioan 1
Teodora 2
Andrei 3
25
Versiunea normalizată permite, de asemenea, utilizat orului să schimbe numele
clientului într -un singur loc și să protejeze împotriva erorilor care apar dacă numele
clientului este greșit înscris pe unele înregistrări.
2.8 Prima f ormă normală ( 1FN)
Prima formă normală ( 1FN) este o proprietate a unei r elații într -o bază de date
relațională. O relație este în prima formă normală dacă și numai dacă domeniul fiecărui
atribut conține numai valori atomice (indivizibile), iar valoarea fiecărui atribut conține
numai o singură valoare din acel domeniu. O relați e se află în prima formă normală
atunci când nici unul dintre domeniile sale nu are seturi ca elemente. Prima formă
normală este o proprietate esențială a unei relații într -o bază de date relațională.
Criteriile care trebuie să le respecte relațiile petr u a fi în prima formă normală
sunt: eliminarea grupurilor repetitive în tabele individuale, crearea unui tabel separat
pentru fiecare set de date conexe, identificarea fiecărui set de date conexe cu o cheie
primară.
De exemplu scenarile din Tabel 4 ilustrează mai întâi modul în care un design de
bază de date ar putea încălca prima formă normal ă. În tabel se stochează numele și
numerele de telefon ale clienților. O cerință este să se rețină mai multe numere de telefon
pentru anumiți clienți. Cea mai simplă modalitate de a satisface această cerință este de a
permite coloanei "număr de telefon" ca în orice rând dat să conțină mai mult de o valoare:
Clienti
Client ID Prenume Nume Numere de telefon
123 Ioan Pop 555-861-2025, 192 -122-1111
456 Teodora Sas (555) 403 -1659 Ext. 53; 182 -929-2929
789 Andrei Bran 555-808-9633
Tabel 4 – Design care încalcă 1FN
Coloana cu numere de telefon conține doar text: numere de formate diferite și,
mai important, mai multe număr e pentru un client. Se duplică informații similare în
aceeași coloană. Dacă am fi mulțumiți de un text arbitrar, ar fi în regula. Dar nu este
deloc un text arbitrar: am intenționat în mod evident ca această coloană să conțină
numere de telefon. Văzute ca n umere de telefon, textul nu este atomic: poate fi
subdivizat. Această reprezentare a numerelor de telefon nu este în prima formă normală
26
deoarece coloanele conțin valori non -atomice și conțin mai mult de o valoare, un set de
valori.
O soluție aparentă est e cea de a introduce mai multe coloane:
Clienți
Client ID Prenume Nume Număr de telefon 1 Număr de telefon 2
123 Ioan Pop 555-861-2025 192-122-1111
456 Teodora Sas (555) 403 -1659 Ext. 53 182-929-2929
789 Andrei Bran 555-808-9633
Tabel 5 – Solutie aparentă de 1FN
Din punct de vedere tehnic, acest tabel nu încalcă cerința ca valorile să fie
atomice. Cu toate acestea, în mod informal, cele două coloane ale numărului de telefon
formează încă un "grup repetat": ele repetă ceea ce e ste conceptual același atribut, și
anume un număr de telefon. A fost introdusă o comandă arbitrară și lipsită de sens: de ce
este introdusă 555 -861-2025 în coloana Număr de telefon 1 și nu în coloana Număr de
telefon 2? Nu există niciun motiv pentru care c lienții să nu poată avea mai mult de două
numere de telefon, deci câte coloane de numere de telefon ar trebui să existe? Nu este
posibil să căutați un număr de telefon fără a căuta un număr arbitrar de coloane.
Adăugarea unui număr de telefon suplimentar p oate necesita reorganizarea tabelului prin
adăugarea unei coloane noi, mai degrabă decât prin adăugarea unui rând nou. Valoarea
nulă pentru Număr de telefon 2 pentru clientul 789 este, de asemenea, o problemă.
Design care respectă standardul 1FN
Pentru a aduce modelul în prima formă normală, s -au împărțit șirurile care pentru
a păstra informațiile despre numărul de telefon în entități "atomice" (adică indivizibile):
numere de telefon unice. Și pentru a avea granția că niciun rând nu conține mai mult de
un număr de telefon.
Clienți
Client ID Prenume Nume Număr de telefon
123 Ioan Pop 555-861-2025
123 Ioan Pop 192-122-1111
456 Teodora Sas 182-929-2929
27
456 Teodora Sas (555) 403 -1659 Ext. 53
789 Andrei Bran 555-808-9633
Tabel 6 – Design pentru a ajunge la 1FN
Se poate observa în Tabel 6 faptul că ID -ul nu mai este unic în această soluție cu
clienți duplicați. Pentru a identifica în mod unic un rând, trebuie să utilizăm o combinație:
ID, Număr de telefon. Valoarea combinației este unică, deși fiecare coloană conține
separat valori repetate. Iar faptul de a fi capabil să identifice unic un rân d este o cerință a
primei forme normal.
Un design care utilizează două tabele este soluția pentru a avea relația în prima
formă normală :
Nume c lienți
Client ID Prenume Nume
123 Ioan Pop
456 Teodora Sas
789 Andrei Bran
Tabel 7 – Tabel ul Numelor clienți lor – în 1FN
Clienți Numere de telefon
Id Client ID Număr de telefon
1 123 555-861-2025
2 123 192-122-1111
3 456 (555) 403 -1659 Ext. 53
4 456 182-929-2929
5 789 555-808-9633
Tabel 8 – Tabel ul Clienți Numere de t elefon – în 1FN
Coloanele nu conțin mai mult de un număr de telefon în acest design. În schimb,
fiecar e legătură din tabelul Clienți Numere de telefon, apare pe rândul propriu . Utilizând
Client ID ca și cheie, există o relație one-to-many între tabelul de nume și cel de numere
de telefon . Un rând din tabelul "părinte", Nume clienți , poate fi asociat cu mai multe
rânduri de numere de telefon în tabelul "copil", Clienți Numere de telefon , dar fiecare
28
număr de telefo n aparține unui singur client . Este de remarcat faptul că acest design
îndeplinește și cerințele suplimentare pentru a doua și a treia formă norma lă.
2.9 A doua formă normală (2FN)
A doua formă normală (2FN) este o formă normală utilizată în normalizarea bazei
de date. 2FN a fost definit inițial de E.F. Codd în 1971.
O relație este în a doua formă normală dacă îndeplinește următoarele două cerințe:
Este în prima formă normală (1FN)
Nu are nici un atribut non -prim, care este funcțional dependent de orice subset
corespunzător al oricărei chei candidate a relației. Un atribut non -prime al unei
relații este un atribut care nu face parte din nici o cheie ca ndidată a relației.
O relație este în 2NF dacă este în 1NF și fiecare atribut non -prime al relației este
dependent de întreaga cheie candidat.
O dependență funcțională față de o parte din orice cheie candidat este o încălcare
a 2FN. Pe lângă cheia primar ă, relația poate conține și alte chei candidate; este necesar să
se stabilească faptul că niciun atribut non -prime nu are dependențe parțiale la oricare
dintre chei le candidate.
Relația din Tabel 9 NU satisface 2NF deoarece mai multe înregistrări din coloana
Țara depind de o parte a chii candidate:
Modele – Producători de periuțe electrice
Producător Model Nume Model Țara
Forte X-Prime Forte X -Prime Italia
Forte Ultraclean Forte Ultraclean Italia
Dent -o-Fresh EZbrush Dent -o-Fresh EZbrush SUA
Brushmaster SuperBrush Brushmaster SuperBrush SUA
Kobayashi ST-60 Kobayashi ST -60 Japonia
Hoch Toothmaster Hoch Toothmaster Germania
Hoch X-Prime Hoch X -Prime Germania
Tabel 9 – Relație care nu r espectă 2FN
Chiar dacă designerul ar specifica să fie cheia primară Nume Model , relația nu
este în 2FN din cauza celorlalte taste candidate. {Manufacturer, Model} este, de
asemenea, o cheie candidat, iar țara producătorului depinde de un subset adecvat:
29
Producător. Pentru a face conformitatea designului cu 2NF, este necesar să avem două
relații:
Producători de periuțe electrice
Manufacturer Manufacturer Country
Forte Italia
Dent -o-Fresh SUA
Brushmaster SUA
Kobayashi Japonia
Hoch Germania
Tabel 10 – Tabel producători – în 2FN
Modele de periuțe electrice
Manufacturer Model Model Full Name
Forte X-Prime Forte X -Prime
Forte Ultraclean Forte Ultraclean
Dent -o-Fresh EZbrush Dent -o-Fresh EZbrush
Brushmaster SuperBrush Brushmaste r SuperBrush
Kobayashi ST-60 Kobayashi ST -60
Hoch Toothmaster Hoch Toothmaster
Hoch X-Prime Hoch X -Prime
Tabel 11 – Tabel modele – în 2FN
2.10 A treia formă normală (3FN )
A treia formă normală (3FN) este o formă normală care este fo losită pentru
normalizarea unui design de bază de date pentru a reduce redundanța datelor și a asigura
integritatea referențială, asigurându -se că: entitatea se află în a doua formă normală, nici
un atribut non -prime (non -key) nu este dependent de tranziți e de orice cheie, adică nici
un atribut non -prime nu depinde de alte atribute non -prime. Toate atributele non -prime
trebuie să depindă numai de cheia primară.
A treia formă normală a fost conceput pentru : a elimina anomaliile de date
nedorite; a reduce ne cesitatea de restructurare în timp; a face modelul de date mai
informativ; a face modelul de date neutru la diferite tipur i de statistici de interogare.
30
Codd a realizat mai târziu că 3FN nu a realizat primul dintre aceste obiective și a
dezvoltat Forma no rmală Boyce -Codd pentru a aborda limitările lui 3NF.
Definiția lui Codd precizează că un tabel este în 3NF dacă și numai dacă sunt
respectate ambele condiții:
Relația R (tabelul) este în a doua formă normală (2FN)
Fiecare atribut non -prim al lui R este de pendent de toate tranzițiile fiecărei chei a
lui R.
Un atribut non -prime al lui R este un atribut care nu aparține nici unei chei
candidate a R. O dependență tranzitantă este o dependență funcțională în care X → Z (X
determină Z) indirect, în virtutea lui X → Y și Y → Z
O definiție 3NF care este echivalentă cu Codd, dar exprimată diferit, a fost dată de
Carlo Zaniolo în 1982. Această definiție afirmă că un tabel este în 3NF dacă și numai
dacă, pentru fiecare dintre dependențele sale funcționale X → A, ce l puțin unul dintre
următoarele condiții:
X conține A (adică A este un subset al X, adică X → A este dependența
funcțională trivială), sau
X este o super cheie sau
Fiecare element al lui A -X, diferența stabilită între A și X, este un atribut prim
(adică fi ecare atribut din A -X este conținut în unele chei candidate)
Definiția lui Zaniolo dă un sens clar diferenței dintre 3NF și forma normală
Boyce -Codd mai strictă (FNBC). FNBC elimină pur și simplu a treia cerință ("Fiecare
element al A -X, diferența stabili tă între A și X este un atribut prim").
Un exemplu de tabel care respectă 2FN, dar nu îndeplinește cerințele 3NF este:
Turneu
Turneu An Câștigător Data nașterii câștigătorilor
Turneu Europa 1998 Alex Fred 21 Iulie 1975
Olipiada Națională 1999 Paul Alba 28 Semptembrie 1968
Maeștrii 1999 Alex Fred 21 Iulie 1975
Turneu Europa 1999 Bogdan Dragu 14 Martie 1977
Tabel 12 – Relație care e în 2FN dar nu e în 3FN
31
Deoarece fiecare rând din tabel trebuie să ne spună cine a câștigat un an umit
turneu într -un anumit an, cheia compusă {Turneu, An} este un set minim de atribute
garantate pentru a identifica în mod unic un rând. {Turneu, An} este o cheie candidat.
Încălcarea lui 3FN apare deoarece atributul non -prim Data nașterii câștigătorilor i
depinde în de cheia candidatului {Tournament, Year}. Faptul că data nașterii
câștigătorilor e dependentă în mod funcțional de Câștigător face ca tabelul să fie
vulnerabil la inconsecvențe logice, deoarece nu există nimic care să împiedice
prezentarea ac eleiași persoane cu diferite date de naștere pe diferite înregistrări.
Pentru a exprima aceleași fapte, respectând în același timp 3FN, este necesar să se
împartă tabelul în două:
Câștigători turneu
Tournament Year Winner
Turneu Europa 1998 Alex Fred
Olipiada Națională 1999 Paul Alba
Maeștrii 1999 Alex Fred
Turneu Europa 1999 Bogdan Dragu
Tabel 13 – Tabel caștigători turneu – în 3FN
Data nașterii câștigătorilor
Winner Date of Birth
Bogdan Dragu 14 Martie 1977
Alex Fred 21 Iulie 1975
Paul Alba 28 Semptembrie 1968
Tabel 14 – Tabel Data nasterii caștigătorilor – în 3FN
32
3. ASPECTE TEHNOLOGICE
3.1 Descrierea mediilor de programare și a softwarelor utilizate
Sistemul informatic de gestiune a fost realizat folosind limbajele : HTML, PHP
v5.2.8, MySQL 5.1.30,CSS (Cascading Style Sheets), Apache HTTPD 2.2.11. Aceste
tehnologii au avantajul ca sunt ușor de utilizat și gestionat, respectiv sunt gratuite și,
astfel, nu necesită un cost suplimentar nici p entru achiziționarea produsului, nici ulterior
pentru achiziționarea unei licențe de către companiile comerciale.
Toate aceste aplicații sunt conținute de ca tre mediul de programare XAMPP.
3.2 Limbajul HTML
Unul din primele elemente, fundamentale de altfel , ale WWW (World Wide Web)
este HTML ( HyperText Markup Language ) , standard ce descrie formatul primar în
care documentele sunt distribuite și văzute pe Web. Multe din trăsăturile lui, cum ar fi
independența fața de platformă, structurarea formatării și l egăturile hipertext, fac din el
un foarte bun format pentru documentele Internet și Web. Primele specificații de bază ale
Web -ului au fost HTML, HTTP și URL.
Menire si semnificatii
HTML a fost dezvoltat inițial de Tim Berners -Lee la CERN in 1989. HTML este
un limbaj bazat pe SGML (Standard Generalized Markup Language), o așa -numită
aplicație a acestuia. SGML este un standard internațional (ISO -8879) aprobat în 1982.
HTML a fost inițial văzut ca o posibilitate pentru fizicienii care utilizează computere
diferite să schimbe între ei informație prin mijlocirea Internetului. Erau prin urmare
necesare câteva condiții esențiale: independența de platformă, posibilitați hipertext și
structurarea documentelor. Independența de platformă semnifică faptul că un docu ment
poate fi afișat în mod asemănator (sau aproape identic) de computere diferite (deci cu
font, grafică și culori aidoma), lucru vital pentru o audientă numeroasă și extrem de
variată. Hipertext se traduce prin faptul că orice cuvânt, frază, imagine sau element al
documentului văzut de un utilizator (client) poate face referintă la un alt document sau
chiar la paragrafe din interiorul aceluiasi document, ceea ce ușurează mult navigarea între
parțile componente ale unui document sau între multiple document e. Structurarea
riguroasă a documentelor permite convertirea acestora dintr -un format în altul precum și
interogarea unor baze de date înglobând aceste documente.
33
Standardizarea
Standardul oficial HTML este dat de World Wide Web Consortium (W3C), care
este afiliat la Internet Engineering Task Force (IETF). W3C a enunțat câteva versiuni ale
specificației HTML, printre care și HTML 2.0, HTML 3.0, HTML 3.2, HTML 4.0 și, cel
mai recent, HTML 4.01. În același timp, autorii de browsere cum ar fi Netscape și
Microsoft, au dezvoltat adesea propriile "extensii" HTML în afara procesului standard și
le-au încorporat în browserele lor. În unele cazuri (cum ar fi tagul Netscape), aceste
extensii au devenit standarde de facto adoptate de autorii de browsere. Când navig atorul
încarcă un document HTML, el "citeste" documentul în cautarea tag -urilor HTML,
formatează textul și imaginea și le afisează pe ecran. Este motivul pentru care acelasi
document HTML apare ușor diferit când este privit utilizând navigatoare diferite.
3.3 Fundamente
Orice document HTML începe cu notația <html> și se termină cu notația </html>.
Astfel de perechi de marcaje sau etichete (acolo unde sunt perechi) se numesc în
literatura de specialitate TAG -uri. Prin convenție, toate marcajele HTML încep cu o
paranteză unghiulară deschisă " <" și se termină cu o paranteză unghiulară inchisă " >".
Marcajele dintre aceste paranteze transmit comenzi către browser pentru a afisa pagina
intr-un anumit mod. Unele blocuri prezintă delimitator de sfârsit de bloc, in timp ce
pentru alte blocuri acest delimitator este opțional sau chiar interzis.
Între cele două marcaje <html> și </html> vom introduce două secțiuni:
secțiunea de antet: <head>…</head>
corpul documentului: <body>…</body>
Blocul <body>…</body> cuprinde conținutul propriu -zis al paginii HTML, adică ceea ce
va fi afișat în ferastra browser -ului. Un marcaj poate fi scris atât cu litere mici, cât și cu
litere mari. De exemplu <BODY> = <BodY> = <body>. Caracterele "spațiu" și "CR/LF"
ce apar între taguri sun t ignorate de catre browser.
Un prim document HTML ar fi ceva de genul acesta:
<html>
<head> </head>
<body> </body>
</html>
34
Adăugarea primelor elemente de text
În primul rând, titlul unei pagini se obține inserând în secțiunea <head>…</head>
următoarea linie:
<title>Aceasta este titlul unei pagini de Web</title>
În plus, în secțiunea <body>…</body> putem scrie texte cât dorim. Dacă nu întalnim nici
un marcaj "<" sau ">", atunci interpretorul HTML le va lua ca texte simple și le va afișa
pe ecra n. Să vedem o nouă versiune a paginii noastre:
<html>
<head>
<title>Aceasta este prima mea pagina de Web</title>
</head>
<body>
Bine ati venit in pagina mea de Web!
</body>
</html>
Conținutul blocului <title>…</title> va apărea în bara de titlu a feres trei browser –
ului. Dacă acest bloc lipsește intr -o pagină HTML, atunci în bara de titlu a ferestrei
browser -ului va apărea numele fișierului.
Trecerea pe o linie nouă – se face în HTML cu o comandă explicită, care trebuie
să apară în codul sursa html. Ace astă comandă este marcajul <br> (de la "line break" –
întrerupere de linie). Folosind aceleași operații ca mai sus, vizualizați noua pagină. Veți
vedea textul ce apare în fereastra browserului. În plus, pagina dvs. va avea un titlu nou,
cel introdus de dvs .. Ex.:
<html>
<head>
<title> titlul paginii</title>
</head>
<body> Bine ati venit in <br> pagina mea de Web!
</body>
</html>
35
Culoarea de fond
O culoare poate fi precizată în două moduri:
1. Printr -un nume de culoare. Sunt disponibile cel puțin 16 nume de culori: aqua,
black, fuchsia, gray, green lime, maroon, navy, olive, purple, red, silver, teal,
white și yellow.
2. Prin construcția "#RRGGBB" unde R(red), G(green), sau B(blue) sunt cifre
hexazecimale și pot lua valorile: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D, e,
E, f, F; se pot defini astfel 65536 de culori.
Culoarea fundalului unei pagini se precizează prin intermediul unui atribut al
tagului BODY. mai exact cu atributul "bgcolor" din cadrul etichetei <body>. De
exemplu: <body bgcolor = culoare>.
Culoarea textului
Acest lucru se setează prin intermediul atributului "text" al tagului BODY, după
sintaxa <body text=culoare>. În urmatorul exemplu textul are culorea rosie:
<html>
<head>
<title>culoarea textului </title>
</head>
<body text=re d>
Un text de culoare rosie.
</body>
</html>
O etichetă poate avea mai multe atribute. De exemplu, o etichetă cu trei atribute
arată astfel: <eticheta atribut1 = valoare1 atribut2 = valoare2 atribut3 = valoare3>.
Urmatorul exemplu prezintă o pagină cu fondul de culoare albastră și textul de culoare
galbenă:
<html>
<head>
<title>atribute multiple </title>
</head>
<body bgcolor=blue text=yellow>
36
Fond de culoare albastra si text de culoare galbena.
</body>
</html>
Textul afișat este caracterizat de urmat oarele atribute: Marime (font size) – aici
implicită, Culoare (font color) – aici implicită, Font (font family) – aici implicit.
Poziționarea conținutului paginii Web față de marginile ferestrei browserului se
poate face cu ajutorul a două atribute ale et ichetei <body>:
1. "Leftmargin" (stabileste distanța dintre marginea stangă a ferestrei browserului și
marginea stangă a conținutului paginii)
2. "Topmargin" (stabileste distanța dintre marginea de sus a ferestrei browserului și
marginea de sus a conținutului pa ginii)
<html>
<head>
<title>Configurarea textului si stabilirea marginii </title>
</head>
<body leftmargin="100" topmargin="50">
Textul are atribute implicite. <br><basefont style="Arial" color="blue" size="6">
Textul este scris cu fontul "Arial", culoare albastru si marime 2. </body>
</html>
3.4 CSS (Cascading Style Sheets)
CSS, prescurtarea de la Cascading Style Sheets , sunt etichete folosite pentru
formatarea paginilor web (de exemplu formatare text, background sau aranjare în pagină,
etc.).
Beneficiile sin taxei CSS sunt:
formatarea este introdusă intr -un singur loc pentru tot documentul
editarea rapidă a etichetelor
datorită introducerii într -un singur loc a etichetelor se obține o micșorare a
codului paginii, implicit încarcarea mai rapidă a acesteia
Sinta xa CSS este structurată pe trei niveluri :
nivelul 1 fiind proprietațile etichetelor din documentul HTML, tip inline
nivelul 2 este informația introdusă în blocul HEAD, tip embedded
37
nivelul 3 este reprezentat de comenzile aflate în pagini separate, tip externe
Cea mai mare importanță (suprascrie orice alt parametru) o are sintaxă de nivelul
1 iar cea mai mică importanță o are cea de nivelul 3.
Folosirea unui fișier extern sau nivel 3 care să conțină comenzi CSS este foarte
practic deoarece poate fi utiliza t în mai multe situații (mai multe fisiere HTML pot folosi
același fișier extern CSS) eliminând timpul necesar introducerii codului corespunzator în
fiecare pagină și totodată editarea lor intr -un singur loc pentru mai multe fișiere.
Extensia acestor fiși ere este .css.
Legătura paginilor HTML cu fișierele externe CSS se face prin introducerea
urmatoarei linii:
<link rel="stylesheet" type="text/css" href="fisier_css.css">
Atributele indică urmatoarele:
rel – fișierul este tip stylesheet
type – tip text ce conține comenzi CSS
href – fișierul sau adresa fișierului CSS.
3.5 Instalarea pachetului de programe xampp (utilizat in cazul aplicației)
Înainte de a prezenta limbajul PHP și MySQL, se va descrie modul de instalre a
serverului Apache și aplicația phpMyAdmin . În continuare se prezintă un mic ghid de
instalare a acestui pachet de programe.
3.6 Instalare și setare
Acest pachet nu necesită decât o instalare simplă (ca a oricărui program) și îl puteți
descărca de la adresa: http://www.apachefriends.org/en/xampp.html
După descărcarea pachetului XAMPP, acesta se execută pentru a porni instalarea.
Se alege limba “English”.
38
Fig. 8 Selectarea limbii în vederea instalării pachetului XAMPP
În urmatoarea fereastr a, după o serie de “ Next > ”, “Next > ”, se bifează opțiunile
“Install Apache as service” și “Install MySQL as service” pentru că atât serverul
Apache cât și cel de MySQL să pornească odată cu Windows -ul.
S
e
acce
sează “Install” și procesul de insta lare sa se încheie. pentru a termina instalarea se apasă
butonul “Finish” .
Fig. 9 F
F
ig. 9 Finalizarea instalării pachetului XAMPP
39
Se va observa un
mesaj prin care se întreabă
dacă se dorește lansarea
panoului de control ; se
alege “Yes”.
Fig. 10 Fereas
tra de vizualizare a rulării
serverului și aplicației
Se observă că în dreptul serverului Apache apare un text cu verde pe care scrie
“Running” (Ruleaza), la fel și in dreptul serverului MySQL.
Dacă dintr -un oarecare motiv, unul din servere nu a pornit, vet i observa că în acel
loc nu este afișat nicio informație, precum urmează în poza de mai jos. Dacă totuși se
întâmplă ca unul din servere să se manifeste așa, apasați pe butonul “Start” din dreptul
fiecăruia.
Precizez faptul că versiunea de XAMPP 1.2.3a și folosește următoarele versiuni:
Apache HTTPD 2.2.4
MySQL 5.0.45
PHP 5.2.3
phpMyAdmin 2.10.3
După finalizarea instalarii pachetului, cele trei servicii și anume, Serverul Apache,
PHP și MySQL ( phpmyadmin ) sunt gata de rulare.
Testarea instalării Web S erver + PHP
Se poate realiza cu ajutorul unui browser web, unde pe câmpul adresei url tastați
http://localhost . Dacă apare pagina de inceput a pachetului de programe xampp, atunci
totul este i nstalat și merge coresp unzător.
40
2.4 Limbajul PHP
Ce este PHP ?
PHP este abrevierea de la PHP – Hypertext Preprocessor (similar cu GNU ce
reprezintă abrevierea de la GNU‟s Not Unix).
PHP este un limbaj de programare pentru creerea site –urilor dinamice și interactive și a
fost introdus de Rasmus Lerdorf în 1994. De atunci PHP a suferit numeroase schimbări.
În termeni tehnici PHP5 este un limbaj tip script, cross platform, HTML embedded si
server side.
Cross platform – puteți rula PHP pe sisteme de operare diferite, în majorita tea
cazurilor fară modificări.
HTML embedded – codul PHP este o mixtură de instrucțiuni PHP și cod HTML.
Server side – programele scrise în PHP rulează pe un server (în general un Web
Server cum ar fi Apache, IIS, etc..).
PHP5 este ultima implementare sta bilă de PHP și ea rulează pe serverele unui
număr mare de ISP, ceea ce înseamnă că odată ce scrieți o aplicație în PHP5, o puteți cu
ușurință găzdui pe Web.
3.7 Scrierea programelor PHP
Programele PHP sunt o mixtură de trei elemente : text, cod HTML și scrip t PHP.
Pentru ca paginile ce conțin script PHP să poată fi procesate de modulul PHP
implementat în Apache sau alt server de pagini Web este necesar ca paginile sa aibă acea
extensie pe care ați specificat -o la încarcarea modulului în serverul de web (stand ard,
extensia implicită este .php).
Funcționarea codului php
Fișierul test.php este trimis modulului de php încarcat în serverul de web. Modulul
prelucrează NUMAI ce se află între tagurile <?php și ?> restul fiind trimis către serverul
web fără a f i prelucrat sau interpretat. Rezultatul prelucrarii este și el trimis serverului de
web care trimite mai departe către client (browser).
Comanda echo este folosită pentru trimiterea către serverul de web a textului
înscris între cele două ghilimele.
Fiecare linie de cod PHP (dupa terminare) trebuie închisă de semnul punct – și-
virgulă (;).
41
Prezentarea limbajului
Variabila reprezintă un identificator la o locație de memorie și se folosește pentru
stocarea, prelucrarea și ștergerea datelor.
Variabilele în PHP sunt apelate folosind prefixul „$‟.
Ex: $nume=“Raducan Adrian” ;
Dupa ce s -a inițializat o variabilă atribuindu -i o valoare putem folosi acea
variabilă.
Ex: print $nume;
Rezultatul afisa t va fi:” Raducan Adrian”
3.8 Limitari și reguli ale variabilelor
În multe limbaje de programare există o limitare a numarului de caractere din
numele variabilei (între 255 -1000 caractere).
În PHP nu există astfel de limitari. O regulă a variabilelor este că ele trebuie să
înceapă cu o literă sau cu un underscore (dupa pr efixul „$‟).
O altă regulă este ca în corpul numelui variabilei sunt acceptate litere, numere și
underscore, simboluri precum +,-,* și & nefiind admise.
Variabilele în PHP sunt case -sensitive, adică $student este diferit de $Student
3.9 Tipuri de date in PH P
PHP cuprinde mai multe tipuri de variabile, dintre care cele mai importante sunt
cele ce conțin valori de tip text și numeric.
string (text)
integer (numeric)
double (numeric)
array
object
Tipurile de date nu sunt stabilite de programator; PHP decide asu pra lor atunci
când interpretează codul.
Tipul de data string – tot ce este cuprins între ghilimele la inițializare se
consideră string (chiar și numerele).
42
Ex:$nume=”Adrian”;
$nr=”11”;
Date de tip numeric – în PHP există 2 tipuri de date numerice : integer și double .
Integer sunt numere fără virgulă
double reprezintă numere cu zecimale.
Array – tipul de date array reprezintă matricele
Object – reprezintă datele de tip obiect
Constante – o variabilă iși poate modifica conținutul de mai multe ori pe
parcursul unui program. Dacă dorim ca o locație de memorie să nu poată fi schimbată pe
parcursul unui program putem folosi instrucțiunea define.
Ex: define(“PI”,”3.1416”);
Constantele sunt scrise prin convenție cu MAJUSCULE, iar la afișare trebuie să
aveți g rijă sa nu folosiți semnul $.
3.10 Sistemul de baze de date MySQL
De ce MySQL?
Există mai multe opțiuni de a alege sisteme gratuite sau necostisitoare de gestiune
a bazelor de date: MySQL, mSQL, Postgres, unul din motoarele gratuite (dar fără suport)
furniz ate de producătorii comerciali și așa mai departe. Pentru compararea MySQL cu
alte sisteme de baze de date, se are în vedere ceea ce este cel mai important pentru scopul
final : performanță, suport, caracteristici (conformantă cu SQL, extensii etc.), condi ții si
restricții de licențiere, preț. Date fiind aceste considerații, MySQL are de oferit
numeroase caracteristici atractive:
Viteză. MySQL este rapid. Programatorii pretind că MySQL este cel mai rapid
sistem de baze de date pe care îl puteți găsi. Puteți verifica această afirmație vizitând
http://www.mysql.com/benchmark.html , o pagină de comparație a performanțelor.
Ușurință în utilizare. MySQL este un sistem de baze de date cu performanțe
ridicate, dar relativ simplu, a cărui configurare și administrare sunt mult mai simple
decât în cazul sistemelor mai mari.
Cost zero. MySQL este gratuit pentru majoritatea utilizărilor interne.
MySQL nu este un produs Open Source, dar, în general, poate fi folosit grat uit. Trebuie
43
să consultați manualul de referință MySQL pentru detalii privind licența, dar principiile
de bază sunt următoarele:
Programele client și biblioteca de programare a clienților sunt gratuite, pe
toate plat formele.
Pentru UNIX si alte platforme non-Windows, serverul MySQL poate fi
folosit gra tuit, cu excepția situațiilor când doriți să vindeți serverul sau alte
programe sau servicii care impun utilizarea acestuia, în această situație, trebuie
să obțineți licență pentru server. Ideea este că, dac ă obțineți un profit din
MySQL, este normal ca dezvoltatorii sistemului să primească o parte din acesta.
(200 de dolari este o nimica toată pentru un specialist SGBDR care vă ajută să
obțineți un profit și există o mulțime de programe gratuite pe care vi l e puteți
procura pentru a folosi eficient sistemul.)
Versiunea Windows a serverului MySQL impune obținerea unei licențe.
Versiunile mai vechi de MySQL sunt disponibile în condițiile licenței
publice GNU (GPL) și pot fi folosite în orice scopuri, fără nici o plată. MySQL
3.20.32a este disponibil în condițiile GPL.
Suport pentru limbaje de interogare. MySQL înțelege SQL (Structured Query
Language – limbaj de interogare structurat), limbajul preferat al tuturor sistemelor
moderne de baze de date. De asemenea, puteți avea acces la MySQL folosind aplicații
care acceptă ODBC (Open Database Connectivity), un protocol de comunicație cu bazele
de date creat de Microsoft.
La server se pot conecta mai mulți clienți simultan. Clienții pot folosi mai
multe baze de date s imultan. Puteți obține acces la MySQL în mod interactiv, folosind
numeroase interfețe care vă permit să introduceți interogări și să vizualizați rezultate:
clienți în linie de comandă, browsere Web sau clienți X Window System. De asemenea,
este disponibilă o varietate de interfețe de programare pentru limbaje pre cum C, Perl,
Java, PHP și Python. Astfel, aveți opțiunea de a folosi programe client preambalate sau
de a vă scrie propriile programe client pentru aplicații personalizate.
Conectivitate și securit ate. MySQL poate fi folosit integral în rețele, iar bazele
de date sunt accesibile de oriunde din Internet, deci vă puteți partaja datele cu oricine,
44
oriunde. Dar MySQL are controlul accesului, astfel încât persoanele care nu au drep tul să
vă citească dat ele nu vor avea această posibilitate.
Portabilitate. MySQL rulează pe numeroase varietăți de UNIX, precum și pe alte
sisteme non -UNIX, ca Windows și OS/2. MySQL rulează pe echipamente de la calcu –
latoare de birou la servere cu performanțe ridicate.
Distri buție liberă. MySQL este ușor de obținut; pentru aceasta, folosiți -vă
browserul de Web. Dacă nu înțelegeți funcționarea unei componente sau sunteți curios cu
privire la un algoritm, vă puteți procura codul sursă si îl puteți examina. Dacă nu vă place
modul de funcționare a unei componente, îl puteți modifica.
3.11 Serverul Apache
Apache este un web server open -source pentru UNIX, Windows 2000 ori alte
platforme. Apache a devenit în prezent cel mai popular și des folosit Web server, datorită
caracteristicilor pu ternice și a perfomanțelor excepționale. Deoarece codul sursă Apache
și documentația pentru Apache sunt gratuite, serverul poate fi setat pentru sarcini
specifice.
Pentru apelarea serverului local printr -un browser, trebuie să introducem adresa
url al “Doc ument root” care este http://localhost .
În cazul de față, serverul local Apache are setată ca document root adresa:
F:\Program Files \xampp \htdocs \aplic atie
Funcții MySQL
Exemplul 1. Se da o tabela cu structura de mai jos :
id page_title user_agent date_accessed
int
(3)
not_null primary_key auto_increment string
(50) blob
(65535)
blob date
(10)
Fig. 11 Tabelul TITLURI
<?php
//sa dea informatii despre structura unei tabele
$db = mysql_connect("localhost","root")
or die ("nu m a m conectat");
mysql_select_db("testdb", $db)
45
or die ("testez dar nu pot sa fac conectarea la tabela");
$db_name ="access_tracker ";
$query = "select * from $db_name";
$result = mysql_query($query);
$num_fields = mysql_num_fields($result);
//create table h eader
echo "<table border = 1>";
echo "<tr>";
for ($i=0; $i<$num_fields; $i++)
{
echo "<th>";
echo mysql_field_name ($result, $i);
echo "</th>";
}
echo "</tr>";
//end table header
//create table body
echo "<tr>";
for ($i=0; $i<$num_fields; $i++)
{
echo "<t d valign = top>";
echo mysql_field_type ($result, $i) . "<br> \n";
echo "(" . mysql_field_len ($result, $i) . ")<br> \n";
echo mysql_field_flags ($result, $i) . "<br> \n";
echo "</td>";
}
echo "</tr>";
echo "</table>";
?>
Exemplul 2. Aceeiasi tabela dar vr em sa preluam date din ea :
<?php
46
//sa se prezinte preluarea datelor dintr o tabela
$link = mysql_connect("localhost", "root")
or die("nu m am conectat : " . mysql_error());
print "s a facut conexiunea la baza de date";
mysql_select_db( "baza1") or die(" nu s a facut conexiunea la baza de date");
$query = "SELECT * FROM tabela1";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
print "<table> \n";
while ($line = mysql_fetch_ar ray($result, MYSQL_ASSOC)) {
print " \t<tr> \n";
foreach ($line as $col_value) {
print " \t\t<td>$col_value</td> \n";
}
print " \t</tr> \n";
}
print "</table> \n";
mysql_free_result($result);
mysql_close($link);
?>
Exemplul 3. Fie tabela cu următoarele inregistrari:
nume salariu impozit
xx 2 2
xxx 3 3
kossu 0 0
Fig. 12 Tabelul IMPOZITE
Sa se stearga informatii care indeplinesc o conditie :
<?php
//sa se dea un exemplu prin care se s terg inregistrari dintr o tabela
mysql_pconnect("localhost", "root") or
die("nu m am conectat: " . mysql_error());
mysql_select_db("baza1");
47
mysql_query ("DELETE FROM tabela1 WHERE impozit < 3");
printf ("inregistrarile afectate sunt : %d\n", mysql_affected_rows());
mysql_query ("DELETE FROM tabela1");
printf ("s au sters urmatoarele inregistrari ca numar de orine: %d \n",
mysql_affected_rows());
?>
Exemplul 4. Actualizarea unei tabele :
<?php
//sa se dea un exemplu prin care s e actualizeaza inregistrari dintr o tabela cu conditie
mysql_pconnect("localhost", "root") or
die("nu m am conectat: " . mysql_error());
mysql_select_db("baza1");
mysql_query(" UPDATE tabela1 SET salariu=55 WHERE impozit < 4");
printf ("Updated records: %d \n", mysql_affected_rows());
mysql_query("tabela2");
?>
Exemplul 5. <?php
//sa se determine tipul de conectare la baza de date
mysql_connect("localhost", "root") or
die("nu m am conectat: " . mysql_error());
printf ("MySQL are tipul de conectare: %s \n", mysql_get_host_info());
?>
Exemplul 6. <?php
//sa se determine tipul de protocol folosit
mysql_connect("localhost", "root") or
die("nu mam conectat: " . mysql_error());
printf ("MySQL protocolu l folosit: %s \n", mysql_get_proto_info());
?>
Exemplul 7. <?php
//sa se determine versiunea de server al Mysql
mysql_connect("localhost", "root") or
48
die("Could not connect: " . mysql_error());
printf ("MySQL server versiunea este: %s \n", my sql_get_server_info());
?>
Exemplul 8. <?php
//sa se realizeze conectarea la sever
$link = mysql_connect("localhost", "root")
or die("m am conectat: " . mysql_error());
print ("Conectarea s a facut");
mysql_close($link);
?>
Exemplul 9. <?php
//sa se afiseze continutul unei baze de date
$link = mysql_pconnect("localhost", "root")
or die("Could not connect: " . mysql_error());
mysql_select_db("baza1")
or die("Could not select database: " . mysql_error());
$query = "SELECT nume,salariu FROM tabela1";
$result = mysql_query($query)
or die("nu pot face filtrarea datelor: " . mysql_error());
for ($i = mysql_num_rows($result) – 1; $i >= 0; $i –) {
if (!mysql_data_seek($result, $i)) {
echo "avem linia $i: " . mysql_error() . " \n";
continue;
}
if(!($row = mysql_fetch_object($result)))
continue;
echo "$row ->nume $row ->salariu<br /> \n";
}
mysql_free_result($result);
?>
Exemplul 10. <?php
49
//sa se afiseze foarte simplu bazele de date
$link = mysql_connect('localhost', 'root');
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list)) {
echo $row ->Database . " \n";
}
?>
Exemplul 11. <?php
//sa se afiseze tabelel e dintr o baza de date
mysql_connect("localhost", "root");
$result = mysql_list_tables("baza1");
for ($i = 0; $i < mysql_num_rows($result); $i++)
printf ("Tabelele: %s \n", mysql_tablename($result, $i));
mysql_free_result($result);
?>
Exemplul 12. <?php
//sa se determine tabele dintr o baza de date etapizat
$dbname = 'baza1';
if (!mysql_connect('localhost', 'root')) {
print 'nu m am conectat la mysql';
exit;
}
$result = mysql_list_tables($dbnam e);
if (!$result) {
print "nu are tabele \n";
print 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_row($result)) {
print "Tabelele: $row[0] \n";
}
50
mysql_free_result($r esult);
?>
Exemplul 13. <?php
//să se determine starea serverului mysql
$link = mysql_connect('localhost', "root");
$status = explode(' ', mysql_stat($link));
print_r($status);
?>
Exemplul 14. Să se insereze(adauge)date într -o tabelă creată
<?php
mysq l_connect("localhost", "root") or
die("nu a am conectat: " . mysql_error());
mysql_select_db("baza1");
mysql_query("INSERT INTO tabela1 (nume) values ('kossu')");
printf ("Last inserted record has id %d \n", mysql_insert_id());
?>
Exemplul 15. <?
//să se listeze tabelele dintr -o bază de date
mysql_connect("localhost", "root", "");
$result = mysql_list_tables("test");
while($row = mysql_fetch_array($result))
{
echo $row[0] . "<br> \n";
}
?>
Exemplul 16. <?php
//să se afișeze o tabelă
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from tabela1 ",$id);
51
while ($rand=mysql_fetch_array($id_re z,MYSQL_BOTH))
{
foreach($rand as $nume=>$col)
echo "$nume=>$col <br / >";
echo "<br />";
}
@mysql_close();
?>
Exemplul 17. <?php
//conectare/deconectare de la o bază de date
$msqlconc = mssql_connect("localhost", "root");
mssql_close($msq lconc);
?>
Exemplul 18. <?php
// să se dea exemplu de adăugare date în tabelă
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date nese lectata ."."eroare :
".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$interogare="insert into tabela1 values " . " ('ff',66,6)";
@mysql_query($interogare,$id);
if (mysql_errno()) ;
if (mysql_affected_rows()!=1)
echo "adaugare ratata ";
else
echo "AM FACUT ADAUGAREA ";
@mysql_close();
?>
Exemplul 19. <?php
52
// să se dea exemplu de adăugare date în tabela dată
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare :
".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$interogare="insert into tabela1 values " . " ('ff',66,6)";
@mysql_query($interogare,$id);
if (mysql_errno());
if (mysql_affected_rows()!=1)
echo "adaugare ratata ";
else
echo "AM FACUT ADAUGAREA ";
@mysql_close(); ?>
53
4. PROIECT INFOR MATIC
In ultimii ani comerțul electronic cunoaș te o dezvolate din ce in ce mai mare în toate
domeniile. Cartile, alături de aparatrele electronice, se numara printre cele m ai bine
vandute produse online, iar acest lucru se intampla datorita faptului ca este mai comod
pentru multe persoane să iși comande direct acasa produsele de care au nevoie, este mult
mai rapida cautarea intr -o baza de date online prin simpla introducere a unor cuvinte
cheie, pot fi citite mai multe detalii despre carte, despre autor sau recenzii, multe dintre
librariile online ofera recomandari personalizate in functie de cartile cautate sau
cumparate, cartile se pot afisa pe categorii, se pot sorta dupa diferite criterii, dupa pret,
autor, nume, anul aparitie, etc. Iar avantajele librar iilor online nu se opresc aici, fiecare
site a incercat sa fie cat mai interesant si mai usor de folosit de catre clienti.
4.1 Cerințele aplicaț iei
Aplicația Book -O-Rama este foarte utilă pentru utilizatorii care doresc să cumpere
cărti online, scopul său prin cipal fiind cel de a facilita vânzările electronice ale cărților.
1. Afișare categoriilor
a. Aplicația va afișa o listă de categorii de carti. Acestea vor fi disponibile tuturor
utilizatorilor, nu este nevoie ca utilizatorii sa fie logati pentru a vedea aceste c ateorii.
b. Utilizatorul are posibilitatea de a alege categorii. In momentul in care utilizatorul
face click pe una dintre categorii, se vor afisa cartile care fac parte din categoria
respectiva.
c. Pentru a se intoarce la pagina anterioara, utilizatorul, poate face click pe butonul
“Continue Shopping”.
2. Afisarea cartilor
a. Afisarea cartilor dintr -o categorie se face sub forma unei liste in care se afiseaza
in partea stanga o imagine cu coperta cartii , iar in partea drapta a imaginii titlul cartii.
b. Din lista de ca rti dintr -o categori, utilizatorul poate selecta orice carte, dand click
pe imaginea sau pe titlul cartii pentru a vedea detalii despre aceasta.
c. Pentru a se intoarce la pagina anterioara, cea in care sunt afisate categoriile,
utilizatorul, poate face click pe butonul “Continue Shopping”.
3. Afisarea detaliilor despre o carte
54
a. In momentul in care utilizatorul face click pe o carte dintr -o categorie, se vor
afisa detalii despre aceasta. In partea de sus se va afisa mare titlul cartii. In partea stanga
se va afisa o imagine cu coperta cartii, iar in partea stanga a imagini, sub forma unei liste
se vor afisa: autorul, ISBN -ul, pretul, si descrierea cartii.
b. Utilizatorul poate adauga cartea afisata in cosul de cumparaturi, dand click pe
butonul: “Add To Cart”.
c. Pentru a se intoarce la pagina anterioara, cea in care sunt afisate cartile din
categoria selectata, utilizatorul , poate f ace click pe butonul “Continue S hopping”.
4. Afisarea cosului de cumparaturi
a. Din pagina in care sunt afisate detalii despre o carte, utilizator ul poate da click pe
butonul “Add to Cart” pentru a adauga o carte, pe care isi doreste sa o cumpere, cosul de
cumparaturi. Dupa ce va da click pe butonul “Add To Cart” cartea va fi adauga si va fi
afisat cosul de cumparaturi.
b. De asemenea, cosul de cumpara turi poate fi afisat in orice moment, facand click
pe butonul “View Cart” din partea dreapta din bara de sus a aplicatitei.
c. Cantitatea dorita poate fi actualizata scriind in campul Quantity cantitatea dorita,
apoi facand click pe butonul “Save Changes” pe ntru a modifica numarul de elemente din
cosul de cumparaturi si pretul acestora.
d. Pentru a sterge o carte din cosul de cumparturi, se seteaza cantitatea 0, si se apasa
butonul “Save Changes”, dupa aceasta, carte va disparea automat din cosul de
cumparaturi.
e. In bara de titlu a aplicatiei, in partea de sus, dreapta, se afiseaza numarul de
elemente care sunt adaugate in cosul de cumparaturi si costul acestora, in momentul
curent.
f. Pentru a se intoarce la pagina anterioara, si pentru a continua cumparaturile,
utilizatorul, poate face click pe butonul “Continue Shopping”.
5. Plasarea comenzii
a. Dupa ce utilizatorul a adaugat in cosul de cumparaturi toate cartile pe care
doreste sa le cumpere, acesta poate sa finalizeze comanda apasand butonul “Go To
Checkout”.
55
b. Se va afi sa o lista cu elementele care sunt adaugate in cos, titlul cartii, urmat de
autor (se poate face click pe titlul cartii pentru a vedea din nou delatii despre carte), pretul
pe unitate, cantitatea, pretul total, iar la final pretul total pentru toata lista de carti din
cosul de cumparaturi.
c. Se cere ca utilizatorul sa completeze cu datele personale si datele despre livrare.
Campurile care se cer sunt: nume, adresa, oras, stat, cod postal, tara. Daca datele
personale sunt aceleasi cu datele de livrare, campuri le pentru datele de livrare se pot lasa
necompletate. Completarea corecta a datelor utilizatorului sunt obligatorii pentru livrarea
corecta a cartilor comandate.
d. Dupa ce au fost introduse datele personale, se apasa butonul “Purchase”.
Se afiseaza pagina i n care sa face plata. In partea de sus se afiseaza detaliile despre
comanda, cartile comandate, la care se adauga si costul transportului, calculat in functie
de adresa care a fost introdusa.
e. Daca totul este in regula, s e cere sa se completeze cu datele de pe cardul bancar:
tipul, numarul cardului, codul AMEX, data expirarii si numele. Se apasa butonul
“Purchase”.
f. Daca datele introduse sunt corecte, se va efectua plata si se va trimite comanda.
g. Daca datele introduse pentru comanda sunt gresite, se va afisa o pagina cu un
mesaj de eroare, iar dand click pe butonul “Back” se revine la pagina in care se
completeaza datele pentru comanda.
h. Detaliile despre comanda trimisa vor ramane afisate pana in momentul in care
utilizatorul face din nou click pe butonul “Co ntinue Shopping” afisat, dupa care cosul de
cuparaturi va fi resetat la 0.
6. Logare
a. Din pagina “ /login.php ” administratorul se poate loga in aplicatie.
b. Aceasta pagina este ascunsa utilizatorului obisnuit, avand posoilitatea de a fi
accesata doar prin modif icarea link -ului de acces.
7. Pagina de administrator
a. Administratorului in momentul in care se locgheaza ii este afisat un meniu cu 4
optiuni: Navigarea la pagina principala (unde se afiseaza categoriile descrise mai sus, la
56
punctul 1), adaugarea unei noi cat egorii, adaugarea unei noi carti, schimbarea parolei
administratorului.
b. Adaugarea unei categorii se face prin introducerea numelui unei categorii, apoi
se apasa butonul “Add Category”. Se va afisa un mesaj de confirmare, pentru noua
categorie adaugata in b aza de date. Se apasa apoi “Back to administrator menu” pentru a
reveni la meniul administratorului .
c. Pentru adaugarea unei noi carti se completeaza cu ISBN -ul, titlul, autorul, pretul,
descrierea si se selecteaza categoria din lista drop down afisata. Se apasa apoi butonul
“Add book”. Se va afisa un mesaj de confirmare, pentru noua carte adaugata in baza de
date. Pentru a reveni la pagina principala a administratorului se face click pe butonul
“Back to administrator menu”.
d. Schimbarea parolei administrator ului se face prin completarea vechii parole apoi
a noii parole de doua ori. Noua parola trebuie sa contina intre 6 si 16 caractere. Daca
aceasta nu respecta conditiile, un mesaj de eroare va fi afisat. Pentru a reveni la pagina
principala a administratorul ui se face click pe butonul “Back to administrator menu”.
e. Pentru a se deloga, administratorul poate face click pe butonul “Logout”.
Specificarea cerințelor (Requests) :
Ref Funcții de bază Categorie
R1 Afișarea categoriilor evident
R2 Selectarea unei categorii evident
R3 Afișarea listei de cărți dintr -o categorie evident
R4 Selectearea unei cărți evident
R5 Afișearea detalii or despre cartea selectată evident
R6 Adaugarea în coșul de cumpărături evident
R7 Afișarea numărului de cărți din coșul de c umparaturi,
în partea dreaptă în bara de titlu evident
R8 Afișarea prețului cărților din coșul de cumparaturi, în
partea dreaptă în bara de titlu evident
R9 Modificarea cantităților cărților din coșul de
cumpărături evident
57
R10 Ștergerea cărților din co șul de cumpăraturi evident
R11 Furnizeaza un mecanism de stocare persistentă ascuns
R12 Furnizează un me canism de comunicare inter -proces
și inter -sistem. ascuns
R13 Continuarea cumpăraturilor evident
R14 Finalizarea comenzii, afisarea listei de cărți care se
comandă evident
R15 Afișarea formu larului pentru datele cumpărătorului evident
R16 Afișarea formularului pentru datele de livrare evident
R17 Afișarea formularului pentru efectuarea plății cu
cardul evident
R18 Resetarea coșului de cumpăraturi după trimiterea unei
comenzi ascuns
R19 Logarea administratorului evident
R20 Adăugarea unei categorii evident
R21 Afișarea formularului pentru adăugarea unei categori evident
R22 Adăugarea unei cărti ascuns
R23 Afișarea formularului pentru adăugarea unei cărți evident
R24 Schimbarea parolei administratorului evident
R25 Delogarea administratorului evident
R26 Afișarea erorilor ascuns
Tabel 15 – Tabel de cerin țe
Detalierea cazurilor de utilizare:
Nume caz de
utilizare Vizua lizează detalii despre o carte
Actori Guest
Flux de evenimente
(scenariu normal) 1. Guest -ul activează funcția Vizualizează listă de
categorii , accesând pagina principala a aplicației.
2. Sistemul afișează lista de categorii.
3. Guest -ul dă click pe numele unei c ategorii.
58
4. Sistemul afișează cărțile din categoria selectată .
5. Guest -ul dă click pe numele unei cărți.
6. Sistemul afișează detalii despre carte .
Conditii de intrare
(Preconditii) Nu e nevoie ca utilizatorul să fie logat.
Conditii de iesire
(Postconditii) Guest-ul a vizualizat detaliile despre cartea selectată.
Referințe Funcții: R1, R2, R3, R4, R5 , R11, R12.
Tabel 16 – Detaliere caz de utilizare – Utilizator Guest
Nume caz de
utilizare Adăugare carte
Actori Admin
Flux de evenimente
(scenariu normal) 1. Admin -ul activează funcția Adăugarea unei cărti .
2. Sistemul afisează formularul pentru adăgarea unei
cărți.
3. Admin -ul completează detalii despre carte .
4. Admin -ul apasă butonul „ Add Book ”.
5. Sistemul salvează modificările în baza de date.
Condiții de intrare
(Precondiț ii) Admin -ul este logat.
Condiții de iesire
(Postcondiț ii) Cartea a fost adăugată .
Referințe Funcții: R 22, R23, R11, R12.
Tabel 17 – Detaliere caz de utilizare – Admin istrator
4.2 Proiectarea aplicației
Aplicația Book -O-Rama este o aplicație care exemplifică în mod practic noțiunile
teoretice prezentate în capitolele anterioare.
Pentru realizarea acestei aplicații s -au folosit mai multe tehnologii care sunt incuse
in pachetul XAMPP , versiunea 3.2.2 . Aceast a a făcut instalarea si rularea aplicației și mai
ușoară. Ca si container Web s -a folosit Apache.
59
Pentru gestiunea bazelor de date s -a folosit limbajul MySQL 5.1.30 și interfața
grafică PhpMyAdmin pentru o mai ușoară vizualizare și gestiune a bazelor de da te.
Pentru scrierea scripturilor si pentru dezvoltarea aplicatiei Web s -a folosit HTML,
CSS (Cascading Style Sheets), PHP v5.2.8 pentru scripturile care fac aplicația să fie
dinamică si interacționează cu baza de date.
Arhitectura aplicației
Structura baze i de date folosite pentru aceasta aplicatiei este alcatuita din 6 tabele:
admin – Retine numele de utilizator si parola cu care un administrator se
poate loga in aplicatie. Numele de utilizator este cheia primara a tabelului.
books – Conține informații des pre stocul de cărți disponibil în magazinul
online: ISBN, autor, titlu, id -ul categoriei din care face parte, preț și
descrierea cărții. Are ca și cheie primară ISBN -ul cărții. Prin intermediul
coloanei id -ul categoriei se crează o referință către tabelul categories, relația
este de tipul 1-1 (One -To-One) (o carte poate face parte dintr -o singură
categorie).
categories – Contine doua coloane: id -ul și numele categoriei, id -ul fiind
cheia primară.
customers – Reține datele clienților care au plasat comenzi. Id-ul clientului
are rol de cheie primară în tabel și e incrementat automat. Celelalte coloane
conțin date despre numele, adresa, orașul, statul, codul poștal și țara
clientului.
orders – Id-ul comenzii are rol de cheie primară în tabel și e incrementat
automat. Conține informații despre comana plasată și datele de livrare a
comenzii, coloanele fiind: id -ul comenzii, id -ul clientului, prețul total al
comenzii, data, statusul, apoi numele, adresa, orasul, statul, codul poștal și
țara unde va fi livrată coman da. Id -ul clientului este o refetința către un id
unic din tabelul customers , relația fiind de tipul 1-1 (One -To-One) , o
comandă este plasată de un singur client.
order_items – Este un tabel de legătură, care conține informații cantitatea și
prețul cărțilo r comandate. Cheia străină e ste o cheie compusă din doua
coluane: id -ul comenzii si ISBN -ul cărții. În acest fel este creată o relatie de
60
tipul M-M (Many -To-Many ), o comandă poate conține mai multe cărți și o
carte poate fi inclusă în mai multe comenzi.
Figura 14 – Structura bazei de date
4.3 Exemple de utilizare
Aplicația Book -O-Rama este o librărie având scopul principal de a facilita
vânzările electronice ale cărților, interacționând cu clienții.
În pagina de start a aplicației (Figura 15), meniul principal al aplicației pune la
dispoziția clienților utilizatori opțiunea de a alege domeniile de interes ale cărțil or
disponibile pe stoc , clafisicate în funcție de categoria din care face parte . În colțul din
dreapta sus, se afișează tot timpul coșul de cumpărături împreună cu numărul de cărți
adăugate până în momentul curent și cu prețul acestora.
61
Figura 15 – Pagina de start și meniul principal
Utilizatorii pot vizua liza titlurile cărților care aparțin unei categorii din lista
afișată și care există în stoc , aceasta se poate vedea în Figura 16.
Figura 16 – Lista cărților din categoria aleasă
Pentru a obține mai multe informații despre o anumită carte (autor, ISBN, prețul
și descrierea cărții), se selectează titlul dorit. Informațiile se vor afișa precum în exemplul
din Figura 17.
62
Figura 17 – Informații detaliate despre cartea selectată
Dacă utilizatorul dorește achiziționarea cărții, poate alege opț iunea de a adăuga
cartea coșul de cumpărături. În acest caz, se va afișa coșul de cumpărături (ca în Figura
18) cu toate cărțile pe care le conține pănă în momentul curent și se vor actualiza și
informațiile despre coșul de cumpărături din colțul din dreapta sus a paginii. Utilizatorul
poate schimba cantitatea , și va apăsa butonu Save Changes c ând va t ermina de realizat
modificările dorinte pentru a actualiza prețurile.
Figura 18 – Coșul de cumpărături
În continuare utilizatorul poate continua cumpărăturile revenind la meniul
principal prin accesarea butonului Continue Shopp ing sau să finalizeze cumpărăturile
alegând opțiunea Go to Checkout .
63
Pentru finalizarea comenzii c umpărătorul trebuie să completeze datele personale
(numele, adresa, orașul, codul poștal, țara) și datele poștale în cazul în care adresa de
livrare este di ferită de adresa personală.
Formularul poate fi vizualizat în Figura 19.
Figura 19 – Formularul pentru datele personale și datele de livrare
64
După completarea formularului se trece la următoarea etapă, cea a introducerii
informațiilor legate de cardul de credit (tipul cardului, numărul cardul ui, codul AMEX,
data expirării) ( Figura 20).
Figura 20 – Formularul pentru plat a cu cardul
Trazacția se finalizează în momentul în care se apasă butonul Purchase și se
afișează un mesaj ul de tranzacție reușită : Thank you for shopping with us. Your order
has been placed. (Figura 21).
Figura 21 – Finalizarea plății si trimiterea cu succes a comenzii
65
Toate aceste operațiuni sunt atent urmărite de către administratorul librăriei
electronice. Acesta se logează ca și adm inistrator din meniul de logare (Figura 22):
Figura 22 – Logare administrator
După logare se va afișa meniul administratorului care se poate vedea în Figura 23.
Opțiunile administratorului sunt:
Introd ucerea de noi categorii / tematici de cărți;
Posibilitatea modificăr ii sau eliminării categoriilor de cărți deja existente;
Adăugarea de cărți noi corespunzătoare categoriilor introduse: ISBN, titlu,
autorul, categoria, prețul, descrierea cărții;
Posibili tatea modificării sau eliminării informațiilor legate de cărțile deja
existente pe stoc;
Modifica rea parolei administratorului.
Figura 23 – Meniul principal al administratorului
În cele ce urmează se va exemplifica opțiunea de a dăugare a unei noi cărți în baza
de date, accesând optțiunea Add a ne w book . În formular (Figura 24) se completează
66
ISBN -ul, titlul, autorul/autorii, se alege categoria din lista de categorii existente, se scrie
prețul și o scurtă descriere a cărții.
Figura 24 – Formular pentru a adăuga a nouă carte
Dacă s -a adăugat cu succes cartea, se va afișa un mesaj corespunzator, precum în
Figura 25, unde se afi șează un mesaj care confirmă faptul că s -a adăugat cu succes cartea:
„Noul rețetar de bază – Thermomix” .
Figura 25 – Adăugarea cu succes a unei cărți
4.4 Implementarea și testarea aplicatiei
Pentru implementare a bazei de date s-a folosit My Sql ș i pachetul Xampp. Din
fereasta phpMyAdmin , din tab -ul SQL s -a executat codul pentru crearea bazei de date si
67
a tabelelor. În Figura 26 se poate vedea codul folosit pentru crearea bazei de date si a
tabel ului de clienti.
Figura 26 – Crearea bazei de date si a tabelului de clienți
Pentru a face legătura din baza de date și interfața utilizatorului s -a folosit PHP. În
Fragment de cod sursă 1 este un exemplu de cum a fost implementat ă în PHP funcția de
afișare a coșului de cumpărături.
output_fns.php
function display_cart($cart, $change = true, $images = 1)
{
// display items in shopping cart
echo '<table border = 0 width = "100%" cellsp acing = 0>
<form action = "show_cart.php" method = "post">
<tr><th colspan = '. (1+$images) .' bgcolor="#cccccc">Item</th>
<th bgcolor="#cccccc">Price</th><th bgcolor="#cccccc">Quantity</th>
<th bgcolor="#cccccc">Total</th>< /tr>';
//display each item as a table row
foreach ($cart as $isbn => $qty)
{
68
$book = get_book_details($isbn);
echo '<tr>';
if($images ==true)
{
echo '<td align = left>';
if (file_exists("images/$isbn.jpg"))
{
$size = GetImageSize('images/'.$isbn.'.jpg');
if($size[0]>0 && $size[1]>0)
{
echo '<img src="images/'.$isbn.'.jpg" border=0 ';
echo 'width = '. $size[0]/3 .' height = ' .$size[1]/3 . ' />';
}
}
else
echo ' ';
echo '</td>';
}
echo '<td align = "left">';
echo '<a href = "show_book.php?isbn='.$isbn.'">'.$book['title'].'</a> by
'.$book['author'];
echo '</td><td align = "center">$'.number_format($book['price'], 2);
echo '</td><td align = "center">';
// if we allow changes, quantities are in text boxes
if ($change == true)
echo "<input type = 'text' name = \"$isbn\" value = \"$qty\" size = 3>";
else
echo $qty;
echo '</td>
<td align = "center">$'.number_format($book['price']*$qty,2)."</td>
</tr>\n";
}
// display total row
echo "<tr>
<th colspan = ". (2+$images) ." bgcolor= \"#cccccc \"> </td>
<th align = \"center\" bgcolor= \"#cccccc \">
".$_SESSION['items']."
</th>
<th align = \"center\" bgcolor= \"#cccccc \">
\$".number_format($_SESSION['total_price'], 2).
69
'</th>
</tr>';
// display Save change button
if($change == true)
{
echo '<tr>
<td colspan = '. (2+$images) .'> </td>
<td align = "center">
<input type = "hidden" name = "save" value = true>
<input type = "image" src = "images/save -changes.gif"
border = 0 alt = "Save Changes">
</td>
<td> </td>
</tr>';
}
echo '</form></table>';
}
Fragment de cod sursă 1 – Afișarea coșului de cumpărături
Pentru a observa modul în care se efectueaza inserarea, modificarea și stergerea
uni produs din baza de date, prin intermediul interfeței web realizată în PHP, pot fi citite
alte exemple de cod sursa în: Fragment de cod sursă 2, Fragment de cod sursă 3,
Fragment de cod sursă 4, Fragment de cod su rsă 5, Fragment de c od sursă 6 și
Fragment de cod sursă 7.
admin_fns.php
// inserts a new category into the database
function insert_category($catname)
{
$conn = db_connect();
// check category does not already exist
$query = "select *
from categories
where catname='$catname'";
$result = $conn ->query($query);
if (!$result || $result ->num_rows!=0)
return false;
// insert new category
$query = "insert into categories values
('', '$catname')";
70
$result = $conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 2 – Funcția de inserare a unei noi categorii în baza de date
admin_fns.php
// insert a new book into the database
function insert_book($isbn, $title, $author, $catid, $price, $description)
{
$conn = db_connect();
// check book does not already exist
$query = "select *
from books
where isbn='$isbn'";
$result = $conn ->query($query);
if (!$result || $result ->num_rows!=0)
return false;
// insert new book
$query = "insert into books values
('$isbn', '$author', '$title', '$catid', $price, '$description')";
$result = $conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 3 – Funcția de inserare a unei noi cărți în baza de date
admin_fns.php
// change the name of category with catid in the database
function update_category($catid, $catname)
{
$conn = db_connect();
71
$query = "update categories
set catname='$catname'
where catid='$catid'";
$result = @$conn ->query($query);
if (!$result)
return f alse;
else
return true;
}
Fragment de cod sursă 4 – Funcția de actualizare a unei categorii
admin_fns.php
// change details of book stored under $oldisbn in
// the database to new details in arguments
function update_book($oldisbn, $isbn, $title, $author, $catid,
$price, $description)
{
$conn = db_connect();
$query = "update books
set isbn='$isbn',
title ='$title',
author = '$author',
catid = '$catid',
price = '$price',
description = '$description'
where isbn='$oldisbn'";
$result = @$conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod su rsă 5 – Funcția de actualizare a unei cărți
admin_fns.php
// Remove the category identified by catid from the db
// If there are books in the category, it will not
// be removed and the function will return false.
function delete_category($catid)
72
{
$conn = db_connect();
// check if there are any books in category
// to avoid deletion anomalies
$query = "select *
from books
where catid='$catid'";
$result = @$conn ->query($q uery);
if (!$result || @$result ->num_rows>0)
return false;
$query = "delete from categories
where catid='$catid'";
$result = @$conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de c od sursă 6 – Funcția de ștergere a unei categori
admin_fns.php
// Delete the book identified by $isbn from the database.
function delete_book($isbn)
{
$conn = db_connect();
$query = "delete from books
where isbn='$isbn'";
$result = @$conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 7 – Funcția de ștergere a unei cărți
4.5 Validarea aplicatiei
Aplica ția a fost testată manual. Fiecare funcționalitate a aplicației a fost testată în
primul rând folosind strategia white box testing dar si boundery testing, testandu -se
73
pentru valori normale așteptate de aplicație, pentru care aceasta va avea comportamentul
normal, dar și pentru valori pentru care aplicația nu le poate procesa, valori din afara
mulțimilor de valori acceptate, caz în care aplicația afișează mesaje de eroare
corespunzătoare.
Două dintre cazurile de testare efectuate sunt descrise în Tabel 18 și în Tabel 19.
Caz de testare – Administrator – Logare cu succes
Descriere: Se verific ă dacă logarea are loc cu succes, pentru administratorul cu numele
de utilizator „admi n” și parola „admin ”.
Rezultat așteptat: A dministratorul s-a logat cu succes, se afișează pagina de start a
administratorului în care este afișat meniul pentru administrator .
Tipul executiei: manual
Status passed
Tabel 18 – Caz de testare – Logare cu succes
Test Case – User – Logare fără succes
Descriere: Se verific ă dacă logarea nu are loc cu succes, pentru administratorul cu
numele de utilizator „abc” și parola „abc”, care nu exista in baza de date.
Rezultat așteptat: A dmin istratorul nu s-a logat cu succes, nu se afișează pagina de start
a administratorului în care este afișat meniul. Se rămâne tot la pagina de login și se
afișează un mesaj corespunzător de eroare.
Tipul executiei: manual
Status passed
Tabel 19 – Caz de testare – Logare fără succes
74
5. CONCLUZII
Lucrarea de față si-a propus să prezinte o tehnologie folosită pentru bazele de date
relationale: bazele de date MySql. P entru aplicații Web având bazele de date in MySql
este foarte utilă f olosirea unui pachet de programe software precum Xampp sau Wamp
deoarece facilitează pornirea și oprirea serverelor, setarea acestora, crearea, afișarea,
inserarea de date, și alte operații utile în cazul devoltării aplicațiilor care folosesc baze de
date. De asemenea s -a prezentat în aceasta lucrare și modul în care se realizează legătura
între bazele de date MySql și interfața utilizatorului folosind limbajele de scripting PHP
și HTML. Accentul a fost pus pe bazele de date și pe modul în care se realizeaz ă
operațiile CRUD (Create Read Update Delete) în cazul bazelor de date relationalte,
acestu lucru fiind foarte des folosit de a plicațiile Web care necesit ă multe operații de tipul
CRUD.
Lucrarea e organizată în trei capitol e. Astfel, primul capitol s-au abordat aspectele
teoretice, prezentând noțiuni de bază din domeniul bazelor de date, prezentând informații
despre modelul relational, transformarea entităților, transformarea relațiilor, normalizarea
relațiilor și formele normale.
Al doilea capitol, inti tulat “ Aspecte tehnologice ” si-a propus să prezinte câteva medii
de programare și limbaje care se folosesc pentru a interacționa cu bazele de date. S -a
descris de asemenea modul în care acestea pot fi instalate impreună cu unele exemple de
cod de bază. În acest capitol s -au prezinta t pe scurt tehnologii precum: HTML , CSS, iar
accentul s -a puns pe PHP si MySQL pentru care s -au prezentat mai detaliat și conceptele
de bază.
Al treilea capitol a prezentat aplicația pe care a m realizat -o folosind tehnologiile
PHP și MySQL . Este o aplicație realizată pentru cei care doresc să cumpere mai ușor
cărți, folosind o librarie online.
În momentul de față, dezvoltarea aplicațiilor de baze de date si web se face într -un
mod tot mai dinamic, deoarece numărul de framework -uri JavaScript a crescut, la fel și
numarul de funționalități și ușurința folosirii acestora, iar așteptările utilizatorilor pentru
aplicațiile care rulează în browser au crescut. Utilizatorii sunt obișnuiți cu site -uri care au
interfețe de utilizator tot ma i complexe. Pentru a putea crea astfel de interfețe,
alegerea toolurilor , a limbajelor de programare și a librăriilor potrivite este esențială, mai
75
ales atunci când o pțiunile sunt atât de variate. Cu toate acestea, principiile de bază a
scrierii unei aplic ații web cu conexiune la baze da date răman aceleași.
Această lucrare și -a propus să treacă în revistă principiile folosirii bazelor de date
relaționale împreuna cu cele mai importante tehnologii folosite pentru aplicațiile web
conectate la baze de date: M ySQL si PHP.
Utilizarea unui limbaj sau al unui framework potrivit poate aduce de cele mai multe
ori beneficii majore atât dezvoltatorului cât și aplicației în sine. De aceea e important să
cunoaștem principiile de baza a unor tehnologii, pentru ca mai apo i va fi mai ușor să
alegem una din extensiile sale pentru a implementa o aplicație de dimensiuni mari.
Sistemul informatic de gestiune al magazinului de cărți este ușor de folosit de către
utilizator , multilateral și rapid. Gestiunea cărților aflate în sto c este intuitivă, putând fi
ușor de modificat datele din aceasta. Design -ul aplicației permite utlizatorului căutarea și
cumpărarea într -un mod ușor a cărților. Sistemul de gestiune a bazelor de date poate să
ofere facilitați moderne oricărei librării.
Pe viitor exita posibilitatea implementării unei secțiune special e pentru facturi,
clien ții având op țiunea de a alege ca produsele cump ărate s ă fie trecute pe bon fiscal sau
pe factur ă. Odat ă cu extinderea magazinului poate fi creata de asemenea o aplocație pe
mobil care va oferi clien ților posibilitatea de a face comenzi de oriunde, oricând .
76
BIBLIOGRAFIE
[1] Rădulescu F. – Note de curs: Baze de date , Bucuresti 2007.
[2] Ullman L. – PHP si MySQL pentru site -uri WEB dinamice , Editura Teora, București
2005 .
[3] Ulman L. – PHP pentru World Wide Web, în imagini , Editura Teora, București 2006.
[4] Holzner S. – Inițiere in PHP 5 – Editura Teora, București 2006.
[5] Darie C., Bucica M. – PHP5 Si MySQL pentru comerț electronic , Editura Teora,
Bucuresti 2005.
[6] P etersen J.V. – Baze de date pentru începatori , Editura Teora, București 2006.
[7] Anghel T. – Programarea in PHP. Ghid practic , Editura Polirom 2005.
[8] Meloni J. – PHP, MySQL și Apache , Editura Teora, Bucuresti 2006.
[9] Weling L., Thomson L. – PHP and My SQL Web , USA LLC 2005.
[10] SAMS TEACH YOURSELF php, Mysql and Apache ALL in One, j.k. Meloni –
Person Education, 2004.
[11] Wiley & Sons – Secure PHP Development – Building 50 Practica, 2005.
[12] Wrox Press – Professional PHP Programming , 2005.
[13] NewRi ders – PHP Programming For Windows, 2004.
[14] MySQL – PHP Database Aplication, 2005.
[15] Codd, E.F. "Further Normalization of the Da ta Base Relational Model".
Bibliografie internet:
http://wikipedia.org – enciclopedia liberă
http://www.php.net – pagina oficială a grupului de lucru pentru dezvoltarea limbajului
PHP
http://www.w3schools.com – set gratuit de tutoriale și documentații pentru program area
paginilor web.
http://www.w3.org/ – pentru cele mai noi specificații HTML.
https://searchsqlserver.techtarget.com/
https:/ /opentextbc.ca/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: SPECIALIZAREA: ………………. ………….. ……. Lucrare de licență Baze de date relaționale – aspecte teoretice și practice Coordonator… [631079] (ID: 631079)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
