Sunteți pe pagina 1din 20

BD pentru gestiunea aprovizionarilor la un supermarket

Un supermarket isi propune realizarea unui sistem informatic privind aprovizionarea cu produse de la furnizori. Pentru dezvoltarea aplicatiei trebuie cunoscute urmatoarele aspecte: Fiecare produs in parte va beneficia de un cod unic. De asemenea in nomenclatorul de produse vor fi specificate denumirea produsului, unitatea de masura si pretul unitar. Aprovizionarea se va face pe baza comenzii trimise furnizorului. Comanda va contine: numarul si data comenzii, codul si denumirea furnizorului, codul produselor comandate, denumirea acestora, unitatea de masura si cantitatea comandata. Factura primita de la furnizor va contine: numarul si data facturii, codul si denumirea furnizorului, datele clientului(supermarketul), codul, denumirea, unitatea de masura, cantitatea si pretul produselor facturate, valoarea acestora, TVA si valoarea totala. La receptia produselor se intocmeste NIR-ul care contine: numar si data NIR, codul gestiunii in care sa realizeaza receptia, numar si data facturare, codul si denumirea furnizorului, unitatea de masura a produselor, cantitatea facturata, cantitatea receptionata, pretul unitar al produselor, valoarea NIR. Supermarketul apeleaza la serviciile mai multor furnizori care sunt identificati prin cod fiscal, nume si adresa. Evidenta in supermarket este tinuta pe mai multe gestiuni. Fiecare gestiune este caracterizata prin: cod gestiune, denumire gestiune si nume gestionar. Plata facturii se realizeaza printr-un document de plata in care se precizeaza : numarul documentului, tipul documentului, data, suma platita, denumirea si contul emitentului, denumirea beneficiarului.

Proiectarea aplicatiei informatice Dictionarul de date Denumire camp CIF DenFz AdresaFZ TelFz NrComanda DataComanda CantCom NrFact DataFact DataScad CantitateFacturata PretFactura CodProd DenProd UM StocInitial DataStocInitial CantReceptionata NumarNIR DataNIR CodGest DenGest NumeGestionar NrDocPlata TipDocPlata DataDocPlata SumaPlatita Descriere Codul unic de inregistrare al furnizorului Denumirea furnizorului Adresa furnizorului Telefonul furnizorului Numarul unic de inregistrare al comenzilor Data la care s-a efectuat comanda Cantitatea comandata Numarul unic de inregistrare al facturii Data la care a fost emisa factura Data scadentei Cantitatea de marfa facturata Pretul de cumparare Codul unic de inregistrare al produselor Denumirea produselor Unitatea de masura Stocul initial al produselor Data stocului initial Cantitatea receptionata Numarul unic de inregistrare al NIR-ului Data la care s-a realizat receptia produselor Codul gestiunii Numele gestiunii Numele gestionarului Numarul documentului de plata Tipul documentului de plata Data la care s-a efectuat plata Suma inscrisa pe documentul de plata

Reguli de gestiune: Un furnizor primeste mai multe comenzi, iar o comanda se adreseaza unui singur furnizor; O comanda poate genera mai multe facturi, dar o factura apartine unei singure comenzi; O comanda contine mai multe produse; O factura contine mai multe produse; Cu un document de plata se efectueaza plata pentru o singura factura, dar o factura poate fi platita cu mai multe documente de plata; Un NIR se intocmeste pentru o singura factura; Un NIR este intocmit pentru o singura gestiune; Printr-un NIR se introduc in gestiune mai multe produse.

Algoritmi de calcul:

Valoare produs=CantitateFacturata*PretFactura TVA= CotaTVA*Valoare produs Valoare Factura=Valoare produs+TVA

Stabilirea dependentelor functionale. CIF DenFz AdresaFz TelFz NrComanda DataComanda CIF NrFact DataFact DataScad NrComanda

NrDocPlata TipDocPlata

DataDocPlata SumaPlatita NrFact

CodProd

DenProd UM PretUnitar

CodGest

DenGest NumeGestionar

NumarNIR

DataNIR NrFact CodGest

Atribute izolate: CantCom, CantitateFacturata, PretFactura, CantReceptionata, StocInitial, DataStocInitial.

NrFact CodProd

CantitateFacturata PretFactura

NrComanda CodProd

CantCom

CodGest CodProd

StocInitial DataStocInitial

NumarNIR CodProd

CantReceptionata

1.CIF# 2.DenFz 3.AdresaFz 4.TelFz 5.NrComanda# 6.DataComanda 7.NrFact# 8.DataFact 9.DataScad 10.NrDocPlata# 11.TipDocPlata# 12.DataDocPlata 13.SumaPlatita 14.CodProd# 15.DenProd 16.UM 17.PretUnitar 18.CodGest# 19.DenGest 20.NumeGestionar 21.CantCom 22.CantitateFacturat a 23.PretFactura 24.StocInitial 25.DataStocInitial 26.NumarNIR#

1 2 . . 1

3 . 1

4 . 1

5 .

6 .

7 .

8 .

9 .

1 0.

1 1.

1 2.

1 3.

1 4.

1 5.

1 6.

1 7.

1 8.

1 9.

2 0.

2 1.

2 2.

2 3.

2 4.

2 5.

2 6

2 7

2 8

2 9

3 0

3 1

1 1

1 1 1

1 1

1 1

1 1

1 1

27.DataNIR 28.CantReceptionat a 29.NrComanda+Cod Prod# 30.NrFact+CodProd # 31.NumarNIR+CodP rod#

1 1 1 1

Modelul relational al bazei de date Furnizori (CIF, DenFz, AdresaFz, TelFz) Comanda (NrComanda, DataComanda, CIF) Facturi (NrFact, DataFact, DataScad, NrComanda) DocumentPlata (NrDocPlata, TipDocPlata, DataDocPlata, SumaPlatita, NrFact) Produse (CodProd, DenProd, UM, PretUnitar) ProduseComandate (NrComanda, CodProd, CantCom) ProduseFacturate (NrFact, CodProd, CantitateFacturata, PretFactura) Gestiune (CodGest, DenGest, NumeGestionar) Stoc (CodGest, CodProd, StocInitial, DataStocInitial) NIR (NumarNIR, DataNIR, NrFact, CodGest) ProduseReceptionate (NumarNIR, CodProd, CantReceptionata)

Restrictii de integritate

UM ={KG,BUC,L} CantitateFacturata>0, PretFactura>0, CantReceptionata>0, SumaPlatita>0, PretUnitar>0, CantCom>0 DataFact<DataScad CIF-ul trebuie sa inceapa cu sirul de caractere RO si are maxim 9 cifre DenFz incepe cu SC NrComanda, NumarNIR -incrementare automata

Implementare BD DatabasesNew DatabasesTablesNew Table

Implementarea restrictiilor de integritate Ex.Denumirea furnizor incepe cu SC

Expression: DenFz like SC%


8

Triggere

1. Sa se creeze un trigger care nu va permite stergerea furnizorilor din Bucuresti.

2. Sa se creeze un trigger care adauga in tabela Arhiva produsele noi introduce.

3. Sa se creeze un trigger care sa nu permita modificarea pretului unui produs in sensul cresterii cu mai mult de 10% decat pretul pe care il are in momentul actualizarii.

View 1. Sa se afiseze in ordine cronologica comenzile emise catre furnizorii din Bucuresti.

10

2. Sa se afiseze facturile emise(si furnizorii care le-au emis) in zilele de luni ale anului 2009.

3. Sa se afiseze furnizorii din provincie.

11

4. Sa se afiseze furnizorii din Bucuresti. 5. Sa se afiseze in ordine alfabetica furnizorii care au emis mai putin de 2 facturi in ultimul trimestru al anului 2009.

6. Sa se afiseze valoarea facturii, TVA-ul aferent si valoarea totala.

12

7. Sa se afiseze facturile cu valoarea totala asociata si reducerea acestora stiind ca aceasta se acorda pentru valori mai mari de 100RON in procent de 5%.

8. Sa se realizeze un View pentru a calcula numarul zilelor de intarziere si valoarea penalizarilor pentru facturile neachitate la timp, stiind ca valoarea penalizarii reprezinta 0,001 pentru fiecare zi de intarziere.

13

9. Sa se afiseze produsele receptionate si valoarea acestora aferente gestiunii 1, in luna curenta.

Proceduri stocate

ProgrammabilityStored ProceduresNew Stored Procedure 1. Sa se creeze o procedura stocata pentru a se afisa furnizorii al caror nume incepe cu un anumit caracter. Create procedure ex1 @nume nvarchar(50) As Select * from Furnizori where DenFz like @nume Executarea se face prin crearea unui New Query Exec ex1 [ SC ION SRL]

14

2. Sa se creeze o procedur stocat pentru a afia produsele cu pretul cuprins intre 2 parametri.

3. S se creeze o procedur stocat pentru a afia datele unui Furnizor al crui CIF este specificat ca parametru. n cazul n care parametrul nu este specificat (rmne NULL) se va afia un mesaj de eroare. Create procedure DateFz @CIF nvarchar(11)=null As If @CIF is null Begin Printintroduceti CIF Return End
15

Else Select * from Furnizori Where CIF=@CIF Executia: New Queryexec DateFZ RO123456789 4. S se creeze o procedur stocat pentru a determina valoarea medie a facturilor de plata. Procedura va contine un parametru de tip OUTPUT care va prelua valoarea medie a facturilor. Create procedure [dbo].[ValoareMedie]
@nr int, @pretmediu money output as select @pretmediu=AVG(CantitateFacturata*PretFactura) from ProduseFacturate group by NrFact

Executia:
declare @c as int exec ValoareMedie 10, @pretmediu=@c output print 'valmedie ' + convert(char(5),@c)

5. Sa se creeze o procedura stocata care va afisa lista furnizorilor catre care s-au emis comenzi in luna curenta.

16

6. Sa se creeze o procedura stocata care va permite afisarea tuturor facturilor cu valoarea asociata si discount-ul, stiind ca acesta se acorda doar pentru valori mai mari de 50, in procent de 15%.

7. Se majoreaza succesiv cu cate 10% fiecare pret unitar al produselor al caror pret unitar nu a depasit media generala a pretului de facturare. Majorarea se opreste in momentul in care media preturilor unitare depaseste media preturilor de facturare.

Functii personalizate
17

ProgrammabilityFunctionsNewScalar Valued 1. Sa se creeze o functie de tip scalar care va calcula discount-ul ce se aplica la valoarea facturilor astfel: pentru valori <50 discount de 0,01, intre 50 si 100 discount 0.05 si pentru valori mai mari de 100 discount 0,07.

Executia se face intr-un view.

18

2. Sa se creeze o functie pentru a calcula pentru fiecare dintre furnizorii cu care nu mai sunt contracte in derulare in prezent cate saptamani au trecut de la finalizarea ultimului contract.

Executia se face printr-un view.

19

ProgrammabilityFunctionsNew Multi-statement Table-valued Function 3. Sa se realizeze o functie prin care sa se afiseze comenzile aferente unui furnizor precizat printr-un parametru.

Executie: Select * From dbo.ListaComenzi(SC ION SRL) ProgrammabilityFunctionsNew Inline Table-valued Function 4. Sa se realizeze o functie care va determina primii 2 furnizori cu cele mai multe facturi.

Executie: Select * from dbo.Furnizori_import()


20