Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




SISTEME DE GESTIUNE A BAZELOR DE DATE (SGBD)

Informatica


SISTEME DE GESTIUNE A BAZELOR DE DATE (SGBD)

1. SGBD INGRES

Sistemul INGRES (INteractive Graphics and REtrieval System) a fost proiectat la universitatea Berkeley din Californiua si floseste modelul relational de baze de date. Sistemul de operare utilizat este UNIX pe DEC PDP pentru varianta universitara si diverse alte sisteme pentru varianta comerciala. In acest sistem relatiile sunt memorate sub forma de fisiere UNIX cu blocuri de 512 octeti. Tuplurile sunt reprezentate sub forma de inregistrari.



Initial INGRES a fost construit pentru limbajul de cereri QUEL (Query Language) dar ulterior el a inclus si limbajul SQL. QUEL poate fi utilizat atat interactiv (prin INGRES Terminal Monitor) cat si programabil prin intermediul unor limbaje de programare (prin Embedded QUEL sau EQUEL). Sistemul mai contine o multime de utilitare pentru construirea unor interfete prin intermediul formelor, pentru scrierea rapoartelor, pentru construirea unor grafice si alte utilitati. Sistemul poate fi folosit de mai multi utilizatori in acelasi timp, contine un modul de optimizarea cererilor, permite definirea dinamica a datelor si are un mecanism de lucru cu vederi.

In limbajul QUEL se pot utiliza instructiunile CREATE pentru crearea unui tabel de baza, INDEX pentru crearea unui index, DEFINE VIEW pentru crearea unei vederi, DESTROY pentru eliminarea unui tabel de baza, index sau vedere si MODIFY pen 11311j96l tru a schimba structura unui tabel de baza sau index.

Crearea unui tabel de baza se face prin instructiunea

CREATE tabel (definitie-coloana [, definitie-coloana ] ... )

unde definitie-coloana este de forma

coloana = tip-date [ NOT NULL ]

cu tipul de date I1, I2 sau I4 pentru intregi binari de 1, 2 si respectiv 4 bytes, F4 si F8 pentru valori in virgula mobila cu 4 si respectiv 8 bytes, MONEY pentru dolari si centi pe 16 cifre cu punct zecimal inainte de ultimele doua cifre, CHAR(n) pentru sir de n caractere, VARCHAR(n) pentru sir de cel mult n caractere si DATE pentru data si ora ce poate fi reprezentata sau absolut sau ca interval. La creare tablourile sunt considerate de tip secvential (heaps) structura lor de memorare putand fi modificata la cerere prin MODIFY.

Vederile sunt definite prin instructiuni de forma

DEFINE VIEW vedere [ ( lista-rezultat ) ] [ WHERE conditie ]

Se poate crea un index secundar pentru un tabel de baza cu comanda

INDEX ON tabel IS index ( coloana [, coloana ] ... )

Eliminarea unor tablouri de baza, indexi sau vederi se face cu

DESTROY lista

unde lista contine numele elementelor ce se elimina despartite prin virgula. Daca se elimina un tabel de baza sau o vedere se elimina automat si vederile si indexi in care acestea sunt implicate.

Instructiunea MODIFY se foloseste la schimbarea modului de memorare a unui tabel de baza sau a unui index avand forma generala

MODIFY tabel TO structura [ UNIQUE ] [ ON coloana [, coloana ] ... ]

unde structura poate fi (prefixul C indica o compresare a datelor pe disc) BTREE sau CBTREE pentru B-arbore, HASH sau CHASH pentru dispersie (se foloseste restul impartirii cu un numar drept functie de dispersie), ISAM sau CISAM pentru indexare secventiala, HEAP sau CHEAP pentru secvential si HEAPSORT sau CHEAPSORT pentru o sortare in momentul modificari (ordinea nu se pastreaza prin modificarile ulterioare).

Cu exceptia cazurilor HEAP si CHEAP operatia MODIFY elimina inregistrarile duplicat. Inregistrari duplicate pot sa apara numai in organizari de tip HEAP si HEAPSORT (cu sau fara comprimare). Dupa executarea unei operatii MODIFY trebuiesc reconstruiti toti indexi asociati tabelului respectiv.

Sistemul INGRES contine un catalog ce cuprinde informatii privind tabelele, coloanele, indexii si celelalte informatii. Aceste informatii pot fi obtinute de utilizatori cu instructiunea RETRIEVE sau cu instructiunea HELP care prezinta rapoarte predefinite.

Activarea sistemului INGRES se face cu comanda

INGMENU baza-de-date

la care sistemul raspunde prin afisarea pe ecran a unui frame numit "INGRES main menu" care permite utilizatorului sa continue lucrul cu mai multe optiuni: sa activeze diferitele componente ale sistemului (QBF, RBF, ABF, VIFRED sau VIGRAPH), sa efectueze operatii de definire date cum ar fi crearea unor tabele, sa execute interactiv operatii prin limbajele SQL sau QUEL, sa execute cereri memorate, rapoarte sau grafice si altele.

S-au construit preprocesoare ale comenzilor din QUEL pentru limbajele Ada, C, COBOL, FORTRAN, BASIC, Pascal si PL/I. Instructiunile de declarare si executabile contin in primele doua coloane "##". Se pot transmite informatii intre programul gazda si sistemul INGRES prin intermediul variabilelor. Informatii despre modul de efectuare a unei operatii se pot obtine prin instructiuni de forma

## INQUIRE_INGRES ( variabila = variabila-legatura )

unde variabila-legatura poate fi ERRORNO - pentru numarul de eroare, ROWCOUNT - pentru numarul de randuri gasit si alte variabile predefinite.

2. SGBD SYSTEM R

System R este un sistem de baze de date relationale construit de IBM, San Jose. In acest sistem relatiile pot fi imbricate una in alta tinand sema de relatii de forma unu-la-mai-multi sau se pot construi structuri multilista ce conecteaza tupluri a doua relatii si se pot crea indexi pe diferite multimi de atribute care sunt reprezentati sub forma de B-arbori (vezi cap. 6). Nu se face distinctie intre indicii principali si cei secundari.

3. SGBD ORACLE

Sistemul ORACLE este un SGBD de tip relational construit in 1979 de Oracle Corporation si avand ulterior ca interfata limbajul de cereri SQL. El contine o interfata cu limbajul gazda, un generator de aplicatii, un generator de rapoarte, un procesor de texte si altele. Generatorul de aplicatii este bazat pe dialogul de tip intrebare-raspuns permitand introducerea si validarea datelor, aplicatii de cereri si reactualizari. Generatorul de rapoarte permite editarea rapoartelor pe baza informatiilor continute in baza de date. Se pot folosi parametrii predefiniti ce se pot schimba ulterior. Astfel se pot construi prototipuri si transforma in timp daca este nevoie. Procesorul de texte permite integrarea textelor in grafice si rapoarte la iesire.

4. SGBD dBASE

5. SGBD DBTG

Un sitem de baze de date pentru modelul retea a fost pus la punct de Data Base Task Group (DBTG) care a propus o notare formala pentru retele prin limbajul de definire a datelor (DDL) si pentru vederi (Subschema DDL) si limbajul de prelucrare a datelor (DML) cu ajutorul caruia pot fi scrise programe pentru aplicatii.

Notiunea utilizata pentru reprezentarea legaturilor de tipul unu-la-mai-multi este set. Daca m este o relatie unu-la-mai-multi de la entitatea E1 la entitatea E2 pentru fiecare element e a lui E1 vom nota cu Se multimea tuturor elementelor din E2 care sunt in relatia m cu e. Evident ca pentru orice e1<>e2 multimite Ee1 si Ee2 sunt disjuncte. Multimea tuturor perechilor (Se,e) cu e din E1 formeaza un set. Pentru fiecare pereche (Se,e) e este proprietarul setului si orice component al multimii Se se numeste elementul setului. In general se spune despre E1 ca este proprietar si E2 este element in cadrul setului. O restrictie facuta de DBTG pentru seturi este ca proprietarul si elementul sa fie distincte.

Exemplul 4.1. Considerand entitatile MAGAZINE, CUMPARATORI si COMENZI se poate descrie baza de date asociata cu urmatoarele instructiuni:

RECORD MAGAZIME

1 NUMEMAG CHAR(20),

1 ADRESAMAG CHAR(30);

RECORD MARFA

1 NUMEMAR CHAR(15);

RECORD PRETURI

1 PRET REAL,

1 NUMEMAR VIRTUAL

SOURCE IS MARFA.NUMEMAR OF OWNER OF MARPR

1 NUMEMAG VIRTUAL

SOURCE IS MAGAZINE.NUMEMAG OF OWNER OF MAGPR;

RECORD CUMPARATORI

1 NUME CHAR(20),

1 ADRESA CHAR(30),

1 CONT REAL;

RECORD COMENZI

1 NR_COM INTEGER,

1 CANTITATE REAL;

DBTG SET MAGPR

OWNER IS MAGAZINE

MEMBER IS PRETURI;

DBTG SET MARPR

OWNER IS MARFA

MEMBER IS PRETURI;

DBTG SET MARCOM

OWNER IS MARFA

MEMBER IS COMENZI;

DBTG SET CUMCOM

OWNER IS CUMPARATORI

MEMBER IS COMENZI;

Exemplul anterior arata cum sunt descrise entitatile si relatiile in DBTG prin DDL. Descrierea entitatilor se face prin instructiunea RECORD urmata de descrierea atributelor structurate ca in COBOL sau PL/I si descrierea relatiilor cu instructiunea DBTG SET urmata de indicarea proprietarului (OWNER IS) si a elementului (MEMBER IS). Pentru evitarea unor redondante se pot folosi campuri virtuale care se inlocuiesc prin pointeri la elementele respective din alte entitati sau la relatii care dau elemntele respective.

In vederi este permisa folosirea altor nume pentru inregistrari, campuri sau seturi. In vederi se pot elimina unele campuri, tipuri de inregistrari sau seturi dar nu se pot adauga altele noi. Deci vederile in general sunt subscheme ale schemei logice a bazei de date.

Implementarea relatiilor unu-la-mai-multi se face prin liste circulare simplu sau dublu inlantuite in care capatul listei este un proprietar si toate elementele corespunzatoare acestui proprietar apar in lista. In acest caz in implementarea entitatilor se prevede un camp suplimentar de pointer pentru fiecare relatie din care face parte entitatea respectiva. O alta varianta de implementare a relatiilor unu-la-mai-multi este folosirea inregistrarilor de lungime variabila ce contin cate un proprietar impreuna cu elementele asociate lui.

Indicatii privind modul de reprezentare fizica al entitatilor pot fi date prin instructiunea LOCATION MODE care poate sa aiba una din formele:

LOCATION MODE IS CALC <procedura> USING <lista campuri>

care permite localizarea unor inregistrari prin prelucrari date de utilizator considerate mai adecvate pentru cautare in cazul particular respectiv;

LOCATION MODE IS DIRECT

care declara modul de localizare prin adresa inregistrarii numita aici cheia bazei de date;

LOCATION MODE IS VIA <nume set> SET

care permite accesul la toate elementele unui set in acelasi timp.

Programele sunt scrise in limbajul gazda care de cele mai multe ori este limbajul COBOL la care se adauga unele comenzi din DML cum ar fi FIND pentru localizarea unei inregistrari, GET pentru citirea unei inregistrari din baza de date, STORE pentru introducerea unei inregistrari in baza de date si altele.

Programele folosesc un spatiu de lucru numit arie de lucru utilizator (user working area) in care se gasesc variabilele definite in program, pointerii curenti ce dau chei ale bazei de date pentru anumite inregistrari si formatari (templates) pentru diferite tipuri de inregistrari. Formatarile sunt utilizate ca memorii tampon pentru operatiile de intrare/iesire sau pentru transmiterea unor parametrii pentru unele comenzi.

Cei mai utilizati pointeri curenti sunt: unitatea de executie curenta (contine pointer la unitatea de date care se prelucreaza indiferent de natura ei), inregistrarea curenta (pentru fiecare tip de inregistrare exista un pointer catre ultima inregistrare accesata de acel tip) si setarea curenta (pentru fiecare set exista un pointer catre ultimul element accesat al setului sau proprietar).

Citirea unei inregistrari din baza de date se face prin doua instructiuni si anume o instructiune FIND pentru pozitionare si una GET pentru citirea efectiva care copiaza in formatarea curenta inregistrarea curenta de acelasi tip sau o parte din ea. Forma generala a instructiunii GET este:

GET <tip inregistrare>[;<lista de campuri>]

Daca nu apare lista de campuri se considera toate campurile inregistrarii. Campurile virtuale sunt inlocuite cu valorile efective asociate lor prin intermediul poiterilor si eventual al relatiilor.

Instructiunea FIND este cea mai complexa instructiune a acestui sistem avand multe variante dintre care mai utilizate sunt urmatoarele: gasirea unei inregistrari prin cheia bazei de date, gasirea unei inregistrari folosind cheia CALC, parcurgerea inregistrarilor de un anumit tip, parcurgerea ocurentelor elementelor unui set sau a celor cu anumite proprietati, gasirea proprietarului unui element al unui set, gasirea elementelor curente ale fiecarui fisier sau relatie si altele asemanatoare.

Gasirea unei inregistrari dupa cheia se face cu o instructiune de forma:

FIND <tip inregistrare> RECORD BY DATABASE KEY <variabila>

unde <variabila> este o variabila in spatiul de lucru care are o valoare ce constituie cheia cautata.

Exemplul 4.2. Citirea inregistrarii curente pentru marfuri se poate face prin urmatoarea succesiune de instructiuni:

X := CURRENT OF MARFA

FIND MARFA RECORD BY DATABASE KEY X

GET MARFA

unde X este o variabila definita in spatiul de lucru.

Gasirea inregistrarilor folosind cheie CALC se face plasand mai intai in campurile folosite de CALC a valorilor corespunzatoare in formatarea tipului de inregistrare si apoi folosirea instructiunii de forma:

FIND <tip inregistrare> RECORD BY CALC-KEY

Exemplul 4.3. Daca la declararea inregistrarilor de tip CUMPARATOR se adauga instructiunea de localizare

LOCATION MODE IS CALC P1 USING NUME

iar P1 este o procedura de calcul a adresei folosind valoarea corespunzatoare numelui din inregistrare, atunci se poate afla contul lui Popescu Dan cu succesiunea de instructiuni urmatoare:

CUMPARATORI.NUME := "Popescu Dan"

FIND CUMPARATORI RECORD BY CALC-KEY

GET CUMPARATORI;CONT

Daca sunt mai multe persoane cu acelasi nume se obtine informatie numai pentru una dintre persoane. Calificarile sunt necesare numai daca sunt ambiguitati generate de atribute numite la fel dar apartinand la inregistrari diferite. In acest caz numele atributului este precedat de numele tipului de inregistrare despartite prin punct.

Pentru gasirea tuturor inregistrarilor de un anumit tip folosind cheie CALC se gaseste prima inregistrare de tipul respectiv prin procedeul anterior si apoi se pune intr-un ciclu o instructiune de forma:

FIND DUPLICATE <tip inregistrare> RECORD BY CALC-KEY

Exemplul 4.4. Lista tuturor magazinelor care vand portocale si pretul cu care le vand se poate obtine prin urmatoarea succesiune de instructiuni:

print " MAGAZIN "," PRET " /* scriere capat tabel */

PRETURI.NUMEMAR := "portocale"

FIND PRETURI RECORD BY CALC-KEY

while !FAIL do

GET PRETURI;NUMEMAG,PRET

print PRETURI.NUMEMAG,PRET

FIND DUPLICATE PRETURI RECORD BY CALC-KEY

end

Variabila FAIL este utilizata pentru a sti daca o operatie s-a desfasurat cu succes sau nu avand respectiv valorile fals sau adevarat, ea putand fi utilizata pentru iesirea din ciclu in cazul cand nu mai sunt alte elemente de acelasi tip.

Parcurgerea elementelor unui set se poate face pozitionand mai intai proprietarul setului cu instructiunea

FIND OWNER OF CURRENT <nume set> SET

si apoi folosind instructiunea

FIND NEXT <tip inregistrare> RECORD IN CURENT <nume set> SET

se pot considera pe rand elementele setului. La incercarea de luare a unui nou element dupa ultimul se face variabila FAIL adevarat.

O alta varianta este data de pozitionarea direct pe primul element al unui set folosind instructiunea

FIND FIRST <tip inregistrare> RECORD IN CURRENT <nume set> SET

restul elementelor determinandu-se la fel ca in cazul precedent.

Exemplul 4.5. Listarea marfurilor comandate de Popescu Dan se poate face cu urmatoarea succesiune de instructiuni:

NUME := "Popescu Dan"

FIND CUMPARATORI RECORD BY CALC-KEY

FIND FIRST COMENZI RECORD IN CURRENT CUMCOM SET

while !FAIL do

FIND OWNER OF CURRENT MARCOM SET

GET MARFA

print MARFA.NUMEMAR

FIND NEXT COMENZI RECORD IN CURRENT CUMCOM SET

end

Toate elementele unui tip de inregistrare pot fi parcurse folosind un tip special de set numit set singular care are drept proprietar un tip special de inregistrare numit SYSTEM si elementele unei ocurente sunt elementele fisierului respectiv de parcurs. Acest set special se declara impreuna cu celelalte declaratii ale bazei de date.

Exemplul 4.6. Pentru listarea tuturor persoanelor cu cont negativ se poate introduce in descrierea bazei de date setul TOTICUMP cu instructiunile:

DBTG SET TOTICUMP

OWNER IS SYSTEM

MEMBER IS CUMPARATORI

si listarea se poate atunci face cu instructiunile

print " CUMPARATOR ", " CONT "

FIND FIRST CUMPARATORI RECORD IN CURRENT TOTICUMP SET

while !FAIL do

GET CUMPARATORI

if CONT < 0 then

print NUME,CONT

FIND NEXT CUMPARATORI RECORD IN CURRENT TOTICUMP SET

end

Se poate face o parcurgere numai a elementelor cu anumite valori in unele campuri incarcand in formatarea de tipul dat valorile corespunzatoare campurilor si apoi determinand prima inregistrare cu instructiunea

FIND <tip inregistrare> RECORD IN CURRENT

<nume set> SET USING <lista campuri>

si apoi luand urmatoarele elemente cu instructiunea

FIND DUPLICATE <tip inregistrare> RECORD IN CURRENT

<nume set> SET USING <lista campuri>

Exemplul 4.7. Aflarea pretului cu care magazinul Victoria vinde televizorul "Cromatic" se poate face cu instructiunile

MAGAZINE.NUMEMAG := "Victoria"

FIND MAGAZINE RECORD USING CALC-KEY

PRETURI.NUMEMAR := "TV-Cromatic"

FIND PRETURI RECORD IN CURRENT MAGPR SET USING NUMEMAR

GET PRETURI;PRET

print PRET

Exemplul 4.8. Listarea persoanelor care au cont zero se poate face cu urmatoarele instructiuni:

CONT :=0

FIND CUMPARATORI RECORD IN CURRENT TOTICUMP SET USING CONT

while !FAIL do

GET CUMPARATORI;NUME

print NUME

FIND DUPLICATE CUMPARATORI RECORD IN CURRENT

TOTICUMP SET USING CONT

end

Pozitionarea pe elementul curent al unui set sau a unei inregistrari se poate face respectiv prin instructiunile:

FIND CURRENT OF <nume set> SET

FIND CURRENT OF <tip inregistrare> RECORD

Exemplul 4.9. Pentru a gasi daca Popescu Dan a comandat sau nu portocale si in ce cantitate se poate utiliza urmatoarea succesiune de instructiuni:

NUME := "Popescu Dan"

FIND CUMPARATORI RECORD USING CALC-KEY

LOOP: repeat forever

FIND NEXT COMENZI RECORD IN CURRENT CUMCOM SET

if FAIL then break LOOP

FIND OWNER OF CURRENT MARCOM SET

GET MARFA;NUMEMAR

if MARFA.NUMEMAR = "portocale" then do

FIND CURRENT OF COMENZI RECORD

GET COMENZI;CANTITATE

print CANTITATE

break LOOP

end

end LOOP

Pentru efectuarea operatiilor de inserare, stergere si modificare sistemul are instructiuni speciale. Pentru ca inregistrarea inserata sa fie introdusa si in ocurenta curenta a unui set la descrierea setului trebuie sa se adauge declararea

INSERTION IS AUTOMATIC

Pentru inserarea unei inregistrari mai intai se formeaza acea inregistrare intr-o formatare corespunzatoare T si apoi se aplica comanda

STORE <tip inregistrare>

care face acesta inregistrare inregistrarea curenta pentru tipul respectiv de inregistrare si pentru toate seturile in care acest tip de inregisrare este un element si pentru care insertia a fost declarata automatic. Alegerea ocurentei in care se insereaza o inregistrare intr-un set se face printr-un criteriu dat la descrierea setului cu o instructiune de forma

SET SELECTION IS THRU CURRENT OF <nume set> SET

daca ocurenta este stabilita prin program inainte de inserare sau

SET SELECTION IS THRU OWNER USING <lista campuri>

daca ocurenta este stabilita prin determinarea proprietarului cu cheie CALC sau alte variante asemanatoare.

Exemplul 4.10. Daca vrem sa inseram o inregistrare in COMENZI si sa se faca inserarea automat si in seturile MARCOM si CUMCOM. Presupunand ca pentru CUMPARATORI cheia CALC este NUME, putem sa folosim numele persoanei pentru a selecta ocurenta in setul CUMCOM introducand in declararea setului CUMCOM

SET SELECTION IS THRU OWNER USING NUME

in declaratia setului MARCOM se poate pune ceva asemanator sau declaratia

SET SELECTION IS THRU CURRENT OF MARCOM SET

si apoi se plaseaza in ambele seturi declaratia

INSERTION IS AUTOMATIC

Cu modificarile de mai sus inserarea unei comenzi cu reactualizarea seturilor se poate face cu secventa de instructiuni urmatoare:

read N,M,C /* citeste nume, marfa, cantitate */

URMCOM := URMCOM + 1

CUPARATORI.NUME := N

MARFA.NUMEMAR := M

FIND MARFA RECORD USING CALC-KEY

COMENZI.NR_COM := URMCOM

COMENZI.CANTITATE := C

STORE COMENZI

Automat comanda respectiva este inclusa in ocurentele cu proprietar N din CUMCOM si cu proprietar M din MARCOM.

Daca nu se doreste inserarea automata in unele seturi se declara in acele seturi

INSERTION IS MANUAL

In acest caz inserarile ca elemente ale unui set se face mai intai prin fixarea ocurentei setului, apoi fixand aria curenta de lucru pe inregistrarea ce se insereaza si cu comanda

INSERT <tip inregistrare> INTO <nume seturi>

se obtine inserarea inregistrarii in seturile indicate.

Exemplul 4.11. Daca in exemplul precedent in loc de INSERTION IS AUTOMATIC se pune INSERTION IS MANUAL se obtine aceleasi modificari cu succesiunea urmatoare de instructiuni:

read N,M,C

URMCOM := URMCOM + 1

CUMPARATORI.NUME := N

FIND CUMPARATORI RECORD USING CALC-KEY

MARFA.NUMEMAR := M

FIND MARFA RECORD USING CALC-KEY

COMENZI.NR_COM := URMCOM

COMENZI.CANTITATE := C

STORE COMENZI

INSERT COMENZI INTO CUMCOM,MARCOM

Eliminarea unitatii de executie curenta care este o inregistrare din ocurentele corespunzatoare ei dintr-o multime de seturi se face prin comanda

REMOVE <tip inregistrare> FROM <lista seturi>

Modificare unei inregistrari sau a unor campuri ale unei inregistrari se face cu instructiunea

MODIFY <tip inregistrare>[;<lista campuri>]

Exemplul 4.12. Pentru a schimba pretul portocalelor vandute la magazinul Unirea la 1500 lei/kg se poate folosi urmatoarea succesiune de instructiuni

PRETURI.NUMEMAR := "portocale"

PRETURI.NUMEMAG := "Unirea"

FIND PRETURI RECORD USING CALC-KEY

PRETURI.PRET := 1500

MODIFY PRETURI;PRET

Stergerea unei inregistrari si a aparitiilor ei ca element in ocurentele unor seturi se face cu instructiunea

DELETE <tip inregistrare> [ALL]

Daca nu apare ALL si inregistrarea este proprietar al unei ocurente intr-un set apare o eroare. Aparitia lui ALL face ca o data cu inregistrarea sa fie eliminate si toate elementele pentru care acea inregistrare este proprietar, aceasta proprietate aplicandu-se recursiv.

Exemplul 4.13. Pentru eliminarea unei comenzi pentru care se cunoaste numarul si a aparitiilor ei in seturile CUMCOM si MARCOM se poate face cu urmatoarea succesiune de instructiuni:

read COMENZI.NR_COM

FIND COMENZI RECORD USING CALC-KEY

DELETE COMENZI

Exemplul 4.14. Daca informatiile despre Popescu Dan trebuiesc scoase din baza de date se poate folosi succesiunea de instructiuni:

NUME := "Popescu Dan"

FIND CUMPARATORI RECORD USING CALC-KEY

DELETE CUMPARATORI ALL

6. SGBD IMS

In sistemul de tip ierarhic IMS (Information Management System/Virtual Storage), construit de IBM pentru sisteme de operare MVS in 1968, descrierea datelor se face asemanator cu modul de descriere a datelor in sistemul de tip retea DBTG. Se definesc doua tipuri de elemente: descrieri ale bazei de date (DBD) si blocuri de comunicare program (PCB).

Declararea arborilor se face prin instructiuni de forma

TREE <nume> <lista de tipuri de inregistrari>

Tipurile de inregistrari se declara prin instructiunea

RECORD <nume> <informatii>

Informatiile pot fii campuri date prin numar de nivel, nume, tip si eventual lungime, pot indica pozitionarea tipului de inregistrare in arborele in care apare fie sub forma de radacina indicata prin ROOT fie sub forma de fiu al unui tata indicat prin

PARENT = <nume tata>

sau desemnarea virtuala a unui tip de inregistrare

VIRTUAL <nume inregistrare> IN <nume arbore>

indicand unde se afla de fapt informatia corespunzatoare sau declararea unor pointeri de tipul

POINTER = <lista de tipuri de pointeri>

dintre care cel mai des utilizata este declaratia

POINTER = PARANT

Exemplul 4.15. O vedere a bazei de date din exemplul 4.1 ce permite prelucrarea comenzilor avand drept entitati MARFA, CUMPARATORI si COMENZI impreuna cu relatiile corespunzatoare lor poate fi descrisa in sistemul IMS cu urmatoarea succesiune de instructiuni:

TREE ARBMAR

RECORD MARFA ROOT

1 NUMEMAR CHAR(15)

RECORD COMENZI PARENT=MARFA POINTER=PARENT

1 NR_COM INTEGER

1 CANTITATE REAL

RECORD VIRT_CUMP PARENT=COMENZI

VIRTUAL CUMPARATORI IN ARBCUMP

TREE ARBCUMP

RECORD CUMPARATORI ROOT

1 NUME CHAR(20)

1 ADRESA CHAR(30)

1 CONT REAL

RECORD VIRT_COM PARENT=CUMPARATORI

VIRTUAL COMENZI IN ARBMAR

In sistemul IMS limbajul de prelucrare a datelor se numeste DL/I (Data Language/I), comenzile prevazute in acest limbaj fiind de fapt apeluri de proceduri scrise in limbajul gazda care poate fi PL/I, COBOL sau Assembler. Ca si in DBTG se foloseste o arie de lucru in care sunt pastrate valorile curente pentru tipurile de inregistrari si alte informatii cum ar fi variabile de lucru, tatal curent al fiecarui tip de inregistrari, o variabila FAIL de indicare a conditiilor de terminare a unei cautari si altele.

Cel mai mult in cautari este utilizata o instructiune de forma

GET LEFTMOST <nume inregistrare> WHERE <lista conditii>

cu <lista conditii> continand constructii de forma

<nume inregistrare>.<nume camp> O <valoare>

legate eventual prin "and" si "or". Aceasta comanda incarca in formatarile corespunzatoare din aria de lucru inregistrarea cautata si toti predecesorii sau din arborele unde apare. Conditiile care determina inregistrarea cautata pot sa contina valori din oricare camp al acestor inregistrari.

Exemplul 4.16. Sa consideram urmatoarea structura arborescenta ce descrie o baza de date a unei agentii de vanzari locuinte

REGIUNI(NUMER)

OFICII(ORAS,ADROF)

AGENTI(NUMEA,VANZARI) ANGAJAT(NR_AN,NUMEAN,ADRAN,SALARIU) OFERTE(ADROF,PRET)

CLIENTI(NUMEC,ADRC)

care se poate descrie prin urmatoarea succesiune de instructiuni

TREE AGENTIE

RECORD REGIUNI ROOT

1 NUMER CHAR(20)

RECORD OFICII PARENT=REGIUNI

1 ORAS CHAR(20)

1 ADROF CHAR(30)

RECORD AGENTI PARENT=OFICII

1 NUMEA CHAR(20)

1 VANZARI INTEGER

RECORD ANGAJAT PARENT=OFICII

1 NR_AN INTEGER

1 NUMEAN CHAR(20)

1 ADRAN CHAR(30)

1 SALARIU INTEGER

RECORD OFERTE PARENT=OFICII

1 ADROF CHAR(30)

1 PRET INTEGER

RECORD CLIENTI PARENT=AGENTI

1 NUMEC CHAR(20)

1 ADRC CHAR(30)

Pentru acesta baza de date instructiunea

GET LEFTMOST AGENTI WHERE VANZARI > 10000000

determina primul agent in ordinea de la stanga la dreapta care are vanzari peste 10000000 lei. Obtinerea unui agent din oficiul Craiova care sa indeplineasca aceeasi conditie se face cu instructiunea

GET LEFTMOST AGENTI WHERE ORAS="Craiova" AND VANZARI > 10000000

Se poate citi numele regiunii si al orasului pentru care se doreste o informatie dupa cum urmeaza:

read REG,OF

GET LEFTMOST AGENTI WHERE NUMER=REG AND ORAS=OF AND VANZARI > 10000000

unde se presupune ca REG si OF au fost declarate ca variabile de lucru.

Determinarea urmatorului element se face prin inlocuirea cuvantului LEFTMOST cu cuvantul NEXT in instructiunea GET.

Exemplul 4.17. Pentru determinarea tuturor agentilor cu vanzari de peste 10000000 din baza de date anterioara se poate folosi succesiunea de instructiuni

GET LEFTMOST AGENTI WHERE VANZARI > 10000000

while !FAIL do

print AGENTI.NUMEA

GET NEXT AGENTI WHERE VANZARI > 10000000

Parcurgerea tuturor descendentilor unui nod dat se poate obtine aplicand repetat instructiunea

GET NEXT WITHIN PARENT

Exemplul 4.18. Pentru determinarea tuturor clientilor lui Popescu Dan din oficiul Craiova se poate scrie urmatoarea succesiune de instructiuni

GET LEFTMOST AGENTI WHERE ORAS="Craiova" AND NUMEA="Popescu Dan"

GET NEXT WITHIN PARENT CLIENTI

while !FAIL do

print CLIENTI.NUMEC

GET NEXT WITHIN PARENT CLIENTI

Inserarea unei inregistrari se face prin definirea valorilor campurilor inregistrarii in formatul asociat in aria de lucru si dand comanda

INSERT <tip inregistrare>

care adauga inregistrarea drept fiu al ocurentei curente a tatalui tipului de inregistrare respectiv.

Exemplul 4.19. Inserarea drept client pentru Popescu Dan din oficiul Craiova a lui Ionescu Dumitru str. Luceafarului 14 se poate face cu succesiunea de instructiuni:

CLIENTI.NUMEC := "Ionescu Dumitru"

CLIENTI.ADRC := "Luceafarului 14"

INSERT CLIENTI WHERE ORAS="Craiova" AND NUMEA="Popescu Dan"

Stergerea si modificarea unei inregistrari se face mai intai prin localizarea acelei inregistrari cu instructiunea GET la care se adauga optiunea HOLD si apoi pentru stergerea inregistrarii si a tuturor descendentilor se da comanda

DELETE

iar pentru modificare se redefinesc valorile campurilor ce se schimba si apoi se da comanda

REPLACE

Exemplul 4.20. Daca agentul Popescu Dan din Craiova a mai facut o vanzare de 2500000 lei, modificarea respectiva se face cu instructiunile:

GET HOLD LEFTMOST AGENTI WHERE ORAS="Craiova" AND NUMEA="Popescu Dan"

AGENTI.VANZARI := AGENTI.VANZARI + 2500000

REPLACE

iar daca acelasi agent tregbuie eliminat din baza de date impreuna cu toti clientii lui acesta se poate face cu instructiunile:

GET HOLD LEFTMOST AGENTI WHERE ORAS="Craiova" AND NUMEA="Popescu Dan"

DELETE

7. Alte SGBD-uri

7.1. DATACOM/DB - tip liste inversate

Sistemul DATACOM/DB a fost produs de Computer Associates pentru calculatoare IBM cu sisteme de operare MVS, VM si VSE. Sistemul prevede o interfata de apeluri a unor aplicatii in limbajele COBOL, PL/I, FORTRAN, RPG II si Assembler. Pentru COBOL are si o interfata numita DATACOM/DL sau COBOL/DL ca o extensie a COBOL-ului ce se trateaza prin preprocesare.

Un sistem poate sa cuprinda pana la 999 baze de date fiecare dintre ele fiind definita prin adaugarea unor descriptori in dictionarul sistemului (DATADICTIONARY) interactiv bazat pe forme. Unitatea de acces se numeste element si poate sa fie orice submultime a unei inregistrari. Se fac autorizari de acces la nivel de element.

Sistemul mai contine urmatoarele componente: DATACOM/DC (administrator de comunicari de date), DATAQUERY (o interfata de cereri atat interactiva cat si programabila), DATAREPORTER (sistem de rapoarte programabil), DATAENTRY (aplicatie generala interactiva de introducere date), DATADESIGNER (utilitar pentru proiectarea logica a bazelor de date) si IDEAL (sistem dezvoltare aplicatii). A fost elaborata si o varianta distribuita numita CA:DB-STAR.

In acest sistem se lucreaza cu fisiere in care inregistrarile sunt ordonate fizic existand si o ordine de aparitie a fisierelor in baza de date. Pentru fiecare fisier se pot defini oricate chei de cautare prin care se poate face acces direct sau secvential la inregistrari. Accesul se face prin intermediul unui unic index (B-arbore) asociat intregii baze de date.

Operatiile de baza ce se executa asupra datelor sunt: LOCATE FIRST (da adresa primei inregistrari fizice a unui tabel T), LOCATE FIRST WITH SEARCH KEY EQUAL (analog cu precedenta doar ca se considera ordinea data de o cheie K), LOCATE NEXT (da adresa urmatoarei inregistrari din T dupa cea indicata in variabila P), LOCATE NEXT WITH SEARCH KEY EQUAL (analog cu precedenta doar ca se considera cheia K si valoarea acestei chei din inregistrarea data de variabila P), LOCATE FIRST WITH SEARCH KEY GREATER (analog cu precedenta decat ca valoarea cheii inregistrarii returnate este mai mare decat cea indicata de variabila P), RETRIEVE (regasirea inregistrarii identificata de variabila P), UPDATE (modificarea inregistrarii identificata de P), DELETE (eliminarea inregistrarii identificata de P), STORE (memorarea unei noi inregistrari si indicarea adresei de memorare).

In sistemul DATACOM/DB operatiile anterioare sunt realizate prin operatorii: GSETP (gasirea si citirea primei inregistrari fizice), LOCKX (gasirea primei inregistrari cu valoare data pentru o cheie), LOCKY (gasirea primei inregistrari cu cheia mai mare sau egala cu o valoare data), REDKY (LOCKX+REDLE), RDUKY (LOCKX+RDULE), GETPS (gasirea si citirea urmatoarei inregistrari fizice), LOCNX (gasirea urmatoarei inregistrari), LOCBR (gasirea inregistrarii precedente), LOCNE (gasirea urmatoarei inregistrari cu aceiasi cheie), LOCNK (gasirea primei inregistrari cu cheia mai mare decat o valoare), LOCKL (gasirea primei inregistrari cu valoarea cheii mai mica sau egala cu o valoare data), REDNX (LOCNX+REDLE), RDUNX (LOCNX+RDULE), REDNE (LOCNE+REDLE), RDUNE (LOCNE+RDULE), REDLE (citeste inregistrarea gasita), RDULE (citeste inregistrarea gasita pentru reactualizare - cu locare exclusiva), DELET (sterge inregistrarea gasita), UPDAT (modifica inregistrarea gasita), RELES (anuleaza locarea exclusiva) si ADDIT (memoreaza inregistrare noua).

Dintre operanzii operatorilor anteriori fac parte si zona ceruta indicata ca o variabila de adresa in baza de date ce contine drumul de acces la informatie, zona I/O ce contine valorile transferate si o lista de elemente implicate in operatia respectiva.

In 1985 a fost adaugata sistemului componenta CBS (Compound Boolean Selection) care permite o mai mare flexibilitate si independenta de date in interfetele de programare. Aceasta cuprinde operatorii SELFR (selecteaza primul), SELNR (selecteaza urmatorul), SELSM (selecteaza acelasi inca o data), UPDAT (reactualizeaza), DELET (elimina) si SELPR (anuleaza setarile).

7.2. TOTAL - tip retea

7.3. IDMS - tip retea

Sistemul IDMS (Integrated Database Management System) a fost produs de Computer Associates pentru calculatoare IBM cu sisteme de operare standard (VSE, MVS, etc.) fiind o varianta a DBTG. In 1983 a fost construita o versiune extinsa numita IDMS/R ce contine facilitati relationale redenumit apoi CA-IDMS/DB si urmand sa accepte si constructii SQL. S-au construit preprocesoare pentru IDMS in limbajele COBOL, PL/I, FORTRAN si Assembler. Sistemul cuprinde o serie de componente cum sunt IDMS-DC (interfata de comunicare date), IDD (dictionar de date integrat), OLQ (interfata de cereri on-line), OLE (interfata cu limba engleza), ADS/OL (generator de aplicatii), CULPRIT (generator de rapoarte) si altele.

7.4. ADABAS - tip hibrid

Sistemul ADABAS a fost utilizat de ICI si British Rail putand sa opereze cu structuri din toate cele trei modele principale de baze de date. El lucreaza cu tabele la care se poate aplica operatia de uniune dar se pot defini si structuri de tip ierarhic sau de retea. Are un limbaj de cereri numit ADASCRIPT.

Datele sunt memorate ca fisiere partial inversate putand fi accesate direct. Fiecarei inregistrari inserate i se asociaza automat un numar de secventa (ISN) utilizat in accesul la date si la indicarea apartenentei la un fisier. Datele sunt comprimate. Se pot defini campuri repetitive. Se pot defini chei neunice numite descriptori care pot fi un camp, o combinatie de campuri sau o parte a unui camp. Orice tip de inregistrare poate sa aiba unul sau mai multi descriptori. Fisierele se pot cupla pe baza descriptorilor. Daca descriptorii sunt astfel incat valoarea implicata apare o data intr-un tablou si de mai multe ori in tabloul cu care este acesta cuplat se obtine o arborescenta, altfel se obtine o retea.

Prelucrarea datelor se face prin intermediul limbajului gazda folosind instructiunea CALL avand drept parametrii: comanda de executat, numarul fisierului, formatul inregistrarilor sau campurilor ce se regasesc, spatiul pentru informatia regasita, conditii de cautare si valori de descriptori. Se poate specifica in comanda si o sortare ce se efectueaza pentru raspuns. Inregistrarile pot fi accesate secvential in ordinea fizica sau in ordinea data de descriptori.

Informatiile sunt protejate la nivel de fisiere si campuri. Parolele sunt codificate. Utilizatorii primesc un numar de nivel intre 0 si 14 ce le da drepturi de acces la citire sau la scriere pentru partile de baze de date marcate cu un numar de nivel mai mic sau egal cu numarul asociat utilizatorului.

7.5. System 2000 - tip ierarhic

7.6. DB2 - tip relational

Sistemul de baze de date DB2 a fost conceput de IBM pentru medii MVS. Limbajul utilizat in descrierea si prelucrarea datelor este o versiune SQL, deci sistemul este relational. Utilizarea interactiva a limbajului SQL se face prin intermediul componentei DB2I.

Sistemul DB2 cuprinde trei mari componente care la randul lor cuprind multe alte subcomponente:

- Componenta servicii sistem care efectueaza operatii de tip sistem, comunicari

de operatori, identificari de utilizatori si alte functii similare.

- Componenta servicii de locare ce permit controlul accesului concurent la date.

- Componenta servicii baza de date ce permit definirea, regasirea si

reactualizarea datelor si a informatiilor privind utilizatorii.

Ultima componenta este cea care este utilizata explicit de utilizatori si ea cuprinde un precompilator care determina instructiunile SQL din programe si le transfera intr-un modul de cereri al bazei de date (DBRM) inlocuidu-le in programe prin apeluri de proceduri, un constructor care alcatuieste proceduri pentru cererile din DBRM, un supervizor la executie care apeleaza modulele corespunzatoare din diferitele componente, un administrator al datelor memorate si un administrator de memorii tampon pentru transferul de date intre mediul de memorare si memoria interna. Constructorul contine o componenta de optimizarea a cererii luand in considerare diferitii parametrii ce apar cum sunt: tabelele implicate, dimensiunea lor, existenta indexilor, metode de acces, conditii de selectare a tuplurilor si altele.

Diferitele modificari aparute in baza de date sunt reflectate in programe prin recompilari in momentul executiei a cererilor afectate. Aceste procese sunt facute automat si sunt transperente pentru utilizator. Sistemul permite redefinirea unor tabele, definirea sau eliminarea unor tabele, indexi sau vederi fara a fi necesara oprirea sistemului.

Sistemul DB2 contine un catalog care este un sistem de baze de date ce cuprinde informatiile ce privesc diferitele obiecte care sunt importante pentru sistem cum ar fi tabelele de baza, vederile, indexii, utilizatorii, planurile de aplicatii (rezultate ca interpretari ale comenzilor SQL din aplicatii), drepturile de acces si altele. Cataslogul este organizat tot ca relatii in numar de circa 30 dintre care cele mai utilizate sunt:

- SYSTABLES care contine cate un rand pentru fiecare tabel (de baza sau vedere) din sistem cu numele tabelului (NAME), numele proprietarului (CREATOR), numarul coloanelor din tabel (COLCOUNT) si multe alte informatii.

- SYSCOLUMNS care contine cate un rand pentru fiecare coloana a fiecarui tabel mentionat in SYSTABLES in care se dau numele coloanei (NAME), numele tabelului din care face parte (TBNAME), tipul de date (COLTYPE) si altele.

- SYSINDEXES care contine cate un rand pentru fiecare index din sistem in care se dau numele indexului (NAME), numele tabelului indexat (TBNAME), numele proprietarului indexului (CREATOR) si altele.

Tabelele din catalog pot fi utilizate in cereri ca orice alt tabel. De exemplu se pot obtine numele tabelelor care au coloana NUME prin

SELECT TBNAME

FROM SYSCOLUMNS

WHERE NAME = 'NUME' ;

aflarea coloanelor relatiei R se poate face cu instructiunile

SELECT NAME

FROM SYSCOLUMNS

WHERE TBNAME = 'R' ;

si numarul tabelelor care are proprietar pe Popescu se poate afla cu

SELECT COUNT(*)

FROM SYSTABLES

WHERE CREATOR = 'Popescu' ;

Modificarea catalogului se face prin intermediul instructiunilor CREATE, DROP si ALTER care corespund respectiv la INSERT, DELETE si UPDATE folosite pentru celelalte tabele. Tabelul initial este construit automat de sistem si are proprietar SYSIBM.

Tabelele SYSTABLES si SYSCOLUMNS contin o coloana numita REMARKS care poate sa contina un text ce descrie obiectul identificat de randul respectiv. Acest text poate fi fixat prin instructiunea COMMENT. De exemplu

COMMENT ON TABLE MAGAZIN IS 'La fiecare rand corespunde o marfa vanduta'

introduce in SYSTABLES remarca data pentru randul ce defineste tabelul MAGAZIN

COMMENT ON COLUMN MAGAZIN.PRET IS 'Pretul de vanzare'

si aceasta instructiune da remarca pentru campul PRET din tabelul MAGAZIN.

Corespondenta dintre vederi si tabelele de baza este data de tabelul SYSVIEWS din catalog care este reactualizat in momentul crearii unei vederi.

7.7. DaTaSyS - tip relational

7.8. NOMAD - tip relational

Sistemul NOMAD cu varianta sa NOMAD2 este un SGBD de tip relational din generatia a patra ce cuprinde printre altele generator de rapoarte, grafice, statistici, limbaje procedurale si pachete de analiza financiara. El permite o buna productivitate in dezvoltarea de aplicatii si de prototipuri. Baza de date se descrie prin scheme. Are si facilitati de tip ierarhic.

7.9. RELGRAF - tip relational


Document Info


Accesari: 3721
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )