Documente Academic
Documente Profesional
Documente Cultură
(note de curs)
1
Organizarea datelor. Concepte de bază
Afluxul fără precedent de informaţie de diferite tipuri şi pe diverse canale, necesită strategii
şi instrumente din ce in ce mai complexe pentru stocare, procesare şi, mai ales, interpretare. Din
acest motiv apare nevoia de a transforma informaţia în date şi organizarea acestora într-o asemenea
manieră încât în orice moment să poată fi extrasă informația dorită.
Datele sunt luate din lumea reală prin măsurători şi observaţii. Datele în sine nu au nici un
fel de semnificaţie, nefiind altceva decât o înşiruire de litere şi cifre. Acestea rămân în aceeaşi
stare până în momentul modificării lor de către administratorul bazei de date.
Informaţiile reprezintă date organizate, date care au fost filtrate şi ordonate după anumite
criterii. Pentru a face diferenţa dintre date şi informaţii, Hernandez propune următoarea axiomă:
Datele reprezintă ceea ce se înmagazinează; informaţia reprezintă ceea ce se extrage.
Dorinţa oricărui utilizator este obţinerea de informaţii şi nu manipularea unor date seci. Un
model de date corect alcătuit oferă posibilitatea transformării informaţiilor în date şi a acestora
înapoi în informaţii fără a denatura sensul lor iniţial. Pentru ca datele să poată fi transformate în
informaţie ele trebuie organizate astfel încât să poată fi prelucrate. Pentru a determina în cazul
unei aplicaţii modul de organizare a datelor, trebuie determinate acele caracteristici ale datelor
care permit extragerea esenţei înţelesului lor.
Prima etapă în evolutia organizarii si prelucrarii datelor o reprezinta fisierul. Un fisier consta intr-
un ansamblu de inregistrari fizice. In aceasta etapa datele sunt organizate sub forma de fisiere
secventiale stocate pe benzi magnetice (ca suport de memorare). Structura logica si structura fizica sunt
similare, neexistand o diferenta clara intre acestea. Modul de proiectare a datelor este realizat in scopul
de a deservi in principal unei singure aplicatii, aceasta fiind dependenta de date si ca urmare, in cazul
aparitiei unor modificari in structura datelor, acest fapt determina modificari si asupra programului
(aplicatiei).
A doua etapa este marcata de separarea structurii logice de cea fizica, posibila prin independenta
fizica a datelor. Sunt utilizate fisiere secvential-indexate, si cu acces direct, avand ca suport de
2
memorare discul magnetic. Separarea celor doua structuri asigura independenta aplicatiilor atat fata de
echipamentele hardware cat si fata de modul de organizare a fisierelor. Aceasta inseamna ca se pot schimba
dispozitivele de memorare fara a afecta aplicatiile, iar aceasta schimbare afecteaza, eventual, doar
structura fizica a datelor, nu si structura logica. In aceasta etapa apar primele facilitati simple de protectie a
datelor.
Etapa a treia marcheaza aparitia fisierelor integrate. Organizarea datelor sub forma fisierelor
integrate reduce redundanta datelor, fiind posibila utilizarea in comun a celorasi date fizice de catre mai
multe aplicatii. Integrarea fisierelor determina o structura logica care sa corespunda cerintelor tuturor
aplicatiilor. Aceste structuri integrate constituie originea notiunii de model conceptual din cadrul bazelor
de date actuale. El contine descrierea tuturor datelor si a legaturilor dintre ele.
Etapa a patra este etapa bazelor de date propriu-zise. Odata cu utilizarea fisierelor integrate, ce
confera mai multor aplicatii accesul la aceleasi date, a aparut si necesitatea realizarii aplicatiilor
independent de structura logica a datelor. Desprinderea din cadrul aplicatiilor a descrierii structurilor de
date determina crearea modelului extern. Astfel, pe langa independenta fizica a datelor se adauga si
independenta logica, in sensul ca sunt posibile modificari in structura logica a unei baze de date, fara ca
acestea sa afecteze aplicatiile. Tot in aceasta etapa apar tehnici si proceduri speciale pentru protectia si
securitatea datelor, si de asemenea si functia de administrare a bazei de date, iar redundanta datelor este
redusa la minim.
Un fişier secvenţial este foarte util la prelucrarea înregistrărilor aflate într-o ordine
predefinită pe baza unei chei de căutare.
Înregistrările din cadrul unui astfel de fişier sunt asociate pe baza unor pointeri ce permit
extragerea rapidă a datelor pe baza cheii de căutare. Înregistrările sunt înmagazinate fizic în
ordinea stabilită pe baza cheii de căutare, ceea ce duce la minimizarea numărului de blocuri ce
trebuie accesate, însă este dificil de păstrat această ordine pe măsură ce se fac introduceri sau
ştergeri de înregistrări.
Ştergerile pot fi gestionate cu ajutorul lanţului de pointeri, dar inserările pun probleme dacă
nu există spaţiu în locul în care trebuie plasate înregistrările. În cazul în care spaţiul necesar plasării
unei noi înregistrări este disponibil în locul indicat, înregistrarea poate fi plasată în acel loc, altfel
ea trebuie plasată în alt loc, iar pointerii trebuie reorganizaţi. În această situaţie anumite înregistrări
nu se vor afla în ordinea fizică specificată. Dacă numărul de înregistrări care nu se află în ordinea
fizică specificată este mic, nu vor exista probleme deosebite, dar dacă acest număr creşte prea mult
pointerii trebuie reorganizaţi, ceea ce presupune un mare consum de resurse şi, prin urmare, astfel
de operaţii trebuie efectuate numai atunci când sistemul nu este deloc sau este slab solicitat. Dacă
inserările se fac rar, fişierul poate fi păstrat în ordinea fizică stabilită iniţial, reorganizarea
pointerilor făcându-se la apariţia oricărei noi inserări, caz în care nu mai sunt necesare câmpurile
de pointeri.
3
Dezavantajele sistemelor de prelucrare bazate pe fisiere
Redundanta si inconsistenta a datelor (cum pot fi actualizate datele din toate fisierele?)
Dificultati în accesarea datelor (necesitatea unor noi programe de aplicatie?)
Izolarea datelor (diferite formate, diferite fisiere)
Imposibilitatea controlului concurentei (utilizatori multipli)
Probleme de securitate
Probleme de integritate a datelor (satisfacerea constrângerilor?)
Definitia datelor este încorporata în programele aplicatie
Nu exista controlul accesului si manipularii datelor
Dependenţa datelor
Structura fizică şi stocarea fişierelor de date şi înregistrărilor sunt definite în codul aplicaţiei.
Aceasta înseamnă că orice modificare efectuată în structura existentă impune scrierea unui
program de tip exe-off (adică un program ce este rulat o singură dată, după care poate fi înlăturat).
Acest program trebuie:
să deschidă fişierul iniţial pentru a fi citit;
să creeze un fişier temporar cu noua structură;
să citească o înregistrare din fişierul iniţial, să transforme datele pentru a le încadra în noua
structură şi să scrie fişierul temporar. Acest lucru trebuie repetat pentru toate înregistrările
din fişierul iniţial;
să şteargă fişierul iniţial;
să redenumească fişierul temporar cu numele fişierului iniţial;
să modifice toate programele ce apelează fişierul iniţial pentru a se conforma noii structuri.
Toate aceste operaţii necesită mult timp şi sunt supuse pericolului de apariţie a erorilor. Dacă
structura unui fişier trebuie modificată, trebuie modificat şi programul care îl foloseşte.
4
Interogarea statică a programelor aplicaţie
În cazul în care apar noi cereri de interogare a datelor aflate în fişiere, trebuie rescrise
programele existente, deoarece, altfel, nu se poate răspunde decât la întrebările existente. În cazul
rescrierii programelor pot apare următoarele deficienţe:
documentaţie limitată şi dificil de întreţinut;
afectarea securităţii şi integrităţii datelor;
refacerea datelor după defectarea sistemului e limitată sau inexistentă;
accesul la fişiere e restrâns la câte un utilizator odată.
În concluzie, limitările tratării bazate pe fişiere se datorează faptului că definiţia datelor este
încorporată în programele aplicaţie, în loc să fie stocată separat şi independent și faptului că nu
există control al accesului şi manipulării datelor, în afara celui impus de către programele aplicaţie.
Independenta logica a datelor se refera la posibilitatea de a face modificari in structura logica a bazei
de date; este strans legata de problema adaugarii de noi entitati logice (fie ele campuri sau inregistrari)
la structura bazei de date si de modificarea relatiilor existente intre ele. In acest sens este posibila
dezvoltarea bazei de date prin definirea de noi campuri sau inregistrari si adaugarea de date. Singura
problema nerezolvabila este eliminarea de entitati din baza de date, aceasta avand repercursiuni
asupra utilizatorilor care fac referire la acea entitate eliminata. Prin independenta logica a datelor se
urmareste ca pentru fiecare utilizator se sa creeze impresia ca el este singurul beneficiar al unor date pe care,
in realitate, le foloseste in comun cu alti utilizatori. Independenta logica a datelor este mult mai greu de
realizat decat cea fizica, depinzand in mare masura de modelul de date folosit (ierarhic, retea, relational).
5
Domenii de utilizare a bazelor de date:
Tranzactii bancare
Linii aeriene: rezervari, planificari
Universitati: evidenta studentilor, situatia scolara…
Vânzari: evidenta clienti, produse, cumparari
Urmarirea productiei: productie, inventar, comenzi, lantul de furnizori
Resurse umane: înregistrarea angajatilor, salarizare, etc…
Aplicații GIS
etc.
Nivelul conceptual (modelul conceptual, schema conceptuala) este o abstractizare a unei parti
din lumea reala, si descrie structura logica a datelor (ce date sunt stocate într-o baza de date si
relatiile dintre acestea, prin specificarea unor constrângeri). Acesta realizează independenta fizică
a datelor.
Modelul conceptual specifica ce anume poate face parte din baza de date, respectiv ceea ce nu poate
face parte. Acest lucru este realizabil prin specificarea unor constrangeri explicite. Constrangerile se refera
la restrictii asupra valorilor pe care le pot lua datele si sunt declarate in descrierea modelului conceptual.
Daca o operatie de actualizare conduce la violarea vreunei constrangeri, atunci executia acesteia este oprita.
Prin modelul conceptual este realizata independenta fizica a datelor. Modelului conceptual i se
asociaza o transformare care defineste modul in care structura logica de date este transpusa in structura
fizica de memorare.
Nivelul extern (modelul extern, subschema, imaginea bazei de date) reprezintă vederea
utilizatorului asupra bazei de date. Descrie acea parte a bazei de date care este relevanta pentru
fiecare utilizator. Acest nivel cuprinde unitati logice din modelul conceptual si unitati logice care
6
nu exista in modelul conceptual si care nu au corespondent direct in baza de date fizica - unitati
logice virtuale. Acest nivel asigură independenta logica a datelor. Fiecarui utilizator îi corespunde
un model extern propriu, individualizat in raport cu cerintele specifice. Termenul folosit pentru
modelul extern este vedere.
Utilizarea acestora asigura securitatea bazei de date prin limitarea accesului la date a anumitor
categorii de utilizatori, pe de alta parte un utilizator poate avea drepturi de acces diferite in cadrul mai
multor vederi. O alta functie a vederilor este aceea ca fiind individualizate si oferind o forma simplificata
asupra bazei de date, ele ascund utilizatorului acele parti din descrierea bazei de date care nu-l intereseaza
pe acesta.
Prin modelul extern se realizeaza independenta logica a datelor. Fiecare vedere are ca si
corespondent a descriere a unitatilor logice din modelul conceptual. Aceasta descriere defineste
transformarile prin care structura logica de la nivelul conceptual devine model extern.
Diferenţa dintre conceptul de fişier şi cel de bază de date este reprezentată în figurile
următoare:
7
Date fişier 1 Rezultat 1
Aplicaţie 1
Date fişier 1
Aplicaţie 2 Rezultat 2
Date fişier 1
Aplicaţie 2 Rezultat 2
Date fişier 1
Un SGBD se constituie ca un intreg ansamblu software care trateaza toate cererile de acces ale
utilizatorilor la baza de date. El actioneaza ca o interfata care permite crearea, actualizarea si
consultarea bazei de date.
O cerere de acces la baza de date este formulata de catre utilizator, este interceptata de catre SGBD si
interpretata de catre o componenta a acestuia (LMD - limbaj de manipulare a datelor), rezultand o
reprezentare in format intern a interogarii. In continuare interogarea parcurge o serie de etape
8
succesive de prelucrare, rezulta o serie de comenzi de acces la fisierele fizice din baza de date. Cererile
de acces la fisierele fizice, rezultate din transformarea interogarii, sunt prelucrate si rezolvate de catre un
sistem de gestiune al fisierelor. Datele extrase din fisierele fizice, sub forma unor siruri de biti, parcurg apoi
calea inversa, rezultatul fiind un raspuns formulat sub forma de tabele, rapoarte, etc.
Din punct de vedere conceptual, gestiunea bazelor de date se bazează pe ideea separării
structurii bazei de date de conţinutul acesteia.
Structura bazei de date reprezintă o colecţie de descrieri statice ale tipurilor de entităţi
împreună cu relaţiile logice stabilite între ele.
Relaţiile logice reprezintă asociaţiile dintre mai multe entităţi.
O entitate este un obiect distinct ce trebuie reprezentat în baza de date.
Un atribut este o proprietate ce descrie un anumit aspect al obiectului ce se înregistrează în
baza de date.
Scopul unui sistem de gestiune al unei baze de date este acela de a oferi un mediu care să fie
şi convenabil, dar şi eficient pentru a putea fi folosit la:
extragerea informaţiilor din baza de date;
înmagazinarea datelor în baza de date.
Bazele de date sunt de obicei folosite la gestionarea unei mari cantităţi de date, ceea ce
presupune existenţa următoarelor funcții pentru un SGBD:
descrierea datelor,
actualizarea si interogarea bazei de date,
conversia datelor dintr-un format intr-altul,
asigurarea controlului integritatii, concurentei si securitatii datelor.
Descrierea datelor
SGBD-ul trebuie sa fie capabil sa defineasca datele prin intermediul unui limbaj specializat DDL
(Description Data Language) intr-o forma unificata numita schema sursa si apoi sa compileze aceasta schema
intr-o forma interna numita schema obiect.
Cele 3 niveluri de descriere a datelor (extern, conceptual si intern) si procedurile de trecere dintr-
unul in altul sunt inregistrate in dictionarul de date, unde informatiile sunt memorate in format sursa si
obiect (compilat). Un dictionar de date organizat sub forma de baza de date se numeste metabaza.
SGBD-urile poseda un compilator (analizor) de cereri de interogare, care permite analiza sintactica si
evaluarea iterogarii. Pentru validarea interogarilor este folosit dictionarul de date. Interogarile sunt
descompuse in operatori relationali, pe care ii structureaza sub forma de arbore, in care nodurile
reprezinta operatorii iar elementele de pe ultimul nivel reprezinta relatiile.
O cerere de interogare este apoi optimizata in vederea executiei. Dupa procesul de optimizare,
cererile sunt transformate in tranzactii care vor fi executate, avandu-se in vedere doua aspecte:
gestiunea tranzactiilor concurente
executia propriu-zisa.
9
Conversia datelor
Consta in posibilitatile pe care SGBD-ul le ofera pentru trecerea datelor intre cele 3 niveluri: extern,
conceptual si intern. Pentru aceasta SGBD-ul trebuie sa cunoasca corespondentele existente intre niveluri.
Securitatea datelor
Un SGBD trebuie sa garanteze securitatea datelor. Acest lucru se realizeaza printr-un mecanism de
control al drepturilor de acces la date si de restaurare a bazei de date in caz de erori.
Orice sistem de gestiune al bazelor de date oferă facilitati de descriere a datelor prin
intermediul limbajului de descriere a datelor(DDL) și facilitati de manipulare a datelor prin
limbajul de manipulare a datelor (DML).
Un SGBD mai ofera accesul controlat la baza de date, un mecanism de vizualizare, o colectie
de utilitare: editoare de rapoarte, generatoare de aplicatii, programe asistent, module de proiectare,
posibilitati de dezvoltare a unor aplicattii de tip CASE, etc.
Componentele unui sistem de gestiune al bazelor de date pot fi: hardware, software, date,
proceduri, resurse umane
10
Componenta hardware poate fi reprezentată de un singur calculator personal, un singur
calculator mainframe sau o reţea de calculatoare. De obicei, într-o reţea de calculatoare, se aplică
schema client-server, schemă în care programele back-end reprezintă serverul iar cele front-end
reprezintă clienţii.
12
- îmbunătăţeşte integritatea;
- monitorizează operaţiile efectuate asupra bazei de date.
3. Asigurarea tranzacţiilor
Tranzacţia reprezintă un set de acţiuni prin care se accesează sau se modifică conţinuturile
bazei de date. Dacă tranzacţia eşuează (nu s-au efectuat toate modificările, sau modificările nu s-
au efectuat în toate cazurile) baza de date devine incoerentă şi, ca urmare, trebuie avut în vedere
un mecanism care să anuleze toate modificările efectuate în cadrul tranzacţiei şi să aducă baza de
date în ultima stare coerentă anterioară începerii tranzacţiei.
4. Asigurarea serviciilor de control concurente
Sistemul de gestiune al bazei de date trebuie să garanteze că nu vor avea loc interferenţe
atunci când mai mulţi utilizatori accesează baza de date.
5. Asigurarea serviciilor de reconstituire
În cazul în care în timpul funcţionării sistemului au avut loc defecţiuni de natură hardware
sau software, acesta trebuie readus într-o stare coerentă.
6. Asigurarea serviciilor de autorizare
În cazul în care în timpul funcţionării utilizatorii încearcă intenţionat sau accidental să
acceseze date pe care nu au dreptul să le prelucreze, sistemul de gestiune al bazei de date trebuie
să intervină.
7. Asigurarea unui suport pentru comunicarea datelor
Utilizatorii trebuie să poată accesa o bază de date centralizată de la locaţii aflate la distanţă.
8. Asigurarea serviciilor de integritate
Integritatea bazei de date se referă la corectitudinea şi coerenţa datelor stocate şi se exprimă
sub forma unor constrângeri care reprezintă regulile de coerenţă pe care baza de date nu are voie
să le încalce.
9. Asigurarea serviciilor pentru promovarea independenţei de date
Independenţa de date este obţinută printr-un mecanism de vedere sau subschemă. Completa
independenţă logică de date este dificil de obţinut. De obicei se pot adăuga entităţi, atribute, relaţii,
dar eliminarea lor nu este întotdeauna posibilă.
10. Asigurarea de servicii utilitare
Serviciile utilitare ajută la administrarea bazei de date. Câteva astfel de exemple sunt
următoarele:
- facilităţi de import;
- facilităţi de monitorizare, pentru urmărirea utilizării;
- programe de analiză statistică;
- facilităţi de reorganizare a indecşilor;
- compactarea şi realocarea spaţiului eliberat prin îndepărtarea unor înregistrări din
dispozitivele de stocare.
14
Modele de reprezentare a bazelor de date
Asa cum a fost precizat anterior, datele in sine nu constituie informatie. Pentru a putea fi
utile, ele trebuie organizate intr-un anumit mod. Modelarea datelor urmareste exact acest mod de a
organiza datele astfel incat ele sa reprezinte cat mai fidel situatia reala si sa fie adaptate reprezentarii si
prelucrarii electronice.
Un model este o abstractizare şi o structură ce simbolizează toate caracteristicile entităţilor
esenţiale ce prezintă interes pentru utilizator, o reprezentare şi o reflectare a lumii reale.
Un model de date reprezintă o colecţie integrată de concepte necesare descrierii datelor,
relaţiilor dintre ele, precum şi a constrângerilor asupra datelor (Connolly ş.a. 1998).
Un model de date este alcătuit din trei elemente de bază: entităţi, atribute, relaţii.
O entitate reprezintă un obiect sau concept din lumea reală, cum ar fi de exemplu un student
sau un curs descris în cadrul bazei de date.
Un atribut reprezintă acele caracteristici ce descriu aspecte sau condiţii ale unei entităţi,
cum ar fi de exemplu numele studentului sau situaţia acestuia.
Relaţia stabilită între două sau mai multe entităţi reprezintă o interacţiune între acele entităţi,
cum ar fi de exemplu asocierea dintre un student şi cursul pe care îl urmează.
Modelul ierarhic
A fost primul model utilizat in bazele de date, avand la baza structura arborescenta, in care nodul
parinte poate avea mai multe noduri copil, in timp ce un nod copil poate avea doar un singur nod parinte.
Acest model se bazeaza pe relatii de tip parinte-copil. Modelul de date ierarhic foloseste doua forme de
structurare a datelor: tipurile de inregistrari (pentru reprezentarea tipurilor de entitati) si legaturile
(pentru reprezentarea relatiilor intre multimi de entitati).
Modelul retea
Modelul retea are la baza structura de tip retea. Acest model este similar cu modelul ierarhic, un nod
parinte putand avea mai multi copii, deosebirea constand in faptul ca un nod copil poate avea mai multi
parinti. Reprezentarea modelului de date retea se realizeaza tot prin intermediul diagramelor de structura,
care se aseamana cu un graf, nodurile fiind inlocuite de tipurile de inregistrare.
Modelul relational
Este modelul conceptual cel mai des folosit de SGBD-uri. Sistemul care permite gestionarea bazelor
de date relationale se numeste sistem de gestiune a bazelor de date relationale - SGBDR.
15
Bazele de date relaționale
O baza de date relationala este alcatuita din mai multe tabele intre care se pot stabili relatii. Un tabel
contine inregistrari (randuri).
O inregistrare este alcatuita din mai multe campuri (coloane sau atribute).
In teoria relationala, intr-un tabel, inregistrarile nu se pot repeta. Liniile sunt identificate prin
valorile atributelor care le compun.
O cheie este un câmp ce are o valoare unică, corespunzătoare fiecărei înregistrări dintr-un
tabel. Sunt mai multe tipuri de chei, fiecare având propriile caracteristici.
Cheia candidat - este un atribut sau un set de atribute ce identifică în mod unic un tuplu
dintr-un tabel. O cheie candidata trebuie sa respecte trei conditii: sa fie unica (unicitatea se refera la
faptul ca o cheie identifica in mod unic o inregistrare), sa nu aiba valori nule (atributele care compun cheia
trebuie sa aiba valori nenule) si sa aiba o compozitie minimala.
Cheia primară - reprezintă una dintre cheile candidat desemnate în cadrul unui tabel. Orice
tabel trebuie să aiba o cheie primară.
O cheie primară trebuie să fie:
1. Stabilă. Valoarea unei chei primare nu trebuie să se modifice sau să devină nulă pe tot
parcursul existenţei unei entităţi (Brooks, 1992). O cheie primară stabilă ajută la păstrarea unui
model stabil (Whitener, 1989). De exemplu, dacă se analizează înregistrarea datelor unui
student, valoarea cheii primare nu trebuie să se modifice în timp, aşa cum se întâmplă cu
valorile din câmpul în care se păstrează vârsta acestuia.
2. Minimală. Cheia primară trebuie să fie alcătuită dintr-un număr minim de câmpuri ce sunt
capabile să asigure unicitatea.
3. Centrată pe date, nu pe informaţii. Nu trebuie să apară grupări de caracteristici în cadrul unei
valori a unei chei ce păstrează meta-informaţii adiţionale, deoarece nu se respectă principiul
atomicităţii atributelor, crescând astfel posibilitatea ca valorile cheii primare să se modifice.
4. Definitivă. În momentul introducerii unei noi înregistrări, trebuie să existe posibilitatea
introducerii unei valori. Cheia primară acţionează ca un mecanism de constrângere
suplimentară a entităţii deoarece nu poate fi introdusă o instanţă a unui tip de entitate dacă
aceasta nu are o valoare permisă în cheia primară.
5. Accesibilă. Oricine doreşte să creeze, citească, sau şteargă o înregistrare trebuie să poată
vizualiza valoarea cheii primare (Whitener, 1989).
Cheie alternativă - este o cheie candidat ce nu a fost desemnată drept cheie primară. Ea
poate deveni cheie primară dacă cheia primară aleasă iniţial nu mai corespunde la un moment dat.
Cheie externă - există doar în situaţia în care se stabilesc două sau mai multe relaţii între
tabelele bazei de date. Un atribut al unui tabel trebuie să existe şi în celălalt tabel legat de primul
printr-o relaţie.
Un astfel de model este simplu deoarece el poate fi descris cu ajutorul unui număr mic de
concepte care se referă la relaţii (structuri de date bidimensionale ce au proprietăţi speciale),
rânduri (datele aflate în cadrul relaţiilor), coloane (câmpurile datelor din rândurile
corespunzătoare) şi chei (mecanismul de identificare şi asociere a rândurilor aflate în unul sau mai
multe tabele).
Modelul relaţional are un suport teoretic foarte solid deoarece se bazează pe teoria
matematică a relațiilor între mulțimi, ceea ce înseamnă faptul că toate operaţiile sunt încheiate
cu succes, iar rezultatele operaţiilor sunt predictibile.
Cele trei componente ale modelului relaţional sunt:
a. componenta de structură a datelor (relaţii cu proprietăţi speciale);
b. componenta de manipulare a datelor (operaţii predefinite prin care tehnologia relaţională
foloseşte un optimizator inteligent pentru a găsi calea de acces la date);
c. componenta de integritate a datelor (reguli necesare protecţiei datelor la efectuarea unor
operaţii incorecte).
16
Principalul avantaj al modelului relaţional este acela că nu este necesară utilizarea atât a
pointerilor cât şi a datelor în cadrul tabelelor, folosind în schimb relaţii pentru a accesa valori
corespondente din mai multe tabele.
O relaţie constă dintr-o asociere între înregistrările aflate în două tabele ce au aceleaşi valori
ale atributelor. Deoarece tabelele relaţionale nu conţin pointeri, datele aflate în astfel de tabele
sunt independente de metodele folosite de către sistemul de gestiune al datelor în lucrul cu
înregistrările tabelelor.
Modelul de date relaţional foloseşte tabele bidimensionale ce reprezintă entităţile şi constă
din rânduri şi coloane. O coloană reprezintă un atribut al unei entităţi ce mai poartă şi denumirea
de câmp sau proprietate. Un rând reprezintă un tuplu care este o instanţă a unui tip de entitate sau
de relaţie sau orice altceva din baza de date. De obicei una dintre coloanele tabelului este numită
cheie primară şi are o valoare unică (Brown, The Relational Model).
Simplitatea modelului bazei de date relaţionale constă din simplitatea conceptelor cu care
operează: structuri simple şi abstracte de date, independenţa fizică de date, cadrul puternic, general
şi realist oferit aplicaţiilor ş.a.m.d.
Modelul relaţional oferă o interfaţă flexibilă ce este prevăzută cu cele mai potrivite
componente necesare oricărui utilizator la toate nivelele, oferind o mare independenţă a datelor
(produsul obţinut este relativ independent de implementarea internă).
Baza de date relaţională constă din unul sau mai multe relaţii sau tabele. Principalele
concepte ale modelului relaţional sunt:
1. Atributul – este o coloană ce are un nume propriu şi unic într-o relaţie (câmp). Fiecare relaţie
conţine o listă de atribute (sau coloane) definite pe un anumit domeniu.
2. Domeniul – reprezintă setul posibil de valori pe care îl poate avea unul sau mai multe atribute.
Utilizatorul poate defini domeniul de definiţie, dar numai în anumite produse îşi poate defini
propriile domenii.
3. Tuplu – un rând din cadrul unei relaţii (înregistrare). Un rând dintr-un tabel reprezintă
asocierea dintre seturile de valori. Fiecare relaţie conţine un set de tupluri (sau rânduri).
4. Intensia – structura unei relaţii împreună cu specificaţiile şi constrângerile de domeniu
aplicate. Se modifică rar.
5. Extensia – starea relaţiei (valorile din cadrul unei relaţii se pot modifica). Reprezintă conţinutul
curent al bazei de date ce corespunde schemei bazei de date şi se modifică frecvent.
6. Gradul – numărul de atribute dintr-o relaţie.
7. Cardinalitatea – numărul de tupluri dintr-o relaţie.
8. Baza de date relaţională – reprezintă o colecţie de relaţii ce pot fi modificate (tabele). O astfel
de colecţie este descrisă sub forma unui set de scheme de relaţii din cadrul bazei de date,
numite scheme relaţionale ale bazei de date. Relaţiile sunt alcătuite din două părţi:
- instanţa – un tabel cu rânduri şi coloane;
- schema – specifică numele relaţiei împreună cu numele şi tipul fiecărei coloane.
Termenul de relaţie este folosit în sensul său matematic acceptat:
Se dă o schemă de relaţie R r A1 , ..., An pe un set de domenii D1 , D2 ..., Dn . O relaţie
n-ară r reprezintă un subset al produsului cartezian al acestor domenii: D1 D2 ... Dn .
Proprietăţile unei relaţii sunt:
relaţiile sunt alcătuite din rânduri şi coloane;
într-o relaţie nu are importanţă ordinea de apariţie a rândurilor sau coloanelor;
între tabele nu există o asociere explicită (nici una vizibilă cuiva care accesează datele);
fiecare înregistrare poate fi identificată în mod unic;
17
fiecare rând din cadrul unui tabel are acelaşi set de coloane;
fiecare coloană are un singur tip de dată (nu sunt acceptate redefiniri pentru diferite valori).
Datorită acestor proprietăţi şi a fundamentului matematic, modelul relaţional permite
proiectanţilor concentrarea mai întâi asupra semanticii datelor şi a relaţiilor dintre ele şi abia apoi
asupra implementarii fizice a semanticii respective pentru a se adapta cât mai bine cerinţelor şi
specificaţiilor impuse.
Modelul logic
Acest model foloseşte concepte ce mai pot fi înţelese încă de către utilizator, dar care
presupun reprezentări referitoare la modul în care utilizatorul doreşte să vizualizeze datele. În
continuare tehnicile de înmagazinare a datelor rămân transparente utilizatorului. Proiectul logic al
unei baze de date relaţionale creează şi validează modelul logic de date local. Scopul urmărit este
acela de a construi un model logic de date bazat pe modelul conceptual de date creat anterior, după
care se trece la validarea acestui model cu ajutorul tehnicii normalizării. Un astfel de model
parcurge, de regulă, următorul algoritm:
Pasul 1. Transformarea modelului conceptual local în model logic local de date. În acest
scop se trece la rafinarea modelului conceptual de date local, prin eliminarea caracteristicilor
incomode:
a. eliminarea relaţiilor mulţi-la-mulţi;
b. eliminarea relaţiilor complexe;
19
c. eliminarea relaţiilor recursive;
d. eliminarea relaţiilor ce conţin atribute;
e. revizuirea relaţiilor unu-la-unu.
Pasul 2. Stabilirea relaţiilor corespunzătoare modelului logic de date. În această etapă
se creează şi documentează fiecare relaţie, inclusiv cheile primare şi externe.
Pasul 3. Validarea modelului folosind tehnica normalizării.
Pasul 4. Validarea modelului în cazul folosirii tranzacţiilor. Trebuie să se obţină
asigurarea că modelul de date creat suportă tranzacţiile cerute de către beneficiarul bazei de date.
Pasul 5. Stabilirea constrângerilor de integritate. În acest scop trebuie identificate:
a. datele necesare;
b. integritatea referenţială;
c. constrângerile de domeniu impuse atributelor;
d. constrângerile logice;
e. integritatea entităţii.
Pasul 6. Revizuirea modelului logic local împreună cu beneficiarul bazei de date.
Pasul 7. Construirea şi validarea modelului logic global de date. Scopul acestei etape
este acela de a realiza, pe baza modelelor logice locale de date un singur model logic global ce
poate fi utilizat la reprezentarea realităţii care se modelează.
Pasul 8. Unificarea modelelor logice locale în cadrul unui singur model loc global. Se
urmăresc:
- revederea numelor tipurilor de entităţi şi a cheilor primare;
- revederea numelor relaţiilor;
- aducerea în cadrul unui singur model a tipurilor de entităţi din cadrul modelelor
logice locale;
- introducerea în cadrul modelului logic global a tipurilor de entităţi specifice
fiecărei vederi logice locale;
- aducerea în cadrul unui singur model a tipurilor de relaţii din cadrul modelelor
logice locale;
- căutarea tipurilor de entităţi şi relaţii lipsă;
- verificarea cheilor externe;
- verificarea constrângerilor de integritate;
- crearea modelului logic global de date;
- actualizarea documentaţiei.
Pasul 9. Validarea modelului logic global. Se face prin utilizarea normalizării.
Pasul 10. Prevederea modificărilor ce trebuie efectuate în vederea dezvoltărilor
ulterioare.
Pasul 11. Revizuirea modelului logic global împreună cu beneficiarul bazei de date.
Modelul fizic
Acest tip de model descrie reprezentarea datelor în formatul, modul de acces şi ordinea reală
în care acestea sunt păstrate. Fiecare câmp dintr-un tabel are un anumit tip de dată. Standardul
SQL-92 suportă o varietate foarte largă de tipuri de date dintre care enumerăm:
char(n) sau character(n): şir de caractere de lungime fixă, stabilită de utilizator;
varchar(n) sau character varying: şir de caractere de lungime variabilă a cărui lungime maximă
este stabilită de către utilizator;
int sau integer: tipul întreg a cărui lungime depinde de sistem;
smallint: tip întreg de dimensiuni mai mici a cărui lungime depinde de sistem;
numeric(p, d): un număr zecimal a cărui precizie este stabilită de către utilizator, ce constă
dintr-un număr total de cifre (p), dintre care d reprezintă cifrele de la partea zecimală; de
exemplu, numeric(3, 1) permite stocarea numărului 1.22 exact aşa cum apare şi nu în formatul
1.2;
real sau double precision: numere reale a căror precizie depinde de sistem;
float(n): număr real a cărui precizie este stabilită de către utilizator (n cifre);
20
date: tip de dată calendaristică;
time: exprimă ora unei zile în ore, minute şi secunde.
SQL-92 permite efectuarea de calcule aritmetice şi de comparaţii pe diverse intervale
numerice, folosind operatori de transformare a tipurilor (cast).
Normalizarea este, cu alte cuvinte, un proces de descompunere a unui tabel în două sau mai
multe tabele cu scopul eliminării redundanţelor care generează anomalii de actualizare. În timpul
procesului de normalizare, structura tabelelor se testează cu ajutorul formelor normale care impun
regulile de descompunere.
Formele normale sunt proprietăţi sau constrângeri aplicate unei scheme de relaţie cu scopul
de a atinge anumite obiective, cum ar fi reducerea redundanţelor. Există 6 forme normale aplicate
de obicei:
Prima formă normală (sau FN 1).
A doua formă normală (sau FN 2).
A treia formă normală (sau FN 3).
Forma normală Boyce Codd (sau FNBC).
A patra formă normală (sau FN 4).
A cincea formă normală (sau FN 5).
21
Fiecare dintre cele 6 forme normale este mai restrictivă ca predecesoarea sa. Astfel, de
exemplu, o schemă de relaţie aflată în forma normală trei este şi în forma normală doi, aşa cum se
reprezintă în figura de mai jos:
FN 5
FN 1 FN 3 FNBC FN 4
FN 2
Scopul formelor normale este acela de a elimina redundanţele din cadrul relaţiilor prin
descompunerea acestora în două sau mai multe relaţii, fără însă a pierde informaţie, ceea ce
înseamnă faptul că este posibilă, în orice moment, revenirea la relaţia originară doar pe baza
relaţiilor obţinute din descompunere.
Prima formă normală (FN 1) simplifica structura unei relaţii prin obţinerea asigurării că ea
nu conţine date care mai pot fi descompuse sau date generatoare de valori repetitive, ceea ce
înseamnă faptul că nici un atribut nu poate avea o mulţime de valori. Prin acţiunea specifică de
descompunere, atributele ce nu respectă aceste condiţii sunt plasate în relaţii separate, păstrându-
se atribute de legătură care au acelaşi tip de dată şi aceeaşi dimensiune. Fiecare tabel are o cheie
primară. De asemenea, o schemă relaţională R se află în forma normală unu dacă şi numai dacă
fiecare atribut se află la nivel atomic.
Exemple de atribute care pot fi considerate simple sau compuse (atomice sau neatomice) în
funcţie de circumstanţe şi de obiectivele bazei de date:
data calendaristică – este un atribut în care apar câmpurile: zi, lună, an;
adresa – este un atribut în care apar câmpurile: strada, nr, bloc, scara, etaj, apartament,
localitate, judeţ;
buletin/carte identitate – este un atribut în care apar câmpurile: seria, nr.
O relaţie se află în a doua formă normală (FN2) dacă se află în forma normală FN1 şi fiecare
atribut care nu este cheie este dependent de întreaga cheie primară.
Etapele de aducere a unei relaţii de la FN1 la FN2 sunt:
1. Se identifică posibila cheie primară a relaţiei aflate în FN1;
2. Se identifică toate dependenţele dintre atributele relaţiei, cu excepţia acelora în care sursa
este un atribut component al cheii primare;
3. Se identifică toate dependenţele care au ca sursă un atribut sau subansamblu de atribute
din cheia primară;
4. Pentru fiecare atribut (sau subansamblu) al cheii de la pasul 3 se creează o relaţie care va
avea cheia primară atributul (subansamblul) respectiv, iar celelalte atribute vor fi cele care
apar ca destinaţie în dependenţele de la etapa 3.
22
O relaţie se află în forma normală trei(FN 3) dacă şi numai dacă se află în forma normală
doi şi dacă fiecare atribut care nu face parte din cheie (nu participă la o cheie) depinde direct de
aceasta. Prin urmare, a treia regulă de normalizare cere ca toate câmpurile din tabele să fie
independente între ele.
Etapele de aducere a unei relaţii de la FN2 la FN3 sunt:
1. Se identifică toate atributele ce nu fac parte din cheia primara şi care sunt surse ale unor
dependenţe funcţionale (DF);
2. Pentru aceste atribute, se construieşte câte o relaţie în care cheia primară va fi atributul
respectiv, iar celelalte atribute, destinaţiile din DF considerate;
3. Din relaţia de la care s-a pornit se elimină atributele destinaţie din DF identificată la pasul
I, păstrându-se atributele surse.
Exemplu
Fie relaţia nenormalizată (primară) FACTURI
FACTURI
nr_factura#
data_factura
nume_client
adresa_client
banca_client
nr_cont_client
delegat
cod_produs
denumire_produs
unitate_de_masura
cantiate
pret_unitar
valoare
valoare_tva
toal_valoare_factura
toal_valoare_tva
FACTURI LINII_FACTURI
nr_factura# nr_factura#
data_factura cod_produs#
nume_client denumire_produs
adresa_client unitate_de_masura
banca_client cantiate
nr_cont_client pret_unitar
delegat valoare
toal_valoare_factura valoare_tva
toal_valoare_tva
23
FACTURI
LINII_FACTURI PRODUSE
nr_factura#
data_factura nr_factura# cod_produs#
nume_client cod_produs# denumire_produs
adresa_client cantiate unitate_de_masura
banca_client pret_unitar
nr_cont_client valoare
delegat valoare_tva
toal_valoare_factura
toal_valoare_tva
FACTURI PRODUSE
LINII_FACTURI CLIENTI
nr_factura# cod_produs#
data_factura nr_factura# nume_client# denumire_produs
nume_client cod_produs# adresa_client unitate_de_masura
delegat cantiate banca_client
toal_valoare_factura pret_unitar nr_cont_client
toal_valoare_tva
Această a treia formă normală mai poate suferi o serie de rafinări pentru a putea obţine o
structură performantă de tabele ale bazei de date. De exemplu se observă că „nume_client” este
un câmp în care este înscris un text destul de lung format dintr-o succesiune de litere, semne
speciale (punct, virgulă, cratimă), spaţii, numere. Ordonarea şi regăsirea informaţiilor după astfel
de câmpuri este lentă şi mai greoaie decât după câmpuri numerice. Din acest motiv se poate
introduce un nou atribut „cod_client” care să fie numeric şi care să fie cheia primară de identificare
a pentru fiecare client. O altă observaţie care poate fi făcută în legătură cu tabelele aflate în cea de
a treia formă normală este aceea că „total_valoare_factura” este un câmp care ar trebui să conţină
informaţii sintetice obţinute prin însumarea valorii tuturor ofertelor aflate pe o factură. Este de
preferat ca astfel de câmpuri să fie calculate în rapoarte sau interogări şi să nu fie memorate în
tabelele bazei de date.
24
O relație este în forma normală Boyce-Codd (FNBC) dacă se află în forma
normală trei și fiecare atribut depinde de cheie, de întreaga cheie şi de nimic altceva.
FNBC este o generalizare a formelor normale doi şi trei.
De remarcat este faptul că nu întotdeauna este posibilă descompunerea în FNBC
cu păstrarea dependenţelor.
FNBC, FN4 și FN5 se întâlnesc mai rar în practică. Aceste forme nu sunt
respectate, în general, pentru că beneficiile de eficienţă pe care le aduc nu compensează
costul şi munca de care este nevoie pentru a le respecta.
1) Regula informaţiei
Toate informaţiile transferate în cadrul unei baze de date relaţionale trebuie
reprezentate în mod explicit la nivel logic într-o singură modalitate, sub formă de valori
în cadrul unor tabele. Aceasta este, ceea ce se numeşte, reprezentare logică a datelor.
Fiecare linie sau tuplu dintr-un tabel (relaţie) reprezintă intrări în coloane modelul
aplicându-se la fel în întregul tabel astfel încât fiecare rând are acelaşi format.
Fiecare linie din cadrul tabelului este identificată prin intermediul valorii unei
coloane sau combinaţii de coloane, numită cheia primară. Fiecare rând din cadrul
tabelului poate fi accesat prin intermediul unei chei externe. Un sistem de gestiune a
bazelor de date relaţionale trebuie să manipuleze datele folosind doar instrumente
25
specifice modelului relaţional. Din acest motiv, atât datele cât şi metadatele (datele
despre date) trebuie păstrate în tabelele bazei de date.
2) Regula de garantare a accesului
Fiecare dată stocată într-o bază de date relaţională trebuie să poată fi logic
accesibilă utilizatorului prin apelarea numelui tabelului în care se află, prin valoarea
cheii primare şi prin numele unei coloane aparţinătoare tabelului respectiv. Accesul la
date trebuie să se facă simplu, fără a exista ambiguităţi în exprimare. Modelul relaţional
nu se preocupă de aspectele fizice ale extragerii datelor din tabele. Această regulă
afirmă faptul că utilizatorul trebuie să aibe acces la datele stocate în baza de date doar
prin intermediul numelor şi valorilor. Cheia primară, prin care se identifică în mod unic
o anumită înregistrare din cadrul unui tabel, reprezintă elementul fundamental al
modelului relaţional. într-un tabel nu poate exista decât o singură cheie primară care nu
are voie să primească valori NULL.
3) Valorile NULL
Valorile NULL (diferite de şirul de lungime zero sau de numărul zero) sunt
utilizate în cadrul sistemelor de gestiune a bazelor de date relaţionale pentru a
reprezenta informaţia lipsă sau indisponibilă la un moment dat, indiferent de tipul de
dată şi sunt obligatorii în orice sistem complet relaţional. De asemenea, astfel de
reprezentări trebuie să poată fi manipulate într-un mod sistematic şi fără echivoc de
către orice sistem de gestiune al bazelor de date relaţionale (Date, 1991).
O valoare NULL poate apare oriunde în cadrul sistemului de gestiune al bazelor
de date relaţional, dar nu poate fi atribuită nici unei chei primare, majoritatea sistemelor
admiţând specificarea conceptului de câmp nenul sub forma unei constrângeri ce
interzice folosirea valorilor NULL în câmpul respectiv (Parkhurst, 2002).
4) Catalog actualizat permanent pe baza modelului relaţional
Descrierea bazei de date este reprezentată, la nivel logic, în acelaşi fel ca şi datele
obişnuite, astfel încât utilizatorii autorizaţi pot folosi acelaşi limbaj relaţional pentru a
pune întrebări referitoare la structura acesteia. Sistemul trebuie să suporte existenţa unui
catalog relaţional accesibil utilizatorilor autorizaţi prin intermediul aceluiaşi limbaj de
interogare folosit şi în cazul datelor obişnuite (Date, 1991).
O bază de date relaţională trebuie să se autodescrie (Moore).
Catalogul reprezintă locul în care – alături de alte lucruri – se păstrează toate
schemele (externe, conceptuale, interne), dar şi toate corespondenţele
(externă/conceptuală, conceptuală/internă). Cu alte cuvinte, catalogul conţine
informaţii detaliate (numite şi metadate) despre obiectele de interes ale bazei de date şi
ale întregului sistem (Date, 2000).
5) Regula de înţelegere a sublimbajului de manipulare a datelor
Un sistem relaţional poate folosi mai multe limbaje sau moduri de folosire a
terminalelor, dar acesta trebuie să suporte cel puţin un limbaj relaţional care:
Operaţia de adăugare
De multe ori, unei baze de date trebuie să i se adauge fie coloane noi în cadrul
tabelelor, fie tabele noi datorită apariţiei de date suplimentare ce trebuie implementate
în baza de date originală. Ca urmare se pot identifica două tipuri de adăugări:
1. extinderea tabelelor prin apariţia de atribute noi, de un anumit tip de dată
specificat;
2. extinderea bazei de date prin apariţia de tabele noi necesare introducerii de noi
entităţi în baza de date.
Operaţia de reorganizare a structurii bazei de date
27
Uneori, apare necesitatea de modificare a structurii bazei de date, nu din cauza
apariţiei de date noi, ci din apariţia nevoii de reamplasare a anumitor date în mod diferit
în cadrul tabelelor, conţinutul acestora rămânând identic cu cel originar. (Date, 2000).
10) Independenţa integrităţii
Constrângerile de integritate specifice unei anumite baze de date relaţionale
trebuie să poată fi definite în sublimbajul relaţional al datelor şi înmagazinate în catalog,
nu în programul aplicaţie. De asemenea trebuie să fie posibilă modificarea unor astfel
de constrângeri aşa cum cere logica aplicaţiei fără a afecta celelalte aplicaţii (Date,
1991).
Constrângerile de integritate sunt reguli prin care sistemul de gestiune al bazelor
de date împiedică baza de date să ajungă într-o stare inconsistentă. Potrivit celor
afirmate de către Date în 2001, regula de aur a independenţei integrităţii este: “Nu
trebuie să fie permisă nici un fel de operaţie care să lase o anumită valoare într-o stare
care să contrazică predicatul impus. În acest fel nu poate avea loc nici o tranzacţie
care ar încerca să lase baza de date într-o stare care să nu corespundă propriei condiţii
impuse.”
Constrângerile de integritate sunt:
1. Constrângeri NOT NULL
Această constrângere este preferată de standardul ISO în comenzile CREATE şi
ALTER TABLE. Constrângerea interzice înmagazinarea în baza de date a valorilor
NULL, ceea ce înseamnă că nu se permite ca anumite coloane să fie goale (Connolly et
al., 1999).
2. Clauza UNIQUE
Clauza UNIQUE specifică una sau mai multe coloane care identifică în mod unic
fiecare înregistrare din cadrul unui tabel. În acelaşi timp, fiecare coloană ce apare în
clauza UNIQUE trebuie să fie declarată ca fiind NOT NULL.
SQL anulează orice operaţie de inserare sau actualizare care are tendinţa de a
genera valori duplicat în cheile candidat. Într-un tabel nu este permisă decât o singură
cheie primară, iar clauza UNIQUE se foloseşte numai dacă a fost aleasă cheia primară
şi este necesar ca valorile altei coloane să fie unice.
3. Clauza PRIMARY KEY (integritatea entităţii)
Cheia primară a unui tabel trebuie să conţină o valoare unică nenulă pentru fiecare
înregistrare introdusă în tabel. Standardul ISO impune integritatea entităţii prin
intermediul clauzei cheii primare ce apare în instrucţiuni precum CREATE sau ALTER
TABLE (Connolly et al., 1999).
4. FOREIGN KEY (integritatea referenţială)
O cheie externă este un câmp dintr-un tabel ce corespunde coloanei cheie candidat
dintr-un alt tabel. O valoare a cheii externe trebuie să aibă o valoare corespondentă în
tabelul părinte. Tabelul ce conţine cheia externă se numeşte tabelul referit, copil sau
extern, în timp ce tabelul ce conţine cheia candidat se numeşte tabelul de referinţă,
primar, sau părinte (Rennhackkamp, 1996).
Integritatea referenţială are semnificaţia faptului că nici o bază de date relaţională
nu poate conţine valori necorespunzătoare ale cheii externe. Cheie externă
necorespunzătoare reprezintă o valoare a cheii externe dintr-un tabel referit pentru care
nu există valoare în tabelul de referinţă. Cu alte cuvinte, constrângerea specifică faptul
că dacă B îl referă pe A, atunci A trebuie să existe. Date afirmă faptul că, de multe ori,
nu este posibilă utilizarea unei interogări convenabile pentru a obţine un anumit
răspuns. Din acest motiv, trebuie să se poată specifica o acţiune referenţială de tipul
“CALL proc()”, în care proc reprezintă procedura creată de utilizator (Date, 2000).
28
Actualizările bazei de date au loc întotdeauna la nivel atomic, ceea ce înseamnă
“totul sau nimic”, chiar dacă sunt implicate actualizări pe mai multe valori, ca în cazul
acţiunii referenţiale CASCADE (Date, 2000).
Standardul ISO propune introducerea cheii externe prin intermediul clauzei
FOREIGN KEY ce apare în cadrul comenzilor de creare sau modificare a structurii unui
tabel. De exemplu, dacă tabelul B are o cheie externă care face referire la o coloană din
tabelul A, integritatea referenţială interzice introducerea unei valori în tabelul B care nu
are corespondent în tabelul A. În plus, regulile de integritate referenţială pot avea în
vedere şi faptul că ori de câte ori se elimină o valoare din tabelul A, valorile
corespunzătoare din tabelul B pot fi şi ele eliminate, ceea ce este cunoscut sub
denumirea de ştergere în cascadă. Regulile de integritate referenţială mai pot specifica
şi faptul că ori de câte ori se modifică o valoare din tabelul A, toate valorile
corespunzătoare din tabelul B sunt şi ele modificate automat, ceea ce este cunoscut sub
denumirea de actualizare în cascadă (Webopedia, Referential Integrity).
SQL prevede următoarele opţiuni ce pot fi alese în astfel de situaţii (Connolly et
al., 1999):
1. CASCADE: prin ştergerea unei înregistrări din tabelul părinte automat se
elimină toate înregistrările corespunzătoare din tabelul copil. Deoarece înregistrările
eliminate pot conţine o cheie candidat utilizată drept cheie externă în alt tabel, regulile
cheii externe se aplică şi în tabelul respectiv, ş.a.m.d.
2. SET NULL: şterge înregistrarea din tabelul părinte şi provoacă setarea
coloanelor cheie externă din tabelul copil la valoarea NULL, dar o astfel de operaţie
este posibilă numai dacă coloanele cheii externe nu au setată opţiunea NOT NULL.
3. SET DEFAULT: şterge înregistrarea din tabelul părinte şi provoacă setarea
fiecărei componente a cheii externe din tabelul copil la valoarea implicită specificată,
dar operaţia este valabilă numai dacă coloanele cheii primare au setată opţiunea
DEFAULT.
4. NO ACTION: resping operaţia de ştergere din tabelul părinte, fiind opţiunea
implicită dacă nu se introduc explicit reguli pentru ON DELETE.
5. Constrângerea CHECK
Există două tipuri de constrângeri CHECK. Una dintre ele este denumită
constrângere de domeniu, deoarece stabileşte mulţimea de valori pe care o poate lua un
atribut, iar cealaltă se numeşte constrângerea logică utilizată cu scopul de a pune în
evidenţă anumite condiţii suplimentare (Connolly et al, 1999).
Standardul ISO prevede astfel de constrângeri ce pot fi introduse în cadrul
comenzilor de creare sau modificare a unui tabel. Clauza CHECK permite definirea
unei constrângeri pe o coloană sau pe întregul tabel. În cazul utilizării clauzei la nivel
de coloană, aceasta nu poate face referire decât la coloana respectivă (Connolly et al,
1999).
Cel puţin următoarele două constrângeri trebuie să existe în orice bază de date
relaţională:
a) Integritatea entităţii: nici o componentă a cheii primare nu are voie să aibe valoarea
NULL.
b) Integritatea referenţială: pentru fiecare valoare nenulă a cheii externe din baza de
date relaţională, trebuie să existe o valoare corespunzătoare din acelaşi domeniu de
valori şi de acelaşi tip (cheia primară).
29
11) Independenţa de distribuire
Orice bază de date relaţională trebuie să aibe independenţă la distribuire, ceea ce
înseamnă faptul că utilizatorii nu trebuie să ştie că o bază de date este distribuită, iar
aplicaţiile existente ce folosesc respectiva bază de date trebuie să funcţioneze la fel ca
şi când baza de date ar fi centralizată:
a. dacă se introduce anterior o versiune modificată a unei baze de date distribuite;
b. dacă datele distribuite existente se redistribuie în tot sistemul (Date, 1991). Aplicaţia
funcţionează unitar din punct de vedere logic, dacă datele sunt gestionate de un
singur sistem de gestiune a bazelor de date aflat pe o singură maşină (Date, 1991).
Date (2000) numeşte sistem distribuit de baze de date un sistem ce constă dintr-
o colecţie de site-uri conectate laolaltă prin intermediul unei reţele şi în care fiecare
site conţine un sistem independent de baze de date, dar site-urile convin să lucreze
împreună astfel încât utilizatorul, indiferent de locul în care se află, poate accesa datele
de oriunde de pe reţea ca şi cum acestea s-ar afla în site-ul propriu.
“Fiecare site conţine un sistem independent de baze de date” înseamnă faptul că
fiecare site are o bază de date “reală” locală cu proprii utilizatori şi toate elementele
caracteristice sistemelor de gestiune relaţionale.
Date a introdus 12 reguli ce se aplică bazelor de date distribuite:
1. Autonomia locală –site-urile din sistemul distribuit trebuie să fie independente.
2. Nu trebuie să existe un site dominant – toate site-urile trebuie să fie tratate în
mod egal.
3. Operare continuă – sistemele distribuite trebuie să aibe o fiabilitate şi o
disponibilitate ridicate.
4. Independenţa de locaţie – utilizatorii nu trebuie să ştie unde se află datele pe
care le folosesc.
5. Independenţa de fragmentare – utilizatorii nu trebuie să ştie că datele sunt
separate în diferite locaţii.
6. Independenţa de copie – utilizatorii nu trebuie să ştie că lucrează cu nişte copii.
7. Procesarea distribuită a interogărilor – suportul necesar interogărilor multiple şi
a optimizării acestora.
8. Controlul tranzacţiilor distribuite – refacerea şi controlul concurenţei.
9. Independenţa hardware.
10. Independenţa de sistemul de operare folosit.
11. Independenţa de reţea.
12. Independenţa de sistemul de gestiune al bazei de date – se referă la omogenitate.
(Date, 2000).
12) Regula de non-subversiune
Dacă un sistem relaţional are un limbaj de nivel scăzut (procesarea pe rând a unei
singure înregistrări odată), acel limbaj nu poate fi folosit pentru a trece de interdicţiile
impuse de constrângerile sistemului exprimate prin intermediul limbajului relaţional de
nivel înalt (procesarea întregului set de înregistrări deodată).
Nu trebuie să existe nici o modalitate prin care să se poată modifica structura
bazei de date alta decât prin intermediul unui limbaj relaţional, cum ar fi de exemplu,
SQL (Parkhurst, 2002).
30
O altă modalitate de definire a unei baze de date relaţionale este aceea făcută prin
intermediul celor cinci reguli ale lui Connolly, ce se bazează pe cele 12 reguli ale lui
Codd (1999):
1. Reguli fundamentale (R12)
2. Reguli structurale (R1, R6)
3. Reguli de integritate (R3, R10)
4. Reguli de manipulare a datelor (R2, R4, R5, R7)
5. Reguli de independenţă a datelor (R8, R9, R11)
Nu există sistem relaţional care să suporte în întregime regulile de actualizarea a
vederilor (R6), de control a valorilor NULL (R3) şi de independenţă logică de date (R9).
Orice încălcare a regulilor prezentate necesită eforturi suplimentare atât din partea
utilizatorilor finali cât şi a administratorilor. De exemplu, utilizatorii finali nu pot
actualiza o vedere, bazată pe două tabele, sau obţin rezultate eronate datorită faptului
că sistemul de gestiune al bazelor de date controlează valorile NULL într-un mod
neaşteptat. Prin adăugarea unei coloane noi într-un tabel, orice aplicaţie care va folosi
acea coloană va trebui modificată. Inconsistenţe ale datelor pot apare foarte uşor în
cadrul unei baze de date dacă o vedere şi tabelul său de bază trebuie controlate de către
utilizatori separat. Contra-argumentul este (probabil) acela că sistemele de gestiune a
bazelor de date ar deveni lente deoarece dacă independenţa de date ar fi totală, atunci
timpul necesar despachetării înregistrărilor fizice necesar obţinerii datelor necesare
trebuie adăugat întotdeauna la crearea vederilor utilizatorilor. Dar, deoarece, marea
majoritate a lucrului se bazează pe o singură vedere particulară a utilizatorului, devine
utilă punerea în concordanţă a vederii utilizatorului cu organizarea fizică pentru a
economisi timp. Codd s-a preocupat un timp îndelungat cu crearea unei interfeţe logice
pe care sistemul de gestiune al bazei de date să o pună la dispoziţia utilizatorului, dar
problema performanţelor nu era legată de rezolvarea unei astfel de probleme, ci de
faptul că toate sistemele relaţionale au o structură fizică bazată exclusiv fie pe fişiere
de tip ISAM fie pe fişiere cu acces aleator, acestea devenind fie foarte lente fie foarte
rapide în funcţie de volumul şi de distribuirea cererii.
31
găseşte imediat un termen căutat. Fără o astfel de listă, neexistând o ordine de ghidare
a căutării, singura alternativă este explorarea completă a întregului material pentru a
găsi termenul dorit.
În general, operaţiile de căutare, inserare şi ştergere a elementelor într-o mulţime
(tabelă) se execută mai rapid dacă elementele mulţimii (înregistrările) sunt reprezentate
printr-o colecţie ordonată. În tehnologia bazelor de date, ordonarea colecţiilor de date
se face prin indexarea datelor.
Indexul unei tabele este o structură de date adiţională memorată în baza de date
care permite accesul rapid la înregistrările tabelei prin ordonarea acestora.
De fapt, indexul poate fi gândit ca o tabelă cu două atribute: primul atribut conţine
valorile atributelor tabelei bazei de date pentru care se crează indexul, iar al doilea
conţine un pointer la locaţia nuplurilor corespunzătoare. Valorile sunt aranjate fie în
ordine descendentă cheii de indexare, fie în ordine ascendentă.
Indecşii se clasifică după tipul de câmp sau după nivel şi după modul de
organizare a tabelei. O clasificare a acestora este următoarea:
1. Indexul primar este un index asociat unei tabele ordonate după câmpul cheie al
tabelei, iar în structura de index se utilizează câmpul cheie.
2. Indexul secundar este un index construit tot pe baza unui câmp cheie, dar tabela nu
este ordonată după câmpul cheie.
3. Indexul de grup (cluster) este un index construit după câmpuri ce nu sunt câmpuri
cheie (criteriu de acces este diferit de câmpul cheie), iar tabela poate fi ordonată sau
nu relativ la criteriul de acces.
Un index primar este un fişier ordonat cu înregistrări de lungime fixă având două
câmpuri. Primul câmp al indexului este de acelaşi tip cu un câmp cheie ordonat al tabelei
de date, iar al doilea câmp este un pointer către un bloc (o adresă a unui bloc). Câmpul
cheie de ordonare se mai numeşte şi cheie primară a tabelei de date. Asociaţia celor
două câmpuri formează intrarea index sau înregistrarea index pentru fiecare bloc al
tabelei de date. Cum tabela de date este ordonată după valorile câmpului index, în
fişierul index valoarea primului câmp este dată de valoarea câmpului index de la prima
înregistrare a blocului. Al doilea câmp, cel ce semnifică un pointer este de tip întreg şi
indică adresa blocului.
32
<k> reprezintă cheia de ancorare bloc <p> reprezintă pointerul la bloc
Volumul datelor în index este mai mic datorită faptului că în index avem o singură
intrare pentru un bloc, cât şi datorită faptului că un index este similar cu o tabelă, dar
are numai două câmpuri. Ca efect, căutarea într-un fişier index este mult mai rapidă
decât într-o tabelă de date, putând fi utilizate metode de căutare binare.
33
fiecare înregistrare. Un astfel de câmp identifică un grup de înregistrări (clustering
field). În această situaţie se poate crea un index ce facilitează găsirea înregistrărilor ce
aparţin unui câmp.
Un index de grup este deci un fişier ordonat cu două câmpuri, primul câmp
conţinând aceeaşi informaţie cu cea a câmpului noncheie de ordonare, al doilea fiind
destinat unui pointer către un bloc de date. În acest mod, fişierul index conţine câte o
intrare pentru fiecare valoare distinctă a câmpului de ordonare. Al doilea câmp al
înregistrării index conţine un pointer către blocul în care apare pentru prima oară
valoarea câmpului de ordonare din primul câmp al indexului.
34
<k> reprezintă cheia de ancorare bloc <p> reprezintă pointerul la bloc
Algebra relațională
Algebra relațională poate fi concepută ca un limbaj abstract de formulare a
interpelărilor (cererilor) sau ca o colecie de operaii pe relații având drept operanzi una
sau mai multe relaiiți producând ca rezultat altă relație. Operațiile algebrei relaționale
pot fi divizate în două grupuri: operații tradiționale pe mulimi și operații relaționale
native.
Operațiile tradiționale pe mulimi sunt:
reuniunea ( )
intersecția ( )
diferența (-)
produsul cartezian ( )
35
selecteaza rândurile care satisfac o conditie (predicat) de selecție
schema rezultatului este identică cu schema relației de intrare
relația rezultat poate fi intrare pentru o alta operatie algebrică
nu există duplicate în instanța relației de ieșire
Proiecția este operația care generează o relație care conține doar acele câmpuri
precizate în lista de proiectie.
Caracteristici:
șterge câmpurile care nu apar în lista de proiectie
schema relației rezultat conține exact câmpurile din lista de proiectie, (au
aceleasi nume din relatia originala)
36
123 Lupu Ion Director Primarie 2800
456 Costache Vasile Secretar Primarie 1800
789 Vasilescu Dumitru Portar Primarie 800
Exemplu:
Cod
A1 Cod Cod
A2 A1 A2
A3 A10 A3
R S R-S
37
Intersecția definește o relație ce constă în multimea tuturor tuplurilor care se afă
atât în relatia R cât si în relatia S.
Caracteristici:
cele două relații trebuie sa fie compatibile la reuniune.
Este o operație comutativă și derivată
R S =R-(R-S) = S-(S-R)
38
789 Oprea Ciprian Vatra Dornei
CLIENTI PRODUSE
CLIENTI.cod nume prenume oras PRODUSE.cod denumire
123 Anton Anton Iasi 111 Televizor
456 Costache Vasile Iasi 111 Televizor
789 Oprea Ciprian Vatra 111 Televizor
Dornei
123 Anton Anton Iasi 222 Laptop
456 Costache Vasile Iasi 222 Laptop
789 Oprea Ciprian Vatra 222 Laptop
Dornei
Jonctiunea (JOIN, uniunea) definește o operatie binară care are ca rezultat o noua
relatie în care fiecare tuplu este o combinatie a unui tuplu din prima relație cu un tuplu
din a doua relatie.
Caracteristici:
derivata a produsului cartezian
există diferite forme:
o theta- JOIN
o echi- JOIN
o natural JOIN (uniunea naturală);
o outer JOIN (uniunea externă);
o semi JOIN (semi-uniunea).
schema relației rezultat este aceeași ca la produsul cartezian dar poate
conține mai puține tupluri decât produsul cartezian, putând fi calculat mai
eficient
Exemplu:
39
Care sunt comenzile care au fost onorate (pentru care s-au emis facturi)?
Facturi Facturi.numar Comenzi.numar Comenzi
Exemplu:
40
Există și operația de uniune externă completă, valorile lipsă din relație fiind stabilite la
valoarea null. Astfel se pastrează informații care în alt tip de uniune ar fi fost pierdute.
Exemplu:
Pentru relațiile din exemplul anterior, prin aplicarea operatorului de uniune
externă (dreapta) se obtine:
COMENZI BENEFICIARI
Exemplu:
x y y
x1 y1 y1
x1 y2 y3
x1 y3 B
x2 y2
x2 y3
x3 y1
x3 y3
A
y
x1
x3
A/B
Diviziunea nu este un operator primar, putând fi exprimat cu ajutorul operatorilor
fundamentali. Acest lucru poate fi observat daca ținem seama de faptul că A/B,
calculeaza toate valorile x care nu sunt “descalificate” de valori y din B. O valoare x
este descalificată daca prin atasarea unei valori y din B, se obtine un tuplu xy care nu
se gaseste în A.
A / B X ( A) X (( X ( A) B ) A)
41
Limbajul SQL
42
În limbajul SQL standardizat se utilizeaza termenii de tabele , coloane
si rânduri. O instructiune SQL este formata din cuvinte rezervate si cuvinte
definite de utilizator.
Cuvintele rezervate au un înteles fix, trebuie scrise exact cum este necesar
si nu pot fi împartite în mai multe rânduri.
Cuvintele definite de utilizator : sunt formate de catre acesta, conform
unor anumite reguli de sintaxa si reprezinta denumirile diverselor obiecte
din baza de date, cum ar fi relatiile, coloanele , vederile, indexurile etc.
Majoritatea compnentelor unei instructiuni SQL nu sunt sensibile la tipul de
litere. Datele de tip caracter literal trebuie sa fie scrise exact cum apar în baza de date.
43
cond_filtru conditia de filtrare a înregistrarilor
lista_câmpuri lista a câmpurilor în functie de care se face gruparea
înregistrarilor
câmp_ord câmpul dupa care se face ordonarea înregistrarilor
În interogări putem folosi funcțiile predefinite: COUNT, SUM, AVG, MAX, MIN
COUNT - contorizeaza valorile unei coloane
SUM - calculeaza suma valorilor unei coloane
AVG - calculeaza media aritmetica a valorilor unei coloane
MAX, MIN - calculeaza valoarea maximă/minimă dintre valorilor unei
coloane
44
Alte funcții scalare SQL predefinite care calculează o singură valoare pe baza unei
valori de intrare
UCASE() – convertește în litere mari
LCASE() – convertește în litere mici
MID() – extrage caractere dintr-un câmp de tip text
LEN() – calculează lungimea unui câmp de tip text
ROUND() – rotunjește un câmp numeric la numărul de zecimale
specificat
NOW() – întoarce data și ora curentă din sistem
FORMAT() – stabilește modul în care este afișat un câmp
45
FROM NumeTab2)
VALUES (eExpr1 [, eExpr2, ...])
UPDATE [NumeBD1!]NumeTabe1
SET NumeCâmp1 = Expr1
[, NumeCâmp2 = Expr2 ...]
WHERE CondFiltru1 [AND | OR CondFiltru2 ...]]
UPDATE NumeTabe1
SET NumeCâmp1 = (SELECT NumeCâmp1
FROM NumeTabe1
WHERE conditii),
[NumeCâmp2 = (SELECT NumeCâmp2
FROM NumeTabe1
WHERE conditii),]
WHERE conditii
46
[, FOREIGN KEY Expr5 TAG NumeTag4
REFERENCES NumeTabel3 [TAG NumeTag5]]
[, CHECK Expr6 [ERROR Mesaj2]])
| FROM ARRAY NumeMatrice
47
SELECT nume_client, adresa_client FROM Clienti WHERE
banca_client in {'BRD', 'BCR'}
48
LEFT JOIN Clienti ON
facturi.cod_client=clienti.cod_client
Crearea unui nou tabel (Personal), care va avea câmpurile: CNP (cheie
primară), Nume, Prenume
Apoi
49
Baze de date spaţiale
În noua economie bazată pe cunoștințe, sistemele informatice pentru
organizarea datelor, informațiilor și extragerea de noi cunoștințe devin esențiale în
procesele de luare a deciziilor și de elaborare a strategiilor de dezvoltare.
Pe langă tipurile de date clasice utilizate în sistemele informatice, în ultimii ani
au luat amploare datele geospațiale. Aceste date se referă la localizarea geografică a
anumitor obiecte pe glob, la forma și dimensiunile acestora.
Sistemele informatice care stochează, prelucrează, vizualizează datele clasice
împreună cu datele geospațiale se numesc sisteme informatice geografice, GIS.
Un GIS este aplicabil în multe domenii, ca de exemplu: dezvoltare regională și
urbanism, turism, financiar-bancar, sănatate, militar, criminalistică, știinte sociale,
geologie, mediu etc.
Cea mai costisitoare şi longevivă componentă a unui GIS este baza de date
geografice.
Datele ce reprezintă poziţia şi / sau forma unor obiecte, indiferent de sistemul
de referinţă, se numesc date spaţiale.
O bază de date spaţială este o bază de date optimizată pentru stocarea, gestiunea
şi interogarea datelor spaţiale. Aceasta pune la dispoziţie tipuri de date spaţiale în
modelul său de date şi în limbajul de interogare, suport pentru tipuri de date spaţiale în
implementare, indexare spaţială şi algoritmi eficienţi pentru join spaţial.
Teoretic, orice variabilă care poate fi localizată spaţial sau căreia i se pot asocia
coordonate spaţiale (indiferent de sistemul de referinţă) poate fi inclusă într-o bază de
date spaţială. Aceste date sunt identificate sub diferite denumiri: date geometrice,
geografice sau spaţiale.
Prin date geografice se înţelege ansamblul format din date spaţiale (localizate
prin coordonate) şi date descriptive (atribute) asociate obiectelor/fenomenelor
geografice (străzi, parcele, accidente).
O bază de date geografice este o colecţie de date geografice organizate pentru
a facilita stocarea, interogarea, actualizarea şi afişarea de către o mulţime de utilizatori
în mod eficient. Datele spaţiale utilizate în tehnologiile GIS se pot clasifica după: a)
precizie, b) documentele primare utilizate, c) ciclul de actualizare.
Prin referenţiere geografică (sau georeferentiere) se înţelege stabilirea relaţiei
dintre coordonatele unui punct pe o foaie plană (hartă - 2D) şi coordonatele geografice
reale din teren (pe suprafaţa Pământului – 3D, aproximată printr-un elipsoid de
referinta).
Bazele de date geografice lucrează cu multiple arhitecturi de SGBD, pot avea
diverse mărimi şi un număr variabil de utilizatori. Ele pot varia de la baze de date mici,
cu un singur utilizator, construite pe baza Microsoft Jet Engine, până la baze de date
mari împărţite de un grup de utilizatori.
Responsabilitatea pentru managementul seturilor de date geografice este
împărţită între software-ul GIS şi cel al SGBD. Anumite aspecte, cum ar fi stocarea pe
disc, definirea atributelor, procesarea interogărilor asociative şi tranzacţiile
multiutilizator sunt delegate sistemului de gestiune a bazelor de date. Aplicaţia GIS este
răspunzătoare pentru definirea schemei specifice a SGBD, folosită pentru a reprezenta
diferite seturi de date geografice şi pentru logica specializată pe domeniu, care menţine
integritatea şi utilitatea înregistrărilor componente.
50
Tipul geo-bazei
SGBD Note
de date
Microsoft Jet Engine -editare de către utilizator
(Access) unic
-limită de mărime de 2
Single user - Personală
GB
-fără suport pentru
versiune
Format propietar, formată Poate sa stocheze pană la
Single user - din fișiere ce pot fi 250 TB pentru fiecare
FileGeodatabase salvate atât pe Windows FeatureClass (strat
cât și Linux vectorial)
-Oracle -necesită ArcSDE
-IBM DB2 -editare multiutilizator
Multi-utilizator, cu -IBM Informix -fluxuri bazate pe versiune
versiuni -Microsoft SQL Server -dimensiune şi număr de
-PostgreSQL utilizatori până la limitele
SGBDR
Caracteristicele bazelor de date geografice personale şi multiutilizator
51
analiza suprafeţelor care necesită calcule complexe pentru determinarea unor
caracteristici cum ar fi panta suprafeţei în orice punct sau direcţia pantei.
Modelul de date raster reprezintă o zonă de teren ca o matrice (grilă) formată
din celule rectangulare uniforme, fiecare celulă având o valoare. Grila este reprezentată
într-un sistem de coordonate x, y (Cartezian). Coordonatele x, y ale unei celule se
calculează pe baza coordonatelor unui punct de referinţă, de obicei unul din colţurile
grilei, ţinând cont de poziţia celulei în grilă (numărul liniei/coloanei) şi de dimensiunile
celulei pe x şi pe y. Valoarea unei celule indică obiectul situat în acea poziţie. Există
trei metode pentru stabilirea valorilor unei celule: clasificarea obiectelor, în care fiecare
valoare indică un anumit tip de obiecte cum ar fi drum, zonă urbană, tip de sol; indicarea
valorii culorii (nivelului de gri) înregistrate într-o imagine (fotografie); indicarea unei
măsurători relative cum ar fi altitudinea faţă de nivelul mării, înălţimea unei clădiri faţă
de nivelul solului, etc. In modelul raster, obiectele nu au o delimitare bine-definită iar
relaţiile spaţiale dintre obiecte sunt continute implicit. Reprezentând celule
rectangulare, forma obiectelor nu este foarte exactă şi depinde de rezoluţia celulei. Prin
rezoluţia celulei se înţelege dimensiunea suprafeţei de teren reprezentate de o celulă; cu
cât suprafaţa reprezentată este mai mică, cu atât rezoluţia este mai bună şi deci datele
mai precise, în schimb este nevoie de volume mari pentru stocarea datelor şi de un timp
de prelucrare mai îndelungat. Precum modelul vectorial, modelul raster permite
reprezentarea obiectelor GIS punctuale, liniare sau poligonale. Un obiect punctual este
reprezentat printr-o valoare într-o singură celulă a grilei. Un obiect liniar apare ca o
serie de celule adiacente care redau lungimea şi forma obiectului. Un obiect poligonal
este reprezentat ca un grup de celule adiacente care redau aria şi forma obiectului.
Modelul raster este foarte eficient pentru reprezentarea imaginilor şi pentru
implementarea funcţiilor analitice spaţiale (suprapunerea obiectelor, identificarea
întinderii unui fenomen, operaţii pe vecinătăţi). In modelul raster suprafeţele sunt
reprezentate prin indicarea în fiecare celulă a valorii cotei corespunzătoare punctului
din centrul celulei (o latice). Prin urmare, acest model permite implementarea cu
uşurinţă a operaţiilor asupra suprafeţelor (calculul pantei, direcţiei pantei, interpolarea
curbelor de nivel).
Introducerea datelor în sistem este componenta cu cele mai mari cerințe din
punctul de vedere al resurselor de timp din cadrul unui GIS. Fiecare apariție a obiectelor
dintr-o hartã trebuie specificatã, la fel si relațiile spațiale dintre ele. Acestea se pot
realiza prin:
digitizarea datelor care nu se află în format numeric, adica într-o forma
recunoscuta de catre calculator
scanarea datele deja existente pe hartie, filme PET etc.
măsurători în teren
prelucrarea imaginilor de teledetecţie, fotogrametrie digitală
conversia datelor din alte formate
52
radarul subpamantean pentru detectarea rețelelor subterane. Acesta
foloseste unde de înalta frecvență si funcționeaza pe principiul sondării
pe baza de ecou.
sateliții care oferă imagini satelitare. Acestea sunt imagini raster care pot
fi scanate si apoi transformate în imagini vectoriale folosind programme
speciale de conversie
sistemele de poziționare globală (GPS)
Pe lânga introducerea datelor grafice într-o bază de date spațială trebuie
introduse si atributele, acestea fiind informații aditionale despre entitatile din sistem,
cum ar fi de exemplu: cantitatea de precipitatii care a fost inregistrata pentru o anumita
perioada a anului, sau tipul de sol care caracterizeaza entitatea respectiva, in caz ca
aceasta reprezinta un teren agricol, etc. Introducerea acesor atribute se poate face
manual, de la tastatura, sau se introduc din fisiere digitale existente.
Întotdeauna în GIS datele introduse trebuie sa fie verificate, deoarece pot să
apară erori. Acestea pot sa apară în timpul procesului de introducere a datelor sau pot
fi deja existente în datele de intrare, ducând în final la interpretari gresite ale
rezultatelor. Multe din erori apar la scanare deoarece scanerele electronice înregistreazã
petele de pe o hartã cu aceeasi acuratețe cu care captureaza elementele interesante de
pe harta. Corecțiile se vor realiza cu ajutorul unor functii de filtrare in domeniul
frecventei, transformata Fourier jucând un rol important aici.
În bazele de date spațiale vor fi gestionate două categorii de date:
spaţiale (elemente grafice localizate prin coordonate specifice hartii ), care
reprezintă poziţia şi forma obiectelor (fenomenelor) terestre utilizând trei tipuri
fundamentale de entităţi grafice :
o puncte
o linii
o poligoane
la care se adauga elemente de tip text (etichete)
descriptive (negrafice), care reprezintă informaţii despre obiectele (fenomenele)
terestre continute intr-o hartă utilizând:
o atribute (întrebări)
o valori ale atributelor (răspunsuri)
53
Data spaţială este un termen utilizat pentru a descrie datele care aparţin
spaţiului ocupat de obiectele unei baze de date. In sens larg, datele spaţiale pot fi:
puncte, linii, poligoane, suprafeţe, volume (date avînd mai multe dimensiuni), numite
generic, vectori.
Punctul este caracterizat prin locaţia sa, nu ocupă spaţiu şi nu are asociată o
arie sau un volum. Intr-o bază de date punctul se stochează printr-o măsură directă a lui
sau printr-o măsură indirectă (transformare). Data de tip raster este un exemplu de
folosire a măsurii directe a unui punct şi include harta de pixeli (imaginea bitmap). De
exemplu, o imagine preluată din satelit realizează o corespondenţă directă între un pixel
de imagine şi suprafaţa acoperită de el pe suprafaţa terestră.
Linia se caracterizează prin existenţa a două puncte (cel de început şi cel de
sfîrşit) urmând ca punctele intermediare să fie generate prin ecuaţia dreptei. Un obiect
spaţial este descris, de obicei, printr-o colecţie de segmente ca de exemplu cursul unui
rîu sau un drum.
O dată spaţială de tip poligon se caracterizează printr-o locaţie şi un contur.
Locaţia este dată de un punct fix pentru a ancora poligonul în spaţiu (de obicei este
punctul din centrul regiunii). In spaţiul bidimensional, conturul se vizualizează ca o
linie iar în spaţiul tridimensional ca o suprafaţă. Data de tip regiune stocată într-o bază
de date este o aproximare geometrică a unui obiect spaţial (de exemplu, judeţele unei
ţări, lacurile etc).
Coordonatele unui punct se precizează printr-o pereche de valori (x,y) sau prin
tripleta (x,y,z), unde z exprimă altitudinea punctului. Coordonatele punctelor furnizează
datelor spaţiale două perspective: una geografică care depinde de sistemul de
coordonate folosit şi referă poziţia şi eventual dimensiunea elementului în spaţiul real
precum şi una ecran ce ţine de afişarea datelor spaţiale pe monitorul calculatorului.
Formatul de stocare a datelor spatiale ARC/INFO coverage utilizează un model
de date geo-relaţional bazat pe modelul vectorial pentru reprezentarea informaţiilor
spaţiale (poziţie şi formă) şi pe modelul relaţional al bazelor de date pentru
reprezentarea informaţiilor aspaţiale (atribute descriptive). In modelul de date
ARC/INFO coverage, informaţiile geografice sunt abstractizate prin utilizarea unor
concepte simple - puncte, linii, poligoane, fiecare obiect geografic fiind pus în
corespondenţă cu una sau mai multe tabele de atribute. Modelul de date ARC/INFO
coverage stă la baza reprezentării de:
obiecte geografice simple (punctuale, liniare, poligonale)
obiecte geografice complexe (regiuni, trasee şi secţiuni)
obiecte auxiliare (adnotări, puncte de control)
obiecte conceptuale (teme, vederi)
Formatul ARC/INFO coverage memorează coordonate numai pentru puncte,
arce şi noduri şi utilizează relaţiile topologice pentru a defini poligoane şi reţele.
Poligoanele şi reţelele stau la baza definirii de regiuni şi rute. Formatul ARC/INFO
coverage permite integrarea unei mari varietăţi de date geografice: imagini video,
înregistrări de teledetecţie, desene CAD, documente scanate, fişiere text, fişiere
RDBMS comerciale.
Modelul de date ARC/INFO coverage utilizează următoarele două concepte
de bază:
a) Structura de date ARC-NOD:
Aceasta este cea mai eficientă structură pentru a reprezenta date de tip
vectorial. In această structură, arcele sunt determinate prin noduri iar poligoanele sunt
construite prin arce. Nodurile definesc cele două capete ale unui arc; două sau mai multe
arce se pot inter-conecta printr-un nod comun. Un arc este format din cele două noduri
54
extreme şi de o serie de puncte intermediare (de inflexiune) care dau forma arcului.
Nodurile şi punctele intermediare sunt reprezentate ca perechi de coordonate x, y. Un
poligon este format dintr-o serie de arce ce definesc conturul acestuia. In acest mod este
eliminată duplicarea datelor: frontiera comună a două poligoane adiacente este
memorată o singură dată; un punct comun mai multor arce este reprezentat o singură
dată. Această structură asigură nu numai stocarea eficientă a datelor şi implicit
prelucrarea mai rapidă a unui mare volum de date, ci este şi un suport foarte eficace
pentru definirea relaţiilor spaţiale dintre obiecte: poligoanele care utilizeaza cel puţin
un arc comun sunt vecine, o serie de arce interconectate prin noduri comune formează
un traseu ce poate fi străbătut, etc.
b) Topologia
Acesta este un concept matematic utilizat pentru a reprezenta explicit relaţiile
spaţiale dintre obiecte (vecinătate, continuitate, interconexiune). Cele trei concepte
topologice specifice
formatului de date ARC/INFO coverage sunt:
conectivitate (relaţia ARC-NOD) - arcele se inter-conectează prin
noduri (în structura coverage, informaţiile spaţiale asociate arcelor se
memorează ca liste de perechi de coordonate X, Y corelate cu liste de
triplete ARC, FROM-NODE, TO-NODE); toate arcele care au un nod
comun se conectează între ele.
definirea ariei (relaţia POLIGON-ARC) - arcele care se
interconectează pentru a delimita o suprafaţă închisă definesc un
poligon (în structura coverage, informaţiile spaţiale asociate
poligoanelor se memorează ca liste de arce alcătuind frontiere)
sens (relaţia STÂNGA- DREAPTA) - fiecare arc are o direcţie şi câte
un poligon de fiecare parte (în structura coverage, se memorează şi liste
de triplete ARC, LEFT-POLY, RIGHT-POLY); poligoanele care au un
arc comun sunt adiacente, un poligon special fiind 'poligonul univers'
('poligonul extern') reprezentând exteriorul zonei de interes.
Crearea şi memorarea topologiei în structura coverage aduce o serie de
avantaje: datele sunt reprezentate eficient, evitându-se duplicarea datelor, la economia
de memorie adăugându-se viteza crescută de prelucrare pentru volume mari de date. In
plus, topologia stă la baza implementării funcţiilor analitice spaţiale care sunt cheia
oricărui GIS: modelarea curgerii unui fluid printr-o reţea, combinarea poligoanelor
adiacente având caracteristici similare, identificarea obiectelor adiacente, suprapunerea
mai multor obiecte geografice, etc. Definirea ariei are ca rezultat stocarea eficientă a
datelor: deşi un arc poate aparea în lista de arce pentru mai multe poligoane, de fapt el
este stocat o singură dată. Definirea ariei asigură ca frontierele poligoanelor adiacente
să nu se suprapună. Relaţiile topologice sunt utilizate pentru a efectua funcţii analitice
fără a fi necesar accesul la poziţiile absolute stocate în fişierele de coordonate. În acest
fel prelucrarea datelor este mai rapidă şi pot fi prelucrate volume mai mari de date.
55
Datele spaţiale sunt frecvent puse în corelaţie cu atribute convenţionale (date
nonspaţiale). De exemplu, un judeţ se descrie spaţial printr-un poligon (regiune) dar şi
nonspaţial prin nume, suprafaţă, număr de localităţi, populaţie etc. In funcție de modul
de organizare a datelor și al realizării legăturii dintre atributele nonspațiale și cel spațial
s-au definit două modele:
Modelul de date georelațional implică stocarea datelor în formate
independente care se bazează pe divizarea atributelor în două entități și stocarea lor
separată. Astfel, o dată spațială este alcătuită din atributul spațial, care se stochează
separat de atributele nonspațiale, legătura fiind făcută prin intermediul unui câmp de
identificare (ID), ce are rolul de a combina, în mod coerent, cele două tipuri de atribute.
Legătura dintre entități se poate face bidirecțional adică fie de la cele spațiale către cele
nonspațiale sau invers.
Stocarea datelor spațiale prin modelul geobază de date presupune stocarea atât
a atributelor spațiale cât și a celor nonspațiale, împreună, într-o tabelă de atribute.
Câmpul care conține atributul spațial este de tip vector (geometric). Atributele spaţiale
ca şi cele nespaţiale apar şi la nivelul conceptual. Astfel, valoarea unui atribut spaţial
este comună tuturor atributelor nespaţiale dintr-un tuplu. Tuplurile unei tabele care
conţine un atribut spaţial pot fi vizualizate atît geometric (spaţial) cît şi în mod clasic,
relaţional (tabelar).
O problemă importantă a sistemului care gestionează baza de date spaţială o
constituie efectuarea legăturii dintre datele spaţiale ce sunt stocate în structuri de date
specifice, cu restul datelor nespaţiale.
Două legături sunt menţionate între aceste tipuri de date care caracterizează un
anumit obiect: legături înainte şi înapoi. Acestea definesc termenul de relaţie spaţială.
Legătura înainte este utilizată la accesarea informaţiilor spaţiale ale unui
obiect, pornind de la informaţiile lui nespaţiale.
Legătura înapoi foloseşte la regăsirea informaţiei nespaţiale a unui obiect
pornind de la informaţia lui spaţială.
Datele spaţiale sunt stocate în structuri de date spaţiale. Dintre acestea, un loc
important îl ocupă cele ierarhice care sunt bazate pe principiul descompunerii recursive.
Avantajele acestor tipuri de structuri rezultă din faptul că sunt compacte, depind de
natura datelor şi permit realizarea operaţiilor de interogare în mod eficient. O astfel de
structură de date este quadtree şi are la bază principiul descompunerii recursive, similar
metodei divide-et-impera. Ea se poate utiliza la descrierea mai multor elemente
aparţinînd clasei datelor spaţiale ca de exemplu: puncte, linii, poligoane etc.
O dată spaţială ce exprimă o regiune poate fi reprezentată fie prin interiorul ei,
fie prin conturul ei. Se presupune, în descrierea procesului de construire a arborelui,
plecînd de la o imagine, că o regiune este reprezentată de interiorul ei.
Structura quadtree se bazează pe subdivizarea succesivă a unei imagini în
patru cadrane de mărimi egale. Dacă un cadran nu conţine numai valoarea 1 sau numai
valoarea 0, el va fi din nou subdivizat în patru cadrane şi aşa mai departe pînă sunt
obţinute cadrane ce au fie valoarea 1 fie 0. Valorile 1 respectiv 0 semnifică faptul că
zona aparţine sau nu regiunii respective.
Exemplu:
Pentru exemplificare se va considera imaginea de mai jos (a) și se va face
reprezentarea
56
ei binară (bitmap). Prin împărţirea succesivă în cadrane, se observă că zonele
astfel obţinute (cadranele) fie aparţin regiunii fie nu. De exemplu, dacă regiunea este
omogenă din punct de vedere a culorii atunci cadranele care acoperă regiunea trebuie
să aibă aceeaşi culore.
57
Această structură poate fi de asemenea utilizată la reprezentarea imaginilor în
trei sau mai multe dimensiuni. Varianta cu trei dimensiuni se numeşte octree.
Modelul de construire a acestui arbore presupune ca imaginea să fie încadrată
într-un cub care va fi recursiv subdivizat în 8 cuburi egale şi aşa mai departe pînă cînd
sunt obţinute regiuni uniforme din punct de vedere a culorii ori se ajunge la un anumit
nivel predefinit de descompuneri.
Dezvoltarea unei structuri ierarhice este avantajoasă deoarece se poate folosi
la procesele de interogare a datelor spaţiale dar şi pentru că se economiseşte spaţiul de
memorie necesar reprezentării unor astfel de date.
Reprezentarea punctelor se face în funcţie de operaţiile care urmează să se
execute cu aceste date. Dintre multiplele moduri de reprezentare a punctelor, adecvată
este structura de date PR quadtree (P pentru puncte şi R pentru regiuni), deci o adaptare
a structurii quadtree la tipuri bine precizate de date spaţiale. Această structură se
bazează pe o descompunere regulată care urmăreşte asocierea unui punct cu un cadran.
Procesul de construire este similar cu cel al structurii quadtree, diferenţa este că
nodurile frunză fie nu conţin nimic, fie conţin puncte prin valorile coordonatelor lor. In
figura de mai jos se poate observa corespondenţa dintre puncte şi cadrane care stă la
baza construirii arborescenţei.
Dezavantajul metodei constă în faptul că, dacă punctele sunt foarte apropiate,
atunci nivelul maxim de descompunere poate fi foarte mare. Avantajul este că structura
devine atractivă în cazul în care prelucrarea datelor spaţiale implică operaţii de căutare.
58
spaţială a datelor. Acestă metodă presupune descompunerea spaţiului în regiuni numite
partiţii. De aceea, metoda este cunoscută sub numele de metoda partiţionării.
Partiţionarea datelor spaţiale se bazează pe conceptul minimizării ariei ocupate de
partiţie. In acest caz, obiectele spaţiale sunt grupate în ierarhii şi apoi ele sunt stocate în
alte structuri de date. Structurile de indexare a datelor spaţiale multidimensionale au la
bază două abordări:
prima se bazează pe observaţia că data spaţială ocupă un subspaţiu a
spaţiului multidimensional;
cea de-a doua se bazează pe faptul că data fiind multidimensională, un
număr mic de dimensiuni stochează majoritatea informaţiei.
59
In figura de mai jos se prezintă arborele R asociat colecţiei de segmente din
figura de mai sus, nodurile avînd capacitatea de maxim două elemente. Se poate observa
modul de partiţionare a spaţiului în vederea încadrării obiectelor spaţiale şi relaţia de
incluziune dintre partiţii, fiind descrisă aceeaşi relaţie de partiţionare şi includere prin
intermediul structurii arborescente R. Zona de intersecţie reprezintă procentul din
volum care este acoperit de mai mult de un dreptunghi. Dacă un nod al unui arbore R
conţine n dreptunghiuri {R1,...,Rn}, zona de intersecţie poate fi definită atfel:
60
unde:
|A| , indică numărul de obiecte conţinute în A;
p, obiect spaţial.
O dată spaţială se asociază cu un singur dreptunghi, de exemplu, în figura de
mai sus, segmentul i este asociat dreptunghiului R5 cu toate că şi partiţiile R1, R2 şi R4
partajează o suprafaţă din R5. In aceste condiţii dacă se doreşte să se determine care
obiect este asociat cu un punct particular vor fi necesare mai multe căutări în baza de
date datorită faptului că acel punct poate fi conţinut în mai multe partiţii.
Algoritmii de căutare, inserare şi ştergere sunt construiţi folosind aceleaşi
principii utilizate la implementarea structurii arborescente. Informaţiile ce se
manipulează se referă la marcarea dreptunghiului r, la cheia tuplului, respectiv la
pointerul la subarborele corespunzător.
61
In primul pas se vor alege două elemente din cele M+1 ce vor fi puse, cîte unul,
în cele două noduri. In acest sens, se va calcula ineficienţa grupării pentru toate
elementele. Astfel, pentru fiecare pereche ri, rj, se compune un dreptunghi R incluzînd
ariile ri, rj. Se calculează:
d = aria (R) - aria (ri) - aria(rj ) şi se alege în final perechea pentru care rezultă
cea mai mare valoare d.
In al doilea pas se controlează dacă toate elementele au fost distribuite la cele
două noduri. In caz afirmativ algoritmul se opreşte. Altfel, dacă un nod are puţine
elemente, restul rămase nedistribuite vor fi asignate la el pentru a avea numărul minim
m şi în acest caz algoritmul se opreşte.
In al treilea pas se selectează următorul element pentru a fi asignat la unul
dintre noduri. Pentru fiecare element rămas r se calculează d1 aria mărită necesară
pentru includerea dreptunghiurilor elementelor din primul nod plus zona dată prin r. Se
calculează d2 similar pentru elementele nodului al doilea. Se găseşte astfel elementul cu
cea mai mare preferinţă pentru un grup. Se alege acela pentru care diferenţa între d1 şi
d2 este maximă. Acesta se va adăuga la grupul al cărui dreptunghi acoperitor va trebui
să fie cel mai puţin mărit pentru a cuprinde elementul. Legătura se rezolvă şi prin
adăugarea elementelor la nodul cu o arie mai mică de cuprindere sau la unul cu mai
puţine intrări. Apoi se continuă cu pasul doi.
Acest algoritm nu garantează găsirea celui mai mic dreptunghi posibil de
încadrare dar performanţele lui sunt destul de bune luînd în considerare necesarul de
timp de prelucrare pentru obţinerea rezultatului.
62
In literatura de specialitate s-a demonstrat că structurile de indexare bazate pe
arbori R nu sunt adecvate pentru date spaţiale reprezentate într-un spaţiu
multidimensional.
O structură performantă de indexare a datelor spaţiale multidimensionale cu
număr mare de dimensiuni este arborele X (eXtended node tree). Structura arborelui X
este prezentată în figura de mai jos.
Se observă că el conţine trei tipuri de noduri:
noduri de date care sunt la nivelul frunzelor şi fac legăura cu datele
spaţiale care se indexează;
noduri directoare normale ce au rol în a dirija căutarea prin arbore şi
sunt similare nodurilor interne dintr-un arbore R;
supernoduri care sunt în fapt noduri directoare de mărime variabilă.
63
După ce datele sunt introduse în bazele de date, toate pachetele de programe
GIS pun la dispoziție instrumente ce permit extragerea informațiilor prin interogări, în
vederea obținerii unui subset de date. Interogarile spațiale sunt cele mai importante, si
presupun selecția entităților în funcție de locație sau de relațiile spațiale cu celelalte
entități. Alte tipuri de interogari foarte utile sunt interogarile grafice ( ˝care sunt valorile
atributelor acestor entități?˝), interogarile atribut (˝unde sunt localizate entitățile cu
aceste valori ale atributelor?˝) sau interogarile formulate cu ajutorul limbajelor de
programare (SQL) de genul: ˝care sunt orașele cu o suprafață mai mică de X mp aflate
la o distanță mai mica de Y m de o anumita sosea?˝. Toate aceste tipuri de interogari
ofera GIS-ului posibilitatea de a efectua analize si modelări ale datelor spațiale, ceea ce
îl distinge de celelalte tipuri de sisteme de informații.
În urma “interogării” se face analiza datelor (în special analiza geografică) iar
rezultatele analizei sunt apoi comunicate prin intermediul hărților tematice, rapoartelor și
graficelor.
64
Baze de date în ArcGIS. Dicționar de termeni
65
grilei, tinând cont de pozitia celulei în grila (numarul liniei/coloanei) si de dimensiunile
celulei pe x si pe y. Valoarea unei celule indica obiectul situat în acea pozitie. Exista
trei metode pentru stabilirea valorilor unei celule: clasificarea obiectelor, în care fiecare
valoare indica un anumit tip de obiecte cum ar fi drum, zona urbana, tip de sol; indicarea
valorii culorii (nivelului de gri) înregistrate într-o imagine (fotografie); indicarea unei
masuratori relative cum ar fi altitudinea fata de nivelul marii, înaltimea unei cladiri fata
de nivelul solului, etc. În modelul raster, obiectele nu au o delimitare bine-definita iar
relatiile spatiale dintre obiecte sunt reprezentate implicit. Reprezentând celule
rectangulare, forma obiectelor nu este foarte exacta si depinde de rezolutia celulei. Prin
rezolutia celulei se întelege dimensiunea suprafetei de teren reprezentate de o celula; cu
cât suprafata reprezentata este mai mica, cu atât rezolutia este mai buna si deci datele
mai precise, în schimb este nevoie de mai multa memorie pentru stocarea datelor si deci
de un timp de prelucrare mai îndelungat. Precum modelul vectorial, modelul raster
permite reprezentarea obiectelor GIS punctuale, liniare sau poligonale. Un obiect
punctual este reprezentat printr-o valoare într-o singura celula a grilei. Un obiect liniar
apare ca o serie de celule adiacente care redau lungimea si forma obiectului. Un obiect
poligonal este reprezentat ca un grup de celule adiacente care redau aria si forma
obiectului. Modelul raster este foarte eficient pentru reprezentarea imaginilor si pentru
implementarea functiilor analitice spatiale (suprapunerea obiectelor, identificarea
întinderii unui fenomen, operatii pe vecinatati). În modelul raster suprafetele sunt
reprezentate prin indicarea în fiecare celula a valorii cotei corespunzatoare punctului
din centrul celulei (o latice). Prin urmare, acest model permite implementarea cu
usurinta a operatiilor asupra suprafetelor (calculul pantei, directiei pantei, interpolarea
curbelor de nivel).
Exista doua moduri în care pot fi stocate datele raster: ca imagini sau ca grid-
uri. În ambele cazuri, datele sunt stocate sub forma unor rânduri si coloane de celule de
dimensiune egala. Fiecare celula stocheaza o valoare. Detaliile depind de dimensiunea
celulei. Cu cât dimensiunea celulei este mai mica, cu atât datele sunt stocate mai precis.
Unele formate pot avea mecanisme de colectie.
Tabele
Un tabel este o colectie de înregistrări (rândurile tabelului) si coloane
(câmpuri). Datele care pot fi stocate într-o coloana trebuie sa fie de acelasi tip si aceste
date pot fi numere, texte, date. În cadrul aceluiasi tabel coloanele trebuie sa aiba nume
unice. Tipurile diferite de câmpuri stocheaza tipuri diferite de valori. Fiecare tip de date
spatiale are asociat un format tabelar nativ. Astfel, pentru datele de tip coverage,
tabelele sunt de tip INFO, pentru date spatiale de tip shapefile, tabelele sunt de dBASE,
iar pentru date spatiale de tip geodatabase, tabelele sunt stocate în RDBMS-ul
corespunzator. Atributele datelor spatiale pot fi stocate în tabelele elementelor sau în
tabele separate. În acest ultim caz, putem asocia tabele care pentru o coloana au valori
cheie comune.
Cheie primara
O cheie primară reprezinta o coloana a unui tabel în care sunt stocate valori
unice prin care se identifica în mod unic înregistarile. Un tabel nu poate avea decât o
cheie primara. O cheie straina realizeaza o conectare la o cheie primara a unui alt tabel.
Datele unei chei straine pot fi duplicate.
Cardinalitate
Relatia dintre doua tabele este caracterizata prin cardinalitate. Aceasta
reprezinta câte obiecte "A" sunt legate de obiectul "B". Exista trei tipuri de cardinalitate:
one-to-one
66
one-to-many sau many-to-one
many-to-many
Înainte de a conecta doua tabele trebuie cunoscuta cardinalitatea relatiei care
se stabileste între ele.
Join
Tabelele pot fi conectate prin operatia numita "join". În acest caz conectarea
este logica si se presupune ca relatia este one-to-many; se poate realiza si daca relatia
este many-to-one. În general, numele câmpurilor de legatura nu trebuie sa fie identice,
dar tipul câmpurilor trebuie sa fie acelasi.
Clase de relații
Asocierea a doua tabele se poate realiza si prin intermediul unor clase de relatii.
În acest caz, tabelele sunt legate virtual, nu fizic. Caracteristici importante ale claselor
de relatii sunt:
Nu se creeaza noi straturi
O conectare este persitenta pâna când se îndeparteaza
Asocierea dinte tabele este dinamica
Se pot edita, interoga sau simboliza date in oricare dintre tabele
Clasele de relatii reprezinta asocieri mai flexibile ale tabelelor. Clasele de
relatii pot fi definite între coveage-uri sau între clasele de elemente ale unei
geodatabase. Relatia se defineste în ArcCatalog si se utilizeaza în ArcMap.
Fisiere XML
Extensible markup language este un limbaj de marcare asemanator cu limbajul
de marcare al hipertextului. HTML defineste atat datele, cat si modul in care ele sunt
prezentate. XML, pe de alta parte, ne lasa sa definim datele utilizand etichete care
adauga un inteles.
Stylesheets
Stylesheets sunt utilizate pentru a defini modul in care datele XML sunt
prezentate. Ele sunt create utilizand limbajul stylesheet extins. XSL este o multime
definita de etichete XML care pot fi utilizate pentru a interoga si a evalua datele XML.
67
Pentru numere, delimitatorul zecimal este (.) și se pot folosi oricare dintre
operatorii =, <>, >, <, >=, <= și BETWEEN. Ex.: POP92>600000.
Subinterogările pot fi folosite doar pentru fișiere ale bazei de date (Ex.
tabele). O subinterogare poate fi utilizată folosind IN și ANY (Ex. județele
care au populația mai mare decât media se obțin folosind comanda
POP92>(SELECT AVG(POP92) FROM Judete) și comunele din județele cu
o populație peste medie se pot obține prin
JUDET IN (SELECT NUME FROM Judete WHERE POP92>(SELECT
AVG(POP92) FROM Judete))
Arithmetic operators
You use an arithmetic operator to add, subtract, multiply, and divide numeric
values.
Operator Description
Comparison operators
You use comparison operators to compare one expression to another.
Operator Description
68
<> Not equal to. It can be used with strings (comparison
is based on alphabetical order), numbers, and dates.
69
[NOT] IN Selects a record if it has one of several strings or
values in a field. When preceded by NOT, it selects a
record if it doesn't have one of several strings or
values in a field. For example, this expression
searches for four different state names:
"POPULATION" IS NULL
70
The percent symbol and underscore wildcards work for
any file-based data or multiuser geodatabase data.
LIKE works with character data on both sides of the
expression. If you need to access noncharacter data, use
the CAST function. For example, this query returns
numbers that begin with 8 from the integer field
SCORE_INT:
CAST ("SCORE_INT" AS VARCHAR) LIKE '8%'
Logical operators
Operator Description
71
OR Combines two conditions together and selects a record if at
least one condition is true. For example, the following
expression selects any house with more than 1,500 square
feet or a garage for more than two cars:
Date functions
Function Description
Date functions
String functions
Arguments denoted asstring_exp can be the name of a column, a character-
string-literal, or the result of another scalar function, where the underlying data
type can be represented as a character type.
Arguments denoted ascharacter_exp are variable-length character strings.
72
Arguments denoted asstart or length can be a numeric-literal or the result of
another scalar function, where the underlying data type can be represented as a
numeric type.
These string functions are 1-based; that is, the first character in the string is
character 1.
Function Description
73
Numeric functions
All numeric functions return a numeric value.
Arguments denoted as numeric_exp, float_exp, or integer_exp can be the name
of a column, the result of another scalar function, or a numeric-literal, where the
underlying data type could be represented as a numeric type.
Function Description
74
ROUND(numeric_exp, Returns numeric_exp rounded to
integer_exp) integer_exp places to the right of the
decimal point. If integer_exp is
negative, numeric_exp is rounded to
|integer_exp| places to the left of the
decimal point.
Unde:
in_features - elementul care stă la baza noului strat
out_layer – numele noului strat
where_clause – o interogare SQL folosită pentru selecția unui subset de
date
workspace – spațiul de lucru folosit pentru validarea câmpurilor
field_info – utilizat pentru redenumirea câmpurilor și pentru ascunderea
unora dintre ele
Unde:
in_table - elementul care stă la baza noului tabel
out_view – numele noului tabel
where_clause – o interogare SQL folosită pentru selecția unui subset de
date
workspace – spațiul de lucru folosit pentru validarea câmpurilor
field_info – utilizat pentru redenumirea câmpurilor și pentru ascunderea
unora dintre ele ("ORIGINAL_NAME NEW_NAME
HIDDEN/VISIBLE")
76
Sintaxa:
SelectLayerByAttribute_management (in_layer_or_view, {selection_type},
{where_clause})
Unde:
in_layer_or_view - elementul asupra căruia se va aplica selecția
selection_type – tipul selecției (implicit NEW_SELECTION)
where_clause – o interogare SQL folosită pentru selecția unui subset de
date
Buffer
Aceasta ne va permite să creăm un poligon de tip buffer în jurul unui element pe
baza unei distanțe date.
Sintaxa:
Buffer_analysis (in_features, out_feature_class, buffer_distance_or_field,
{line_side}, {line_end_type}, {dissolve_option}, {dissolve_field})
Unde:
in_features – linia, punctul sau poligonul în jurul căruia creăm buffer-ul
out_feature_class – buffer-ul rezultat
buffer_distance_or_field – distanța din jurul elementului de intrare
line_side – partea pe care se face buffer (implicit FULL)
line_end_type – tipul buffer-ului la final
disolve_option – tipul de dizolvare (implicit NONE)
dissolve_field – lista câmpurilor elementului de intrare pe baza cărora se
face dizolvarea
77
Clip
Aceasta ne va permite să decupăm o porțiune dintr-un element pe baza unor
specificații date..
Sintaxa:
Clip_analysis (in_features, clip_features, out_feature_class,
{cluster_tolerance})
Unde:
in_features – elementul care va fi “decupat”
clip_features –zona de decupat
out_feature_class – elementul rezultat
cluster_tolerance – distanța minimă de separare a elementelor
Add Join
Aceasta ne va permite să îmbinăm un strat cu altul sau cu un tabel.
Sintaxa:
AddJoin_management (in_layer_or_view, in_field, join_table, join_field,
{join_type})
78
Unde:
in_layer_or_view – stratul sau tabelul din stanga (la operația de îmbinare)
in_field – campul stratului/tabelului din stânga folosit pentru îmbinare
join_table – stratul sau tabelul din dreapta (la operația de îmbinare)
join_field – campul stratului/tabelului din dreapta folosit pentru îmbinare
join_type – tipul îmbinării ( implicit KEEP_ALL)
Remove Join
Aceasta ne va permite să eliminăm îmbinări existente între straturi sau tabele.
Sintaxa:
RemoveJoin_management (in_layer_or_view, {join_name})
Unde:
in_layer_or_view – stratul sau tabelul pentru care se va elimina îmbinarea
join_name – numele îmbinării care va fi eliminată
Creare FeatureClass
Aceasta ne va permite să creăm o clasă goală, care va conține caracteristicile
pentru un nou strat sau tabel într-o bază de date spațială.În folderul corespunzător
spațiului de lucru va crea un fișier de tip shapefile.
Sintaxa:
CreateFeatureclass_management (out_path, out_name, {geometry_type},
{template}, {has_m}, {has_z}, {spatial_reference}, {config_keyword},
{spatial_grid_1}, {spatial_grid_2}, {spatial_grid_3})
Unde:
out_path – baza de date sau folderul (spațiul de lucru) în care va fi creat
fișierul corespunzător
out_name – numele clasei
geometry_type – tipul geometriei clasei: POINT, MULTIPOINT,
POLYGON, POLYLINE
79
Sintaxa:
AddField_management (in_table, field_name, field_type, {field_precision},
{field_scale}, {field_length}, {field_alias}, {field_is_nullable}, {field_is_required},
{field_domain})
Unde:
in_table – tabelul sau clasa căreia i se adaugă noul membru
field_name – numele câmpului
field_type – tipul câmpului:
o TEXT — șiruri de caractere.
o FLOAT — numere zecimale cuprinse între -3.4E38 și 1.2E38.
o DOUBLE — numere zecimale cuprinse între -2.2E308 și
1.8E308.
o SHORT — numere întregi între -32,768 și 32,767.
o LONG — numere întregi între -2,147,483,648 și 2,147,483,647.
o DATE —date și timp
o BLOB — secvențe lungi de numere binare
o RASTER — pentru imagini (raster).
o GUID —Globally unique identifier.
field_length – lungimea câmpului
Ștergerea elementelor
Pentru ștergerea unor elemente vreate se poate folosi Delete_management.
Sintaxa:
Delete_management (in_data, {data_type})
Unde:
in_data – data de intrare care va fi ștearsă
data_type – tipul de data al datelor de intrare
80
Exemple
Următoarele scripturi vor fi testate în ArcMap folosind fișierul folosit în cadrul
laboratoarelor.
1) Încărcăm pachetul arcpy.
import arcpy
2) Construim stratul "Drumuri_lyr" pe baza tabelei Drumuri.
În loc de “cale” se va pune calea de pe calculatorul curent
arcpy.env.overwriteOutput = True
arcpy.MakeFeatureLayer_management("cale/ro1mil.gdb/Drumur
", "Drumuri_lyr")
81
11) arcpy.MakeFeatureLayer_management("cale/ro1mil.gdb/
Localitati", "Localitati_Judete_join")
Dacă pașii anteriori ar trebui reluați pentru mai multe drumuri atunci este indicat
să se creeze o funcție care va primi ca argument numele drumului. Vor interveni
svhimbări la codul corespunzător pasului 3.
import arcpy
cale=”…”
def localitati(drum):
arcpy.env.overwriteOutput = True
arcpy.MakeFeatureLayer_management(cale+"/Drumuri",
"Drumuri_lyr")
arcpy.SelectLayerByAttribute_management("Drumuri_lyr",
"NEW_SELECTION"," nume1='"+drum+"' or nume2='"+drum+"' ")
arcpy.MakeFeatureLayer_management(cale+"/Judete”,
"Judete_lyr")
arcpy.SelectLayerByLocation_management ("Judete_lyr",
"INTERSECT", "Drumuri_lyr")
arcpy.Buffer_analysis("Drumuri_lyr",
"Drumuri_lyr_Buffer","10000 Meters", "FULL",
"ROUND","ALL")
arcpy.MakeFeatureLayer_management(cale+"/Localitati",
"Localitati_lyr")
arcpy.SelectLayerByLocation_management("Localitati_lyr","
INTERSECT", "Drumuri_lyr_Buffer", 0,"NEW_SELECTION")
arcpy.MakeFeatureLayer_management(cale+"/Rauri”,
"Rauri_lyr")
arcpy.Clip_analysis("Rauri_lyr", "Drumuri_lyr_Buffer",
"Rauri_clip")
arcpy.MakeFeatureLayer_management(cale+”/Localitati",
"Localitati_Judete_join")
arcpy.AddJoin_management("Localitati_Judete_join",
"JUDET", cale+"/Judete", "NUME","KEEP_COMMON")
După încărcarea scriptului, apelul funcției poate fi făcut din linia de comandă
astfel:
localitati("E85")
82
Exemple de accesare a câmpurilor din straturi/tabele (utilizând Python)
import arcpy
cale="…"
infc = cale+"/Judete"
rows = arcpy.SearchCursor(infc)
judet_max_dens=""
max_dens=0
for row in rows:
if row.Nume!="BUCURESTI" and
row.POP92/row.Shape_Area>max_dens:
max_dens=row.POP92/row.Shape_Area
judet_max_dens=row.Nume
import arcpy
cale="…"
infc = cale+"/Judete"
judete = []
rows = arcpy.SearchCursor(infc)
for row in rows:
judete.append([row.Nume,
row.POP92/row.Shape_Area])
ordonat=False
while not ordonat:
ordonat=True
for index in range(1,len(judete)):
if judete[index-1][1]<judete[index][1]:
temp=judete[index-1]
judete[index-1]=judete[index]
judete[index]=temp
ordonat=False
break
83
Pentru a exemplifica citirea valorilor de tip Point afișăm lista localităților însoțide
de ID și coordonate
import arcpy
cale="…"
infc = cale+"/Localitati"
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor(infc)
import arcpy
cale="…"
arcpy.env.overwriteOutput = True
arcpy.MakeFeatureLayer_management(cale+"/Drumuri ",
"Drumuri_lyr")
arcpy.SelectLayerByAttribute_management("Drumuri_lyr"
, "NEW_SELECTION"," nume1='DN17' or nume2='DN17'")
infc = "Drumuri_lyr"
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor(infc)
84
Pentru a exemplifica citirea valorilor de tip Polygon afișăm lista punctelor ce
descriu județul IAȘI
import arcpy
cale="…"
arcpy.env.overwriteOutput = True
arcpy.MakeFeatureLayer_management(cale+"/Judete ",
"Judete_lyr")
arcpy.SelectLayerByAttribute_management("Judete_lyr",
"NEW_SELECTION"," nume='IASI'")
infc = "Judete_lyr"
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor(infc)
def distanta_puncte(x1,y1,x2,y2):
return math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
import arcpy
cale="…"
arcpy.env.overwriteOutput = True
def distanta_puncte(x1,y1,x2,y2):
return math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
def punct_pe_poligon(punct,polig):
return punct.touches(polig)
def lungime_comuna(polig1,polig2):
puncte=[]
for pcte in polig1:
for punct in pcte:
85
if punct:
puncte.append([punct.X, punct.Y,
punct_pe_poligon(punct,polig2)])
L=0
for i in range(1,len(puncte)):
if puncte[i-1][2] and puncte[i][2]:
L+=distanta_puncte(puncte[i-
1][0],puncte[i-1][1],puncte[i][0],puncte[i][1])
return L
def vecini_judet(nume_judet):
judete=[]
infc = cale+"/Judete"
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor(infc)
for row in rows:
judete.append([row.NUME,row.getValue(shapefieldname)])
if row.NUME==nume_judet:
polygon=row.getValue(shapefieldname)
print "Judetele vecine si lungimile frontierelor:"
for judet in judete:
if polygon.touches(judet[1]):
print judet[0] + " "+
str(lungime_comuna(polygon,judet[1]))
def punct_in_poligon(punct,polig):
return polig.contains(punct)
def localitati_judet(nume_judet):
infc = cale+"/Judete"
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor(infc)
for row in rows:
if row.NUME==nume_judet:
polygon=row.getValue(shapefieldname)
break
86
infc = cale+"/Localitati"
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor(infc)
for row in rows:
if
punct_in_poligon(row.getValue(shapefieldname).getPart
(),polygon):
print row.NUME
def lungime_figura(figura):
lungime=0
for part in figura:
puncte = []
for pct in part:
if pct:
puncte.append([pct.X,
pct.Y])
for i in range(1,len(puncte)):
lungime+=distanta_puncte(puncte[i-1][0],puncte[i-
1][1],puncte[i][0],puncte[i][1])
return lungime
def lungime_rau(nume_rau):
infc = cale+"/Rauri"
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor(infc)
L=0
for row in rows:
if row.NUME==nume_rau:
L+=lungime_figura(row.getValue(shapefi
eldname))
print "Lungimea raului "+nume_rau+ " este :
"+str(L)
import arcpy
arcpy.env.overwriteOutput = True
cale="…"
in_workspace = "c:/temp"
output_name = "sediu.shp"
87
arcpy.CreateFeatureclass_management(in_workspace,
output_name, "POINT")
arcpy.AddField_management("sediu", "Nume", "TEXT",
field_length=25,field_is_nullable="NON_NULLABLE")
arcpy.AddField_management("sediu", "NrAngajati",
"SHORT")
arcpy.MakeFeatureLayer_management(in_workspace+"/sedi
u.shp","Sedii_lyr","","","Id Id HIDDEN")
infc = cale+"/Localitati"
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName
rows = arcpy.SearchCursor(infc)
for row in rows:
if row.NUME=="IASI":
punct=row.getValue(shapefieldname)
break
rows = arcpy.InsertCursor("Sedii_lyr")
# adaugam o inregistrare
row = rows.newRow()
row.setValue("Shape", punct)
row.setValue("Nume", "Sediu IASI")
row.setValue("NrAngajati", 7)
rows.insertRow(row)
88