Sunteți pe pagina 1din 124

PARTEA I

I. Introducere
II. Abordarea bazelor de date
III. Modele de baze de date
IV. Limbaje pentru baze de date
V. Structuri fizice
VI. Interfeţe
 
Aplicaţiile de tip “bază de date” se referă la acele produse livrate
utilizatorului “la cheie” pentru a-şi rezolva o problemă concretă. Aplicaţiile de tip
“bază de date” existente pe piaţa românească se pot împărţi în trei mari grupe, după
finalitatea datelor manevrate:
a. a.       baze de date personale;
b. b.      baze de date informaţionale;
c. c.       baze de date pentru gestiunea economică.
 
a. Bazele de date “personale” sunt mici colecţii de date care prezintă interes şi
sunt manipulate de un singur utilizator. Câteva exemple tipice sunt următoarele:
agendă telefonică, planificarea de întruniri, evidenţa cărţilor din biblioteca personală.
Pentru astfel de utilizări restrânse ale unei baze de date, se poate folosi aplicaţia Card
File disponibilă în pachetul Windows 3.x.
b. Bazele de date de tip informaţional sunt în general caracterizate de un
volum foarte mare de date (informaţii) ce sunt destinate publicului larg. Ele pot fi
considerate adevărate “birouri de informaţii” computerizate. Domeniul de
aplicabilitate a acestor baze de date este extrem de diversificat şi face imposibilă o
clasificare.
c. Bazele de date pentru gestiunea economică reprezintă colecţii de date
necesare şi utilizate pentru gestionarea unei întreprinderi. Aplicaţiile cele mai
reprezentative care operează cu astfel de baze de date sunt produsele CIEL.
 
Pentru a înţelege mai bine cum este alcătuită şi cum funcţionează o bază de
date, trebuiesc specificate câteva noţiuni privind teoria generală a bazelor de date, cu
aplicabilitate în arheologie:
 
I. I.                   Introducere
 
1. 1.      Ce este o bază de date ?
 
O bază de date conţine toate informaţiile necesare despre obiectele ce intervin
într-o mulţime de aplicaţii, relaţiile logice dintre aceste informaţii şi tehnicile de
prelucrare corespunzătoare. În bazele de date are loc o integrare a datelor, în sensul că
mai multe fişiere sunt privite în ansamblu, eliminându-se informaţiile redundante.
Este permis accesul simultan la aceleaşi date, situate în acelaşi loc sau distribuite
spaţial, a mai multor persoane prin mai multe tipuri de interogări (BÂSCĂ 1997, 11;
DESPI & 1999, 2).
O bază de date poate fi:
         integrată;
         partajată.
 

1
Prin “integrată” înţelegem că baza de date poate fi gândită ca o unificare de
mai multe fişiere de date, distincte şi neredundante.
Prin “partajarea” unei baze de date se înţelege că bucăţile individuale de date
din baza de date pot fi partajate între mai mulţi utilizatori individuali, fiecare dintre ei
putând avea acces la aceeaşi bucată de date simultan (sisteme multiutilizator).
 
Hardul unui sistem de baze de date constă din volumele de memorare
secundare (discuri, dischete sau benzi magnetice) pe care rezidă baza de date,
împreună cu aparatele, unităţile de control şi canalele respective.
 
Între baza de date fizică (adică datele aşa cum sunt ele memorate pe suport) şi
utilizatorii sistemului există un nivel de software, numit sistem de gestionare a
bazelor de date (DBMS – Data Base Management System), care permite construirea
unor baze de date, introducerea informaţiilor în baza de date şi dezvoltarea de aplicaţii
privind bazele de date.
Un DBMS dă posibilitatea utilizatorului să aibă acces la date folosind un
limbaj de nivel înalt, apropiat de modul obişnuit de exprimare, pentru a obţine
informaţii, utilizatorul făcând abstracţie de algoritmii aplicaţi pentru selectarea datelor
implicate şi a modului de memorare a lor. DBMS-ul este deci o interfaţă între
utilizator şi sistemul de operare.
 
Orice DBMS conţine un limbaj de descriere a datelor (LDD) care permite
descrierea structurii unei baze de date, a fiecărei componente a ei, a relaţiilor dintre
componente, a drepturilor de acces ale utilizatorului la baza de date, a restricţiilor în
reprezentarea informaţiilor, etc. LDD-ul este utilizat atât pentru proiectarea bazelor de
date, cât şi pentru redefinirea lor.
 
O altă componentă a DBMS este limbajul de cereri (LC) sau limbajul de
prelucrare a datelor (LPD), ce permite operaţii asupra datelor aflate în baza de date,
cum ar fi:
              încărcarea bazei de date;
              inserarea unui nou element;
              ştergerea unui element;
              modificarea unui element;
              căutarea unor elemente;
              realizarea de diferite statistici asupra datelor.
 
Limbajele LDD şi LC sunt extinderi ale unor limbaje de programare numite
limbaje gazdă. Compilarea succesiunilor de comenzi pentru descrierea datelor sau
pentru operarea cu date se reduce la transformarea acestor comenzi într-o succesiune
de instrucţiuni ale limbajelor gazdă care, prin executare, să dea efectul dorit. O altă
modalitate de operare este aceea a transformării comenzilor în lansări de programe
executabile.

Utilizatorii sistemelor de gestionare a bazelor de date (DBMS) se grupează în trei


categorii:
a. a.       programatorii de aplicaţie (care scriu programele aplicaţie în
limbaje de programare: Cobol, C, etc.) sau în limbaje de
programare specifice: dBase, FoxPro, etc.);

2
b. b.      end-userii sau utilizatorii (care accesează baza de date de la un
terminal, folosind un limbaj de interogare numit “query
language”);
c. c.       administratorii bazelor de date DBA (care stabilesc structura
iniţială a bazei de date şi modul de memorare a datelor la nivel
fizic, acordă utilizatorilor drepturi de acces la baza de date sau părţi
ale ei, asigură securitatea datelor, modifică structura şi întreţine
baza de date).
 
2. 2.      Datele operaţionale
 
Datele operaţionale sunt date din bazele de date, distincte de datele de intrare,
ieşire sau alte tipuri de date. O bază de date este o colecţie de date operaţionale
folosite de către aplicaţiile sistem ale unei instituţii (Muzeu, Bibliotecă, Intreprindere,
etc.)
Datele de intrare sunt informaţii introduse în sistem din lumea exterioară, de
obicei prin terminale.
Datele de ieşire se referă la mesajele şi rapoartele extrase din sistem (tipărite
sau afişate pe ecran).
Entităţile de bază sunt elementele constitutive ale unei baze de date (expl.
materialul arheologic, materialul bibliografic, materialul grafic, etc.). Între aceste
entităţi există întotdeauna asociaţii sau relaţii ce le leagă într-o bază de date comună.
Relaţiile dintre entităţi sunt la rândul lor părţi ale datelor operaţionale, chiar
mai importante decât entităţile asociate. O relaţie poate fi asociată la una, două sau
trei entităţi, iar o entitate poate fi asociată la oricâte relaţii.
 
3. 3.      Independenţa datelor
 
Modul în care datele sunt organizate pe suportul secundar de stocare şi modul
în care ele sunt accesate depind de cerinţele aplicaţiei şi de ştiinţa organizării datelor
şi tehnicile de acces.
Imunitatea aplicaţiilor la modificările de structură a memorării şi a strategiei
de acces se numeşte independenţă a datelor.
Tipuri de modificări pe care administratorul bazei de date (DBA) poate să le
facă:
         reprezentarea datelor numerice (câmpul numeric poate fi memorat în
formă internă aritmetică sau ca un şir de caractere);
         reprezentarea datelor caracter (un câmp şir de caractere poate fi
memorat în mai multe coduri de caractere : ASCII, EBCDIC, etc.).
 
Terminologie:
       Un câmp este cea mai mică unitate de date stocată în baza de date.
       Baza de date conţine mai multe ocurenţe sau instanţe pentru fiecare
din tipurile de câmpuri.
       O înregistrare este o colecţie de nume de câmpuri asociate.
       O ocurenţă sau instanţă de înregistrare constă dintr-un grup de
ocurenţe de câmp înrudite (asociate) şi reprezintă o asociere între ele.
       Un fişier este o colecţie a tuturor înregistrărilor de unul sau mai multe
tipuri.

3
       Într-o bază de date, un câmp numeric poate avea două unităţi metrice
(inches şi centimetrii) la alegerea utilizatorului.
 
3.3.1.  Structura înregistrărilor memorate
 
Într-o bază de date, două tipuri de înregistrări pot fi combinate într-unul
singur.
Exemplu:
înregistrarea 1.: neolitic, Vinča, ceramică pictată, străchini (…)
înregistrarea 2.: neolitic, Petreşti, ceramică pictată, străchini (…)
structură integrată: neolitic, Vinča, Petreşti, ceramică pictată, străchini
(…)
 
Astfel se explică faptul că înregistrarea logică a unei aplicaţii poate consta
dintr-o submulţime a unei înregistrări memorate, adică anumite câmpuri memorate
pot fi invizibile pentru o aplicaţie particulară (de exemplu elementele care se repetă).
La fel, un singur tip de înregistrare memorată poate fi despicat în două, pentru a
particulariza anumite aplicaţii.
 
3.3.2.  Structura fişierelor memorate
 
Un fişier poate fi implementat fizic în memorie în mai multe moduri:
         poate fi în întregime conţinut într-un volum de memorare (expl.: disc
magnetic);
         poate fi împărţit pe mai multe volume de tipuri diferite;
         poate fi sau nu fizic secvenţial, în concordanţă cu valorile unui anumit
câmp;
         poate avea unul sau mai mulţi indecşi asociaţi;
         poate fi construit cu pointeri;
         înregistrările pot fi blocate sau nu, etc.
 
Baza de date trebuie să fie în stare să crească fără a afecta aplicaţiile existente,
aceasta fiind raţiunea majoră a independenţei datelor.
 
4. 4.      Arhitectura unui sistem de baze de date
 
a. a.      nivelul exterior scheme exterioare
(vederile utilizatorilor
individuali)
 

b. b.      nivelul conceptual


(vederile comune utilizatorilor)
 
c. c.       nivelul intern
(vederile memorate)
 
O bază de date poate fi privită din mai multe puncte de vedere:
a. a.       opţiunea utilizatorului, care lucrează cu anumită părţi ale unei
baze de date numite vederi;

4
b. b.      opţiunea administratorului bazei de date care integrează toate
vederile referitoare la baza de date într-un singur model numit
schemă conceptuală, ea reprezentând nivelul logic al bazei de date;
c. c.       opţiunile implementatorului bazei de date (coincide uneori cu
cele ale administratorului) care priveşte baza de date ca pe o
colecţie de fişiere memorate pe diferite medii externe (benzi şi
discuri magnetice), ele constituind nivelul fizic al bazelor de date.
 
Primele două nivele sunt descrise prin planuri ce constau în enumerarea
tipurilor de entităţi ce apar în baza de date, relaţiile dintre aceste tipuri de entităţi şi
modul de trecere de la noţiunile acestui nivel la nivelul imediat următor. În mod
curent, aceste planuri se numesc scheme externe, subscheme conceptuale sau vederi,
pentru primul nivel şi scheme conceptuale pentru al doilea nivel. Descrierile la nivel
fizic sunt făcute prin scheme interne sau scheme fizice.
 
4.4.1.  Scheme externe
 
O schemă externă reprezintă conţinutul bazei de date aşa cum este ea văzută
de un utilizator particular.
Exemplu:
Pentru un utilizator poate să apară într-o vedere atributul număr străchini (=
numărul fragmentelor ceramice de tipul “N”), dar la nivel logic şi fizic acest atribut
nu este indicat, din cauza permanentei modificări a conţinutului său. În acest caz se
foloseşte la nivel logic atributul ceramică (= numărul total general de fragmente
ceramice) din care se scad atributele nr. oale, nr. farfurii, nr. chiupuri, etc. (= numărul
fragmentelor ceramice “M”≠”N”) din baza de date. Astfel se permite aflarea
numărului exact al fragmentelor ceramice de tip strachină din baza de date.
 
Pentru utilizatorul obişnuit, modul de definire a vederilor este transparent, el
putând să obţină sau să modifice informaţiile dorite prin intermediul unor comenzi cu
structură dată, folosind formule predefinite pe care le completează sau poate utiliza un
sistem de meniuri.
În reprezentarea intuitivă a vederilor intervin noţiunile de entitate, relaţie,
atribut, cheie, funcţionalitate, diagramă, şi altele pe care le vom definii ulterior.
Schema externă este scrisă într-un sublimbaj de definire a datelor (SLDD)
dintr-un DLL numit adesea DLL extern.
 
4.4.2.  Scheme conceptuale
 
O schemă conceptuală este o reprezentare a întregii informaţii conţinute în
baza de date ce combină subschemele vederilor ce privesc o anumită aplicaţie într-un
model unitar. Acest tip de schemă trebuie să se bazeze pe un model teoretic şi să fie
simplă, adică uşor de înţeles şi de prelucrat.
 
Sistemele de gestiune a bazelor de date au fost clasificate în trei grupe mari, în
funcţie de tipul elementelor cu care lucrează şi a structurilor obţinute:
a. a.       modelul reţea – permite lucrul cu entităţi şi relaţii binare de tipul 1:1
şi 1:N, diagrama rezultată fiind un graf oarecare;

5
b. b.      modelul arborescent (ierarhic) – permite lucrul cu entităţi şi relaţii
binare de tipul 1:1 şi 1:N, iar diagrama este alcătuită dintr-o mulţime de
arbori;
c. c.       modelul relaţional – în care intervin numai relaţii şi operaţii cu aceste
relaţii.
 
4.4.3.  Scheme interne
 
Schemele interne descriu diferitele fişiere utilizate pentru memorarea
informaţiilor bazei de date şi modul de operare cu ele. Există mai multe moduri de
organizare a fişierelor, cele mai cunoscute fiind:
         organizarea secvenţială;
         organizarea cu index rar;
         organizarea cu index dens;
         organizarea cu dispersie;
         organizarea folosind B-arbori.
 
Traducerea schemelor conceptuale în scheme interne se face, de obicei,
automat de către DBMS. Pe lângă stabilirea diferitelor tipuri de înregistrări utilizate în
reprezentarea fizică a datelor, se specifică şi existenţa indecşilor asociaţi unor fişiere,
semnificaţia câmpurilor înregistrărilor, ordinea de apariţie a înregistrărilor şi modul de
acces.
Corespondenţa dintre scheme poartă numele de mapare şi este de două tipuri:
         mapare conceptuală / internă (vederea conceptuală / baza de date
memorată);
         mapare externă / conceptuală (vedere externă particulară / vedere
conceptuală).
 
Sistemul de gestiune a bazelor de date (DBMS) este softul (programul) care
coordonează toate accesele la baza de date, în modul următor:
a. a.       un utilizator emite o cerere de acces, folosind un limbaj particular de
manipulare a datelor;
b. b.      DBMS-ul interceptează cererea şi o interpretează;
c. c.       DBMS-ul inspectează, pe rând, schema externă, maparea
externă/conceptuală, schema conceptuală, maparea conceptuală/internă şi
definiţia de structură de memorare;
d. d.      DBMS-ul realizează operaţiile necesare asupra bazei de date
memorate.
 
Administratorul bazei de date (DBA) urmează apoi să gestioneze operaţiile
specifice, responsabilităţile lui incluzând:
         decizia asupra conţinutului informaţiei inclusă în baza de date;
         decizia asupra structurii de memorare şi a structurii de acces;
         legătura cu utilizatorii;
         definirea procedurilor de verificări autorizate şi de validări;
         definirea unei strategii pentru salvări şi restaurări;
         monitorizarea performanţei şi răspunsuri la schimbări de cerinţe.
 

6
Pentru aceasta DBA are la îndemână un număr de programe utilitare pentru a
se ajuta în rezolvarea acestor sarcini:
         rutina de încărcare (pentru a crea versiunea iniţială a bazei de date);
         rutina de reorganizare (pentru a reorganiza baza de date prin
eliminarea datelor perimate şi introducerea altora noi);
         rutine jurnaliere (pentru a nota orice operaţie asupra bazei de date
împreună cu identificarea utilizatorului care a efectuat-o);
         rutine de restaurare (pentru a restaura baza de date la o stare
anterioară unui eşec hard sau de programare);
         rutina de analiză statistică (pentru a sista în realizarea performanţei).
 
Instrumentul utilizat de DBA în lucrul cu programele utilitare este dicţionarul
de date. El este o bază de date ce conţine date despre date, adică descrieri ale
obiectelor sistemului.
De asemenea atât DBA cât şi utilizatorul beneficiază de o interfaţă utilizator
pentru a uşura accesul la date. Această interfaţă poate fi definită ca un ecran în sistem,
sub care totul devine invizibil pentru utilizator. Interfaţa se află întotdeauna la nivelul
extern.
 
Într-un sistem de baze de date (DBMS) datele sunt memorate la locaţia la care
sunt folosite mai des, dar ele sunt disponibile (prin reţeaua de comunicaţii) şi
utilizatorilor din alte locaţii. Acest tip de bază de date, împrăştiată într-o reţea de
calculatoare se numeşte bază de date distribuite.

PARTEA I I
BAZE DE DATE RELATIONALE

.2.1. MODELUL RELAŢIONAL AL DATELOR

Modelul relaţional al datelor a fost acceptat aproape fara rezerve de atat


specialistii din domeniu bazelor de date cat si de utilizatori ,inca de la aparitia
primului articol al lui Codd E. F. [1] , prin care erau puse bazele acestui model
asamblist al datelor a fost lansata de catre Childs D.F. in 1968 ,care a subliniat faptul
ca orice structura de date poate fi reprezentata printr-una sau mai multe tabele de
date , in cadrul carora este necesar sa existe informatii de legatura , in vederea
stabilirii unor legaturi intre acestea.
S-a constatat ca, prin utilizarea sistemelor relationale este posibila atingerea unor
obiective importante ale organizarii datelor in comparatie cu modelele ierarhice si
retea [2]:
1. Asigurare unui grad sporit de independenta a programelor de aplicatie fata de
modul de reprezentare interna a datelor si metodele de acces la date.In
precizarea prelucrarilor asupra datelor ,programele nu fac apel la pointeri sau
alte elemente ale schemei interne a bazei de date .
2. Furnizarea unor metode si tehnici eficiente de control a coerentei si redundantei
datelor .Modelul relational ,prin tehnica normalizarii relatiilor permite definirea
unei structuri conceptuale optime a datelor , prin care se minimizeaza riscurile
de eroare la actualizare, reducandu-se redundanta datelor.

7
3. Oferirea unor facilitati multiple de definire si manipulare a datelor.In primul
rand modelul relational ofera posibilitatea utilizarii unor limbaje
procedurale ,bazate pe algebra relationala ,precum si a unor limbaje
neprocedurale ce au la baza calculul relational.
4. Ameliorarea integritatii si confidentialitatii datelor.Modelul relational
realizeaza acest lucru prin mecanisme flexibile si eficace de specificare si
utilizare a restrictiilor de integritate si a relatiilor virtuale.
Componentele modelului relational sunt: structura relationala a datelor, prin care
datele sunt organizate sub forma unor tablouri bidimensionale (tabele ) de date ,
numite relatii, operatorii modelului relational , ce definesc operatiile care se pot
efectua asupra relatiilor ,in scopul realizarii functiilor de prelucrare asupra bazei de
date ,respectiv consultarea ,inserarea,modificarea si stergerea datelor ,precum si
restrictiilede integritate care permit definirea starilor coerente ale bazei de date.
2.1.1 STRUCTURA RELATIONALA A DATELOR

Prezentarea sructurii relationale a datelor impune definirea notiunilor de domeniu ,


atribut , relatie si schema a unei relatii .
In figura 2.2.1 se prezinta un model relational ce corespunde unei multimi concrete de
caracteristici despre lumea reala .Orarul de zbor al avioanelor poseda o structura de
date relationala .Pentru fiecare linie aeriana din orarul de zbor sunt date
caracteristicile :numarul cursei, aeroportul de decolare, aeroportul de aterizare, ora
decolarii, ora aterizarii.
Fiecare avion este determinat de multimea valorilor de fiecare linie.Trebuie sa
ne limitam numai la actele date care pot sa apara in definirea coloanei.Coloana cu
numele Punct de decolare(PD) contine numele aeroporturilor liniilor aeriene
considerate.Coloana Ora decolarii (OD) (respectiv, Ora aterizarii (OA))exprima ora
la care are loc decolarea (respectiv , aterizarea).Coloana cu numele Punct de aterizare
(PA) contine numele aeroportului unde se aterizeaza.

Nr Punct de Punct de Ora de Ora de aterizare(oa)


zbor(nr) decolare(Pd) aterizare(pa) decolare(Od)
70 Bucuresti Craiova 16:59 17:50
75 Craiova Bucuresti 07:25 08:25
80 Bucuresti Timisoara 17:30 19:30
85 Timisoara Bucuresti 07:15 09:25
90 Timisoara Craiova 10:15 13:20
FIG. 2.2.1
Definitia 2.2.1 Domeniul reprezinta o multime de valori ,caracterizat printr-un nume si
este definit fie explicit prin enumerarea tuturor componentelor sale,fie printr-o proprietate
distinctiva a valorilor din domeniul respectiv.
Penrtu tabelul din figura 2.2.1 se pot da urmatoarele exemple de domenii:
D1={Bucuresti,Craiova,Timisoara}
D2={x / xєN , xє[1,100]}
Atributul reprezinta coloana unei tabele de date , caracterizata printr-un nume.
Numele coloanei (atributului ) exprima de obicei semnificatia valorilor din cadrul

8
coloanei respective .Fiecarui nume de atribut ii corespunde un domeniu Di numit
domeniu numit domeniul atributului Ai ,1in si se va nota cu dom(Ai) .Pentru a
diferentia coloanele care contin valori ale aceluiasi domeniu si a elimina astfel
dependenta de pozitie in cadrul tabelei , se asociaza fiecarei coloane un nume
distinct.
Pentru tabelul din figura 2.2.1 avem atributele NR,PD,PA,OD,OA si domeniile
asociate dom(NR), dom(PD), dom (PA), dom (OD),dom (OA).
De exemplu , dom (PD) ={Bucuresti ,Craiova,Timisoara}.
Fie D1 , D2 , …,Dn domenii finite , nu neaparat disjuncte.Produsul cartezian
D1xD2x…xDn al acestora este definit de multimea tuplurilor <v1 ,v2,…, vn> unde
v1єD1,v2єD2,…,vn єDn. Numarul n defineste aritatea tuplului(cate coloane are ).
Definitia 2.2.2 O relatie r pe multimile D1,D2,…,Dn este o submultime a
produsului cartezian D1x D2 x … Dn , deci o multime de tupluri.
Exista si un alt mod de a defini o relatie, si anume , ca o multime finita de functii.
Asociem fiecarui domeniu Di un atribut Ai si definim relatia r ca fiind o multime de
tupluri {t1,t2,… ,tn} , unde ti : {A1, A2, … ,An}  D1 D2 … Dn si ti (A j) єDj pentru
orice valori ale lui i si j .Intr-o relatie , tuplurile trebuie sa fie distincte (nu se admit
duplicari ale tuplurilor). De obicei ,vom nota relatia cu r sau r{A1,A2, … , An} .
Orarul din figura 2.2.1 reprezinta un exemplu de relatie pe care o vom numi
orar.Continutul informational al liniei nu depinde de ordinea coloanelor , de exemplu
coloanele PS si PA pot fi interschimbate.
Definirea unei relatii ca o multime de tupluri sau ca o multime de functii se refera
la multimi care variaza in timp (se adauga , se sterg, sau se modifica
elemente).Pentru a caracteriza o relatie este nevoie de un element invariant in timp ,
iar acest invariant este dat de structura relatiei (schema relatiei).
Definitia 2.2.3 Multimea tuturor atributelor R={A 1, A2 , … , An}corespunzatoare
unei relatii o numim schema relatiei si o notam r(A1 , A2 , … , An) .
Schema relatiei orar se defineste astfel: orar (NR,PD,PA,OD,OA).
Schema unei relatii mai este cunoscuta si sub numele de intensia unei relatii , ca
expresie a proprietetilor comune si invariante ale tuplurilor care compun relatia .Spre
deosebire de intensie , extensia unei relatii reprezinta multimea tuplurilor care
compun la un moment relatia , multime care este variabila in timp . De obicei ,
extensia unei relatii este stocata fizic in spatiul asociat bazei de date , caz in care
relatia se numeste relatie de baza .Exista situatii in care extensia nu este memorata
in baza de date . Este cazul asa numitelor relatii virtuale , cunoscute si sub numele
de relatii derivate sau viziuni. Acestea sunt definite implicit , pe baza altor relatii ,
prin intermediul unei expresii relationale iar stabilirea tuplurilor care o compun se
face prin evaluarea expresiei.
Asadar , putem reprezenta o relatie printr-un tabel bidimensional in care
fiecare linie corespunde unui tuplu si fiecare coloana corespunde unui domenui din
produsul cartezian. Numarul atributelor defineste gradul relatiei , iar numarul de
tupluri cardinalitatea relatiei .
Fiecare linie a relatiei este o multime de valori , cate una pentru fiecare nume
de atribut .Linia relatiei se numeste tuplu. In figura 2.2.1 relatia orar este formata din
5 tupluri . Unul dintre acestea , notat cu t , este definit astfel:
t(NR)=75 , t(PD) = Craiova , t(PA)=Bucuresti,t(OD)=7.25, t(OA)=8.25
Valoarea concreta a tuplului t pentru atributul A o numim Avaloarea tuplului t ,
iar daca t este considerata ca functie , atunci Avaloarea tuplului o vom nota cu t(a).

9
Pentru X R, restrictia tuplului t la X o notam cu t/X sau t(X) si o vom numi
Xvaloarea tuplului t .
Pentru relatia orar , consideram un tuplu t oarecare , de exemplu primul tuplu
din relatie . {PD , PA} – valoarea tuplului t este tuplul t’ pentru care t’(PD)=Bucuresti,
t’(PA)= Craiova.
Asupra tuplurilor unei relarii se pot efectua urmatoarele operatii:
1. Adaugarea. Permite adaugarea de noi tupluri la o relatie .
Astfel , pentru relatia r{A1 , A2 , … , An} operatia are forma :
ADD(r: A1= d1 , A2 = d2 , … ,An = dn)
De exemplu , adaugarea unui tuplu la relatia orar se face astfel:
ADD(orar : NR =99, PD =Oradea , PA = Bucuresti , OD = 20 , OA = 22)
Cand ordinea atributelor este fixata aceasta poate fi scrisa sub forma :
ADD(orar : 99, Oradea , Bucuresti, 20 , 22)
Scopul operatiei de adaugare este de a adauga un tuplu la o anumita relatie
r ,dar rezultatul adaugarii nu este conform cu scopul acesteia in urmatoarele cazuri:
- tuplul de adaugat nu corespunde schemei relatiei;
- anumite valori ale tuplului nu apartin domenuilui respectiv ;
- tuplul de adaugat coincide dupa cheie (vezi 2.2.1.3) cu tuplul din relatie .
De exemplu , adaugarea in relatia orar , a tuplului :
ADD (orar: NR :90 , PD :Iasi , PA : Sibiu , PD :16 , PA :12)
nu e permisa , deoarece nu respecta prima conditie .
2. Stergerea. Aceasta operatie se introduce pentru a elimina tupluri din relatie .
Pentru o relatie r , operatia are forma :
DEL(r :A1 =d1 , A2 =d2 , … , An =dn)
Atunci cand numele atributelor sunt ordonate , se pot scrie mai simplu :
DEL( r : d1 , d2 , … , dn)
De exemplu , pentru relatia orar , stergerea primului tuplu , se realizeaza astfel:
DEL(orar : 70 , Bucuresti , Craiova , 16:59 , 17:50)
Deoarece , intr-o relatie , tuplurile sunt identifcate unic prin valoarea unei chei (vezi
2.2.1.3) , este suficient pentru a realiza stergerea , sa definim numai valoarea cheii .
Daca K= {B1 , B2 , … , Bn} este o cheie , atunci se poate utiliza urmatoarea forma
directa:
DEL ( r : B1 = c1 , B2 =c2 , … , Bn = cn )
De exemplu , varianta scurta a operatiei de strgere din relatia orar este :
DEL (orar : 70)
Daca tuplul ce doreste a fi sters , nu exista in relatia r atunci se genereaza o eroare
.
3.Modificarea . Se refera la faptul ca anumite valori dintr-un tuplu se pot modifica .
Pentru o relatie oarecare r si pentru submultimea {c1 , c2 , … , cp} {A1 , A2 , … ,
An} , operatia de modificare are forma:

10
CH (r : A1 =d1 , A2 =d2 , … , An =dn ; C1 = c1 , … , Cp = cp)
Daca K ={B1 , … , Bn } este o cheie , atunci operatia de modificare se poate scrie :
CH( r : B1 = d1 ,…, Bm = dm ; C1 = c1 ,…, Cp = cp)
Pentru relatia orar , operatia de modificare a primului tuplu are forma :
CH(orar : NR = 70 , PD = Bucuresti , PA = Craiova , OD = 16:59 ,
OA = 17:50 , OD = 18 , OA = 19) sau utilizand numai cheia operatiei :
CH (orar : NR = 70 , OD = 18 , OA = 19)

2.1.2. OPERATORII MODELULUI RELATIONAL

Modelul relational ofera doua colectii de operatori pe relatii , si anume : algebra


relationala (AR) si calcul relational (CR). E.F. Codd a introdus algebra relationala
(AR) ca o colectie de operatii pe relatii , fiecare operatie avand drepentru operanzi
una sau mai multe relatii si avand ca rezultat o relatie .
Unele operatii ale AR pot fi definite prin intermediul altor operatii . In acest sens ,
putem vorbi de operatii de baza , precum : reuniunea , diferenta , produsul cartezian ,
etc. dar si de operatii derivate : intersectia , diviziunea , etc.
Ulterior , la operatiile standard au fost adaugate si alte operatii , numite extensii ale
AR standard, precum : complementarea , splitarea (spargerea), inchiderea
tranzitiva , etc.
In general , operatiile AR pot fi grupate in:
- operatii traditionale pe multimi (reuniunea , intersectia , diferenta , produsul
cartezian );
- operatii relationale speciale (selectia , protectia , join-ul , etc.)
In continuare vom prezenta principalele operatii ale AR , precum si modul lor de
utilizare.
1.Reuninea. Este o operatie definita pe doua relatii r si s cu aceeasi schema R
si consta in construirea unei noi relatii q , cu aceeasi schema R si avand drepentru
extensie tuplurile din r si s luate impreuna o singura data .
Notatile uzuale pentru aceasta operatie sunt : r  s, OR (r,s), UNION(r,s).
Considerand tuplurile ca transformari , avem urmatoarea definitie formala a
reuniunii:
r s ={t / t є r}{t / t є s}
Exemplul 2.2.1 Fie orar 1 si orar 2 doua relatii cu aceeasi schema R(NR, PD, PA,
OD,OA).
orar 1
NR PD PA OD OA

75 Craiova Bucuresti 07:15 08:25


80 Bucuresti Timisoara 17:30 19:30
85 Timisoara Bucuresti 07:15 09:25
90 Timisoara Craiova 10:15 13:20

11
orar 2
NR PD PA OD OA

75 Craiova Bucuresti 07:15 08:25

80 Bucuresti Timisoara 17:30 19 :30

95 Timisoara Arad 11:15 11:25


96 Timisoara Oradea 12:15 13:20

Prin operatia de reuniune a celor doua se obtine un nou orar :


(orar1  orar 2)
NR PD PA OD OA

75 Craiova Bucuresti 07:15 08:25


80 Bucuresti Timisoara 17:30 19:30
85 Timisoara Bucuresti 07:15 09:25
90 Timisoara Craiova 10:15 13:20
95 Timisoara Arad 11:15 11:25
96 Timisoara Oradea 12:15 13:20

2.Diferenta . Reprezinta o operatie definita pe doua relatii r si s cu aceeasi


schema R, si consta in construirea unei noi relatii q , cu aceeasi schema R si avand
drepentru extensie tuplurile din r care nu se regasesc in s .
Notatiile uzuale pentru aceasta operatie sunt : r-s , REMOVE (r,s), MINUS(r,s)
Considerand tuplurile ca transformari , avem urmatoarea definitie formala a
diferentei :
r-s ={t / t є r }-{t / t є s}
Diferenta relatiilor orar 1 si orar 2 din exemplul 2.2.1 ne conduce la urmatoarea relatie:
NR PD PA OD OA
85 Timisoara Bucuresti 07:15 09:25
90 Timisoara Craiova 10:15 13:20

3. Intersectia . Reprezinta o operatie definita pe doua relatii r si s cu aceeasi


schema R , si consta in construirea unei noi relatii q , cu aceeasi schema R si avand
drepentru extensie tuplurile comune din r si s .

Notatiile uzuale pentru aceasta operatie sunt :


, INTERSECT(r,s), AND(r,s).
Intersectia realtiilor orar 1 si orar 2 din exemlul 2.2.1 , ne conduce la relatia:

12
NR PD PA OD OA
75 Craiova Bucuresti 07:15 08:25
80 Bucuresti Timisoara 17:30 19:30

Intersectia reprezinta o operatie derivata , care poate fi exprimata prin


intermadiul diferentei astfel: r  s= r – (r -s) sau rs= s – (s- r).
4.Produs cartezian . Reprezinta o operatie definita pe doua relatii r si s de
schema R ,respectiv S , si consta in construirea unei noi relatii q , a carei schema Q ,
se obtine din concatenarea schemelor relatiilor r si s iar extensia lui q se obtine din
toate combinatiile tuplurilor din r cu cele din s.
Notatiile uzuale pentru aceasta operatie sunt : r x s, PRODUCT(r,s) , TIMES(r,s).
Considerand tuplurile ca transformari , avem urmatoarea definitie formala a
produsului cartezian :
r x s = {t / (t1 є r)(t2 є s ) (t[R]=t1) (t[S]=t2)}
Fie pilot o relatie cu urmatoarela extensie :
pilot
NUME VARSTA
Popa 35
Vigu 40
Produsul cartezian al relatiei orar 1 din exemplul 2.2.1. si pilot , ne conduce la urmatoarea
relatie:
NR PD PA OD OA NUME VARSTA

75 Craiova Bucuresti 07:15 08:25 Popa 35


80 Bucuresti Timisoara 17:30 19:30 Popa 35
85 Timisoara Bucuresti 07:15 09:25 Popa 35
90 Timisoara Craiova 10:15 13:20 Popa 35
75 Craiova Bucuresti 07:25 08:25 Vigu 40

80 Bucuresti Timisoara 17:30 19:30 Vigu 40


85 Timisoara Bucuresti 07:15 09:25 Vigu 40
90 Timisoara Craiova 10:15 13:20 Vigu 40

5. Selectia. Reprezinta o operatie definita asupra unei relatii r , si consta in


construirea unei relatii s , cu schema identica cu cea a relatiei r si a carei extensie
este constituita din acele tupluri din r care satisfac o conditie mentionata explicit in
cadrul operatiei . Conditia este in general de forma :< atribut operator de
comparatie valoare>.

13
Notatiile uzuale in aceasta operatie sunt : σ conditie (r) , r[conditie ] sau
RESTRICT(r ,conditie ). Considerand tuplurile ca transformari , operatorul de selectie
se poate defini astfel :

σA=a (r)={t ε r / t (A)=a}

Selectia σ PD=Timisoara (orar 1 ) se aplica relatiei orar 2 din exemplul 2.2.1, ne


conduce la urmatoarea relatie:
NR PD PA OD OA

85 Timisoara Bucuresti 07:15 09:25

90 Timisoara Craiova 10:15 13:20

6.Proiectia. Reprezinta o operatie definita aupra unei relatii r si consta in


construirea unei relatii s in care se regasesc numai acele atribute din r specificate
explicit in cadrul operatiei.Suprimarea unor atribute din r poate avea ca efect aparitia
unor tupluri duplicate ce vor trebui eliminate.Prin operatia de proiectie se trece la o
de la relatie de grad n la o relatie de grad m, mai mic decat cel initial.

Notatiile uzuale pentru aceasta operatie sunt: Π A1 ,A2,…,Am (r), PROJECT(r,


A1, A2,…,Am).
Considerand tuplurile ca transformari , operatorul de proiectie se poate defini
astfel :

Πx = {t(X) / t ε r}
Aplicarea operatorului ΠPD,PA(orar 1) relatiei orar 1 din exemplul 2.2.1 ne
conduce la urmatoarea relatie:

PD PA
Craiova Bucuresti
Bucuresti Timisoara
TImisoara Bucuresti
Timisoara Craiova

7.Join(Jonctiunea sau unirea) Reprezinta o operatie definita pe doua relatii r


si s , operatie care consta din construirea unei noi relatii q , prin concatenarea unor
tupluri din r cu tupluri din s.Se concateneaza acele tupluri din r si s care satisfac o
anumita conditie.Extensia relatei q va contine acele tupluri care satisfac conditia de
concatenare.
Notatiile uzuale pentru aceasta operatie sunt : r ⋈ conditie s sau
JOIN(s,r,conditie).
In general conditia de concatenare are urmatoarea forma :

<atribut din r operator de comparatie atribut s>.

14
In functie de operatorul de comparatie , join-ul poate fi de mai multe tipuri.Cel
mai important tip , in sensul celei mai frecvente utilizari este echijoin-ul , care
reprezinta o operatie de join, dirijata de o conditie de forma urmatoare :
<atribut din r =atribut din s>.
Definitia 2.2.4. fie relatiile r si s de schema R respectiv S, cu Ai є R si Bi є S,
dom(Ai)=dom (Bi ), i=1 ,…, m . Relatia:
q(RS)={t : tr ε R , ts ε S, astfel incat t(R) =tr , t(S)=ts , t(Ai)=t(Bi), i=1,…,m}
se numeste echijoin-ul relatiilor in raport cu A1=B1=…=Am=Bm si se noteaza cu
r[A1=B1=…=Am=Bm]s .
Considerand relatia oras , de forma urmatoare:
oras
PD JUDET

Timisoara Timis
Craiova Dolj
Oradea Bihor

Operatia orar 1 ⋈ PD=PD oras aplicata relatiilor orar 1 din exmplul 2.2.1
si oras definita sus, ne conduce la urmatoarea relatie:

NR PD PA OD OA PD JUDET

75 Craiova Bucuresti 07:15 08:25 Craiova Dolj


85 Timisoara Bucuresti 07:15 09:25 Timisoara Timis
90 Timisoara Craiova 10:15 13:20 Timisoara Timis

Operatia de mai jos se poate exprima cu ajutorul operatiilor de produs cartezian


si selectie , rezultatul unui join fiind acelasi cu rezultatul unei selectii operate asupra
unui produs cartezian , adica :
JOIN (r,s,conditie )=RESTRICT(PRODUCT(r,s,conditie ), conditie)
Produsul cartezian reprezinta o operatie laborioasa si foarte costisitoare , ceea ce
face ca in locul produsului sa fie utilizat join-ul ori de cate ori acest lucru este posibil.
In cazul echijoin-ului , schema relatiei rezultat , contine toate atributele celor
doi operanzi si de aceea vor exista cel putin doua valori egale in fiecare tuplu . Join-
ul natural elimina aceasta redundanta , fiind definita in mod similar cu echijoin-ul cu
observatia ca atributele cu acelas nume se trec o singura data i relatia rezultat iar
extensia se compune din concatenarea tuplurilor lui r cu tuplurile lui s care prezinta
aceleas valori pentru atributele cu acelas nume . Notatia uzuala pentru aceasta
operatie este : r⋈s.
Join-ul natural al relatiilor orar 1 din exemplul 2.2.1. si oras definita mai sus ,
ne conduce la urmatoarea relatie:

15
NR PD PA OD OA JUDET
75 Craiova Bucuresti 07:15 08:25 Dolj
85 Timisoara Bucuresti 07:15 09:25 Timis
90 Timisoara Craiova 10:15 13:20 Timis

Join extern . Atunci cand relatiile care participa la join nu au proiectii identice
pe atributul de jonctiune (atributul nu are acelaesi valori in relatiile care se
jonctioneaza ), operatia de join conduce la pierderea de tupluri , cel putin dintr-o
relatie . pentru a evita pierderile de informatie a fost definit join-ul extern , ca o
operatie prin care din doua relatii r si s se obtine o noua relatie q prin join-ul relatiilor
s si r , relatie la care se adauga si tuplurile din r si s care nu au participat la join .
Aceste tupluri sunt completate in relatia q cu valori “null” pentru atributele
relatiei corespondente (r, respectiv s).

Notatiile uzuale pentru desemnarea unei join extem sunt :r⋈.s sau EXT-
JOIN(r,s).
Join-ul extern al relatiilor orar 1si oras conduce la urmatoarea relatie :
NR PD PA OD OA JUDET

75 Craiova Bucuresti 07:15 08:25 Dolj


80 Bucuresti Timisoara 17:30 19:30 Null
85 Timisoara Bucuresti 07:15 09:25 Timis
90 Timisoara Craiova 10:15 13:20 Timis
Null Oradea Null Null Null Bihor

Semi-join . Aceasta operatie a fost introdusa de Bernstein P.A. , fiind necesara


la definirea procesului de optimizare a interogarilor .Semi-jonctiunea conserva
atributele unei singure relatii participante la join si reprezinta o operatie pe doua
relatii r si s in urma careia rezulta o noua relatie ce contine numai tuplurile din relatia
r care participa la join .Notatiile uzuale pentru aceasta operatie sunt : r⋈s sau
SEMIJOIN(r,s).
Astfel , orar1 ⋈ oras conduce la urmatoarea relatie :
NR PD PA OD OA
75 Craiova Bucuresti 07:15 08:25
85 Timisoara Bucuresti 07:15 09:25
90 Timisoara Craiova 10:15 13:20

8.Diviziunea . Reprezinta o operatie din AR definita asupra unei relatii r de


schema : R(A1:D1 , …,Ap: Dk, Ap+1: D1, …,An: Dm), operatie care consta din
construirea , cu ajutorul unei relatii s(Ap+1 : D1 , … , An : Dm) a relatiei q (A1 : D1 ,
…, Ap : Dk) . Tuplurile relatiei q , concatenate cu tuplurile relatiei s permit obtinerea
tuplurilor relatiei r .

16
Definitia 2.2.5 Fie r si s doua relatii de schema R respectiv S , cu S  R si
R’=R-S .Relatia : r’(R’)={t :ts  s ,  tr  r astfel incat tr (S)=ts , tr (R’ )=t } se
numeste diviziunea relatiei r la s .
Operatia de diviziune este o operatie derivata , care poate exprima prin
intermediul diferentei , produsului cartezian si proiectiei astfel :

r / s =A1,A2,…,Ap(r) - A1,A2,…,Ap((A1,A2,…,Ap(r)x s )-r)


Consideram relatiile drepentru si tip de forma urmatoare :
drept
Pilot Tip avion

Dan AIRBUS

Dan TU154

Ion TU154

Ion AIRBUS

Mihai TU154

tip
Tip avion
AIRBUS
TU154

Daca dorim sa obtinem pilotii care au drepentru de zbor pe toate tipurile de avioane,
calculam drept+tip , si rezulta relatia :
Pilot
Dan
Ion

9. Complementarea . Complementul unei relatii reprezinta multimea tuplurilor


din produsul cartezian al domeniilor asociate atributelor relatiei , care nu figureaza
in extensia relatiei considerate .Este obligatoriu ca domeniile sa fie
finite.Cardinalitatea rezultatului poate fi extrem de mare, ceea ce face ca operatia sa
fie destul de rar utilizata.
Sa consideram , de exemplu , pentru relatia drepentru definita la operatia de
diviziune , urmatoarele valori ale domeniilor :
Pilot={Dan,Ion,Mihai,Andrei}
Tip avion={AIRBUS,TU154,IAR500}

17
Complementul relatiei drepentru este :
Pilot Tip avion

Dan IAR500
Ion IAR500
Mihai AIRBUS
Mihai IAR500
Andrei IAR500
Andrei AIRBUS
Andrei TU154

10.Splitarea (spargerea). Este o operatie aditionala din AR , definita asupra


unei relatii r si care, pe baza uneiconditii definite asupra atributelor lui r permite
construirea a doua relatii r1 si r2 , cu aceeasi schema cu r .Extensia lui r1 contine
tuplurile din r care indeplinesc conditia specificata , iar r2 pe cele care nu verifica
aceasta conditie.
Pentru relatia drepentru definita mai sus si conditia Pilot=”Dan”, operatia de
splitare produce ca rezultat relatiile drepentru 1 si drepentru 2:
Drepentru 1
Pilot Tip avion
Dan AIRBUS
Dan TU154

Drepentru 2
Pilot Tip avion

Ion TU154
Ion AIRBUS
Mihai TU154

11.Inchiderea tranzitiva . Este o operatie aditionala din AR prin care se pot


adauga noi tupluri la o relatie .Operatia de inchidere tranzitiva presupune efectuarea
in mod repetat a secventei de operatii : join-protectie-reuniune. Numarul de executii
depinde de continutul relatiei . Inchiderea tranzitiva se defineste asupra unei relatii r ,
a carei schema contine doua atribute A1 si A2 cu acelasi domeniu , si consta in
adaugarea la relatia r a tuplurilor care se obtin succesiv prin tranzitivitate , in sensul
ca , daca exista in r tuplurile <a,b> si <b,c> se va adauga la r si tuplul <a,c>.Notatiile
uzuale pentru aceasta operatie sunt : (r), r, CLOSE()r.
Prezentam mai jos , o relatie legatura ce ne arata legaturile aeriene intre
anumite localitati precum si inchiderea tranzitiva a relatiei (legatura).
Legatura

18
PD PA
Bucuresti Iasi
Bucuresti Timisoara
Timisoara Arad
Timisoara Craiova

(legatura)
PD PA
Bucuresti Iasi
Bucuresti Timisoara
Timisoara Arad
Timisoara Craiova
Bucuresti Arad
Bucuresti Craiova

O expresie a AR este constituita dintr-o serie de relatii, legate prin operatii di


AR . Sa consideram , de exemplu doua relatii r si s cu schemele r(A,B) si s(B, C). Cu
ajutorul acestor relatii putem defini o expresie E 1 , astfel : E1=πc(σA=a(r⊲⊳s )).
In formularea unei expresii se pot introduce relatii intermediare .De exemplu ,
expresia E1se poate reprezenta cu ajutorul unor relatii intermediare X1 si X2 , astfel :
X1= r⋈s
X2 = σA=a(X1)
E1= πc (X2)
Prin calcularea unei expresii algebrice E se obtine o relatie unica .Prin urmare ,
E reprezinta o transformare a unei multimi de relatii intr-o singura relatie .In expresii
se admit paranteze rotunde si se presupune ca nici un operator binar nu are
prioritate in executie fata de un altul cu exceptia intersectiei fata de reuniune.
Schema unei expresii depinde de schemele relatiilor care o compun .
Notam cu sch(e) schema expresiei algebrice E , care se poate defini recursiv
conform urmatoarelor reguli:
1.Daca E este ri atunci sch(E)=Ri.

2.Daca E=E1 U E2 , E1∩E2, E1-E2 sau σc(E1) unde c reprezinta conditii, atunci
sch(E)=sch(E1).
3.Daca E=Πx (E1) atunci sch(E)=X.

4.Daca E=E1⋈E2 , atunci sch(E)= sch(E1) U sch(E2).


5.Daca E=E1 / E2 atunci sch(E)=sch(E1)-sch(E2).
Doua expresii sunt echivalente , daca in urma evaluariilor se obtine ca
rezultat aceeasi relatie .

19
De exemplu, expresiile:
E1= c(σA=a (r1⋈r2))

E3 =c(B(σA=a(r 1)) ⋈r 2)
sunt echivalente , considerand r 1 (A,B) si r2 (B,C).
Calculul relational (CR) reprezinta o adaptare a calculului cu predicate la
domeniul bazelor de date relationale .Ideea de baza o constituie identificarea unei
relatii cu un predicat .
Pe baza unor predicate (relatii) initiale , prin aplicarea unor operatori ai
calculului cu predicate se pot defini noi predicate (relatii).Spre deosebire de derivarea
“procedurala “a relatiilor din cadrul AR,CR permite definirea neprocedurala ,
“declarativa ”a relatiilor , in sensul precizarii lor prin intermeduil proprietatilor tuplurilor
si nu prin maniera de derivare efectiva acestor tupluri.
Calculul relational are doua variante :
1.Calculul relational orientat pe tuplu. Reprezinta varianta initiala , introdusa
de Codd E.[6] , in care CR utilizeza variabile definite asupra relatiilor , variabile ale
caror valori reprezinta tupluri de relatie .Din acest motiv , variabilele au fost denumite
variabile tuplu , iar calculul relational primit numele de calcul relational orientat pe
tuplu.
Cea mai simpla constructie a a calculului relational se numeste atom (sau
formula atomica) . Un atom este constituit din termeni (constante ,variabile tuplu si
operatori) si poate avea una din urmatoarele forme :
 r(v), unde r este numele unei relatii , v variabila tuplu reprezentand un tuplu al
relatiei r.De exemplu , orar (z).
 v[i] comp w[j] , unde v si w sunt variabile tuplu iar comp este un operator de
comparare (<,=,<=,>,>=,<>).Semnificatia atomului este a i-a componenta a
tuplului v se afla in relatia comp cu a j-a componenta a tuplului w.De exemplu ,
v[2]=w[3].
 v[i] comp k sau k comp v[i], unde v variabila tuplu , comp este un operator de
comparare iar k o constanta .Semnificatia atomului este : a i-a componenta a
tuplului v se afla in relatia comp cu constanta k . De exemplu , v[2]>5 sau 5<v[2].
Pe baza atomilor cu ajutorul unor operatori se pot construi formule mai
complexe in cadrul calculului relational orientat pe tuplu sunt utilizati urmatorii
operatori:conectorii uzuali (conjunctia , disjunctia, negatia)precum si cuantificatori
universali ()si existentiali ().
Se numeste variabila tuplu libera o variabila asupra careia nu actioneaza nici
un cuantificator . O variabila tuplu legata reprezinta o variabila asupra careia
ationeaza un cuantificator universal sau existential.
Daca F1 si F2 sunt formule , atunci F1 F2 , F1 F2 , F1 , F2 , (s F1),
(sF2), (vF1) si ( v F2)sunt formule , in care s si v sunt variabile tuplu care apar in
F1 respectiv F2 .
Se numeste expresie a calculului relational orientat pe tuplu o constructie E de
forma : E={t/ F(t)} unde F reprezinta o formula din calculul relational orientat pe
tuplu , iar t este o variabila tuplu si anume singura variabila tuplu libera din formula F.
Ca si expresiile din AR , expresiile din calculul relational orientat pe tuplu
reprezinta definitii ale unor relatii .In forma prezentata anterior , aceste expresii
permit exprimarea unor relatii infinite , adica relatii cu un numar infinit de tupluri.

20
De exemplu ,expresia: Ei ={t / r (t)} semnifica relatia formata din toate tuplurile
care nu apartin lui r .Deoarece este imposibil de precizat “toate tuplurile posibile “, se
impune o definitie mai clara a expresiilor din calculul relational orientat pe tuplu.
Se numeste expresie bine formata o expresie de forma : E{t / F(t)} unde F
reprezinta o formula din calculul relational orientat pe tuplu , iar t este singura
variabila libera din formula F , si in plus fiecare componenta a lui t este un element al
lui DOM(F) .DOM(F)reprezinta o multime de simboluri care , fie apar explicit in F , fie
sunt componente ale tuplurilor unei relatii r , mentionata in F .Multimea DOM(F) este
finita.
O expresie din calculul relational orientat pe tuplu se considera bine formata daca
satisface urmatoarele conditii :
Fiecare componenta a lui t apartine lui DOM(F).
1. Daca intr-o expresie de forma : (v)F(v) , fiecare componenta a variabilei v
apartine lui DOM(F), atunci v satisfave F.
2. Daca intr-o expresie de forma : (v)F(v), fiecare componenta a variabilei v
apartine lui DOM(F), atunci v satisface F.
O expresie din calculul relational orientat pe tuplu reprezinta definitia unei
relatii , definitie formulata prin intermediul proprietatilor pe care le au tuplurile care
compun relatia .De exemplu , considerand relatiile r1 si r 2 , cu schemele R1 (A,B) si
R2(B,C) putem defini o expresie bine formata Ee , astfel:
Ee ={t / (v) (s) (r(t)r1 (v)r2 (s)(v[1]=a)(s[1]=v[2])(t[1]=s[2]))}
Expresia Ee reprezinta definitia unei relatii care contine ca tupluri acele valori
ale atributului C care au asociate in join-ul relatiilor r1 si r2 valoarea “a” pentru
atributul A.Se observa ca expresia Ee exprima proprietatile tuplurilor care intra in
componenta unei relatii si nu modul de derivare efectiva a acestei relatii , asa cum
este cazul expresiilor E1 si E2 definite mai sus , care sunt definitii procedurale ale
relatiei Ee .
Exemplul 2.2.2 Consideram relatiile orar 1 si oras definite mai sus .Daca dorim sa
aflam judetul in care se afla un anumit Punct de decolare (PD) , de exemplu
Timisoara , putem sa utilizam expresia E1 .Aceasta se rescrie atfel : E1
=JUDET(σPD=Timisoara(orar1 ⋈ oras))

Prin join-ul natural orar1 ⋈ oras se obtine relatia cursa :


cursa
NR PD PA OD OA JUDET

75 Craiova Bucuresti 07:15 08:25 Dolj


85 Timisoara Bucuresti 07:15 09:25 Timis
90 Timisoara Craiova 10:15 13:20 Timis

Prin selectia σPD=Timisoara (cursa) se obtine relatia:


aero
NR PD PA OD OA JUDET
85 Timisoara Bucuresti 07:15 09:25 Timis

21
90 Timisoara Craiova 10:15 13:20 Timis
In final , prin ΠJUDET(aero) se obtine relatia :
JUDET
Timis
Aceeasi problema o putem rezolva si prin evaluarea expresiei Ee , care se rescrie
astfel:
Ee ={t / (v) (s) (r(t)orar 1 (v) oras (s) (v[1]=Timisoara)(s[1]=v[2])(t[1]=s[2]))}
Se observa faptul ca s[1] identifica atributul PD din relatia oras , v[2] identifica
atributul PD , din relatia orar 1 , deci se poate realiza join-ul natural al celor doua
relatii si apoi pe rezultatul join-ului se aplica selectia v[1]=Timisoara , iar pe acest
rezultat se identifica t[1] cu atributul s[2](adica JUDET) si proiectia pe acest atribut
conduce la relatia :
JUDET
Timis
Deci, cele doua expresii conduc la acelasi rezultat .
2.Calculul relational orientat pe domeniu .Calculul relational orientat pe
domeniu utilizeaza in constructiile sale aceiasi operatori ca si calculul orientat pe
tuplu , dar variabilele care apar in aceste constructii sunt variabile domeniu , adica
definite asupra domeniilor .
O formula atomica reprezinta o constructie elementara din calculul relational
orientat pe domeniu care poate avea una din formele:
 r(x1,x 2,…, xn) , unde r este o relatie n-ara si xi , i=1,…,n sunt valori constante
sau variabile domeniu .Semnificatia atomului este in acest caz , urmatoarea :
“Valorile variabilelor xi trebuie alese astfel incat <x 1,x2,…,xn >sa fie un tuplu al
relatiei r.
 x comp y , unde x si y sunt constante sau variabile domeniu , iar “comp” este un
operator de de comparatie (<,=,<=,>,>=,<>).In aceasta forma , atomul are
semnificatia : “Variabilele x si y trebuie sa aiba acele valori care sa faca expresia
x comp y adevarata”.
O formula compusa se defineste similar calculului relational orientat pe tuplu .
O expreie din calculul relational orientat pe domeniu este o constructie de forma :
E={x1 x2 …xn / F(x1 x 2…xn)}unde x1 x2 …xn sunt singurele variabile libere
din F.
Sa consideram , de exemplu doua relatii binare r1 si r2 ,cu ajutorul carora definim
urmatoarea expresie din calculul relational orientat pe domeniu :
E={xy / r1(xy)(z)(r2 (xy)r2 (yz))}
Expresia E reprezinta definitia unei relatii , constituita din acele tupluri ale relatiei
r1 pentru care nici una din componente nu figureaza pe prima pozitie in tuplurile din
relatia r2.
Astfel , pentru doua relatii ruta 1 si ruta 2 definite mai jos , expresia E se scrie :
E={xy / ruta (xy )(z) (ruta 2 (xy)ruta 2 (yz))}
ruta 1
PD PA

22
Arad Cluj
Iasi Bucuresti
Timisoara Iasi

ruta 2
PD PA

Timisoara Bucuresti
Oradea Bucuresti
Constant Oradea
a

Evaluarea expreiei E conduce la urmatoarea relatie :


ruta
PD PA
Arad Cluj
Iasi Bucuresti

O expresie bine formata din calculul relational orientat pe domeniu se defineste


similar expresiei bine formata din calculul relational orientat pe tuplu.
1.1.3 Restrictii de integritate
Restrictiile de integritate definesc conditii pe care trebuie sa le satisfaca datele din
baza de date , pentru a fi considerate corecte , coerente in raport cu lumea reala la
care se refera . Restrictiile de integritate reprezinta principalul mod de integrare a
semanticii datelor in cadrul modelului relational al datelor , mecanismele de definire
si verificare a acestor restrictii reprezentand principalele instrumente pentru controlul
semanric al datelor .Exista doua tipuri de restrictii , si anume restrictii structurale care
sunt inerente modelarii datelor si restrictii de functionare , si anume restrictii
structurale care sunt inerente modelarii datelor si restrictii de functionare
(comportament)care sunt specifice unei anumite baze de date .Restictiile structurale
sunt de patru tipuri : de cheie , de referinta , de entitate si de dependenta intre date ,
din care primele trei , constituie multimea minimala de restrictii de integritate pe care
trebiue sa le respecte un SGBD relational .Aceste restrictii sunt definite in raport cu
notiunea de cheie a unei relatii .
Definitia 2.2.6 O cheie a unei relatii r, este o multime KR , atfel incat :
(i)pentru orice doua tupluri t1,t2 ale lui r t1 (K)t2(K);
(ii)nu exista nici o submultime proprie a lui K cu proprietatea (i).
Altfel spus, cheia reprezinta o multime minimala de atribute ale caror valori
identifica in mod unic un tuplu intr-o relatie .
Fiecare relatie are cel putin o cheie .Daca exista mai multe chei posibile , ele se
numesc chei candidat .Una din cheile candidat va fi aleasa de administratorul bazei
de date pentru a identifica efectiv tupluri si ea va primi numele de cheie

23
primara .Cheia primara nu poate fi reactualizata .Restul cheilor vor purta numele de
chei alternative sau alternante.
Atributele care reprezinta cheia primara pot fi subliniate sau urmate de semnul #
in schema relatiei respective .Un grup de atribute din cadrul unei relatii care contine o
cheie a relatiei se numeste supercheie.
Exemplul 2.2.3 In relatia orar din figura 2.2.1 multimile (NR) si (PD) sunt chei .Daca
se alege (NR) drepentru cheie primara, atunci {PD,PA}devine cheie
alternativa .Acest fapentru se reprezinta astfel : orar (NR ,PD,PA,OD,OA) sau orar
(NR#,PD,PA,OD,OA).Multimea de atribute (NR,PA)este o supercheie .
Consideram relatia local , ce contine o multime de orase cu anumite caracteristici:
local
Punct de Cod Localitate (CL) Judet (JD)
Decolare(PD)
Craiova 1100 Dolj
Bucuresti 1200 Ilfov
Timisoara 1300 Timis
O cheie identifica tupluri si este diferita de un index care localizeaza tupluri .O
cheie secundara este folosita ca index pentru a accesa tupluri .Fie schemele
relationale oraa(NR#,PD,PA,OD,OA) si local (PD#,CL,JD) , unde NR si PD sunt chei
primare respectiv secundare pentru orar , iar PD este cheie primara pentru relatia
local .In acest caz vom spune ca PD este cheie externa pentru orar .In acest
context , orar estee denumita relatia care refera , in timp ce local poarta numele de
relatie referita . O cheie primara poate contine o cheie externa . De asemenea ,
valorile atributului PD din relatia orar , care reprezinta o cheie externa pentru aceasta
relatie , trebuie ori sa corespunda la o valoare a cheii primare din relatia local, ori sa
aiba valoarea null.De multe ori un atribut este necunoscut sau neaplicabil .Pentru a
reprezenta acest atribut a fost introdusa o valoare conventionala in relatie , si anume
valoarea null.
Modelul relational respecta trei restrictii de integritate structurala:
- unicitatea cheii –cheia primara trebuie sa fie minimala , adica pentru o relatie r
cu cheia K , oricare ar fi tuplurile t1 si t 2, sa avem t1 (K)=t2 (K);
- integritatea entitatii – atributele cheii primare trebuie sa fie diferite de valoarea
null,deoarece unicitatea cheii impune ca la incarcarea unui tuplu , valoarea cheii
trebuie sa fie cunoscuta pentru a putea verifica daca tuplul figureaza deja in
baza de date ;
- integritatea referirii – intr-o relatie r1 care refera o relatie r2 valorile cheii externe
sa figureze printre valorile cheii primare din relatia r2 sau sa fie null.
In categoria , alte tipuri de restrictii se pot mentiona restrictiile de comportament
si dependente functionale .Pentru o anumita baza da date , utilizatorii pot defini mai
multe tipuri de restrictii de comportament : de domeniu, temporale,etc.De exemplu ,
in relatia local o restrictie de domeniu se poate referi la atributul CL , si care impune
ca valorile acestui atribut sa se incadreze intre anumite limite.
Dependentele intre date , ca restrictii de integrare , constitue un suport teoretic
solid pentru problema de modelare informatica .In acest sens , dependentele
functionale au permis definirea conceptului de "“structura relationala optima"”, si
stau la baza teoriei optimizarii structurii relationale a datelor , respectiv teoria
normalizarii relatiilor.

24
Definitia 2.2.7 Fie r[A1 , A2 , …, An] o relatie X, Y{A1,…,An}.Atributul
(compus)Y este dependent functional de atributul (compus) X daca si numai daca
fiecare valoare a lui X din r are asociata o valoare unica a lui Y (aceasta asociere
este valabila atat cat exista relatia r).
Dependenta functionala se noteaza : XY unde X se numeste determinantul
dependentei , iar Y determinatul.
O valoare oarecare a lui X poate sa apara in mai multe linii (tupluri) ale lui r si
atunci fiecare din aceste linii contine aceeasi valoare pentru atributul Y , deci x ,x,y,y
.
Dependenta functionala se poate utiliza ca o proprietate pe care baza de date
trebuie sa o indeplineacsa pe perioada existentei acesteia (este permisa adaugarea
de elemente in relatie numai daca dependenta funcionala este verificata ) sau nu
poate cere ca anumite dependente functionale sa nu apara .
Relativ la cele prezentate mai sus , se pot face urmatoarele observatii:
1. Daca C este o cheie pentru relatia r[A1 ,…,An] , atunci CX X{A1 ,…,An};
2. Daca XY , atunci ZY , Z cu XZ;
3. Daca XY si YZ atunci XZ (tranzitivitatea).Pentru o relatie r(A) si o multime
F de dependente functionale apar urmatoarele doua probleme:
A. Determinarea inchiderii unei multimi F de dependente functionale , notata F.
Multime F contine toate dependentele functionale obtinute logic din F.Pentru
determinarea inchiderii F se pot utiliza repetat , urmatoarele trei reguli (axiomele lui
Armstrong[11]):
- reflexivitatea: daca XA si YX , atunci XY
- marirea : daca XY si WA atunci XWYW(unde XW=XW)
- tranzitivitatea : daca XY si YZ atunci XZ
O multime de axiome este completa daca si numai daca plecand cu o multime de
dependente F, pot fi obtinute toate dependentele inchiderii lui F (F)utilizand axiomele
multimii.
O multime de axiome este inchisa daca si numai daca plecand cu o multime de
dependente F, nu poate fi dedusa cu ajutorul axiomelor o dependenta care nu
apartine inchiderii lui F.Ullman J.[10] a demonstrat ca axiomele lui Armstrong
reprezinta o multime inchisa si completa de axiome .Consecinta acestui rezultat ,
este aceea ca F reprezinta multimea dependentelor deduse din F prin aplicarea
axiomelor lui Armstrong.
Plecand de la aceste axiome se poate arata ca si urmatoarele reguli sunt
adevarate:
4.reuniunea : daca XY si XZ atunci XYZ
5.descompunerea : daca XYZ atunci XY si XZ
6.pseudotranzitivitatea : daca XY si YWZ atunci XWZ
Exemplul 2.2.4. Fie a={A,B,C,D,E,F} o multime de atribute a unei relatii r si
F={AB,AC,CDE,CDF,BE}o multime de dependente funcionale .F se
obtine din F la care se mai adauga :
AE(prin tranzitivitate)
CDEF(prin regula 4)

25
ADF(AC,ADCD din regula 2, CDF si tranzitivitatea).
B.Fie X o multime de atribute ale unei relatii r si F o multime de dependente
functionale . Se pune problema determinarii inchiderii lui X (notata X)sub F si care
conrine multimea atributelor dependente functional de atributele lui X .Pentru
determinarea acestei inchideri se poate folosi algoritmul INCHID(vezi 2.2.2.2).
Exemplul 2.2.5 Pentru X={A,D}si F data in exemplul 2.2.4 , obtinem:
ABB  X
ACC  X
CDE E  X
CDF F  X
deci X={A,D}={A,B,C,D,E,F}.

1.2 MODELAREA BAZELOR DE DATE REATIONALE


Modelarea bazei relationale este una din cele mai importante sarcini ale
proiectantului , utilizator si administratorului bazei de date.Ea prezinta doua aspecte
semnificative:
1.Aspectul static al modelarii - se stabileste strucutura datelor (realatii, filtre), se
stabilesc restrictii independente de timp (chei ,domenii);
2.Aspectul dinamic al modelarii – se descriu actiunile ce opereaza pe aceste tipuri de
date.
Procesul modelarii este bazat pe tehnica top-down si are urmatoarele faze :
- Obtinerea si formalizarea solicitarilor beneficiarului .Se identifica entitati ,
relatii,cardinalitate si proprietati relevante ale acestora;
- Integrarea si sinteza acestei solicitari ,adica elaborarea unei scheme
conceptuale globale neredundanta , coerenta si unica;
- Normalizarea relatiilor conceptuale , adica obtinerea unor relatii mai mici , fara a
pierde din informatie , pentru a elimina redundanta si anomaliile la actualizare;
- Optimizarea schemei interne care deriva din aspectul dinamic al modelarii si
care este specifica reprezentatii fizice a bazei de date .Se fac denormalizari , se
realizeaza compuneri , se alege modul de organizare a fisierelor , metode de
acces, etc.
1.2.1 FORME NORMALE IN BAZE DE DATE
In lucrul cu baze se manifesta o serie de anomalii datorita dependentelor
“nedorite” ce se manifesta intre datele din cadrul relatiilor bazei.Aceste dependente
determina cresterea redundantei datelor si reducerea flexibilitatii structurii bazei de
date .Formele normale ale relatiilor sunt definite in raport de anomaliile care pot
apare in lucrul cu aceste relatii , deci in functie de anumite dependente “nedorite”.
O relatie este intr-o anumita forma normala particulara daca satisface o multime
specificata de restrictii . Pana in prezent se cunosc cinci forme normale ale relatiilor
dintr-o baza de date.
Fie r[A1,…,An] o relatie si X={Ai1 ,…,Aip}{A1,…,Am} o multime de atribute .
Reamintim ca ,prin proiectia relatiei r pe X se intelege r’[Ai1,…,Aip]=Ai1,
…,Ain(r)unde pentru p=(a1,a2,…,an) r , avem x p=p[X]=(ai1 ,ai2 ,…,aip) r’ (si
toate elementele din r’ sunt distincte).

26
Fie relatiile r(X,Y), s(X,Z) si X,Y,Z multimi de atribute , XZφ.Prin join-ul
natural al relatiilor r si s se intelege :
r ⋈ s={(x(t),y(t),z(v)) t  r, v  s,y(t)=y(v)}
O relatie r se poate descompune in mai multe relatii noi : r1 ,r2 ,…,rm.Aceasta
descompunere este corecta , daca : r= r1 ⋈ r2 ⋈…⋈ rm.
Vom da un exemplu de descompunere care nu este corecta .Fie relatiile :
r[NUME,VARSTA,SALARIU,LOCALITATE]
r1[NUME,SALARIU]
r2[VARSTA,SALARIU,LOCALITATE].
si presupunem ca pentru r avem urmatoarea extensie:
NUME VARSTA SALARIU LOCALITATE

Ionescu 30 800000 Arad


Popescu 40 1200000 Oradea
Georgescu 60 1500000 Iasi
Calinescu 25 1200000 Arad

In acest caz se obtine:


r1

NUME SALARIU

Ionescu 800000
Popescu 1200000
Georgescu 1500000
Calinescu 1200000

r2
VARSTA SALARIU LOCALITATE

30 800000 Arad
40 1200000 Oradea
60 1500000 Iasi
25 1200000 Arad

r1 ⋈ r2
NUME VARSTA SALARIU LOCALITATEA

27
Ionescu 30 800000 Arad
Popescu 40 1200000 Oradea
Popescu 40 1200000 Arad
Avram 60 1500000 Iasi
Calinescu 25 1200000 Arad
Calinescu 25 1200000 Oradea

Este posibil , ca in diverse aplicatii sa apara atribute (simple sau compuse), ce


au mai multe valori pentru un element din relatie.Aceste atribute formeaza un atribut
repetitiv .Prin atribut simplu vom intelege un singur atribut din relatie, iar prin atribut
compus o multime de atribute (cel putin doua).
Consideram , de exemplu relatia :
persoana[NUME,AN-NASTERE,PROFESIA,NUME-COPIL,AN-NASTERE-COPIL]
cu atributul NUME cheie primara.Perechea {NUME-COPIL,AN-NASTERE-
COPIL}este un grup repetitiv , deoarece relatia poate avea urmatoarea extensie:
Popa 1970 inginer Daniel 1992
Anca 1994
Viorel 1998
Ionescu 1966 economist Andrei 1989
Magda 1993
De asemenea, relatia:
carte [COTA,AUTOR,TITLU,EDITURA,AN-APARITIE,CUVINTE-CHIE]cu
atributul cheie COTA cheie primara , are atributele respective AUTOR si CUVINTE-
CHEIE.O carte poate avea mai multi autori si mai multe cuvinte cheie.
Grupele de atribute repetitive creeaza greutati in memorarea diverselor relatii si
de aceea se incearca emiterea lor,fara apierde insa din informatii.Daca r[A1,
…,An]este o relatie , unde Am+1 ,…,An formeaza un grup repetitiv , atunci relatia r
se poate descompune in doua relatii fara atribute repetitive .Daca A1`,…,Ap, p<m ,
este o cheie pentru relatia r atunci cele doua relatii in care se descompune r sunt:
r′[A1,A2,…,Am]=A1,…,Ap,Am+1,..,An(r)
r″[A1,A2,…,Ap,Am+1,…,An]=A1,…,Ap,Am+1,…,An (r)

Astfel , relatiile persoana si carte se descompun in doua , respectiv trei relatii:


parinte[NUME,AN-NASTERE,PROFESIA]
copil[NUME,NUMECOPIL,AN-NASTERE-COPIL]
autori[COTA,AUTOR]
carti[COTA,TITLU,EDITURA,AN-APARITIE]
cuvinte[COTA,CUVANT-CHEIE]
Definitia2.2.8 [3] O relatie este in prima forma normala (FN1)daca nu contine
grupuri (de atribute ) repetitive .

28
Urmatoarele forma normale utilizeaza notiunea de dependenta functionala intre
submultimi de artibute .Stabilirea dependentelor functionale este sarcina
administratorului bazei si depinde de semnificatia datelor care se memeoreaza in
relatie . Operatiile de actualizare a datelor (adaugare,modificare,stergere) nu trebuie
sa modifice dependentele functionale existente.
Definitia 2.2.9 Fie r[A1,…,An] o relatie si X, Y {A1,…,An}.Atributul Y este
complet dependent functional de X , daca Y este dependent functional de X(XY)si
nu este dependent functional de nici o submultime de atribute din X (pentru aceasta
dependenta functionala trebiue ca X sa fie atribut compus).
Fie r [A1,…,An] o relatie si CA={A1,…,An} o cheie .Presupunem ca exista
YA, YC=(Y nu este chie ), Y dependent functional de XC (Y este complet
dependent functional de o submultime stricta de atribute cheie).Dependenta XY se
poate elimina daca relatia r se descompune in urmatoarele doua relatii:
r=[XY]=xy(r)
r=[AY ]=AY(r)
Definitia2.2.10 [3] O relatie este in a doua forma normala (FN2) daca este de
prima forma normala si orice atribut (simplu sau compus) este complet dependent de
cheie sau este inclus in cheie.
Exemplul 2.2.6 Se considera urmatoarea relatie (cu rezultatele la examene):
examen [NUME-STUDENT,DISCIPLINA,NOTA,PROFESOR]
in care cheia este {NUME-STUDENT,DISCIPLINA}si unei discipline ii corespunde un
singur cadru didactic , iar unui cadru didactic pot sa-i corespunda mai multe
discipline , deci avem dependenta functionala DISCIPLINAPROFESOR.
De aici deducem ca atributul PROFESOR nu este complet dependent functional
de cheie.Atunci , relatia examen se poate descompune in urmatoarele doua relatii:
apreciere [NUME-STUDENT,DISCIPLINA,NOTA] si
stat-functii[DISCIPLINA,PROFESOR]
Daca depndenta functionala DISCIPLINAPROFESOR nu este respectata ,
atunci poate apare o inconsistenta .Fie doua elemente din relatie:

T …DISCIPLINA … PROFESOR
……………………………………
t1 …ANALIZA … POPA
t2 …ANALIZA … POPA
……………………………………..

Daca in t1 valoarea atributului PROFESOR se schimba, dar in t2 nu se face


schimbarea, atunci dependenta functionala nu este respectata si apare o
inconsistenta (la aceeasi disciplina apar cadre didactice diferite).
Definitia 2.2.11 Un atribut Z este tranzitiv dependent de atributul X daca exista
Y astfel incat XY,YZ, iar YX nu are loc si Z nu e inclus in XY.

29
Daca C este o cheie si Y un atribut tranzitiv dependent de cheie , atunci exista
un X care verifica CX si XY .Deoarece relatia este in forma normala FN2 ,
obtinem ca Y este complet dependent de C, deci XC = si exista o dependenta
XY , iar X nu este cheie.
Daca r[A1,…,An]are cheia C si exista atributul Y{A1,…,An} ,tranzitiv dependent
de C si care nu este cheie (adica YC=), atunci relatia r se poate descompune in
urmatoarele relatii (se elimina dependenta functionala XY):
r[XY]=XY(r)
r=[AY ]=AY(r)
Definitia 2.2.12 [3] O relatie este in a treia forma normala (FN3) daca si numai
daca relatia r este in a doua forma normala si fiecare atribut care nu este cheie (nu
participa la o cheie) nu este tranzitiv dependent de nici o cheie a lui r.
Exemplul 2.2.7 Se considera urmatoarea relatie (cu rezultatele obtinute de
absolventi la lucrarea de diploma):
diploma[NUME-ABSOLVENT,NOTA,CADRU-DID –INDR,CATEDRA]
cu cheia NUME-ABSOLVENT.
Se obseva ca avem urmatoarele dependente functionale:
CADRU-DID-INDRCATEDRA
NUME-ABSOLVENTCADRU-DID-INDR
Relatia initiala se poate , atunci descompunerea in urmatoarele doua relatii :
rezultate[NUME-ABSOLVENT,NOTA,CADRU-DID-INDR]
indrumatori[CADRU-DID-INDR,CATEDRA].
Dupa definitia Formei normale FN3 data de E.F/Codd[16] , ulterior , au mai aparut o
serie de noi definitii:
 O relatie r este in a treia forma normala Boyce-Codd(FNBC) daca orice
determinant este cheie (principala sau secundara).
 O relatie este in a treia forma normala C.J.Date (FN3 Date) [4] daca orice atribut
care nu este cheie, nu este tranzitiv dependent de cheia principala.
Exemplul 2.2.8 Transportul local pe timp de o saptamana dintr-un oras este
specificat de relatia:
transport [ZI,NR-TRASEU,NR-MASINA,COND-AUTO]
unde COND-AUTO este numele conducatorului auto (el conduce o singura masina ,
dar pe acea masina o poate conduce si un alt conducator).Avem cheia : {ZI,NR-
TRASEU, NR-MASINA} si dependenta COND-AUTONR-MASINA.
Relatia definita este in FN3 Date (NR-MASINA)apare in cheie , dar nu este in
FNBC si se poate descompune in urmatoarele doua relatii :
traseu [ZI,NR-TRASEU,NR-MASINA]
soferi[NR-MASINA,COND-AUTO]
Definitia 2.2.13 Fie relatia r [A1, A2,…,An]si doua multimi de atribute X,Y{A1,
…,An} .Spunem ca Y este multiplu dependent functional de X(XY) daca si numai
daca pentru orice t1, t2  r pentru care x(t1)=x (t2) exista t1 si t2  r astfel incat :
x(t1)=x(t2)=x(t3)=x(t4)

30
y(t1)=y(t2)=y(t3)=y(t4)
A-X-Y(t1)=y(t2)=A-X-Y(t3)=A-X-Y(t4)
Dependenta XY se numeste dependenta functionala multipla sau
dependenta multivaloare si se poate reprezenta astfel:

X Y A-X-Y
t1 v u1 w1
t2 v u2 w2
t3 v u1 w2
t4 v u2 w1

Daca A=XY sau YX, atunci dependenta XY se numeste triviala.


Definitia 2.2.14 [3] O relatie r este in a patra forma normala (FN4) daca pentru
dependentele functionale multiple , avem XY este dependenta triviala sau X este
cheie pentru r.
Aceasta definitie difera de definitia formei FNBC doar prin folosirea
dependentelor functionale multiple in locul celor simple.
Exemplul 2.2.9 Consideram relatia carte in care se observa ca avem
urmatoarele dependente functionale:
COTAAUTOR ;COTA CUVANT-CHEIE.
COTA{TITLU,EDITURA,AN-APARITIE}
carte
AUTOR COTA TITLU EDITURA AN- CUVINTE-
APARITIE CHEIE
Popescu I. 1 Mara ALL 1990 Rom
Slavici I. 1 Mara ALL 1990 Rom
Popescu I. 1 Mara ALL 1990 Roman
Slavici I. 1 Mara ALL 1990 Roman
Tudor P. 2 Baze de Teora 1993 Bdate
date
Ioan S. 2 Teora 1993 Bdate
Baze de
Vigu T. 2 Teora 1993 Bdate
date
Tudor P. 2 Teora 1993 Rom
Baze de
Ioan S. 2 date Teora 1993 Rom
Vigu T. 2 Baze de Teora 1993 Rom
date
Baze de
date
Baze de
date

31
Pentru a forma FN4 , vom descompune relatia in urmatoarele relatii:
COTA TITLU EDITURA AN-APARITIE
1 Mara ALL 1990
2 Baze de date Teora 1993

COTA AUTOR
1 Popescu I.
1 Slavici I.
2 Tudor P.
2 Ioan S.
2 Vigu T.

COTA CUVANT-CHEIE
1 Rom
1 Roman
2 Bdate
2 Rom

Definitia 2.2.15 Fie relatia r [A1, A2, …, An]si r1[x1],…,rm[xm] o descompunere


a relatiei r . Relatia r satisface defpendenta join notata *(r1,…,rm) , daca r = r1 ⋈ r2
⋈… ⋈ rm .Daca una din relatiile ri este egala cu r , atunci aceasta dependenta este
triviala.
Sa consideram o relatie r si o dependenta join*(r1,r2) , unde r1[X],r2[Y] sunt
relatii . Cu aceste presupuneri , avem : r = r1⊲⊳r2 .
Fie t1, t2  r si valorile lor date prin urmatorul tabel:
X-Y XY Y-X
x(t1) u1 V ….
x(t2) u2 V ….
……………………………………
………….
y(t1)
…… V w1
y(t2)
…… V w2

Daca se calculeaza r1 ⋈ r2 , care este egala cu r , rezulta faptul ca mai avem


doua elemente t3 si t4 din r cu valorile urmatoare:
X-Y XY Y-X
t1 u1 v

32
w1
t2 u2 v
w2
…………………………………
t3
………………
t4
u1 v
w1
u2 v
w2

De aici , se deduce ca XYX sau XY Y , deci dependenta


join*(r1,..,rm) este echivalenta cu dependenta functionala multipla.
Definitia 2.2.16 [5] O relatie este in forma normala cinci (FN 5) cu respectarea
unei multimi D de dependente functionale multiple sau join , daca fiecare dependenta
*(r1 ,…,rm) este fie triviala , fie Xi este cheie (avem ri[Xi])pentru r , pentru toate
valorile lui i.
Cu alte cuvinte , o relatie r este in FN5 daca orice dependenta join definita pe r
este implicata de cheile candidat ale lui r.
Exemplul 2.2.10 Fie relatia cursa [CP#,CA#,PD,PA], unde CP-codul pilotului ,
CA-codul avionului, PD si PA punctul de decolare , respectiv aterizare.
In aceasta relatie , care este in FN4 , nu exista dependente functionale multiple,
dar exista o redundanta logica , care va ridica probleme la actualizare.
cursa

CP# CA# PA PD
11 100 Sibiu Iasi
10 100 Iasi Sibiu
10 100 Sibiu Iasi
10 101 Sibiu Iasi

Descompunem relatia cursa prin proiectie in :


r1 (CP#,CA#)
r2 (CP#,PD,PA)
r3 (CP#,PD,PA)
Se observa ca, cursa r1 ⋈ r2; cursa r2 ⋈ r3; cursa r1 ⋈ r3, dar cursa =r1 ⋈
r2 ⋈ r3 .

In relatia r1 ⋈ r2 a aparut un tuplu (10,101,Iasi,Sibiu)care nu exista in cursa .Daca ar


fi existat , ar fi avut loc multidependenta CPCA si astfel descompunerea
reversibila a relatie cursa r1 si r2.
r1
CP# CA#

33
11 100
10 100
10 101

r2
CP# PD PA
11 Sibiu Iasi
10 Iasi Sibiu
10 Sibiu Iasi

r3
CA# PD PA
100 Sibiu Iasi
100 Iasi Sibiu
101 Sibiu Iasi

r1⋈ r2
CP# CA# PD PA
11 100 Sibiu Iasi
10 100 Iasi Sibiu
10 100 Sibiu Iasi
10 101 Iasi Sibiu
10 101 Sibiu Iasi

1.2.2. TEHNICA NORMALIZARII RELATIILOR


Proiectarea schemei conceptuale a unei baze de date presupune parcurgerea
urmatoarelor etape:
1. Determinarea formei normale in care trebuie sa se afle relatiile din baza de
date .In majoritatea cazurilor bazele de date relationale sunt constituite din relatii
aflate in FN1 sau FN2 .Acest lucru se explica prin faptul ca formele normale
superioare , desi reduc dificultatea de realizare a operatiilor de actualizare , reduc
in acelasi timp si performantele operatiilor de regasire a datelor.Relatiile aflate in
forme normale superioare contin un numar mic de atribute si acest lucru
favorizeaza opertiile de actualizare a datelor , dar ingreuneaza procesul de
regasire a lor , deoarece satisfacerea cererilor de date impune interogarea
simultana a mai multor relatii, deci efectuarea unor operatii de join , care sunt
costisitoare in termenii resurselor de calcul solocitate.

34
2. Stabilirea relatiilor care sa faca din BD,in forma normala precizata la etapa
anteriora . Presupune definirea schemei relatiilor si a restrictiilor de
integrare .Modul prin care se stabileste multimea de relatii din baza de date , se
numeste tehnica relatiilor.
3. Descrierea schemei conceptuale in limbajul de descriere a datelor utilizat de
SGBD-ul relational ce se utilizeaza.
In obtinerea unei baze de date performanta , un rol important il are tehnica
normalizarii relatiilor .Aceasta tehnica permite obtinerea schemei conceptuale printr-
un proces de ameliorare progresiva a unei scheme concepute initial,prin utilizarea
formelor normale.Dupa fiecare etapa de ameliorare , relatiile din baza ating un
anumit grad de perfectiune , prin eliminarea unui anumit tip de dependente nedorite
(dependente functionale partiale,tranzitive,multivaloare), deci se afla intr-o anumita
forma normala.
Procesul de ameliorare , trebuie sa satisfaca urmatoarele cerinte:
 sa garanteze conservarea datelor , adica in schema conceptuala finala
trebuie sa figureze toate datele din schema initiala;
 sa garanteze conservarea dependentelor dintre date, adica in schema finala
fiecare dependenta trebuie sa aiba determinantul si determinatul in schema
aceleiasi relatii;
 sa reprezinte o descompunere minimala a relatiilor initiale.Nici una din relatiile
care compun schema finala nu trebuie sa fie continuta intr-o alta relatie din
aceasta schema .
Necesitatea normalizarii este ilustrata in exemplul urmator.
Fie schema relationala avion(NR,TIP,CAPACITATE,LOCALITATE), cu cheia
primara numarul avionului (NR).
avion
NR TIP CAPACITATE LOCALITATE
100 IAR500 90 Brasov
101 IAR500 90 Arad
102 ROMBAC 100 Bucuresti
103 TU154 200 Timisoara
Presupunem ca in cadrul companiei , exista restrictia : “toate avioanele de
acelasi tip au aceeasi capacitate” care este de fapentru o dependenta functionala de
forma TIPCAPACITATE .
Datorita acestei dependente , pot exista redundante in date sau pot sa apara
anomalii la reactualizare.Astfel , in relatia de mai sus , avem o redundanta logica
(perechea <IAR 500 ,90>apare de mai multe ori)precum si anomalii la reactualizare :
daca dorim sa stergem avionul cu nr 102 , vom pierde informatia care ne arata ca un
avion ROMBAC are capacitatea 100.
De asemenea , daca dorim sa modificam capacitatea avionului IAR 500 , de la 90
la 190 de locuri putem intalni urmatoarele anomalii: modificand un singur tuplu,relatia
devine incoerenta (restrictia nu mai este verificata), iar daca modificam toate tuplurile
cu IAR 500 , costul modificarii creste semnificativ.

35
PARTEA I I I

3. Arhitectura unui sistem de baze de date


relationale
Numim relaţie între entităţile E1,E2,………,Ek orice submulţime a
produsului cartezian al mulţimilor elementelor celor k entităţi, adică mulţimi de
elemente de forma (e1,e2,……...,ek), unde e1 este un element din E1, e2 este
un element din E2 ş.a.m.d. O astfel de relaţie o notăm REL(E1,E2,……...,Ek),
unde REL este numele asociat relaţiei, şi putem spune că relaţia are arietatea
k. De cele mai multe ori k=2, deci se lucrează cu relaţii binare.
În cazul relaţiilor binare, se poate face o clasificare a lor în funcţie de câte
elemente corespund fiecărui element dintr-o entitate în cealaltă entitate,
după cum urmează:
3.1.      relaţie unu-la-unu (notată 1:1), în cazul în care fiecărui element
din prima entitate îi corespunde cel mult un element din a doua entitate şi
reciproc;
3.2.      relaţie unul-la-mai-mulţi (notată 1:N), în cazul în care fiecărui
element al primei entităţi îi pot corespunde mai multe elemente din a doua
entitate, dar fiecărui element din a doua entitate îi corespunde cel mult un
element din prima entitate.
3.3.      relaţie mai-mulţi-la-mai-mulţi (notată M:N), în cazul în care
fiecărui element al primei entităţi îi pot corespunde mai multe elemente
din a doua entitate şi reciproc.
 

PARTEA IV
 
4.              Limbaje de generatia IV pentru baze de date
 

36
Împreună cu fiecare model de date sunt necesare anumite limbaje pentru a
defini schemele de reprezentare şi pentru a efectua operaţii cu datele memorate în
concordanţă cu schemele. Sunt uzitate astfel, următoarele tipuri de limbaje
(DOGARU & 1998, 254):
         Limbaj de definire a datelor (DDL) – este un limbaj pentru definirea
schemei conceptuale;
         Limbaj pentru manipularea datelor (DML);
         Limbaj pentru memorarea datelor (SDL).
 
Pentru interacţiunile utilizatorilor cu baza de date este necesar un limbaj
prietenos, cu o sintaxă simplă, numit limbaj de interogare (QL). În ciuda numelui său,
un limbaj de interogare include facilităţi pentru inserarea, ştergerea şi modificarea
datelor din baza de date. În cazul modelului relaţional, abordarea folosită constă în a
încorpora toate aceste facilităţi cerute într-o sintaxă uniformă, în cadrul unui singur
limbaj. Standardul cel mai cunoscut este SQL.
 
SQL
 
Limbajul numit SQL (Structured Query Language) este utilizat intens în
prelucrarea bazelor de date structurate conform modelului relaţional. Unul din
motivele popularităţii de care se bucură acest limbaj este faptul că el a fost
standardizat de American National Standards Institute (ANSI). În plus, limbajul a fost
iniţial dezvoltat şi comercializat de IBM, ceea ce i-a asigurat o mare răspândire.
Principala aplicaţie în limbajul SQL, efectuată de utilizator, este interogarea bazei de
date (BROOKSHEAR 1998, 379).
Printr-o singură instrucţiune SQL se poate exprima o interogare care
presupune o secvenţă de operaţii SELECT, PROJECT şi JOIN, nefiind necesară o
anumită ordine a acestora. Deşi forma de exprimare a unei instrucţiuni SQL pare a fi
imperativă, în esenţă instrucţiunea este de tip declarativ. Drepentru urmare limbajul
SQL îl scuteşte pe utilizator de necesitatea dezvoltării unei secvenţe de paşi care
trebuie parcurşi pentru obţinerea informaţiei dorite – tot ce are de făcut este să
descrie informaţia de care are nevoie.
Majoritatea instrucţiunilor din SQL sunt executabile, ele putând fi interpretate
şi executate imediat în mod interactiv sau putând fi incluse în diferite aplicaţii scrise
în limbaje de programare cum sunt APL, BASIC, C, COBOL, FORTRAN, PL/I,
ASSEMBLER, etc., executându-se în momentul rulării programului respectiv (BÂSCĂ
1997, 55).
Alte limbaje sunt Visual basic,Visual foxpro care folosesc programarea
relationala abazelor de date in format vizual.
 

SQL
 este limbajul utilizat pentru a accesa o bază de date relaţională;
 poate fi utilizat atunci când accesul la baza de date este necesar, de fiecare
instrument de gestiune a bazelor de date (Access, Oracle, SQL-Server,
MySQL,...);
 este un limbaj simplu, ne-procedural, cu comenzi intuitive în limba engleză;
 este un limbaj standard pentru bazele de date.

Vorbind despre SQL, în multe cărţi se spune SQL = Structured Querry Language. Dar
SQL nu este un limbaj structurat în sensul structurării limbajelor de programare. De
fapt, curând după apariţia lucrării lui Codd, la IBM s-a realizat un sistem prototip

37
pentru baze de date relaţionale. S-a numit System R şi se baza pe un set de comenzi
către baza de date, set de comenzi numit SEQUEL (Structured English QUEry
Language). Cu alte cuvinte un subset de cereri către baza de date formulate strcturat
în engleză. A fost punctul de plecare pentru SQL, care a fost standardizat ca limbaj
pentru bazele de date independent de sistemul de gestiune şi de platforma de calcul.
De aceea s-a şi scurtat numele, pentru a nu mai apare confuzii cu System R şi cu
vechiul limbaj SEQUEL.

O primă standardizare a SQL s-a petrecut încă din 1986, când au apărut
specificaţiile ANSI (American National Standards Institute), extinse în standardizarea
ISO din 1989, apoi în 1992 şi încă mai recent, în 1999.

Simplitatea limbajului se reflectă în numărul mic de comenzi (zece) şi în


faptul că nici dimensiunea bazei de date, numărul de înregistrări, sau numărul de
coloane, nici tipul datelor nu influenţează forma comenzilor SQL. Ca urmare, toate
sistemele actuale de gestiune de baze de date acceptă comenzi în limbajul SQL.

In sistemele Oracle de baze de date, pentru scrierea aplicaţiilor şi pentru


manipularea datelor în afara bazei de date, se foloseşte un limbaj procedural numit
PL/SQL, o extensie procedurală a limbajului SQL, de fapentru principalul limbaj
(procedural) pentru realizarea aplicaţiilor în sistemele Oracle . In particular, SQL-Plus
este un produs Oracle în care pot fi utilizate limbajele SQL şi PL/SQL.

INTRODUCERE IN SQL
Este vorba de o introducere în limbajul de interogare utilizat pentru a accesa o bază de
date.

La scurt timp după ce E. F. Codd a descris structura bazei de date relaţionale, în


colectivul de la IBM s-a realizat un prototip de sistem de management al bazelor de
date relaţionale, numit System R, împreună cu un limbaj dedicat (pentru a crea şi a
opera cu bazele de date relaţionale), numit SEQUEL (Structured English QUEry
Language). Expresiile din SEQUEL seamănă cu propoziţiile din limba engleză, fiind
desigur mai structurate. In paralel firma IBM a scos pe piaţă produse cu baze de date
relaţionale, bazate pe System R. Dar cu un limbaj puţin diferit de SEQUEL. Astfel că
l-a botezat SQL, eliminând vocalele din Sequel şi trecând la pronunţia "es-qu-el".
Chiar dacă sunt autori care consideră că SQL provine de la Structured Query
Language, asta nu-i adevărat.Iar SQL nu are nimic de a face cu limbajele de
programare structurată, precum Pascal sau C++.

In 1979, Corporaţia Oracle introduce prima implementare a SQL în variantă


comercială.

In scurt timp SQL devine un standard industrial pentru bazele de date relaţionale.
Institutul National American de Standarde (ANSI) l-a adoptat ca limbaj standard
pentru gestiunea bazelor de date (RDBMS), încă în anul 1986. Organizaţia
Internaţională de Standarde (ISO) a adoptat deasemenea SQL ca limbaj standard
pentru RDBMS. Toate RDBMS-urile suportă unele forme de SQL şi toţi vânzătorii de
astfel de sisteme s-au aliniat sau intenţionează să se alinieze la standardele ANSI.
Asta nu înseamnă că nu mai apar diferenţe. Chiar şi la produsele aceleaşi firme,

38
Microsoft Access şi SQL Server, pot fi semnalate diferenţe în implementarea
limbajului SQL.

SQL poate fi folosit în două moduri:

 direct la terminal, adică în mod comandă (interactiv, sau batch)


 în cadrul unor programe scrise într-un limbaj de programare, precum C++, sau
Visual Basic.

In concluzie: Un sistem de management al bazei de date necesită un limbaj de


interogare pentru a permite utilizatorului să acceseze datele. SQL (iniţial numit
SEQUEL, ca limbaj de interogare structurată) este limbajul standardizat ANSI şi ISO,
utilizat de majoritatea sistemelor ce manevrează baze de date relaţionale.

Trăsături caracteristice ale limbajului SQL

 SQL, ca şi majoritatea limbajelor de programare, foloseşte cuvinte din limba


engleză. In mod special cuvintele select, insert, delete ca elemente ale setului
de comenzi.
 SQL este un limbaj neprocedural: specifică care sunt informaţiile dorite, nu
cum se obţin acestea. Cu alte cuvinte, SQL nu cere să fie specificată metoda
de acces la date.
 Execuţia comenzilor SQL asupra înregistrărilor nu se poate face decât
secvenţial, asupra câte unei singure înregistrări. Setul de înregistrări fiind
văzut ca set de linii ale unui tabel.
 SQL poate fi folosit de un şir de utilizatori, incluzând administratorul bazei de
date, programatorii de aplicaţii, personalul de management şi multe alte tipuri
de utilizatori.
 SQL include comenzi pentru o varietate de sarcini, incluzând:
o selecţia unor date
o inserarea, extragerea şi ştergerea rândurilor dintr-un tabel
o crearea, modificarea şi ştergerea obiectelor de tip bază de date
o controlul accesului la baza de date şi la obiectele de tip bază de date
o verificarea - garantarea consistenţei bazei de date

La început, sistemele de management a bazelor de date au utilizat un limbaj separat


pentru fiecare categorie de sarcini în parte. SQL le-a unificat pe toate acestea într-un
singur limbaj.

Logic, comenzile limbajului SQL sunt împărţite în trei componente:

 limbajul de definire a datelor (Data Definition Language)- DDL,


 limbajul de manipulare a datelor (Data Manipulation Language)- DML,
 limbajul de control al datelor (Data Control Language)-DCL.

Primul pentru crearea structurii de bază de date, al doilea, după ce structura există,
pentru a adăuga date în tabele şi pentru a le manipula. A treia componentă oferă
posibilitatea de a proteja (securiza) datele.

39
Setul de comenzi SQL
Comenzile de definire a datelor (DDL): CREATE, ALTER, DROP
aceste trei comenzi sunt utilizate dinamic pentru a crea, utiliza şi şterge orice
structură de date, în particular tabele.
Comenzile de manipulare a datelor (DML): INSERT, UPDATE, DELETE şi
SELECT
utilizate pentru a introduce noi rânduri, pentru a schimba (actualiza) rândurile
existente, pentru a şterge rândurile nedorite din baza de date respectivă, şi, în
fine, SELECT - comanda cea mai utilizată, folosită pentru a căuta, a selecta
înregistrări din tabel sau dintr-o combinaţie de tabele ale bazei de date.
Comenzile de control (grupul DCL), la dispoziţia administratorului(DBA): GRANT,
REVOKE
utilizate pentru a da sau a lua drepturi de acces (la comenzi DML, deci la
operarea unor modificări a bazei de date).

Sintaxa comenzilor diferă de la un grup la altul. Ne limităm acum doar la câte un


exemplu:

CREATE TABLE CLIENTUL (


Clientul ID Integer PRIMARY KEY,
Numele Character (15),
prenumele Character (20) NOT NULL,
Titlu Character (5),
Stada Character (25),
Orasul Character (25),
Tara Character (2),
Telefonul Character (15) );

INSERT INTO CLIENTUL (Clientul ID, Numele, prenumele)


VALUES (1, 'Dana', 'Popescu');

Scrierea comenzilor SQL


Când scriem comenzi SQL, este important să ne reamintim câteva reguli simple
pentru construirea unor declaraţii valide care sunt şi uşor de citit şi de editat:
 Comenzile SQL pot fi scrise pe una sau mai multe linii.
 Clauzele sunt uzual plasate pe linii separate.
 Poate fi folosită tabelarea.
 Cuvintele de comandă nu pot fi separate pe mai multe linii.
 Comenzile SQL pot fi scrise fie cu majuscule fie cu minuscule (nu sunt 'case
sensitive').
 O comandă SQL este introdusă la prompterul SQL, iar liniile subsecvenţelor
sunt numerotate.
 O singură declaraţie poate fi considerată curentă, cât timp ea este într-un
buffer şi poate fi rulată într-un anumit număr de moduri :
o plasând un punct şi virgulă(;) la sfârşitul ultimei clauze.

40
o plasând un punct şi virgulă urmat de semnul / (slash) pe ultima linie în
buffer.
o plasând un slash (/) la prompterul SQL.
o scriind comanda SQL RUN la prompterul SQL.

Comenzile pot fi deci scrise în oricare din următoarele forme:


SELECT * FROM ANGAJAT;

SELECT
*
FROM
ANGAJAT
;

SELECT *
FROM ANGAJAT;

In acest document, pentru claritate, comenzile SQL sunt sparte în clauze.

Blocul de interogare de bază

Declaraţia SELECT regăseşte informaţia din baza de date, putând îngloba şi unul sau
mai mulţi operatori din algebra relaţională.

In cele mai simple forme trebuie să conţină:

1. O clauză SELECT, care listează coloanele pentru afişare astfel încât este
esenţiala o Proiecţie.
2. O clauză FROM care specifică tabela implicată.

Pentru a lista toate numerele departamentelor, numele angajaţilor şi numărul şefilor


(managerilor) introduceţi în tabela ANGAJAT următoarele:

SELECT DEPTNO, NUME, CODSEF


FROM ANGAJAT;

DEPTNO NUME CODSEF


------ ---------- -----
20 ION 7902
30 ALLEN 7698
30 GORE 7698
20 JONES 7839
30 MARTIN 7698
30 VIRGIL 7839
10 COSTEL 7839
20 STEFAN 7566
10 CRISTIAN
30 TICA 7698
20 ADAMS 7788
30 JAMES 7698
20 FLORIN 7566

41
10 MIHAI 7782

De remarcat că numele coloanelor sunt separate prin spaţiu.

Este posibil să selectăm toate coloanele din tabelă prin specificarea unui asterix ( * )
după cuvântul SELECT .

SELECT *
FROM ANGAJAT;

NRANG NUME MESERIA CODSEF DATAANG SAL COMM DEPTNO


----- ------- ------- ---- --------- --------- ------- ------
7369 ION FUNCTIONAR 7902 13-JUL-83 800. 00 20
7499 ALLEN VANZATOR 7698 15-AUG-83 1, 600. 00 300. 00 30
7521 GORE VANZATOR 7698 26-MAR-84 1, 250. 00 500. 00 30
7566 JONES MANAGER 7839 31-OCT-83 2, 975. 00 20
7654 MARTIN VANZATOR 7698 05-DEC-83 1, 250. 00 1.400. 00 30
7698 VIRGIL MANAGER 7839 11-JUN-84 2, 850. 00 30
7782 COSTEL MANAGER 7839 14-MAY-84 2, 450. 00 10
7788 STEFAN ANALYST 7566 05-MAR-84 3, 000. 00 20
7839 CRISTIAN PRESEDINTE 09-JUL-84 5, 000. 00 10
7844 TICA VANZATOR 7698 04-JUN-84 1, 500. 00 0. 00 30
7876 ADAMS FUNCTIONAR 7788 04-JUN-84 1, 100. 00 20
7900 JAMES FUNCTIONAR 7698 23-JUL-84 950. 00 30
7902 FLORIN ANALYST 7566 05-DEC-83 3, 000. 00 20

Alte elemente în clauza SELECT

Este posibil să se includă şi alte elemente în clauza SELECT.


 Expresii aritmetice
 Alias-uri de coloane
 Coloane concatenate
 Litere sau şiruri de caractere

Toate aceste opţiuni ajută utilizatorul să ceară date şi să le manipuleze în funcţie de


scopurile interogării; de exemplu, execuţia calculelor, legarea coloanelor impreună,
sau afişarea şirurilor de litere din text.

Expresii aritmetice

O expresie este o combinaţie de una sau mai multe valori, operatori şi funcţii, care se
evaluează la o valoare.

Expresiile aritmetice pot conţine nume de coloane, valori numerice constante şi


operatori aritmetici:

Operatori Descriere
--------- ---------
+ adunare
- scădere
* înmulţire
/ împărţire

42
SELECT NUME, SAL*12, COMM
FROM ANGAJAT;

Daca expresia aritmetică conţine mai mult decât un operator, atunci priorităţile sunt *,
/, la început, apoi +, - (de la stânga la dreapta pentru operatorii cu aceeaşi prioritate).

In următorul exemplu, înmulţirea (250*12) este evaluată prima; apoi valoarea


salariului este adunată la rezultatul multiplicării(3000). Astfel pentru rândul lui ION
avem :800+3000=3800.

SELECT NUME, SAL + 250 * 12


FROM ANGAJAT;

Parantezele pot fi utilizate pentru specificarea ordinii de execuţie a operatorilor, dacă,


de exemplu, adunarea e dorită înainte de înmulţire:

SELECT NUME, (SAL + 250) * 12


FROM ANGAJAT;

Alias-uri de coloană

Când se afişează rezultatul unei interogări, în mod normal se utilizează numele


coloanelor selectate ca titlu. In multe cazuri acest nume poate fi criptic sau fără
înţeles.

Putem schimba un titlu de coloană utilizând un 'ALIAS'.

Un alias de coloană dă unei coloane un nume de titlu alternativ la ieşire.

Specificaţi aliasul după coloană, în lista selectată. Din oficiu, titlurile de tip alias vor
fi scrise forţat cu litere mari şi nu pot conţine spaţii (blankuri), numai dacă aliasul este
inclus între ghilimele(" "). Pentru a afişa titlul de coloană ANNSAL. pentru salariul
anual, însemnând SAL*12, utilizaţi un alias de coloană:

SELECT NUME, SAL*12 ANNSAL, COMM


FROM ANGAJAT;

Odată definit, un alias poate fi utilizat de alte comenzi, precum cele din SQL-Plus.

Notă:

Intr-o declaraţie SQL, un alias de coloană poate fi utilizat numai în clauza SELECT.

Operatorul de concatenare

43
Operatorul de concatenare (||) permite coloanelor să fie legate cu alte coloane, iar
expresiilor aritmetice sau valorilor constante să creeze o expresie de caractere.
Coloanele din cealalta parte a operatorului sunt combinate pentru a obtine o singura
coloana. Pentru a combina NRANG şi NUME şi să se dea aliasul
ANGAJATCUPLAT expresiei, introduceţi:
SELECT NRANG||NUME ANGAJATCUPLAT
FROM ANGAJAT;

ANGAJATCUPLAT
-------------------------------------------------------
7369ION
7499ALLEN
7521GORE
7566JONES
7654MARTIN
7698VIRGIL
7782COSTEL
7788STEFAN
7839CRISTIAN
7844TICA
7876ADAMS
7900JAMES
7902FLORIN
7934MIHAI

Literali

Un literal este orice caracter, expresie, numar inclus în lista lui SELECT care nu este
un nume de coloana sau un alias de coloana.

Un literal în lista lui SELECT este reprezentat de fiecare rând returnat la iesire.
Sirurile de literali dintr-un text cu un format oarecare pot fi incluse in rezultatul
interogarii şi sunt tratate ca o coloana lista selectata.

Literalii de tip dată calendaristica şi caracter pot fi închisi între ghilimele


simple(');literlalii de tip numar nu au nevoie de ghilimele simple(').

Urmatoarea declaraţie conţine literali selectaţi prin concatenare şi printr-un alias de


coloana:

SELECT NRANG||'-'||NUME ANGAJATCUPLAT,


'MUNCITOR IN DEPARTAMENT',
DEPNO
FROM ANGAJAT;

ANGAJATCUPLAT 'MUNCITOR IN DEPARTAMENT' DEPTNO


------------------ -------------------- ------
7369-ION MUNCITOR IN DEPARTAMENT 20
7499-ALLEN MUNCITOR IN DEPARTAMENT 30
7521-GORE MUNCITOR IN DEPARTAMENT 30
7566-JONES MUNCITOR IN DEPARTAMENT 20
7654-MARTIN MUNCITOR IN DEPARTAMENT 30

44
7698-VIRGIL MUNCITOR IN DEPARTAMENT 30
7782-COSTEL MUNCITOR IN DEPARTAMENT 10
7788-STEFAN MUNCITOR IN DEPARTAMENT 20
7839-CRISTIAN MUNCITOR IN DEPARTAMENT 10
7844-TICA MUNCITOR IN DEPARTAMENT 30
7876-ADAMS MUNCITOR IN DEPARTAMENT 20
7900-JAMES MUNCITOR IN DEPARTAMENT 30
7902-FLORIN MUNCITOR IN DEPARTAMENT 20
7934-MIHAI MUNCITOR IN DEPARTAMENT 10

Tratarea valorilor nule

Dacă unui rând ii lipseste o valoare pentru o anumita coloana, despre acea valoare se
spune ca este nula.

O valoare nula este o valoare care este sau incorecta, sau necunoscuta, sau
inaplicabila. O valoare nula nu este la fel ca 'zero'. Zero este un numar. Valoarea nula
ocupa un octet în reprezentarea interna.

Valoarea nula este tratată corect de catre SQL.

Dacă orice valoare de coloana într-o expresie este nula atunci rezultatul este nul. In
urmatoarea declaraţie numai Vanzator are un rezultat al salariului:

SELECT NUME, SAL*12 + COMM ANNUAL_SAL


FROM ANGAJAT;

NUME ANNUAL_SAL
--------- ----------
ION
ALLEN 19500
GORE 15500
JONES
MARTIN 16400
VIRGIL
COSTEL
STEFAN
CRISTIAN
TICA 18000
ADAMS
JAMES
FLORIN
MIHAI

Dacă dorim să obtinem un rezultat pentru toţi angajaţii, este necesar sa convertim
valoarea nula la un numar . Noi folosim funcţia NVL pentru a converti o valoare nula
la o valoare nenula.

Prevenirea selecţiei rândurilor duplicate

45
Dacă nu se indică altfel, SQL*Plus afişează rezultatul unei interogări fără eliminarea
intrărilor duplicate .

Pentru a lista toate numerele de departament din tabela ANGAJAT, introduceţi:

SELECT DEPTNO
FROM ANGAJAT;

DEPTNO
------
20
30
30
20
30
30
10
20
10
30
20
30
20
10

Clauza DISTINCT

Pentru eliminarea valorilor duplicate din rezultat, includeţi restricţia DISTINCT în


comanda SELECT.

Pentru a elimina valorile duplicate afişate în exemplul următor introduceţi:

SELECT DISTINCT DEPTNO


FROM ANGAJAT;

DEPTNO
------
10
20
30

Coloane multiple pot fi specificate după restricţia DISTINCT şi restricţia DISTINCt


afectează toate coloanele selectate.

Pentru a afişa valorile distincte ale lui DEPTNO şi MESERIA, introduceţi:

SELECT DISTINCT DEPTNO, MESERIA


FROM ANGAJAT;

DEPTNO MESERIA

46
------ ---------
10 FUNCTIONAR
10 MANAGER
10 PRESEDINTE
20 ANALYST
20 FUNCTIONAR
20 MANAGER
30 FUNCTIONAR
30 MANAGER
30 VANZATOR

Aceasta afişează o listă a tuturor combinaţiilor diferite de ocupaţie şi numere de


departamente.

De notat că restricţia DISTINCT poate să fie referită numai o singură dată şi trebuie
să urmeze imediat după cuvântul de comandă SELECT.

Clauza ORDER BY

In mod normal ordinea rândurilor întoarse în rezultatul unei cereri este nedefinită.
Clauza ORDER BY poate fi utilizată pentru a sorta rândurile.

Dacă o folosim, clauza ORDEY BY trebuie să fie întotdeauna ultima în declaraţia


SELECT.

Pentru a sorta după NUME, introduceţi:

SELECT NUME, MESERIA, SAL*12, DEPTNO


FROM ANGAJAT
ORDER BY NUME;

NUME MESERIA SAL*12 DEPTNO


--------- ------- -------- ------
ADAMS FUNCTIONAR 13200 20
ALLEN VANZATOR 19200 30
VIRGIL MANAGER 34200 30
COSTEL MANAGER 29400 10
FLORIN ANALYST 36000 20
JAMES FUNCTIONAR 11400 30
JONES MANAGER 35700 20
CRISTIAN PRESEDINTE 60000 10
MARTIN VANZATOR 15000 30
MIHAI FUNCTIONAR 15600 10
STEFAN ANALYST 36000 20
ION FUNCTIONAR 9600 20
TICA VANZATOR 18000 30
GORE VANZATOR 15000 30

Ordonarea "din oficiu" a datelor


Ordinea sortării, este predefinit ascendentă:
 La valorile numerice, cele mai mici primele

47
 La valorile de tip date calendaristice, cele mai mici primele.
 Valorile de tip caracter, în ordinea alfabetică.

Inversarea ordinii predefinite


Pentru a inversa această ordine, cuvântul de comandă DESC este specificat după
numele coloanei în clauza ORDER BY.

Pentru a inversa ordinea coloanei DATAANG, deci datele cele mai târzii să fie afişate
primele, introduceţi:

SELECT NUME, MESERIA, DATAANG


FROM ANGAJAT
ORDER BY DATAANG DESC;

NUME MESERIA DATAANG


--------- --------- ---------
JAMES FUNCTIONAR 23-JUL-84
CRISTIAN PRESEDINTE 09-JUL-84
VIRGIL MANAGER 11-JUN-84
TICA VANZATOR 04-JUN-84
ADAMS FUNCTIONAR 04-JUN-84
COSTEL MANAGER 14-MAY-84
GORE VANZATOR 26-MAR-84
STEFAN ANALYST 05-MAR-84
MARTIN VANZATOR 05-DEC-83
FLORIN ANALYST 05-DEC-83
MIHAI FUNCTIONAR 21-NOV-83
JONES MANAGER 31-OCT-83
ALLEN VANZATOR 15-AUG-83
ION FUNCTIONAR 13-JUN-83

Ordonarea după mai multe coloane


Este posibil să se ordoneze după mai multe coloane. Limita este numarul de coloane
din tabela. In clauza ORDER BY se specifica coloanele pentru ordonat separate prin
virgula. Daca una sau toate coloanele trebuie să fie inversate specificaţi DESC după
fiecare coloana.

Pentru a ordona după doua coloane şi afişa în ordinea inversa a salariului, introduceţi:

SELECT DEPTNO, MESERIA, NUME


FROM ANGAJAT
ORDER BY DEPTNO, SAL DESC;

48
DEPTNO MESERIA NUME
------ ------------ -------
10 PRESEDINTE CRISTIAN
10 MANAGER COSTEL
10 FUNCTIONAR MIHAI
20 ANALYST STEFAN
20 ANALYST FLORIN
20 MANAGER JONES
20 FUNCTIONAR ADAMS
20 FUNCTIONAR ION
30 MANAGER VIRGIL
30 VANZATOR ALLEN
30 VANZATOR TICA
30 VANZATOR GORE
30 VANZATOR MARTIN
30 FUNCTIONAR JAMES

Pentru a ordona după o coloana nu este necesar să o avem SELECT-ata.

ORDER BY şi valorile nule


In Oracle7, valorile nule sunt afişate ultimele pentru secventele ascendente si sunt
raportate primele cand rindurile sunt sortate în ordine descendenta.

Atenţie:

Clauza ORDER BY este utilizată într-o interogare cind se doreste să se afişeze


rindurile într-o ordine specifica . Fara clauza ORDER BY rândurile sunt returnate
într-o ordine convenita de ORACLE şi va trebui să ne bazam pe el- ordinea
determinată fiind consistenta de la cerere la cerere. De notat ca ordinea de afişare a
rindurilor nu influenteaza ordinea interna a rindurilor asa cum sunt stocate în tabela.

Clauza WHERE

Clauza WHERE corespunde operatorului 'Restricţie' din algebra relaţionala.

Conţine o condiţie pe care rindurile trebuie să o indeplineasca în ordinea afişarii lor.

Clauza WHERE, daca este folosita, trebuie să urmeze clauzei FROM :

SELECT coloane
FROM tabela
WHERE anumite condiţii sunt întâlnite

Clauza WHERE poate compara valori în coloana, valori literale, expresii aritmetice
sau funcţii.

Clauza WHERE asteapta trei elemente:

49
1. Un nume de coloana
2. Un operator de comparaţie
3. Un nume de coloana, constanta sau lista de valori.

Operatorii de comparaţie sunt utilizaţi în clauza WHERE şi pot fi impartiti in doua


categorii: logici şi SQL.

Operatorii logici

Acesti operatori verifica urmatoarele condiţii:

Operator Semnificaţie
-------- ------------
= egal cu
> mai mare decit
>= mai mare sau egal
< mai mic decit
<= mai mic sau egal

Sirurile de caractere şi datele calendaristice în clauza


WHERE
Coloanele din ORACLE pot avea urmatoarele tipuri:caracter, numar sau data
calendaristica.

Sirurile de caractere şi datele calendaristice din clauza WHERE trebuie sa fie închise
în ghilimele simple('). Sirurile de caractere trebuie să se supra- puna cu valoarea
coloanei daca nu, trebuie modificate de o funcţie. Utilizati "Funcţii pe Caractere" din
capitolul 4.

Pentru a afişa numele, numerele, ocupatia şi departamentele tuturor funcţionarilor,


introduceţi:

SELECT NUME, NRANG, MESERIA, DEPTNO


FROM ANGAJAT
WHERE MESERIA = 'FUNCTIONAR';

NUME NRANG MESERIA DEPTNO


--------- ----- ------- ------
ION 7369 FUNCTIONAR 20
ADAMS 7876 FUNCTIONAR 20
JAMES 7900 FUNCTIONAR 30
MIHAI 7934 FUNCTIONAR 10

Pentru a găsi toate numele de departamente cu numerele de departament mai mare ca


20, introduceţi:

SELECT NUME, DEPTNO


FROM ANGAJAT

50
WHERE DEPTNO >20;

DNAME DEPTNO
---------- ------
SALES 30
OPERATIONS 40

Compararea unei coloane cu alta în cadrul aceluiaşi rând


Puteţi compara o coloana cu o alta coloana în acelaşi rând, la fel ca şi cu o valoare
constanta.

De exemplu, presupunem ca dorim să obtinem acei angajaţi al caror comision estĺ mai
mare decat salariul lor:

SELECT NUME, SAL, COMM


FROM ANGAJAT
WHERE COMM> SAL;

NUME SAL COMM


------ -------- --------
MARTIN 1, 250. 00 1, 400. 00

Operatori SQL

Sint patru operatori SQL care opereaza pe toate tipuril de date:


Operatori SQL

Operator Semnificaţie
-------- ------------
BETWEEN. . AND. . . între doua valori(inclusiv)
IN(list) compara cu o lista de valori
LIKE compara cu un model de tip caracter
IS NULL estĺ o valoare nula

Operatorul BETWEEN

Realizeaza teste pentru valori între, si inclusiv, o valoare minima şi o valoare maxima.

Presupunind ca dorim să vedem angajaţii ai caror salariu este între 1000 şi 2000:

SELECT NUME, SAL


FROM ANGAJAT
WHERE SAL BETWEEN 1000 AND 2000;

NUME SAL
------- ----------
ALLEN 1, 600. 00
GORE 1, 250. 00

51
MARTIN 1, 250. 00
TICA 1, 500. 00
ADAMS 1, 100. 00
MIHAI 1, 300. 00

De notat ca valorile specificate sunt inclusive şi ca limita minima trebuie specificată


prima.

Operatorul IN

Testeaza valorile dintr-o lista specificata.

Presupunem ca dorim să gasim angajaţii care au unul din cele trei numere de
marca(CODSEF):

SELECT NRANG, NUME, SAL, CODSEF


FROM ANGAJAT
WHERE CODSEF IN (7902, 7566, 7788);

NRANG NUME SAL CODSEF


----- ----- --------- -----
7369 ION 800. 00 7902
7788 STEFAN 3, 000. 00 7566
7876 ADAMS 1, 100. 00 7788
7902 FLORIN 3, 000. 00 7566

Daca, caracterele sau datele calendaristice sunt utilizate, ele trebuie introduse între
ghilimele(' ').

Operatorul LIKE

Uneori nu se cunosc valorile exacte pe care le cautam. Utilizând operatorul LIKE este
posibil să selectam rândurile care se potrivesc cu un model specificat de caractere.
Operatia de petter-matching a caracterelor poate fi asemanată cu o cautare 'wild-card'.
Doi simboli se pot utiliza la construirea şirului de cautare.
Simbol Reprezentare
------ ------------
% orice secventa de zero sau mai multe
caractere
- un singur caracter oarecare
Pentru a lista toţi angajaţii al caror nume începe cu un S, introduceţi:
SELECT NUME
FROM ANGAJAT
WHERE NUME LIKE 'S%';

NUME
--------
ION
STEFAN
Caracterul '_' poate fi utilizat pentru cautarea unui anumit numar de carac- tere.

52
De exemplu pentru a lista toţi angajaţii care au un nume exact de patru caractere
lungime:

SELECT NUME
FROM ANGAJAT
WHERE NUME LIKE '____';

NUME
-----
GORE
CRISTIAN
FLORIN
Semnele '%' şi '_'pot fi utilizate în orice combinaţie de caractere.

Operatorul IS NULL

Operatorul IS NULL face teste specifice pentru valorile care sunt NULL.
SELECT NUME, CODSEF
FROM ANGAJAT
WHERE CODSEF IS NULL;

NUME CODSEF
------ ----
CRISTIAN

Negarea expresiilor

Urmatorii operatori fac teste de negaţie:

Operator Descriere
--------- ----------
!= diferit de(VAX, UNIX, PC)
^= diferit de(IBM)
<> diferit de(toate o/s)
NOT NUMECOL= diferit de
NOT NUMECOL> mai mic sau egal

Operatori SQL

Operator Descriere
-------- ---------
NOT BETWEEN nu se afla între doua valori date
NOT IN nu se afla într-o lista dată de valori
NOT LIKE diferit de şirul
IS NOT NULL nu este o valoare nula
Pentru a găsi angajaţii ai caror salariu nu este într-un interval, introdu- ceţi:
SELECT NUME, SAL
FROM ANGAJAT
WHERE SAL NOT BETWEEN 1000 AND 2000;

NUME SAL
--------- --------
ION 800. 00
JONES 2, 975. 00
VIRGIL 2, 850. 00

53
COSTEL 2, 450. 00
STEFAN 3, 000. 00
CRISTIAN 5, 000. 00
JAMES 950. 00
FLORIN 3, 000. 00

Pentru a afla acei angajaţi a caror meserie nu începe cu M,


introduceţi:

SELECT NUME, MESERIA


FROM ANGAJAT
WHERE MESERIA NOT LIKE 'M%';

NUME MESERIA
-------- --------
ION FUNCTIONAR
ALLEN VANZATOR
GORE VANZATOR
MARTIN VANZATOR
STEFAN ANALYST
CRISTIAN PRESEDINTE
TICA VANZATOR
ADAMS FUNCTIONAR
JAMES FUNCTIONAR
FLORIN ANALYST
MIHAI FUNCTIONAR

Pentru a afla toţi angajaţii care au un manager(CODSEF),


introduceţi:

SELECT NUME, CODSEF


FROM ANGAJAT
WHERE CODSEF IS NOT NULL;

NUME CODSEF
------- -----
ION 7902
ALLEN 7698
GORE 7698
JONES 7839
MARTIN 7698
VIRGIL 7839
COSTEL 7839
STEFAN 7566
TICA 7698
ADAMS 7788
JAMES 7698
FLORIN 7566
MIHAI 7782

Nota:

Daca o valoare NULL este utilizată într-o comparaţie, atunci operatorul de comparaţie
trebuie să fie IS sau IS NOT NULL. Daca acesti operatori nu sunt uti lizaţi şi valoarea
NULL este comparata, atunci rezultatul este întotdeauna FALSE

54
De exemplu, COMM!=NULL este întotdeauna falsa. Rezultatul este fals deoarece o
valoare NULL poate să nu fie egala sau diferita cu orice alta valoare alta decat NULL.

De notat ca o astfel de eroare nu este semnalata, rezultatul fiind întotdea- una fals.

Interogarea datelor cu condiţii multiple


Operatorii AND sau OR pot fi utilizaţi pentru a compune expresii logice.

Predicatul AND este adevărat numai daca ambele condiţii sunt 'adevărate'; predicatul
OR este adevărat daca cel putin una din condiţii este 'adevărata'.

In urmatoarele doua exANGAJATle, condiţiile sunt aceleasi, dar predicatele difera


Priviti cum rezultatul este dramatic modificat.

Pentru a găsi toţi funcţionarii care câştigă între


1000 şi 2000, introduceţi:

SELECT NRANG, NUME, MESERIA, SAL


FROM ANGAJAT
WHERE SAL BETWEEN 1000 AND 2000
AND MESERIA = 'FUNCTIONAR';

NRANG NUME MESERIA SAL


---- ------- -------- --------
7876 ADAMS FUNCTIONAR 1, 100. 00
7934 MIHAI FUNCTIONAR 1, 300. 00

Pentru a afla toţi angajaţii care sunt şi funcţionari şi/sau


funcţionari care castiga între 1000 şi 2000, introduceţi:

SELECT NRANG, NUME, MESERIA, SAL


FROM ANGAJAT
WHERE SAL BETWEEN 1000 AND 2000
OR MESERIA = 'FUNCTIONAR';

NRANG NUME MESERIA SAL


----- -------- ------- --------
7369 ION FUNCTIONAR 800. 00
7499 ALLEN VANZATOR 1, 600. 00
7521 GORE VANZATOR 1, 250. 00
7654 MARTIN VANZATOR 1, 250. 00
7844 TICA VANZATOR 1, 500. 00
7876 ADAMS FUNCTIONAR 1, 100. 00
7900 JAMES FUNCTIONAR 950. 00
7934 MIHAI FUNCTIONAR 1, 300. 00

Puteţi combina AND sau OR în acceaşi expresie logica. când AND sau OR apar in
aceeaşi clauza WHERE, toţi operatorii AND sunt evaluaţi mai întai şi apoi toţi
operatorii OR. Vom spune ca operatorii AND au o precedenta mai mare decat OR.

Deoarece AND are o precedenta mai mare decat OR urmatoarea declaraţie SQL
intoarce toţi managerii cu salarii peste 1500$ şi toţi vânzătorii.

55
SELECT NRANG, NUME, MESERIA, SAL, DEPTNO
FROM ANGAJAT
WHERE SAL> 1500
AND MESERIA = 'MANAGER'
OR MESERIA = 'VANZATOR';

NRANG NUME MESERIA SAL DEPTNO


----- ------- -------- -------- ------
7499 ALLEN VANZATOR 1, 600. 00 30
7521 GORE VANZATOR 1, 250. 00 30
7566 JONES MANAGER 2, 975. 00 20
7654 MARTIN VANZATOR 1, 250. 00 30
7698 VIRGIL MANAGER 2, 850. 00 30
7782 COSTEL MANAGER 2, 450. 00 10
7844 TICA VANZATOR 1, 500. 00 30

Daca doriti să selectaţi toţi managerii şi vânzătorii


cu salarii peste 1500$ puteţi întroduce:

SELECT NRANG, NUME, MESERIA, SAL, DEPTNO


FROM ANGAJAT
WHERE SAL >1500
AND (MESERIA = 'MANAGER'
OR MESERIA = 'VANZATOR');

NRANG NUME MESERIA SAL DEPTNO


----- ------ --------- -------- ------
7499 ALLEN VANZATOR 1, 600. 00 30
7566 JONES MANAGER 2, 975. 00 20
7698 VIRGIL MANAGER 2, 850. 00 30
7782 COSTEL MANAGER 2, 450. 00 10

Parantezele specifica ordinea în care operatorii vor fi evaluati. In al doilea exemplu


operatorul OR este evaluat înaintea operatorului AND.

TIPURI DE DATE CARACTER ŞI CONDIŢII

Tipurile de date caracter şi condiţii

Tipurile de baza ale datelor stocate într-o tabela oracle sunt:caracter, valoare numerica
sau dată calendaristica. Vom discuta toate variantele în detaliu mai tarziu. De cate ori
rezultatele unei condiţii implica date de tip caracter, acestea pot varia în funcţie de
tipul coloanei;ORACLE înzestreaza coloanela cu tipul CHAR pentru valori de
lungime fixa şi cu tipul VARCHAR2 pentru valori de lungime variabila.

Pentru coloanele cu tipul VARCHAR2, Oracle nu umple şirul de comparare şi de


aceea va face o potrivire exacta. In primul exemplu, doar un singur rând este intors
pentru conditia:

WHERE NUME = 'STEFAN'

56
când un alt rând stocat în coloana NUME are mai multe caractere decat şirul de
comparat.

Pentru coloanele cu tipul CHAR, oricum, Oracle face umplere când valorile
coloanelor sunt iniţial stocate, facându-le pe toate de aceeaşi lungime.

Aceeaşi condiţie va întoarce ambele rânduri pentru STEFAN, indiferent de cate spaţii
de sfârsit au fost adaugate când valorile au fost stocate în tabela.

Oracle umple cu blancuri şirul de comparat în cel de al doilea caz şi de aceea spaţiile
stocate sunt nesemnificative.

Precedenta operatorilor

Toţi operatorii sunt aranjaţi într-o ierarhie ceea ce le determina precedenta . Intr-o
expresie operaţiile sunt executate în ordinea precedentei lor de la mare la mica.

când operatorii au precedenta egala atunci ei se evalueaza de la stanga la dreapta.

1. Toţi operatorii de comparaţie şi SQL au precedenta egala: =, !=, <, >, <=, >=,
BETWEEN. . . AND, IN, LIKE, IS NULL.
2. NOT(pentru a inversa rezultatul unei expresii logice. De ex: WHERE
not(sal>2000))
3. AND
4. OR.

De fiecare dată când sunteţi în dubiu despre care dintre doua operaţii vor fi executate
mai întai când o expresie este evaluata, sunteţi liberi să utilizaţi parantezele pentru a
clarifica semnificatia dorita şi pentru a va asigura ca SQL*Plus face ceea ce doriti.

Să presupunem ca doriti să gasiti toţi managerii, din orice departament, si toţi


funcţionarii din departamentul 10:

SELECT *
FROM ANGAJAT
WHERE MESERIA='MANAGER' OR (MESERIA = 'FUNCTIONAR' AND
DEPTNO = 10);

Parantezele de deasupra sunt necesare, AND are o precedenta mai mare decat OR, dar
ele clarifica semnificatia expresiei.

SELECT-Sumar
Urmatoarele clauze sunt închise în comanda SELECT:

SELECT [DISTINCT] [*, coloana alias], . . . ]

57
FROM tabela
WHERE condiţie(ii)
ORDER BY [coloana, expr] [ASC/DESC];

SELECT
selecteaza cel putin o coloana
Alias
poate fi folosit pentru coloanele din lista selectata
*
desemneza toate coloanele
DISTINCT
poate fi utilizat pentru eliminarea duplicatelor
FROM Tabela
desemneaza tabela din care provin coloanele
WHERE
restricţioneaza cererea la rândurile care îndeplinesc o condiţie. Poate conţine
valori de coloane, expresii şi literali
AND/OR
poate fi utilizat într-o clauza WHERE pentru a construi condiţii mai complexe.
AND are prioritate peste OR.
()
pot fi utilizate pentru a forta prioritatea
ORDER BY
întotdeauna apare la sfarsit . Specifica ordinea de sortare. Una sau mai multe
coloane pot fi specificate aici.
ASC
ordinea ascendenta este ordinea de sortarĺ ( implicita) şi nu trebuie specificat.
DESC
inverseaza ordinea de sortare de default şi trebuie specificat după un nume de
coloana.

Clauzele pot fi introduse pe linii separate în buffer şi tabelarea este utilizată pentru
claritate şi în editare.

58
PARTEA V

5. PROGRAMAREA ORIENTATA OBIECT


Incepand cu versiunile de Visual orientarea obiect a sistemului FoxPro este
majora.Aspecte de programare orientata obiect pot fi utilizate pe parcursul intregului proces
de dezvoltare a unei aplicatii cu baze de date sub Visual FoxPro.Apar astfel de aspecte atat
la analiza si proiectate,cat si la programarea si testarea aplicatiilor.
Visual FoxPro ofera o programare hibrida:structura si orientata obiect.In acest fel el se
situeaza in categoria SGBDR extins cu facilitati din tehnologia orientata obiect.Sensul a fost
de integrare in FoxPro a facilitatilor de tratare a obiectelor.
Programarea structurata si modulara presupune dezvoltarea de programe bazate pe
cele trei structuri fundamentale(secventiala,alternativa,repetitiva) si pe module.Aceste tehnici
de programare au contribuit,alaturi de altele,la cresterea productivitati de codificare si a
calitatii programelor.Exista insa si o serie de limite pentru aceste tehnici:ciclul de dezvoltare al
programelor este prea lung,reutilizarea codului este la nivel scazut,datele sunt tratate separat
de instructiuni.
Rezultatul activitatii de programare procedurala(aplicand tehnicile aferente) sunt
programele compuse din doua parti:descrierea structurilor de date(prin instructiuni
neexecutabile) si implementarea algoritmilor(prin instructiuni executabile).Din acest
motiv,programarea procedurala se mai numeste si algoritmica.De asemenea,instructiunile
executabile se grupeaza in procedurile/module,de unde denumirea de programare
procedurala.
Diferitele module de program,care rezulta,sunt combinate pentru a se obtine
aplicatia.Daca aplicatia se implementeaza pentru o alta firma codul sursei este copiat si
adaptat(modificat)conform cerintelor noilor utilizatori.Acest lucru inseamna un efort
suplimentar din partea proiectantului.
Programarea orientata obiect presupune dezvoltarea de aplicatii intr-o abordare total
diferita.Programele nu mai sunt create prin module ci prin obiecte(entitati).Aceste sunt
componente care se realizeaza si care, luate impreuna,alcatuiesc aplicatia.
Obiectul este un ansamblu care incorporeaza datele(descrise prin proprietati)
impreuna cu operatiile efectuate asupra datelor(descrise prin metode)care dau
comportamentul obiectului.Un program va fi compus dintr-o secventa liniara de definiri si
apeluri de obiecte. Daca o aplicatie este implementata pentru alti utilizatori,diferentele care
pot aparea se rezolva prin realizarea de noi obiecte,care se adauga la cele existente deja(cu
ajutorul subclaselor).Atributele obiectelor initiale se transmit automat(prin mostenire) noilor
obiecte.
CONCEPTE DIN ABORDAREA ORIENTATA OBIECT IN VFP
Tehnologia orientata obiect a introdus o serie de concepte care se folosesc atat in modelul
orientata obiect cat si in programarea orientata obiect.Prezentam o parte din aceste concepte
si anume cele utilizate in Visual FoxPro.
Obiectul este un ansamblu de informatie si actiuni.Obiectele sunt entitati din lumea
reala care inglobeaza in ele stari (date) si comportamente(functiuni).Reprezentarea entitatilor
se realizeaza printr-un ansamblu de proprietati comune (colectii de proprietati)
Proprietatile sunt datele dintr-un obiect.In termenul Visual FoxPro proprietatea este
o variabila de memorie care se ataseaza unui obiect.Acesta poate fi referita sau modificata
prin calificarea,utilizand numele obiectului urmat de caracterul punct si apoi numele
proprietatii.Proprietatea poate avea oricare dintre tipurile de date acceptate de Visual FoxPro.
Metodele sunt procedurile atasate unui obiect.Unui obiect i se ataseaza,pe langa
date ,si actiuni,care sunt codificate in proceduri.Fata de procedurile obisnuite(tip procedura
sau tip functie) exista o mica diferenta in ceea ce priveste apelul unei metode.Pentru aceasta
se utilizeaza numele obiectului,urmat de caracterul punct si apoi numele metodei(calificarea).
Evenimentele sunt situatii(lucruri) care se produc la momentul executiei(exemplul
clic pe mouse).Evenimentele pot fi cauzate de actiunea utilizatorului(apasarea unui buton)
sau a sistemului (producerea unei erori).Cand se creeaza o clasa (de exemplu tip radio
buton) in Visual FoxPro se poate atasa si codul evenimentului (de exemplu metodele
aferente).Atunci cand se produce evenimentul (de exemplu clic stanga cu mouse-ul pe

59
obiect),metoda asociata este automat apelata.
Utilizarea evenimentelor nu este noua in Visual FoxPro, ci ea se regaseste inca din FoxPro
2.0.(exemplu clauza VALID ataseaza o procedura simpla unui eveniment).
In Vizual FoxPro se pot atasa metodele la toate tipurile de evenimente. Se poate atasa cod
unui eveniment care se executa automat atunci cand obiectul este creat (INIT EVENT)
si/sau este sters(DESTROY EVENT).Apelul unui eveniment se face intr-un mod similar cu al
unei metode.
Clasa descrie comportamentul unui set de obiecte.Dintr-o clasa fac parte toate
obiectele ce au comportament comun si ea cuprinde una sau mai multe metode de descriere.
Printr-o clasa se descrie:natura datelor.metodele aferente,initializarea obiectelor,pozitia clasei
intr-o eventuala ierarhie de clase.
In Visual FoxPro,si,in general,in programarea orientata obiect,obiectele nu sunt niciodata
codificate,in schimb clasele sunt.Toate obiectele sunt instatiate din clasa din care fac
parte.Se fac astfel dinstinctie intre obiecte si clase.
Instatierea unui obiect este o realizare a unei clase data de valorile variabilei
aferente.Ea se realizeaza in Visual FoxPro prin functia CREATEOBJECT().In urma acestui
program se ataseaza o variabila de memorie de tip "Object" obiectului instantat,care provine
dintr-o anumita clasa.
NOTA
Pentru a se face referire la proprietatilor obiectelor sau la metodele in ele insele se foloseste
ca indentificator pentru numele de obiect,cuvantul cheie THIS.
Mostenirea(succesiunea) este caracteristica unei clase de obiecte pentru a deriva
datele si functile sale din alta clasa.Cel mai adesea clasele de obiecte nu sunt
independente,ci ele se gasesc dispuse in ierarhie.In Visual FoxPro clasa care mosteneste se
numeste superclasa.
Pentru a referi un membru dintr-o ierarhie de clase se foloseste calificarea cu ajutorul

caracterului . .
De exemplu daca avem obiectul "mForm" pe nivelul cel mai de sus al ierarhiei si
obiectul"mTextBox" pe nivelul cel mai de jos atunci referirea va fi:
mForm.mPageFrame.mContainer.mTextBox.
Protectia metodelor si proprietatilor claselor este asigurata prin faptul ca acestea nu
pot fi accesate din afara clasei,daca nu se specifica acest lucru.La definirea unei clase se
decide de catre programator,care este interfata publica(partea accesibila tuturor) si care sunt
metodele si proprietatile care vor fi utilizate numai in interiorul clasei (partea privata).In Visual
FoxPro acest lucru se realizeaza ,atat prin proprietati cat si prin metode,prin cuvantul cheie
PROTECT.
Polimorfismul este caracteristica unei clase de obiecte prin care se pot da
metodelor si proprietatilor din diferite clase acelas nume,daca ele se refera la situati
diferite.Polimorfismul se utilizeaza intens in realizarea claselor de obiecte.Se poate utiliza,de
exemplu, pentru o standardizare a numelor metodelor pentru situatii similare.Efectul va fi ca
la acelas mesaj,diferite obiecte por furniza raspunsuri diferite.
Mesajul este o cerere de regasire care se transmite spre un obiect pentru a executa
o anumita metoda,obtinandu-se un raspuns.Mesajul este modul de comunicare intre
obiecte.In Visual FoxPro transmiterea de mesaje are loc la crearea unui obiect,la citirea valori
unei proprietati ,la apelul unei metode.
Incapsularea este caracteristica care se refera la faptul ca obiectul este o unitate de
sine statatoare .Obiectul,ca instantierea a unei clase contine date sub forma de proprietati de
date si metode.
Alaturi de polimorfism si mostenire incapsularea reprezinta caracteristicile de baza ale
obiectelor.Acestea sunt date de tehnologia orientata obiect si sunt implementate in Visual
FoxPro.
Realizarea programelor dupa tehnologia orientata obiect presupune ca pas final
scrierea obiectelor intr-un limbaj de programare.Inainte de acest pas trebuie realizate analiza
si proiectarea orintate obiect.Pentru aceste activitati au fost utilizate diferite metodologii In
realizarea unei aplicatii cu baze de date, in jur de 70%din timp este alocat,de catre
analist,pentru activitatile de analiza si proiectare.In cazul utilizari tehnologiei orientate
obiect,principalul rezultat al analizei si proiectarii aplicatiei este identificarea si ierarhizarea
claselor de obiecte precum si stabilirea proprietatilor si metodelor.

60
Odata stabilite aceste lucruri,urmeaza, in Visual FoxPro ,descrierea si manipularea claselor
de obiecte.Deoarece Visual FoxPro ramane fundamental,un SGBDR care a fost extins cu
facilitati de tratare a obiectelor,prezentam in continuare o comparatie intre principalele notiuni
din cele doua tehnologii integrate pentru baze de date:relational si orientat obiect.

Orientat
obiect
ierarhia de Clasa de
Obiecte
Obiect Proprietati Identificator

clase

Relational
-schema Tabela de
Date
Tuplu Atribute Cheie

Programarea orientata obiect in Visual FoxPro


Pentru implementarea conceptelor din tehnologia orientata obiect prezentate mai sus.Visual
FoxPro dispune de o serie de comenzi si functii.
Crearea claselor.Aspecte obiect si vizuale Pentru a crea clase de obiect in Visual FoxPro
se poate folosi in componenta Class Designer(CREATECLASS) fie comanda
specifica(DEFINE CLASS).
a)Crearea claselor prin comanda specifica
Comanda DEFINE CLASS
Permiteprogramatorului sa-si defineasca si descrie propriile clase de obiecte.Pentru acest
lucru se realizeaza o structura de program cuprinsa intre DEFINE si ENDDEFINE,unde se
definesc proprietatile,evenimentele si metodele clasei.
Pentru a crea un obiect dintr-o clasa astfel definita se va folosi functia CREATEOBJECT () cu
numele clasei respective. Prin definitie orice clasa creata in Visual FoxPro este o subclasa a
unei alte clase,numita clasa parinte(superclasa).La cel mai inalt nivel,clasele create in Visual
FoxPro sunt subclase ale asa numitelor clase de baze oferite in sistem.Sintaxa comenzi este:
DEFINE CLASS NumeClasa1 AS ClasaParinte
[[PROTECTED NumeProprietate 1,...]
NumeProprietate=eExpresie...]
[ADD OBJECT[ PROTECTED] NumeObiect As NumeClasa 2
[NOINIT] [WITH cListaProprietati]]..
[[PROTECTED] FUNCTION/procedure
Nume[NODEFAULT]
clnstructiuni
[endfunc/endproc]]...
ENDDEFINE
Argumentele comenzii au semnificatia:
Nume clasa1-specifica numele clasei ce va fi creata
As ClasaParinte-specifica superclasa pe care se bazeaza clasa ce se creaza.Clasa parinte
poate fi:una din clasele de baza din Visual FoxPro,o clasa Form,sau orice alta clasa definita
de utilizator.
Clasele de baza din VisuL FoxPro sunt prezentate in continuare.
Numele clasei Descriere
de baza
-------------- ---------------------------------------------------------------
ActiveDoc -Obiect tip Active Document suportat de Internet Explorer
CheckBox -Conturul standard,comutator,similar cu cel din FoxPro 2.x
Clumn -O coloana din grila de control
ComboBox -Arie rectangulara(lista derulanta) similara cu popup din FoxPro
2.x
Command Button -Echivalentul obiectului"push" din FoxPro 2.x

61
Command group -Unui grup de butoane care actioneaza impreuna
Coantainer -Un obiect generic proiectet pentru a pastra alte obiecte
Control -Analog cu container dar:in clasa container se pot accesa toate
obiectele,in timp ce clasa control ascunde obiectele,iar comunicatia se face la nivelul clasei
Cursor -defineste un cursor in mediul de date creat dintr-o tabela sau viziune
Custom -Clasa care nu este vizuala dar care contine obiecte vizuale
Data Environment-colectie de cursoare si relatii(mediul de date)
EditBox -echivalentul din FoxPro 2.6. pentru "edit region"(zona de editare a
textului)
Form - un singur ecran ce poate contine alte obiecte
FormSet -obiect tip container ce contine una sau mai multe forme
Grid -obiect tip container ce permite editarea si afisarea afirmatilor in
tip"browse"(grila)
Header -capatul coloanei grilei
Hyperlink -obiect Hiperlink pentru navigarea cu Internet Explorer
Image -o imagine
Label -echivalentul plasari unui text pe ecran
Line -trasarea unei linii
ListBox -echivalentul defilarii listei de control din FoxPro 2.x
OleControl - control bazat pe un obiect OLE2
OptionButton - un singur obiect tip radio buton
OptionGroup -mai multe radio butoane ce opereaza la un singur control
Page -o singura pagina dintr-o pagina frame
PageFrame -controlul tab-ului de tip container
Relation -definirea unei legaturi intre doua cursoare
Spinner -zona de editare cu butoane de incrementare
TextBox -Zona de editare text(echivalentul lui''plainGET control'' din FoxPro 2.x)
Timer - Obiect Visual de tip ceas care nu afisaza o forma
ToolBar - Este un grup de obiecte plasate pe o bara de instrumente pe ecran
Clasele de baza de mai sus pot fi grupate in doua mari categorii:
Clasele vizuale sunt proiectate pentru folosirea display-ului. Ele se folosesc pentru
construirea interfetelor utilizator.Aceasta categorie se poate imparti in subcategorii: control
simplu, control combinat,containere,forme,bare de instrumente.
Controlul simplu contine clasele de baza utilizate pentru controlul unei forme (ex.
CommandButton, TextBox, Label).
Controlul combinat are rolul de a combina mai multe controale pentru a fi operate ca unul
(exemplu Control).
Container este o sub categorie de clase de baza pentru care controlul este vizibil din afara
(ex. Container, Formset, Grid, PageFrame).
Forma contine clasele de baza utilizate pentru descrierea unui ecran (exemplu Form).
Bara de instrumente este, de fapt, un tip special de forma.Pe o bara de pe ecran,
careia i se vor indica coordonatele, vor fi plasate butoane si alte obiecte (exemplu Toolbar).
Toate aceste subcategurii de clase de baza vizuale permit realizarea usoara a interfetei de
lucru cu display-ul pentru utilizator (GUI-Graphical User Interface).Dar, pe langa acestea,
Visual FoxPro suporta si o alta categorie de clase de baza si nume cele nonvizuale.
Clasele nonvizuale nu fac descrieri primare pentru a fi afisate pe display, deci ele
nu sunt vizibile pe ecran.In Visual FoxPro clasele nonvizuale sunt descendente tipice din
clasele de baza Custom sau Timer si nu au componente atasate pentru a fi afisat. Totusi,
unele clase nonvizuale pot avea componente vizuale atasate. Cu alte cuvinte, se poate
afirma, caci clasele vizuale pot fi baza pentru clasele nonvizuale.
Diferenta esentiala dintre cele doua categorii de clase de baza este urmatoarea:
clasele vizuale se folosesc pentru interfata utilizator, in timp ce clasele nonvizuale se folosesc
pentru dezvoltarea sistemelor in sensul realizari functiilor sale.
Exemple de clase de baza nonvizuale sunt:ActiveDoc, Custom, Timer, Project Hook, Form
Set, PageFrame.Clasele nonvizuale, dupa functiunile pe care le indeplinesc, sunt de trei
tipuri:de acoperire,de administrare,de afaceri.
Clasele de acoperire (wrapper classer) au in vedere interfata dintre un program si
altul(de exemplu, intre programul Visual FoxPro si functiile din biblioteci).Aceste clase au rolul
de a face usoara utilizarea functiilor din biblioteci, de a le spori posibilitatilesi de a incapsula

62
definirea, incarcarea si tratarea erorilor, conform cerintelor rezultate din utilizarea bibliotecii
de functii.
Clasele de administrare (manager classes) au rolul de a gestiona alte clase (de
exemplu clase care manuiesc instante de forme).
Clasele de afaceri (business classes) descrie un model de entitate din lumea
afacerilor (exemplu clasa Customer). Aceste clase sunt o combinatie de imformatii si actiuni
care rezulta din contextul problemei de rezolvat. Pentru a se putea construi asfelde clase este
necesar sa se realizeze mai intai analiza si proiectarea splicatiei. Facilitatile clasei de
afaceri pot fi foarte abstracte in natura dar cer o modelare inainte de implementare.Astfel de
facilitati sunt:regasirea din baza de date, afisarea rezultatelor, salvarea. Clasele de afaceri pot
avea componente vizuale si se pot baza pe o clasa vizuala (de exemplu, pe clasa Form).
In concluzie, putem spune ca cele doua mari activitati desfasurate intr-un program de
aplicati,interfata utilizator si prelucrarile,au corespondent in cele doua categorii de clase de
baza,vizuale si respectiv nonvizuale.
Importanta interfatei utilizator,in contexul informatic actual,este bine cunoscuta.Se
stie ca peste jumatate din codul programelor de aplicatie este destinat intefetei
utilizator.Acesta este,de fapt, unul din motivele importante pentru care au aparut produsele
Visual,inclusiv dezvoltarea FoxPro in versiune Visual.
PROTECTED [ NumeProprietate1,...] NumeProprietate=eExpresie
Acest argument defineste proprietatile clasei care se creeaza si le atribuie valori
conform expresiei specificate.Proprietatile sunt nume de atribute ale clasei si definesc
caracteristicile clasei.O parte dintre aceste caracteristici pot fi protejate ,in sensul ca ele pot fi
referite din afara clasei..O proprietate poate fi referita in afara clasei dupa ce s-a creat
obiectul aferent clasei.Referirea se face prin calificare:NumeObiect.NumeProprietate
ADD OBJECT
Adauga un obiect la o clasa definita dintr-o clasa de baza din Visual FoxPro,dintr-o clasa
utilizator sau dintr-un control OLE.
PROTECTED
Interzice accessul la proprietatile obiectului din afara clasei definite.
NumeObiect
Specifica numele obiectului si el este folosit pentru a referi obiectul din clasa definita(dupa ce
obiectul va fi creat)
As NumeClasa2
Specifica numele clasei care contine obiectul care se adauga la clasa care se defineste.
NOINIT
Specifica faptul ca metoda init a obiectului nu se executa cand obiectul este adaugat.
WITH cListaPropriatati
Specifica o lista de proprietati si valori pentru obiectul care se adauga la clasa ce se
defineste.

PROTECTED] FUNCTION/PROCEDURE Nume[NODEFAULT]


clnstructiuni
ENDFUNCT/ENDPROC..]

Creaza evenimente si metode, ca un set de functii sau proceduri,pentru care se defineste.


Se poate crea un eveniment functie sau procedura in interiorul definitiei de clasa ca raspuns
la un alt eveniment.Evenimentul este o actiunea cum ar fi clicul de mouse care este
recunoscut de un obiect creat cu clasa definita.Evenimentele sunt create prin
calificare:NumeObiect.Eveniment
Analog se pot crea si apela metode functie sau procedura.
Functia CREATEOBJECT
Permite crearea unui obiect apartinand unei anumite clase.
Sintaxa functiei este:
CREATEOBJECT( NumeClasa[,Param1][,Param2]...]
Argumentele:
NumeClasa-specifica numele clasei sau obiectului OLE pentru care se va crea un
obiect.Clasa a fost creata anterior prin DEFINE CLASS.Obiectul OLE a fost creat anterior
dintr-o aplicatie si el este referit indicand aplicatia siu tipul( de exemplu x=CREATE OBJECT
(EXCEL.SHEET")).

63
Param i-specifica parametri care permit transmiterea de valori spre procedura eveniment
Init a clasei.

b)Crearea claselor prin componemta Class Designer


O modalitate eficienta de a construi usor si rapid clase de obiecte este utilizarea
componentei Visual Class Designer.In acest caz ,utilizatorul nu trebuie sa stie sintaxa pentru
crearea claselor si nici cuvintele cheie care nu intervin in aceasta activitate.Acest
instrumenteste util pentru crearea rapida a claselor complexe de tip vizual.
Doar clasele create cu Visual Class Designer pot fi manipulate cu instrumentul Class
Browser.
Visual Class Designer este un supraset al al componentei Form Designer.Clasele rezultate
sunt stocate de componenta Form Designer in fisier tip SCX ( un SCX poate contine o
singura clasa), iar componenta Visual Class Designer in fisier tip VCX( un VCX poate contine
mai multe clase).
La apelul Visual Class Designer se intra intr-un ecran ce contine
-bara cu instrumente de control
-fereastra cu proprietati
-fereastra (tabloul) vizual
Modul de operare sub Visual Class Designer este asemanator cu cel de sub Form
Designer.Sunt totusi cateva diferente pe care le prezentam:
-In Form Designer obiectul de lucru este o forma care este de tip container,deci poate
contine mai multe obiecte.In Visual Class Design ,in fereastra vizuala poate aparea ,la un
moment dat un singur obiect
-optiunile din meniu sunt specifice pentru forme si ele nu se regasesc in Visual Class
Designer
-la adaugarea de noi metode sau proprietati sunt cateva diferente in ceea ce priveste
protectia
-pentru a adauga o proprietate la o clasa de tip masiv in Visual Class Designer sunt probleme
deoarece nu avem acces la codul de declarare al clasei.
Pentru a se putea lucra cu Visual Class designer se pot folosi comenzile:CREATE
CLASS,CREATE CLASSLIB,MODIFY CLASS.

Comanda CREATE CLASS


Deschide Class Designer si permite crearea unei noi clase ,care se va salva intr-o
biblioteca de clase vizuale de tip VCX.Ulterior ,aceasta biblioteca poate fi deschisa prin
comanda SET CLASSIB permitanduse accesul la definitile de clase pe care le contine.
Sintaxa comenzi este:
CREATE CLASS NumeClasa /?[OF NumeBibliotecaClase1/?]
{AS CNumeClasaBaza [FROM NumeBibliotecaClase 2]]
Argumentele comenzii au semnificatia:
NumeClasa-specifica numele clasei ce va fi creata
?-dechide o fereastra de dialog "New Class" unde se poate specifica numele bibliotecii de
clase vizuale tip.VCX,care exista sau care se va crea.
-As cNumeClasaBaza specifica clasa de baza din Visual FoxPro pe care se bazeaza clasa
nou creata.Nu pot fi specificate urmatoarele clase de
baza:Coulmn,Cursor,Header,DataEnviroment,Page si Relation.
From NumeBibliotecaClase2 specifica numele biblioteci.VCX care contine clasa utilizator
specificata ca baza prin AS cNumeClasaBaza.
Pe ecran apare fereastara de dialog Class Designer impreuna cu fereastra de
proprietati si cu fereastra de controale pentru forme.De fapt,interfata class Designer este
superset sl interfetei Form Designer.Din acest motiv ,modul de lucru in continuare este
similar.
Daca se tasteaza doar numele comenzii,fara alte argumente,atunci pe ecran apare
mai intai o fereastra de dialog New Class .Aici se precizeaza argumentele dorite si apoi se
selecteaza butonul ok.
Comanda CREATE CLASSLIB
Creeaza o noua biblioteca de clase vizuale intr-un fisier tip.VCX. Definitiile de clase pot fi
adaugate la ei astfel de biblioteca prin comenzile:CREATE CLASS si ADD CLASS.
Sintaxa comenzi este:

64
CREATE CLASSLIB NumeBibliotecaClase
Argumentele au semnificatia:
-NumeBiblotecaClase-specifica numele bibliotecii de clase vizuale ce va fi creata.Daca
exista dejas o astfel de biblioteca cu acelasi nume(intr-un fisier.VCX)si exista executata
comanda SET SAFETY ON,sistemul cere confirmarea pentru suprascriere.
Daca este executata comanda SET SAFETY OFF suprascrierea este fisierul existent se
realizeaza automat.
Extensia pentru fisierul care se creeza pentru biblioteca de clase este.VCX,ar se poate
specifica alta in mod explicit.

ACTUALIZAREA CLASELOR SI OBIECTELOR

Clasele de obiecte stocate eventual in biblioteci de clase,precum si obiectele


instantiate din aceste clase,pot fi manipulate prin comenzi precum:MODIFY CLASS,SET
CLASSLIB,ADD OBJECT,ADD CLASS,REMOVE CLASS.
MODIFY CLASS NumeClasa[OF NumeBiblioteca][AS ClasaBaza[FROM Biblioteca]]
[NOWAIT][SAVE]
Argumentele:
NumeClasa Specifica numele clasei de obiecte care va fi actualizata
OF NumeBiblioteca specifica numele bibliotecii(fisier tip.VCX), din care face parte clasa de
obiecte care trebuie actualizata.
AS ClasaBaza specifica numele clasei de baza VFP(cu exceptia
Column,Cursor,DateEnvironment,Header,Page,Relation) de tipul caruia este clasa de
actualizat.Clasa de baza VFP se poate afla intr-o biblioteca precizata prin FROM Biblioteca.
NOWAIT executia unui program din care s-a apelat CLASS DESIGNER se continua imediat
dupa ce acesta a fost activat(fereastra deaschisa).
SAVE-Daca se omite aceasta clauza,atunci CLASS DESIGNER este inchis atunci cand o alta
fereastra este activata.
Pe ecran apare fereastra de dialog Class Designer si se continua similar ca pentru
actualizarea unei forme.
SET CLASSLIB TO NumeBiblioteca[ADDITIVE]
Argumente:
NumeBiblioteca specifica numele fisierului tip VCX in care se afla biblioteca de clase care va
fi activata(deschisa)
ADDITIVE specifica faptul ca in biblioteca de clase care se activeaza sunt permise adaugari
de noi clase.

NOTA
Pentru inchiderea unei anumite biblioteci de clase de obiect se foloseste comanda
RELEASE CLASSLIB.Pentru a inchide toate bibliotecile de clase se foloseste simplu
comanda SET CLASSLIB TO,fara nici un argument.
ADD OBJECT NumeObiect AS TipClasa WITH par
Argumente:
NumeObiect specifica numele obiectului care se adauga ca membru intr-o clasa compozita
TipClasa specifica tipul de clasa din care deriva clasa curenta
WITH permite setarea unor proprietati ale clasei.
ADD CLASS NumeClasa [OF Biblioteca] to Biblioteca2 [OVER WRITE]
Argumente:
NumeClasa -specifica numele clasei,eventual dintr-o biblioteca(OF),care va fi adaugata intr-o
biblioteca.Daca lipseste clauza OF atunci este necesara in prealabil o comanda SET
CLASSLIB.
Biblioteca2 specifica numele biblioteci(fisier,tip.VCX) in care se adauga clasa specificata.
REMOVE CLASS NumeClasa OF Biblioteca-sterge logic o clasa dintr-o biblioeca de clasa (
fisier,tip.VCX).
De remarcat faptul ca operatia de stergere este periculoasa in momentul in care
clasa stearsa face parte dintr-o ierarhie.In aceasta situatie,vor fi invalidate toate clasele

65
situate"in jos" in ierarhie fata de clasa stearsa.Daca totusi s-a facut o astfel de stergere
accidentala atunci se poate deschide fisierul tip VCX.Ca tabela (prin comanda USE) si
utilizand comanda RECALL se refac inregistrarile sterse.
Gestiunea claselor si obiectelor
Sistemul VFP ofera mai multe posibilitati pentru gestiunea si intretinerea claselor si
obiectelor:functii,metode,comenzi,instrumente.
FUNCTII
AISTANCE (Var_de_instanta,Nume Clasa)
Furnizeaza numarul de instante gasite pentru clasa specificata.Functia are drept
parametru un nume de vector ce va contine lista variabilelor de instanta obtinute din clasa
specificata.
CLASS (listaclase,instanta)
Functioneaza numarul de clase care preced o instanta de clasa,intr-o ierarhie de
clase.Functia are drept parametru un vector ce contine lista claselor ce precede instantierea
curenta .
AMENBERS (listap, var instanta)
Functioneaza numarul membrilor dintr-o instanta. Functia are drepentru parametru un
nume de vector ce va contine lista cu proprietatile instantei.
METODE
INIT
Intoarce valoarea logica.T. Daca instantierea (crearea) obiectului specificat s-a facut
cu succes.
BUILDLIST
Este utilizata pentru construirea continutului unei ferestre tip lista (list box) bazata pe
un cursor. Metoda se utilizeaza in legatura cu alte doua:CLEAR (sterge fereastra tip lista)si
ADDITEM(adauga elemente la lista).
RESIZE
Este utilizata pentru redimensionarea unei forme, avandu-se astfel un control asupra
ajustarii ei.
ADDOBJECT
Adauga un obiect al o clasa tip container la momentul executiei. Pentru operatia de
stergere se foloseste metoda REMOVEOBJECT .O alta modalitate de adaugare a obiectelor
la o clasa este comanda ADD OBJECT,intre ele fiind cateva diferente.
ERROR
Este apelata in momentul stergerii unui obiect.
SHOW
Vizualizaza un obiect pe ecran.

COMENZI
RENAME CLASS Clasav OF Biblioteca TO Clasan
Schimba numele unei clase dintr-o biblioteca din vechi(Clasav) in nou (Clasan).De
remarcat ca prin schimbarea numelui unei clase toate subclasele care ii sunt subordonate
trebuie redefinite.
INSTRUMENTE
CLASS BROWSER
Este un instrument VFP (scris in totalitate in VFP) care permite gestionarea claselor
de obiecte.El este livrat in versiunea de Professional Edition
Cu acest instrument,pot fi gestionate atat clasele (din fisiere tip,VCX) cat si
formele(din fisierele tip.SCX), deoarece cele doua tipuri de fisiere corespunzatoare au
structura identica.La apelul lui Class Browser apare o fereastra principala care contine:
-o bara cu butoane pentru gestionarea claselor:deschidere,vizualizare,cautare,creare
de noi clase,redenumire,redefinire,stergere,autodocumentere;
-mai multe ferestre tip lista care se activeza la selectarea anumitor butone.
Apelul instrumentului Class Browser se face fie din meniul sistem(Tools/Class Browser) fie
prin variabila de sistem "_browser"(DO (_browser)).
Class Browser suporta obiecte membre,metode,proprietati.

66
PARTEA VI - APLICATII DE LABORATOR
COLEGIUL NATIONAL “TUDOR VLADIMIRESCU” Clasa:XII-B
Filiera :Teoretica Profesor Bogdan C-tin
Specializare: Matematica-Informatica

PLAN DE LECŢIE

Titlul lectiei: Obiecte de control


Unitatea de invatare:Programare
Tipul lectiei:Lectie de fixare
Mediul de instruire:Laboratorul de informatica

Obiective operationale:
La sfarsitul lectiei elevii vor cunoaste:
1.Reprezentarea obiectelor de control prin programare
2.Modul de executie instructiunilor specifice obiectelor de control prin programere pe obiecte
La sfarsitul lectiei elevii vor sti sa:
3.Rezolve probleme utilizand obiecte de control

67
OBIECTE DE CONTROL
Cream tabela xiic.dbf cu structura:

Field Field Name Type


Width Dec Index Collate Nulls
1 NUME Character
13 No
2 NOTA Numeric
10 No
3 NOTA1 Numeric
10 No
4 MEDIA Numeric
10 2 No
5 STUDII Character
10 No
6 PROFESIA Character
10 No
7 SEX Logical
1
TIPURI:
1.Grupul de butoane de opţiune/radio (Option Command Group)
Sunt obiecte container ce conţin butoane radio. Butoanele radio nu apar decât în grup, un singur
buton nu are sens. Scopul unui grup de butoane radio este de a oferi un set de opţiuni din care
utilizatorul trebuie să selecteze unul. Un grup de butoane radio are întotdeauna un buton selectat.
Butoanele radio pot fi folosite de exemplu, pentru a specifica ieşirea la un fişier, imprimantă sau
print preview.
Exemplu:
2. Butonul de comandă (Command Button)
Un buton de comandă are aspectul unui dreptunghi tridimensional cu un text în interior. Cele mai
multe utilizări ale butoanelor de comandă sunt: pentru parcurgerea unei tabele (deplasarea pointerului
de înregistrări la începutul tabelei, la înregistrarea anterioară, la cea următoare respectiv la sfârşitul
tabelei), închiderea unui videoformat, deschiderea unui videoformat, salvarea unor date, lansarea în
execuţie a unui raport/cerere.
Tabelul 1. Proprietăţi ale butonului de comandă
Caption eticheta butonului
Disabled Picture fişierul (.bmp.) afişat când butonul e dezactivat
Down Picture fişierul (.bmp.) afişat când butonul e selectat
Enabled butonul poate fi selectat dacă enebled = .T.
Picture fişierul (.bmp.) ataşat butonului

Prin selectarea unui buton de comandă (clic cu mouse-ul) se execută o acţiune.

68
Exemplu:

sursa este:
use banca1 tx.controlsource='banca1.nume'
appe blank
fer=createobject('form1') add object cow as commandbutton
fer.show cow.top=150
read events cow.left=260
cow.autosize=.t.
defi class form1 as form cow.caption='cautare'
backcolor=rgb(0,255,100)
forecolor=rgb(0,250,20) procedure cow.click
caption='dati datele' go top
locate all for ( banca1.nume=fer.tx.value)
add object la as label if found() then
la.top=5 =messagebox('S-a gasit')
la.left=5 delete all for ( banca1.nume=fer.tx.value)
la.autosize=.t. browse
la.caption='nume' else
=messagebox('Nu exista')
add object tx as textbox endif
tx.top=5 pack
tx.left=50 thisform.refresh
tx.autosize=.t. endproc
tx.name='tx' enddefine
3. Caseta de validare (check box)
Se pot folosi casetele de validare pentru a permite unui utilizator să specifice valori logice: True/False,
On/Off, Open/Close.
4. Eticheta (label)
Afişarea informaţiei se poate face folosind următoarele obiecte control: etichete, imagini, caseta
text, caseta de editare.
Etichetele sunt texte adăugate unui videoformat pentru identificarea câmpurilor sau pentru afişarea
unor informaţii destinate utilizatorului. O etichetă poate avea o singură linie sau mai multe linii
(proprietatea Wordwrap e setată cu valoarea .T.). Majoritatea obiectelor au proprietatea Visible. Dacă
această proprietate e setată cu valoarea (.F.) atunci obiectul nu se va afişa la execuţia videoformatului
(obiectul există dar nu este vizibil ). Tabelul 2. Proprietăţi ale etichetelor
Caption textul afişat în etichetă
Autosize dacă dimensiunea etichetei e ajustată la lungimea dată de
proprietatea Caption
BackStyle dacă eticheta e opacă sau transparentă
Wordwrap dacă textul afişat în etichetă poate fi scris pe mai multe linii

5. Caseta de text (text box)


Deosebirea fundamentală între o etichetă şi o casetă de text constă în sursa de date a celor două
obiecte. Sursa de date a unei casete text este de obicei un câmp al unei tabele, dar poate fi şi o variabilă
de memorie. Atât casetele text cât şi casetele de editare afişează şiruri de caractere. Casetele text au
proprietatea Enable. Când valoarea acestei proprietăţi este (.T.), utilizatorul poate accesa obiectul. Un
câmp dezactivat poate fi afişat diferit de un câmp activat, folosind culori diferite pentru fundal
(proprietatea DisableBackColor).
Tabelul 3. Proprietăţile casetei text
Century specifică dacă secolul e afişat cu 4 cifre sau 2 cifre
Date format schimbă formatul de date (american, german)

69
StrictDateEntry setarea (0-loose) permite unui utilizator să introducă date în
formate mai flexibile decât formatul “99/99/99”
Alte proprietăţi sunt specificate în tabelul 4.
Tabelul 4. Alte proprietăţi ale casetei text.
Alignment dacă conţinutul casetei text e aliniat la stânga, dreapta sau
central sau alinierea se face automat. Alinierea automată depinde
de tipul de dată (numerele sunt aliniate la dreapta şi caracterele la
stânga)
ControlSource câmpul din tabela sau variabila a cărei valoare e afişată în
caseta text
TabStop dacă TabStop are valoarea (.F.) utilizatorul poate selecta caseta
text prin clic cu mouse-ul.

6. Caseta de editare (edit box)


Casetele de editare îmbunătăţesc caracteristicile casetelor texte , permitând utilizatorului să
modifice textul editat. Ele au o bară de defilare verticală care permite utilizatorului să parcurgă texte
lungi mai rapid decât prin derulare linie cu linie. Se poate permite utilizatorului să editeze textul din
câmpurile memo sau longcharacter. Pentru a edita conţinutul unui câmp memo, se setează proprietatea
ControlSource cu valoarea: numetabela . numecâmpmemo.
Caseta de editare şi caseta text au proprietăţi ce permit utilizatorului să lucreze cu textul selectat:
SelLength, SelStart şi SelText. Se poate selecta un text folosind proprietatea SelStart şi SelLenght. Se
poate accesa textul selectat folosind proprietatea SelText.
Alte proprietăţi sunt specificate în tabelul 5.
Tabelul 5. Alte proprietăţi ale casetei de editare
AllowTabs se permit sau nu tab-uri: utilizatorul se poate muta la următorul
obiect de tip control, folosind tastele Ctrl+Tab
ScrollBars se foloseşte sau nu bara de defilare verticală
7.Utilizarea liniilor şi a figurilor geometrice
Poligoanele şi liniile se pot folosi într-un vidoeformat.
7.1. Liniile
Se pot desena linii drepte. Grosimea liniei se stabileşte prin proprietatea BorderWidth (valoarea
reprezintă grosimea liniei în pixeli). Altă proprietate este Border Style. Sunt şapte tipuri de linii, tipul
implicit este linia continuă. O altă proprietate este LineSlant care stbileşte direcţia de înclinare a liniei
(/ ).
7.2. Poligoanele
Se pot crea pătrate, dreptunghiuri, cercuri. Forma de poligon implcită este dreptunghiul. Ovalurile
şi cercurile derivă din dreptunghi, având colţurile din ce în ce mai rotunjite. Poligoanele pot fi umbrite
sau transparente. Un obiect transparent poate avea o culoare asociată, care însă nu va fi afişată.
Pentru cercuri sau ovaluri se foloseşte proprietatea Curvature pentru a controla gradul de rotunjire a
colţurilor dreptunghiului. Un dreptunghi perfect are curbura zero, un oval perfect are o valoare a
curburii de 99.
8. Obiecte control de tip imagine (Image control)
Obiectul control de tip imagine permite adăugarea de imagini (fişiere bitmap) în videoformat.
Utilizatorul poate interacţiona cu imaginile folosind click şi dublu click cu mouse-ul pe ele. Obiectele

70
control de tip imagine constau din imagini bitmap salvate sub forma unor fişiere separate. Se pot folosi
drepentru embleme în videoformat şi rapoarte. În mod implicit, când VFP inserează o imagine într-un
videoformat,dimensiunea acesteia va fi cea a imaginii bitmap originale. Acest lucru ar putea duce la
suprapunerea imaginii peste obiectele existente. Pentru a evita acest lucru se poate modifica modul în
care VFP afişează imaginea folosind proprietatea Stretch ce identifică trei moduri de afişare a imaginii:
0 – clip
1 – isometric
2 – stretch
Dacă se selectează modul (0-clip), VFP taie imaginea când se reduc dimensiunile în raport cu
originalul. Porţiuni din imagine ce par în afara dimensiunilor obiectului control nu sunt afişate. VFP
repoziţionează imaginea în funcţie de colţul din stânga sus al acesteia (proprietatea Left şi Top).
A doua opţiune (1-isometric) menţine proporţia relativă dintre înălţime şi lăţime. Dacă se modifică
zona imaginii micşorând lăţimea se micşorează automat şi înălţimea cu aceeaşi proporţie păstrând în
acest fel proporţiile relative ale obiectului original. Obiectul control afişează din imagine cât îi permit
dimensiunile. Proprietatea BorderStyle stabileşte dacă există o bordură vizibilă pentru imagine.
Opţiunea (2-stretch) modifică modul de afişare a imaginii, astfel încât aceasta se încadrează în noile
dimensiuni ale obiectului. Această opţiune distorsionează dimensiunile relative ale imaginii, însă nu o
taie. Imaginea e ajustată exact la înălţimea şi lăţimea obiectului.
9. Obiectul control de tip spinner/caseta de modificare valorică (spinner control)
În acest caz, trebuie să existe o valoare numerică ca sursă pentru obiectul control de tip spinner.
Săgeţile din dreapta casetei permit utilizatorului să incrementeze sau să decrementeze valoarea afişată.
În mod implicit, pasul de incrementare este (1). Această valoare poate fi înlocuită cu orice altă valoare,
inclusiv cu valori fracţionare. Se poate seta şirul de valori pe care utilizatorul îl poate alege. Se
foloseşte proprietatea KeyboardHigh Value şi SpinnerHigh Value pentru valoarea maximă a şirului
respectiv proprietatea KeyboardLow Value şi SpinnerLow Value pentru valoarea minimă. Utilizatorul
nu poate introduce de la tastatură o valoare situată în afara acestui domeniu şi nu poate folosi săgeţile
casetei pentru a ieşi în afara domeniului. Întrucât casetele de modificare valorică au o limită superioară
şi una inferioară, proprietatea InputMask trebuie definită în concordanţă cu aceste valori, în caz contrar
caseta de modificare valorică va trunchia caracterele care preced valoarea sau o urmează după caz. De
exemplu, dacă se atribuie proprietăţii SpinnerHigh Value valoarea 100 însă se defineşte valoarea
proprietăţii InputMask ca fiind ( # # ) un întreg de 2 cifre), caseta nu va atinge niciodată valoarea 100.
Caseta va afişa (* * ) pentru un scurt interval reluând apoi incrementarea de la 1 la 99.
Exemplu:

71
sursa:
add object ad as commandbutton
use xiic ad.top=150
appe blank ad.left=5
fer=createobject('form1') ad.autosize=.t.
fer.show ad.caption='adauga'
read events procedure ad.click
browse appe blank
defi class form1 as form thisform.refresh
backcolor=rgb(0,255,0) endproc
forecolor=rgb(0,250,123) add object ina as commandbutton
caption='dati datele' ina.top=150
add object l1 as sp ina.left=75
add object la as label ina.autosize=.t.
la.top=5 ina.caption='vizualizare'
la.left=5 procedure ina.click
la.autosize=.t. if not eof() then
la.caption='dati numele unei persoane' brow
endif
add object tx as textbox endproc
tx.top=5 enddefine
tx.left=250
tx.autosize=.t. defi class sp as spinner
tx.name='tx' controlsource='xiic.categoria'
tx.controlsource='xiic.nume' autosize=.t.
TOP=38
add object la1 as label left=250
la1.top=38 visible=.t.
la1.left=15 spinnerhighvalue=10
la1.autosize=.t. spinnerlowvalue=1
la1.caption='categoria calificarii 0- enddefine
fara,1,2,3,4,5,6,7'
10. Caseta combinată (combo box)
O casetă combinată permite atât introducerea unei valori cât şi selectarea unui element dintr-o listă.
Ea este combinaţia între o casetă de text (text box) şi o casetă listă (list box). VFP oferă instrumentul
ComboBoxBuilder care este asemănător cu instrumentul ListBoxBuilder. Sunt două tipuri de casete
combinate: o casetă combinată (Drop down combo) şi o listă (drop down list). Tipul implicit este Drop
down combo. Se poate schimba folosind proprietatea Style.
Pentru a crea o casetă combinată, se parcurg următorii paşi:
1.În fereastra de dialog Form Designer se selectează obiectul control de tip combo box din bara de
instrumente Form Controls.
2.Se alege poziţia dorită în videoformat pentru plasarea obiectului control de tip combo box.
Fereastra de dialog ComboBoxBuilder se va deschide.
3.Se selectează câmpurile care vor apare în casetă folosind opţiunea List Items. Opţiunea Fill the
List With are trei variante: Fields from a table or view (câmpuri dintr-o tabelă/view), Data Entered by
Hand, Values from an Array (valori dintr-o matrice).
4.Se selectează baza de date sau tabela, folosind opţiunea Dabatases/Tables.
5.se selectează câmpurile ce apar în lista Available Fields şi se mută în lista Selected Fields
6.Se alege tipul obiectului (Drop down combo sau Drop down list) folosind opţiunea Style şi modul
de afişare al obiectului (plain/three-dimensional).

72
7.Se foloseşte opţiunea Layout pentru a ajusta dimensiunea coloanelor obiectului. O coloană poate
fi ascunsă prin dublu clic cu mouse-ul pe titlul ei.
8.Se selectează opţiunea Adjust the Width of the List Box to Display All Columns pentru
modificarea lăţimii casetei în scopul afişării tuturor coloanelor.
Alte proprietăţi ale obiectului control de tip combo box:
 Display count = specifică numărul de elemente afişate în listă
 Input mask = specifică tipul de valori (formatul) ce pot fi introduse (pentru Drop down
combo box).
 Row source = specifică sursa de date pentru obiectul control de tip combo box.
 Row source type = specifică tipul sursei de date.
11. Caseta cu lista (list box)
O casetă cu lista este un obiect control care creează o listă din care utilizatorul poate selecta un
element. VFP are un generator ListBoxBuilder pentru simplificarea creării casetelor cu listă dar se pot
adăuga sau modifica şi manual, folosind fereastra Properties. Cele mai frecvent utilizate proprietăţi,
metode şi evenimente ale casetelor cu lista sunt prezentate în tabelul 6.
Tabelul 6. Proprietăţi, metode şi evenimente ale casetelor cu listă
Evenimentul Click determină declanşarea unei acţiuni atunci când se execută
click cu mouse-ul
Column Count specifică numărul de coloane ale obiectului
Column Width stabileşte lăţimea coloanelor
Evenimentul DblClick determină declanşarea unei acţiuni când se execută dublu
click cu mouse-ul
Multiselect determină dacă pot fi efectuate sau nu selecţii multiple într-
o listă
Incremental search determină dacă obiectul acceptă sau nu căutări
incrementale
RowSource afişează sursa valorilor din caseta cu lista
RowSourceType specifică dacă sursa este o valoare, o tabelă, o comandă
SQL, o cerere, o matrice, o listă de fişiere sau o listă de câmpuri
Evenimentul KeyPress determină declanşarea unei acţiuni când se apasă şi se
eliberează o tastă
Alegerea tipului de dată pentru caseta cu lista şi caseta combinată
Proprietatea RowSourceType determină tipul sursei de date (tabelul 7).
Tabelul 7. Tipul de dată pentru caseta cu listă şi caseta combinată
0 nimic, se adaugă elemente în listă prin program
1 valoare
2 alias
3 comanda SQL
4 cerere (.qpr)

73
5 matrice
6 câmpuri
7 fişiere
8 structura
9 popup
Exemplu:

sursa este:
use xiic
appe blank
fer=createobject('form1') add object la1 as label
fer.show la1.top=5
read events la1.left=150
browse la1.autosize=.t.
defi class form1 as form la1.caption='profesia'
backcolor=rgb(0,255,0)
add object sp as listbox
forecolor=rgb(0,250,123) sp.left=200
caption='form' sp.autosize=.T.
add object la as label sp.top=5
la.top=5 sp.height=80
la.left=5 sp.width=100
la.autosize=.t. sp.visible=.T.
la.caption='nume' sp.default=.T.
sp.controlsource='xiic.profesia'
add object tx as textbox sp.rowsourcetype=1
tx.top=5 sp.rowsource='inginer,profesor,contabil'
tx.left=50 add object ob as clb
tx.autosize=.t. add object sex as chb
tx.name='tx' add object ad as commandbutton
tx.controlsource='xiic.nume' ad.top=150

74
ad.left=5 pack
ad.autosize=.t. thisform.refresh
ad.caption='adauga' endproc
procedure ad.click
appe blank enddefine
thisform.refresh
endproc defi class chb as checkbox
add object ina as commandbutton top=75
ina.top=150 height=10
ina.left=75 width=20
ina.autosize=.t. name='chb'
ina.caption='inainte' autosize=.T.
procedure ina.click visible=.T.
if not eof() then default=.T.
skip +1 controlsource='xiic.sex'
endif enddefine
thisform.refresh
endproc defi class clb as optiongroup
add object inp as commandbutton controlsource='xiic.calitate'
inp.top=150 autosize=.t.
inp.left=135 TOP=50
inp.autosize=.t. left=50
inp.caption='inapoi' visible=.t.
procedure inp.click add object PARC as optionbutton
if not bof() parc.caption='bun'
skip -1 parc.autosize=.t.
endif parc.name='t20'
thisform.refresh add object SOHODOL as optionbutton
SOHODOL.caption='foarte bun'
endproc SOHODOL.autosize=.t.
add object ste as commandbutton name='t40'
ste.top=150 add object COCORENI as optionbutton
ste.left=200 COCORENI.caption='mediu'
ste.autosize=.t. COCORENI.autosize=.t.
ste.caption='sterge' COCORENI.NAME='l80'
procedure ste.click enddefine
delete all for xiic.nume=thisform.tx.value

75
12.Obiectul control de tip timer (timer control)
Obiectul control de tip timer permite executarea unor acţiuni la intervale specificate. O utilizare
frecventă a acestui obiect este verificarea ceasului sistemului pentru a vedea dacă este momentul să se
execute un anumit task. Obiectul control de tip timer are proprietatea Interval care specifică numărul de
milisecunde între două evenimente. Intervalul poate fi între 0-2147483647 milisecunde.
Pentru a introduce un obiect control de tip timer într-un videoformat se alege obiectul din bara de
instrumente Form Controls şi se plasează cu ajutorul mouse-ului în videoformat. La momentul lansării
în execuţie a videoformatului, obiectul timer este invizibil.
13.Grila (grid control)
Grila este un obiect de tip container. O grilă poate conţine diferite obiecte control, ficare cu setul
propriu de proprietăţi şi metode.

Grila este un obiect care permite afişarea datelor într-un format tabelar asemănător unei foi de calcul cu
linii şi coloane. Este folosit la crearea videoformatului de tip (1:2)(master-detail) în care casetele de
text afişează datele tabelei părinte, iar grila afişează datele tabelei copil. Se poate defini un obiect de tip
grilă folosind instrumentul Grid Builder.

Proprietăţile de bază ale grilei sunt prezentate în tabelul următor:


Childorder Specifică cheia externă pentru tabela copil ce este legată cu
cheia primară a tabelei părinte
Columncount Specifică numărul de coloane afişate
Linkmaster Afişează numele tabelei părinte
Recordsource Specifică numele sursei de date pentru grilă
Recordsourcetype Specifică tipul sursei (tabelă, alias etc)
Columnorder Stabileşte ordinea coloanelor într-o grilă
Rowheight Indică înălţimea fiecărei linii
15 Obiecte container de tip OLE
Se pot adăuga la un videoformat obiectele OLE folosind bara de instrumente Form controls.

După crearea obiectului se leagă obiectul la un câmp de tip general dintr-o tabelă. Apoi se foloseşte
obiectul pentru a afişa conţinutul câmpului. De ex. , dacă se stochează obiecte Word într-un câmp de
tip general se poate afişa conţinutul documentelor folosind un obiect de tip Bound OLE .

16 Colecţia de pagini (pageframecontainer)


O colecţie de pagini este un obiect container în care sunt păstrate pagini. Fiecare pagină a unei colecţii
identificată printr-o etichetă poate conţine obiecte control individuale. Proprietăţile pot fi setate la nivel
de colecţie(pageframe), pagina şi obiect control. Se poate gândi o colecţie de pagini ca un container
tridimensional ce conţine pagini formatate. Numai obiectele de control din prima pagină pot fi vizibile
şi active. Colecţia de pagini defineşte locaţia paginilor şi numărul de pagini ce sunt vizibile.

- 76 -
NR TIMP ETAPELE ARII DE METODE MIJLOACE DE FORME DE
.
INSTRUIRII CONTINUT DE INVATAMA ACTIVITATE
OB
. INVATAM NT
ANT
Cunostinte necesare -obiecte cu care
pentru asimilarea lucreaza
lectiei noi algoritmii
-metode de
reprezentare a
algoritmilor
2’ Organizare -absente, tinuta
Secventa
introductiva
2’ Ora aceasta vom Comunicare Frontala
studia o noua Expunere Colectiva
1.Captarea atentiei notiune-
tuturor elevilor pana la programarea
sfarsitul lectiei obiectelor de
control
2’ La sfarsitul orei Comunicare Frontala
2.Comunicarea vom cunoaste Expunere Colectiva
obiectivelor pe obiectele de
intelesul tuturor control si vom
putea rezolva
probleme cu
ajutorul lori.
11’ Secventa de invatare La cererea Conversatie Frontala
profesorului elevii Comunicare Individuala
vor da raspuns la Expunere
1.Verificarea si urmatoarele
reactualizarea intrebari:
cunostintelor din lectia -definitia clasei
precedenta -metode de
reprezentare
-prezentarea
comezii in
exemple
-prezentarea
aducerii de
obiecte in
formular
Ob 3’ Astazi vom Expunere Tabla Frontala
1 2.Prezentarea noului urmari: Problematiza Colectiva
continut si a sarcinilor -crearea unui re
de invatare formular
-aducerea de
obiecte in
formular
-crerea de
proceduri
corespunzatoare
declansatoarelor
Ob 10’ Anexa Expunere Frontala
1 3.Conducerea Problematiza Colectiva
( dirijarea) invatarii re

- 77 -
N TIMP ETAPELE ARII DE METODE MIJLOACE DE FORME DE
R. INSTRUIRII CONTINUT DE INVATAMANT ACTIVITATE
O INVATAM
B. ANT
Ob 3’ 4.Obtinerea 1.Se citeste n, Problematiza Frontala
3 performantelor numar natural. Sa re Grupe
(enuntarea cel putin a se calculeze suma
unei probleme a carei cifrelor sale. De
rezolvare necesita exemplu, pentru
aplicarea noului n=123 se va afisa
continut) 6 cu ajutorul
programarii
vizuale
2. Se citeste n,
numar natural.Sa
se afiseze numarul
obtinut prin
inversarea cifrelor
sale
10’ 5.Asigurare feedback Rezolvarea Conversatie Frontala
problemelor Problematiza Grupe
propuse re
Reprezentare
3’ 6.Evaluare Verificarea si Conversatie Frontala
performante notarea solutiilor Individuala
propuse
2’ Secventa de incheiere

Astazi am invatat Conversatie Frontala


1.Intensificarea programarea pe Colectiva
retentiei ( scurta obiecte si
recapitulare a aplicarea ei in
continutului esential al rezolvarea
invatarii din lectie) problemelor
2’ Aplicatiile din manual Conversati Frontala
2.Asigurarea e Individuala
transferului ( tema
pentru acasa)

- 78 -
COLEGIUL NATIONAL “TUDOR VLADIMIRESCU” Clasa:XII-B
Filiera :Teoretica Profesor Bogdan C-tin
Specializare: Matematica-Informatica

PLAN DE LECŢIE

Titlul lectiei: Structuri repetitive


Unitatea de invatare:Algoritmi
Tipul lectiei:Lectie de fixare
Mediul de instruire:Laboratorul de informatica

Obiective operationale:
La sfarsitul lectiei elevii vor cunoaste:
1.Reprezentarea structuri de control de control prin programare
2.Modul de executie instructiunilor specifice structurilor repetitivesi de decizie
La sfarsitul lectiei elevii vor sti sa:
3.Rezolve probleme utilizand structuri repetitive si de decizie

Structuri repetitive
1)for <variabila>=<expresie 1> to <expresie [loop]—determina saltul peste urmatoarele
2> [step <expresie 3>] instructiuni ale buclei situate intre loop si
<instructiuni> endfor,repetanduse grupul de instructiuni
[exit] 2)do while <expresie>
[loop] <instructiuni>
endfor [exit]
Explicatii: [loop]
[exit]—determina iesirea fortata din bucla enddo
adica dupa comanda enfor
Structuri decizionale
3)a) case <expresie 1>
if <conditie> <instructiune 1>
<instructiuni> case <expresie 2>
endif <instructiune 2>
b) if <conditie> …
<instructiune 1> case <expresie n>
else <instructiune n>
<instructiune 1> [otherwise
endif <instructiune_n+1>
c)do case

- 79 -
nr.ob. timp etapele instruirii arii de continut metode de mijloace de forme de activitate
invatamant invatamant
Cunostinte necesare -structurile
pentru asimilarea repetitive si
lectiei noi decizionale cu
care lucreaza
algoritmii
-metode de
reprezentare a
algoritmilor
2’ Organizare -absente, tinuta
Secventa
introductiva
2’ Ora aceasta vom Comunicare Frontala
studia o noua Expunere Colectiva
1.Captarea atentiei notiune-
tuturor elevilor pana la programarea
sfarsitul lectiei structurilor
repetitive si
decizionale
2’ La sfarsitul orei Comunicare Frontala
2.Comunicarea vom cunoaste Expunere Colectiva
obiectivelor pe programarea
intelesul tuturor structurata si
putem rezolva
probleme
11’ Secventa de invatare La cererea Conversatie Frontala
profesorului elevii Comunicare Individuala
vor da raspuns la Expunere
1.Verificarea si urmatoarele
reactualizarea intrebari:
cunostintelor din lectia -definitia
precedenta structurilor
repertitive si
decizionale
-metode de
reprezentare
-prezentarea
comenzii in
exemple
-prezentarea prin
exemple a
structurilor
repetitive si
decizionale
Ob1 3’ Astazi vom Expunere Tabla Frontala
2.Prezentarea noului urmari: Problematiza Colectiva
continut si a sarcinilor -crearea unui re
de invatare exemplu cu toate
structurile
repetitive si
decizionale
-aducerea
problemeor in
situatia de a fi
rezolvate prin
80
structuri repetitive
si decizionale
-crerea de
algoritmi
echivalenti
Ob1 10’ Anexa Expunere Frontala
3.Conducerea 1)Sa se calculeze Problematiza Colectiva
( dirijarea) invatarii sum 1+2+..+5 cu re
structura FOR
Solutie:
s=0
for i=1 to 10
s=s+i
endfor
?s
2)ce face
programul:
anotimp=2
do case
case anotimp=1
?'primavara'
case anotimp=2
?'vara'
otherwise
?'altceva
?'altceva'
endcase
3)ce realizeaza
programul:
for i=1 to 10
s=s+1
if i =5
exit
endif
endfor
4)ce afiseaza
sectiunea
urmatoare:
for i=4 to 1 step-2
?i
endfor

81
NR. TI ETAPELE ARII DE METODE MIJLOACE DE FORME DE
OB. MP INSTRUIRII CONTINUT DE INVATAMANT ACTIVITATE
INVATAM
ANT
Ob3 3’ 4.Obtinerea 1.Se citeste n, Problematiza Frontala
performantelor numar natural. Sa re Grupe
(enuntarea cel putin a se calculeze suma
unei probleme a carei 1+1*2+1*2*3+
rezolvare necesita …..
aplicarea noului Solutie :
continut) s=0
p=1
do while s<100
p=p*i
s=s+p
enddo
?s
2. Sa se precizeze
ce va afisa
programul si sa se
explice :
s=0
for i=1 to 10
if i>5
loop
endif
s=s+1
endfor
?s
10’ 5.Asigurare feedback Rezolvarea Conversatie Frontala
problemelor Problematiza Grupe
propuse re
Reprezentare
3’ 6.Evaluare Verificarea si Conversatie Frontala
performante notarea solutiilor Individuala
propuse
2’ Secventa de incheiere

Astazi am invatat Conversatie Frontala


1.Intensificarea programarea Colectiva
retentiei ( scurta folosind structuri
recapitulare a repetitive
continutului esential al
invatarii din lectie)
2’ Aplicatiile din manual Conversati Frontala
2.Asigurarea e Individuala
transferului ( tema
pentru acasa)

82
LECŢII EXPERIMENTALE
'.

Modelul relaţional. Specificitate, operatori relaţionali, forme normale,


limbaje pentru baze de date

Lecţia s-a desfăşurat la clasa a Xll-a D cu profil matematică-informatică,


Colegiul National „Tudor Vladimirescu”,Tg-Jiu, an şcolar 2005-2006. Am
comparat rezultatele obţinute la această clasă cu cele pe care le-am obţinut la o
clasă martor (clasa a -Xll-a C, profil matematică-informatică), la care am predat
aceleaşi noţiuni în anul şcolar 2003-2004.
In cursul acestei activităţi didactice am urmărit formarea unor abilităţi pe
care le voi enumera în continuare. Astfel, elevul va fi capabil:
- să cunoască importanta proiectării a structurii bazelor de date;
- să identifice corect situaţiile în care trebuie utilizate interogări;
- să identifice corect cheia primară şi cheile candidate;
- să identifice şi să înlăture anomaliile apărute în proiectarea unor
structuri de date;
- să rezolve corect diferite aplicaţii practice privind proiectarea cât mai
eficientă a unor structuri de date.
Pentru ca elevii să dobândească aceste cunoştinţe în urma activităţilor la
orele de informatică, am folosit metode activ-participative, cum ar fi învăţarea
prin descoperire care, deşi presupune un efort mai mare din partea profesorului
decât simpla expunere a noţiunilor, prezintă numeroase avantaje , între care
fixarea mult mai rapidă şi mai temeinică a cunoştinţelor.
La prima lecţie a acestui capitol am început cu o recapitulare a noţiunilor
de SGBD, baza de date, modele conceptuale, insistând mai mult pe modelul
relaţional.
In continuare le-am propus elevilor următoarea aplicaţie:
Pentru sistemul informatic al mei şcoli se considera necesare informaţii
despre: clase (codul, profilul), obiectele de învăţământ (nume), profesorii din
şcoală (nume, grad, specialitate), elevi (clasa, nume,date-personale).
Elevii sunt îndrumaţi să ajungă la următoarele observaţii: Un profesor
poate avea mai multe obiecte pe care le predă la o clasă; un obiect poate fi predat
de mai mulţi profesori, dar la clase diferite. O clasă are mai mulţi elevi, dar un
elev nu poate aparţine la clase diferite
Urmărind aceste observaţii definim următoarele tabele şi legături între ele, unde
cod_cl = codul clasei, cod_o = codul obiectului, cod_p = codul profesorului.

83
ELEVI

Cod_cl Nume

CLASE

profil Cod_cl

OBIECTE

Cod_ nume
o

INCADRARE

Cod Cod_o Cod_p


_cl
PROFESORI

COD NUME SPEC


_P

Pornind de la acest exemplu definim şi identificăm noţiunile de: cheie


primară (unică), cheie străină, cât şi restricţiile de integritate (restricţii de cheie,
restricţii referenţiale, restricţii de comportament).
In general, în aplicaţiile de gestiune problema cea mai mare nu o reprezintă
implementarea aplicaţiei de exploatare a bazei de date cât proiectarea unei
structuri care să permită accesul cât mai rapid la date şi care să sufere decât mai
puţine anomalii.

84
In continuare, le-am propus elevilor spre rezolvare următoarea problemă:
Dorim să ţinem evidenţa facturilor neachitate la o firmă. Pentru aceasta vom
considera tabela FACTURI.DBF cu următoarea structură:
Nr.- factură (numeric (3)); valoare (numeric), TVA (numeric), furnizor (caracter),
adresa (caracter), cod fiscal (numeric) Pe tablă am scris un posibil conţinut al
acestei baze de date:

Nr. factură Valoare TVA Furnizor Adresa Cod fiscal


121 12000 100 SC info GORJ 123456
123 10000 0 SC all Bucureşti 123568
128 15000 0 SC vil Craiova 123468
129 4000 20 Rvil GORJ 123499

Stabilesc împreună cu elevii cheia primară a relaţiei care este nr. factură.
Analizând aceasta bază de date elevii au observat că există unele neajunsuri:
a ) redundanţe DE DATE: unei firme care achită mai multe facturi; se retinde
fiecare dată adresa şi codul fiscal
b) anomalii la actualizare
- anomalie la inserţie -
Introducerea datelor despre un furnizor se face atunci când trimite o factură. Chiar
dacă dorim reţinerea datelor despre un partener nu putem face acest lucru până
când acesta nu trimite o factură.
- anomalia la modificare
Modificarea adresei sau a codului fiscal pentru un furnizor trebuie realizată în
toate articolele unde apare.
- anomalie la ştergere

Achitarea facturilor presupune şi ştergerea liniilor corespunzătoare din tabelă.


Putem pierde astfel informaţii importante despre furnizor cum ar fi adresa sau
codul fiscal.
Prin discuţii cu elevii am ajuns la concluzia că pentru a elimina aceste
anomalii trebuie organizată informaţia în două tabele diferite: una care să conţină
informaţiile despre FACTURI şi alta care să conţină informaţiile despre
FURNIZORI. Pornind de la structura tabelei iniţiale am construit structura
următoarelor tabele: FACTURI (nr. factură, valoare, TVA, furnizor) şi alta
FURNIZORI (nume furnizor, adresă, cod fiscal).
Datele din tabela iniţială aii fost reorganizate astfel:
FACTURI
NUMAR VALOARE FURNIZOR

85
FURNIZORI
NUME ADRESA COD_FISCAL

Anomaliile apărute în exemplul anterior provin în realitate din faptul că au fost


aşezate în aceeaşi tabelă informaţii despre obiecte distincte: furnizori şi facturi.
Operaţia de „spargere" a relaţiei care manifestă anomalii în alte relaţii
poartă numele de normalizare. Clasele de relaţii şi tehnicile folosite pentru
prevenirea anomaliilor se numesc forme normale.
Procesul de normalizare are la bază noţiunea de dependenţă funcţională.
Definim dependenta funcţională ca o legătură între două atribute din care al
doilea poate fi determinat dacă se cunoaşte primul.
De exemplu, pentru tabela anterioară, între numărul facturii şi valoare
există o dependentă funcţională. Dându-se numărul facturii putem găsi valoarea
acesteia. Spunem, deci, că atributul valoare este dependent funcţional de numărul
facturii..

Prima formă normală se identifică cu noţiunea de relaţie. Plecăm de la


următorul exemplu, considerăm,o tabelă care reţine codurile produselor
solicitate pe o comandă precum şi numărul, data şi valoarea comenzii.

Comanda Data Furn. Adresa Codi Cod2 Cod3 Cod4 Cant Val
006 01.05.05 FI GJ a23 bl2 C33 10 1298
007 01.09.05 F2 GJ C33 12 1200
Cheia este atributul comandă(nr. comandă). Dar apar anumite anomalii, cum
ar fi:
a) cine ne garantează că nu pot fi comenzi cu mai mult de 4 produse?
a) cine ne garantează că toate produsele, chiar dacă sunt cel mult 4, au aceiaşi
cantitate?

86
a) unde punem preţul fiecărui produs?
b) prelucrări de tipul valoare totală a comenzilor pentru produsul „b22"
necesită verificarea tuturor coloanelor şi însumarea rezultatelor
pentru
întreaga bază de date, lucru care conduce la un timp mare de răspuns.
Deci, se impune eliminarea câmpurilor care se repetă şi astfel se ajunge la prima
formă normală, Obţinem următoarea tabelă:

Comanda Data Furnizor Adresa Cod Cantitate Preţ Valoare


produs
006 01.05.05 FI GJ B66 10 100 10000
006 01.05.05 FI GJ C33 15 200 30000
007 01.06.05 FI GJ A23 23 230 56900

O relaţie se află în a doua formă normală dacă toate atributele non-cheie


sunt dependente de întreaga cheie.
Deci problema apare când cheia este compusă din mai multe atribute. La
exemplul nostru cheia este grupul (Comanda, cod_produs).
Dependentele funcţionale sunt: (comanda, cod_produs)>>>(cantitate),
(comanda)>>>(data) (comanda)>>>(valoare) Observăm că atributele non-
cheie
nu sunt dependente de întreaga cheie. Nomalizăm şi împărţim tabela în alte două
tabele :
COMENZI PRODUSE

87
comanda data furn. adr valoare
006 01.03.05 F1 GJ 1280 comanda cod_prod cant pret
007 01.08.05 F2 DJ 1200 006 A23 10 100
007 C66 10 120

88
O relaţie se află în a treia formă normală dacă se află în forma a doua
şi nu prezintă dependenţe tranzitive.
Să urmări "i exemplul nostru Cheia relaţiei la tabela COMENZI este
comanda. Ştiind numărul de comandă putem afla numele furnizorului. Deci
(comanda)>>>(furn). Ştiind furnizorul putem determina adresa (furn)>>>(adr).
Pare că adresa depinde funcţional prin tranzitivitate de comandă ceea ce nu este
adevărat. Vom normaliza în continuare şi obţinem alte două tabele:

89
cod furn adresa
comanda data furn. valoare
F1 GJ
F2 GJ 006 02,02,06 F1 1290
007 08,03,06 F2 1200

90
După realizarea unui alt exemplu asemănător recapitulăm şi
tragem următoarele concluzii:
> Prima formă normalâ se identifica cu definiţia unei relaţii.
> A doua formă normală impune ca toate atributele non-cheie să fie
dependente de întreaga cheie;
> A treia formă normală presupune inexistenţa dependenţelor
tranzitive între atribute.
> Parcurgând formele normale spectrul anomaliilor de care suferă o
relaţie se restrânge foarte mult;
> Toate aceste forme normale sunt folositoare, dar nici una nu
garantează că au fost eliminate toate anomaliile.

In limita timpului disponibil am făcut si o scurtă prezentare a FN4 si FN5,


analizând exemplele prezentate anterior. Elevii primesc ca temă realizarea unui
referat cu privire la FN 4 şi FN 5, dar si la alte forme normale prezentate în
literatura de specialitate, punându-se accent pe analizarea părerilor contradictorii
apărute la adresa anomaliilor ce apar la bazele de date. La sugestia unuia
dintre elevi aducem în discuţie si subiectul denormalizare. Denormalizarea
reprezintă procesul combinării de tabele sau obiecte pentru a creşte viteza de
acces, de obicei prin evitarea joncţiunilor.

La sfârşitul capitolului Baze de date relaţionale elevilor li s-a aplicat


următorul test:

91
Exerciţii propuse:

1. Normalizaţi următoarea relaţie cu situaţia închirierii sălilor dintr-un


complex sportiv de către elevi.
Un elev poate închiria mai multe
săli; o sală poate fi închiriată de
mai mulţi elevi.

ELEV N SALA TAXA


Popa Tenis 120000
Ion Biliard 200000
Gabi Minigolf 300000J

92
2. Evidenţa. cazărilor turiştilor în hotelurile unei staţiuni se face cu
tabela TURIST. Credeţi că este corectă?

TURIST BILET HOTEL TAXA


Popa Eduard ff1 23456 Lido 1000000
Enache Sorin xx2369 Azur 500000
Ion Lucian bb2255 Cozia 600000

93
3. Relaţia STUDENT reţine informaţiile despre specializările unor studenţi şi
activităţile sportive pe care aceştia le desfăşoară. Ce anomalii putem avea?

Un student poate avea mai multe


STUDENT SPECIALIZĂRI SPORTURI specializări şi poate desfăşura
Popa muzica atletism mai multe sporturi. Cheia relaţiei
poate fi doar atributul Student
Ion fizica tenis
Gabi matematica atletism

94
4.In tabela cu medicamente au fost introduse şi informaţii referitoare la
patronul farmaciilor. Este .corect? Ce anomalii pot apărea?

Nr farm Patron Buletin Adresa Medicam. Preţ Cant


111'' Ionica 12349 GORJ Pyram 15000 18
111 Ionica 12349 GORJ Aspirina 12000 20
A

5. Observaţi tabela următoare. In ce formă normală este?


CEC
Nrc Titular B. l. Adr DN Data op Tip op Suma Sold
11 Popa 1212 GJ 01.02.1978 O7.lun D 20000 90000
11 Popa 1212 GJ 02.02.1978 02 .Aug R 0
500000 0
20000
0 0
6. Realizaţi Schema Conceptuală a unei baze de date relaţionale pentru o
agenţie teatrală din localitatea X ştiind că:
> Se desfăşoară activităţi de planificare a spectacolelor pe săli şi
date
calendaristice,
> Spectacolele sunt prezentate de diferite trupe din tară;
> Se eliberează bilete la spectacolele săptămânii viitoare;
> Se calculează gradul de ocupare a sălilor.

Notele obtimute de clasa pilot,clasa cu 30 elevi(19 baieti si 11 fete) au fost:


Nota 3 si 4 5 si 6 7 si 8 9 si 10 Media
clasei
Numar note 2 5 15 8 8.05
procente 6% 16% 50% 26%

95
La clasa martor ,tot pentru 30 de elevi (12 baieti si 18 fete) notele au fost:

Nota 3 si 4 5 si 6 7 si 8 9 si 10 Media
clasei
Numar note 2 9 14 5 7.65
procente 7% 30% 46% 17%

Diferenţele între notele obţinute de elevi arată faptul că de la un an la an a


crescut interesul elevilor pentru studiul informaticii. De asemenea, elevii de la
clasa pilot au beneficiat de o dotare mai bună a laboratorului de informatică.
Studiate comparativ, rezultatele arată astfel:

Grupe de note 3 si 4 5 si 6 7 si 8 9 si 10
Clasa martor 2 9 14 5
Clasa pilot 2 5 15 8

96
97
Corelaţii între tabele în Microsoft Access. Interogări bazate pe
tabele corelate

Lecţia s-a desfăşurat la clasa a –X I I-a b cu profil matematică-informatică,


Colegiul National „Tudor Vladimirescu”,Tg-jiu, an şcolar 2005-2006. Am
comparat rezultatele obţinute la această clasă cu cele pe care le-am obţinut la o
clasă martor (clasa a –X I I-a D, profil matematică-informatică), la care am
predat aceleaşi noţiuni în anul şcolar 2004-2005.
În cursul acestei activităţi didactice am urmărit formarea unor abilităţi
pe care le voi enumera în continuare. Astfel, elevul va fi capabil:
- să cunoască importanţa proiectării a structurii bazelor de date;
- definirea şi discutarea conceptelor de bază ale organizării datelor
în
baze de date;
- exersarea operaţiilor elementare de creare, adăugare,
vizualizare,
ştergere, modificare, căutare, sortare şi statistici efectuate asupra
bazelor
de date;
- descompunerea problemelor în mod de organizare a datelor şi metode
de prelucrare;
- evidenţierea facilităţilor oferite de mediul de gestiune a bazelor de date
(se recomandă utilizarea unui mediu vizual);
- evidenţierea legăturii dintre mediile de gestiune a bazelor de date şi
alte
medii de prelucrare;
- formularea unor probleme care să poată fi realizate în grupuri de elevi;
- verificarea înţelegerii rezolvării unei probleme în ansamblul ei de
către
toţi membrii grupului;
- dezbateri pe tema fixării rolurilor în echipă în funcţie de interesele şi
aptitudinile individuale
- să identifice corect situaţiile în care trebuie utilizate interogări;
- crearea şi folosirea bazelor de date specifice unor domenii de activitate
accesibile elevilor (colectiv şcolar, bibliotecă, magazie de mărfuri,
agenţie de voiaj etc.) sa identifice şi să înlăture anomaliile apărute în
proiectarea unor structuri de date;
- încurajarea discuţiilor purtate între elevi, exprimarea şi
ascultarea
părerilor fiecăruia;
- evidenţierea importanţei realizării unor produse program fiabile,
cu
interfaţă prietenoasă
98
- să rezolve corect diferite aplicaţii practice privind proiectarea cât
mai
eficientă a unor structuri de date.
Pentru ca elevii să dobândească aceste cunoştinţe în urma activităţilor la
orele de informatică, am folosit metode activ-participative, cum ar fi învăţarea
prin descoperire care, deşi presupune un efort mai mare din partea
profesorului decât simpla expunere a noţiunilor, prezintă numeroase
avantaje, între care fixarea mult mai rapidă şi mai temeinică a cunoştinţelor.

99
La prima lecţie a acestui capitol am început o recapitulare a noţiunilor de
bază de date, tabel şi interogare (utilizând o singură bază de date), în continuare
le-am propus elevilor spre rezolvare următoarea problemă:
Dorim să ţinem evidenţa cărţilor si cititorilor unor biblioteci cu ajutorul
unui tabel. Pentru aceasta vom considera tabelul Biblio.dbf cu următoarea
structură: Număr_legitimaţie (Numnber Long Integer), (Text 30), Adresa (Text
30), Telefon (Text 20), Titlu_carte (Text 30), Cota_carte (Text 6),
Data_imprumutării (Date/Time - Short Date), Editura (Text 20).
Pe tabelă am scris un posibil conţinut al acestei baze de date:
Număr Nume Adresa Telefon Titlu_ Cota_ Data_ Autor Preţ. Domeniu Data_ Editura
legitim carte carte împrum carte apariţie
14572 Popescu Nord, B1.N2 744525 Ion AB355 ut
15.03.2004 Liviu 65000 Beletristică 12.16.90 Did si
Andrei Rebrean Ped
14572 Popescu Nord, B1.N2 744525 Dune AS235 15.03.2004 Frank 11 000 SF 22.04.96 Teora
Andrei Herbert
14572 Popescu Nord, B1.N2 744525 Fundaţia AS405 15.03.2004 Isaac 85000 SF 15.05.95 Nemira
Andrei Astmov
7422 Iliescu Iraian,Bl. 15 717542 Poezii PC585 25.01.2005 Mihai 7SOOO Poezie 05.02.83 Ion
Mana Eminescu Creang
7422 Iliescu Iraian,Bl. 15 717542 Agentul AS745 25.01.2005 Norman 66000 SF 16.12.93 ăNautilus
Măria haosului Spinrad

Analizând această bază de date, elevii au observat că există unele


neajunsuri:
a) redundanţe în date: unui cititor care a împrumutat mai multe cărţi de la
bibliotecă i se reţin de fiecare dată adresa şi numărul de telefon
a) anomalii la actualizare
- anomalie la inserţie
Dacă biblioteca achiziţionează o nouă carte, informaţia despre acea carte
nu poate fi introdusă în tabel decât în momentul în care cartea este
împrumutată de către un cititor.
- anomalie la ştergere
Dacă este şters un cititor, atunci se pierd şi informaţiile referitoare
la cartea împrumutată.
- anomalie la modificare
Daca se modifică numărul de telefon al unui cititor, modificarea
trebuie făcută în toate înregistrările unde apare numărul acelui cititor.
Prin discuţii cu elevii am ajuns la concluzia că pentru a elimina aceste
anomalii trebuie organizată informaţia în două tabele diferite: unul care să conţină
informaţiile despre cititori şi altul care să conţină informaţiile despre cărţi.
Pornind de la structura tabelului iniţial am construit structura următoarelor
tabele: Cititor (Număr_legitimaţie (Number - Long Integer), Nume (Text 30),
Adresa (Text 30), Telefon (Text 20), Cota_carte (Text 6),
Data_imprumutării (Date/Time)) si Cărţi (Cota_carte(Text 6), Titlu_carte
(Text 30), Autor (Text 30), Preţ_carte (Number - Smgle), Domeniu (Text 30),
Data_apariţie (Date/Time - Short Date), Editura (Text 20)).
Datele din tabelul iniţial au fost reorganizate astfel:
Cititor
100
Număr_ Nume Adresa telefon Cota_carte Data_
legitimaţie împrumutării
14572 Popescu Nord, B1.N2 744525 AB355 15.03.2004
Andrei
14572 Popescu Nord, B1.N2 744525 AS235 15.03.2004
Andrei
14572 Popescu Nord, B1.N2 744525 AS405 15.03.2004
Andrei
7422 Iliescu Măria Traian, BL 717542 PC585 25.01.2005
15
7422 Iliescu Măria Traian, Bl. 717542 AS745 25.01.2005
15

Cărţi
Cota_ Titlu_ Autor Preţ_ Domeniu Data__ Editura
carte carte carte apariţie
AB355 Ion . Liviu Rebreanu 65000 Beletristică 12.16.1990 Did şi Ped
AS235 Dune Frank Herbert 110000 SF 22.04.1996 Teora
AS405 Fundaţia Isaac Asimov 85000 SF 15.05.1995 Nemira
PC585 Poezii Mihai Eminescu 78000 Poezie 05.02.1983 Ion
Creangă
AS745 Agentul Nornian Spinrad 66000 SF 16.12.1993 Nautilus
haosului
Elevii au observat că în cazul tabelului Cititor, proiectarea tot nu este
optimă, deoarece datele unui cititor sunt reţinute pentru fiecare carte
împrumutată. Soluţia constă în despărţirea tabelului în două tabele astfel:
Date_personale (Nume (Text 30), Adresa (Text 30), Telefon (Text 20),
Număr_legitimaţie (Number - Long Integer)).
Date_împrumuturi (Număr_legitimaţie (Number - Long Integer), Cota_carte
(Text 6), Data împrumutării (Date/Time - Short Date)).
Pornind de la datele din tabelul Cititor, conţinutul celor două tabele a
devenit: pate_personale

Nume Adresa Telefon Număr legitimaţie


Popescu Andrei Nord, B1.N2 744525 14572
Iliescu Măria Traian, Bl. 15 717542 7422

Date_imprumuturi

Număr legitimaţie Cota carte Data_împrumuturi


14572 AB355 12.16.1990
14572 AS235 22.04.1996
14572 AS405 15.05.1995
17422 PC585 05.02.1983
7422 AS745 16.12.1993

101
Prin discuţii cu elevii s-a constatat că s-a obţinut o structură optimă de
organizare a informaţiei, în continuare, elevii au fost puşi să răspundă la
următoarele întrebări:
a) De câte ori au fost împrumutate cărţi ale editurii Teora? Dacă aceeaşi
carte
a fost împrumutată de mai multe ori, se numără fiecare împrumutare.
b) Care simt cărţile pe care le-a împrumutat cititorul Popescu Andrei din
domeniul Beletristică?
c) Care este cea mai scumpă cane împrumutată de cititorul Iliescu Maria?
Elevii au constatat că nu ştiu să răspundă la aceste întrebări
utilizând
noţiunile
studiate anterior, în aceste momente le-am prezentat modul cum poate fi realizată
corelarea a două tabele.
Corelarea a două sau mai multe tabele presupune stabilirea unor
legături între acestea în vederea extragerii unor informaţii.
Câmpurile comune, prin care se face corelarea, sunt cheie primară
pentru un tabel şi cheie externă pentru celălalt. Este recomandat ca numele
acestor câmpuri să fie identic în toate tabelele corelate, iar tipurile lor să fie
compatibile, în acest fel, Acces poate să creeze corelaţii automat, atunci când
tabelele vor fi adăugate într-o interogare.
În exemplul prezentat anterior pentru baza de date Date_personale cheia
primară va fi Număr_legitimaţie, iar pentru baza de date Cărţi cheia primară va
fi Cota_carte. Pentru tabelul Date_imprumuturi nu se poate defini o cheie
primară deoarece nu există un câmp care să identifice în mod unic înregistrarea.
În continuare elevii au creat cele trei tabele Date_personale,
Date_împrumuturi şi Cărţi şi au introdus date în ele, după care le-am prezentat
paşii pentru realizarea unei interogăm care să conţină mai multe tabele:
1. Din fereastra Database se selectează obiectul Ouery
2. Se selectează opţiunea Create Ouery in Design view
3. Pe ecran apare

102
4. Tabelele se introduc în interogare selectând cu mouse-ul numele
tabelului şi apăsând butonul Add(adaugare)
5. Legătura între tabele se stabileşte prin acţiunea Drag&Drop între
câmpurile de legătură. Pentru exemplul prezentat anterior situaţia
se
prezintă astfel:

103
104
Elevii au observat că unind cele trei tabele Date_personale,
Date_împrumuturi şi Cărţi, se obţine o bază de date ce conţine toate cărţile care
au fost împrumutate de la bibliotecă
6. Apăsând dublu clic pe linia de legătură dintre tabele, pe ecran va apare
fereastra Join Properties care ne permite să selectăm tipul legăturii
dintre tabele: „l la n", „n la n" sau „n la l".

105
> într-o corelaţie de tip „l la n „ o înregistrare din tabelul din stânga
poate avea mai multe înregistrări corespondente în tabelul din
dreapta însă o înregistrare din tabelul din dreapta are cel mult o
înregistrare corespondentă în tabelul din stânga.
> într-o corelaţie de tip „n la n" o înregistrare din tabelul din stânga
poate avea mai multe înregistrări corespondente în tabelul din
dreapta şi invers, o înregistrare din tabelul din dreapta poate avea
mai multe înregistrări corespondente în tabelul din stânga.
> într-o corelaţie de tip „n la l" o înregistrare din tabelul din stânga
poate avea cel mult o înregistrare corespondentă în tabelul din
dreapta si invers, o înregistrare din tabelul din dreapta poate avea
cel mult o înregistrare corespondentă în tabelul din stânga.
Revenind la cerinţele problemei iniţiale, prin discuţii cu elevii am ajuns la
următoarele soluţii: al) Am corelat tabelele Date_imprumuturi si Cărţi pe
câmpul comun
Cota carte
a2) In linia Criteria pentru câmpul Editura am introdus valoarea „Teora"
a3) Din meniul View am selectat opţiunea Totals şi în continuare pentru câmpul
Editura am selectat în linia Total opţiunea Group By, iar pentru câmpul
Cota_carte am selectat opţiunea Count.

Pentru punctul b)
bl) Am corelat cele trei tabele
b2) Am selectat câmpurile Nume, Autor, Titlu, Domeniu şi am precizat în
secţiunea Criteria valorile „Popescu Andrei” pentru Nume şi „Beletristică" pentru
Domeniu.
Punctul c)
C1) Am corelat cele trei tabele
c2) Din meniul View am selectat opţiunea Totals şi, în continuare, în linia Total
pentru câmpii Nume am selectat opţiunea Group By,iar pentru câmpul
Preţ_carte ,am selectat opţiunea Max.
c3) Pentru câmpul Nume am specificat în linia Criteria valoarea „Iliescu
Măria".
La sfârşitul orelor alocate pentru corelaţii între tabele, pentru fixarea cunoştinţelor le-
am propus elevilor următoarea problemă:
Se consideră tabelul de mai jos care ţine evidenţa clienţilor şi produselor unui
magazin.

106
107
Cod_ Nume Nr_ Cod_ data Cod_ Numc_ Cost_ Cantitate
ciient client telefon comanda articol articol articol
Al Popescu 724242 CI 05.10.04 PI cămaşă 300000 2
Marin
Al Popescu 724242 CI 05.10.04 P3 tricou 250000 1
Marin
A2 lonescu 715555 C2 10.10.04 PI cămaşă 300000 3
Andrei
A2 lonescu 715555 C2 10.10.04 P3 tricou 250000 2
andrei
A2 lonescu 715555 C2 10.10.04 P2 pantaloni 500000 1
Andrei
A3 Georgescu 744111 C3 15.10.04 P3 tricou 250000 3
s Adriana
*

A4 Marinescu 755410 C4 20.10.04 PI cămaşă 300000 1


ilie

Se cere:
a) Să se reproiecteze tabelul astfel încât să fie evitate anomaliile la
inserţie, ştergere şi modificare.
b) Folosind noile tabele tsă se determine prin intermediul unei interogări
Acces valoarea mărfii cumpărate de clientul lonescu Andrei.

Elevii au avut 15 minute timp de gândire după care un elev a ieşit la tablă şi a
scris soluţia. Apoi toţi elevii au creat tabelele în Access, au introdus date şi au
realizat interogarea cerută.

Tema pentru acasă: elevilor le-am propus spre rezolvare următoarea


problemă:
O societate are în tabelul PERS (cod, nume, funcţie, salariu) toate
persoanele încadrate, iar în tabelul REŢINERI (cod, nume_retinere, suma) sumele
datorate de diferite persoane (rate, C.A.R. etc.). Să se afişeze ordonat după nume
lista persoanelor cu numele, funcţia, salariul şi suma pe care o are de plată
fiecare.

108
grilă. La sfârşitul capitolului interogări, elevilor li s-a aplicat o examinare cu
teste

109
Notele obţinute de ei au fost:

Nota 3 si 4 5 si 6 7 si 8 9 si 10 Media clasei


Număr note 1 6 14 9 8.10
Procente 3% 20% 47% 30%

110
La clasa martor, tot pentru 30 de elevi notele au fost:

Nota 3 si 4 5 si 6 7 si 8 9 si 10 Media clasei


Număr note 2 11 11 6
Procente 6% 37% 37% 20% 7.65

111
Diferentele între notele obţinute de elevi arată că de la an a crescut interesul
elevilor pentru studiul infonnaticii. De asemenea, elevii de la clasa pilot au
beneficia' de o dotare mai bună a laboratorului de informatică.
Studiate comparativ, rezultatele arată astfel:

Grupe de note 3 si 4 5 si 6 7 si 8 9 si 10
Clasa martor 2 11 11 6
Clasa pilot 1 6 14 9
Studiu statistic. Prezentarea şi interpretarea rezultatelor

Clasa: XII D, Colegiul National Tudor Vladimirescu”,Tg-Jiu, 2005-2006


Intervalul de timp m care s-a desfăşurat cercetarea: săptămânile 16-22 din
semestrul II, anul şcolar 2005-2006, respectiv un număr de 15 ore
Profilul clasei: Matematică Informatică
Disciplina: Informatică
Unitatea de învăţare: Baze de date relaţionale
Date generale:

Nota Nota Media Test Nr. Urban/


Elev iniţială finală matem. 1/0/-1 absenţe Sex Rural Familia Sănătate
1 7 8 7,00 -2 1 0 1 0 0
2 6 8 7,50 12 1 0 1 1 0
3 8 8 8,00 8 0 1 1 0 1
4 7 6 6,50 4 0 0 1 1 1
5 9 10 6,00 10 0 0 0 0 0
6 10 10 8,00 18 0 0 1 0 0
7 10 10 7,50 15 0 0 1 0 0
8 7 5 7,00 0 0 1 1 1 0
9 6 9 7,00 2 0 0 1 0 0
10 7 8 8,50 11 0 0 1 0 1
11 5 6 7,00 3 2 0 1 1 0
12 6 8 7,00 2 0 0 1 1 0
13 9 8 8,00 10 0 1 1 0 1
14 9 9 6,50 10 0 0 1 0 0
15 10 10 9,00 16 0 0 -ţ 0 0
16 6 8 6,00 9 0 1 1 0 1
17 7 10 7,50 14 0 0 1 0 0
18 10 9 8,50 12 0 0 0 0 0
19 7 7 6,00 12 0 O 1 1 1
20 9 9 8,00 9 0 0 0 0 0
21 7 9 6,50 1 0 1 1 0 1
22 10 10 9,50 15 0 0 1 0 0
23 7 8 5,50 -5 1 0 1 1 0
24 7 8 7,00 0 0 0 1 1 0
25 8 8 7,00 7 0 1 1 0 0
26 7 9 7, 50 11 0 0 1 0 0
27 10 10 9,00 19 0 0 1 0 0
28 9 10 9, 50 13 0 1 1 0 0
29 5 5 5, 00 -3 3 1 1 1 1
30 9 9 8 ,00 0 0 0 1 1 0

Observaţii:
1. Am transformat variabilele calitative privitoare la sexul elevilor şi la
mediul de provenienţă (urban/rural)în variabile cantitative, atribuind
valoarea
sexului masculin şi mediului urban şi valoarea 0 sexului feminin şi mediului
rural. Am făcut aceasta pentru a putea evidenţia existenţa sau inexistenţa
unor
corelaţii între toate datele din coloanele tabelului.
2. Am notat cu Test l/O/-1 rezultatele obţinute în urma aplicării testului
sociometric în care elevii atribuie fiecăruia dintre colegi una din valorile
1,0
sau -l în funcţie de simpatia-antipatia reciprocă.
3. Am notat cu Familia, coloana în care am trecut existenţa (1) sau inexistenţa
. (0) unor probleme în familia elevului respectiv (ex.: orfan de unul sau ambii
părinţi, părinţi despărţiţi, probleme materiale deosebite, relaţia slabă a
familiei cu şcoala).
4. Am notat Sănătatea coloana în care am trecut existenţa (1) sau
inexistenţa(0) unor probleme de sănătate.
5. Am ales Media la matematică, pentru anul şcolar 2005-2006 (semestrul I)
şi nu note din perioada supusă studiului pentru că am considerat că aceasta
caracterizează nivelul global de pregătire la această disciplină şi se apropie
mai mult de variabila structurală pe care o doream pentru cercetare.

PRELUCRĂRI

Număr elevi 30
Fete 23 77%
Băieţi 7 23%
Nr.ore 15
Nr.absente 9 3%
Rural 3 10%
Urban 27 90%
Structura clasei în funcţie de
repartiţia pe sexe

Ponderea absenţelor în numărul total


de ore
Structura clasei în funcţie de mediul
de provenienţă
l

Evaluare
iniţială
Media clasei: 7.79

Distribuţia notelor iniţiale


Evaluare finală

Media clasei: 8.40

distribuţia notelor finale

Matricea corelaţiilor
Folosind programul Microsoft Excel, funcţia CORREL, am calculat
automat matricea coeficienţilor de corelaţie liniară Pearson între toate
coloanele tabelului iniţial, ce conţine datele generale despre elevii clasei
XII D.

Nota Nota Media Test 1/0/- Urban


Nr.abs Sex Familia Sănătatea
initiala finala matern 1 Rural

Nota 1
iniţială
Nota
0,714553 1
finală
Media
0,762423 0,585906 1
matern
Test 1/0/-
0,641224 0,627646 0,515437 1
1
Nr.abs -0,606890 -0,556100 -0,484250 -0,453610 1

Sex -0,155810 -0,187880 -0,096450 -0,107800 -0,175410 1

Urban
-0,284810 -0,205830 0,287686 -0,132950 0,104828 0,119523 1
Rural
Familia -0,550670 -0,693100 -0,393240 -0,572970 0,450694 -0,126490 0,188982 1

Sănătatea -0,330580 -0,432760 -0,374500 -0,117520 0,096008 0,337100 0,161165 0,053300 1

Analizând tabelul de mai sus putem trage următoarele concluzii:

Faptul că există o corelaţie mijlocie inversă (-0.60689) a


numărului de absenţe cu nota iniţială indică faptul că cei care au
acumulat absenţe în intervalul de timp cât a durat Cercetarea, nu
au fost prezenţi in toate orele nici în intervalul anterior cercetării.
Valoarea negativă (-0,45361) a coeficientului de relaţie
Person între numărul de absente şi testul l/0/-1 arată că elevii
care absentează nu sunt priviţi „cu ochi buni" de către colegii lor
ceea ce este un fapentru îmbucurător cu privire la standardul
moral al clasei respective.
Valorile de 0,55067 şi -0,6931 între situaţia familială şi
notele obţinute indică importanta, pentru evoluţia şcolară a
elevului, a unei atmosfere de familie normală şi a unei preocupări a
părinţilor pentru cunoaşterea situaţiei şcolare a copiilor lor.
Coeficienţii negativi de corelaţie între sănătate şi notele obţinute
(-0,33058 şi -0,43276) arată influenta stării de sănătate asupra
performantelor şcolare, ea este pozitivă pentru o bună stare de
sănătate şi negativă în caz contrar. O slabă corelaţie directă
(0,161165) avem între starea de sănătate şi starea familială.
Numărul de absenţe prezintă o corelaţie directă de
valoare medie (0450694) şi cu gradul de implicare al familiei în
viata tânărului. Cu cât familia este mai dezorganizată sau mai
puţin interesată de activitatea şcolară a elevului, absenteismul de
la procesul instructiv-educativ creşte. Cea mai puternică corelaţie
dintre variabilele structurale alese pentru cercetarea mea o
prezintă media la matematică cu nota iniţială şi nota finală,
respectiv valori de 0,762423 şi 0585906. Aceste valori indică
dependenţa strânsă care există între nivelul de pregătirea al
elevului la matematică şi cel de informatică. Matematica şi
informatica fiind discipline care solicită gândirea logică si
capacitatea de algoritmizare si abstractizare a elevilor, este normal
să existe o dependenţă strânsă între notele la aceste discipline.

BIBLIOGRAFIE

Menachen Basian , » Totul despre Visual FixPro 6 « ,Editura Teora, 2001

I.Popescu, Baze de date Relationale,Editura Universitatii Bucuresti, 1996

I.Popescu, Oracle 8.Prelucrearea avansata a informatiei,Editura Tehnica, 2000

I.Lungu,M.Velicanu,C.Bodea,C.Ionita , Sisteme de gestiune a bazelor de date,Editura ALL

O.Bâscă ,Baze de date ,Editura All,1997

PHP and MySQL Web Dev,Luke Weling,Laura Thomson,USA LLC 2005

SAMS TEACH YOURSELF php ,Mysql and Apache ALL in One,j.k.Meloni-Person Education 2004

Wiley & Sons - Secure PHP Development - Building 50 Practica,2005

Wrox Press. - Professional PHP Programming,2005

NewRiders PHP Programming For Windows,2004

MySQL- PHP Database Aplication,2005

Web Programming Unleashed

A BEIGINER’S GUIDE

S-ar putea să vă placă și