Descrierea bazei de date

Tema acestui proiect o reprezinta crearea si gestiunea unei baze de date pentru
Biblioteca Centrala a Academiei de Studii Economice din Bucuresti. Aceasta necesita
dezvoltarea si implementarea unor sisteme informatice care sa ajute la imbunatatirea
serviciilor pe care le ofera dar si pentru a fluidiza operatiunile care se pot face in interiorul
bibliotecii.
Scopul acestei baze de date este acela de a avea o evidenta a numarului de persoane
care intra in biblioteca, care fie decid sa imprumute carti, fie studiaza in incinta bibliotecii. De
asemenea este foarte importanta evidenta zilei cand se imprumuta o carte si cand trebuie
restituita si evidenta cartilor pe care biblioteca le detine.

Construirea Diagramei Entitate-Asociere (ERD)

CARTE

CITITOR

# ISBN
* titlu
* autor
* editura
* id_domeniu
* data aparitiei

# reader_ID
* nume
* adresa
* telefon
* tip
* email -- -- -- -- -o data nasterii

are

are
-- -- -- -- --

|
inclusă |
|
aparține

aparține

include

DOMENIU

ISTORIC_ÎMPRUMUT

# id_domeniu
* gen

# id
* data_împrumut
* data_restituire

1

COMENZI PENTRU DEFINIREA DATELOR (LDD)
CREAREA TABELELOR

1. Crearea tabelei CARTE
CREATE TABLE CARTE(ISBN NUMBER(11), TITLU VARCHAR2(30), AUTOR
VARCHAR2(30), EDITURA VARCHAR2(30), ID_DOMENIU NUMBER,
DATA_APARITIEI DATE)

2. Crearea tabelei CITITOR
CREATE TABLE CITITOR(READER_ID NUMBER, NUME VARCHAR2(30), ADRESA
VARCHAR2(30),TELEFON NUMBER(10),TIP VARCHAR2(15),DATA_NASTERII
DATE,EMAIL VARCHAR2(30));

2

3. Crearea tabelei ISTORIC_ÎMPRUMUT
CREATE TABLE ISTORIC_ÎMPRUMUT(ID NUMBER, ISBN NUMBER(11),
READER_ID NUMBER, DATA_ÎMPRUMUT DATE, DATA_RESTITUIRE DATE);

4. Crearea tabelei DOMENIU
CREATE TABLE DOMENIU(ID_DOMENIU NUMBER, ISBN NUMBER(11),GEN
VARCHAR2(20));

ADAUGAREA DE CONSTRANGERI
1. Adaugarea constrangerilor pentru tabela CARTE
ALTER TABLE CARTE ADD CONSTRAINT ISBN_PK PRIMARY KEY(ISBN);
ALTER TABLE CARTE ADD CONSTRAINT AUTOR_NN CHECK(AUTOR IS NOT
NULL);
ALTER TABLE CARTE ADD CONSTRAINT TITLU_NN CHECK(TITLU IS NOT NULL);
ALTER TABLE CARTE ADD CONSTRAINT ID_DOMENIU_FK FOREIGN
KEY(ID_DOMENIU) REFERENCES DOMENIU(ID_DOMENIU);

3

2. Adaugarea constrangerilor pentru tabela CITITOR
ALTER TABLE CITITOR ADD CONSTRAINT READER_ID_PK PRIMARY
KEY(READER_ID);
ALTER TABLE CITITOR ADD CONSTRAINT TELEFON_UQ UNIQUE(TELEFON);
ALTER TABLE CITITOR ADD CONSTRAINT EMAIL_UQ UNIQUE(EMAIL);

3. Adaugarea constrangerilor pentru tabela ISTORIC_ÎMPRUMUT
ALTER TABLE ISTORIC_ÎIMPRUMUT ADD CONSTRAINT ID_PK PRIMARY
KEY(ID);
ALTER TABLE ISTORIC_ÎIMPRUMUT ADD CONSTRAINT ISBN_FK FOREIGN
KEY(ISBN) REFERENCES CARTE(ISBN);
ALTER TABLE ISTORIC_ÎIMPRUMUT ADD CONSTRAINT READER_ID_FK
FOREIGN KEY(READER_ID) REFERENCES CITITOR(READER_ID);

4. Adaugarea constrangerilor pentru tabela DOMENIU
ALTER TABLE DOMENIU ADD CONSTRAINT ID_DOMENIU_PK PRIMARY
KEY(ID_DOMENIU);
ALTER TABLE DOMENIU ADD CONSTRAINT ISBN_FK FOREIGN KEY(ISBN)
REFERENCES CARTE (ISBN);

4

COMENZI PENTRU MANIPULAREA DATELOR (LMD)
POPULAREA TABELELOR (INSERT)
1. Popularea tabelei CARTE
INSERT INTO CARTE(ISBN, TITLU, AUTOR, EDITURA, ID_DOMENIU,
DATA_APARITIEI) VALUES(17783239592,‘Mos Goriot’,‘Honore de
Balzac’,’Polirom’,1,‘06/FEB/2012’);
INSERT INTO CARTE(ISBN, TITLU, AUTOR, EDITURA, ID_DOMENIU,
DATA_APARITIEI) VALUES(17783239593,’Decameronul’,’Giovanni
Boccaccio’,’Humanitas’,2,’09/DEC/2009’);
INSERT INT0 CARTE (ISBN, TITLU, AUTOR, EDITURA, ID_DOMENIU,
DATA_APARITIEI) VALUES (17783239594,’Fictiuni’,’Jorges Luis
Borges’,’Litera’,3,’11/JUN/2014’);
INSERT INTO CARTE (ISBN,TITLU,AUTOR,EDITURA,ID_DOMENIU,
DATA_APARITIEI) VALUES (17783239596,’La rascruce de vanturi’,’Emily
Bronte’,’Art’,4,’01/MAR/1999’);
INSERT INTO CARTE(ISBN, TITLU, AUTOR, EDITURA, ID_DOMENIU,
DATA_APARITIEI) VALUES(17783239597,’Calatorie la capatul noptii’,’Louis Ferdinand
Celine’,’Humanitas’,5,’05/IAN/2007’);

5

2. Popularea tabelei CITITOR
INSERT INTO CITITOR(READER_ID, NUME, ADRESA, TELEFON, TIP,
DATA_NASTERII, EMAIL) VALUES (1,’ANITEI COSMIN’,’Str. Cicoarei
nr.45’,’0747538590’,’student’,’05/JAN/1991’, ‘a.cosmin@yahoo.com’);
INSERT INTO CITITOR(READER_ID, NUME, ADRESA, TELEFON,TIP,
DATA_NASTERII, EMAIL) VALUES(2,’CISLARU SIMONA’,’Str. Amzei
nr.56’,’0720486035’, ’profesor’,’IS NULL’, ’simona.cislaru@cig.ase.ro’);
INSERT INTO CITITOR(READER_ID, NUME, ADRESA,TELEFON,TIP,
DATA_NASTERII, EMAIL) VALUES(3, ‘STANGACIU MARIA’,’Bd. Dacia nr.
77’ ,’0765948795’,’vizitator’,’23/NOV/1999’,’maria_stangaciu@gmail.com’);
INSERT INTO CITITOR(READER_ID, NUME, ADRESA, TELEFON,TIP,EMAIL)
VALUES(4,’CRETU SORIN’,’Bd. Unirii nr. 43’,’0743659340’,
’profesor’ ,’s.cretu@yahoo.com’);
INSERT INTO CITITOR( READER_ID, NUME, ADRESA, TELEFON,
TIP,DATA_NASTERII, EMAIL) VALUES (5,’TARCAN IONELA’,’Bd. Carol
nr.5’,’0730589574’,’student’,’28/JUL/1994’,’ionela_tarcan@yahoo.com’);

3. Popularea tabelei ISTORIC_ÎMPRUMUT
INSERT INTO ISTORIC_ÎIMPRUMUT(ID, ISBN, READER_ID, DATA_ÎMPRUMUT,
DATA_RESTITUIRE) VALUES(1,’17783239594’,1,’28/FEB/2014’,’02/MAR/2014’);
INSERT INTO ISTORIC_ÎIMPRUMUT(ID,ISBN,READER_ID, DATA_ÎMPRUMUT,
DATA_RESTITUIRE) VALUES(2,’17783239592’,2,’02/JAN/2015’,’10/JAN/2015’);
INSERT INTO ISTORIC_ÎIMPRUMUT(ID,ISBN,READER_ID, DATA_ÎMPRUMUT,
DATA_RESTITUIRE) VALUES(3,’17783239596’,3,’30/NOV/2014’,’05/DEC/2014’);

6

INSERT INTO ISTORIC_ÎIMPRUMUT(ID,ISBN,READER_ID, DATA_ÎMPRUMUT,
DATA_RESTITUIRE)VALUES(4,’17783239593’,4,’12/NOV/2014’,’15/NOV/2014’);
INSERT INTO ISTORIC_ÎIMPRUMUT(ID,ISBN,READER_ID, DATA_ÎMPRUMUT,
DATA_RESTITUIRE) VALUES(5,’17783239597’,5,’13/JUL/2014’,’23/JUL/2014’);

4. Popularea tabelei DOMENIU
INSERT INTO DOMENIU(ID_DOMENIU,ISBN,GEN) VALUES (1,
’17783239592’ ,’Beletristica’);
INSERT INTO DOMENIU(ID_DOMENIU,ISBN,GEN) VALUES (2,
’17783239593’ ,’Beletristica’);
INSERT INTO DOMENIU(ID_DOMENIU,ISBN,GEN) VALUES
(3,’17783239594’ ,’Fictiune’);
INSERT INTO DOMENIU(ID_DOMENIU,ISBN,GEN)
VALUES(4,’17783239597’ ,’Beletristica’);
INSERT INTO DOMENIU(ID_DOMENIU,ISBN,GEN) VALUES(5,’17783239596’,
‘Calatorie’);

CONSTRUCTIE EXPRESII SQL
7

ALTER
1. Pentru a putea adauga date in tabela CARTE trebuie sa dezactivam
pentru moment anumite constrangeri.
ALTER TABLE CARTE
DISABLE CONSTRAINT ID_DOMENIU_FK;

Dupa ce am adaugat toate datele in tabela putem activa constrangerea pe
care am dezactivat-o anter++ ior.
ALTER TABLE CARTE
ENABLE CONSTRAINT ID_DOMENIU_FK;

UPDATE
2. Sa se modifice denumirea editurii cartii cu ISBN=17783239593 in Art
UPDATE CARTE
SET EDITURA=’Art’
WHERE ISBN=17783239593;

3. Sa se modifice data de returnare a cartii care a fost imprumutata de
catre cititorul cu id 3, in 10 Decembrie 2014
UPDATE ISTORIC_ÎIMPRUMUT
SET DATA_RESTITUIRE=’10/DEC/2014’
WHERE READER_ID=3

SELECT
4. Sa se afiseze numele si numarul de telefon al tuturor studentilor
SELECT NUME, TELEFON
FROM CITITOR
WHERE TIP=’student’
AND DATA_NASTERII= ‘28/JUL/1994’;
8

5. Sa se afiseze numele cititorilor care s-au nascut in luni care incep cu
litera J.
SELECT NUME
FROM CITITOR
WHERE DATA_NASTERII LIKE ‘%J%’;

6. Sa se afiseze cititorii care au imprumutat carti in anul 2014.
SELECT C.READER_ID, C.NUME, I.DATA_ÎMPRUMUT
FROM CITITOR C, ISTORIC_ÎIMPRUMUT I
WHERE I.DATA_ÎMPRUMUT BETWEEN TO_DATE(’01.01.2014’) AND
TO_DATE(’12.31.2014’)
AND C.READER_ID=I.READER_ID;

ALTER
7. Sa se redenumeasca tabela ISTORIC_ÎIMPRUMUT cu ISTORIC
ALTER TABLE ISTORIC_ÎIMPRUMUT RENAME TO ISTORIC;

9

8. Sa stearga toate campurile din coloana adresa, tabela cititor.
ALTER TABLE CITITOR DROP COLUMN ADRESA;

9. Sa se afiseze titlurile cartilor care au fost publicate de catre editura
art si sa se ordoneze descrescator dupa data aparitiei.
SELECT TITLU, DATA_APARITIEI
FROM CARTE
WHERE EDITURA= ‘Art’
ORDER BY DATA_APARITIEI DESC

10

10. Sa se afiseze titlul, autorul si genul cartii
SELECT C.TITLU, C.AUTOR, D.GEN
FROM CARTE C, DOMENIU D
WHERE C.ISBN=D.ISBN;

DELETE
11. Sa se stearga randurile din tabelul istoric care au data de imprumut
mai mica de 01/JUN/2014.
DELETE FROM ISTORIC
WHERE DATA_ÎMPRUMUT < '01/JUN/2014';

12. Sa se afiseze titlul, autorul si ISBN a tuturor cartilor din baza de date
care sunt scrise de Emily Bronte.
SELECT TITLU, AUTOR, ISBN
FROM CARTE
WHERE ISBN=
(SELECT ISBN
FROM CARTE
WHERE AUTOR = 'Emily Bronte');

13. Afisati numele, numarul de telefon si adresa de email a clientilor din
tabela cititor doar pentru cei care sunt studenti. Cititorii sa fie
aranjati dupa data nasterii, descrescator.
11

SELECT NUME, TELEFON, EMAIL
FROM CITITOR
WHERE TIP = ‘student’
ORDER BY DATA_NASTERII DESC;

14. Afisati cu majuscule titlul si autorul cartii
SELECT UPPER (TITLU), UPPER (AUTOR)
FROM CARTE;

15. Calculati numarul de carti care fac parte din categoria Beletristica si
Fictiune
SELECT D.GEN, COUNT (C.ISBN)
FROM DOMENIU D, CARTE C
WHERE D.ISBN=C.ISBN
AND D.GEN IN (‘Beletristica’,’Fictiune’)
GROUP BY GEN

12