Suport curs Sisteme anul II ECTS

135

Click here to load reader

Transcript of Suport curs Sisteme anul II ECTS

Page 1: Suport curs Sisteme anul II ECTS

Universitatea Petre Andrei Iaşi

Facultatea de Economie

SISTEME SI APLICATII INFORMATICE

IN MANAGEMENT

Note de curs

Titular disciplină,

Lect.univ.dr. Virgil Fatu

2008-2009

Page 2: Suport curs Sisteme anul II ECTS

METODE ŞI TEHNICI DE PROGRAMAREMETODE ŞI TEHNICI DE PROGRAMARE

După cum rezultă din evoluţia prezentată în paragraful anterior, există mai multe metode de elaborare a produselor-program. În continuare vom prezenta caracteristicile principale ale acestor metode, deoarece multe din aceste caracteristici se regăsesc în metodele şi tehnicile utilizate în prezent.

Metoda programării clasice

Prin programarea clasică se face referire la primii ani de dezvoltare a programelor, respectiv începutul anilor ’50, perioadă în care existau puţine reguli, majoritatea vizând scrierea programelor. De aceea, programarea clasică este impropriu numită metodă, însă se face delimitarea de evoluţiile ulterioare din domeniul programării calculatoarelor.

Programarea clasică presupune conceperea monolitică a programului prin parcurgerea unor etape1:

• analiza problemei în vederea stabilirii exacte a cerinţelor informaţionale ale utilizatorilor;

• elaborarea schemei logice a programului;• scrierea programului sursă;• compilarea şi ansamblarea programului;• testarea şi corectarea programului;• exploatarea programului.

Dezvoltarea programelor în această perioadă prezenta o serie de neajunsuri dintre care mai importante erau: elaborarea intuitivă sau artizanală a algoritmilor de rezolvare a problemei; existenţa numeroaselor operaţii de salt (instrucţiuni GOTO) ce conduc la un timp mare de execuţie a programului şi fac dificilă înţelegerea programului şi modificarea acestuia, chiar dacă acesta dispune de documentaţie; imposibilitatea desfăşurării activităţii de programare în echipă; ineficienţa şi slaba productivitate a activităţii de programare, mai ales în cazul programelor mai mari etc.

Acestea sunt doar câteva din motivele care au determinat progrmatorii să identifice şi să formuleze reguli care să-i ghideze în activitatea lor şi care au condus la apariţia unor metode de programare.

Metoda programării modulare

11 Grama, A., Filip, M., Medii de programare in economie, Editura Sedcom Libris, Iaşi, 2000

Page 3: Suport curs Sisteme anul II ECTS

Programarea modulară poate fi considerată prima metodă de programare propriu-zisă. Premisele apariţiei ei au fost create odată cu apariţia limbajului FORTRAN, care oferea posibilitatea utilizării subprogramelor şi compilării lor separate. Compilarea separată a dus la apariţia bibliotecilor de subprograme.

Programarea modulară este o metodă de concepere a programelor care presupune descompunerea problemei de rezolvat în mai multe subprobleme mai simple, conform preceptelor gândirii carteziene: orice problemă, oricât de complexă ar fi, poate fi descompusă în subprobleme rezolvabile mai uşor decât problema iniţială. În acest mod, programatorii se pot concentra numai asupra unei subprobleme, considerând-o ca o problemă de sine stătătoare, dar care este mai simplă şi mai uşor de rezolvat.

Trebuie remarcat deja interesul pentru instituirea de reguli în conceperea programelor şi nu doar pentru scrierea programelor, precum şi considerarea lor ca activităţi independente; proiectarea modulelor programului se face independent de limbajul de programare ales, doar la scrierea programelor ţinându-se cont de specificul fiecărui limbaj. Fiecărei subprobleme îi va corespunde, în principiu, un modul de program, iar produsul-program va fi constituit prin integrarea modulelor componente, dezvoltate separat. De aici derivă şi numele metodei – programarea modulară.

Modulul este considerat o unitate structurală de sine stătătoare, fie program, fie subprogram, fie o unitate de program2. Un modul poate fi format, la rândul său, din mai multe module. Modulele sunt relativ independente, ceea ce înseamnă că modificarea unui modul nu implică neapărat modificarea celorlalte module. Astfel, în cazul modificării structurii unui program, dacă funcţia pe care o realizează un modul nu este afectată, atunci acel modul va fi utilizat în continuare fără modificări. În fapt, obiectivul principal urmărit la proiectarea modulelor constă în identificarea unor module cât mai generale şi mai independente între ele, care să permită reutilizarea lor în cazul modificării programelor. De asemenea, modulele pot comunica între ele prin transmiterea de date.

Fiecare modul are rolul său bine precizat şi realizează o funcţie în cadrul întregului program, în conformitate cu rezultatele descompunerii funcţionale a problemei de rezolvat, realizată prin aplicarea strategiei descendente (“top-down”). De fapt, din abordarea modulară s-a desprins şcoala descompunerii funcţionale3. Metoda presupune identificarea funcţiilor pe care le va realiza programul în vederea rezolvării problemei, asocierea unui modul pentru una sau mai multe din funcţiile identificate, stabilirea legăturilor dintre module, obţinându-se astfel structura programului. După ce structura programului este clar definită, se trece la transpunerea modulelor în construcţii sintactice specifice limbajului de programare ales (scrierea programelor-sursă), compilarea acestora şi realizarea celorlalte faze necesare obţinerii programelor executabile.

22 Frenţiu, M., Pârv, B., Elaborarea programelor. Metode şi tehnici moderne, Editura Promedia, 1994

33 Oprea, D., Analiza şi proiectarea sistemelor informaţionale economice, Editura Polirom, Iaşi, 1999

Page 4: Suport curs Sisteme anul II ECTS

Avantajele programării modulare sunt multiple, printre cele mai importante se numără:

• creşterea calităţii programelor obţinute; ele conţin mai puţine erori, sunt mai uşor de înţeles şi de modificat.

• Sporirea productivităţii şi eficienţei în activitatea de programare, prin facilitarea lucrului în echipă şi utilizarea bibliotecilor de subprograme.

• Uşurarea testării programului prin efectuarea unei testări la nivelul modulelor.

• Obţinerea unor produse-program extensibile, ceea ce permite adăugarea unor noi module în programul existent dacă ulterior se doreşte realizarea unei noi funcţii.

Metoda programării structurate

Metoda programării structurate reprezintă o dezvoltare a metodei programării modulare prin introducerea unor noi principii, instrumente şi tehnici, cu scopul unei mai bune stăpâniri a complexităţii programelor mari. Complexitatea programului priveşte dificultatea elaborării produselor-program odată cu creşterea dimensiunii acestora. Complexitatea programelor creşte exponenţial şi nu liniar cu dimensiunea sa. De aceea, obiectivul principal al programării structurate a fost acela de a introduce ordine şi rigoare în elaborarea de produse-program, ca o cale de stăpânire a complexităţii. Fără a intra în detalii, să spunem că până în prezent metoda programării structurate a reuşit să realizeze doar parţial obiectivul propus.

Principiile programării structurate au fost introduse de Bohm şi Jacopini în 1966, atunci când ei au demonstrat că pentru a exprima logica internă a oricărui program sunt suficiente trei tipuri de structuri de control: structura secvenţială, structura alternativă şi structura repetitivă, iar fiecare din aceste structuri, ca parte dintr-un program, are o singură intrare şi o singură ieşire. Prin umare, programarea structurată ar putea fi definită ca programarea fără instrucţiunea GOTO.

Programarea structurată a fost consacrată la începutul anilor ’70 prin contribuţiile a numeroşi autori: Dijkstra, Hoare, Mills, Baker, Wirth, Dahl, Warnier etc. În această perioadă, aplicarea tehnicilor structurate era limitată la activitatea de scriere a programelor, urmărindu-se oferirea unor soluţii la următoarele probleme: Cum ar trebui să arate un program? Care este legătura dintre structura statică şi structura dinamică a unui program? Cum poate fi controlată complexitatea unui program atunci când mărimea lui creşte?

Un alt obiectiv urmărit în programarea structurată priveşte modul de scriere a unui program astfel încât el să fie uşor de înţeles şi modificat. Claritatea unui program poate fi obţinută, în afara utilizării celor trei structuri de control fundamentale, prin respectarea următoarelor două reguli:

Page 5: Suport curs Sisteme anul II ECTS

• scrierea indentată a textului programului şi• inserarea de comentarii în textul programului.

Metoda programării structurate a evoluat continuu, în sensul introducerii disciplinei nu doar în scrierea programelor, ci şi în celelalte faze ale elaborării programelor: analiza, proiectarea, testarea etc. Astfel, programarea structurată poate fi definită într-un sens restrâns şi unul larg4. În sens restrâns, programarea structurată face referire la activitatea de codificare (scriere a programelor) şi reprezintă o metodă de construire a programelor în conformitate cu un set de reguli care solicită utilizarea unui format strict, a structurilor de control standard şi a unui set de construcţii logice. În sens larg, programarea structurată reprezintă o metodologie care impune disciplină asupra formei programelor, în analiza, proiectarea, scrierea şi testarea programelor; ea este o metodologie de programare pentru construirea de programe modulare, ordonate ierarhic, prin utilizarea structurilor de control standard. Astăzi, prin programare structurată se face referire la sensul său larg, motiv pentru care se vorbeşte de filozofia structurată.

În concluzie, meritul principal al tehnicilor structurate este acela de a fi preluat toate practicile şi experienţele acumulate în programare şi de a le fi formalizat şi standardizat. Programarea structurată preia principiile programării modulare pe care le dezvoltă, dar se deosebeşte de aceasta cel puţin prin două aspecte:

• modularizarea ierarhică a programelor şi • utilizarea structurilor de control fundamentale.Avantajele oferite de metoda programării structurate sunt numeroase, reţinând în

continuare doar câteva dintre acestea:• creşterea calităţii programelor;• sporirea flexibilităţii programelor, ceea ce uşurează întreţinerea lor;• organizarea raţională a întregului proces de dezvoltare a programelor;• creşterea productivităţii în dezvoltarea programelor de aplicaţie prin specializarea

activităţilor.

Metoda programării orientată-obiect

Programarea orientată-obiect pune în centrul atenţiei noţiunea de obiect, considerată drept o entitate care se poate distinge de alte entităţi şi care are o semnificaţie în contextul aplicaţiei modelate. Obiectul asociază datele şi prelucrările în cadrul aceleiaşi entităţi, rămânând vizibilă doar interfaţa obiectului. Obiectele cu proprietăţi similare, comportament similar şi relaţii similare faţă de alte obiecte constituie o clasă de obiecte.

Un obiect comportă un aspect static, reprezentat prin intermediul unor variabile de stare numite atribute şi un aspect dinamic, reprezentat de comportamentul obiectului şi implementat prin intermediul metodelor asociate obiectului respectiv. Aspectul static este

44 Martin, J., McClure, C., Op. cit., pp. 41-42

Page 6: Suport curs Sisteme anul II ECTS

ascuns de aspectul dinamic. În acest fel, abordarea orientată-obiect se distinge de abordarea structurată. În locul unei structurări separate a datelor şi a funcţiilor (reprezentate de prelucrări), se modelează entităţi active formate din structuri de date ascunse de funcţii. Un program este privit într-o manieră globală, ca un ansamblu de obiecte care interacţionează prin intermediul mesajelor, fiecare obiect având asociat propriul set de operaţii.

Obiectul, în viziunea programării orientate-obiect, are următoarele caracteristici:• identitate: obiectul este o entitate discretă care poate fi distinsă de alte entităţi;• clasificare: obiectele cu aceleaşi atribute şi operaţii sunt grupate în clase, iar un

obiect este considerat o instanţă a clasei din care face parte;• polimorfism: aceeaşi operaţie poate avea comportament diferit în funcţie de

obiectul la care este ataşată, implementarea concretă a unei operaţii într-o anumită clasă numindu-se metodă;

• moştenire: atributele şi operaţiile se transmit de la o clasă la alta de-a lungul unei relaţii ierarhice.

Pentru transmiterea similarităţilor de la o clasă de obiecte la alta, în condiţiile păstrării diferenţelor între acestea, se utilizează generalizarea şi moştenirea. Generalizarea este relaţia dintre o clasă şi una sau mai multe versiuni rafinate ale ei, în care clasa care se rafinează se numeşte superclasă, iar fiecare versiune mai rafinată se numeşte subclasă. Atributele şi operaţiile comune sunt grupate în superclasă şi se spune că sunt moştenite de subclase.

Punctele forte ale abordării orientată-obiect constau în capacitatea de a modela obiecte complexe, de a exprima într-o manieră integrată dinamica obiectelor, încapsularea acestor obiecte pentru a ascunde implementarea lor, posibilitatea reutilizării unor componente ale produsului-program. Punctele slabe sunt reprezentarea monolitică a aplicaţiilor, ceea ce nu corespunde cu adevărat percepţiei ce o avem asupra realităţii şi marele efort de abstractizare.

Preceptele abordării orientată-obiect au fost aplicate cu succes mai întâi în domeniul programării, iar de la începutul anilor ’90, ca şi în cazul tehnicilor structurate, s-au accentuat preocupările specialiştilor pentru implementarea lor şi în celelalte faze ale elaborării programelor. În consecinţă, au apărut mai multe metode orientate-obiect de relizare a produselor-program.

În vederea simplificării procesului de dezvoltare a programelor prin abordarea orientată-obiect, s-au înregistrat numeroase preocupări de integrare a diferitelor metode orientate-obiect existente. Dintre aceste încercări, cea mai cunoscută şi mai reuşită s-a concretizat în standardul UML (Unified Modeling Language). UML a rezultat prin integrarea a trei din cele mai cunoscute metode orientate-obiect: OOD (Object Oriented Design) propusă de Booch, OMT (Object Modelling Technique) propusă de Rambaugh şi

Page 7: Suport curs Sisteme anul II ECTS

OOSE (Object-Oriented Software Engineering) propusă de Jacobson. În 1996, OMG – Object Management Group şi-a manifestat interesul pentru rezultatele muncii celor trei autori, în vederea adoptării UML ca standard în modelarea orientată obiect. În urma colaborării şi cu alţi specialişti din domeniu, UML a fost adoptat ca standard OMG în septembrie 1997, fiind astfel utilizat de majoritatea producătorilor de instrumente de dezvoltare a sistemelor informatice şi specialişti în domeniu. OMG şi-a asumat responsabilitatea dezvoltării ulterioare a standardului UML.

Programarea vizuală

Complexitatea mediilor de dezvoltare a aplicaţiilor şi bariera artificială ce se interpune între programator şi aplicaţii sunt doar două impedimente pe care le elimină programarea vizuală. În plus, uşurinţa de învăţare şi exploatare a limbajelor constituie un argument hotărâtor în favoarea programării vizuale. Obiectivul declarat al acesteia este ca programarea să devină mai uşoară pentru programatori şi mai accesibilă nespecialiştilor, indiferent de destinaţia limbajului: proiectarea rapidă a aplicaţiilor, prototipizare, simulări etc. În oricare domeniu, limbajele vizuale trebuie să permită utilizatorului să se concentreze asupra problemei ce o are de rezolvat şi mai puţin asupra limbajului de programare propriu-zis

Notaţiile vizuale au fost utilizate, practic, de la apariţia programării, ele devenind treptat tot mai complexe. Programatorii au înţeles facilităţiile şi puterea pe care le conferă notaţiile vizuale, mai ales în contextul tehnologiilor tot mai sofisticate.

În mod natural, oamenii se raportează la lumea reală în mod grafic, iar imaginile se constituie ca şi componentă principală a gândirii creative. În aceste condiţii, limbajele de programare textuale s-au dovedit destul de dificil de învăţat pentru oameni dealtfel creativi şi inteligenţi. Prin reducerea sau eliminarea completă a necesităţii de a traduce ideile vizuale în reprezentări textuale, uneori artificiale, devine posibilă atenuarea curbei de învăţare a unui limbaj de programare.

Programarea vizuală îmbracă mai multe forme şi acoperă o arie largă de aplicaţii, de unde şi diversitatea opiniilor şi a punctelor de vedere. Astfel, unii specialişti consideră că acest concept a apărut odată cu mediile de programare precum Visual Basic sau Visual C++. Pentru alţii, Visual Basic este nereprezentativ pentru domeniul vast al tehnologiilor care poartă eticheta vizual. Ei consideră că programare vizuală înseamnă Prograph (Pictorius), Visual AppBuilder (Novell) sau Parts (Digitalk).

Nu există o definiţie unanim acceptată pentru programarea vizuală, dar majoritatea specialiştilor sunt de acord că este limbaj de programare vizuală acela care-şi realizează toate sarcinile de programare într-o manieră vizuală, fără a face uz de reprezentarea

Page 8: Suport curs Sisteme anul II ECTS

textuală. O definiţie frecvent citată consideră că programarea vizuală înseamnă utilizarea de expresii vizuale (grafice, icon-uri, desene) în procesul de programare5.

Mai este întâlnit în literatura de specialitate termenul de programare vizuală pură care are în vedere modul de proiectare al unui program, prin operare directă asupra unui set de elemente grafice. Operarea directă se realizează prin intermediul unor tehnici de interacţiune, iar programul se dezvoltă fără a scrie instrucţiuni sub formă de text.

Pentru Visual Basic şi altele asemenea există noţiunea de limbaje de programare transformate vizual, care au implementate anumite tehnici de reprezentare vizuală a informaţiilor, ce se suprapun unor limbaje textuale6.

Un alt concept este cel al mediilor de programare vizuală, definite de unii autori ca şi mediile în care sunt implementate limbajele de programare vizuală.

În alte opinii, mediile de programare vizuală (Visual Programming Environment) asigură dezvoltarea rapidă a aplicaţiilor (RAD – Rapid Application Development). Ele se caracterizează printr-un grad ridicat de utilizare a elementelor grafice şi sunt utilizate în scopul accelerării dezvoltării şi distribuţiei aplicaţiilor, motiv pentru care sunt denumite şi medii de dezvoltare vizuală a aplicaţiilor.

Ar fi poate utilă o separare între aceste două concepte – limbaje de programare vizuală şi medii de programare vizuală. Primul are în vedere limbajele care se sprijină pe tehnicile vizuale pe întreg parcursul procesului de programare: proiectarea, testarea, depanarea şi execuţia se realizează în acelaşi mediu vizual. Mediul de programare vizuală lucrează adesea cu reprezentări vizuale suprapuse elementelor textuale. Cele mai des întâlnite în practică sunt limbajele de proiectare a interfeţelor grafice care, combinate cu elemente textuale sunt utilizate în proiectarea de aplicaţii. Caracteristicile programării vizuale, care se concretizează în simplificarea şi optimizarea procesului de programare din punct de vedere al timpului necesar construirii aplicaţiei au transformat mediul de programare vizuală într-un mediu RAD.

În categoria mediilor RAD se încadrează: Visual Basic, Visual FoxPro şi Visual C + + (Microsoft), Delphi (Borland), Visual Objects (Computer Associates), PowerObjects (Oracle), Power Builder (Power Software), SQL Windows (Gupta), VisualAge (IBM).

Liderul pieţei RAD este Visual Basic, produs de Microsoft. Cei de la Microsoft au observat la timp apariţia unei noi categorii de utilizatori, numită generic power users. Aceasta a derivat din cea a utilizatorilor finali şi poate fi numită “utilizatori finali avansaţi” care, fără a fi profesionişti, au acumulat suficiente cunoştinţe şi îşi pot rezolva singuri o bună parte din problemele curente folosind aceste medii de programare.

Într-un mediu de dezvoltare vizuală se cuprind7:

55 Shu, N.C., Visual Programming Languages: A Perspective and Dimensional Analysis, International Symposium on New Directions in Computing, Norway, 1985

66 Menzies, T., Evaluation Issues for Visual Programming Languages, www.cse.unsw.edu.au

77 Sârbu, M., Dezvoltarea rapidă a aplicaţiilor, în Byte, nr. 10/1995, pp. 75-77

Page 9: Suport curs Sisteme anul II ECTS

• mediul de lucru integrat, care asigură dezvoltarea aplicaţiei şi permite accesul la toate componentele unei aplicaţii;

• instrumente vizuale de descriere a interfeţei, folosite pentru a defini form-uri, ferestre de dialog, machete de rapoarte etc. Plasarea controalelor se face prin drag&drop, iar definirea proprietăţilor printr-un “inspector de obiecte”;

• limbajul de programare, care este în continuare necesar, în ciuda tuturor facilităţilor vizuale oferite de aceste medii de lucru. Acesta este mai mult sau mai puţin orientat obiect (exemple: diverse variante de Basic, Pascal, limbaje xBase, SmallTalk);

• suportul pentru conectarea la diferite surse de date - conectivitatea prin ODBC (Open DataBase Connectivity) este cea mai frecvent întâlnită;

• componentele vizează obţinerea unui spor de productivitate în dezvoltarea aplicaţiilor şi se referă la două aspecte: utilizarea de componente prefabricate şi reutilizarea codului de la o aplicaţie la alta;

• suportul pentru activităţile specifice distribuţiei (compilarea aplicaţiei, realizarea discurilor de instalare, a documentaţiei etc.).

Figura nr. 2.2 ilustrează o parte dintr-o aplicaţie scrisă în Visual Basic. Se observă că este vorba despre o fereastră intitulată CALCUL AMORTIZARE, ceea ce indică scopul utilizării ei. Ea poartă numele de form, termen întâlnit la noi şi ca formular sau chiar formă.

Form-ul reprezintă zona principală de lucru, o aplicaţie constând de regulă din mai multe form-uri, legate între ele în funcţie de logica ei. Practic, întreaga aplicaţie se desfăşoară în limitele form-urilor, pe care sunt plasate diverse componente ce au ataşate secvenţe de cod. Aşa cum se observă în figura 2.2, astfel de componente sunt: casetele de text (text box), etichete (label), butoane de comandă (command button). Ele sunt denumite generic controale (în engl. controls) şi sunt de fapt obiecte, descrise printr-o parte statică (descriptivă) şi una dinamică. Numărul lor este extrem de mare, în fiecare mediu de dezvoltare existând posibilitatea de a lucra şi cu controale externe (numite third-party components, deoarece pot fi create de alte firme şi înglobate în aplicaţii). În fine, trebuie precizat aici că însăşi form-ul este tratat ca un obiect, având toate caracteristicile care sunt descrise în continuare.

Ca şi obiect programabil, un control este definit în primul rând printr-un ansamblu de proprietăţi. O proprietate poate fi definită ca un atribut nominalizat al unui obiect programabil. Proprietăţile definesc atât caracteristicile unui obiect (dimensiune, culoare, poziţie pe ecran), cât şi modul în care se comportă un obiect (de exemplu, un obiect poate

Page 10: Suport curs Sisteme anul II ECTS

fi la un moment dat, activ sau inactiv, sau poate fi afişat pe form sau ascuns). Orice proprietate a unui obiect are o valoare care se poate modifica la proiectare şi/sau execuţie.

Figura nr. 2.2 Form-ul CALCUL AMORTIZARE, realizat în Visual BasicFigura nr. 2.2 Form-ul CALCUL AMORTIZARE, realizat în Visual Basic

Oricât de multe proprietăţi ar avea, un obiect este complet descris cu ajutorul metodelor, pentru că acestea indică ce face obiectul. Deci, proprietăţile descriu un obiect, în timp ce metodele permit unui obiect să facă ceva. Proprietăţile sunt date, metodele sunt secvenţe de instrucţiuni. O metodă reprezintă o procedură asociată sau incorporată, un bloc de cod care poate fi invocat pentru a asocia o anumită acţiune unui obiect. În Visual Basic, o metodă nu se poate modifica. Există totuşi o clasă specială de metode care se pot modifica, numite proceduri eveniment. Procedura eveniment este un subprogram ataşat unui obiect care conţine răspunsul obiectului la proceducerea unui eveniment. Spre deosebire de metode, care sunt nemodificabile, procedurile eveniment sunt cele care particularizează comportamentul unui obiect într-o aplicaţie.

În varianta Visual Basic - ca şi a celorlalte medii vizuale de dezvoltare - programul constă dintr-un ansamblu de rutine, cele mai multe având dimensiuni reduse. Acestea se numesc proceduri eveniment şi fiecare tratează un eveniment individual. O astfel de procedură se execută dacă şi numai dacă se produce evenimentul pentru care ea a fost scrisă. Altfel spus, un program va răspunde unui eveniment care se produce la rulare numai dacă a fost scrisă o procedură pentru evenimentul respectiv, altfel acesta va fi ignorat.

Fiecare control plasat pe un form suportă mai multe evenimente. De exemplu, o casetă de text poate răspunde la unul din următoarele evenimente: clic, dublu clic, introducerea unui text. Dacă pentru evenimentul clic este scrisă o procedură, atunci când

Page 11: Suport curs Sisteme anul II ECTS

rulează aplicaţia şi se execută clic pe caseta de text (se produce în acest fel evenimentul) – se va lansa automat în execuţie procedura definită.

Cele prezentate mai sus ne îndreptăţesc să considerăm mediile de dezvoltare vizuală a aplicaţiilor mai mult drept limbaje/medii multiparadigmă, ele reunind principii ale:

• programării vizuale (manipularea de reprezentări vizuale);• programării OO (lucrul cu obiecte, principiile încapsulării şi

reutilizării);• programării dirijate de evenimente;• programării structurate (utilizarea structurilor de control fundamentale

în cadrul procedurilor).

ELABORAREA PRODUSELOR-PROGRAM

Elaborarea unui produs-program constituie o activitate deosebit de complexă, care necesită utilizarea unei metodologii clare şi unitare. De regulă, o asemenea activitate se desfăşoară în echipe de lucru complexe în care sunt incluşi analişti, specialişti ai domeniului pentru care se dezvoltă produsul-program, programatori, specialişti în testarea şi implementarea produselor-program, utilizatori etc.

Literatura de specialitate pune în discuţie o multitudine de probleme legate de metodologia elaborării produselor-program şi subliniază în mod deosebit necesitatea existenţei unei metodologii unitare. Totuşi, putem afirma că în forma sa finală orice produs-program poate fi privit ca un sistem cu funcţii şi componente proprii, cu intrări, ieşiri, prelucrări specifice şi buclă de autoreglare şi cu un scop bine stabilit.

Modele de elaborare a produselor-program

Din punct de vedere practic, elaborarea unui produs-program presupune parcurgerea unui anumit număr de activităţi specifice obţinerii acestuia. Există un număr însemnat de modele pentru elaborarea unui produs-program, dintre care cele mai importante sunt: modelul în cascadă, modelul în V, modelul spirală, modelul liniar, modelul incremental, modelul RAD.

. Modelul în cascadă

Dintre toate modelele enumerate mai sus, modelul în cascadă este cel mai des utilizat în practică. Activităţile avute în vedere la elaborarea produselor-program în cazul modelului în cascadă (vezi şi figura 2.3) sunt:

•definirea problemei; •analiza; •proiectarea;

Page 12: Suport curs Sisteme anul II ECTS

•dezvoltarea; •testarea; •implementarea; •întreţinerea.

Fig. nr. 2.3. Modelul în cascadă de elaborare a unui produs-programFig. nr. 2.3. Modelul în cascadă de elaborare a unui produs-program

Acest model a fost dezvoltat de către Royce în 1970 şi este cel mai familiar programatorilor. Aşa după cum se observă în figura precedentă, caracteristica fiecărei etape constă în a se finaliza cu o verificare şi o validare în scopul eliminării eventualelor anomalii care ar putea să apară în cadrul fiecăreia. Dacă se constată eventuale anomalii, atunci se va reveni la etapa precedentă până când acestea vor fi eliminate. În acest fel se realizează o minimizare a costului pentru produsul-program dezvoltat. În acelaşi timp, trecerea de la o fază la alta, în sus şi în jos, oferă modelului un caracter iterativ şi incremental.

Modelul în V

Modelul în V poate fi considerat ca un caz particular al modelului în cascadă prin faptul că activităţile necesare elaborării produsului-program sunt reprezentate grafic sub forma lui „V”. Esenţa modelului constă în aceea că separă primele etape ale procesului de dezvoltare în sub-activităţi ce au legătură cu construcţia sistemului. Această organizare sub forma literei „V” este dată de faptul că se pune în relaţie directă de dependenţă primele etape cu cele aflate în partea de jos din modelul în cascadă.

Page 13: Suport curs Sisteme anul II ECTS

În acest model se delimitează următoarele activităţi8 [GRAM2000,55]:1. analiza cerinţelor şi studiul de fezabilitate;2. specificarea globală;3. proiectarea de ansamblu;4. proiectarea de detaliu;5. programarea;6. testarea unitară;7. integrarea şi testul de integrare;8. testul de acceptare;9. implementarea şi testul sistem.

Constatăm că din lista de mai sus activităţile 1-5 influenţează în mod permanent o activitate din 6-9, ceea ce permite o mai bună organizare a etapelor finale.

Dezavantajul acestui model constă în că nu pune în evidenţă posibilitatea reluării unei activităţi deja parcurse, ceea ce poate să conducă la depistarea unor anomalii funcţionale ale produsului-program în faza de implementare. Acest lucru va duce la reluarea întregului proces de elaborare a produsului program cu costuri corespunzătoare şi pierderi de timp.

Modelul în spirală

Modelul în spirală a fost propus în 1988 de către B. W. Boehm şi este cel mai cunoscut model evolutiv. El are la bază două premise9:

• natura iterativă a dezvoltării şi nevoia de planificare şi evaluare a riscurilor fiecărei iteraţii;

• realizarea validării cât mai devreme posibil şi de cât mai multe ori, prin construirea prototipurilor.

Obiectivul principal urmărit prin modelul spirală este gestiunea atentă a riscurilor prin combinarea modelului cascadă cu prototipizarea. Se construieşte mai întâi o primă versiune a sistemului, sub forma unui prototip, în care nu este definit întregul sistem ci sunt luate în considerare doar caracteristicile sale principale. După transpunerea prototipului în aplicaţie, aceasta este evaluată de către beneficiari, iar în funcţie de rezultatul evaluării se pot defini şi implementa noi caracteristici ale sistemului, construindu-se un nou prototip ce va fi supus evaluării. Acest proces se reia de mai multe ori, următoarele prototipuri fiind versiuni din ce în ce mai complete ale sistemului propus. Modelul cascadă se va regăsi în cadrul fiecărei iteraţii.

88 Grama, A., Filip, M., Medii de programare în economie, Editura Sedcom Libris, Iaşi, 2000, p. 55

99 Oprea, D., Analiza şi proiectarea sistemelor informaţionale economice, Ed. Polirom, Iaşi, 1999, p. 68

Page 14: Suport curs Sisteme anul II ECTS

Modelul spirală este descompus în mai multe activităţi-cadru – maxim 6, cum sunt prezentate în continuare:

• comunicarea cu beneficiarul (stabilirea şi menţinerea contactului dintre beneficiar şi proiectant);

• planificarea (definirea resurselor, a termenelor limită de realizare);• analiza riscului (riscuri tehnice şi de organizare);• proiectarea (definirea uneia sau mai multor reprezentări ale aplicaţiei);• construirea şi lansarea;• evaluarea beneficiarului (feed-back din partea beneficiarului asupra schimbărilor

din noua versiune instalată).Cea mai cunoscută variantă a modelului este cea bazată pe 4 elemente majore, ca în

figura 2.4. Printre avantajele modelului spirală se pot enumera:

• diminuarea riscurilor la nivel de prototip, prin angajarea treptată în proiect a echipei de dezvoltare şi a beneficiarilor;

• valorificarea experienţei anterioare în planificarea activităţilor pentru prototipul următor;

• evaluarea riscurilor asociate proiectului în mai multe momente;• simplificarea operaţiunilor de evaluare a ceea ce este necesar în etapa

(prototipul) următoare, inclusiv prin prisma costurilor.

Fig. nr. 2.4 Ilustrarea modelului în spiralăFig. nr. 2.4 Ilustrarea modelului în spirală

Aplicarea cu succes a modelului spirală este condiţionată de profesionalismul echipei de dezvoltare şi flexibilitatea în acţiune, inclusiv în alocarea de fonduri, dar şi în definirea activităţilor de întreprins.

Modelul RAD

Page 15: Suport curs Sisteme anul II ECTS

Dezvoltarea aplicaţiilor trebuie să răspundă, ca orice domeniu de activitate, principiului productivităţii şi eficienţei economice. Detaliind, putem identifica mai multe aspecte ce trebuie avute în vedere în dezvoltarea unei aplicaţii10:

•productivitatea resurselor;•calitatea produsului;•timpul de realizare;•simplificarea întreţinerii;•satisfacţia utilizatorului.Modelul RAD îşi propune să pornească de la sursă, adică de la nevoile utilizatorilor.

Utilizatorul se găseşte în centrul atenţiei, fiind clientul sistemului ce se realizează.RAD reprezintă un arhetip revoluţionar de succes în software-ul anilor ’90,

caracterizat pe scurt prin “mai repede, mai bine, mai ieftin”, ceea ce este posibil de realizat printr-o abordare foarte riguroasă, bazată pe echipe mici de specialişti bine pregătiţi, pe utilizarea prototipurilor şi impunerea unor limite rigide de timp în planificarea activităţilor.

RAD se bazează pe modelul spirală, ceea ce permite dezvoltarea incrementală şi repetitivă. Deşi nu reiese din figura 2.5, trebuie precizată influenţa metodelor orientate-obiect, ce asigură o eficienţă sporită pentru RAD, prin utilizarea de componente pre-fabricate. De asemenea, RAD apelează la generarea automată a codurilor prin sisteme CAPS (Computer-Aided Prototyping System), care înlocuiesc scrierea manuală, mai înceată a codului şi minimizează erorile. În fine, RAD înseamnă flexibilitate, prin faptul că permite utilizatorilor să folosească propriile limbaje de interogare sau generatoare de rapoarte. După definirea de către J. Martin a filosofiei RAD11 a urmat un val de propuneri de modele de dezvoltare a aplicaţiilor de tip RAD.

Figura nr. 2.5 Fazele unui ciclu de dezvoltare RADFigura nr. 2.5 Fazele unui ciclu de dezvoltare RAD

RAD se individualizează prin următoarele caracteristici: • utilizarea de echipe mixte, formate în medie din 6 persoane, incluzându-i pe

utilizatorii finali, manageri şi pe dezvoltatorii sistemului (această denumire face

101 Silvestre, P., Verlhac, D., Le development de systemes d’information, Edition Hermes, Paris, 1996, p. 112

111 Martin, J., Rapid Application Development, Macmillan, 1991

Page 16: Suport curs Sisteme anul II ECTS

referire la specialistul “multilateral”, ce are atât cunoştinţe specifice analizei de sistem, cât şi de proiectare şi programare). Trebuie precizat că experienţa anterioară este deosebit de importantă, iar succesul proiectului este asigurat prin implicarea activă a utilizatorilor, ca şi prin comunicarea şi colaborarea permanentă între membrii echipei;

• utilizarea de instrumente specializate (4GL) care asigură: • dezvoltarea “vizuală”, • crearea de prototipuri, • planificarea şi gestiunea timpului, • colaborarea şi lucrul în echipă, • folosirea componentelor re-utilizabile şi a componentelor API, • controlul versiunilor;

• renunţarea la caracteristici sau componente secundare (în special cu rol de îmbunătăţire a interfeţei sau a dialogului cu utilizatorul) pentru a asigura încadrarea în termenele stabilite. De regulă, întregul proces de dezvoltare are o durată maximă de 6 luni;

• prototipizarea iterativă, evolutivă.Etapele unui ciclu de dezvoltare RAD pot fi prezentate şi în succesiunea: analiză,

proiectare, realizare şi integrare, testare şi implementare, dar într-un mod diferit faţă de modelul clasic. Pentru ilustrare ne vom opri asupra ciclului de dezvoltare James Martin, cel mai reprezentativ dintre ciclurile de dezvoltare RAD. Există în acest ciclu 4 faze: (1) identificarea şi planificarea cerinţelor, (2) proiectare, (3) construire, (4) finalizare (vezi figura nr. 2.4).

Planificarea cerinţelor are ca obiectiv determinarea funcţiunilor sistemului. Utilizatorul trebuie să aibă un rol activ în această fază. Faza se desfăşoară în aşa-numitele ateliere de lucru (workshop), de tip Joint Requirements Planning. Activităţile desfăşurate pot fi grupate în: evidenţierea problemelor, identificarea şi precizarea cerinţelor, planificarea sarcinilor.

Proiectarea realizează modelarea sistemului prin prototipuri şi alte instrumente de modelare. Activitatea se desfăsoară în ateliere de lucru de tip Joint Application Design. După stabilirea modelului de lucru se întocmeşte rapid prototipul. Fiecare prototip va fi testat şi validat în atelierele de lucru.

Construirea sistemului este apanajul specialiştilor informaticieni, care transpun modelele fazei anterioare în programe. Utilizatorii testează componentele şi le validează sau solicită, dacă e necesar, ameliorarea acestora. Faza se încheie prin integrarea componentelor în sistemul final. Aşa cum reiese şi din figura 2.4, această fază şi precedenta se constituie într-un ciclu iterativ, până la obţinerea rezultatului dorit (Iterate Until Done). Pe parcursul acestui ciclu prototipurile definite şi revizuite pot evolua în prototipuri operaţionale.

Page 17: Suport curs Sisteme anul II ECTS

Finalizarea se referă la punerea în exploatare a sistemului. Această fază continuă testările asupra produsului final, impune schimbări organizaţionale, formează şi instruieşte utilizatorii finali.

În sinteză, modelul RAD se bazează pe următoarele soluţii12:• Includerea utilizatorilor în echipa de realizare a aplicaţiei şi implicarea

activă a acestora. S-a pornit de la faptul că utilizatorii sunt sursa cerinţelor informaţionale, ca şi beneficiari direcţi ai aplicaţiei, deci opinia lor este determinantă pentru succesul aplicaţiei. Implicarea directă şi continuă a utilizatorilor în procesul de dezvoltare este esenţială pentru succesul RAD. Ea prezintă importanţă în detectarea din timp a eventualelor erori, ştiind că dacă defectul este descoperit mai repede, costul remedierii va fi mai scăzut. Costul corectării erorilor creşte odată cu trecerea dintr-o etapă a ciclului de viaţă în alta.

• Gestiunea optimă a timpului. Se fixează intervale scurte de timp pentru realizarea componentelor. Un proiect de dimensiuni mari va fi descompus în subproiecte cu posibilităţi de realizare în paralel. Pentru a asigura respectarea termenelor, se vor realiza mai întâi versiuni care vor cuprinde doar funcţionalităţile de bază. În final, se vor integra şi funcţionalităţile complementare.

• Dezvoltarea incrementală, numită şi ciclu de elaborare în spirală. Este un factor ce contribuie la sporirea vitezei de realizare a aplicaţiilor. În loc să se lanseze direct produsul final, aplicaţia va apare în versiuni succesive. Se realizează prototipuri ale aplicaţiei prin parcurgerea a 3 etape: determinarea cerinţelor informaţionale, transpunerea lor sub formă de aplicaţie, testarea acesteia de către utilizatori. Utilizarea prototipurilor permite ca utilizatorii să observe şi să corecteze sistemul.

• Reutilizarea. O aplicaţie nu mai este văzută ca un ansamblu de programe executabile împreună cu un ansamblu de date, care comunică prin intermediul unor interfeţe. Aplicaţia reprezintă un ansamblu de servicii/componente care răspund unor obiective sau cerinţe.

• Utilizarea de instrumente CASE pentru generarea rapidă şi fără erori a programelor.

121 Silvestre, P., Verlhac, D., Op. cit., pp. 112-113

Page 18: Suport curs Sisteme anul II ECTS

NOŢIUNI DE BAZĂ PRIVIND PROGRAMELE DE CALCULNOŢIUNI DE BAZĂ PRIVIND PROGRAMELE DE CALCUL TABELARTABELAR

Foaia de calcul, registrul de lucru, tipuri de date, formule, funcţii, comenzi, macro-comenzi

Instrumentul specific de lucru al programelor de calcul tabelar este centralizatorul electronic. Centralizatorul electronic reprezintă un tabel de dimensiuni foarte mari, structurat în linii şi coloane, în care se pot defini simplu modelele de rezolvare a problemelor. În literatura de specialitate de la noi este întâlnit şi sub alte denumiri: foaie de calcul electronică, tabel electronic sau chiar "spreadsheet", după denumirea din limba engleză. În literatura de specialitate din alte ţări apare, de asemenea, sub diverse denumiri: spreadsheet (worksheet) în engleză, feuille de calcul electronique, respectiv tableur în franceză, chiffreur în franceza canadiană, hoja de calculo în spaniolă.

Foaia de electronică de calcul oferă posibilităţi de introducere a datelor şi definire a modelelor, posibilităţi de calcul, posibilităţi de vizualizare, posibilităţi de exprimare grafică, posibilităţi de simulare etc (vezi fig. nr. 3.1).

Registrul de lucru (workbook) este un fişier cu extensia .xls în care sunt stocate modelele definite şi datele în Excel. Un registru de lucru poate conţine mai multe foi de calcul (sheet, worksheet), ceea ce permite reunirea şi organizarea unor tipuri variate de informaţii într-un singur fişier. Astfel, un grafic poate fi plasat în foaia de calcul ce conţine datele sau într-o foaie distinctă (chart sheet) care va fi inclusă în registrul de lucru. În Excel, numele foilor de calcul apar în partea de jos a ferestrei de lucru (vezi fig. nr. 3.2), având asociate implicit numele Sheet1, Sheet2 ş.a.m.d., nume pe care utilizatorul le poate modifica după dorinţă. Când se execută clic pe numele unei foi de calcul, această devine foaia de calcul curentă.

Page 19: Suport curs Sisteme anul II ECTS

Fig. nr. 3.1. Model de analiză a rentabilităţii pe produse în EXCELFig. nr. 3.1. Model de analiză a rentabilităţii pe produse în EXCEL

Fig. nr. 3.2. Dispunerea foilor de calcul într-un registru de lucruFig. nr. 3.2. Dispunerea foilor de calcul într-un registru de lucru

Fiecare căsuţă (casetă, celulă) poate fi referită printr-o adresă (referinţă) care indică linia şi coloana la întretăierea căreia se află. Sunt două stiluri practicate pentru specificarea adreselor:

• stilul consacrat de LOTUS: A1; A2; F5; …;IV16384;• stilul consacrat de MULTIPLAN: R1C1; R2C1; R5C6;

…;R16384C256. În mod implicit, EXCEL utilizează stilul A1, în care coloanele sunt identificate cu o

literă (de la A la IV, pentru cele 256 de coloane), iar liniile cu numere (de la 1 la 65536). Se poate trece la stilul R1C1, prin comanda Options din meniul Tools, din care se

Page 20: Suport curs Sisteme anul II ECTS

selectează opţiunea R1C1 reference style din pagina General. Acest stil este util atunci când se lucrează cu macrouri, deoarece face posibilă calcularea poziţiei rândurilor sau coloanelor din foaia de calcul. Pentru a face referire la un grup de căsuţe, se vor indica adresa colţului stânga-sus şi adresa colţului dreapta-jos ale zonei de specificat, separate prin caracterul : (două puncte).

Într-o foaie de calcul se pot referi şi date din alte foi de calcul ale aceluiaşi registru, sau chiar din alt registru de lucru. În acest caz, adresa căsuţei va fi precedată de numele foii de calcul (având ca separator caracterul !), iar dacă este dintr-un alt registru, se va specifica şi numele acestuia, între paranteze pătrate (vezi exemplele de mai jos).

Exemple:Exemple:• A20 (căsuţa aflată pe coloana A şi pe rândul 20)• F10:F20 (grupul de căsuţe de pe coloana F, pe rândurile de la 10 la 20)• B12:E12 (grupul de căsuţe de pe rândul 12, pe coloanele de la B la E)• 6:6 (toate căsuţele de pe rândul 6)• 4:8 (toate căsuţele de pe rândurile de la 4 la 8)• C:G (toate căsuţele de pe coloanele de la C la G)• Studenti!C5 (căsuţa C5 din foaia de calcul Studenti, din acelaşi registru)• [d:\utilizatori\medii.xls]Evaluare!D2 (căsuţa D2 din foaia de calcul Evaluare, din registrul de lucru salvat în fişierul medii.xls)

Programele de calcul tabelar lucrează, în principiu, cu două tipuri esenţiale de date: date numerice şi date tip şir de caractere. Sistemul detectează tipul datei după natura primului caracter introdus sau după conţinut. În principiu, dacă primul caracter este o literă data este considerată de tip şir de caractere, dacă începe cu o cifră data este considerată de tip numeric.

Programele de calcul tabelar gestionează şi date calendaristice: intern ele sunt reprezentate ca valori numerice, iar afişarea se poate face în diferite formate. De exemplu, pentru ca raportul din fig. nr. 3.1. să conţină data calendaristica de 11-Feb-99, trebuie ca în caseta B3 să introducem numărul 36202 (vezi fig. nr. 3.3.) şi să solicităm prin comanda Format, Cells afişarea ca dată calendaristică.

De regulă, Excel recunoaşte o dată calendaristică atunci când este introdusă în formatul ll/zz/aa. Astfel, 01/25/00 va fi interpretat ca data de 25 ianuarie 2000. În legătură cu specificarea anului prin ultimele două cifre, se aplică următoarele reguli:

• anii 2000 – 2029 sunt recunoscuţi atunci când se scriu valorile 00, 01, …, până la 29 (spre exemplu, 5/21/23 este interpretat ca 21 mai 2023);

• anii 1930 – 1999 sunt recunoscuţi atunci când se scriu valorile 30, 31, …, până la 99.Trebuie precizat că programul de calcul tabelar Excel poate lucra cu 2 sisteme

pentru date calendaristice: sistemul 1900 (utilizat implicit de Excel pentru Windows) şi sistemul 1904 (utilizat implicit de Excel pentru Macintosh). În sistemul 1900, pentru 1 ianuarie 1900 corespunde valoarea numerică 1, iar pentru 31 decembrie 9999 valoarea 2958465. Sistemul 1904 începe numărătoarea cu 2 ianuarie 1904, ce are asociată valoarea

Page 21: Suport curs Sisteme anul II ECTS

1 şi o finalizează cu 31 decembrie 9999, pentru care asociază valoarea 2957063. Pentru a schimba sistemul 1900, din meniul Tools se alege Options, unde se alege opţiunea 1904 date system din pagina Calculation.

Conţinutul unei căsuţe poate fi şi o formulă sau o funcţie. Formulele şi funcţiile încep printr-un caracter special: =; +; -; @; etc. Prin intermediul acestora se poate exprima o mare diversitate de calcule. De fapt, formulele şi funcţiile sunt elementele esenţiale ale centralizatorului electronic, din care derivă performanţa şi capacităţile de simulare. Printr-o formulă se defineşte conţinutul unei căsuţe în funcţie de conţinutul altor căsuţe. Relaţia rămâne adevărată pentru orice conţinut al căsuţelor folosite ca argumente în formule. Dacă se schimbă conţinutul căsuţelor folosite ca argumente, instantaneu se modifică şi conţinutul căsuţei care conţine formula. Modelul prezentat în fig. nr. 3.3. poate fi utilizat în analiza rentabilităţii mai multor categorii de produse. Este suficient să introducem datele de intrare, iar pe baza formulelor existente vom obţine imediat rezultatele. Întrucât graficul din fig. nr. 1. este construit pe baza datelor din prima parte a modelului, de fiecare dată se va modifica şi graficul. Dacă sunt mai multe produse vom trece la inserarea de linii, respectiv la copierea formulelor deja introduse.

Fig. nr. 3.3. Formule şi funcţii utilizate în modelul de rezolvare EXCELFig. nr. 3.3. Formule şi funcţii utilizate în modelul de rezolvare EXCEL

O formulă/funcţie care specifică o relaţie de calcul valabilă pentru mai multe rânduri sau coloane poate fi copiată; adresele căsuţelor se vor actualiza corespunzător. În cazul mutării unei formule, adresele nu se actualizează. Astfel, dacă formula =D5-C5 din E5 este copiată în E6 ea devine =D6-C6. Acest tip de adrese se numesc adrese relative. În schimb, dacă se copie formula =E5*$F$3 din G5 în G6 aceasta devine =E6*$F$3 şi nu =E6*F4. $F$3 face parte din categoria adreselor absolute.

Page 22: Suport curs Sisteme anul II ECTS

Dacă dorim ca o căsuţă să conţină aceeaşi valoare ca şi o altă căsuţă, se va introduce semnul egal, urmat de adresa căsuţei ce conţine valoarea respectivă. Căsuţa ce conţine această formulă se numeşte căsuţă dependentă: atunci când se modifică valoarea din căsuţa referită, ca efect al recalculării automate, se va modifica şi conţinutul căsuţei dependente.

Corectarea formulelor introduse, ştergerea conţinutului unor căsuţe sau grupuri de căsuţe se poate face la fel de simplu şi rapid ca în procesoarele de texte. Pentru corectare se utilizează linia de editare (vezi fig.nr. 3.1), care se apelează prin executarea unui clic sau prin apăsarea tastei F2. Ştergerea se realizează cu ajutorul tastelor Delete sau Backspace.

De asemenea, există posibilitatea atribuirii de nume unor căsuţe sau grupuri de căsuţe astfel că scrierea formulelor devine mai simplă, mai rapidă şi mai aproape de logica problemei de rezolvat. De exemplu, =SUM(costuri); =SUM(preturi); =SUM(profit) sunt mult mai semnificative din punct de vedere al analizei rentabilităţii decât =SUM(C5:C7); =SUM(D5:D7); =SUM(E5:E7) (vezi fig.nr. 3.3). În acest scop, grupului C5:C7 i se atribuie numele costuri, grupului D5:D7 i se atribuie numele preturi, iar grupului E5:E7 i se atribuie numele profit.

Funcţiile reprezintă formule predefinite în sistem. Utilizatorul trebuie doar să specifice numele funcţiei şi argumentele, respectând regulile de sintaxă. Numărul şi natura argumentelor depind de tipul funcţiei: matematice, logice, financiare, speciale, statistice, pentru baze de date, pentru date calendaristice etc. În fig. nr. 3.3. s-a exemplificat utilizarea funcţiei statistice SUM. În locul funcţiei =SUM(C5:C7) se putea folosi şi formula: =C5+C6+C7.

La fel ca limbajele de programare din generaţiile anterioare, programele de calcul tabelar dispun de comenzi şi macro-comenzi prin care se pot defini şi declanşa anumite operaţiuni sau parametri (inserare de linii, coloane, căsuţe etc.; stabilire parametri de format; gestionare ferestre de afişare etc.).

Comenzile permit declanşarea unor operaţiuni în foaia de calcul şi sunt desemnate prin cuvinte cheie. Comenzile sunt grupate în meniuri şi submeniuri cu mai multe niveluri. În versiunile sub MS-DOS se utilizau, de obicei, meniuri tip linie. În versiunile sub Windows se utilizează meniuri derulante (vezi fig. nr. 3.4.). Concomitent se asigură posibilitatea folosirii rapide a comenzilor mai des întâlnite prin intermediul pictogramelor din liniile de instrumente afişate în partea superioară a ecranului. De asemenea, există şi posibilitatea definirii şi utilizării de linii de instrumente personalizate.

Page 23: Suport curs Sisteme anul II ECTS

Fig. nr. 3.4. Secvenţă din sistemul de comenzi EXCELFig. nr. 3.4. Secvenţă din sistemul de comenzi EXCEL

Tabelul nr. 3.1. Exemplu de macrou ExcelTabelul nr. 3.1. Exemplu de macrou ExcelEXCEL versiunea 7.0

'' Macro1 Macro' Macro recorded 02-12-00 by StEcon'Sub Macro1()

ActiveCell.FormulaR1C1 = "=NOW()"Selection.NumberFormat = "d-mmm-

yy"Selection.Columns.AutoFit

End Sub

Macro-comenzile (macro-urile) sunt similare instrucţiunilor şi comenzilor din limbajele de programare clasice şi permit descrierea grupurilor de operaţiuni repetitive. În acest fel nu mai este necesară repetarea comenzilor ci doar apelarea modulelor de program realizate. Modulele de program poate fi asociate unor combinaţii de taste, unor obiecte sau pot fi organizate în meniuri şi submeniuri similare celor oferite de sistem. Primele versiuni ale programelor de calcul tabelar utilizau un limbaj de macro-uri asemănător limbajelor de asamblare (se bazau pe mnemonice obţinute din iniţialele comenzilor). Ultimele versiuni folosesc ca limbaj de macro-uri un limbaj evoluat (ex. EXCEL foloseşte limbajul Visual Basic for Applications). În plus oferă şi posibilitatea înregistrării automate a macro-urilor. În tabelul 3.1 se exemplifică un modul de program pentru inserarea datei calendaristice în EXCEL.

Dacă iniţial programele de calcul tabelar se bazau doar pe utilizarea facilitaţilor oferite de foile de calcul, pe măsura evoluţiei ele au devenit instrumente software integrate. Asfel un program de calcul tabelar integrează, în general, instrumente destinate următoarelor lucrări:

• definirea modelelor în foile de calcul;• reprezentarea grafică a datelor din modelele definite;• crearea şi editarea de obiecte grafice (Drawing toolbar);• baze de date (liste);• definirea de programe, utilizând tehnica macro-urilor;

Page 24: Suport curs Sisteme anul II ECTS

• instruire sau facilităţi de tip Help;• navigare Web;• import/export de date de la/către alte programe de calcul tabelar sau SGBD-uri.

Sistemul de ajutor

La fel ca majoritatea aplicaţiilor din categoria 4GL, programele de calcul tabelar se învaţă lucrând. În cazul Excel, se oferă asistenţă interactivă extinsă, îmbunătăţită de la o versiune la alta. Astfel, utilizatorul are 3 alternative pentru a obţine rapid informaţia solicitată (vezi şi fig. nr. 3.5):

• căutare în indexul interactiv (meniul Help, opţiunea Contents and Index);

• formularea unei întrebări (meniul Help, opţiunea Microsoft Excel Help sau Office Assistant din linia de instrumente);

• obţinerea de informaţii despre elementele afişate pe ecran (meniul Help, opţiunea What’s this sau butonul Help contextual din linia de instrumente).

Fig. nr. 3.5. Linia de instrumente Standard. Butoanele HelpFig. nr. 3.5. Linia de instrumente Standard. Butoanele Help

Comanda Contents and Index din meniul Help deschide fereastra Help Topics, în care sunt incluse 3 categorii de comenzi, grupate în 3 pagini:

• Contents afişează informaţii grupate în funcţie de acţiunile întreprinse (crearea unei foi de calcul, exportul de date, formatarea căsuţelor ş.a.m.d.);

• Index afişează o listă a tuturor operaţiunilor, comenzilor şi opţiunilor Excel, în ordine alfabetică. Este posibilă deplasarea directă în cadrul listei prin tastarea uneia sau mai multor litere sau a cuvintelor căutate;

• Find permite căutarea în toate resursele Help a unor cuvinte cheie specifice, definite de utilizator.

O modalitate mai prietenoasă de a obţine informaţii interactiv

este dialogul cu asistentul (Office Assistant), care se poate apela din meniul Help, din linia de instrumente sau prin apăsarea tastei F1 (cu menţiunea că, prin opţiunea utilizatorului, tasta F1 poate fi asociată şi comenzii Contents and Index din meniul Help).

Page 25: Suport curs Sisteme anul II ECTS

În toate produsele Microsoft Office asistentul apare sub numele Clippit, iar forma de prezentare este cea din imaginea alăturată. Dialogul cu asistentul arată ca în fig. nr. 3.6. Utilizatorul va formula întrebarea şi o va specifica în caseta text, după care va lansa comanda Search. Office Assistant înlocuieşte facilităţile de ajutor Answer Wizard şi Tip Wizard din versiunile anterioare Excel.

Fig. nr. 3.6. Dialogul cu asistentul în EXCELFig. nr. 3.6. Dialogul cu asistentul în EXCEL

În fine, utilizatorul poate afla explicaţii despre ceea ce este afişat pe ecran folosind sistemul de help contextual, care se apelează din meniul Help (opţiunea What’s this), din linia de instrumente sau prin combinaţia Shift-F1.

La apelarea acestei opţiuni cursorul

îşi modifică aspectul, ataşându-i-se un semn de întrebare. Dacă se doresc explicaţii asupra semnificaţiei unui element de pe ecran, se plasează indicatorul mouse-ului pe elementul respectiv şi se execută clic. Este exemplificată alături o astfel de explicaţie, pentru comanda asociată butonului Format Painter din linia de instrumente standard.

Trebuie precizat ca help-ul contextual rămâne activ până la selectarea unui element pentru care se doresc explicaţii. El mai poate fi dezactivat prin apăsarea tastei Esc sau prin clic pe butonul corespunzător din linia de instrumente.

O variantă a help-ului contextual este Tooltip prin care se afişează numele comenzilor asociate butoanelor din liniile de instrumente de pe ecran atunci când indicatorul mouse-ului este poziţionat pe un buton. Această opţiune (Show Tooltips) poate fi activată sau inhibată din meniul View, Toolbars.

Page 26: Suport curs Sisteme anul II ECTS

Puncte forte ale programelor de calcul tabelar

Programele de calcul tabelar reprezintă instrumentul ideal de lucru în domeniile în care sunt de efectuat calcule multiple şi de întocmit rapoarte sub diferite forme. Domeniul gestiunii întreprinderilor este un domeniu privilegiat din acest punct de vedere. Larga răspândire a programelor de calcul tabelar este susţinută de următoarele puncte forte:

(i) recalcularea automată a rezultatelor formulelor şi funcţiilor;(ii) simulările;(iii) rearanjarea automată a liniilor/coloanelor după actualizare;(iv) posibilităţi de afişare a datelor în diferite formate;(v) implementarea de funcţii financiare, statistice, speciale etc.;(vi) posibilităţi de automatizare a unor sarcini;(vii) instrumente de lucru orientate către utilizatorul final.(viii) posibilităţi de personalizare a modelelor definite.Recalcularea automată a rezultatelor formulelor şi funcţiilor oferă posibilitatea

vizualizării rapide a influenţei modificării conţinutului căsuţelor referite. De reţinut că efectul recalculării este vizibil numai dacă la scrierea formulelor şi funcţiilor nu s-au folosit constante. Formulele şi funcţiile pot fi oricât de complexe, ele pot face referinţă la căsuţe care la rândul lor conţin alte formule sau funcţii. De asemenea, funcţiile pot avea ca argumente alte funcţii. În acest fel modelele definite pot deveni destul de complexe. Recalcularea automată determină ca atunci când se modifică valoarea unei căsuţe care este referită în anumite formule sau funcţii, imediat se va modifica şi rezultatul dat de aceste formule sau funcţii.

Simulările. Simulările au ca punct de plecare recalcularea automată prezentată mai sus. Programele de calcul tabelar sunt considerate sisteme suport pentru decizii de nivel elementar, ca instrumente de analiză şi previziune la îndemâna oricărui manager. Orice formulă sau funcţie permite obţinerea de răspunsuri rapide la întrebări de tipul: CE-AR FI DACĂ? (What If?). Folosind datele din fig. nr. 3.1 să ne punem întrebarea: "Care ar fi profitul actualizat dacă indicele de inflaţie ar fi 1.25?" Dar dacă indicele de inflaţie ar fi 1.10? Răspunsul îl obţinem imediat în coloana G dacă în căsuţa F3 introducem pe rând valorile: 1.25; 1.10.

Există şi posibilitatea construirii de modele de simulare mai complexe prin tehnici cum sunt: tabele de simulare cu una sau mai multe variabile şi formule, căutare rezultat final (Goal Seek), utilizarea funcţiei de rezolvare (Solver), gestiunea scenariilor, simulări pe bază de grafice etc.

Rearanjarea automată a liniilor/coloanelor după actualizare. După operaţiunile de inserare sau ştergere de linii şi sau coloane, sistemul face automat renumerotarea acestora şi actualizarea adreselor de căsuţe utilizate în formule şi funcţii. Astfel utilizatorul este scutit de sarcina verificării modelului actualizat.

Page 27: Suport curs Sisteme anul II ECTS

Afişarea datelor în diferite formate. Programele de calcul tabelar lucrează cu 2 tipuri de date: numerice şi tip şir de caractere.

Datele de tip şir de caractere pot fi aliniate la stânga, la dreapta sau la centrul căsuţei. Versiunile noi permit formatarea datelor ca în procesoarele de texte (modificarea fontului; asocierea de atribute - bold, italic, underline etc.; modificarea mărimii fonturilor; scrierea textului pe mai multe rânduri în aceeaşi căsuţă, definirea şi utilizarea stilurilor etc.).

Datele numerice au un format implicit (General), ce poate fi modificat oricând de către utilizator, cum se va arăta în continuare. Câteva din formatele utilizate sunt expuse mai jos:

• Number - afişare în virgulă fixă, cu sau fără delimitarea grupurilor de 3 cifre printr-un caracter special (spaţiu, punct, virgulă), cu sau fără zecimale (ex. 43,750.00);

• Scientific - afişare în format ştiinţific (virgulă mobilă) (ex. 4.38E+04);• Text - afişarea şi tratarea oricărei valori ca un text (şir de caractere);• Percentage - afişarea numărului în format procentual (înmulţeşte valoarea din

căsuţă cu 100 şi afişează semnul %) (ex. 0.2333 va fi afişat 23.33%);• Date - afişează valoarea numerică din căsuţă în formatul de dată calendaristică

cerut.În Excel, meniul Format, grupează comenzile pentru formatare astfel: la nivel de

căsuţă/grup de căsuţe (opţiunea Cells), de rând (Row) sau coloană (Column) ori la nivelul întregii foi de calcul (Sheet). Sunt incluse de asemenea opţiuni pentru utilizarea formatelor predefinite (Autoformat), pentru formatarea condiţională, doar a anumitor căsuţe (Conditional formatting) şi pentru aplicarea de stiluri (Style).

Fig. nr. 3.7. Linia de instrumente FormattingFig. nr. 3.7. Linia de instrumente Formatting

Cel mai adesea, utilizatorii preferă lansarea comenzilor de formatare din linia de instrumente (vezi fig. nr. 3.7), după ce au selectat în prealabil căsuţa/grupul de căsuţe care se formatează. Dacă linia de instrumente Formatting lipseşte de pe ecran, afişarea se face prin selectarea acesteia după lansarea comenzii View, Toolbars. Butoanele pentru atributele fontului sunt de tip comutator (activare/inhibare), iar la cele pentru aliniere, utilizatorul poate selecta doar unul, corespunzător tipului de aliniere dorit. Butoanele care

Page 28: Suport curs Sisteme anul II ECTS

sunt urmate de simbolul arată posibilitatea de a deschide o listă ascunsă, ce conţine mai

multe opţiuni.Stabilirea formatului de afişare a datelor. În funcţie de tipul datei, se poate stabili

un mod de afişare diferit de cel implicit. Lista formatelor disponibile este prezentată în fig. nr. 3.8, într-o fereastră de dialog ce se afişează la comanda Format, Cells, pagina Number. Pentru fiecare categorie din listă, trebuie definite opţiuni specifice, cum ar fi numărul de zecimale, utilizarea separatorului pentru grupurile de 3 cifre, semnul monetar (la formatul Currency), modul de specificare a datei calendaristice sau orei etc.

Fig. nr. 3.8. Fereastra de dialog Format Cells Fig. nr. 3.8. Fereastra de dialog Format Cells

În mod implicit, în Excel, marca zecimală este punctul, iar separarea grupurilor de 3 cifre se face prin virgulă (vezi fig. nr. 3.8).

Formatul Text este utilizat atunci când se doreşte ca anumite date să fie tratate ca texte. Odată stabilit acest format, numerele înscrise în căsuţele respective nu vor putea fi utilizate în relaţii de calcul, iar revenirea la formatul numeric presupune o procedură ceva mai complicată, nu doar o simplă modificare a formatului.

În cazul în care se lucrează cu date numerice speciale, cum ar fi numerele de telefon sau codurile poştale, se poate utiliza categoria de format Special, prin care datele rămân de tip numeric, dar se afişează corespunzător (spre exemplu, zero-urile nesemnificative, care de obicei nu se afişează, vor fi afişate).

Un utilizator îşi poate defini formate de afişare proprii, specifice cerinţelor sale. Aşa cum se observă în fig. nr. 3.9, ultima categorie de format se intitulează Custom şi permite crearea de noi formate. Există şi o listă de formate predefinite, dintre care utilizatorul poate alege sau pe care le poate modifica, iar dacă nici unul nu corespunde cerinţelor, acesta poate defini un format nou. Se vor utiliza coduri prin care se va indica modul de afişare a datei respective. Fig. nr. 3.9 exemplifică un format definit de utilizator, în care s-a cerut afişarea împreună cu valoarea numerică, a textului “mil. lei”.

Page 29: Suport curs Sisteme anul II ECTS

Fig. nr. 3.9. Fereastra de dialog pentru definirea unui format propriu Fig. nr. 3.9. Fereastra de dialog pentru definirea unui format propriu

Fig. nr. 3.10. Fereastra de dialog pentru alegerea unui format predefinitFig. nr. 3.10. Fereastra de dialog pentru alegerea unui format predefinit

Folosirea formatelor predefinite pentru liste/tabele. După selectarea zonei care conţine datele se va selecta din meniul Format, comanda Autoformat, care afişează lista formatelor predefinite. Trebuie precizat că la aplicarea unui astfel de format, Excel analizează zona selectată şi aplică formatele în funcţie de conţinut, identificând zona de antet, cea de total sau subtotaluri. De asemenea, este posibil să se aplice doar anumite aspecte ale formatului predefinit (vezi fig. nr. 3.10), mai precis cele selectate de utilizator (implicit, sunt selectate toate). Dacă se doreşte renunţarea la un format predefinit, se va selecta din nou zona respectivă şi se va alege din lista formatelor opţiunea None.

Formatarea cu ajutorul stilurilor. Excel oferă posibilitatea utilizării stilurilor pentru formatare, prin comanda Format, Styles. Utilizatorii pot aplica un stil existent, pe care îl pot eventual adapta cerinţelor lor, modificând doar unele aspecte (font, aliniere, format de afişare etc.), folosind opţiunea Modify (vezi fig. nr. 3.11).

Page 30: Suport curs Sisteme anul II ECTS

Fig. nr. 3.11. Fereastra de dialog StyleFig. nr. 3.11. Fereastra de dialog Style

Un format stabilit pentru o căsuţă poate fi copiat pentru a formata la fel şi alte căsuţe. Se va utiliza comanda Format Painter din linia de instrumente Standard, care se alege după selectarea căsuţei care are formatul ce se va copia. Se execută apoi clic pe căsuţa în care se copie formatul respectiv.

Formatarea condiţională (selectivă) se referă la formatarea doar a acelor date care îndeplinesc condiţiile specificate prin comanda Format, Conditional Formatting, lansată după selectarea căsuţelor ce se formatează.

În fig. nr. 3.12 s-a exemplificat un raport asupra vânzărilor dintr-o perioadă, în care s-au pus în evidenţă facturile neîncasate. Pentru a obţine această evidenţiere, s-a selectat zona E5:E12, după care s-a lansat comanda arătată mai sus, precizând condiţia care trebuie îndeplinită şi formatul dorit pentru zona selectată. Aşa cum se observă în fig. nr. 3.13, se alege opţiunea Formula Is şi se precizează condiţia (=$E5=0), iar apoi se alege formatul dorit (opţiunea Format, Pattern, Color Orange).

Fig. nr. 3.12. Exemplu formatare condiţionalăFig. nr. 3.12. Exemplu formatare condiţională

Page 31: Suport curs Sisteme anul II ECTS

Fig. nr. 3.13. Definirea unui format condiţional. Fig. nr. 3.13. Definirea unui format condiţional. Exemplu 1Exemplu 1

Un alt exemplu de formatare selectivă, pornind de la acelaşi caz, este evidenţierea facturilor care au valori mai mari de 1000000 lei. În acest caz se va selecta doar zona D5:D12, iar la comanda de formatare (vezi fig. nr. 3.14) se va alege opţiunea Cell Value Is, operatorul “greater than or equal to” (mai mare sau egal), se va specifica valoarea şi apoi se va alege formatul dorit pentru valorile care îndeplinesc condiţia (Format, Font, Bold, Underline).

De precizat că prin opţiunea Add>> se adaugă încă o condiţie în funcţie de care se va face validarea (se pot include maximum 3 condiţii), iar prin opţiunea Delete se poate elimina o condiţie.

Fig. nr. 3.14. Definirea unui format condiţional. Exemplu 2 Fig. nr. 3.14. Definirea unui format condiţional. Exemplu 2

Implementarea de funcţii financiare şi statistice este un alt atu al programelor de calcul tabelar. Numărul de funcţii variază în funcţie de versiune. Toate programele de calcul tabelar au implementate funcţiile statistice standard (AVERAGE - medie aritmetică; COUNT - contorizare; MAX - determinare maxim; MIN - determinare minim; STDEV - abatere medie pătratică; VAR - dispersie). În plus, există funcţii statistice pentru baze de date, foarte utile în analize economice. Funcţiile financiare pot fi împărţite în: funcţii pentru analize economico-financiare, funcţii pentru calculul amortizării, funcţii pentru calculul anuităţilor, alte funcţii financiare. Unele versiuni dispun de asistenţi de funcţii (Function Wizard, Formula Pallete) care încorporează paşii de parcurs în utilizarea funcţiei.

Posibilităţile de automatizare a sarcinilor se concretizează în crearea şi utilizarea de module de program prin intermediul macro-urilor. Astfel prelucrările repetitive pot fi aplicate rapid şi eficient, fiind necesară definirea lor o singură dată. Limbajul de macro-uri este uşor de utilizat şi constituie un instrument util la dispoziţia celor interesaţi. În

Page 32: Suport curs Sisteme anul II ECTS

versiunile mai recente ale programelor de calcul tabelar există şi posibilitatea înregistrării automate a macro-urilor.

Instrumentele de lucru orientate către utilizatorul final se întâlnesc la toate programele de calcul tabelar. Sunt oferite de cele trei module de bază: foaia de calcul, baza de date, modulul grafic. Utilizatorul poate lucra în acelaşi timp cu toate cele trei module, deşi la primele programe de calcul tabelar nu permiteau, de exemplu, integrarea graficelor în foaia de calcul. Graficele sunt extrem de uşor de realizat. După introducerea datelor în foaia de calcul, cu ajutorul meniului corespunzător, utilizatorul defineşte un grafic în forma dorită (liniar, histogramă, diagramă de structură sau combinaţii între acestea). Orice modificare a datelor în foaia de calcul este reflectată imediat de modificarea graficului, iar în ultimele versiuni este posibilă şi modificarea inversă. Noile versiuni de programe de calcul tabelar oferă peste 100 de tipuri de grafice posibile. În plus, utilizatorul este ajutat de un asistent în realizarea graficelor (Chart Wizard).

Posibilităţile de personalizare a modelelor definite sunt date de combinarea facilităţilor prezentate anterior. În plus se pot defini module de dialog, linii de instrumente, se pot adăuga elemente grafice proprii sau importate etc.

CARACTERISTICI ALE PRINCIPALELOR PROGRAME DE CALCUL TABELAR

Începuturile programelor de calcul tabelar

Ideea programelor de calcul tabelar datează din 1977 şi îi aparţine lui Dan Bricklin, pe atunci student la Harvard Business School şi programator pasionat. El analizează lucrul cu date organizate în tabele, în care să fie posibilă recalcularea automată a formulelor atunci când sunt modificate căsuţele care conţin elemente ale formulelor respective. Ideea sa s-a concretizat în primul program de calcul tabelar, realizat în colaborare cu Bob Frankston de la Institutul de Tehnologie din Massachussetts. Programul se numea VisiCalc (VISIble CALCulator) şi era scris pentru calculatoarele Apple II. El a fost lansat pe piaţă în octombrie 1979 de firma Personal Software creată de cei doi, care a devenit apoi Visicorp. Visicalc a însemnat o revoluţie în lumea PC-urilor, fiind un program extrem de uşor de utilizat, la îndemâna oricărui utilizator. Deşi iniţial erau doar versiuni electronice ale creionului, hârtiei şi calculatorului de buzunar, mai târziu s-a dovedit că spreadsheet-urile înseamnă mult mai mult, oferind posibilităţi de formatare diverse, de reprezentare grafică, de organizare a datelor în baze de date şi chiar de realizare de programe. Visicalc a fost considerat primul best seller în materie de software pentru PC-uri. A fost disponibil doar pentru calculatoarele Apple II.

În 1980, compania Microsoft lansează proiectul “hârtia electronică”. Însărcinat cu acest proiect era Charles Simonyi, care a coordonat echipa de programatori. Noutatea

Page 33: Suport curs Sisteme anul II ECTS

principală pe care a susţinut-o Simonyi a fost introducerea meniurilor. Rezultatul a fost programul MULTIPLAN, lansat în 1982. Avea 64 de linii şi 256 de coloane şi putea lega între ele mai multe centralizatoare electronice. Revistele de specialitate au susţinut MULTIPLAN, acordându-i calificativul “Excelent” la mai toate categoriile şi considerându-l uşor de învăţat, uşor de folosit şi foarte puternic. InfoWorld i-a acordat titlul de “programul anului 1982”. În 1983, compania Apple îşi declară sprijinul oficial pentru acest program. Microsoft era sigură de succes, însă aşteptările i-au fost înşelate...

În 1982, Mitch Kapor, un programator cu un background foarte interesant (disk-jokey, profesor de meditaţie transcedentală) înfiinţează compania Lotus Development şi lansează în 1982 produsul 1-2-3 pentru calculatoarele IBM-PC. Principalul element de noutate adus era transformarea numerelor în grafice. Kapor a lucrat foarte inteligent, alocând mai multe milioane de dolari pentru publicitate - în presă au apărut articole încă înainte de lansarea programului. Prezent la conferinţa COMDEX unde a avut loc lansarea produsului 1-2-3, Charles Simonyi de la Microsoft a recunoscut imediat superioritatea noului program. Imediat după lansare, Lotus a primit comenzi de peste 1 milion de dolari. În 1983, 1-2-3 a detronat atât pe VisiCalc, cât şi pe Multiplan, instalându-se pe primul loc, unde urma să rămână foarte mult timp.

PRINCIPII DE REALIZARE A APLICAŢIILOR INFORMATICE ÎN PROGRAMELE DE CALCUL TABELAR

Reguli de respectat în proiectarea şi utilizarea aplicaţiilor în programele de calcul tabelar

Programele de calcul tabelar reprezintă instrumente orientate către utilizatorii finali, care oferă modele şi tehnici de lucru apropiate de modalităţile curente de rezolvare a problemelor. Astfel proiectarea aplicaţiilor este la latitudinea utilizatorilor. Dar realizarea de aplicaţii eficiente şi interschimbabile solicită respectarea anumitor reguli13.

R1. În formule şi funcţii se recomandă să nu se folosească ca argumente constantele. În principiu, orice formulă sau funcţie reprezintă un potenţial model de simulare. Utilizarea constantelor ca argumente elimină, din start, acest potenţial. Reutilizarea modelului va solicita de fiecare dată rescrierea formulelor sau funcţiilor. Dacă modelul de rezolvare presupune utilizarea unor constante, acestea vor fi plasate în căsuţe distincte şi vor fi apelate prin referinţe absolute.

R2. Dimensionarea mărimii liniilor şi coloanelor se face în funcţie de datele cele mai semnificative şi nu de construcţiile cu rol explicativ din antetul de linie sau coloană. Se recomandă ca această operaţiune să fie efectuată la terminarea construirii modelului în

131 Oprea, D., Airinei, D., Meşniţă, G., Dumitriu, F., Aplicaţii cu macro-uri LOTUS 1-2-3, Editura Policromia, Piatra Neamţ, 1995, pp. 36-39.

Page 34: Suport curs Sisteme anul II ECTS

foaia de calcul. În mediul WINDOWS dimensionarea mărimii liniilor şi coloanelor se poate realiza rapid cu ajutor mouse-ului sau prin comenzi de tip Format/Row/AutoFit sau Format/Column/AutoFit.

R3. Pentru lucrările frecvente (facturi, ordine de plată, state de salarii etc.) se recomandă utilizarea "şabloanelor" oferite de sistem (Spreadsheet Solutions) sau definite de utilizatori în fişiere de tip Template (cu extensia .xlt în Excel).

R4. Deplasarea în foaia de calcul, din raţiuni de eficienţă, nu se va realiza exclusiv prin utilizarea tastelor de deplasare tip săgeată (←;↑;→;↓). Enumerăm, mai jos, câteva soluţii eficiente de deplasare în foaia de calcul:

• utilizarea de taste care permit deplasarea mai rapidă: PgUp; PgDown; Home;

• utilizarea de combinaţii de taste:• CTRL + → sau ←;↑;↓;

• END + → sau ←;↑;↓;

• utilizarea butoanelor de deplasare, respectiv a liniilor de deplasare verticale sau orizontale din fereastra de vizualizare a foii de calcul;

• inserarea de butoane suplimentare pentru deplasarea rapidă de la o zonă la alta din foaia de calcul;

• utilizarea comenzilor de tip GOTO sau GOTO Special combinate cu atribuirea de nume diferitelor zone din modelul de rezolvare

R5. Când se lucrează cu foi de calcul multidimensionale se recomandă atribuirea de nume semnificative fiecărei foi, în raport de componentele modelului de rezolvare (ex. în loc de Sheet1, Sheet2, Sheet3, …, Sheetn se vor folosi denumiri cum ar fi: Meniuri, Help,

Preluare facturi, Centralizare, Tiparire etc. ).R6. Înainte de a trece la utilizarea modelului realizaţi salvarea acestuia, prin

comenzi de tip SAVE, într-un fişier cu nume adecvat lucrării (Facturi, Stat_sal, Casa, Devize etc.). În caz contrar, riscaţi să pierdeţi tot ce aţi lucrat dacă la execuţie sistemul se blochează sau intervine un incident neprevăzut. Pentru mai multă siguranţă, realizaţi chiar salvări periodice. Dacă lucraţi pe un calculator utilizat de mai multe persoane, atunci e recomandabil să aveţi un subdirector propriu în care să depozitaţi toate lucrările.

R7. Componentele modelului de rezolvare se dispun în cascadă în cadrul aceleiaşi foi de calcul sau în foi de calcul diferite. În acest fel se evită alterarea componentelor modelului de rezolvare la actualizarea unora prin inserarea de linii sau coloane.

R8. La terminarea construirii modelului se trece la protejarea tuturor zonelor definite în afară de zonele rezervate datelor de intrare. Dacă zonele sunt protejate nu se mai pot face nici un fel de modificări asupra conţinutului. În acest mod se evită riscul deteriorării voluntare sau involuntare a modelului de rezolvare. Protecţia şi asigurarea confidenţialităţii aplicaţiilor poate fi asigurată şi prin tehnica ascunderii de linii sau coloane. De asemenea, pentru a preveni supraîncărcarea registrului de lucru sau pentru a

Page 35: Suport curs Sisteme anul II ECTS

proteja anumite date, şi foile de calcul pot fi ascunse. Se utilizează în acest scop comenzile Hide/Unhide corespunzătoare elementelor respective (Sheet, Row, Column).

R9. Pentru lucrările mai complexe se recomandă utilizarea macro-comenzilor prin limbajul de macro-uri disponibil. Prelucrările repetitive sunt astfel încorporate în programe ce se apelează ori de câte ori sunt necesare de efectuat. Majoritatea versiunilor din programele de calcul tabelar oferă facilităţi de înregistrare automată a macro-urilor.

R10. Nu reinventaţi roata!!! Foarte multe din problemele economice sunt deja rezolvate în programele de calcul tabelar, trebuie doar să furnizaţi corect argumentele unor funcţii sau să apelaţi la modulele de asistenţă/ajutor (ex.: calculul dispersiei - VAR; calculul mediei aritmetice - AVERAGE; determinarea trendului unui fenomen - TREND; determinarea ratei interne de rentabilitate - IRR etc.)

CATEGORII DE FUNCŢII DIN PROGRAMELE DE CALCUL TABELAR ŞI POSIBILITĂŢI DE UTILIZARE ÎN SIMULĂRI

Funcţiile din programele de calcul tabelar reprezintă formule des utilizate, prin care se poate executa o mare varietate de calcule, în mod rapid şi comod. Se pot efectua calcule financiare, matematice, statistice, cu şiruri de caractere, cu date calendaristice etc. De asemenea, funcţiile se pot folosi pentru crearea de expresii condiţionale sau pentru efectuarea de căutări în tabele. Alături de formule şi macro-uri, funcţiile asigură performanţele sporite programelor de calcul tabelar, mai ales în simulări.

Deoarece fiecare program de calcul tabelar, respectiv fiecare versiune, are anumite particularităţi ne vom opri la o prezentare de principiu a pricipalelor categorii de funcţii din EXCEL, cu particularizare pe versiunea 8 (Excel 97).

Sintaxa funcţiilor

În Excel funcţiile sunt precedate de semnul =. Pentru utilizatorii de Lotus, Excel asigură compatibilitatea, astfel că se pot introduce funcţiile precedate de caracterul @. Fiecare funcţie are o anumită sintaxă. Dacă sintaxa funcţiei nu este respectată, sistemul nu o poate interpreta, fiind generat un mesaj de eroare (vezi subcapitolul 3.4.5).

Funcţiile din Excel au următorul format general: FUNCŢIE( ) sau

FUNCŢIE(argument_1,argument_2,...,argument_n)FUNCŢIE reprezintă numele funcţiei.argument_1,argument_2,...,argument_n reprezintă datele pe care funcţia le va

utiliza în calcule. Dacă funcţia are în sintaxă argumente, acestea trebuie să fie incluse în paranteze rotunde. Chiar dacă argumentele lipsesc, se vor preciza parantezele.

Page 36: Suport curs Sisteme anul II ECTS

Argumentele precizează obiectul funcţiilor, acele valori utilizate de funcţii pentru a realiza operaţiuni sau calcule specifice. Ele se exprimă prin adresele căsuţelor (referinţele) ce conţin valorile, prin nume atribuite căsuţelor sau prin constante. De exemplu, în funcţia SUM(C10..C15), argumentul C10..C15 precizează că se vor aduna valorile întâlnite în grupul de căsuţe C10..C15. Argumentele dintr-o funcţie pot fi: valori numerice, şiruri de caractere, referinţe de căsuţe şi condiţii.

Observaţii:Observaţii:• Când argumentul este o valoare numerică se poate utiliza un număr, o formulă (expresie) de tip numeric, un nume de grup sau adresa unei căsuţe care conţine un număr sau o formulă de tip numeric.• Când argumentul este de tip şir de caractere se poate utiliza o constantă tip şir de caractere (orice secvenţă de litere, cifre sau alte caractere, delimitată la stânga şi la dreapta de caracterul " (ghilimele)), o formulă de tip şir, un nume de grup sau adresa unei căsuţe care conţine un şir sau o formulă de tip şir.• Când argumentul este o referinţă de căsuţă, se poate utiliza un nume de grup sau o adresă.• Când argumentul este o condiţie se foloşeste o expresie logică (o formulă în care se utilizează un operator logic (de comparare) sau un nume de grup ori o adresă de căsuţă care conţine o expresie logică). Totuşi, ca argument tip condiţie se pot folosi expresii numerice sau de tip şir, valori numerice, constante de tip şir sau referinţe de căsuţe.

Operatorii specifică tipul de calcule care se execută asupra argumentelor. Sunt 4 tipuri de operatori:

• aritmetici (+, -, /, *, %, ^);• de comparare (<, >, =, <>, <=, >=);• de tip şir (&, utilizat pentru concatenarea şirurilor de caractere);• de tip referinţă (caracterul “:”, utilizat pentru specificarea grupurilor de căsuţe,

caracterul ”,” utilizat pentru reuniune, caracterul “spaţiu” pentru intersecţia a două zone din foaia de calcul).

Tabelul nr. 3.7. Exemple de utilizare a operatorilorTabelul nr. 3.7. Exemple de utilizare a operatorilorCalculul soldului final al unui cont de activ

Presupunem că: în D11 este rulajul debitor, în E11 este rulajul creditor, iar în C8 este soldul iniţial. Formule de calcul:=C8+D11-E11=SUM(C8,D11,-E11)

Afişarea numelui şi prenumelui într-o singură căsuţă

Presupunem că: în B4 este numele, în C4 este prenumele. Pentru a afişa în formatul “prenume nume”: =C4&” “&B4Pentru a afişa în formatul “nume, prenume”: =B4&”, “&C4

Sporirea unei valori numerice cu 5%

Presupunem că valoarea respectivă este în C6. Sunt 2 variante:1. dacă folosim o constantă: =C6*(1+5%)2. dacă procentul este în căsuţa B2: =C6*(1+$B$2)

Combinarea unui text cu data calendaristică

Presupunem că data documentului este stocată în E4. Se scrie:=”Incheiat la data de “&TEXT(E4,”d-mmm-yyyy”)

Calculul totalului în Presupunem că avem lista facturilor dintr-o lună şi dorim să

Page 37: Suport curs Sisteme anul II ECTS

funcţie de o valoare aflată într-o altă zonă

aflăm valoarea totală a facturilor emise în data de 24 ianuarie 2000 (zona B2:B96 conţine data facturii, iar zona E2:E96 valoarea). Formula de calcul:=SUMIF(B2:B96,”01/24/2000”,E2:E96)

Calculul unei valori totale în funcţie de rezultatul evaluării a 2 condiţii

Presupunem că dispunem de lista prezentată mai sus şi dorim să obţinem suma facturilor din săptămâna 24-29 ianuarie. Formula:=SUM(IF(B2:B96>=DATEVALUE(”01/24/2000”),IF(B2:B96<=DATEVALUE(”01/29/2000”), E2:E96)))Obs.:Obs.: aceasta este o formulă de tip array şi trebuie introdusă prin combinaţia CTRL+SHIFT+ENTER

Numărarea apariţiilor unei valori

Presupunem că din lista de mai sus dorim să aflăm numărul facturilor emise pe data de 25 ianuarie 2000. Se scrie:=COUNTIF(B2:B96,”01/25/2000”)

Reguli sintactice de bazăLa introducerea funcţiilor trebuie să ţinem cont de următoarele recomandări:

1) Numele funcţiei trebuie să fie precedat de semnul =.2) Indiferent de tipul literelor folosite la tastarea numelui funcţiei, mici sau

mari, sistemul le va afişa cu majuscule. 3) Nu se lasă spaţii între numele funcţiei şi argumente şi nici între argumente.4) Întotdeauna includeţi argumentele funcţiilor între paranteze rotunde.5) Când o funcţie devine argument al altei funcţii, fiecare dintre ele trebuie să

aibă argumentele cuprinse între paranteze. Exemplu: =IF(SUM(A1..A5)>0,B1,B2).

6) Dacă sunt mai multe argumente, acestea se separă prin , (virgulă) sau ; (punct şi virgulă), corespunzător delimitatorului stabilit.

7) O funcţie poate avea ca argument o altă funcţie.8) Sistemul atribuie valoarea zero tuturor căsuţelor libere ale căror adrese sunt

folosite ca argumente în funcţiile financiare, logice sau matematice.

Observaţie:Observaţie:Pentru a vizualiza toate formulele/funcţiile dintr-o foaie de calcul se foloseşte combinaţia de taste CTRL+` (vezi fig. nr. 3.18). Prin aceeaşi combinaţie de taste se revine la afişarea valorilor calculate.

Fig. nr. 3.18. Afişarea formulelor într-o foaie de calculFig. nr. 3.18. Afişarea formulelor într-o foaie de calcul

Categorii de funcţii

În Excel, funcţiile sunt grupate în 11 categorii:

Page 38: Suport curs Sisteme anul II ECTS

(i) Funcţiile statistice: execută calcule statistice asupra unor serii de date;(ii) Funcţiile financiare: realizează calcule economice pentru împrumuturi,

anuităţi sau fluxuri financiare;(iii) Funcţiile logice: calculează rezultatul unei expresii condiţionale;(iv) Funcţiile matematice şi trigonometrice: execută o mare varietate de calcule

complexe cu valori numerice;(v) Funcţiile de căutare: identifică o valoare într-un tabel sau într-o listă;(vi) Funcţiile pentru date calendaristice şi timp: calculează valorile ce reprezintă

data calendaristică şi timpul; (vii) Funcţiile pentru baze de date: efectuează calcule statistice şi interogări asupra

bazelor de date; (viii) Funcţiile tip şir de caractere: lucrează cu şiruri (texte, expresii tip şir) sau

constante tip şir;(ix) Funcţiile tehnice: efectuează calcule tehnice;(x) Funcţiile de informare oferă informaţii despre căsuţe şi despre mediul de

lucru;(xi) Funcţiile definite de utilizator (User Defined Functions): execută calcule

specifice aplicaţiilor fiecărui utilizator.

Funcţii statistice

În Excel 8 sunt definite 78 de funcţii statistice. Funcţiile statistice clasice sunt prezentate în tabelul 3.8. De regulă, aceste funcţii lucrează doar cu valori numerice, dar sunt definite şi variante ale acestor funcţii care extind tipurile de date acceptate. Spre exemplu: funcţia AVERAGE acceptă doar valori numerice, iar funcţia AVERAGEA acceptă şi date de tip logic sau text (în mod similar, sunt definite funcţiile COUNTA, MAXA, MINA etc.).

Tabelul nr. 3.8. Principalele funcţii statisticeTabelul nr. 3.8. Principalele funcţii statistice

Funcţia Rolul funcţieiAVERAGE Calculează media aritmetică a valorilor din listă. COUNT Numără căsuţele cu un conţinut diferit de spaţiu din lista indicată. MAX Determină valoarea maximă dintr-o listă de valori. MIN Determină valoarea minimă dintr-o listă de valori.STDEV Calculează abaterea medie pătratică a valorilor dintr-o listă. SUM Însumează valorile dintr-o listă. VAR Calculează dispersia valorilor dintr-o listă.

Funcţii financiare

În Excel 8 sunt definite 58 de funcţii financiare. O parte dintre ele nu sunt prezente în configuraţia standard. Ele pot fi instalate prin programul SETUP, din care se alege

Page 39: Suport curs Sisteme anul II ECTS

componenta Analysis Toolpak. Semnificaţiile argumentelor ce se regăsesc cel mai frecvent în funcţiile financiare, cu excepţia celor pentru calculul amortizării, sunt:

• valoarea viitoare (future value – fv), adică valoarea investiţiei sau împrumutului după ce au fost efectuate toate plăţile;

• numărul de perioade (number of periods – nper) care arată numărul total de plăţi sau de perioade (ani, luni, zile) ale investiţiei;

• vărsământul (payment – pmt), adică suma plătită periodic pentru o investiţie sau un împrumut;

• valoarea prezentă (present value – pv) care se referă la valoarea actuală a încasărilor sau plăţilor ce se vor efectua în viitor;

• rata dobânzii (rate);• tipul (type) care precizează intervalul de timp la care se efectuează

plata (spre exemplu, la începutul lunii sau la sfârşitul lunii). Dacă acest argument lipseşte sau are valoarea 0 se consideră că plata se face la sfârşitul perioadei, iar dacă are valoarea 1, plata se face la începutul perioadei.

Observaţie:Observaţie:În scrierea funcţiilor financiare, sumele care reprezintă plăţi sunt introduse ca valori negative, iar sumele care reprezintă încasări ca valori pozitive.

Tabelul nr. 3.9. Principalele funcţii financiareTabelul nr. 3.9. Principalele funcţii financiare

Funcţia Rolul funcţieiAmortizare imobilizăriDDB Calculează amortizarea imobilizărilor după metoda degresivă

(Double-Declining Balance depreciation).SLN Calculează amortizarea imobilizărilor după metoda liniară

(Straight-LiNe depreciation).SYD Calculează amortizarea imobilizărilor după metoda însumării

cifrelor anilor (Sum-of-the-Years'-Digits).AnuităţiFV Determină valoarea viitoare (Future Value) a unei investiţii

curente, pe bază de vărsăminte egale şi la o rată constantă a dobânzii.

PMT Determină suma care trebuie plătită periodic, pentru rambursarea unui împrumut.

PV Determină valoarea prezentă (Present Value) a unei investiţii curente, pe bază de vărsăminte viitoare egale.

Obiective financiareNPER Determină numărul de perioade necesare pentru obţinerea unei

valori viitoare, pe baza unor vărsăminte egale şi o rată a dobânzii constantă.

RATE Determină procentul de dobândă pentru o anuitate.PreviziuniIRR Determină rata internă de rentabilitate (Internal Rate of

Return), pentru o serie de venituri (încasări) generate de o investiţie.

Page 40: Suport curs Sisteme anul II ECTS

Funcţia Rolul funcţieiNPV Calculează valoarea actualizată netă prezentă (Net Present

Value) a unei serii de încasări viitoare generate de o investiţie.

Recomandări pentru utilizarea funcţiilor financiare:• Într-o funcţie financiară, durata (numărul de perioade) şi rata dobânzii trebuie să

se refere la aceeaşi unitate de timp.• Rata dobânzii poate fi exprimată fie în procente, fie în valori zecimale. Dacă s-a

folosit forma procentuală, automat se realizează conversia în format zecimal.• În funcţiile financiare care lucrează cu anuităţi se iau în considerare vărsăminte

egale, efectuate la intervale regulate de timp. O anuitate obişnuită este o anuitate în care plata se face la sfârşitul fiecărui interval de timp.

Funcţii logice

Principalele funcţii logice sunt prezentate în tabelul 3.10. Funcţiile AND, OR, NOT înlocuiesc operatorii logici similari. Ele evaluează una sau mai multe condiţii precizate ca argumente şi returnează valoarea logică adevărat sau fals.

Tabelul nr. 3.10. Funcţii logiceTabelul nr. 3.10. Funcţii logice

Funcţia Rolul funcţieiAND Dă valoarea logică 1 (adevărat) dacă toate condiţiile evaluate sunt

adevărate (operatorul “şi logic” – conjuncţie).FALSE Dă valoarea logică 0 (fals).IF Codifică structura de control alternativă. Dacă se îndeplineşte

condiţia se execută o acţiune, în caz contrar se execută altă acţiune.NOT Preschimbă valoarea logică a argumentului (negaţie).OR Dă valoarea logică 1 (adevărat) dacă una dintre condiţiile evaluate

este adevărată (operatorul “sau logic” – disjuncţie).TRUE Dă valoarea logică 1 (adevărat).

Funcţii matematice

Principalele funcţii din această categorie sunt incluse în tabelul 3.11.

Tabelul nr. 3.11. Principalele funcţii matematiceTabelul nr. 3.11. Principalele funcţii matematice

Funcţia Rolul funcţieiGeneraleABS Calculează valoarea absolută.EXP Calculează e

x, x fiind un anumit exponent.

INT Determină valoarea întreagă a unei valori numerice.LN Calculează logaritmul natural (în baza e).LOG Calculează logaritmul în baza 10 (zece).MOD Calculează restul împărţirii a două valori numerice.RAND Generează un număr aleator cuprins între 0 şi 1.RANDBETWEEN Generează un număr aleator dintr-un interval specificat.ROMAN Converteşte cifrele arabe în cifre romane.ROUND Rotunjeşte o valoare pentru un număr dat de poziţii zecimale.

Page 41: Suport curs Sisteme anul II ECTS

Funcţia Rolul funcţieiSQRT Calculează rădăcina pătrată dintr-un număr pozitiv.TrigonometriceACOS Calculează arccosinus.ASIN Calculează arcsinus.ATAN Calculează arctangentă.COS Calculează cosinus.PI Dă valoarea numărului PI (3.1415926536).SIN Calculează sinus.TAN Calculează tangenta.

Funcţii de căutare

Aceste funcţii sunt utilizate pentru căutarea de valori în cadrul listelor sau în baze de date, sau pentru identificarea referinţelor unei căsuţe. Cele mai importante funcţii de căutare sunt prezentate în tabelul 3.12.

Tabelul nr. 3.12. Principalele funcţii de căutareTabelul nr. 3.12. Principalele funcţii de căutare

Funcţia Rolul funcţieiADRESS Construieşte adresa unei căsuţe specificate prin numărul rândului şi

al coloanei, având precizat şi tipul de adresă dorit printr-un argument numeric (1 sau lipsă pentru adresă absolută, 4 pentru adresă relativă etc.).Exemplu: ADRESS(2,3) dă $C$2.

CHOOSE Alege o valoare numerică dintr-o listă de valori numerice sau de şiruri, pe baza unui index numeric.Exemplu: CHOOSE(2, “Ianuarie”,”Februarie”, “Martie”) va da valoarea “Februarie”

COLUMN Oferă numărul coloanei corespunzător adresei specificate ca argument.Exemplu: COLUMN(C2) dă valoarea 3.

HLOOKUP Efectuează cautări, după un criteriu specificat, într-un grup de căsuţe şi dă ca rezultat conţinutul căsuţei situate la intersecţia coloanei în care s-a identificat elementul căutat şi a liniei specificate ca argument. Căutarea se face pe linie.

INDEX Efectuează cautări, într-un grup de căsuţe sau într-un tablou (array) şi dă ca rezultat conţinutul căsuţei situate la intersecţia liniei şi coloanei ale căror numere au fost specificate ca argumente.

ROW Oferă numărul rândului corespunzător adresei specificate ca argument.Exemplu: ROW(A15) dă 15.

VLOOKUP Efectuează cautări, după un criteriu specificat, într-un grup de căsuţe şi dă ca rezultat conţinutul căsuţei situate la intersecţia liniei în care s-a identificat elementul căutat şi a coloanei specificate ca argument. Căutarea se face pe coloană.

Funcţii pentru date calendaristice şi timp

Tabelul nr. 3.13. Funcţii pentru date calendaristice şi timpTabelul nr. 3.13. Funcţii pentru date calendaristice şi timp

Page 42: Suport curs Sisteme anul II ECTS

Funcţia Rolul funcţieiDATE Calculează un număr corespunzător datei calendaristice specificate

prin valori numerice ale anului, lunii şi zilei. Exemplu: pentru 8 martie 1999 funcţia DATE(99,3,8) dă valoarea 36227 (format General) sau 03/08/99 (format Date).

DATEVALUE Converteşte şiruri care reprezintă data calendaristică în numărul echivalent. Exemplu: DATEVALUE("8-Mar-99") dă numărul 36227.

DAY Calculează numărul zilei din lună pe baza argumentului care se referă la numărul de zile trecute de la 1 ianuarie 1900 sau a datei specificată ca un şir de caractere. Exemplu: DAY(36227) sau DAY(“03/08/99”) dă valoarea 8.

MONTH Calculează numărul lunii din an pe baza argumentului care se referă la numărul de zile trecute de la 1 ianuarie 1900 sau a datei specificată ca un şir de caractere. Exemplu: MONTH(36227) sau MONTH(“03/08/99”) dă valoarea 3.

YEAR Determină anul calendaristic, exprimat prin două sau patru cifre, conform formatului selectat, pe baza argumentului care se referă la numărul de zile trecute de la 1 ianuarie 1900 sau a datei specificată ca un şir de caractere. Exemplu: YEAR(36227) dă valoarea 1999.

HOUR Pornind de la un număr subunitar sau de la ora specificată ca un şir de caractere, determină ora corespunzătoare din zi. Exemplu: HOUR(0.437615) dă valoarea 10, deoarece 0.437615 este asociat la ora 10:30:10 AM; HOUR(“5:15 PM”) dă valoarea 17.

MINUTE Pornind de la un număr subunitar sau de la ora specificată ca un şir de caractere, determină minutul corespunzător din oră. Exemplu: MINUTE(0.437615) dă valoarea 30, deoarece 0.437615 este asociat la ora 10:30:10 AM; MINUTE(“18:15:00”) dă 15.

NETWORKDAYS Calculează numărul de zile lucrătoare dintre două date calendaristice specificate cu ajutorul funcţiei DATEVALUE.

NOW Determină valoarea care corespunde datei şi orei curente, după orologiul calculatorului. Exemplu: NOW() dă valoarea 36227.437615 (format General) sau 3/8/99 10:30 (în format Date).

SECOND Pornind de la un număr subunitar sau de la ora specificată ca un şir de caractere, determină secunda corespunzătoare din minut. Exemplu: SECOND(0.437615) dă valoarea 10, deoarece 0.437615 este asociat la ora 10:30:10 AM.

TIME Calculează un număr (cu valori între 0 şi 0.9999999) corespunzător timpului scurs din zi, specificat prin valorile numerice ale orei, minutului şi secundei. Exemplu: pentru 10:30:10 AM, funcţia TIME(10,30,10) dă valoarea 0.437615.

TIMEVALUE Converteşte şiruri care reprezintă ora în numărul echivalent. Exemplu: TIMEVALUE("10,30,10") dă numărul 0.437615.

TODAY Determină valoarea care corespunde datei curente, după orologiul calculatorului. Este o pseudofuncţie calendaristică, întrucât se realizează de sistem prin funcţiile INT(NOW()). Exemplu: TODAY() dă valoarea 36227 (în format General) sau 3/8/99 (în format Date).

Recomandări pentru utilizarea funcţiilor calendaristice:• Numărul asociat de Excel, versiunea pentru Windows, datei

calendaristice reprezintă un număr întreg din intervalul 1 - 2958525. Astfel, se

Page 43: Suport curs Sisteme anul II ECTS

atribuie zilei de 1 ianuarie 1900 valoarea 1, zilei de 1 februarie 1900 valoarea 32, iar ultima valoare corespunde zilei de 31 decembrie 9999.

• Numărul asociat de Excel orei exacte reprezintă un număr zecimal din intervalul 0.000000 – 0.99999999. Astfel, se atribuie orei 0 (ce marchează începutul unei noi zile) valoarea 0.000000, orei 12 (amiază) valoarea 0.500000, iar pentru 23:59:59 valoarea 0.99999999.

• De regulă, Excel recunoaşte o dată calendaristică şi o afişează în formatul specific, dar pentru ca data sau ora să apară într-un alt format se foloseşte comanda Format, Cells.

• Chiar dacă funcţia NOW nu are argumente, este obligatorie prezenţa parantezelor – altfel se obţine eroarea #NAME?.

Funcţii pentru baze de date

Aceste funcţii sunt asemănătoare cu funcţiile statistice (vezi tabelul 3.14).

Tabelul nr. 3.14. Principalele funcţii pentru baze de dateTabelul nr. 3.14. Principalele funcţii pentru baze de date

Funcţia Rolul funcţieiDAVERAGE Calculează media aritmetică a valorilor unui câmp dintr-o bază de

date, doar pentru înregistrările care îndeplinesc un anumit criteriu.DCOUNT Numără căsuţele ce conţin valori numerice dintr-un câmp al bazei

de date, după un anumit criteriu.DGET Determină valoarea asociată câmpului specificat din înregistrarea

pentru care condiţia este adevărată. Dacă nici o înregistrare nu verifică acea condiţie, se afişează #VALUE!, iar dacă mai multe înregistrări o verifică se afişează #NUM!.

DMAX Determină valoarea maximă dintr-un câmp al bazei de date, după un anumit criteriu.

DMIN Determină valoarea minimă dintr-un câmp al bazei de date, după un anumit criteriu.

DSTDEV Calculează abaterea medie statică a valorilor dintr-un câmp al bazei de date, după un anumit criteriu.

DSUM Însumează valorile dintr-un câmp al bazei de date, după un anumit criteriu.

DVAR Calculează dispersia valorilor dintr-un câmp al bazei de date, după un anumit criteriu.

Recomandări pentru utilizarea funcţiilor tip bază de date:• Toate funcţiile pentru baze de date trebuie să aibă trei argumente: grup de

intrare, câmp, criteriu.• Grupul de intrare trebuie să conţină baza de date. Poate fi o adresă sau un

nume atribuit zonei care conţine baza de date. În exemplul din fig. nr. 3.19, grupul de intrare (baza de date) este în zona A1:D7.

• Câmpul este precizat prin numărul de ordine al coloanei pe care se găseşte. Numărul de ordine corespunde poziţiei ocupate de coloana care conţine

Page 44: Suport curs Sisteme anul II ECTS

câmpul, în zona de intrare. Primei coloane i se asociază numărul 1, celei de-a doua, numărul 2 ş.a.m.d. Dacă numărul de ordine este o valoare mai mare decât numărul de câmpuri, funcţia va afişa mesajul de eroare #VALUE!. În exemplul dat, grupul de intrare este alcătuit din 4 câmpuri, identificate prin numere de la 1 la 4. Câmpul poate fi precizat şi prin numele său, scris între ghilimele (în loc de 4 se poate scrie “Salariu”).

• Criteriul este zona în care se specifică restricţiile de selecţie. O zonă de criterii trebuie să includă numele câmpului (aşa cum este specificat în grupul de intrare) şi condiţia de selecţie. Condiţia se introduce în căsuţa de sub cea cu numele câmpului. Criteriul poate fi adresa zonei sau un nume atribuit acesteia. În exemplul de mai jos (fig. nr. 3.19) sunt definite 3 criterii: F1:F2, G3:H4 (condiţia 1 şi condiţia 2), H6:H7.

Fig. nr. 3.19. Funcţii statistice pentru bazele de date. ExempleFig. nr. 3.19. Funcţii statistice pentru bazele de date. Exemple

Fig. nr. 3.20. Funcţii statistice pentru bazele de date. Scrierea formulelorFig. nr. 3.20. Funcţii statistice pentru bazele de date. Scrierea formulelor

Funcţii tip şir de caractere

Cu ajutorul funcţiilor de tip şir de caractere se poate lucra cu date de tip text în formule sau funcţii. Spre exemplu, se poate determina lungimea unui şir de caractere sau se poate converti un text în majuscule. Spre exemplu, formula de mai jos exemplifică utilizarea funcţiei TODAY ca argument al funcţiei TEXT, ce transformă data calendaristică în text (vezi rezultatul în fig. nr. 3.21):

=”Raport de activitate la data “&TEXT(TODAY( ),”dd-mmm-yyyy”)

Fig. nr. 3.21. Utilizarea funcţiei TEXTFig. nr. 3.21. Utilizarea funcţiei TEXT

Tabelul nr. 3.15. Tabelul nr. 3.15. Funcţii tip şir de caractereFuncţii tip şir de caractere

Page 45: Suport curs Sisteme anul II ECTS

Funcţia Rolul funcţieiCHAR Dă caracterul care are codul ASCII specificat ca argument.

Exemplu: CHAR(65) dă A.CLEAN Şterge caracterele netipăribile din şirul specificat.CODE Dă codul ASCII al primului caracter din şirul specificat. Exemplu:

CODE(“Alfa”) afişează A.CONCATENATE

Uneşte mai multe şiruri de caractere într-unul singur.

EXACT Dă valoarea logică 1 (adevărat) dacă cele două şiruri sunt identice şi valoarea logică 0 (fals) dacă cele două şiruri sunt diferite.

FIND Calculează poziţia primului caracter din şirul căutat care a fost identificat în şirul în care se face căutarea.

LEFT Extrage primele n caractere din şirul precizat ca argument.LEN Calculează numărul de caractere din şirul precizat ca argument.LOWER Converteşte toate literele, din şirul precizat ca argument, în litere

mici.MID Extrage un anumit număr de caractere, din interiorul unui şir

precizat ca argument.PROPER Converteşte prima literă, din fiecare cuvânt al şirului precizat ca

argument, în literă mare, iar restul literelor din cuvânt le converteşte în litere mici.

REPT Realizează duplicarea şirului specificat ca argument de un număr precizat de ori.

REPLACE Înlocuieşte caracterele specificate ale unui şir cu alte caractere.RIGHT Extrage ultimele n caractere din şirul precizat ca argument.SEARCH Este similară cu FIND, doar că, spre deosebire de aceasta, nu face

diferenţa între litere mici şi litere mari.TEXT Transformă o valoare numerică într-un şir, folosind formatul

specificat. TRIM Elimină spaţiile de la începutul şi sfârşitul şirului specificat.UPPER Converteşte toate literele, din şirul precizat ca argument, în litere

mari.VALUE Converteşte un şir ce reprezintă un număr într-o valoare numerică.

Funcţii de informare

Funcţiile de informare oferă date privind conţinutul căsuţelor sau mediul de lucru.

Page 46: Suport curs Sisteme anul II ECTS

Tabelul nr. 3.16. Principalele funcţii de informareTabelul nr. 3.16. Principalele funcţii de informare

Funcţia Rolul funcţieiCELL Dă informaţii despre conţinutul, formatul datelor sau poziţia

(numărul rândului sau coloanei) unei căsuţe. Exemple: CELL(“contents”,A2) afişează “Nume şi prenume”CELL(“row”,D31) afişează 31CELL(“format”,A2) afişează G (adică formatul General)

COUNTBLANK Numără căsuţele goale (libere) dintr-un grup de căsuţe precizat.INFO Oferă informaţii asupra mediului de lucru curent. Argumentul este

un text predefinit care se referă la tipul de informaţii solicitat. Exemplu: INFO(“directory”) afişează numele directorului curent; INFO(“release”) numele versiunii Excel utilizate etc.

ISBLANKISERRISLOGICALISNAISNONTEXTISNUMBERISREFISTEXTISEVENISODD

Funcţiile IS… confirmă/infirmă tipul datei specificat prin numele funcţiei, având corespunzător rezultatul TRUE (Adevărat) sau FALSE (Fals). Spre exemplu, ISBLANK dă valoarea TRUE dacă respectiva căsuţă este goală sau FALSE în caz contrar. În mod similar, ERR se referă la valori de tip eroare, LOGICAL la valori logice, NA la eroarea #N/A, NONTEXT la valori diferite de text, NUMBER la valori numerice, REF la referinţe, iar TEXT la şiruri de caractere. ODD şi EVEN indică prezenţa de valori impare sau pare. Argumentele acestor funcţii pot fi adresa căsuţei sau o valoare concretă.

TYPE Returnează tipul datei sub forma unui număr. Astfel, dacă este o valoare numerică se afişează 1, dacă este text se afişează 2 ş.a.m.d.

Funcţii tehnice

Funcţiile tehnice se împart în 3 categorii:• funcţii ce lucrează cu numere complexe;• funcţii pentru conversia numerelor între diverse sisteme de numeraţie

(binar, zecimal, octal, hexazecimal);• funcţii pentru conversia valorilor între diverse sisteme metrice (spre

exemplu, din km în mile).Trebuie precizat că aceste funcţii nu sunt prezente în versiunea standard, fiind

incluse în componenta Analysis ToolPak, ce poate fi instalată prin SETUP.

Funcţii definite de utilizator

În aplicaţiile în care trebuie efectuate calcule complexe, pentru care nu sunt definite funcţii Excel, utilizatorul îşi poate defini propriile funcţii, folosind limbajul VBA (Visual Basic for Applications).

Page 47: Suport curs Sisteme anul II ECTS

FACILITĂŢI GRAFICE ÎN PROGRAMELE DE CALCUL TABELAR

Principalele tipuri de grafice

Orice program de calcul tabelar oferă cinci tipuri fundamentale de grafice: liniar, histogramă, xy (nor de puncte), zonal, diagramă de structură (cerc). În fapt, numărul tipurilor de grafice este mai mare, iar dacă se au în vedere şi subtipurile, utilizatorul are la dispoziţie câteva zeci de variante de grafice. Sub mediul de lucru Windows, pentru majoritatea tipurilor de grafice există atât reprezentare 2 D, cât şi 3 D.

Column Graph (histogramă) constă dintr-o serie de bare verticale, fiecare reprezentând o valoare numerică. Asigură reprezentarea seriilor dinamice de date. Un tip particular de histogramă este cea orizontală (bar graph), care permite o mai bună reprezentare comparativă a valorilor, în detrimentul reprezentării dinamice (în timp). Ambele tipuri de histograme au şi varianta de reprezentare tridimensională, precum şi varianta stivă, în care se evidenţiază relaţia dintre parte şi întreg.

Line Graph (grafic liniar) reprezintă grafic evoluţia, în timp, a unuia sau a mai multor fenomene sau procese. Fiecare linie reprezintă o categorie de date, iar fiecare punct de pe linie reprezintă o valoare a unei date la un moment dat. Sunt utile pentru urmărirea trendului şi pentru previziuni.

Pie Chart (diagrama de structură) este folosit pentru a evidenţia, prin sectoare de cerc, ponderea fiecărei componente a mulţimii reprezentate. Pentru a scoate şi mai mult în relief anumite elemente, se poate apela la facilitatea de expandare a sectoarelor de cerc. Un mod asemănător de reprezentare a unei structuri este graficul de tip doughnut (grafic de tip inel). Acesta prezintă avantajul că poate reprezenta mai multe serii de date.

Area Graph (grafic zonal) realizează ca şi cel liniar reprezentarea evoluţiei în timp, dar indică mai clar magnitudinea schimbărilor în timp.

XY Graph (grafic de tip XY sau nor de puncte) scoate în evidenţă corelaţiile existente între două şiruri de date numerice. Aceste grafice sunt redate prin linii, desenate în sensul dat de valorile de reprezentat ca puncte din grafic. Spre deosebire de graficele tip linie, cele de tip XY folosesc o scală numerică şi pe axa Ox. O variantă a acestui grafic este cel denumit bubble, în care punctele sunt înlocuite de cerculeţe, ale căror dimensiuni indică valoarea unei a treia variabile.

Pe lângă acestea, în programele de calcul tabelar se regăsesc şi alte tipuri particulare de grafice. Astfel, în Excel utilizatorul mai poate alege dintre următoarele tipuri:

• Radar, în care fiecare categorie reprezentată are propria axă, pornind din acelaşi punct central al diagramei;

Page 48: Suport curs Sisteme anul II ECTS

• Surface, utilizat pentru a găsi combinaţiile optime dintre două seturi de date. Este o reprezentare tridimensională, asemănătoare cu o hartă topografică, prezentând în culori diferite datele ce se regăsesc în acelaşi interval de valori;

• High-low-close, utilizat adesea pentru prezentarea fluctuaţiilor de preţuri pe piaţa bursieră (vezi cele trei componente: cel mai mare, cel mai mic şi preţul la închidere), dar şi pentru reprezentarea datelor ştiinţifice (de exemplu, a fluctuaţiilor de temperatură). Există şi variante ale acestui tip de grafic, precum Open-high-low-close sau Volume-high-low-close;

• Cone, Cylinder, Pyramid, care realizează reprezentări tridimensionale ale valorilor numerice în formă de con, cilindru sau piramidă, având ca atu un aspect deosebit faţă de un grafic clasic, cum este cel de tip Column.

La toate acestea se adaugă tipurile de grafice personalizate sau definite de utilizator. Acesta are posibilitatea de a adăuga în lista de opţiuni un tip nou de grafic, derivat din cele oferite de sistem, care va apare în listă la utilizările viitoare, sub un nume stabilit de utilizator.

Aşa cum se observă din fig. nr. 3.25, utilizatorul poate selecta pentru un grafic unul dintre tipurile standard sau, dacă doreşte unul dintre tipurile personalizate, va executa clic pe Custom Types şi va selecta din listă opţiunea dorită.

Fig. nr. 3.25. Tipuri de grafice EXCEL Fig. nr. 3.25. Tipuri de grafice EXCEL

Procedura generală de creare a graficelor

Orice grafic se creează pe baza datelor din foile de calcul, cu menţiunea că valorile reprezentate grafic vor fi actualizate ori de câte ori se modifică datele din foaia de calcul sursă. Majoritatea programelor de calcul tabelar au un asistent (în Excel se numeşte Chart

Page 49: Suport curs Sisteme anul II ECTS

Wizard), care îl îndrumă pe utilizator în crearea graficului. Procedura generală de lucru este structurată în mai mulţi paşi, care se parcurg cu ajutorul comenzilor Next şi Back (înainte/înapoi) şi care pot fi sistematizaţi astfel:

• alegerea tipului de grafic (vezi subcapitolul 3.5.1 şi fig. nr. 3.25);• selecţia zonei de căsuţe care conţine datele de exprimat grafic (dacă nu

a fost selectată înainte de lansarea Wizard-ului) şi precizarea informaţiilor despre dispunerea seriilor de date (pe linie/pe coloană), aşa cum se poate vedea în fig. nr. 3.26;

Observaţie:Observaţie:Este posibilă selectarea de zone neadiacente, dacă după selectarea primei zone, se menţine apăsată tasta CTRL în timp ce se selectează celelalte zone. Atenţie! Selecţiile neadiacente trebuie să formeze un dreptunghi.

Fig. nr. 3.26 Specificarea datelor de reprezentat graficFig. nr. 3.26 Specificarea datelor de reprezentat grafic

• specificarea opţiunilor pentru îmbunătăţirea graficului (vezi fig. nr. 3.27): titlu grafic (Titles), titluri şi format pentru axe (Axes), legendă (Legend), etichete pentru date (Date Labels), linii orizontale şi/sau verticale (Gridlines) etc.

Page 50: Suport curs Sisteme anul II ECTS

Fig. nr. 3.27. Definirea opţiunilor pentru personalizarea graficuluiFig. nr. 3.27. Definirea opţiunilor pentru personalizarea graficului

• indicarea poziţiei (locaţiei) graficului (vezi fig. nr. 3.28). Astfel, graficul poate fi:• un obiect inclus într-o foaie de calcul (embedded chart), care poate fi

plasat cu uşurinţă în orice zonă a acesteia, poate fi redimensionat după cerinţe şi poate fi copiat într-o altă aplicaţie (de exemplu, Word) prin mecanismul Clipboard;

• introdus într-o foaie independentă, denumită Chart Sheet.

Fig. nr. 3.28. Plasarea graficuluiFig. nr. 3.28. Plasarea graficului

• terminarea operaţiunilor prin selectarea butonului Finish.Aşa cum se observă şi în figurile de mai sus, utilizatorului îi este prezentat graficul

în fiecare etapă intermediară (într-o zonă de tip Preview), astfel că el poate mai uşor face modificări ale aspectelor care nu corespund dorinţelor sale. Se poate reveni oricând la etapele anterioare (butonul Back) pentru a realiza modificările dorite.

Fig. nr. 3.29. Linia de instrumente ChartFig. nr. 3.29. Linia de instrumente Chart

Fiecare componentă a graficului (seriile de date, axele, titlurile, legenda etc.) pot fi modificate individual după terminarea graficului. Fiecare dintre ele are definit un meniu cu comenzi specifice (numit meniu shortcut), ce se apelează prin clic dreapta. De asemenea, pentru modificarea unui grafic există linia de instrumente Chart, care se activează automat la selectarea graficului (vezi fig. nr. 3.29).

Page 51: Suport curs Sisteme anul II ECTS

Observaţie:Observaţie:Utilizatorul poate crea extrem de rapid, într-un singur pas, un grafic pentru datele selectate din foaia de calcul, folosind tipul implicit de grafic (Column, dacă nu a fost schimbat de utilizator). Pentru creare se apasă tasta F11 (pentru un grafic salvat într-o foaie Chart) sau butonul Default Chart (dacă lipseşte se poate adăuga prin View, Toolbars) din linia de instrumente, pentru un grafic inclus în foaia de calcul curentă.

Prezentăm în continuare câteva operaţiuni ce se pot efectua după realizarea unui grafic:

• modificarea aspectului graficului (tip, titluri, legendă, etichete, etc.), prin alegerea comenzilor corespunzătoare din linia de instrumente Chart sau din meniul de tip shortcut;

• adăugarea de noi date, modificând zona datelor (Data Range) sau utilizând comenzile Copy şi Paste;

• ştergerea unei serii de date din grafic (se apasă tasta Delete după selectarea seriei din grafic);

• protejarea graficului, împiedicând modificarea lui prin comanda Protection din meniul Tools;

• realizarea de simulări;• adăugarea unei linii de trend.

Page 52: Suport curs Sisteme anul II ECTS

CONCEPTE UTILIZATE ÎN STUDIUL BD ŞI AL SGBDCONCEPTE UTILIZATE ÎN STUDIUL BD ŞI AL SGBD

Organizarea datelor în fişiere, deşi este destul de utilizată, are o serie de neajunsuri care limitează eficienţa şi eficacitatea aplicaţiilor utilizator. Dintre acestea amintim redundanţa ridicată a datelor, lipsa integrării datelor, dependenţa datelor faţă de programele de aplicaţii, costul ridicat de întreţinere etc.

Redundanţa ridicată a datelor. Fişiere de date independente conţin o mulţime de date care se repetă. Aceleaşi date (exemplu: nume furnizor, adresa furnizor, cont la banca, etc.) sunt înregistrate şi stocate în mai multe fişiere ceea ce reclamă programe distincte pentru actualizarea fiecărui fişier. În plus duplicarea datelor conduce la un consum mare de memorie şi incoerenţă la trecerea datelor stocate dintr-un fişier în altul.

Sintetic efectele imediate ale acestui neajuns sunt:• gestionarea complexă a datelor;• actualizarea greoaie a datelor;• monopolizarea inutilă a spaţiului de memorie.

Neintegrarea datelor. Dispersia datelor în diverse fişiere independente complică accesul utilizatorilor la informaţiile cerute ad-hoc, necesitând crearea de programe particulare pentru extragerea datelor solicitate. În lipsa acestor programe, pentru obţinerea informaţiilor dorite utilizatorul procedează la extragerea manuală.

Dependenţa datelor de programe. Organizarea fişierelor, adresarea fizică în memorie şi programele de aplicaţii folosite pentru accesarea fişierelor sunt interdependente. Astfel, schimbările legate de dispunerea pe suportul de memorie, structura datelor şi modificarea înregistrărilor unui fişier presupun modificări în toate programele în care este referit fişierul respectiv. Întreţinerea acestor programe este dificilă putând genera incoerenţe în fişierele de date. Incoerenţa şi lipsa de integritate sunt extrem de dificil de corectat deoarece nu există un “dicţionar” central pentru urmărirea definirii datelor.

Costul de întreţinere. Exploatarea fişierelor independente presupune un cost ridicat atât în ceea ce priveşte resursele informatice (hardware şi software) cât şi cele legate de personalul utilizat.

Toate aceste probleme care apar în sistemul ce prelucrează fişiere îşi găsesc rezolvarea prin folosirea bazelor de date şi a sistemelor de gestiune a bazelor de date. Datele stocate în baze de date sunt independente atât faţă de programele de aplicaţii care le folosesc, cât şi faţă de tipul de memorie utilizat.

Sintetizând cele de mai sus rezultă că principalele “beneficii” ale bazelor de date constau în14:

141 Saleh, I., Les bases de données relationnelles, Edition Hermes, Paris, 1995, p. 303

Page 53: Suport curs Sisteme anul II ECTS

• integrarea în aceeaşi structură a tuturor datelor pertinente ale unui sistem;• gestionarea acestor date printr-un soft specializat (SGBD);• oferirea unei vederi parţiale asupra ansamblului de date, necesară fiecărui

utilizator;• asigurarea partajării datelor între diferiţi utilizatori.

Baza de date reprezintă un ansamblu integrat de înregistrări sau de fişiere reunite şi structurate în mod logic. În felul acesta datele stocate anterior în fişiere independente /distincte sunt concentrate într-un fond comun de înregistrări cu posibilitatea utilizării lor în numeroase aplicaţii.

Conceptul de bază de date a apărut în 1964 în cadrul primului raport CODASYL prezentat la lucrările unei Conferinţe pe probleme de limbaje de gestiune a datelor “Development and Management of Computer – centered data-base”. La această conferinţă a fost lansată ideea organizării datelor prin intermediul unui fişier de descriere globală numit dicţionar de date care are menirea de a asigura independenţa programelor faţă de date şi a datelor faţă de programe15.

Accesul utilizatorului la informaţiile despre structura unei anumite baze de date se realizează prin intermediul unui software de aplicaţii care oferă un ajutor apreciabil gestiunii datelor, în general, şi bazelor comune de date, în special, numit dicţionar de date.

Prin intermediul dicţionarului de date, după caz, sistemul stochează informaţii referitoare la:

• relaţiile bazei de date (denumire, descriere etc.);• atributele relaţiei (denumire, domenii, tip, chei primare şi secundare);• utilizatorii care au drepturi de acces la o anumită relaţie;• optimizarea bazei de date (prin fişiere index, tehnica clustering etc.).

În principal, un dicţionar îndeplineşte următoarele funcţii:• definirea şi gestionarea datelor elementare ale întreprinderii (cod, denumire,

atribute, reprezentare etc.);• definirea şi gestionarea ansamblurilor de date;• definirea şi gestionarea relaţiilor, de dependenţă sau ierarhice, dintre date;• descrierea utilizării datelor din trei puncte de vedere:

• administrativ: care sunt posturile de lucru ce vor apela datele şi care va fi utilizarea acestor date?

• logic: care sunt fişierele sau bazele de date în care intră elementele descrise ?;

• organic: în care unităţi de prelucrare vor fi utilizate elementele descrise?Legătura dintre aceste funcţii este prezentată în figura nr. 4.1.

151 Lungu, I. ş.a., Baze de date – Organizare, proiectare şi implementare, Editura All, Bucureşti, 1995, p.13

Page 54: Suport curs Sisteme anul II ECTS

Fig.4.1 Elementele dicţionarului de dateFig.4.1 Elementele dicţionarului de date

(Prelucrare după Lesca, H., Peaucelle, J. L., Elements d’informatique applique a la gestion, Edition Dalloz, Paris, 1988, p. 139)

Abordarea corectă a bazelor de date presupune şi tratarea următoarelor elemente: entitatea (articol, înregistrare logică), atributele (caracteristică, câmp) şi valoarea /realizare16.

Prin entitate se înţelege un obiect concret sau abstract (operaţie economică, mijloc economic etc.) reprezentat prin proprietăţile sau însuşirile sale. Orice proprietate poate fi exprimată printr-o pereche atribut-valoare sau caracteristică-realizare. O entitate este identificată printr-un nume şi cuprinde, în general, mai multe valori sau realizări.

Atributul are rolul de a descrie însuşirile sau proprietăţile obiectului stabilind natura valorilor pe care acesta le poate lua.

Valoarea reprezintă mărimea ce se atribuie fiecărei caracteristici din cadrul unei entităţi. Reunite aceste elemente sunt prezentate într-un exemplu în tabelul nr. 4.1.

Tabelul nr. 4.1 Elemente specifice bazelor de dateTabelul nr. 4.1 Elemente specifice bazelor de dateEntitate Caracteristici (atribute) Realizări (valori)

PRODUS

Cod produsDenumire produsUnitate de masuraPret unitarCantitateValoareNr. FacturăData receptie

11112PantofiPer3500001003500000024521-12-1999

11116GhetePer55000010055000000214718-12-1999

O bază de date trebuie să satisfacă cinci condiţii esenţiale17:1. bună reprezentare a realităţii înconjurătoare; o bază de date trebuie să ofere

întotdeauna o imagine fidelă a realităţii prin informaţii fiabile şi actualizate;

161 Aceste elemente sunt numite diferit în literatura de specialitate - vezi Roşca, I., ş.a., Baze de date şi SGBD, Bucureşti, 1986; Lungu, I., ş.a., Baze de date – Organizare, proiectare şi implementare, Editura All, Bucureşti, 1995; Fotache, M., Baze de date relaţionale, Editura Junimea, Iaşi, 1997

171 Moréjon, J., Principes et conception d’un base de données relationnelle, Les Editions d’organisation, Paris, 1992, p. 20

Page 55: Suport curs Sisteme anul II ECTS

2. non-redundanţa informaţiei; informaţia conţinută în baza de date trebuie să fie unică din punct de vedere semantic şi fizic;

3. independenţa datelor faţă de prelucrări; datele constituie imaginea fidelă a lumii reale, programele de aplicaţii trebuind să fie concepute în raport cu această structură a datelor;

4. securitatea şi confidenţialitatea datelor; securitatea datelor trebuie asigurată prin proceduri fizice, iar confidenţialitatea prin proceduri care să împiedice accesul utilizatorilor neautorizaţi;

5. performanţe în exploatare; orice cerere de prelucrare trebuie să fie satisfăcută într-un timp convenabil utilizatorului, ceea ce presupune folosirea unor tehnici de optimizare pentru reducerea timpului de prelucrare.

O bază de date special concepută prin agregarea tuturor datelor unei întreprinderi în vederea sprijinirii procesului de fundamentare a deciziilor constituie aşa numitul depozit de date – data warehouse.

Ideea depozitelor de date nu este recentă, ea s-a conturat şi dezvoltat în anii ’90. William Inmon este cel care defineşte pentru prima oară termenul de data warehose.

Depozitul de date poate fi considerat ca un sistem de baze de date special conceput pentru analiza datelor şi fundamentarea deciziilor prin agregarea tuturor datelor întreprinderii. Depozitele de date sunt aşadar, enciclopedii informaţionale în care datele sunt introduse continuu, utilizatorul putându-le accesa în funcţie de necesităţi.

În depozitele de date se memorează următoarele tipuri de date:• date curente din sistemele operaţionale /tranzacţionale;• date de detaliu privind perioadele precedente (date din arhive);• date agregate necesare sprijinirii procesului decizional pe toate nivelurile

manageriale preluate din surse interne şi externe (baze de date publice, sondaje, date de prognoză etc.);

• metadate care asigură exploatarea depozitelor de date prin reguli de extragere şi conversie, reguli de agregare etc.

Spre deosebire de colecţiile de date utilizate în sistemul operaţional – orientate spre optimizarea şi siguranţa procesării datelor, datele din depozitul de date sunt organizate într-o manieră care să permită analiza lor. Rezultă că depozitul de date acoperă un orizont temporal mai mare, conţine atât date interne cât şi date externe şi este optimizat pentru a răspunde complexelor interogări ale unei game diversificate de utilizatori. Schematizat, fluxul datelor într-un depozit de date este prezentat în figura nr. 4.2.

În cazul depozitelor de date, prelucrările /exploatările (data mining) sunt bazate pe modele performante de selectare şi agregare a datelor conţinute.

Practica oferă trei soluţii de organizare a depozitelor de date18:

181 Florescu, V. ş.a. Baze de date, Editura Economică, Bucureşti, 1999, p. 32

Page 56: Suport curs Sisteme anul II ECTS

• la nivelul entităţii social-economice (data warehouse);• la nivelul unei structuri funcţionale: filială, departament, serviciu, birou (data

marts);• la nivelul evenimentelor elementare (tranzacţionale).

În implementarea unui depozit de date pot fi folosite mai multe variante:• implementarea unui sistem descentralizat în care datele sunt păstrate în unităţi

independente (data marts); aceste unităţi conţin date relevante pentru un anumit aspect al operaţiunilor derulate în entitatea social-economică;

• implementarea unei surse de date unice la care au acces utilizatorii din toate structurile funcţionale;

• implementarea unei surse de date centralizate la nivelul entităţii social-economice cu existenţa unor unităţi dependente (dependent data marts) care prezintă subseturi ale datelor (din depozitul central de date) ce au fost selectate şi organizate pe domenii de aplicaţii.

Baze de date operaţionale

Ştergere PrelucrareArhivare (data mining)Agregare

Fig. nr. 4.2 Fluxul datelor într-un depozit de dateFig. nr. 4.2 Fluxul datelor într-un depozit de date

Utilizarea depozitelor se concretizează în obţinerea unor rapoarte (la cerere sau pe baza unui abonament cu o anumită periodicitate), extragerea unor date pentru a fi utilizate în aplicaţii de birotică (programe de calcul tabelar, procesare de texte etc.), dar mai ales pentru realizarea unor aplicaţii specializate de analiză a datelor.

Principalul inconvenient al depozitului de date este dimensiunea sa enormă, de ordinul giga sau teraocteţilor, datorată înmagazinării datelor detaliate la cel mai analitic nivel.

Page 57: Suport curs Sisteme anul II ECTS

Segmentul de piaţă legat de depozitele de date are o rată anuală de creştere de circa 35%.

Pentru a putea fi exploatată de către utilizatori, o bază de date trebuie să aibă asociat un set de programe care să permită exploatarea raţională a datelor conţinute. Este vorba despre sistemul de gestiune a bazelor de date, denumit generic SGBD.

SGBD-ul este definit ca un ansamblu coordonat de programe care permite descrierea, memorarea, manipularea, interogarea şi tratarea datelor conţinute într-o bază de date. El trebuie, de asemenea, să asigure securitatea şi confidenţialitatea datelor într-un mediu multi-utilizator19.

Pentru a-şi îndeplini aceste funcţii SGBD-ul interacţionează cu structura bazei de date, sistemul de calcul, sistemul de operare, programele de aplicaţii şi utilizatorii constituindu-se banca de date. Se pot organiza bănci de date în toate sferele de activitate: baze de date bibliografice, de documentare statistică, evidenţe finanfiar-contabile şi bancare, diagnosticare şi informare medicală, rezervarea tichetelor de călătorie şi a locurilor în staţiunile turistice etc.

MODELE CONCEPTUALE DE STRUCTURARE ŞI ORGANIZARE A DATELOR ÎN BAZE DE DATE

Pentru descrierea structurii datelor unei baze de date şi a relaţiilor dintre acestea sunt folosite procedee formale, concretizate în modele conceptuale. Acestea se particularizează prin terminologia utilizată şi prin relaţiile dintre date.

Tipuri de relaţii şi structuri de reprezentare a relaţiilor în cadrul unei baze de date

Entităţile aceluiaşi sistem informaţional sunt rareori izolate unele de altele, ele antrenând, cel mai adesea, legături sau relaţii. Între datele diverselor tipuri de entităţi pot exista două categorii de legături sau relaţii. Prima priveşte relaţiile dintre datele aparţinătoare aceleiaşi entităţi, iar a doua se referă la relaţiile dintre mai multe entităţi care pot fi şi de tipuri diferite.

După numărul entităţilor care intră în legătură, relaţiile pot fi binare şi n-are. Relaţiile binare presupun existenţa unui domeniu, a unui codomeniu şi a unei

corespondenţe între entităţile acestora. În practica bazelor de date se disting patru tipuri de relaţii binare: 1-1, 1-n, n-1, n-n.

În relaţiile 1-1 (una-la-una) unei realizări din domeniu îi corespunde o realizare şi numai una din codomeniu (figura nr. 4.4).

191 Moréjon, J., Op. cit., p. 26

Page 58: Suport curs Sisteme anul II ECTS

X1X

X

2

.

.

n

YY

Y

1

2

.

.

n

Domeniu Codomeniu

X1

X2

YYYYY

1

2

. 3.

4

5

Domeniu Codomeniu

X1

X

X

2

3

Y

Domeniu Codomeniu

X1

X2

YYYY

1

2

. 3.

4

Domeniu Codomeniu

Fig. nr. 4.4 Relaţia de tip 1-1Fig. nr. 4.4 Relaţia de tip 1-1

În relaţiile 1-n (una-la-mai-multe) unei realizări din domeniu îi corespund 0, una sau mai multe realizări din codomeniu (figura nr. 4.5).

Fig. nr. 4.5 Relaţii de tip 1-nFig. nr. 4.5 Relaţii de tip 1-n

În relaţiile n-1 (mai-multe-la-una) mai multe înregistrări din domeniu corespund unei realizări din codomeniu. (figura nr. 4.6).

Fig. nr. 4.6 Fig. nr. 4.6 Relaţia n-1Relaţia n-1

În relaţiile n-m (mai-multe-la-mai-multe) unei realizări din domeniu îi corespund 0, una sau mai multe realizări din codomeniu, iar unei realizări din codomeniu îi corespund 0, una sau mai multe realizări din domeniu (figura nr. 4.7).

Fig. nr. 4.7 Fig. nr. 4.7 Relaţia n-mRelaţia n-m

Page 59: Suport curs Sisteme anul II ECTS

Relaţiile n-are presupun existenţa unei interdependenţe logice între realizările mai multor entităţi.

Mecanismul de selecţie şi de identificare a componentelor unei baze de date presupune existenţa unei structuri de date. Concret o structură de date reprezintă o colecţie de date între care s-au stabilit anumite relaţii. Structurile de date care au aceeaşi organizare şi sunt supuse prelucrărilor cu un grup de operatori de bază cu o semantică predefinită formează un anumit tip de structură.

Niveluri de abstractizare a datelor

Spre deosebire de fişiere în care datele erau organizate pe două niveluri logic şi fizic, pentru proiectarea bazelor de date sunt definite trei niveluri de abstractizare: conceptual, logic şi fizic.

Nivelul conceptual permite specificarea regulilor de gestiune pentru acoperirea întregii structuri a datelor şi satisfacerea cerinţelor tuturor utilizatorilor concomitent cu asigurarea unei redundanţe minime a datelor. Modelele utilizate sunt de natură semantică şi nu ţin seama de tehnicile ce vor fi utilizate la darea în exploatare a bazei de date.

Înainte de a realiza integrarea în schema conceptuală, pe acest nivel se procedează la elaborarea de modele parţiale sau vederi externe de date.

Nivelul logic permite descrierea structurii înregistrărilor logice în cadrul colecţiilor, adică a modului în care utilizatorii îşi creează structurile de date pentru propriile aplicaţii. Aceste structuri sunt orientate spre o clasă de soluţii fiind mai “informatice” şi ţin cont de tehnicile de optimizare folosite (căi de acces, volume, frecvenţă)20.

Nivelul fizic permite descrierea structurii sub care colecţiile de date se regăsesc efectiv pe suprafaţa de memorare (memorie internă şi/sau externă). La acest nivel se va trece de la descrierea logică la o descriere ce va utiliza concret posibilităţile sistemului de gestiune a bazelor de date.

Dintr-o altă perspectivă nivelul conceptual anterior poate fi divizat intr-un nivel extern pe care se definesc vederile externe propuse de utilizatori şi un nivel conceptual care dă viziunea globală sau de ansamblu. În acelaşi timp este posibilă regruparea nivelului logic şi fizic într-un nivel intern.

Legătura dintre aceste niveluri este prezentată în figura nr. 4.8.

202 Moréjon, J., Op. cit., pp. 22-23

Page 60: Suport curs Sisteme anul II ECTS

Fig. nr. 4.8. Niveluri de abstractizare a datelorFig. nr. 4.8. Niveluri de abstractizare a datelor

Modele de organizare a datelor în bazele de date

Un model este un ansamblu de concepte ce permite stabilirea reprezentării modului de percepere a lumii înconjurătoare. Acesta posedă, în general, un formalism grafic de reprezentare. În practică sunt disponibile două clase de modele:

1. modele care privesc reprezentarea la nivel conceptual, răspunzând preocupărilor semantice (modelul Entitate-Asociaţie, modelul binar, modelul reţea semantică etc.);

2. modele care privesc memorarea la nivel logic şi fizic răspunzând preocupărilor informatice propriu-zise (modelul relaţional, modelul reţea şi modelul ierarhic).

Modelele de date ajută la conceperea fizică a unei baze de date, inclusiv elaborarea programelor de aplicaţii, prin intermediul unor cadre logice numite scheme şi sub-scheme.

Schema reprezintă o vedere logică globală a relaţiilor dintre datele unei baze, în timp ce sub-schema este o vedere logică a relaţiilor necesare între date pentru susţinerea anumitor programe de aplicaţii prin care utilizatorii vor avea acces la această bază de date. Simplificat, legăturile dintre vederile logice, fizice şi interfaţa logică a unui sistem de prelucrare organizat pe bază de date, în cadrul unei bănci este prezentat în figura nr.4.9:

Page 61: Suport curs Sisteme anul II ECTS

Fig. nr. 4.9 Legăturile dintre vederile logice, fizice şi interfaţa sistemFig. nr. 4.9 Legăturile dintre vederile logice, fizice şi interfaţa sistem

Modelul ierarhic

Modelul ierarhic este primul model utilizat pentru organizarea datelor în baze de date. El se bazează pe structura arborescentă şi pe relaţiile 1-1 şi 1-n, prezentându-se sub forma unui arbore, în care se regăsesc pe un prim nivel – rădăcina (nod-părinte), iar pe nivelurile următoare diferite elemente subordonate (noduri-copil).

Nodul-părinte poate avea subordonate mai multe noduri-copil în timp ce un nod-copil nu poate avea decât un singur părinte. Rezultă că relaţia părinte-copil poate fi de tip 1-n, iar relaţia copil părinte poate fi doar de tip 1-1. Acest model asigură organizarea datelor pe orice tip de suport magnetic şi reducerea timpului de acces la înregistrări.

Modelul ierarhic are o serie de limite, în special în operaţiile de actualizare când adăugarea de noi înregistrări - cu excepţia celor din colecţia de date rădăcină - se poate efectua numai cu specificarea colecţiilor de date superioare, iar ştergerea unei înregistrări duce la eliminarea fizică a tuturor înregistrărilor subordonate. În figura nr. 4.10 este prezentat modelul ierarhic.

Page 62: Suport curs Sisteme anul II ECTS

Fig. nr. 4.10 Modelul ierarhicFig. nr. 4.10 Modelul ierarhic

Din acest exemplu rezultă că departamentul CONTABILITATE (nod-părinte) este constituit din mai multe aplicaţii şi posturi de lucru (noduri-copil) în timp ce fiecare nod-copil este subordonat unui singur nod-părinte.

Modelul reţea

Modelul reţea elimină redundanţele specifice modelului ierarhic şi se bazează pe structurile reţea şi pe relaţiile de tip 1-1, 1-n şi n-m. Caracteristica principală a acestui model este că acceptă ca orice colecţie de date să se situeze pe nivelul 1, astfel fiind permis accesul direct la realizările colecţiilor superioare -operaţie imposibilă în modelul ierarhic. În plus, prin acest model este permisă reprezentarea unică a realizărilor în baza de date.

Legăturile fizice pe suport sunt asigurate prin intermediul unor caracteristici care exprimă pointer-ul (adresa de pe suport) realizării superioare sau al realizării subordonate. Astfel, reţeaua este un graf orientat alcătuit din noduri conectate prin arce. Nodurile corespund tipurilor de înregistrare, iar arcele pointer-ilor. În felul acesta este permisă introducerea înregistrărilor artificiale pentru a reprezenta legăturile n-are (n>2) - vezi figura nr. 4.11.

Fig. nr. 4.11 Fig. nr. 4.11 Modelul reţeaModelul reţea

După cum se observă din figura nr. 4.11 modelul admite relaţii de tip n-m, ceea ce are ca efect reducerea redundanţei datelor. Modelele ierarhic şi reţea nu permit realizarea unei independenţe logice satisfăcătoare între date şi programe, deoarece relaţiile dintre date există şi sunt referite în programele de aplicaţii.

Modelul relaţional

Modelul relaţional a fost fundamentat în 1970, de E.F. Codd şi se bazează pe teoria matematică a relaţiilor şi pe calculul relaţional. Ideea unui model ansamblist a datelor a fost lansată încă din 1968 de către Childs D.F. care arăta că orice structură de date poate fi

Page 63: Suport curs Sisteme anul II ECTS

reprezentată sub formă de tabele (una sau mai multe) în interiorul cărora trebuie să existe şi informaţie de legătură21. Acest model va fi dezvoltat în capitolul 5.

Modelul Entitate-Asociaţie (E-A)

Acest model a fost introdus în 1976 de către cercetătorul american Chen care a avut ca obiectiv crearea unui model care să permită “o viziune unificată, globală asupra datelor”22. Este un model semantic de date, simplu şi atractiv datorită reprezentării sale grafice, fiind utilizat în mai multe metode de analiză şi proiectare (MERISE, AXIAL etc.) şi dispunând de mai multe extensii. Modelul operează cu următoarele concepte de bază: atribut, entitate /proprietate, entitate-tip, asociaţie.

Atributul reprezintă o informaţie elementară definită pe un domeniu.Entitatea este considerată un obiect concret sau abstract din “lumea observată”

având o existenţă proprie, care poate fi identificat şi descris printr-un ansamblu de atribute, independent de alte obiecte.

Literatura de specialitate nu oferă însă o definiţie unanim acceptată pentru acest concept, fiind totuşi subliniate următoarele caracteristici23:

• entitate are o existenţă proprie;• este abstractă sau concretă;• aparţine unei familii de obiecte de aceeaşi natură (clasă sau entitate tip);• într-o entitate tip (denumită şi clasă) fiecare membru (denumit realizarea

entităţii) este definit fără ambiguităţi. Clasa de entităţi (denumită şi entitate tip) reprezintă un ansamblu de entităţi de

aceeaşi natură, deci cu aceleaşi atribute, fiecare entitate fiind identificată într-o manieră unică. Numărul de atribute este stabilit de către proiectant. Reprezentarea unei clase de entităţi se realizează printr-un nume şi printr-un ansamblu de atribute de descriere.

De exemplu, clasa ANGAJAT se defineşte prin atributele: Număr marcă, Nume, Prenume, Funcţie, Data angajării şi se poate reprezenta astfel:

AngajatNumăr marcă

NumePrenumeFuncţie

Data angajării

Identificarea unică a unei clase de entităţi se realizează cu ajutorul unuia sau a mai multor atribute permiţându-se distingerea într-o manieră unică a fiecăreia dintre realizările

212 Lungu, I. ş.a., Op. cit., p. 96

222 Fotache, M., Op. cit., p. 63

232 Saleh, J., Les bases de donnees relationnelles, Edition Hermes, Paris, 1995, p. 22

Page 64: Suport curs Sisteme anul II ECTS

clasei. În exemplul de mai sus identificarea unică a fiecărui angajat poate fi realizată prin Număr marcă sau prin Nume.

Asociaţia (relaţia) reprezintă o legătură semantică definită între două sau mai multe entităţi. Asociaţiile de acelaşi tip formează o clasă de asociaţii. O asociaţie se caracterizează prin dimensiune şi cardinalitate.

Dimensiunea unei asociaţii reprezintă numărul de clase de entităţi implicate într-o clasă de asociaţii. Clasele de asociaţii pot fi:

•unare - relaţiile se stabilesc între entităţile aceleiaşi clase;•binare - relaţiile se stabilesc între entităţile aflate în două clase diferite;•n-are - relaţiile se stabilesc între n clase de entităţi.

Cardinalitatea reprezintă un cuplu de valori (M:N) desemnând numărul (minim şi maxim) de entităţi din fiecare clasă ce pot fi implicate într-o asociaţie. Cuplul de valori (M:N) specifică pe de o parte dacă asociaţia este parţială (M=0) sau totală (M=1) şi, pe de altă parte, dacă relaţia reprezintă o funcţie monovaloare (N=1) sau multivaloare (N>1). Pot exista 4 tipuri de cardinalităţi (tabelul nr. 3.2).

Tabelul nr. 3.2 Tipuri de cardinalităţiTabelul nr. 3.2 Tipuri de cardinalităţiCardinalitate minimală Cardinalitate maximală

0101

11NN

Utilizarea acestui model este în mare parte intuitiv. El nu este un model teoretic de reprezentare, ci mai curând o interfaţă prietenoasă de schiţare a structurii datelor. Adesea este utilizat pentru ilustrarea grafică a modelului relaţional.

Absenţa limbajului de manipulare a datelor bine formalizat şi adaptat a antrenat numeroase propuneri, preferinţa mergând spre limbajele relaţionale. Raţiunea principală este relativa uşurinţă de transformare a modelului E-A în model relaţional. Practic se construieşte o schemă E-A care se transformă în schemă relaţională. În felul acesta se combină simplitatea de descriere a primului model cu puterea limbajului celui de al doilea model.

În cadrul modelului E-A, descrierea textuală a entităţilor şi a relaţiilor lor este uneori greoaie. În practică se apelează la o reprezentare mai comodă sub forma unor scheme de sinteză ce facilitează comunicarea, cunoscute sub denumirea de formalisme. Principalele formalisme sunt Merise, Chen, Ross, Case*Methode, Perkinson etc. Prezentăm în continuare doar formalismele Merise şi Chen.

Formalismul MeriseAşa cum rezultă din figura nr. 4.12 simbolurile grafice pentru formalismul Merise

sunt:

Page 65: Suport curs Sisteme anul II ECTS

• dreptunghiul – pentru reprezentarea claselor de entităţi. În interior se specifică un nume (pentru identificarea entităţilor), sub care sunt enumerate atributele;

• elipsa – pentru reprezentarea claselor de asociaţii. În interiorul elipsei se înscrie numele clasei, sub care pot apărea eventualele atribute;

• liniile – pentru unirea simbolurilor precedente; pe aceste linii se înscriu cifre care exprimă cardinalităţile claselor de asociaţii.

Fig. nr. 4.12 Formalismul grafic MeriseFig. nr. 4.12 Formalismul grafic Merise

Se observă că o asociaţie este reprezentată printr-o elipsă, unind entităţile implicate. Fiecare legătură semnifică relaţia dintre entitate şi asociaţie. Lângă entităţi se înscriu cardinalităţile, adică numerele maxime şi minime de realizări posibile.

Din exemplul nostru din figura nr. 4.12 rezultă că entitatea PRODUS are cardinalitatea 0,N ceea ce înseamnă că un produs poate să nu fie comandat (valoarea 0) sau să apară în una, două sau N comenzi.

Formalismul grafic ChenÎn notaţia grafică Chen sunt folosite următoarele simboluri:

• dreptunghiurile – pentru clase de entităţi. În interior se specifică identificatorii respectivelor clase;

• elipsele sau cercurile – pentru atribute. În interior se specifică numele acestora;• romburile – pentru clasele de asociaţii. Au înscrise în interior numele acestora;• liniile – pentru unirea simbolurilor precedente;• săgeţile – pentru reprezentarea cardinalităţii.

O asociaţie poate fi legată de mai multe entităţi de acelaşi tip, fiecare tip fiind identificabil. Cardinalitatea unei entităţi dintr-o relaţie este definită printr-o cifră plasată pe linia asociaţiei. Ea poate fi 1:1, 1:N şi M:N.

Page 66: Suport curs Sisteme anul II ECTS

În figura nr. 4.13 este reprezentată grafic o diagramă Entitate-Asociaţie după formalismul Chen.

Fig. nr. 4.13 Diagrama Entitate-Asociaţie în formalismul ChenFig. nr. 4.13 Diagrama Entitate-Asociaţie în formalismul Chen

. Modelul obiectual

Apariţia acestui model este efectul orientării spre multimedia şi spre aplicaţii de proiectare asistate de calculator care solicită prelucrarea tipurilor neconvenţionale de date.

La baza modelului orientat pe obiecte stă noţiunea de entitate conceptuală definită ca un obiect descris printr-o colecţie de proprietăţi. Principalele concepte care stau la baza unui model orientat pe obiecte sunt: obiectul, încapsularea, persistenţa, clasa, tipul, moştenirea, polimorfismul, identitatea, domeniul.

Un obiect poate fi definit ca o abstractizare a unei entităţi particulare sau ca un ansamblu de date, împreună cu procedurile de prelucrare a acestora. Privite din acest punct de vedere procedurile poartă denumirea de metode, iar datele obiectului se numesc proprietăţi.

Un obiect este caracterizat prin atribute şi comportament. Atributele reprezintă starea sa şi legăturile care-l unesc cu alte obiecte, iar comportamentul se constituie din metodele şi operaţiile care pot fi aplicate atributelor.

Având în vedere cele de mai sus, putem concluziona că un obiect corespunde unei entităţi care are un nume, stochează o stare (atribute) şi răspunde unui ansamblu definit de mesaje.

Pot fi identificate trei tipuri de obiecte:• elementare: 20 (întreg), an I (şir de caractere), N (boolean);• compuse: nume, secţie, adresă;• complexe: student.

Page 67: Suport curs Sisteme anul II ECTS

Un obiect este format din structura de date, specificarea operaţiilor şi implementarea operaţiilor.

Interfaţa obiectului cu mediul o reprezintă mesajele care, de fapt sunt cereri adresate obiectului pentru a returna o valoare, sau pentru a-şi schimba starea. Mesajele sunt implementate prin intermediul metodelor, care generic reprezintă programe de manipulare a obiectelor sau de indicare a stării acesteia.

Încapsularea reprezintă o caracteristică ce oferă utilizatorului o imagine funcţională simplificată a obiectului, ascunzând complexitatea acestuia. Practic are loc divizarea obiectului în două părţi: interfaţa reprezentată de mesajele adresate obiectului şi conţinutul obiectului reprezentat de starea internă şi de metodele acestuia. Interfaţa permite unui utilizator din exterior să solicite obiectului realizarea unei acţiuni prin emiterea unui mesaj specific metodei asociate acţiunii respective. Structura unei date obiect poate fi prezentată ca în fig. nr. 4.14.

Încapsularea urmăreşte ca datele unui obiect să poată fi modificate doar prin intermediul metodelor proprii obiectului respectiv. În acest fel se realizează un control strict asupra obiectului, eliminându-se eventualele surse de erori provenite din nefolosirea necorespunzătoare a proprietăţilor24.

Fig. nr.4.14 Structura unei date obiectFig. nr.4.14 Structura unei date obiect

Persistenţa este proprietatea prin care datele şi obiectele, ca existenţă şi stare, depăşesc procesul care le-a creat, putând fi refolosite ulterior în alte procese.

Tipurile şi clasele de obiecte sunt concepte care reunesc obiectele cu acelaşi fel de atribute şi comportament. Din această perspectivă practica prezintă două categorii de sisteme orientate pe obiecte:

• sisteme bazate pe conceptul de tip (C++, Simula, vBase);• sisteme bazate pe conceptul de clasă (Smalltalk, Gemstone, Vision, Orion, G-

Base).Tipul sintetizează elementele comune ale obiectelor care au aceleaşi caracteristici şi

dispune de două componente: interfaţa şi implementarea. Interfaţa se constituie dintr-o listă de operaţii, iar implementarea asigură descrierea structurii interne a datelor, obiectului şi realizarea procedurilor relative la operaţiile interfeţei.

242 Dima, G., Dima, M., Bazele Visual FoxPro 5.0, Editura Teora, Bucureşti, 1999, p. 182

Page 68: Suport curs Sisteme anul II ECTS

Clasa are aceeaşi semnificaţie cu cea de tip, fiind asociată mai mult fazei de execuţie, presupunând generarea de obiecte şi stocarea setului de obiecte. Rezultă că o clasă descrie o colecţie de obiecte ce au aceleaşi atribute şi acelaşi comportament. Pentru a comunica între ele şi pentru a accede la informaţiile unei alte entităţi, obiectele îşi trimit “mesaje”. Acestea reprezintă numele metodelor şi argumentele lor. Realizarea acţiunii asociate unui mesaj depinde de obiectul receptor care îşi administrează propriile atribute folosind metode proprii25.

Descrierea unei clase constă dintr-un set de structuri de date comune (variabile de instanţă, care au propria identitate, identificatorii lor nefiind accesibili utilizatorilor), un protocol comun (set de mesaje la care vor răspunde instanţele clasei) şi un set de metode pentru implementarea operaţiilor comune. În felul acesta descrierea clasei serveşte ca şablon pentru crearea noilor obiecte. Ca urmare, obiectele din aceeaşi clasă răspund la acelaşi mesaj, au aceleaşi atribute şi folosesc aceleaşi metode.

O problemă aparte este legată de accesul utilizatorului la membrii unei clase printr-un mecanism de control care să asigure protecţia membrilor. Din acest punct de vedere membrii unei clase pot fi:

•publici – accesibili atât din interiorul cât şi din exteriorul clasei respective (dar din domeniul în care clasa a fost definită);

•protejaţi – accesibili din interiorul clasei respective şi a subclaselor construite pe baza acesteia (prin moştenire);

•ascunşi – accesibili doar din interiorul clasei respective.Clasele sunt organizate ierarhic, fiecare nouă clasă fiind subordonată unei clase

existente. Orice subclasă moşteneşte structurile şi metodele superclasei din care face parte.Moştenirea reprezintă mecanismul de definire a unei clase prin preluarea

variabilelor de instanţă şi a metodelor din una sau mai multe clase existente deja. În primul caz este vorba de o moştenire simplă, iar în cel de-al doilea de o moştenire multiplă. Clasa de la care sunt moştenite (preluate) instanţele (structurile de date) şi metodele reprezintă o supraclasă. Clasa ce se creează moşteneşte toate datele şi metodele supraclasei, la care se vor adăuga unele noi, definite pentru noua clasă. Astfel, pe baza principiului moştenirii pot fi create ierarhii de clase, începând cu cele mai generale şi ajungând la cele particulare, specializate în rezolvarea unei anumite sarcini de prelucrare.

Polimorfismul are în vedere comportamentul obiectelor care, la primirea unui mesaj, determină alegerea dinamică a metodei de aplicat, în funcţie de clasa corespunzătoare. Deşi noţiunea există de mai mult timp (polimorfism ad-hoc, polimorfism parametric) ea a fost popularizată în special prin limbajele obiect. Polimorfismul asigură manipularea simplă şi coerentă a seturilor eterogene de obiecte.

252 Gaudel, M-C., ş.a., Précis de génie logiciel, Edition Masson, Paris, Milan, Barcelon, 1996, p. 35

Page 69: Suport curs Sisteme anul II ECTS

Utilizarea polimorfismului în cazul moştenirii multiple permite definirea unor forme complexe de comportament asigurând combinarea metodelor proprii mai multor clase de obiecte.

Identitatea reprezintă modalitatea de distingere a obiectelor între ele, asigurând persistenţa datelor. Prin identitate obiectele pot fi referite recursiv deoarece aceasta este independentă de valorile atributelor obiectelor. Identitatea unică a obiectelor se realizează prin intermediul unui identificator intern (numit ID Object sau Pointer), generat de sistem şi inaccesibil utilizatorului.

La ora actuală nu există un model propriu-zis pentru structurarea şi funcţionarea unei baze de date orientate pe obiecte şi aceasta în primul rând datorită naturaleţei tehnologiei obiectuale26.

262 Lungu, I. ş.a., Op. cit., p. 220

Page 70: Suport curs Sisteme anul II ECTS

ELEMENTELE MODELULUI RELAŢIONALELEMENTELE MODELULUI RELAŢIONAL

Modelul relaţional a fost fundamentat în 1970 de E.F. Codd şi se bazează pe teoria matematică a relaţiilor şi pe calculul relaţional. Ideea unui model ansamblist a datelor a fost lansată însă în 1968 de către Childs D.F. care arăta că orice structură de date poate fi reprezentată sub formă de tabele în interiorul cărora trebuie să existe şi informaţie de legătură27.

Conform modelului relaţional datele şi relaţiile dintre ele sunt organizate sub forma unor tabele constituite din linii şi coloane, fiecare reprezentând un element distinct al bazei. Tabelele posedă o independenţă fizică totală ceea ce asigură independenţa dintre date şi prelucrări. Manipularea datelor are loc prin intermediul unui ansamblu de operatori algebrici pentru care relaţiile sunt operanzii şi rezultatele28.

Acest model se delimitează de celelalte modele prin reguli, cunoscute sub denumirea de normalizare sau forme normale, care aplicate structurii stabilite prin tabele permit definirea optimă a conţinutului lor.

Cea mai mare parte a bazelor de date şi a SGBD-urilor comercializate la ora actuală fac apel la concepte şi reguli propuse de modelul relaţional. În plus, pentru a face faţă noului context informaţional şi organizaţional au fost propuse diverse extensii ale acestui model: modele relaţionale cu valori structurate, modelul relaţional Fuzzy etc.

Avantajele modelului relaţional în comparaţie cu celelalte tipuri de modele sunt: • independenţa sporită a programelor de aplicaţie faţă de modul de reprezentare

internă a datelor şi de metodele de acces la date;• definirea unei structuri conceptuale optime, minimalizând redundanţa datelor şi

erorile la actualizare (prin tehnica de normalizare);• utilizarea unor limbaje procedurale bazate pe algebra relaţională şi a unor limbaje

neprocedurale care contribuie la îmbunătăţirea comunicării dintre sistem şi utilizatorii neinformaticieni;

• integritatea şi confidenţialitatea datelor prin folosirea unor mecanisme proprii;• utilizarea paralelismului în prelucrarea datelor, deoarece manipularea datelor se

realizează numai la nivel de relaţie. O bază de date relaţională poate fi definită ca un ansamblu de tabele aflate în

legătură. Fiecare tabel este identificat printr-un un nume propriu având linii şi coloane la intersecţia cărora se introduc valori atomice.

272 Lungu, I. ş.a., Baze de date – Organizare, proiectare şi implementare, Editura ALL, Bucureşti, 1995, p. 96

282 Moréjon, J., Principes et conception d’une base de données relationnelle, Les Editions d’organisation, Paris, 1992, p. 32

Page 71: Suport curs Sisteme anul II ECTS

211202211237192213192211

311291321312357345314291

bucbucbucbucbucbucbucbuc

Cod-Furnizor Cod-ob-inv Den-ob-inv. UM PU Cantitate

EtajereScauneCuiereDulapuriSalopeteManusiOchelariBirouri

2350009500047000

450000850001800015000

150000

121054

1412103

Obiecte-inventar

nume relatie

atribut

schemarelatiei

tuplu

n-tupluri

valoareadin domeniu

domeniu

Structurarea datelor după modelul relaţional impune folosirea următoarelor noţiuni: domeniu, relaţie (tabelă), atribut, tuplu (n-tuplu sau n-uplu) şi schema relaţională29. Elementele modelului relaţional sunt prezentate în fig. nr. 5.1.

Fig. nr. 5.1. Elementele modelului relaţionalFig. nr. 5.1. Elementele modelului relaţional

Literatura de specialitate prezintă mai multe definiţii, toate însă exprimând aspectele de esenţă. Prezentăm în continuare câteva astfel de abordări.

Domeniul este definit ca ansamblul valorilor acceptate (autorizate) pentru un element component al relaţiei(tabelei).30

Un domeniu este caracterizat printr-un nume şi poate fi definit explicit (în extensie) sau implicit (în intensie). Definirea explicită se realizează prin enumerarea tuturor valorilor sale, iar definirea implicită se realizează prin precizarea proprietăţilor pe care le au valorile din domeniul respectiv.

Exemplu:Exemplu:• definirea în extensie: UNIVERSITATE = {ECONOMIE, LITERE, MATEMATICĂ, DREPT …};• definirea în intensie: INTREG, REAL

Două domenii sunt declarate compatibile dacă sunt semantic comparabile, adică dacă ansamblurile care le definesc nu sunt disjuncte. Două domenii identice sau legate prin inclusiune sunt compatibile.

Relaţia (tabela) reprezintă un subansamblu al produsului cartezian al unei liste de domenii caracterizat printr-un nume şi corespunde unei restricţii semantice din universul real modelat deoarece fiecare obiect din acest univers trebuie să fie identificat într-o manieră unică şi diferenţiat în raport cu alte obiecte.

Atributul reprezintă numele dat unui domeniu dintr-o relaţie şi determină ansamblul de valori pe care acesta îl poate lua. Noţiunea de atribut nu trebuie confundată cu cea de

292 Moréjon, J., Op. cit., p. 32

303 Fotache, M., Baze de date relaţionale, Editura Junimea, Iaşi, 1997, pag. 122

Page 72: Suport curs Sisteme anul II ECTS

domeniu. Într-o relaţie numele atributelor este unic, ceea ce asigură precizarea fără ambiguitate a rolului jucat de fiecare domeniu al relaţiei. Orice atribut al unei tabele oarecare trebuie să fie atomic, adică să nu mai poată fi descompus în alte atribute.

Tuplul sau n-uplu reprezintă un rând sau o linie distinctă de valori din cadrul unei tabele (relaţie) rezultând că o relaţie este un ansamblu de tupluri care poate fi definită extensiv (prin indicarea listei tuturor tuplurilor ce o compun) şi intensiv (prin indicarea predicatului de apartenenţă a unui tuplu la relaţia respectivă).

Dintr-un alt punct de vedere o relaţie este ansamblul m-tuplurilor de valori definită astfel:

R = { t1, t2 , …, tk, ….tm }, unde tk = (dk1 , dk2 ,…, dki,…, dkn ), iar dk1 este o valoare în D1, d k2 este o valoare

în D2 , …, dkn este o valoare în Dn;în care:

n- reprezintă ordinul lui R;m- este cardinalitatea lui R.

Rezultă că numărul tuplurilor dintr-o relaţie reprezintă cardinalitatea relaţiei, în timp ce numărul valorilor dintr-un tuplu defineşte gradul sau ordinul relaţiei.

Două tupluri sunt identice dacă şi numai dacă pentru fiecare domeniu ele au aceeaşi valoare.

Ansamblul minimal de atribute prin care se poate identifica în mod unic orice tuplu dintr-o relaţie reprezintă cheia relaţiei. Orice relaţie poseda cel puţin o cheie. Când cheia este constituită dintr-un singur atribut, poartă numele de cheie simplă, iar atunci când este formată din mai multe atribute ea se numeşte cheie compusă.

Cheia primară a unei relaţii (tabele) este un atribut sau grup de atribute care identifică fără ambiguitate fiecare tuplu (linie) a relaţiei (tabelei)31.

La alegerea unei chei primare administratorul bazei de date trebuie să aibă în vedere criterii prin care să se asigure identificarea efectivă a tuplurilor (lungime, natură) .

Există trei restricţii pe care trebuie să le verifice cheia primară:• unicitatea – o cheie identifică un singur tuplu (linie) a relaţiei;• compoziţia minimală – atunci când cheia primară este compusă, nici un atribut

din cheie nu poate fi eliminat fără distrugerea unicităţii tuplului în cadrul relaţiei (în cazuri limită o cheie poate fi alcătuită din toate atributele relaţiei);

• valorile non-nule – valorile atributului sau ale ansamblului de atribute ce desemnează cheia primară sunt întotdeauna specificate, deci ne-nule; nici un atribut din compoziţia cheii primare nu poate avea valori nule.

313 Fotache ,M., Op. Cit., pp. 125-126

Page 73: Suport curs Sisteme anul II ECTS

COD-FURN

NR-FACTURA

NR-FACTURA

NUME-FURNIZOR

COD-OBINV

DATA-FACTURA

LOCALITATE

CANT

COD-FURN

CONT-BANCA

PRET-UNIT

CONT-BANCA

FURNIZORI

VALOARE

COD-OBINV DEN-OBINV UM

NOMEN-OBINV

OBINV-RECEPT

FACTURI

Dacă într-o relaţie există mai multe combinaţii de atribute care conferă unicitate tuplului, acestea sunt denumite chei candidate. Atunci când o cheie candidată nu este cheie primară este considerată cheie alternativă (secundară).

Legătura între tuplurile din relaţii diferite se realizează prin atribute sau combinaţii de atribute numite chei străine (externe). Cheile străine (coloanele de referinţă) sunt, aşadar, atribute sau combinaţii de atribute care pun în legătură linii (tupluri) din relaţii diferite.

În figura nr. 5.2 sunt prezentate câteva tabele şi cheile asociate acestora pentru stabilirea relaţiilor dintre ele şi pentru identificarea tuplurilor din conţinutul lor.

Fig. nr. 5.2 Relaţii şi tipuri de cheiFig. nr. 5.2 Relaţii şi tipuri de chei

În relaţia FURNIZORI:• COD-FURN – cheie primară• NUME-FURNIZOR – cheie alternativăÎn relaţia FACTURI:• NR-FACTURA – cheie primară• COD-FURN – cheie străină către relaţia FURNIZORIÎn relaţia NOMEN-OBINV:• COD-OBINV – cheie primarăÎn relaţia OBINV-RECEPT:• NR-FACT şi CODOBINV – cheie primară• NR-FACT – cheie străină către relaţia FACTURI• COD-OBINV – cheie străină către relaţia NOMEN-OBINVSchema relaţiei se constituie din numele relaţiei urmat de lista atributelor şi

eventual de definirea domeniului lor32, fiind posibile mai multe reprezentări. Schema este 323 Moréjon, J., Op. cit., p. 34

Page 74: Suport curs Sisteme anul II ECTS

cunoscută sub numele de intensia relaţiei. Ea este expresia proprietăţilor comune şi invariante ale tuplurilor care compun relaţia. Spre deosebire de intensie, extensia unei relaţii reprezintă ansamblul tuplurilor care compun la un moment dat relaţia şi este variabilă în timp.

Extensia unei relaţii (conţinutul propriu-zis) este stocată fizic de obicei în spaţiul asociat bazei de date relaţionale, este definită explicit şi poartă numele de relaţie de bază. Dacă nu este memorată în baza de date (cazul aşa-numitelor relaţii virtuale) ea poartă numele de relaţii derivate sau viziuni, necesitând precizarea unei expresii relaţionale care este evaluată la stabilirea efectivă a tuplurilor care compun acest tip de relaţie.

Schema relaţională este un ansamblu de relaţii semantic legate prin domeniul lor de definire sau prin reguli de integritate.

Conceptul de relaţie permite pe de o parte reprezentarea unei entităţi din universul modelat şi o legătură semantică inter-entitate. Într-o entitate, fiecărei legături semantice îi corespunde o relaţie. În teoria sistemelor, adăugarea unui nou tuplu determină modificarea fizică a relaţiei, în timp ce din punct de vedere semantic, aceasta rămâne neschimbată. Pentru definirea, fără ambiguităţi semantice, a unei relaţii nu este suficientă noţiunea de domeniu.

Regulile de integritate constituie un anumit număr de controale care ar trebui să fie satisfăcute de către datele bazei, pentru a putea fi considerate coerente şi concrete în raport cu lumea reală pe care o reflectă33.

Modelul relaţional se bazează pe următoarele restricţii minimale: unicitatea cheii, restricţia referenţială şi restricţia de entitate.

Unicitatea cheii. Ansamblul minim de atribute a cărui cunoaştere permite identificarea unui n-uplet unic al relaţiei se numeşte cheie. Conform acestei reguli într-o relaţie R care are cheia K, oricare ar fi tuplurile t1 şi t2 trebuie satisfăcută inegalitatea: t1(K) t2(K). Altfel spus, două n-upluri nu pot avea aceeaşi valoare pentru atributul cheie.

Restricţia referenţială (integritatea referirii). Dacă un acelaşi atribut apare într-o relaţie ca cheie şi într-o altă relaţie ca non-cheie, orice valoare a atributului non-cheie trebuie să existe în atributul cheie34. Respectând această regulă într-o relaţie R1, care referă o relaţie R2, valorile cheii externe trebuie să figureze printre valorile cheii primare din relaţia R2, sau să fie valori nedefinite “null”.

Considerăm pentru exemplificare următoarele trei relaţii: STUDENT, SIT.SC şi EXAMEN. Restricţiile referenţiale sunt ilustrate în figura 5.3.

333 Date, C. J., Referencial integrity, 7th International on VLDB, Cannes, September, 1981, pp. 2-12

343 Moréjon, J., Op. cit., p.35

Page 75: Suport curs Sisteme anul II ECTS

STUDENT NUMESTUDENT DATANAST SECTIENR.MATRICOL

SIT. SC NOTANR.MATRICOL CODEXAMEN DATAEX

EXAMEN CODEXAMEN DISCIPLINA

În relaţia STUDENT NR_MATRICOL este cheie; iar cheia relaţiei SIT.SC este formată din ansamblul atributelor NRMATRICOL, CODEXAMEN ŞI DATAEX. Orice valoare pentru NRMATRICOL din relaţia SIT.SC trebuie să existe în NRMATRICOL din STUDENT (idem pentru CODEXAMEN).

Fig. 5.3 Restricţie referenţialăFig. 5.3 Restricţie referenţială

Atributul NRMATRICOL (CODEX) în relaţia STUDENT este numit cheie primară, iar în relaţia EXAMEN este numit cheie străină. Relaţia SIT.SC poate fi numită şi referenţiată sau desemnată, în timp ce relaţiile STUDENT şi EXAMEN pot fi numite referenţiale sau desemnante.

Restricţia de entitate. Valorile oricărui atribut care face parte dintr-o cheie primară trebuie să fie “nenule”. Unicitatea cheii impune ca la încărcarea unui tuplu, valoarea cheii să fie cunoscută. În felul acesta se elimină duplicarea tuplurilor. Restricţia de integritate a entităţii nu se aplică cheilor externe dintr-o relaţie, dacă acestea nu aparţin cheii primare.

Plecând de la restricţia de entitate, rezultă că restricţia de referinţă poate fi: forte şi slabă. O restricţie de referinţă este “forte” dacă atributul cheii străine nu poate lua o valoare “nulă”. O restricţie de referinţă este “slabă” dacă atributul cheii străine poate lua o valoare “nulă”.

Pe lângă restricţiile minimale, modelul relaţional poate oferi şi restricţii referitoare la dependenţa datelor şi de comportament.

Restricţiile referitoare la dependenţa datelor privesc datele ce depind unele de altele şi pot fi: funcţionale, multivaloare şi de joncţiune.

Dependenţele funcţionale permit identificarea unui atribut sau grup de atribute prin intermediul altui atribut sau grup de atribute.

Dependenţele multivaloare se stabilesc între datele în care un atribut sau grup de atribute poate prezenta mai multe valori pentru o singură valoare a unui alt atribut sau grup de atribute.

Dependenţele de joncţiune apar atunci când nu se pot manifesta dependenţe funcţionale sau multivaloare, exprimând o relaţie mai generală.

Restricţiile de comportament, la rândul lor pot fi, cel mai adesea, de domeniu şi temporale. Cele de domeniu impun ca valorile unui atribut să se încadreze între anumite

Page 76: Suport curs Sisteme anul II ECTS

limite. Cele temporale impun ca valorile rezultate în urma actualizării să fie altele decât cele anterioare actualizării.

Având în vedere aspectele teoretice de mai sus prezentăm în continuare cele 1 3 r e g u l i (numerotate de la 0 la 12) prin care E.F. Codd defineşte şi caracterizează modelul relaţional35:

R0 – regula de fundamentare (regula de bază): un sistem relaţional de administrare a bazelor de date trebuie să poată administra bazele de date în întregime prin funcţiile sale relaţionale; aceasta înseamnă că un SGBD relaţional nu trebuie să mixeze caracteristicile relaţionale cu cele nerelaţionale, el cuprinzând o parte de definire a datelor (DDL), o parte de manipulare a datelor (DML) şi o parte de integritate şi control a datelor (DCL); totuşi, în practică se constată că nici o implementare curentă de SGBD nu respectă această regulă, deoarece conţin atât caracteristici relaţionale cât şi nerelaţionale;

R1 – regula reprezentării informaţiei (The Information Rule): toate informaţiile dintr-o bază de date relaţionale sunt reprezentate la nivel logic, explicit ca valori în tabele; datele sunt stocate sub forma unor structuri tabelare, numite relaţii, formate din rânduri (tupluri) şi coloane (atribute) ; o astfel de structură oferă o serie de avantaje precum: claritate, generalitate (majoritatea tipurilor de date pot fi reprezentate sub această formă), flexibilitate (structura poate fi modificată atât pe rânduri cât şi pe coloane); folosind o astfel de structură, asupra datelor pot fi aplicate operaţii din teoria mulţimilor ca: selecţia, proiecţia, produsul cartezian, reuniunea, intersecţia etc.; Codd apreciază că un SGBD care nu respectă această regulă nu poate fi considerat relaţional;

R2 – regula accesului garantat la date (Guaranteed Access): într-o bază de date relaţională orice valoare are accesul garantat dacă se foloseşte o combinaţie între numele tabelului (relaţiei), valoarea cheii primare şi numele atributului; fiecare relaţie trebuie să conţină o cheie primară, adică un atribut sau o combinaţie de atribute, care să identifice în mod unic un tuplu (este de remarcat, totuşi, faptul că în majoritatea implementărilor de SQL este permisă duplicarea);

R3 – regula prelucrării sistematice a valorii nule (Systematic Null Value Support), cunoscută şi sub numele de regula reprezentării informaţiei necunoscute: SGBD-ul asigură un suport sistematic pentru tratamentul valorilor denumite “NULL” (date necunoscute sau neaplicabile la momentul respectiv), făcând diferenţa dintre o valoare fixată intenţionat pe 0 (zero) sau un şir vid de caractere şi o valoare necunoscută; majoritatea implementărilor actuale de SQL respectă parţial această regulă; facem precizarea că pentru realizarea integrităţii datelor în modelul relaţional sunt folosite cheile primare şi secundare care nu permit utilizarea tipului de date “NULL”;

R4 – regula dicţionarului - catalogului relaţional activ on-line (Active On-line Relational Catalog): descrierea bazei de date şi a componentelor sale este realizată la nivel

353 Perkins, J., Morgan, B., SQL fără profesor, în 14 zile, Editura Teora, Bucureşti, 1997, p. 23

Page 77: Suport curs Sisteme anul II ECTS

logic sub formă de tabele, putând fi interogată în timp real prin intermediul limbajului de manipulare a bazei de date; toate informaţiile ce privesc relaţiile, vizualizările, indexările etc. trebuie să poată fi stocate sub forma unor relaţii ce formează un catalog de sistem (dicţionar), şi prin urmare să poată fi accesate în acelaşi mod ca şi datele propriu-zise prin intermediul aceloraşi comenzi; implementările actuale de SQL respectă această regulă, interogarea datelor realizându-se prin intermediul frazei SELECT;

R5 – regula limbajului de interogare sau regula sublimbajului multilateral al datelor (Comprehensive Data Sublanguage): trebuie să existe cel puţin un limbaj multilateral, cu o sintaxă bine definită şi care să permită definirea şi manipularea datelor, stabilirea regulilor de integritate, autorizarea accesului şi realizarea tranzacţiilor; această regulă cere ca manipularea datelor dintr-o bază de date să se facă prin intermediul unui limbaj de nivel înalt; în general toate implementările SQL respectă această regulă;

R6 – regula actualizării tabelelor virtuale /vederi relaţionale (View Updating Rule): un SGBD trebuie să stabilească dacă o tabelă virtuală poate fi actualizată şi să stocheze rezultatul interogării într-un dicţionar de tipul unui catalog de sistem; majoritatea implementărilor SQL permit crearea unei relaţii ce conţine detalii referitoare la tabelele virtuale, detalii în baza cărora să se accepte sau nu operaţiunea de actualizare;

R7 – regula limbajului de nivel înalt sau regula inserării, actualizării şi ştergerii la nivel de mulţimi (Set Level Insertion, Update and Deletion): SGBD-ul permite pe lângă regăsirea datelor la nivel de mulţimi şi manipularea datelor prin inserări, actualizări şi ştergeri; aceste operaţii trebuie să poată fi aplicate atât în mod interactiv cât şi prin intermediul unui limbaj gazdă;

R8 – regula independenţei fizice a datelor (Physical Data Independence): într-un SGBD trebuie să se separe aspectul fizic al datelor(stocarea şi accesarea datelor) de aspectul logic (programele de aplicaţii); deteriorarea metodelor de acces fizic sau a structurilor de memorare nu afectează din punct de vedere logic programele de aplicaţie şi utilizările bazei;

R9 – regula independenţei logice a datelor (Logical Data Independence): modificarea semantică a schemei bazei (ex. normalizarea relaţiilor pentru creşterea performanţelor) nu afectează din punct de vedere logic datele prin operaţiile de manipulare;

R10 – regula independenţei datelor din punct de vedere al integrităţii (Integrity Independence): limbajul bazei de date defineşte regulile de integritate care trebuie respectate şi memorate în catalogul relaţional on-line (dicţionarul de date) şi nu în programe; un SGBD trebuie să permită operaţii de validare a datelor, operaţii gestionate prin intermediul cataloagelor de sistem (dicţionare); aceste operaţii nu trebuie făcute prin scrierea de programe, ci prin intermediul limbajului relaţional, în particular SQL;

R11 – regula independenţei datelor din punct de vedere al distribuirii (Distribution Independence): distribuirea datelor pe mai multe calculatoare dintr-o reţea nu trebuie să

Page 78: Suport curs Sisteme anul II ECTS

afecteze programele de aplicaţii; SGBD-ul relaţional trebuie să respecte independenţa de distribuţie având un limbaj care să permită aplicaţiilor să rămână logic nemodificate atunci când datele sunt transferate de la o bază de date locală la una distribuită sau atunci când datele sunt distribuite; această regulă este considerată ca fiind cea mai “dură” şi printre cele mai dificil de respectat ( de altfel ANSI-SQL nu o menţionează în specificaţiile sale);

R12 – regula versiunii procedurale a SGBD sau regula de nesubversiune (Nonsubvertion): orice componentă procedurală a unui SGBD trebuie să respecte aceleaşi restricţii de integritate ca şi componenta relaţională (de ex. dacă la manipularea datelor o dată dintr-o coloană este de tipul “ NOT NULL” nici o metodă de accesare a acestei coloane nu trebuie să permită introducerea unei valori “NULL” ; atunci când SGBD posedă un limbaj de nivel inferior (cod-maşină şi de asamblare) acesta nu poate încălca regulile de integritate definite prin limbajul relaţional al bazei de date.

În literatura de specialitate se obişnuieşte ca în funcţie de tipul cerinţelor exprimate regulile să fie grupate în 5 categorii36:

• reguli de bază (fundamentale) R0 şi R12;• reguli structurale R1 şi R6;• reguli privind integritatea datelor R3 şi R10;• reguli privind manipularea datelor R2, R4, R5, R7;• reguli privind independenţa datelor R8, R9, R11.Dr. E.F. Codd a extins numărul acestor reguli de la 13 publicate în 1986, la un număr

de 100 în 1990. Trebuie remarcat însă, că nici un sistem de gestiune a bazelor de date comercializat, nu respectă absolut toate regulile definite de Codd.37 Astfel, la un SGBD trebuie apreciată măsura în care acesta este relaţional, deci, numărul regulilor respectate. De exemplu produsul DB2 respectă doar şapte reguli din cele 13 prezentate mai sus.

NORMALIZAREA BAZELOR DE DATE RELAŢIONALE

Normalizarea. Conţinut şi obiective

Normalizarea unei relaţii constă în reprezentarea acesteia sub o formă canonică, respectând anumite criterii de definire semantică a structurii bazei de date, precum şi integritatea datelor38.

363 Lungu, I. ş.a., Op. cit., p. 135

373 Pascu, C., Pascu, A. , Totul despre SQL, Editura Tehnică, Bucureşti, 1994, p. 22

383 Filip, M., Grama, A., Medii de programare. Abordări teoretice, Editura Fides, Iaşi, 1998, p.204

Page 79: Suport curs Sisteme anul II ECTS

Uzual, prin normalizare se desemnează procesul de stabilire a structurii tabelelor unei BDR, a cheilor primare, a cheilor străine şi a altor restricţii. Obiectivele normalizării sunt:

1. Eliminarea anomaliilor de actualizare.2. Diminuarea nevoii de reorganizare periodică a modelului.3. Reprezentarea diverselor conexiuni dintre atributele bazei.4. Suport pentru utilizarea unor algoritmi eficienţi privind căutarea tuplurilor

care îndeplinesc anumite condiţii specificate (interogarea BD).Înscrisă de obicei în activităţile de analiză şi proiectare ale bazelor de date,

normalizarea a constituit obiectul a numeroase studii; nu se poate afirma că există o unanimitate de idei şi instrumente. Pe de altă parte, importanţa normalizării nu trebuie absolutizată. Fragmentarea tabelelor în altele mai simple are în vedere şi optimizarea vitezei de acces, reducerea traficului pe reţea etc. În plus, preocupări de dată mai recentă vizează înglobarea, în normalizare, a unor concepte privind gestiunea domeniilor atributelor şi extinderea sa către tehnologia obiectuală.

Teoria clasică a normalizării este construită în jurul a cinci forme normalizate. Codd, părintele modelului relaţional de organizare a datelor, a definit iniţial trei forme normalizate39, notate prin 1FN, 2FN şi 3FN. Întrucât, într-o primă formulare, definiţia 3FN ridica ceva probleme, Codd şi Boyce au elaborat o nouă variantă, cunoscută sub numele Boyce-Codd Normal Form (BCNF).

Deşi este vorba, în principiu, de o formulare mai riguroasă a aceleaşi 3FN, BCNF este prezentată, în majoritatea lucrărilor, separat.

Formele 4 şi 5, care sunt legate de numele lui Fagin, sunt tratate mai cu reţinere în literatura consacrată analizei bazelor de date relaţionale. Ba chiar unele lucrări, cu tentă mai pragmatică, se opresc, declarat, la 3FN pe care o consideră suficientă în rezolvarea majorităţii cazurilor practice.

Fundamentul normalizării BDR îl constituie dependenţele dintre atribute. Primele trei forme normalizate pot fi determinate pe baza dependenţelor funcţionale elementare (totale) şi tranzitive. Forma a patra (4FN) se bazează pe dependenţele multivaloare, în timp ce a cincea formă normalizată (5FN) pe dependenţele de joncţiune.

Prin normalizare, o relaţie este descompusă reversibil, obţinându-se o schemă relaţională optimă. Metodologia de normalizare nu este unică şi a constituit domeniu de cercetare pentru o serie întreagă de autori precum P.A. Bernstein, E.F. Codd, C. Delobel, A. Zaniola etc.

Prima formă normalizată (1FN)

393 Codd, E.F., Further normalization of the database relational model, DataBase Systems, Courant Computer Science Symposia Series, Vol.6, Englewood Cliffs, N.J.,Prentice-Hall, 1972

Page 80: Suport curs Sisteme anul II ECTS

Unele lucrări definesc o relaţie aflată în 1FN ca acea relaţie în care fiecare atribut conţine o valoare atomică, altfel spus, toate atributele sunt ne-decompozabile.

În tabela FP (figura nr. 5.13) toate atributele (datele) sunt atomice. Ar putea exista o obiecţiune, relativ la atributul Adresa, în sensul că acesta trebuie descompus în atributele: Strada, Număr, ba chiar şi Bloc, Scară, Etaj, Apartament, (există SRL-uri care au ca sediu declarat locuinţa proprietarilor). Având în vedere această diversitate de situaţii, am preferat un singur atribut atotcuprinzător, Adresa. De aici încolo, va fi ceva mai greu să aflăm o serie de informaţii, de genul: "care dintre clienţi au sediul pe strada Libertăţii" sau "care dintre furnizori au sediul la etajul 3". Să nu uităm, însă, că în asemenea interogări poate fi folosit, în SQL, operatorul LIKE.

Fig. nr. 5.13. Structura tabelei FP în 1FNFig. nr. 5.13. Structura tabelei FP în 1FN

Prin urmare, în unele cazuri, declararea unui atribut ca fiind atomic sau nu ţine de intenţia celui care proiectează BD sau de flexibilitatea SGBD-ului. Spre exemplu, "pe vremuri", atributele de tip dată calendaristică erau supuse unei nemiloase descompuneri în trei atribute vădit atomice, Zi, Lună, An. Astăzi, însă, orice SGBD "lucrează" cu atribute, variabile şi constante de tip dată calendaristică, astfel încât suntem scutiţi de atomizarea de mai sus.

Alţi autori adaugă la definiţia anterioară, legată de atributele atomice, şi restricţia: toate atributele ce compun relaţia să fie în dependenţă funcţională faţă de cheia relaţiei, deşi este, oarecum, o tautologie, întrucât una din "poruncile" ce trebuie îndeplinite de orice tabelă care vrea să fie relaţională este cea cunoscută sub numele restricţia de entitate, potrivit căreia într-o relaţie nu pot exista două tupluri identice sau, altfel spus, într-o relaţie trebuie să existe un atribut sau combinaţie de atribute ale căror valori să deosebească orice tuplu de toate celelalte sau orice relaţie posedă o cheie primară.

În figura nr. 5.14, tabela LINII_ARTICOLE_CONTABILE2, conţine, pe primele două linii, grupuri repetitive, pentru atributele ContDebitor, respectiv ContCreditor, datorită faptului că operaţiunile (înregistrările) contabile din nota 150 sunt compuse.

Page 81: Suport curs Sisteme anul II ECTS

Fig. nr. 5.14. Tabela LINII_ARTICOLE_CONTABILE2 Fig. nr. 5.14. Tabela LINII_ARTICOLE_CONTABILE2

O altă accepţiune dată grupurilor repetitive este legată de extinderea pe orizontală a tabelelor, prin duplicarea forţată a unor atribute. Revenim la figura nr. 5.14. Pentru a înlătura grupurile repetitive de pe primele două linii, putem fi tentaţi să modificăm structura tabelei, ca în figura nr. 5.15.

Fig. nr. 5.15. Tabela LINII_ARTICOLE_CONTABILE3 Fig. nr. 5.15. Tabela LINII_ARTICOLE_CONTABILE3

Soluţia e cât se poate de nefericită. Deşi tabela se află în prima formă normalizată, preţul plătit este mult prea mare. Deoarece, în practică, o înregistrare (operaţiune) contabilă poate avea 10-15 conturi pe debit sau pe credit, modificarea structurii tabelei ar deveni de-a dreptul hilară.

În concluzie, tabela LINII_ARTICOLE_CONTABILE din figura nr. 5.14 este în prima formă normalizată (1FN).

ObservaţiiObservaţii• Atomicitatea atributelor într-o bază de date relaţională constituie o limită serioasă a modelului, datorită imposibilităţii adaptării BDR la specificul unor domenii ca multimedia, CAD etc.• Nu orice tabelă este în 1FN, chiar dacă toate valorile atributelor sunt atomice. În conformitate cu restricţia de entitate, tuplurile relaţiei trebuie să fie distincte. În plus, atributele care alcătuiesc cheia primară nu pot avea valori nule.

Tabela FP, a cărei schemă este prezentată în figura nr. 5.13, se află în 1FN, cheia sa primară fiind desemnată prin perechea (NumărFactură, CodFurnizor).

Implicit, deci, există dependenţele funcţionale:(1) (NumărFactură, CodFurnizor) NumeFurnizor(2) (NumărFactură, CodFurnizor) Adresa(3) (NumărFactură, CodFurnizor) CodPoştal(4) (NumărFactură, CodFurnizor) Localitate(5) (NumărFactură, CodFurnizor) Judeţ(6) (NumărFactură, CodFurnizor) Data(7) (NumărFactură, CodFurnizor) Valoare

Structura tabelei FP prezintă câteva neajunsuri, legate, în primul rând, de faptul că nici un atribut ce face parte din cheia primară nu poate avea valori nule.

Din această cauză apar probleme la adăugarea unui tuplu în relaţia FP. Spre exemplu, la magazia întreprinderii au fost recepţionate câteva materiale care au sosit cu un Aviz de expediţie trimis de un nou furnizor. Fiind vorba de un furnizor nou, se pune problema de a-l introduce în baza de date. I se atribuie codul 1010, i se cunoaşte denumirea şi sediul (adresa, localitatea). Deoarece materialele au sosit numai cu avizul de expediţie, până la primirea facturii ne este imposibil să introducem datele despre furnizor

Page 82: Suport curs Sisteme anul II ECTS

în tabela FP. De ce oare? Deoarece cheia primară a relaţiei este compusă (NumărFactură, CodFurnizor), şi nu cunoaştem valoarea atributului NumărFactură, care prezintă, deocamdată, valoarea NULL (necunoscută). Astfel, pentru a introduce date despre un nou furnizor, trebuie să aşteptăm să sosească prima factură de la acesta, chiar dacă produsele descrise în factură pot sosi cu zile sau chiar săptămâni înainte.

Probleme serioase apar şi la modificarea unor linii. Astfel, furnizorul ALFA SRL îşi mută sediul de la adresa "Prosperităţii, 15", noua adresă fiind "Iacobov se întoarce, nr. 13 bis", în cadrul aceleaşi localităţi (Paşcani).

Un client nu poate avea, la un moment dat, decât o singură adresă. Am definit în capitolul anterior, în cadrul tabelei FP dependenţa funcţională

CodFurnizor Adresa.Or, dacă în tabelă ar co-exista şi adresa veche a furnizorului, şi cea nouă, la o aceeaşi

valoare a atributului CodFurnizor ar exista două valori distincte ale atributului Adresa.Ce facem în acest caz ? Fie renunţăm la DF de mai sus, fie modificăm toate vechile

valori ale atributului Adresa, actualizându-le.Prima variantă prezintă marele dezavantaj că alterează partea de analiză a BDR, şi,

în unele cazuri, atrage revizuirea întregii scheme a BDR, deoarece vizează aspectul constant al relaţiei, structura sa.

A doua variantă ridică, la rândul său, nişte probleme deloc înălţătoare. Astfel, va trebui să modificăm valoarea atributului Adresa pentru toate facturile primite de la furnizorul respectiv, ceea ce nu e chiar simplu. Şi ce-aţi zice dacă modificarea adresei se produce în luna mai 1997 şi avem, arhivate, facturi primite de la acest furnizor încă din anul 1993 ?

Nici operaţiunea de ştergere a unei linii din tabela FP nu este scutită de discuţii. Să presupunem că trebuie să ştergem linia aferentă facturii 17320, primită de la furnizorul EPSILON SRL. După cum se observă în figura nr. 5.12, aceasta este singura factură primită în acest an de la furnizorul EPSILON SRL, iar facturile anului precedent au fost deja arhivate pentru a descongestiona baza de date. Ştergerea singurei facturi aferente acestui furnizor atrage, inevitabil, pierderea oricărei date despre EPSILON SRL. Ulterior ştergerii, la o eventuală consultare prin care s-ar dori extragerea tuturor furnizorilor firmei, EPSILON SRL nu ar mai fi "prezent", deşi, de fapt, EPSILON reprezintă un furnizor important pentru care, întâmplător, în primele două luni ale anului curent nu există nici o factură primită.

A doua formă normalizată (2FN)

Începând cu a doua formă normalizată, relaţiile pot fi decupate în sub-relaţii, în scopul diminuării problemelor legate de stocare şi actualizare.

Page 83: Suport curs Sisteme anul II ECTS

Heath a demonstrat40 că orice relaţie alcătuită din trei atribute, notată R(X, Y, Z), în care există dependenţele funcţionale X Y şi X Z, poate fi descompusă în două relaţii R1(X, Y) şi R2(X, Z). R1 şi R2 reprezintă proiecţiile relaţiilor R pe atributele X şi Y, respectiv X şi Z.

Esenţial este faptul că descompunerea se face fără pierderi de informaţii, adică R poate fi "recompusă" prin joncţiunea tabelelor R1 şi R2.

O relaţie se află în 2FN dacă: Se află în 1FN.

Toate DF ce leagă cheia primară la celelalte atribute sunt DF elementare (totale).Problema trecerii unei relaţii din 1FN în 2FN se pune numai când cheia primară a

relaţiei este compusă din mai multe atribute.Trecerea de la 1FN la 2FN se poate realiza după următoarea succesiune de paşi:

a) Se stabilesc dependenţele totale (elementare), inclusiv cele tranzitive, cu excepţia celor în care destinaţia este un atribut component al cheii primare.

b) Se trec în revistă toate dependenţele care au ca sursă (determinant) un atribut sau sub-ansamblu de atribute din cheia primară.

c) Pentru fiecare atribut (sau sub-ansamblu) al cheii de la pasul b), se creează o relaţie care va avea drept identificator primar atributul (subansamblul) respectiv, iar celelalte atribute vor fi cele care apar ca destinaţii în dependenţele de la pasul b).În figura nr. 5.13 a fost prezentată structura tabelei FP care este în 1FN, cheia sa

primară fiind desemnată prin perechea (NumărFactură, CodFurnizor).Conform definiţiei cheii primare, există dependenţele funcţionale (1)-(7) identificate

în paragraful 5.4.2. Într-un paragraful anterior am văzut că primele cinci dintre ele nu sunt elementare, datorită existenţei dependenţelor:

(8) CodFurnizor NumeFurnizor(9) CodFurnizor Adresa(10) CodFurnizor CodPoştal(11) CodFurnizor Localitate(12) CodFurnizor Judeţ

Întrucât, în FP există dependenţe funcţionale ne-elementare (parţiale), rezultă ca aceasta nu este în 2FN.

Aplicăm cei trei paşi pentru aducerea relaţiei FP în 2FN:a) Dependenţele totale (elementare), inclusiv cele tranzitive sunt cele şapte prezentate

în exemplul 1 din paragraful precedent.b) Dependenţele care au ca sursă un atribut/sub-ansamblu din cheia primară sunt (8),

(9), (10), (11) şi (12).c) Dacă, pentru fiecare atribut component al cheii care apare ca sursă în dependenţe

funcţionale, se creează o relaţie ce are drept identificator primar atributul respectiv,

404 Heath, I. J., Unacceptable File Operations in a Relational Database, Proc.1971 ACM SIGFIDET Workshop on Data Description, Access and Control, nov. 1971

Page 84: Suport curs Sisteme anul II ECTS

celelalte atribute fiind destinaţiile dependenţelor de la punctul b), relaţia universală FP se sparge în două tabele, FP1 şi FP2, ale căror structuri sunt prezentate în figura nr. 5.16.

Fig. nr. 5.16. Tabelele FP1 şi FP2 în 2FN Fig. nr. 5.16. Tabelele FP1 şi FP2 în 2FN

Avantaje ale 2FNStructura prezentată în figura nr. 5.16 elimină multe din problemele ridicate de 1FN.

Astfel, putem introduce date despre un nou furnizor, până la sosirea primei facturi de la acesta, deoarece singura tabelă implicată este FP2 a cărei cheie primară este constituită din atributul CodFurnizor.

Modificarea adresei unui furnizor afectează o singură linie din tabela FP2, deci au fost eliminate multe dintre anomaliile care apăreau la actualizarea valorii unor atribute.

De asemenea, ştergerea unei facturi primite - care presupune eliminarea unei linii din tabela FP1 - nu mai prezintă riscul eliminării definitive a datelor generale depre un furnizor, deoarece acestea se găsesc în tabela FP2.

Problemele care persistă sunt legate de tabela FP2, în sensul repetării valorilor atributelor Localitate şi Judeţ pentru toţi furnizorii ce provin dintr-o aceeaşi localitate.

A treia formă normalizată

O relaţie se află în 3FN dacă: Se află în 1FN. Toate atributele care nu aparţin cheii primare nu depind funcţional de un alt atribut

(ansamblu de atribute) care nu face parte din cheie.A doua condiţie poate fi exprimată şi în maniera: toate dependenţele funcţionale care

leagă cheia primară de celelalte atribute sunt directe (netranzitive).Trecerea din 2FN în 3FN se face, pentru o relaţie, în următoarea manieră:

Page 85: Suport curs Sisteme anul II ECTS

a) Se identifică toate atributele ce nu fac parte din cheie şi care sunt surse ale unor dependenţe funcţionale.

b) Pentru toate atributele identificate la punctul a), se constituie câte o relaţie în care cheie primară va fi atributul respectiv, iar celelate atribute destinaţiile din dependenţele considerate.

ObservaţieObservaţieOperaţiile a) şi b) se repetă şi pentru relaţiile "proaspăt" obţinute prin descompunere.

În paragraful anterior, pornind de la tabela FP, aflată în 1FN (structura sa este prezentată în figura nr. 5.13), au fost obţinute două tabele, FP1 şi FP2, ambele aflate în 2FN.

Să analizăm structura tabelei FP2. DependenţeleCodFurnizor LocalitateCodFurnizor Judeţ

sunt tranzitive, deoarece există:CodPoştal LocalitateCodPoştal Judeţ

Prin urmare, relaţia FP2 nu este în a treia formă normalizată. Aplicăm algoritmul descris mai sus:

a) atributul CodPoştal nu face parte din cheie şi constituie sursă într-o serie de dependenţe funcţionale;

b) tabela FP2 se sparge în tabelele FP21 şi FP22, ale căror structuri sunt prezentate în figura nr. 5.17.

Fig. nr. 5.17. Tabelele FP21 şi FP22Fig. nr. 5.17. Tabelele FP21 şi FP22

În concluzie, tabela FP, adusă în 3FN, se prezintă sub forma a trei tabele, FP1, FP21 şi FP22, cu structurile descrise în figura nr. 5.18.

Page 86: Suport curs Sisteme anul II ECTS

Fig. 5.18. Structura tabelelor FP1, FP21 şi FP22 aflate în 3FNFig. 5.18. Structura tabelelor FP1, FP21 şi FP22 aflate în 3FN

Cele trei forme normalizate prezintă o importanţă deosebită, considerându-se, că, în general, o bază de date aflată în 3FN are o structură satisfăcătoare, din punct de vedere al raportului anomalii de stocare - viteză de acces (număr de joncţiuni pentru obţinerea informaţiilor).

Page 87: Suport curs Sisteme anul II ECTS

COMENZI PENTRU INTEROGAREA BAZELOR DE DATE.COMENZI PENTRU INTEROGAREA BAZELOR DE DATE. FRAZA SELECTFRAZA SELECT

În SQL o interogare se formulează printr-o frază SELECT. Aceasta prezintă trei clauze principale: SELECT, FROM şi WHERE.

SELECT corespunde operatorului proiecţie din algebra relaţională, fiind utilizată pentru desemnarea listei de atribute (coloanele) din tabela-rezultat; FROM este cea care permite enumerarea relaţiilor din care vor fi extrase informaţiile aferente consultării; prin WHERE se desemnează predicatul selectiv al algebrei relaţionale, relativ la atribute ale relaţiilor care apar în clauza FROM.

La modul general o consultare simplă în SQL poate fi prezentată astfel:SELECT C1, C2, ..., CnFROM R1, R2, ..., RmWHERE P

Execuţia unei fraze SELECT se concretizează în obţinerea unei tabele (relaţii) rezultat. Acestă poate fi o tabelă propriu-zisă sau o tabelă temporară (care, de obicei, nu poate fi actualizată), dar şi o tabelă derivată (imagine). Uneori tabela rezultat poate fi obţinută sub "forma" unei variabile-tablou.

Ci - reprezintă coloanele (care sunt atribute sau expresii de atribute) tabelei-rezultat;

Rj - sunt relaţiile ce trebuie parcurse pentru obţinerea rezultatului;P - este predicatul (condiţia) simplu sau compus ce trebuie îndeplinit de tupluri

pentru a fi incluse în tabela-rezultat.Când clauza WHERE este omisă, se consideră implicit că predicatul P are valoarea

logică "adevărat". Dacă în locul coloanelor C1, C2, ... Cn apare simbolul "*", în tabela-rezultat vor fi

incluse toate coloanele (atributele) din toate relaţiile specificate în clauza FROM. De asemenea, în tabela-rezultat, nu este obligatoriu ca atributele să prezinte nume identic cu cel din tabela enumerată în clauza FROM. Schimbarea numelui se realizează prin opţiunea AS.

Rezultatul unei fraze SELECT îl vom considera ca fiind sub forma unei tabele oarecare. Trebuie avut în vedere, însă, că rezultatul interogării poate fi obţinut şi sub forma unei tabele temporare sau chiar a unei variabile-tablou (matrice). În unele SGBD-uri, cum ar fi FoxPro, formatul general al frazei SELECT conţine şi clauza INTO.

SELECT …FROM …INTO destinaţieWHERE …

Page 88: Suport curs Sisteme anul II ECTS

Destinaţie specifică dacă se va obţine o tabelă "normală", o tabelă temporară (tabelă care se şterge automat la închiderea sa) sau o variabilă-tablou. Dacă clauza INTO nu este utilizată, atunci în urma interogării se obţine o tabelă temporară cu numele predeterminat (Query).

Uneori, tabela rezultat ("normală" sau temporară) "încalcă" poruncile modelului relaţional. Conform restricţiei de entitate, într-o relaţie nu pot exista două linii identice. Or, în SQL, tabela obţinută dintr-o consultare poate conţine două sau mai multe tupluri identice.

Spre deosebire de algebra relaţională, în SQL nu se elimină automat tuplurile identice (dublurile) din tabela-rezultat. Pentru aceasta este necesară utilizarea opţiunii DISTINCT:

SELECT DISTINCT C1, C2, ..., CnFROM R1, R2, ..., RmWHERE P

LOCALITĂŢICodPostal Localitate Judeţ

6600 Iaşi Iaşi5300 Focşani Vrancea5725 Paşcani Iaşi6750 Tg. Frumos Iaşi

CLIENŢICodClient NumeClient Adresa CodPostal

1001 TEXTILA SA Bld. Copou, 87 66001002 MODERN SRL Bld. Gării, 22 53001003 OCCO SRL NULL 66001004 FILATURA SA Bld. Unirii, 145 53001005 INTEGRATA SA I.V.Viteazu, 115 57251006 AMI SRL Galaţiului, 72 67501007 AXON SRL Silvestru, 2 66001008 ALFA SRL Prosperităţii, 15 5725

FACTURIEMISENrFactură CodClient Data ValoareTotală TVAColectată

111111 1003 17.06.2000 17000000 2714286111112 1001 17.06.2000 2850000 455042111113 1004 18.06.2000 5850000 934034111114 1003 18.06.2000 28500000 4550420111115 1008 18.06.2000 35700000 5700000111116 1008 19.06.2000 8700000 1389076111117 1006 20.06.2000 11000000 1756303111118 1007 23.06.2000 15000000 2394958111119 1005 24.06.2000 47250000 7544118111120 1003 24.06.2000 3000000 478992111121 1001 24.06.2000 4250000 678571111122 1007 24.06.2000 8750000 1397059111123 1006 25.06.2000 6600000 1053782111124 1004 25.06.2000 38650000 6171008

Page 89: Suport curs Sisteme anul II ECTS

111125 1003 30.06.2000 12850500 2051761111126 1002 01.07.2000 54250000 8661765

Figura nr. 6.1. Baza de date utilizată în exempleFigura nr. 6.1. Baza de date utilizată în exemple

În concluzie, o frază SELECT, în forma în care a fost prezentată, corespunde: unei selecţii algebrice (clauza WHERE - P) unei proiecţii (SELECT - Ci) unui produs cartezian (FROM - R1 R2 ... Rm)

şi conduce la obţinerea unei noi relaţii (tabele-rezultat) cu n coloane, fiecare coloană fiind:

un atribut din R1, R2, ..., Rm sau o expresie calculată pe baza unor atribute din R1, R2, ..., Rm.

În exemplele incluse în acest capitol se va utiliza baza de date prezentată în figura 6.1.

Exemplu Exemplu Care este, pentru fiecare factură emisă, valoarea fără TVA ?

SELECT NrFactură, ValoareTotală - TVAColectata AS ValFaraTVAFROM FACTURIEMISE

Tabela rezultat din figura 6.2 conţine două atribute: NrFactură şi ValFaraTVA. Ultimul este un câmp calculat.

Figura nr. 6.2. Exemplu de câmp calculat (ValFaraTVA)Figura nr. 6.2. Exemplu de câmp calculat (ValFaraTVA)

Interogări care utilizează operatorii asamblişti din algebra relaţională

ReuniuneaSELECT *FROM R1UNION

Page 90: Suport curs Sisteme anul II ECTS

SELECT *FROM R2

Operatorul pentru reuniune este deci UNION. De remarcat că, la reuniune, SQL elimină automat dublurile, deci nu este necesară utilizarea clauzei DISTINCT. Operatorul UNION este prezent în toate SGBD-urile importante.

Intersecţia Pentru realizarea intersecţiei a două tabele, R1 şi R2 se utilizează operatorul

INTERSECT:SELECT *FROM R1INTERSECT

SELECT *FROM R2

Dacă în produsele profesionale, precum DB2 (IBM) sau Oracle operatorul este prezent, în schimb multe din cele din categoria “uşoară”, precum Visual Fox Pro, INTERSECT rămâne un deziderat, funcţionalitatea sa realizându-se prin subconsultări (operatorii IN şi EXISTS) sau, uneori, prin joncţiune.

Diferenţa Diferenţa dintre tabelele R1 şi R2 se realizează utilizând operatorul MINUS sau

EXCEPT. Fraza SELECT următoare funcţionează în Oracle.SELECT *FROM R1MINUS

SELECT *FROM R2

În DB2 MINUS trebuie înlocuit cu EXCEPT, iar în Visual FoxPro există nici MINUS şi nici EXCEPT, astfel încât, ca şi în cazul intersecţiei, este necesar a se recurgere la alţi operatori, precum IN sau EXISTS.

Produsul cartezian În SQL nu există operator explicit pentru efectuarea produsului cartezian. Dacă în

clauza FROM apar două relaţii, R1 şi R

2, atunci, în lipsa unei condiţii de joncţiune

formulată în clauza WHERE, tabela rezultat va conţine liniile obţinute din produsul

cartezian R1

⊗ R2

.

SELECT *FROM R1, R2

Interogări care utilizează operatorii relaţionali din algebra relaţională

Page 91: Suport curs Sisteme anul II ECTS

Selecţia

Exemplu 1 Exemplu 1 Care sunt localităţile din judeţul Iaşi în care firma are clienţi ?

Tabela în care se află rezultatul şi asupra căreia se aplică predicatul de selecţie este LOCALITĂŢI. Predicatul este Judeţ = "Iaşi". Fraza SELECT va avea forma:

SELECT *FROM LOCALITĂŢIWHERE Judeţ = "Iaşi"

Rezultat:CodPostal Localitate Judeţ6600 Iaşi Iaşi5725 Paşcani Iaşi6750 Tg. Frumos Iaşi

Exemplu 2Exemplu 2Care dintre facturile emise după 23.06.98 prezintă valoarea mai mare sau egală cu 3 000 000 lei ?

SELECT *FROM FACTURIEMISEWHERE Data > {23.06.2000} AND ValoareTotala >= 3000000

Rezultat:NrFactură CodClient Data ValoareTotală TVAColectată

111119 1005 24.06.2000 4 725 000 850 500111124 1004 25.06.2000 3 850 000 693 000111126 1002 01.07.2000 5 425 000 976 500

După cum se observă, operatorul AND a fost utilizat pentru a introduce un "ŞI" logic, după cum OR se utilizează pentru “SAU” logic. În SQL, pentru comparare, în afara operatorilor "clasici" specificaţi mai sus, pot fi utilizaţi şi alţi operatori, dintre care în acest paragraf ne vom opri la:

BETWEEN (între, cuprins între), LIKE (ca şi, la fel ca), IN (în) şi IS NULL.

Operatorul BETWEENAcest operator permite specificarea unui interval de valori în care trebuie să se

încadreze câmpul/expresia testată. Acest interval se referă la valori numerice sau la date calendaristice.

Exemplu 3Exemplu 3Se reformulează ultima interogare:

Care sunt facturile emise după 23.06.2000 şi care au valoarea cuprinsă între 3 000 000 şi 4 000 000 lei ?

Fără operatorul BETWEEN fraza SELECT se scrie:

Page 92: Suport curs Sisteme anul II ECTS

SELECT *FROM FACTURIEMISEWHERE Data > {23.06.2000} AND ValoareTotala >= 3000000 AND ValoareTotala <= 4000000

Utilizând operatorul BETWEEN se poate scrie:SELECT *FROM FACTURIEMISEWHERE Data > {23.06.2000} AND ValoareTotala BETWEEN 3000000 AND

4000000

Operatorul LIKEAcest operator se foloseşte pentru a compara un atribut de tip şir de caractere (ex.

NumeClient, Adresa, Localitate) cu un literal (constantă de tip şir de caractere). Astfel, dacă se doreşte obţinerea unei tabele-rezultat care să conţină numai clienţii ai căror nume începe cu litera M, putem scrie predicatul din clauza WHERE sub forma: NumeClient LIKE "M%". Deoarece după litera M apare semnul "%", se vor extrage din tabela CLIENŢI toate tuplurile pentru care valoarea atributului NumeClient începe cu litera M, indiferent de lungimea acestuia (ex. MELCRET, MIGAS, MITA, MATSUSHITA etc.). Despre semnul "%" se spune că este un specificator multiplu, joker sau mască.

Un alt specificator multiplu utilizat în multe versiuni SQL este liniuţa de subliniere ("_"). Spre deosebire de "%", "_" substituie un singur caracter. Diferenţa dintre cei doi specificatori multipli este pusă în evidenţă în exemplele următoare.

Exemplu 4Exemplu 4Care sunt clienţii ai căror nume este format din şapte caractere, începe cu litera A şi sunt societăţi cu răspundere limitată (SRL-uri) ?

SELECT *FROM CLIENŢIWHERE NumeClient LIKE "A__ SRL"

Rezultatul va fi cel din figura 6.3.

Figura nr. 6.3. Utilizarea specificatorului multiplu "_"Figura nr. 6.3. Utilizarea specificatorului multiplu "_"

Dacă s-ar fi utilizat simbolul "%":SELECT *FROM CLIENŢIWHERE NumeClient LIKE "A%SRL",

rezultatul ar fi fost cel din figura 6.4.

Page 93: Suport curs Sisteme anul II ECTS

Figura nr. 6.4. Utilizarea specificatorului multiplu "%"Figura nr. 6.4. Utilizarea specificatorului multiplu "%"

În concluzie, "_" înlocuieşte (substituie) un singur caracter, în timp ce "%" înlocuieşte un şir de caractere de lungime variabilă (între 0 şi n caractere). Cei doi specificatori multipli pot fi utilizaţi împreună.

Operatorul IN Format general:

expresie1 IN (expresie2, expresie3, ...)Rezultatul evaluării unui predicat ce conţine acest operator va fi "adevărat" dacă

valoarea expresiei1 este egală cu (cel puţin) una din valorile: expresie2, expresie3, ... Este util atunci când condiţiile de selecţie sunt mai complexe.

Exemplu 6Exemplu 6Care sunt localităţile din judeţele Iaşi şi Vaslui?

Fără utilizarea operatorului IN interogarea se scrie:SELECT *FROM LOCALITĂŢIWHERE Judeţ = "Iaşi" OR Judeţ = "Vaslui"

Utilizând operatorul IN:SELECT *FROM LOCALITĂŢIWHERE Judeţ IN ("Iaşi", "Vaslui")

Operatorul IS NULL O valoare nulă este o valoare nedefinită. Este posibil ca la adăugarea unei linii într-o

tabelă, valorile unor atribute să fie necunoscute. În aceste cazuri valoarea atributului pentru tuplul respectiv este nulă. Reamintim că, prin definiţie, nu se admit valori nule pentru grupul atributelor care constituie cheia primară a relaţiei.

Exemplu 7Exemplu 7Dacă se doreşte aflarea clienţilor pentru care nu s-a introdus adresa, interogarea se poate

scrie:SELECT *FROM CLIENTIWHERE Adresa IS NULL

Cum în baza noastră de date, numai clientului OCCO SRL nu-i cunoaştem adresa, rezultatul interogării este cel din figura 6.5.

Page 94: Suport curs Sisteme anul II ECTS

Figura nr. 6.5. Extragerea valorilor NULLe Figura nr. 6.5. Extragerea valorilor NULLe

ObservaţiiObservaţii• Valoarea NULL nu se confundă cu valoarea zero (pentru atributele numerice) sau cu valoarea "spaţiu" (pentru atributele de tip şir de caractere)• Operatorul NULL se utilizează cu IS şi nu cu semnul "=". Dacă s-ar utiliza forma expresie = NULL şi nu expresie IS NULL, rezultatul evaluării va fi întotdeauna fals, chiar dacă expresia nu este nulă !

Proiecţia. Opţiunea ORDER BY

Coloanele tabelei-rezultat al consultării sunt specificate în clauza SELECT, fiind separate prin virgulă.

Exemplu 1Exemplu 1 Care sunt judeţele în care firma are clienţi ?Este necesară parcurgerea relaţiei LOCALITĂŢI, singurul atribut care interesează fiind Judeţ. Deoarece SQL nu elimină dublurile automat, dacă se doreşte ca în tabela-rezultat o localitate să figureze o singură dată, se utilizează opţiunea DISTINCT:

SELECT DISTINCT JudeţFROM LOCALITĂŢI

Exemplu 2Exemplu 2 Care este denumirea fiecărei localităţi şi judeţul în care se află ?

SELECT Localitate, JudeţFROM LOCALITĂŢI

Prezentarea localităţilor în ordinea alfabetică a numelui acestora este posibilă prin apelând la clauza ORDER BY:

SELECT Localitate, JudeţFROM LOCALITĂŢIORDER BY Localitate

Pentru ordonarea liniilor tabelei-rezultat în funcţie de judeţ şi, în cadrul aceluiaşi judeţ, în ordinea inversă a localităţii (de la Z la A), fraza SELECT se formulează astfel:

SELECT * FROM LOCALITĂŢIORDER BY Judeţ ASCENDING, Localitate DESCENDING

Page 95: Suport curs Sisteme anul II ECTS

Figura nr. 6.6. Clauza ORDER BY Figura nr. 6.6. Clauza ORDER BY

Opţiunile ASCENDING (crescător) şi DESCENDING (descrescător) indică deci modul în care se face ordonarea tuplurilor tabelei-rezultat al interogării.

Prioritatea de ordonare este stabilită prin ordinea atributelor specificate în ORDER BY: ordonarea "principală" se face în funcţie de valorile primului atribut specificat; în cadrul grupelor de tupluri pentru care valoarea primului atribut este identică, ordinea se stabileşte după valoarea celui de-al doilea atribut specificat ş.a.m.d.

Dacă în ORDER BY lipsesc opţiunile ASCENDING/DESCENDING, ordonarea se face crescător.

oncţiunea

SQL nu prezintă clauze sau operatori speciali pentru realizarea theta-joncţiunii, echi-joncţiunii sau joncţiunii naturale. Dar, aşa cum am văzut, o joncţiune este o combinaţie de produs cartezian şi selecţie.

Exemplu 1Exemplu 1 Revenind la exemplele din algebra relaţională, echi-joncţiunea tabelelor FURNIZOR1 şi FURNIZOR2 în SQL se realizează prin fraza SELECT:

SELECT *FROM FURNIZOR1, FURNIZOR2WHERE FURNIZOR1.CodF = FURNIZOR2.CodF

Observaţie:Observaţie:În SQL2, echijoncţiunea poate fi realizată prin clauza INNER JOIN plasată în clauza FROM. Astfel, ultima frază SELECT se poate redacta, în SQL2, fără clauza WHERE:

SELECT *FROM FURNIZOR1 INNER JOIN FURNIZOR2 ON FURNIZOR1.CodF = FURNIZOR2.CodF

Exemplu 2 Exemplu 2 Care sunt clienţii din municipiul Focşani ?

SELECT *FROM CLIENŢI INNER JOIN LOCALITĂŢI ON CLIENŢI.CodPostal = LOCALITĂŢI.CodPostal

WHERE Localitate=”Focsani”

Produsul cartezian al tabelelor CLIENŢI şi LOCALITĂŢI este prezentat în figura 6.7.

Page 96: Suport curs Sisteme anul II ECTS

Figura nr. 6.7. Produsul cartezian CLIENŢI Figura nr. 6.7. Produsul cartezian CLIENŢI ⊗⊗ LOCALITĂŢI LOCALITĂŢI

Din cele 32 de linii sunt selectate cele care îndeplinesc condiţia de joncţiune, CLIENŢI.CodPostal = LOCALITĂŢI.CodPostal, şi pe cea suplimentară - Localitate=”Focsani”. În final, rezultatul este cel din figura 6.8.

Figura nr. 6.8. Rezultatul final al joncţiunii şi al selecţiei suplimentareFigura nr. 6.8. Rezultatul final al joncţiunii şi al selecţiei suplimentare

Exemplu 3 Exemplu 3 Care sunt facturile emise clienţilor din judeţul Iaşi ?

SELECT NrFacturaFROM FACTURIEMISE, CLIENŢI, LOCALITĂŢIWHERE FACTURIEMISE.CodClient = CLIENŢI.CodClient

AND CLIENŢI.CodPostal = LOCALITĂŢI.CodPostal AND Judeţ=”Iaşi”

Soluţia este echivalentă cu următoarea:SELECT NrFacturaFROM FACTURIEMISE FE INNER JOIN CLIENŢI C

ON FE.CodClient = C.CodClient INNER JOIN LOCALITĂŢI L

ON C.CodPostal = L.CodPostal

Page 97: Suport curs Sisteme anul II ECTS

WHERE Judeţ=”Iaşi”

Exemplu 4 Exemplu 4 Care sunt facturile emise în aceeaşi zi ca şi factura 111113 ?Problema propusă poate fi rezolvată relativ uşor folosind o subconsultare, după cum va fi prezentat în paragraful următor. Până una-alta, soluţia pe care o avem în acest moment la îndemână se bazează pe autojoncţiune. Autojoncţiune înseamnă joncţiunea unei tabele cu ea-însăşi, practic, joncţiunea a două instanţe ale unei aceleaşi tabele:

SELECT FE1.NrFactura, FE1.Data FROM FACTURIEMISE FE1 INNER JOIN FACTURIEMISE FE2

ON FE1.Data= FE2.Data AND FE2.NrFactura=111113

Soluţia de mai sus conduce la rezultatul din figura 6.9. Să vedem prin ce mecanism.

Figura nr. 6.9. Facturile emise în aceeaşi zi ca şi 111113Figura nr. 6.9. Facturile emise în aceeaşi zi ca şi 111113

Joncţiunea celor două instanţe, FE1 şi FE2, ale tabelei FACTURIEMISE după condiţia FE1.Data = FE2.Data:

SELECT *FROM FACTURIEMISE FE1 INNER JOIN FACTURIEMISE FE2

ON FE1.Data= FE2.Dataconduce la un rezultat precum cel din figura 6.10.

Page 98: Suport curs Sisteme anul II ECTS

Figura nr. 6.10. Auto-joncţiunea, după valorile Data, tabelei FACTURIEMISEFigura nr. 6.10. Auto-joncţiunea, după valorile Data, tabelei FACTURIEMISE

Din cele 38 de linii, prin predicatul FE2.NrFactura=111113 rămân numai 3, cele din figura 6.9.

Exemplu 5 Exemplu 5 Care sunt clienţii cărora NU le-am întocmit facturi pe 18/06/2000 ?

La această problemă se pot formula mai multe soluţii. Una ar fi bazată pe diferenţa dintre toţi clienţii (extraşi din tabela CLIENŢI) şi cei cărora le-am trimis facturi pe 18 iunie. Ţinând seama că numele clientului este cheie alternativă, deci unic, se poate scrie:

SELECT NumeClientFROM CLIENTIMINUSSELECT NumeClientFROM CLIENTI INNER JOIN FACTURIEMISE

ON CLIENTI.CodClient=FACTURIEMISE.CodClient AND Data={^2000/06/18}

O asemenea soluţie funcţionează în Oracle (folosind funcţia de conversie TO_DATE pentu constantă), DB2 (înlocuind, în plus, MINUS cu EXCEPT), nu însă şi în Visual FoxPro. Având în vedere că nu avem cunoştinţe privind subconsultările, putem recurge la un artificiu bazat pe o formă interesanţa a joncţiunii, şi anume joncţiunea externă.

Să examinăm fraza SELECT următoare şi rezultatul acesteia din figura 6.11.SELECT * FROM CLIENTI C LEFT OUTER JOIN FACTURIEMISE FE

ON C.CodClient=FE.CodClient AND Data={^2000/06/18}

Figura nr. 6.11. O joncţiune externăFigura nr. 6.11. O joncţiune externă

Prima observaţie: în rezultat sunt incluse toţi clienţii, adică, toate înregistrările din tabela CLIENŢI. A doua observaţie: joncţiunea nu mai este de tip INNER şi LEFT OUTER, adică externă la stânga. Cum dintre CLIENŢI şi FACTURIEMISE, cea de la stânga este prima, rezultă că în rezultat sunt extrase toate liniile din aceasta, chiar dacă nu au linii corespondente în tabela din dreapta. În cazul nostru, TEXTILA SA, MODERN SRL, INTEGRATA SA, AMI SRL şî AXON SRL nu au făcut “cumpărături” de la firma noastră pe 18 iunie 2000. Ne dăm seama de acest lucru observând că pe liniile coresponde acestora, valorile atributelor preluate din FACTURIEMISE sunt NULL.

Astfel încât, pentru a răspunde punctual la problema pusă, ar trebui extrase liniile în care, în urma joncţiunii externe, FE.NrFactură (sau oricare alt atribut din FE) este NULL. Paradoxal sau nu, fraza următoare nu obţine rezultatul scontat în VFP:

SELECT * FROM CLIENTI C LEFT OUTER JOIN FACTURIEMISE FE

Page 99: Suport curs Sisteme anul II ECTS

ON C.CodClient=FE.CodClient AND Data={^2000/06/18} WHERE FE.NrFactura IS NULL

În schimb, se poate folosi un artificiu prin întrebuinţarea funcţiei NVL:SELECT *

FROM CLIENTI C LEFT OUTER JOIN FACTURIEMISE FE ON C.CodClient=FE.CodClient AND Data={^2000/06/18} WHERE NVL(FE.NrFactura,0) = 0

Funcţia NVL converteşte valorile nule ale atributului NrFactura în 0. Principial, soluţia bazată pe NVL are acelaşi mecanism ca şi precedenta interogare. Cu singura diferenţă că… funcţionează, după reiese din figura 6.12.

Figura nr. 6.12. Clienţii fără facturi pe 18 iunie 2000Figura nr. 6.12. Clienţii fără facturi pe 18 iunie 2000

Fireşte, pentru a obţine numai numele clienţilor, este necesară înlocuirea asteriscului din clauza SELECT cu atributul NumeClient.

Ar mai fi de adăugat că există trei tipuri de joncţiune externă: la stânga (LEFT OUTER JOIN), la dreapta (RIGHT OUTER JOIN) şi totală (FULL OUTER JOIN). La joncţiunea externă la dreapta sunt extrase liniile echi-joncţiunii plus liniile tabelei din dreapta ce nu îndeplinesc condiţia formulată prin predicatul de joncţiune. Joncţiunea externă totală reprezintă, în fapt, reuniunea (cu eliminarea dublurilor) joncţiunilor la stânga şi la dreapta.

Sub-consultări. Operatorul IN

O altă facilitate deosebit de importantă a limbajului SQL o constituie posibilitatea includerii (imbricării) a două sau mai multe fraze SELECT, astfel încât pot fi formulate interogări cu mare grad de complexitate.

Operatorul IN poate fi utilizat şi pentru includerea unei fraze SELECT într-o altă frază SELECT.

Exemplu 1Exemplu 1Care sunt facturile emise în aceeaşi zi în care a fost întocmită factura 111113 ?

SELECT *FROM FACTURIEMISEWHERE Data IN

(SELECT Data FROM FACTURIEMISE WHERE NrFactură=111113)

Sub-consultareaSELECT DataFROM FACTURIEMISEWHERE NrFactură=111114

Page 100: Suport curs Sisteme anul II ECTS

are ca rezultat o tabelă alcătuită dintr-o singură coloană (Data) şi o singură linie ce conţine valoarea atributului Data pentru factura 111113, ca în figura 6.13:

Figura nr. 6.13. Rezultatul sub-consultăriiFigura nr. 6.13. Rezultatul sub-consultării

Clauza WHERE Data IN determină căutarea în tabela FACTURIEMISE a tuturor tuplurilor (liniilor) care au valoarea atributului Data egală cu una din valorile tuplurilor (în cazul nostru, egală cu valoarea tuplului) din tabela obţinută prin "sub-consultare" (în cazul nostru, tabela din figura 6.13). Cu alte cuvinte, în acest caz WHERE Data IN va selecta toate facturile pentru care data emiterii este 18/06/2000 – figura 6.14.

Figura nr. 6.14. Facturile emise în aceeaşi zi ca şi 111113Figura nr. 6.14. Facturile emise în aceeaşi zi ca şi 111113

Exemplu 2Exemplu 2Care sunt facturile emise în alte zile decât cea în care a fost întocmită factura 111113?

SELECT *FROM FACTURIEMISEWHERE Data NOT IN

(SELECT Data FROM FACTURIEMISE WHERE NrFactură=111113)

S-a utilizat negaţia, testându-se non-apartenenţa la o relaţie creată printr-o sub-frază SELECT (vezi figura nr. 6.15).

Figura nr. 6.15. Facturile emise în alte zile decât factura 111113Figura nr. 6.15. Facturile emise în alte zile decât factura 111113

Page 101: Suport curs Sisteme anul II ECTS

Exemplu 3Exemplu 3Care sunt clienţii cărora li s-au trimis facturi întocmite în aceeaşi zi cu factura 111113?

SELECT DISTINCT NumeClientFROM CLIENŢIWHERE CodClient IN

(SELECT CodClient FROM FACTURIEMISE

WHERE Data IN (SELECT Data FROM FACTURIEMISE WHERE NrFactură=111113))

Am ilustrat modul în care pot fi imbricate (înlănţuite, incluse) trei fraze SELECT. Soluţia este valabilă în SGBD-urile profesionale (DB2, Oracle…), nu însă şi în VFP, în care orice interogare poate fi desfăşutata pe maximum două nivele (SELECT-ul principal, plus un nivel de sub-consultări). Pentru a reduce numărul “straturilor” de corelare, se poate folosi, în acest caz, joncţiunea:

SELECT DISTINCT NumeClientFROM CLIENŢI, FACTURIEMISEWHERE CLIENŢI.CodClient=FACTURIEMISE.CodClientAND Data IN

(SELECT Data FROM FACTURIEMISE

WHERE NrFactura=111113)Rezultatul din figura 6.16 demonstrează că soluţia este viabilă.

Figura nr. 6.16. Clienţi pentru care există măcar o facturăFigura nr. 6.16. Clienţi pentru care există măcar o factură întocmită în aceeaşi zi cu 111113 întocmită în aceeaşi zi cu 111113

Se poate reţine, ca regulă generală, că aproape orice consultare poate fi redactată în mai multe moduri, în funcţie de experienţa şi imaginaţia celui care o formulează.

Page 102: Suport curs Sisteme anul II ECTS

Funcţii de agregare: COUNT, SUM, AVG, MAX, MIN

Formatul general al unei fraze SELECT ce conţine funcţii predefinite este:SELECT funcţia-predefinită1, ... , funcţia-predefinităNFROM listă-tabeleWHERE condiţii

Rezultatul oricărei fraze SELECT este o nouă relaţie (tabelă). În lipsa opţiunii GROUP BY, dacă în clauza SELECT este prezentă o funcţie predefinită, tabela rezultat va conţine o singură linie.

Funcţia COUNT contorizează valorile unei coloane, altfel spus, numără, într-o relaţie, câte valori diferite de NULL are coloana specificată.

Exemplu 1 Exemplu 1 Câţi clienţi are firma ?

SELECT COUNT (CodClient) AS Nr_ClientiFROM CLIENTI

În funcţia COUNT se poate utiliza ca argument, în locul numelui unei coloane, semnul *; în acest caz se va determina câte linii are tabela la care se aplică funcţia respectivă.

Exemplu 2 Exemplu 2 La câţi clienţi s-au trimis facturi ?

SELECT COUNT ()FROM CLIENTIWHERE CodClient IN

(SELECT CodClient FROM FACTURIEMISE)

Rezultatul corect poate fi însă obţinut şi prin utilizarea clauzei DISTINCT astfel:SELECT COUNT (DISTINCT CodClient)FROM FACTURIEMISE

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

............................................................................................................................................................................. Funcţia SUM calculează suma valorilor unei coloane.

Exemplu 3Exemplu 3 Care este valoarea totală a facturilor emise ?

SELECT SUM (ValoareTotala) AS Total_FPFROM FACTURIEMISE

Figura 6.17. Totalul vânzărilorFigura 6.17. Totalul vânzărilor

Exemplu 4 Exemplu 4 Care este totalul valorii facturilor trimise clientului AXON SRL ?

SELECT SUM (ValoareTotala) AS Total_FE_AXONFROM FACTURIEMISE, CLIENTI

Page 103: Suport curs Sisteme anul II ECTS

WHERE FACTURIEMISE.CodClient = CLIENTI.CodClient AND NumeClient = "AXON SRL"

Funcţiile MAX şi MIN. Determină valorile maxime, respectiv minime ale unei coloane în cadrul unei tabele.

Exemplu 5Exemplu 5Care este cea mai mică valoare a unei facturi emise ?

SELECT MIN(ValoareTotala)FROM FACTURIEMISE

Exemplu 6Exemplu 6Care este factura emisă ce are cea mai mare valoare ?

SELECT NrFactura, ValoareTotala FROM FACTURIEMISE WHERE ValoareTotala =

(SELECT MAX (ValoareTotala) FROM FACTURIEMISE)

Subconsultarea extrage valoarea totală maximă a unei facturi, valoare ce va fi utilizată ca argument pentru SELECT-ul principal. Rezultatul este cel din figura 6.18.

Figura nr. 6.18. Factura cea mai valoroasăFigura nr. 6.18. Factura cea mai valoroasă

Atenţie ! Varianta următoare nu este corectă:SELECT NrFactura, MAX(ValoareTotala )FROM FACTURIEMISE

Dacă în Oracle sau DB2 la execuţia acestei interogări se afişează un mesaj de eroare, în Visual FoxPro nu, aşa că unii utilizatori s-ar putea baza pe rezultatul afişat.

Gruparea tuplurilor. Clauzele GROUP BY şi HAVINGSQL permite utilizarea clauzei GROUP BY pentru a forma grupe (grupuri) de

tupluri ale unei relaţii, pe baza valorilor comune ale unei coloane. În frazele SELECT formulate până în acest paragraf, prin intermediul clauzei WHERE au fost selectate tupluri din diferite tabele.

Prin asocierea unei clauze HAVING la o clauză GROUP BY este posibilă selectarea anumitor grupe de tupluri ce îndeplinesc un criteriu.

Rezultatul unei fraze SELECT ce conţine clauza GROUP BY este o tabelă care va fi obţinută prin regruparea tuturor liniilor din tabelele enumerate în FROM, care prezintă o aceeaşi valoare pentru o coloană sau un grup de coloane.

Formatul general este:SELECT coloană 1, coloană 2, ...., coloană mFROM tabelă

Page 104: Suport curs Sisteme anul II ECTS

GROUP BY coloană-de-regrupare

Exemplu 1Exemplu 1Care este totalul zilnic al valorii facturilor emise ?

SELECT Data, SUM (ValoareTotala) AS Total_ZilnicFROM FACTURIEMISEGROUP BY Data

În acest caz tabela-rezultat va avea un număr de linii egal cu numărul de date calendaristice distincte din tabela FACTURIEMISE. Pentru toate facturile aferente unei zile se va calcula suma valorilor, datorită utilizării funcţiei SUM(ValoareTotala).

Succesiunea paşilor este următoarea:1. Se ordonează liniile tabelei FACTURIEMISE în funcţie de valoarea atributului

Data - figura 6.19.

Figura nr. 6.19. Pasul 1 al grupăriiFigura nr. 6.19. Pasul 1 al grupării

2. Se formează câte un grup pentru fiecare valoare distinctă a atributului Data - vezi figura 6.20.

Page 105: Suport curs Sisteme anul II ECTS

Figura nr. 6.20. Al doilea pas al grupăriiFigura nr. 6.20. Al doilea pas al grupării

3. Pentru fiecare din cele nouă grupuri se calculează suma valorilor atributului ValoareTotala. Tabela rezultat va avea nouă linii, ca în figura 6.21.

Figura nr. 6.21. Rezultatul final al grupăriiFigura nr. 6.21. Rezultatul final al grupării

Exemplu 2Exemplu 2Care este numărul facturilor emise pentru fiecare client ?

SELECT NumeClient, COUNT(NrFactura)FROM FACTURIEMISE INNER JOIN CLIENTI

ON FACTURIEMISE.CodClient = CLIENTI.CodClientGROUP BY FACTURIEMISE.CodClient

Până la standardul SQL99 şi publicarea Amendamentului OLAP la acest standard, în SQL nu pot fi calculate, prin GROUP BY, subtotaluri pe mai multe niveluri. Pentru aceasta este necesară scrierea de programe în SGBD-ul respectiv.

Clauza HAVING permite introducerea unor restricţii care sunt aplicate grupurilor de tupluri, deci nu tuplurilor "individuale", aşa cum "face" clauza WHERE. Din tabela rezultat sunt eliminate toate grupurile care nu satisfac condiţia specificată.

Clauza HAVING "lucrează" împreună cu o clauză GROUP BY, fiind practic o clauză WHERE aplicată acesteia.

Page 106: Suport curs Sisteme anul II ECTS

Formatul general este:SELECT coloană 1, coloană 2, .... , coloană mFROM tabelăGROUP BY coloană-de-regrupareHAVING caracteristică-de-grup

Exemplu 3Exemplu 3Pentru facturile emise interesează valoarea zilnică a acestora (în funcţie de data la care au fost întocmite, dar numai dacă aceasta (valoarea zilnică) este de mai mare de cinci milioane lei.

SELECT Data, SUM(ValoareTotala)FROM FACTURIEMISEGROUP BY DataHAVING SUM(ValoareTotala) > 15000000

La execuţia acestei fraze, se parcurg cei trei paşi prezentaţi la exemplul 1, apoi, din cele nouă tupluri obţinute prin grupare, sunt extrase numai cele care îndeplinesc condiţia SUM(ValoareTotala)>15000000. Rezultatul final este cel din figura 6.22.

Figura 6.22. Rezultatul consultării - exemplul 3Figura 6.22. Rezultatul consultării - exemplul 3

Exemplu 4 Exemplu 4 Să se afişeze ziua în care s-au întocmit cele mai multe facturi.

SELECT DataFROM FACTURIEMISEGROUP BY DataHAVING COUNT(*) >= ALL

(SELECT COUNT(*) FROM FACTURIEMISE GROUP BY Data)

Din păcate, nici acest tip de interogare (prezenţa subconsultărilor în clauza HAVING) nu este agreat de Visual FoxPro, astfel încât este necesară utilizarea mai multor fraze SELECT şi salvarea rezultatelor intermediare fie în tabele derivate (view-uri), fie în cursoare (NR_PE_ZILE) care, în VFP sunt tabele temporare a căror viaţă este limitată de închiderea lor, explicită sau implicită:

SELECT Data, COUNT(*) AS Nr ;FROM FACTURIEMISE ;INTO CURSOR NR_PE_ZILE ;GROUP BY Data

SELECT Data, Nr ;FROM NR_PE_ZILE ;

Page 107: Suport curs Sisteme anul II ECTS

WHERE Nr >= ;(SELECT MAX(Nr) ;

FROM NR_PE_ZILE)

Conţinutul cursorului NR_PE_ZILE, precum şi rezultatul final sunt cele din figura 6.23.

Figura 6.23. Obţinerea în VFP a zilei cu cele mai multe facturiFigura 6.23. Obţinerea în VFP a zilei cu cele mai multe facturi

COMENZI PENTRU ACTUALIZAREA BAZELOR DE DATE

SQL prezintă comenzi specifice pentru modificarea conţinutului unei tabele, înţelegând prin aceasta trei acţiuni prin care se actualizează baza:

a) adăugarea de noi linii la cele existente într-o tabelă,b) ştergerea unor linii,c) modificarea valorii unui atribut.

Adăugarea de înregistrări

Exemplu 1 Exemplu 1 Să presupunem că, la un moment dat, întreprinderea vinde produse şi firmei RODEX SRL care are sediul pe strada Sapienţei, nr.44 bis, în localitatea Iaşi.

Acest nou client trebuie "introdus" în baza de date, operaţiune care în SQL, se realizează prin comanda:

INSERTINTO CLIENŢIVALUES (1009, ‘RODEX SRL’, ‘Sapienţei, 44 bis’, ‘6600’)

Fraza INSERT de mai sus poate fi scrisă şi sub forma INSERT INTO CLIENŢI (CodClient, NumeClient, Adresa, CodPostal)VALUES (5009, ‘RODEX SRL’, ‘Sapienţei 44 bis’, 6600).

După cum se observă, după numele tabelei (CLIENŢI) au fost enumerate toate atributele pentru care se introduc valori prin clauza VALUES. Dacă nu s-ar fi cunoscut adresa clientului RODEX, atunci fraza INSERT ar fi avut una din formele:

Page 108: Suport curs Sisteme anul II ECTS

INSERTINTO CLIENŢI (CodClient, NumeClient, Adresa, CodPostal)VALUES (5009, "RODEX SRL", NULL, ‘6600’)

sauINSERTINTO CLIENŢI (CodClient, NumeClient, CodPostal)VALUES (5009, ‘RODEX SRL’, ‘6600’)

În noua linie a tabelei CLIENŢI valoarea atributului Adresa va fi NULL.

Ştergerea de înregistrări

Operaţiunea de eliminarea a una sau mai multe linii dintr-o tabelă, pe baza unui predicat, se realizează în SQL prin comanda DELETE care are sintaxa:

DELETE FROM nume-tabelăWHERE predicat

Exemplu 2Exemplu 2Să se elimine din tabela CLIENŢI linia aferentă clientului MODERN SRL (cod 1002).

DELETEFROM CLIENŢIWHERE CodClient = 1002

Exemplu 3Exemplu 3Să se şteargă datele referitoare la fiecare vânzare de produs pentru clienţii din oraşul Focşani.

DELETEFROM FACTURIEMISEWHERE CodClient IN

(SELECT CodClient FROM CLIENŢI, LOCALITĂŢI

WHERE CLIENŢI.CodPostal=LOCALITĂŢI.CodPostal ANDLocalitate = "Focşani"))

Nici această formă nu funcţionează în VFP. În general, ştergerea unor linii trebuie privită cu multă circumspecţie, deoarece atunci când linia de şters conţine valori ale unor atribute ce apar în alte tabele ca şi chei străine, există riscul pierderii integrităţii referenţiale.

Standardul SQL92 (nu şi dialectul SQL din VFP) permite la crearea unei tabele descrierea acţiunii care se va derula la ştergerea unei linii părinte în cazul în care există linii-copil. Spre exemplu, se poate refuza ştergerea de linii din tabela CLIENŢI, dacă la crearea tabelei FACTURIEMISE se specifică:

CREATE TABLE FACTURIEMISE(NrFactura DECIMAL(8) NOT NULL,DataFactura DATE,CodClient DECIMAL(6) NOT NULL, ValoareTotala DECIMAL(15) not NULL,TVAColectata DECIMAL(14) , PRIMARY KEY (NrFactura),

FOREIGN KEY (CodClient) REFERENCES CLIENTI

Page 109: Suport curs Sisteme anul II ECTS

ON DELETE RESTRICT)

Page 110: Suport curs Sisteme anul II ECTS

Modificarea valorilor unor atribute

Pentru modificarea valorilor unuia sau multor atribute dintr-o tabelă, comanda utilizată este UPDATE care are formatul general:

UPDATE tabelăSET atribut = expresieWHERE predicat

Ca rezultat, vor fi modificate valorile atributului specificat, noile valori ale acestuia fiind cele care rezultă în urma evaluării expresiei; modificarea se va produce pe toate liniile tabelei care îndeplinesc condiţia specificată în predicat.

Exemplu 4 Exemplu 4 În tabela CLIENŢI, fiecărui client i-a fost atribuit un cod unic, începând cu 1001. Dacă din diferite motive, se doreşte ca "numerotarea" clienţilor să înceapă de la 3001, păstrându-se ordinea, se poate articula fraza UPDATE următoare:

UPDATE CLIENŢISET CodClient = CodClient + 2000

Exemplul este suficient de neinspirat, deoarece în practică modificarea codului clienţilor antrenează modificarea valorilor acestui atribut în toate tabelele în care apare (în cazul nostru FACTURIEMISE), datorită faptului că este o cheie străină.

Page 111: Suport curs Sisteme anul II ECTS

MEDIUL DE LUCRU VISUAL FOXPROMEDIUL DE LUCRU VISUAL FOXPRO

Visual FoxPro (VFP) face parte din categoria sistemelor de gestiune a bezelor de date relaţionale, dar înglobează şi facilităţi specifice programării orientate obiect. El reprezintă un mediu de lucru puternic, orientat către utilizatorii finali, pentru crearea bazelor de date şi dezvoltarea de aplicaţii complexe centrate în jurul bazelor de date. Obiectele unei astfel de aplicaţii sunt: baza de date, interogări asupra bazei de date (query), formulare pentru introducerea datelor, rapoarte, meniuri, proceduri etc. Gestionarea acestor obiecte se poate realiza de o manieră centralizată cu ajutorul unei interfeţe unice prin înglobarea lor într-un proiect (aplicaţie).

Obiectele unei aplicaţii pot fi create şi/sau modificate prin apelarea la comenzile limbajului procedural inclus dar şi prin intermediul generatoarelor şi al asistenţilor speciali (wizard) puşi la dispoziţia utilizatorilor finali.

Componentele mediului de lucru

O dată cu deschiderea sesiunii de lucru FoxPro, elementele mediului de lucru apar pe ecran în următoarea formă (vezi fig. nr. 7.1).

Figura nr. 7.1. Elementele mediului de lucru FoxProFigura nr. 7.1. Elementele mediului de lucru FoxPro

VFP pune la dispoziţia utilizatorilor o interfaţă grafică prietenoasă, orientată pe evenimente, ceea ce permite trecerea rapidă de la o activitate la alta, de la o fereastră la alta sau de la o aplicaţie la alta. Activităţile necesare creării şi gestionării obiectelor din

Page 112: Suport curs Sisteme anul II ECTS

aplicaţii pot fi realizate prin intermediul următoarelor componente ale mediului de lucru VFP: meniurile derulante (pull-down menus), ferestrele de lucru şi obiectele de control.

Sistemul de meniuri derulante este asemănător celui folosit în mediile de lucru Windows. Apelarea componentelor din meniurile derulante se face atât prin intermediul tastaturii cât şi al mouse-ului. În funcţie de contextul de lucru, unele opţiuni nu sunt selectabile deoarece la momentul respectiv este imposibilă aplicarea lor.

Figura nr. 7.2. Exemplu de meniu derulant Figura nr. 7.2. Exemplu de meniu derulant îîn Visual FoxPron Visual FoxPro

Mediul de lucru VFP se bazează pe utilizarea de ferestre, aproape fiecare acţiune determinând deschiderea unei ferestre de lucru. De exemplu, acţionarea comenzii New din meniul File determină apariţia ferestrei din fig. nr. 7.2. Ferestrele pot fi gestionate atât cu ajutorul tastaturii, cât şi cu ajutorul mouse-ului.

Obiectele de control sunt utilizate în modul de lucru asistat prin meniurile şi submeniurile oferite de sistem sau în utilizarea intrumentelor de dezvoltare a aplicaţiilor (generatore de rapoarte, constructori de meniuri etc.).

Principalele obiectele de control utilizabile în Visual FoxPro sunt următoarele (vezi figura 7.3):

• cadru de pagină (ex. fereastra din figura 7.3 conţine două cadre de pagină – SERVER şi CLIENT, fiecare cu obiectele sale de control; pagina SERVER este activă);

• casete de text;• casete combinate;• casete cu listă;• casete de incrementare/decrementare;• butoane de opţiune;

Page 113: Suport curs Sisteme anul II ECTS

• casetă de validare;• buton de comandă.

Figura nr. 7.3. Obiecte de control Visual FoxProFigura nr. 7.3. Obiecte de control Visual FoxPro

Diferite obiecte de control sunt disponibile şi în cadrul instrumentelor de dezvoltare a aplicaţiilor. Astfel, pentru formulare sunt specifice următoarele obiecte de control:

• Label – text (înlocuieşte comanda @…SAY…) - cu ajutorul lor se pot afişa texte în cadrul unui formular (fereastră de lucru definită de utilizator);

• Text Box şi Edit Box – casete de editare text (înlocuieşte comanda @ … GET … ) – permit introducerea de date de diferite tipuri;

• Drop-Down List şi Drop-Down Combo (liste ascunse, respectiv liste ascunse combinate cu o casetă de text, permiţând adăugarea de elemente în listă) – oferă posibilitatea selectării unor elemente dintr-o mulţime finită, ce sunt afişate pe ecran;

• Command Button – buton declanşator – permit lansarea în execuţie a anumitor operaţiuni, ele având înscrise texte sau imagini care sugerează operaţia ce poate fi realizată;

• Option Button – buton de selecţie – prin intermediul cărora se poate selecta o singură opţiune din mai multe posibile;

• Check Box – comutator – sunt utilizate atunci când trebuie ca utilizatorul să opteze pentru una din două posibilităţi şi prin care se precizează respectarea sau nerespectarea unei condiţii anume;

• Grid – grilă - afişează datele din baza de date sub formă tabelară şi permite editarea conţinutului acestora sau adăugarea de noi înregistrări;

• Image – permite introducerea unei imagini;• OLE – permite legarea unor obiecte din alte aplicaţii Windows (adesea imagini

şi sunete);

Page 114: Suport curs Sisteme anul II ECTS

• Spinner – casetă de editare cu butoane de incrementre/decrementare – este utilizată în cazul valorilor numerice şi permite creşterea sau descreşterea interactivă a valorii din casetă cu o anumită valoare fixată la proiectarea ei;

• Timer – declanşează execuţia unei proceduri la intervale prestabilite de timp;• Page Frame – cadru de pagină - permite crearea de “pagini” suprapuse în

aceeaşi zonă din formular;• Line, Shape – pentru trasarea de linii şi figuri geometrice.Pentru rapoarte sunt disponibile următoarele obiecte de control:• Label – text;• Field – permite afişarea valorii unui câmp dintr-o tabelă sau o variabilă de

memorie în oricare din benzile unui raport.• Rectangle, Line, Rounded Rectangle – pentru trasarea de linii şi figuri

geometrice;• OLE Bound Control – pentru afişarea unui câmp OLE.Obiectele enumerate dispun de multiple proprietăţi, metode (de fapt, proceduri

FoxPro) şi evenimente cărora li se pot ataşa proceduri (click de mouse, apăsarea unei taste, deplasare). Un obiect are predefinite metode standard, dar utilizatorul poate crea şi propriile sale metode.

Moduri de lucru FoxPro

După deschiderea sesiunii de lucru, VFP oferă utilizatorilor trei modalităţi de realizare a operaţiunilor dorite: modul direct, modul asistat şi modul program.

Modul de lucru direct

În modul de lucru direct (sau comandă) utilizatorul poate realiza operaţiunile dorite prin introducerea liniilor de comandă corespunzătoare în fereastra de comenzi, iar rezultatele sunt afişate imediat pe ecran. În acest mod pot fi folosite aproape toate comenzile FoxPro. În principiu nu pot fi folosite comenzile pentru controlul derulării programelor (RETURN, CANCEL, EXIT) şi comenzile pentru descrierea structurilor de control alternative şi repetitive. Utilizarea acestora generează mesajul de eroare “Statement not allow in interactive mode”. În plus, în fereastra asociată modului de lucru direct sunt păstrate toate comenzile introduse într-o sesiune de lucru şi pot fi salvate, respectiv reutilizate după cerinţe. Activarea sau dezactivarea ferestrei de comenzi asociate modului de lucru direct poate fi realizată prin combinaţia de taste CTRL + F2.

Comenzile FoxPro au următoarea formă generală:VERB [<lista_expresii>] [<domeniu>] [FOR <expL1>] [WHILE<expL2>]

[TO PRINTER | TO ARRAY <lista_tablouri> | TO <variabila_memorie> | TO FILE <fisier>] [ IN <alias>] [NOOPTIMIZE] [ALL [LIKE | EXCEPT <mască>]]

Page 115: Suport curs Sisteme anul II ECTS

VERB reprezintă numele comenzii, este cuvânt rezervat şi exprimă acţiunea de executat.

Argumentul <lista expresii> reprezintă o listă de diferite tipuri de expresii (şiruri de operanzi legaţi între ei prin operatori). Cele mai importante expresii sunt cele matematice. Operanzii pot fi nume de câmpuri, nume de variabile, elemente de tablou, constante, funcţii. Operatorii pot fi aritmetici (+,-,/,*,^), relaţionali (<,>,<=,>=,#,=), logici (NOT, AND, OR) etc.

Mulţimea înregistrărilor asupra cărora acţionează comanda formează domeniul înregistrărilor. Clauza <domeniu> se va înlocui cu una din următoarele construcţii, în funcţie de necesităţi:

• ALL selectează toate înregistrările din tabelă;• NEXT <expN> se referă la următorele <expN> înregistrări, începând de la

înregistrarea curentă, inclusiv;• RECORD <expN> acţionează numai asupra înregistrării cu numărul <expN>;• REST selectează înregistrările începând de la cea curentă, inclusiv şi până la

sfârşitul tabelei.De reţinut că fiecare comandă are un domeniu implicit. Spre exemplu, comanda

LIST are ca domeniu implicit ALL, iar DISPLAY are ca domeniu implicit înregistrarea curentă.

Clauzele FOR şi WHILE pot restricţiona domeniul. Clauza FOR se foloseşte pentru selectarea înregistrărilor în funcţie de o condiţie logică <expL1>. Comanda se va aplica numai acelor înregistrări pentru care <expL1> este adevărată. Clauza WHILE ("cât timp") selectează înregistrările în funcţie de expresia logică <expL2>. Spre deosebire de clauza FOR care după găsirea unei înregistrări care nu respectă condiţia <expL1> continuă testarea celorlalte, clauza WHILE întrerupe testarea înregistrărilor când găseşte o înregistrare ce nu respectă condiţia dată. Dacă se specifică ambele clauze FOR şi WHILE, are prioritate clauza WHILE.

Prin clauza [TO PRINTER | TO ARRAY <lista_tablouri> | TO <variabila_memorie> | TO FILE <fisier>] rezultatul comenzii este direcţionat la imprimantă, într-un tablou, într-o variabilă de memorie sau într-un fişier.

Clauza [ALL [LIKE | EXCEPT <mască]] indică includerea în/sau excluderea de sub incidenţa comenzii a unor fişiere, câmpuri, variabile de memorie conform măştii. În cadrul măştilor pot fi utilizate caracterele generice _ (‘underscore’) şi % ce au aceeaşi semnificaţie cu caracterele ? şi * din DOS.

Clauza IN permite gestionarea datelor dintr-o altă zonă de lucru. Numărul zonelor de lucru diferă de la un sistem la altul şi de la o versiune la alta. În fiecare zonă de lucru putem deschide o tabelă (comanda USE). Parametrul <alias> este un pseudonim utilizat

Page 116: Suport curs Sisteme anul II ECTS

pentru o tabelă. Acest pseudonim poate fi orice nume diferit de numele tabelei.. Dacă lipseşte, pseudonimul este chiar numele tabelei.

Clauza NOOPTIMIZE – inhibă tehnica Rushmore de comprimare a indecşilor.În descrierea comenzilor se folosesc următoarele elemente de metalimbaj:

• componentele scrise cu majuscule sunt cuvinte rezervate (nume de comenzi sau funcţii); se folosesc exact în aceeaşi formă, eventual prescurtate la primele 4 caractere;

• componentele scrise cu minuscule, în paranteze unghiulare reprezintă construcţii definite de utilizator;

• [ ] desemnează o construcţie opţională;• . . . indică posibilitatea de repetare a construcţiei anterioare• | este sau exclusiv şi indică posibilitatea selectării unei singure opţiuni din lista

respectivă.

Exemplu: Exemplu: Comanda LIST are următorul format:LIST [FIELDS <listă expresii>] [<domeniu>] [FOR <expL1>] [WHILE<expL2>] [OFF] [NOCONSOLE] [NOOPTIMIZE] [TO PRINTER [PROMPT] | TO FILE <nume fişier>]

Modul de lucru asistat

Utilizatorul poate realiza multe din operaţiunile dorite, fără să apeleze la comenzile VFP, prin intermediul modului de lucru asistat. Utilizarea acestui mod de lucru presupune, cel mai adesea, activarea sistemului de meniuri derulante. În loc de a scrie liniile de comenzi se aleg meniurile, submeniurile, comenzile şi parametrii necesari pentru realizarea obiectivului propus. În acest mod nu mai este necesară cunoaşterea amănunţită a sintaxei fiecărei comenzi. Unele opţiuni din submeniuri apar urmate de trei puncte (…), ceea ce arată că după selectare trebuie aleasă altă opţiune sau trebuie furnizaţi şi alţi parametri, prin intermediul unui submeniu sau al unei casete de dialog.

Pe măsură ce se lucrează cu meniurile, VFP converteşte operaţiunile în comenzi care sunt reţinute în fereastra asociată modului de lucru direct. În acest fel, modul de lucru asistat este un mijloc ideal pentru învăţarea comenzilor VFP.

O altă facilitate specifică modului de lucru asistat este reprezentată de gestionarul de aplicaţii (Project Manager). El permite înglobarea într-o aplicaţie a tuturor obiectelor care o compun precum şi gestiunea lor centralizată prin intermediul unei interfeţe unice (vezi figura 7.4). Această interfaţă permite accesarea asistenţilor speciali pentru crearea bazei de date, a generatoarelor şi a altor instrumente de lucru asistat, dar şi adăugarea componentelor ce nu au fost create în cadrul proiectului (aplicaţiei). Toate obiectele aplicaţiei sunt salvate într-un fişier cu extensia PJX, iar la construirea proiectului prin selectarea butonului BUILD, toate obiectele sunt compilate într-un singur fişier cu extensia APP.

Page 117: Suport curs Sisteme anul II ECTS

Figura nr. 7.4. Interfaţa gestionarului de aplicaţiiFigura nr. 7.4. Interfaţa gestionarului de aplicaţii

Crearea şi gestionarea obiecteelor din aplicaţie se poate realiza prin selectarea tipului de obiect dorit şi a unuia din butoanele oferite de interfaţă. Aceste butoane au următoarele funcţiuni:

• New – permite crearea unui nou obiect, în funcţie de tipul de obiect selectat.NotăNotă. Toate aceste operaţiuni pot fi realizate şi prin intermediul opţiunilor existente în sistemul de meniuri, însă obiectele create nu sunt adăugate automat în proiect.

• Add – adaugă la proiect un obiect creat în afara proiectului.• Modify – deschide instrumentul de proiectare corespunzător cu tipul obiectului

selectat şi permite modificarea acestuia. Este activ numai dacă este selectat un obiect.

• Browse – deschide o tabelă în fereastra BROWSE care permite actualizarea datelor în tabela respectivă. Acest buton este activ numai în urma selectării unei tabele.

• Open/Close – deschide/închide o bază de date. Dacă baza de date selectată este deja deschisă pe buton va fi înscrisă eticheta CLOSE, iar dacă baza de date este închisă va fi înscrisă eticheta OPEN.

Page 118: Suport curs Sisteme anul II ECTS

• Remove – determină eliminarea obiectului selectat din proiect sau ştergerea fizică a acestuia de pe disc, în funcţie opţiunea selectată de utilizator în fereastra de dialog afişată pe ecran.

• Build – realizează compilarea tuturor obiectelor din aplicaţie sau obţinerea unui fişier executabil care să permită utilizatorilor lansarea în execuţie a aplicaţiei fără a mai fi necesară desciderea explicită a unei sesiuni de lucru VFP.

• Preview – afişează pe ecran raportul sau eticheta selectată, create anterior cu generatorul de rapoarte sau generatorul de etichete. Acest buton este activ numai în cazul selectării unui obiect de tip raport sau etichetă.

• Run – lansează în execuţie interogarea, formularul sau programul selectat şi este activ doar dacă a fost selectat un obiect de tipul celor menţionate.

Observaţie:Observaţie: Nu toate butoanele prezentate anterior sunt afişate la un moment dat, ci numai unele, în funcţie de contextul de lucru (adică de tipul obiectului selectat)

Modul de lucru program

În cazul aplicaţiilor complexe, structurate în programe şi proceduri, se apelează la modul de lucru program. Modul de lucru program asigură astfel descrierea eficientă a prelucrărilor repetitive sau a condiţiilor de execuţie a diferitelor categorii de operaţiuni.

VFP dispune de un editor de texte care permite crearea şi editarea fişierelor care conţin programele şi procedurile. Acest editor de texte este apelat prin comanda MODIFY COMMAND <nume program> sau în modul asistat din meniul File/New/Program. Automat la salvare se va adăuga fişierului extensia .PRG. Execuţia programelor FoxPro se realizează prin comenzile DO <nume program> sau DO <nume procedură> sau în modul asistat din meniul Program/DO.

Performanţe deosebite se obţin prin îmbinarea modului de lucru asistat cu cel program.

CREAREA BAZELOR DE DATE ÎN VISUAL FOXPRO

Structura unei baze de date în VFP

Începând cu versiunea 3, FoxPro, devenit Visual FoxPro, se apropie apreciabil de “filosofia” modelului relaţional. Elementul central al unei BD este tabela (table) - vezi exemplul din figura 7.5. O tabelă corespunde noţiunii teoretice de relaţie. Coloanele tabelei sunt denumite atribute sau câmpuri (fields). Noţiunii de tuplu (sau linie) îi corespunde cea de înregistrare (record). Fiecare înregistrare are un număr intern (recno), care depinde de ordinea “fizică” în care înregistrările au fost adăugate în tabelă.

Page 119: Suport curs Sisteme anul II ECTS

După cum a fost prezentat în paragraful anterior, o mare parte din comenzile SGBD-ului au ca domeniu toate înregistrările tabelei, în timp ce altele doar înregistrarea curentă. Caracteristic categoriei de SGBD-uri din care face parte FoxPro este prezenţa unui pointer intern (un soi de contoar) care memorează numărul înregistrării curente.

Informaţii despre înregistrări sunt furnizate de funcţii precum:• recno() – furnizează numărul (intern) al înregistrării curente;

reccount() – furnizează numărul total de înregistrări din tabelă.

CLIENTI

Cod_clDen_cl

LocalitateAdresaDistanta

900Suprem SAIasiChisinau 12510

750Sinta SAIasiBradului 10 10820Rodex SRLSuceavaUnirii 44 150320RC Star SRLRadautiPutnei 5190980CristalulDorohoiAl.I. Cuza 15180450Sigma SAVasluiCopou 5580735Gama SRLIasiPacurari 144

Page 120: Suport curs Sisteme anul II ECTS

10220Delta SRLSuceavaAreni 19150360Teta SRLVasluiFlorilor 3680

Figura nr. 7.5. Tabela CLIENTIFigura nr. 7.5. Tabela CLIENTI

O bază de date FoxPro, ca orice BD relaţională, este alcătuită din una sau mai multe tabele puse în legătură prin intermediul cheilor străine. Atât declararea cheilor primare, cât şi a celor străine (şi implicit, a restricţiilor referenţiale) se bazează în VFP pe indecşi asociaţi tabelelor şi care sunt, firesc incluşi în bază.

Pe lângă tabele, în BD mai sunt incluse: • tabele derivate (views), care pot fi locale sau la distanţă (remote – sunt utilizate

pentru a face legătura cu BD gestionate de alte SGBD-uri), • conexiuni cu alte SGBD-uri,• proceduri stocate (stored procedures), care sunt blocuri de program păstrate în

dicţionarul de date. Cele mai uzuale tipuri de proceduri stocate în VFP sunt: funcţii şi proceduri pentru validarea modificărilor în BD, funcţii pentru calcularea valorilor implicite ale unor atribute şi declanşatoare (triggere).

Este prezentată în continuare baza de date VANZARI, alcatuita din tabelele CLIENTI, COMENZI, PRODUSE.

Page 121: Suport curs Sisteme anul II ECTS

CLIENTICod_cl Den_cl Localitate Adresa Distanta

900 Suprem SA Iasi Chisinau 10

750 Sinta SA Iasi Bradului 10

820 Rodex SRL Suceava Unirii 150

320 RC Star SRL Radauti Putnei 190

980 Cristalul Dorohoi Al.I. Cuza 180

450 Sigma SA Vaslui Copou 80

520 Alfa SRL Suceava Marasesti 150

623 Beta SRL Iasi Decebal 10

735 Gama SRL Iasi Pacurari 10

220 Delta SRL Suceava Areni 150

ComenziNr_com Cod_cl Cod_prod Cantitate Data_com

12 900 34501 2000.00 13/03/05

20 750 34501 2500.00 15/03/05

25 820 34501 3570.00 28/02/05

80 320 34512 4500.00 28/12/05

80 980 34521 2500.00 16/04/05

30 820 34531 200.00 03/10/05

30 450 34502 5600.00 13/03/05

89 520 34531 1200.00 20/04/05

58 750 34502 1240.00 20/04/05

Produse Cod_prod Den_prod U_m Pret_i

34501 Rochie AC-218 BUC 250000

34511 Sacou AC-226 BUC 310000

34512 Sacou AC-227 BUC 360000

34521 Sarafan AC-243 BUC 120000

34531 Bolero AC-245 BUC 105000

34502 Rochie AC-219 BUC 162000

Numele tabelelor, atributele care o compun, restricţiile de cheie, regulile de validare la nivel de atribut şi înregistrare, legăturile permanente dintre tabele (cheile străine), declanşatoarele, precum şi celelalte proceduri stocate sunt păstrate într-un fişier special denumit dicţionar de date (data dictionary sau, în unele SGBD-uri, data catalog), care în VFP are extensia .DBC (DataBase Container). Tabelele BD au extensia .DBF, iar indecşii .CDX.

Mecanismul de bază în declararea domeniilor de valori ale unui atribut are la bază precizarea tipului şi lungimii fiecărui câmp dintr-o tabelă.

Tipuri de date FoxPro

Page 122: Suport curs Sisteme anul II ECTS

Datele sunt stocate pe suporturile de memorare într-un anumit format, în funcţie de tipul fiecăreia. Tipul unei date este o caracteristică ce stabileşte modul în care data este înregistrată pe suportul de memorare şi modul în care este interpretată şi prelucrată.

În VFP există o serie de tipuri de date predefinite, însă există posibilitatea definirii de către utilizator a altor tipuri de date pe baza celor existente deja. Tipurile de date predefinite implementate în VFP sunt: numeric, şir de caractere, logic (boolean), dată calendaristică, memo şi general.

Tipul Character (şir de caractere) este cel mai uzual tip de date, folosit în majoritatea tabelelor. Câmpurile caracter pot stoca între 1 şi 254 caractere. Poate conţine orice caracter ASCII. Pentru date de dimensiuni mai mari se recomandă câmpurile memo.

Exemplu: Exemplu: Den_client, C, 20Localitate, C, 15

Tipul Numeric (real, în virgulă fixă) descrie datele reprezentate în virgulă fixă. Lungimea maximă este de 20 de cifre, din care maxim 19 poziţii zecimale, fiecare cifră necesitând un spaţiu de stocare de un octet. În afară de cifre se pot folosi semnele +/- şi marca zecimală.

Exemplu: Exemplu: Cod_cl, N,3Pret_unit, N,11,2N,11,2 se interpretează astfel: 8 cifre pentru partea întreagă, 2 cifre pentru partea fracţionară şi marca zecimală.

Tipul de dată Numeric este tipul numeric clasic, implementat şi în versiunile anterioare de FoxPro, VFP oferind şi următoarele tipuri de date numerice:

• Tipul Integer este destinat reprezentării numerelor întregi, în cod complementar pe patru octeţi.

• Tipul Double presupune reprezentarea datelor numerice în virgulă mobilă dublă precizie şi este destinat reprezentării numerelor foarte mari sau a celor foarte mici.

• Tipul Currency (format monetar) este utilizat pentru memorarea datelor referitoare la tranzacţii în unităţi monetare.

Tipul Dată calendaristică este implementat prin Date (dată) şi DateTime (dată-oră).

DATE este utilizat pentru memorarea datelor calendaristice cuprinse în domeniul 01/01/100 şi 31/12/9999. Ordinea de specificare a zilei, lunii şi anului poate fi controlată prin comanda SET DATE.

DATETIME permite utilizatorilor o gestiune mai fină a timpului prin includerea momentelor de timp din cadrul unei zile alături de data calendaristică. Ora variază în domeniul 00:00:00 a.m. şi 11:59:59 p.m.

Page 123: Suport curs Sisteme anul II ECTS

Exemplu1: Exemplu1: DATA_C, DDATA_OP, DT

Exemplu2:Exemplu2:Deschideţi tabela COMENZI, configuraţi modul de specificare a datei calendaristice în formatul “dd/mm/yy” şi schimbaţi valoarea atributului DATA_C pentru prima înregistrare cu valoarea 4 martie 1977. Schimbaţi modul de specificare a datei calendaristice în formatul “yy/mm/dd”.

USE COMENZISET DATE TO DMYREPLACE DATA_C with {04/03/77}? DATA_C && se va afişa valoarea 04/03/1977SET DATE TO YMD? DATA_C && se va afişa valoarea 1977/03/04USE

Tipul Logical (logic) desemnează date ce nu pot lua decăt două valori: True (adevărat) şi Flase (fals). Are lungimea de un caracter. Pentru adevărat este asociată litera T sau cifra 1, iar pentru fals litera F sau cifra 0.

Exemplu: Exemplu: Taxabil, L, 1.

Tipul Memo se foloseşte pentru date tip caracter care depăşesc 254 de caractere şi prevede o dimensiune de stocare variabilă de la înregistrare la alta. Un bloc reprezintă un număr fix de caractere pe care FoxPro le rezervă pentru un câmp memo. În mod prestabilit, FoxPro utilizează 64 de octeţi pentru un bloc. FoxPro stochează valorile câmpurilor memo într-un fişier distinct care are extensia .FPT şi cu acelaşi nume cu al tabelei. Utilizând câmpurile memo se pot memora nu numai texte, ci şi alte informaţii: fişiere executabile DOS, imagini, biţi de sunet etc.

Tipul General apare începând de la versiunea FoxPro 2.5 sub Windows. Într-un câmp de tip general pot fi păstrate obiecte de diferite tipuri: grafic, imagine, sunet, foaie de calcul, adică obiecte create cu alte aplicaţii Windows. Datorită folosirii mecanismului OLE, un obiect poate fi păstrat într-un câmp de tip general prin legare sau prin încorporare. În ambele cazuri între baza de date şi aplicaţia sursă cu care a fost creat obiectul se realizează o legătură. Această legătură permite modificarea obiectelor încorporate sau legate la baza de date, direct din FoxPro (apelarea aplicaţiei sursă cu care se modifică obiectul se face din FoxPro). În cazul acestei relaţii FoxPro este considerat client pentru că foloseşte obiecte create cu alte aplicaţii, acestea fiind servere. Un câmp General este un câmp Memo specializat. FoxPro stochează câmpurile General în acelaşi fişier .FPT utilizat de celelalte câmpuri Memo ale tabelului, însă acestea nu sunt utilizate în acelaşi fel. Câmpurile General sunt utilizate în primul rând pentru stocarea referinţelor la obiecte OLE legate. Prin legare obiectul nu este inclus fizic în document, ci se memorează doar referinţele necesare localizării şi descrierii acestuia. Prin încorporare o copie a obiectului este inclusă fizic în document.

Page 124: Suport curs Sisteme anul II ECTS

Conversia între tipurile de dateUneori apare necesitatea prelucrării unor date de diferite tipuri în expresii complexe.

De exemplu, această necesitatea apare la specificarea expresiei indexului compus pentru o tabelă, expresie care să combine o date de tip şir de caractere cu date numerice sau date de tip şir de caractere cu date calendaristice. În astfel de expresii complexe toate datele trebuie să fie compatibile din punctul de vedere al tipului de dată, motiv pentru care se apelează la funcţiile de conversie a datelor care dau posibilitatea transformării datelor de diferite tipuri.

Cele mai utilizate funcţii de conversie a tipului de dată sunt prezentate mai jos.• Conversia datelor numerice în date de tip şir de caractere

STR(expresie_numerică,[lungime,[număr_zecimale]]), în care lungime reprezintă numărul de caractere pe care-l va conţine şirul de caractere returnat, iar număr_zecimale numărul de cifre de la partea fracţionară care-l va conţine şirul de caractere returnat.

• Conversia datelor de tip şir de caractere în date numericeVAL(expresie_caracter)

• Conversia datelor calendaristice în date de tip şir de caractereDTOC(expresie_dată[,1]) în care parametrul ‘1’ permite conversia unei date calendaristice într-un şir de caractere potrivit pentru indexare, în sensul că se păstrează succesiunea cronologică a înregistrărilor din tabelă.

• Conversia datelor de tip şir de caractere în date calendaristiceCTOD(expresie_caracter)

Exemplu 1Exemplu 1? VAL(“1250.25”)+2522.50? CTOD(“04/03/77”)

Exemplu 2Exemplu 2USE COMENZI? STR(NR_CDA,4)+DTOC(DATA_C)USE

În VFP stocarea datelor se realizează de cele mai multe ori în cadrul tabelelor care compun baza de date. În afară de acestea, în VFP se pot utiliza variabile şi constante. Dacă datele memorate în tabele sunt stocate pe disc şi le putem considera permanente deoarece ele nu se pierd între două sesiuni de lucru, datele memorate în variabile sunt stocate în memoria internă a calculatorului şi au un caracter temporar deoarece la închiderea sesiunii de lucru ele vor fi pierdute. Variabilele şi constantele sunt utilizate mai ales în cadrul programelor.

Variabilele de memorie pot fi simple sau structurate în tablouri (array). Dacă o variabilă poate memora o singură valoare la un moment dat, un tablou ne apare ca o matrice formată din mai multe linii şi, eventual, mai multe coloane în care se pot memora

Page 125: Suport curs Sisteme anul II ECTS

mai multe valori în acelaşi timp, în funcţie de dimensiunile definite la crearea sa. De exemplu, tabloul de date IMP_SAL(10,2) poate stoca 20 (10x2) de valori în acelaşi timp. Deci, se poate afirma că un tablou reprezintă un ansamblu de variabile de memorie.

O variabilă are asociată o locaţie de memorie în care se poate scrie sau citi o valoare. Referirea la o locaţie de memorie în vederea citirii/scrierii unei valori se face doar prin nume, în cazul variabilelor simple de memorie, şi prin nume urmat de indicii care specifică numărul liniei şi numărul coloanei (dacă este un tablou bidimensional) pentru tablourile de date.

Definirea unei variabile de memorie se poate face prin simpla atribuire a unei valori, iar în cazul tablourilor de date se utilizează comanda DIMENSION cu următoarea structură:

DIMENSION nume_tablou1(nr_linii1[,nr_coloane1])[, nume_tablou2 (nr_linii2 [, nr_coloane2])] ...

Exemplu ExempluSă se definească variabila de memorie SAL_BRUT şi să i se atribuie valoarea 1000000; să de definească tabloul de date bidimensional IMP_SAL format din două linii şi trei coloane şi să se atribuie valori fiecărui element din tablou. Să se calculeze şi să se afişeze impozitul aferent unui venit brut de 1000000 lei.

SAL_BRUT = 1000000 Note s-a definit variabila IMP_SAL şi i s-a atribuit valoarea 1000000DIMENSION IMP_SAL(2,3) && se defineşte tabloul IMP_SALIMP_SAL(1,1)=1000000IMP_SAL(1,2)=3000000IMP_SAL(1,3)=5000000IMP_SAL(2,1)=0.25IMP_SAL(2,2)=0.30IMP_SAL(2,3)=0.40? SAL_BRUT*IMP_SAL(2,1) && se va afişa 250000RELEASE SAL_BRUT, IMP_SAL

Crearea tabelelor unei bazelor de date

Crearea bazei de date

O bază de date poate fi creată în oricare dintre cele trei moduri de lucru ale VFP: asistat, prin comenzi şi prin program.

Cel mai simplu este modul de lucru asistat. Din proiect (deşi nu este obligatoriu) se alege cadrul de pagină Data. După selectarea pictogramei Databases se acţionează butonul New, iar dintre cele două butoane afişate apoi – Database Wizard şi New Database – se execută clic pe al doilea. În continuare, sistemul solicită precizarea numelui bazei de date – în exemplul nostru, VANZARI (salvată într-un fişier cu extensia .dbc). Drept rezultat, pe ecran apare “proiectantul” bazei de date (database designer), ca în figura 7.6.

Page 126: Suport curs Sisteme anul II ECTS

Fig. nr. 7.6. Database DesignerFig. nr. 7.6. Database Designer

În continuare, apelând la butonul New Table se trece la definirea structurii fiecărei tabele. Definirea mininală a structurii presupune indicarea numelui fiecărui atribut, a tipului şi lungimii acestuia. Pentru atributele de tip numeric real, pot fi precizate şi numărul de poziţii zecimale. Pentru tabela Clienţi, declararea atributelor este prezentată în fig. nr. 7.7.

Fig. nr. 7.7. Stabilirea structurii tabelei CLIENTI utilizând Table DesignerFig. nr. 7.7. Stabilirea structurii tabelei CLIENTI utilizând Table Designer

Din cele 3 cadre de pagină – Fields, Indexes şi Table – este utilizat mai întâi primul. Cadrul de pagină Fields (vezi figura 7.7) este utilizat pentru definirea câmpurilor din tabelă, prin intermediul următoarelor elemente:

• Name indică numele câmpului. Tabelele independente, din afara BD, trebuie să respecte limita de 10 caractere pentru numele câmpurilor, specifică versiunilor anterioare lui 3.0.

• Type specifică tipul câmpului.• Width specifică numărul de caractere sau de cifre pentru fiecare câmp.

Page 127: Suport curs Sisteme anul II ECTS

• Decimal precizează numărul de cifre pentru partea fracţionară. Se pot preciza doar la datele numerice, cu excepţia celor de tip întreg.

• Index specifică indecşii regulari pentru ordonarea valorilor câmpului ascendent sau descendent.

• NULL - când este specificat, atributul respectiv poate accepta valori nule.Imediat după declararea ultimului câmp, după salvarea structurii, pe ecran apare

mesajul “Input data records now?”. Dacă se răspunde prin Yes, atunci se pot introduce înregistrări în tabela proaspăt creată.

Atenţie! Este recomandat ca introducerea înregistrărilor să se facă doar după definirea tuturor tabelelor, a restricţiilor şi relaţiilor dintre ele, pentru a asigura în acest fel consistenţa şi corectitudinea datelor introduse.

Definirea restricţiilor la nivel de atribut şi înregistrare

O regulă de validare la nivel de atribut sau înregistrare este o funcţie care ”întoarce” o valoare logică, TRUE sau FALSE. Dacă valoarea returnată este TRUE atunci operaţiunea de actualizare a atributului/înregistrării este operată în tabelă. Dacă este FALSE, se afişează un mesaj de avertizare, iar modificarea prin care s-a încălcat restricţia nu se preia în bază.

Reguli la nivel de atribut

În figura anterioară pe lângă cele şase elemente care permit definirea atributelor unei tabele, în jumătatea de jos a ferestrei se observă alte după grupuri de opţiuni: Display şi Field validation. Display permite formatarea valorilor atributului, la culegere şi afişarea pe ecran. Pentru acest punct al discuţiei interesează cel de-al doilea grup. Opţinea Rule permite definirea unei reguli de validare la nivel de înregistrare, în timp ce Message va indica ce mesaj apare pe ecran atunci când regula nu este respectată. Cea de-a treia

Page 128: Suport curs Sisteme anul II ECTS

opţiune, Default value, este utilă la specificarea valorii implicite a atributului, valoare care va “umple” atributului respectiv la adăugarea unei noi înregistrări.Fig. nr. 7.8.Fig. nr. 7.8.

Introducerea regulilor la nivel de atributIntroducerea regulilor la nivel de atribut

Să luăm cazul tabelei Comenzi din figura 7.8. Atributul curent este data_c ce reprezintă data la care a fost emisă (de către client) comanda. Pentru acest atribut, valoarea implicită este data-sistem (funcţia DATE()). Regula de validare la nivel de atribuit stabileşte că data de întocmire a comenzii prebuie să “cadă” în intervalul 1 ianuarie 2000 şi 1 ianuarie 2005. Definirea regulii de realizează în exemplul nostru prin utilizarea funcţiei BETWEEN:

BETWEEN(data_c,{01/01/1997},{01/01/2005}).Dacă valoarea atributului nu se încadrează în intervalul specificat, se afişează

mesajul Data incorectă !.Reguli la nivel de înregistrareDeseori, interesează nu numai valorile pe care le poate avea un câmp, dar şi

restricţiile dintre două sau mai multe câmpuri ale aceleaşi înregistrări. Revenind la tabela Comenzi, instituim următoarea regulă a firmei stabilită de comun acord cu clienţii (care întocmesc comenzile): pentru produsul ce are codul 34501 cantitatea ce poate apărea pe o comandă nu trebuie să depăşească 5000 de unităţi.

Specific acestei reguli este că priveşte două câmpuri: când cod_prod = 34501, cantitate e musai <= 5000. Cum pentru cuvântul-cheie “musai” nu există o clauză specială, în VFP regula se scrie o funcţie ceva mai complexă: IIF(cod_prod = 34501, IIF(cantitate<=5000, .T., .F.), .T.)

Această expresie se introduce într-un alt cadru de pagină al proiectantului de tabele (Table Designer), şi anume Table, după cum se observă în fig. nr. 7.9.

Page 129: Suport curs Sisteme anul II ECTS

Fig. nr. 7.9. Cadrul de pagina Table pentru validarea la nivel de înregistrareFig. nr. 7.9. Cadrul de pagina Table pentru validarea la nivel de înregistrare

Cadrul de pagină Table oferă informaţii generoase despre tabelă: numele bazei de date din care face parte, câte înregistrări conţine, câte atribute alcătuiesc tabela şi care este suma lungimilor acestora. Pentru declarea restricţiei la nivel de tabelă intersează grupul Record validation. În căsuţa de text Rule a fost introdusă funcţia descrisă anterior, în timp ce pentru Message s-a specificat şirul de caractere: Pentru acest produs, cantitatea maxim admisa este 5000 de unitati !.

Declararea cheii primare

Atât în mecanismul de declarare a cheilor primare, cât şi cel de declarare al cheilor străine (relaţii sau legături permanente între tabele), un rol esenţial îl au indecşii.

Declararea cheii primare în VFP se face creând un index de tip primar. Un index are un nume (tag) şi o expresie pe baza căruia este construit. În expresia indexului de tip primar se introduce atributul (sau expresia de atribute, dacă cheia primară este compusă). Pentru exemplificare, vezi fig. nr. 7.10.

Declararea indecşilor în modul asistat (interactiv) se realizează prin întrebuinţarea cadrului de pagină Indexes al proiectantului de tabele. Pentru tabela Clienti numele indexului primar este chiar primaru, tipul acestuia este Primary, iar expresia de indexare este alcătuită din atributul-cheie primară a tabelei, cod_cl. Săgeţile din stânga numelui indexului arată dacă indexul este în ordine ascendentă sau descendentă.

Tipul indexului poate fi obişnuit (regular), unic sau candidat. Regular indică faptul că Visual FoxPro stochează în index valoarea generată de expresia indexului pentru fiecare linie a tabelului. Dacă mai multe înregistrări au aceeaşi expresie, FoxPro stochează expresia de mai multe ori, cu pointeri distincţi pentru fiecare înregistrare. În cazul tipului Unique sunt incluse numai valorile distincte ale experisiei de construire a indexului. Candidate indică faptul că expresia indexului respectiv este o cheie-candidat (cheie alternativă).

Page 130: Suport curs Sisteme anul II ECTS

Fig. nr 7.10. Crearea indexului primarFig. nr 7.10. Crearea indexului primar

FoxPro nu limitează expresiile indecşilor la un singur câmp. Orice combinaţie de câmpuri poate fi folosită drept expresie a unui index. Pentru a crea o expresie complexă se utilizează caseta de text Expression din Table Designer.

Declararea legăturilor permanente dintre tabele, inclusiv a restricţiilor referenţiale

Şi declararea restricţiilor referenţiale se bazează pe indecşi. În baza de date luată spre exemplificare, pentru tabela Clienţi cheia primară este cod_cl, pentru tabela Comenzi este cod_cda, iar pentru Produse, cod_prod. Restricţiile referenţiale se instituie între tabelele Comenzi şi Clienţi, respectiv între Comenzi şi Produse:

• între tabelele Comenzi (copil) şi Clienţi (părinte) atributul de legătură este cod_cl

• între tabelele Comenzi (copil) şi Produse (părinte) atributul de legătură este cod_prod.

Pentru stabilirea legăturilor permanente (suportul restricţiilor referenţiale) este necesară, pe de o parte crearea în tabelele părinte a indecşilor primari, iar, pe de altă parte, în tabela copil a câteva unui index de tip Regular pentru fiecare din cele două atribute – chei străine, cod_cl şi cod_prod. Pentru tabela Comenzi, acest lucru este reflectat în fig. nr. 7.11.

Page 131: Suport curs Sisteme anul II ECTS

Fig. nr. 7.11. Indecşii tabelei COMENZIFig. nr. 7.11. Indecşii tabelei COMENZI

Pentru simplificare, numele indecşilor “obişnuiţi” au acelaşi nume ca şi cel al atributului din expresie.

Cel mai simplu mod de creare a legăturilor permanente între tabele se realizează din proiectantul bazei (Database Designer) pritr-o simplă “tragere” de mouse între numele indexului primar din tabela părinte şi numele indexului “obişnuit” (regular) corespondent al tabelei-copil. Fig. nr. 7.12 ilustrează acest lucru.

Linia ce uneşte tabelele Clienţi şi Comenzi este simplă înspre Clienţi şi “trifurcată” înspre Comenzi. Această înseamnă că relaţia dintre cele două tabele este de tip one-to-many (una-la-mai multe).

Atenţie! Declararea legăturii permanente între tabele nu echivalează cu instituirea restricţiilor referenţiale. În VFP stabilirea restricţiilor referenţiale presupune indicarea modului în care SGBD-ul va “reacţiona” la actualizarea tabelei părinte şi a celei copil. Pentru declararea regulilor de urmat într-o restricţie referenţială, se face un dublu-click pe linia dintre cele două tabele, în urmă căruia va apărea fereastra cu numele Edit Relationship, ca în fig. nr. 7.13.

Page 132: Suport curs Sisteme anul II ECTS

Fig. nr. 7.12. Legăturile permanente între tabelele BDFig. nr. 7.12. Legăturile permanente între tabelele BD

Fig. nr. 7.13. Fereastra Edit RelationshipFig. nr. 7.13. Fereastra Edit Relationship

Tabela părinte este Clienti, indexul participant în relaţie fiind primaru, în timp ce tabela copil este comenzi, indexul participant fiind cod_cl. După acţionarea butonului Referential Integrity sunt definite cele trei reguli pentru:

• modificarea cheii primare în tabela părinte;• ştergerea unei înregistrări în tabela părinte;• inserarea unei înregistrări sau modificarea valorii cheii străine în tabela copil.

Fig. nr. 7.14. Constructorul de integritate referenţialăFig. nr. 7.14. Constructorul de integritate referenţială

În constructorul de integritate referenţială prezentat în fig. nr. 7.14 s-au instituit următoarele reguli:

• modificarea valorii cod_cl in tabela Clienti atrage modificarea în cascadă a tuturor liniilor-copil (linii în care cod_cl avea valoarea dinaintea modificării) în comenzi;

• modificarea valorii cod_prod in tabela Produse atrage modificarea în cascadă a tuturor liniilor-copil în comenzi;

• nu se şterg linii din tabela clienti dacă există linii-copil corespondente în tabela Comenzi;

Page 133: Suport curs Sisteme anul II ECTS

• nu se şterg linii din tabela Produse dacă există linii-copil corespondente în tabela Comenzi;

• nu se permite inserarea sau modificarea unei linii în tabela Comenzi dacă valoarea cheii străine, cod_cl nu există în tabela părinte, Clienti;

• nu se permite inserarea sau modificarea unei linii în tabela Comenzi dacă valoarea cheii străine, cod_prod nu există în tabela părinte, Produse.

Observaţie:Observaţie:Cele trei seturi de reguli definesc declanşatoare (triggerele) celor trei tabele.

Crearea bazei de date prin comenzi/program

Crearea prin comenzi al BD se poate realiza prin comenzile CREATE DATABASE şi CREATE TABLE. În fig. nr. 7.15 este prezentat programul creare_bd. Este drept, fiecare comandă din progam poate fi introdusă direct din fereastra de comenzi (mai puţin simbolul de continuare (punct-virgula)).

Fig. nr. 7.15. Program de creare a BDFig. nr. 7.15. Program de creare a BD

Notă: Notă: Prin comanda CREATE TABLE nu pot fi definite restricţiile referenţiate, ci numai precizate relaţiile permanente dintre tabele. Definirea modului de “reacţie” la adăugarea/ modificarea în tabelele copil sau modificarea/ştergerea în tabelele-părinte presupune utilizarea comenzii CREATE TRIGGER.

Page 134: Suport curs Sisteme anul II ECTS

Deschiderea tabelelor bazei de date prin comenzi

Fiecare tabelă a bazei de date are asociată o zonă de lucru (o zonă de memorie) prin intermediul căreia are loc accesul la date. În primele versiuni se putea lucra cu maximum 10 tabele simultan, iar în ultimele versiuni cu maximum 32767 tabele simultan. Fiecare dintre zone are asociat un număr de la 1 la 25, respectiv 32767. Primele 10 zone pot fi identificate şi prin primele litere ale alfabetului. La deschiderea unui tabel se poate asocia şi un alias pentru zona de lucru respectivă. Ca urmare, identificarea se poate face şi prin acest nume. Gestionarea zonelor de lucru se realizează prin comanda SELECT:

SELECT <exp N>| ExpC>

ExempluExempluSELECT 1USE CLIENTISELECT 2USE COMENZISELECT 3 USE NPRODUSESELECT COMENZI

Ultima zonă deschisă sau selectată se numeşte zonă curentă. Asupra tabelei din zona curentă au efect comenzile introduse.

ExempluExempluSELECT 1 USE CLIENTISELECT 2USE COMENZILIST FOR comenzi.cod_cl=clienti.cod_cl

Accesul la datele din tabele este permis numai după deschiderea lor, adică după asocierea zonei de lucru prin comanda USE. În Visual Fox Pro formatul acestei comenzi este:

USE [[<nume bază de date>.]<nume tabelă> | SQL <nume view> | ?][IN <zonă de lucru> | <alias >][ONLINE][ADMIN][AGAIN][NOREQUERY [<număr sesiune dechisă>]][NODATA][INDEX <listă fişiere index> | ?[ORDER [<expN> | <fişier .idx> | [TAG] <nume etichetă> [OF <fişier .cdx>]

[ASCENDING | DESCENDING]]]][ALIAS <alias>][EXCLUSIVE][SHARED][NOUPDATE]

Argumentul [<nume bază de date>.]<nume tabelă> specifică numele tabelei pe care o deschideţi. Pentru deschiderea unei tabele care nu aparţine bazei de date curente se

Page 135: Suport curs Sisteme anul II ECTS

utilizează punctul (.) pentru a separa baza de date de numele tabelei. Dacă nu se foloseşte şi numele bazei de date, Visual FoxPro poate deschide tabelele doar pentru baza de date curentă

Clauza SQL <nume view> specifică numele unui view SQL. USE ? afişează un dialog pentru alegerea dintr-o listă a tabelei ce va fi deschisă.Argumentul <zonă de lucru> specifică zona de lucru unde va fi deschisă tabela.

Clauza IN suportă 0 pentru zona de lucru. Argumentul <alias> specifică aliasul tabelei deschise în zona de lucru curentă. Dacă

numărul zonei de lucru sau aliasul lipsesc, tabela este deschisă în zona curentă de lucru selectată.

Clauza AGAIN permite deschiderea unei tabele în mai multe zone de lucruDacă deschideţi o tabelă într-o altă zonă de lucru, tabela din noua zonă de lucru va

avea aceleaşi atribute ca şi tabela originală. De exemplu, dacă tabela este deschisă în acces exclusiv şi este deschisă şi într-o altă zonă de lucru, atunci tabela va fi deschisă în acelaşi mod şi în noua zonă de lucru.

Clauza INDEX<listă fişiere index> | ? specifică lista indecşilor care vor fi deschişi cu tabela respectivă. Dacă tabela are un index compus structural acesta este deschis în mod automat cu tabela respectivă. Lista de indecşi poate conţine orice combinaţie de indecşi simpli (.IDX) sau compuşi (.CDX). Primul index din listă este cel activ.

INDEX ? afişează un dialog cu o listă de unde vor fi selectate fişierele index.Clauza ORDER [<expN> | <fişier .idx> | [TAG] <nume etichetă> [OF <fişier

.cdx>] stabileşte indexul principal după care se va face ordonarea înregistrărilor din tabelă (vezi subcapitolul 7.3.2 privind indexarea tabelelor).

Opţiunea ASCENDING | DESCENDING specifică ordinea crescătoare sau descrescătoare folosită pentru accesarea sau afişarea înregistrărilor din tabelă. Includerea acestor clauze nu schimbă fişierele index sau etichetele; modificarea intervine în ordinea în care înregistrările sunt afişate sau accesate.

Clauza ALIAS crează un alias pentru tabelă.Clauzele EXCLUSIVE şi SHARED se folosesc pentru lucrul în reţea. EXCLUSIVE

deschide tabela în modul exclusiv, deci alţi utilizatori nu au acces la ea. SHARED deschide tabela în modul de lucru partajat, deci la ea au acces şi alţi utilizatori. Dacă nu includeţi EXCLUSIVE sau SHARED, comanda SET EXCLUSIVE curentă (implicit este ON) va determina modul în care este deschisă tabela respectivă.

Clauza NOUPDATE specifică că tabela este read-only, deci nu poate fi actualizată.Comanda USE fără nici un argument realizează închiderea tabelei curente. Prin

comanda CLOSE DATABASE se închid toate tabelele deschise.