Fundamentele bazelor de date Arhitectura unei baze de dateIon CozacÎn prezent informația este o componentă esențială în desfășurarea oricărei activități. Deoarece influențează procesul de luare a deciziilor, informația trebuie să fie disponibilă în timp util, corectă, coerentă și neredundantă. Cum satisfacem aceste cerințe în condițiile în care volumul datelor ce trebuie prelucrate este în continuă creștere? Evident, sunt necesare sisteme care să asigure culegerea, memorarea, organizarea, regăsirea și prelucrarea acestora. Aceste activități în informatică sunt legate nemijlocit de noțiunea de baze de date. Acest articol deschide un serial care va prezenta fundamentele bazelor de date. Toate expunerile au un caracter general și nu fac referire la vreun SGBD particular. Vom încerca să dăm în același timp o notă practică tuturor expunerilor, aceasta pentru a ajuta viitorii proiectanți de aplicații de baze de date să găsească soluții cât mai bune pentru problemele care se pun. Structura cursului este următoarea: 1. Arhitectura unei baze de date (articolul prezent); 2. Modelul relațional: noțiunile de domeniu, atribut, relație, cheie primară, cheie externă; probleme legate de integritatea datelor; modelul entitate-legătură; 3. Limbajul SQL (partea I): - descrierea datelor și prelucrarea acestora: inserare, modificare, ștergere; - interogare - instrucțiunea Select SQL; 4. Limbajul SQL (partea a II-a): - instrucțiunea Select SQL - selecții din mai multe tabele și funcții de agregare;
5. Proiectarea bazelor
de date:
- dependențe funcționale și probleme cauzate de acestea; - primele trei forme normale.
Informațiile prezentate în cadrul acestui curs sunt preluate dintr-o lucrare de referință în domeniu: Introduction to DataBase Systems, autor C. J. Date, apărută la Addison-Wesley în 1994. Structura cursului este inspirată parțial din seria de articole care a apărut în primele 5 numere ale revistei PC Report (începând cu octombrie 1992) sub semnătura lui Mircea Sârbu. Informații detaliate despre fundamentele bazelor de date pot fi găsite la adresa http://www.uttgm.ro/~cozac, unde există un curs de baze de date preluat de la Doublin City University, și care urmărește în mare parte lucrarea lui C. J. Date amintită mai sus, precum și un tutorial pentru limbajul SQL. Sperăm să răspundem astfel dorințelor exprimate de mai mulți elevi care doresc să afle informații ce nu se vor perima chiar atât de repede. Avantajele bazelor de dateO bază de date
este o colecție de date persistente, utilizate de sistemul de
aplicații al unei instituții. Colecția de date
este concretizată printr-un ansamblu de fișiere pe disc care
au o anumită stabilitate în timp, deci care nu sunt date de intrare,
de ieșire sau de manevră. Un sistem de gestiune a bazelor
de date (în engleză DBMS: Data
Base Management System) este un pachet
unitar de programe care oferă facilități de descriere a datelor
și de prelucrare a acestora.
Aplicațiile de baze de date se caracterizează în primul rând prin faptul că majoritatea prelucrărilor care se fac sunt cele de memorare și regăsire a datelor, efectuate asupra unor volume mari de date. În general, operațiile de prelucrare sunt destul de simple, spre deosebire de alte domenii ale informaticii. De exemplu, în domeniul tehnic predomină operațiile de calcul cu o complexitate destul de ridicată. Cea mai frecventă operație care apare într-o aplicație de baze de date este aceea de consultare a datelor: într-adevăr, pentru ce creăm o bază de date, dacă nu o folosim? Alte operații care apar pe lângă cea de consultare sunt:
Prin organizarea datelor în baze de date se asigură centralizarea acestora, fapt care conduce la o serie de avantaje:
1. Reducerea redundanței
datelor
Dacă fiecare aplicație lucrează cu fișiere proprii este posibil ca aceleași date să apară de mai multe ori în fișiere diferite. În cazul centralizării datelor, administratorul bazei de date poate organiza datele, astfel încât toate aplicațiile să folosească aceleași fișiere. Astfel, se obține o economie importantă de spațiu de memorie, și nu doar atât.
2. Evitarea inconsistenței datelor Duplicarea datelor în fișiere diferite poate crea probleme la actualizare: este posibil ca prin actualizări parțiale (din omisiune sau datorită unor accidente neprevăzute) să avem valori diferite pentru una și aceeași entitate (de exemplu, un client poate avea mai multe nume și nu mai știm care este cel real).
3. Posibilitatea partajării datelor Se referă la posibilitatea utilizării datelor în comun de către mai mulți utilizatori și la posibilitatea dezvoltării de noi aplicații, folosind datele deja existente.
4. Încurajarea utilizării unor standarde Administratorul bazei de date poate impune alinierea la anumite standarde, fapt care permite ulterior un transfer rapid al datelor de pe o platformă (hardware sau software) pe alta.
5. Posibilitatea protejării datelor Administratorul bazei de date, având un control centralizat al datelor, poate introduce restricții diferite de acces la date pentru fiecare categorie de utilizatori.
6. Menținerea integrității datelor Baza de date trebuie să conțină în permanență date corecte. Aceasta presupune date coerente și plauzibile, fapt care poate fi garantat de procedurile de validare utilizate. 7. Independența datelor Într-o aplicație scrisă într-un limbaj clasic de programare, cunoștințele despre structura datelor și tehnicile de accesare a acestora sunt "zidite" în programe. Orice schimbare în modul de reprezentare sau accesare face imposibilă utilizarea aplicației: trebuie rescrise toate programele care referă aceste date. Independența datelor, garantată de utilizarea bazelor de date, presupune independența aplicației de modul de reprezentare a datelor și de tehnicile de acces utilizate.
Trebuie să facem o precizare: simplul fapt de a utiliza un SGBD în vogă la un moment dat, nu ne garantează automat obținerea acestor avantaje! Administratorul bazei de date trebuie să aibă o viziune de ansamblu asupra problemei care trebuie rezolvată, să cunoască toate datele problemei (datele de intrare, datele de ieșire, modul de prelucrare) și să cunoască facilitățile oferite de SGBD-ul folosit pentru a putea beneficia de avantajele de mai sus. În primul rând trebuie să aibă cunoștințe serioase despre proiectarea aplicațiilor de baze de date. Simplul fapt de a cunoaște "limbajul de programare Fox Pro" (fie el și vizual) - am dat un exemplu la modă - nu e suficient; pe de altă parte poate că uneori nici nu este necesar! Arhitectura unei baze de dateSă luăm un exemplu simplificat
din practică: evidența facturilor într-un magazin.
În cazul în care un client dorește să cumpere niște produse, se întocmește o factură după modelul celei din fig. 1. Ceea ce este prezentat în figura respectivă este un model extern al bazei de date, care descrie modul în care vede vânzătorul datele acesteia. Dacă pe șeful magazinului îl interesează care produse se vând cel mai bine într-o anumită perioadă de timp, atunci el poate primi o situație după modelul din fig. 2.
Modelul extern este cel mai apropiat de utilizator și cuprinde descrierea structurii logice a datelor referitoare la aplicațiile fiecărui utilizator. Observăm că fiecare utilizator vede altfel baza de date, deși ea este unică și este memorată într-un mod ascuns tuturor.
Modelul conceptual cuprinde descrierea structurii datelor și a legăturilor dintre acestea pentru întreaga bază de date. În fig. 3 este prezentat modelul conceptual al bazei de date pentru problema evidenței facturilor. Baza de date se compune din patru tabele (Clienti, Produse, Facturi, Detalii) și pentru fiecare tabelă este prezentată structura acesteia, cu alte cuvinte câmpurile care o descriu. Câmpurile cheie care servesc la identificarea unică a fiecărei înregistrări din tabelă sunt marcate cu (*). Astfel, pentru tabela Clienti cheia primară este Codcl, pentru Produse: Codpr, pentru Facturi: Nrfact; pentru tabela Detalii ea este formată din două câmpuri: Nrfact și Codpr. Legăturile dintre tabelele componente se văd ușor, deoarece s-a folosit aceleași nume pentru câmpurile care asigură aceste legături. Modelul conceptual este independent de modul de memorare a datelor, fapt care garantează independența datelor. Să remarcăm faptul că în fig. 3 nu se precizează tipul câmpurilor pentru nici o tabelă.
Modelul intern definește modul de memorare a datelor și tehnicile de accesare a acestora. La acest nivel se definește, pentru fiecare câmp, modul de reprezentare internă (dacă este șir de caractere, întreg binar, zecimal extern, boolean etc.). Baza de date apare ca o colecție de fișiere având diferite moduri de organizare (liste înlănțuite, B-arbori etc.), fișierele conținând datele care formează baza de date. Acest nivel este cel mai apropiat de sistemul de operare. Scopurile urmărite în alegerea modelului intern sunt minimizarea spațiului utilizat și a timpilor de acces la date. Despre accesul la date se pot citi câteva comentarii în articole publicate anul trecut despre tehnici de indexare bazate pe B-arbori și hărți de biți.
Fig.4 Arhitectura unei baze de date În fig. 4 este prezentată o vedere de ansamblu a arhitecturii unei baze de date. De ce este oare necesară o arhitectură atât de complexă? Drumul pe care l-a parcurs activitatea de prelucrare a volumelor mari de date a fost destul de lung și de sinuos. S-a urmărit o simplificare pe două planuri: pe de o parte accesul utilizatorului la date, pe de altă parte proiectarea aplicațiilor. Cum rezolvă SGBD-ul o cerere de acces pe care o face un utilizator? SGBD-ul interpretează această cerere în conformitate cu modelul extern al utilizatorului respectiv și găsește corespondența dintre modelul extern al acestuia și modelul conceptual. În continuare determină componentele modelului conceptual care vor interveni în rezolvarea cererii și face un acces la acestea pe baza corespondenței dintre modelul conceptual și modelul intern. După ce au fost identificate toate datele necesare, se revine din nou la modelul extern, acestea sunt integrate și prezentate în final utilizatorului. Trebuie să precizăm faptul că în practică modelul prezentat mai sus nu este întotdeauna respectat intregral. Multe SGBD-uri nu fac o distincție netă între modelul conceptual și cel intern. Scopul pe care l-am urmărit în expunerea de față este de a pune în evidență acea parte a bazei de date care, prin stabilitatea ei, garantează independența aplicațiilor față de structura datelor și coerența informațiilor memorate în baza de date.
Vom vedea în articolele următoare (prezentarea limbajului SQL) faptul că atunci când se descrie o componentă a unei baze de date se precizează pentru fiecare câmp și tipul acestuia. Acest lucru este firesc, deoarece atunci când proiectăm o bază de date avem în vedere și operațiile de prelucrare care se vor face. Dacă avem de efectuat operații aritmetice (adunări, scăderi, înmulțiri etc.), atunci operanzii trebuie să fie neapărat de tip numeric, ei nu pot fi șiruri de caractere! Modelul conceptual este inima oricărei baze de date și de aceea proiectarea acestuia este deosebit de importantă, deoarece de felul în care este rezolvată această problemă depinde soarta aplicațiilor care vor exploata baza de date. Dacă acesta este atent proiectat, aplicațiile se vor realiza relativ ușor și vor fi fiabile. În caz contrar vor apărea mereu probleme pentru rezolvarea cărora va trebui să apelăm de multe ori la improvizații. Administratorul bazei de dateO persoană sau un grup de persoane care răspunde de ansamblul activităților legate de baza de date se numește administrator
al bazei de date. Problemele pe care le rezolvă sunt următoarele:
- decide care informații vor fi stocate în baza de date; Pe baza informațiilor pe care le primește de la viitorii beneficiari (utilizatori) ai bazei de date identifică ce entități prezintă interes pentru buna desfășurare a activităților instituției, și care dintre informațiile ce caracterizează aceste entități trebuie memorate. În acest moment el este în măsură să proiecteze schema conceptuală.
- decide structura datelor care vor fi memorate și tehnicile de accesare Administratorul bazei de date trebuie să urmărească stabilirea unui raport optim al spațiului de memorare/timpi de acces. Modelul intern este proiectat pe baza unei estimări a evoluției volumului de date, frecvenței accesării lor, a implicațiilor acestora în prelucrări.
- proiectează modelele externe pentru fiecare categorie de utilizatori Administratorul bazei de date se informează în legătură cu cerințele acestora și eventual balansează cerințele conflictuale. Aceasta se realizează printr-o alegere atentă a modelului intern.
- definește strategia de garantare a integrității datelor Există posibilitatea ca baza de date să nu mai fie operațională la un moment dat, din cauza unor erori în operare, a unor pene hard sau din alte cauze neprevăzute. Este foarte important pentru instituție ca baza de date să fie refăcută într-un timp cât mai scurt și cu pierderi minime de informații. În acest scop administratorul bazei de date elaborează strategii de salvare periodică a bazei de date și de refacere a acesteia (parțială sau în întregime) pe baza unor copii de siguranță.
- monitorizează performanțele sistemului Pentru a obține o creștere a eficienței aplicațiilor urmărește modul de utilizare a resurselor și depistează factorii care limitează performanțele sistemului. El determină o planificare a funcționării sistemului pentru a maximiza performanțele acestuia.
Un set minimal de unelte pe care le folosește administratorul bazei de date în munca sa sunt:
Ion Cozac este lector la Universitatea "Petru Maior" din Târgu-Mureș și poate fi contactat prin e-mail la adresa: cozac@uttgm.ro [cuprins] |