Sunteți pe pagina 1din 47

PROIECT BAZE DE DATE

EVIDENA UNEI BIBLIOTECI

ACADEMIA DE STUDII ECONOMICE


FACULTATEA DE CIBERNETICA, STATISTICA SI INFORMATICA ECONOMICA

Descrierea bazei de date

Proiectul descrie un sistem de evidenta al unei biblioteci. Pentru acestea sunt necesare
informatii despre persoanele care imprumuta carti din biblioteca, dar si despre cartile aflat in
biblioteca,cat si editurile lor.
Baza de date contine urmatoarele tabelele: CARTE, CITITOR, FISA LECTURA, EDITURA.
O carte poate fi imprumutata mai multor cititori si acestia la randul lor pot impumuta mai multe
carti, de aceea se necesita crearea unei noi tabele, fisa lectura, care stabileste o legatura de
mai multi la unu si cu tabela cititor, si cu tabela carte.
De asemenea unei edituri ii corespund una sau mai multe carti, iar o carte poate fi publicata
la o singura editura, ceea ce dovedeste relatia de unu la multi dintre aceste doua tabele.
Tabela CARTE contine datele despre cartile existente in stocul bibliotecii si anume codul
fiecarei carti ,un cod unic (cod_carte caracter 20,cheia primara a tabelei), denumirea cartii
(denumire caracter 50), autorul cartii (autor caracater 30), numarul de exemplare din biblioteca
( numar 5), pretul cu care o carte a fost cumparata(pret number 5), codul editurii care este
campul prin care se face legatura cu tabela Editura (cod_editura), anul aparitiei publicatiei la
respective editura (an_aparitie numar 4), anul apartitiei trebuie sa fie intre 1700 si 2010.
Tabela CITITOR care contine cnp-ul cititorilor (cnp numar 13) cheia primara , numele
cititorilor (nume character 50), prenumele cititorilor (prenume character 50), orasul din care
provine fiecare cititor ( oras caracter 35), email-ul cititorului (email caracter 25),emailul are
restrictie trebuie sa se scrie simbolul @, adresa cititorului (adresa caracter 50), si numarul de
telefon (telefon character 10).
Tabela FISA_LECTURA contine datele despre codul fisei de lectura (cod_fisa caracter 25)
cheia primara, codul cartii imprumutate care face legatura cu tabela carte ( cod_carte caracter
20), cnp-ul persoanei care a imprumutat carti, camp care face legatura cu tabela cititori (numar
13), data imprumutarii cartilor (data_imprumut data ).
Tabela EDITURA contine date despre codul editurii care este unic (cheia primara
:cod_editura caracter 20), numele editurii (nume_edit caracter 15), adresa editurii (adresa
character 40) si un numar de telefon (tel caracater 10).

Schema conceptuala

CARTE
Cod_carte
Denumire
Autor
Nr_exemplare
Pret
Cod_editura
An_aparitie

EDITURA
Cod_editura
Nume_editura
Adresa
Tel

CITITOR
FISA_LECTURA
Cod_fisa
Cod_carte
Cnp
Data_imprumut

Cnp
Nume
Prenume
Oras
Email
Adresa
Telefon

Crearea tabelelor

create table carte(cod_carte varchar2(20) primary key,denumire varchar2(50),autor


varchar2(30),nr_exemplare number(5),pret number(5),cod_editura references
editura(cod_editura),an_aparitie number(4) constraint ck_an_aparitie check(an_aparitie
between 1700 and 2010));
create table editura(cod_editura varchar2(25) primary key, nume_editura varchar2(15),adresa
varchar2(40),tel varchar2(10));
create table cititor(cnp number(13) primary key, nume varchar2(50),prenume
varchar2(50),oras varchar2(50),email varchar2(25) constraint ck_email check(email like '%@
%.__'),adresa varchar2(50),telefon varchar2(10));
create table fisa_lectura(cod_fisa varchar2(25) primary key,cod_carte references
carte(cod_carte),cnp references cititor(cnp),data_imprumut date default sysdate);

Inserare valori in tabela CARTE

insert into carte values ('1','poesii','mihai eminescu','4','57','1','1923');


insert into carte values ('2','ion','liviu rebreanu','6','74','2','1948');
insert into carte values ('3','o scrisoare pierduta','ion luca caragiale','7','105','3','1999');
insert into carte values ('4','o noapte furtunoasa','ion luca caragiale','13','51','1','1999');
insert into carte values ('5','tiganiada','ion budai deleanu','3','17','5','1962');
insert into carte values ('6','creanga de aur','mihail sadoveanu','4','47','6','1917');
insert into carte values ('7','morometii','marin preda','7','55','7','1979');
insert into carte values ('8','flori de mucigai','tudor arghezi','6','51','8','1977');
insert into carte values ('9','cuvinte potrivite','tudor arghezi','4','109','8','1970');
insert into carte values ('10','baltagul','mihail sadoveanu','4','88','10','1992');

Inserare valori in tabela EDITURA

insert into editura values('1','corint','bld dacia nr 1','0722732594');


insert into editura values('2','all','bld magheru nr 2','0722332594');
insert into editura values('3','teora','bld splaiul independentei nr 3','0762732594');
insert into editura values('4','humanitas','bld unirii nr 4','0726732594');
insert into editura values('5','rao','bld ion mihalache nr 5','0722736294');
insert into editura values('6','litera','bld preciziei nr 6','0722732500');
insert into editura values('7','art','bld iuliu maniu nr 7','0722732012');
insert into editura values('8','aramis','bld aviatorilor nr 8','0722731104');
insert into editura values('9','economica','bld academiei nr 9','0721672594');
insert into editura values('10','meteor press','bld eroilor nr 10','0756632594');

Inserare valori in tabela CITITOR

insert into cititor values('2890317295914','ionescu','mihaela','Bucuresti','mihaa@gmail.ro','str


uverturii nr 51','0727320486');
insert into cititor values('1901102385560','popescu','liviu','Bucuresti','liviutz@gmail.ro','str ion
campineanu nr 76','0724684867');
insert into cititor values('1901104581173','marinescu','cornel','Constanta','corny@yahoo.ro','str
vasile lascar nr 6','0766104867');
insert into cititor values('2890101405934','mihaescu','andreea','Brasov','deea@gmail.ro','str
aurel vlaicu nr 46','0722103567');
insert into cititor values('2890202275943','marin','diana','Brasov','dydy@gmail.ro','calea
calarasi nr 2','0766104660');
insert into cititor
values('2900303242422','mircescu','corina','Bucuresti','corinutza@yahoo.it','calea buzestilor nr
19','0744101167');
insert into cititor values('1901106828634','stanescu','radu','Iasi','raduku@yahoo.it','str
alexandriei nr 22','0722104007');

insert into cititor values('1900505465343','vasilescu','sergiu','Ramnicu


Valcea','serser@yahoo.it','bdul averescu nr 33','0766100000');
insert into cititor values('1900808546275','mutu','adrian','Arad','mutul@gmail.ro','bdul eroilor
nr 73','0720858881');
insert into cititor values('2890319536377','chivu','cristina','Bucuresti','chivuvu@yahoo.ro','calea
calarasi nr 104','0722732595');

Inserare valori in tabela FISA LECTURA

insert into fisa_lectura values('1','1','1901104581173',to_date ('25/01/2009','DD/MM/YYYY'));


insert into fisa_lectura values('2','2','1900505465343',to_date ('15/06/2010','DD/MM/YYYY'));
insert into fisa_lectura values('3','3','2900303242422',to_date ('20/11/2010','DD/MM/YYYY'));
insert into fisa_lectura values('4','1','2900303242422',to_date ('13/10/2008','DD/MM/YYYY'));
insert into fisa_lectura values('5','5','2890319536377',to_date ('05/8/2008','DD/MM/YYYY'));
insert into fisa_lectura values('6','6','1901104581173',to_date ('11/8/2009','DD/MM/YYYY'));
insert into fisa_lectura values('7','7','1901104581173',to_date ('22/03/2009','DD/MM/YYYY'));
insert into fisa_lectura values('8','8','1901102385560',to_date ('03/01/2010','DD/MM/YYYY'));
insert into fisa_lectura values('9','8','2890317295914',to_date ('22/12/2010','DD/MM/YYYY'));

insert into fisa_lectura values('10','10','1901106828634',to_date ('25/09/2010','DD/MM/YYYY'));

Instructiunea ALTER

1) Sa se adauge inca o coloana in tabela cititor.


alter table cititor add (fax varchar2(15));

2) Sa se modifice tipul de date din coloana fax, data sa fie de tip


varchar2(20).
alter table cititor modify (fax varchar2(20));

3) Sa se adauge restrictii la campul pret din tabela carte; acesta sa


fie intre 1 si 999.

alter table carte add (constraint check_pret check(pret>1 and pret<999));

4) Sa se stearga constrangerea pentru pret de la subpunctul 3.

alter table carte disable constraint check_pret ;

5) Sa se stearga coloana fax din tabela cititor.


alter table cititor drop column fax;

Instructiunea UPDATE
1) Sa se adauge cate un exemplar in plus acelor carti care au
anul aparitiei egal cu 1999.
update carte set nr_exemplare=nr_exemplare+1 where an_aparitie=1999;

2) Sa se actualizere cartea cu codul 9, astfel incat aceasta sa


primeasca ca numar de exemplare si pret, numarul de
exemplare si pretul cartii cu codul 2.
update carte set (pret,nr_exemplare)=(select pret,nr_exemplare from
carte where cod_carte=2) where cod_carte=9;

3) Sa se modifice orasul de provenienta pentru toate persoanele


din tabela cititori cu numele de mutu. Noul oras va fi
Vaslui
update cititor set oras= vaslui where nume= mutu;

4) Sa se dubleze pretul toturor cartilor de la editura cu codul=5.


update carte set pret=pret*2 where cod_editura= 5;

5) Sa se modifice numele tuturor cititorilor al caror cnp se


termina in...75. Noul nume este murgu .

update cititor set nume='murgu' where cnp like '%75';

Interogari

1) Sa se afiseze numele si prenumele toturor cititorilor din orasul


Bucuresti.
Select nume, prenume
From cititor
Where oras=Bucuresti;

2) Sa se afiseze numele si prenumele cititorilor si sa se specifice de


unde sunt(Capitala sau provincie).

select nume,prenume, decode(oras,'Bucuresti','Capitala','Provincie')


from cititor;

3) Sa se afiseze toate cartile imprumutate la momentul actual, precum


si cititorii care le-au imprumutat.
select denumire,autor,nume,prenume
from carte , cititor , fisa_lectura
where carte.cod_carte=fisa_lectura.cod_carte and
fisa_lectura.cnp=cititor.cnp;

4) Sa se afiseze toti cititorii din Bucuresti care au e-mailul pe domeniu


romanesc.
select nume,prenume
from cititor
where upper(oras)='BUCURESTI'and email like '%.ro';

5) Sa se determine cartile care au pretul mai mare decat 50 dar anul


aparitiei lor nu este intre 1800 si 1980.

select denumire, autor from carte where pret>50


minus
select denumire, autor from carte where an_aparitie between 1800 and
1980;

6) Sa se afiseze cititorii care au imprumutat mai mult de 2 carti.


select nume,prenume, count(cod_carte)
from cititor,fisa_lectura
where cititor.cnp=fisa_lectura.cnp
group by nume, prenume
having count(cod_carte)>2;

7) Sa se afiseze persoanele al caror prenume se termina in a si sunt


din reteaua Vodafone.

select nume,prenume from cititor where telefon like'072%'


intersect
select nume,prenume from cititor where prenume like '%a';

8) Sa se afiseze toate cartile al caror pret este mai mare decat 100 si
mai mic decat 40.
select denumire,autor from carte where pret>100
union
select denumire,autor from carte where pret<40;

9) Sa se creeze o adresa de mail pentru fiecare editura, adaugandu-se


la nume .editura@yahoo.com.

select concat(nume_editura,'.editura@yahoo.com')
from editura;

10)
Sa se realizeze o diferentiere intre autorii cartilor, astfel incat la
Mihai Eminescu sa se specifice ca este cel mai mare poet roman, la
Ion Luca Caragiale ca este cel mai mare dramaturg roman, la Mihail
Sadoveanu ca este Ceahlaul literaturii romane, iar in rest sa ramana
cu titulatura de personalitati importante.

select autor, case autor


when 'mihai eminescu' then 'Cel mai mare poet roman'
when 'ion luca caragiale' then 'Cel mai mare dramaturg roman'
when 'mihail sadoveanu' then 'Ceahlaul litaraturii romane'
else 'Personalitate importanta'

end
from carte;

11)
Sa se calculeze numarul de zile de cand au fost imprumutate
cartile si pana in prezent.
select data_imprumut,round(sysdate-data_imprumut)
from fisa_lectura;

12)
Sa se afiseze valoare medie a pretlui tuturor cartilor care au
aparut dupa 1950

select round(avg(pret),1) val_medie


from carte
where an_aparitie>1950;

13)
Sa se afiseze editurile care au publicat carti pentru biblioteca,
precum si numele si autorii cartilor respective. De asemenea anul
aparitiei trebuie sa fie mai mic de 1950.
select denumire,autor,nume_editura
from carte,editura
where editura.cod_editura=carte.cod_editura and carte.an_aparitie<1950;

14)
Sa se afiseze cate carti au fost imprumutate de persoane de sex
feminin.

select count(a.cod_carte)
from cititor c, fisa_lectura a
where c.cnp=a.cnp and substr(c.cnp,1,1)='2';

15)
Sa se afiseze toate cartile care sunt intr-un numar de exemplare
mai mare decat 6, dar au aparut dupa 1980.

select *
from carte
where nr_exemplare>6 and an_aparitie>1980;

Tabele Virtuale

1) Sa se creeze o tabela virtuala care sa contina toate cartile publicate


dupa anul 1970.
create view tabela_virtuala_1
as select *
from carte
where an_aparitie>1970;

2)

Sa se creeze o tabela virtuala care sa contina datele despre toate


persoanele de sex feminin cu resedinta in bucuresti, si care de
asemenea au adresa de e-mail pe domeniu romanesc.
create view tabela_virtuala_2
as select *
from cititor
where cnp like '2%' and email like '%.ro' and oras='Bucuresti';

Indecsi

1) Sa se creeze un index dupa autor in tabela carte.

create index autor_index


on carte(autor);

2) Sa se creeze un index dupa numele cititorilor.

create index nume_index


on cititor(nume);

Secvente

1) Sa se creeze o secventa pentru tabela carte. Codul cartii sa inceapa


de la valoarea 50 si sa se incrementeze cu pasul 5. Valoare maxima
sa fie 100.

create sequence secventa_1

start with 50
increment by 5
maxvalue 100
nocycle;

2) Sa se creeze o secventa pentru tabela editura. Codul editurii sa


inceapa de la valoarea 20 si sa se incrementeze cu pasul 3. Valoare
maxima sa fie 69

create sequence secventa_2


start with 20
increment by 3
maxvalue 69

nocycle;

Sinonime
1) Sa se creeze sinonimul tabela_1 pentru tabela cititor.

create synonym tabela_1 for cititor;

2) Sa se creeze sinonimul tabela_2 pentru tabela carte.

create synonym tabela_2 for carte;

Rapoarte si formulare in Visual FoxPro

Schema conceptuala:

1) Sa se realizeze un formular pentru a actualiza datele din tabela


carte:

2) Sa se realizere un formular pentru actualizarea datelor din tabela


cititor:

3)

Sa se realizare un raport care permite vizualizarea inregistrarilor din


tabela cititor:

4) Sa se realizeze un raport care permite vizualizarea datelor din tabela


fisa_lectura: