Documente Academic
Documente Profesional
Documente Cultură
5p) In ce consta dictionarul de date si care este deosebirea intre tabelele prefixate cu ALL_,
respectiv _USER?
Dictionarul de date Oracle este una din componentele principale ale Serverului. El consta dintr-o
multime de tabele si view-uri ce constituie o referinta read-only a bazei de date.
Dictionarul de date (Data Dictionary) furnizeaza informatii despre:
-structuri logice sau fizice
-nume, definitii, spatii alocate obiectelor
-restrictii de integritate
-monitorizare
Tabelele prefixate cu ALL_ ofera informatii despre obiectele care pot fi accessate de utilizator, in timp
ce tabelele prefixate cu USER_ ofera informatii despre obiecte aflate in proprietatea utilizatorului.
Jurnalul tranzacţiilor este un fişier special întreţinut de SGBD, în care sunt memorate informaţiile
despre tranzacţiile efectuate asupra bazei de date cum sunt:
-identificatorul sau codul tranzacţiei;
-momentul începerii execuţiei tranzacţiei;
-numărul terminalului sau identificatorul utilizatorului care a iniţiat tranzacţia;
-datele introduse; înregistrările modificate şi tipul modificării.
Jurnalul de tranzactii e util pentru ca in momentul in care apare o anomalie care ar putea distruge
baza de date, pe baza jurnalului de tranzactii (si nu numai) se poate reface baza de date in forma
initiala.
In limbaj algebric:
R1=SE Tipop="extragere" OPERATIUNE
R1[Nrcont, Tipop, Data, Suma, Operator]
R2=SJN(CONT, R1)
R2[Nrcont, Tipcont, Datacre, Sold_la_zi, Codcl]
R3=DIF(CONT,R2)
R3=[Nrcont, Tipcont, Datacre, Sold_la_zi, Codcl]
R4=JN(CLIENT,R3)
R4=[Codcl, Nume, Pren, Datan, Adresa, Nrcont, Tipcont, Datacre, Sold_la_zi]
In SQL:
SELECT cl.Nume, cl.Pren, c.Tipcont, c.Sold_la_zi, o.Nrcont
FROM client cl, cont c, operatiune o
WHERE cl.Codcl=c.Codcl and c.Nrcont=o.Nrcont and cl.Codcl NOT IN
(SELECT cl.Codcl
FROM client cl, cont c
WHERE cl.Codcl=c.Codcl and Tipop="extragere");
2. (1p) Creati o tabela virtuala care sa contina toate operatiunile efectuate pe conturi de tip "la vedere":
numele clientului, numarul contului, data operatiei si numele operatorului:
CARD[Numele, Prenumele, Nrcont, Data_op, Operator]
3. (1.5p) Formulati urmatoarea prelucrare in SQL sau SQLPlus: Sa se stearga toate conturile cu sold 0
ale unui client,ale carui nume si prenume sunt introduse prin dialog.
4. (1.5p) Scrieti un trigger in PL/SQL care sa actualizeze soldul unui cont, de cate ori se efectueaza o
operatiune pe contul respectiv (in functie de tipul operatiunii, daca este de depunere sau de
extragere).
5. (2.5p) Concepeti un sistem de baze de date unde structura precedenta ocupa locul central.
Descrieti etapele implementarii acestui sistem, iar pentru fiecare etapa, formulati exemple de comenzi
si programe (valabile in sistemul Oracle) dintre cele care ar trebui folosite.
CREATE TABLE CLIENT (Codcl Number(5), Nume VARCHAR2(15), Pren VARCHAR2(15), Datan
Date, Adresa VARCHAR2(25),
CONSTRAINT Codcl_PK PRIMARY KEY(Codcl));
CREATE TABLE CONT (Nrcont NUMBER(5), Tipcont VARCHAR2(15), Datacre Date, Sold_la_zi
NUMBER(10), Codcl NUMBER(5),
CONSTRAINT Nrcont_PK PRIMARY KEY(Nrcont),
CONSTRAINT Codcl_FK FOREIGN KEY(Codcl) REFERENCES CLIENT(Codcl));
CREATE TABLE OPERATIUNE (Nrcont NUMBER(5), Tipop VARCHAR(15), Data Date, Suma
NUMBER(10), Operator VARCHAR2(25),
CONSTRAINT Nrcont_op_PK PRIMARY KEY(Nrcont),
CONSTRAINT Nrcont_op_FK FOREIGN KEY(Nrcont) REFERENCES CONT(Nrcont));
-Sistemul creeaza automat indecsi atunci cand se defineste o restrictie de integritate de tipul
PRIMARY KEY sau UNIQUE. Deci, in cazul de fata se creeaza automat indecsi pentru Codcl si
Nrcont.
Construim un index pentru coloana Nume din tabela CLIENT pentru gasirea rapida a unui client al
bancii. Deoarece presupunem ca avem un numar mare de clienti si acestia au in general numele de
familie diferit, cream un index de tip B-Tree.
Presupunem ca nu exista decat un numar redus de operatiuni ce se pot efectua pentru un anume cont
si deci vom crea un index dupa coloana Tipop din tabela OPERATIUNE, care va fi de tip BITMAP
(pentru ca avem un numar redus de valori distincte).
In mod similar se mai poate crea o procedura care actualizeaza Adresa unui client.
Cream o functie care sa calculeze suma totala pe care o are un client intr-o banca (adica se
cumuleaza Sold_la_zi din toate conturile clientului - daca are mai multe):
END;