Baze de date
Limbajul QBELimbajul QBE Limbajul Query-by-Example este un limbaj de tip calcul relational pe domenii. El este conceput in scopul lucrului la terminal cu utilizarea unui editor de texte pentru a exprima cererile. Utilizatorul poate sa afiseze pe ecran, pri comenzi, unul sau mai multe schelete de tabele prin care isi defineste relatiile si atributele relatiilor cu caracteristicile lor. Apoi se pot folosi tabele construite pentru exprimarea cererilor de interogare sau modificare a bazei de date prin intermediul editorului de ecran. Fiecare linie completata intr-un tabel reprezinta un tuplu ce parcurge relatia respectiva. In cereri se folosesc variabile de domeniu si constante pentru a identifica tupluri din relatiile ale caror schelete apar pe ecran. Cand se gaseste un tuplu sau o combinatie de tupluri care indeplinesc conditiile specificate, se tiparesc toate variabilele precedate de operatorul P. si toate valorile atributelor care contin in dreptul lor un P., iar daca in prima coloana , care corespunde numelui relatiei, apare operatorul P., atunci sunt tiparite toate valorile atributelor tuplului corespunzator selectiei facute. Un schelet de relatie este ilustrat mai departe fiind alcatuit numai din linii sub forma unui tabel, fara a avea ceva inscris in el. De obicei se obtine prin apasarea unei taste.
Afisarea unei relatii existente in baza de date se face scriind intr-un schelet de relatie, pe prima linie si in prima coloana, numele relatiei respective urmata de operatorul P., primindu-se ca raspuns, pe prima linie, atributele corespunzatoare relatiei respective. In dreptul atributelor se pot pune constante care sunt siruri de caractere sau variabile. Pentru variabile se folosesc, de obicei, drept nume, tipuri de valori pe care le pot lua variabilele respective (de aici vine si numele limbajului – cerere prin exemplu). Domeniul unei variabile este constituit din toate domeniile atributelor in care acea variabila apare in toate relatiile de pe ecran. O cerere de tipul: listeaza toate magazinele care vand toate marfurile comandate de Ionescu Iosif poate fi exprimata astfel:
Mai intai s-au afisat pe ecran cele doua relatii folosite, punand in doua schelete de tabele, pe primul loc, COMENZI P. si, MAGAZINE P., dupa care se completeaza cate o linie in fiecare relatie, dupa cum se vede in tabel. Variabila _portocale este folosita pentru a pune in corespondenta o marfa ceruta de Ionescu Iosif cu marfa vanduta de un magazin. Daca cele doua valori coincid, se selecteaza din relatia MAGAZINE tuplul asociat si se tiparesc din el valorile corespunzatoare pentru numele magazinului, marfa si pretul de vanzare al marfii respective in acel magazin. Pentru a tipari si adresa magazinului, fie se introduce un P. In dreptul lui ADRESAMAG, fie se pune un P. in dreptul lui MAGAZINE si atunci nu se mai mentioneaza P. in alta colona. O cerere din calculul relational pe domenii exprimata printr-o expresie de forma: unde fiecare cij este un al sau un bl sau o constanta si fiecare variabila de domeniu al si bl apare cel putin o data ca un cij, se poate exprima in QBE dupa cum urmeaza: se afiseaza scheletele relatiilor R1,,Rp (nu neaparat distincte); se creeaza nume de variabile pentru fiecare din ai si bj (de obicei numele exprima valori posibile pentru variabila respectiva, precedate de pentru fiecare termen Ri(ci1,,ciki) se creeaza un tuplu ce contine pe pozitia j elementul cij, daca acesta nu este constanta, respectiv variabila asociata, daca cij este un al sau bl; campurile ce contin variabilecare nu mai apar in alta parte sunt lasate libere; daca toate atributele al apar intr-un tuplu al unei relatii, ele se prefixeaza cu P., altfel se construieste o relatie suplimentara (fara nume) cu un tuplu ce contine comanda P. in prima coloana si numele asociate variabilelor a1,,an in celelalte coloane.
Pentru a tipari numele persoanei, marfa comandata, cantitatea comandata si contul la toate comenzile facute, se poate obtine expresia din calculul relational pe domenii:
Daca o comanda P. se gaseste in mai multe relatii, tiparirea valorilor corespunzatoare se face in tabele separate in momentul cand se determina o combinatie de tupluri care verifica toate conditiile date. Pentru selectarea unor tupluri se pot folosi, in diferite coloane, expresii de forma qc, unde q este un operator de comparatie aritmetica iar c este o constanta sau o variabila de domeniu a carei valoare este definita in alta parte. Daca punem intr-o coloana >=5, atunci sunt selectate acele tupluri din relatie care au valorile corespunzatoare atributului de cel putin 5. Exemplu: tiparirea tuturor comenzilor de portocale in cantitati mai mari decat cea comandata de Ionescu Iosif se realizeaza astfel:
Pentru diferitele campuri se pot defini si combinatii formate din parti constante si parti variabilece corespund subsirurilor care nu sunt continute in partea constanta. Se poate nega un tuplu punand semnul in prima coloana a lui. Negarea unui tuplu inseamna selectarea acelor tupluri din relatie pentru care nu sunt verificate conditiile tuplului negat. Exemplu: in scopul tiparirii, pentru fiecare marfa, a comenzilor cu cele mai mari cantitati cerute, se poate scrie:
In QBE se folosesc operatorii agregati CNT., SUM., AVG., MIN., MAX. Pentru duplicatelor unei relatii se poate folosi operatorul ALL iar pentru eliminarea duplicatelor se poate folosi operatorul UN. Multe operatii din QBE elimina automat duplicatele. Modificarea continutului unor relatii se poate face prin comenzi I. pentru inserare tuplu, D. pentru eliminare tuplu si U. pentru modificare tuplu. Acestea se introduc in prima coloana a tuplului din relatia unde se fac modificari. Pentru valorile corespunzatoare unui tuplu, cu comanda I. se creeaza un nou tuplu in relatie, cu valorile date. Cu comanda D. se elimina tuplurile care au valori specificate, iar cu comanda U. se determina inregistrarea care trebuie modificata din atributele cheie si se introduc in campurile specificate noilor valori. Exemplu: presupunem ca adresa magazinului Dumbrava exista in baza de date:
Exprimarea maririi pretului se poate face:
Pentru fixarea unor conditii suplimentare de selectie a tuplurilor se poate folosi casuta conditionala (condition box), in care se pot scrie expresii booleenece trebuie sa fie adevarate pentru a se selecta valorile variabilelor care apar in ele. Aceste expresii nu pot contine operatorul not, in schimb pot contine operatorii AND sau & pentru si, respectiv OR sau pentru sau. Exemplu: listarea magazinelor care vand portocale cu pret mai mare decat se vand merele in Piata Cibin, dar mai ieftin decat dublul pretului bananelor din Piata Rahovei, se poate face prin cererea:
Sistemul QBE contine o lista numita tabelul director al tuturor numelor relatiilor din baza de date, impreuna cu atributele asociate lor si cu anumite informatii despre atribute. Tabelul director poate fi folosit ca oricare alta relatie, fiind permisa efectuarea de interogari, inserari sau stergeri. Daca intr-un schelet de relatie se scrie in prima linie si prima coloana P._relname sau numai P., sunt listate toate numele relatiilor si numele atributelor asociate lor. Inserarea unei noi relatii in baza de date se face cu comandaI.RELI., urmata de scrierea pe primul rand al atributelor relatiei numita REL. Pentru atribute se declara anumite proprietati: KEY – spune daca atributul este (Y) sau (N) component al unei chei; TYPE – stabileste tipul atributuluicare poate fi CHAR pentru cuvant de lungime variabila, CHAR(n) pentru cuvant de lungime n, FLOAT pentru numere reale sau FIXED pentru numere intregi; DOMAIN – da nume domeniilor atibutelor folosite in gasirea eventualelor erori prin aparitia unei variabile in atribute cu domenii diferite; INVERSION – indica existenta (Y) sau inexistenta (N) unui index dupa atributul respectiv. Pentru a crea relatia MAGAZINE se poate completa un schelet de tabel:
Completitudinea limbajului QBE se poate demonstra usor. Pentru a calcula T=R S, unde T este o relatie noua, se procedeaza astfel:
Pentru diferenta relatiilor R si S se procedeaza la fel ca in tabelele anterioare, cu deosebirea ca relatia T va avea comanda D. in loc de I. in fata celui de al doilea tuplu. Pentru produsul cartezian al relatiilor R si S se definesc variabilele distincte _a1,,_an in R si variabilele _b1,,_bn in S, iar in T se pune un tuplu cu comanda I. ce cuprinde toate variabilele definite. Proiectia relatiei R dupa atributele Ai1,,Aik se face definind variabilele _a1,,_ak in R corespunzatoare campurilor selectate si incluzand in T un tuplu cu comanda I. ce contine variabilele definite. Pentru reprezentarea selectiei sF(R) se transforma formula F pentru a nu mai contine negatia folosind legile lui DeMorgan pana cand negatiile ajung la atomi si apoi, operatorul de comparatie ce apare in atom, se inlocuieste cu operatorul opus (= cu < cu etc.) pentru formula: (A<B (C=D E F)) se obtine: A B AND (C D or E=F) Daca prin transformarile indicate din formula F se obtine formula F , selectia poate fi exprimata:
Se mai pot crea si vederi care se definesc dupa regulile obisnuite de definire a relatiilor, cu deosebirea ca numele relatiei ce defineste vederea este precedat de cuvantul VIEW. O vedere V se evalueaza intarziat intr-un mod similar sistemului ISBL, de fiecare data cand este folosita intr-o alta cerere cu continutul actual al relatiilor ce apar in vedere. Se poate calcula o vedere pentru a calcula nota de plata a unei persoane cu preturile minime percepute de vanzatori pentru marfurile comandate:
|