Sunteți pe pagina 1din 9

PROIECT BAZE DE DATE

EVIDENŢA ACTIVITĂŢILOR
UNEI BIBLIOTECI
MOTIVAŢIA APLICAŢIEI

Volumul mare de informaţii existente în cazul unei


biblioteci cu un număr mare de cărţi şi clienţi determină
necesitatea informatizării domeniului de gestiune a
activităţilor unei biblioteci.

Activitatea de evidenţă a unei biblioteci implică o muncă


intensă cu numeroase documente care ţin de înregistrarea
clienţilor, a cărţilor închiriate de aceştia prin abonament, de
prelucrare a datelor acestora şi de înregistrare permanentă a
închirierilor şi returnărilor efectuate, într-un timp cât mai scurt.
Prin informatizarea domeniului de evidenţă a unei biblioteci se
câştigă timp şi se evită pierderea unor date, nefiind necesară
consultarea unui număr mare de documente ce ţin de
gestionarea activităţilor unei biblioteci. Se obţin astfel mult mai
uşor informaţii despre clienţi, despre cărţile închiriate şi datele
de returnare, şi alte date.
DESCRIEREA APLICAŢIEI

Principalele funcţii care se pot întâlni într-o bibliotecă


sunt:
- Evidenţa cărţilor din bibliotecă
- Evidenţa clienţilor
- Evidenţa închirierilor efectuate

La nivelul unei biblioteci se poate realiza o bază de date.


Prin interogarea bazei de date se vor obţine informaţii despre o
carte sau un client specificat, despre închirierile făcute de un
client specificat sau despre cărţile ce nu au fost returnate până
la data restantă.

Tabelele din cadrul aplicatiei sunt:


- ABONAMENTE
- CLIENŢI
- BIBLIOTECĂ
- ÎNCHIRIERI

Fiecare carte este caracterizată de datele sale specifice.


Pentru fiecare carte se vor cunoaşte: codul, titlul şi autorul,
editura, anul ediţiei, numărul de volume şi numărul de
exemplare.
Pentru evidenţa clienţilor se vor cunoaşte: codul
clientului, numele şi prenumele, adresa, telefonul, codul
numeric personal, data abonării, tipul abonamentului ales si
valoarea acestuia.
Este necesară şi o evidenţă a închirierilor efectuate. Pentru
aceasta se vor cunoaşte: codul cărţii închiriate, numele
clientului care o închiriază, numărul de zile pentru care se face
închirierea, data închirierii, data până la care trebuie returnată
cartea.
ABONAMENTE
COD_AB TIP_AB NR_ZILE VALOARE

CLIENŢI
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

Legătura dintre primele două tabele, abonamente şi clienţi,


se realizează prin câmpul cod_ab care reprezintă tipul
abonamentului ales de client. Între cele două tabele există o
legătură 1:n deoarece un client îşi poate alege un singur tip de
abonament când îi sunt introduse datele în baza de date, dar un
anumit tip de abonament poate fi ales de mai mulţi clienţi în
acelaşi timp.
Tabela clienţi se leagă de tabela închirieri prin câmpul
numit cod_cli ce reprezintă codul clientului care împrumută sau
returnează cărţi. Între tabela clienţi şi tabelele închrierii există
legătură de tipul 1:n deoarece un client poate închiria mai
multe cărţi, dar o carte nu poate fi împrumutată decât de un
singur client la un moment dat.
Tabela bibliotecă, ce conţine evidenţa cărţilor din bibliotecă,
este legată de tabela închirieri prin câmpul cod, care reprezintă
codul cărţii împrumutate sau returnate. Între tabela bibliotecă şi
tabela închirieri exista legătură 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 05,07','mon


dd,yy'),'15',to_date('ian 20,07','mon dd,yy');
insert into inchirieri values('002','010','108','Lupu Adriana',to_date('dec 28,06','mon
dd,yy'),'30',to_date('ian 27,07','mon dd,yy');
insert into inchirieri values('003','009','100','Popescu Ion',to_date('ian 10,07','mon
dd,yy'),'20',to_date('ian 30.07','mon dd,yy');
insert into inchirieri values('004','005','105','Tudor Mirela',to_date('dec 17,06','mon
dd,yy'),'30',to_date('ian 16,07','mon dd,yy');
insert into inchirieri values('005','007','101','Toma Alina',to_date('ian 06,07','mon
dd,yy'),'10',to_date('ian 16,07','mon dd,yy');
insert into inchirieri values('006','012','106','Albu Cristina',to_date('ian 13,07','mon
dd,yy'),'30',to_date('feb 12,07','mon dd,yy');

INTEROGAREA BAZEI DE DATE


B:
1. Adăugaţi coloana Varsta in tabela Clienti având tipul number(2)
ALTER TABLE Clienti
ADD (Varsta number(2));
2.Adăugaţi restricţia de inegritate check_varsta care să nu permită introducerea în câmpul
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.Modificaţi proprietăţile câmpului nume astfel încât lungimea acestuia sa fie de 30
ALTER TABLE Clienti
MODIFY(nume varchar2(30));
4.Dezactivaţi restricţia de integritate check_age
ALTER TABLE Clienti
DISABLE CONSTRAINT check_varsta;
5.Ştergeţi coloana Varsta din tabela Clienti
ALTER TABLE Clienti
DROP COLUMN Varsta;

C:
6.Modificaţi î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 s-
au 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