Documente Academic
Documente Profesional
Documente Cultură
Model Concep Al BD Relationare
Model Concep Al BD Relationare
Lect.univ.dr. Diana Trnveanu Asist.univ.dr. Ileana Hauer Baze de date. Access 2007
2011
Capitolele 1-3: asist. univ. dr. Ileana Hauer Capitolele 4-6: lect. univ. dr. Diana Trnveanu
CUPRINS
OBIECTIVELE CURSULUI .............................................................. 11 CAPITOLUL 1 CONCEPTE GENERALE DESPRE BAZELE DE DATE I SISTEMELE DE GESTIUNE A BAZELOR DE DATE .................... 13
1.1 Revoluia relaional ........................................................................................ 13 1.2 Conceptul de baz de date................................................................................ 15 1.3 Conceptul de sistem de gestiune a bazelor de date ............................................ 19 1.3.1 Introducere............................................................................................... 19 1.3.2 Obiectivele unui SGBD ............................................................................ 19 1.3.3 Funciile unui SGBD ................................................................................ 21 1.3.4 Regulile lui Codd ..................................................................................... 23 1.4 Modelarea datelor ............................................................................................ 27 1.4.1 Modele de date: perspectiv istoric ......................................................... 27 1.4.2 Sistemul de gestiune bazat pe fiiere (SGF) .............................................. 28 1.4.3 Modele prerelaionale............................................................................... 29 1.4.4 Modelul relaional .................................................................................... 30 1.4.5 Modelele postrelaionale i noi funcionaliti ........................................... 32 1.5 Rezumatul capitolului ...................................................................................... 34 1.6 ntrebri de auto-evaluare ................................................................................ 35
4.4.3 Forma normal 3 ...................................................................................... 88 4.5 Concluzii ......................................................................................................... 89 4.6 Rezumatul capitolului ...................................................................................... 89 4.7 ntrebri de autoevaluare din partea teoretic.................................................... 90 4.8 Exemple .......................................................................................................... 91 4.8.1 Problem rezolvat Filiala CEC ............................................................. 91 4.8.2 Probleme propuse..................................................................................... 94
5.13 Probleme propuse........................................................................................ 181 5.13.1 Problema propus Crearea tabelelor Filial CEC............................. 181 5.13.2 Problem propus Crearea formularelor............................................. 181 5.13.3 Problem propus Crearea interogrilor ............................................. 181 5.13.4 Problem propus Crearea rapoartelor ............................................... 181
10
OBIECTIVELE CURSULUI
Calculatorul va fi utilizat ca instrument de lucru pentru prelucrarea automat a volumelor mari de date organizate sub form de baze de date, extrem de importante ca suport de date pentru sistemele informatice integrate de management al activitii organizaiilor. Obiectivele cursului sunt nsuirea conceptelor de baz legate de : organizarea volumelor mari de date sub form de baze de date i prelucrarea acestora; formarea deprinderilor de a utiliza facilitile specifice programului Microsoft Access; construirea i gestionarea unor baze de date proprii (prelucrri de complexitate medie). n cadrul cursului sunt expuse principiile de baz ale proiectrii bazel or de date dup modelul relaional al i se prezint principalele obiecte ale bazelor de date Access, precum i modul de proiectare i utilizare a acestora . n cadrul seminarului se exerseaz crearea bazelor de date Access, a tabelelor, interogrilor, formularelor, rapoartelor i a comenzilor SQL.
11
12
CAPITOLUL 1 CONCEPTE GENERALE DESPRE BAZELE DE DATE I SISTEMELE DE GESTIUNE A BAZELOR DE DATE 1.1 Revoluia relaional
Astzi beneficiem de avantajele aduse de bazele de date relaional e: capacitatea de stocare, accesare, i modificare rapid a datelor pe calculatoarele low-cost. Totui, pn la sfritul anilor 1970, bazele de date au stocat cantiti mari de date ntr-o structur ierarhic, care a fost dificil de navigat i inflexibil. Programatorii aveau nevoie s tie ce doreau clienii s fac cu datele nainte de a proiecta baza de date . Adugarea sau schimbarea modului de analiz a datelor a fost un proces ndelungat i costisitor. n 1970, Edgar "Ted" Codd, un matematician angajat de IBM, a scris un articol care va schimba toate astea. La acea vreme, nimeni nu i-a dat seama c teoriile lui Codd vor declana o revoluie tehnologic la egalitate cu dezvoltarea calculatoarelor personale i Internet (Coronel, et al., 2009) Don Chamberlin, coinventor al SQL, cel mai popular limbaj utilizat de sistemele de baze de date de astzi, i-a amintit cum teoriile matematice ale lui Codd nu au fost luate n seam. Apoi Ted Codd a organizat un simpozion, iar Chamberlin a ascultat cum Codd a redus cinci pagini complicate de program la o linie. Simpozionul a convins IBM pentru a finana Sistem R, un proiect de cercetare care a construit o prototip al unei baze de date relaionale i care va duce n cele din urm la crearea limbajelor SQL i DB2. Adevratele sisteme relaionale s-au afirmat pe pia ncepnd cu anul 1984: sistemul DB2 (IBM Corp.) funcioneaz pe mainframe-urile IBM i, prin urmare, e portabil pe RS/6000; Oracle (Oracle Systems) a devenit un sistem de gestiune relaional portabil pe mai multe platforme; sistemul RDBMS (AWB) funcioneaz pe calculatoarele AT&T 3B; sistemele de gestiune Informix (Informix Software) i Sybase (Sybase Inc.) funcioneaz n mediul Unix. Mai multe sisteme de gestiune ale bazelor de date relaionale (FoxPro, Paradox etc.) au fost elaborate pentru calculatoarele personale. Dezvoltarea teoriei bazelor de date relaionale a cptat o amploare nemaivzut n domeniul aplicrii tehnicii de calcul. Au aprut o serie de reviste specializate n domeniul respectiv. ntre elaborrile teoretice i producerea sistemelor comerciale s-a creat un spaiu de cel puin 20 ani. Acesta e un rar exemplu cnd necesitile software considerabil depesc capacitile hardware. Rezultatele obinute n teoria relaional au influenat esenial sistemele de gestiune ce se bazeaz pe celelalte dou modele de date:
13
ierarhic i reea. Modelul relaional de date e aplicat pe larg i n bazele de date deductive. Pe de alt parte, se observ convergena modelului relaional i tehnologiilor orientate pe obiecte. "Revoluia relaional" a introdus mai multe idei valoroase n lumea bazelor de date. Printre acestea progrese tehnologice i beneficii ale sistemelor de gestiune ale bazelor de date pot fi menionate: Tabelele sunt un mijloc simplu de reprezentare a datelor. Ele permit programatorilor i utilizatorilor finali s -i organizeze datele n mod acceptabil. Extinderea modelului relaional a confirmat puterea de atracie a acestei reprezentri. SQL este un standard de limbaje de interpelri foarte comod. El e un limbaj nonprocedural de manipulare a datelor i a contribuit mult la creterea popularitii sistemelor de gestiune ale bazelor de date relaionale. Operaiile orientate pe mulimi permit programatorilor i utilizatorilor ordinari s gseasc i s actualizeze mari colecii de nregistrri fr a scrie programe speciale. Jonciunile sunt instrumente puternice de asociere a nregistrrilor anterior independente. Utilizatorii pot crea noi seturi de nregistrri (aa -numitele tabele virtuale), apelnd la jonciune. Interpelrile interactive. Cutarea i prelucrarea datelor n mod dinamic a adus la utilizarea larg a bazelor de date relaionale. Gestionarea tabelelor, vizualizarea interactiv i mbuntirea interactiv a contribuit ca utilizatorul s-i dea votul pentru sistemele relaionale. Consistena datelor. Sistemele de gestiune relaionale asigur c nici un utilizator i nici o aplicaie nu pot modifica baza de date, dac modificarea e n contradicie cu constrngerile de integritate.
14
1 2
Versiuni recente ale acestor limbaje permit i accesarea datelor organizate n baze de date . Termenul database (baz de date n limba englez) a aprut pentru prima dat n titlul unei conferine organizate n Santa Monica, SUA, n 1964: Development and Management of Computer Centered Database.
15
ansamblu structurat de date nregistrate pe suporturi accesibile de calculator pentru a satisface, chiar simultan, mai muli utilizatori de o manier selectiv i n timp oportun (Delobel, Adiba, 1982). colecie de date aflate n interdependen, mpreun cu descrierea datelor i a relaiilor dintre ele (Pescaru, et al, 1976). colecie de date utilizat ntr-o organizaie, colecie care este automatizat, partajat, definit riguros (formalizat) i controlat la nivel central (Everest, 1986). Fa de modelul bazat pe fiier, noutatea adus de organizarea datelor n baze de date o constituie existena unui fiier de descriere global al bazei, astfel nct s se poat asigura independena programelor fa de date. Acest fiier de descriere global al bazei este denumit dicionar de date sau catalog al sistemului. Dup cum se observ din figura 1.1, lucrul cu fiierele de date, deci extragerea i modificarea datelor, se desfoar exclusiv prin intermediul dicionarului de date n care se gsesc informaii privitoare la structura datelor i restriciile ndeplinite de acestea. Termenul de baz de date este folosit de multe ori n mod eronat, confundndu-se cu softul pentru baz de date care este utilizat. n realitate, softul pentru baze de date este numit sistem de gestiune a bazelor de date (SGBD), iar baza de date este recipientul care conine informaiile, recipient creat i manipulat prin intermediul SGBD. Coninutul acestui recipient se schimb foarte des, atunci cnd se lucreaz cu baza de date (adugri, tergeri i modificri de informaii)
16
Figura 1.1 Schema de principiu a unei baze de date Adaptare dup Fotache, M., 1997 A proiecta o baz de date nseamn a-i stabili structura, adic elementele componente, caracteristicile acestora, restriciile pe care trebuie s le respecte, relaiile dintre ele. A construi o baz de date nseamn a memora (a introduce) datele n baza de date, dup proiectarea acesteia. A administra o baz de date nseamn a asigura: (1) accesul la date al utilizatorilor, n funcie de drepturile fiecruia (funcia i importana fiecruia n organizaia respectiv), (2) coerena bazei de date (recuperarea informaiei atunci cnd au loc incidente: ntreruperea alimentrii cu curent electric, operaii contradictorii etc), (3) securitatea datelor stocate etc. A interoga o baz de date nseamn a extrage i a vizualiza datele care ndeplinesc anumite criterii i condiii. A actualiza o baz de date nseamn a modifica structura sau informaiile stocate n baza de date. Nu orice colecie de date este o baz de date. De exemplu, lista crilor dintr -o bibliotec nu este o baz de date, ci un simplu inventar de obiecte, o list, un tabel. Dac la aceast list adugm lista cititorilor abonai la bibliotec (eventual i lista angajailor bibliotecii) i lum n considerare activitile specifice bibliotecii (achiziionarea de cri noi, mprumutul i restituirea crilor de ctre cititori, eventual administrarea sarcinilor de serviciu ale angajailor), atunci avem de a face cu o baz de date.
17
n concluzie, fa de un inventar (un tabel), o baz de date are urmtoarele proprieti: reprezint un anumit aspect al lumii reale, numit microuniversul bazei de date; orice modificare care se produce n acest microunivers se reflect n baza de date (de exemplu: cumprarea unui nou DVD n vederea nchirierii, modificarea diferenei permise ntre cursul de cumprare i cel de vnzare al valutei etc); este o colecie de date coerent din punct de vedere logic i avnd un neles intrinsec (de exemplu: din baza de date asociat bibliotecii universitii nu vor face parte crile de telefon sau lista de materiale didactice din laboratorul de informatic); este proiectat, construit i administrat, avnd permanent n vedere un anumit scop; o baz de date este destinat utilizrii de ctre un anumit grup de persoane i permite efectuarea unui anumit set de operaii.
18
Exemple de SGBD: Microsoft Access, FoxPro (de la Microsoft), Paradox, Visual dBase (de la Borland), Oracle 10g (de la Oracle Corporation), Sybase Adapted Server (de la Sybase Inc.), Iris (de la Hewlett-Packard), IMS, DB2 (pn DB9 de la IBM).
19
folosirii sistemului de informare dispunnd de un minim de cunotine despre modul de organizare a lui n general i informatic n special; integritatea i securitatea datelor etc. n acest context, sistemului de gestiune al bazei de date i revin o serie de de obiective, cum sunt: 1) Asigurarea independenei datelor. O aplicaie, n general, este dependent de date n sensul c modificarea structurii de memorare a datelor sau a strategiei de acces la date afecteaz i aplicaia. Independena datelor fa de aplicaie este totui necesar cel puin din urmtoarele considerente: diferite aplicaii au nevoie de viziuni diferite ale acelorai date; administratorul bazei de date trebuie s aib libertatea de a schimba structura de memorare sau strategia de acces, ca rspuns la cerine (schimbri de standarde, prioritile aplicaiilor, unitile de memorare etc), fr a modifica aplicaiile existente; baza de date existent, precum i programele de exploatare a ei, care au fost folosite o perioad de timp, reprezint o investiie major la care nu trebuie s se renune prea uor. Independena datelor trebuie privit din dou puncte de vedere: independena fizic; independena logic a datelor. Independena fizic a datelor face ca memorarea datelor i tehnicile fizice de memorarea s poat fi modificate fr a determina rescrierea programelor de aplicaie. Independea logic a datelor se refer la posibilitatea adugrii de noi articole de date sau extinderea structurii conceptuale (globale), fr ca aceasta s impun rescrierea programelor existente. 2) Asigurarea unei redundane minime i controlate a datelor din baza de date. Spre deosebire de sistemele clasice de prelucrare automat a datelor, stocarea datelor n cazul bazelor de date se face astfel nct flecare dat s apar o singur dat. Totui, nu sunt excluse nici cazurile n care, pentru a realiza perfor mane sporite, referitoare la timpul de acces la date i rspuns la solicitrile utilizatorilor, s se accepte o anumit redundan a datelor, ns n acest caz se va institui un control automat asupra ei n vederea asigurrii coerenei datelor din baz. 3) Asigurarea unor faciliti sporite de utilizare a datelor. Aceasta presupune: - folosirea datelor de ctre mai muli utilizatori n diferite scopuri (aplicaii) ; - accesul ct mai simplu al utilizatorilor la date, fr ca acetia s fie nevoii s cunoasc structura ntregii baze de date, acest lucru rmnnd n sarcina administratorului bazei de date; - existena unor limbaje performante de regsire a datelor, care permit exprimarea sub forma unei conversaii, a unor criterii de selecie a datelor i indicarea unor reguli ct mai generale pentru editarea informaiilor solicitate;
20
- spre deosebire de sistemul clasic de prelucrare pe fiiere, unde exista un singur criteriu de adresare (cel care a stat la baza organizrii fiierului) n cazul bazelor de date, sistemul de gestiune trebuie s ofere posibilitatea unui acces multicriterial, fr sortri suplimentare, n timp ce modificarea criteriului la fiierele clasice implic reorganizarea lor; - utilizarea unui limbaj ct mai apropiat de limbajul natural, cu posibilitatea exploatrii bazei de date n regim conversaional. Aceasta ar oferi posibilitatea exploatrii n mod facil a bazei de date i de ctre utilizatorii neinfor maticieni. 4) Sporirea gradului de securitate a datelor mpotriva accesului neautorizat la ele. n condiiile bazelor de date, administratorul bazei de date poate prevedea ca accesul la baza de date s se fac numai prin canale corespunztoare, i poate, totodat, defini, verificri de autorizare realizate oricnd se ncearc accesul la anumite date. 5) Asigurarea integritii datelor mpotriva unor tergeri intenionate sau neintenionate, prin intermediul unor proceduri de validare, a unor protocoale de control concurent i a unor proceduri de refacere a bazei de date dup incidente. 6) Asigurarea partajabilitii datelor. Partaj abilitatea datelor trebuie neleas nu numai sub aspectul asigurrii accesului mai multor utilizatori la aceleai date, ci i acela al posibilitii dezvoltrii unor aplicaii fr a se modifica structura bazei de date.
Un SGBD pune la dispoziie utilizatorilor limbaje distincte pentru 1) descrierea bazei de date (limbaj de descriere a datelor- LDD) i 2) manipularea bazelor de date (limbaj de manipulare a datelor-LMD). Limbajele de manipulare (interogare) a bazelor de date pot fi: declarative (permit utilizatorului s declare de ce informaii are nevoie) i procedurale (oblig utilizatorul s descrie procedura de obinere a informaiilor).
21
gestiune ce utilizeaz limbaje gazd de nivel nalt, identificarea i delimitarea funciilor nu este att de evident. n ciuda acestor particulariti, totui, se pot deduce cteva funcii cu caracter de generalitate pentru toate sistemele de gestiune a bazelor de date. Prezentm n continuare cteva astfel de funcii: 1) Funcia de descriere a datelor permite definirea structurii bazei de date cu ajutorul limbajului de definire. Definirea datelor poate fi realizat la nivel logic, conceptual i fizic. La nivelul acestei funcii se descriu multitudinea atributelor (cmpurilor) din cadrul structurii bazei de date, legturile dintre entitile bazei de date sau dintre atributele aceleiai entiti, se definesc eventualele criterii de validare a datelor, metodele de acces la date, aspectele referitoare la asigurarea integritii i confidenialitii datelor, etc. Rezultatul acestei funcii se va concretiza n schema bazei de date, memorate n cod intern. 2) Funcia de manipulare a datelor este cea mai complex funcie i realizeaz urmtoarele activiti: - crearea (ncrcarea) bazei de date; - adugarea de noi nregistrri (tupluri); - suprimarea unor nregistrri; - modificarea valorilor corespunztoare unor cmpuri; - cutarea, sortarea i editarea parial sau total a unei nregistrri virtuale etc. Funcia de manipulare a datelor se realizeaz prin intermediul limbajului de manipulare a datelor. 3) Funcia de utilizare asigur mulimea interfeelor necesare pentru comunicarea tuturor utlizatorilor cu baza de date. n cadrul realizrii acestei funcii, apar mai multe categorii de utilizatori: - utilizatori liberi sau conversaionali. Aceatia reprezint categoria beneficiarilor de informaii (utilizatori finali) care utilizeaz limbajele de interogare a bazei de date ntr -o form simplist. Ei apar ca utilizatori neinformaticieni; - utilizatori programatori, care utilizeaz limbajele de manipulare, realiznd proceduri complexe de exploatare a bazei de date; - administratorul bazei de date apare ca un utilizator special i are rolul hotrtor n ceea ce privete funcionarea optim a ntregului ansamblu. 4) Funcia de administrare a bazei de date apare ca o funcie complex i este de competena administratorului bazei de date.
22
Implementare Access
Access a fost primul SGBD care rula sub Windows i respecta aceast regul. Access nu folosete numere de nregistrri. Access i stocheaz datele n tabelele motorului bazei de date Microsoft Jet. Access respect aceast regul prin folosirea Cheii Primare (Primary Key) Access suport lucrul cu valori Null pentru descrierea informaiilor lips. Catalogul rezid n motorul bazei de date Microsoft Jet. Se poate folosi OpenSchema din ADO pentru interogarea catalogului de sistem. Limbajul DDL SQL al motorului bazei de date Microsoft Jet ofer posibilitatea crerii tabelelor, cheilor etc.
Stocarea informaiei
Garantarea accesului
Lipsa informaiei
Catalogul de sistem
23
Limbaj cuprinzto
Un SGBD trebuie s suporte un limbaj clar pentru manipularea datelor (SQL) care asigur modaliti cuprinztoare pentru manipularea datelor, definirea datelor, definirea vederilor, constrngerile de integritate, limitrile de tranzacii i de autorizare.
Actualizarea vederilor
Toate vederile trebuie s poat fi actualizate de sistem. ntr -un SGBD total relaional majoritatea vederilor ar trebui s se poat actualiza. Un SGBDR trebuie s fac mai mult dect simpla extragere a datelor. Trebuie s aib capacitatea de inserare, actualizare i tergere a datelor, privite ca o mulime relaional. Datele trebuie s fie fizic independente de programul aplicaie. SGBDR trebuie s fie n stare s urmreasc modificrile fizice la nivelul datelor pe "sub aplicaie". De exemplu, SGBDR nu se va modifica dac un index se adaug sau se terge dintr -un tabel. Pe ct este posibil, aplicaiile software trebuie s fie independente de modificrile fcute n tabelele de baz. De exemplu, nu trebuie s se rescrie codul n cazul n care tabelele sunt combinate ntr -o vedere. Integritatea datelor trebuie s se poat defini ntr-un limbaj relaional i s fie stocat n catalog. Constrngeri de integritate a datelor trebuie s poat fi construite la nivel de aplicaie. Acest concept este oarecum strin modelului relaional. n modelul relaional, integritatea trebuie s fie inerent proiectului bazei de date.
Access, prin motorul Jet, asigur SQL pentru manipularea datelor, crearea vederilor (Select Queries), constrngerile de intergritate (Relationships i Create Constraint. Access a fost primul SGBD pe PC-uri care a permis interogri de actualizare (Update Query) Access suport interogri de aciune (Action Query)
Access permite modificarea obiectelor bazei de date fr alterarea celorlalte componete ale Accessului. Jet are motor de stocare logic. n Access, o interogare se poate lega la un formular sau la un raport la fel de simplu ca un tabel. Dei Microsoft nu a documentat modul n care Jet stocheaz integritile, se pot crea reguli de integritate via SQL. Jet va stoca aceste informaii n proiectul bazei de date ca parte a catalogului.
10
24
11
Independena distribuiei
Capacitile SGBDR nu au voie s fie limitate datorit distribuiei unor componente ale acestuia n baze de date separate.
12
Inexistena subminrilor
Dac un SGBDR are un limbaj de manipulare "a unei singure nregistrri la un moment dat", acest limbaj nu va putea fi folosit la ocolirea regulilor de integritate sau a constrngerilor modelului relaional. Astfel nu numai c SGBDR trebuie s fie guvernat de reguli relaionale, ci aceste reguli trebuie s fie i primare.
Pentru c motorul Jet stocheaz regulile de integritate la nivel de motor, alte componente ale motorului nu afecteaz regulile de integritate. Access permite folosirea lui DAO i ADO pentru manipularea a cte unei singure nregistrri la un moment dat prin intermediul mulimilor de nregistrri actualizabile (updateable recordsets)
Nici unul dintre SGBD disponibile astzi nu respect complet cerinele exprimate de Codd, n cadrul celor 13 reguli. De aceea pentru caracterizarea unui SGBD nu sunt utilizate regulile lui Codd, fiind formulate n schimb o serie de cerine minimale pe care trebuie s le ndeplineasc programul pentru a fi considerat relaional (Lungu, et al., 1995). Un SGBD este minimal relaional dac datele din cadrul bazei de date sunt reprezentate prin valori n tabele, nu exist pointeri observabili de ctre utilizatori, iar sistemul suport operatorii relaionali de proiecie, selecie i compunere natural, fr limitri impuse din considerente interne. Un SGBD este complet relaional dac este minimal relaional i, n plus, sistemul suport restriciile de integritate de baz (unicitatea cheii primare, constrngerile de referin, integritatea entitii) i precum i toate operaiile de baz ale algebrei relaionale. Un obiectiv important a proiectrii unei baze de date de tip relaional l reprezint gruparea atributelor n relaii astfel nct redundana datelor s fie minim. Relaiile care conin date redundante pot crea probleme, denumite anomalii de reactualizare, care clasificate n: o anomalii de tergere constau n faptul c anumite date care urmeaz s fie terse, fac parte din tupluri n care se gsesc i alte date care mai sunt necesare n continuare, ori tergerea fcndu-se la nivelul tuplului, acestea se pierd; o anomalii de inserare (adugare) constau n faptul c anumite date care urmeaz s fie adugate fac parte din tupluri incomplete (pentru care nu se cunosc toate datele), ceea ce face ca acestea s nu poat fi adugate;
25
anomalii de modificare rezult din faptul c este dificil de modificat o valoare a unui atribut atunci cnd ea apare n mai multe tupluri ale relaiei. Eliminarea acestor anomalii se realizeaz cu ajutorul operaiei numite normalizare5, care este o tehnic formal care se bazeaz pe cheile primare, respectiv cheile candidat ale relaiilor i pe dependenele funcionale. Tehnica include o mulime de reguli care pot fi utilizate pentru testarea relaiilor individuale. o
26
E.F.Codd este considerat a fi printele conceptului de model de date, n general, i al conceptului de model de date relaional, n particular .
27
mijlocul anilor '60, IBM s-a alturat NAA dezvoltnd n continuare GUAM i producnd unul dintre primele sisteme comerciale de gestiune a bazelor de date: IMS (Information Management System). IBM a preluat modelul ierarhic pentru a respecta cerina de stocare a datelor pe benzi magnetice (deci n acces secvenial). Ulterior, aceast restricie a fost nlturat i IMS continu s fie principalul SGBD ierarhic utilizat de majoritatea calculatoarelor mainframe7. Construirea bazelor de date a cunoscut o evoluie foarte rapid, trecnd prin mai multe abordri, clasificate dup cum urmeaz: sistemele de fiiere; sistemele prerelaionale (sau istorice", numite i navigante sau tradiionale -legacy systems): ierarhic i reea; sistemul relaional; sistemele postrelaionale: orientat obiect i hibrid (obiect -relaional); sistemele semantice: multidimensional i logic (deductiv).
Un calculator mainframe este un calculator cu capacitate de memorie i vitez de lucru foarte mari, utilizat de marile corporaii pentru a stoca volume foarte mari de date i pentru a coor dona sute sau mii de terminale (inclusiv calculatoare personale) conectate la el.
28
Ambele modele prerelaionale permiteau accesul la date de-a lungul unor drumuri (ci) predefinite, explicit stabilite la nivelul programelor de aplicaii (de i numele de modele navigante). Ca urmare, orice modificare a structurii bazei de date antrena modificarea acestor ci n programele deja scrise. Exemple: :tru modelul ierarhic: IMS (amintit mai sus); pentru modelul reea: IDS II (de Honeywell), IMAGE (de la Hewlett Packard). Studiu de caz: modelarea activitii didactice ntr-o facultate, cadrele didactice desfoar activiti didactice de curs sau examen; aceste activiti sunt pentru studeni i se desfoar n locaii (amfiteatre sau laboratoare). De asemenea, ca drele didactice particip la proiecte de cercetare tiinific. Figura 1.2 prezint modelul ierarhic al facultii iar figura 1.3 prezint modelul reea.
29
E.F. Codd s-a nscut la 23 august 1923 n Portland, Marea Britanie, i a murit n 18 aprilie 2003, n Florida. A fcut studii de matematic i chimie la Oxford i s -a mutat n Statele Unite, n 1948, pentru a lucra la IBM. A introdus termenul OLAP (OnLine Analytical Processing) i a impus modelul relaional; a avut, de asemenea, contribuii n domeniul modelelor de calculabilitate prin lucrrile sale privind automatele celulare. A obinut de dou ori Premiul Turing: n 1981 i 1994.
30
apariia unui limbaj structurat de interogare a bazelor de date: SQL. producerea mai multor SGBD-uri relaionale comerciale: DB2 i SQL/DS de la IBM i, respectiv, ORACLE de la Oracle Corporation (n deceniul 9 al secolului trecut). INGRES (Interactive Graphics Retrival System), dezvoltat la Universitatea Berkeley din California. Peterlee Relaional Test Vehicle, dezvoltat la IBM UK Centre din Peterlee, Marea Britanie. Numrul sistemelor relaionale comerciale a ajuns acum la cteva sute, dintre care cele mai cunoscute sunt: DB2 (de la IBM), Ingres II (de la Computer Associates International Inc.), Oracle 10g (de la Oracle Corporation), Ms Access, FoxPro (de la Microsoft), Paradox, Visual dBase (de la Borland), Sybase Adapted Server (de la Sybase Inc.). Succesul acestui model continu s fie att de mare nct multe sisteme nerelaionale ofer acum i o interfa cu utilizatorii de tip relaional, indiferent de modelul de date pe care se bazeaz de fapt. Informal putem defini model relaional de date ca pe un model n care: datele sunt percepute de utilizatori ca nite tabele i numai ca nite tabele; operaiile disponibile pentru utilizatori (spre exemplu, pentru obinerea informaiilor) sunt operaii care genereaz noi tabele pe baza tabelelor vechi: operaia de selecie (SELECT) extrage o submulime de rnduri dintr-o tabel, operaia de proiecie (PROJECT) extrage o submulime de coloane, operaia de juxtapunere (JOIN) asociaz dou tabele pe baza valorilor identice pe care le conin n anumite coloane, de asemenea identice; or, toate acest e submulimi rezultate pot fi privite i ele nsele ca nite tabele. Numele modelului relaional provine de la conceptul matematic de relaie. Aa cum o funcie f : {1, 2,...,n} N R are mai multe reprezentri convenionale, dintre care cea mai comod este cea de vector, tot astfel relaia poate avea mai multe reprezentri, una dintre ele fiind tabela. Din acest motiv, cel puin la nivel informal, termenii de relaie i tabel pot fi considerai sinonimi. o o
31
32
(II) Modelul obiect-relaional extinde modelul relaional, oferind un set de tipuri de date mai bogat, i include i orientarea obiect. Se ncearc astfel combinarea avantajelor celor dou abordri, cea relaional i cea orientat obiect: atributele i instanele entitilor pot avea tipuri complexe i pot evita unele dintre restriciile specifice modelului relaional. De exemplu, n timp ce n modelul relaional fiecare atribut trebuie s ia pentru fiecare instan a unei entiti o valoare i numai una din domeniul lui de definiie, n acest model poate lua un sub-set de valori (de exemplu: pentru un angajat oarecare, atributul Telefon poate lua ca valori numrul telefonului fix de acas i de la serviciu, al telefonului mobil propriu i de serviciu, dac angajatul dispune de toate patru). Cel mai cunoscut exemplu: Informix Universal Server care combin tehnologiile relaionale i orientate obiect din dou produse preexistente: Informix i Illustra. Noi funcionaliti ale bazelor de date: a. baze de date partajate n reea; n condiiile lucrului n reea este posibil s se stocheze baza de date pe un calculator ce are loc de server. Astfel toi utilizatorii vor partaja ntre ei baza de date. Administratorul bazei de date are sarcini pe linia modelrii datelor, a implementrii bazei de date, definirii utilizatorilor i a drepturilor de acces i ntreinerea bazei de date. Drepturile de acces la nivel utilizator vizeaz operaiile pe care acestea le pot realiza. b. baze de date distribuite; unitile economice dispersate geografic sunt nevoite s acceseze baze de date care sunt distribuite. Lucrul ntr -o reea de calculatoare permite distribuirea unei baze de date, din punct de vedere fizic, pe mai multe site-uri. Fiecare site gzduiete un sistem local de gestiune a bazelor de date. Utilizatorii unui site au acces la baz de date local i, n plus, la bazele de date distribuite n celelalte site-uri. Conexiunile inter-site-uri pot fi stabilite ntr-o manier divers. c. baze de date deductive; acest gen de baze de date se fundamenteaz cuplarea unei baze de date relaionale cu un procesor din clasa sistemelor expert. d. depozite de date (datawarehouse); un depozit de date reprezint un sistem de baze de date 1) ce acoper un sistem temporal mai mare; 2) ce conine date interne i externe; 3) opt imizat pentru a rspunde interogrilor complexe (de la manageri la analiti). e. baze de date multidimensionale; acest gen de baze de date au aprut ca urmare a necesitilor crescnde de procesare multidimensional a datelor. Aplicaiile care se bazeaz pe analiza multidimensional a datelor sunt cunoscute sub numele de OLAP (On Line Analytical Processing 9)
Se face distincie ntre:- OLTP (On-Line Transactional Processing) care privilegiaz: integritatea i securitatea datelor i tratarea cererilor informaionale simple de ctre servicii operaionale (producie, comercial, resurse umane).i OLAP, care privilegiaz analiza i manipularea datelor (folosind cereri complexe) n vederea elaborrii stategiei i sunt destinate ndeosebi conducerii i controlului de gestiune.
33
SGBDR se definete ca fiind un sistem de gestiune care utilizeaz organizarea datelor conform modelului relaional.
34
Citii ntrebrile de mai jos i alegei varianta corect de rspuns: 5) Un model de date este: a. mecanismul care asigur partajarea datelor dintr -o baz de date ntre aplicaiile care o acceseaz. b. tehnica prin care pot fi organizate informa iile ntr-o ntreprindere. 6) Modelul ierarhic i modelul reea sunt: a) modele relaionale; b) modele prerelaionale; c) modele hibride. 7) Asociai fiecare tip de model de date cu conceptul teoretic pe care se bazeaz: Model Ierarhic Reea Relaional Concept Relaie Arbore Graf
35
36
10
ANSI = American National Standards Institute SPARC = Standards Planning and Requirements Committee
37
Nivelul intern (baza de date fizic) este o colecie de fiiere coninnd datele fizice la care se adaug diverse structuri auxiliare menite s asigure accesul operativ la date. Structurile auxiliare pot fi: directoare, indexi, pointeri, tabele de dispersie. Modul de organizare a bazei de date fizice este n mare msur influenat de configuraia echipamentelor hardware care suport baza de date i de sistemul de operare. Schimbarea sistemului de operare sau modificri n configuraia hardware pot atrage modificri ale bazei de date fizice. Dac este satisfcut condiia de independen fizic, aceste modificri n nivelul intern al bazei de date nu vor ataca nivelele superioare ale acesteia. Nivelul intern trateaz chestiuni cum ar fi: alocarea spaiului de stocare pentru date i index i ; descrierea nregistrrilor pentru stocare (cu dimensiunile de stocare pentru date) ; plasarea nregistrrilor ; tehnici de comprimare a datelor i de codificare a acestora.
Nivelul conceptual conine structura logic a bazei de date, aa cum este ea vzut de administratorul bazei de date. Fiecare baz de date are un model conceptual propriu prin care sunt numite i descrise toate entitile logice din baza de date mpreun cu legturile dintre acestea. El reprezint o imagine complet a cerinelor organizaiei privind datele. Ex: n descrierea bazei de date a unei ntreprinderi pot aprea concepte ca: angajat, produse, furnizor, beneficiar, etc. Nivelul conceptual integreaz viziunile tuturor utilizatorilor asupra bazei de date, fiind rezultatul unui compromis ntre cerinele diferiilor utilizatori. Nivelul conceptual reprezint: toate entitile, atributele i relaiile dintre ele; constrngeri asupra datelor; informaii semnatice asupra datelor ; informaii privind securitatea i integritatea . De reinut c nivelul conceptual este o descriere a coninutului de date din baza de date i NU cuprinde nici un fel de referire la modul de memorare a datelor sau la strategia de acces. De ex. descrierea unei entiti trebuie s conin numai tipurile de date (integer, real, character) i lungimea lor (numrul maxim de cifre sau caractere), dar nici o infor maie privind stocarea, cum ar fi numrul de octei ocupat.
Nivelul extern este cel mai apropiat utilizatorului. Este ceea ce vede acesta din baza de date, sau modul cum vede acesta baza de date. Nivelul extern este derivat din cel conceptual dar poate prezenta deosebiri substaniale fa de acesta. Un termen deseori folosit pentru modelul extern este acela de vedere sau
38
viziune. Prin aceste viziuni, utilizatorii au acces doar la pri bine definite din baza de date, fiindu-le ascunse prile care nu intereseaz. Prin modelul extern se realizeaz independena logic a datelor. Fiecrei viziuni i corespunde o descriere n termenii entitilor logice din modelul conceptual. Diferite vederi pot avea reprezentri diferite ale acelorai date. De ex, un utilizator poate vedea datele calendaristice n format an-lun-zi, altul le poate vedea ca zi-lun-an.Vederile pot include chiar date combinate sau derivate din entiti diferite.
Proiectarea unei baze de date= procesul de creare a unui proiect pentru baza de date care s asigure desfurarea corect a activitilor i rezolvarea cerinelor utilizatorilor. Realizarea unei baze de date se desfoar n mai multe etape; cele mai importante sunt: (1) analiza, (2) proiectarea i (3) implementarea. (1) n etapa de analiz se examineaz n mod sistematic i aprofundat acel aspect al lumii reale care trebuie transpus ntr -o baz de date: o tipografie, magazin universal, organizarea unei expoziii etc; se stabilesc gradul de generalitate, dimensiunea bazei de date, categoriile i numrul de viitori utilizatori. O baz de date trebuie s conduc la ameliorarea activitii din organizaia respectiv i se realizeaz la cererea proprietarului. (2) Etapa de proiectare se poate descompune n trei subetape: 2a) proiectarea bazei de date la nivel conceptual, 2b) proiectarea bazei de date la nivel logic i 2c) proiectarea bazei de date la nivel fizic. n aceast etap se poate selecta sistemul de gestiune a bazei de date, se proiecteaz interfeele i aplicaiile de utilizare i administrare a bazei de date. (3) Etapa de implementare const din realizarea propriu-zis a bazei de date: scrierea programelor, conversia i ncrcarea datelor.
39
Principalele scopuri ale etapei de proiectare sunt: reprezentarea datelor i a relaiilor dintre date, conform cerinelor formulate de utilizatori i condiiilor impuse de programele de calculator; furnizarea unui model de date care s asigure orice tip de prelucrare a datelor; schiarea unui proiect astfel structurat nct s satisfac parametrii de efi cien specificai (de exemplu: obinerea datelor solicitate ntr -un interval de timp cel mult egal cu o valoare prestabilit). Proiectarea bazei de date se poate face prin metoda: bottom-up: se ncepe cu stabilirea atributelor i - prin analiza asocierilor dintre ele - se obin entitile i relaiile dintre entiti; top-down: se dezvolt un model de date constnd din cteva entiti i relaii foarte generale. Apoi, modelul este rafinat, obinndu -se modele din ce n ce mai detaliate; mixt: se combin i se itereaz metodele de mai sus.
Indiferent de metoda de proiectare folosit, identificarea entitilor i a relaiilor dintre ele necesit: nelegerea semnificaiei datelor care circul n organizaia respectiv; nelegerea cerinelor specifice modului de lucru din organizaie; reprezentarea coerent i sugestiv a acestor informaii. Candance Fleming i Barbara von Halle (1989) au identificat cteva criterii pe care ar trebui s le ndeplineasc un model de date pentru a fi considerat optim n raport cu realitatea modelat: corectitudine, simplitate, expresivitate, neredundan, extensibilitate, integritate.
40
Figura 2.2 Succesiunea fazelor n modelarea bazelor de date Instrumentul universal capabil s asigure realizarea acestor obiective printr -o bun comunicare ntre specialitii care proiecteaz baza de date i viitorii utilizatori ai acesteia este modelarea datelor. Modelul de date de nivel nalt cel mai frecvent folosit este modelul entitate-relaie (Entity-Relationship Model), iar cea mai larg utilizat reprezentare grafic a acestuia (asupra creia vo m reveni n capitolul urmtor) este diagrama entitate-relaie (figura 2.3).
41
Proiectarea logic a bazei de date este a doua faz a proiectrii i conduce la realizarea modelului logic. ntruct pornete obligatoriu de la modelul conceptual, deci se bazeaz implicit pe un anumit tip de model de date - relaional, ierarhic, orientat-obiect etc, modelul logic orienteaz proiectul bazei de date spre un anumit tip de SGBD - relaional, ierarhic etc, fr a alege, spre exemplu, ntre MS Access i Oracle. n continuare, detaliile de implementare fizic -
42
precum modul de stocare a datelor, tipurile de indexare etc. - sunt complet ignorate. Pe parcursul acestei etape, modelul este perma nent testat i validat, cu ajutorul datorilor, pentru a descoperi eventualele neconcordane cu restriciile formulate de acetia. Tehnica folosit se numete normalizare i urmrete asigurarea corectitudinii modelului logic (de exemplu, prin eliminarea redundanelor n date, redudane care - o dat implementate - pot genera erori n timpul operaiilor de actualizare a bazei). Proiectarea conceptual i proiectarea logic a bazei de date sunt etape foarte importante, critice, pentru realizarea unui proiect bun al bazei de date. Dac unul dintre ele nu reprezint corect aspectul modelat, implementarea fizic a bazei de date va fi eronat i corectarea ulterioar aproape imposibil. De aceea, rafinarea modelului conceptual i a celui logic este un proces itera tiv, virtual infinit.
Proiectarea baze de date la nivel fizic = procesul de construire a unei specificaii privind memorarea datelor din baza de date pe suporturile fizice de memorie; sunt descris e: structura memoriei i metodele de accesare menite s asigure accesul eficient la informaii.
Proiectarea fizic a bazei de date este ultima faz a proiectrii, cea n care proiectantul alege modul concret de implementare a bazei de date. Prima operaie const n alegerea unui SGBD care s poat implementa modelul logic. Urmeaz comunicarea ntre modelul fizic i cel logic, similar celei dintre modelul logic i cel conceptual: orice decizie privind implementarea fizic (ameliorarea performanelor, asigurarea securitii etc.) poate afecta structura modelului logic. Cu toate acestea, modelul conceptual i modelul logic trebuie s fie n continuare complet separate de modelul fizic al bazei de date i fiecare trebuie s-i pstreze scopul: primele s rspund la ntrebarea: CE trebuie fcut"; ultimul la: CUM trebuie fcut". Aceast abordare a proiectrii bazelor de date este compatibil cu arhitectura pe trei nivele a acestora, aa cum a fost ea stabilit de ANSI -SPARC n 1975. Figura 2.4 prezint modelarea datelor i arhitectura ANSI-SPARC.
43
44
Nivelul conceptual conine structura logic a bazei de date, aa cum este ea vzut de administratorul bazei de date. Fiecare baz de date are un model conceptual propriu prin care sunt numite i descrise toate entitile logice din baza de date mpreun cu legturile dintre acestea. Nivelul conceptual reprezint: toate entitile, atributele i relaiile dintre ele; constrngeri asupra datelor; informaii semnatice asupra datelor ; informaii privind securitatea i integritatea.
Nivelul extern este cel mai apropiat utilizatorului. Prin modelul extern se realizeaz independena logic a datelor. Fiecrei viziuni i corespunde o descriere n termenii entitilor logice din modelul conceptual. Proiectarea unei baze de date este procesul de creare a unui proiect pentru baza de date care s asigure desfurarea corect a activitilor i rezolvarea cerinelor utilizatorilor. Realizarea unei baze de date se desfoar n mai multe etape; cele mai importante sunt: (1) analiza se examineaz n mod sistematic i aprofundat acel aspect al lumii reale care trebuie transpus ntr -o baz de date; (2) proiectarea, are 3 subetape: 2a) proiectarea bazei de date la nivel conceptual, 2b) proiectarea bazei de date la nivel logic i 2c) proiectarea bazei de date la nivel fizic. n aceast etap se poate selecta sistemul de gestiune a bazei de date, se proiecteaz interfeele i aplicaiile de utilizare i administrare a bazei de date. (3) implementarea: realizarea propriu-zis a bazei de date. Proiectarea bazei de date se poate face prin metoda: bottom-up, top-down sau mixt.
45
3) Un model de date optim ndeplinete urmtoarele criterii: a) corectitudine, simplitate; b) expresivitate, neredundan; c) extensibilitate, integritate; d) toate cele de mai sus. 4) Care dintre cele trei modele ale unei baze de date: logic, conceptual, fizic, rspunde" la ntrebarea: CE trebuie fcut? a) modelul logic i modelul conceptual; b) modelul conceptual i modelul fizic; c) modelul fizic i modelul logic.
46
47
Exemplu: fiecare client al unei bnci este o instan a entitii Clieni; fiecare curs predat ntr-o facultate este o instan a entitii CursuriUniversitare etc. OBSERVAII. O entitate poate avea subentiti; acestea trebuie s fie disjuncte; de exemplu, entitile Piloi i MecaniciDeBord sunt disjuncte i sunt subentiti ale entitii PersonalNavigant. ntr-o baz de date pot exista entiti a cror existen este determinat de alte entiti; primele se numesc entiti dependente, celelalte se numesc entiti principale (de exemplu, entitatea Persoanenntreinere depinde de entitate Salariai).
3.2 Atribute
3.2.1 Concept i tipologie Atribut = o caracteristic a unei entiti.
Un atribut posed un nume i - pentru fiecare instan a entitii - poate lua o valoare dintr-o mulime fixat de valori, numit domeniul de valori ale atributului. Exemplu: Fie entitatea ri; considerm atributele Nume, Continent, Capital, Form DeGuvernmnt, Suprafa, SrbtoareNaional. Tabelul 3.1 prezint cteva instane ale acestei entiti i valorile luate de atribute.
Numear Slovacia Frana Romnia Japonia SUA Continent Europa Europa Europa Asia America de Nord Capitala Bratislava Paris Bucureti Tokyo Washington Forma de guvernmnt Republic constituional Republic prezidenial Republic constituional Monarhie constituional Republic prezidenial Nr.km ptrai 49.036 547.026 237.500 370.073 9.363.123 Srbtoare naional 1 Sept. 14 Iul. 1 Dec. 29 Apr. 4 Iul.
48
Clasificarea atributelor A) Atributele se pot clasifica dup complexitate: o atribute compuse; o i atribute simple sau elementare, dup cum ele se mai descompune sau nu n alte atribute, de mai mic complexitate.
Exist atribute nu pot fi dect simple (atributele Capital, Suprafa, Continent ale entitii ri). Exist ns atribute care pot fi considerate fie simple, fie compuse. De exemplu atributul DataNaterii cu valorile: 1 ianuarie 2000, 2 Mai 1990 etc. poate fi privit fie ca un atribut simplu, fie ca unul compus din atributele Zi, Lun, An. Este indicat s l tratm ca un atribut compus, dac prevedem necesitatea de a avea acces direct la luna sau anul de natere al unei persoane nregistrate n baza de date. Dac ns o astfel de necesitate nu este probabil i dac dorim s simplificm structura entitii (i deci a bazei de date), atunci este preferabil s l tratm ca atribut simplu. B) Atributele se pot clasifica dup mulimea de valori n: o atribute cu valori unice; o i atribute cu valori multiple, dup cum ele pot lua cte o singur valoare (de exemplu, atributele Capital, Suprafa, Continent ale entitii ri) sau, dimpotriv, pentru unele instane pot lua cte o singur va loare, pentru altele mai multe valori, iar pentru altele nici o valoare (de exemplu, atributul OraCuMinimumlMilioane Locuitori al entitii ri). Cnd este cazul se pot defini limite inferioare i/sau superioare pentru numrul de valori pe care le poate lua un astfel de atribut pentru o instan oarecare (de exemplu, putem specifica faptul c atributul NrTelefon al entitii Persoane poate lua minimum o valoare - telefonul de serviciu - i maximum trei). C) Atributele se pot clasifica dup stabilitate n: o atribute de baz; o i atribute derivate, dup cum ele au valori de sine stttoare sau valori care pot fi calculate din valorile altor atribute. De exemplu, s considerm entitile corelate Cri, cu atributul NumrAutori i Autori, cu atributul Titlu; atributul NumrAutori este un atribut derivat: valorile pe care le ia pentru diferite instane ale entitii Cri pot fi calculate pe baza numrului de apariii ale atributului Titlu pentru diferite instane ale entitii Autori.
49
S presupunem c dispunem de o baz de date a trenurilor care circul n Romnia i vrem s prelucrm informaiile legate de un rapid care leag oraul Timioara de Cluj Napoca. Ca s ne referim la aceast instan Trenuri ar trebui s enumerm toate valorile pe care le iau atributele entitii. Dac ar fi 5 sau 10 atribute nu ar fi prea greu; dar dac ar fi 50? Pentru a simplifica referirea la instanele unei entiti s-a recurs la mecanismul identificatorului unic, adic al cheii primare. Cheia primar= un atribut sau cea mai mic mulime de atribute ale unei entiti care iau, fiecare instan a entitii respective, o valoare i numai una, sugestiv prin sensul figurat al cuvntului cheie. Atunci cnd niciun atribut sau pe atribute ale entitii, rezonabil de numeros, nu iau valori distincte pentru fiecare instan a acesteia, se poate aduga un atribut convenional" care s ndeplineasc aceast condiie. De obicei, acest atribut este denumit cu ajutorul prefixelor cod sau id. Exemple: 1) pentru entiti precum Studeni, Profesori, Angajai un exemplu de identificator unic este codul numeric personal; un contraexemplu: numele (chiar nsoit de prenume) sau data naterii. Se poate utiliza i atributul convenional CodStudent (CodProfesor etc), cu valori formate din iniialele numelui i prenumelui, urmate de numere distincte formate din 2 sau 3 cifre. 2) Pentru entitatea Comenzi putem folosi un atribut convenional ( de exemplu: CodComand, cu valori numere distincte) sau putem folosi trei atribute ale sale: NumeFurnizor, NumeClient, DataEmiterii. n alte situaii, identificatorul unic este compus dintr -o combinaie de dou sau mai multe atribute (identificator unic compus). De exemplu combinaia dintre titlu, numele autorului i data apariiei poate forma unicul identificator al
50
entitii CARTE. Oare combinaia titlu i nume autor nu era suficient? Rspunsul este NU, deoarece pot exista de exemplu mai multe volume scrise de Mihai Eminescu avnd toate titlul Poezii, dar aprute la date diferite. O entitate (de exemplu: Angajai, avnd atributele Nume, IniialaTatlui, Prenume, Adres, Funcie, CodDepartament, Salariu, DataAngajrii) poate avea mai multe atribute care pot juca rolul de identificator unic; de exemplu: Nume, Prenume, Adres; Nume, Prenume, IniialaTatlui, Adres; Nume, Prenume, Funcie, CodDepartament; Nume, Prenume, Adres, Funcie, CodDepartament. Toate aceste combinaii de atribute se numesc chei candidate. Prima combinaie ndeplinete condiia de minimalitate (pe care a doua nu o poate satisface). Ca atare, dintre cele dou, numai aceasta poate constitui un identificator unic sau o cheie primar pentru entitatea Angajai, n timp ce a doua este numai o cheie candidat. Acelai lucru este valabil i pentru a treia i a patra combinaie de atribute, ca i pentru prima i a patra combinaie de atribute. La alegerea cheia candidate inem cont de urmtoarele: compus din cel mai mic numr de atribute; compus din atribute ale cror valori nu sunt susceptibile de modificri n viitor; care nu este susceptibil s-i piard unicitatea n viitor; care are valorile cele mai mici (cuvintele cele mai scurte, numerele cu cel mai mic numr de cifre etc); care este cel mai uor de utilizat.
51
cadrul didactic are mai multe adrese. Motivul: ntr-o baz de date corect proiectat (normalizat) un atribut nu poate lua simultan mai multe valori pentru aceeai instan a unei entiti; o structura adresei (localitate, strad, sectorul/judeul etc.) este important ( exemplu, trebuie s extragem din baza de date cadrele didactice care loc iese ntr-o anumit localitate sau ntr-un anumit sector din Bucureti). Motivul: valorile atributelor sunt atomice. Este indicat modelarea prin atribut n oricare dintre situaiile complementare (o singur adres, tratarea adresei ca un tot unitar). o
52
3.3 Relaii
3.3.1 Definiie
Ori de cte ori un atribut al unei entiti se refer la alt entitate din baza de date se stabilete, de fapt, o relaie ntre cele dou entiti (de exemplu, atributul Destinaie al entitii Trenuri se refer la oraul ctre care circul un tren, indicnd astfel o relaie ntre entitatea Trenuri i entitatea Orae). Cnd proiectm baza de date, aceste referiri nu ar trebui s fie reprezentate ca atribute ale entitilor, ci ca relaii (att n sensul real, ct i n sensul matematic al cuvntului) ntre entiti. Atributele prin care se stabilete aceast relaie se numesc chei sau cmpuri de legtur. Relaie ntr-o baz de date = o legtur logic ntre dou sau mai multe entiti.
53
o n - m (many-to-many): o relaie ntre dou entiti E1 i E2 n care unei instane a entitii E 1 i pot corespunde mai multe instane din entitatea E2 i, reciproc, unei instane din entitatea E2 i pot corespunde mai multe instane din entitatea E1. n baza de date a facultii putem avea urmtoarele tipuri de relaii: 1-1: un student are o singur foaie matricol (n care sunt nregistrate notele sale); o foaie matricol aparine unui singur student; 1-m: un student particip la mai multe cursuri opionale; un curs pentru un student; m-m: un profesor pred la mai muli ani de studiu; la un an de studiu predau mai muli profesori.
11
54
Tabelul 3.2 i Tabelul 3.3 prezint conveniile de reprezentare grafic (n diagramele ER) a entitilor, atributelor i relaiilor din modelul conceptual al unei baze de date relaionale. Observaie. Entitile i atributele sunt denumite prin substantive; relaiile dintre entiti sunt denumite prin verbe precedate sau urmate de prepoziii; exist situaii n care ordinea entitilor aflate n relaie este important (atunci avem, de fapt, dou relaii care trebuie citite de la stnga la dreapta, respectiv de la dreapta la stnga) i situaii n care ordinea nu este important. Numele date entitilor, respectiv relaiilor, trebuie s fie unice la nivelul bazei de date. Numele atributelor trebuie s fie unice numai la nivelul aceleiai entiti; eventualele confuzii la nivelul bazei de date se rezolv prin cuplarea numelui atributului cu numele entitii. Este totui indicat- pentru simplificarea referirilor- ca numele atributelor care constituie cheile primare s fie unice la nivelul bazei de date. Reprezentare grafic Entitate principal dreptunghi simplu Entitate dependent dreptunghi dublu Atribut elips Atribut cu valori multiple elips dubl Atribut derivat elips punctat Cheie primar elips i subliniere cu linie continu Cheie extern elips i subliniere cu linie punctat Relaie romb
Tabelul 3.2. Un set de convenii pentru diagrama entitate-relaie
Reprezentare grafic dreptunghi cu colurile rotunjite asterisc cerc diez Linii cu sau fr bifurcaii
n figura 3.1 este prezentat schema conceptual i diagramele entitate-relaie (conform conveniilor de mai sus) pentru baza de date a unei companii cinematografice care deine mai multe studiouri unde se produc filme n care joac actori. Actori={IdActor, Nume, Prenume}; Studiouri={Nume, Adresa}; Filme={Titlu, An, Buget, Tip}
55
Figura 3.1 Diagrama entitate-relaie n concluzie putem sublinia cteva caracteristici ale ERD-urilor: - sunt un instrument de proiectare ; - sunt o reprezentare grafic a unui sistem de date ; - ofer un model conceptual de nalt nivel al bazelor de date ; - sprijin nelegerea de ctre utilizatori a datelor i a relaiilor dintre acestea ; - sunt independente de implementare.
56
Iat cteva instane ale acestei entiti: (Dacia, benzin, 1400, 5, 4), (Dacia, motorin, 1400, 5, 4), (Dacia, benzin, 1100, 5, 4), (Dacia, motorin, 1400, 5. 5), (Ford, motorin, 1400, 5, 5), (Ford, benzin, 1600, 5, 4), (Fiat, benzin. 1300, 5, 4), (Fiat, benzin, 1100, 5,4), (Audi, motorin, 1600, 5, 4), (Opel, benzin, 1400, 5, 5), (Volvo, benzin, 1400, 5, 5), (Volvo, motorin, 1600, 5, 4). Generaliznd exemplul de mai sus, obinem: E A1x A2 x ... x An unde am notat cu E entitatea i cu A1, A2,.................An mulimile de valori (domeniile) ale atributelor sale. Un element al acestei rela ii (adic un tuplu al produsului cartezian) reprezint o instan ei a entitii E i const din valori particulare ale atributelor).
12
Ideea i aparine lui D.F.Childs care a publicat n 1968 o lucrare n care a artat c orice structur de date poate fi reprezentat sub form de tabele n interiorul creia trebuie s existe i informaie de legtur (Lungu, et al, 1995). 13 O concepie greit, larg rspndit, este aceea c modelul relaional i -ar fi preluat numele de la faptul c ntre tabelele unei baze de date relaionale exist relaii.
57
Pentru simplitatea reprezentrii, entitile nu sunt reprezentate ca mulimi de tupluri (ca n exemplul nostru de mai sus), ci ca tabele (tabelul 3.4), tot aa cum n loc s notm cu <(3,5) instana relaiei de ordine < N X N dintre naturale 3 i 5, scriem 3 < 5. Marca Dacia Dacia Dacia Dacia Ford Ford Fiat Fiat Audi Opel Volvo Volvo Tip CapacCil NrLoc benzin 1400 5 motorin 1400 5 benzin 1100 5 motorin 1400 5 motorin 1400 5 benzin 1600 5 benzin 1300 5 benzin 1100 5 motorin 1600 5 benzin 1400 5 benzin 1400 5 motorin 1600 5 Tabelul 3.4 Instane ale entitii Automobil NrUi 4 4 4 5 5 5 4 4 4 5 5 4
Puterea i elegana modelului relaional sunt date de faptul c relaiile dintre entiti conduc la asocieri ce pot fi reprezentate tot prin tabele. Conform modelului relaional avem urmtoarele: o Orice entitate este reprezentat printr -o tabel; numele entitii devine numele tabelei. o Oricrui atribut al unei entiti i corespunde o coloan (numit i cmp) n tabela corespunztoare entitii; numele atributului devine antetul coloanei respective din tabel. o Orice instan a unei entiti este reprezentat printr -un rnd n tabel asociat entitii, numit nregistrare; fiecare celul din nregistrare conine valoarea luat de atributul corespunztor pentru instana respectiv.
58
59
Relaii 1-m Fie dou entiti U i V (de exemplu: Pacieni i Programri) avnd atributele a1, (cheie primar), a2, ... , an i respectiv b1(cheie primar), b2, ... , bm, ap (de exemplu: codPacient, numepren, datanaterii, adresa, telefon, nrSerieCI, CNP, respectiv nrProgramare, dataprogramare, oraprogramare, codpacient). Prin cheie extern nelegem un atribut al entitii V a crui mulime de valori coincide cu mulimea valorilor cheii primare din entitatea U (aici: atributul codPacient este cheie primar pentru entitatea Pacieni i cheie extern pentru entitatea Programri).
Figura 3.5. Implementarea unei relaii 1-m n MS Access Observaii: n diagrama entitate-relaie, cheile externe se reprezint la fel ca i cheile primare, dar sublinierea se face punctat. Observm c n timp ce, la nivelul entitii U, valorile luate de atributul a1 sunt unice (el fiind cheie primar), la nivelul entitii V valorile luate de atributul a1 pot fi duplicate (el fiind cheie extern). Din punctul de vedere al relaiei 1-m dintre entitile U i V, entitatea U poate fi privit drept entitate principal, iar entitatea V drept entitate secundar.
60
Pentru a stabili o relaie (numit Areprogramare) de 1-m ntre entitile Pacieni i Programri procedm astfel: 1. includem n descrierea ambelor entiti un acelai atribut (aici: CodPacient); 2. definim acest atribut drept cheie primar pentru entitatea principal i cheie extern pentru entitatea secundar. Relaii n-m n acest caz, ne bazm pe faptul c n modelul relaional nu numai entitile, ci i relaiile dintre ele sunt relaii n sens matematic i, ca urmare, pot fi reprezentate prin tabele. S considerm baza de date a unei faculti care conine cel puin entitile Curs (IdCurs, denumire) i Student (NrMatricol, nume, prenume, grupa). Evident un student poate s se nscrie la mai multe cursuri, iar la un curs pot participa mai muli studeni.Avem de-a face cu o relaie n-m, numit CerereiOfert. Pentru a o relaie n-m ntre dou entiti (aici CerereiOfert ntre entitile Curs i Student) procedm astfel: 1. identificm cheile externe - dou atribute care s corespund atributelor care funcioneaz drept chei primare pentru cele dou entiti (aici: IdCurs i NrMatricol); 2. definim o entitate nou, CursStudent descris prin cele dou atribute; aceast entitate este numit si entitate intersecie. 3. reducem astfel stabilirea unei relaii n-m (aici: relaia dintre Curs i Student) la stabilirea a dou relaii 1 -m (aici: relaiile dintre Curs i CursStudent, i respectiv dintre Student i CursStudent (figurile 3.6 i 3.7).
Observm c singurele relaii dintre entiti car e conduc la tabele intermediare sunt relaiile de cardinalitate n-m. Tabela corespunztoare trebuie s conin cel puin cheile externe necesare relaionalii celor dou entiti; n acest caz, cheia primar a relaiei este format din cele dou atribute; altfel: se poate aduga relaiei un alt atribut care va fi definit drept cheie primar a acesteia .
Figura 3.6 prezint diagrama entitate pentru o relaie n-m, iar figura 3.7 prezint implementarea acesteia n Access.
61
62
Prin urmare, aceast valoare (artificial), care nu trebuie confundat cu valoarea 0 sau cu irul vid de caractere, a fost incorporat modelului relaional bazelor de date pentru a permite tratarea excepiilor i a datelor incomplete.
63
64
65
Figura 3.9. Trecerea de la modelul conceptual la modelul fizic Un pas important n construirea bazei de date l reprezint crearea tabelelor a relaiilor dintre ele, conform regulilor de integritate. Tabela = o structur utilizat pentru stocarea i organizarea datelor. Tabelele sunt formate din linii i coloane. Fiecare coloan reine date de anumit tip i corespunde unui atribut al entitii; numele atributului devine antetul coloanei. Un rnd din tabel corespunde unui element al entitii (instan) i se num nregistrare. Aceasta descrie complet proprietile unei instane. Dac ne imaginm un tabel sub forma unei grile asemntoare unei foi de calcul tabelar, coloanele verticale din gril sunt coloanele tabelului, iar rndurile orizontale reprezint rndurile tabelului.
66
O cheie primar este reprezentat de o coloan sau o combinaie de coloane ale cror valori sunt unice la nivelul tabelei i sunt completate obligatoriu. Cheile primare provin din identificatorii unici ai entitii. O relaie dintre dou entiti va fi transformat ntr -o coloan cheie strin. O constrngere de integritate implementeaz o regul referitoare la o coloan sau la ntregul tabel. Constrngerile de integritate pot fi stocate n baza de date, ca parte a definiiei tabelului. Crearea unei tabele se realizeaz n dou etape: a) n prima etap, se stabilete structura tabelei, specificndu -se numele cmpurilor, lungimile acestora, precum i tipul informaiilor care vor fi introduse n fiecare cmp; b) n a doua etap, se ncarc efectiv datele n tabel.
67
Ideea i aparine lui D.F.Childs care a publicat n 1968 o lucrare n care a artat c orice structur de date poate fi reprezentat sub form de tabele n interiorul creia trebuie s existe i informaie de legtur (Lungu, et al, 1995).
68
reguli de integritate a entitilor; reguli de integritate referenial. La acestea se adaug i regulile de integritate impuse de situaia real modelat prin baza de date, numite restricii procedurale. Prima regul de integritate se aplic cheilor primare (cheia sa primar nu poate lua valoarea NULL pentru nici o instan a entitii). A doua regul de integritate se aplic cheilor externe (pentru orice instan a entitii secundare, valoarea cheii externe trebuie s corespund valorii cheii primare a unei instane oarecare a entitii principa le sau s fie NULL.
69
II) Entiti, atribute i chei primare a) Dai exemple de instane ale entitii Studeni. b) Dai exemple de valori ale atributului Vitez al entitii Microprocesor. c) Descriei atributele urmtoarelor entiti i identificai un a tribut/grup de atribute cu proprietatea de identificator unic: (i) persoan; (ii) abonat telefonic; (iii) automobil; (iv) calculator. III) Exemple de relaii: grad i cardinaliti Dai exemple de relaii binare din baza de date a unui club sportiv. Dai exemple de relaii 1-1, 1-m i n-m din baza de date a unui spital. Citii ntrebrile de mai jos i alegei varianta corect de rspuns: IV) Modelul conceptual 1.Elementele de baz ale modelului conceptual sunt: a) entitile i atributele; b) instanele i relaiile; c) cheile primare i cheile candidat; d) entitile, atributele i relaiile. 2.Entitile principale sunt entiti care: a) admit subentiti; b) admit entiti dependente; c) constau dintr-o singur instan. 3. Dup gradul de complexitate, atributele pot fi: a) atribute de baz i atribute derivate: b) atribute elementare i atribute compuse; c) atribute cu valori unice i atribute cu valori multiple. 4.O entitate poate avea: a) cel puin dou chei primare; b) oricte chei primare, dar o singur cheie candidat; c) oricte chei candidat, dar o singur cheie primar.
70
5.Modelul conceptual al unei baze de date poate fi reprezentat: a) printr-o schem logic; b) printr-o diagram relaionat; c) printr-o schem conceptual sau printr -o diagram entitate-relaie. V) Reguli de integritate 1.Principalele reguli de integritate pentru bazele de date se refer la: a) entiti i relaii; b) entiti i atribute; c) entiti i chei primare; d) atribute i relaii. 2. Regula de integritate a entitilor interzice unui atribut care face parte din cheia primar a unei entiti: a) s ia valoarea 0; b) s ia valoarea 1; c) s ia valoarea NULL; d) s ia oricare dintre valorile 0, 1 sau NULL. 3. Integritatea referenial se refer la valorile luate de: a) fiecare dintre cheile candidat ale entitii principale; b) fiecare dintre cheile candidat ale entitii dependente; c) cheia primar; d) cheia extern.
71
72
Bazele de date din viaa real conin adeseori sute de mii sau chiar milioane de nregistrri, datele fiind legate instrinsec ntre ele. Definiie: Relaia red informaiile despre un obiect reprezentat (o entitate concret sau abstract). Schema relaiei este expresia proprietilor comune i
73
invariante ale liniilor care compun relaia i este relativ constant n timp. Atributul este o caracteristic a obiectului reprezentat ntr -o relaie.15 Un exemplu de relaie este prezentat n figura 1. Exemple de atribute: ID, Nume Contact, Adresa Contact i Nr_tel Contact. Utilizarea unei singure relaii pentru a menine o baz de date conduce la repetri inutile ale datelor, adic redundan16. Redundana reprezint o proprietate a unei colecii de date care se refer la faptul c unele componente sunt memor ate de mai multe ori pe suportul de memorare.
Dup cum se poate vedea din figura 2, redundana excesiv poate determina un proiectant de baze de date s evite folosirea unei singure relaii. n afara redundanei, mai exist trei probleme importante legate de acest tip de organizare: Anomalia la modificare: pentru a modifica adresa furnizorului Pop Ion este necesar modificarea fiecrui rnd care conine acea adres. Dac o nregistrare nu este modificat, apare anomalia la modificare, rezultnd o relaie care conine inexactiti. Anomalia la inserare: dac se dorete adugarea unui nou furnizor, dar nu exist nici o factur a acestuia sau nici un detaliu despre produsele facturate, se poate aduga un rnd nou, iar n cmpurile n care informaiile nu sunt disponibile se va plasa valoarea NULL (o valoare
15
Hurbean L., Dnia D., Negovan A.-M. Baze de date: de la teorie la practic utiliznd Access 2007, Editura Mirton, Timioara, 2008, p.84 16 Giulvezan C., Mircea G., Trnveanu D. Baze de date: Teorie i practic. Access, VBA i SQL, Editura Universitii de Vest, Timioara, 2009, p. 15
74
care indic o valoarea necunoscut sau care lipsete). Aceasta cauzeaz aa-numita anomalie la inserare. Anomalia la tergere: n contradicie cu problema precedent, dac se dorete tergerea tuturor apariiilor furnizorului Pop Ion, automat vor fi terse toate informaiile legate de produsele livrate i facturile pe care acesta apare. Aceasta constituie anomalia la tergere.
Aceast list de probleme poteniale ofer suficiente argumente n favoarea utilizrii mai multor relaii.
4.3 Dependene
n procesul de normalizare a bazei de date este necesar s se in seama de anumite reguli (dependene, forme normale) care permit eliminarea anomaliilor prezentate n paragraful anterior . Dependenele de date reprezint constrngeri care se impun valorilor atributelor unei relaii i care determin proprietile relaiei n raport cu operaiile care pot genera anomalii (inserare, tergere, actualizare).
17
Tama I. (coord.), Stanciu V., Gheorghe M. Access 2007 Proiectare i realizare pas cu pas, Editura Infomega, Bucureti, 2010, p.23
75
unde nrmatr este determinantul, iar numeprenstudent este determinatul. Observaie: Dac A B, atunci la dou linii cu aceeai valoare pentru atributul A le corespund aceeai valoare a atributului B18. Alte exemple: nr_f cod_furn cod_p unit_masura unde nr_f este numrul facturii, cod_furn este codul furnizorului, iar cod_p este codul de bare al produsului, unit_masura fiind unitatea de msur a produsului. Observaie: ntre cmpul de tip cheie primar al unei relaii i celelalte cmpuri ale relaiei exist dependene funcionale. Definiie: O dependen funcional n care determinatul este alctuit dintr un singur atribut se numete dependen funcional canonic19. Exemple de dependene funcionale canonice: cod_p den_p nr_document data document unde den_p este denumirea produsului, nr_document este seria i numrul documentului de plat. Definiie: O dependen funcional este trivial dac i numai dac determinatul este un subset al determinantului: da c BA atunci AB. Exemple de dependene funcionale triviale: (cod_p, nr_f) cod_p (nr_document, tip_document) nr_document Definiie: Dependenele funcionale compuse 20 prezint ca determinant dou sau mai multe atribute, care se scriu ntre paranteze.
18
Hurbean L., Dnia D., Negovan A.-M. Baze de date: de la teorie la practic utiliznd Access 2007, Editura Mirton, Timioara, 2008, p.55 19 Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.41 20 Hurbean L., Dnia D., Negovan A.-M. Baze de date: de la teorie la practic utiliznd Access 2007, Editura Mirton, Timioara, 2008, p.56
76
Exemple de dependene funcionale compuse: (nr_f, cod_p) pret_unitar unde un numr de factur i un cod produs (cu presupunerea c pe o factur codul produsului apare o singur dat) determin un unic pre unitar. Definiie: Se numete dependen funcional complet21, o dependen funcional de forma AB unde B este dependent funcional de A, fr s fie dependent de nici una din componentele lui A. ntre grupul de cmpuri (nr_matr, cod_disciplina) i nota exist o dependen funcional complet, deoarece: (nr_matricol, cod_disciplina) nota nr_matricol nota cod_disciplina nota Pentru un student, numrul matricol i codul disciplinei determin n mod unic nota, dar pentru un numr matricol exist mai multe note (la discipline diferite), iar unui cod de disciplin i corespund mai multe note (ale mai multor studeni). Definiie: O dependen AB se numete dependen funcional parial22 dac i numai dac B este dependent funcional att de A, ct i de o component a lui B. De exemplu, ntre grupul de cmpuri (nr_document,tip_document) i suma exist o dependen funcional parial, deoarece: (nr_document, tip_document) suma nr_document suma tip_document suma unde nr_document semnific seria i numrul de pe documentul de plat (valoare unic), suma seminific suma de plat iar tip_document are una din valorile: chitan, ordin de plat, etc. Pentru un numr de document suma de plat este unic. Dar pentru fiecare tip de document suma de plat poate fi diferit (de exemplu, nu toate chitanele au aceeai sum de plat).
21
Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.41 22 Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.41
77
23
Tama I. (coord.), Stanciu V., Gheorghe M. Access 2007 Proiectare i realizare pas cu pas, Editura Infomega, Bucureti, 2010, p.24 24 Hurbean L., Dnia D., Negovan A.-M. Baze de date: de la teorie la practic utiliznd Access 2007, Editura Mirton, Timioara, 2008, p.84
78
Definiie: Se consider relaia R(A,B,C), unde A, B i C sunt atribute ale acesteia (simple sau compuse). Fie ai,bi i ci valorile atributelor A, B i C. Spunem c exist o dependen funcional multivaloare a atributului C fa de B, notat B C dac pentru orice valori a 1, a2, b, c1, c2 i a1a2 i c1c2, astfel nct tuplurile (a1,b,c1) i (a2,b,c2) fac parte din relaia R, atunci i tuplurile (a1,b,c2) i (a2,b,c1) fac parte din relaia R. Ca exemplu de dependen multivaloare putem considera: R(cod_depozit, cod_magazie, cod_p) unde cod_depozit este codul depozitului, cod_magazie este codul magaziei i cod_p este codul produsului. Este esenial presupunerea c maga ziile se aprovizioneaz de la acelai depozit i comercializeaz toate produsele cumprate de la depozitul respectiv. Din relaia R se pot extrage urmtoarele dependene multivaloare: cod_depozit cod_depozit cod_magazie cod_p
Exist dependen multivaloare a atributului cod_p fa de cod_magazie dac pentru orice valori de tipul: cod_depozit cod_magazie cod_p 111 49 1234 111 51 1235 atunci urmtoarele valori aparin relaiei: cod_depozit cod_magazie cod_p 111 49 1235 111 51 1234 Toate magazinele aprovizionndu-se din acelai depozit, i comercializnd aceleai produse, dac magazinul 49 comercializeaz produsul 1234 i magazinul 51 comercializeaz produsul 1235 atunci putem fi siguri c i magazinul 49 comercializeaz produsul 1235 i magazinul 51 comercializeaz produsul 1234. Dependenele funcionale sunt un caz particular al dependeei multivaloare.
79
Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.44
80
26
Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.44, p.57
81
Rezolvare: 1. Inventarierea atributelor Pe baza analizei rezult urmtoarele atribute: cod_f (cod furnizor), den_f (denumire furnizor), localit (localitatea furnizorului), adresa, email, banca, cont, nr_f (numrul facturii), data_f (data facturii), nr_crt (numrul curent asociat fiecrui produs de pe factur), cod_p (codul produsului), cantit (cantitatea facturat), val_f_TVA (valoarea produsului fr TVA), val_c_TVA (valoarea produsului cu TVA), val_totala_f_TVA (valoarea total a facturii fr TVA), val_totala_c_TVA (valoarea total a facturii cu TVA), TVA (TVA -ul din valoarea produsului), cotaTVA (valoarea cotei TVA), den_p (denumirea produsului), um (unitatea de msur a produsului), stoc (stocul din produsul respectiv), pret_u (preul unitar facturat al produsului), cod_m (codul magaziei n care este depozitat), den_m (denumirea magaziei) i gestionar (numele gestionarului). 2. Specificarea regulilor de gestiune o factur este emis de un singur furnizor, un furnizor poate s apar pe mai multe facturi; o factur poate conine mai multe produse, iar un produs poate s apar pe mai multe facturi; un produs poate fi depozitat n mai multe magazii, iar o magazie poate depozita mai multe produse. Algoritmi de calcul Val_f_tva = cantit*pret_u TVA=cantit*pret_u*cotaTVA Val_c_TVA=Val_f_TVA+TVA Val_totala_f_TVA= Val_totala_c_TVA= 3. ntocmirea dicionarului de atribute Dicionarul de atribute DA: cod_f, den_f, localit, adresa, email, banca, cont, nr_f, data_f, nr_crt, cod_p, cantit, cotaTVA, den_p, um, stoc, pret_u, cod_m, den_m i gestionar. 4. Stabilirea cheilor primare: cod_f, cod_p, cod_m, nr_f. 5. Stabilirea dependeelor funcionale Graful dependenelor funcionale simple
82
Graful dependenelor funcionale multiple cod_f nr_f cod_m cod_p cod_p cod_m nr_f cod_p cod_p nr_f 6. Atribute izolate: cantit, cotaTVA i pre_u sunt determinate de un grup de atribute dup cum urmeaz:
7. Formarea tabelelor: Fiecare cheie primar i atributele determinate direct i intranzitiv vor forma un tabel. 8. Identificarea cheilor externe: atributele subliniate prin linie discontinu la nivelul modelului relaional.
unde
Fig. 3 Graful dependenelor funcionale multiple semnific reprezentarea grafic a unei chei compuse.
83
unde
1 = dependene funcionale simple 1T= dependene funcionale simple tranzitive # = chei primare
10. Definitivarea modelului relaional: Furnizori(cod_f, den_f, localit, adresa, email, banca, cont) Facturi(nr_f, data_f, cod_f) Produse(cod_p, den_p, um) ProduseFacturate(nr_f, nr_crt, cod_p, cantit, pret_u, cotaTVA ) Magazii(cod_m, den_m, gestionar) ProduseMagazii(cod_p, cod_m, stoc) Prin linie continu se simbolizeaz cheile primare, iar prin linie ntrerupt, cheile strine. 11. Implementarea n Access
84
27 28
Ionescu F. Baze de date relaionale i aplicaii, Editura Tehnic, Bucureti, 2004, p.187 Hurbean L., Dnia D., Negovan A.-M. Baze de date: de la teorie la practic utiliznd Access 2007, Editura Mirton, Timioara, 2008, p.60
85
De exemplu:
86
Relaia FacturiProduse nu se afl n forma normal 2 deoarece: (Nrfact, Nrprod) DenProd Nrprod DenProd Relaia FacturiProduse prezint urmtoarele anomalii: redundan pentru cmpul DenProd (care depinde parial de cheia primar) figura 6; anomalii la adugare: nu se pot aduga produse dac nu exist o factur pentru acestea; anomalii la tergere: tergerea unei facturi poate duce la tergerea definitiv a unor produse; anomalii la modificare: dac se modific denumirea unui produs, atunci trebuie modificate toate nregistrrile care conin denumirea produsului respectiv.
87
Relaia FacturiFurnizori nu se afl n forma normal 3 deoarece exist o dependen funcional tranzitiv: Nrfact Nrfurn Numefurn Relaia FacturiFurnizori prezint urmtoarele anomal ii: redundan pentru cmpul Numefurn (determinat funcional tranzitiv din Nrfurn) figura 8; anomalii la adugare: nu se pot aduga furnizori dac nu exist o factur a acestora; anomalii la tergere: tergerea unei facturi poate duce la tergerea definitiv a furnizorului; anomalii la modificare: dac se modific denumirea unui furnizor, atunci trebuie modificate toate nregistrrile care conin denumirea furnizorului respectiv. Majoritatea specialitilor sunt de acord c o baz de date aflat n FN3 asigur un raport satisfctor ntre rezolvarea redundanelor i a anomaliilor pe de o parte i viteza de lucru i accesibilitatea datelor, de pe alt parte.
88
4.5 Concluzii
Normalizarea presupune efectuarea de verificri asupra datelor dintr-o relaie pentru a determina dac aceasta satisface regulile formelor normale. Formele normale se bazeaz pe dependenele funcionale ce se pot stabili ntre atributele unei relaii. Obiectivele normalizrii sunt: minimizarea redundanei, eliminarea anomaliilor, facilitarea interogrilor bazei de date i diminuarea nevoii de modificare periodic a structurii bazei de date.29 O baz de date riguros normalizat nu este neaprat i o baz de dat optim datorit vitezei de lucru, a accesibilitii dat elor de aceea n unele cazuri se introduc selectiv date redundante pentru a crete performana sistemului. Acest proces poart numele de denormalizare.
29
Hurbean L., Dnia D., Negovan A.-M. Baze de date: de la teorie la practic utiliznd Access 2007, Editura Mirton, Timioara, 2008, p.85
89
90
4.8 Exemple
4.8.1 Problem rezolvat Filiala CEC
Se cere informatizarea activitii la o filial CEC. Clienii filialei sunt identificai prin nume i prenume, cnp, seria i numrul de buletin, data eliberrii buletinului i adres. Fiecare client poate s dein unul sau mai multe cecuri. Pentru fiecare cec se cunoate: seria, numrul, data la care a fost eliberat, suma depus n momentul eliberrii i tipu l cecului (poate fi la termen sau la vedere). De asemenea, fiecare cec poate s aib unul sau mai muli titulari. Fiecare client poate efectua depuneri i restituiri. Depunerile se efectueaz prin intermediul unei foi de depunere (FD) caracterizat prin: numr, dat i suma depus. Restituirile se efectueaz prin intermediul foilor d e restituire (FR) caracterizate prin: numr, data i suma restituit. Fiecare cec se poate lichida de ctre unul din titulari prin intermediul unei foi de lichidare (FL) caracterizat prin: numr, data i suma din momentul lichidrii. Dobnda acordat pent ru cecuri se modific de la o zi la alta i este diferit pentru cecurile la termen fa de cele la vedere.
Rezolvare 1. Inventarierea atributelor Pe baza analizei rezult urmtoarele atribute: codcl, numepren, cnp, serieci, nrci, dataelibci, adresa, serie_nrcec, dataelibcec, titularcec, codtipcec, tipcec, termen, coddep, datadep, sumadep, codrest, datarest, sumarest, codlich, datalich, sumalich, datadob, dobanda. 2. Specificarea regulilor de gestiune un client poate avea mai multe cecuri, un cec poate avea mai muli titulari (clieni); pe un cec se pot face mai multe depuneri; pe un cec se pot face mai multe restituiri; un cec poate fi lichidat doar o singur dat; mai multe cecuri sunt de acelai tip. 3. ntocmirea dicionarului de atribute Dicionarul de atribute DA eliminm atributul titularcec (este echivalent cu client) i unim atributele seriecec i nrcec ntr -un singur cmp, rezultnd: codcl, numepren, cnp, serieci, nrci, dataelibci, adresa, serie_nrcec, dataelibcec, tipcec,
91
termen, coddep, datadep, sumadep, codrest, datarest, sumarest, codlich, datalich, sumalich, datadob, dobanda. 4. Stabilirea cheilor primare: codcl, serie_nrcec, codtipcec, coddep, codrest, codlich, codtipcec+datadob. 5. Stabilirea dependeelor funcionale Graful dependenelor funcionale simple
Graful dependenelor funcionale multiple codcl serie_nrcec serie_nrcec codcl serie_nrcec coddep serie_nrcec codrest codtip serie_nrcec Atribute izolate: pentru un tip de cec, ntr-o anumit dat, se calculeaz o dobnd. codtip datadob dobanda
6. Formarea tabelelor: Fiecare cheie primar i atributele determinate direct i intranzitiv vor forma un tabel. 7. Identificarea cheilor externe: atributele subliniate prin linie discontinu la nivelul modelului relaional.
92
unde
1 = dependene funcionale simple 1T= dependene funcionale simple tranzitive # = chei primare
93
9. Definitivarea modelului relaional: Clienti (codcl, numepren, cnp, serieci, nrci, dataelibcl, adresa) TipuriCecuri (codtip, tipcec, termen) Cecuri (serie_nrcec, dataelibcec, codtip) CecuriClienti (codcl, serie_nrcec) Depuneri (coddep, datadep, sumadep, serie_nrcec) Restituiri (codrest, datarest, sumarest, serie_nrcec) Lichidari (codlich, datalich, sumalich, serie_nrcec) Dobanzi (codtip, datadob, dobanda) 10. Implementarea n Access
Stanciu A. (coord.), Mihai F, Mangiuc D, et al Baze de date Access 2007: studii de caz, Editura Infomega Bucureti, 2009, p. 28
94
care se memoreaz un cod unic i denumirea serviciului. Indiferent de denumirea serviciului, se impune specificarea rii destinaie identificat prin cod i denumire; pentru ara de destinaie se precizeaz localitatea destinaie, pentru care se reine codul i numele. Pentru ca s fie ct mai atractiv, agenia ofer anumite reduceri n funcie de vsrta turitilor, astfel pentru turitii cu vrsta mai mic sau egal cu 12 ani, se acord o reducere de 40% din tariful standard aferent fiecrui serviciu, iar copii care nu au mplinit nc 12 ani beneficiaz de gratuitate. Fiecare prestator de servicii se identific printr -un cod unic, denumire, numrul de telefon, categoria n care se ncadreaz (companie aerian, firm de transport terestru, unitate cazare). Pentru serviciile prestate, agenia ncheie un contract de care pot beneficia mai muli turiti (de exemplu, o familie). n cadrul contractului, pe lng numrul i data ncheierii acestuia, se precizeaz turistul/turitii beneficiar(i), clauzele contractuale (drepturile/obligaiile prilor contractuale), avansul, data pn la care se poate achita valoarea integral a contractului, tariful standard aferent serviciului respectiv, data plecrii i data sosirii. Dac turistul renun din vina sa la serviciile care fac obiectul respectivului contract, el datoreaz ageniei despgubiri difereniate n funcie de momentul renunrii (mai exact, numrul de zile nainte de data plecrii).
4.8.2.2 Registrul de cas31 Firma ABC SRL are ca obiect de activitate realizarea de cursuri de pregtire i perfecionare n domeniul limbilor strine. Se dorete realizarea unei baze de date pentru evidena operaiilor realizate n lei n cadrul casieriei. Zilnic se va realiza registrul de cas ce va conine data realizrii operaiei, explicaia operaiei, suma operaiei i tipul operaiei (ncasare sau plat) precum i numrul i tipul documentului (cec de numerar, chitana, foaie de vrsmnt, dispoziie de plat sau ncasare, state de salarii, etc). Registrul de cas va conine soldul iniial al zilei, totalul sumelor ncasate precum i soldul final al zilei. Fiecare operaie nregistrat n baza de date va primi un numr unic folosit la identificare. ncasrile pot s provin din vnzarea de servicii proprii (taxele cursanilor) sau ridicri de numerar de la banc, aport de capital. Plile se pot face pentru achitarea drepturilor salariale, avansuri spre decontare, cumprri de bunuri,
31
Stanciu A. (coord.), Mihai F, Mangiuc D, et al Baze de date Access 2007: studii de caz, Editura Infomega Bucureti, 2009, p. 111
95
depuneri de numerar la banc. Operaiile sunt grupate pe categorii n funcie de sursa acestora, reinndu-se pentru fiecare operaie codul categoriei, denumirea acesteia i tipul. Principalele categorii de operaii sunt tax cursani, ridicare numerar banc, aport capital, achitare drepturi salariale, avans spre decontare, cumprare bunuri, depunere de numerar la banc , la care pot fi adugate ulterior (n timpul exploatrii bazei de date) i alte pli sau ncasri. O categorie special de operaii o reprezint avansurile spre decontare. Acestea trebuie justificate prin intermediul unor documente n cadrul deconturilor de cheltuieli. Pentru fiecare decont de cheltuieli este necesar reinerea numrului i datei acestuia, a documentelor (numr, data, suma, tip) ce justific chelt uirea avansului precum i a datelor titularului avansului. Pot s beneficieze de avansuri spre decontare salariaii firmei. Datele fiecrui salariat (nume, data naterii, adresa) vor fi nregistrate n cadrul bazei de date o singur dat, acesta fiind identificat cu ajutorul mrcii. Avansul neutilizat este restituit la casierie pe baza documentului de ncasare. Documentele justificative pentru avansuri se vor scana i se vor arhiva.
4.8.2.3 Societate de asigurri32 Se cere informatizarea activitii unei societi de asigurri. Clienii societii pot fi persoane fizice sau juridice, caracterizate printr-un numr unic, nume i prenume/denumire, adres i telefon. Acetia pot s ncheie diferite tipuri de asigurri (de bunuri, de via). Asigurrile sunt ncheiate de agenii care sunt identificai printr-un cod unic, nume i prenume. Contractul de asigurare este caracterizat print-un numr, data ncheierii, obiectul ncheierii, obiectul asigurrii, perioada (n luni), valoarea asigurat i prima ce va trebui pltit n fiecare lun de ctre client. Clienii efectueaz plata primelor din ordin de plat (persoane juridice) sau direct la casierie (persoane fizice), eliberndu -se chitane. Documentul de plat conine: numrul documentului, data la care a fost ntocmit i suma pltit. n momentul producerii riscului pentru care a fost ntocmit asigurarea societatea pltete clientului despgubiri. La plata despgubirilor se ntocmete un proces verbal care este caracterizat printr -un numr, data ncheierii, descr ierea cauzei care a generat despgubirea i procentul n care este despgubit clientul.
32
Nstase P., Coscescu L., Covrig L., et al Tehnologia bazelor de date Access 2000, Editura Economic, Bucureti, 2000, p. 351
96
Tama I. (coord.), Stanciu V., Gheorghe M. Access 2007 Proiectare i realizare pas cu pas, Editura Infomega, Bucureti, 2010, p.7
97
este necesar regruparea datelor din diverse tabele ntr -un singur loc cu ajutorul unor interogri complexe; baza de date este accesat de mai muli utilizatori (se poate beneficia de mecanismele de modificare furnizate de baza de date). Este recomandat utilizarea Microsoft Excel dac: sunt suficiente tabelele simple, fr relaii ntre ele; se doresc efectuarea de calculi i comparaii statistice; setul de date nu depete 15000 de nregistrri.
98
cadrul acestei opiuni, utilizatorii pot crea o panglic special i o pot folosi n locul celei predefinite; Datasheet: opiuni de formatare pentru Datasheet View. Utiliznd aceast opiune, se poate selecta tipul literelor folosite, afiarea liniilor de ghidaj pe formulare i setarea efectelor implicite ale celulelor; Object Designers : opiuni care pot fi setate i afecteaz modul n care uneltele de design sunt configurate n Access. Opiunile sunt grupate astfel: Table Design, Query Design, Form Design, Error Checking; Proofing: include opiuni legate de verificri gramaticale cum ar fi: spell checking, grammar checking, i auto correction; Advanced: opiuni care pot fi setate i care controleaz modul n care Access interacioneaz cu datele i utilizatorul cu aplicaiile. Sunt disponibile urmtoarele grupuri de opiuni: Editing, Display, Printing, General, Advanced; Customization: utile pentru a aduga sau terge opiuni de pe panglic. Add-Ins: o list a utilitarelor add-ins disponibile pentru Access; Trust Center: acceseaz Trust Center. Muli utilizatori seteaz nivelul de securitate la nivelul minim pentru a evita mesajele care apar atunci cnd se deschide o baz de date care conine o macrocomand. Microsoft recomand pstrarea nivelului de securitate la valoarea implicit, i anume funcionalitate deplin. n Trust Center sunt disponibile dou opiuni: Show the message bar in all applications when content has been blocked i Never show information about blocked content. Resources: conine link-uri ctre resurse online care asist utilizatorul care lucrez cu Access. Sunt disponibile linkuri la pagina Office, diagnostice interactive Office 2007, help online i actualizri de software. Exist multe opiuni, controale i unelte disponibile pentru a ajuta la modificarea programului i a aplicaiei fr a fi necesare cunotine de programare.
99
La deschiderea Microsoft Access 2007 pe ecran va apare fereastra Getting Started with Microsoft Office Access.
Butonul Office
100
n partea din dreapta a ecranului sunt vizibile link-uri ctre ultimele fiier e de tip baz de date utilizate. n cazul nchiderii accidentale a bazei de date, aceasta poate fi deschis rapid selectnd primul link din lista Open Recent Database. Dac se dorete modificarea locaiei implicite de sa lvare a bazelor de date se selecteaz butonul Office, se alege opiunea Access Options, modificnd cu ajutorul butonului Browse opiunea Default database folder.
5.2.2.1 Crearea unei baze de date Pentru a crea o baz de date vid se alege butonul Blank Database figura 2. Folosind icoana de folder din partea din dreapta a ecranului se alege loca ia unde va fi salvat baza de date, se tasteaz numele dorit, apoi se apas butonul Create figura 4.
101
Odat cu crearea unei baze de date vide, Microsoft Access creaz o nou tabel n care s fie salvate datele. Aceasta poarta numele implicit Table1 i este deschis n Datasheet View (mod de vizualizare care permite afiarea datelor din tabel). Pentru a crea o tabel n acest mod de vizualizare se poate studia problema rezolvat 5.13.1.
5.2.2.2 Parolarea unei baze de date Pentru a parola baza de date, aceasta trebuie s fie deschis exclusiv. Pentru aceasta, se nchide baza de date folosind butonul Office, opiunea Close Database figura 5.
Pentru a uura accesul la anumite butoane se poate folosi bara de acces rapid. Pentru a afia mai multe butoane pe aceasta (n cazul de fa butonul Open) se apas sgeata din partea dreapt a barei, selectndu-se comanda Open. Butonul Open va fi afiat pe bara de acces rapid. Analog se pot selecta alte butoane pentru a fi afiate pe bara de acces rapid. Dac acestea nu sunt afiate implicit, se pot cuta utiliznd comanda More Commands.
102
Pentru a deschide exclusiv baza de date creat anterior se apas butonul Open de pe bara de acces rapid figura 7.
n fereastra Open se selecteaz locaia, numele bazei de date, apoi de pe butonul Open se selecteaz opiunea Open Exclusiv figura 8.
Baza de date fiind deschis exclusiv, de pe bara de meniuri se alege opiunea Database Tools, apoi comanda Encrypt with Password figura 9. n fereastra Set Database Password se cere introducerea parolei de dou ori, la apsarea butonului OK baza de date fiind protejat.
103
Protejarea bazei de date este vizibil doar la deschiderea acesteia, deci pentru a verifica acest lucru se nchide i se deschide din nou baza de date. Pentru a elimina parola setat la deschiderea bazei de date, aceasta trebuie deschis exclusiv, selectndu-se mai apoi opiunea Decrypt Database figura 10.
n cazul n care panoul de navigare este ascuns, acesta poate fi afiat selectnd sgeile laterale figura 11.
104
Afiarea sau ascunderea panglicii (Ribbon) poate fi controlat folosind opiunea Minimize the Ribbon de pe bara de acces rapid figura 12.
Observaie: Baza de date se salveaz automat, dar obiectele coninute trebuie salvate de ctre utilizator. Numele bazei de date este setat la nceputul crerii acesteia. Dac se dorete salvarea bazei de date cu alt nume, de pe butonul Office se alege Save as.. urmat de opiunea Access 2007 Database, specificndu-se locaia i numele bazei de date.
5.2.2.3 Salvarea unei baze de date Pentru a salva o baz de date cu un alt nume, se apeleaz butonul Office, opiunea Save as, apoi Access 2007 Database, selectndu-se apoi locaia i/sau noul nume al fiierului. 5.2.2.4 nchiderea unei baze de date Pentru a nchide o baz de date, de pe butonul Office se apeleaz comanda Close Database. 5.2.2.5 Deschiderea unei baze de date Pentru a deschide o baz de date se poate folosi lista din partea dreapt a ecranului, priul link fiind ctre ultima baz de date utilizat, sau utiliznd butonul Office, opiunea Open.
105
milkshake-urilor consumate n fiecare zi n trei tabele separate. O tabel este containerul n care sunt stocate datele. Restul obiectelor permit manipularea datelor stocate n tabele. Construirea tabelelor Access se poate rezuma la dou activiti principale: crearea structurii tabelei (n modul de vizualizare Design View) i popularea tabelului cu date fie n Datasheet View, prin intermediul formularelor sau a instruciunilor SQL; Interogri (Queries): sunt structuri care permit efectuarea unei aciuni rapide asupra unei tabele sau mai multor tabele. Aceste aciuni implic de obicei obinerea unei informaii necesare (de exemplu, cumprturile efectuate pe parcursul unei zile cu cardul de credit), sau aplicarea unor modificri. Interogrile sunt obiecte virtuale de tip tabel care nu au corespondent fizic, fiind definite cu ajutorul tabelelor create deja n baza de date. Ele permit efectuarea seleciilor i sortrilor n tabele, a calculelor simple i analizelor ncruciate, a aciunilor ( crearea unui nou tabel, adugarea, tergerea sau actualizarea nregistrrilor) sau execuia unor comenzi SQL. Formulare (Forms) sunt ferestre atractive folosite pentru a consulta sau actualiza datele dintr-un tabel sau o interogare. Ele permit totodat crearea unui meniu interactiv construit de ctre utilizator, furniznd i o facilitate special pentru aceasta (Switchboard). Pe un formular pot fi plasate butoane care pot ncorpora comenzi SQL; Rapoarte (Reports) sunt utilizate pentru a tipri unele sau toate informaiile din tabele sau interogri. Permit gruparea i sortarea datelor, adugarea unor cmpuri calculate, numere de pagin, etc; Macrocomenzi (Macros) mini-programe care automatizeaz sarcinile curente. Macrocomenzile sunt formate dintr-o suit de aciuni; Module (Modules) fiiere care conin cod Visual Basic Application. VBA este un mediu de programare orientat obiect. Se pot defini variabile, constante, funcii i proceduri globale ntregii aplicaii sau asociate unui anumit obiect. Cu ajutorul acestor coduri se poate executa aproape orice.
106
Un cmp este o unitate elementar sau o categorie cum ar fi titlurile crilor sau numerele de telefon. Un cmp nu conine n mod necesar o valoare. De exemplu, un cmp numit e-mail poate rmne necompletat dac furnizorul nu deine o adres de e-mail. O nregistrare este un set complet de date (cmpuri) care se refer la o persoan, loc, eveniment, idee. De exemplu, pentru un profesor numrul matricol, numele, prezena i nota final compun o nregistrare. O tabel, fundaia oricrei baze de date, este o colecie de nregistrri care au legtur unele cu altele, i conine c mpuri pentru a organiza datele. O coloan reprezint un cmp, o linie reprezint o nregistrare. Fiecare nregistrare conine aceleai cmpuri n aceeai ordine. Fiierul profesorului cu prezenele studenilor este o tabel care conine nregistrri despre toi studenii avnd o structur comun. O baz de date const n una sau mai multe tabele i obiectele suport care permit introducerea datelor, prelucrarea i extragerea lor din tabele.
valoarea cmpului baza de date nregistrare
tabel
Definiie: O cheie primar este un cmp (sau o combinaie de cmpuri) a crui valori identific n mod unic o nregistrare ntr -un tabel.
Cheie primar Cmp
nregistrare
107
Codul produsului este cheie primar n tabela produse. Cheia primar poate conine numere, litere, sau o combinaie a acestora. Puterea bazelor de date relaionale st n abilitatea SGBD-ului de a organiza datele i a le recombina pentru a obine o imagine complet a evenimentelor descrise. Un design eficient a bazelor de date conecteaz datele din diferite tabele sub forma unui sistem de legturi. Legtura dintre tabele este ca un fir electric care traverseaz baza de date conectnd tabelele astfel nct s permit obinerea rspunsului la cererea utilizatorului (figura 15). Odat identificat rspunsul, cmpurile i nregistrrile sunt rearanjate astfel nct s poate fi nelese cu uurin de ctre utilizator. Captul de nceput al firului este creat odat cu setarea cheii primare ntr -unul dintre tabele. Cellalt capt la firului este legat de un cmp dintr-un alt tabel. Acel cmp poart numele de cheie strin. De exemplu cmpul cod_f (cod furnizor) din tabela furnizori este un cmp de tip cheie strin. Definiie: O cheie strin este un c mp dintr-o tabel, care ntr-o alt tabel este cheie primar.
Dup cum se poate observa din figura 15, chiar i n relaia normalizat nc mai exist redundane. De exemplu, codul produsului (cod_p) apare n mai multe tabele. De fapt nu pot fi eliminate toate cmpurile duplicate i n acelai timp meninute legturile dintre tabele. Acest tip de redundan (cheie primar cheie strin) poart numele de redundan necesar. Orice legtur dintre dou tabele poat fi ntrit utilizndu-se regulile de integritate referenial. Integritatea sugereaz ncredere. Atunci cnd regulile de integritate sunt stabilite, utilizatorul poate avea ncredere n firul care leag tabelele bazei de date, fiind pstrat acurateea datelor . Regulile de tip cascad permit ca modificrile datelor s se perpetueze dintr-o tabel n alta figura 16.
108
Definiie: Regula Cascade Update Related Records va fi setat n cazul n care dac o valoare a cmpului pe care este setat cheia primar este modificat, atunci toate valorile corespunztoare din tabela referit sunt modificate automat cu aceeai valoare. R egula Cascade Delete Related Records va fi setat n cazul n care dac o valoare din tabela de referin este tears prin tergerea nregistrrii care o conine, atunci toate nregistrrile din tabela referit care conin acea valoare referit vor fi automat terse.
Legturile dintre tabele n Microsoft Access 2007 sunt de mai multe tipuri: One-to-Many (unu-la-mai-muli) aceast legtur se creaz ntre o cheie primar dintr-un tabel i o cheie strin din alt tabel. n prima tabel exist o singur nregistrare care conine o valoare a cmpului de tip cheie primar. n cea de-a doua tabel exist mai multe nregistrri care conin n cmpul comun aceeai valoare a cmpului comun. One-to-One (unu-la-unu) se creaz ntre dou tabele care au aceeai cheie primar sau un cmp de tip cheie primar n prima tabel i un cmp cheie strin pe care este setat un index Unique din a doua tabel. n acest caz n ambele tabele exist o singur nregistrare cu valoarea cmpului comun identic. Acest tip de relaie se folosete foarte rar, n special datorit necesitii meninerii securitii datelor din tabele. Many-to-Many (mai- muli-la-mai-muli) acest tip de relaie este construit artificial (nu exist n Access) i corespunde mai multor valori ale cmpului comun din ambele tabele. n acest caz este necesar construirea unui nou tabel numit tabel de jonciune. ntr-o baz de date bine definit, relaia de tip one-to-many este cel mai frecvent ntlnit. Pentru a crea un nou tabel, de pe panglic, opiunea de meniu Create, se selecteaz Table Design. Design View este un mod de vizualizare care ofer cele mai puternice opiuni pentru definirea unei tabele.
109
Atunci cnd se proiecteaz o tabel este important cunoaterea operaiilor de baz care pot fi efectuate cu cmpurile acesteia : pentru adugarea unui nou cmp ntre alte cmpuri existente se poziioneaz cursorul pe cmpul deasupra cruia se dorete adugarea unui nou cmp, se apeleaz meniul contextual (clic cu butonul din dreapta al mouse-ului) i se alege opiunea Insert Rows; mutarea unui cmp un cmp poate fi mutat folosind drag-and-drop, selectndu-se ptratul gri din stnga numelui cmpului i repoziionndu-se cmpul n poziia dorit; tergerea unui cmp se apeleaz meniul contextual al ptratului gri din stnga numelui cmpului i se selecteaz Delete Rows. De reinut faptul c odat cu tergerea unui cmp se terg toate datele depozitate n acel cmp, aciunea nefiind reversibil, de aceea Access afieaz un mesaj pentru a preveni eventualele tergeri accidentale. Fiecare cmp are un nume ( Field Name) cu ajutorul cruia sunt identificate datele introduse n acel cmp. Numele cmpului trebuie s fie descriptiv pentru datele coninute i poate conine maxim 64 de caractere incluznd litere, cifre i spaii. Este interzis utilizarea caracterelor ., !, [, i ], iar numele cmpului nu poate ncepe cu cu spaiu. Fiecare cmp este definit ca fiind de un anumit tip (Data Type), care determin valorile care pot fi introduse i operaiile care pot fi efectuate cu datele. Access recunoate 10 tipuri de date: Text date alfanumerice cele mai multe caractere care se afl pe tastatur (incluznd numere), cu limita maxim de 255 de caractere. Cmpurile care conin doar numere care nu sunt folosite pentru a efectua calcule ar trebui setate ca fiind de tip Text (numere de telefon, coduri potale, numrul crii de identitate, numrul de paaport); Number conine o valoare care poate fi folosit n calcule, ca de exemplu numrul creditelor pe care le are un student . Coninutul cmpului de tip Number este restricionat la numere, virgula zecimal i simbolurile + i -: Byte numere ntre 1 i 255 (ocup 1 byte); Integer numere n intervalul [-32768,+32757] (ocup 2 bytes); Long Integer [-2147483648,+2147483647] (ocup 4 bytes); Single numere reprezentate n simpl precizie: [-3.40*1038,3.40*1038] (ocup 4 bytes i are precizie de 7 zecimale);
110
Double numere reprezentate n dubl precizie, [-1.797*10308, 1.797*10308] (ocup 8 bytes i are precizie de 15 zecimale); Replication ID GUID (Global Unique IDentifier) identificator unic global, (ocup 16 bytes) este folosit pentru un cmp care este sau compun un cmp de tip cheie strin corespondentul unui cmp de tip cheie primar Autonumber; Decimal [-1028, 1028] (ocup 12 bytes i implicit are o precizie de 18 zecimale care poate s creasc pn la 28 de zecimale). Memo blocuri mari de text de lungime maxim 65536 caractere. Cmpurile de tip Memo sunt utilizate pentru a pstra date descriptive (propoziii, paragrafe). Lungimea maxim este de is 2 GB. Date/Time conine date calendaristice formatate, ore, sau ambele, permind calcule aritmetice cu acestea . Anii din datele calendaristice sunt n intervalul dintre anii 100 i 9999. Datele sunt salvate sub form de numr pe 8 bytes, cu dubl precizie; Currency numere cu 4 zecimale urmate de simbolul monetar, cu care pot fi efecuate calcule. Ocup 8 bytes i sunt utilizate pentru calcule financiare, dac nu se dorete rotunjirea valorilor ; AutoNumber un numr care este incrementat automat pentru fiecare nregistrare. Valoarea unui cmp de tip Autonumber este unic pentru fiecare nregistrare din tabel, de aceea tipul Autonumber se utilizez n mod frecvent ca tip de date al unui cmp cheie primar. Numrtoarea poate fi secvenial sau ntmpltoare (random). Valoarea acestuia nu poate fi modificat i ocup 4 bytes; Yes/No permite alegerea unei valori din 2 posibile, o informaie discret care poate avea doar dou valori cum ar fi: True/False, Yes/No, On/Off, (ocup 1 byte); OLE Object conine un obiect creat cu o alt aplicaie, cum ar fi Microsoft Excel, Microsoft Word sau poze. Dimensiunea maxim a fiierului este de 2GB, dar baza de date este ncetinit considerabil prin nglobarea obiectelor externe; Hyperlink utilizat pentru a stoca adrese Web (URL Uniform Resource Locators). Toate fiierele din suita Office permit faciliti Web dac se selecteaz un link, automat este afiat pagina Web asociat (1 GB); Attachment cel mai nou tip de date introdus doar n MS Access 2007, permite ataarea mai multo obiecte create cu alte aplicaii. Mrete flexibilitatea bazei de date prin utilizarea technicilor OLE (Object Linking and Embedding=Legare i ncorporare de Obiecte);
111
Lookup Wizard este utilizat pentru valori care vor fi completate selectnd o valoare dintr-o caset combinat. Nu este un tip de date propriu-zis, ci un program utilitar care creaz relaii cu tabela printe sau o list definit de utilizator .
Pentru a crea o legtur ntre tabele, se va crea tabela de referin cu cheia primar, se insereaz date n tabel , apoi se creaz tabela referit, iar pentru cmpul care va fi cheie strin se va selecta opiunea Lookup Wizard, cu prima opiune I want the lookup column to lookup the values in a table or query ; se selecteaz numele tabelei de referin, cmpul de tip cheie primar din tabela de referin i ordinea de sortare. Atunci cnd se introduc date n cmpul de tip cheie strin din tabela referit se utilizeaz caseta combinat creat cu ajutorul opiunii Lookup Wizard, selectndu-se din valorile din list. Dac se dorete crearea unei liste predefinite de ctre utilizator, se va selecta Lookup Wizard cu a doua opiune I will type in the values that I want, apoi se vor insera toate valorile pe o coloan . Atunci cnd se insereaz datele n cmpul respectiv, se utilizeaz caseta combinat creat automat de ctre Lookup Wizard. Description este o coloan opional care se utilizez dac se dorete afiarea descrierii cmpului pe bara de stare atunci cnd cmpul este selectat (activ). O proprietate este o caracteristic sau un atribut care determin cum va arta i cum se va comporta obiectul. Fiecare obiect Access are o mulime de proprieti. Proprietile tabelei sunt afiate i pot fi modificate n fereastra Property Sheet. Aceasta se gsete pe panglic, n modul de vizualizare Design View, opiunea de meniu Design. Fiecare cmp are o mulime de proprieti. Proprietile sunt setate pe valoarea implicit n concordan cu tipul de date selectat, dar pot fi modificate. Ele sunt afiate n modul de vizualizare Design View, n partea de jos a ecranului. Field Size (dimensiunea cmpului) ajusteaz dimensiunea unui cmp de tip text sau limiteaz valoarea permis ntr -un cmp de tip numeric. Microsoft Access utilizeaz doar cantitatea de spaiu de stocare necesar, chiar dac dimensiunea cmpului permite o dimensiune mai mare. Multe SGBD-uri folosesc tot spaiul specificat ca dimensiune a cmpului. De aceea, este util crearea obinuinei de a reduce dimensiunea spaiului cu scopul ajustrii la cerinele de stocare ale sistemului (optimizarea spaiului de stocare);
112
Decimal Places specific numrul de zecimale. Valoare predefinit este Auto sunt afiate toate zecimalele rezultate n urma calculelor, dar nu mai mult de 15 zecimale; Format modific modul de afiare al valorii unui cmp, dar nu afecteaz valoarea stocat; pentru unele tipuri de date cum ar fi Number, Date/Time i Yes/No se poate alege formatul dorit dintr-o list; pentru cmpuri de tip Number pot fi afiate valori pozitive, negative, zero sau valoarea Null folosind caractere speciale (0, #, $, %, E+, E-, e+, e-); pentru cmpuri de tip Date/Time: se utilizeaz urmtoarele caractere (d zi ntre 1 i 31, dd zi ntre 01 i 31, ddd primele 3 litere n englez din numele zilei (de exemplu, Mon de la Monday pentru ziua de Luni), dddd numele ntreg al zilei, etc); pentru cmpuri de tip Text: ! dac se introduc numere; < litere mici; > majuscule; text textul va aprea exact cum este scris: text; @ creaz grupuri de numere: @@@@-@@@-@@@ cum ar fi 0744-256-56. Input Mask faciliteaz introducerea datelor afind caractere care nu sunt stocate, cum ar fi caracterul slash ntr -o dat calendaristic (/). De asemenea, asigur validarea datelor pentru a corespunde formatului ales (de exemplu, previne introducerea unei cifre n plus sau n minus n cazul unui numr de telefon); 0 o cifr obligatorie ntre 0 i 9; 9 o cifr opional ntre 0 i 9; A o liter sau o cifr obligatorie; a o liter sau o cifr opional; # o cifr opional ntre 0 i 9 sau un spaiu opional; & orice caracter sau spaiu; C un caracter opional sau un spaiu L o liter obligatorie de la A la Z; ? o liter opional de la A la Z; > litere care vor fi transformate n majuscule; < litere care vor fi transformate n majuscule. Cnd ambele proprieti sunt setate, (Format i Input Mask), Format este cea impus (are prioritate).
113
Caption specific o etichet diferit fa de numele cmpului, care va fi afiat n DataSheet View n capul de tabel, pe formulare i rapoarte. Lungimea maxim a valorii introduse n Caption este 2084 caractere. Valoarea proprietii Caption nu are nici o semnificaie n cadrul interogrilor sau cnd se utilizeaz cod n Visual Basic Application; Default value introduce automat o valoare predefinit pentru cmpul respectiv atunci cnd o nou nregistrare este inserat ntr -un tabel. De exemplu, dac foarte muli dintre studeni sunt nscui n Timi oara, valoarea proprietii Default Value poate fi modificat n Timi oara; Validation Rule respinge orice nregistrare pentru care valoarea introdus n cmpul respectiv nu respect regula stabilit . Expresia poate fi tastat n interiorul casetei de text, sau se poate selecta butonul pentru a deschide fereastra Expression Builder. Aceast proprietate nu poate fi folosit pentru tipuri de date cum ar fi: Autonumber, OLE Object, Attachment, Number cu sub-tipul Replication ID. Pentru a construi o regul de validare pot fi folosite funcii Access, operatori i constante. Numele cmpului trebuie s apar ntre paranteze drepte, de exemplu [cod produs]. Exemple de reguli de validare: >200 and <=400 pentru un cmp numeric; <>NULL, IS NOT NULL pentru orice fel de cmp; Timisoara pentru un cmp de tip Text; >=#03/12/2011# pentru o dat calendaristic; >=Date() pentru o dat calendaristic; Year([data factura])=Year(Date()) unde fucia Year extrage anul dintr-o dat calendaristic (n acet caz cmpul data facturii), iar funcia Date() extrage data curent ; Validation Text specific mesajul de eroare care va fi afiat n cazul n care regula de validare nu este respectat; Required dac este setat pe Yes, respinge orice nregistrare care nu conine o valoare n cmpul respectiv; valoarea predefinit este No; Allow Zero Length dac este setat pe Yes, permite irul de lungime zero n cazul cmpurilor de tip text sau memo; valoarea predefinit este No; Indexed mrete eficacitatea cutrilor n acel cmp (cmpul pe care este setat cheia primar este ntotdeauna indexa t): No nu este setat nici un index; Yes (No Duplicates) este setat un index care nu permite duplicarea valorilor, ca n cazul CNP-ului, de exemplu. Este valoarea care apare atunci cnd se seteaz cheia primar ;
114
Yes (Duplicates Ok) este setat un index care permite duplicarea valorilor, ca n cazul numelui pacientului, de exemplu. Indecii mai pot fi definii i prin intermediul butonului Indexes de pe panglic figura 17. Se poate seta numele indexului (Index Name), cmpul pe care acesta va fi setat (Index Field), i ordinea de sortare (Sort Order), specificndu-se pentru fiecare index tipul acestuia: Primary (dac se dorete crearea unui index de tip Primary Key), Unique (crearea unor chei candidate cu valori unice) sau Ignore Null (crearea unui index care ignor valorile Null).
Unicode Compression pentru cmpurile Text, Memo i Hyperlink, are valoarea implicit setat pe Yes i este folosit pentru a eficientiza modul de stocare a datelor; IME Mode and IME Sentence Mode specific modul Input Method Editor cu opiunea implicit No Control pentru versiunea n englez i tipul de dat pentru modul Input Method; Smart Tags pentru utilizatorii avansai, permite adugarea butoanelor de aciune asociate unui cmp. Atunci cnd o baz de date ofer produse la ofert, un buton de tip Smart Tag ncorporat cmpului nume produs ar putea deschide un fiier de inventar pentru a vizualiza produsele din stoc; Text Align aliniaz textul, furniznd urmtoarele opiuni: General (aliniere predefinit), Left (aliniere la stnga), Center (aliniere centrat), Right (aliniere la dreapta) i Distributed (aliniere i la stnga i la dreapta).
Datasheet View este utilizat pentru inserarea datelor n tabele. Vizualizarea de tip Pivot Table View furnizez un mod convenabil de sumatizare i organizare a datelor n grupuri de nregistrri. Vizualizarea Pivot Chart View afieaz un
115
grafic asociat modului de vizualizare Pivot Table View. Pentru a trece de la un mod de vizualizare la altul, se poate utiliza fie butonul View de pe panglic, opiunea de meniu Home, fie butonul corespunztor de pe bara de stare (Status bar). O tabel poate fi deschis din panoul de navigare direct n modul de vizualizare dorit apelndu-se meniul contextual al tabelei i selectndu-se modul de vizualizare dorit.
116
n fer eastra Show Table se va preciza sursa datelor executnd dublu-clic pe numele tabelei sau tabelelor figura 18. De reinut c dac se selecteaz mai multe tabele, trebuie specificate toate tabele intermediare pentru a fi vizibile legturile dintre ele n caz contrar rezultatul interogrii nu este cel dorit. Dup nchiderea ferestrei, dac se dorete redeschiderea ferestrei pentru a aduga o nou tabel, se selecteaz butonul cu acelai nume de pe panglic. Dac se dorete tergerea unei tabele, se apeleaz meniul contextual asociat acesteia, selectndu-se comanda Delete. Dup ce tabelele au fost selectate, ferestra Show Table se nchide. Urmtorul pas este selectarea cmpurile din tabele. Se execut dublu clic pe numele de cmpurilor din tabele, acestea fiind selectate automat n par tea de jos a ecranului, find completate liniile Field i Table. Linia Sort permite ordonarea valorilor cmpurilor n ordine cresctoare (Ascending) sau descresctoare (Descending). Pe linia Show sunt selectate implicit toate cmpurile ca fiind vizibile. Dac se dorete ascunderea unui cmp din vizualizarea final, se debifeaz check-box-ul corespunztor. Liniile Criteria i Or permit impunerea unor condiii. Dac operatorul dintre condiii este AND, atunci toate condiiile se scriu pe linia Criteria. Dac ntre condiii operatorul este OR, atunci a doua condiie s e scrie pe linia Or. Pentru a vizualiza rezultatul interogrii se trece de pe bara de stare n Datasheet View.
117
Dintre operatorii folosii n construirea expresiilor de pe linia Criteria amintim: + (adunare), - (scdere), * (nmulire), / (mprire), MOD (restul mpririi a dou numere), ^ (ridicarea la putere, de exemplu x 2 se scrie x^2), & (concatenare a dou iruri de caractere), = (verific egalitatea a dou valori), <> (operatorul diferit, de exemplu ), < (strict mai mic), > (strict mai mare), <= (mai mic sau egal), >= (mai mare sau egal), LIKE (format general LIKE masca, de exemplu nume LIKE A* se vor afia toate numele care ncep cu A, indiferent din cte caractere, dar LIKE A?? va afia doar numele care ncepe cu A i are lungimea de trei caractere), IN (formatul general IN (list de valori), de exemplu condiia: sex IN (m,f) sau [tip client] IN (persoana fizica,persoana juridica)), BETWEEN (format general Between Val_minim AND Val_maxim, de exemplu, dac se dorete afiarea studenilor cu note ntre 9 i 10 se va utiliza condiia BETWEEN 9 AND 10), NOT (negaie), AND (conjuncie), OR (disjuncie), NOT NULL (va afia toate nregistrrile care nu au valori introduse n acel cmp), Date() (returneaz data curent), MONTH (afieaz luna dintr-o dat calendaristic, de exemplu MONTH(#27.12.2011#) va returna valoarea 12), YEAR (afieaz anul dintr-o dat calendaristic, de exemplu YEAR(#21.11.2011#) va returna valoarea 2011), IIF (cu formatul general IIF (condiie, val_dac_adevarat, val_daca_fals), de exemplu dac se dorete afiarea situaiei bursierilor: pentru studeni care au media peste 9,50 se va afia burs de merit, celor ntre 8 i 9,50 burs de studiu iar celorlai nimic, se va scrie urmtoarea condiie: IIF ([media]>9,5; bursa de merit; IIF([media] BETWEEN 8 AND 9,50;Bursa de studiu;)) ) i multe altele. Simbolul ; care desparte argumentele funciei depinde de setrile regionale. Setrile regionale utilizate n cadrul aceszui capitol sunt cele corespunztoare Romniei (Control Panel, Clock Language and Region, Change Location, pagina Location, Current Location: Romania). Data calendaristic este astfel formatat ca dd.mm.yyyy, iar punctul zecimal este simbolul virgul. n cazul n care este selectat o alt locaie, att separatorul care desparte argumentele funciei, simbolul zecimal, formatul Currency ct i formatele Date/Time sunt modificate n consecin. Dac se dorete adugarea unui c mp care va fi calculat dup o formul, se selecteaz prima coloan liber n Design View, iar pe linia Field se tasteaz numele care se dorete s apar n capul de table ca titlul al coloanei respective, urmat de simbolul : i formula de calcul. Numele de cmpuri se scriu ntre paranteze drepte. De exemplu: Valoare: [cant]*[pret]. Dac se dorete formatarea cmpului (de exemplu, Currency), n Design View se apeleaz meniul contextual pe cmpul proaspt construit, se selecteaz Properties, apoi la proprietatea Format se selecteaz Currency.
118
Interogri cu parametru n cazul interogrilor de selecie se pot utiliza parametrii. Dac se dorete citirea interactiv de la tastatur a unei valori a unui cmp, n vederea verificrii unui criteriu i a afirii datelor din tabel/tabele, pe linia Criteria se introduce ntre paranteze drepte un text, de exemplu [Introduceti data facturii]. Acest text va fi interpretat ca un parametru, construindu-se automat pentru acest parametru o caset de introducere a valorii. Va fi evaluat valoarea citit de la tastatur, se verific egalitatea cu valorile din cmpul pe care este plasat parametrul, i anumte [data facturii], i sunt afiate nregistrrile care verific condiia [data facturii]=valoarea introdus de la tastatur.
119
5.4.3.1 Interogri pentru crearea unei noi tabele (MAKE TABLE) Interogrile care creaz o nou tabel sunt utilizate de obicei pentru a obine un tabel unic cu date din mai multe tabele legate ntre ele. Pentru a crea o interogare de tip Make Table se parcurg urmtorii pai: 1. se creaz o interogare n Design View; 2. se selecteaz sursa datelor (din fereastra Show Table, dublu-clic pe numele tabelelor, acestea fiind legate ntre ele), apoi se nchide fereastra Show Table; 3. se selecteaz cmpurile dorite, se ordoneaz datele, se adug condiii; 4. se verific trecnd n Datasheet View rezultatul dorit, apoi se revine n Design View; 5. se transform interogarea de selecie ntr-una de aciune selectndu-se butonul Make Table de pe panglic. n fereastra Make Table se va tasta numele noului tabel care va fi creat figura 19; 6. se va salva interogarea: 7. se execut interogarea prin apsarea butonului Run de pe panglic. Observaie: Dac se dorete deschiderea interogrii pentru modificare, se apeleaz meniul contextual ataat interogrii din panoul de navigare, apoi se alege Design View. De fiecare dat cnd interogarea este apelat, tabela este rescris.
120
Se observ c icoana asociat interogrii de tip Make Table este diferit fa de cea asociat interogrilor de selecie.
5.4.3.2 Interogri pentru actualizarea datelor (UPDATE) Interogrile care permit actualizarea datelor sunt folosite pentru a efectua anumite calcule asupra unor cmpuri din tabele (de exemplu, se mrete preul pinii cu 2%). Pentru a crea o interogarea de tip Update se parcurg urmtorii pai: 1. se creaz o interogare n Design View; 2. se selecteaz sursa datelor (din fereastra Show Table, dublu-clic pe numele tabelelor, acestea fiind legate ntre ele), apoi se nchide fereastra Show Table; 3. se selecteaz cmpul a crui valoare trebuie modificat i cel ce limiteaz modificarea la anumite nregistrri (n acest caz, cmpul denumirea produsului pe care se va seta condiia pe linia Criteria (=paine, i cmpul pret, cruia i se va modifica valoarea n urma interogrii); 4. se transform interogarea de selecie ntr -una de aciune selectndu-se butonul Update de pe panglic. n fereastra QBE va apare o nou linie numit Update To. Pe acea linie, sub pret se va scrie formula de calcul: [pret]+[pret]*2/100; 5. se verific trecnd n Datasheet View rezultatul dorit, apoi se revine n Design View; 6. se salveaz interogarea; 7. se execut interogarea prin apsarea butonului Run de pe panglic.
121
Observaie: Dac se dorete deschiderea interogrii pentru modificare, se apeleaz meniul contextual ataat interogrii din panoul de navigare, apoi se alege Design View. De fiecare dat cnd interogarea este apelat, valoarea cmpului este modificat. Se observ c icoana asociat interogrii de tip Update este diferit fa de cea asociat interogrilor de selecie i de cea a interogrii de tip Make Table.
5.4.3.3 Interogri pentru adugarea datelor din alte tabele (APPEND) Interogrile de acest tip permit adugarea unor nregistrri din alte tabele care au n componen cmpuri de acelai tip. Pentru a crea o interogarea de tip Append se parcurg urmtorii pai: 1. se creaz o interogare n Design View; 2. se selecteaz sursa datelor tabelul surs, de unde se dorete transferul datelor n cellalt tabel (din fereastra Show Table, dublu-clic pe numele tabelelor, acestea fiind legate ntre ele), apoi se nchide fereastra Show Table; 3. se selecteaz cmpurile care se doresc a fi trimise ntr -o alt tabel. n acea tabel vor trebui s existe cmpuri de acelai tip cu cele selectate la acest pas; 4. se selecteaz o ordine de sortare a nregistrrilor i/sau se completeaz liniile Criteria i Or (dac este cazul); 5. se verific trecnd n Datasheet View rezultatul dorit, apoi se revine n Design View; 6. se transform interogarea de selecie ntr -una de aciune selectndu-se butonul Append To. Se selecteaz numele tabelei destinaie. Se observ adugarea unei noi linii n fereastra QBE, cu numele Append To. Dac numele cmpurilor din cele dou tabele difer, celula corespunztoare din tabela destinaie, de pe linia Append to, va rmne necompletat. Ea poate fi completat utilizndu-se caseta combinat, alegnd numele cmpului dorit din tabela destinaie; 7. se salveaz interogarea; 8. se execut interogarea prin apsarea butonului Run de pe panglic. Aceeai observaie este valabil ca i la interogarea de tip Update. Totodat, icoana asociat acestui tip de interogare este diferit de celelalte.
122
5.4.3.4 Interogri pentru tergerea nregistrrilor (DELETE) Acest tip de interogare se utilizeaz pentru a terge automat anumite nregistrri din una sau mai multe tabele. Pentru a crea o interogarea de tip Delete se parcurg urmtorii pai: 1. se creaz o interogare n Design View; 2. se selecteaz sursa datelor tabelul surs, de unde se dorete tergerea datelor (din fereastra Show Table, dublu-clic pe numele tabelelor, acestea fiind legate ntre ele), apoi se nchide fereastra Show Table; 3. se selecteaz cmpul/cmpurile care conin valorile care compun condiia de tergere; 4. se completeaz liniile Criteria i Or (dac este cazul n caz contrar vor fi terse toate nregistrrile din tabela sau tabelele respective); 5. se transform interogarea de selecie ntr -una de aciune selectndu-se butonul Delete. Pe linia Delete va apare clauza Where, care permite construirea condiiei de tergere ; 6. se verific trecnd n Datasheet View rezultatul dorit, apoi se revine n Design View; 7. se salveaz interogarea; 8. se execut interogarea prin apsarea butonului Run de pe panglic. Aceeai observaie este valabil ca i la interogarea de tip Append. Icoana asociat acestui tip de interogare este diferit de celelalt e. Observaie: n cazul tergerii nregistrrilor din mai multe tabele, aceasta poate fi mpiedicat datorit setrii regulilor de integritate referenial (dac n fereastra Relationship, fiind selectat legtura dintre tabele, este selectat caseta Enforce Referential Integrity iar Cascade Delete Related Records nu este bifat).
123
nelegate: destinate crerii unui meniu, afirii unor mesaje, informa ii despre sistem, etc.
Formularele pot fi create utiliznd butoanele de pe panglic. Vom prezenta n continuare crearea formularelor cu ajutorul butoanelor Form, Form Wizard i Design Form.
Dac tabelul este tabel de referin pentru un singur tabel, atunci Access va crea automat un formular cu subformular, afind n subformular doar acele nregistrri din tabela referit care verific condiia ca valoarea cheie strin este egal cu valoarea afiat n cmpul cheie primar din tabela de referin afiat n formular. Pentru tabela de referin layout -ul formularului este Columnar (este afiat o singur nregistrare la un moment dat), iar pentru sub-
124
formular layout-ul este Tabular (sunt afiate toate nregistrrile care verific condiia de legtur) figura 21. Totodat cmpul cheie strin (din tabelul referit) este ascuns (nu este necesar afiarea aceluiai cmp de mai multe ori n cadrul unui formular). Se observ c pentru fiecare formular apare cte o bar de navigare Record. Cea mai de jos este pentru datele din tabelul de referin (printe), cea din interior va fi pentru datele din tabelul referit (copil). Pentru a naviga prin nregistrri se utilizez bara corespunztoarelor formularului creat pentru tabelul de referin.
Modul de afiare afiat implicit va fi Form View. Dac se dorete, se poate trece la Design View pentru a modifica proprietile controalelor de pe formular cu ajutorul butonului View de pe panglic.
125
Pentru a crea un formular utiliznd Form Wizard trebuie parcuri urmtorii pai: se selecteaz sursa datelor numele tabelului sau a interogrii pe baza cruia se dorete crearea formularului i a cmpurilor care se dorete s apar pe formular figura 23, apoi se apas butonul Next;
se selecteaz layout-ul formei (modul n care sunt aranjate nregistrrile pe formulare; Columnar i Justified afieaz o singur nregistrare la un moment dat, Tabular i Datasheet afieaz toate nregistrrile la un moment dat) figura 24, apoi se apas butonul Next;
126
se alege stilul (combinaiile de culori i obiectele grafice de pe formular) figura 25, apoi se apas butonul Next;
se alege un titlu pentru formular i modul de vizualizare al acestuia, n cazul de fa deschiderea n modul de vizualizare Form View (Open the form to view or enter information) figura 26, apoi se apas butonul Finish.
127
Orice formular conine urmtoarele zone figura 28: Form Header antetul formularului, utilizat pentru afiarea unui titlu, sigla unei companii, data ntocmirii; Detail zona n care sunt amplasate controalele corespunztoare nregistrrilor din tabelul sau interogarea surs ; Form Footer: subsolul formularului, utilizat pentru comentarii, semnturi, numrul paginii, butoane de comand .
Pentru a activa zonele Form Header/Footer se apeleaz meniul contextual al formularului, selectndu-se opiunea cu acelai nume.
128
2. de pe panglic, opiunea de meniu Design, se select eaz butonul Property Sheet . n fereastra cu acelai nume, n cadrul casetei combinate Selection Type se alege obiectul Form. De pe pagina All, apelnd sgeata din dreptul casetei Record Source numele tabelei pe baza creia se va creea formularul: de exemplu furnizori figura 30;
3. se selecteaz butonul Add Existing Fields iar din fereastra Field List se execut dublu-clic pe numele cmpurilor care se dorete s apar pe formular figura 31. Acestea vor aprea pe formular n zona de Detail a formularului;
4. se salveaz formularul butonul Save de lng butonul Office; 5. pentru a vizualiza nregistrrile se trece n modul de vizualizare Form View (folosind butonul View de pe panglic) figura 32.
129
Dintre cele mai des utilizate controale amintim: Label (etichete) control cu un coninut fix, corespunztor constantelor, utilizat pentru afiarea unor comentarii, titluri, mesaje. Access genereaz automat cte o etichet pentru majoritatea controalelor definite de utilizator. De obicei ele sunt plasate n stnga controlului pe care l nsoete. Toate etichetele vor fi salvate cu nume care ncep cu prefixul de 3 litere lbl (label). Pentru fiecare control de tip etichet se vor modifica proprietile Name i Caption. Proprietatea Caption controleaz textul care va apare pe formular figura 33. Pentru a crea o etichet, se selecteaz butonul de pe panglic, opiunea de meniu Design. n fereastra Property Sheet se modific proprietatea Name: lblTitluFurnizor, Caption: Lista furnizorilor;
Text-box (casete de text) sunt controale cu coninut variabil, corespunztoare cmpurilor dintr-o tabel sau interogare, sau variabilelor. Coninutul acestora se modific n funcie de nregistrarea curent figura 34. Pentru toate casetele de text se modific proprietatea Name n fereastra Property Sheet. Prefixul pentru casetele de text este txt (text). Pentru casetele de text legate de un cmp, proprietatea Control Source apare automat completat n cazul formularului creat dup paii prezentai anterior. De exemplu, pentru caseta de text Nr_furn se va modifica proprietatea Name: txtNr_furn, proprietatea Control Source va fi automat completat cu valoarea Furnizori.Nr_furn (numele tabelei surs urmat de punct apoi numele cmpului de unde provin datele). Dac se dorete crearea unei casete de text, se selecteaz de pe panglic butonul . Vor fi create automat att o caset de text ct i o etichet care va explicita valorile afiate n caseta de text. Pentru etichet se vor modifica proprietile Name i
130
Caption, iar pentru caseta de text se vor modifica proprietile Name i Control Source (dac nu este deja completat);
Button (butoane de comand) servete la declanarea unor aciuni predefinite sau a unor aciuni definite prin intermediul unor proceduri Visual Basic Application. n capitolul urmtor este prezentat o modalitate de a crea butoane de comand fr ajutorul asistentului. Vom prezenta n continuare crearea unui buton cu ajutorul asistentului. Pentru a crea un buton fr a cunoate comenzi Visual Basic Application este necesar selectarea butonului Use Control Wizards de pe panglic . Se selecteaz butonul Button de pe panglic apoi se execut un clic n zona Form Footer figura 35. La primul pas se alege categoria de aciuni (navigare prin nregistrri, operaii cu nregistrri, operaii cu formulare, operaii cu rapoarte, nchiderea aplicaiei i diverse tiprirea tabelelor, execuia unei interogri, execuia unei macrocomenzi, etc).
Dup ce s-a ales categoria, se alege aciunea din partea dreapt. n cazul de fa, s-au ales operaiile cu formulare pentru c se dorete crearea unui buton care s nchid forma, de aceea a fost selectat aciunea Close Form. Se trece cu Next la pasul urmtor.
131
Se va alege opiunea Text specificndu-se textul care se dorete s apar pe buton: nchidere figura 36, apoi se apas butonul Next.
n cadrul ultimei ferestre se specific numele controlului. Butoanele de comand au prefixul cmd, deci numele controlului va fi cmdInchidere figura 37. Pentru a finaliza crearea butonului se apas selecteaz opiunea Finish.
Pentru a ncerca butonul trebuie selectat modul de vizualizare Form View figura 38.
n mod similar pot fi create multe alte butoane de comand pentru a automatiza baza de date.
132
Pe un formular pot fi plasate controale care s afieze valori calculate. Pentru a crea un control calculat, se parcurg urmtorii pai: 1. se selecteaz butonul Text box de pe panglic, apoi execut clic n zona Detail, sub controalele existente; 2. se modific proprietile Name i Caption ale etichetei; 3. se modific proprietatea Name a casetei de text; 4. n cadrul proprietii Control Source se tasteaz formula de calcul, ncepnd cu semnul =. Numele cmpurilor sunt scrise ntre paranteze drepte, de exemplu: =[valoare fara TVA]*1,24.
133
134
3. Se pot aduga unul sau mai multe niveluri de grupare selectnd numele cmpului din partea din stnga. Se folosesc butoanele cu sgei pentru a selecta cmpul/cmpurile ca nivel de grupare. Pot fi adugate pn la 10 niveluri de grupare figura 40.
Dac se doresc grupri mai speciale, se poate selecta butonul Grouping Options. n funcie de tipul cmpului selectat pot fi alese intervale de grupare, de exemplu n cazul unui cmp de tip Text grupare dup prima liter, dup primele 2 litere, etc figura 41. Pentru a trece la pasul urmtor se apas butonul Next;
135
4. se poate stabili o ordine de afiare a nregistrrilor n cadrul raportului, sortnd pn la 4 cmpuri simultan figura 42, apoi se apas butonul Next figura;
5. Se pot alege diverse modaliti de aranjare a datelor (Stepped, Block sau Outline) i se poate seta orientarea paginii ( Portrait pe vertical sau Landscape pe orizontal), apoi se apas butonul Next figura 43;
6. se poate alege un stil dintr-o list cu stiluri disponibile, fiind vizibil un Preview al acestuia n partea din stnga al ferestrei, apoi se apas Next figura 44;
136
7. la ultimul pas se alege titlul raportului i vizualizarea acestuia n modul Preview figura 45, apoi se apas butonul Finish.
Raportul va fi afiat n modul Print Preview figura 46. Pentru a reveni la modul de Design, se apas butonul Close Print Preview de pe panglic.
Raportul n modul Design View seamn cu un obiect de tip formular n Design View figura 48.
137
Pentru cmpurile numerice care conin valori multiple n cadrul aceluiai grup, la pasul 4 se va afia un buton n plus, denumit Summary Options figura 49.
Dac acesta este selectat, pune la dispoziia utilizatorilor funcii totalizatoare: SUM, MIN, MAX i AVG figura 50.
Se poate selecta una din opiunile Detail and Summary (vor fi afiate subtotaluri la nivelul fiecrui grup i la nivel de raport) sau Summary Only (doar subtotal la nivel de grup) figura 51.
138
Pe orice raport pot fi create casete de text care pot fi ca lculate dup modelul prezentat n paragraful 5.5.3. Pentru a aduga o funcie totalizatoare (de exemplu, calcularea valorii totale a tuturor facturilor, n zona Report Footer se va aduga o caset de text. Se vor modifica proprietile Name i Caption corespunztoare etichetei. Se va modifica proprietatea Name asociat casetei de text. n cadrul proprietii Control Source asociat casetei de text se va tasta formula =SUM([cantitate]*[pret]*1,24)). Din cadrul proprietii Format asociat casetei de text se va alege opiunea Currency, pentru afiarea simbolului valutar.
139
care s deschid o interogarea n mod Read-Only se vor parcurge urmtorii pai: n coloana Action se alege dintr-o list de aciuni predefinite, Open Query; n partea de jos a ecranului se selecteaz Query Name (numele interogrii); se selecteaz modul de vizualizare n care va fi deschis interogarea (n cazul de fa Datasheet); n caseta Data Mode se alege Read-Only. Macrocomanda va fi salvat cu numele Deschidere Interogare Furniz i poate fi executat apsnd butonul Run figura 52.
De regul macrocomenzile sunt ataate fie unei opiuni de meniu fie unui buton de comand plasat pe un formular.
140
5.9 Concluzii
Microsoft Access ofer utilizatorilor un mediu vizual cu o interfa grafic prietenoas, capabil de a dezvolta aplicaii complexe, fr a avea nevoie de cunotine de programare. Fa de versiunile anterioare, Access conine o serie de mbuntiri (sunt puse la dispoziia utilizatorului o serie de abloane, ofer suport pentru introducerea datei calendaristice, apariia unui nou tip de cmp Attachment, pentru stocarea mai multor obiecte create cu alte aplicaii, et c). Noua interfa Microsoft Access 2007 este una unitar n pachetul Microsoft Office, utilizatorul putnd regsi cu uurin comenzile uzuale.
141
142
5.12 Exemple
5.12.1 Problem rezolvat Tabel creat n Datasheet View
S se creeze o baz de date cu numele Exemplul 1 care s conin u n tabel cu numele Studeni. Acesta va avea structura ID, nume, prenume, an, serie, grupa, data naterii, adresa, cstorit, email, fotografie. Se vor introduce 3 studeni n tabel. Rezolvare Se va crea o baz de date cu numele Exemplul 1, salvat pe Desktop. Odat cu crearea bazei de date, Access creaz automat o tabel cu numele care va conine un cmp ID (identificator) de tip Autonumber, care va fi cheia primar a tabelei.
Pentru a salva tabela i a modifica numele acesteia, se apas butonul Save aflat pe bara panglic figura 53. Construirea a structurii tabelei va continua cu adugarea unui nou cmp (o nou coloan) executndu-se dublu-clic pe linia cu ID, celula n care apare Add New Field figura 53. Dup tastarea numelui cmpului, se apas Enter, trecerea fiind fcut la urmtoarea coloan. Dup ce s-a editat capul de tabel se trece la introducerea datelor n tabel. Cmpul ID fiind de tip Autonumber, acesta va fi completat automat odat cu selectarea primei litere din numele studentului. Se completeaz toate cmpurile pn la fotografie. Se observ faptul c nu exist posibilitatea completrii acestui cmp. Pentru aceasta trebuie modificat tipul. Pentru aceasta se alege de pe bara de meniuri opiunea de meniu Datasheet, caseta Data Type i se selecteaz OLE Object.
143
Se observ faptul c valoarea din coloana anul, fa de valorile din coloanele seria i grupa, este aliniat la stnga, fa de celelalte dou valori care sunt aliniate la dreapta. Microsoft Access 2007 pstreaz acelai mod de aliniere ca i Microsoft Excel 2007, irurile de caractere sunt aliniate la stnga, iar numerele aliniate la dreapta. Deci cmpul an nu este recunoscut ca fiind de tipul potrivit (Number). De aceea se selecteaz coloana an i se procedeaz n acelai mod ca n cazul fotografiei, selectnd tipul de date Number. Microsoft Access afieaz un mesaj de avertizare atunci cnd tipul de date este schimbat, unele valori putnd fi pierdute figura 55.
Se poate selecta fiecare cmp pentru a se verifica formatul dorit. n cazul n care valoarea care a fost introdus nu corespunde cu valorile care trebuie introduse n cadrul acestui cmp, valoarea existent este pierdut . n cazul cmpului data naterii acesta trebuie s fie de tip Date/time, adresa de tip memo (texte mai mari de 255 de caractere), casatorit un cmp de tip Yes/No. Formatul clasic de afiare fiind un check-box (caset de opiune) care poate fi bifat sau nu, corespunztor celor dou valori posibile.
144
Pentru a introduce o fotografie n cmpul omonim, se selecteaz celula corespunztoare, se selecteaz meniul contextual, apoi opiunea Insert Object.
Sunt disponibile dou opiuni Create New sau Create from File. n acest caz vom presupune faptul c fotografia exist deja, deci alegem a doua opiune. Tehnologia OLE (Object Linking and Embedding) legare i ncorporare de obiecte, permite nglobarea obiectului n tabel, deci n baza de date, sau, dac se selecteaz opiunea Link, crearea unei legturi ctre obiectul respectiv, fr ca acesta s fie ncorporat n tabel.
Cmpul fotografie va fi completat cu textul Package. La execuia unui dubluclic, fotografia va fi deschis pentru a fi vizualizat cu softul predefinit pentru vizualizarea fotografiilor. Se introduc nc 2 studeni. Dac este necesar, se poate utiliza bara orizontal de derulare (Scroll) aflat n partea de jos a ecranului figura 59.
145
Modul de vizualizare utilizat se observ de pe bara de stare Datasheet View. Pentru a trece de la un mod de vizualizare la altul se pot utiliza butoanele de pe bara de stare: Datasheet View, PivotTable View, PivotChart View sau Design View. Modul de vizualizare Datasheet View se utilizeaz n general pentru a vizualiza datele din tabel, iar modul Design View se utilizeaz pentru a modifica proprietile structurii tabelei. Opiunile PivotTable View i PivotChart View permit crearea unui tabel, respectiv a unui grafic pivot. n modul de vizualizare Datasheet View, bara de unelte Record permite navigarea prin nregistrri. Cu ajutorul acesteia se permit n ordine: selectarea primei nregistrri, trecerea la nregistrarea anterioar, afiarea numrului nregistrrii curente din numrul total de nregistrri, trecerea la urmtoarea nregistrare, selectarea ultimei nregistrri, crearea unei noi nregistrri, dezactivarea unui filtru (dac exist activat un cr iteriu de filtrare) precum i cutarea unei valori n tabel figura 60. De reinut faptul c la un moment dat suntem poziionai pe o singur nregistrare din tabel.
Pentru a terge o nregistrare se selecteaz antentul de linie i se apas tasta Delete de pe tastatur. n cazul exemplificat n figura 61 s-au selectat 2 nregistrri pentru tergere.
Pentru a terge un cmp se p oziioneaz cursorul pe antetul de coloan (unde este afiat numele cmpului) i se selecteaz din meniul contextual opiunea Delete Column. Sistemul afieaz un mesaj de avertizare figura 62.
146
Tabelul va fi automat deschis n modul de vizualizare Datasheet View. Pentru a trece la modul de vizualizare special pentru modificarea proprietilor tabelului se selecteaz butonul Design View de pe bara de stare figura 63.
Modul de vizualizare Design View permite setarea unor caracteristici (proprieti) nivel de fiecare cmp n parte figura 64.
Modul uzual de lucru pentru crearea unei tabele este n modul de vizualizare Design View, acesta permind setarea unor valori implicite, reguli de validare, moduri de afiare a datelor n cmp, etc.
147
Primul pas este crearea bazei de date. Aceasta va purta numele Firme. Pentru a crea baza de date, se deschide mediul de lucru Access, apoi se alege opiunea Blank Database. Pentru a alege locaia n care va fi salvat fiierul se alege icoana galben de folder, selectndu-se Desktop-ul ca destinaie, apoi se tasteaz denumirea: Firme. Dup crearea bazei de date se trece la analiza fiecrui tabel n parte i alegerea tipului de cmp cel mai potrivit datelor care vor fi salvate n acesta. Este foarte important ordinea n care tabelele voi fi create. Pentru aceasta se aleg tabelele de referin (tabelele printe, cum ar fi Furnizori, Maga zii, Produse) urmnd ca dup crearea acestora s se creeze tabelele referite (Facturi, ProduseFacturate, ProduseMagazii). n momentul n care se creaz baza de date, Access deschide automat un tabel cu numele Table1. Se va modifica tabelul Table1 n tabelul Furnizori. Pentru aceasta vom salva tabelul cu numele Furnizori, apelnd butonul Save de lng butonul Office. Pentru a aduga cmpuri i pentru a modifica proprietile acestora, se va trece
148
n modul de vizualizare Design View, fie folosind butonul View de pe panglic, fie butonul cu acelai nume de pe bara de stare. Se vor introduce urmtoarele cmpuri: primul cmp l vom modifica din ID n cod_f (codul furnizorului), vom alege tipul de date Number, Field Size: Integer, i Caption: cod furnizor, Validation Rule: >0, Validation Text: Introducei un numr pozitiv, Required: Yes; pentru cmpul den_f (denumirea furnizorului) tipul de dat Text, Field Size: 30, Format: >, Caption: denumire furnizor, Required: Yes, Allow Zero Length: No, Indexed: Yes (Duplicates OK); localit (localitate) de tip Text, Field Size: 30, Caption: localitate, Default Value: Timisoara; adresa de tip Memo; email de tip Hyperlink; banca de tip Text, Field Size: 30, Format: >, Required: Yes, Allow Zero Length: No; cont (contul din banc, IBAN) de tip Text, Fields Size: 24, Input Mask: "RO"99LLLL9999999999999999.
Dup ce toate cmpurile au fost create, se salveaz tabela alegnd butonul Save, apoi se apas sgeata de pe butonul View, de unde se alege Datasheet View figura 66, pentru a introduce datele a trei furnizori n tabel figura 67.
149
Dup ce tabela a fost creat i s-au introdus nregistrri n ea, aceasta va fi nchis. Pentru a crea o nou tabel, de pe bara de meniuri se alege opiunea Create, butonul Table Design. Pentru tabela Magazii se insereaz urmtoarele cmpuri: cod_m (cod magazie) Primary key, de tip Number, Field Size: Byte, Caption: Cod magazie, Required: Yes; den_m de tip Text, Field Size: 15, Caption: Denumire magazie, Indexed: Yes (Duplicates OK); gest de tip Text, Field Size: 30, Caption: Gestionar. Se vor introduce 3 magazii, cu codurile magazinelor 111, 112 i 113;
Pentru tabela Produse: cod_p (codul produsului) Primary key, de tip Number, Field Size: Long Integer, Caption: Codul produsului, Required: Yes; den_p (denumirea produsului) tipul cmpului Text, Field Size:15, Caption: Denumirea produsului; um (unitate de msur) de tipul Lookup Wizard, apoi opiunea I will type in the values that I want, n caseta Number of Columns nu se modific valoarea 1, iar n lista col1 vor fi tastate pe rnd, una sub alta, valorile dorite: kg, l, m, buc, selectnd butonul Next, apoi Finish. n tabela Produse se vor introduce 3 produse, cu codurile 11111, 111112 i 111113 figura 68.
150
Tabela ProduseMagazii: cod_p (cod produs) un cmp de tip Lookup Wizard pentru care se selecteaz opiunea I want the lookup column to lookup the values in a table or query, apoi se alege tabela Produse, apoi se selecteaz butonul Next; se alege cmpul cod_p, apoi se apas butonul Next figura 69. Ordonarea va fi fcut dup acelai cmp cod_p, apoi se alege butonul Next.
n ecranul urmtor pot fi observate valorile introduse anterior n tabela Produse, apoi se apas butonul Next figura 70.
La ultimul pas este posibil modificarea numelui cmpului (acesta va fi lsat neschimbat) apoi se apas butonul Finish; ntre cele dou tabele (Produse(tabela printe) i ProduseMagazii (tabela copil) va fi creat automat o relaie. De aceea Access cere salvarea tabelei cu un nume (ProduseMagazii). Datorit faptului c nu a fost creat nici o cheie primar, sistemul sugereaz crearea uneia. Se va alege No (cheia primar compus va fi creat dup crearea cmpului cod_m). cod_m (cod magazie) un cmp pentru care se alege Lookup Wizard se selecteaz opiunea I want the lookup column to lookup the values
151
in a table or query, apoi se alege tabela Magazii; selectm cmpul cod_m (cod magazie). Ca ordine de sortare se alege cod_m, se vizualizeaz codurile magaziilor introduse n tabela Magazii, apoi se las neschimbat numele cmpului i se apas Finish. Se cere din nou salvarea tabele; stoc (stocul disponibil n magazie) de tip Number, Field Size: Long Integer, Caption: Stoc produs, Required: Yes. Pentru a crea o cheie primar compus, se selecteaz utilizndu -se ptratul gri din faa numelui cmpului ambele cmpuri cod_p i cod_m i se apas butonul Primary Key de pe panglic. Se salvez tabela i se trece n modul de vizualizare Datasheet View pentru a introduce date n tabel. Pentru ca ambele relaii s fie de tipul one-to-many, se vor introduce minim 4 nregistrri, un produs fiind depozitat n dou magazii (de exemplu 111113).
Pentru tabela Facturi: nr_f (numrul facturii) Primary key, de tip Number, Field Size: Long integer, Caption: Numarul facturii, Required: Yes; data_f de tip Date/Time, Caption: Data Facturii, Required: Yes, Format: Short date, Default Value =Date(); cod_f (cod furnizor) tipul de date Lookup Wizard, se creaz o legtur cu tabela Furnizori, cmpu l cod_f, Caption: Cod furnizor. Tabela Facturi este copilul tabelei Furnizori. Avnd 3 furnizori n tabela printe, vom introduce minim 4 facturi, codul furnizorului 1 repetndu-se de 2 ori:
152
Tabela ProduseFacturate: nr_f (numrul facturii) un cmp pentru care se alege Lookup Wizard, se creaz a legtur cu tabela Facturi, cmpul nr_f; Caption: Numarul facturii. Se salveaz tabela cu numele ProduseFacturate, iar la ntrebarea dac se dorete alegerea unei chei primare se alege No; nr_crt (numr curent) un cmp de tip Number, Field Size: Integer, Caption: Numar curent; cod_p (codul produsului) un cmp pentru care se selecteaz Lookup Wizard, se creaz o legtur cu tabela Produse, pe baza cmpului cmpul cod_p; cantit un cmp de tip Number, Field Size: Integer, Caption: Cantitate; pret_u un cmp de tip Currency, Caption: Pret unitar; cotaTVA un cmp de tip Number, Field Size: Single, Default Value: 0,24, Caption: Cota TVA. Se selecteaz cmpurile nr_f i nr_crt i se creaz o cheie primar compus apsnd butonul Primary Key de pe panglic. Acest tabel fiind copilul tabelelor Produse i Facturi, vom introduce 8 nregistrri:
Pentru a verifica relaiile i a seta regulile de integritate referenial, se selecteaz butonul Relationships de pe panglic figura 74.
153
Pentru fiecare legtur n parte, se apeleaz meniul contextual, se alege opiunea Edit Relationships... Pentru a seta regulile de integritate referenial se selecteaz opiunea Enforce Referential Integrity, bifnd opiunea Cascade Update Related Field. Dac se dorete modificarea tipului de relaie dintre cele dou tabele, se selecteaz butonul Join Type..., alegnd una dintre cele trei tipuri de relaii (Left Join, Inner Join sau Right Join).
Selectnd pentru fiecare relaie n parte opiunile respective i reordonnd tabele, se obine urmtoarea situaie:
154
specialitatea sa (cardiolog, ORL, etc). S se introduc 3 nregistrri n tabela (tabelele) printe i numrul necesar de nregistrri n tabela (tabelele) copil. 1. S se afieze toi pacienii ordonai alfabetic dup nume. 2. S se creeze un formular de meniu care s conin 4 butoane de comand: primul va deschide forma Pacieni cu subformularul Programri, al doilea va deschide forma Programari (care va fi creat n Design, modificnd culoarea fundalului), al treilea buton va deschide forma Doctori (care va avea un titlu i o poza pe fundal), iar ultimul buton permite nchiderea formei. Rezolvare n urma analizei problemei, s-a ajuns la urmtoarea structur a datelor:
Fig. 77. Fereastra Relationships 1. Pentru a sorta datele dintr-o tabel se pot folosi fie butoanele Ascending sau Descending aflate pe panglic (Ribbon), dac este selectat opiunea de meniu Home, tabelul fiind deschis n Design View, fie sgeata din dreptul numelui cmpului n modul Datasheet View figura78.
155
2. Formularul de meniu va fi creat ultimul, acesta apelnd formularele create anterior. Pentru a crea primul formular cu subformular, vom selecta tabela printe (Pacieni) din panoul de navigare i apsm butonul Form de pe panglic (Ribbon), fiind selectat opiunea de meniu Create figura 79. Se observ c dac au fost create relaiile dintre tabele, apelarea butonului Form nu creaz un formular simplu, ci un formular pentru tabela printe cu un subformular corespunztor tabelei copil. Formularul se va salva cu numele PacientiProgramari. Dac se dorete vizualizarea formularului n Design View, se folosete fie butonul View de pe panglic, opiunea de meniu Home, opiunea Design View, fie butonul cu acelai nume de pe bara de stare. Se pot observa 3 zone: Form Header, Detail i Form Footer.
Pentru a crea un formular n Design View, se alege opiunea de meniu Create, apoi butonul Form Design de pe panglic (Ribbon). Se observ faptul c pe formular este vizibil doar zona de Detail. Pentru a afia i celelalte zone de meniu, se apeleaz meniul contextual (clic cu butonul din dreapta al mouse-ului pe formular), apoi se selecteaz opiunea Form Header/Footer. Formularul se salveaz (butonul Save din dreapta butonului Office) cu numele Programari figura 80.
156
Pentru a schimba proprietile formularului, se apeleaz meniul contextual, apoi se alege opiunea Properties. Pentru a selecta tabela surs a formularului, se selecteaz n cadrul casetei Selection type: Form, apoi opiunea Recourd Source de unde alegem selectnd sgeata, se alege numele tabelei Programari figura 81.
De pe panglic se selecteaz opiunea de meniu Design, apoi se selecteaz butonul Add Existing Fields, adugndu-se prin dublu-clic sau drag-and-drop toate cmpurile din tabela Programari n zona de Design a formularului figura 82.
157
Pentru a schimba culoarea fundalului se folosete butonul Fill/Back Color. Se utilizeaz pentru fiecare zon n parte figura 83. Pentru a vizualiza rezultatul, se folosete opiunea Form View fie de pe bara de stare, fie din cadrul butonului View de pe panglic (opiunea de meniu Home).
Pentru a crea formularul Doctori vom urma aceeai pai ca i la punctul b. Pentru a aduga un titlu vom selecta butonul Label de pe panglic (opiunea de meniu Design) i vom executa clic n zona Form Header. Titlul adugat va fi Lista doctorilor. Cnd s-a terminat introducerea textului, se execut clic oriunde pe form pentru a finaliza editarea. Vom executa clic cu butonul din dreapta al mouse-ului pe titlu, selectnd opiunea Properties. n fereastra Property Sheet vom modifica proprietatea Name: lblTitlu. De observat faptul c proprietatea Caption apare deja completat cu textul care apare pe form. Se pot alege opiuni de formatare cum ar fi dimensiunea literelor, culoarea literelor, ngroare, nclinare, centrare, etc. Aceste se gsesc n zona Font de pe panglic. Dac este nevoie se va redimensiona controlul.
158
Pentru a aduga aduga o poz de fundal vom selecta butonul Property Sheet de pe panglic. De la Selection type vom alege Form, apoi opiunea Picture. Selectnd butonul cu trei puncte se va alege o poz pentru fundal. Dac este nevoie, se va modifica culoarea textului etichetelor pentru a crea un contrast cu fundalul. Pentru form se va selecta proprietatea Picture Size Mode i se vor alege opiunea Stretch figura 84. Pentru a vizualiza formularul se va alege opiune Form View. Se nchide formularul.
Pentru a crea un formular de meniu, se va selecta butonul Form Design de pe panglic, fiind selectat opiunea Create de pe bara de meniuri. Nu se va mai selecta Form Hearde/Footer. Se verific dac pe panglic butonul Use Control Wizard este selectat, iar dac nu este selectat, l selectm. Se alege apoi butonul Button. La execuia unui clic pe form, fereastra Command Button Wizard va apare pe ecran figura 85.
159
Se alege categoria Form Operations, apoi aciunea Open Form, apoi se apas butonul Next. Se alege formularul PacientiProgramar i, apoi se apas Next. Se va alege opiunea Open the form and show all the records, apoi se apas butonul Next. Se selecteaz opiunea Text, modificnd textul n Forma PacientiProgramari, apoi se apas butonul Next. Numele butonul va fi cmdPacCons, apoi se apas Finish. Analog se construiesc butoanele corespunztoare celorlalte dou formulare. Pentru ultimul buton se va alege categoria Application, aciunea Quit Application. Se va selecta pentru opiunea Text: Ieire, numele butonului fiind cmdIeire. Formularul va fi salvat cu numele Meniu Figura 86. Se va testa formularul trecnd n Form View.
160
2. Pentru a construi un formular cu subfomular se vor construi cte un formular pentru fiecare tabel, urmnd a le uni ntr-unul singur. Pentru tabela
161
printe se va alege un formular de tip Columnar, iar pentru tabela copil, un formular de tip Tabular. Pentru a crea primul formular, se alege opiunea de meniu Create, butonul More forms... apoi Form Wizard. La primul pas se alege tabela Clienti, selectndu-se toate cmpurile cu ajutorul butonului cu dou sgei, apoi se apas Next figura 88. Aspectul (layout-ul) formularului va fi Columnar, apoi se selecteaz butonul Next. Se alege un stil, apoi se apas Next. La ultimul pas se apas doar butonul Finish. Se salveaz formularul cu numele Clienti.
n mod similar se creaz un formular pentru tabela FiseTrans, selectnd ca layout Tabular (la pasul 2). Se salveaz formularul cu numele FiseTrans. Pentru clasificarea obiectelor, n panoul de navigare din partea din stnga a ecranului (Navigation Pane) se alege de la All Tables sgeata, apoi Object Type. Obiectele vor fi ordonate dup tipul lor. Se deschide formularul Clienti in Design View. Se mrete zona de Detail i se trage formularul FiseTrans din panoul de navigare n zona de detaliu a formularului printe. Se trage n jos de butonul de redimensionare (portocaliu) a subformularul astfel nct s fie vizibil zona acestuia de Detaliu. Se salvez utiliznd butonul Office, Save as..., Save Object As cu numele ClientiFiseTrans figura 89.
162
3. Pentru a crea un formular n Design View, se alege de pe panglic opiunea Create, apoi Form Design. Din fereastra Properties (de pe panglic, opiunea de meniu Design, butonul Property Sheet), se alege la Selection Type Form, iar la opiunea RecordSource (sursa nregistrrilor) se selecteaz din list FiseTrans. Se apeleaz butonul Add Existing Fields (de pe panglic, opiunea de meniu Design) i prin dublu-click pe c mp sau drag-and-drop se selecteaz pe formular toate cmpurile. Pentru a aduga un nou cmp pe formular, se folosete butonul Text Box de pe panglic (drag-and-drop). Controlul va fi plasat pe formula r n zona Detail, sub celelalte controale. Acesta este format dintr-o etichet (n englez Label) (partea din stnga, Text8 n acest caz), i cutia de text (Text Box n englez) (partea din dreapta, care apare completat cu cuvntul Unbound nelegat). Efectund clic cu butonul din dreapta pe etichet, alegem opiunea Properties. n fereastra Property Sheet se vor modifica dou proprieti pentru etichet: Name: lblTVA i Caption: TVA (pe pagina All sunt primele dou opiuni). Pentru cutia de text vom modif ica proprietile Name: txtTVA i ControlSource: semnul egal urmat de formula de calcul a TVA-ului, punnd numele cmpului ntre paranteze drepte. n mod similar se calculeaz i valoarea tarifului cu TVA. Se va aduga un nou Text box de pe panglic n zona Detail a formularului, sub celelalte controale. Pentru etichet se modific proprietile Name:lblTarifTVA i Caption: Tarif cu TVA. Pentru text-box se modific proprietile Name:txtTarifTVA i Control Source: semnul egal urmat de formula de calcul, numele cmpului sau a cmpurilor fiind scrise ntre paranteze drepte figura 90.
163
Pentru a formata cele dou cutii de text create astfel nct s conin simbolul valutar, n fereastra Property Sheet, se va selecta proprietatea Format de unde se alege Currency. Formularul va fi salvat cu numele FiseTransport. Pentru a aduga un buton de comand care va nchide formularul, se verific dac este apsat butonul Use Control Wizard din opiunea de meniu Design (de pe panglic). Dac este selectat, se alege butonul Button, apoi se execut un clic pe formular, sub restul controalelor. Se alege categoria Forms, aciunea Close Form, apoi se apas butonul Next. Se selecteaz opiunea Text unde se tasteaz nchidere, apoi se apas butonul Next. Pentru a finaliza, se tasteaz numele controlului, cmdInchidere, apoi se apas butonul Finish. 4. Pentru a crea un Switchboard, de pe bara de meniuri se alege opiunea Database Tools, apoi Switchboard Manager. La apariia mesajului The Switchboard Manager was unable to find a valid switchboard in this database. Would you like to create one? se alege opiunea Yes. n fereastra Switchboard se selecteaz butonul Edit pentru a modifica formularul principal (Main Switchboard(Default)). n fereastra Edit Switchboard Page se modific opiunea Switchboard Name din Main Switchboard n Meniu. Se apas butonul Close i se creaz al doilea formular care va avea numele Vizualizare formulare. Pentru aceasta se apas butonul New i se modific numele formularului din New Switchboard page n Vizualizare formulare figura 91.
164
Se vor aduga n continuare elemente pe fiecare formular n parte. Primul formular, Meniu va avea dou elemente: unul care permite vizualizarea formularului Vizualizare formulare i al doilea care permite prsirea aplicaiei. Pentru aceasta, se selecteaz Meniu, apoi se apas butonul Edit. n caseta Item on this Switchboard vor fi afiate cele dou elemente create. Pentru a aduga un element nou, se apas butonul New figura 92.
n cadrul casetei Text se va completa textul care dorim s apar n dreptul butonului: Vizualizare formular. n caseta Command se las neschimbat Go to Switchboard, iar din ultima caset Switchboard se alege numele formularului care va fi apelat atunci cnd butonul acesta va fi acionat: Vizualizare formulare. Se apas butonul OK. Pentru a aduga al doilea element, se apas butonul New. n cadrul casetei Text se va completa Ieire, iar n caseta Command se va alege Exit Application, apoi se apas butonul OK figura 93.
165
Pentru a iei din modul de editare al formularului Meniu se utilzeaz butonul Close. Se alege formularul Vizualizare formulare, apoi se apas butonul Edit, pentru a aduga butoane. Pentru aceasta se utilizeaz butonul New Figura 94. n caseta Text se tasteaz Formularul urmat de numele formularului ales, n cutia de text Command se alege Open form in Edit Mode iar din caseta Form se alege primul formular. Se apas butonul OK.
n mod similar se creaz butoane pentru fiecare formular. Ultimul buton va face trecerea napoi la formularul Meniu. Pentru aceasta se apas din nou butonul New figura 95.
166
Pentru a ncheia modul de editare al formularului Vizualizare formulare se apas butonul Close. Dac formularul Meniu nu este formularul principal (dac n dreptul lui nu apare cuvntul Default n parantez), acesta se selecteaz, apoi se apas butonul Make Default. Odat cu apsarea butonului Close observm crearea unui nou formular cu numele Switchboard i a unei tabele cu numele Switchboard Items n panoul de navigare din stnga Figura 96.
Pentru a seta formularul ca fiind primul obiect care apare la deschiderea bazei de date, se selecteaz butonul Office, se alege butonul Access Options, apoi Current Database. Se poate alege un titlu pentru aplicaie, n caseta Application Title: Transporturi, iar din lista Display Form se alege Switchboard figura 97.
167
168
8. S se afieze toate produsele care au preurile 50 i 1000 lei. 9. S se determine pentru fiecare factur valoarea total. 10. S se creeze un nou tabel pe baza tabelelor Facturi, Produse i LiniiFact, rezultatul unei interogri, care s conin toate datele din toate tabele, suprimnd apariia dublat a cmpurilor de legtur, tabelul fiind ordonat alfabetic dup denumirea produselor. Rezolvare: 1. Pentru a crea o interogare, de pe bara de meniuri se alege opiunea Create, apoi Query Design. n fereastra Show table se vor selecta prin dublu-clic tabelele Facturi, ProduseFacturate i Produse, apoi se nchide fereastra. Pentru a alege cmpurile dorite, acestea se selecteaz prin dublu-click. Sub coloana data_f, pe linia Criteria, se va introduce =Date(). Se salveaz interogarea apsnd pe butonul Save (numele interogrii fiind Facturi curente). Pentru a vizualiza rezultatul interogrii, de pe butonul View se alege Datasheet View.
Observaie: Dac interogarea nu returneaz nici un rezultatul, nseamn c nici o nregistrare nu a verificat condiia ca data facturii s fie data curent.
Se nchide interogarea.
169
2. Pentru a crea a doua interogare, se alege de pe panglic opiunea de meniu Create, apoi Query Design. Din tabela ProduseFacturate se selecteaz cantitatea, preul i cotaTVA, iar din tabela Produse denumirea produsului i unitatea de msur. Deci n fereastra Show Tables, se vor alege ambele tabele, selectndu-se cmpurile respective. Pe prima coloan liber se calculeaz TVA-ul dup urmtoarea formul TVA: [cantit]*[pret_u]*[cotaTVA] Pe urmtoarea coloan se calculeaz valoarea: Valoare: [cant]*[pret_u]+[TVA] Se salveaz i vizualizez rezultatul interogrii. Pentru a afia simbolul valutar ntr-o anumit coloan din interogare ( de exemplu pt. TVA), n modul de vizualizare Design View se selecteaz coloana, se apeleaz din meniul contextual opiunea Properties, iar la opiunea Format se alege Currency. Analog se procedeaz i cu coloana Valoare.
3. Se selecteaz tabelele Facturi, Produse i ProduseFacturate, cmpurile: nr_f, data_f, den_p, pret_u i cantit. Pentru a crea o interogare cu parametru, care s permit citirea interactiv a numrului facturii de pe tastatur, pe coloana nr_f, linia Criteria se tasteaz [Introduceti numarul facturii]. Se nchide interogarea i se lanseaz n execuie prin dublu -clic pe numele interogrii din panoul de navigare.
170
4. Se selecteaz tabela Facturi, ProduseFacturate i Produse, cmpurile: nr_f, data_f, den_p, pret_u i cantit:
5. Se deschide interogarea de la punctul 2, n Design View, se salveaz cu numele Observaii (Save as de pe butonul Office, Save object as...). Se apeleaz meniul contextual asociat unui nou cmp (prima coloan liber), se alege opiunea Build figura 103.
171
Dac se trece n modul de vizualizare Datasheet View se poate observa rezultatul aplicrii funciei IIf figura 105.
6. Vom folosi 2 funcii care pot fi aplicate unor date calendaristice: Datepart (o parte dintr-o dat calendaristic) i funcia Month (extrage luna dintr-o dat calendaristic).
7. a). Se alege tabela Produse, cmpurile: den_p, pret_u. Pe coloana den_p, linia Criteria se tasteaz condiia: LIKE "l*". b) Se deschide interogarea de la punctul a), se salveaz cu alt nume, se trece n modul de vizualizare Design View i se modific condiia: LIKE "l?????". 8. Se alege tabela ProduseFacturate, coloana pret_u, utilizndu-se operatorul IN figura 107.
172
9. Se creaz o nou interogare. Se adaug tabelele Produse i ProduseFacturate. Se calculeaz valoarea. Se adaug cmpul nr_f i se selecteaz butonul Totals de pe bara de unelte, iar sub valoare, pe linia Total, se alege funcia SUM figura 108.
10. Pentru a crea o nou tabel cu toate nregistrrile din tabelele Facturi, Produse i ProduseFacturate, se adaug toate cmpurile din aceste tabele, fr a le duplica. Se salveaz interogarea cu numele Creare tabela. De pe panglic se alege butonul Make Table figura 109, se tasteat numele noii tabele: Reuniune, apo se apas butonul OK. Pentru a se executa interogarea se va selecta Run. Dac nivelul de securitate nu este setat astfel nct s permit execuia codurilor Visual Basic, interogarea nu va funciona. Pentru a permite utilizarea codurilor, de pe
173
bara Security Warning se alege butonul Options, apoi opiunea Enable this content.
Dac interogarea este nchis, se va lansa n execuie prin dublu -clic pe numele acesteia din panoul de navigare figura 109. Sistemul Access avertizeaz asupra eventualelor riscuri care pot apare la execuia unei interogri de aciune. Vom alege butonul Yes.
i mesajul urmtor este doar unul de avertizare, i anume c datele salvate n tabele vor fi adugate n tabelul nou creat. Deci vom apsa butonul Yes.
174
Fig. 111 Mesaj de avertizare la transferarea nregistrrilor ntr -un nou tabel
La pasul 2 se selecteaz criteriul de grupare, n cazul de fa vom grupa produsele facturate dup nr_f. Dac se apas butonul Grouping Options se pot alege mai multe variante de grupare: dup primele 10, 50, 100, etc numere de factur. n cazul de fa opiunea Normal rmne selectat figura 113.
175
Dac este selectat butonul Summary Options... se pot selecta funcii ce vor fi aplicate pe cmpurile numerice din tabel sau interogare figura 115.
176
n continuare se selecteaz orientarea paginii (vertical, orizontal), precum i modul de afiare al informaiilor pe pagin:
177
Ultimul pas permite modificarea titlului raportului (nu este vorba de numele cu care va fi salvat raportul, ci doar textul care va apare n antentul raportului), apoi putem alege ntre a vizualiza raportul i a modifica raportul. Pentru a ncheia crearea raportului se alege opiunea Finish. figura 118
Fig. 118 - Alegerea unui titlu i vizualizarea raportului n mod Print Preview
178
Dac datele provin din mai multe tabele, sau sunt necesare unele cmpuri calculate, se poate crea o interogare n care se selecteaz tabelele, se calculeaz cmpurile dorite, apoi se creeaz raportul pe baza interogrii. Dac se dorete adugarea unui cmp care va fi calculat, se alege de pe panglic controlul Text Box. Se modific pentru etichet proprietile Name: lblValoare i Caption: Valoare. Aceasta va fi mutat n zona nr_f Header. Pentru controlul de tip Text Box se vor modifica proprietile Name: txtValoare i Control Source: =[cantit]*[pret_u]* [cotaTVA]. 2. Pentru a crea raportul, se va alege ca surs a datelor interogarea cu numele Valoare. Avnd cmpuri numerice, la pasul 3 se selecteaz butonul Summary Option, bifnd check-box-urile de sub funcia SUM pentru cmpurile TVA i Valoare.
179
Pentru a vizualiza raportul, de pe butonul View se alege opiunea Print Preview figura 122.
Pentru a modifica raportul (aduga controale calculate) este necesar vizualizarea acestuia n modul Design View.
180
181
182
183
SQL are urmtoarele componente: 1. DDL Data Definition Language (limbaj de definire a datelor): include comenzi legate de crearea, modificarea i tergerea schemei de structur a bazei de date i/sau a tabelelor. Dintre comenzile cele mai des ntlnite amintim: CREATE TABLE, ALTER TABLE, DROP TABLE; 2. DML Data Manipulation Language (limbaj de manipulare a datelor): include comenzi pentru a realiza interogri i pentru a modifica datele stocate n tabele. Dintre cele mai des utilizate comenzi amintim: SELECT, INSERT INTO, UPDATE, DELETE; 3. DCL Data Control Language (limbaj de control a datelor): include comenzi pentru meninerea securitii i a confidenialitii bazei de date. Dintre comenzile uzuale amintim: GRANT (acordarea drepturilor unui utilizator) i REVOKE (revocarea drepturilor unui utilizator). Vocabularul SQL cuprinde o serie de cuvinte cheie, dintre care amintim35: instruciuni determin execuia unei anumite aciuni (de exemplu Create Table, Select, Delete); clauze permit specificarea unor argumente care nuaneaz instruciunile, delimitnd entitile participante la interogare (exemple de clauze: From, Where, Group By, Order By); funcii efectueaz prelucrri asupra anumitor date denumite argumentele sau parametrii funciei, rezultatele returnate fiind utilizate n cadrul unei clauze SQL. Funciile i operatorii prezentai n paragraful 5.4.1 sunt valabili i n SQL. Principalele reguli de sintax sunt: orice instruciune SQL se termin cu simbolul punct i virgul; SQL utilizeaz ierarhia obiectelor din modelele orientate pe obiecte, caracterul punct separnd un obiect de un atribut sau o metod a acestuia. De exemplu, numele_tabelei.numele_cmpului; parantezele drepte se utilizez atunci cnd un nume de tabel sau cmp conine caracterul spaiu, de exemplu [Denumire Furnizor];
34
Giulvezan C., Mircea G., Trnveanu D., Margea C. Baze de date, Editura Universitii de Vest, Timioara, 2009, p.59 35 Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p. 67
184
caracterul virgul este utilizat pentru a delimita valorile unei liste (de exemplu lista cmpurilor); valorile de tip Number sunt scrise direct, fr a fi ncadrate de nici un alt caracter; valorile de tip Text sunt ncadrate ntre caracterul apostrof (de exemplu: Timioara); valorile de tip dat calendaristic sunt ncadrate ntre caracterul diez (de exemplu: #31/12/2011#).
Reguli de editare n cazul instruciunilor SQL36: fiecare clauz a interogrii se plaseaz pe cte o linie separat, indentat fa de instruciunea din care face parte; nceputul fiecrei clauze va fi aliniat cu nceputul celorlalte; dac o clauz este fragmentat, fiecare din prile ei constitutive se poziioneaz pe cte o linie separat i se indenteaz fa de nceputul clauzei; pentru evidenierea cuvintelor rezervate, specifice SQL, se folosesc majuscule. Atunci cnd se scriu instruciunile n format general, exist mai multe convenii de notare: cuvintele rezervate sunt scrise cu majuscule; cuvintele definite de utilizator se scriu cu litere mici; bara vertical semnific separarea mai multor elemente alternative care se exclud reciproc (doar unul din acestea poate fi s apar); parantezele drepte [ ] ncadreaz un element opional; acoladele {} ncadreaz un element obligatoriu; punctele de suspensie semnaleaz repetarea opional a unui element al unei liste.
36
Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p. 71
185
Pentru tipul de date Text, dac nu se specific lungimea acestuia, valoarea implicit este de 255 de caractere. Dac un nume de cmp conine caracterul space, acesta trebuie pus ntre paranteze drepte. De exemplu, [Nume Prenume].
186
Exemplu: S se creeze o tabel cu turitii unei agenii de turism. Pentru acetia vom cunoate CNP-ul, numele i prenumele, seria i numrul de pe cartea d e identitate, data naterii, telefonul i numrul de paaport. CREATE TABLE Turisti (CNP_turist TEXT(13) CONSTRAINT pk_CNP_turist PRIMARY KEY, numepren_turist TEXT(30), serienrCI TEXT (8), datanast_turist DATE, telefon TEXT (12), nrpass_turist NUMBER); Pentru a crea o tabel cu o cheie primar compus, se utilizeaz urmtorul format general: CREATE TABLE numet2 (numec1 tip1 [CONSTRAINT nn_c1] [NOT NULL], numec2 tip2 [CONSTRAINT nn_c2][NOT NULL], , [CONSTRAINT pk_nc1c2] PRIMARY KEY (numec1,numec2)); Pentru crearea unei chei primare compuse, constrngerea va fi specificat la sfrit, numele acesteia va fi format din prefix i numele celor dou cmpuri. Dup PRIMARY KEY se specific ntre paranteze cmpurile care compun cheia primar. Exemplu: S se creeze o tabel cu o cheie primar compus. Tabela va avea numele ProduseFacturate i va conine urmtoarele cmpuri: numrul facturii, numrul curent al produsului de pe factur, cantitate, pre unitar, unitatea de msur i cotaTVA. Cheia primar va fi compus din cmpurile nr_f i nr_crt. CREATE TABLE ProduseFacturate (nr_f INTEGER NOT NULL, nr_crt INTEGER NOT NULL, cantitate NUMBER, pret_u NUMBER, um TEXT (10), cotaTVA NUMBER, CONSTRAINT pk_nrfcrt PRIMARY KEY (nr_f, nr_crt));
187
Pentru a crea o tabel referit, se utilizeaz urmtorul format general: CREATE TABLE numet3 (numec1 tip1 [CONSTRAINT nn_c1 NOT NULL] [CONSTRAINT pk_c1 ]PRIMARY KEY, numec2 tip2 [CONSTRAINT nn_c2 NOT NULL] [CONSTRAINT fk_nc2] REFERENCES numet1(numec1), ); Pentru a crea o tabel referit este necesar crearea legturii cu tabela de referin. Cnd se definete cmpul de legtur, acesta trebuie s fie de acelai tip ca i cmpul corespunztor din tabela de referin, apoi se creeaz o constrngere de tip FOREIGN KEY, iar dup cuvntul predefinit REFERENCES se alege numele tabelei de referin i n parantez numele cmpului de legtur din tabela de referin. Numele celor dou cmpur i nu trebuie s fie identice. Exemplu: S se creeze o tabel cu contractele ncheiate de ctre turitii ageniei de turism. Se presupune c un turist ncheie mai multe contracte, cunoscndu -se numrul contractului, data contractului, tipul serviciului, data plecrii, data sosirii, ara i beneficiarii (numele celorlalte persoane din familie, dac este cazul). CREATE TABLE Contracte (nrc INTEGER CONSTRAINT pk_nrc PRIMARY KEY, datac DATE CONSTRAINT nn_datac NOT NULL, tip_serv TEXT(30), data_plec DATE, data_sos DATE, tara TEXT (20), benef TEXT (120), CNP_turist TEXT(13) CONSTRAINT fk_CNP_turist REFERENCES Turisti (CNP_turist));
188
Dac se dorete adugarea unui nou cmp: ALTER TABLE numet1 ADD COLUMN (numec1 tip1, numec2 tip2, ...); Exemplu: S se adauge n tabela Contracte cmpul suma_platita. ALTER TABLE Contracte ADD COLUMN (suma_platita NUMBER); Dac se dorete tergerea unui cmp: ALTER TABLE numet1 DROP COLUMN numec1; Exemplu: S se tearg cmpul ara din tabela Contracte. ALTER TABLE Contracte DROP COLUMN tara; Dac se dorete modificarea proprietilor unui cmp: ALTER TABLE numet1 ALTER COLUMN numec1 tip_nou; Exemplu: S se modifice dimensiunea cmpului benef din tabela Contracte. ALTER TABLE Contracte ALTER COLUMN benef TEXT(100); Dac se dorete adugarea unei constrngeri: ALTER TABLE numet1 ALTER COLUMN numec1 [CONSTRAINT numeconst] {PRIMARY KEYUNIQUENOT NULL}; Exemplu: S se adauge o constrngere de tip NOT NULL pentru cmpul data_plec din tabela Contracte. ALTER TABLE Contracte ALTER COLUMN data_plec CONSTRAINT nn_data_plec NOT NULL;
189
Dac se dorete tergerea unei constrngeri: ALTER TABLE numet1 DROP CONSTRAINT numeconst; Exemplu: S se tearg constrngerea de tip NOT NULL impus pe cmpul datac. ALTER TABLE Contracte DROP CONSTRAINT nn_datac;
190
Specificarea listei cmpurilor este opional . Dac lista cmpurilor este omis, toate cmpurile din tabel vor fi completate, n ordinea n care ele au fost create, cu valorile specificate n lista de valori. Dac lista cmpurilor apare dar nu este complet, unele cmpuri lipsind, acele cmpuri care nu apar n list vor fi completate cu valoarea NULL, sau cu valoarea setat ca valoare implicit (DEFAULT). Din pcate, n standardul minimal, setarea unei valori predefinite nu este permis. Numrul cmpurilor din lista de cmpuri trebuie s fie identic cu numrul valorilor din lista valorilor, iar valorile trebuie s corespund ca tip tipului de date a cmpurilor din lista de cmpuri. Exemplu: S se introduc o nregistrare n tabela Turiti i dou nregistrri n tabela Contracte (presupunem c tabela are structura de la creare). INSERT INTO Turisti VALUES (1711227136548, POP Ion, TM569856, #27.12.1971#, 0730126589, 9856978); INSERT INTO Contracte VALUES (1452, #04.11.2011#, Charter, #30.12.2011#, #06.01.2012#, Cuba, POP Maria, POP Carla, 1711227136548); INSERT INTO Contracte (nrc, datac, tip_serv, data_plec, data_sos, tara, CNP_turist) VALUES (1453, #25.11.2011#, Bilete avion, #08.04.2012#, #18.04.2012#, Italia, 1711227136548);
191
n scrierea interogrilor de selecie este posibil utilizarea funciilor totalizatoare. Dintre acestea amintim: COUNT returneaz numrul total de nregistrri; SUM afieaz suma valorilor unui cmp (se poate folosi doar pentru cmpuri numerice);
192
AVG calculeaz media aritmetic a valorilor unui cmp numeric; MAX afieaz valoarea maxim din cadrul valorilor unui cmp, dar nu poate fi folosit n cadrul clauzei WHERE; MIN afieaz valoarea minim din cadrul valorilor unui cmp, dar nu poate fi folosit n cadrul clauzei WHERE.
6.2.6.1 Comenzi SELECT simple Comenzile SELECT simple au ca surs nregistrrile dintr -un singur tabel. Considerm urmtorul tabel: Studeni cu structura CNP, nume_prenume, serie _numrCI (seria i numrul crii de identitate), localitate, adresa, data_nasterii, an_studiu i medie_an_anterior. Exemplul 1: S se afieze toi studentii. SELECT * FROM studenti; Exemplul 2: S se afieze CNP-ul i numele tuturor studenilor. SELECT CNP, nume_prenume FROM studenti; Exemplul 3: S se afieze CNP-ul i numele tuturor studenilor din Timioara. SELECT CNP, nume_prenume FROM studenti WHERE localitate=Timisoara; Exemplul 4: S se afieze numrul studenilor din Timioara. SELECT COUNT(*) FROM studenti WHERE localitate=Timisoara; Exemplul 5: S se afieze numele i s se calculeze vrsta studenilor din anul 2 de studiu. SELECT nume_prenume, YEAR(Date())-YEAR(data_nasterii) FROM studenti WHERE an_studiu=2;
193
Exemplul 6: S se afieze numele studenilor care ncep cu litera A i sunt nscui n luna octombrie 1980. SELECT nume_prenume FROM studenti WHERE nume_prenume LIKE A* AND datan BETWEEN #01/10/1980# AND #31/10/1980#;
6.2.6.2 Comenzi SELECT complexe Comenzile SELECT complexe au ca surs nregistrrile di n mai multe tabele conectate ntre ele pe baza unei relaii de legtur. Se pot distinge mai multe tipuri de jonciuni: jonciunea natural (echijonciunea, jonciunea echivalent), care prespune folosirea clauzei Where urmat de o condiie de legtur de egalitate ntre cmpurile corespondente (=). Aceast condiie vizeaz egalitatea valorilor din cmpurile corespondente; jonciuni ne-echivalente determinai de folosirea clauzei Where i a unei condiii de legtur exprimat prin comparaii (<, >, <=, >=, <>, BETWEEN, IN, LIKE); cross (jonciunea ncruciat) mai puin utilizat, cu rol n analiza multidimensional a datelor. Se va prezenta n continuare jonciunea natural. Formatul general: SELECT [domeniu_selectie] lista_campuri FROM numet1, numet2, ... WHERE conditie_jonctiune [AND criterii_de_selectie]; unde domeniul de selecie poate fi: ALL (vor fi returnate toate nregistrrile), DISTINCT, DISTINCTROW (vor fi afiate doar nregistrrile distincte), TOP n [PERCENT] (vor fi returnate doar primele n nregistrri sau un procent din numrul total de nregistrri, nregistrrile fiind ordonate cu ajutorul clauze i Order By). n acest caz, nregistrrile unui tabel se combin rnd pe rnd cu toate nregistrrile din cellalt table (se efectueaz produsul cartezian), relaia dintre cele dou tabele fiind stabilit ulterior, prin condiia de jonciune specificat n clauza Where.
194
n mod uzual, compunerile de tabele au la baz condiii de tipul cheie primarcheie strin. Considernd tabela Studenti creat anterior, se consider tabela Centrepractic, cu structura: IDcentru, Den_centru, Adresa, Localitate, NumeTutore. n tabela studeni se va aduga cmpul IDcentru (unui centru de practic sunt arondai mai muli studeni).
Exemplul 1: S se afieze numele tutorelui i a studenilor arondai acestuia. SELECT NumeTurore, nume_prenume FROM studenti, Centrepractica WHERE studenti.IDcentru=Centrepractica.IDcentru; Exemplul 2: S se afieze numrul i numele centrelor de practic din Timioara i CNP-ul studenilor. SELECT Centrepractica.IDcentru, Den_centru, CNP FROM studenti, Centrepractica WHERE studenti.IDcentru=Centrepractica.IDcentru AND Centrepractica.localitate=Timisoara; O alt abordare a jociunilor mparte compunerile tabelelor n: interne (INNER JOIN) liniile celor dou tabele se combin pe baza valorilor identice ale cmpurilor corespondente; externe (OUTER JOIN) destul de rar utilizate, sunt de dou tipuri: de stnga LEFT [OUTER] JOIN i de dreapta RIGHT [OUTER] JOIN. Acestea produc linii n setul de rezultate chiar dac condiia de legtur nu este verificat. Setul de nregistrri rezultat conine liniile celor dou tabele, combinate pe baza valorilor identice ale cmpurilor de legtur, la care se adaug nregistrrile fr corespondent n tabelul care constituie fie membrulstng al compunerii, fie membrul drept. Specificatorul Outer este opional. n cazul compunerilor externe este important poziia tabelelor37.
37
Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.93
195
Formatul general al interogrilor ce include compuneri de tabele: SELECT [domeniu_selectie] lista_campuri FROM numet1 {INNERLEFT[OUTER]RIGHT[OUTER]} JOIN numet2 ON conditie_jonctiune [WHERE criterii_de_selectie]; Se vor considera n continuare tabelele Studenti i CentrePractica. Exemplul 1: S se afieze numele tutorelui i a studenilor arondai acestuia. SELECT NumeTurore, nume_prenume FROM studenti INNER JOIN Centrepractica ON studenti.IDcentru=Centrepractica.IDcentru; Exemplul 2: S se afieze numrul i numele centrelor de practic din Timioara i CNP-ul studenilor. SELECT Centrepractica.IDcentru, Den_centru, CNP FROM studenti INNER JOIN Centrepractica ON studenti.IDcentru=Centrepractica.IDcentru WHERE Centrepractica.localitate=Timisoara;
6.2.6.3 Agregri de date Funciile de grup permit constuirea unor interogri de sintetizare a datelor (Totals). Utilizatorul poate efectua calcule pentru grupuri de nregistrri care au cmpuri cu aceeai valoare (de exemplu calcularea mediei studenilor pe fiecare grup n parte). Formatul general al instruciunii38: SELECT [domeniu_selectie] [functie_agregata (numec1) AS alias1] [,lista_selectie] FROM numet1, numet2, ... GROUP BY camp_de_grupare [HAVING criteriu_de_grupare] [WHERE criterii_de_selectie];
38
Nstase P., Coscescu L., Covrig L., et al Tehnologia bazelor de date Access 2000, Editura Economic, Bucureti, 2000, p. 197
196
unde:
funciile agregate sunt cele amintite n cadrul instruciunilor SELECT simple: COUNT, SUM, MIN, MAX, AVG, etc. lista_selectie seminific una sau mai multe funcii agregate care au ca argumente cmpuri ale bazei de date; AS alias asociaz un pseudonim rezultatului utilizrii funciei agregat; GROUP BY precizeaz cmpul sau cmpurile care vor fi criterii de grupare (echivalentul liniei Total din cadrul unei interogri de sintetizare a datelor); HAVING criteriu care va fi aplicat cmpului definit ca argument al funciei agregat. Spre deosebire de clauza Where, criteriul va aciona naintea gruprii nregistrrilor.
Se vor considera n continuare tabelele Studenti i CentrePractica. Exemplul 1: S se afieze numele tutorelui i numrul studenilor arondai acestuia. SELECT Den_centru, NumeTutore, COUNT(CNP) AS Nrstud FROM studenti, Centrepractica GROUP BY Den_centru, NumeTutore WHERE studenti.IDcentru=Centrepractica.IDcentru ORDER BY NumeTutore; Exemplul 2: S se afieze denumirea centrelor de practic din Timioara, Arad i Deva care au mai mult de 5 studeni i numrul studenilor arondai. SELECT Den_centru, COUNT(CNP) As NrStud FROM studenti INNER JOIN Centrepractica ON studenti.IDcentru=Centrepractica.IDcentru GROUP BY Den_centru HAVING COUNT(CNP)>5 WHERE Centrepractica.localitate IN (Timisoara,Arad,Deva);
197
6.2.6.4 Subinterogri O subinterogare este format dintr-o interogare n care este plasat (imbricat) o alt interogare. Formatul general39: SELECT [domeniu_selectie] lista_selectie FROM numet1, numet2, ... WHERE {numec1 expresie} operator_comparatie (SELECT {campexpresie} FROM numet1, numet2, ... [WHERE criterii_selectie_subinterogare]); unde operator_comparatie poate fi =, <, <=, >, >=, <>, IN, LIKE, Between. Observaii: subinterogrile trebuie incluse ntre paranteze rotunde; subinterogrile trebuie plasate n partea dreapt a operatorului de comparare; nu se va aduga o clauz ORDER BY ntr-o subinterogare; att n interogare ct i n subinterogare, sursa datelor poate fi simpl (un singur tabel) sau compus (mai multe tabele), putnd fi chiar identic, necesitnd crearea legturilor dintre tabele; clauzele Group By, Having i Order pot s apar n ambele interogri; dac se utilizeaz operatorul IN, rezultatul subinterogrii va fi o coloan cu mai multe valori; domeniul rezultatelor unei subinterogri poate fi influenat prin recurgerea la urmtoarele cuvinte cheie: ALL, ANY i EXISTS. n cazul n care se dorete negarea condiiei, se plaseaz operatorul NOT n faa specificatorului: - ANY/SOME comparaia este adevrat dac se gsete cel puin o valoare n valorile din coloana returnat de subinterogare. n cazul utilizrii acestui specificator, ; - ALL comparaia este adevrat dac este verificat de toate valorile din coloana returnat de subinterogare. n mod uzual, comparaia const ntr-o inegalitate: <, <=, >, >=, <>. De regul, rezultatul comparaiei este False;
39
Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.101
198
- EXISTS comparaia este adevrat dac subinterogarea returneaz cel puin o valoare din coloana sau coloanele returnate de subinterogare. Tipuri de subinterogri - subinterogri care au ca rezultat o singur linie (single-row subquery); - subinterogri care au ca rezultat mai multe linii (multiple-row subquery); - subinterogri care au ca rezultat mai multe coloane (multiple-column subquery). Se vor considera n continuare tabelele Studenti i CentrePractica. Exemplul 1: S se afieze numele studenilor care sunt n acelai an cu studentul cu CNP-ul 1711227658965 (s-a considerat cmpul CNP ca fiind de tip Text). SELECT nume_prenume FROM studenti WHERE an=(SELECT an FROM Studenti WHERE CNP=1711227658965); Exemplul 2: S se afieze numele i media studenilor cu media anului anterior mai mic dect media tuturor studenilor . SELECT nume_prenume, medie_an_anterior FROM studenti WHERE medie_an_anterior <= (SELECT AVG(medie_an_anterior) FROM Studenti); Exemplul 3: S se afieze toate informaiile despre studenii care au media mai mare dect toi studenii timioreni. SELECT * FROM studenti WHERE medie_an_anterior > ALL (SELECT medie_an_anterior FROM studenti WHERE localitate=Timioara);
199
200
6.3 Concluzii
SQL este unul dintre cele mai puternice i larg rspndite limbaje folosite pentru definirea i accesarea bazelor de date relaionale. El permite consultarea bazei de date sau efectuarea anumitor aciuni prin simpla specificare a comenzilor, fr a fi necesar specificarea unor modaliti concrete sau a algoritmilor de obinere a rezultatului. SQL este suportat de diferite sisteme de gestiune a bazelor de date cum ar fi: MS Access, MS SQL Server, DB2, Informix (IBM), Oracle, MySql, etc, diferenele dintre dialecte fiind minore40.
40
Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.66 41 Nstase P., Coscescu L., Covrig L., et al Tehnologia bazelor de date Access 2000, Editura Economic, Bucureti, 2000, p. 189
201
202
6.6 Exemple
6.6.1. Problem rezolvat Produse
S se creeze urmtoarea form de meniu.
Rezolvare: Se creaz o nou baz de date cu numele Produse. Se creaz tabela Produse cu urmtoarea structur: cod_p, den_p, um_p, stoc_p, pret_p, cod_magazin. Se vor introduce 3 nregistrri n tabel. Se creaz un nou formular folosind de pe bara de meniuri opiunea Create, butonul Form Design. De pe panglic se verific dac butonul Use Control Wizards este selectat. Acesta trebuie s fie deselectat pentru a permite crearea manual a controalelor, fr ajutorul asistentului. n continuare se alege butonul Button, executndu-se un clic pe form. Apelnd meniul contextual asociat butonului de comand de pe form, se selecteaz opiunea Properties i se modific proprietile Name i Caption pentru fiecare buton n parte. n total sunt 8 butoane de comand, fiecare avnd un alt Name i Caption. Proprietatea Name va fi completat ntotdeauna cu prefixul cmd urmat de un cuvnt sau alturare de cuvinte semnificativ pentru aciunea executat de buton, fr caracterul spaiu ntre ele. Numele butoanelor vor fi n ordine: cmdDesPr, cmdDesPr1, cmdInsPr, cmdModDen, cmdCrTNou, cmdViz, cmdValoare, cmdIesire. Proprietatea Caption va fi completat cu textul care apare pe butonul corespunztor din figura 1 i admite orice fel de caractere, inclusiv caracterul spaiu. Se selecteaz butonul dorit, iar n fereastra Property Sheet se modific cele dou proprieti aflate pe pagina All. Dac fereastra Property Sheet nu apare, ea poate fi
203
activat folosind butonul Property Sheet de pe panglic, atunci cnd este selectat opiunea de meniu Design. Se salveaz forma cu numele Meniu (butonul Save din dreapta butonului Office). Pentru a introduce instruciuni ataate butoanelor trebuie apelat editorul Visual Basic. Pentru aceasta, se apeleaz meniul contextual al fiecrui buton n parte (clic cu butonul din dreapta al mouse-ului), se alege Build Event, Code builder, OK. Mediul de programare Visual Basic Application arat ca n figura urmtoare:
Deasupra procedurii se tasteaz: DIM v_cod as Integer, v_den as String, v_um as String i se apas tasta Enter. Pentru fiecare buton n parte se scrie codul corespunztor. Tot ce este scris dup caracterul apostrof semnific un comentariu, este un mesaj pentru programator, o explicaie. Dac acesta apare, nu influeneaz cu nimic execuia programului, dar poate fi ignorat dac se consider oportun. Private Sub cmdDesPr_Click() ' se deschide tabela Produse pt. vizualizare in Design DoCmd.OpenTable "Produse", acViewDesign End Sub
204
DoCmd este o comand Visual Basic care permite execuia unei comenzi (Do Command). Open Table este comanda care permite deschiderea unei tabele. Numele tabelei este scris ntre ghilimele, iar parametrul acViewDesign specific deschiderea tabelei n modul Design, nu n Datasheet View. Private Sub cmdDesPr1_Click() ' se deschide tabela Produse pt. vizualizare in Datasheet View DoCmd.OpenTable "Produse" End Sub Private Sub cmdInsPr_Click() 'adaugarea unei noi inregistrari DoCmd.RunSQL "insert into produse values (cod_produs, den_produs, um_produs, stoc_produs, pret_produs, cod_mag)" End Sub Comanda RunSQL este comanda care permite execuia unei instruciuni SQL (Structured Query Language). Dintre cel mai des utilizate instruciuni SQL amintim: SELECT, INSERT INTO, UPDATE, ALTER TABLE, DELETE TABLE. Toate instruciunile SQL se scriu ntre ghilimele, simbolul ; de la sfritul comenzilor SQL fiind ignorat. n acest caz s-a folosit instruciunea INSERT INTO, care permite introducerea unei singure nregistrri n tabela Produse. Pentru fiecare din parametrii din parantez, acetia fiind considerai nite variabile, este creat automat un InputBox (o caset de introducere a valorilor de la tastatur) care permite citirea lor de la tastatur. Comanda Insert Into conine cuvntul Values, iar numrul parametrilor din parantez (care ca nume sunt diferite de numele cmpurilor din tabela Produse) trebuie s fie acelai cu numrul cmpurilor din tabel i s corespund ca tip de valori i semnificaie. De exemplu, dac n tabela Produse avem 5 cmpuri, n parantez, dup cuvntul Value, trebuie s avem 5 parametrii, n aceeai ordine. Private Sub cmdModDen_Click() 'modificarea denumirii unui produs la care este cunoscut codul v_cod = InputBox("Introduceti codul produsului la care doriti sa ii modificati denumirea:") DoCmd.RunSQL "update produse set den_p=denumire where cod_p=" & v_cod End Sub
205
Pentru a modifica denumirea unui produs pentru care se cunoate codul, se utilizeaz o variabil pentru a citi de la tastatur codul respectiv. Variabila v_cod este definit la nceputul aplicaiei, n seciunea DIM (de dimensionare a variabilelor). Cu ajutorul unei casete de introducere a datelor (Inputbox), valoarea variabilei cod produs este reinut n variabila v_cod. Pentru a modifica valoarea denumirii produsului, se utilizeaz instruciunea Update. Dup cuvntul predefinit SET avem o atribuire. Membrul din stnga este numele cmpului den_p din tabela Produse, iar n partea din dreapta avem un parametru. Pentru parametru, Access construiete automat o caset de introducere a datelor, permind citirea acestuia de la tastatur. Valoarea citit va nlocui valoarea veche a denumirii. Dac nu este adugat condiia Where, toate denumirile produselor vor fi modificate. Pentru a modifica doar un anumit cmp, n cadrul condiiei Where este specificat o condiie logic. Cod_p este cmpul cod produs din tabela Produse. Pentru a se utiliza valoarea reinut n variabila v_cod, acesta va fi scris n afara ghilimelelor. Si mbolul & este simbolul care semnific concatenarea mai multor valori de tip ir de caractere. Private Sub cmdCrTNou_Click() 'selectarea produselor cu stoc 0 si crearea unei tabele cu aceste produse DoCmd.RunSQL "Select cod_p, den_p, um_p, stoc_p, pret_p, cod_m into StocNul from produse where stoc_p=0" DoCmd.OpenTable "StocNul" End Sub n cazul instruciunii SQL SELECT, este necesar introducerea clauzei INTO (care creaz automat o nou tabel ca rezultat al interogrii). Noua tabel creat se numete StocNul. Condiia de filtrare este ca stocul produsului s fie zero. Dac n tabela Produse nu exist nici o nregistrare n care stocul produsului s fie zero, noua tabel va fi creat dar nu conine nici o nregistrare. Noua tabel creat va fi deschis pentru a fi vizualizat. Private Sub cmdViz_Click() 'vizualizarea produselor cu codul >= o valoare introdusa de la tastatura v_cod = InputBox("Introduceti un cod pentru a fi afisate produsele cu codul mai mare decat aceasta valoare") DoCmd.RunSQL "Select cod_p,den_p,um_p,stoc_p, pret_p, cod_m into Temp1 from produse where cod_p>=" & v_cod DoCmd.OpenTable "Temp1" End Sub
206
Pentru a citi o valoare de la tastatur este necesar declararea unei variabile n care valoarea s fie stocat. Variabila poart numele v_cod. Valoarea este citit de la tastatur prin intermediul comenzii InputBox (crearea unei casete de introducere a textului). Comanda Select creaz o nou tabel numit Temp1, fiind selectate doar cmpurile definite n lista cmpurilor (cod_p, d en_p, um, stoc, pret_u, cod_m) i acele nregistrri care verific condiia Where (codul produsului s fie mai mare dect valoarea care a fost introdus n variabila v_cod). Tabela Temp1 va fi apoi deschis pentru a vizualiza rezultatul interogrii. Private Sub cmdValoare_Click() DoCmd.RunSQL "select cod_p, den_p, um_p, pret_p, stoc_p, pret_p*stoc_p as valoare into Valoare from produse" DoCmd.OpenTable "Valoare" End Sub Acest buton permite calcularea unui cmp n cadrul unei interogri. Acesta se scrie n lista de cmpuri, ncepnd cu formula de calcul, urmat de cuvntul predefinit AS i numele care se dorete s apar n capul de tabel ca nume de cmp: valoare. Rezultatul interogrii este un nou tabel cu numele Valoare. Pentru a vedea rezultatul interogrii se deschide tabelul Valoare. Private Sub cmdIesire_Click() DoCmd.Quit End Sub Comanda Quit permite nchiderea aplicaiei. Pentru a putea utiliza butoanele trebuie setat nivelul de securitate astfel nct s permit utilizarea codurilor Visual Basic Application. Pentru aceasta, de pe bara Security Warning se selecteaz butonul Options..., selectnd opiunea Enable this content.
207
208
6. S se tearg toate notele de recepie corespunztoare codului material 111 din tabela receptiemateriale. S se tearg toate nregistrrile din tabela receptiemateriale. 7. S se tearg toate tabele din baza de date (inclusiv cele create n ca drul interogrilor).
Rezolvare: Se va crea o nou baz de date cu numele Aprovizionare. Table 1 se nchide, fr a fi salvat. Tabelele nu vor fi create cu ajutorul instrumentelor vizuale, ci tot cu ajutorul comenzilor SQL. Construind matricea dependenelor funcionale se ajunge la urmtoarea structur a bazei de date figura 6.
Pentru a crea un formular nou, se selecteaz opiunea de meniu Create, apoi butonul Form Design. Se salveaz formularul cu numele Meniu. 1. Pentru a aduga primul buton de comand pe form se deselecteaz butonul de pe panglic, se alege butonul i
209
se execut clic pe formular. Se apeleaz meniul contextual asociat butonului i se alege opiunea Properties. n fereastra Property Sheet se modific proprietile Name: cmdCreare i Caption: Crearea tabelelor figura 7.
Pentru a asocia cod butonului, se apeleaz meniul contextual al butonului i se alege opiunea Build Event/Code builder. Codul asociat butonului de Creare este detaliat n continuare: Private Sub cmdCreare_Click() DoCmd.RunSQL "CREATE TABLE materiale (codm integer CONSTRAINT pk_codm PRIMARY KEY CONSTRAINT nn_codm NOT NULL, denm TEXT(15), um TEXT(10), clasa TEXT(10))" MSG = MsgBox("Tabela materiale a fost creata!", vbOKOnly) DoCmd.RunSQL "CREATE TABLE receptii (nrrec INTEGER CONSTRAINT pk_nrrec PRIMARY KEY CONSTRAINT nn_nrrec NOT NULL, datarec DATE)" MSG = MsgBox("Tabela receptii a fost creata!", vbOKOnly) DoCmd.RunSQL "CREATE TABLE receptiemateriale (nrrec INTEGER CONSTRAINT fk_nrrec REFERENCES receptii(nrrec), codm INTEGER CONSTRAINT fk_codm REFERENCES materiale(codm), cantitate INTEGER, pret_unitar NUMBER, CONSTRAINT pk_recmat PRIMARY KEY(nrrec,codm))" MSG = MsgBox("Tabela receptiemateriale a fost creata!", vbOKOnly) End Sub
210
Observaii: Fiecare constrngere (PRIMARY KEY, NOT NULL, FOREIGN KEY) a fost denumit cu un nume format din prefixul pk pentru Primary Key, nn pentru Not Null sau fk pentru Foreign Key. nainte de a specifica constrngerea se adaug cuvntul predefinit CONSTRAINT apoi numele constrngerii. n cazul unei chei primare compuse, constrngerea este lsat la urm, dup ultimul cmp i definit ca fiind combinaia dintre nrrec i codm. Relaia dintre tabele este creat de la tabela referit (copil) la tabela de referin (printe), setndu-se o constrngere de tip FOREIGN KEY pe cmpul comun, utilizndu-se cuvntul predefinit REFERENCES, urmat de numele tabelei de referin (printe) i cmpul de legtur din acea tabel. Ambele cmpuri trebuie s fie definite ca fiind de acelai tip. MSG este un nume de variabil, care va lua valoarea apsrii butonului OK specificat n partea dreapt a egalitii. n partea din dreapta se utilizez o comanda care afieaz pe ecran mesajul scris ntre ghilimele i afieaz doar butonul OK. 2. Pentru a insera nregistrri n tabele se adaug un nou buton pe form (se selecteaz butonul Button, apoi se execut clic pe formular). Se modific proprietile butonului: Name: cmdInserare i Caption: Inserare nregistrri. Pentru a asocia cod butonului, se apeleaz meniul contextual al acestuia, se alege opiunea Build Event/Code Builder. Codul asociat butonului cmdInserare este prezentat n continuare: Private Sub cmdInserare_Click() DoCmd.RunSQL "INSERT INTO materiale VALUES (111, 'imprimanta','buc','cal.I')" DoCmd.RunSQL "INSERT INTO materiale VALUES (112, 'mouse','buc','cal.I')" DoCmd.RunSQL "INSERT INTO materiale VALUES (113, 'hartie','buc','cal.I')" MSG = MsgBox("S-au introdus inregistrari in tabela materiale!", vbOKOnly) DoCmd.OpenTable "materiale" DoCmd.RunSQL "INSERT (245369,#19/11/2011#)" INTO receptii VALUES
211
DoCmd.RunSQL "INSERT INTO receptii VALUES (245370,#25/11/2011#)" DoCmd.RunSQL "INSERT INTO receptii VALUES (245371,#25/11/2011#)" MSG = MsgBox("S-au introdus inregistrari in tabela receptii!", vbOKOnly) DoCmd.OpenTable "receptii" DoCmd.RunSQL "INSERT INTO receptiemateriale VALUES (245369,111, 200, 500)" DoCmd.RunSQL "INSERT INTO receptiemateriale VALUES (245369,112, 25, 50)" DoCmd.RunSQL "INSERT INTO receptiemateriale VALUES (245369,113, 1000, 7)" DoCmd.RunSQL "INSERT INTO receptiemateriale VALUES (245370,111, 10, 560)" DoCmd.RunSQL "INSERT INTO receptiemateriale VALUES (245370,112, 15, 55)" DoCmd.RunSQL "INSERT INTO receptiemateriale VALUES (245371,111, 1, 600)" DoCmd.RunSQL "INSERT INTO receptiemateriale VALUES (245371,112, 10, 60)" DoCmd.RunSQL "INSERT INTO receptiemateriale VALUES (245371,113, 1, 100)" MSG = MsgBox("S-au introdus inregistrari in tabela receptiemateriale!", vbOKOnly) DoCmd.OpenTable "receptiemateriale" End Sub 3. Pentru a modifica structura tabelelor adaug un nou buton pe form (se selecteaz butonul Button, apoi se execut clic pe formular). Se modific proprietile butonului: Name: cmdModStruct i Caption: Modificarea structuriilor tabelelor. Pentru a asocia cod butonului, se apeleaz meniul contextual al acestuia, se alege opiunea Build Event/Code Builder.
212
Codul asociat butonului cmdModStruct este prezentat n continuare: Private Sub cmdModStruct_Click() DoCmd.RunSQL "ALTER TABLE receptiemateriale ADD COLUMN cotatva number" DoCmd.OpenTable "receptiemateriale", acViewDesign MSG = MsgBox("S-a adaugat campul cotatva!", vbOKOnly) DoCmd.RunSQL "ALTER TABLE materiale DROP COLUMN clasa" DoCmd.OpenTable "materiale", acViewDesign MSG = MsgBox("S-au sters campul clasa!", vbOKOnly) End Sub 4. Pentru a modifica valorile din tabele se adaug un nou buton pe form (se selecteaz butonul Button, apoi se execut clic pe formular). Se modific proprietile butonului: Name: cmdModifValori i Caption: Modificarea valorilor din tabele. Pentru a asocia cod butonului, se apeleaz meniul contextual al acestuia, se alege opiunea Build Event/Code Builder. Codul asociat butonului cmdModifValori este prezentat n continuare: Private Sub cmdModifValori_Click() DoCmd.RunSQL "UPDATE receptiemateriale SET cotaTVA=0.24" DoCmd.OpenTable "receptiemateriale" MSG = MsgBox("S-a modificat valoarea campului cotaTVA!", vbOKOnly) DoCmd.RunSQL "UPDATE receptii SET datarec=#23/11/2011# WHERE nrrec=245369" DoCmd.OpenTable "receptii" MSG = MsgBox("S-a modificat valoarea campului datarec=23.11.2011 pt nrrec=245369!", vbOKOnly) End Sub 5. Pentru a vizualiza interogrile se adaug un nou buton pe form (se selecteaz butonul Button, apoi se execut clic pe formular). Se modific proprietile butonului: Name: cmdInterogari i Caption: Interogari. Pentru a asocia cod butonului, se apeleaz meniul contextual al acestuia, se alege opiunea Build Event/Code Builder.
213
Codul asociat butonului cmdInterogari este prezentat n continuare: Private Sub cmdInterogari_Click() DoCmd.RunSQL "SELECT * INTO T1 FROM materiale WHERE um='buc'" DoCmd.OpenTable "T1" MSG = MsgBox("Produsele cu UM=buc", vbOKOnly) DoCmd.RunSQL "SELECT receptii.nrrec, datarec, denm, cantitate, pret_unitar, cantitate*pret_unitar*cotaTVA as valoare INTO T2 FROM materiale, receptiemateriale, receptii WHERE receptii.nrrec=receptiemateriale.nrrec AND materiale.codm=receptiemateriale.codm AND datarec=#25/11/2011#" DoCmd.OpenTable "T2" MSG = MsgBox("Calcularea valorii", vbOKOnly) DoCmd.RunSQL "SELECT receptii.nrrec, SUM(cantitate*pret_unitar*cotaTVA) as valoare_nota_receptie INTO T3 FROM receptiemateriale, receptii WHERE receptii.nrrec=receptiemateriale.nrrec GROUP BY receptii.nrrec" DoCmd.OpenTable "T3" MSG = MsgBox("valoare pe fiecare nota de receptie in parte", vbOKOnly) End Sub Observaii: Specificatorul * semnific afiarea tuturor cmpurilor din tabela respectiv. Clauza INTO creeaz o nou tabel n care rezultatul interogrii va fi depus. Dac se dorete vizualizarea acestuia, tabelul trebuie deschis. Dac datele sunt extrase din mai multe tabele, n cazul n care este specificat un cmp care apare n ambele tabele, este necesar specificarea aparteneei lui (de exemplu receptii.nrc). Dac se dorete afiarea datelor din mai multe tabele, este necesar specificarea condiiei de legtur dintre tabele. n acest caz s -a ales jonciunea natural. Condiia de legtur apare n cadrul clauzei WHERE, operatorul dintre condiii fiind AND. Dac se dorete afiarea unor totaluri pe grupe de nregistrri, se utilizeaz clauza Group By. Aceasta este specificat dup clauza Where. Cmpul specificat ca i criteriu de grupare va apare ca primul cmp selectat n lista cmpurilor.
214
6. Pentru a terge nregistrri din tabele se adaug un nou buton pe form (se selecteaz butonul Button, apoi se execut clic pe formular). Se modific proprietile butonului: Name: cmdStergereValori i Caption: Stergere valori. Pentru a asocia cod butonului, se apeleaz meniul contextual al acestuia, se alege opiunea Build Event/Code Builder. Codul asociat butonului cmdInterogari este prezentat n continuare: Private Sub cmdStergereValori_Click() DoCmd.RunSQL "DELETE FROM receptiemateriale WHERE codm=111" DoCmd.OpenTable "receptiemateriale" MSG = MsgBox("S-au sters notele de receptie cu codm=111!", vbOKOnly) DoCmd.RunSQL "DELETE FROM receptiemateriale" DoCmd.OpenTable "receptiemateriale" MSG = MsgBox("S-au sters toate produsele de pe notele de receptie", vbOKOnly) End Sub 7. Pentru a terge tabelele se adaug un nou buton pe form (se selecteaz butonul Button, apoi se execut clic pe formular). Se modific proprietile butonului: Name: cmdStergereTabele i Caption: Stergere tabele. Pentru a asocia cod butonului, se apeleaz meniul contextual al acestuia, se alege opiunea Build Event/Code Builder. Codul asociat butonului cmdInterogari este prezentat n continuare: Private Sub cmdStergereTabele_Click() DoCmd.RunSQL "DROP TABLE T1" DoCmd.RunSQL "DROP TABLE T2" DoCmd.RunSQL "DROP TABLE T3" DoCmd.RunSQL "DROP TABLE receptiemateriale" DoCmd.RunSQL "DROP TABLE materiale" DoCmd.RunSQL "DROP TABLE receptii" MSG = MsgBox("S-au sters toate tabelele!", vbOKOnly) End Sub
215
216
4. adugarea unui cmp cu numele alte clauze n tabela Contracte; 5. completarea cmpului observaii cu valoarea pltit integral pentru comanda cu codul 1234; 6. vizualizarea comenzilor care expir luna aceasta; 7. vizualizarea numelui beneficiarilor i suma total pltit de acetia ; 8. vizualizarea numrului beneficiarilor care au ncheiat contracte care expir anul acesta; 9. tergerea comenzii cu numrul 1234; 10. tergerea tuturor tabelelor; 11. nchiderea formei.
217
218
BIBLIOGRAFIE
1. 2. 3. 4. 5. Adamski J., Finnegan K. (2006) New Perspectives on Microsoft Office Access 2003, Second Edition, Thomson Course Technology, Boston Bandu I. (2009) Baze de date Access 2007, Editura Mirton, Timioara Biriescu S. (2010) Baze de date n mediul economic: studii de caz, Editura Mirton, Timioara Boldea M., Boldea C.M. (2010) Access 2007, Editura Mirton, Timioara
6. 7.
Coronel, C., Morris, St., Rob, P. (2009). Database Systems: design, implementation, and management, Ninth Edition. Publisher Course Technologies Delobel, C., Adiba, M., (1982) Bases de donnees at systemes relationnels, Dunod Informatique, Paris
Hurbean L., Dnia D., Negovan A.-M. (2008) Baze de date: de la teorie la practic utiliznd Access 2007, Editura Mirton, Timioara 8. Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al (2009) Baze de date, Editura Infomega, Bucureti 9. Fotache M. (1997) Baze de date relaionale, Editura Junimea, Iai 10. Giulvezan C., Mircea G., Trnveanu D., Margea C. (2009) Baze de date, Editura Universitii de Vest, Timioara 11. Fleming, Candace, von Halle, Barbara (1989) Handbook of
219
20. Tama I. (coord.), Stanciu V., Gheorghe M. (2010) Access 2007 Proiectare i realizare pas cu pas, Editura Infomega, Bucureti 21. Whitehorne M., Marklyn B. (2007) Inside Relational Databases with Examples in Access, Springer
220
GLOSAR DE TERMENI
Colecie de date aflate n interdependen, mpreun cu descrierea datelor i a relaiilor dintre ele. SGBD Pachet software de nivel nalt, care permite proiectarea, construirea i administrarea bazelor de date dedicate rezolvrii problemelor din cele mai variate domenii ale vieii reale SGBDR Este o un sistem de gestiune a bazelor de date care folosete modelul relaional. Nivelul intern al bazei de Este o colecie de fiiere coninnd datele fizice la date care se adaug diverse structuri auxiliare menite s asigure accesul operativ la date. Nivelul conceptual Conine structura logic a bazei de date, aa cum este ea vzut de administratorul bazei de date. Nivelul extern Este ceea ce vede acesta din baza de date, sau modul cum vede acesta baza de date. Proiectarea unei baze de Procesul de creare a unui proiect pentru baza de date date care s asigure desfurarea corect a activitilor i rezolvarea cerinelor utilizatorilor. Entitate Mulimea tuturor elementelor de un anumit tip (care prezint aceleai caracteristici). Instan a unei entiti nelegem un singur element, bine individualizat, unic, din mulimea elementelor care formeaz entitatea respectiv. Atribut O caracteristic a unei entiti. Cheia primar Un atribut sau cea mai mic mulime de atribute ale unei entiti care iau, fiecare instan a entitii respective, o valoare i numai una, Relaie ntr-o baz de O legtur logic ntre dou sau mai multe entiti. date Normalizare tehnic pentru proiectarea bazelor de date relaionale Redundan o proprietate a unei colecii de date care se refer la faptul c unele componente sunt memorate de mai multe ori pe suportul de memorare Baza de date
221
O relaie se afl n FN1 dac toate atributele sale sunt atomice (nu se mai pot descompune) i nerepetitive Forma normal 2 (FN2) O relaie se afl n FN2 dac respect FN1 i orice atribut non-cheie este complet dependent de cheia primar a relaiei (interzice dependene funcionale pariale) Forma normal 3 (FN3) O relaie se afl n FN3 dac respect FN2 i toate atributele non-cheie sunt dependente direct de cheia primar (interzice dependenele funcionale tranzitive) Cmp o unitate elementar sau o categorie cum ar fi titlurile crilor sau numerele de telefon nregistrare un set complet de date (cmpuri) care se refer la o persoan, loc, eveniment, idee Tabel structur elementare n care sunt stocate datele n cadrul unei baze de date Interogare structur care permite efectuarea unei aciuni rapide (obinerea unor informaii sau efectuarea unor modificri) asupra unei tabele sau mai multor ta bele Formular fereastr atractiv folosit pentru a consulta sau actualiza datele dintr-un tabel sau o structur de interogare Raport structur care permite tiprirea informaiilor din tabele sau interogri Macrocomand mini-programe care automatizeaz sarcinile curente (formate dintr-o suit de aciuni) Modul fiier care conine cod Visual Basic Application SQL (Structured Query este un limbaj de interogri i gestionare a bazelor Language) de date relaionale CREATE TABLE permite crearea unei tabele ALTER TABLE permite modificarea structurii unei tabele adugarea, tergerea unor cmpuri sau modificarea proprietilor acestora DROP TABLE permite tergerea fizic a nregistrrilor INSERT INTO permite inserarea unei nregistri ntr -o tabel DELETE Permite tergerea nregistrrilor dintr -o tabel, structura tabelei rmnnd neschimbat
222
SELECT
UPDATE
permite selectarea nregistrrilor din una sau mai multe tabele, n funcie de anumite criterii, permind agregarea datelor i crearea subinterogrilor permite modificarea valorilor unui cmp dintr -o tabel
223