1. PROIECT DE DIPLOMĂ
Aplicaţie pentru managementul documentelor
Prezentată Facultăţii de Automatică şi Calculatoare
din Universitatea Politehnică Bucureşti de către
LUPU Ionut-Marius
in Iulie 2010
Coordonator: prof. dr. ing. Valentin SGARCIU
2. Abstract
Abstract
Documentul este o unealtă de comunicare importantă între departamentele organizaţiilor
şi în relaţiile cu alte companii. Sistemele de management al documentelor sunt folosite de
organizaţii din toate sectoarele publice şi private pentru a organiza şi structura documentele
electronice precum şi pentru a urmări fluxul acestora în cadrul companiei şi în punctele de
intrare/ieşire ale acesteia.
Această lucrare îşi propune implementarea unei aplicaţii de management al
documentelor care permite gestiunea şi urmărirea documentelor, precum şi arhivarea acestora,
asigurând un echilibru între securitate şi accesibilitate, protejând informaţiile şi în acelasi timp
oferind un acces usor şi rapid pentru a ajuta personalul companiei să lucreze cu un maxim de
eficienţă.
2
3. Cuprins
Cuprins
Abstract …...........................................................................................................i
Cuprins …...........................................................................................................3
1. Introducere ….....................................................................................................5
1.1 Sistemele de management al documentelor .................................................5
1.1.1 Definirea documentului …...............................................................5
1.1.2 Caracteristici ….........................................................................…...6
1.1.3 Avantaje ..........................................................................….............9
1.2 Scopul proiectului ….......................................................................................9
2. Aplicaţii similare de management al documentelor …..................................11
2.1 Biblioteci de documente …............................................................................11
2.2 Aplicaţii de flux (workflow) ….........................................................................12
3. Specificaţii de proiectare ….......................................…...................................14
3.1 Stabilirea obiectivelor de proiectare ..............................................................14
3.2 Interfaţa cu utilizatorul ...................................................................................15
4. Limbaje de programare folosite .......................................................................17
4.1 PHP (Hypertext Preprocessor) ......................................................................17
4.2 SQL (Structured Query Language - Limbaj Structurat de Interogare) ..........20
4.2.1 MySql ..............................................................................................20
4.3 HTML (HyperText Markup Language) ...........................................................22
5. Proiectarea conceptuală a bazei de date .........................................................24
5.1 Noţiuni generale .............................................................................................24
5.2 Modelul Entitate-Asociere (EA) ......................................................................25
5.2.1 Identificarea tipurilor de entităţi ........................................................25
5.2.2 Identificarea tipurilor de asocieri ......................................................27
5.2.3 Identificarea şi asocierea atributelor cu tipurile de entităţi sau relaţii ..29
5.2.4 Diagrama Entitate-Asociere .............................................................32
5.3 Modelul relaţional ............................................................................................36
5.3.1 Noţiuni generale ...............................................................................36
5.3.2 Descrierea structurii tabelelor folosite şi legăturilor dintre acestea .40
3
4. Cuprins
6. Interogarea bazei de date ................................................................................52
6.1 Noţiuni generale ...........................................................................................52
6.2 Conectarea la baza de date .........................................................................55
6.3 Inserarea inregistrărilor ................................................................................56
6.4 Selectarea inregistrărilor ..............................................................................57
6.5 Actualizarea inregistrărilor ...........................................................................57
6.6 Ştergerea inregistrărilor ...............................................................................58
7. Prezentarea aplicaţiei ......................................................................................59
7.1 Structură ......................................................................................................59
7.1.1 Modulul client ................................................................................59
7.1.2 Modulul administrator ....................................................................68
8. Detalii de implementare a aplicaţiei ...............................................................70
8.1 Implementarea modulelor ............................................................................70
8.2 Optimizări şi performanţe .............................................................................73
8.2.1 Normalizarea bazei de date ...........................................................73
8.2.2 Utilizarea procedurilor stocate .......................................................75
8.2.3 Promovare .....................................................................................76
9. Concluzii şi dezvoltări ulterioare ....................................................................77
10. Bibliografie .......................................................................................................78
4
5. 1. Introducere
1. Introducere
1.1 Sistemele de management al documentelor
Istoria sistemelor pentru managementul documentelor cunoaşte două mari perioade de
evoluţie. Primele soluţii dezvoltate erau sisteme in cadrul cărora scopul era in principal
„arhivarea electronică‖, reprezentand o alternativă la micrografie. In acea perioadă, 90% dintre
soluţii erau concentrate in domeniile de administraţie publică şi bănci-asigurări. A doua perioadă
incepe in 1995 odată cu evoluţia reţelelor, a soluţiilor multimedia şi a informaticii in general.
Astfel:
• documentul electronic a devenit multimedia: nu mai este vorba numai despre texte, dar
şi despre imagini, sunet, video, etc. ce pot fi integrate;
• un mare progres ce a fost realizat se referă la capacităţile de stocare la costuri din ce in
ce mai scăzute (de exemplu DVD-urile);
• au apărut din ce in ce mai multe standarde referitoare la protocoalele de reţele, la
sistemele de exploatare şi la conectivitatea intre diferitele platforme;
• interfeţele om-maşină s-au simplificat mult pentru a face informatica accesibilă pentru
mai multe persoane.
Justificarea achiziţionării unui sistem pentru managementul documentelor devine
astfel, parte importantă şi integrantă a sistemului informaţional al organizaţiilor şi joacă din
acest moment un rol economic şi strategic deoarece prin utilizarea şi administrarea eficientă
a informaţiei se poate obţine avantaj competitiv.
1.1.1 Definirea documentului
Inainte de revoluţia digitală, documentul nu era altceva decat ceea ce definea
dicţionarul: "act prin care se adevereşte, se constată sau se preconizează un fapt, se conferă un
drept, se recunoaşte o obligaţie; text scris sau tipărit, inscripţie sau altă mărturie servind la
cunoaşterea unui fapt real actual sau din trecut" (DEX ediţia a II-a 1996, Editura Univers
5
6. 1. Introducere
Enciclopedic). Pe scurt, un document era o foaie de hartie pe care era scris un lucru important,
ce putea fi o informaţie.
Astăzi, tehnologiile integrate, puternice, pe care le avem permit o redefinire a
documentului: "orice pachet de date structurate care poate fi folosit ca informaţie". Adică un
document poate fi aproape orice: holograme, CD-ROM-uri, secvenţe video.
Un document tipic devine o compoziţie cu text şi elemente multimedia, tipărită mult mai
rar ca inainte. Documentul poate fi citit, vizualizat, auzit simultan pe dispozitive wireless
portabile sau pe echipamente de birou. Cu ajutorul acestuia se pot realiza tranzacţii de oriunde,
fără constrangeri de spaţiu şi timp.
Aşadar, apare noţiunea de document electronic. Documentul electronic implică orice
conţinut media electronic (text, imagine grafică, arhive, e-mail, etc.), atat timp cat nu
desemnează un program pe calculator sau fişiere sistem, fiind destinat folosirii intr-o formă
electronică sau in variantă printată. Odată cu dezvoltarea reţelelor de calculatoare, s-a dovedit
faptul că in cele mai multe cazuri este mult mai convenabil să distribuim documentele
electronice decat cele printate.
1.1.2 Caracteristici
Definiţie
Un sistem de management al documentelor reprezintă un sistem informatic, folosit
pentru a crea, gestiona, distribui şi controla documente electronice, cu facilitaţi de conectare la
alte sisteme informatice sau dispozitive electronice.
In general, un sistem performant de management al documentelor:
• implementează rapid fluxuri de documente
• este flexibil la orice structură organizaţională
• are un grad inalt de securitate
• este adaptabil la orice tip de document
• este conectabil la alte aplicaţii
• prezintă uşurinţă in exploatare
• este scalabil la dezvoltări ulterioare.
Componentele de bază ale unui sistem de management al documentelor:
6
7. 1. Introducere
Sistemele de management al documentelor implică de obicei stocare, control al
versiunilor, date meta, securitate precum şi posibilităţi de indexare şi recuperare. O descriere a
acestor componente este prezentată mai jos:
• Date meta
Această componentă este atribuită fiecărui document in parte. Ca exemplu, datele meta
pot include data la care documentul a fost salvat şi identitatea utilizatorului care a salvat acel
document. Sistemul de management al documentelor poate extrage automat datele meta din
cadrul unui document, sau poate atenţiona utilizatorul să o introducă. Unele sisteme pot utiliza o
recunoaştere optică 1 a caracterelor asupra imaginilor scanate sau pot extrage text din
documente electronice. Textul rezultat poate fi de ajutor pentru utilizatori in cazul localizării
documentelor prin identificarea cuvintelor cheie.
• Captura
Imagini ale documentelor hartie folosind scannere sau imprimante multifuncţionale.
Recunoaşterea optică a caracterelor este des folosită in acest caz.
• Indexare
Folosită pentru a ţine evidenţa documentelor electronice. Poate varia de la forme simple
cum ar fi stabilirea identificatorilor unici ai documentelor pană la forme complexe precum
clasificarea dupa datele meta ale documentelor sau indici ai cuvintelor extrase din conţinutul
acestora.
• Stocare
Stocarea documentelor implică de multe ori o gestionare a acestora; unde au fost
salvate, pentru cat timp, migrarea documentelor de la un mediu de stocare la altul precum şi
distrugerea acestora.
• Recuperare
Implică obţinerea documentelor din mediul in care au fost stocate. Acest proces poate fi
unul complex. In varianta simplă, recuperarea documentelor individuale poate fi realizată prin
specificarea de către utilizator a identificatorului unic atribuit documentului respectiv. O
1
Recunoaşterea optică a caracterelor reprezintă translatarea mecanică sau electronică a imaginilor cu scris de
mană, tipărit sau printat (de obicei scanat) in text editabil.
7
8. 1. Introducere
recuperare mai flexibilă, implică specificarea de către utilizator a unor termeni parţiali de căutare
implicand identificatorul documentului şi/sau părţi din datele meta atribuite acestuia.
• Securitate
Securitatea documentelor este un lucru vital in astfel de sisteme. Multe aplicaţii de
management al documentelor au implementat un modul de atribuire de drepturi de către
administrator, asupra documentelor, pentru anumiţi utilizatori sau grupuri de utilizatori.
Securitatea implică şi atribuirea de semnături digitale asupra documentelor pentru validarea
autenticităţii acestora precum şi transmiterea lor de la server la client sau invers folosind
conexiuni sigure (SSL2).
• Workflow (Aplicaţii de flux)
Documentele intr-o organizaţie nu sunt statice. Ele sunt create, modificate, distribuite pe
rute clar definite. De aceea, sistemele de management de documente conţin aplicaţii de flux
care determină cu precizie unde se trimite un document, dacă a ajuns la destinaţie, cand a fost
redirectat şi care este statutul lui la un moment dat. Permit automatizarea proceselor din cadrul
organizaţiei, rutand un document sau un folder de documente către utilizatori şi grupuri folosind
un set de reguli stabilite de noi. Ele pot fi manuale, bazate pe reguli sau automate.
• Colaborare
Atunci cand un utilizator autorizat face modificări asupra unui document, accesul
celorlalţi utilizatori trebuie să fie blocat atat timp cat se desfaşoară acea activitate.
• Controlul versiunilor
Versiunea unui document este o copie intermediară a unui document sau o actualizare a
unui document precedent. Prin crearea şi păstrarea transparentă a versiunilor unui document
este posibilă urmărirea evoluţiei acestuia.
• Publicare
Un document publicat trebuie să fie intr-un format care nu poate fi modificat uşor decat
cu unelte sau cunoştinţe specifice, fiind totodată ―read-only‖ sau portabil.
2
SSL (Secure Sockets Layer) este un acronim care reprezintă un protocol Web dezvoltat de Netscape pentru a
transmite documente private prin Internet.
8
9. 1. Introducere
Funcţiile de bază ale sistemelor de management al documentelor
Sistemele de management al documentelor asigură:
• Alocarea unui număr unic de inregistrare fiecărui document
• Stabilirea locului unde se află fiecare document activ.
• Urmărirea intregului ciclu de viaţă al unui document
- personalul insărcinat cu recepţia acestuia.
- momentul la care a fost recepţionat.
- persoana care răspunde de avizarea/răspunsul formulat.
- data la care răspunsul/avizarea au fost finalizate.
• Controlul versiunii.
1.1.3 Avantaje
Tradiţionalele sisteme de operare ca DOS şi Windows nu au reuşit să ofere uneltele şi
resursele necesare pentru gestiunea documentelor.
Spre deosebire de sistemele manuale, sistemele automate de management al
documentelor:
• Stochează informaţiile legate de document intr-un singur loc
• Permit accesul rapid la locul in care se află documentul in organizaţie
• Informează privind stadiul de avizare (rezoluţie) in care se află un document
• Urmăresc timpul necesar finalizării unei avizări (rezoluţii) şi cele care au depăşit acest
termen
• Vizualizează numărul de documente intrate zilnic, săptămanal şi lunar.
1.2 Scopul proiectului
Scopul proiectului este de a realiza o aplicaţie de management al documentelor bazată
pe tehnologii web, care să ofere utilizatorilor dintr-o reţea soluţii privind problemele de stocare,
căutare, de urmărire şi de control a propriilor documente electronice, ele putand fi accesate de
oriunde şi oricand.
Aplicaţia este realizată pentru a gestiona :
9
10. 1. Introducere
• Fluxul Documentelor :
– Gestiunea documentelor dintr-o organizaţie
–Inregistrarea documentelor prin atribuirea de numere unice in cadrul
organizaţiei
–Clasificarea documentelor
–Identificarea sursei
–Căutarea şi regăsirea rapida a documentelor
–Stările documentelor
–Acces rapid la documente prin browsere web standard
• Arhivarea documentelor electronice:
–Fişierele sunt salvate intr-un mediu de stocare secundar
–Informaţia este centralizată fiind uşor de regăsit şi controlat.
10
11. 2. Aplicatii similare de management al documentelor
2. Aplicaţii similare de management al documentelor
Sumar. In acest capitol sunt descrise cateva aplicatii cu funcţionalitate similara cu cea din
cadrul proiectului.
2.1 Biblioteci de documente
Elemente centrale al unui sistem de management de documente, bibliotecile de
documente conţin:
• Documente relative la proiect.
• Proceduri ale sistemului calităţii, manualul calităţii.
• Norme, proceduri, regulamente care trebuiesc consultate de personal.
• Documente interne etc.
Un exemplu concret de astfel de aplicaţii il reprezintă DocPlus Biblioteca de documente.
Beneficii
-Oferă acces rapid la biblioteci electronice cu informaţii şi documente utile, acces la baze
de discuţii tematice sau colaborative;
-Asigură utilizatorilor acces la documente tematice, departamentale şi transfer de ―know-
how‖, in baza drepturilor de acces definite, biblioteci disponibile pentru toţi membrii unei echipe
sau ai unui grup de lucru;
-Reduce incărcarea inutilă a reţelei, fiind transmise doar legături (link-uri) către
documentele de interes, din cadrul bibliotecii virtuale; imbunătăţeşte colaborarea intre echipele
de lucru prin partajarea şi distribuţia informaţiilor;
-Asigură reducerea costurilor asociate cu gestiunea şi arhivarea diferitelor tipuri de
documente ale departamentelor, precum şi timpul alocat activităţilor de arhivare şi regăsire a
documentelor;
-Creşte eficienţa personalului prin reutilizarea informaţiilor stocate in aplicaţii partajate
sau utilizarea acestor informaţii ca bază de plecare in rezolvarea de situaţii similare;
11
12. 2. Aplicatii similare de management al documentelor
-Permite gruparea documentelor in zone de interes pentru acces rapid la acestea,
precum şi crearea unor profile de interes pentru notificare automată de către sistem in cazul
apariţiei unor informaţii noi care corespund profilelor create.
2.2 Aplicaţii de flux (workflow)
Documentele intr-o organizaţie nu sunt statice. Ele sunt create, modificate, distribuite pe
rute clar definite. De aceea, sistemele de management de documente conţin aplicaţii de flux
care determină cu precizie unde se trimite un document, dacă a ajuns la destinaţie, cand a fost
redirectat şi care este statutul lui la un moment dat.
DocPlus Circuitul documentelor este o aplicaţie care permite automatizarea, gestionarea
şi monitorizarea proceselor interne de lucru, care pot fi imbunătăţite, rafinate, iar erorile pot fi
reduse intrucat paşii de flux predefiniţi sunt rezultatul unei analize a proceselor de lucru. Odată
cu evoluţia fluxurilor de lucru, profilul acestora se poate modifica cu uşurinţă.
Modulul se adresează oricărei tip de organizaţii, fie că este organizaţie guvernamentală,
companii mari sau din segmentul intreprinderilor mici şi mijlocii, fiind un instrument de lucru
eficient utilizatorilor sistemului şi managementului organizaţiei.
Integrarea cu platforma internă de comunicare mail şi in timp real este nativă, permiţand
utilizatorilor sistemului de management al documentelor să fie notificaţi asupra acţiunii de
aprobare, informare a unor documente.
Documentele vor putea fi accesate şi se va putea lucra asupra lor indiferent de locul in
care se află utilizatorii autorizaţi. Acest lucru este posibil utilizand funcţiile avansate de lucru off-
line pe care sistemul le pune la dispoziţie.
Timpii de aşteptare pentru acţionarea asupra documentelor urgente sunt eliminaţi,
productivitatea fiind susţinută prin eficienţă. Aceeaşi eficienţă se remarcă şi prin utilizarea
capabilităţii de comunicare in timp real din orice locaţie cu persoanele implicate in activitatea
respectivă pentru schimb de idei, informaţii şi luare de decizii.
Circuitul documentelor asigură suportul pentru automatizarea proceselor interne ale
organizaţiei, pune la dispoziţie instrumente pentru definirea circuitului diverselor tipuri de
documente, in scopul aprobării interne şi informării, furnizand in orice moment rapoarte privind
stadiul de aprobare, tipurile de documente procesate şi alte informaţii specifice.
12
13. 2. Aplicatii similare de management al documentelor
Beneficii
-Oferă un mecanism automatizat de circulaţie internă a documentelor de diverse tipuri,
definite intern: cerere achiziţie, cerere concediu, referat deplasare, decontare, sau alte
formulare specifice organizaţiei.
-Oferă un cadru unitar şi standardizat pentru operarea documentelor interne de către
personal.
- Asigură circulaţia documentelor in interiorul organizaţiei pe trasee predefinite sau
stabilite de către autorul documentului, cu posibilitatea aprobării sau respingerii acestora şi
adăugarea de comentarii.
-Pune la dispoziţie multiple criterii de definire a fluxului de aprobare, a aprobatorilor finali,
a timpilor de aşteptare, de informare.
-Permite urmărirea stării documentelor pe parcursul fluxului, precum şi evidenţierea
modului de rezolvare a fiecărui document de către responsabilii desemnaţi.
-Oferă posibilitatea de a obţine rapoarte privind documentele rezolvate sau aflate in lucru
dupa criterii precum stare, tip, responsabil etc.
-Asigură integrarea cu sistemul de comunicare in timp real pentru afişarea disponibilităţii
persoanelor pentru comunicare sau schimb de idei.
-Asigură obţinerea de rapoarte specifice după persoane, stare document, tip document,
fiecare persoană avand acces la documentele proprii sau la cele comune, in funcţie de
drepturile de acces stabilite.
-Eficientizează lucrul cu documentele pe hartie şi automatizează procesele de aprobare
internă şi informare, reducand timpul necesar manipulării documentelor.
13
14. 3. Specificatii de proiectare
3. Specificaţii de proiectare
Sumar. In acest capitol sunt prezentate cerinţele de proiectare ale aplicaţiei. Acest lucru
presupune o bună formulare şi inţelegere a problemei, evidenţiind necesităţile informaţionale ale
organizaţiei. Această intelegere poate conduce la o distincţie netă intre analiză ("ce trebuie
făcut?") şi proiectarea ("cum trebuie făcut?") aplicaţiei.
3.1 Stabilirea obiectivelor de proiectare
Aplicaţia va prezenta următoarele caracteristici, in ceea ce priveşte stabilirea obiectivelor
de proiectare.
• independenţa de platformă
• uşurinţă in exploatare
• nu necesită instalare sau alte configurări
• grad inalt de securitate
• adaptabilă la orice tip de document
• dinamică
Obiectul de bază cu care operează aplicaţia este documentul electronic.
Documentele sunt introduse de către utilizatori in baza de stocare a organizaţiei prin
reţeaua Internet prin completarea unor formulare on-line specifice. Aceste formulare vor fi
proiectate astfel incat să permită crearea de documente noi, sau rescrierea acestora peste cele
vechi. Totodată, sunt preluate de către sistem şi verificate in ceea ce priveşte completitudinea şi
corectitudinea datelor introduse de utilizator. De asemenea datele introduse sunt supuse unor
prelucrări menite a proteja sistemul informatic la atacuri informatice (dezactivarea caracterelor
speciale, eliminarea eventualelor tag-uri sau secvenţe de cod).
Structura documentelor in cadrul aplicaţiei trebuie să fie aceeaşi cu cea de pe suportul
fizic pe care sunt stocate, facilitand astfel funcţia de adaptabilitate şi scalabilitate a aplicaţiei.
14
15. 3. Specificatii de proiectare
Documentele companiilor sunt puse in comun angajaţilor acestora intr-un mediu
securizat. Se va folosi o transmisie criptată a acestora (SSL), informaţiile din baza de date
precum şi documentele electronice efective vor fi salvate in mod regulat (―backup‖), iar accesul
documentelor de către utilizatori se va face pe baza drepturilor caştigate.
Mai mult, se vor folosi funcţii hash de criptare/decriptare pentru garantarea autenticităţii
şi confidenţialităţii documentelor şi datelor despre utilizatori dar şi pentru stabilirea modificărilor
făcute asupra documentelor.
Aplicaţia va fi modularizată, pentru o inţelegere şi distribuire mai bună a sarcinilor in
etapa de implementare.
Pentru asigurarea calităţii aplicaţiei, aceasta trebuie indeplinească următoarele:
Increderea
Este garantată buna funcţionare precum şi corectitudinea stocării datelor obţinute de la
utilizatori in baza de date. Eventualele erori ce pot să apară vor fi in stransă legatură cu starea
sistemului pe care este rulată aplicaţia, dar şi cu starea resurselor ce sunt utilizate.
Fiabilitatea
Posibilitatea de accesare a aplicaţiei web depinde de funcţionalitatea serverului pe care
este rulată aplicaţia, cat şi de starea bazei de date. Aplicaţia web in discuţie este construită
pentru a fi folosită in condiţii optime o perioadă indelungată de timp, efectuanduse operaţii din
cele mai diverse.
Securitatea
Este asigurată păstrarea confidenţialităţii datelor introduse de utilizatorii care au cont in
cadrul aplicaţiei.
Toleranţa la erori
Aplicaţia are o toleranţa ridicată la erori. Eventualele erori ce pot să apară depind de
configuraţia serverului pe care rulează aplicaţia şi de baza de date utilizată.
15
16. 3. Specificatii de proiectare
3.2 Interfaţa cu utilizatorul
Interfaţa este intuitivă, prezentand uşurinţă in exploatare indiferent de gradul de
cunoştinţe al utilizatorului.
Interfaţa cu utilizatorul implică un set de funcţionalităţi prin care acesta trimite comenzi
pentru a fi rulate in mediul de execuţie.
Interfaţa este aceeaşi atat pentru utilizatorul obişnuit cat şi pentru administratorul
aplicaţiei, cu excepţia faptului că cel din urmă beneficiază de anumite facilităţi in plus, cum ar fi
adăugarea, editarea sau ştergerea de utilizatori, stabilirea perioadei de timp după care incepe
să se desfăşoare procesul de arhivare etc.
Funcţionalităţile de bază sunt: crearea efectivă a documentelor, ştergerea , modificarea,
copierea , mutarea, căutarea şi redenumirea acestora. Alte facilităţi specifice interfeţei implică
faptul că utilizatorii vor putea seta drepturi de acces asupra documentelor pentru anumiţi
utilizatori, sau crea fluxuri de lucru.
Interfaţa vizitatorului este mai redusă, acesta avand doar drepturi de căutare şi
vizualizare şi nu are acces la modificarea datelor din bază.
Accesul la interfaţa utilizatorului este garantat prin browser-ul web (Opera, Mozilla
Firefox, Internet Explorer, Safari etc) care la randul său reprezintă o interfaţă de comunicare cu
server-ul pe care rulează aplicaţia.
16
17. 4. Limbaje de programare folosite
4. Limbaje de programare folosite
Sumar. In acest capitol sunt prezentate principalele limbaje de programare ce stau la baza
implementării aplicaţiei.
4.1 PHP (Hypertext Preprocessor)
PHP este un limbaj de programare destinat in primul rand Internetului, aducand
dinamică unei pagini de web. Este unul din cele mai importante limbaje de programare web
open-source şi server-side.
Numele PHP provine din limba engleză şi este un acronim recursiv: Php: Hypertext
Preprocessor. Exemple faimoase de utilizare a acestui limbaj sunt PhpBB (forum),
PhpNuke(CMS), chiar şi MediaWiki, software-ul din spatele Wikipedia. Folosirea PHP poate fi
văzută ca o alternativă gratuită la utilizarea unor limbaje comerciale cum sunt ASP de la
Microsoft, ColdFusion de la Macromedia, sau chiar JSP de la Sun Microsystems.
Istoric
PHP a insemnat iniţial Personal Home Page. PHP a fost inceput in 1994 ca o extensie a
limbajului server-side Perl, şi apoi ca o serie de CGI-uri compilate de către Rasmus Lerdorf,
pentru a genera un curriculum vitae şi pentru a urmări numărul de vizitatori ai unui site. Apoi a
evoluat in PHP/FI 2.0, dar proiectul open-source a inceput să ia amploare după ce Zeev Suraski
şi Andi Gutmans, de la Technion au lansat o nouă versiune a interpretorului PHP in vara anului
1998, această versiune primind numele de PHP 3.0. Tot ei au schimbat şi numele in acronimul
recursiv de acum, pană atunci PHP fiind cunoscut ca Personal Home Page Tools. Apoi Suraski
şi Gutmans au rescris baza limbajului, producand astfel şi Zend Engine in 1999. In mai 2000 a
fost lansat PHP 4.0, avand la bază Zend Engine 1.0.
Evolutie
- PHP 5
17
18. 4. Limbaje de programare folosite
Pe 13 iulie 2004 a fost lansat PHP 5, cu Zend Engine II, ce a adus şi o orientare obiect
mai pronunţată şi suportand mai multe caracteristici ale acestui tip de programare.
PHP 5 aduce mai multe noutăţi faţă de versiunea 4:
• Suport imbunătăţit pentru OOP
• Introduce extensia PDO - PHP Data Objects, care defineşte o modalitate facilă şi
consistentă de accesare a diferitelor baze de date
• Imbunătăţiri de performanţă
• Suport imbunătăţit pentru MySQL şi MSSQL
• Suport nativ pentru SQLite
• Suport SOAP integrat
• Iteratori pentru date
• Controlul erorilor prin tratarea de excepţii
PHP 6
PHP 6 are următoarea agendă de imbunătăţiri şi modificări:
• imbunătăţirea suportului pentru Unicode
• retragerea definitivă a unor funcţii ca register_globals şi magic_quotes, şi a variabilelor
tip $HTTP_*_VARS
• var va fi un alias pentru public, şi folosirea lui va ridica o atenţionare E_STRICT
• suport pentru int pe 64 biti
• taguri tip ASP sunt retrase definitiv
• erorile tip E_STRICT sunt incluse in E_ALL
• adaugarea instrucţinuii goto permite salturi la un alt bloc de comenzi
• namespace, import, şi goto devin cuvinte rezervate
• opţiunea safe_mode a fost inlăturată
• operatorul and a fost inlăturat.
Popularitate
PHP-ul este unul din cele mai folosite limbaje de programare server-side, conform unui
studiu efectuat de Netcraft in aprilie 2002, apărand pe 9 din cele 37 milioane de domenii
cercetate in studiu. De asemenea, există un grafic al creşterii folosirii PHP-ului pe site-ul oficial.
Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor
caracteristici :
- Familiaritatea : sintaxa limbajului este foarte uşoară combinand sintaxele unora din
18
19. 4. Limbaje de programare folosite
cele mai populare limbaje Perl sau C;
- Simplitatea : sintaxa limbajului este destul de liberă. Nu este nevoie de includere de
biblioteci sau de directive de compilare, codul PHP inclus intr-un document executanduse intre
marcajele speciale;
- Eficienţa : PHP-ul se foloseşte de mecanisme de alocare a resurselor, foarte necesare
unui mediu multiutilizator, aşa cum este web-ul;
- Securitate : PHP-ul pune la dispoziţia programatorului un set flexibil şi eficient de
măsuri de siguranţă;
- Flexibilitate : fiind apărut din necesitatea dezvoltării web-ului, PHP a fost modularizat
pentru a ţine pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web,
PHP-ul a fost integrat pentru numeroasele servere web existente:
Apache, IIS, Zeus, server, etc.;
- Gratuitate : este probabil cea mai importantă caracteristică a PHP-ului. Dezvoltarea
PHP-ului sub licenţa open-source a determinat adaptarea rapidă a PHP-ului la nevoile webului,
eficientizarea şi securizarea codului.
Scrierea unui script PHP
Pentru a crea scripturi PHP, majoritatea programatorilor PHP folosesc un editor de texte
obişnuit. Sub Microsoft Windows se utilizează frecvent Windows Notepad , WordPad sau chiar
un procesor de texte precum Microsoft Word.
Scrierea scheletului programelor PHP
Fiecare program PHP include două linii speciale , care indică serverului PHP că textul
cuprins intre cele două linii este alcătuit din instrucţiuni PHP. Aceste 2 linii intre care se scrie
scriptul PHP sunt : <?php şi ?>.
După scrierea scriptului acesta se salvează sub formă de fişier text , cu un nume care
respectă următoarele reguli :
• Numele fişierului trebuie să fie alcătuit numai din caractere minuscule, cifre şi liniuţe.
Utilizarea spaţiilor şi a altor caractere este interzisă.
• Extensia fişierului trebuie să fie .php.
Crearea datelor de ieşire pentru un browser Web
Programele PHP execută trei categorii de operaţii elementare :
• Obţin date de la utilizator
19
20. 4. Limbaje de programare folosite
• Execută prelucrări ale datelor, respectiv obţin accesul la datele stocate in fişiere şi baze
de date şi le manipulează
• Afişează date astfel incat un utilizator să le poată vizualiza.
Instrucţiunea care trimite date de ieşire la un browser Web astfel incat acestea să fie
vizibile pentru utilizatori - numită instrucţiune de reflectare este :
• echo (―text afişat ―) ;
Suport
PHP are un manual oficial intreţinut de comunitatea din jurul proiectului. In plus,
răspunsurile la multe probleme pot fi găsite printr-o simplă căutare pe internet. Există multe
resurse disponibile pentru un programator PHP incepător.
4.2 SQL (Structured Query Language)
SQL (Structured Query Language - Limbaj Structurat de Interogare) este un limbaj de
programare specific lucrului cu bazele de date, devenit un standard in domeniu (standardizat
ANSI-ISO), fiind cel mai popular limbaj utilizat pentru crearea, modificarea, regăsirea şi
manipularea datelor de către SGBD-urile (Sistemele de Gestiune a Bazelor de Date) relaţionale.
Pe langă versiunile standardizate ale limbajului, există o mulţime de dialecte şi variante, unele
proprietare, fiind specifice anumitor SGBD-uri şi de asemenea conţinand extensii pentru a
suporta SBD-urile (Sistemele de Baze de Date) obiectuale (obiectual-relaţionale).
SQL permite atat accesul la conţinutul bazelor de date, cat şi la structura acestora.
4.2.1 MySql
MySQL este un sistem de gestiune a bazelor de date relaţional, produs de compania
suedeză MySQL AB şi distribuit sub Licenţa Publică Generală GNU. Este cel mai popular SGBD
open-source la ora actuală, fiind o componentă cheie a stivei LAMP (Linux, Apache, MySQL,
PHP).
Popularitatea sa ca aplicaţie web este strans legată de cea a PHP-ului care este adesea
combinat cu MySQL şi denumit Duo-ul Dinamic. MySQL este mult mai uşor de invăţat şi folosit
decat multe din aplicaţiile de gestiune a bazelor de date.
20
21. 4. Limbaje de programare folosite
Pentru a administra bazele de date MySQL se poate folosi modul linie de comandă sau,
prin descărcare de pe internet, o interfaţă grafică: MySQL Administrator şi MySQL Query
Browser. Un alt instrument de management al acestor baze de date este aplicaţia gratuită,
scrisă in PHP, phpMyAdmin.
Cele mai uzuale operaţii cu bazele de date sunt:
Comanda Semnificatie
CREATE crează o bază de date sau un tabel
DROP şterge o baza de date sau un tabel
INSERT adaugă inregistrări intr-un tabel
DELETE şterge inregistrări dintr-un tabel
UPDATE ―updatează‖ inregistrările dintr-un tabel
SELECT selectează un tabel
ALTER alterarea unui tabel.
In MySQL spaţiul alocat pe discul serverului este funcţie de tipul de date. Cateva din
tipurile de date folosite in bazele de date MySQL sunt:
Tip Semnificaţie
int() număr intreg 32 biti
bigint() număr intreg 64 biti
tinyint() număr intreg (-128 la 127 sau 0 la 255) 8 biti
mediumint() numar intreg 24 biti
smallint() număr intreg 16 biti
char() secţiune cu lungime fixă de la 0 la 255 caractere
varchar() secţiune cu lungime variabilă de la 0 la 255 caractere
float() număr mic cu virgulă flotantă
double număr mare cu virgulă flotantă
text şir cu maximum 65535 caractere
date() data in format YYYY-MM-DD
date data in format YYYY-MM-DD HH:MM:SS
time ora in format HH:MM:SS
Pentru ca baza de date să fucţioneze mai bine, coloanelor li s-au adăugat modificatori
de coloană.
21
22. 4. Limbaje de programare folosite
MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD,
GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows 9x/NT/2000/XP/Vista.
4.3 HTML (HyperText Markup Language)
HyperText Markup Language (HTML) este un limbaj de marcare utilizat pentru crearea
paginilor web ce pot fi afişate intr-un browser (sau navigator). Scopul HTML este mai degrabă
prezentarea informaţiilor – paragrafe, fonturi, tabele etc. – decat descrierea semanticii
documentului.
Specificaţiile HTML sunt dictate de World Wide Web Consortium (W3C).
Noţiuni de bază
Paginile HTML sunt formate din etichete sau tag-uri şi au extensia .html sau .htm. In
marea lor majoritate aceste etichete sunt pereche, una de deschidere <etichetă> şi alta de
inchidere </etichetă>. Browserul interpretează aceste etichete afişand rezultatul pe ecran.
HTML-ul nu este un limbaj case sensitiv (nu face deosebirea intre litere mici şi mari).
Pagina principală a unui domeniu este fişierul index.html. Această pagină este setată a fi afişată
automat la vizitarea unui domeniu. De exemplu la vizitarea domeniului www.nume.ro este
afişată pagina www.nume.ro/index.html.
Unele etichete permit utilizarea de atribute care pot avea anumite valori: <etichetă
atribut="valoare"> ... </etichetă>
Elementele de marcare
• Marcare structurală. Descrie scopul unui text.
De exemplu: <h1>Document</h1>
Direcţionează browserul pentru a reda "Document" ca pe cel mai important titlu.
Marcarea structurală nu are un anumit stil predefinit, dar cele mai multe browsere web
au standardizat modul in care acestea sunt afişate. De exemplu, titlurile importante (h1, h2, etc.)
sunt aldine şi mai mari decat restul textului. De notat că "h1" este folosit doar o singură dată per
pagină deoarece cu el este marcat titlul ei.
• Marcare pentru prezentare. Descrie cum apare un text, indiferent de funcţiile sale.
De exemplu: <strong>îngroşat</strong>
22
23. 4. Limbaje de programare folosite
Va afişa textul "ingroşat" cu litere groase, aldine.
• Marcare pentru hiperlink. Leagă părţi ale unui document cu alte documente.
De exemplu: <a href="http://upb.ro/">Politehnica Bucuresti</a>
Va reda Wikipedia romanească ca hiperlink către un URL specificat.
• Elemente speciale (widget). Creează obiecte, cum ar fi butoanele şi listele.
Doar marcatorii de prezentare (impreună cu foile de stiluri - CSS) determină cum
conţinutul din interiorul marcatorului va fi prezentat. Ceilalţi marcatori spun browserului ce
obiecte să redea sau ce funcţii să execute.
Mai mult,
Pentru o mai bună reprezentare a informaţiilor in pagina web foloseşte CSS (Cascading
Style Sheets), care este un standard pentru formatarea elementelor unui document HTML.
Stilurile se pot ataşa elementelor HTML prin intermediul unor fişiere externe sau in cadrul
documentului, prin elementul <style> şi/sau atributul style. CSS se poate utiliza şi pentru
formatarea elementelor XHTML, XML şi SVGL.
JavaScript este un limbaj de programare orientat obiect bazat pe conceptul
prototipurilor. Este folosit mai ales pentru introducerea unor funcţionalităţi in paginile web, codul
Javascript din aceste pagini fiind rulat de către browser. Limbajul este binecunoscut pentru
folosirea sa in construirea siturilor web, dar este folosit şi pentru acesul la obiecte incastrate
(embedded objects) in alte aplicaţii.
Cea mai des intalnită utilizare a JavaScript este in scriptarea paginilor web.
Programatorii web pot ingloba in paginile HTML script-uri pentru diverse activităţi cum ar
fi verificarea datelor introduse de utilizatori sau crearea de meniuri şi alte efecte animate.
23
24. 5. Proiectarea conceptuala a bazei de date
5 Proiectarea conceptuală a bazei de date
Sumar. Pentru realizarea aplicaţiei este necesară construirea bazei de date folosind un server
de gestiune baze de date (SGBD), şi anume MySQL. In acest capitol se va prezenta etapă cu
etapă realizarea unui proiect conceptual al bazei de date (BD).
5.1 Noţiuni generale
Faza de proiectare conceptuală a bazelor de date incepe cu crearea unui model de date
conceptual al organizaţiei, care este total independent de detaliile privind implementarea, cum
ar fi elementele de software ale sistemului SG-BD ţintă, programele aplicaţie, limbajele de
programare, platforma hardware sau orice consideraţie de ordin fizic.
Prima etapă in proiectarea BD constă in realizarea unor modele de date conceptuale.
Utilitatea oricărei colecţii de date in obţinerea de infomaţii depinde de modul de
organizare al datelor. Regulile după care sunt organizate şi manipulate datele depind de
modelul de date utilizat. Principalele modele de date utilizate in proiectarea SGBD-urilor sunt:
modelul ierarhic (arborescent), modelul reţea, modelul relaţional si modelul orientat pe obiecte.
Mai mult, in proiectarea bazelor de date se folosesc 2 categorii de modele:
- Modele conceptuale de nivel înalt (modelul Entitate-Asociere, modelul Entitate-
Asociere -Extins) – descriu concis colecţiile de date care modelează activitatea dorită fără să
detalieze modul de reprezentare sau de prelucrare a datelor - schemă conceptuală de nivel
înalt.
- Modele specializate (modelul ierarhic, modelul reţea, modelul relaţional, etc.) descriu
reprezentarea mulţimilor de entităţi şi a asocierilor dintre acestea prin structuri de date specifice
- schemă conceptuală (logică).
Trecerea de la modelul conceptual de nivel inalt la un model de date specific, implică
proiectarea logică a bazei de date.
Modelele ierarhice (arborescente) sunt construite astfel incat au un element unic
24
25. 5. Proiectarea conceptuala a bazei de date
radacină şi un număr finit de succesori, care la randul lor au alte noduri succesoare, pană la
nodurile terminale, care nu mai au alţi succesori. Orice nod, exceptand nodul rădăcină, are
un predecesor unic. Relaţiile care se stabilesc in cadrul acestor modele sunt de tipul 1-n.
Modelele de tip reţea sunt de tip graf cu legături bidirecţionale intre noduri. Un nod
poate avea mai multi predecesori şi mai mulţi succesori. In aceste modele relaţiile stabilite
sunt de tipul m-n.
Modelele de tip relaţional sunt de tip tabel de date, care au fost aduse intr-o formă
optimă. In astfel de modele relaţiile stabilite admit orice tip de relaţie: 1-n; n-m.
Modelele orientate obiect redau structuri de date complexe ale realităţii, impreună cu
toate caracteristicile acestora, sub formă de obiecte. Aceste modele de date admit orice tip
de relaţie: 1-n; n-m.
Un model de date este compus din doua părţi: set de reguli de structurare a datelor
(materializate prin LDD) , set de operaţii permise asupra datelor (materializate prin LMD).
Pentru folosirea modelului de date adecvat este necesar să se efectueze un studiu şi o
analiză privind situaţia reală, pentru identificarea necesarului de informaţii si a modului de
reprezentare, precum şi a cerinţelor de prelucrare a acestor informaţii. Modelele de date
necesită identificarea structurii modelului, a operatorilor care acţionează asupra structurilor de
date şi a restricţiilor pentru menţinerea corectitudinii datelor.
Structura modelului presupune identificarea obiectelor (care sunt denumite entităţi), a
caracteristicilor acestora (denumite atribute sau campuri de date) şi a legăturilor (denumite
relaţii sau asocieri). Acest lucru este descris in cele ce urmează mai jos.
5.2 Modelul Entitate-Asociere
Modelul Entitate-Asociere defineşte mulţimile de entităţi şi asocierile dintre ele, dar nu
impune nici un mod specific de structurare şi prelucrare (gestiune) a datelor.
5.2.1 Identificarea tipurilor de entităţi
In această etapă obiectivul este identificarea principalelor tipuri de entităţi din vederea
utilizatorului asupra companiei.
25
26. 5. Proiectarea conceptuala a bazei de date
O metodă de identificare a entităţilor constă in examinarea specificaţiei cerinţelor
corespunzătoare unei anumite funcţii a utilizatorului in cadrul intreprinderii. Din această
specificaţie se identifică substantivele sau expresiile substantivale menţionate. De asemenea,
se caută obiectivele principale, cum ar fi: personale, locurile sau conceptele de interes,
excluzandu-se substantivele care reprezintă doar calităţi ale altor obiecte.
O modalitate alternativă de identificare a entităţilor este de a căuta obiectele care există
pe cont propriu.
Uneori, entităţile sunt greu de identificat, datorită modului in care sunt prezentate in
cadrul specificaţiei cerinţelor utilizatorului, uneori utilizatorii se exprimă prin exemple sau
analogii. Nu este intotdeauna evident dacă un anumit obiect este o entitate, o relaţie sau un
atribut.
Pe măsură ce se identifică entităţile, li se atribuie denumiri care să aibă semnificaţie şi
să fie evidente pentru utilizatori. Denumirea şi descrierile entităţilor sunt reunite intr-un dicţionar
de date. Atunci cand este posibil se documentează numărul estimat de apariţii ale fiecărei
entităţi. O entitate cunoscută sub denumiri diferite, acestea se numesc aliasuri sau sinonime şi
sunt inregistrate in dicţionarul de date.
Prin entitate inţelegem mulţimea tuturor elementelor de un anumit tip (care prezintă
aceleaşi caracteristici).
Entitatea sau tabelul bidimensional, constituie unitatea informaţională elementară din
structura unei organizări de date prin care se reflectă elemente reale sau abstracte ce
definesc segmente omogene ale realităţii obiective caracterizate prin nume unic, număr
maxim de apariţii (realizări) şi o structură specifică acestei realităţi pe care o descrie.
Prin instanţă a unei entităţi inţelegem un singur element, bine individualizat, unic, din
mulţimea elementelor care formează entitatea respectivă.
In cazul nostru, s-au creat următoarele entităţi:
• Useri_admini
• Foldere
• Fisiere
• Istoric
• Workflow
• Activitaţi
Entităţile sunt de două tipuri:
- entităţi independente (sau tari): au existenţa independentă de alte entităţi;
26
27. 5. Proiectarea conceptuala a bazei de date
- entităţi dependente (sau slabe): sunt formate din instanţe, care işi justifică incadrarea
in clasa respectivă doar atata timp cat intr-o altă entitate (tată) există o anumită instanţă.
Fiecare entitate este descrisă de o mulţime de proprietăţi esenţiale numite atribute.
Pentru diferitele elemente ale entităţii, atributele pot să primească valori din anumite mulţimi
numite domeniul atributului respectiv.
5.2.2 Identificarea tipurilor de asocieri
In această etapă obiectivul este identificarea relaţiilor importante care există intre
entităţile identificate.
Atunci cand se identifică entităţile, o metodă este de a căuta substantivele in specificaţia
cerinţelor utilizatorului. De regulă, asocierile sunt indicate prin expresii verbale.
Asocierea descrie o legatură specifică, delimitată logic, intre două tipuri semnificative de
entităţi sau chiar in interiorul entităţilor, prin care se defineşte gradul de implicare a unei entităţi
in raport cu altele.
Pentru a stabili tipul legăturii, trebuie determinate numerele minime şi maxime
posibile de realizări ale unei entităţi, care pot fi asociate cu o realizare a unei alte entităţi cu
care se află in legătură. O astfel de implicare reprezintă cardinalitatea relaţiei (legăturii).
Pe măsură ce se identifică tipurile de relaţii, li se atribuie denumiri care au semnificaţie şi
sunt existente pentru utilizator.
Dupa numărul de entităţi distincte ce participă la asociere, relaţiile pot fi:
- relaţii binare, in care se realizează legături intre două entităţi distincte;
- relaţii recursive, in care se realizează legături ale entităţilor cu ele insele;
- relaţii complexe, in care se realizează legături intre mai mult de două entităţi
distincte. – destul de rare.
După gradul asocierii (valorile maxime identificate), relaţiile din cadrul unei
organizări de date pot fi de diferite tipuri şi anume:
- de tipul 1-1, prin care se semnifică conexiunea simplă;
- de tipul 1-n şi n-m prin care se semnifică conexiunea multiplă.
Raport de cardinalitate: raportul dintre valorile cardinalităţilor unei asocieri faţă de două
din mulţimile de entităţi asociate.
27
28. 5. Proiectarea conceptuala a bazei de date
- Exemple pentru asocieri binare: 1:1, 1:N, N:1, M:N
- Asocierile multiple (k > 2) prezintă cate un raport de cardinalitate pentru fiecare
pereche de mulţimi de entităţi pe care le asociază.
Noţiunile de entitate, atribut şi relaţie reprezintă (formează) esenţa unui model denumit
Entitate - Asociere (EA), care asigură definirea şi modelarea structurii unei organizări de date.
Modul de stabilire a tipurilor de entităţi şi a asocierilor nu este unic: aceeaşi
funcţionalitate se poate obţine printr-o varietate de diagrame EA.
O mulţime de entităţi se denumeşte printr-un substantiv, iar o asociere se denumeşte
(de regulă) printr-un verb, deoarece o asociere reprezintă o interacţiune intre entităţi.
Modelul EA nu precizează modul cum sunt realizate asocierile intre mulţimile de entităţi:
acest aspect depinde de modelul de date specializat utilizat pentru definirea bazei de date.
In cadrul fazei de proiectare a BD se recomandă modelul E-A oriunde este necesar,
pentru a servi la construirea unei imagini a sectorului de intreprindere care urmează să fie
modelat.
În cazul aplicaţiei de faţă, vom avea asocieri binare şi recursive.
Astfel, se stabilesc asocieri binare intre mulţimile de entităţi: useri_admini – foldere
(relaţie de tip 1-1), foldere – fişiere (relaţie de tip 1-n), drepturi – foldere (relaţie de tip n-n),
drepturi – fişiere (relaţie de tip n-n). Asocierea recursivă se stabileşte in cazul mulţimii entităţii
useri_admini, fiind de tip 1-n, intrucăt un administrator poate gestiona mai mulţi utilizatori iar
unui utilizator ii corespunde un singur administrator.
O asociere poate prezenta unul sau mai multe atribute proprii cu rol de a caracteriza,
explicita, legătura stabilită intre entităţile participante la asociere.
Asocieri din cadrul aplicaţiei de management al documentelor:
– GESTIONARE (intre useri_admini şi fişiere/foldere)
– INIŢIAZĂ (intre useri_admini şi workflow)
– PRECIZARE FIŞIER (intre workflow şi fişiere)
– SPECIFICARE UTILIZATOR (intre useri_admini şi drepturi)
– SPECIFICARE FIŞIER (intre fişiere şi drepturi)
– SPECIFICARE FOLDER (intre foldere şi drepturi)
– INREGISTRARE FOLDER (intre foldere şi istoric)
– INREGISTRARE FIŞIER (intre fişiere şi istoric)
– INREGISTRARE UTILIZATOR (intre useri_admini şi istoric)
28
29. 5. Proiectarea conceptuala a bazei de date
De exemplu, intre entităţile useri_admini şi fişiere ori useri_admini şi foldere poate exista
o asociere GESTIONARE, care implică faptul că un fişier sau folder are un singur utilizator
creator.
5.2.3 Identificarea şi asocierea atributelor cu tipurile de entităţi sau
relaţii
Obiectivul acestei etape constă in asocierea atributelor cu tipurile de entităţi sau relaţii
adecvate. Această etapă din constă in identificarea tipurilor privind entităţile şi relaţiile care
trebuie reprezentate in BD.
Atributele pot fi identificate acolo unde substantivul sau expresia substantivală exprimă o
proprietate, calitate, identificator sau caracteristică a uneia din acela entităţi sau relaţii.
Atribute simple/compuse
Este foarte important de a determina dacă un atribut este simplu sau compus. Atributele
compuse sunt formate din atribute simple. De exemplu, atributul Adresă poate fi simplu
conţinand toate detaliile adresei ca o singură valoare. Dar atributul poate fi şi compus, fiind
format din atribute simple care conţin detaliile adresei ca valori separate in atribute. Stradă,
zonă, oraş şi cod P. Opţiunea de a reprezenta detaliile adresei ca un atribut simplu sau compus
este determinată de cerinţele utilizatorului.
In cadrul acestei etape, este important de identificat toate atributele simple care vor fi
reprezentate in modelul de date conceptual-inclusiv acela care formează atributele compuse.
De exemplu, in cadrul aplicaţiei noastre, atributul Adresă specific entităţii Useri_admini
este unul compus fiind alcătuit din atributele simple Oraş şi Cod_postal.
Atributele derivate
Atributele ale căror valori pot fi deduse din valorile altor atribute se numesc derivate sau
calculate.
Un atribut sau o mulţime de atribute pentru care valorile asociate determină in mod unic
orice element al entităţii respective se numeşte cheie. Orice entitate admite cel puţin o cheie,
deci toate elementele unei entităţi sunt distincte. In cazul in care există elemente care să aibă
aceleaşi valori pentru toate atributele, se ia drept cheie un atribut suplimentar reprezentat de
numărul asociat elementului in entitatea respectivă, care defineşte in mod unic elementul.
Determinarea atributelor cheielor candidate
29
30. 5. Proiectarea conceptuala a bazei de date
In această sub-etapă obiectivul constă in identificarea cheii (cheilor) candidate pentru
fiecare entitate şi dacă există mai mult decat o cheie candidat – selecţionarea celei care va fi
cheia primară.
O cheie candidat este un atribut sau un set minimal de atribute ale unei entităţi, care
identifică in mod unic fiecare apariţie a acesteia. Se poate identifica mai mult decat o singură
cheie candidat, dar in acest caz trebuie să alegem una dintre ele drept cheie primară, celelalte
chei candidat se numesc chei alternative.
La alegerea unei chei primare din cele candidate trebuie să se ţină seama de
următoarele, care ajută la efectuarea selectării:
• se alege cheia candidat cu setul minim de atribuţi;
• se alege cheia candidat căreia probabilitatea de modificare a valorii este mai mică;
• se alege cheia candidat care are probabilitatea mai mică să-şi piardă caracterul de
unitate in viitor;
• se alege cheia candidat cu cel mai mic număr de caractere;
• se alege cheia candidat cea mai prietenoasă din punct de vedere al utilizatorului.
In procesul de identificare al cheilor primare se constată dacă o entitate este tare sau
slabă.
O altă clasificare a atributelor unei entităţi, le prezintă in două feluri:
– atribute de identificare (formand impreună identificatorul entităţii) sunt acele atribute
care permit distincţia intre instanţele aceleiaşi entităţi;
– atributele de descriere (sau descriptori), care sunt folosiţi pentru memorarea
caracteristicilor suplimentare ale instanţelor.
In cazul aplicaţiei noastre, atributele asociate entităţilor sunt:
Atributele entităţii Useri_admini:
- id
- nume_org
- user
- parola
- nume
- prenume
- email
- telefon
- oras
30
31. 5. Proiectarea conceptuala a bazei de date
- adresa
- cod_postal
- data
- timp
- id_folder
- id_admin
In exemplul de mai sus, id este atribut de identificare (deoarece nu pot exista doi
utilizatori cu acelaşi id), sau o cheie primară, pe cand celelalte atribute sunt descriptori şi chei
secundare.
• Atributele entităţii Foldere:
- id
- nume
- folder_id
- data
- timp
- owner
• Atributele entităţii Fisiere:
- id
- nume
- folder_id
- data
- timp
- owner
- versiune
• Atributele entităţii Drepturi:
- id
- id_fisier
-r
- rwd
- rwda
- id_user
31
32. 5. Proiectarea conceptuala a bazei de date
• Atributele entităţii Workflow:
- id
- nume
- tip
- initiator
- instructiuni
- stare
- transmitere
- data
- timp
- id_fisier
- exp
Atributele entităţii Activităţi:
- id
- nume
- id_user
- stare
- viz
- nota
- id_workflow
Pentru fiecare relaţie s-a identificat un anumit atribut, id , ce reprezintă atributul relaţiei
respective dintre cele două entităţi.
5.2.4 Diagrama Entitate-Asociere
Diagramele Entitate – Asociere (Ea) se utilizează pentru a reprezenta mai uşor entităţile
şi modelul in care sunt legate acestea unele de altele.
Convenţia de reprezentare grafică a elementelor, care participă la formarea unei
diagrame EA, este următoarea:
- entităţile se reprezintă prin dreptunghiuri, in care este inscris numele entităţii. In cazul
entităţilor dependente, conturul va fi cu linie dublă;
32
33. 5. Proiectarea conceptuala a bazei de date
- atributele se reprezintă prin cercuri (sau ovale), in interiorul cărora apare numele
atributului şi care sunt conectate cu un segment de dreaptă cu entitatea de care aparţin.
Pentru a distinge atributele de identificare de cele de descriere, numele celor de
identificare va fi subliniat;
- asocierile se reprezintă prin romburi (dacă conectează una sau două entităţi) sau
poligoane regulate (dacă conectează mai mult de două entităţi) conectate prin segmente de
dreaptă la entităţile pe care le leagă, avand inscris in interior (sau alături) numele asocierii.
In figura de mai jos este prezentată convenţia de reprezentare a elementelor modelului
EA.
33
34. 5. Proiectarea conceptuala a bazei de date
Diagrama modelului Entitate-Asociere
Atributele entităţilor de mai sus, sunt reprezentate schematic astfel:
• entitatea Useri_admini
34
36. 5. Proiectarea conceptuala a bazei de date
• entitatea Drepturi
5.3 Modelul relaţional
5.3.1 Noţiuni generale
Modelul relaţional ca şi orice alt model de date utilizat in proiectarea logică a bazelor de
date eliberează utilizatorul de cunoaşterea detaliilor despre structura fizică şi metodele de acces
la date. In afară de aceasta, el are două avantaje suplimentare: e simplu şi elegant. Simplitatea
sa constă in structurile de date omogene in formă de relaţii tabelare. Iar eleganţa modelului se
explică prin temelia sa ştiinţifică. El este riguros din punct de vedere matematic graţie faptului că
se sprijină pe bine puse la punct teoriile matematica relaţiilor şi logica de ordinul unu.
Modelul relaţional a fost primul exemplu de model de date formal şi a fost propus de E.
Codd in 1970. Prin model datele utilizatorului sunt reprezentate şi manipulate in mod abstract.
Modelul de asemenea presupune tehnici ce ajută administratorul de a detecta şi corecta
posibilele probleme de proiectare ce pot apărea o dată cu pregătirea datelor pentru
implementare intr-un SGBD concret.
36
37. 5. Proiectarea conceptuala a bazei de date
Orice model de date, conform unei sugestii a lui Codd, trebuie să se bazeze pe trei
componente: structurile de date, constrangerile de integritate şi operatorii de manipulare a
datelor.
- Structurile de date. Structurile sunt definite de un limbaj de definire a datelor (data
definition language). Datele in modelul relaţional sunt structurate in relaţii bidimensionale.
Elementele principale ale structurii relaţionale sunt relaţiile, tuplurile, atributele, domeniile.
- Constrângerile de integritate. Prin integritatea datelor se subinţelege că datele răman
stabile, in siguranţă şi corecte. Integritatea in modelul relaţional este menţinută de constrangeri
interne care nu sunt cunoscute utilizatorului.
- Manipularea datelor. Relaţiile pot fi manipulate utilizand un limbaj de manipulare a
datelor (data manipulation language). In modelul relaţional, limbajul foloseşte operatorii
relaţionali bazaţi pe conceptul algebrei relaţionale. In afară de aceasta, există limbaje
echivalente algebrei relaţionale, cum ar fi calculul relaţional orientat pe tuplu şi calculul relaţional
orientat pe domeniu.
O bază de date relaţională este compusă dintr-o mulţime finită de relaţii, fiecare relaţie
reprezentand un tip de entitate sau o asociere dintre două sau mai multe tipuri (mulţimi) de
entităţi.
Din această definiţie rezultă că intr-o bază de date fiecare relaţie este unică (nu există
două sau mai multe relaţii de acelaşi fel), dat fiind că o bază de date este o mulţime de relaţii. O
relaţie se defineşte prin intermediul atributelor sale.
Atributele unei relaţii sunt atributele tipului de entitate sau de asociere pe care il
reprezintă relaţia respectivă.
Fiecare atribut al unei relaţii are un domeniu de definiţie şi poate lua o singură valoare
(din domeniul său de definiţie) pentru fiecare tuplu al relaţiei, ceea ce inseamnă că atributele au
numai valori scalare.
Un domeniu de definiţie este o mulţime cu nume de valori atomice de acelaşi tip,
avand o anumită semnificaţie, din care işi iau valori atributele relaţiilor.
Nu trebuie confundată atomicitatea din punct de vedere semantic a valorii unui atribut cu
atomicitatea structurii de date prin care este reprezentată valoarea acelui atribut in memoria
calculatorului. De exemplu, un atribut care desemnează un nume (de persoană, de instituţie, de
produs, de componentă, etc.) se reprezintă printr-un şir (vector) de caractere, care, bineinţeles,
poate fi descompus in elementele componente (caracterele), dar sistemul de gestiune nu
atribuie nici o semnificaţie unui element separat, ci numai intregii valori (şirul de caractere).
37
38. 5. Proiectarea conceptuala a bazei de date
Schema relaţiei, notată R(A1A2,...Ai,...An), este compusă din numele relaţiei (R) şi din
lista ordonată a atributelor sale A1,A2,...Ai,...An, fiecare atribut Ai definit pe domeniul său de
definiţie, D(Ai). Schema relaţiei este folosită pentru a descrie relaţia respectivă şi se mai
numeşte şi tipul sau intensiunea relaţiei. Numărul de atribute ale schemei unei relaţii se
numeşte gradul relaţiei.
O relaţie R definită de schema R(A1,A2,...Ai,...An) este o mulţime de n-tupluri t, fiecare
tuplu fiind o listă ordonată de n valori t = <v1,v2,...vi,....vn>, unde 1 ≤ i ≤ n şi vi este valoarea
atributului Ai, aparţinand domeniului său de definiţie D(Ai).
O relaţie corespunde, in general, unei mulţimi de entităţi din diagrama E-A (Entitate-
Asociere) a unei baze de date, iar un tuplu reprezintă o entitate din mulţimea de entităţi.
Atributele tipului de entitate din modelul conceptual de nivel inalt devin atributele relaţiei
in modelul relaţional.
Ca exemplu de relaţie se defineşte relaţia cu schema Fisiere (sau FISIERE)
corespunzătoare tipului de entitate ―fisiere‖ (descris in exemplele prezentate anterior) astfel:
FISIERE (Id,Nume,Folder_id,data,timp,owner,versiune)
Domeniile de definiţie ale atributelor se specifică prin numele domeniului, semnificaţia
acestuia, tipul de date şi restricţii asupra valorilor in cadrul acelui tip de date.
Exemple de domenii relaţionale ale atributelor:
• D_Nume: domeniul numelor fişierelor gestionate, reprezentate printr-un şir de
maximum 255 caractere.
Cel mai frecvent insă, in implementarea modelului relaţional in cadrul diferitelor sisteme
de gestiune a bazelor de date, ca domenii de definiţie ale atributelor se folosesc direct tipurile
de date predefinite ale limbajului de definiţie a datelor (LDD) specific acelui SGBD. - în cazul
nostru SQL, respectiv MySql.
Reprezentarea relaţiilor prin tabele
Un tabel este o reprezentare a unei relaţii şi este compus din următoarele părţi:
• Numele tabelului, care este identic cu numele relaţiei pe care o reprezintă.
• Un număr de coloane egal cu numărul de atribute ale relaţiei, fiecare coloană
reprezentand un atribut.
• Capul tabelului, in care se inscriu numele atributelor relaţiei, fiecare atribut fiind inscris
in coloana corespunzătoare.
• O mulţime de linii, fiecare linie corespunzand unui tuplu (deci unei entităţi); in fiecare
element al unei linii se inregistrează valoarea atributului corespunzător coloanei in care se află
elementul respectiv.
38
39. 5. Proiectarea conceptuala a bazei de date
Constrângeri de integritate
Constrangerile de integritate sunt reguli care se definesc la proiectarea unei bazei de
date şi care trebuie să fie respectate de orice stare a acesteia. Relaţiile unei baze de date
reflectă realitatea modelată şi de aceea valorile pe care le conţin trebuie să respecte anumite
reguli, care să corespundă celor din realitate. Constrangerile se pot clasifica după locul unde
sunt definite şi după modul in care sunt definite. Din punct de vedere al locului unde sunt
definite, constrangerile pot fi constrangeri intra-relaţie şi constrangeri inter-relaţii.
Constrangerile intra-relaţie sunt reguli care se impun in cadrul unei singure relaţii şi
asigură integritatea datelor acesteia. Ele sunt, la randul lor, de trei categorii:
• Constrangeri de domeniu, care sunt condiţii ce se impun valorilor atributelor şi asigură
integritatea domeniilor atributelor.
• Constrangeri de tuplu, care sunt condiţii ce se impun tuplurilor unei relaţii şi asigură
identificarea corectă a tuplurilor prin intermediul cheilor (primare sau candidate).
• Constrangeri impuse prin dependenţe de date (dependenţe funcţionale, multivalorice
sau de joncţiune); acestea sunt constrangeri prin care valorile unor atribute ale unei relaţii
determină valorile altor atribute ale aceleiaşi relaţii.
Constrangerile inter-relaţii sunt reguli care se impun intre două sau mai multe relaţii.
Cele mai importante constrangeri inter-relaţii sunt constrangerile de integritarea
referenţială, care se realizează prin intermediul cheilor străine şi asigură asocierea corectă a
relaţiilor.
Algebra relaţională
Algebra relaţională exprimă interogările prin aplicarea unor operatori specializaţi
(operatorii algebrei relaţionale) asupra relaţiilor. E.F. Codd a propus opt operaţii ale algebrei
relaţionale, grupate in două categorii:
• Operaţii pe mulţimi: reuniunea, intersecţia, diferenţa şi produsul cartezian. Aceste
operatii reprezintă adaptarea operatiilor corespunzătoare din teoria mulţimilor şi acţionează
asupra relaţiilor văzute ca mulţimi de elemente (tupluri), fără a lua in consideraţie compoziţia
fiecărui element.
• Operaţii relaţionale speciale: restricţia, proiecţia, joncţiunea şi diviziunea. Aceste
operaţii iau in consideraţie compoziţia tuplurilor, formate din valori ale atributelor relaţiilor.
Toate aceste operaţii trebuie să asigure proprietatea de inchidere, adică rezultatul
fiecărei operaţii trebuie să fie tot o relaţie. Această proprietate permite efectuarea operaţiilor
imbricate: proiecţia unei joncţiuni dintre o relaţie şi restricţia aplicată altei relaţii, etc.
39
40. 5. Proiectarea conceptuala a bazei de date
Restricţia şi proiecţia sunt operaţii unare (au un singur operand, o relaţie); operaţiile pe
mulţimi, joncţiunea şi diviziunea sunt operaţii binare (au doi operanzi, două relaţii).
5.3.2 Descrierea structurii tabelelor folosite şi legăturilor dintre
acestea
Mai intai, vom prezenta concretiza cat mai succint anumite noţiuni legate de structura
bazei de date folosită pentru aplicaţia de management al documentelor.
Aşadar, O cheie primară sau principală reprezintă una sau mai multe coloane ale caror
valori identifică in mod unic toate liniile unui tabel.
Cheia primară este utilizată pentru a face referinţe la o singură linie. Fără cheia primară,
actualizarea sau stergerea de linii specifice devine foarte dificilă, deoarece nu există nici o
modalitate garantat sigură pentru a face referire numai la liniile ce vor fi afectate.
Cheie straină sau externă este o coloană sau un set de coloane cu valori din setul de
valori a cheii primare a unei alte tabele cu care face astfel o legătură. Dacă o cheie străină
apare in mai mult de o tabelă, aceasta este de regulă o legătură intre cele două tabele.
Astfel, legăturile intre tabele se fac prin intermediul cheilor primare şi străine.
Fiecare coloană are un set de atribute care pot fi completate (sau nu) pentru a prelua
anumite caracteristici.
In cazul atributelor avem mai multe opţiuni, in funcţie de serverul de gestiune al bazei de
date (in cazul nostru MySql):
- să alegem tipul variabilei, folosit pentru a menţiona cu ce tip de date poate fi completat
campul respectiv (ex: int, varchar, date, text etc.);
- să setăm dimensiunea maximă admisă;
- avem posibilitatea de a completa o valoare nulă (NULL sau NOT_NULL);
Campurile marcate NOT NULL sunt acele campuri ale căror valori trebuie introduse in
fiecare inregistrare, in timp ce campurile NULL sunt acelea care nu necesită de fiecare dată
introducerea unei valori.
- avem posibilitatea de a selecta o valoare default cu care vor fi completate toate
inregistrările coloanei respective;
- putem seta auto-increment (incrementare automată la fiecare inregistrare nouă din
tabelă), unique (nu pot exista două sau mai multe valori identice), index, primary key (cheie
primară), foreign key (cheie straină).
40
41. 5. Proiectarea conceptuala a bazei de date
Inainte de prezentarea tabelelor, am creat o bază de date cu MySQL server versiunea
5.1.30. Baza de date se numeşte „diploma” şi a fost realizată folosind următoarea sintaxă SQL:
CREATE DATABASE `diploma` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `diploma`;
Acestea fiind zise, structura tabelelor in baza de date corespunzătoare aplicaţiei noastre
se prezintă astfel:
• Tabela Useri_admini
Este alcatuită din următoarele câmpuri, urmate de tipul şi domeniul acestora:
Id int(11)
nume_org varchar(25)
user varchar(20)
parola varchar(255)
nume varchar(20)
prenume varchar(20)
email varchar(30)
telefon varchar(15)
oras varchar(20)
adresa varchar(150)
cod_postal varchar(10)
data DATE
timp TIME
id_folder int(11)
id_admin int(11)
Tabela Useri_admini este reprezentată schematic astfel:
41
42. 5. Proiectarea conceptuala a bazei de date
Coloana id reprezintă o cheie primară. La adăugarea unei noi inregistrări in această
tabelă, valoarea cheii id respective se va incrementa automat, fapt ce garantează unicitatea
inregistrărilor din tabelă.
Coloana id_folder şi id_admin reprezintă chei străine, care sunt chei primare in tabelele
foldere şi useri_admini. După cum observăm, cheia străină id_admin face referinţă către
aceeaşi tabelă din care face parte. In tabela există utilizatori administratori care reprezintă o
anumită organizaţie şi utilizatori creaţi de utilizatorii administratori respectivi, avand drepturi
limitate in ceea ce priveşte managementul documentelor aceleiaşi organizaţii. In cazul in care
inregistrarea introdusă in tabelă denotă un utilizator administrator, valoarea campului id_admin
va fi 0, altfel va indica o valoare a cheii primare din aceeaşi tabelş ce reprezintă utilizatorul
administrator ce gestionează utilizatorul nou introdus.
Coloanele nume_org şi user au valori unice intrucat nu pot exista doi useri cu acelaşi
nume sau două organizaţii cu acelaşi nume.
Codul SQL specific creării tabelei Useri_admini in baza de date (denumită „diploma‖)
este:
CREATE TABLE IF NOT EXISTS `useri_admini` (
42
43. 5. Proiectarea conceptuala a bazei de date
`id` int(11) NOT NULL AUTO_INCREMENT,
`nume_org` varchar(25) NOT NULL,
`user` varchar(20) NOT NULL,
`parola` varchar(255) NOT NULL,
`nume` varchar(20) NOT NULL,
`prenume` varchar(20) NOT NULL,
`email` varchar(30) NOT NULL,
`telefon` varchar(15) NOT NULL,
`oras` varchar(20) NOT NULL,
`adresa` varchar(150) NOT NULL,
`cod_postal` varchar(10) NOT NULL,
`data` date NOT NULL,
`timp` time NOT NULL,
`id_folder` int(11) NOT NULL,
`id_admin` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `nume_org` (`nume_org`),
UNIQUE KEY `user` (`user`),
KEY `id_folder` (`id`),
KEY `id_admin` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=45 ;
• Tabela Foldere
Are urmatoarea structură:
Id int(11)
nume varchar(25)
folder_id int(11)
data varchar(255)
timp varchar(20)
owner int(11)
Schematic, tabela arată astfel:
43
44. 5. Proiectarea conceptuala a bazei de date
Coloanele owner şi folder_id sunt chei străine.Cheia străină owner implică cheia primară
(id) din tabela Useri_admini iar cheia straină folder_id face referire către cheia primară (id) din
aceeaşi tabelă Foldere. Fiecare director (sau folder) are un singur utilizator creator reprezentat
prin cheia (id) şi un singur părinte, care este tot un director (folder), reprezentat prin cheia
(folder_id). Campurile data şi timp reprezintă data şi ora la care a fost creat folderul respectiv.
Sintaxa SQL specifică creării tabelei foldere este următoarea:
CREATE TABLE IF NOT EXISTS `foldere` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nume` varchar(25) NOT NULL,
`folder_id` int(11) NOT NULL,
`data` date NOT NULL,
`timp` time NOT NULL,
`owner` int(11) NOT NULL,
PRIMARY KEY (`id`)
KEY `id_folder` (`id_folder`),
KEY `owner` (`owner`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1265 ;
• Tabela Fisiere
Are următoarea structură:
Id int(11)
nume varchar(25)
44
45. 5. Proiectarea conceptuala a bazei de date
folder_id int(11)
data varchar(255)
timp varchar(20)
owner int(11)
Ca şi in cazul tabelei Foldere, in tabela Fişiere avem aceleaşi chei străine owner şi
folder_id. In acest caz, folder_id face referinţă către cheia primară (id) din tabela Foldere şi
reprezintă faptul că un fişier are un tată (sau este stocat in directorul tată) reprezentat prin cheia
id in tabela Foldere.
Coloana versiune, reprezintă versiunea curentă (ultima versiune) la care a ajuns fişierul
respectiv.
Sintaxa SQL specifică creării acestei tabele este următoarea:
CREATE TABLE IF NOT EXISTS `fisiere` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nume` varchar(255) NOT NULL,
`folder_id` int(11) NOT NULL,
`data` date NOT NULL,
`timp` time NOT NULL,
`owner` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `id_folder` (`id_folder`),
KEY `owner` (`owner`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
45
46. 5. Proiectarea conceptuala a bazei de date
• Tabela Drepturi
Prezintă următoarea structură:
Id int(11)
id_folder varchar(25)
id_fisier int(11)
r int(1)
rwd int(1)
rwda int(1)
id_user int(11)
După cum observăm, cheia primară este id, iar id_folder, id_fisier şi id_user reprezintă
chei străine cu aceeaşi semnificaţie ca şi in cazul tabelelor descrise mai sus.
Valorile campurilor r, rwd, rwda pot fi 0 sau 1.
Pe larg, un fişier sau director (folder) poate avea drepturi acordate pentru anumiţi
utilizatori. Ele sunt interpretate in funcţie de valorile r (read), rwd (read-write-delete), rwda
(„read,write,delete,administer‖).
Sintaxa SQL conform căreia s-a creat această tabelă este următoarea:
CREATE TABLE IF NOT EXISTS `drepturi` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_folder` int(11) NOT NULL,
`id_fisier` int(11) NOT NULL,
`r` int(1) NOT NULL,
46
47. 5. Proiectarea conceptuala a bazei de date
`rwd` int(1) NOT NULL,
`rwda` int(1) NOT NULL,
`id_user` int(11) NOT NULL,
PRIMARY KEY (`id`)
KEY `id_folder` (`id_folder`),
KEY `id_fisier` (`id_fisier`),
KEY `id_user` (`id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=337 ;
• Tabela Workflow
Cheile străine sunt reprezentate prin atributele initiator şi id_fisier care reprezintă
identificatorul utilizatorului care a creat fluxul de lucru respectiv si identificatorul fişierului pentru
care s-a creat acel flux.
Sintaxa SQL conform căreia s-a creat această tabelă este următoarea:
CREATE TABLE IF NOT EXISTS `workflow` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nume` varchar(80) NOT NULL,
`tip` varchar(30) NOT NULL,
`initiator` int(11) NOT NULL,
47
48. 5. Proiectarea conceptuala a bazei de date
`instructiuni` text NOT NULL,
`stare` varchar(30) NOT NULL,
`transmitere` varchar(30) NOT NULL,
`data` date NOT NULL,
`timp` time NOT NULL,
`id_fisier` int(11) NOT NULL,
`exp` date NOT NULL,
PRIMARY KEY (`id`)
KEY `initiator` (`initiator`),
KEY `id_fisier` (`id_fisier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
• Tabela Activitati
Atributul id_user reprezintă utilizatorul pentru care a fost creată activitatea, iar
id_workflow reprezintă identificatorul unic al fluxului de lucru de care aparţine activitatea
respectivă. Starea poate fi activ, aprobat sau respins.
Sintaxa SQL corespunzătoare este:
CREATE TABLE IF NOT EXISTS `activitati` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nume` varchar(80) NOT NULL,
`id_user` int(11) NOT NULL,
48
49. 5. Proiectarea conceptuala a bazei de date
`stare` varchar(30) NOT NULL,
`viz` int(1) NOT NULL,
`nota` text,
`id_workflow` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `id_workflow` (`id_workflow`)
KEY `id_user` (`id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
In cazul de faţă, baza de date conţine tabele corelate. Mai precis, intre aceste tabele se
stabilesc legături de mai multe tipuri:
- 1:n (una-la-mai multe). O inregistrare din primul tabel poate fi legată cu mai multe
inregistrări din al doilea tabel.
- 1:1 (una-la-una). O inregistrare din primul tabel este legată la o singură inregistrare din
al doilea tabel.
- n:n (mai multe-la-mai multe).O inregistrare din primul tabel poate fi legată la mai multe
inregistrări din al doilea tabel şi invers.
Schema bazei de date relaţionale cu tabelele şi legăturile dintre acestea este prezentată
mai jos:
49
50. 5. Proiectarea conceptuala a bazei de date
Aşadar intre tabela Useri_admini şi tabela Fişiere există o dată, o legătură de tip 1:n
intrucat un utilizator poate crea mai multe fişiere dar un fişier este creat de un singur utilizator.
Pe de altă parte se stabileşte şi o legătură indirectă de tip n:n prin intermediul tabelei Drepturi
deoarece un un utilizator poate avea drepturi asupra mai ultor fişiere, iar un fişier poate avea
acordate drepturi pentru mai mulţi utilizatori.
50
51. 5. Proiectarea conceptuala a bazei de date
Analog, legături asemănătoare se stabilesc şi intre tabela Useri_admini şi tabela
Foldere.
Intre tabela Foldere şi tabela Fişiere se stabileşte o legătură de tip 1:n deoarce un folder
poate avea mai multe fişiere in conţinutul său, pe cand un fişier poate fi reprezentat doar intr-un
singur folder.
In interiorul tabelei Useri_admini se stabileşte o asociere de tip 1:n, intrucat un utilizator
administrator poate gestiona mai mulţi utilizatori subalterni, iar un utilizator subaltern poate fi
gestionat doar de un singur utilizator administrator.
Intre tabelele Workflow şi Activitati se stabileşte o asociere de tip 1:n, deoarece un flux
de lucru are asociate mai multe activităţi, iar o activitate poate fi stabilită in cadrul unui singur
flux de lucru.
51
52. 6. Interogarea bazei de date
6. Interogarea bazei de date
6.1 Noţiuni generale
Sub numele de interogare sau cerere sunt referite acele solicitări de date in mod direct
fără indicarea modului de obţinere.
O cerere se poate lansa din fereastra de comenzi sau din interiorul unui program
(aplicatia scrisa in PHP) pentru că ea funcţionează ca orice altă comandă dar se poate proiecta
intr-un mod interactiv cu ajutorul utilitarului PhpMyAdmin.
Una din cele mai importante comenzi şi mai des folosite este comanda SELECT.
Această comandă permite specificarea datelor care vor constitui ieşirea din interogare
precum şi sursa acestora.
O frază SQL include mai multe clauze ce sunt executate dupa optimizare de către SQL.
Structura generală:
SELECT lista campuri FROM lista tabele WHERE conditii de tip select, join
GROUP BY lista campuri grupare
HAVING conditii pe functii
ORDER BY lista campuri grupare
Numai clauzele SELECT, FROM sunt obligatorii celelalte sunt dependente de natura
cererii. Ordinea clauzelor group by, having, order by poate fi modificată.
Rezultatul execuţiei este tot un tabel, de regulă temporar, care se suprascrie.
Vom prezenta pe scurt cele mai frecvente comenzi MySql:
1.Modificarea numelui unei tabele:
mysql>alter table nume_vechi rename nume_nou;
52
53. 6. Interogarea bazei de date
2.Adăugarea unei coloane:
mysql>alter table nume_tabela add column nume_coloana tip atribute;
3. Comanda “insert”
Insert serveşte la adăugarea de inregistrări (linii) intr-un tabel al bazei de date curente.
Sintaxa comenzii este:
mysql>insert into nume_tabela(col1, col2,...) values (val1,val2,...);
Valorile de tip text trebuie puse intre ghilimele simple.
4. Comanda “update”
Comanda update permite modificarea valorilor unor campuri dintr-un tabel. Sintaxa ei
este:
mysql> update nume_tabela set col1=val1,col2=val2...where col1=value;
Deşi condiţia din clauza where poate fi complexă, de cele mai multe ori ea este de forma
cheie_primara=valoare.
5. Comanda “select”
Comanda select este cea mai complexă comandă din limbajul SQL şi este destinată
regăsirii unor anumite informaţii. Dacă se doreşte selectarea tuturor inregistrărilor dintr-o tabelă,
sintaxa comenzii este:
mysql>select * from nume_tabela;
Dacă se doreşte selectarea doar a unor inregistrări dintr-o tabelă, care indeplinesc o
anumită condiţie, sintaxa comenzii este:
mysql>select * from nume_tabela where nume_camp=100;
Dacă se doreşte selectarea doar a unor coloane dintr-o tabelă, sintaxa comenzii este:
mysql>select nume_camp1,nume_camp2 from nume_tabela;
Dacă se doreşte selectarea doar a unor coloane dintr-o tabelă, care indeplinesc o
anumită condiţie, sintaxa comenzii este:
mysql>select nume_camp1,nume_camp2 from nume_tabela where nume_camp=100;
6. Comanda “delete”
Pentru a şterge unul sau mai multe articole existente, dintr-o tabelă se va utiliza
comanda delete cu sintaxa:
mysql>delete from nume_tabela where nume_camp=100;
53
54. 6. Interogarea bazei de date
Pentru a şterge toate articolele existente dintr-o tabelă, sintaxa comenzii este:
mysql>delete from nume_tabela;
7. Comanda “drop”
Comanda drop permite suprimarea unui tabel din baza de date curentă sau distrugerea
intregii baze de date. Sintaxa comenzii este:
mysql>drop table nume_tabela;
mysql>drop database nume_baza;
8. Comanda “show”
Comanda show se foloseşte pentru listarea bazelor de date existente, a tabelelor din
baza de date curentă sau pentru listarea campurilor unei tabele. Sintaxa ei este:
mysql>show databases;
mysql>show tables;
mysql>show fields from nume_tabela;
9. Comanda “quit”
Comanda determină intreruperea conexiunii cu serverul MySQL şi inchiderea sesiunii de
lucru a clientului MySQL. Este echivalentă cu exit.
mysql>quit;
mysql>exit;
O interogare inglobată in alte cereri SQL se numeşte o subcerere. Subcererea poate să
includă la randul ei o altă subcerere. Subcererile sunt de două feluri: necorelate şi corelate:
• subcererea necorelată este o subcerere independentă de cererea principală. Se execută o
singură dată in interiorul cererii principale.
• cererea corelată se bazează pe date provenite de la cererea principală. Se execută pentru
fiecare inregistrare returnată de cererea principală.
Execuţia subcererillor corelate durează mai mult, iar acest lucru este vizibil in cazul
bazelor de date cu un volum foarte mare de date.
Din punct de vedere al rezultatelor returnate, subcererile se impart in trei categorii:
• Subcereri care intorc o singură valoare
• Subcereri care intorc o coloană
• Subcereri care intorc un tabel
54
55. 6. Interogarea bazei de date
Mai departe, urmează să prezentăm principalele comenzi SQL folosite pentru
interogarea bazei de date in cadrul aplicaţiei de management al documentelor.
6.2 Conectarea la Baza de Date
PHP permite conectarea la diferite baze de date. Cea mai frecventă combinaţie o
reprezintă PHP şi MySQL pe care o vom prezenta in acest capitol.
Pentru a putea funcţiona o aplicaţie web dezvoltată cu aceste medii trebuie instalate:
php, mySQl şi serverul de web Apache. (se va instala xampp sau easyphp, etc.) Ideea pe care
se bazează interacţiunea PHP - MySQL sau in general interactiunea dintre PHP şi o bază de
date este aceea că permite că informaţiile care se doresc să apară pe site să fie prezente in
baza de date. In acest fel informaţiile pot fi actualizate usor şi prezentate intr-o formă "dinamică"
in cadrul site-ului.
Vom incepe prin a ne conecta la o bază de date MySQL.
mysql_connect(adresa, utilizator, parola);
Ca şi parametri vom folosi adresa care reprezintă IP-ul sau hostname-ul calculatorului
pe care am instalat baza de date MySQL. Acesta poate fi acelaşi cu cel pe care rulează serverul
de web (de obicei Apache sau IIS) sau un alt calculator. In cazul in care se găseşte pe acelaşi
calculator cu serverul de web, putem folosi la adresa şi localhost. Numele de utilizator şi parolă
vor fi cele setate pentru MySQL. Implicit acestea sunt nume de utilizator: root şi fără parolă.
Este recomandat ca aceste setări implicite să fie modificate.
Funcţia mysql_connect returnează un număr de identificare a conexiunii in caz de
succes, sau false in caz de eroare. In cazul in care nu ne putem conecta la baza de date funcţia
mysql_connect va returna false, iar in acest caz se va trece la executarea funcţiei die, care va
afişa mesajul din paranteză şi va termina execuţia scriptului.
Următorul pas il reprezintă alegerea bazei de date.
mysql_select_db(baza_de_date, identificatorul_conexiunii);
Parametrii folosiţi in acest caz vor fi: numele bazei de date ales şi identificatorul returnat
de către mysql_connect.
Acestea fiind zise, conectarea la baza de date se face utilizand următoarea sintaxă
PHP:
<?php
$AdresaBazaDate = "localhost";
55