Sunteți pe pagina 1din 47

PROIECT BAZE DE DATE

EVIDENȚA 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
Cnp
Nume
Prenume
FISA_LECTURA Oras
Cod_fisa Email
Cod_carte Adresa
Cnp Telefon
Data_imprumut
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:

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