Documente Academic
Documente Profesional
Documente Cultură
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.
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)
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
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
8
coloanei respective .Fiecarui nume de atribut ii corespunde un domeniu Di numit
domeniu numit domeniul atributului Ai ,1in 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 Avaloarea tuplului t ,
iar daca t este considerata ca functie , atunci Avaloarea 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
Xvaloarea 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)
11
orar 2
NR PD PA OD OA
12
NR PD PA OD OA
75 Craiova Bucuresti 07:15 08:25
80 Bucuresti Timisoara 17:30 19:30
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 :
Π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
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
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
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 :
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
17
Complementul relatiei drepentru este :
Pilot Tip avion
Dan IAR500
Ion IAR500
Mihai AIRBUS
Mihai IAR500
Andrei IAR500
Andrei AIRBUS
Andrei TU154
Drepentru 2
Pilot Tip avion
Ion TU154
Ion AIRBUS
Mihai TU154
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
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.
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))
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
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 : XY 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 CX X{A1 ,…,An};
2. Daca XY , atunci ZY , Z cu XZ;
3. Daca XY si YZ atunci XZ (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 XA si YX , atunci XY
- marirea : daca XY si WA atunci XWYW(unde XW=XW)
- tranzitivitatea : daca XY si YZ atunci XZ
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 XY si XZ atunci XYZ
5.descompunerea : daca XYZ atunci XY si XZ
6.pseudotranzitivitatea : daca XY si YWZ atunci XWZ
Exemplul 2.2.4. Fie a={A,B,C,D,E,F} o multime de atribute a unei relatii r si
F={AB,AC,CDE,CDF,BE}o multime de dependente funcionale .F se
obtine din F la care se mai adauga :
AE(prin tranzitivitate)
CDEF(prin regula 4)
25
ADF(AC,ADCD din regula 2, CDF 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:
ABB X
ACC X
CDE E X
CDF F X
deci X={A,D}={A,B,C,D,E,F}.
26
Fie relatiile r(X,Y), s(X,Z) si X,Y,Z multimi de atribute , XZφ.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
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
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(XY)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 CA={A1,…,An} o cheie .Presupunem ca exista
YA, YC=(Y nu este chie ), Y dependent functional de XC (Y este complet
dependent functional de o submultime stricta de atribute cheie).Dependenta XY se
poate elimina daca relatia r se descompune in urmatoarele doua relatii:
r=[XY]=xy(r)
r=[AY ]=AY(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 DISCIPLINAPROFESOR.
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 DISCIPLINAPROFESOR nu este respectata ,
atunci poate apare o inconsistenta .Fie doua elemente din relatie:
T …DISCIPLINA … PROFESOR
……………………………………
t1 …ANALIZA … POPA
t2 …ANALIZA … POPA
……………………………………..
29
Daca C este o cheie si Y un atribut tranzitiv dependent de cheie , atunci exista
un X care verifica CX si XY .Deoarece relatia este in forma normala FN2 ,
obtinem ca Y este complet dependent de C, deci XC = si exista o dependenta
XY , 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 YC=), atunci relatia r se poate descompune in
urmatoarele relatii (se elimina dependenta functionala XY):
r[XY]=XY(r)
r=[AY ]=AY(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-INDRCATEDRA
NUME-ABSOLVENTCADRU-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-AUTONR-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(XY) 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 XY 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
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
32
w1
t2 u2 v
w2
…………………………………
t3
………………
t4
u1 v
w1
u2 v
w2
CP# CA# PA PD
11 100 Sibiu Iasi
10 100 Iasi Sibiu
10 100 Sibiu Iasi
10 101 Sibiu Iasi
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
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 TIPCAPACITATE .
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
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.
INTRODUCERE IN SQL
Este vorba de o introducere în limbajul de interogare utilizat pentru a accesa o bază de
date.
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.
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).
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.
SELECT
*
FROM
ANGAJAT
;
SELECT *
FROM ANGAJAT;
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ă.
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ă.
41
10 MIHAI 7782
Este posibil să selectăm toate coloanele din tabelă prin specificarea unui asterix ( * )
după cuvântul SELECT .
SELECT *
FROM ANGAJAT;
Expresii aritmetice
O expresie este o combinaţie de una sau mai multe valori, operatori şi funcţii, care se
evaluează la o valoare.
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).
Alias-uri de coloană
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ă:
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.
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
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.
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:
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.
45
Dacă nu se indică altfel, SQL*Plus afişează rezultatul unei interogări fără eliminarea
intrărilor duplicate .
SELECT DEPTNO
FROM ANGAJAT;
DEPTNO
------
20
30
30
20
30
30
10
20
10
30
20
30
20
10
Clauza DISTINCT
DEPTNO
------
10
20
30
DEPTNO MESERIA
46
------ ---------
10 FUNCTIONAR
10 MANAGER
10 PRESEDINTE
20 ANALYST
20 FUNCTIONAR
20 MANAGER
30 FUNCTIONAR
30 MANAGER
30 VANZATOR
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.
47
La valorile de tip date calendaristice, cele mai mici primele.
Valorile de tip caracter, în ordinea alfabetică.
Pentru a inversa ordinea coloanei DATAANG, deci datele cele mai târzii să fie afişate
primele, introduceţi:
Pentru a ordona după doua coloane şi afişa în ordinea inversa a salariului, introduceţi:
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
Atenţie:
Clauza WHERE
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.
49
1. Un nume de coloana
2. Un operator de comparaţie
3. Un nume de coloana, constanta sau lista de valori.
Operatorii logici
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 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.
50
WHERE DEPTNO >20;
DNAME DEPTNO
---------- ------
SALES 30
OPERATIONS 40
De exemplu, presupunem ca dorim să obtinem acei angajaţi al caror comision estĺ mai
mare decat salariul lor:
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:
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
Operatorul IN
Presupunem ca dorim să gasim angajaţii care au unul din cele trei numere de
marca(CODSEF):
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
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
NUME MESERIA
-------- --------
ION FUNCTIONAR
ALLEN VANZATOR
GORE VANZATOR
MARTIN VANZATOR
STEFAN ANALYST
CRISTIAN PRESEDINTE
TICA VANZATOR
ADAMS FUNCTIONAR
JAMES FUNCTIONAR
FLORIN ANALYST
MIHAI FUNCTIONAR
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.
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'.
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';
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.
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.
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.
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:
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
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
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.
63
Param i-specifica parametri care permit transmiterea de valori spre procedura eveniment
Init a clasei.
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.
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
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:
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
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.
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.
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 .
- 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
- 78 -
COLEGIUL NATIONAL “TUDOR VLADIMIRESCU” Clasa:XII-B
Filiera :Teoretica Profesor Bogdan C-tin
Specializare: Matematica-Informatica
PLAN DE LECŢIE
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
82
LECŢII EXPERIMENTALE
'.
83
ELEVI
Cod_cl Nume
CLASE
profil Cod_cl
OBIECTE
Cod_ nume
o
INCADRARE
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:
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
85
FURNIZORI
NUME ADRESA COD_FISCAL
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ă:
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.
91
Exerciţii propuse:
92
2. Evidenţa. cazărilor turiştilor în hotelurile unei staţiuni se face cu
tabela TURIST. Credeţi că este corectă?
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?
94
4.In tabela cu medicamente au fost introduse şi informaţii referitoare la
patronul farmaciilor. Este .corect? Ce anomalii pot apărea?
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%
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
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
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
Date_imprumuturi
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
*
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ă.
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:
110
La clasa martor, tot pentru 30 de elevi notele au fost:
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
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
Evaluare
iniţială
Media clasei: 7.79
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 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
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
BIBLIOGRAFIE
Menachen Basian , » Totul despre Visual FixPro 6 « ,Editura Teora, 2001
SAMS TEACH YOURSELF php ,Mysql and Apache ALL in One,j.k.Meloni-Person Education 2004
A BEIGINER’S GUIDE