SISTEME DE GESTIUNE A BAZELOR DE DATE (SGBD)
1. SGBD INGRES
Sistemul
INGRES (INteractive Graphics and REtrieval System) a fost proiectat la
universitatea
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
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,
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
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
MAGAZINE.NUMEMAG
:= "
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
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
end
end
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
GET LEFTMOST
AGENTI WHERE ORAS="
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
GET LEFTMOST
AGENTI WHERE ORAS="
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
CLIENTI.NUMEC := "Ionescu Dumitru"
CLIENTI.ADRC := "Luceafarului 14"
INSERT CLIENTI
WHERE ORAS="
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
GET HOLD
LEFTMOST AGENTI WHERE ORAS="
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="
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
|