Sunteți pe pagina 1din 27

SISTEME INFORMATICE SI

GESTIUNEA BAZELOR DE DATE


CURS

Tudor Nicoleta Liviana

- 2007 -

1
CUPRINS

1. Sisteme de gestiune a bazelor de date …………………………………... 3


- Funcţii.
- Arhitectură.
- Tipuri de SGBD-uri.
2. Modelul relaţional al datelor ……………………………………………. 8
- Reguli de integritate.
- Algebra relaţională.
- Regulile lui Codd.
- Normalizare.
3. Limbajul SQL - crearea tabelelor in Visual FoxPro ……………………. 18
- Limbajul SQL – prezentare generala; tipuri de date
- Crearea tabelelor
- Adaugarea restrictiilor
- Erori care apar in cazul folosirii indecsilor
- Crearea completă a tabelelor
4. Inserarea, modificarea şi ştergerea inregistrarilor in limbajul SQL .……. 28
5. Operatorii algebrei relationale - comanda SELECT ….………………… 35
6. Funcţii agregat. Gruparea tuplurilor …………………………………….. 42
- Functii agregat
- Crearea grupurilor de tupluri - clauzele Group by, Having
- Erori generate de functii de grup
7. Subinterogări ……………………………………………………………. 51
8. Cursoare. Tabele virtuale ……………………………………………….. 55
- Secvenţializarea interogarilor - cursoare
- Tabele virtuale (view)
9. Proceduri stocate şi declanşatoare ………………………………………. 60
10. Sisteme informatice. Proiectarea unei aplicatii vizuale. 66
Bibliografie 76

2
Capitolul 1

Sisteme de gestiune a bazelor de date.


Funcţii. Arhitectură. Tipuri de SGBD-uri

Un sistem de gestiune a bazelor de date (SGBD) este un ansamblu de


programe ce permit utilizatorilor sa interactioneze cu o baza de date, in vederea crearii,
actualizarii si interogarii acesteia[1]. Privit dintr-o alta perspectiva, un SGBD poate fi
considerat un produs software[2] care asigura interactiunea cu o baza de date, permitand
definirea, consultarea si actualizarea datelor dintr-o baza de date.

Obiectivele unui SGBD sunt:


 furnizarea unui mediu eficient, adaptat utilizatorilor care doresc sa
consulte sau sa actualizeze informatiile continute intr-o baza de date
 asigura si supervizeaza:
o introducerea de informatii in baza de date
o actualizarea si extragerea datelor din baza
o autorizarea si controlul accesului la date
o pastrarea independentei dintre structura bazei de date si programe.

Arhitectura sistemelor de gestiune a bazelor de date


Un SGBD prezinta, in general, urmatoarele module[3]:
 Gestionarul fisierelor, care aloca spatiu de memorie pe disc si
gestioneaza structurile fizice de date care servesc la reprezentarea informatiei.
 Gestionarul bazei de date este un modul de programe ce realizeaza
interfata dintre datele interne (de pe disc) continute in baza si programele (sau comenzile)
de consultare si actualizare. El traduce instructiunile DML (limbajul de manipulare a
datelor) in instructiuni-sistem, la nivel elementar, fiind responsabil de buna desfasurare a
operatiilor de citire / scriere a datelor din / in baza de date.
 Procesorul de consultare traduce instructiunile limabajului de
consulatare in instructiuni elementare, „inteligibile” pentru gestionarul bazei de date. El
optimizeaza consultarea, pentru obtinerea rezultatelor intr-un timp cat mai scurt.
 Modulele DML (Data Manipulation Language) realizeaza conversia
instructiunilor limbajului de manipulare a datelor folosite intr-un program, in proceduri
curente ale limbajului-gazda, interactionand cu procesorul de consultare in vederea
producerii secventelor de cod adecvate.
 Modulele DDL (Data Definition Language) traduc (prin compilare sau
interpretare) si executa instructiunile DDL, obtinandu-se ansamblul de tabele ce
reprezinta metadatele stocate in dictionarul de date.

Principalele functii ale unui SGBD sunt:


 descrierea ansamblului de date la nivelurile fizic si conceptual

3
 crearea (initializarea) si exploatarea (consulatarea si actualizarea)
bazei de date
 controlul integritatii bazei de date
 confidentialitatea informatiilor continute in baza
 accesul simultan al mai multor utilizatori la informatii
 securitatea in functionare
 furnizarea unui set de comenzi si insructiuni necesare atit utilizatorilor pentru
consultarea bazei de date, prin limbajul de manipulare, cat si programatorilor
 revizia si restructurarea bazei de date
 monitorizarea performantelor
Un SGBD se caracterizeaza prin:
 neredundanta datelor (administrarea coerenta a datelor trebuie sa asigure neduplicarea
fizica a datelor);
 partajarea datelor (aplicatiile sa partajeze simultan datele din baza de date);
 securitatea si confidentialitatea datelor (datele trebuie protejate de accesul neautorizat
sau rau intentionat).

Tipuri de SGBD-uri
1. Modelele retea si ierarhice caracteristice perioadei 1960-1970
foloseau o organizare a datelor la nivel de articol prin legaturi ierarhice(arbore) sau de tip
graf.
IMS (Information Management System), conceput de IBM, a fost primul SGBD
ierarhic, conceput initial pentru procesarea datelor in industria aerospatiala (1968).
Versiunea curenta a acestuia, IMS/VS (Information Management System/Virtual
Storage), este implementata pe calculatoare IBM si foloseste limbajul DL/1 (Data
Language One). Sistemul IMS nu poate reprezenta relatia de tipul n:m („multi la multi”).
Independenta fizica redusa a SGBD-urilor ierarhice complica administrarea si
manipularea datelor. Limbajul de manipulare a datelor impunea programatorului sa
specifice drumurile de acces la date.
IDMS (Integrated Database Management System) este un SGBD retea produs de
firma Cullinet Software Inc. si functioneaza pe calculatoarele IBM, sub sistemul de
operare DOS. Modelele retea prezinta o serie de dezavantaje, precum optimizarea
manuala a sistemului: nu utilizeaza baze de date statistice si nu permit sortarea dinamica.
Totusi, SGBD-urile retea continua sa fie folosite datorita performantelor obtinute in
prelucrarea la nivel de inregistrari.
Referitor la modul de manipulare a datelor, modelele ierarhic si retea erau
orientate pe fisiere. Pentru a inlatura aceste limitari, a fost introdus modelul relational,
care este orientat pe multimi.
2. Modelul relational a aparut dupa 1970 si a revolutionat lumea
bazelor de date prin buna sa fundamentare teoretica si usurinta cu care se poate
reprezenta un volum mare de date, devenind foarte popular. A fost conceput si dezvoltat
de E.F. Codd, fiind bazat pe teoria matematica a relatiilor. Foloseste structuri de date
simple, intuitive, caracterizan-du-se prin inexistenta pointerilor vizibili pentru utilizator,
constrangeri de integritate, o multime de operatori aplicabili relatiilor, care permit
definirea, cautarea si reactualizarea datelor. Modelului relational ii este asociata teoria
normalizarii.

4
In 1976, proiectul System/R dezvoltat in California a constituit punctul de plecare
pentru realizarea unuia dintre cele mai cunoscute SGBD-uri, DB2. In 1979 a fost lansat
cu succes primul SGBD relational comercial, Oracle, care ocupa un segment de piata
foarte mare. Astfel, Oracle Corporation a devenit liderul produselor software dedicate
mediilor de lucru cu bazele de date.
Odata cu marirea vitezei de acces si utilizarea limbajelor de generatia a IV-a
(SeQuel, SQL), SGBD-urile relationale s-au impus pe piata bazelor de date.
Sistemele de gestiune a bazelor de date relationale (SGBDR) de „categorie grea”
precum Oracle, DB2, Informix, Microsoft SQL Server, asigura accesul simultan a mii de
utilizatori la aceeasi baza de date. Piata acestui segment este rezervata sistemelor de
operare Unix, Windows NT, Windows 2000 si Novell Netware.
Fata de modelele ierarhice si retea, modelul relational prezinta cateva avantaje,
precum:
 independenta logica si fizica
 pune la dispozitia utilizatorilor limbaje ne-procedurale
 optimizeaza accesul la date
 imbunatateste integritatea si confidentialitatea datelor, etc.
Un SGBD relational suporta intr-o forma limitata cunostinte (asertiuni generale si
abstracte asupra faptelor), prin constrangerile de integritate, iar restul trebuie integrate in
programele de aplicatie, ceea ce genereaza probleme datorita imposibilitatii partajarii
cunostintelor intre utilizatori.
S-a observat ca modelul relational de baze de date nu poate reprezenta aspecte
complexe ale realitatii (documente incluzand date compuse, obiecte dinamice, imagini,
sunete, grafuri, liste). Astfel, cercetarile s-au indreptat asupra modelului relational
orientat pe obiecte.
3. SGBD-urile relationale orientate pe obiecte folosesc obiecte
pentru reprezentarea informatiei. Obiectul este un tip de data si nu informatia efectiva
(instanta). Tipurile de date atomice permit stocarea datelor fara utilizarea unui spatiu pe
disc suplimentar. Insa crearea unui tip de date compus conduce automat la asocierea unui
OID (Object IDentifier - identificatorul obiectului) fiecarei instante de acest tip care
necesita spatiu de stocare pe disc.
Un sistem de gestiune relational orientat obiect foloseste indecsi asupra
elementelor unei multimi, utili atat in interogari simple, cat si in operatii JOIN pentru
doua sau mai multe tabele intre care exista o relatie many-to-many (multi-la-multi).
Dintre SGBD-urile relationale orientate obiect se remarca Oracle versiunile
Oracle 8 si Oracle 9i, PostgreSQL, care folosesc ca limbaj de interogare SQL.
Standard-ul SQL-3, aparut in 1999 ofera posibilitati pentru mosteniri multiple,
polimorfism, incapsulare, suport pentru sisteme bazate pe gestiunea cunostintelor,
permite declararea campurilor de tip LOB (Large OBject), care pot satisface nevoile
multimedia tot mai accentuate. Insa LOB nu reprezinta un tip de date, deoarece nu poate
fi folosit in clauza WHERE a unei interogari si nu sunt permise operatii cu variabile sau
campuri declarate LOB.
Oracle Server este cel mai utilizat sistem de gestiune de baze de date relationale
orientate pe obiecte. Versiunile Oracle 8 si Oracle 9i furnizeaza facilitati precum:
 Tipuri de date definite de utilizator (obiect si colectie), tip de date predefinit
REF (referinta de obiect)
 Tipuri predefinite pentru obiecte de dimensiuni mari (LOB-large objects,
BLOB, CLOB, NCLOB, Bfile)
5
 Vederi obiect. O vedere obiect constituie o colectie de tabele normalizate,
permitand manipularea datelor ca pe niste obiecte.
Precompilatorii Oracle (Pro*C/C++) permit folosirea tipurilor de date definite de
utilizator in programe C si C++. Oracle Call Interface (OCI) furnizeaza facilitati pentru
accesarea si manipularea obiectelor din Oracle 8. Object Type Translator (OTT)
genereaza automat declaratii in C pentru tipuri de date obiect definite in Oracle 8.
Postgres95 conceput in 1985 la Universitatea Berkeley din California,
dezvoltat in 1996 si redenumit PostgreSQL, este definit ca fiind relational, extensibil, cu
orientare obiectuala. Acesta include elemente de limbaj compatibile ISO SQL, ANSI
SQL/89, SQL/92 si ANSI SQL/98. PostgreSQL este construit conform unui model
client/server; in fiecare sesiune sunt implicate trei procese Unix cooperante: postmaster
(proces supervizor), backend (proces server de baze de date) si frontend (proces cerand
conexiune la backend).
 Include interfete de programare pentru C, C++, Perl5, PHP (limbaj de
script pentru scrierea de pagini Web generate dinamic), driver JDBC pentru
programatorii Java
 Ofera interfete grafice
 Sunt suportate baze de date de mari dimensiuni (peste 200Gbytes), dar
performantele scad vizibil la baze mai mari de 5 Gbytes pe masini cu procesor pe 32 biti.
4. Sistemele de gestiune a bazelor de date inteligente, din anii
`80, utilizau concepte ale inteligentei artificiale. A aparut astfel necesitatea utilizarii si
gestionarii unor volume mari de cunostinte.
SGBD-urile deductive prelucreaza baze de date inteligente si gestioneaza
cunostinte relativ la baze de date, care sunt, in general, relationale. Utilizand programarea
logica, acestea permit deducerea de noi informatii, plecand de la informatiile stocate in
baza de date. Exista pachete software care permit interfatarea bazelor de date relationale
cu sisteme expert. De exemplu, NEXPERT OBJECT Interfaces reprezinta un ansamblu
de interfete ale sistemelor expert de tip NEXPERT OBJECT cu SGBD-urile Oracle si
Ingres. Pentru eliminarea neajunsurilor centralizarii datelor, s-au dezvoltat prototipuri de
sisteme de date distribuite.
5. SGBD-urile distribuite utilizeaza calculatoare diferite
interconectate printr-o retea de comunicatie si ofera flexibilitate in descompunerea
tranzactiilor in componente ce pot fi realizate local sau transportate altor noduri.
SDD-1 a fost primul SGBD distribuit si implementat in 1979 pe calculatoare
DEC-20. Statiile sunt conectate prin reteaua ARPANET si utilizeaza ca SGBD local
Datacomputer. SDD-1 suporta modelul relational.
Ingres distribuit este realizat la Universitatea din California. Se mai pot cita ca
SGBD-uri distribuite existente: R*, DDM, Porel, Sirius-Delta, Multibase, DDTS
(Distributed Testbed System), etc.
Principalul avantaj al SGBD-urilor distribuite il constituie cresterea
performantelor sistemului prin partajarea si replicarea datelor dar si existenta mai multor
procesoare. Bazele de date distribuite prezinta si o serie de dezavantaje legate de
complexitatea proceselor, dificultatea realizarii controlului concurentei si al tranzactiilor.
6. Modelele semantice si functionale au permis cresterea
continutului semantic al datelor din baze de date. Valorile atributelor asociate entitatilor
se pot obtine direct (in modelul semantic) sau prin intermediul unor functii aplicabile
entitatilor (in modelul functional).

6
7. Bazele de date multimedia imbina caracteristicile orientate pe
obiecte cu regulile deductive specifice inteligentei artificiale aplicate informatiilor de tip
multimedia (texte, obiecte grafice, imagini statice, video digitizat, secvente audio).
8. Sistemele de gestiune a bazelor de date orientate obiect
(SGBDOO), aparute dupa 1990, permit integrarea descrierii structurale si
comportamentale. Acestea furnizeaza posibilitati superioare de deductie prin folosirea
ierarhiilor de clase si a mostenirii. Schema unei baze de date orientate obiect include
definitiile structurale (atribute si tipuri) si comportamentale (metode) ale obiectelor.
Un sistem de gestiune a bazelor de date orientate obiect realizeaza o modelare
superioara a informatiei, permite folosirea obiectelor dinamice si asigura imbunatatirea
interfetei cu utilizatorul. Prin posibilitatea integrarii multimediei, SGBDOO permit
crearea de tipuri spaţiale de date pentru sisteme informatice geografice. Exista posibilitati
de reprezentare a hartilor si a locatiilor acestora care interactioneaza cu utilizatorul sau
posibilitati de analiza a imaginilor, a sunetelor.
Existenta unor categorii de probleme pentru care solutia obiectuala este singura
acceptabila a determinat crearea de SGBD-uri orientate obiect „pure”, cum ar fi:
GemStone, ObjectStore, Ontos, Raima, Versant, etc.
ObjectStore este disponibil pentru platformele Windows si UNIX. Dintre
facilitatile sale se pot aminti:
- Asigura controlul concurentei si a integritatii referentiale
- Interfata Java: permite crearea de aplicatii Java care sa stocheze si sa manevreze
obiectele intr-un SGBD multi-user de performanta si accesibilitate deosebite. Aplicatiile
Java pot accesa obiecte native C++ existente in baza de date.
Sybase Build Monumentum ofera utilizatorilor de calculatoare Macintosh si celor
bazate pe sistemul Windows facilitati de lucru cu baze de date orientate pe obiect.
Multiprocesarea in retele distribuite este realizata numai din punct de vedere "client".
Build Monumentum detine un administrator care gestioneaza procese in multithreading.
Situat in gama SGBDR-urilor, Build Monumentum este considerat de specialisti ca fiind
un produs mai reusit decat produsele din aceeasi gama ale companiilor Oracle sau
Informix. In cadrul sistemului Sybase System 10, Server-ul Sybase SQL a fost primul
care a utilizat cod compilat/partajat atat pentru gestionarea bazelor de date locale cat si
pentru trimiterea de apeluri de proceduri RPC la alte servere aflate la distanta.
Marii producatori de sisteme relationale au constientizat avantajele bazelor de
date orientate obiect si au dezvoltat noi versiuni de SGBD-uri relationale orientate obiect,
precum Oracle 8, Oracle 9i, Ingres, Sybase.
Unele SGBD-uri orientate pe obiecte ofera suport pentru tehnologii deschise, cum
ar fi: COM, CORBA, XML, DAO, OLEDB sau ADO. Suportul oferit nu este universal
pentru toate bazele de date obiect.
Domeniile in care sunt folosite cu succes BDOO sunt gestiunea retelelor sau a
informatiilor, tranzactiile financiare, sistemele geografice, cartografie digitala,
determinand o dezvoltare rapida a modelului orientat obiect.
SGBD-urile orientate obiect existente ofera functionalitati si performante
superioare in administrarea datelor complexe si voluminoase. Limbajele de interogare si
de manipulare (extensii ale SQL) ofera acestora un plus de rigoare. Totusi, tehnicile de
acces la obiecte sunt inca perfectibile deoarece timpii de rãspuns sunt adesea
nesatisfacatori.

7
Capitolul 2

Modelul relational al datelor

Prezentare generala
Modelul relational a fost conceput si dezvoltat de E. F. Codd, fiind un model
formal de organizare conceptuala a datelor, destinat reprezentarii datelor si legaturilor
dintre date, bazat pe teoria matematica a relatiilor.
Datele se prezinta sub forma unor tabele (relatii) in care liniile constituie
inregistrari, iar coloanele sunt atribute ce caracterizeaza aceste inregistrari. Orice
interogare (sau consultare, extragere de date) este tot o relatie.
Din punctul de vedere al manipularii datelor, modelul relational este orientat spre
multimi. Modelul relational nu este orientat spre sistemul de calcul, deci nu include
regulile, structurile si operatiile referitoare la implementarea fizica a unui sistem de baze
de date.
Modelul relational a permis introducerea unui limbaj de interogare, neprocedural
de manipulare a datelor.
Un model relational se caracterizeaza prin trei elemente:
 Structura relationala a datelor
 Operatorii modelului relational
 Regulile de integritate care guverneaza folosirea cheilor in model.
Aceste trei elemente corespund celor trei componente ale ingineriei software:
informatie, proces si integritate.

Organizarea datelor
Structura datelor impune definirea notiunilor: relatie, schema relationala, valoare
nll, tabel vizualizare (view), care pot fi exprimate formal, uzual sau fizic (tabelul 1):

Tabelul 1.
Formal Uzual Fizic
relatie tabel fisier
tuplu linie inregistrare
atribut coloana camp
domeniu tip de data tip de data

Un domeniu este o multime de valori care poate fi definita fie enumerand


elementele componente, fie definind o proprietate distinctiva a domeniului valorilor.

8
Fie D1, D2, …, Dn domenii finite, nu neaparat disjuncte. Atunci produsul cartezian
D1 X D2 X …X Dn este definit de multimea tuplurilor (v1, v2, …, vn), unde v1 є D1, v2 є D2,
…, vn є Dn, unde n este aritatea tuplului:
D1 X D2 X …X Dn = {(v1, v2, …, vn) / vi є Di, i =1, …, n}
O relatie R pe multimile D1, D2, …, Dn este o submultime a produsului cartezian
D1 X D2 X …X Dn, deci este o multime de tupluri.
O relatie poate fi considerata o multime finita de functii.
Atribut: Asociem fiecarui domeniu Di un atribut Ai si definim relatia R = { f1, f2,
…, fn }unde fi : { A1, A2, …, An} D1 X D2 X …X Dn si fi (Aj) є Dj,  i,j.
Schema relationala: Multimea numelor atributelor corespunzatoare unei relatii R
defineste schema relationala a relatiei respective si se noteaza R(A1, A2, …, An).
Se poate reprezenta o relatie printr-un tabel bidimensional in care fiecare linie
corespunde unui tuplu si fiecare coloana corespunde unui domeniu din produsul
cartezian. O coloana ii corespunde unui atribut. Numarul atributelor defineste gradul
relatiei, iar numarul de tupluri din relatie defineste cardinalitatea relatiei.
O valoare null este un atribut necunoscut sau care nu poate fi definit.
Un tabel vizualizare ( view, filtru, relatie virtuala, vedere) este un filtru asupra
tabelului initial care contine numai informatia necesara unei anumite abordari sau
aplicatii. O vedere este virtuala deoarece datele continute nu sunt in realitate memorate
intr-o baza de date. Exista limitari in folosirea acestor tabele: de exemplu, nu se
recomanda inserarea, reactualizarea si stergerea.

Reguli de integritate
Regulile de integritate sunt asertiuni pe care datele din baza de date trebuie sa le
satisfaca. Exista trei tipuri de constrangeri structurale:
 de cheie
 de referinta
 de entitate
care constituie multimea minimala de reguli de integritate pe care trebuie sa le respecte
un sistem de gestiune a bazelor de date relationale.
Restrictiile de integritate minimale sunt definite in raport cu notiunea de cheie a
unei relatii.
O cheie a unei relatii R este o multime k de atribute astfel incat:
1. pentru orice doua tupluri t1, t2 ale lui R, sa avem t1(k) # t2(k)
2. nu exista nici o submultime proprie a lui k avand proprietatea 1.
Fiecare relatie are cel putin o cheie. Daca exista mai multe chei, exista o cheie
primara.
Cheie externa (straina): Fie schemele relationale R1(P1, S1) si R2(S1, S2), unde P1
este cheie primara in R1 si S1 - cheie secundara in R1, S1 – cheie primara in R2. Atunci S1
este cheie externa pentru R1.
Reguli de integritate structurata: Modelul relational respecta 3 reguli de
integritate structurata:
 Regula 1: unicitatea cheii – Cheia primara trebuie sa fie unica si minimala.
 Regula 2: integritatea entitatii – Atributele cheii primare trebuie sa fie diferite de
valoarea null.
 Regula 3: integritatea referirii – O cheie externa trebuie sa fie ori null in intregime,
ori sa corespunda unei valori a cheii primare asociate.
9
Proiectarea modelului relational
Diagrama E/R (entitate-relatie) este un model neformalizat pentru reprezentarea
grafica a structurii relationale.
Modelul E/R imparte elementele unui sistem real in doua categorii:
 entitati si
 relatii (legaturi, asocieri) intre aceste enti tati.
O entitate poate fi o persoana, un loc, concept, activitate, eveniment care este
semnificativ pentru modelare.
O relatie (asociere) este o comunicare intre doua sau mai multe entitati, un raport
intre entitati.
Pentru obtinerea schemei conceptuale a bazei de date relationale, se pleaca de la
modelele conceptuale ale datelor (diagrama E/R).
Exemplu: Fie o institutie ce contine mai multe departamente, in care lucreaza
salariati. Salariatii sunt atasati unor proiecte, executand in cadrul acestora diferite sarcini.
Structura generala a modelului analizat este prezentata in figura 1.:

Se pot defini urmatoarele:


1. Entitati - SALARIAT, DEPARTAMENTE, PROIECT, SARCINA
Observatii:
 Entitatile devin tabele in modelele relationale.
 Cheia primara identifica unic o entitate si face distinctie intre valori diferite
ale entitatii.
2. Relatii - in modelul relational, devin tabele speciale sau coloane speciale care refera
chei primare (inscris_la, lucreaza_in, conduce, apartine)
3. Atribut – o proprietate descriptiva a unei entitati / relatii

Proiectarea diagramei entitate-relatie (E/R)


Se folosesc urmatoarele reguli:
 Entitatile se reprezinta prin dreptunghiuri;
 Relatiile se reprezinta prin arce neorientate;
 Atributele ce sunt chei primare sunt specificate prin simbolul #
 Cardinalitatea (numarul de tupluri ale relatiei): cardinalitatea minima
foloseste simbolurile ‚(‚ si ‚)’, iar cardinalitatea maxima se specifica fara
paranteze.
Cazurile speciale luate in considerare:
 O entitate dependenta: SARCINA depinde de PROIECT. Cheia primara a
unei entitati dependente include cheia primara a sursei (nr._proiect).
 Clasa este un grup de subentitati, clasificate dupa valorile unor atribute.
Se aliniaza vertical.

10
 Se pot defini relatii recursive. Exemplu:
SALARIAT_supervizeaza_SALARIAT.
Diagrama E/R este prezentata in figura 2.:

Din diagrama E/R se obtine schema conceptuala a bazei de date relationale. Se


reprezinta entitatile si legaturile dintre ele sub forma unor tabele speciale (relatii).
Regulile de conversie se bazeaza pe minimizarea numarului de valori null si a
redundantei datelor, astfel:
a) Transformarea entitatilor se bazeaza pe regulile:
 Entitatile independente devin tabele independente. Cheia primara nu contine
chei externe.
Exemplu: entitatea independenta SALARIAT genereaza un tabel independent
pentru care atributul cod_salariat este cheia primara.
 Entitatile dependente devin tabele dependente. Cheia primara a entitatilor
dependente contine cheia primara a entitatii de care depinde plus unul sau mai
multe atribute aditionale.
Exemplu: cheia primara a entitatii SARCINA este formata din nr._proiect (cheia
primara a entitatii PROIECT) si nr._sarcina.
 Subentitatile devin subtabele.
b) Transformarea relatiilor foloseste regulile:
 Relatiile 1:1 si 1:n devin chei externe. Astfel, relatia „conduce’ devine
coloana in tabelul DEPARTAMENTE si relatia ‚lucreaza_in’ este coloana in
tabelul SALARIAT.
- Simbolul „X” marcheaza plasamentul cheii externe.
- Simbolul „X” - cheia externa este continuta de cheia primara.
 Relatia m:n devine un tabel special (tabel asociativ) care are 2 chei externe
pentru cele 2 tabele asociate. Cheia primara este formata din compunerea celor 2
chei externe plus coloane aditionale. Se specifica punctat.
c) Transformarea atributelor foloseste regulile:
 Un atribut singular devine o coloana.

11
 Atributele multiple devin tabele dependente ce contin cheia primara a entitatii
si atributul multiplu.
Exemplu: un SALARIAT are mai multe numere de telefon  nr._telefon este
atribut multiplu care genereaza tabelul dependent TELEFON.
Concluzie: din diagrama E/R se obtine diagrama conceptuala (figura 3.) pentru
proiectarea modelului relational prin:
 adaugarea tabelelor asociative
 marcarea cheilor externe.

Schemele relationale obtinute sunt:


1. SALARIAT(cod_salariat#, nume, prenume, salariu, lucreaza_in)
2. DEPARTAMENTE(cod_departament#, nume, localitate, conduce)
3. INSCRIS_LA(cod_salariat#, nr._proiect#, functie)
4. PROIECT(nr._proiect#, descriere, buget_alocat)
5. SARCINA(nr._proiect#, nr._sarcina#, stare)
6. TELEFON(cod_salariat#, nr._telefon#)
Deci tipurile de tabele folosite in diagrama E/R pot fi:
 independente
 dependente
 subtabele
 tabele asociative
Semnificatia fiecarui tabel si relatia dintre cheie primara si cheie externa sunt
prezentate in tabelul 2:
Tabelul 2.
tabel reprezinta cheia primara
independent entitate independenta nu contine chei externe
subtabel subentitate contine o cheie externa
dependent entitate dependenta / atribute multiple contine o cheie externa si
una sau mai multe coloane
aditionale
asociativ Relatie m:n / relatii de tip 3 contine 2 sau mai multe
chei externe si optional
coloane aditionale

12
O relatie de tip 3 este o legatura intre 3 entitati:
SALARIAT_asociat_la_PROIECT_in_FUNCTIA

Algebra relationala
A fost introdusa de E. F. Codd ca o multime de operatii formale actionand asupra
unor relatii si avand ca rezultat alte relatii.
Baza teoretica fundamentala pentru limbajele de interogare relationale o
constituie cei opt operatori introdusi de Codd pentru manipularea relatiilor.

Operatorii algebrei relationale


 SELECT (operatorul selecţie) extrage tupluri (linii) ce satisfac o condiţie specificată;
 PROJECT (operatorul proiecţie) extrage atributele specificate;
 UNION (operatorul reuniune) reuneşte două relaţii. Operatorul UNION elimină
automat liniile identice din rezultat;
 INTERSECT (operatorul intersecţie) extrage tupluri care apar in ambele relatii; este
operator binar comutativ: R  S  R  ( R  S )  S  ( S  R)
 DIFFERENCE (operatorul diferenţa) extrage tupluri care apar intr-o relatie, dar nu
apar in cealalta. Este operator binar necomutativ.
 PRODUCT (operatorul produs cartezian) generează toate perechile posibile de
tupluri, primul element al perechii fiind din prima relaţie, al doilea element din a doua
relaţie, ş.a.m.d.
Fie R, S relatii de aritate n, respectiv m. Produsul cartezian al lui R cu S este
multimea tuplurilor de aritate n+m unde primele n componente formeaza un tuplu in R,
iar ultimele m componente formeaza un tuplu in S.
 DIVISION (operatorul diviziune) extrage valorile atributelor dintr-o relaţie, care
apar în toate valorile atributelor din cealaltă relaţie, fiind operator binar.
Fie două relaţii R(n) şi S(m). Atunci DIVISION(R, S) (sau DIVIDE(R, S)) permite
selectarea acelor tupluri de dimensiune n-m la care, adăugând orice tuplu din S, se obţine
un tuplu din R.
Operatorul DIVISION este legat de cuantificatorul universal ‚  ’ care nu există
în limbajul SQL, dar poate fi simulat astfel: Fie un predicat P(x). Atunci are loc
identitatea:

 JOIN (operatorul de compunere, de joncţiune) permite extragerea informaţiilor din


mai multe relaţii corelate. Joncţiunea este o combinaţie de produs cartezian şi selecţie.

Regulile lui Codd

13
In 1985, Codd a publicat un set de 13 reguli in raport cu care un SGBD poate fi
apreciat ca relational:
Regula 1 – regula gestionarii datelor – Un SGBD relational trebuie sa fie capabil
sa gestioneze o baza de date prin posibilitatile sale relationale.
Regula 2 – regula reprezentarii informatiei – Intr-o baza de date relationala,
informatia este reprezentata la nivel logic sub forma unor tabele (relatii).
Regula 3 – regula accesului garantat la date – Fiecare valoare dintr-o baza de
date relationala trebuie sa poata fi adresata in mod logic printr-o combinatie formata din
numele relatiei, valoarea cheii primare si numele atributului.
Regula 4 – regula reprezentarii informatiei necunoscute – Un sistem relational
trebuie sa permita utilizatorului definirea unui tip de date numit null pentru reprezentarea
informatiei necunoscute la momentul respectiv.
Regula 5 – regula dictionarelor de date – Asupra descrierii bazei de date
(informatii relative la relatii, vizualizari, indecsi) trebuie sa se poata aplica aceleasi
operatii ca si asupra datelor din baza de date.
Regula 6 – regula limbajului de interogare – Trebuie sa existe cel putin un limbaj
pentru manipularea bazei de date (limbajul SQL).
Regula 7 – regula de actualizare a vizualizarii – Un SGBD trebuie sa poata
determina daca o vizualizare poate fi actualizata si sa stocheze rezultatul interogarii intr-
un dictionar de tipul unui catalog de sistem.
Regula 8 – regula limbajului de nivel inalt – Regulile de manipulkare asupra unei
relatii luata ca intreg sunt valabile atat pentru operatiile de regasire a datelor, cat si asupra
operatiilor de inserare, actualizare si stergere a datelor.
Regula 9 – regula independentei fizice a datelor – Programele de aplicatie nu
depind de modul de stocare a datelor sau de modul de acces la date.
Regula 10 – regula independentei logice a datelor – Programele de aplicatie
trebuie sa fie transparente la modificarile de orice tip efectuate asupra datelor.
Regula 11 – regula independentei datelor din punct de vedere al integritatii –
Regulile de integritate trebuie sa fie definite intr-un sublimbaj relational, nu in programul
de aplicatie.
Regula 12 – regula independentei datelor din punct de vedere al distribuirii
datelor – Distribuirea datelor pe mai multe calculatoare dintr-o retea de comunicatii de
date, nu trebuie sa afecteze programele de aplicatie.
Regula 13 – regula versiunii procedurale a unui SGBD – Orice componenta
procedurala a unui SGBD trebuie sa respecte aceleasi restrictii de integritate ca si
componenta relationala.
Deoarece regulile lui Codd sunt prea restrictive pentru a fi respectate de un SGBD
relational, s-au formulat criterii minimale de definire a unui sistem de gestiune relational.
Un SGBD este minimal relational daca:
 toate datele bazei sunt reprezentate prin valori in tabele;
 nu exista pointeri observabili de catre utilizator;
 sistemul suporta operatorii relationali de proiectie, selectie si compunere
naturala, fara limitari impuse din considerente interne.
Un SGBD este complet relational daca este minimal relational si satisface in plus
conditiile:
 sistemul suporta restrictiile de integritate de baza (unicitatea cheii primare,
constrangerile referentiale, integritatea entitatii)
 sistemul suporta toate operatiile de baza ale algebrei relationale.

14
Mecanismele de lucru de care dispune un SGBD relational sunt:
 un limbaj relational pentru descrierea datelor la nivel fizic, logic si conceptual
 un limbaj relational pentru manipularea datelor
 mecanisme pentru controlul integritatii semantice a datelor
 mecanisme pentru optimizarea cererilor de date
 mecanisme pentru asigurarea coerentei datelor
 utilitare pentru generarea de rapoarte, aplicatii sau statistici referitoare la starea si
activitatea bazei de date.

Normalizarea relatiilor
Normalizarea relatiilor conceptuale permite obtinerea de relatii „moleculare”, fara
a pierde nimic din informatie, pentru a elimina redundanta si anomaliile reactualizarii
informatiilor. Este un proces de ameliorare progresiva a unei scheme conceptuale initiale
a bazei de date relationale. Dupa fiecare etapa de ameliorare, relatiile din baza de date
ating un anumit grad de perfectiune, deci se afla intr-a anumita forma normala.
Trecerea unei relatii dintr-o forma normala in alta, presupune eliminarea unui
anumit tip de dependente nedorite, care sunt transformate in dependente care nu provoaca
anomalii (admisibile).
Procesul de ameliorare trebuie sa satisfaca cerintele:
 sa garanteze conservarea datelor
 sa garanteze conservarea dependentelor dintre date
 sa reprezinte o descompunere minimala a relatiilor initiale.
Necesitatea normalizarii deriva din problemele generate de anomalii. Anomaliile
care apar in lucrul cu baze de date se produc datorita dependentelor care exista intre
datele bazei de date. Exista anomalii:
 la inserare de date
 la modificare / stergere
 redundanta in date (aparitii repetate)
 probleme de reconexiune.
Normalizarea permite:
 suprimarea redundantei logice
 evitarea anomaliilor la reactualizare
 rezolvarea problemei reconexiunii.
Exista o teorie matematica a normalizarii, al carei autor este E. F. Codd, conform
careia, se construiesc tabele standard (forme normale).
Orice forma normala se obtine aplicand o schema de descompunere. Exista 2
tipuri de descompuneri:
- descompuneri ce conserva dependentele ( descompunerea unei relatii R in proiectii
k

R1, …, Rk: R  Ri )


i 1

- descompuneri fara pierderi de informatie ( regula lui Casey-Delobel).

Regula Casey-Delobel
Fie R(A) o schema relationala si α, β, γ o partitie a lui A. Presupunem ca α
determina functional pe β. Atunci:

15
R ( A)  JOIN (   R,    R ) ,
unde αUβ este multime atributelor care
intervin in dependentele functionale si αUγ este reuniunea determinantului cu restul
atributelor lui A.

Formele normale ale relatiilor dintr-o baza de date relationala sunt definite in
raport cu anomaliile care pot aparea in lucrul cu aceste relatii.
1. Prima forma normala (FN 1)
O relatie este in FN 1 daca fiecarui atribut care o descompune ii corespunde o valoare
indivizibila (atomica). Un tuplu nu trebuie sa contina atribute sau grupuri de atribute
repetitive.
Algoritmul AFN-1 care aduce o relatie in FN 1 elimina atributele compuse si cele
repetitive.
2. Forma normala 2 (FN 2)
O relatie este in FN 2 daca si numai daca:
o Relatia R este in FN 1
o Fiecare atribut care nu este cheie (nu participa la cheia primara) este dependent de
intreaga cheie primara.
Pentru a obtine o relatie in FN 2 se poate aplica regula Casey-Delobel: fie relatia
R(k1, k2, x, y), k1, k2 definesc cheia primara, x si y sunt multimi de atribute astfel incat k 1
 x ( rezulta ca R nu este in FN 2). Solutia este inlocuirea lui R cu doua proiectii R 1(k1,
k2, y) si R2(k1, x).
Algoritmul AFN-2 de aducere a unei relatii in FN 2 elimina dependentele functionale
partiale din cadrul unor relatii aflate in FN 1.
3. Forma normala 3 (FN 3)
O relatie R este in FN 3 daca si numai daca:
o Relatia R este in FN 2
o Fiecare atribut care nu este cheie (nu participa la o cheie) depinde direct de cheia
primara.
Din punct de vedere formal, o relatie R este in FN 3 daca si numai daca:
o Relatia R este in FN 2
o Fiecare atribut care nu este cheie (nu participa la o cheie) nu este dependent tranzitiv
de nici o cheie a lui R.
Definitie: (A este dependent tranzitiv de X)
Fie R o relatie, X o submultime de atribute ale lui R si A un atribut al relatiei R. A
este dependent tranzitiv de X daca: () y astfel incat x  y si y  A (A  y si y nu
determina pe X).
Pentru a obtine o relatie FN 3 se poate aplica regula de descompunere Casey-Delobel.
Algoritmul AFN-3 pentru aducerea unei relatii FN 2 in FN 3 elimina dependentele
functionale tranzitive.
Forma normala Boyce_Codd(BCNF)
O relatie R este in forma normala Boyce-Codd daca si numai daca fiecare
determinant este o cheie candidat (sau pentru orice dependenta functionala totala X  A,
X este o cheie a lui R).
Algoritmul ABCNF pentru aducerea unei relatii in BCNF elimina dependentele
functionale ai caror determinanti nu sunt chei candidat.

16
4. Forma normala 4 (FN 4)
O relatie BCNF este in FN 4 daca pentru orice multidependenta elementara de forma
X  Y, X este o supercheie a lui R.
Aducerea relatiilor in FN 4 presupune eliminarea dependentelor multivaloare atunci
cand sunt mai mult de una in cadrul unei relatii.
5. Forma normala 5 (FN 5)
Relatia R este in FN 5 daca si numai daca:
o Relatia R este in FN 4
o Nu contine dependente ciclice.
Algoritmul AFN-5 pentru aducerea unei relatii FN 4 in FN 5 elimina join-
dependentele.
Exemplu:

R = JOIN (JOIN(R1, R2), R3)

17
Capitolul 3

Limbajul SQL - crearea tabelelor in Visual FoxPro

Prezentare generala
Limbajul SEQUEL (Structured English as Query Language) a fost prezentat
pentru prima data ca un limbaj de interogare in anul 1974, de catre Chamberlin si Boyce.
In 1980, Chamberlin a schimbat denumirea SEQUEL in SQL (Structured Query
Language – limbaj structurat de interogare).
ANSI (Institutul National American pentru Standarde) a publicat in 1986
standardul SQL ANSI 1986, care definea comenzile de baza ale limbajului SQL, inclusiv
pentru crearea de tabele si vederi (create table si create view). Limbajul SQL – 86 nu
continea optiuni de modificare a structurii sau stergere a obiectelor bazei (alter, drop) si
comenzi pentru acordare si revocare de drepturi utilizatorilor (grant si revoke).
Astfel, au fost necesare revizuirea si extinderea limbajului. In 1989 apare limbajul
SQL – 89 recunoscut ca fundament al multor SGBD-uri comerciale. Totusi, variantele
comerciale ale diferitilor producatori erau incompatibile la nivel de detaliu.
In 1992, apare versiunea SQL – 92 cu multe facilitati incluse, precum:
 Jonctiunea externa (outer join)
 Modificarea schemei bazei de date (alter, drop, grant, revoke)
 Modificari si stergeri referentiale in cascada
 Amanarea verificarii restrictiilor
 Niveluri de consistenta a tranzactiilor.
In 1999 a fost publicat un standard SQL – 3 care iese din sfera relationalului si a
normalizarii relatiilor, asa cum au fost formulate de Codd. Principalele orientari ale
limbajului SQL – 3 vizeaza transformarea acestuia intr-un limbaj complet, in vederea
definirii si gestionarii obiectelor complexe si persistente. Astfel, au fost introduse:
 Mosteniri multiple, polimorfismul, incapsularea, caracteristici preluate din
limbajele orientate pe obiecte
 Tipuri de date definite de utilizator
 Suport pentru sisteme bazate pe gestiunea cunostintelor
 Interogari recursive
 Instrumente de administrare a datelor.

18
Tipurile de date definite in standardul SQL – 92 sunt urmatoarele:
- SMALLINT pentru numere intregi scurte; ocupa 4 pozitii reprezentate pe 16 biti
- INTEGER sau INT pentru numere intregi (9 pozitii reprezentate pe 32 biti)
- NUMERIC (p, s) sau DECIMAL (p, s) sau DEC (p, s) pentru memorarea datelor
reale, cu un total de p pozitii, dintre care s la partea fractionara
- FLOAT pentru date reale reprezentate in virgula mobila (20 pozitii pentru mantisa)
- REAL pentru date reale exprimate in virgula mobila, cu precizie mai mica decat
FLOAT, dar la nivelul de intrare fiind identice)
- DOUBLE PRECISION pentru date reale exprimate in virgula mobila, in dubla
precizie (30 pozitii pentru mantisa)
- CHAR(n) sau CHARACTER(n) pentru date de tip sir de caractere de lungime n
(maxim 240)
- VARCHAR(n) sau CHAR VARYING(n) sau CHARACTER VARYING(n) pentru
date de tip sir de caractere de lungime variabila, maxim 254 caractere
- DATE pentru data calendaristica
- TIME pentru ora
- TIMESTAMP pentru an, luna, zi, ora, minut, secunda, fractiuni de secunda.

Principalele tipuri de date folosite in Visual FoxPro


CHARACTER(n) sau C(n), LOGICAL sau L, NUMBER(p,s) sau N(p,s), INTEGER sau
I, DOUBLE, DATE sau D, DATETIME

Crearea unei baze de date in Visual FoxPro


Crearea unei baze de date necesita cunostinte de administrare strict legate de
produsul software de gestiune a bazei de date. Elementele tehnice si fizice caracteristice
serverelor de baze de date, cum ar fi: Oracle, SQL Server, DB2, Informix, sunt:
- Spatiile tabela (table space) folosite pentru alocarea de spatiu pe disc
pentru obiectele bazei
- Segmentele de rollback sunt obiecte utilizate de sistem pentru salvarea
datelor necesare validarii tranzactiilor
- Fisierele de date si procesele sistem asociate sistemelor de gestiune de
baze de date.
Comanda de creare a unei baze de date in limbajul SQL – Visual FoxPro este:
CREATE DATABASE [nume_baza_de_date | ?].
Argumentul nume_baza_de_date este opţional. Lipsa acestui argument determină
deschiderea ferestrei de dialog Create, în care se cere introducerea unui nume pentru
fişierul bază de date .dbc.

Aplicatie: Să se creeze o bază de date FIRMA care să gestioneze informaţii despre


angajaţii din departamentele unei firme, utilizand comenzile SQL şi Visual Foxpro.
Comanda de creare a bazei de date FIRMA:
CREATE DATABASE firma

19
Proiectarea bazei de date
Baza de date FIRMA care gestionează informaţii despre angajaţii departamentelor
unei firme conţine următoarele tabele:
 DEPART (departamente), cu detalii despre departamente;
 ANG (angajaţi), cu toţi angajaţii firmei;
 SALGRD (grade salarii), cu detalii despre gradele de salarizare.
Proiectarea bazei de date permite obţinerea schemelor relaţionale următoare:
 DEPART(nrdepart#, numedepart, loc)
 ANG(codang#, nume, functie, manager, datan, salariu, comision, nrdepart)
 SALGRD(grad#, salmin, salmax).
Tabelul DEPART conţine următoarele câmpuri:
 nrdepart – număr departament, de tip number(2), cheie primară;
 numedepart – nume departament, de tip char(14);
 loc – localitatea unde se află departamentul, de tip char(13).
Tabelul ANG conţine următoarele câmpuri:
 codang – codul angajatului, de tip number(4), cheie primară;
 nume – numele angajatului, de tip char(12);
 functie – funcţia angajatului, de tip char(16);
 manager – codul managerului angajatului, de tip number(4);
 datan – data naşterii, de tip date;
 salariu – salariul angajatului, de tip number(12,2);
 comision – comisionul angajatului, de tip number(8);
 nrdepart – numărul departamentului în care lucrează angajatul, de
tip number(2).
Tabelul SALGRD conţine următoarele câmpuri:
 grad – categoria de salarizare, de tip number(1);
 salmin – salariul minim din categoria respectivă de salarizare, de
tip number(12,2);
 salmax – salariul maxim din categoria respectivă, de tip
number(12,2).
Schema simplificată a bazei de date FIRMA ce conţine tabelele şi relaţiile dintre
ele este prezentată în figura 1:

Tabelul DEPART are cheie primară - coloana nrdepart, tabelul ANG are cheie
primară - coloana codang şi cheie externă – coloana nrdepart, iar tabelul SALGRD are
cheie primară – coloana grad.

20
Crearea tabelelor
Programul care creează tabelele, fără a stabili relaţiile dintre ele şi restricţiile, este
următorul:
clear
close databases
open database firma.dbc
create table depart( nrdepart n(2) , numedepart c(14), loc c(13))
create table ang( codang n(4), nume c(12), functie c(16),;
manager n(4), datan d, salariu n(12,2),;
comision n(8), nrdepart n(2) )
create table salgrd( grad n(1), salmin n(12,2), salmax n(12,2))
modify database
close all
Dupa execuţia programului de mai sus, este afişată baza de date în fereastra
Database Designer (figura 2):

Adăugarea restricţiilor
În limbajul SQL se pot declara toate tipurile de restricţii pentru o bază de date relaţională:
- cheie primară – atributul PRIMARY KEY;
- unicitate – clauza UNIQUE;
- valori obligatorii (nenule) – opţiunea NOT NULL; în Visual FoxPro trebuie
declarate atributele care pot avea valori NULL;
- restricţii utilizator – implementate sub forma regulilor de validare la nivel de
câmp, înregistrare sau pot fi incluse în declanşatoare;
- restricţii referenţiale – apar datorită existenţei cheilor străine (clauza FOREIGN
KEY). Restricţiile referenţiale păstrează integritatea bazei de date la execuţia
anumitor operaţii, precum: la inserarea unei linii într-o tabelă copil sau modificarea
unei chei străine (se verifică dacă noile valori se regăsesc în liniile tabelului părinte);
la ştergerea unei linii dintr-o tabelă părinte (fie se şterg în cascadă toate înregistrările
corespondente din tabelul copil, fie se interzice ştergerea).
21
Exemple:
 Adăugarea restricţiei cheie primară pentru coloana nrdepart (tabelul depart):
alter table depart add primary key nrdepart tag nrdepart
Vizualizarea (modificarea) structurii (inclusiv cheia primară) se face folosind comanda
modify structure  Table Designer  eticheta Indexes (figura 3):

 Adăugarea regulii de validare la nivel de câmp: numedepart să accepte numai


litere mari:
ALTER TABLE depart ALTER COLUMN numedepart char(14) ;
CHECK(numedepart = upper(numedepart)) ERROR 'litere mari'
Vizualizarea regulii de validare se face folosind comanda: modify structure  Table
Designer  eticheta Fields, selectare câmp, secţiunea Field validation, Rule şi Message
(figura 4):

 Adăugarea restricţiei ca loc să facă parte din lista: Bucureşti, Ploieşti, Braşov,
Câmpina, Arad, Iaşi
ALTER TABLE depart ALTER COLUMN loc char(13) ;
CHECK(inlist(loc,'Bucuresti','Ploiesti', 'Brasov', 'Campina', 'Arad',; 'Iasi'))
ERROR 'Bucuresti, Ploiesti, Brasov, Campina, Arad, Iasi'
Modificarea regulii de validare se poate realiza în fereastra Table Designer, Fields,
selectare câmp, Rule, Expression Builder (figura 5):

22
 Adăugarea restricţiei de cheie primară pentru coloana codang (tabelul ang),
folosind Table Designer: eticheta Indexes  numele indexului – codang, tipul indexului
– primary, ca etichetă – expresia codang (figura 6):

 Adăugarea regulii de validare la nivel de câmp: nume să aibă prima literă mare,
iar celelalte litere mici şi funcţie să aibă numai litere mari – în mod vizual (fereastra
Table Designer / Fields / Field validation / Expression Builder), figura 7:

23
 Adăugarea restricţiei NULL pentru coloanele manager şi comision:
ALTER TABLE ang ALTER COLUMN manager null
ALTER TABLE ang ALTER COLUMN comision null
 Adăugarea cheii externe pentru tabelul ang, coloana nrdepart – coloana comună
cu coloana nrdepart (tabelul părinte depart):
ALTER TABLE ang ADD FOREIGN KEY nrdepart;
TAG nrdepart REFERENCES depart
Comanda MODIFY DATABASE permite vizualizarea relaţiei dintre tabelul părinte
‚depart’ şi tabelul copil ‚ang’ (figura 8) – coloana nrdepart este cheie primară în tabelul
părinte şi cheie externă în tabelul copil:

 Adăugarea restricţiei referenţiale următoare: la modificarea cheii primare nrdepart


din tabelul depart, să se modifice în cascadă şi valorile corespondente din tabelul copil
ang: se activează fereastra Database Designer, apare meniul Database, se alege opţiunea
Clean Up DataBase; se foloseşte opţiunea Edit Referential Integrity (figura 9):

24
- se activează eticheta Rules for Updating, apoi se alege opţiunea Cascade Updates all
related records in the child table with the new key value

 Crearea indecşilor în mod vizual, folosind Project Manager


În Visual Foxpro există următoarele tipuri de indecşi:
- Primar – pentru declararea cheii primare
- Candidat – are aceeaşi semnificaţie ca şi cel primar
- Regular – permite duplicarea valorilor, fiind folosit pentru cheile străine sau pentru
crearea de indecşi pentru optimizarea accesului la înregistrări
- Unique – generează în fişierul index doar valori unice ale expresiei de indexare.
Exemplu:
Creaţi un index pentru tabelul salgrd, coloana grad, în mod vizual:
- se deschide baza de date FIRMA folosind Project Manager;
- se selectează tabelul salgrd
- se activează butonul Modify, eticheta Indexes şi se specifică:
o numele indexului –grad; tipul Primary,
o ordinea de sortare – ascendenta şi
o expresia – grad.

Erori care pot apare în cazul folosirii indecşilor


Motorul de bază de date Visual Foxpro nu actualizează întotdeauna la timp
indecşii, după actualizările efectuate în baza de date[FoBra02]. O soluţie este verificarea
integrităţii bazei de date, astfel:
close all
open database firma
validate database recover && figura 10

25
Dacă un obiect nu este valid şi nu este refăcut automat, el trebuie şters şi
reconstruit, apoi se refac restricţiile referenţiale.

Crearea completă a tabelelor folosind un program Visual FoxPro


clear
close databases
open database firma.dbc
create table depart( ;
nrdepart number(2) primary key, numedepart char(14) ;
check(numedepart=upper(numedepart));
error 'se accepta numai litere mari', ;
loc char(13) check(inlist(loc,'Bucuresti','Ploiesti',;
'Brasov','Campina','Arad','Iasi'));
ERROR 'se accepta numai;
localitatile din lista Bucuresti, Ploiesti, Brasov, Campina,;
Arad, Iasi')

create table ang( ;


codang number(4) primary key,;
nume char(12) check(nume=proper(nume));
error 'prima litera este majuscula, celelalte - litere mici', ;
functie char(16) check(functie=upper(functie));
error 'se accepta numai litere mari' ,;
manager number(4) null, datan date ,;
salariu number(12,2),;
comision number(8) null, nrdepart number(2),;
foreign key nrdepart tag nrdepart references;
depart tag nrdepart;
)
create table salgrd( grad number(1) primary key,;
salmin number(12,2), salmax number(12,2);
26
)
modify database
close all
După execuţia programului, se creează complet baza de date FIRMA (tabelele,
restricţiile, indecşii), figura 11:

Observaţii:
 Baza de date FIRMA conţine tabelele: DEPART şi ANG în relaţie părinte – copil şi
SALGRD;
 tabelul DEPART are cheie primară – nrdepart, ANG are cheie primară – codang,
cheie externă – nrdepart şi tabelul SALGRD are cheie primară – grad;
 pentru afişarea, ştergerea sau modificarea unui tabel, se efectuează click dreapta pe
tabelul respectiv pentru alegerea opţiunii respective: Browse, Delete, Modify.

27

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