APLICATII BAZE DE DATE
1. Directii de cercetare
Directii de
cercetare legate de bazele de date asa cum au fost sintetizate la conferinta de
la
- Viitoare aplicatii (CASE - computer-aided software engineering, CIM -
computer-integrated manufacturing, imagini, baze de date spatiale,
regasirea informatiei)
- Dezvoltarea unor medii hardware (revolutie, masini de baze de date)
- Dezvoltarea unor medii software (sisteme de operare, interfete pentru
limbaje de programare, Prolog)
- Extinderea administrarii datelor (arhitecturi extinse, baze de date
orientate obiect)
- Baze de date active si sisteme de reguli
- Interfete pentru utilizatorul obisnuit
- Tehnologii SGBD uninod
- SGBD-uri distribuite
- Alte directii (proiectarea bazelor de date fizice, instrumente de
proiectare, baze de date in timp real, modele de date, translatarea
datelor, schimbul de informatii folosind bazele de date)
2. Calculatoare de baze de date
In ultimul timp se fac cercetari intense pentru construirea unor calculatoare specializate in baze de date. Astfel de sisteme sunt IBM System/38, ICL CAFS (Content Addressable File Store), Britton-Lee IDM (Interactive Database Machine) si Amperif RDM-1100 (care utilizeaza IDM). Astfel de masini cu performante superioare in memorarea si regasirea informatiilor pot fi cuplate cu alte tipuri de masini ce permit o eficienta sporita in prelucrarea informatiilor. Ele se bazeaza pe memorii asociative prin care se determina informatia prin valori continute in ea.
3. Interfete
Interfetele permit accesul facil la datele unei baze de date si o definire mai simpla a aplicatiilor care fac posibila utilizarea bazelor de date si de catre nespecialisti. Interfetele cuprind componente de acces la date, componente de prezentare a datelor, componente de generarea unor aplicatii si alte componente cum ar fi posibilitati de utilizare a metodelor statistice, procesoare de texte, programe de lucru tabelat, nuclee de sisteme expert, etc.
Se pot adauga la acestea diferite posibilitati de testare, de simulare, de prelucrare a informatiei (copieri, sortari, interclasari, etc.), proiectare automata, posibilitati de lucru in multimedia si altele.
3.1. Interfete pentru acces la date
O metoda de acces la informatii pentru modelul relational il permite folosirea relatiei universale. Numim relatie universala asociata unei baze de date o relatie a carei schema contine toate atributele schemelor relationale ale bazei de date. Se dau aceleasi nume pentru atribute ce desemneaza aceleasi elemente si nume disticte pentru atribute ce definesc elemente complet diferite.
Relatia universala poate constitui o interfata intre baza de date si utilizator in sensul ca toate cererile sunt exprimate in functie de atributele existente in baza de date si pentru utilizator este transparent modul de memorare a informatiilor si modul cum sunt analizate si executate cererile.
Accesul la date se face de obicei prin intermediul unei interfete cu un terminal de comenzi (limbaje de cereri), prin intermediul unei interfete de tip menu sau forme predefinite sau prin intermediul unei interfete pentru limbaje naturale. Se mai pot utiliza interfete ce utilizeaza semnele (icon - desen ce desemneaza un anumit obiect ce poate fi activat prin selectarea cu un cursor pe ecranul terminalului), interfete de selectare cu ajutorul cursorului pe ecran in general, sisteme de recu 727l1120h noastere a vocii umane si altele.
Se folosesc tehnici diverse cum sunt ferestrele, meniurile diverse, prompterii, grafica, fonturi si altele. Idea de baza este aceea de a face lucrul cu baza de date cat mai apropiat de modul de comportare obisnuita al utilizatorului.
De exemplu in sistemul INGRES accesul la date se face prin intermediul unei forme care nu este altceva decat transpunerea pe ecran a formelor de hartie folosite de utilizator. Formele sunt folosite atat pentru introducerea in sistem a cererilor cat si pentru comunicarea catre utilizator a rezultatelor cererilor.
Sistemul INGRES creaza automat o forma numita prin lipsa pentru fiecare tabel de baza sau vedere pe care o descrie in catalog. Forma cuprinde o linie de inceput de forma TABLE IS tabel urmata de o listare a numelor atributelor tabelului in ordinea in care au fost ele definite si de spatii pentru informatii de marime data de tipul domeniului in care atributul ia valori. La afisarea unei forme pe ecran apare o ultima linie cu meniul ce contine operatiile pe care poate sa le execute utilizatorul. Combinatia dintre o forma si meniul asociat ei se numeste frame. Cu ajutorul unui frame se poate exprima o cerere folosind comenzile din menu si completand campurile asociate diferitelor atribute din forma prin lipsa. Executarea cererii se face prin activarea comenzii "Go".
Partea din sistemul INGRES care permite lucrul cu forme pentru comunicare cu baza de date se numeste Query By Forms (QBF) si permite formularea de cereri de catre persoane care nu au cunostinte despre limbajele de cereri. In cereri pot fi folosite tabele de baza si vederi, operatori logici si de comparatie, uniuni si alte operatii cu tabele. Cu QBF se pot face reactualizari si inserari de date (editarea bazei de date).
Se pot defini forme noi prin care se pot obtine uniuni de tabele cu indicarea eventualelor modificari posibile sau care sa contina mai multe randuri pe o singura forma sau se pot combina diferite forme existente pentru a forma unele noi prin intermediul unei componente numita Visual Forms Editor (VIFRED). Prin VIFRED utilizatorul poate sa specifice etichetele ce se asociaza diferitelor atribute (pot fi diferite de cele din baza de date), forma grafica de prezentare a campurilor (in framuri, video, subliniat, clipitor, stralucire), culoarea campurilor, posibilitati de modificare, pastrarea valorilor anterioare pentru unele campuri (mai ales la introducere de date), valori obligatorii pentru unele campuri, teste de validare, mesaje in caz de eroare, valori prin lipsa si alte indicatii asemanatoare.
Dintre
sistemele de interfatare prin limbaje naturale mai cunoscute sunt sitemele
RENDEZVOUS definit de Codd la IBM Research si INTELLECT definit de Harris la
In sistemul RENDEZVOUS cererile din limbajul natural sunt transformate mai intai in expresii ale calculului relational folosind bazele de cunostinte. Aceasta translatare se face in mai multe etape, unele portiuni din cerere fiind traduse imediat iar altele sunt traduse dupa ce au fost precizate anumite caracteristici ce se fac intr-un dialog de clarificare intre utilizator si sistem. Sistemul cere confirmarea privind corectitudinea traducerii dupa care executa cererea utilizatorului.
Sistemul INTELLECT nu foloseste dialogul de clarificare ci aplica regulile de constructie sintactica din limba naturala pentru interpretarea frazelor dar si explorarea bazei de date pentru a obtine informatii suplimentare. Interpretarea data cererii este comunicata utilizatorului fara posibilitatea de modificari ulterioare.
3.2. Interfete pentru prezentari de date
Pentru prezentarea datelor ca raspunsuri ale unor cereri pot fi unilizate diferite tehnici cum sunt: rapoarete sub forma de tabele simple, rapoarte editate, grafice economice, afiseri de imagini (icon), iesire vorbita si alte posibilitati.
Prin raport se intelege o multime de formate de iesire a datelor unei baze de date pe ecran sau pe hartie. Generatorul de rapoarte este o componenta software ce permite producerea acestor rapoarte. In sistemul INGRES se poate activa generatorul de rapoarte prin comanda
REPORT nume
unde nume este fie numele unui tabel (vedere) din care se produce raportul respectiv, fie numele unei specificatii de raport ce include numele acelui tabel sau o cerere prin care se genereaza un tabel. Initial generatorul de rapoarte genereaza un raport prin lipsa ce poate fi modificat prin specificari generate de utilizator fie prin intermediul sistemului Report By Forms (RBF) sau prin limbajul de definire a rapoartelor.
Sistemul RBF este un editor interactiv de forme ce reprezinta specificari de rapoarte plecand de la rapoarte prin lipsa. Utilizatorul poate sa fixeze formatele de afisare, ordinea de afisare, operatii agregat ce se pot aplica si alte indicatii. Se pot aplica anumite operatii la inceputul si la sfarsitul rapoartelor de tip totalizare, titluri, semnaturi, etc.
Pentru reprezentarea datelor sub forma de grafice exista componente specializate in SGBD-uri asemanatoare cu generatoarele de rapoarte doar ca modul de reprezentare a iesirilor difera fiind un grafic. In sistemul INGRES componenta grafica poarta numele de Visual Graphics Editor (VIGRAPH). Acesta permite patru tipuri de reprezentari grafice: cu bare (bar charts), cu sectoare (pie charts), punctuale (scatter graphs) si cu linii (line plots). Datele ce sunt reprezentate grafic sunt valorile dintr-un tabel rezultat al unei cereri. Forma de reprezentare grafica poate fi fixata prin specificari grafice.
3.3. Generatoarele de aplicatii
Generatoarele de aplicatii sunt considerate unele din generatia a patra fiind utilizate prin asa-numitele limbaje de generatia a patra (4GL). In aceste limbaje sunt incluse pe langa operatiile aritmetice si controlul fluxului in program si facilitati de definire si acces in baze de date, definirea configurarii ecranului, intrari si iesiri folosind ecranul, prelucrarea datelor pe ecran si altele. Dezvoltarea aplicatiilor se face in mod interactiv.
Sistemul INGRES are un generator de aplicatii numit Applications By Forms (ABF) permitand dezvoltarea de aplicatii ce comunica date cu utilizatorul prin intermediul formelor. Orice aplicatie poate fi privita ca fiind constituita dintr-un aranjament arborescent de framuri, fiecare frame find compus dintr-o forma si un menu asociat. Radacina arborelui este punctul de intrare in aplicatie putandu-se trece la celelalte framuri ale aplicatiei prin parcurgerea diferitelor drumuri in arbore. Chiar si sistemul INGRES in totalitatea lui este construit ca o aplicatie de aceasta forma.
Cel care proiecteaza aplicatiile trebuie sa fie in masura sa specifice frame-urile implicate in aplicatie, pentru acestea formele si menuurile care trebuie sa fie afisate si pentru fiecare dintre comenzile din menu care este sirul de operatii ce se executa in cazul cand utilizatorul aplicatiei selecteaza acea comanda. De obicei un sir de operatii se termina cu indicarea acelui frame care se afisaza dupa terminarea efectuarii comenzii. Acasta se face prin intermediul unei componente ABF numita limbaj de specificarea operatiilor (Operation Specification Language - pe scurt OSL). Acest limbaj contine printre altele instructiunile de operare din bazele de date (SQL sau QUEL), instructiuni de control al formelor si instructiuni de control al fluxului. Textele OSL se construiesc cu un editor al sistemului de operare direct din ABF.
Frame-urile sunt impartite in patru categori: frame-uri specificate de utilizator (create cu VIFRED sau QBF in ABF), frame-uri QBF (create in mod QBF), frame-uri rapoarte (construite cu RBF) si frame-uri VIGRAPH.
Programele pot fi usor depanate prin executia lor partiala in timpul scrierii lor si corectarea imediata a erorilor semnalate prin mesaje. Un program corect poate fi instalat in sistem prin crearea unei imagini executabile a aplicatiei si definirea comenzii din sistemul de baza care activeaza aplicatia respectiva. Apoi aplicatia poate fi folosita de orice utilizator care poate sa dea comanda asociata ei.
Aplicatiile pot fi grupate in pachete de aplicatii ce se pot particulariza pentru grupuri de utilizatori si medii diferite prin specificarea unor parametrii in momentul instalarii.
3.4. Facilitati de administrare
Pentru o baza de date se executa zilnic un numar mare de sarcini ce privesc administrarea sistemului si SGBD-ul contine o serie de programe si facilitati ce asista administratorul in efectuarea lor. Sarcinile privesc pregatirea si executarea aplicatiilor, utilitarele si comenzile sistemului, administrarea performantelor, accesul la baza de date si altele.
Operatiile de pregatire si executie ale aplicatiilor contin precompilari, compilari sau asamblari, editarea legaturilor, instalari si executii de aplicatii. Acestea se fac de obicei prin intermediul unor menuuri.
Utilitarele si comenzile sistemului permit activarea si dezactivarea diferitelor baze de date, afisarea informatiilor privind starea sistemului, urmarirea modului de evolutie a sistemului, incarcarea, eliberarea si restabilirea bazelor de date, verificarea unor conditii pe care trebuie sa le indeplineasca unele componente, crearea de copii totale sau partiale ale bazelor de date, facilitati de incarcare a bazelor de date prin prelucrarea unor fisiere, interclasarea informatiilor, reorganizarea bazelor de date, efectuarea de statistici asupra datelor (de obicei dupa reorganizari) si altele.
Administrarea performantelor consta in initializarea parametrilor la activarea sistemului, monitorizarea performantelor prin producerea de rapoarte si grafice, comenzi de explicatii privind diferitele optiuni luate de sistem in procesul de tratare a cererilor, facilitati de instrumentare (diagnostice, statistici, performante, caracteristici ale datelor si altele), facilitati de limitare a resurselor (timp si spatiu) si altele.
Administratorul bazei de date mai executa si diferite operatii de creare (logica si fizica) si intretinere a bazei de date, de legaturi cu utilizatorii (crearea de vederi, asistarea in proiectarea si pregatirea aplicatiilor si altele), definirea constrangerilor de securitate si integritate (identificarea utilizatorilor, controlul parolelor, constrangeri generale, verificari, reacoperiri, acordarea de drepturi si revocarea lor), definirea procedurilor de salvare si reacoperire si monitorizarea performantelor.
3.5. Dictionare
Sistemele de date de tip dictionar (DDS) au fost introduse ca urmare a utilizarii din ce in ce mai intens a tehnicilor de analiza a datelor putand fi integrate in SGBD sau construite in afara lui. Ele sunt folosite pentru a inregistra si prelucra informatii despre datele definite si prelucrate de utilizator fiind utilizate in special de administratorul sistemului.
Dintre produsele de acest tip fac parte si Datamanager (MSP), ICL DDS (ICL), DD/D (IBM), UCC-10 (University Computing-10), Data Catalog2 (Synergetics), Data Dictionary (Applied Data Research), Control 200 (Intel), Predict (Software AG), Data Control System (Cincom) si Adabas DDS.
Dictionarele permit o imbunatatire a documentarii si controlului, consistenta in folosirea datelor, analiza usoara a datelor, reducerea redondantei datelor, programarea mai simpla,standardizarea si o mai buna estimare a eventualelor schimbari.
Fiecarui element i se asociaza in dictionar o inregistrare cu urmatoarele informatii: numele elementului, descrierea datelor intr-o limba naturala, detalii de proprietate, detalii privind utilizatorii elementului, detalii despre sistemele si programele ce se refera sau schimba elementul, detalii de constrangeri ce privesc acel element, detalii despre tipul si structura datelor, conditii de securitate la accesarea elementului, memorie utilizata, reguli de validare, legaturi cu alte elemente si alte informatii.
4. Baze de date orientate obiect
Notiunile cu care se lucreaza mai des in sistemele bazate pe obiecte sunt urmatoarele:
- Obiectul (object) este elementul de baza ce contine informatii si metode de prelucrare. Fiecare obiect are asociat un tip numita clasa si o valoare numita stare. Pentru fiecare obiect se genereaza un identificator in sistem (object ID) care este transparent pentru utilizator in bazele de date. Plecandu-se de la obiecte predefinite in sistem se pot construi obiecte complexe.
- Clasa (classe) ce defineste atat structura datelor asociate unor obiecte cat si operatiile ce se pot aplica acelor obiecte.
- Metoda (method) este o operatie sau o functie ce poate fi aplicata unui obiect dintr-o clasa data. Multimea metodelor asociate unei clase dau "interfata cu publicul" pentru obiectele acelei clase prin ele fiind descrise operatiile de examinare si modificare a obiectelor din clasa respectiva. Sistemul contine o multime de metode primitive pentru operatii fundamentale cum ar fi compararea scalara, operatii aritmetice, operatii pe cuvinte si altele. Pentru fiecare clasa se defineste automat o metoda NEW prin care se creaza un nou obiect vid (cu toate componentele nil) din clasa respectiva.
- Mesajul este modul de a transmite o comanda de a aplica o metoda la un obiect dat. La receptionarea unui mesaj, obiectul executa metoda indicata asupra datelor continute in obiect si trimite obiectului care a lansat mesajul un raspuns rezultat din executia metodei respective.
- Ierarhia claselor (class hierarchy) presupune construirea unor structuri arborescente in care arcele corespund subordonarii unei subclase fata de o clasa data. Pentru subclase se aplica proprietatea de ereditate (structurala si de mediu - privind metodele).
Din punct de vedere al bazelor de date exista trei nivele de orientare obiect si anume:
- strucrural (structurally object-oriented) - capacitatea de a
reprezenta obiecte cu structuri complexe arbitrare;
- operational (operationally object-oriented) - abilitatea de a opera cu
obiecte complexe ca un tot unitar prin intermediul operatorilor pe
obiecte complexe generice;
- programabil (behaviorally object-oriented) - definirea tipurilor in
sensul programarii orientate-obiect (clase) cu specificarea tipurilor
si a operatiilor (mesaje) cu care se pot prelucra obiecte de un tip
dat fara a cunoaste continutul lor (abstractia datelor).
Principalele caracteristici ale sistemelor orientate obiect sunt:
1. Identitatea obiectelor. Obiectele au o existenta independenta de valorile
lor. Astfel, doua obiecte pot fi identice in sensul ca reprezinta acelasi
obiect sau pot fi egale in sensul ca au aceiasi valoare.
2. Notiunea de tip. Un tip descrie o multime de obiecte cu aceleasi
caracteristici dand structura datelor reprezentata de obiecte si a
operatiilor ce se pot aplica lor. Utilizatorii unui tip vad numai interfata
tipului adica o lista de metode impreuna cu semnaturile sale (tipul
parametrilor de intrare si tipul rezultatului) ceea ce se numeste
incapsulare.
3. Notiunea de ereditate. Ereditatea este proprietatea prin care orice subtip
pastreaza toate caracteristicile tipului din care face parte. In particular
un obiect A de un subtip dat poate fi utilizat ca parametru actual in
chemarea unei proceduri de cate ori a fost mentionat ca parametru formal un
obiect B de tipul din care face parte subtipul obiectului A.
4. Redefiniri (overriding) si constructii ulterioare (late binding). Corpul unei
metode de un tip dat pot fi redefinite in orice moment in oricare din
subtipurile sale dar pastrand acelasi nume. Interpretarea se face in momentul
executiei.
5. Notiunea de polimorfism. Polimorfismul permite ca un obiect sa fie creat ca
element al unei multimi de tipuri. Se pot face mutari ale unui obiect de la
un tip la altul.
Tipurile si ereditatile sunt instrumente puternice in modelarea lumii reale permitand si extinderea sistemelor. Se obtine o administrare simpla atat a datelor cat si a programelor. Programarea devine mult mai usor de facut.
O trasatura fundamentala a sistemelor de baze de date orientate obiect este data de modul in care se stabilesc relatiile intre obiecte, stabilindu-se criterii de clasificare. O clasa reprezinta o multime de obiecte cu proprietati comune. Relatia de apartenenta este o relatie care poate sa fie stabilita intre un obiect a si o clasa care ar putea sa il contina pe a ca element. Se pot stabili relatii de diferite tipuri si intre clase. Foarte importante sunt relatiile de interdependenta care stabilesc o multime de relatii ce au loc in raport cu o colectie de clase. De exemplu, disjunctia este relatia de interdependenta care stabileste ca doua sau mai multe clase nu au elemente in comun.
4.1. Sistemul VISION
Sistemul VISION este o combinatie intre limbajele de programare si sistemele de baze de date orientate obiect fiind dezvoltat de Innovative Systems Techniques. Acest sistem aplica doua principii de baza: ortogonalitatea componentelor conceptuale si incapsularea iteratiilor colectiilor.
Notiunea principala utilizata in VISION este cea de colectie care se defineste ca o asertiune despre un numar specificat de obiecte distincte numite elementele sale. De exemplu colectia angajati se poate stabili ca are 100 de elemente. In cazul unei colectii nu se specifica ce sunt obiectele componente, ce valori au ele sau ce legaturi au ele cu alte obiecte.
Obiectele sunt constructii ce pot fi numite intr-un program VISION. In general, o entitate poate fi reprezentata prin mai multe obiecte ce pot sa apara in colectii diferite. Obiectul descrie un rol pe care il joaca entitatea in lumea reala si apartine colectiei rolului respectiv. Obiectele ce descriu rolurile unei entitati sunt legate prin functia super. Exista o colectie numita object in care este continut cate un element pentru fiecare entitate modelata de sistem. Mai sunt si alte colectii predefinite in sistem cum ar fi real si integer care reprezinta colectia tuturor numerelor reale si respectiv intregi. Fiecare colectie defineste tipul elementelor sale indicand mediul lor dar aceasta definire este transparenta utilizatorului. Utilizatorul poate sa numeasca si sa prelucreze numai colectii, obiecte si relatii intre ele.
Toate informatiile despre obiectele unei colectii sunt continute in functii ce reprezinta aplicatii de la o colectie la alta. Functiile se aplica obiectelor prin intermediul mesajelor avand sintaxa ca in Smalltalk. Daca x este un obiect din colectia c si f este o functie definita in c, atunci expresia xf este o aplicatie a functiei f la obiectul x producand un alt obiect ca valoare. Parametrii din aplicarea functiei sunt precedati de doua puncte, deci xf:c se traduce prin aplicarea functiei f la obiectul x cu argumentul c.
Fiecare colectie are o functie speciala numita super care pune in corespondenta fiecare obiect dintr-o colectie cu obiectul de care apartine. Daca super aplica o colectie c1 in colectia c2 atunci c1 este o subcolectie a lui c2 si fiecarui element din c1 ii corespunde un element din c2. Functiile super luate ca arce determina pe multimea colectiilor luate ca noduri un arbore generalizat avand drept radacina colectia object. Daca c1 este o subcolectie a lui c2, atunci functiile definite in c2 sunt accesibile elementelor lui c1 (ereditate).
Se defineste un arbore de obiecte cu arce date de relatia suobiect in sensul ca x este un subobiect al lui y daca y = x super. Fiecare obiect o din colectia object este radacina unui arbore obiect. Arborele obiect reprezinta toate rolurile posibile jucate de o entitate. Se numeste superdrum al unui obiect x multimea deci o parte a arborelui obiect relevant pentru x.
In programe colectiile sunt reprezentate prin prototipuri de obiecte din colectiile respective care sunt tipuri de obiecte distincte ce sunt create cand se creaza o noua colectie si reprezinta in program acea colectie. Operatia
!y <-- x specialized
creaza o noua colectie a carui prototip de obiect este y pentru care y super este x. Prototipurile de obiecte au aceleasi functii ca si obiectele doar ca nu pot fi enumerate intr-o colectie. Ele pot sa apara in functii sau in expresii. Daca y este un prototip, atunci expresia !z <-- y new creaza un nou obiect de tipul lui y, deci creaza copii pentru fiecare obiect din superdrumul lui y.
Sistemul VISION permite utilizarea functiilor polimorfe care aplica o colectie in mai multe colectii. Si super poate fi o functie polimorfa ceea ce asigura neomogenitatea colectiilor.
Crearea unei colectii neomogene se poate face printr-un constructor explicit de tipul
!y <-- x1,x2,...,xn
prin care se creaza colectia y continand n obiecte noi indicate prin functiile super ca fiind x1,x2,...,xn. Acelas lucru se poate face utilizand extendTo, dar in acest caz obiectele noi primesc si nume astfel:
!y <-- object specialized;
!z1 <-- x1 extendTo:y;
!z2 <-- x2 extendTo:y;
......................
!zn <-- xn extendTo:y;
In general functia x extendTo:y creaza un obiect de prototip y si face ca super de noul obiect sa fie x. Functiile new si specialized se pot aplica atat obiectelor cat si prototipurilor. De exemplu, daca x este un obiect (prototip) atunci expresia x new creaza o copie a lui x si a fiecarui obiect (prototip) din superdrumul lui x.
Functiile sunt tratate ca obiecte de prima clasa. Sunt doua tipuri de mesaje: mesaje extensionale ce au ca rezultat evaluarea functiilor selectate si mesaje intensionale care dau functia ca atare. Mesajele intensionale se exprima punand doua puncte inaintea numelui functiei. De exemplu, gm vanzari da valoarea obtinuta prin aplicarea functiei vanzari obiectului gm si gm :vanzari da o functie care face legatura intre obiectul gm si valorile pentru vanzari ale lui. Functiile fiind privite ca obiecte, pot sa apartina unor colectii, raspund la mesaje si se pot organiza in subtipuri.
Functiile fac parte din colectia function care contine doua subcolectii numite computed (calculate) si enumerated (enumerate). Functiile enumerate dau valoarea lor explicit raspunzand la mesajul de atribuire <--. Cea mai des folosita functie enumerata este o proprietate sau un atribut. De exemplu, daca vanzari este o functie enumerata are sens expresia gm :vanzari <-- 1234567.80. Functiile calculate sunt fie metode care sunt definite de utilizator fie primitive care sunt prevazute de sistem.
Tipurile de functii pot fi utilizate in modelarea istoricului datelor. Istoricul unui obiect este o functie a proprietatilor sale, fiecare proprietate putand sa aiba propria istorie care poate sa depinda de timp in mai multe moduri care, de obicei, sunt transparente utilizatorului. Pentru aceasta o parte din configuratia globala a sistemului este contextul temporal. Tipurile de functii sunt folosite pentru a modela relatia intre obiecte si contextul temporal intr-un mod extins. De exemplu, proprietatile fixe sunt insensibile la contextul temporal pe cand proprietatile schimbatoare mentin o serie de evenimente in istoria unui obiect. De exemplu, expresia gm:vanzari cain:1989 reproduce dinamic mai intai contextul temporal din 1989 si apoi evalueaza functia vanzari.
Mediul se incapsuleaza cu ajutorul blocurilor procedurale. Un bloc este un sir parantezat de intructiuni. De exemplu, expresia !p <-- [|:x|x+1] se defineste blocul p in care se aduna 1 la argumentul sau. Daca f este o metoda, atunci valoarea ei este un bloc utilizat in comun de toate elementele colectiei. Blocurile raspund la mesajele valoare similar cu functiile. De exemplu, pentru blocul p precedent, expresia p value:5 intoarce valoarea 6.
Blocurile se supun lexical regulilor de definire a domeniului lor putand fi evaluate in momentul definirii sau dinamic prin intermediul functiei send. De exemplu, expresia gm send:[vanzari] reconstruieste mediul blocului pentru gm fiind echivalenta cu gm vanzari. Executia unui bloc este implementata printr-un obiect context sau mediu. Variabilele locale ale blocului devin proprietati ale mediului obiectul context trebuind sa fie un subobiect al obiectului in care este definit blocul. La executia blocului sistemul creaza o noua colectie continand cate o functie pentru fiecare variabila locala dupa care extinde obiectul care detine blocul la aceasta noua colectie si executa corpul blocului in contextul acestor noi obiecte.
Ultimul context se obtine prin ^current a carei valoare se schimba la fiecare invocare a blocului. In particular, fiecare sesiune utilizator are un mediu de definire a sistemului care serveste ca valoare initiala pentru ^current. Toate variabilele create intr-o sesiune utilizator sunt chiar functii in ^current initial. Deci, cu exceptia unor nume de definire sistem cum este si ^current, numele din VISION nu se refera la obiecte ci la functii. De exemplu expresia gm vanzari este considerata o prescurtare a expresiei corecte ^current gm vanzari care este o functie.
Din punct de vedere fizic, sistemul VISION contine doua componente: interpretorul de limbaj si administratorul de obiecte. Amandoua componentele sunt utilizate la incapsularea iteratiilor, opereaza pe colectii ca unitati de baza in organizarea calculelor si a structurilor. Masina virtuala VISION este de tip pipeline cu executie paralela a functiilor pentru toate obiectele unei colectii. Obiectele sunt memorate pe proprietati permitand un acces rapid la informatii si in baze de date mari.
4.2. Limbajul OPAL
Limbajul OPAL a fost produs de GemStone de la Servio Logic Corporation. Pentru o baza de date relationala descrisa in SQL prin instructiunile
CURS ( CURS#, TITLU )
PRIMARY KEY ( CURS# )
OFERTA ( CURS#, OF#, DATA, LOCUL )
PRIMARY KEY ( CURS#, OF# )
FOREIGN KEY ( CURS# ) REFERENCES CURS
STUDENT ( CURS#, OF#, ANG#, AN )
PRIMARY KEY ( CURS#, OF#, ANG# )
FOREIGN KEY ( CURS#, OF# ) REFERENCES CURS
FOREIGN KEY ( ANG# ) REFERENCES ANGAJAT
PROFESOR ( CURS#, OF#, ANG# )
PRIMARY KEY ( CURS#, OF#, ANG# )
FOREIGN KEY ( CURS#, OF# ) REFERENCES CURS
FOREIGN KEY ( ANG# ) REFERENCES ANGAJAT
ANGAJAT ( ANG#, NUME, FUNCTIE )
PRIMARY KEY ( ANG# )
se poate face o descriere in limbajul OPAL de forma urmatoare:
SET SUBCLASS : 'ASET'
CONSTRAINTS : ANGAJAT .
SET SUBCLASS : 'CSET'
CONSTRAINTS : CURS .
SET SUBCLASS : 'OSET'
CONSTRAINTS : OFERTA .
SET SUBCLASS : 'SSET'
CONSTRAINTS : STUDENT .
SET SUBCLASS : 'PSET'
CONSTRAINTS : PROFESOR .
OBJECT SUBCLASS : 'ANGAJAT'
INSTVARS : # [ 'ANG#', 'NUME', 'FUNCTIE' ]
CONSTRAINTS : # [ # [ # ANG#, STRING ] ,
[ # NUME, STRING ] ,
[ # FUNCTIE, STRING ] ] .
OBJECT SUBCLASS : 'CURS'
INSTVARS : # [ 'CURS#', 'TITLU', 'OFERTE' ]
CONSTRAINTS : # [ # [ # CURS#, STRING ] ,
[ # TITLU, STRING ] ,
[ # OFERTE, OSET ] ] .
OBJECT SUBCLASS : 'OFERTA'
INSTVARS : # [ 'OF#', 'DATA', 'LOCUL', 'STUDENTI', 'PROFESORI' ]
CONSTRAINTS : # [ # [ # OF#, STRING ] ,
[ # DATA, DATETIME ] ,
[ # LOCUL, STRING ] ,
[ # STUDENTI, SSET ] ,
[ # PROFESORI, PSET ] ] .
OBJECT SUBCLASS : 'STUDENT'
INSTVARS : # [ 'ANG', 'AN' ]
CONSTRAINTS : # [ # [ # ANG, ANGAJAT ] ,
[ # AN, STRING ] ] .
OBJECT SUBCLASS : 'PROFESOR'
INSTVARS : # [ 'CURSURI' ]
CONSTRAINTS : # [ # [ # CURSURI, CSET ] ] .
Pentru a incarca in baza de date informatiile despre angajati mai intai se creaza obiectul cu instructiunea
ANGAJATI := ASET NEW .
apoi se defineste o metoda prin care se poate insera un nou angajat prin
1. METHODE : ASET
2. ADD_ANG# : ANG#_PARM ADD_NUME : NUME_PARM ADD_FUNCTIE : FUNCTIE_PARM
3. | ANG_TUPLE |
4. ANG_TUPLE := ANGAJAT NEW .
5. ANG_TUPLE SET_ANG# : ANG#_PARM ,
6. SET_NUME : NUME_PARM ,
7. SET_FUNCTIE : FUNCTIE_PARM .
8. SELF ADD: ANG_TUPLE .
9. %
Liniile 1 si 9 reprezinta respectiv inceputul si sfarsitul unei metode ce se refera la clasa ASET. Linia 2 defineste trei parametrii ADD_ANG#, ADD_NUME si ADD_FUNCTIE utilizate in mesaje. Linia 3 defineste o variabila locala ANG_TUPLE careia i se atribuie in linia 4 ID-ul unui nou element de tip ANGAJAT. In liniile 5-7 se trimit mesaje la acest nou element prin care se specifica trei metode (SET_ANG#, SET_NUME si SET_FUNCTIE) cu cate un parametru pentru fiecare (respectiv ANG#_PARM, NUME_PARM si FUNCTIE_PARM). Linia 8 trimite un mesaj la SELF care este o variabila speciala ce reprezinta obiectul caruia i se aplica metoda definita careia i se aplica metoda predefinita ADD prin care se insereaza obiectul identificat de EMP_TUPLE in obiectul identificat de SELF.
Informatiile (S3, Popescu, secretar) se pot insera cu comanda
ANGAJATI ADD_ANG# : 'S3' ,
ADD_NUME : 'Popescu' ,
ADD_FUNCTIE : 'secretar' .
De obicei, pentru fiecare obiect v in parte se construieste o pereche de metode de tip GET_v care returneaza valoarea lui v obiectului care trimite mesajul si SET_v care modifica valoarea lui v conform cu valorile specificate de cel care trimite mesajul. Astfel de metode sunt SET_ANG#, SET_NUME si SET_FUNCTIE utilizate mai sus.
Inserari in obiectele CURS si OFERTA se fac asemanator. La inserarea in obiectele STUDENT si PROFESOR se apeleaza crearea unui element de tip ANGAJAT care se leaga de noile elemente introduse in STUDENT si PROFESOR.
Regasirea informatiei se poate exprima relativ simplu. De exemplu, pentru a determina care cursuri 'C5' se tin in Bucuresti se poate folosi succesiunea de instructiuni
1. | CURS_C5 , C5_OF , C5_BUC_OF |
2. CURS_C5 := CURSURI DETECT : [ :CX | 'C5' = CX GET_CURS# ] .
3. C5_OF := CURS_C5 GET_OFERTE .
4. C5_BUC_OF := SELECT : [ :OX | 'Bucuresti' = OX GET_LOCUL ] .
5. ? C5_BUC_OF .
Linia 1 declara trei variabile locale: CURS_C5 folosita pentru a contine ID-ul lui C5, C5_OF folosita pentru a contine ID-ul obiectului ce da multimea ofertelor pentru cursul C5 si C5_BUC_OF folosit pentru a contine ID-ul rezultatului. In linia 2 se trimite un mesaj la obiectul CURSURI prin care se cere aplicarea metodei DETECT avand ca argument blocul de cod cuprins intre paranteze drepte. Argumentele de forma [ :x | p(x) ] unde x este o variabila ce ia valori intr-un domeniu pe care se defineste DETECT si p(x) este un predicat face ca rezultatul aplicarii lui DETECT sa fie un ID corespunzator primului element x intalmit care face p(x) adevarata. In linia 3 se atribuie ID-ul pentru multimea ofertelor cursului C5 variabilei C5_OF. Linia 4 este asemanatoare cu linia 2 doar ca SELECT da toate elementele si nu numai primul ca DETECT. Linia 5 produce afisarea rezultatului.
In OPAL se pot efectua ciclarii prin constructii de forma
obiect DO : [ :x | bloc-cod ]
unde x este o variabila ce parcurge multimea elementelor obiectului indicat si pentru fiecare valoare a sa se executa pe rand bloc-cod in care de obicei se folosesc metode de tipul GET_v, SET_v, IFTRUE, IFFALSE si altele.
Stergerea obiectelor se face cu metoda REMOVE. De exemplu, stergerea angajatului A3 din multimea angajatilor identificati cu variabila ANGAJATI se face prin instructiunea
ANGAJATI REMOVE : DETECT : [ :AX | 'A3' = AX GET_ANG# ] .
Modificarile se fac la fel ca si operatiile de regasire doar ca in locul metodelor GET_v se folosesc metodele SET_v.
5. Baze de cunostinte
Bazele de cunostinte sunt intalnite in literatura de specialitate sub diferite denumiri cum sunt: baze de date logice, baze de date inferentiale, sisteme expert, sisteme deductive, prelucrare recurenta si altele. In aceste sisteme diferitele tupluri ale relatiilor sunt interpretate ca axiome iar cererile sunt interpretate ca teoreme, raspunsul la cerere fiind considerat ca o demonstratie. Aceasta interpretare permite o uniformitate de reprezentare (baze de date, axiome deductive, cereri si constrangeri de integritate sunt reprezentate la fel), uniformitate de operare (raspunsul la cereri, optimizarea cererilor, proiectarea bazelor de date, demonstrarea corectitudinii programelor sunt privite la fel), modelare semantica (evenimente, tipuri de ierarhii si combinatii de entitati), aplicatii extinse si altele.
Bazele de cunostinte permit interpretarea unor cereri din limbajele naturale. Printre altele ele contin copii ale unor tabele din catalogul bazei de date, tabele ce contin valorile datelor ce sunt utilizate frecvent, o multime de reguli de transformare a frazelor ce permite unele substituirea automata a unor subexpresii si un lexicon ce contine un tabel ce defineste cuvinte din limba naturala ce pot fi utilizate in cereri care pot fi legate de baza de date (nume de tablouri si atribute) sau cuvinte generale.
Baza de cunostinte se initiaza prin construirea lexiconului si a altor parti componente si se complecteaza in timp de catre utilizatori sau automat pe baza informatiilor obtinute in exploatare.
In bazele de cunostinte sunt aplicate rezultatele din calculul propozitiilor si calculul predicatelor. Pe baza transformarilor logice se incearca demonstrarea unor asertiuni tinand seama de axiomele din logica matematica si de informatiile continute in sistem.
Prin axioma deductiva sau regula de inferenta se intelege o regula prin care se pot deduce unele fapte plecand de la o multime de fapte date. Axiomele deductive pot fi reprezentate in bazele de date sub forma unor vederi.
Pentru a demonstra o asertiune de forma
f1,f2,...,fn |- g
unde f1,f2,...,fn sunt premizele si g este concluzia de obicei se foloseste medoda reducerii la absurd demonstrand ca formula
f1 & f2 & ... & fn & non g
este falsa. Aceasta se face transformand formula precedenta prin proprietatile existente in algebra logicii intr-o formula echivalenta normal conjunctiva de forma
u1 & u2 & ... & um
in care fiecare ui (i=1,...,m) este o disjunctie de atomi eventual precedati de "non". Se listeaza termenii formulei precedente u1,u2,...,um si se deriveaza in continuare alti termeni aplicand legea rezolutiei
|= (( f V g) & ( non g V h )) ==> ( f V h )
Daca printre termenii derivati apare multimea vida (termenul "fals") atunci asertiunea initiala este adevarata, altfel (cand nu mai pot fi generati alti termeni) aserfiunea este falsa.
Exemplul 7. . Pentru a demonstra asertiunea
A ==> ( B ==> C ), NOT D OR A, B |- D ==> C
unde A,B,C si D sunt formule, se pleaca de la formulele
A ==> ( B ==> C )
NOT D OR A
B
NOT ( D ==> C )
care aduse la forma normal conjunctiva dau formulele
(1) NOT A OR NOT B OR C
(2) NOT D OR A
(3) B
(4) D
(5) NOT C
Aplicand rezolutia pentru formulele (1) si (2) in raport cu A se obtine
(6) NOT D OR NOT B OR C
apoi pentru formulele (6) si (3) in raport cu B se obtine
(7) NOT D OR C
pentru formulele (7) si (4) in raport cu D se obtine
(8) C
si pentru formulele (8) si (5) in raport cu C se obtine formula vida notata [] ceea ce demonstreaza ca asertiunea facuta este adevarata.
Cererile pentru bazele de cunostinte pot fi exprimate sub forma
A1 AND A2 AND ... AND Am ==> B1 OR B2 OR ... OR Bn
unde A1,...,Am si B1,...,Bn sunt de forma r(x1,x2,...,xt) cu r predicat cu argumentele x1,...,xt.
Pentru m = 0 si n = 1 expresia se reduce la un singur predicat
r ( x1, x2, ..., xt )
Daca toate argumentele sunt constante, predicatul reprezinta o axioma de baza si este o propozitie adevarata. In termeni de baze de date tuplul (x1,...,xt) este unul din tuplurile existente intr-o relatie R din baza de date. In acest caz predicatul r afirma ceva in concordanta cu intelesul pe care il are relatia R.
Pentru m > 0 si n = 1 se obtine clauza
A1 AND A2 AND ... AND Am ==> B
care poate fi privita ca o axioma deductiva. Aceasta da o definitie (partiala) a predicatului din partea dreapta a implicatiei in functie de predicatele din partea stanga. Aceasta poate fi privita si ca o constrangere de integritate.
Vederile unei baze de date pot fi privite ca modele teoretice. In aceste modele domeniile de baza contin valori sau constante ce pot sa descrie anumite obiecte ale lumii reale, acestea formand universul contextului. Relatiile de baza reprezinta o multime de predicate sau formule deschise ce urmeaza sa fie interpretate in acel univers. Fiecare tuplu al unei relatii reprezinta o particularizare a predicatului corespunzator (formula inchisa - fara variabile) care are valoarea adevarat pentru universul respectiv. Constrangerile de integritate sunt tot formule inchise interpretabile pe acelasi univers. Tuplurile si constrangerile de integritate pot fi privite ca formand multimea axiomelor ce definesc o anumita "teorie logica". Baza de date poate fi privita ca multimea tuturor teoremelor ce se pot demonstra pornind de la axiome. Evaluarea cererilor se face analog cu demonstrarea teoremelor.
Ca axiome ale unei baze de date pot fi considerate urmatoarele:
1. Axiomele de baza corespund tuplurilor relatiilor de baza, ele definind ceea ce se denumeste baza de date extinsa (extensional database - EDB).
2. O axioma de completitudine pentru fiecare relatie prin care se afirma ca nu exista alte tupluri decat cele ce apar efectiv in relatia respectiva. Aceasta se mai numeste presupunerea de inchidere (Closed World Assumption - CWA) prin care se considera false asertiunile pentru tuplurile ce nu apar in relatie.
3. Axioma "numelui unic" prin care se afirma ca fiecare constanta se distinge de toate celelalte constante (are nume unic).
4. Axioma "inchiderii domeniului" prin care se afirma ca nu exista alte constante in afara de cele existente in domeniile bazei de date.
5. O multime de axiome (standard) prin care se defineste predicatul "=".
Un sistem deductiv de baze de date este un SGBD care permite construirea vederilor cu demonstrare teoretica si care este capabil in particular sa deduca fapte suplimentare din baza de date existenta aplicand axiome deductive sau reguli de inferenta la aceste fapte. Axiomele deductive impreuna cu constrangerile de integritate formeaza ceea ce se numeste continutul intern al bazei de date (intensional database - IDB) si acesta impreuna cu extinderea bazei de date formeaza baza de date deductiva (deductive database).
Un limbaj in care se pot exprima asertiuni si cereri pentru baza de date este Datalog (analog cu Prolog) in care instructiunile sunt de forma
B <== A1 AND A2 AND ... AND An
unde B este concluzia (capul) si A1,...,An sunt premizele (corpul), ele fiind predicate nenegate ce contin numai constante si variabile. Daca in loc de B se pune "?" se face afisarea rezultatului obtinut prin expresia din partea dreapta.
In acest limbaj pot sa apara si definiri recursive. Acestea pot fi tratate ca in Prolog prin tehnici de unificare si rezolutie. O alta tehnica numita evaluarea naiva pleaca de la baza de date extinsa si aplica in mod repetat premizele definitiei pana se obtine rezultatul concluziei. O imbunatatire a acestei metode, numita metoda seminaiva de evaluare, evita recalcularea tuplurilor rezultate in pasii anteriori. O alta metoda, numita filtrarea statica sau reducerea multimii factorilor relevanti, foloseste informatia din cerere (concluzie) pentru a modifica premizele putand astfel sa elimine tuplurile nefolositoare din extensia bazei de date.
6. Exemple
|