Sunteți pe pagina 1din 20

ACADEMIA TEHNICA MILITARA FACULTATEA DE CALCULATOARE SI SISTEME INFORMATICE MILITARE

Proiect Baze de Date Tema: Petshop

STUDENT CAPORAL IACOB CRISTIAN-VALENTIN GRUPA E212-C

PREZENTARE TEMA
Tema proiectului este Petshop si se refera la realizarea unei baze de date a unei firme cu scopul de a furniza date despre componenta magazinului in acel moment si pentru pastra datele angajatilor ce lucreaza in acel magazin. Proiectul a fost realizat in programul Microsoft Sql Server Management Baza de date este compusa din 8 tabele dupa cum urmeaza: Angajati:Nume_angajat,Prenume_angajat,Data_angajarii,Functia,Salariul_lunar, Perioada_Contract, Departament_id,Cod_numeric_personal ; legata prin cheia straina Departament_id la cheia primara Departament_id din tabela: Departament: Departament_id,Nume_departament. Factura: Nume_comerciant, Cod_produs, Pret, Cantitate, Data_tranzactiei, Tip_tranzactie, Mod_plata, Numar_factura, Cota_TVA, Tip; legata prin cheia straina Tip la cheia primara Tip din tabela: Produse:Tip; este folosita pentru a aduna informatii atat din tabela: Accesorii: Nume_produs, Cantitatea, Pret_depozit, Data_fabricatiei, Cod_produs, Tip, Pret_Vanzare, Data_Achizitionare; prin campul numit Tip, cat si din tabela: Animale: Cod_specie, Costuri_intretinere, Cod_produs, Cantitate, Culoare, Pret_init, Tip, Data_Achizitiei, Pret_vanzare; tot prin campul timp pe o cheie straina.La randul ei aceasta este legata prin cheia straina Cod_specie de tabela: Cod_Specie: Cod_specie, Nume_specie, Mediu_de_viata,Climat_vietate,Categorie; Si prin cheia primara Cod_produs de tabela: Echipamente_utilizate: Cod_Produs, Nume_echipament, Pret_achizitie, Data_achizitie, Timp_functionare; O imagine mai clara a relatiilor dintre tabele o avem in imaginea de mai jos.

Pentru a lucra usor cu baza de date au fost implementate urmatoarele interogari, declansatoare, proceduri stocate si functii specializate: --Animale Inregistrate SELECT FROM Sum(Cantitate) As 'Animale Inregistrate' Animale

--Animale din mediul Acvatic SELECT FROM SUM(Animale.Cantitate) As 'Numar Animalelor' Cod_specie INNER JOIN Animale ON Cod_specie.Cod_specie = Animale.Cod_specie Where Cod_specie.Mediu_de_viata='Acvatic' --Accesorii fabricate inainte de 01-01-2010 Select * From Accesorii Where DATEDIFF(DD,'2010-01-01',Data_fabricatiei)<0

--Functia prin care se afiseaza angajatii cu salariul mai mare decat media salariala a magazinului use Petshop go drop function Medium go create Function Medium(@an int) as declare @var1 as int select @var1=AVG(salariul_lunar) from Angajati select COUNT(Nume_angajat) as NumarAngajati from Angajati where Salariul_lunar> @var1 and YEAR(Data_angajarii)>@an go exec Medium 1980

--Angajarile facute in ultimul an SELECT FROM Angajati.*,DATEDIFF(YY,Data_angajarii,GETDATE()) Angajati

Where DATEDIFF(YY,Data_angajarii,GETDATE())<=1 --Angajatii care fac parte din departamentul Personal SELECT FROM Angajati.* Departament INNER JOIN Angajati ON Departament.Departament_id = Angajati.Departament_id Where Angajati.Departament_id=(select Departament.Departament_id from Departament where Departament.Nume_departament='Personal')

--Animalele din zona Temperata SELECT Distinct COUNT(Cod_produs) As 'Numar Animale' FROM Animale INNER JOIN Cod_specie ON Animale.Cod_specie = Cod_specie.Cod_specie Where Cod_specie.Climat_vietate='Temperat' --Barbatii nascuti inainte de 1985 select * from Angajati where SUBSTRING(Cod_numeric_personal,0,2)=1 and SUBSTRING(Cod_numeric_personal,2,2)<85 --Costurile ce se vor inregistra pana la sfarsitul anului curent in cazul in care vor ramane aceste animale din climatul Tropical in magazin Select Sum(DATEDIFF(dd,getdate(),'2014-01-01')* Costuri_intretinere*Cantitate) as 'Costuri' From Animale inner join Cod_specie on Cod_specie.Cod_specie=Animale.Cod_specie Where Cod_specie.Climat_vietate='Tropical' --Echipamentele folosite pentru animalele de categorie Mare SELECT Distinct Echipamente_utilizate.Nume_echipament,Pret_achizitie,Timp_functionare FROM Echipamente_utilizate INNER JOIN Animale ON Echipamente_utilizate.Cod_produs = Animale.Cod_produs INNER JOIN Cod_specie ON Animale.Cod_specie = Cod_specie.Cod_specie Where Cod_specie.Categorie='Mare' --Echipamentele ce trebuiesc inlocuite in urmatorul an SELECT FROM Nume_echipament, Cod_produs Echipamente_utilizate

Where Timp_functionare-DATEDIFF(YY,Data_achizitiei,GETDATE())<=1

--Angajatul Barbat cu cel mai mic salariu Select * from Angajati Where Salariul_lunar=(select MIN(Salariul_lunar) from Angajati where SUBSTRING(Cod_numeric_personal,0,2)=1) --Functie care calculeaza numarul de angajati use [Petshop] go CREATE FUNCTION dbo.countAngajati() RETURNS int AS BEGIN RETURN (SELECT COUNT(*) FROM Angajati) END GO

SELECT dbo.countAngajati() '# of Customers' GO --Facurile din luna februarie anul 2012 SELECT FROM Factura.* Factura

Where DATEPART(MM,Data_tranzactiei)=2 And DATEPART(YYYY,Data_tranzactiei)=2012

--Echipamentele ce se pot folosi la animalele cu Mediu de viata Aerian SELECT Distinct Echipamente_utilizate.Nume_echipament,Pret_achizitie,Data_achizitiei,Timp_functionare FROM Echipamente_utilizate INNER JOIN Animale ON Echipamente_utilizate.Cod_produs = Animale.Cod_produs INNER JOIN Cod_specie ON Animale.Cod_specie = Cod_specie.Cod_specie Where Cod_specie.Mediu_de_viata='Aerian' --Facturi ordonate ascendent Select * From Factura Where Tip_tranzactie='Vanzare' Order by Data_tranzactiei ASC --Angajatii de sex feminin SELECT * from Angajati where SUBSTRING(Angajati.Cod_numeric_personal,0,2)=2 --Ierarhizarea angajatilor din magazin Select * from Angajati Order by Salariul_lunar DESc --Media Salariului din Magazin SELECT FROM AVG(Salariul_lunar) As Media_Salariului Angajati

--Numar tranzactii grupate in functie de tipul tranzactiei select Tip_tranzactie,COUNT(*) As Numar_Tranzactii

from Factura Group by Tip_tranzactie --Cel mai vechi angajat din magazin SELECT FROM Nume_angajat,Prenume_angajat,Functia,Salariul_lunar Angajati

where DATEDIFF(DD,Angajati.Data_angajarii,GETDATE())=(select MAX(datediff(dd,Angajati.Data_angajarii,GETDATE())) from Angajati) --Ordonare angajati in functie de departamentul din care fac parte Select * From Angajati Order by Departament_id ASC --Procedura prin care se verifica ce accesorii din magazin au fost fabricate intr-un an, anul va fi dat de la tastatura. use [Petshop] go drop procedure go create procedure P2 (@data nchar(5)) as select * from Accesorii where DATEPART(yyyy,Accesorii.Data_fabricatiei)=@data go exec P2 P2

--Ordonare ascendenta a Accesoriilor dupa pret Select * from Accesorii order by Pret_Vanzare Asc --Afisare angajati cu salariul cuprins intre 2 limite use Petshop go drop procedure Afis_salariu go create procedure Afis_salariu(@SalariuMin int , @SalariuMax int ) as select COUNT(Angajati.Cod_numeric_personal) as AngajatiLimitaSalariu from Angajati where (Salariul_lunar<@SalariuMax and Salariul_lunar>@SalariuMin) go exec Afis_salariu 1000,1500 --Procedura prin care sunt afisati Angajatii cu salariul mai mare decat media salariului din magazin ce au fost angajati dupa 1980 use Petshop go drop procedure Medium go create procedure Medium(@an int) as declare @var1 as int select @var1=AVG(salariul_lunar) from Angajati select COUNT(Nume_angajat) as NumarAngajati from Angajati

where Salariul_lunar> @var1 and YEAR(Data_angajarii)>@an go exec Medium 1980 --Procedura ce contorizeaza numarul de facturi platite cash use Petshop go drop procedure IntergCash go create procedure IntergCash as declare @Nr as int select @Nr=COUNT(Numar_factura) from FACTURA where (Mod_plata='Cash') return @Nr go declare @Numar as int exec @Numar = IntergCash select 'Numarul de facturi platite in cash este : ' + CAST(@Numar as NCHAR(10)) as NumarFacturiCash --Procedura prin care Afisam Animalele cu pretul mai mare de 500 use [Petshop] go drop procedure P1 (@pretx numeric (18,0))

go create procedure P1

as select * from Animale where Animale.Pret_vanzare>=@pretx go exec P1

--Procedura ce realizeaza rasplatirea angajatului cu un anumit procent din salariu pana la sfarsitul contractului daca acesta se afla in ultimul an de contract use [Petshop] go drop procedure go create procedure P5 (@Nume_angajat nchar(35),@prima int) as update Angajati Set Salariul_lunar=Salariul_lunar+@prima where Nume_angajat=@Nume_angajat go exec P5 --Procedura ce afiseaza animalele filtrate in functie de categorie si pret use [Petshop] go drop procedure go create procedure P4 (@categorie char(6),@pretx numeric(18,0)) as select * from Animale inner join Cod_specie on Cod_specie.Cod_specie=Animale.Cod_specie where Animale.Pret_vanzare>=@pretx And Cod_specie.Categorie=@categorie go exec P4 P4 P5

--Procedura ce realizeaza selectarea echipamentelor ce pot fi folosite de animalele provenite din mediul acvatic use [Petshop] go drop procedure P6 go create procedure P6 (@mediu nchar (18),@climat nchar(20),@categ nchar(20)) as select * from Echipamente_utilizate inner join Animale on Animale.Cod_produs=Echipamente_utilizate.Cod_produs inner join Cod_specie on Animale.Cod_specie=Cod_specie.Cod_specie where Echipamente_utilizate.Cod_produs=(Select Animale.Cod_produs from Animale where Cod_specie.Mediu_de_viata=@mediu and Cod_specie.Climat_vietate=@climat and Cod_specie.Categorie=@categ) go exec P6 --Procedura ce realizeaza selectia facturilor in functie de pret si tipul tranzactiei, acestea provenind de la tastatura use [Petshop] go drop procedure go create procedure P3 (@pretx numeric (18,0),@tip_tranzactie nchar(10)) as select * from Factura where pret>=@pretx AND @tip_tranzactie=Tip_tranzactie go exec P3 P3

--Procedura ce realizeaza update la salariul unui angajat use Petshop go drop procedure update_salariu go create procedure update_salariu as update Angajati Set Salariul_lunar=(1.10)*Salariul_lunar where Angajati.Perioada_contract=MIN(Perioada_Contract) go exec update_salariu

--Accesoriile ce au pretul de vanzare cuprins intre 2 limite prestabilite SELECT FROM * Accesorii

Where Pret_Vanzare Between 20 and 100

--Profitul pe care il poate obtine magazinul daca vinde un singur animal SELECT FROM Animale.Cod_produs, Cod_specie.Nume_specie, Animale.Cantitate, Animale.Culoare Animale INNER JOIN Cod_specie ON Animale.Cod_specie = Cod_specie.Cod_specie where Animale.Pret_vanzare-Animale.Pret_init(Costuri_intretinere*DATEDIFF(dd,Animale.Data_Achizitiei,GETDATE()))=(select Max(Animale.Pret_vanzare-Animale.Pret_init(Costuri_intretinere*DATEDIFF(dd,Animale.Data_Achizitiei,GETDATE()))) from Animale)

-- Banii ce ar trebui platiti fiecarui angajat in parte pana la terminarea contractului Select Salariul_lunar*(Perioada_contract*12-DATEDIFF(MM,Data_angajarii,Getdate())) From Angajati Where Perioada_contract*12-DATEDIFF(MM,Data_angajarii,GETDATE())>0 --Echipamentele si costurile acestora pentru a fi achizitionate in locul celor deteriorate ce isi termina termenul in maxim 2 ani SELECT FROM SUM(Pret_achizitie) As 'Investitii Viitoare' Echipamente_utilizate

Where Timp_functionare-DATEDIFF(yy,Data_achizitiei,GETDATE())<=2 -- Returneaza codul produsului cu cantitatea maxima use [Petshop] go CREATE FUNCTION SearchCode()

RETURNS table

AS RETURN ( Select Animale.Cod_produs from Animale where Cantitate=(Select MAX(Cantitate) From Animale) ) GO -- Afisarea angajatilor care incep cu o anumita litera Select * From Angajati Where Nume_angajat like 'M%'

--Afisarea speciei cu cel mai mare cost de intretinere SELECT FROM Cod_specie.* Animale INNER JOIN Cod_specie ON Animale.Cod_specie = Cod_specie.Cod_specie where Costuri_intretinere=(select MAX(Costuri_intretinere) from Animale) --Speciile animalelor ce au culoarea Albastru select Cod_specie.* from Cod_specie inner join Animale on Cod_specie.Cod_specie=Animale.Cod_specie where Animale.Culoare='Albastru' --Declansator ce permite achizitionarea de noi accesorii daca acestea sunt in cantitati mai mici de 2 produse CREATE TRIGGER dec6

ON [Accesorii] FOR UPDATE AS IF UPDATE(Cantitatea) RAISERROR('S-au modificat atributele',16,1) ELSE RAISERROR ('*****',16,1) go UPDATE Accesorii SET Cantitatea=Cantitatea+1 WHERE Cantitatea<=1 -- Inserare Valori in Tabela Animale use [Petshop] if exists(select name from sysobjects where name='trigger1' and type='TR') Drop Trigger trigger1

go Create Trigger trigger1 on [dbo].[Animale] For Insert as Insert into Animale Values(117,0.7,2020,2,'Albastru',560,'an',GETDATE(),780) go Update Animale --Declansator care nu permite update pe cantitatea animalelor IF EXISTS (SELECT name FROM sysobjects WHERE name = 'T5' AND type = 'TR') DROP TRIGGER T5 GO CREATE TRIGGER dbo.T5 ON Animale FOR UPDATE AS BEGIN IF UPDATE(Cantitate) BEGIN RAISERROR('Changes column name not allowed', 16, 1); END END --Declansator ce majoreaza Pretul produselor ce au codul cuprins intre 2020 si 2030 IF EXISTS (SELECT name FROM sysobjects

WHERE name = 'T3' AND type = 'TR') DROP TRIGGER T3 go CREATE ON Animale INSTEAD OF INSERT AS UPDATE Animale SET Animale.Pret= Animale.Pret+1 FROM inserted WHERE Animale.Cod_produs>=2020 and Animale.Cod_produs<2030 --Declansator ce poate modifica pretul animalelor astfel incat sa nu se ajunga in situatia daunelor din cauza costurilor de intretinere CREATE TRIGGER dec5 TRIGGER T3

ON [Animale] FOR UPDATE AS IF UPDATE(Pret_Vanzare)

RAISERROR('S-au modificat atributele',16,1) ELSE RAISERROR ('*****',16,1) go

UPDATE Animale SET Pret_vanzare=Pret_vanzare+Pret_init WHERE Pret_vanzare-Pret_init(DATEDIFF(dd,Animale.Data_Achizitiei,GETDATE())*Costuri_intretinere)<=Pret_init --Echipamentele cu cel mai mic timp de functionare SELECT FROM * Echipamente_utilizate

Where Timp_functionare=(Select MIN(Timp_functionare) from Echipamente_utilizate)

--Numarul de animale vandute prin Transfer bancar SELECT FROM COUNT(Animale.Cod_produs) As 'Transferuri Bancare' Animale INNER JOIN Factura ON Animale.Cod_produs = Factura.Cod_produs Where Factura.Mod_plata='Transfer Bancar' --Tranzactii efectuate in ultimile 3 luni SELECT FROM WHERE * Factura datepart(QQ,Factura.Data_tranzactiei)=DATEPART(QQ,GETDATE())

--Pretul de vanzare scade cu 5% Update Accesorii Set Pret_Vanzare=Pret_Vanzare*0.95 FROM Accesorii

where DATEDIFF(YY,Data_Achizitionare,GETDATE())>5 --Afisare costul de intretinere al unui animal pe parcursul unui an use Petshop; go declare @cost int; exec @cost=costpean 2002 print @cost; --Functie ce calculeaza si returneaza costul intr-un an al unui animal use [Petshop] go drop function costpean go

create function costpean

(@code int)

Returns int Begin return(Select Animale.Costuri_intretinere*365 from Animale where Cod_produs=@code) end go --Functie ce returneaza salariul unui angajat dat de la tastatura use [Petshop] go drop function Salariu go create function Salariu (@Nr_fact nchar (30))

Returns int Begin return(Select Angajati.Salariul_lunar from Angajati where Nume_angajat=@Nr_fact) end go ATENTIE!!! PRIN FISIERELE SQL EXISTA MAI MULTE FUNCTII SI APELURI DE FUNCTII CE NU AU FOST TRECUTE IN DOCUMENTATIE!

CONCLUZII
Baza de date poate fi folosita de pe orice calculator din reteaua interna a firmei ce are instalat programul SQL Server Management.

Baza de date este complet functionala, iar interogarile pot fi executate apasand un butonul Execute din bara de instrumente. Baza de date nu are o interfata grafica menita sa atraga atentia user-ilor dar aceasta atrage prin constructia ei si prin simplitatea cu care poate fi accesata.

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