Sunteți pe pagina 1din 9

PROIECT BAZE DE DATE

EVIDENA ACTIVITILOR UNEI BIBLIOTECI

MOTIVAIA APLICAIEI

Volumul mare de informaii existente n cazul unei biblioteci cu un numr mare de cri i clieni determin necesitatea informatizrii domeniului de gestiune a activitilor unei biblioteci.

Activitatea de eviden a unei biblioteci implic o munc intens cu numeroase documente care in de nregistrarea clienilor, a crilor nchiriate de acetia prin abonament, de prelucrare a datelor acestora i de nregistrare permanent a nchirierilor i returnrilor efectuate, ntr-un timp ct mai scurt. Prin informatizarea domeniului de eviden a unei biblioteci se ctig timp i se evit pierderea unor date, nefiind necesar consultarea unui numr mare de documente ce in de gestionarea activitilor unei biblioteci. Se obin astfel mult mai uor informaii despre clieni, despre crile nchiriate i datele de returnare, i alte date.

DESCRIEREA APLICAIEI

Principalele funcii care se pot ntlni ntr-o bibliotec sunt: - Evidena crilor din bibliotec - Evidena clienilor - Evidena nchirierilor efectuate La nivelul unei biblioteci se poate realiza o baz de date. Prin interogarea bazei de date se vor obine informaii despre o carte sau un client specificat, despre nchirierile fcute de un client specificat sau despre crile ce nu au fost returnate pn la data restant. Tabelele din cadrul aplicatiei sunt: - ABONAMENTE - CLIENI - BIBLIOTEC - NCHIRIERI Fiecare carte este caracterizat de datele sale specifice. Pentru fiecare carte se vor cunoate: codul, titlul i autorul, editura, anul ediiei, numrul de volume i numrul de exemplare. Pentru evidena clienilor se vor cunoate: codul clientului, numele i prenumele, adresa, telefonul, codul numeric personal, data abonrii, tipul abonamentului ales si valoarea acestuia. Este necesar i o eviden a nchirierilor efectuate. Pentru aceasta se vor cunoate: codul crii nchiriate, numele clientului care o nchiriaz, numrul de zile pentru care se face nchirierea, data nchirierii, data pn la care trebuie returnat cartea. ABONAMENTE

COD_AB TIP_A B

NR_ZILE VALOARE

CLIENI

COD-CLI NUME ADRESA CNP COD_AB DATA_AB DATA_EX

NCHIRIERI
COD_I COD COD_CLI NUME DATA_I NR_Z DATA_RET

BIBLIOTEC
COD TITLU AUTOR NR_VOL NR_EXE EDITURA ANUL

Legtura dintre primele dou tabele, abonamente i clieni, se realizeaz prin cmpul cod_ab care reprezint tipul abonamentului ales de client. ntre cele dou tabele exist o legtur 1:n deoarece un client i poate alege un singur tip de abonament cnd i sunt introduse datele n baza de date, dar un anumit tip de abonament poate fi ales de mai muli clieni n acelai timp. Tabela clieni se leag de tabela nchirieri prin cmpul numit cod_cli ce reprezint codul clientului care mprumut sau returneaz cri. ntre tabela clieni i tabelele nchrierii exist legtur de tipul 1:n deoarece un client poate nchiria mai multe cri, dar o carte nu poate fi mprumutat dect de un singur client la un moment dat. Tabela bibliotec, ce conine evidena crilor din bibliotec, este legat de tabela nchirieri prin cmpul cod, care reprezint codul crii mprumutate sau returnate. ntre tabela bibliotec i tabela nchirieri exista legtur de tip 1:n astfel o carte poate fi nchiriat de mai multe ori dar nchirierea se face pentru o singur carte.

IMPEMENTAREA BAZEI DE DATE


A: create table abonamente ( cod_ab number(2) constraint pk_abon primary key, tip_ab varchar2(20), nr_zile number(3), valoare number(3) ); create table clienti (cod_cli number(3) constraint pk_clienti primary key, nume varchar2(20) not null, adresa varchar2(50) constraint adresa_ck check (adresa in ('Pantelimon', 'Berceni', 'Unirii', 'Drumul taberei', 'Militari', 'Giulesti', 'Crangasi', 'Vitan'), CNP number(13), Cod_ab number(2), data_ab date, data_ex date, constraint fk_abon foreign key (cod_ab) references abonamente(cod_ab) ); create table biblioteca (cod number(3) constraint pk_biblio primary key, titlu varchar2(30), autor varchar2(30), nr_vol number(2), nr_exe number(3), editura varchar2(20), anul number(4) ); create table inchirieri (cod_i number(3) constraint pk_inch primary key, cod number(3) not null, cod_cli number(3) not null, nume varchar2(30), Data_i date, nr_z number(2), data_ret date, constraint fk_cli foreign key (cod_cli) references clienti(cod_cli), constraint fk_biblio foreign key (cod) references biblioteca(cod) ); Se introduc date in tabele: insert into abonamente values('01','Lunar','30','10'); insert into abonamente values('02','Trimestrial','90','20'); insert into abonamente values('03','Semestrial','180','30');

insert into clienti values('100','Popescu Ion','Berceni','1620512453891','02',to_date('nov 15,06','mon dd,yy'),to_date('feb 15,07','mon dd,yy')); insert into clienti values('101','Toma Alina','Vitan','2750310529476','03',to_date('oct 10,06','mon dd,yy'),to_date('apr 10,07','mon dd,yy)); insert into clienti values('102','Rotaru Ana-MAria','Militari','2811205192745','02',to_date('dec 02,06','mon dd,yy'),to_date('mar 02,07','mon dd,yy')); insert into clienti values('103','Ionescu George','Vitan','1692403164835','01',to_date('dec 20,06','mon dd,yy'),to_date('ian 20,07','mon dd,yy')); insert into clienti values('104','Stanescu Cristian','Militari','1763009153498','03', to_date('nov 21,06','mon dd,yy'),to_date('mai 21,07','mon dd,yy')); insert into clienti values('105','Tudor Mirela','Unirii','2790901157438','02',to_date('dec 08,06','mon dd,yy'),to_date('mar 08,07','mon dd,yy')); insert into clienti values('106','Albu Cristina','Militari','2712309157634','02',to_date('ian 04,07','mon dd,yy'),to_date('apr 04,07','mon dd,yy')); insert into clienti values('107','Leu Bogdan','Drumul taberei','1690802156791','03', to_date('ian 05,07','mon dd,yy'), to_date('iul 05,07','mon dd,yy')); insert into clienti values('108','Lupu Adriana','Crangasi','2822509267594','03',to_date('nov 28,06','mon dd,yy'),to_date('mai 28,07','mon dd,yy')); insert into biblioteca values('001','Adela','Gabaret I. Braileanu','1','5','Aramis','2005'); insert into biblioteca values('002','Ciocoii vechi si noi','Nicolae Filimon','2','8','Regis','2004'); insert into biblioteca values('003','Padurea spanzuratilor','Liviu Rebreanu','1','3', 'Exigent', '2002'); insert into biblioteca values('004','Neamul soimarestilor','Mihail Sadoveanu','3','6', 'Agora', '2005'); insert into biblioteca values('005','Mara','Ioan Salvici','1','7','All','2001'); insert into biblioteca values('006','Pe drumuri de munte','Calistrat Hogas','1','4','Regis','2004'); insert into biblioteca values('007','Imposibila intoarcere','Marin Preda','2','2','All','2000'); insert into biblioteca values('008','Intrusul','Marin Preda','1','4','Humanitas','2003'); insert into biblioteca values('009','Gorila','Liviu Rebreanu','1','5','Aramis','2002'); insert into biblioteca values('010','Ion','Liviu Rebreanu','2','8','Aramis','2004'); insert into biblioteca values('011','Morometii','Marin Preda','2','4','Regis','2001'); insert into biblioteca values('012','Fratii Jderi','Mihail Sadoveanu','3','9','Regis','2005'); insert into inchirieri values('001','004','102','Rotaru Ana-Maria',to_date('ian dd,yy'),'15',to_date('ian 20,07','mon dd,yy'); insert into inchirieri values('002','010','108','Lupu Adriana',to_date('dec dd,yy'),'30',to_date('ian 27,07','mon dd,yy'); insert into inchirieri values('003','009','100','Popescu Ion',to_date('ian dd,yy'),'20',to_date('ian 30.07','mon dd,yy'); insert into inchirieri values('004','005','105','Tudor Mirela',to_date('dec dd,yy'),'30',to_date('ian 16,07','mon dd,yy'); insert into inchirieri values('005','007','101','Toma Alina',to_date('ian dd,yy'),'10',to_date('ian 16,07','mon dd,yy'); insert into inchirieri values('006','012','106','Albu Cristina',to_date('ian dd,yy'),'30',to_date('feb 12,07','mon dd,yy'); 05,07','mon 28,06','mon 10,07','mon 17,06','mon 06,07','mon 13,07','mon

INTEROGAREA BAZEI DE DATE B: 1. Adugai coloana Varsta in tabela Clienti avnd tipul number(2) ALTER TABLE Clienti ADD (Varsta number(2)); 2.Adugai restricia de inegritate check_varsta care s nu permit introducerea n cmpul Varsta a unor valori mai mici de 14 i mai mari decat 70 ALTER TABLE Clienti ADD (CONSTRAINT check_varsta CHECK (varsta>14 and varsta<70)); 3.Modificai proprietile cmpului nume astfel nct lungimea acestuia sa fie de 30 ALTER TABLE Clienti MODIFY(nume varchar2(30)); 4.Dezactivai restricia de integritate check_age ALTER TABLE Clienti DISABLE CONSTRAINT check_varsta; 5.tergei coloana Varsta din tabela Clienti ALTER TABLE Clienti DROP COLUMN Varsta; C: 6.Modificai n Stoenescu Mirela numele clientului cu cod_cli egal cu 105. UPDATE Clienti SET nume=Stoenescu Mirela WHERE cod_cli=3; 7.In tabela Bilblioteca cresteti cu 5 numarul de exemplare al cartii Padurea Spanzuratilor UPDATE Biblioteca SET nr_exe=nr_exe+5 WHERE titlu=Padurea Spanzuratilor; 8.Modificati in 35 valoarea abonamentului facut pentru 180 de zile UPDATE Abonamente SET valoare=35 WHERE nr_zile=180; 9.Modificati in Vitan adresa clientului cu cod_cli egal cu 108 UPDATE Clienti SET adresa=Vitan WHERE cod_cli=108; 10.Stergeti tuplul din tabela clienti cu cod_cli egal cu 102 DELETE FROM Clienti WHERE cod_cli=102; D: 11.Sa se afiseze toate datele despre cartile din biblioteca SELECT * FROM Biblioteca 12.Sa se afiseze numele si adresa clientilor in ordine alfabetica

SELECT nume, adresa FROM Clienti ORDER BY nume ASC; 13.Sa se afiseze cartile scrise de Liviu Rebreanu SELECT titlu,autor,nr_vol FROM Biblioteca WHERE autor=Liviu Rebreanu; 14.Sa se afiseze clientii care au carti inchiriate si titlul cartilor SELECT i.nume, b.titlu FROM Inchirieri i, Biblioteca b WHERE i.cod=b.cod; 15. Sa se afiseze numarul cartilor inchiriate in 2007 SELECT count(cod_i) Numarul_inchirierilor FROM Inchirieri WHERE data_i LIKE %07; 16.Sa se afiseze titlul, autorul si data returnarii cartilor inchiriate in 2006 SELECT b.titlu,b.autor,i.data_ret FROM Biblioteca b, Inchirieri i WHERE i.cod=b.cod AND i.data_i LIKE %06; 17.Sa se afiseze numarul de clienti pentru fiecare tip de abonament SELECT a.tip_ab, count(c.cod_cli) FROM Abonamente a, Clienti c WHERE a.cod_ab=c.cod_ab GROUP BY tip_ab; 18.Sa se afiseze titlu si autorul cartilor din biblioteca si data inchirierii, daca au fost inchiriate SELECT b.titlu,b.autor,i.data_i FROM Biblioteca b, Inchirieri i WHERE b.cod=i.cod(+); 19.Sa se afiseze cartile editate intre anii 2002 si 2006 fara cele editate in 2004 SELECT * FROM Biblioteca WHERE anul between 2002 and 2006 MINUS SELECT * FROM Biblioteca WHERE anul=2004; 20.Sa se afiseze cartile inchiriate in 2006 pentru 30 zile, si cartile inchiriate editate in 2005 SELECT b.titlu, b.autor, b.anul, i.data_i, i.nr_z FROM Biblioteca b, Inchirieri i WHERE b.cod=i.cod AND i.data_i LIKE %06 AND i.nr_z=30 UNION SELECT b.titlu, b.autor, b.anul, i.data_i, i.nr_z FROM Biblioteca b, Inchirieri i WHERE b.cod=.i.cod AND b.cod=i.cod AND b.anul=2005; 21.Sa se afiseze toti clientii bibliotecii care au aceeasi adresa ca si clientul cu codul 102 SELECT * FROM Clienti WHERE adresa=(SELECT adresa FROM Clienti WHERE cod_cli=102); 22.Sa se afiseze toti clientii care au acelasi tip de abonament ca si clientul cu codul 101, si sau abonat in 2006 SELECT nume, adresa, data_ab FROM Clienti WHERE cod_ab=(SELECT cod_ab FROM Clienti WHERE cod_cli=101) AND data_ab LIKE %06; 23.Sa se afiseze cartile ce vor fi returnate in luna februarie SELECT b.titul,b.autor, i.data_ret FROM Biblioteca b, Inchirieri i WHERE i.cod=b.cod AND i.data_ret LIKE feb%; 24.Sa se stearga din tabela Inchirieri clientii care au data returnarii astazi DELETE FROM Inchirieri

WHERE data_ret=sysdate; 25.Sa se afiseze cartile inchiriate care au fost editate in acelasi an cu cartea care are codul 001 SELECT titlu, autor FROM Biblioteca WHERE anul=(SELECT anul FROM Bilioteca WHERE cod=001) AND biblioteca.cod=inchirieri.cod; E: 26.Sa se creeze o tabela virtuala cu cartile editate intre anii 2004 si 2006 CREATE VIEW Carti_view AS SELECT * FROM Biblioteca WHERE anul BETWEEN 2004 AND 2006; 27.Sa se stearga din tabela virtuala Carti_view cartile care sunt inchiriate DELETE FROM Carti_view WHERE carti_view.cod=inchirieri.cod; 28.Sa se creeze un index pe tabela Clienti pe coloana Nume CREATE INDEX Clienti_nume_idx ON Clienti(nume); 29.Sa se creeze o secventa pentru asigurarea unicitatii cheii primare din tabela Clienti CREATE SEQUENCE seq_cod_cli start with 100 Increment by 10 Maxvalue 1000 nocycle; Insert into Clienti values(seq_cod_cli.nextval,Marin Ioana,Vitan,2860504171806, 01,to_date(ian 10,07,mon dd,yy),to_date(feb 10,07,mon dd,yy); 30.Sa se modifice pasul de incrementare Alter sequence seq_cod_cli incremente by 100; 31.Sa se afiseze valoarea curenta a secventei Select seq_cod_cli .cunval from Clienti; 32.Sa se creeze un sinonim pentru tabela Biblioteca Create synonym Carti for Biblioteca;

S-ar putea să vă placă și