Sunteți pe pagina 1din 7

Configuraia meniului principal (albastru), a opiunilor i a subopiunilor

Listare cri

dup TITLU

Listare cititori
ToateUn titlu
datGrup de
litere

dup AUTOR

ToiUn autor
datGrup de
litere

dup
DOMENIU

Domeniu
datToate,
alfabetic
ToateEditur
dat

dup EDITUR
dup PRE
dup AN

mprumuturi

dup NUME

dup
SPECIALITATE
dup CLAS

MPRUMUT

Casri i
pierderi
Lista Casri

RESTITUIRE

Lista Pierderi

RESTANE

CASARE

dup Pierderi

Cresctor/descresctorI
nterval de preuriTotal
valoric
An datInterval
ani

Tabele principale

PIERDERE

Achiziii

Lista
Achiziii
Lista
Surse

Donaii

Noi cititori

Lista Donaii

Lista
Surse

CRI
Nr_inv
Titlu Autor Domeniu Editur Pre An_apariie Provenien Proveniena :
A achiziie
5-6 cifre, nr. natural 100 ch. 50 ch
20 ch.
30 ch 4.2
4 cifre
A/D/C/P
D donaie
C casare
Cheie primar
P - pierdere
Obligatoriu
da
da
da
da
da
da
da
Fr duplicare
nu
nu
nu
nu
nu
nu
nu
CITITORI
Id
Nume_prenume Specialitate Clas Adres
Telefon
3 cifre, nr. natural/
40 ch.
20 ch
3 ch
memo
10 ch
CNP =13 ch
Cheie primar
Obligatoriu
da
da
nu
da
da
Fr duplicare
nu
nu
nu
nu
nu
Id poate fi un cod numeric intern, de 3 cifre, sau se poate utiliza CNP-ul i atunci este un cmp de 13
caractere (pentru c n calculator nu se pot stoca numere naturale de 13 cifre)
MPRUMUTURI
Dat_mprumut
Dat_restituire
Nr_inv_carte
Id_cititor
Dat calendaristic Dat calendaristic 5-6 cifre, nr. natural 3 cifre, nr. natural/ CNP =13 ch
Obligatoriu
Optional
Obligatoriu
Obligatoriu
Cu duplicare
Cu duplicare
Cu duplicare
Cu duplicare
Condiie structural: triada Dat_mprumut + Nr_inv_carte + Id_cititor compune o informaie de tip
Cheie Unic
Condiie procedural : Dat_mprumut Dat_restituire
PROIECTAREA COMENZILOR (in SQL ORACLE)
1. Tabela CARTI

CREATE TABLE carti


(Nr_inv NUMBER(6) PRIMARY KEY,
Titlu VARVHAR2(100) NOT NULL,
Autor VARCHAR2(50) NOT NULL,
Domeniu VARCHAR2(20) NOT NULL,
Editura VARCHAR2(30) NOT NULL,
Pret NUMBER(6,2) NOT NULL,
An_aparitie NUMBER(4) NOT NULL,
Provenienta CHAR(1) NOT NULL CHECK (A,D,C,P) );
2. Tabela CITITORI
CREATE TABLE cititori
(Id NUMBER(3) PRIMARY KEY,
Nume_prenume VARCHAR2(40) NOT NULL,
Specialitate VARCHAR2(20) NOT NULL,
Clasa VARCHAR2(3),
Adresa VARCHAR(100) NOT NULL,
Telefon CHAR(10) NOT NULL );
3. Tabela IMPRUMUTURI
CREATE TABLE imprumuturi
(Data_imprumut DATE NOT NULL,
Data_restituire DATE,
Nr_inv_carte NUMBER(6) NOT NULL REFERENCES carti(Nr_inv),
Id_cititor NUMBER(3) NOT NULL REFERENCES cititori(Id),
UNIQUE (Data_imprumut, Nr_inv_carte, Id_cititor) );

4. Interogri din CARTI


a. Lista tuturor crilor dup titlu
SELECT titlu, autor, domeniu, editura, pret, an_aparitie AS An aparitie
FROM carti
ORDER BY titlu;
b. Lista crilor dup un titlu dat
SELECT titlu, autor, domeniu, editura, pret, an_aparitie AS An aparitie
FROM carti WHERE titlu=&titlu_dat;
c. Lista crilor dup un titlu dat ntr-o grup de iniiale
SELECT titlu, autor, domeniu, editura, pret, an_aparitie AS An aparitie
FROM carti WHERE SUBSTR(titlu,1,1) BETWEEN &L1 AND &L2;
d. Lista tuturor crilor dup autori
SELECT autor, titlu, domeniu, editura, pret, an_aparitie AS An aparitie
FROM carti
ORDER BY autor;
e. Lista crilor dup un autor dat
SELECT autor, titlu, domeniu, editura, pret, an_aparitie AS An aparitie
FROM carti WHERE autor=&autor_dat;
f. Lista crilor dup un autor dat ntr-o grup de iniiale
SELECT autor, titlu, domeniu, editura, pret, an_aparitie AS An aparitie
FROM carti WHERE SUBSTR(autor,1,1) BETWEEN &L1 AND &L2;
g. Lista tuturor crilor pe domenii
SELECT domeniu, titlu, autor , editura, pret, an_aparitie AS An aparitie
FROM carti ORDER BY domeniu;
h. Lista tuturor crilor dintr-un domeniu dat
SELECT domeniu, titlu, autor , editura, pret, an_aparitie AS An aparitie

FROM carti WHERE domeniu=&domeniu_dat


ORDER BY autor,titlu;
i. Lista tuturor crilor pe edituri
SELECT editura,domeniu, titlu, autor , pret, an_aparitie AS An aparitie
FROM carti ORDER BY editura;
j. Lista tuturor crilor pentru o editur dat
SELECT editura, domeniu, titlu, autor, pret, an_aparitie AS An aparitie
FROM carti WHERE editura=&ed;
k. Lista tuturor crilor dup preuri, cresctor
SELECT titlu, autor , domeniu,editura,pret, an_aparitie AS An aparitie
FROM carti ORDER BY pret;
l. Lista tuturor crilor dup preuri, descresctor
SELECT titlu, autor , domeniu,editura,pret, an_aparitie AS An aparitie
FROM carti ORDER BY pret (desc);
m. Lista tuturor crilor dup interval de preuri
SELECT titlu, autor , domeniu,editura,pret, an_aparitie AS An aparitie
FROM carti WHERE pret BETWEEN &p1 AND &p2;
n. Total valoric
SELECT SUM(pret) AS TOTAL VALORIC
FROM carti;
o. Se mai pot dezvolta interogri tip total valoric pe domenii, pe edituri, pe achiziii, donaii sau casri
Ex. Total valoric pe casri:
SELECT SUM(pret) AS Total valoric CASRI
FROM carti
WHERE provenienta=C ;
5. Interogri din CITITORI
a. Listare dup nume

SELECT Nume_prenume AS Nume i prenume


FROM cititori
ORDER BY Nume_prenume;
b. Listare dup specialitate
SELECT Nume_prenume AS Nume i prenume, specialitate
FROM cititori
ORDER BY specialitate;
c. Listare dup clas
SELECT Nume_prenume AS Nume i prenume, clasa
FROM cititori
GROUP BY clasa
ORDER BY Nume_prenume;
d. Listare cititori care au pierdut cartea
SELECT cititori.Nume_prenume AS Nume i prenume, cititori.clasa,
carti.titlu, carti.autor
FROM carti, cititori, imprumuturi
WHERE imprumuturi.id_cititor=cititori.id AND imprumuturi.Nr_inv_carte=carti.Nr_inv
AND imprumuturi.data_restituire IS NULL AND carti.provenienta=P;
6. Operaii n tabela IMPRUMUTURI
a. Imprumutare carte
RUN FORM imprumut_nou
Sau
INSERT INTO imprumuturi (data_imprumut,data_restituire,Nr_inv_carte,Id_cititor)
VALUES (SYSDATE, Null, &inventar,&Id_cit);
b. Restituire carte
UPDATE imprumuturi SET data_restituire=SYSDATE

WHERE Nr_inv_carte=&inventar AND Id_cititor=&Id AND data_restituire IS NULL;


c. Lista restane
SELECT cititori.Nume_prenume AS Nume i prenume, cititori.clasa,
carti.titlu, carti.autor
FROM carti, cititori, imprumuturi
WHERE imprumuturi.id_cititor=cititori.id AND imprumuturi.Nr_inv_carte=carti.Nr_inv
AND imprumuturi.data_restituire IS NULL AND carti.provenienta != P;