Sunteți pe pagina 1din 8

ACADEMIA DE STUDII ECONOMICE BUCURESTI

PROIECT

- BAZE DE DATE APROFUNDATE -

BAZA DE DATE PENTRU GESTIUNEA UNEI BIBLIOTECI

Proiectul isi propune realizarea unei baze de date pentru administrarea unei biblioteci. Este realizat olosind !icroso t "#$ "er%er &''(. "e considera urmatorul dictionar al datelor) *D+ARTE *DAUTOR T*T$U NU!EAUTOR AN PRENU!EAUTOR $*!BA *DED*TURA *D+*T*TOR NU!EED*TURA NU!E+*T*TOR TE$EFONED*TURA PRENU!E+*T*TOR DATA*!PRU!UT +NP DATARE"T*TU*RE TE$EFON PENA$*ZARE "E+TOR ,A$OARE Re-uli de -estiune) - pot e.ista mai multi studenti cu acelasi nume - data restituirii trebuie sa coincida sau sa ie ulterioara datei imprumutului - codul numeric personal trebuie sa ie alcatuit din /0 ci re - un autor poate scrie mai multe carti - la o editura pot aparea mai multe carti - sectorul trebuie sa ie /1&101213 sau 4

Diagrama bazei de date biblioteca

!odelul lo-ic al datelor se prezinta dupa cum urmeaza) CARTE 5*D+ARTE1 T*T$U1 AN1 $*!BA1 *DED*TURA6 CITITOR 5*D+*T*TOR1 NU!E+*T*TOR1 PRENU!E+*T*TOR1 +NP1 TE$EFON1 "E+TOR6 AUTOR 5*DAUTOR1 NU!EAUTOR1 PRENU!EAUTOR6 EDITURA 5*DED*TURA1 NU!EED*TURA1 TE$EFONED*TURA6 CARTEAUTOR 5*D+ARTE1 *DAUTOR6 !ISA 5*D+*T*TOR1 *D+ARTE1 DATA*!PRU!UT1 DATARE"T*TU*RE1 PENA$*ZARE1 ,A$OARE6 TRIGGERS "e %a crea tabela Ar7i%a1 a%and c7eia primara *D si elemente e.plicatie si data operatie. *D-ul se %a completa automat. " Realizati #$ trigger care %a ada#ge i$ tabel toti cititorii ce &or 'i ada#gati i$ tabela Cititor(
CREATE TRIGGER [dbo].[ADAUGA_CITITOR] ON [dbo].[CITITOR] AFTER INSERT AS BEGIN INSERT INTO ARHIVA(EXPLICATIE,DATAOPERATIE) SELECT 'A FOST ADAUGAT CITITORUL' NU!ECITITOR '' GETDATE() FRO! INSERTED END

PRENU!ECITITOR ,

" Realizati #$ trigger care %a )ermita act#alizarea $#mel#i %t#de$tilor di$ tabela Cititor(
ALTER TRIGGER [dbo].[!ODIFICA_CITITOR] ON [dbo].[CITITOR] AFTER UPDATE AS BEGIN INSERT INTO ARHIVA(EXPLICATIE,DATAOPERATIE) SELECT 'S"A !ODIFICAT CITITORUL' DELETED.NU!ECITITOR DELETED.PRENU!ECITITOR 'CU' INSERTED.NU!ECITITOR '' INSERTED.PRENU!ECITITOR,GETDATE() FRO! DELETED,INSERTED END

''

" Realizati #$ trigger care %a )ermita %tergerea %t#de$tilor di$ %ector#l *(


ALTER TRIGGER [dbo].[STERGE_CITITOR] ON [dbo].[CITITOR] AFTER DELETE AS BEGIN

BEGIN

IF EXISTS (SELECT SECTOR FRO! DELETED #HERE SECTOR$'%')

ROLLBAC& TRANSACTION END ELSE BEGIN INSERT INTO ARHIVA(EXPLICATIE,DATAOPERATIE) SELECT 'S"A STERS CITITORUL' NU!ECITITOR,GETDATE() FRO! DELETED END END

+IE,S /."a se a iseze toate cartile al caror titlu incepe cu litera *. "E$E+T FRO! 89ERE T*T$U dbo.+ARTE 5T*T$U $*:E N;*<;6

&."a se a iseze toti cititorii de se. eminine din tabela +ititor. "E$E+T +NP1 NU!E+*T*TOR1 PRENU!E+*T*TOR FRO! dbo.+*T*TOR 89ERE 5$EFT5+NP1 /6 = ;&;6 0. "a se a iseze toti cititorii nascuti in anul />(4. "E$E+T NU!E+*T*TOR1 PRENU!E+*T*TOR1 +NP FRO! dbo.+*T*TOR 89ERE 5+NP $*:E N;?(4<;6 2."a se a iseze toate cartile aparute intre anii />&' si />>'. "E$E+T AN1 T*T$U FRO! dbo.+ARTE 89ERE 5AN @ N;/>&';6 AND 5AN A N;/>>';6 3."a se a iseze toate cartile scrise de $i%iu Rebreanu. "E$E+T dbo.AUTOR.NU!EAUTOR1 dbo.AUTOR.PRENU!EAUTOR1 dbo.+ARTE.T*T$U1 +OUNT5dbo.+ARTE.*D+ARTE6 A" E.pr/ FRO! dbo.+ARTEAUTOR *NNER BO*N dbo.AUTOR ON dbo.+ARTEAUTOR.*DAUTOR = dbo.AUTOR.*DAUTOR *NNER BO*N dbo.+ARTE ON dbo.+ARTEAUTOR.*D+ARTE = dbo.+ARTE.*D+ARTE CROUP BD dbo.AUTOR.NU!EAUTOR1 dbo.AUTOR.PRENU!EAUTOR1 dbo.+ARTE.T*T$U 9A,*NC 5dbo.AUTOR.NU!EAUTOR = N;REBREANU;6 4."a se a iseze toti cititorii nascuti prima%ara. "E$E+T NU!E+*T*TOR1 PRENU!E+*T*TOR1 +NP

FRO! 89ERE

dbo.+*T*TOR 5+NP $*:E N;????E023F<;6

G."a se a iseze cititorii din toate sectoarele in a ara de sectorul 4. "E$E+T *D+*T*TOR1 NU!E+*T*TOR1 PRENU!E+*T*TOR1 "E+TOR FRO! dbo.+*T*TOR 89ERE 5"E+TOR $*:E N;EH4F;6 (."a se a iseze cititorii care au restituit cartile a late in imprumut. "E$E+T dbo.+*T*TOR.NU!E+*T*TOR1 dbo.+*T*TOR.PRENU!E+*T*TOR1 dbo.F*"A.DATARE"T*TU*RE FRO! dbo.F*"A *NNER BO*N dbo.+*T*TOR ON dbo.F*"A.*D+*T*TOR = dbo.+*T*TOR.*D+*T*TOR 89ERE 5dbo.F*"A.DATARE"T*TU*RE A CETDATE566 PROCEDURI STOCATE /."a se creeze o procedura stocata pentru a a isa datele unui cititor al carui +NP este speci icat ca parametru. *n cazul in care parametrul nu este speci icat se %a a isa un mesaI de eroare.
CREATE PROCEDURE [dbo].[AFISEA'A_CITITOR] (CNP NCHAR()%)$NULL AS IF (CNP$NULL BEGIN PRINT 'NU ATI FURNI'AT UN CNP' RETURN END ELSE SELECT * FRO! CITITOR #HERE CNP$(CNP

E.ecute [dbo].[AFISEA'A_CITITOR] (+,-$./012)23)22)45. &. "a se creeze o procedura stocata pentru a a isa cititorii dintr-o anumita localitate speci icata ca parametru. *n cazul in care parametrul nu este speci icat se %a a isa un mesaI de eroare.
CREATE PROCEDURE [dbo].[AFISEA'A_SECTOR] (PSECTOR NVARCHAR(42) $ NULL AS IF (PSECTOR$NULL BEGIN PRINT 'NU ATI FURNI'AT SECTORUL' RETURN END ELSE SELECT * FRO! CITITOR #HERE (PSECTOR$SECTOR

0.S6 78 69:78;8 +6<=:>8 7+<:78 d8 ?, 6,?@:= 6?=o< 7-8+:9:+6= -<:,


-6<6@8=<?. CREATE PROCEDURE [dbo].[CAUTA_CARTI] (PNU!EAUTOR NVARCHAR(42) AS SELECT TITLU,AN FRO! CARTE INNER AOIN CARTEAUTOR ON CARTE.IDCARTE$CARTEAUTOR.IDCARTE INNER AOIN AUTOR ON CARTEAUTOR.IDAUTOR$AUTOR.IDAUTOR #HERE (PNU!EAUTOR$AUTOR.NU!EAUTOR

2.S6 78 69:78;8 =o6=8 +6<=:>8 :@-<?@?=6=8 6B6,d Id"?> 7-8+:9:+6= +6


-6<6@8=<?. CREATE PROCEDURE [dbo].[DETALIU_I!PRU!UT] (PIDCARTE NVARCHAR(42) AS IF (PIDCARTE$NULL BEGIN PRINT 'NU ATI FURNI'AT CORECT CODUL' RETURN END ELSE SELECT TITLU , DATAI!PRU!UT, DATARESTITUIRE FRO! CARTE INNER AOIN FISA ON FISA.IDCARTE$CARTE.IDCARTE #HERE (PIDCARTE$FISA.IDCARTE

3. S6 78 69:78;8 =o6=8 +6<=:>8 6B6,d Id"?> ,?@6< -6<.


CREATE PROCEDURE [dbo].[ISBN_PAR] AS SELECT TITLU FRO! CARTE #HERE IDCARTEC/$2 GROUP BD TITLU

4."a se a iseze numarul cititorilor care au imprumutat carti.


CREATE PROCEDURE [dbo].[NU!AR_CITITORI] (PNU!ECARTE AS NVARCHAR(/22) AS SELECT CARTE.IDCARTE,CARTE.TITLU,COUNT(CITITOR.IDCITITOR) AS NRCITITORI FRO! CARTE INNER AOIN FISA ON CARTE.IDCARTE$FISA.IDCARTE INNER AOIN CITITOR ON FISA.IDCITITOR$CITITOR.IDCITITOR #HERE TITLU$(PNU!ECARTE GROUP BD CARTE.IDCARTE,TITLU

G. S6 78 69:78;8 =o6=8 +6<=:>8 6B6,d Id"?> ,?@6< :@-6<.


CREATE PROCEDURE [dbo].[ORDONEA'A_CARTI] AS SELECT IDCARTE, TITLU

FRO! CARTE #HERE IDCARTEC/$) GROUP BD IDCARTE, TITLU

(."a se a iseze data ma.ima a restituirii cartilor.

CREATE PROCEDURE [dbo].[RESTITUIRE_I!PRU!UT] (PRESTITUIRE DATETI!E OUTPUT AS SELECT (PRESTITUIRE$!AX(DATARESTITUIRE) FRO! FISA

!UNCTII DE TIP TABELAR /."a se a iseze numarul cartilor scrise de iecare autor.
CREATE FUNCTION [dbo].[NRCARTI]((PIDAUTOR AS NVARCHAR(42)) RETURNS TABLE AS RETURN(SELECT COUNT(IDCARTE) AS NRCARTI, IDAUTOR FRO! CARTEAUTOR #HERE IDAUTOR$(PIDAUTOR GROUP BD IDAUTOR)

/.

"a se a iseze numarul cartilor aparute la iecare editura.

CREATE FUNCTION [dbo].[NRCARTIEDITURA]((PIDEDITURA AS NVARCHAR(42)) RETURNS TABLE AS RETURN(SELECT COUNT(IDCARTE) AS NRCARTI, IDEDITURA FRO! CARTE #HERE IDEDITURA$(PIDEDITURA GROUP BD IDEDITURA) %.S6 78 69:78;8 7?b 9o<@6 ?,?: =6b8> 9:8+6<8 +6<=8,+:=:=o<?> +6<8 6 :@-<?@?=6="o 7: B6>o6<86 -8,6>:;6<:: +?@?>6=8.C:=:=o<?> 87=8 7-8+:9:+6= +6 -6<6@8=<?. CREATE FUNCTION [dbo].[TOTALPENALI'ARI] ((PIDCITITOR AS NVARCHAR(42)) RETURNS (TABELTOTALPENALI'ARI TABLE(IDCARTE NVARCHAR(42),IDCITITOR NVARCHAR(42), VALOARE !ONED) AS BEGIN INSERT (TABELTOTALPENALI'ARI SELECT dbo.FISA.IDCARTE, IDCITITOR, VALOARE FRO! FISA #HERE IDCITITOR$(PIDCITITOR GROUP BD FISA.IDCARTE, IDCITITOR, VALOARE RETURN END

!UNCTII DE TIP SCALAR


3.S6 78 6->:+8 -8,6>:;6<: 67=98>Ed6+6 B6>o6<86 +6<=:: ,? d8-6787=8 )/222 >8: ,? 78 6->:+6 -8,6>:;6<8,d6+6 B6>o6<86 +6<=:: ,? d8-6787=8 /)222 d8 >8:,78 6->:+6 o -8,6>:;6<8 d8 1C 7: d6+6 B6>o6<86 +6<=:: d8-6787=8 7?@6 d8 /)222 d8 >8:, 6=?,+: 78 6->:+6 o -8,6>:;6<8 d8 )2C. CREATE FUNCTION [dbo].[PENALI'ARE]((PVALOARE AS !ONED) RETURNS !ONED AS BEGIN RETURN (CASE #HEN (PVALOAREF)/222 THEN 2 #HEN (PVALOAREF/)222 THEN (PVALOARE*2.21 ELSE (PVALOARE*2.) END) END

"a se de ineasca un buton de comanda asupra unui ormular care sa permita adau-area de noi date in tabela +arte 1 cu restrictia la limba sa ie romana sau -ermana si data sa ie e.clusi% anul curent.