Professional Documents
Culture Documents
Gama larg de aplicaii ale informaticii necesit acces rapid la mari cantiti de date. Iat cteva exemple: sistemele computerizate de marcare din supermarketuri trebuie s traverseze ntreaga linie de produse din magazin; sistemele de rezervare a locurilor la liniile aeriene sunt folosite n mai multe locuri simultan pentru a plasa pasageri la numeroase zboruri la date diferite; calculatoarele din biblioteci stocheaz milioane de intrri i acceseaz citaii din sute de publicaii; sistemele de procesare a tranzaciilor n bnci i casele de brokeraj pstreaz conturi care genereaz fluxul mondial de capital; motoarele de cutare World Wide Web scaneaz sute de pagini Web pentru a produce rspunsuri cantitative la interogri aproape instantaneu; sute de mici ntreprinztori i organizaii utilizeaz bazele de date pentru a stoca orice de la inventare i personal la secvene ADN i informaii despre obiecte provenite din spturi arheologice. Un produs software care presupune managementul fiierelor suport descompunerea logic a unui fiier n nregistrri. Fiecare nregistrare descrie o entitate i const dintr-un
numr de cmpuri, unde fiecare cmp d valori unei anumite proprieti (sau atribut) al entitii.
Un fiier simplu cu nregistrri este adecvat pentru date comerciale cu complexitate redus, cum ar fi inventarul dintr-un magazin sau o colecie de conturi curente pentru clieni. Un index al unui fiier const dintr-o list de identificatori (care disting nregistrrile) mpreun cu adresele nregistrrilor. De exemplu numele poate fi folosit pentru a identifica nregistrrile unor persoane. Deoarece indexurile pot fi mari ele sunt uzual structurate ntr-o form ierarhic i sunt navigate cu ajutorul pointerilor. Formele ierarhice arborescente sunt frecvent folosite datorit vitezei mari de traversare. Problemele reale ale procesrii datelor solicit frecvent legarea datelor din mai multe fiiere. Astfel, n mod natural s-au conceput structuri de date i programe de manipulare a datelor care s suporte legarea nregistrrilor din fiiere diferite. 3 modele de baze de date au fost create pentru a suporta legarea nregistrrilor de tipuri diferite: modelul ierarhic: tipurile nregistrrilor sunt legate ntr-o structur arborescent (de exemplu nregistrrile unor angajai s-ar putea grupa dup o nregistrare care s descrie departamentele n care acetia lucreaz); IMS (Information Management System produs de IBM) este un exemplu de astfel de sistem; modelul reea: se pot crea legturi arbitrare ntre diferitele tipuri de nregistrri (de exemplu nregistrrile unor angajai s-ar putea lega pe de o parte de o nregistrare care s descrie departamentele n care acetia lucreaz i pe de alt parte supervizorii acestora care sunt de asemenea angajai); modelul relaional: n care toate datele sunt reprezentate ntr-o form tabelat simpl. n modelul relaional descrierea unei entiti particulare este dat de setul valorilor atributelor, stocate sub forma unei linii n tabel i numit relaie. Aceast legare a n valori de atribute furnizeaz cea mai potrivit descriere a entitilor din lumea real.
Modelul relaional suport interogri (cereri de informaii) care implic mai multe tabele prin asigurarea unor legturi ntre tabele (operaia join) care combin nregistrri cu valori identice ale unor atribute ale acestora. Statele de plat, de exemplu, pot fi stocate ntr-un tabel iar datele personalului beneficiar n altul. Informaiile complete pentru un angajat pot fi obinute prin reunirea acestor tabele (join) pe baza numrului personal de identificare. Pentru a suporta o varietate de astfel de structuri de baze de date, o larg varietate a software denumit sistem de gestiune a bazelor de date este necesar pentru a stoca i reda datele i pentru a pune la dispoziia utilizatorului posibilitatea de a interoga i actualiza baza de date. n 1970, Ted Codd (IBM, printele SQL), nemulumit de performanele COBOL i IMS formuleaz principiul de lucru al bazelor de date relaionale. Codd afirm c SGBD trebuie s recunoasc comenzi simple i trebuie s fie aproape de utilizatori prin punerea mpreun a comenzilor potrivite pentru gsirea a ceea ce se dorete. Ceea ce Codd numete model relaional se bazeaz pe dou puncte cheie: s furnizeze un mod de descriere a datelor cu numai cu structura lor natural, ceea ce nseamn c trebuie realizat acest lucru fr impunerea nici unei structuri adiionale pentru scopuri de reprezentare n calculator; de asemenea, s furnizeze baza pentru un limbaj de date de nivel nalt care va conduce la o maxim independen ntre programe, pe de o parte, i reprezentarea n calculator, pe de alt parte. Cu alte cuvinte modelul relaional consist din: independena datelor fa de hardware i modul de memorare; navigarea automat sau un limbaj de nivel nalt neprocedural pentru accesarea datelor;
n loc ca s se proceseze cte o nregistrare, programatorul utilizeaz limbajul pentru a specifica operaii unice care trebuie realizate asupra ntregului set de date. Limbajele de generaia a 4-a (4th GLs) sunt mai aproape de limbajul uman ca limbajele de nivel nalt (de generaia a 3-a, 3th GLs). Primele dintre acestea sunt FOCUS (Information Builders) SQL (IBM), QBE (Querry by example, IBM), dBASE (succesorul lui SQL). Necesitatea pentru mai mult flexibilitate i performan din partea modelelor de date cum ar fi de a suporta aplicaiile tiinifice sau inginereti a fcut ca s se extind conceptul de model relaional aa nct intrrile n tabele s nu mai fie simple valori ci s poat fi programe, texte, date nestructurate mari n form binar sau orice alt format solicitat de utilizator. Un alt progres s-a fcut prin ncorporarea conceptului de obiect devenit esenial n limbajele de programare. n bazele de date orientate obiect toate datele sunt obiecte. Obiecte
3
se pot lega ntre ele printr-o relaie de apartenen pentru a forma o familie mai larg i mai divers de obiecte (n anii '90 au fost lansate primele sisteme de management orientat obiect OODMS). Datele care descriu un transport pot fi stocate, de exemplu, ca familie mai larg care poate conine automobile, vapoare, vagoane, avioane. Clasele de obiecte pot forma ierarhii n care obiecte individuale pot moteni proprieti de la obiectele situate deasupra n ierarhie. Bazele de date multimedia, n care vocea, muzica i informaia video se stocheaz mpreun cu informaiile de tip text, devin tot mai frecvente i i imprim trendul n dezvoltarea sistemelor de gestiune a bazelor de date orientate obiect. O secven tipic pentru un limbaj 4th GL este: FIND ALL RECORDS WHERE NAME IS "TUCKER" SQL (Structured Query Language) este un limbaj standard industrial pentru crearea, actualizarea i interogarea sistemelor de management ale bazelor de date relaionale. Prima versiune standardizat a SQL a aprut n 1986 i conine construciile de baz ale limbajului pentru definirea i manipularea tabelelor de date. O revizie n 1989 a adugat limbajului extensii pentru integritatea referenial i generalizeaz constrngerile de integritate. O alt extensie n 1992 furnizeaz faciliti n manipularea schemelor i administrarea datelor i de asemenea substaniale mbuntiri n ceea ce privete definirea i manipularea datelor. Dezvoltarea sistemului este n desfurare pentru a face din acesta un limbaj computaional complet pentru definirea i managementul obiectelor complexe persistente. Aceasta include generalizarea i specializarea ierarhiilor, motenire multipl, tipuri de dat utilizator, generatoare i construcii declarative, suport pentru sistemele bazate pe cunotine, expresii interogative recursive i instrumente adiionale de administrare a datelor. Include de asemenea tipuri abstracte de date, identificatori de obiecte, metode, motenire, polimorfism, ncapsulare i toate celelalte faciliti care sunt asociate uzual cu managementul datelor de tip obiect. n prezent, industria bazelor de date, ca segment al industriei de software genereaz anual aproximativ 8 miliarde de dolari. Companiile care dein supremaia pe acest segment de pia sunt IBM, Oracle, Informix, Sybase, Teradata (NCR), Microsoft, Borland.
2. Formele Backus-Naur
BNF (Backus-Naur Form, numite originar Backus Normal Form i redenumite apoi la sugestia lui Donald Knuth) formeaz o metasintax utilizat pentru a exprima gramatici independente de context. BNF este unul dintre cele mai utilizate notaii metasintactice pentru specificarea sintaxei limbajelor de programare i seturile de comenzi ale acestora. pentru detalii suplimentare vezi http://src.doc.ic.ac.uk/computing/internet/rfc/rfc2234.txt.
4
Aceasta se traduce prin: O adres potal const dintr-o parte de nume, urmat de o parte de adres stradal i urmat de o parte de cod potal. O parte personal const din prenume sau dintr-o iniial urmat de un punct. O parte de nume const din urmtoarele: o parte personal urmat de nume urmat de un opional <jr-part> (Jr., Sr., sau numrul dinastiei) i sfrit de linie sau o parte personal urmat de o parte de nume (aceasta ilustreaz recursivitatea n formele BN, acoperind cazul persoanelor care folosesc mai multe nume sau prenume i/sau iniiale). O adres stradal const dintr-un specificator opional de apartament, urmat de numr i numele strzii. Partea de cod potal const din numele oraului, urmat de virgul, urmat de codul statului i oraului urmat de sfrit de linie. De observat c multe lucruri (cum ar fi formatul prii personale, specificatorul de apartament sau de codul oraului au rmas nespecificate. Aceste detalii lexicale sunt presupuse evidente din context sau sunt specificate n alt parte. Sunt multe variante i extensii ale BNF, de exemplu prin introducerea wildcardurilor ? i *. Dou dintre acestea sunt EBNF i ABNF.
Nu este mult de vzut la acesta, ns este cel puin ncrcabil n calculator. Utiliznd orice limbaj de programare (din generaia a 3-a) se poate scrie un cod care s deschid acest fiier i s preia informaia. Oricum am pune problema ns n implementarea acestui cod, se
5
arat a fi o bun bucat de cod de scris. Dac se dorete ca aceast informaie s se poat ordona i interoga dup o varietate de criterii, care de exemplu s sorteze alfabetic dup nume sau s gseasc toi oamenii care au o anumit valoare a codului de localitate, este ntr-adevr dureros. Ne putem lovi acum de o alt problem major dac datele dorim s fie utilizate n cadrul unei reele de o mulime de utilizatori, cum ar fi modificrile pe care le-ar efectua un utilizator n timp ce alt utilizator se poziioneaz pe o nregistrare mai jos n fiier. Probabil va trebui s blocm la scriere fiierul atunci cnd mai muli utilizatori l acceseaz. Este evident deci c soluia memorrii acestuia sub form de fiier text nu a fost fericit. Este nevoie de un sistem de stocare care s reduc cantitatea de prelucrri i accesri ale informaiei din fiier de ctre programul responsabil cu gestiunea acestuia. Un tabel simplu ca tabelul 1 ar trebui s funcioneze tocmai bine: Tabelul 1. Tabel simplu pentru stocarea datelor
Acum acesta este aproape convenabil. Este uor de ajuns la sfrit i de verificat dac vreun program acceseaz acest tabel. Este uor de accesat o linie din acest tabel odat fr a afecta pe ceilali. n acest sens, dac 2 sau mai muli utilizatori doresc s insereze informaii n aceast tabel ei nu se vor suprapune n aciunea lor. Dac se va dori extragerea unor informaii din tabel, cum ar fi toate persoanele care sunt din California, nu va fi necesar s se prelucreze i ordoneze fiierul. Un program care ar opera pe aceast tabel va trebui doar s rezolve urmtoarea subproblem: afieaz toate liniile la care coninutul coloanei State este egal cu 'CA'. Da, este frumos, ns nu este destul. Obiectivul Dr. Codd, printele SQL, a fost de a avea un model al informaiei care s nu creeze anomalii. Se pot identifica 3 situaii de anomalie: la Actualizare, tergere i Inserare. S presupunem c o structur tabelat poate rapid i uor gestiona cereri multiple i s analiz ce se ntmpl dac informaia devine ceva mai complex, cum ar fi cazul ilustrat n tabelul 2: Tabelul 2. Tabel cu stocare problematic
Ce se ntmpl dac de exemplu, firma BigCo se hotrte s-i schimbe sediul? Va trebui s actualizm adresa sa n dou linii. Poate fi i o surs de erori dac modificarea se face manual n fiecare linie i cineva introduce greit una din cele dou noi adrese. Rezult deci c o cale mai bun de a manipula aceste date este de a lua numele companiei i adresa acesteia i a le pune ntr-o tabel separat. Rezultatul poate fi ca n tabelele 3 i 4. Tabelul 3. Companii
Ceea ce s-a realizat n acest caz prin separarea celor dou categorii de informaii i introducerea unei coloane de legtur (company_id) este c s-a creat o relaie ntre cele dou tabele i de aici vine numele de baz de date relaional. Dei avem exact aceleai informaii ca la nceput, totui, exist o diferen, faptul c tocmai le-am segmentat. Putem acum schimba adresa att pentru Jay ct i pentru Brad prin modificarea unei singure linii. Acesta este un fapt convenabil, oricum. S presupunem c se ntmpl ca d-nul Doe s fie ters din baza de date n forma din tabelul 2. Dar se poate ntmpla ca cineva s vrea s cear lista tuturor companiilor cu care ai avut contact anul trecut. n forma curent, tergndu-l pe Doe, vom terge i informaia despre companie odat cu el. Aceast problem se numete tergerea anormal. Tabelul 2. Tabel cu tergere anormal
Dac ns se pstreaz structura din tabelele 3 i 4, se poate face tergerea numai din tabela 4, i nregistrarea cu compania poate s rmn n tabela 3, aa nct n acest caz problema tergerii anormale nu mai exist. Privind din nou datele din tabelul 2 putem observa c scopul principal al acestei tabele este de a stoca contacte i nu companii. Situaia devine paradoxal atunci cnd dorim s
7
inserm o companie dar nu i persoana de contact. De cele mai multe ori, ar trebui s ateptm pn cnd avem date specifice de contact pentru ca s putem aduga n baza de date. Este evident o restricie ridicol.
Lansarea aplicaiei n execuie se poate face din Taskbar, StartProgramsMicrosoft Visual Studio 6.0Microsoft Visual FoxPro 6.0 sau dac a fost instalat cu opiunile implicite de instalare din locaia: C:\Program Files\Microsoft Visual Studio\Vfp98\VFP6.EXE". La pornire se activeaz un Wizard opional:
care se poate dezactiva prin marcarea Checkbox-ului. Pentru a ajunge la meniul aplicaiei se alege opiunea Close this screen. Cu ajutorul barei de instrumente se pot crea sau deschide baze de date, tabele, interogri, forme, rapoarte, etichete, programe, clase sau proiecte. Oricare din operaiile efectuate cu ajutorul barei de instrumente se pot efectua i din fereastra de comenzi; ea se activeaz/dezactiveaz ca n fig.
fereastra de comenzi Operaiile asupra bazelor de date create pe care le efectum din bara de instrumente sunt oricum nregistrate n fereastra de comenzi, aceasta pstrnd istoria activitii sesiunii de lucru curente:
Se poate alege a se crea o baz de date cu ajutorul wizardului ca n figur n care ntr-o succesiune de 5 pai se precizeaz caracteristicile noii baza de date care se dorete s se creeze.
Baza de date aa cum s-a putut constata n exemplul prezentat anterior este compus din mai multe tabele. S presupunem c vrem s memorm informaiile prezentate n tabelele 3 i 4. n acest caz, putem alege s construim o nou baz de date pe baza creri unui nou fiier n care apoi s adugm cele dou tabele, i anume COMPANII i PERSOANE_CONTACT. Alegem deci New/Database, New File, introducem numele noii baze de date (s spunem CLIENTI cnd se genereaz urmtorul rezultat:
n Aceast coal avem posibilitatea s construim structura celor dou tabele (COMPANII i PERSOANE_CONTACT). Activarea consecutiv a butoanelor New Table i apoi din nou New Table urmat de introducerea numelui primei tabele (COMPANII) duce la activarea constructorului de tabele:
Se precizeaz succesiv n aceast tabel numele, tipul, lungimea i precizia zecimal acolo unde este cazul pentru fiecare cmp al bazei de date, pn cnd se obine un rezultat ca n figura urmtoare:
10
Se va aciona butonul Ok i n acest moment se va aduga automat pe foaia de lucru a bazei de date desenul din dreapta care reprezint tabela creat. Se repet procedura i pentru cea de-a doua baz de date, cnd se obine:
Se poate stabili acum o relaie de validare la completare. Se activeaz cu click dreapta ca n figur proprietile cmpului contact_id din persoane_contact i din fereastra de modify se stabilete regula: Companii.company_id > 0
Se completeaz apoi bazele de date cu informaiile necesare prin dublu click asupra tabelelor, cnd se activeaz ferestre de tip browse n care se adaug cte o nregistrare cu CTRL+Y sau Table/Append New Record:
11
Dup aceasta oricnd ne putem ntoarce la foaia tabelei pentru a vizualiza coninutul tabelelor sau pentru a face adugri sau modificri.
Cum se observ, zona marcat conine informaii identice. Ea formeaz un grup repetitiv. Dup ce vom nltura aceste coloane i le plasm n propriul lor tabel se ajunge la prima form normal. Cheile primare sunt o coloan sau un set de coloane care au pe fiecare linie o valoare unic n irul valorilor coloanei respective. n tabelul 5 se poate vedea cum s-a inclus o astfel de coloan (company_id). Toate browserele de baze de date posed un instrument de a defini o astfel de coloan. De exemplu, n MySQL aceasta se numete cmp auto_increment. Pot ns fi chei primare seriile de buletin, adresele email sau URL-urile. Singura condiie este ca datele s fie unice. De exemplu, dac informaiile de contact dintr-o astfel de agend de adrese presupun memorarea de informaii pentru companii cu mai multe reprezentane, probabil cea mai bun soluie este de a memora identificatorul reprezentanei i adresa ntr-un tabel separat n care company_id i eventual company_city s formeze cheia primar. Dependena datelor este un element esenial n organizarea lor relaional. O coloan este dependent (de cheia primar) dac ea nu poate exista n tabel cnd cheia primar este nlturat. A doua form normal intervine cnd la sfritul primei normalizri obinem o cheie primar format din mai multe coloane. S presupunem c n urma procesului de separare a tabelei de adrese (v. tabelul 5) obinem o tabel n forma: Tabelul 6. Tabel care nu e n forma normal 2
Aici, company_name i company_location formeaz cheia primar multipl. O adugare anormal se produce atunci cnd dorim s adugm o nou adres pentru BigCo Co. Vom avea numele CEO (Chief Executive Officer) repetat n linia adugat. Transformm acest tabel n a doua form normal prin eliminarea liniilor care sunt doar parial dependente de cheia primar. CEO este dependent doar de coloana company_name i nu este dependent de coloana company_location. Pentru a ajunge la a 2-a
13
form normal, se mut liniile care sunt doar parial dependente de cheia primar multicoloan ntr-un tabel propriu. A doua form normal nu se aplic pentru tabelele care au o cheie primar format de o singur coloan. A 3-a form normal rezolv dependenele tranzitive. O dependen tranzitiv este atunci cnd o coloan exist n tabel dar nu este condiionat direct de cheia primar. n loc de aceasta, ea este condiionat de alte cmpuri, care la rndul lor sunt condiionate de cheia primar. O cale rapid de a se ajunge la a 3-a form normal este de a ne uita la toate cmpurile din tabel i de a ne ntreba dac aceste cmpuri descriu cheia primar. Dac nu, locul lor nu este aici (n aceast tabel). Dac se dorete ca agenda s memoreze mai multe informaii de contact, ca n tabela urmtoare: Tabelul 7. Tabel care nu e n a 3-a form normal
atunci se pune problema dac nu cumva prin adugarea acestora nu se altereaz normalizarea acesteia. Este posibil, chiar probabil ca un asistent s deserveasc mai multe reprezentane, ceea ce face ca assistant_name i assistant_phone s apar n tabel mai mult dect odat. Acestea vor forma atunci un grup repetitiv, care deja a fost discutat cum se elimin.
7. Tipuri de relaii
Este esenial a se crea un grup de tabele care s nu aib anomalii. Acestea totdeauna includ coloane care menin (definesc) relaiile ntre aceste tabele. Sunt 3 tipuri de relaii n domeniul bazelor de date: relaii 1 la n: de departe cel mai frecvent caz, cnd o valoare dintr-o coloan refer mai multe cmpuri ntr-un alt tabel:
14
Figura urmtoare arat cum tabela de Companii poate fi unul din capetele nc unei relaii 1 la n cu tabela reprezentanelor:
15
relaii 1 la 1: sunt de fapt relaii 1 la n n care o linie dintr-un tabel este legat cu o linie dintr-un alt tabel; ele rezult de obicei n urma proceselor de normalizare, aa cum ar putea rezulta n urma separrii datelor din tabelul 7:
relaii m la n: acestea lucreaz diferit fa de cele dou anterioare; s presupunem c compania pstreaz informaii despre o varietate de publicaii care pot fi distribuite persoanelor de contact, n funcie de cererea acestora; pentru nceput, se creeaz tabela care va memora tipurile de publicaii: Tabelul 8. Tabela publicaiilor
Se poate acum aduga o coloan n tabelul de persoane de contact pentru a preciza publicaiile care se vor trimite, ca n tabelul 9: Tabelul 9. Persoane de contact
Coloana newsletters conine mai mult de o valoare, fiind de fapt un ir de valori. Aa cum s-a menionat la prima form normal aceast situaie nu trebuie s apar niciodat n baza de date. Soluia este crearea nc unei tabele pentru a memora aceste informaii, aa cum se exemplific n tabelul 10.
16
Iat acum c aceast tabel constituie baza unei relaii m la n n baza de date:
17
coloana company_id din tabela de contacte este o cheie strin ctre tabela de companii. n anumite SGBD-uri, ca VFP, Oracle, Sybase sau PostGres, tabelele pot fi create cu definirea explicit a cheilor strine (field validation/rule n VFP) aa nct adugarea va fi acceptat de ctre sistem doar dac valoarea cheii strine exist n tabela referit ca cheie primar. n alte SGBD-uri, ca MySQL, cheile strine nu au aceast semnificaie. n acest caz, programatorul trebuie s efectueze civa pai suplimentari nainte de a aduga sau modifica nregistrri, cum ar fi (pentru tabelele 3 i 4): preia toate valorile pentru company_id din tabela de companii; verific dac valoarea pentru company_id pe care intenionezi s o inserezi n tabela de contacte exist n irul de date obinut mai sus; dac ea exist, insereaz valorile; Tranzacii. n BD relaionale au loc schimbri de apartenene n grupuri. Multe schimbri necesit ca liniile s fie actualizate n mai multe tabele deodat. n unele cazuri acest lucru se face printr-o succesiune de instruciuni care preiau datele acolo unde trebuie s fie stocate. Un site pentru comerul electronic poate conine un cod care s efectueze operaiile: 1. adaug clientul n tabela de clieni; 2. adaug lista de cumprturi n tabela de cumprturi; 3. scade cantitile comandate din tabela de stocuri. Cnd se lucreaz cu o serie de pai ca aceasta, exist un potenial pentru probleme care pot apare. Dac sistemul se blocheaz sau iese n decor ntre paii 2 i 3, atunci baza de date conine date eronate. Pentru a preveni o astfel de situaie, unele SGBD-uri folosesc conceptul de tranzacii. Cu acesta, programatorul poate identifica un grup de comenzi. Dac una dintre aceste comenzi eueaz n nregistrare, ntregul grup este respins i baza de date este restaurat la starea sa nainte de efectuarea grupului de comenzi (tehnologia COMMIT/ROLLBACK). Proceduri de memorare. SGBD-urile cu mai mare flexibilitate permit inserarea de cod procedural n baza de date (ceva foarte asemntor cu PHP i Perl). Sunt cteva avantaje care acest fapt le confer: se poate reduce cantitatea de cod necesar pentru aplicaiile de mrime medie; se asigur baza de cunotine (proceduri) pentru execuia interogrilor i tranzaciilor de pe sisteme de operare diferite i din SGBD-uri diferite n ceea ce privete sintaxa.
18
Se pot acum aduga proiectului tabele (fiiere .DBF) sau baze de date (fiiere .DBC). n Project Manager datele sunt grupate pe categorii i prezentate ntr-o form ierarhic. Pentru a urmri un tip de fiier sau obiect se activeaz boxa + a grupului corespunztor. Activnd tabulatorul Data putem restrnge domeniul de vizualizare al componentelor proiectului la nivelul de date, i anume: bazele de date, tabelele, interogrile i vizualizrile. Acionnd unul din butoanele New, Add, Modify, Run, Remove sau Build se alege operaia specific asupra componentei sau categoriei selectate. Aciunile care se pot efectua asupra datelor sunt descrise n continuare.
19
Valori numerice fr zecimale True sau False Text alfanumeric de lungime necunoscut General OLE Foaie de calcul din Excel Parolele unor utilizatori stocate ntr-o Character La fel cu Character dar valorile nu tabel i folosite n diferite ri (Binary) sunt translatate atunci cnd se schimb codul de pagin Scriptul de logare al unui utilizator (n Memo La fel cu Memo dar valorile nu diferite ri) (Binary) sunt translatate cu schimbarea codului de pagin Dac se dorete ca cmpul s accepte introducerea de valori nule, se check-eaz butonul de pe coloana NULL din Table Designer. Pentru a aduga nregistrri n tabel din Project Manager se parcurg urmtorii pai: 1. n Project Manager se selecteaz numele tabelei; 2. Se apas butonul Browse; 3. Din meniu, se selecteaz View/Append Mode; 4. Se introduc valorile noii nregistrri n fereastra Browse;
20
Dac se dorete vizualizarea fiecrui cmp pe linie separat se selecteaz din meniu View/Edit; revenirea la starea anterioar se face tot din meniu View/Browse. n formatul View/Browse fiecare linie reprezint o nregistrare iar fiecare coloan reprezint cmpurile nregistrrii. Se pot crea (dup cum se poate vedea din Project Manager) dou tipuri de tabele: tabelele ncorporate ntr-o baz de date (database table) i tabelele libere (free table), care sunt independente de orice baz de date. Deplasarea ntr-o tabel. Utiliznd barele de defilare orizontale i verticale ne putem deplasa i vizualiza cmpuri diferite i nregistrri diferite. Se pot folosi de asemenea sgeile i TAB-ul. Pentru a accesa o anume nregistrare, pentru a ne deplasa de la o nregistrare la alta, pentru a ajunge la nceputul sau sfritul tabelei se poate accesa din meniu Table/Got o Record > cnd se activeaz un submeniu din care se alege opiunea dorit. Pentru a edita cmpurile de tip Character, Numeric, Logical, Date sau DateTime este suficient s plasm cursorul n celula dorit i s scriem valoarea dorit. Editarea cmpurilor Memo se face cu dublu click n cmpul dorit (sau CTRL+PgDn). Atunci se activeaz o fereastr de editare pentru coninutul cmpului memo. Un cmp general conine un obiect OLE (detalii la http://www.microsoft.com/data/oledb/prodinfo.htm) legat sau ncapsulat. Se poate edita acest obiect cu dublu click n celula sa, cnd se va activa (sau se va ncerca activarea) aplicaiei sale asociate pentru editare. tergerea nregistrrilor. tergerea nregistrrilor dintr-o tabel este un proces n 2 pai n VFP. Primul, marcarea nregistrrilor pentru tergere de exemplu cu click pe boxa din stnga fiecrei nregistrri de ters. Al doilea, din meniu, Table/Remove Deleted Records care va terge nregistrrile marcate pentru tergere. Aceasta este o tergere permanent i nu poate fi restaurat, spre deosebire de prima care este doar o tergere logic i poate fi restaurat prin demarcarea nregistrrilor prin acelai procedeu. Eliminarea nregistrrilor terse va nchide tabela aa nct aceasta trebuie redeschis pentru a putea fi utilizat. Pentru a terge mai multe nregistrri care verific o condiie se poate folosi fereastra de dialog care se activeaz din meniu Table/Delete Records Analog, pentru a restaura nregistrri care verific o condiie se poate accesa din meniu Table/Recall Records... De exemplu, ca n figur, se pot selecta toate nregistrrile care au valoarea UK n cmpul Country, folosind expresia FOR Country = 'UK':
21
Fereastra de Browse se poate configura dup dorin, prin (re)dimensionarea limii coloanelor, activarea sau dezactivarea liniilor de grid sau divizarea ferestrei de Browse n dou poriuni. Aceste operaiuni nu vor afecta structura actual a tabelei. Pentru a modifica structura unei tabele, se alege n Project Manager opiunea Modify. Structura tabelei este ncrcat atunci n Table Designer i utilizatorul are posibilitatea s efectueze modificrile dorite. Pentru a terge un cmp din tabel se selecteaz cmpul i se apas butonul Delete. Afiarea nregistrrilor n fereastra de Browse se poate face selectiv dup o condiie impus nregistrrilor. De asemenea se poate limita accesul la anumite cmpuri ale tabelei prin setarea unui filtru de cmpuri. Pentru impunerea unui filtru, din meniu, Table/Properties:
Odat ce a fost creat o tabel, aceasta se poate ordona pentru a accelera regsirea informaiei prin folosirea indexurilor. Cu indexurile, se pot procesa rapid nregistrrile pentru afiare, interogare sau tiprire. Se pot selecta nregistrri, urmri dac exist valori duplicat ntr-un cmp i suport stabilirea de relaii ntre tabele n cadrul bazelor de date. Un index n VFP este o list de numere de nregistrri care pointeaz ctre nregistrrile corespunztoare i astfel determin ordinea de procesare a nregistrrilor. Un index nu modific ordinea n care nregistrrile sunt stocate n tabel, ci modific doar ordinea n care acestea sunt citite de VFP. Se poate crea mai mult de un index pentru o tabel (fiecare index reprezentnd cte o ordine de procesare a nregistrrilor din tabel). Indexurile care se creaz sunt stocate ntr-un fiier index cu structur compus care este deschis i actualizat oricnd tabela este folosit.
22
Numele fiierului index este identic cu numele tabelei iar extensia sa este .CDX. Un index se poate crea uor, aa nct frecvent se definete cte un index dup fiecare cmp al tabelei. Un index se poate crea dup un cmp sau dup o expresie. Din Project Manager se selecteaz tabela, se apas butonul Modify, apoi n Table Designer se selecteaz tabulatorul Indexes cnd se activeaz o fereastr de forma:
1 2 3
4 n care avem posibilitatea: 1 s modificm numele pentru un index; 4 s alegem tipul indexului dup cum urmeaz:
o index primar (cheie primar) unde doar valori unice sunt permise n cmp i determin ordinea de procesare a nregistrrilor; se pot crea cte un index primar pentru fiecare tabel dintr-o baz de date; dac tabela are deja un index primar, se poate crea atunci un index candidat; o index candidat care de asemenea necesit valori unice i determin ordinea de procesare a nregistrrilor; pot exista mai multe indexuri candidate pentru 1 tabel; o index regular care permite duplicarea valorilor ce intr ntr-un cmp, este folosit pentru a determina ordinea de procesare i poate exista mai mult de 1 index regular pentru o tabel; o index unic pstrat pentru compatibilitate cu versiunile mai vechi care selecteaz i ordoneaz un subset de nregistrri bazat pe prima apariie a unei valori ntr-un cmp specificat; 5 s definim o expresie simpl (format din numele unui cmp) sau compus (o expresie n care intervin nume de cmpuri din tabel) dup cum urmeaz: o cmpurile sunt evaluate n ordinea n care apar n expresie; o operatorul + aplicat la cmpuri numerice va aduna valorile din cmpuri:
23
employ.salary + employ.prime o operatorul + aplicat la cmpuri caracter va concatena irurile de caractere din cmpuri: customer.country + customer.postalcode + customer.company o sunt permise conversiile la tipul ir de caractere prin intermediul funciei STR(): STR(customer.maxordamt,20,4) + customer.company 7 s filtrm nregistrrile supuse indexrii dup o condiie logic: employ.prime > 0 sau customer.country = "Canada" 2 s alegem o ordonare descendent () sau ascendent (); 3 s adugm un nou index; 6 s tergem un index; Indexurile pot ndeplini diferite roluri, n funcie de tipul acestora: Dac vrei s Folosete Ordonezi nregistrrile pentru a mri viteza Un index regular, primar sau candidat de afiare, interogare sau tiprire Controlul intrrii valorilor duplicat ntr-un Un index primar sau candidat pentru tabelele cmp i ordonarea nregistrrilor libere Odat creat, un index poate fi folosit la deschiderea unei tabele, n forma: USE customer ORDER Cust_Id cnd la activarea ferestrei de Browse se vor afia nregistrrile n ordinea specificat.
Obiective: crearea unui proiect (Project Manager); crearea unei baze de date (Database Designer); Implementare: crearea proiectului file; 2. Se exploreaz calculatorul i se alege locul unde se dorete stocarea proiectului pe disc; 3. Se creeaz un director pentru stocarea componentelor proiectului; 4. Se d nume proiectului; fie de exemplu numele Universitati; acesta se va salva pe disc sub numele Universitati.pjx; 1. Din meniu sau din bara de instrumente se selecteaz File/New (File Type: Project)/New
5. Din Project Manager din categoria Data se selecteaz Databases i se apas butonul New i apoi New Database;
25
6. Se introduce un nume pentru noua baz de date din cadrul proiectului; fie aceasta Universitati; aceasta se va salva pe disc sub numele Universitati.dbc; se va ncrca n mod automat aplicaia expert Database Designer; cu ajutorul ei se construiesc tabelele bazei de date i se definesc relaiile ntre tabele; Database Designer mai permite crearea de vederi locale i de la distan, editarea procedurilor stocate n baza de date (baza de cunotine pentru execuia interogrilor i tranzaciilor de pe sisteme de operare diferite i din SGBDuri diferite), realizarea de conectri la distan;
crearea tabelelor Se enumer informaiile care se doresc memorate n baza de date. Acestea ar pute fi:
nume universitate, acronim, adres, nume rector, prorectori, adrese email; se identific faptul c pentru o universitate avem de memorat informaii proprii instituiei (nume, acronim, adresa, pagina web) i informaii despre persoanele aflate la conducerea acesteia (nume, funcie, adresa email). Se desprind astfel n mod natural dou tabele n baza de date: tabela institutii i tabela contacte. 7. Din aplicaia expert Database Designer se selecteaz butonul New Table i apoi din nou New Table; se va lansa n execuie n mod automat aplicaia expert Table Designer; 8. Cu ajutorul aplicaiei Table Designer se creeaz tabela institutii cu structura nume char(80), acronim char(10), adresa char(40), web char (20); aceasta se va salva pe disc cu numele Institutii.dbf;
9. Se apas butonul Ok cnd se activeaz o fereastr de dialog; aici se poate alege dac s se introduc acum informaiile despre instituii sau mai trziu; s alegem introducerea acum;
26
10. Se activeaz o fereastr care permite introducerea informaiilor; se introduc informaiile despre universiti;
11. Din Database Designer se ncarc din nou Table Designer pentru crearea celei de-a doua tabele; 12. Se creeaz tabela Contacte cu structura: nume char(25), functia char(25), email char(32); 13. Se alege s se introduc informaiile despre contacte mai trziu; 14. Se pot acum introduce informaii n tabela Contacte activnd click dreapta pe tabel i selectnd opiunea Browse:
15. Se activeaz o fereastr Browse; se adaug cte o nregistrare (din meniu, Table/Append New Record sau de la tastatur Ctrl+Y); 16. Se dorete stabilirea de relaii ntre instituii i contacte; pentru aceasta este necesar adugarea unor cmpuri numerice n tabele; deoarece la o instituie avem mai multe persoane de contact relaia ntre tabele este de tipul 1 la n; pentru stabilirea relaiei este necesar ca valorile cmpului numeric din tabela institutii (fie acesta nr int) s fie distincte; se modific tabela i se creeaz acest cmp n consecin;
27
17. Se adaug un cmp numeric (de preferin cu acelai nume) n tabela contacte ale cror valori se vor completa innd seama de apartenena persoanelor de contact la instituii; crearea indexurilor
18. Cmpul nr din tabela institutii se numete cheie primar; pentru stabilirea unei relaii 1 la n dup acest cmp tabela va trebui s fie indexat dup acest cmp cu un index primar; din nou aplicm Modify la tabela Institutii i i asociem un index primar cu acelai nume cu cmpul dup care se face indexarea: nr; se folosete aici aplicaia expert Expression Builder; se va memora n mod automat pe disc indexul sub numele Institutii.cdx; 19. Cmpul nr din tabela contacte se numete cheie strin; valorile din aceast coloan a tabelei contacte nu sunt toate diferite ntre ele; dup acest cmp tabela se poate indexa cu un index regular; se creeaz indexul; fie numele acestuia nr; stabilirea relaiei ntre tabele
28
20. Se selecteaz indexul primar i se efectueaz drag and drop cu mouse-ul peste indexul regular (cheia primar peste cheia strin);
Butoanele ... lanseaz aplicaia expert Expression Builder cu ajutorul creia se poate construi expresia pentru regula de validare a datelor, valoarea implicit a cmpului la adugarea unei noi nregistrri i mesajul care se va afia n caz de introducere eronat. O alt posibilitate este de a stabili reguli de validare la nivel de nregistrare ntr-o tabel. Presupunnd c ntr-o tabel angajati avem dou cmpuri data_nastere i data_angajare de tip date atunci se poate stabili urmtoarea regul de validare la nivel de nregistrare: data_angajare >= data_nastere + (18 * 365.25) care s verifice c la angajare viitorul angajat are peste 18 ani: data_angajare >= data_nastere + (18 * 365.25) Varsta minima este 18 ani
29
Incluznd comenzi sau funcii n regulile de validare care ncearc s mute pointerul de nregistrare n zona de lucru se pot provoca erori n stabilirea condiiilor. Se poate defini un nume de cmp care va fi afiat (diferit de numele acestuia din tabel) prin definirea acestuia n caseta de editare Caption din tabulatorul Fields al lui Table Designer:
30
Referential Integrity Builder permite definirea urmtoarelor reguli: Updating Cascade Restrict Ignore Deleting Cascade Restrict Ignore Inserting Restrict Atunci cnd o valoare a cheii primare este modificat actualizeaz toate nregistrrile din tabela cu cheia strin corespunztoare Nu las modificarea valorii cheii primare atunci cnd aceasta are corespondente valori ale cheii strine n tabela cu cheia strin Permite modificrile n tabela cu cheia primar i las nereferite nregistrrile din tabela cu cheia strin Atunci cnd este tears o nregistrare din tabela cu cheia primar terge toate nregistrrile din tabela cu cheia strin a cror valoare a cheii strine corespunde cu valoarea respectiv a cheii primare Nu permite tergerea unei nregistrri din tabela cu cheia primar atunci cnd valoarea cheii acesteia este regsit printre valorile cheii strine din tabela cu cheia strin; Permite tergerile n tabela cu cheia primar i las nereferite nregistrrile din tabela cu cheia strin Atunci cnd o nou nregistrare este adugat sau una existent este modificat n tabela cu cheia strin se verific dac exist valoarea introdus pentru cheia strin printre valorile cheii primare din tabela cu cheia primar i nu permite inserarea sau modificarea dac aceast valoare nu este gsit Permite adugarea sau modificarea fr respectarea integritii refereniale
Ignore
Referential Integrity Builder va genera cod de integritate referenial care va fi inclus n baza de date sub form de proceduri, aa cum se vede din Project Manager.
31
Aplicaie: S se creeze baza de date cu cursanii colii Academice Postuniversitare de Informatic Aplicat i Programare.
Soluie: Se creeaz o baz de date ce conine urmtoarele tabele (n care exprim existena unui index dup cmpul specificat; tipul indexului se va stabili n funcie de tipul relaiei tabelului respectiv cu celelalte n cadrul bazei de date). Fiiere de date 9. Cursuri.dbf COD_CURS DENUMIRE ACRONIM ANUL_UNIV ORE_CURS ORE_LUCR ORE_PROI DURATA 2. Stud.dbf COD_STUD N 5 NUME C 20 INITIALA C 1 PRENUME C 30 NUME_NOU C 20 COD_CENTRU N 5 DATA_NAST D LOCALITATE C 20 JUDET C 20 ADRESA M 10 TELEFON N FORMA_INV C S-scoala M-module
N C C C N N N N
5 70 10 12 2 2 2 2