Sunteți pe pagina 1din 17

PROIECT BAZE DE DATE

DESCRIEREA PROBLEMEI

În realizarea proiectului am aplicat cunoștințele dobândite pe parcursul


seminarelor și cursurilor la materia Baze de date, într-o problemă cu caracter economic.
Pentru a ține evidența operațiunilor efectuate în gestionarea unei cofetării, în acest proiect am
ulitizat o bază de date Oracle.

Baza de date este alcătuită din 7 tabele: ANGAJATI2, CLIENTI2, FURNIZORI,


PRODUSE2, TRANZACTIE2, DETALII_TRANZACTIE2, MATERIIPRIME.

Pentru crearea tabelelor și definirea legăturilor dintre ele, s-a obținut o astfel de
bază de dată:

 Tabela ANGAJATI2 cuprinde informații despre angajații care lucrează în cofetărie. În


tabelă se regăsesc date referitoare la nume, prenume, funcția, data angajării, salariu,
email și data nașterii.
 Tabela ClLIENTI2 cuprinde date despre clienții care cumpără din cofetărie. Prin date
facem referire la nume, prenume, număr de telefon și adresă.
 Tabela FURNIZORI cuprinde furnizorii care sunt activi și disponibili în procesul de
livrare a materiilor prime pentru cofetărie și regăsim datele: denumirea firmei,
reprezentantul firmei, număr de contact și email.
 Tabela PRODUSE2 conține denumirea, pretul la care produsele sunt date spre
vânzare, clientul care a cumpărat si materiile prime utilizate în procesul fabricării.
 Tabela TRANZACTIE2 conține date referitoare la data tranzacției pe care a efectuat-o
un angajat.
 Tabela DETALII_TRANZACTIE2 cuprinde tranzacția efectuată, dar și detaliile
despre aceasta, precum denumirea și cantitatea produselor achiziționate de client.
 Iar tabela MATERIIPRIME cuprinde denumirea materiilor prime si prețul la care au
fost achiziționate de la furnizori pentru a produce produsele finite comercializate de
cofetărie.
SCHEMA FINALĂ A BAZEI DE DATE

COMENZI RULATE

ANGAJAȚI
CREATE TABLE ANGAJATI2(
id_angajat NUMBER(4), nume VARCHAR2(15),prenume VARCHAR(15), functia
VARCHAR(15), data_angajare DATE, salariu NUMBER(10), email VARCHAR(20),
data_nastere DATE,
CONSTRAINT angajati2_pk PRIMARY KEY(id_angajat) );

FURNIZORI
CREATE TABLE Furnizori(
id_furnizor NUMBER(4), denumire_firma VARCHAR(15), reprezentant_firma
VARCHAR2(15), nr_contact NUMBER(10), email VARCHAR2(20),
CONSTRAINT furnizori_pk PRIMARY KEY(id_furnizor) );
PRODUSE
CREATE TABLE Produse2(
id_produs NUMBER(4), denumire VARCHAR2(15), pret NUMBER(10), id_client
NUMBER(4),id_materii NUMBER(4),
CONSTRAINT Produse2_pk PRIMARY KEY(id_produs),
CONSTRAINT Produse2_fk FOREIGN KEY(id_client) REFERENCES Clienti2,
CONSTRAINT Produse2_fk2 FOREIGN KEY(id_materii) REFERENCES MateriiPrime);

CLIENTI
CREATE TABLE Clienti2(
id_client NUMBER(4), nume_client VARCHAR2(15), prenume_client VARCHAR2(15),
nr_telefon NUMBER(15), adresa VARCHAR2(40),
CONSTRAINT Clienti2_pk PRIMARY KEY(id_client) );

TRANZACTIE
CREATE TABLE Tranzactie2(
id_tranzactie NUMBER(4), data_tranzactie DATE, id_angajat NUMBER(4),
CONSTRAINT Tranzactie2_pk PRIMARY KEY(id_tranzactie),
CONSTRAINT Tranzactie2_fk FOREIGN KEY(id_angajat) REFERENCES Angajati2 );

DETALII TRANZACTIE
CREATE TABLE Detalii_Tranzactie2(
id_tranzactie NUMBER(4),id_produs NUMBER(4), cantitate NUMBER(10), id_client
NUMBER(4),
CONSTRAINT Detalii_Tranzactie2_fk1 FOREIGN KEY(id_tranzactie) REFERENCES
Tranzactie2,
CONSTRAINT Detalii_Tranzactie2_fk2 FOREIGN KEY(id_produs) REFERENCES
Produse2 ,
CONSTRAINT Detalii_Tranzactie2_fk3 FOREIGN KEY(id_client) REFERENCES
Clienti2);

MATERII PRIME
CREATE TABLE MateriiPrime(
id_materii NUMBER(4), denumire VARCHAR(15), pret NUMBER(25), id_furnizor
NUMBER(4),
CONSTRAINT MateriiPprime_pk PRIMARY KEY (id_materii),
CONSTRAINT MateriiPprime_fk FOREIGN KEY(id_furnizor) REFERENCES Furnizori);

ADAUGARE TABEL:

ANGAJATI
INSERT INTO angajati2 VALUES(1,'Ion','Amalia','Cofetar',
TO_DATE('03.03.2009','DD.MM.YYYY'), 2000, 'iamalia@gmail.com',
TO_DATE('13.03.1990','DD.MM.YYYY'));
INSERT INTO angajati2 VALUES(2,'Zip','Cosmin','Curier',
TO_DATE('12.09.2011','DD.MM.YYYY'), 1300, 'zcosmin@gmail.com',
TO_DATE('30.12.1999','DD.MM.YYYY'));
INSERT INTO angajati2 VALUES(3,'Costache','Marin','Manager',
TO_DATE('17.01.2008','DD.MM.YYYY'), 2500, 'cmarin@gmail.com',
TO_DATE('22.10.1995','DD.MM.YYYY'));
INSERT INTO angajati2 VALUES(4,'Priscu','Roxana','Vanzator',
TO_DATE('01.09.2009','DD.MM.YYYY'), 1500, 'proxana@gmail.com',
TO_DATE('31.01.2000','DD.MM.YYYY'));
INSERT INTO angajati2 VALUES(5,'Popovici','Iulia','Asistent',
TO_DATE('15.05.2008','DD.MM.YYYY'), 1200, 'piulia@gmail.com',
TO_DATE('20.07.1999','DD.MM.YYYY'));
INSERT INTO angajati2 VALUES(6,'Stafie','Floare','Ingrijitor',
TO_DATE('14.06.2010','DD.MM.YYYY'), 1000, 'sfloare@gmail.com',
TO_DATE('10.06.1980','DD.MM.YYYY'));
INSERT INTO angajati2 VALUES(7,'Sifon','Ana','Director',
TO_DATE('09.03.2007','DD.MM.YYYY'), 3500, 'sana@gmail.com',
TO_DATE('25.02.1990','DD.MM.YYYY'));
INSERT INTO angajati2 VALUES(8,'Tanase','Diana','Vanzator',
TO_DATE('22.02.2010','DD.MM.YYYY'), 1100, 'tdiana@gmail.com',
TO_DATE('12.11.1998','DD.MM.YYYY'));
INSERT INTO angajati2 VALUES(9,'Ciupic','Teoodora','Asistent',
TO_DATE('06.12.2011','DD.MM.YYYY'), 1200, 'cteodora@gmail.com',
TO_DATE('14.08.1997','DD.MM.YYYY'));
CLIENTI
INSERT INTO Clienti2 VALUES(1,'Sarac','Ionut',0768234567,'Bucuresti');
INSERT INTO Clienti2 VALUES(2,'Capra','Matei',0754382345,'Buzau');
INSERT INTO Clienti2 VALUES(3,'Ciulin','Radian',0765888333,'Giurgiu');
INSERT INTO Clienti2 VALUES(4,'Pincu','Ana-Maria',0727761222,'Alexandria');
INSERT INTO Clienti2 VALUES(5,'Costache','Cristina',0768146359,'Bucuresti');
INSERT INTO Clienti2 VALUES(6,'Dumitru','Elena',0786653459,'Calarasi');

FURNIZORI
INSERT INTO Furnizori VALUES(1,'Tefal','Soare',0768999345,'tefal@gmail.com');
INSERT INTO Furnizori VALUES(2,'Global','Lupescu',0764338944,'global@gmail.com');
INSERT INTO Furnizori VALUES(3,'Nutella','Ionescu',0766663214,'nutella@gmail.com');
INSERT INTO Furnizori VALUES(4,'Oliroby','Popescu',0798765432,'oliroby@gmail.com');
INSERT INTO Furnizori VALUES(5,'Muller','Lacrima',0769116538,'muller@gmail.com');

PRODUSE
INSERT INTO Produse2 VALUES(1,'Tort',75,5,5);
INSERT INTO Produse2 VALUES(2,'Clatite',12,3,1);
INSERT INTO Produse2 VALUES(3,'Biscuiti',25,4,3);
INSERT INTO Produse2 VALUES(4,'Amandina',14,2,7);
INSERT INTO Produse2 VALUES(5,'Budinca',10,5,2);
INSERT INTO Produse2 VALUES(6,'Macarons',54,2,4);
INSERT INTO Produse2 VALUES(7,'Placinta',16,1,6);

TRANZACTIE
INSERT INTO Tranzactie2 VALUES(1,TO_DATE('02.03.2010','DD.MM.YYYY'),1);
INSERT INTO Tranzactie2 VALUES(2,TO_DATE('25.02.2012','DD.MM.YYYY'),8);
INSERT INTO Tranzactie2 VALUES(3,TO_DATE('12.12.2009','DD.MM.YYYY'),6);
INSERT INTO Tranzactie2 VALUES(4,TO_DATE('04.07.2010','DD.MM.YYYY'),9);
INSERT INTO Tranzactie2 VALUES(5,TO_DATE('17.05.2011','DD.MM.YYYY'),8);
INSERT INTO Tranzactie2 VALUES(6,TO_DATE('30.09.2008','DD.MM.YYYY'),7);
INSERT INTO Tranzactie2 VALUES(7,TO_DATE('01.10.2009','DD.MM.YYYY'),2);

DETALII_TRANZACTIE
INSERT INTO Detalii_Tranzactie2 VALUES(1,4,2,2);
INSERT INTO Detalii_Tranzactie2 VALUES(6,3,6,5);
INSERT INTO Detalii_Tranzactie2 VALUES(2,6,10,6);
INSERT INTO Detalii_Tranzactie2 VALUES(3,2,3,1);
INSERT INTO Detalii_Tranzactie2 VALUES(7,5,20,3);
INSERT INTO Detalii_Tranzactie2 VALUES(5,1,3,5);
INSERT INTO Detalii_Tranzactie2 VALUES(4,2,1,2);

MATERII PRIME
INSERT INTO MateriiPrime VALUES(1,'Faina',50,2);
INSERT INTO MateriiPrime VALUES(2,'Oala',40,1);
INSERT INTO MateriiPrime VALUES(3,'Ciocolata',62,3);
INSERT INTO MateriiPrime VALUES(4,'Cafea',75,2);
INSERT INTO MateriiPrime VALUES(5,'Piscoturi',54,4);
INSERT INTO MateriiPrime VALUES(6,'Iaurt',34,5);
INSERT INTO MateriiPrime VALUES(7,'Crema frisca',40,2);

ACTUALIZARE

Actualizare nume cofetar


UPDATE angajati2
SET nume='Vlad' WHERE id_angajat=1;
/
SELECT * FROM angajati2;
Actualizare preț biscuiți
UPDATE Produse2
SET pret=17 WHERE id_produs=2;
/
SELECT * FROM Produse2;

Actualizare salariu angajat


UPDATE angajati2
SET salariu=1100 WHERE id_angajat=6;
/
SELECT * FROM angajati2;
Actualizare cantitatea de produse livrată cu 150 bucați
UPDATE detalii_tranzactie2
SET cantitate=nvl(cantitate,0)+150;
/
SELECT * FROM detalii_tranzactie2;

Actualizare număr de telefon client


UPDATE clienti2
SET nr_telefon='789123456' WHERE id_client=2;
/
SELECT * FROM clienti2;

Operații de interogare a datelor utilizând joncțiuni și funcții


scalare diverse:

Să se obțină id-ul, numele, prenumele și tranzacția clienților


SELECT c.id_client,c.nume_client,c.prenume_client,t.id_tranzactie
FROM clienti2 c, tranzactie2 t
WHERE c.id_client=t.id_client;

Să se obțină produsule, cantitatea și pretul produselor tranzacționate


SELECT p.denumire,p.pret,d.cantitate
FROM produse2 p, detalii_tranzactie2 d
WHERE p.id_produs=d.id_produs;

Să se obțină cel mai mic preț al produselor


SELECT MIN(pret) AS "Pret minim"
FROM produse2;

Să se obțină numele angajatului și data tranzacției


SELECT a.nume,t.data_tranzactie
FROM angajati2 a,tranzactie2 t
WHERE a.id_angajat=t.id_angajat;
Să se obțină suma salariilor angajaților care este mai mare de 1200
SELECT SUM(salariu)
FROM angajati2
WHERE salariu>=1200;

Operații de interogare a datelor utilizând grupări ale datelor

Gruparea datelor din tabela angajați după data nașterii și numărul de angajați
SELECT EXTRACT(YEAR FROM data_nastere) AS an,
COUNT(*) AS "Nr. angajati"
FROM angajati2
GROUP BY EXTRACT(YEAR FROM data_nastere);
Gruparea datelor din tabela tranzactii2 după dată și calcularea numărului de
tranzacții efectuate zilnic
SELECT data_tranzactie,COUNT(*) AS "Tranzactii efectuate"
FROM tranzactie2
GROUP BY data_tranzactie;

Gruparea datelor din produse2 și calcularea prețului mediu fiecărui produs


SELECT denumire, AVG(pret)
FROM produse2
GROUP BY denumire;

Gruparea datelor din angajati2 și calcularea a câte salarii are fiecare funcție
SELECT COUNT(salariu), functia
FROM angajati2
GROUP BY functia;
Gruparea datelor din frunizori și calcularea reprezentanților fiecărei firme
SELECT denumire_firma, COUNT(reprezentant_firma)
FROM furnizori
GROUP BY denumire_firma;

Operații de interogare a datelor utilizând subcereri

Obținerea numelui și prenumelui clienților care au cumpărat produse cu un preț


mai mare de 30
SELECT nume_client, prenume_client
FROM clienti2
WHERE id_client IN(SELECT id_client FROM detalii_tranzactie2 WHERE id_produs
IN(SELECT id_produs FROM produse2 WHERE pret>30));

Obținera numelui și prenumelui clienților care au cumpărat clătite


SELECT nume_client, prenume_client
FROM clienti2
WHERE id_client IN(SELECT id_client FROM detalii_tranzactie2 WHERE id_produs
IN(SELECT id_produs FROM produse2 WHERE denumire='Clatite'));

Obținerea numelui și prenumelui angajatului care au tranzacționat în anul 2010


SELECT nume, prenume
FROM angajati2
WHERE id_angajat IN(SELECT id_angajat FROM tranzactie2 WHERE id_tranzactie
IN(SELECT id_tranzactie FROM tranzactie2 WHERE EXTRACT(YEAR FROM
data_tranzactie)=2010));

Obținerea denumirea produsului care conține materii prime de la firma Nutella


SELECT denumire
FROM produse2
WHERE id_produs IN(SELECT id_materii FROM MateriiPrime WHERE id_furnizor
IN(SELECT id_furnizor FROM Furnizori WHERE denumire_firma='Nutella'));

Obținerea numelui și prenumelui clienților care depășeste cantitatea de


cumpărare a produselor cu 12 bucăți
SELECT nume_client, prenume_client
FROM clienti2
WHERE id_client IN(SELECT id_client FROM produse2 WHERE id_produs IN(SELECT
id_produs FROM detalii_tranzactie2 WHERE cantitate>12));
OPERAȚII DE CREARE ȘI UTILIZARE A TABELELOR
VIRTUALE

Să se creeze o tabelă virtuală care să conțină denumirea produsului și cantitatea


vândută
CREATE VIEW produse_detalii
AS SELECT p.denumire,d.cantitate
FROM produse2 p,detalii_tranzactie2 d
WHERE p.id_produs=d.id_produs;
/
SELECT * FROM produse_detalii;

Să se creeze o tabelă virtuală care să conțină prețul produselor și denumirea


CREATE VIEW materii_produse
AS SELECT p.pret,m.denumire
FROM produse2 p, materiiprime m
WHERE p.id_materii=m.id_materii

/
SELECT * FROM materii_produse;
Să se creeze o tabelă virtuală care să conțină prețul materiilor prime, denumirea,
denumirea firmei și reprezentantul firmei
CREATE VIEW furnizor_materii
AS SELECT m.pret,m.denumire,f.denumire_firma,f.reprezentant_firma
FROM materiiprime m, furnizori f
WHERE m.id_furnizor=f.id_furnizor;
/
SELECT * FROM furnizor_materii;

Să se creeze o tabelă virtuală care să conțina numele, prenumele angajatului și


data tranzacției
CREATE VIEW tranzactie_angajat
AS SELECT a.nume, a.prenume, t.data_tranzactie
FROM angajati2 a, tranzactie2 t
WHERE a.id_angajat=t.id_angajat;
/
SELECT * FROM tranzactie_angajat;
Să se creeze o tabelă virtuală care să conțină numele, prenumele clientului și
prețul și denumirea produselor achiziționate
CREATE VIEW produse_clienti
AS SELECT c.nume_client, c.prenume_client,p.pret,p.denumire
FROM clienti2 c, produse2 p
WHERE c.id_client=p.id_client;
/
SELECT * FROM produse_clienti;

Interogări care să implice și tabelele virtuale deja create


Să se afișeze numele furnizorului de la firma Nutella
SELECT reprezentant_firma
FROM furnizor_materii
WHERE denumire_firma='Nutella';

Să se afișeze numele și prenumele angajatului care a vândut pe data de


25.02.2012
SELECT nume,prenume
FROM tranzactie_angajat
WHERE data_tranzactie='25.02.2012';

Să se afișeze denumirile produselor care au fost cumpărate intr-o cantitate mai


mare de 3 bucăți
SELECT denumire
FROM produse_detalii
WHERE cantitate>3;

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