Sunteți pe pagina 1din 26

Proiect Baze de date

Cuprins
1. Descrierea bazei de date i schema conceptual

2. Definirea schemei bazei de date


Crearea tabelelor
Alterare
tergere

3. Operaii de actualizare a datelor cu ajutorul comenzilor


DML
Inserare
Actualizare

4. Exemple de interogri variate


Operatori de comparaie
Join-uri
Funcii de grup
Utilizarea funiilor numerice la nivel de rnd
Structuri ierahice
Construirea de expresii cu Case i Decode
Utilizarea operatorilor Union, Minus
Subcereri

5. Gestiunea altor obiecte ale bazei de date


Tabele virtuale
Indeci
Secvene
Sinonime
1.Descrierea bazei de date i schema
conceptual
Am realizat o baz de date ce are drept scop mbuntirea gestionrii unui
lan de saloane i stocarea informaiilor necesare pentru buna desfurare n
cadrul acestuia. Informaiile din cadrul acesteia sunt fictive, iar numrul
nregistrrilor este unul suficient pentru a dovedi eficiena bazei de date.
Baza de date conine informaii att despre furnizori, produsele folosite i
comenzile pentru acestea, ct i detalii despre saloane, angajaii acestora i
rezervrile pe care le fac clienii.

Astfel n componenta bazei de date sunt incluse urmtoarele tabele:


FURNIZORI: Ofer informaii despre furnizori, precum id_furnizor (PK) care
constituie o legtur cu produsele pe care acetia le distribuie ctre saloane,
denumire, nume_contact, nr_tel_f.
PRODUSE: Ofer informaii despre produsele folosite de salon precum id-ul
produsului (PK), nume_produs, cantitatea i preul acestuia, o legatur cu
tabela Rand Comanda, dar i o legtur menionat anterior cu furnizorul ce
distribuie aceste produse.
COMANDA: Ofer informaii despre comenzile catre salon, nume_comand,
dat_comand. Aici se regsete i id_comand (Unique Key). Este n
legtur cu Rand Comanda si Salon.
ANGAJAI: Ofer informaii detaliate despre angajai, aici se regsete cheia
primar id_angajat, legtura cu Salon pentru identificarea locului de munc
al acestora precum i atributele urmtoarele: Nume_ang, functie,
data_angajarii, salariu.
SALON: Ofer informaii despre salonul n care sunt distribuite produsele
precum cheia primar id_salon, numele salonului, telefonul si locaia. Este in
legtur cu Rezervrile clienilor, cu Angajaii si Comenzile salonului.
REZERVARI: Ofer informaii despre rezervrile ce au loc n cadrul salonului i
anume numele clientului ce efectueaza rezervarea, data si ora rezervrii,
id_rezervare. Este n legtur cu tabela Salon prin id_salon, pentru a putea
identifica salonul la care este fcut fiecare rezervare.
2. Definirea schemei bazei de date
Crearea tabelelor
Tabela FURNIZORI

Create table Furnizori


(id_furnizor number(6) constraint pk_ Furnizori Primary Key,
denumire varchar2(20),
nume_contact varchar2(20),
nr_tel_f number(15));

Alter table Furnizori


Add constraint id_furnizor_nn
check (id_furnizor is not null);
Tabela PRODUSE

Create table Produse


(id_produs number(6) constraint pk_Produse Primary Key,
nume_produs varchar2(20),
cantitate number, pret number,
id_furnizor number(6));

Alter table Produse


Add constraint id_produs_produs_nn check (id_produs is not null);

Alter table Produse


Add constraint fk_id_furnizor Foreign Key (id_furnizor)
References Furnizori (id_furnizor);

Tabela COMAND

Create table Comanda


(id_comanda number(4) constraint pk_comanda Primary Key,
data_comanda date,
id_salon number(6),
pret_total number(8,2));

Alter table Comanda


Add constraint id_comanda_nn check (id_comanda is not null);

Alter table Comanda


add constraint fk_id_sal Foreign Key (id_salon)
References Salon(id_salon);
Tabela RAND COMAND

Create table Rand_Comanda


(id_comanda number(6)
Comanda_total number,
id_produs number(6));

Alter table Rand_Comanda


add constraint id_produs_nn check (id_produs is not null);

Alter table Rand_Comanda


add constraint id_com_nn check (id_comanda is not null);

Alter table Rand_Comanda


Add constraint fk_id_produs Foreign Key(id_produs)
References Produse (id_produs);

Alter table Rand_Comanda


Add constraint fk_id_comanda Foreign Key(id_comanda)
References Comanda (id_comanda);

Tabela SALON

Create table Salon


(id_salon number(6) constraint pk_Salon Primary Key,
nume_salon varchar(20),
tel_s number,
locatie varchar2(20));
Alter table Salon
Add constraint id_salon_nn
check (id_salon is not null);

Tabela ANGAJAI

Create table Angajati


(id_angajat number constraint pk_Angajati Primary Key,
nume_ang varchar(50),
functie char(20),
data_angajarii date,
salariu number,
id_salon number(6));

Alter table Angajati


add constraint id_ang_nn check (id_angajat is not null);

Alter table Angajati


add constraint fk_id_salon Foreign Key (id_salon)
References Salon (id_salon);

Tabela REZERVARI

Create table Rezervari


(id_rezervare number(6) constraint pk_rezervari primary Key,
nume_client varchar2(20),
data_rez date, ora_rez number, id_salon number(6));
Alter table Rezervari
add constraint id_rezervare_nn check (id_rezervare is not null);

Alter table Rezervari


add constraint fk_rezervari Foreign Key (id_salon)
References Salon(id_salon);

Alterare
1. Adugai coloana nr_mese n tabela Salon avnd tipul number, apoi
eliminati-o.

Alter table Salon


add nr_mese number;

Alter table Salon


Drop column nr_mese;

2. Adugai restricia de integritate ck_ora care s nu permit


introducerea n cmpul ora_rez a unei valori mai mici dect 200
i mai mare dect 1000 n tabela Rezervri.

Alter table Rezervari


add constraint ck_ora_rez check (ora_rez in (200,1000));
3. Dezactivai restricia de integritate check_ora_rez din tabela
Rezervri.

Alter table Rezervari


disable constraint ck_ora_rez;

4. Modificai proprietile cmpului nume_salon din tabela Salon


astfel nct lungimea acestuia s fie de 50.

Alter table Salon


modify nume_salon varchar2(50);

5. Modificai numele tabelei Angajati n Ang.

Alter table Angajati


rename to Ang;

6. Adugai restrictia de integritate nn_salariu care s verifice c


salariul nu este nul n tabela Ang.

Alter table Ang


Add constraint nn_salariu check (salariu is not null);

tergerea
1. Se creeaz tabela Test asupra creia vom testa comenzile de
tergere.

Create table Test


(id_test number(2) constraint pk_Test Primary Key,
nume_test varchar2(20),
nr_test number);

Alter table Test


Add constraint nn_id_test check (id_test is not null);

Alter table Test


Add constraint ck_nr_teste check (nr_test =1);

2. terge restriciile

Alter table Test drop constraint nn_id_test;

3. tergere coloan

Alter table Test drop column nr_test;

4. tergere tabel Test

Drop table Test;

5. tergere tabel Rezervari

Drop table Rezervari;


6. Anularea tergerii

Flashback table Rezervari to before drop;


3. Operaiuni de actualizare a datelor cu
ajutorul comenzilor DML
Inserarea
Tabela Furnizori
Insert into Furnizori values (1,'Angelic',' Alexandra
Anghel',0723455676);
Insert into Furnizori values (2,'Clean','Popescu Iulian',0724857074);
Insert into Furnizori values (3,'Collistar','Gheorghe
Cristina',0744867231);
Insert into Furnizori values (4,'Deborah','Dovinca
Alina',0754122302);
Insert into Furnizori values (5,'Farmec','Eftene Alin',0723485779);
Insert into Furnizori values (6,'Kallos','Iancu Ana',0721231655);
Insert into Furnizori values (7,'Loreal','Paduraru
Lucian',0732545176);
Insert into Furnizori values (8,'MaxFactor','Toma
Mihaela',0755485968);
Insert into Furnizori values (9,'Maybelline','Voinea
Elena',0766859451);
Insert into Furnizori values (10,'Nivea','Voica Andrei',0725785481);

Tabela Produse
Insert into Produse values (101,'Crema de fata',30,20,10);
Insert into Produse values (102,'Fond de ten',25,80,8);
Insert into Produse values (103,'Fard',50,50,2);
Insert into Produse values (104,'Dermatograf',50,20,9);
Insert into Produse values (105,'Tus',50,30,6);
Insert into Produse values (106,'Rimel',40,30,1);
Insert into Produse values (107,'Blush',40,40,7);
Insert into Produse values (108,'Ruj',40,40,5);
Insert into Produse values (109,'LipStick',40,17,4);
Insert into Produse values (110,'Sclipici',100,30,3);
Tabela Salon
Insert into Salon values (201,'Salon1',0786546789,Craiova );
Insert into Salon values (202,'Salon2',0798765678,Bucuresti);
Insert into Salon values (203,'Salon3',0755554345,Bucuresti);
Insert into Salon values (204,'Salon4',0723444543,Timisoara);
Insert into Salon values (205,'Salon5',0745678987,Bacau);
Insert into Salon values (206,'Salon6',0756789098,Galati);
Insert into Salon values (207,'Salon7',0788886789,Slatina);
Insert into Salon values (208,'Salon8',0770876789,Craiova);
Insert into Salon values (209,'Salon9',0754675678,Constanta);
Insert into Salon values (210,'Salon10',0734567876,TarguJiu);

Tabela Comanda
Insert into
Comanda(id_comanda,data_comanda,id_salon)values(310,to_date('4.12.2015
','DD.MM.YYYY'),201);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (311,to_date('11.11.20
15','DD.MM.YYYY'),202);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (312,to_date('13.11.20
15','DD.MM.YYYY'),203);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (313,to_date('14.11.20
15','DD.MM.YYYY'),204);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (314,to_date('18.11.20
15','DD.MM.YYYY'),205);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (315,to_date('20.11.20
15','DD.MM.YYYY'),206);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (316,to_date('21.11.20
15','DD.MM.YYYY'),207);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (317,to_date('23.11.20
15','DD.MM.YYYY'),208);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (318,to_date('24.11.20
15','DD.MM.YYYY'),209);
Insert into
Comanda(id_comanda,data_comanda,id_salon)values (319,to_date('28.11.20
15','DD.MM.YYYY'),210);

Tabela Rand Comanda

Insert into rand_comanda values(101, 430,310);


Insert into rand_comanda values(102, 200,311);
Insert into rand_comanda values(103, 120,312);
Insert into rand_comanda values(104, 100,313);
Insert into rand_comanda values(105, 540,314);
Insert into rand_comanda values(106, 250,315);
Insert into rand_comanda values(107, 250,316);
Insert into rand_comanda values(108, 300,317);
Insert into rand_comanda values(109, 134,318);
Insert into rand_comanda values(110, 90,319);
Tabela Angajati
Insert into Ang values (30,'Avram Adelina','Make-up',
to_date('15.11.2015','DD.MM.YYYY'),800 ,201);
Insert into Ang values (31,'Ionescu Madalina','Cosmetician',
to_date('15.11.2015','DD.MM.YYYY'), 900,201);
Insert into Ang values (32,'Aldea Mihaela','Make-up',
to_date('17.11.2015','DD.MM.YYYY'),800,202);
Insert into Ang values (33,'Paul Marin','Cosmetician',
to_date('17.11.2015','DD.MM.YYYY'),900,202);
Insert into Ang values (34,'Radu Maria','Make-up',
to_date('19.11.2015','DD.MM.YYYY'),800,203);
Insert into Ang values (35,'Borcan Iulia','Cosmetician',
to_date('19.11.2015','DD.MM.YYYY'),900,203);
Insert into Ang values (36,'Marcu Simona','Make-up',
to_date('20.11.2015','DD.MM.YYYY'),800,204);
Insert into Ang values (37,'Ion Doinea','Cosmetician',
to_date('20.11.2015','DD.MM.YYYY'),900,204);
Insert into Ang values (38,'Danci Maria','Make-up',
to_date('21.11.2015','DD.MM.YYYY'),800,205);
Insert into Ang values (39,'Vica Lazarina','Cosmetician',
to_date('21.11.2015','DD.MM.YYYY'),900,205);

Tabela Rezevari
Insert into Rezervari values (501,'Matei Florina',
to_date ('11.01.2015','DD.MM.YYYY'),1500,203);
Insert into Rezervari values (502,'Sima
Catalina',to_date ('13.01.2015','DD.MM.YYYY'),1700,201);
Insert into Rezervari values (503,'Mocanu
Anca',to_date ('12.01.2015','DD.MM.YYYY'),1900,204);
Insert into Rezervari values (504,'Nae
Laura',to_date ('17.01.2015','DD.MM.YYYY'),1200,206);
Insert into Rezervari values (505,'Iania
Alexandra',to_date ('18.01.2015','DD.MM.YYYY'),1130,204);
Insert into Rezervari values (506,'Arami
Simona',to_date ('14.01.2015','DD.MM.YYYY'),1530,203);
Insert into Rezervari values (507,'Radu
Patricia',to_date ('15.01.2015','DD.MM.YYYY'),1500,205);
Insert into Rezervari values (508,'Oana
Paraschiv',to_date ('10.01.2015','DD.MM.YYYY'),1630,204);
Insert into Rezervari values (509,'Marcus
LOredana',to_date ('2.02.2015','DD.MM.YYYY'),1930,201);
Insert into Rezervari values (510,'Cristina
Aldea',to_date ('1.01.2015','DD.MM.YYYY'),1930,204);

Actualizare
1. Inserai un produs nou n tabela Produse.

Insert into Produse values (111,Primer,15,100,8);

2. Modificai n Dobre Elena numele clientului cu id_rezervare egal


cu 503 n tabela rezervar.

Update Rezervari set nume_client= 'Dobre Elena'


where id_rezervare=503;
3. Cresterea preului pentru produsele venite de la furnizorul 3 cu
0,2%.

Update Produse
Set pret = pret * 1.2
where id_furnizor=3;

4. Mrii cu 14% salariile angajatilor de Make-up din salonul


numarul 1 n tabela Ang.

Update Ang
set salariu = salariu * 1.4
where functie = 'Make-up' AND id_salon=201;

5. Modificai data rezervrii care are n cmpul nume valoarea


Arami Simona din tabela Rezervri cu valoarea 14.01.2015.

Update Rezervari
set data_rez= to_date('14.01.2015','DD.MM.YYYY')
where nume_client = 'Nae Laura';

6. Modificai funcia angajatului cu id_angajat=34 cu valoarea


'Cosmetician' n tabela Ang.

Update Ang
set functie = 'Cosmetician'
where id_angajat =34;

7. tergei din tabela Ang nregistrrile care au valoarea


id_angajat mai mare dect 38.
Delete from Ang
where id_angajat >38;

4. Exemple de interogari variate

Operatori de comparaie

1. Afiai produsele cu o cantitate egal cu 40.

Select * from Produse


Where cantitate=40;

2. Afiai numele, funcia i salariul angajailor cu salariul


cuprins ntre 900 i 1500.

Select nume_ang, functie, salariu


From Ang
Where salariu between 900 and 1500
Order by salariu ASC;
Join-uri

1. Afiai numele produsului i numele brandului

Select p.NUME_PRODUS, f.BRAND


From Produse p, Furnizori f
where p.id_furnizor=f.id_furnizor;

2. Afiai numele clientului i numele salonului la care acesta i-a


fcut rezervarea.

Select r.NUME_CLIENT, n.NUME_SALON


From Rezervari r, Salon n
where r.id_salon=n.id_salon;
Func ii de grup

1. Afiai numele angajailor al cror nume are prima liter A.

Select nume_ang from Ang


Where nume_ang like 'A%';

2. Afiai numele i funcia angajatului al crui nume are lungime


maxim.

Select nume_ang, functie


From Ang
Where length(nume_ang)=(Select Max(length(nume_ang)) From Ang);

3. Afiai numele, functia i anul n care s-a angajat cel cu


salariul cel mai mare.

Select nume_ang, functie, data_angajarii


From Ang
Where salariu=(Select Max(salariu) from Ang);

Utilizarea func iilor la nivel de rnd

1. Afiati n ordinea cresctoare salariile medii de la fiecare


salon.
Select n.id_salon, n.nume_salon, round(avg(a.salariu),2) MedieSal
From Salon n, Ang a
Where n.id_salon=a.id_salon
group by n.id_salon, n.nume_salon
order by MedieSal ASC;
2. Afiai datele rezervrilor fcute n perioada 01.01.2015-
15.01.2015

Select n.id_salon, r.nume_client ,r.data_rez


From Salon n, Rezervari r
Where n.id_salon=r.id_salon
Group by (n.id_salon, r.nume_client,r.data_rez)
Having r.data_rez between to_date('01.01.2015','DD.MM.YYYY') and
to_date('15.01.2015','DD.MM.YYYY')
order by n.id_salon;

Structuri ierarhice

Alter table Ang add id_manager number;


Update Ang set id_manager=0 where id_angajat=30;
Update Ang set id_manager=30 where id_angajat=31;
Update Ang set id_manager=31 where id_angajat=32;
Update Ang set id_manager=32 where id_angajat=33;

1. Afiarea angajailor pornind de la angajatul cu id-ul 30.

Select id_angajat, nume_ang ,id_manager


From Ang
Connect By Prior id_angajat= id_manager
Start with id_angajat=30
order by id_manager ASC;

2. Afiai toi superiorii angajatului cu numele Aldea Mihaela

Select id_angajat, nume_ang, id_manager


From Ang
Connect By id_angajat = Prior id_manager
Start with nume_ang = 'Aldea Mihaela';

Construirea de expresii cu Case i Decode

1. Mrii cu 15 preurile cuprinse ntre 10 i 50 i micorai cu 15 preurile


ntre 60 i 100.

Select id_produs, nume_produs, pret,


Case when pret between 10 and 50 then pret + 15
when pret between 60 and 100 then pret -15
end Pret_nou
from Produse;

2. Acordarea unui comision n funcie de slujba avut angajaiilor ce lucreaz la


salon al crui id e mai mare dect 206.

Select a.nume_ang, a.functie,a.salariu, Decode (Initcap(a.functie),'Cosmeticia


n',23,'Make-up',11,5) Comision
From Ang a
where id_salon >206;
Utilizarea operatorilor Union, Minus

1. Afiarea celui mai nou i mai vechi angajat.

Select nume_ang, data_angajarii,Decode(data_angajarii,(select


max(data_angajarii) from Ang),'nou',(select min(data_angajarii) from
Ang),'vechi') Tip_angajat
From Ang Where data_angajarii=(select max(data_angajarii) from Ang)
Union Select nume_ang, data_angajarii,
Decode(data_angajarii,to_date('04.11.1994','DD.MM.YYYY'),'nou',
(select max(data_angajarii) from Ang),'vechi') Tip_angajat
From Ang Where data_angajarii= (select min(data_angajarii) from
Ang);

2. Afiarea persoanelor de contact de la furnizori ale cror


numere de telefon ncep cu 72 sau 73.

Select nume_contact, denumire, nr_tel_f


From Furnizori
minus
Select nume_contact, denumire, nr_tel_f
From Furnizori
where substr(nr_tel_f,1,2)='72' or substr(nr_tel_f,1,2)='73';

Subcereri

1. Mrii cu 0.5 % preul produselor a cror denumire ncepe cu de


i al cror pre este mai mic dect preul mediu din tabela
Produse.

Update Produse
set pret = pret *1.5
Where pret < (Select AVG(Pret) from Produse
) And lower(nume_produs) like 'de%';

2. Afiai numele i salariul angajatului care este MAKE-UP i are


cel mai mare salariu.

Select nume_ang, salariu


From Ang
Where salariu = (Select Max(salariu) from Ang) and Upper
(functie)='MAKE-UP';

5. Gestionarea altor obiecte ale bazei de date


Tabele virtuale

1. Creai tabela virtual care reine datele tuturor angajailor cu


fucia de Make-up.

Create View Ang_Makeup


As Select *
From Ang
where lower(functie)='make-up';

2. S se realizeze o tabel care va conine produsele ce au


valoarea cantitate mai mare sau egal cu 50. tabela nu va putea
fi actualizat.

Create view Produse_des_comandate


As select * from Produse
Where cantitate >=50
with Read Only;

Indec i

1. S se creeze un index pe coloana nume din tabela Ang.

Create index angajati


ON Ang(nume_ang);

2. S se tearg indexul creat anterior.

Drop index angajati;

Secven e

1. S se creeze o secven pentru unicitatea cheii primare din


tabela Ang.

Create sequence seq_idang


Start with 10 increment by 2
Maxvalue 1000 nocycle;
Sinonime
1. Creai sinonime pentru tabelele Ang i Furnizori.

Create synonym a for Ang;

2. S se tearg sinonimul creat anterior.


Drop synonym a;