Sunteți pe pagina 1din 60

Ministerul Educației, Culturii si Cercetării al Republicii Moldova Universitatea Tehnică a

Moldovei Facultatea Calculatoare, Informatică și Microelectronică Departamentul


Ingineria Software și Automatică

PROIECT DE CURS
la disciplina: Baze de date
Tema: Proiectarea unei baze de date si implementarea ei in SQL Server

A efectuat: studentul grupei _______________


A verificat: lector universitar _______________

Chișinău 2019
Cuprins
1. Proiectarea logică a bazei de date................................................................................................................3
1.1 Analiza domeniului....................................................................................................................... 3
1.2 Descrierea atributelor.................................................................................................................... 3
1.3 Stabilirea dependențelor funcționale.............................................................................................4
1.4 Codificarea atributelor...................................................................................................................4
1.5 Sinteza schemei bazei de date.......................................................................................................4
1.6 Decodificarea atributelor.............................................................................................................11
1.7 Descrierea asocierilor între relații............................................................................................... 12
2. Implementarea bazei de date în SQL........................................................................................................13
2.1 Crearea bazei de date noi în T-SQL............................................................................................ 13
2.2 Crearea relațiilor și constrîngerilor de integritate în T-SQL....................................................... 13
2.3 Crearea cheilor externe................................................................................................................15
2.4 Crearea diagramei bazei de date..................................................................................................16
2.5 Popularea cu tupluri relațiile bazei de date................................................................................. 16
2.6 Crearea schemelor bazei de date.................................................................................................18
2.7 Crearea utilizatorilor................................................................................................................... 19
2.8 Crearea viziunilor........................................................................................................................20
2.9 Crearea sinonimilor.....................................................................................................................21
3. Interograrea bazei de date......................................................................................................................... 22
3.1 Crearea interogărilor ce exprima operațiile algebrei relaționale.................................................22
3.2 Crearea interogărilor cu funcții de agregare................................................................................27
3.3 Crearea interogărilor de grupare................................................................................................. 28
3.4 Subinterogări...............................................................................................................................29
3.5 Subinterogări în alte locuri decît în WHERE..............................................................................31
3.6 Crearea declanșatoarelor............................................................................................................. 32
3.7 Crearea procedurilor stocate........................................................................................................33
Concluzii.......................................................................................................................................................... 41
Anexa A - Scriptul T-SQL bazei de date Kanborad.....................................................................................42

2
1. Proiectarea logică a bazei de date
1.1 Analiza domeniului
Kanboard este o aplicație care oferă posibilitatea de a organiza sarcinile dumneavoastre în timp.
Kanboard vă permite să colaborați cu colegii din companie mai eficient. Aplicația dată folosește indirect
principiul de „Divide et Impera” – divizează și stăpînește. Dacă aveți un proiect amplu și nu știți de la ce să
vă apucați dar știți exact care sunt sarcinile în soluție vă poate veni Kanboard-ul. Aplicația dată în mare parte
utilizează bază de date, ca exemplu o sarcină reprezintă în sine o relație. În baza de date a aplicației Kanboard
sunt patru relații de bază: Utilizator, Proiect, Diviziune, Sarcina. Urmează să descrie atributele în parte.

1.2 Descrierea atributelor


Puteți vedea universul bazei de date a aplicației Kanboard în tabelul 1.2.1.
Tabelul 1.2.1 – Descrierea atributelor

Cod atribut Nume atribut Descriere atribut Tip atribut

A Utilizator_Id Identificatorul utilizatorului aplicației întreg


B Utilizator_Nume Numele utilizatorului aplicației text
C Utilizator_Prenume Prenumele utilizatorului aplicației text
D Utilizator_Login Loginul unic pentru un utilizator text
E Utilizator_Parola Parolă pentru un login unic text
F Proiect_Id Identificatorul proiectului întreg
G Proiect_Nume Numele proiectului text
H Proiect_Descriere Descrierea explicită a proiectului text
I Proiect_TimpLimita Timpul limită acordat pentru proiect timp
J Diviziune_Id Identificator de diviziune întreg
K Diviziune_Nume Numele diviziunii text
L Sarcina_Id Identificator de sarcini întreg
M Sarcina_Nume Numele sarcinii text
N Sarcina_Descriere Descrierea explicită a sarcinii text
O Sarcina_Prioritate Nivelul de urgență a sarcinii întreg

3
1.3 Stabilirea dependențelor funcționale
În subcapitolul dat am să reprezint dependențele funcționale în baza de date a aplicației Kanboard.
FVezi={mai jos dependențele funcționale în mulțimea de dependețe F:
UtilizatorId → UtilizatorNume UtilizatorPrenume,
UtilizatorId → UtilizatorLoginUtilizatorParola,
UtilizatorLogin → UtilizatorId,
UtilizatorLogin → UtilizatorParola,
UtilizatorLogin → UtilizatorNumeUtilizatorPrenume,
UtilizatorIdUtilizatorLogin → UtilizatorNumeUtilizatorPrenume UtilizatorParola,
ProiectId → ProiectNume,
ProiectId → ProiectNume ProiectDescriere,
DiviziuneId → ProiectId,
ProiectIdProicteNumeProiectDescriere → ProiectTimpLimita, DiviziuneId → DiviziuneNume,
SarcinaId → DiviziuneId,
SarcinaIdSarcinaNumeSarcinaDescriere → SarcinaPrioritate,
SarcinaId → SarcinaDescriereSarcinaPrioritateDiviziuneId,
SarcinaId → SarcinaNume

}
1.4 Codificarea atributelor
F = { AUtilizînd→BC,A mulțimea→DE,D →deA,dependențeD→E,D
→funcționaleBC,AD→dinBCE,capitolulF→G,1F.3→șiGH,codareaJ→F,dinFGHcapitolul→I,J →1.2K,primesc:L→J, LMN → O,L → NOJ,L → M}
1.5 Sinteza schemei bazei de date
Algoritmul de sinteză
F = { AMulțimea→BC,A →deDE,dependențeD→A,Dfuncționale→E,D→ BC,reeșindAD →dinBCE,codificareaF→G,
Fatributelor:→GH,J→ F, FGH → I, J → K, L → J, LMN → O,L → NOJ,L → M}
4

F =1){ AAduc→B, Adependențe→C,A→D,funcționaleA→E,D→laA, D → :E, D → B, D → C, AD → B, AD → C, AD → E, F → G, F → H, FGH → I,J → F,J → K,L → J,LMN → O,L
→ N,L → O,L → M}
2) Adaug în mulțimea de dependențe funcționale o dependență de forma → , unde R este
F = { Auniversul→B,A→ bazeiC,A→deD,date,A→ iarE,DQ→nuA,aparțineD→E,Dlui→ R:B, D → C, AD → B, AD → C, AD → E, F → G, F
→ H, FGH → I,J → F,J → K,L → J,LMN → O,L → N,L → O,L → M,ABCDEFGHIJKLMNO → Q}
3) Construiesc acoperirea neredundantă pentru F:
∙ (A)F+\A→B =< A, AC, ACD, ACDE, ACDEB >; B aparține (A)+ rezultă: F = F\A → B.

∙ (A)F+\A→C =< A, AD, AD, ADE, ADEB, ADEBC >; C aparține (A)+ rezultă: F = F\A → C.

∙ (A)F+\A→D =< A, AE >; D nu aparține (A)+.

∙ (A)F+\A→E =< A, AD, ADE, ADEB, ADEBC >; E aparține (A)+ rezultă: F = F\A → E.

∙ (D)F+\D→A =< D, DE, DEB, DEBC >; A nu aparține (D)+ .

∙ (D)F+\D→E =< D, DA, DAB, DABC, DABCE >; E aparține (D)+ rezultă: F = F\D → E.

∙ (D)F+\D→B =< D, DA, DAC, DACB, DACBE >; B aparține (D)+ rezultă: F = F\D → B.

∙ (D)F+\D→C =< D, DA, DAB, DABC, DABCE >; C aparține (D)+ rezultă: F = F\D → C.

∙ (AD)F+\AD→B =< AD, ADC, ADCE >; B nu aparține (AD) +.

∙ (AD)F+\AD→C =< AD, ADB, ADBE >; C nu aparține (AD)+.

∙ (AD)F+\AD→E =< AD, ADB, ADBC >; E nu aparține (AD)+.

∙ (F)F+\F→G =< F, FH, FH >; G nu aparține (F)+.

∙ (F)F+\F→H =< F, FG, FG >; H nu aparține (F)+.

∙ (FGH)F+\FGH→I =< FGH >;

I nu aparține (FGH)+.

∙ (j)+F\J→F =< J, JK >; F nu aparține (J)+.

∙ (J)+F\J→K =< J, JF, JFG, JFGH, JFGHI >; K nu aparține (J)+.

∙ (L)F+\L→J =< L, LN, LNO, LNOM >; J nu aparține (L)+.

∙ (LMN)F+\LMN→O =< LMN, LMNO, LMNOJ, , LMNOJK, LMNOJKF, LMNOJKFG, LMNOJKFGH,

LMNOJKFGHI >;

O aparține (LMN)+ rezultă: F = F\LMN → O.


∙ (L)+F\L→N =< L, LO, LOM, LOMJ, LOMJK, LOMJKF, LOMJKFG, LOMJKFGH, LOMJKFGHI >; N nu aparține (L) +.
∙ (L)+F\L→O =< L, LN, LNM, LNMJ, LNMJK, LNMJKF, LNMJKFG, LNMJKFGH, LNMJKFGHI >; O nu aparține (L) +.
∙ (L)+F\L→M =< L, LN, LNO, LNOJ, LNOJK, LNOJKF, LNOJKFG, LNOJKFGH. LNOJKFGHI >; M nu aparține (L) +.
∙ (ABCDEFGHIJKLMNO) F+\ABCDEFGHIJKLMNO→Q =< ABCDEFGHIJKLMNO >; Q nu aparține (ABCDEFGHIJKLMNO) +
rezultă: F = F\A → E.
F={A→B,A→C,A→D,A→E,D→A,D→E,D→B,D→C,AD→B,AD→C,AD→E,F→G,F→H, FGH → I,J → F,J → K,L → J,LMN → O,L → N,L → O,L → M,ABCDEFGHIJKLMNO → Q}
F = { ARezultatul→D,D→ A,primit:AD→ B, AD → C, AD → E, F → G, F → H, FGH → I, J → F, J → K, L → J, L → N, L → O,
L → M, ABCDEFGHIJKLMNO → Q }
4) Trec mulțimea de dependențe funcționale prin algoritmul reducerii la stînga:

∙ (A)F+ =< A, AD, ADB, ADBC, ADBCE >; B aparține (A)+ rezultă: F = F\AD → B ∪ A → B.

∙ (A)F+ =< A, AD, ADB, ADBC, ADBCE >; C aparține (A)+ rezultă: F = F\AD → C ∪ A → C.

∙ (A)F+ =< A, AD, ADB, ADBC, ADBCE >; E aparține (A)+ rezultă: F = F\AD → E ∪ A → E.

∙ (FG)F+ =< FG, FGH, FGHI >; I aparține (FG)+ rezultă : F = F\FGH → I ∪ FG → I.

∙ (F)F+ =< F, FG, FGH, FGHI >; I aparține (F)+ rezultă: F = F\FG → I ∪ F → I.

.
∙ (ABCDEFGHIJKLMN) + =< ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO, ABCDEFGHIJKLMNOQ >;

Q aparține (ABCDEFGHIJKLMN)+ rezultă: F = F\ABCDEFGHIJKLMNO → Q ∪ ABCDEFGHIJKLMN → Q

∙ (ABCDEFGHIJKLM) + =

< ABCDEFGHIJKLM , ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO, ABCDEFGHIJKLMNOQ .


>;
Q aparține (ABCDEFGHIJKLM) + rezultă: F = F\ABCDEFGHIJKLMN → Q ∪ ABCDEFGHIJKLM → Q

∙ (ABCDEFGHIJKL)+F =< ABCDEFGHIJKL, ABCDEFGHIJKLM, ABCDEFGHIJKLMN,


ABCDEFGHIJKLMNO, 6
.

ABCDEFGHIJKLMNOQ >;

Q aparține (ABCDEFGHIJKL) + rezultă: F = F\ABCDEFGHIJKLM → Q ∪ ABCDEFGHIJKL → Q

∙ (ABCDEFGHIJK)F+ =< ABCDEFGHIJK, ABCDEFGHIJKL, ABCDEFGHIJKLM, ABCDEFGHIJKLMN,

.
ABCDEFGHIJKLMNO, ABCDEFGHIJKLMNOQ >;

Q aparține (ABCDEFGHIJK) + rezultă: F = F\ABCDEFGHIJKL → Q ∪ ABCDEFGHIJK → Q

∙ (ABCDEFGHIJ)F+ =< ABCDEFGHIJ, ABCDEFGHIJK, ABCDEFGHIJKL, ABCDEFGHIJKLM,

ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO, ABCDEFGHIJKLMNOQ .


>;

Q aparține (ABCDEFGHIJ)+ rezultă: F = F\ABCDEFGHIJK → Q ∪ ABCDEFGHI → Q

∙ (ABCDEFGHI)F+ =< ABCDEFGHI, ABCDEFGHIJ, ABCDEFGHIJK, ABCDEFGHIJKL, ABCDEFGHIJKLM,

ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO, ABCDEFGHIJKLMNOQ . >;

Q aparține (ABCDEFGHI) + rezultă: F = F\ABCDEFGHIJ → Q ∪ ABCDEFGHI → Q

∙ (ABCDEFGH)F+ =< ABCDEFGH, ABCDEFGHI, ABCDEFGHIJ, ABCDEFGHIJK, ABCDEFGHIJKL,

ABCDEFGHIJKLM, ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO,

ABCDEFGHIJKLMNOQ >;
.

Q aparține (ABCDEFGH) + rezultă: F = F\ABCDEFGHI → Q ∪ ABCDEFGH → Q

∙ (ABCDEFG)F+ =< ABCDEFG, ABCDEFGH, ABCDEFGHI, ABCDEFGHIJ, ABCDEFGHIJK, ABCDEFGHIJKL,

ABCDEFGHIJKLM, ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO,

ABCDEFGHIJKLMNOQ >;
.

Q aparține (ABCDEFG) + rezultă: F = F\ABCDEFGH → Q ∪ ABCDEFG → Q

∙ (ABCDEF)F+ =< ABCDEF, ABCDEFG, ABCDEFGH, ABCDEFGHI, ABCDEFGHIJ, ABCDEFGHIJK,

ABCDEFGHIJKL, ABCDEFGHIJKLM, ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO,

ABCDEFGHIJKLMNOQ >;
.

Q aparține (ABCDEF)+ rezultă: F = F\ABCDEFG → Q ∪ ABCDEF → Q

∙ (ABCDE)F+ =< ABCDE . >;

Q nu aparține (ABCDE)+

∙ (ABCDF)F+ =< ABCDF, ABCDEF, ABCDEFG, ABCDEFGH, ABCDEFGHI, ABCDEFGHIJ, ABCDEFGHIJK,

ABCDEFGHIJKL, ABCDEFGHIJKLM, ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO,

.
ABCDEFGHIJKLMNOQ >;
Q aparține (ABCDF) + rezultă: F = F\ABCDEF → Q ∪ ABCDF → Q

∙ (ABCF)+ =< ABCF, ABCDF, ABCDEF, ABCDEFG, ABCDEFGH, ABCDEFGHI, ABCDEFGHIJ, ABCDEFGHIJK,
F ABCDEFGHIJKL, ABCDEFGHIJKLM, ABCDEFGHIJKLMN, ABCDEFGHIJKLMNO, ABCDEFGHIJKLMNOQ
>;
7
Q aparține (ABCF)+ rezultă: F = F\ABCDF → Q ∪ ABCF → Q
∙ (ABF)+ =< ABF, ABCF, ABCDF, ABCDEF, ABCDEFG, ABCDEFGH,. ABCDEFGHI, ABCDEFGHIJ,
F ABCDEFGHIJK, ABCDEFGHIJKL, ABCDEFGHIJKLM, ABCDEFGHIJKLMN,
ABCDEFGHIJKLMNO, ABCDEFGHIJKLMNOQ >;
Q aparține (ABF)+ rezultă: F = F\ABCF → Q ∪ ABF → Q
∙ (AF)+ =< AF, ABF, ABCF, ABCDF, ABCDEF, ABCDEFG, ABCDEFGH,. ABCDEFGHI, ABCDEFGHIJ,
F ABCDEFGHIJK,ABCDEFGHIJKLMNO,ABCDEFGHIJKL,ABCDEFGHIJKLMNOQABCDEFGHIJKLM,>; ABCDEFGHIJKLMN,
Q aparține (AF)+ rezultă: F = F\ABF → Q ∪ AF → Q
.

∙ (F)+ =< F, FG, FGH, FGHI, FGHIJ, FGHIJK, FGHIJKL, FGHIJKLM, FGHIJKLMN, FGHIJKLMNO >; Q nu Faparține (F)+.
F = {A → D,D → A,AD → B,AD → C,AD → E,F → G,F → H,FGH → I,J → F,J → K,L → J,L → N,L → O,
L → M, ABCDEFGHIJKLMNO → Q }
F = { ARezultatul→D,D→ A,primit:A→B, A → C, A → E, F → G, F → H, F → I, J → F, J → K, L → J, L → N, L → O,
L→M,AF→Q}
→5) Formez clasele de echivalență pentru mulțimea de dependențe F:
∙ (A)+ =< A, AD, ADB, ADBC, ADBCE >;
→F
∙ (D)+F =< D, DA, DAB, DABC, DABCE >;

∙ (A)+ =< A, AB, ABD, ABDC, ABDCE >;
→F
∙ (A)+ =< A, AC, ACD, ACDB, ACDBE >;
→F
∙ (A)+F =< A, AE, AED, AEDB, AEDBC >;

∙ (F)+F =< F, FG, FGH, FGHI >;


8

∙ (F)F+ =< F, FH, FHG, FHGI >;

∙ (F)F+
=< F, FI, FIG, FIGH >;

∙ (J)F+
=< J, JF, JFK, JFKG, JFKGH, JFKGHI >;

∙ (J)F+
=< J, JK, JKF, JKFG, JKFGH, JKFGHI >;

∙ (L)F+
=< L, LJ, LJN, LJNO, LJNOM, LJNOMK, LJNOMKF, LJNOMKFG, LJNOMKFGH, LJNOMKFGHI >;

∙ (L)F+
=< L, LN, LNO, LNOM, LNOMJ, LNOMJK, LNOMJKF, LNOMJKFG, LNOMJKFGH, LNOMJKFGHI >;

∙ (L)F+
=< L, LO, LON, LONM, LONMJ, LONMJK, LONMJKF, LONMJKFG, LONMJKFGH, LONMJKFGHI >;

∙ (L)F+ =< L, LM, LMN, LMNO, LMNOJ, LMNOJK, LMNOJKF, LMNOJKFG, LMNOJKFGH, LMNOJKFGHI >;

∙ (AF)+ =< AF, AFQ, AFQD, AFQDB, AFQDBC, AFQDBCE, AFQDBCEG, AFQDBCEGH, AFQDBCEGHI,

AFQDBCEGHIJ, AFQDBCEGHIJK, AFQDBCEGHIJKL, AFQDBCEGHIJKLN, AFQDBCEGHIJKLNO,

AFQDBCEGHIJKLNOM >;
F={A→D,D→A,A→B, A→C,A→E,F→G,F→H,F→I,J→F,J→K,L→J,L →N,L→ O,

Clasele de echivalență:

L→M,AF→Q}

E F={E(A)={A→D,D→A,A→B,A→C,A→E},

E(F)={F→G,F→H,F→I},

E(J)={J→K,J→F},

E(L)={L→N,L→O,L→M,L→J},

E(AF)={AF→Q }, }
=∪{→, → }

6) Construiesc mulțimea J din F, cu determinanții X și Y, unde schimbă mulțimea


și modific mulțimea F:
J={{A→D,D→A}, 9
{∅},

{∅},

{∅},

{∅},}

E F={E(A) ={A→B,A→C,A→E },

E(F) ={F→G,F→H,F→I},

E(J)= {J→K,J→F},

E(L) ={L→N,L→O,L→M,L→J},

E(AF) = {AF → Q},}


7) Șterg din F dependețe tranzitive. Pentru mulțimea de dependențe funcționale primită la
F\A→B ∪ J
∙∙ (A)(A)
punctul anterior formez acoperirea neredundantă în uniune cu mulțimea J:
=<=< A,A, AB,AC, ACE,ABE, ACEDABE D >;>; BC nunu aparțineapa rține (A)(A) +..
+

+ +
F\A→C ∪ J
∙ (A) =< A, AB, ABC, ABCD >; E nu aparține (A) .
+ +
F\A→E ∪ J
∙ (F) =< F, FH, FHI >; G nu aparține (F) .
+ +
F\F→G ∪ J
∙ (F) =< F, FG, FGI >; H nu aparține (F) .
+ +
F\F→H ∪ J
∙ (F) =< F, FG, FGH >; I nu aparține (F) .
+ +
F\F→I ∪ J
∙ (J) =< J, JK >; F nu aparține (J) .
+ +
F\J→F ∪ J
∙ (J) =< J, JF, JFG, JFGH, JFGHI >; K nu aparține (J) .
+ +
F\J→K ∪ J
∙ (L) =< L, LN, LNO, LNOM >; J nu aparține (L) .
+ +
F\L→J ∪ J

∙ (L)+F\L→N ∪ J =< L, LO, LOM, LOMJ, LOMJK, LOMJKF, LOMJKFG, LOMJKFGH, LOMJKFGHI >; N nu aparține (L) +.
∙ (L)+F\L→O ∪ J =< L, LN, LNM, LNMJ, LNMJK, LNMJKF, LNMJKFG, LNMJKFGH, LNMJKFGHI >; O nu aparține (L) +.
∙ (AF)+ =< AF, AFD, AFDB, AFDBC, AFDBCE, AFDBCEG, AFDBCEGH, AFDBCEGHI, AFDBCEGHIJ,
F\AF→Q ∪ J AFDBCEGHIJK, AFDBCEGHIJKL, AFDBCEGHIJKLN, AFDBCEGHIJKLNO, AFDBCEGHIJKLNOM >;
Q nu aparține (AF)+.
10
8) Introduc J în F:
EF = { E (A)={ A → D, D → A, A → B, A

→ C,A→E},
E(F)={F→G,F→H,F→I}, E(J)={J→K,J→F},

→ J },
E(L)={L→N,L→O,L→M,L E(AF) = {AF

→ Q},}
R1 = {A,D,B,C,E}, K= {A,D};

9) Reeșind din punctul anterior formez schemele bazei de date și cheile primare:

R2 = {F,G,H,I}, K= {F};

R3 = {J,K.F}, K= {J};

R4 = { L,N,O,M,J }, K= {L};

R5 = {A,F}, K = {AF}.
10) Relațiile schemelor bazei de date:

1 *

ABDCE JKF
1

* * 1

AF 1
FGHI LNOMJ

Figura 1.5.1 – Relațiile schemelor

1.6 Decodificarea atributelor


Utilizînd codificarea din capitolul 1.2 și rezultatul primit în capitolul 1.6 primesc următoarele scheme:

R1 = � UtilizatorId, UtilizatorLogin, UtilizatorNume, UtilizatorPrenume, UtilizatorParola �, K = � UtilizatorId, UtiizatorLogin �;

R2 = � ProiectId, ProiectNume, ProiectDescriere, ProiectTimpLimita �,

11
K = { ProiectId. Proiect };
R ={{ Diviziune },Diviziune
3 Id Nume Id },
K= DiviziuneId ;
R4 ={{ SarcinaId},SarcinaNume, SarcinaPrioritate, SaricinaDescriere, DiviziuneId },
K= SarcinaId ;
R5 = { UtilizatorId, ProiectId },

K = { UtilizatorIdProiectId }.
1.7 Descrierea asocierilor între relații
Deci relația Utilizator are cinci atribute (id,nume, prenume, login,parola) și este întro legătură mulți la
mulți cu relația Proiect care are patru atribute (id,nume,descriere,timp), relația dată se realizează printr-o relație
adăugătoare UtilizatorProiect cu două atribute (idUtilizator, idProiect). Adica un utilizator poate lucra la mai
multe proiecte și un poriect poate fi realizat de mai mulți utilizatori. Diviziunile sunt dispărțiturile din fiecare
proiect care au o semnificație logică de container pentru sarcini, de exemplu prima diviziune este „Toate
sarcinile” în sunt prezente sarcinile noi create și cele care nu sunt încă prelucrate. O diviziune poate conține mai
multe sarcini, deci între diviziune și sarcini este o relație de unu la mulți. Un proiect poate conține trei diviziuni
„Toate sarcinile”, „În progress” și „Finisate”, deci relația între proiect și diviziuni este de unu la mulți.

12
2. Implementarea bazei de date în SQL
2.1 Crearea bazei de date noi în T-SQL
IF DB_ID('Kanboard') IS NOT NULL
DROP DATABASE [Kanboard];

CREATE DATABASE [Kanboard]


ON
(
NAME = KanboardDB_data,
FILENAME = 'A:\WorkSpace\(BDC) laboratory\Proiect de
curs\KanboardDB\Kanboard.mdf', SIZE = 250MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 25MB
)
LOG ON
(
NAME = KanboardDB_log,
FILENAME = 'A:\WorkSpace\(BDC) laboratory\Proiect de curs\KanboardDB\Kanboard.ldf',
SIZE = 5MB,
FILEGROWTH = 5MB
);
GO
USE [Kanboard];
GO

Figura 2.1.1 – Rezultatul scriptului T-SQL

2.2 Crearea relațiilor și constrîngerilor de integritate în T-SQL


-- UTLIZATOR
IF OBJECT_ID('Utilizator','U') IS NOT NULL
DROP TABLE [Utilizator];

13
CREATE TABLE [Utilizator] (
[Utilizator_Id] INT NOT NULL IDENTITY(1,1),
[Utilizator_Nume] VARCHAR(255),
[Utilizator_Prenume] VARCHAR(255),
[Utilizator_Login] VARCHAR(255) NOT NULL,
[Utilizator_Parola] VARCHAR(255) NOT NULL,
CONSTRAINT [CHECK_Utilizator_Id] CHECK([Utilizator_Id]>0),
CONSTRAINT [UNIQUE_Utilizator_Login]
UNIQUE([Utilizator_Login]), );

-- PROIECT
IF OBJECT_ID('Proiect','U') IS NOT NULL
DROP TABLE [Proiect];

CREATE TABLE [Proiect] (


[Proiect_Id] INT NOT NULL IDENTITY(1,1),
[Proiect_Nume] VARCHAR(255) NOT NULL CONSTRAINT [DEFAULT_PROIECTNUME] DEFAULT 'NO
NAME', [Proiect_Descriere] TEXT CONSTRAINT [DEFAULT_PROIECTDESCRIERE] DEFAULT NULL,
[Proiect_TimpLimit] DATETIME NOT NULL CONSTRAINT [DEFAULT_PROIECTTIMPLIMITA]
DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT [CHECK_Project_Id]
CHECK([Proiect_Id]>0), );

-- TABEL ADAUGATOR PENTRU CREAREA RELATIEI N LA N IF


OBJECT_ID('Utilizator_Proiect','U') IS NOT NULL
DROP TABLE [Utilizator_Proiect];

CREATE TABLE [Utilizator_Proiect] (


[Utilizator_Id] INT NOT NULL,
[Proiect_Id] INT NOT NULL,
);

-- DIVIZIUNE
IF OBJECT_ID('Diviziune','U') IS NOT NULL
DROP TABLE [Diviziune];

CREATE TABLE [Diviziune] (


[Diviziune_Id] INT NOT NULL IDENTITY(1,1),
[Diviziune_Nume] VARCHAR(255) NOT NULL,
[Proiect_Id] INT NOT NULL,
);

-- SARCINA
IF OBJECT_ID('Sarcina','U') IS NOT NULL
DROP TABLE [Sarcina];

CREATE TABLE [Sarcina] (


[Sarcina_Id] INT NOT NULL IDENTITY(1,1),
[Sarcina_Nume] VARCHAR(255) NOT NULL,
[Sarcina_Descriere] TEXT NOT NULL,
[Sarcina_Prioritatea] INT NOT NULL CONSTRAINT [DEFAULT_SARCINAPRIORITATEA] DEFAULT 1,
[Diviziune_Id] INT NOT NULL,
);

14
Figura 2.2.1 – Rezultatul scriptului T-SQL

2.3 Crearea cheilor externe


ALTER TABLE [Utilizator]
ADD CONSTRAINT [K_UTILIZATORID] PRIMARY KEY([Utilizator_Id]);

ALTER TABLE [Proiect]


ADD CONSTRAINT [K_PROIECTID] PRIMARY KEY([Proiect_Id]);

ALTER TABLE [Utilizator_Proiect]


ADD CONSTRAINT [K_UTILIZATORIDPROIECTID] PRIMARY KEY([Utilizator_Id],[Proiect_Id]),
CONSTRAINT [FK_UTILIZATORID] FOREIGN KEY([Utilizator_Id])
REFERENCES [Utilizator]([Utilizator_Id]),
CONSTRAINT [FK_PROIECTID] FOREIGN KEY([Proiect_Id]) REFERENCES [Proiect]([Proiect_Id]);

ALTER TABLE [Diviziune]


ADD CONSTRAINT [K_DIVIZIUNEID] PRIMARY KEY([Diviziune_Id]),
CONSTRAINT [FK_DIVIZIUNEPROIECTID] FOREIGN KEY([Proiect_Id])
REFERENCES [Proiect]([Proiect_Id]);

ALTER TABLE [Sarcina]


ADD CONSTRAINT [K_SARCINAID] PRIMARY KEY([Sarcina_Id]),
CONSTRAINT [FK_SARCINADIVIZIUNEID] FOREIGN KEY([Diviziune_Id])
REFERENCES [Diviziune]([Diviziune_Id]);

Figura 2.3.1 – Rezultatul scriptului T-SQL

15
2.4 Crearea diagramei bazei de date

Figura 2.4.1 – Diagrama bazei de date

2.5 Popularea cu tupluri relațiile bazei de date

INSERT INTO [Utilizator]


([Utilizator_Nume],[Utilizator_Prenume],[Utilizator_Login],[Utilizator_Parola])
VALUES
('Vovc','Artiom','vovc.artiom@gmail.com','12345'),
('Osipov','Victor','osipov.victor@gmail.com','23423523'),
('Urmanschi','Mihail','urmanschi.mihail@gmail.com','SDF3234'),
('Turcanu','Simion','turcanu.simion@gmail.com','4T3R3453'),
('Saranciuc','Dorian','saranciuc.dorian@gmail.com','453FDG'),
('Postaru','Andrei','postaru.andrei@gmail.com','HHGGFBFB'),
('Manciu','Ion','manciu.ion@gmail.com','1234ARSF5'),
('Casciuc','Roman','casciuc.roman@gmail.com','SFQWEEEQWE'),
('Cotelea','Vitalie','cotelea.Vitalie@gmail.com','LDFFSEWREW'),
('John','Snow','john.snow@gmail.com','WINTERISCOMING');

INSERT INTO [Proiect] ([Proiect_Nume],[Proiect_Descriere],


[Proiect_TimpLimit]) VALUES
(DEFAULT,DEFAULT,CURRENT_TIMESTAMP),
('Personal project',NULL,CURRENT_TIMESTAMP),
('Kanboard','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Note pad','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Jurnal','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Catalog','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Universitate','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Scoala','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
(DEFAULT,NULL,CURRENT_TIMESTAMP),
('Test','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP);

16
INSERT INTO Utilizator_Proiect (Utilizator_Id,Proiect_Id)
VALUES
(1,5),
(1,2),
(1,3),
(1,4),
(2,2),
(2,3),
(7,5),
(6,5),
(2,1),
(2,4),
(2,5),
(3,5),
(4,5);

INSERT INTO [Diviziune] ([Diviziune_Nume],[Proiect_Id])


VALUES
('IN PROGRESS',1),
('IN PROGRESS',2),
('IN PROGRESS',3),
('IN PROGRESS',4),
('IN PROGRESS',5),
('TOATE SARCINILE',1),
('TOATE SARCINILE',2),
('TOATE SARCINILE',3),
('TOATE SARCINILE',4),
('TOATE SARCINILE',5),
('TERMINATE',1),
('TERMINATE',2),
('TERMINATE',3),
('TERMINATE',4),
('TERMINATE',5);

INSERT INTO [Sarcina] ([Sarcina_Nume],[Sarcina_Descriere],[Sarcina_Prioritatea],


[Diviziune_Id]) VALUES
('Crearea cererilor','asdasdasdasdasd sdasd asda sd asdas das d',DEFAULT,2),
('Modificarea interfetei','asdasdasdasdasd sdasd asda sd asdas das d',3,2),
('Modificarea logicii','asdasdasdasdasd sdasd asda sd asdas das d',2,2),
('Setarea timpului','asdasdasdasdasd sdasd asda sd asdas das d',1,2), ('Lupta de
tron','asdasdasdasdasd sdasd asda sd asdas das d',3,2),
('Victorie','asdasdasdasdasd sdasd asda sd asdas das d',DEFAULT,7),
('Stiinta','asdasdasdasdasd sdasd asda sd asdas das d',DEFAULT,7), ('Setarea
datelor','asdasdasdasdasd sdasd asda sd asdas das d',1,7),
('Setarea constringerilor','asdasdasdasdasd sdasd asda sd asdas das
d',DEFAULT,7), ('Analiza sistemului','asdasdasdasdasd sdasd asda sd asdas das
d',2,12), ('Content gratis','asdasdasdasdasd sdasd asda sd asdas das
d',DEFAULT,12), ('Marirea eficientii','asdasdasdasdasd sdasd asda sd asdas das
d',DEFAULT,12), ('Tratarea erorilor','asdasdasdasdasd sdasd asda sd asdas das
d',DEFAULT,12), ('T1','T1',DEFAULT,1),
('T2','T2',DEFAULT,1);

17
Figura 2.5.1 – Rezultatul scriptului T-SQL

2.6 Crearea schemelor bazei de date

IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE


SYS.schemas.name='Utilizatori') DROP SCHEMA [Utilizatori];
GO
CREATE SCHEMA [Utilizatori];
GO
ALTER SCHEMA [Utilizatori] TRANSFER [dbo].[Utilizator];
GO
IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE
SYS.schemas.name='Proiecte') DROP SCHEMA [Proiecte];
GO
CREATE SCHEMA [Proiecte];
GO
ALTER SCHEMA [Proiecte] TRANSFER [dbo].[Proiect];
ALTER SCHEMA [Proiecte] TRANSFER [dbo].[Diviziune];
ALTER SCHEMA [Proiecte] TRANSFER [dbo].[Sarcina];
GO
IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE
SYS.schemas.name='Relatii') DROP SCHEMA [Relatii];
GO
CREATE SCHEMA [Relatii];
GO
ALTER SCHEMA [Relatii] TRANSFER [dbo].[Utilizator_Proiect];
GO

Figura 2.6.1 – Rezultatul scriptului T-SQL

18
2.7 Crearea utilizatorilor
IF EXISTS(SELECT * FROM [master].[dbo].[syslogins] WHERE [name]='LOGIN_First'
AND [dbname]='Kanboard')
DROP LOGIN [LOGIN_First];

CREATE LOGIN [LOGIN_First]


WITH PASSWORD = '1111', DEFAULT_DATABASE = [Kanboard];

IF EXISTS(SELECT * FROM [master].[dbo].[sysusers] WHERE


[name]='USER_First') DROP USER [USER_First];

CREATE USER [USER_First] FOR LOGIN [LOGIN_First]


WITH DEFAULT_SCHEMA = [Utilizatori];
EXEC SP_ADDSRVROLEMEMBER 'LOGIN_First','sysadmin';
EXEC SP_ADDROLEMEMBER 'db_datareader', 'USER_First';

IF EXISTS(SELECT * FROM [master].[dbo].[syslogins] WHERE [name]='LOGIN_Second'


AND [dbname]='Kanboard')
DROP LOGIN [LOGIN_Second];

CREATE LOGIN [LOGIN_Second]


WITH PASSWORD = '2222', DEFAULT_DATABASE = [Kanboard];

IF EXISTS(SELECT * FROM [master].[dbo].[sysusers] WHERE


[name]='USER_Second') DROP USER [USER_Second];

CREATE USER [USER_Second] FOR LOGIN [LOGIN_Second]


WITH DEFAULT_SCHEMA = [Proiecte];
EXEC SP_ADDSRVROLEMEMBER 'LOGIN_Second','sysadmin';
EXEC SP_ADDROLEMEMBER 'db_datawriter', 'USER_Second';

Figura 2.7.1 – Rezultatul scriptului T-SQL

Verificarea utilizatorilor
SELECT SUSER_NAME(),USER_NAME();
EXEC AS USER = 'USER_First';
SELECT SUSER_NAME(),USER_NAME();
INSERT INTO [Proiecte].[Sarcina]
([Sarcina_Nume],[Sarcina_Descriere],[Sarcina_Prioritatea],[Diviziune_Id])
VALUES
('TEST1','TEST1',DEFAULT,2);
SELECT * FROM [Utilizatori].[Utilizator];
REVERT;
EXEC AS USER = 'USER_Second';
SELECT SUSER_NAME(),USER_NAME();
INSERT INTO [Proiecte].[Sarcina]
([Sarcina_Nume],[Sarcina_Descriere],[Sarcina_Prioritatea],[Diviziune_Id])
VALUES
('TEST2','TEST2',DEFAULT,2);
SELECT * FROM [Proiecte].[Proiect];
19
REVERT;
SELECT SUSER_NAME(),USER_NAME();

Figura 2.7.2 – Rezultatul scriptului

2.8 Crearea viziunilor


IF OBJECT_ID('VIEW_First','V') IS NOT NULL
DROP VIEW [VIEW_First];

GO
CREATE VIEW [VIEW_First]
WITH SCHEMABINDING
AS
SELECT
[Relatii].[Utilizator_Proiect].[Utilizator_Id],
[Relatii].[Utilizator_Proiect].[Proiect_Id] FROM
[Relatii].[Utilizator_Proiect] GO
DROP TABLE [Relatii].[Utilizator_Proiect];

IF OBJECT_ID('VIEW_Second','V') IS NOT NULL


DROP VIEW [VIEW_Second];

GO
CREATE VIEW [VIEW_Second]
AS
SELECT
[Proiecte].[Proiect].[Proiect_Nume],
[Proiecte].[Proiect].[Proiect_Descriere],
[Proiecte].[Proiect].[Proiect_TimpLimit]
FROM [Proiecte].[Proiect]
WHERE [Proiecte].[Proiect].[Proiect_Nume] LIKE 'NO%'
WITH CHECK OPTION
GO
UPDATE [VIEW_Second]
SET [VIEW_Second].[Proiect_Nume] = 'NU ESTE DENUMIRE'
WHERE [VIEW_Second].[Proiect_Nume] LIKE 'NO%';

20
Figura 2.8.1 – Rezultatul scriprului

Figura 2.8.2 – Validarea

2.9 Crearea sinonimilor


IF OBJECT_ID('Div','SN') IS NOT NULL
DROP SYNONYM [DIV];
CREATE SYNONYM [Div] FOR [Kanboard].[Proiecte].[Diviziune];

IF OBJECT_ID('Pro','SN') IS NOT NULL


DROP SYNONYM [Pro];
CREATE SYNONYM [Pro] FOR [Kanboard].[Proiecte].[Proiect];

IF OBJECT_ID('Sar','SN') IS NOT NULL


DROP SYNONYM [Sar];
CREATE SYNONYM [Sar] FOR [Kanboard].[Proiecte].[Sarcina];

IF OBJECT_ID('UP','SN') IS NOT NULL


DROP SYNONYM [UP];
CREATE SYNONYM [UP] FOR [Kanboard].[Relatii].[Utilizator_Proiect];

IF OBJECT_ID('U','SN') IS NOT NULL


DROP SYNONYM [U];
CREATE SYNONYM [U] FOR [Kanboard].[Utilizatori].[Utilizator];

Figura 2.9.1 – Rezultatul scriptului

21
3. Interograrea bazei de date
3.1 Crearea interogărilor ce exprima operațiile algebrei relaționale
- uniunea
- Sa se afiseze toate sarcinile proiectului sub denumirea Personal
project. SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'TOATE
SARCINILE') UNION ALL
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'IN PROGRESS')
UNION ALL
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'TERMINATE');

Figura 3.1.1 – Uniunea

- intersectie
- Sa se afiseze proiectele comune a utilizatorului Osipov Victor si Mihail
Urmanshi SELECT * FROM [Pro]
WHERE [Pro].[Proiect_Id] = ( SELECT
[UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Osipov' AND [U].[Utilizator_Prenume] = 'Victor')
INTERSECT
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Urmanschi' AND [U].[Utilizator_Prenume] = 'Mihail'));

22
Figura 3.1.2 – Intersecția

- diferenta
- Sa se afiseze identificatoarele proiectelor care apartin lui Osipov Victor si nu lui Vovc
Artiom SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Osipov' AND [U].[Utilizator_Prenume] = 'Victor')
EXCEPT
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Vovc' AND [U].[Utilizator_Prenume] = 'Artiom');

Figura 3.1.3 – Diferența

- produsul cartezian
- Sa se afiseze produsul cartezian al tuturor proiectelor si a tuturor
utilizatorilor SELECT [U].*,[Pro].* FROM [Pro] CROSS JOIN [U]
ORDER BY [U].[Utilizator_Id] ASC;

Figura 3.1.4 – Produs cartezian

- complimentul activ
- Sa se afiseze complimentul activ al relatiei Diviziune
SELECT * FROM (
(SELECT [Div].[Diviziune_Id] FROM [Div]) AS [DivId]
CROSS JOIN
(SELECT [Div].[Diviziune_Nume] FROM [Div]) AS [DivNume]
CROSS JOIN
(SELECT [Div].[Proiect_Id] FROM [Div]) AS [DivProiect])
EXCEPT
SELECT * FROM [Div];

23
Figura 3.1.5 – Compliment activ

- teta jonctiune
- Sa se afiseze divizunea care are sarcina cu denumirea sa inceapa cu
Setarea SELECT * FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id] AND [Sar].[Sarcina_Nume] LIKE 'Setarea %'

Figura 3.1.6 –Theta joncțiune

- jonctiune naturala
- Sa se afiseze proiectele si utilizatorii dezovoltate de fiecare
utilizator SELECT [UP].[Proiect_Id],[U].* FROM [UP] JOIN [U]
ON [UP].[Utilizator_Id] = [U].[Utilizator_Id];

Figura 3.1.7 – Joncțiune naturală

- jonctiunea externa
- jonctionea left join
- Sa se afiseze toate diviziunile si sarcinile prin left
join SELECT * FROM [Div] LEFT OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id]
24
Figura 3.1.8 – Joncțiune stînga

- jonctionea right join


- Sa se afiseze toate diviziunile si sarcinile prin right
join SELECT * FROM [Div] RIGHT OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id]

Figura 3.1.9 – Joncțiune dreapta

- jonctionea full join


- Sa se afiseze toate diviziunile si sarcinile prin full
join SELECT * FROM [Div] FULL OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id]

Figura 3.1.10 – Joncțiune plină

- semijonctiunea
- Sa se reprezinte diviziunile care au cel putin o
sarcina SELECT DISTINCT [Div].* FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id]
25
Figura 3.1.11 – Semijoncțiune

- divizarea
- Sa se prezite divizarea fara pierderi pentru relatia Diviziuni
SELECT * FROM
(SELECT [Div].[Diviziune_Id],[Div].[Diviziune_Nume] FROM [Div]) AS
[D1] JOIN
(SELECT [Div].[Diviziune_Id],[Div].[Proiect_Id] FROM [Div]) AS
[D2] ON [D1].[Diviziune_Id] = [D2].[Diviziune_Id];

Figura 3.1.12 – Divizarea fară pierderi

- Sa se prezinte divizarea cu pierderi pentru relatia Diviziuni


SELECT * FROM
(SELECT [Div].[Proiect_Id],[Div].[Diviziune_Nume] FROM [Div]) AS
[D1] JOIN
(SELECT [Div].[Proiect_Id],[Div].[Diviziune_Id] FROM [Div]) AS
[D2] ON [D1].[Proiect_Id] = [D2].[Proiect_Id];

Figura 3.1.13 – Divizarea cu pierderi

26
3.2 Crearea interogărilor cu funcții de agregare
- Sa se afiseze proiectul cu cele mai putine
sarcini SELECT [SARCOUNTSUM].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],SUM([SARCOUNT].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTSUM]
WHERE [SARCOUNTSUM].[SUM_SARCINNI] = (SELECT MIN([SARCOUNTSUMD].[SUM_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],SUM([SARCOUNTD].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS
[SARCOUNTSUMD] );

Figura 3.2.1 – Rezultatul interogării

- Sa se afiseze proiectul cu cele mai multe


sarcini SELECT [SARCOUNTSUM].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],SUM([SARCOUNT].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTSUM]
WHERE [SARCOUNTSUM].[SUM_SARCINNI] = (SELECT MAX([SARCOUNTSUMD].[SUM_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],SUM([SARCOUNTD].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS
[SARCOUNTSUMD] );

27
Figura 3.2.2 – Rezultatul interogării

- Selecteaza proiectul cu cea mai mare suma medie de


sarcini SELECT [SARCOUNTAVG].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],AVG([SARCOUNT].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTAVG]
WHERE [SARCOUNTAVG].[AVG_SARCINNI] = (SELECT MAX([SARCOUNTAVGD].[AVG_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],AVG([SARCOUNTD].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS
[SARCOUNTAVGD] );

Figura 3.2.3 – Rezultatul interogării

3.3 Crearea interogărilor de grupare


- Sa se afiseze denumirea diviziunii si numarul de repetari a ei in diferite proiecte
carui identificator
- este mai mic sau egal ca 2 si numarul de repetari trebuie sa fie mai mic ca 2.
SELECT [Div].[Diviziune_Nume],COUNT([Div].[Proiect_Id]) FROM [Div]
WHERE [DiV].[Proiect_Id] <= 2
GROUP BY [Div].[Diviziune_Nume]

28
HAVING COUNT([Div].[Proiect_Id]) <= 2;

Figura 3.3.1 – Rezultatul interogării

- Selecteaza proiectul cu cea mai mica suma medie de


sarcini SELECT [SARCOUNTAVG].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],AVG([SARCOUNT].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
HAVING COUNT([Sar].[Sarcina_Id])<5
) AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTAVG]
WHERE [SARCOUNTAVG].[AVG_SARCINNI] = (SELECT MIN([SARCOUNTAVGD].[AVG_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],AVG([SARCOUNTD].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
HAVING COUNT([Sar].[Sarcina_Id])<5
) AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS
[SARCOUNTAVGD] );

Figura 3.3.2 – Rezultatul interogării

3.4 Subinterogări
- IN
- Sa se selecteze untilizatorii care au macar un proiect

29
SELECT * FROM [U]
WHERE [U].[Utilizator_Id] IN (SELECT [UP].[Utilizator_Id] FROM [UP])

Figura 3.4.1 – Rezultatul interogării

- ANY
- Din toate sarcinile existente in baza de date de afisat sarcinile care au proprietatea mai mare
- decit alta sarcina
SELECT * FROM [Sar]
WHERE [Sar].[Sarcina_Prioritatea]>ANY(SELECT [Sar].[Sarcina_Prioritatea] FROM [Sar])

Figura 3.4.2 – Rezultatul interogării

- ALL
- Sa se afiseze Diviziunea cu cele mai multe sarcini din toate proiectele
SELECT * FROM (
SELECT [Div].[Diviziune_Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]) AS [DI]
WHERE [DI].[NR_Sarcini] >= ALL (SELECT [DID].[NR_Sarcini] FROM
( SELECT [Div].[Diviziune_Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [DID]);

30
Figura 3.4.3 – Rezultatul interogării

- EXISTS
- Sa se prezinte care proiecte sunt
active SELECT * FROM [Pro] AS [P]
WHERE EXISTS (SELECT * FROM [UP] WHERE [UP].[Proiect_Id]=[P].[Proiect_Id]);

Figura 3.4.4 – Rezultatul interogării

3.5 Subinterogări în alte locuri decît în WHERE


- De comparat timpurile limita fiecarui proiect cu cel mai mare timpul limita a
proiectelor SELECT [Pro].*,(SELECT MAX([Pro].[Proiect_TimpLimit]) FROM [Pro]) FROM [Pro];

Figura 3.5.1 – Rezultatul interogării

- Sa se selecteze sarcinile din toate proiectele care au prioritatea mai mare decit 1 si mai
mic decit 3
SELECT * FROM
( SELECT * FROM [Sar]
31
WHERE [Sar].[Sarcina_Prioritatea]>1
) AS [Sa]
WHERE [Sa].[Sarcina_Prioritatea]<3;

Figura 3.5.2 – Rezultatul interogării

3.6 Crearea declanșatoarelor


GO
CREATE TRIGGER [TRIGGER_Utilizator]
ON [Utilizatori].[Utilizator]
FOR UPDATE
AS
IF UPDATE([Utilizator_Nume])
BEGIN
IF EXISTS (SELECT * FROM inserted WHERE LOWER([Utilizator_Nume]) = 'no name')
ROLLBACK;
END

GO
UPDATE [U]
SET [Utilizator_Nume] = 'NO NAME'
WHERE [Utilizator_Prenume] = 'Artiom';

GO
CREATE TRIGGER [TRIGGER_Utilizator_Delete]
ON [Proiecte].[Sarcina]
FOR DELETE
AS
IF OBJECT_ID('temodb..#table') IS NOT NULL
DROP TABLE #table;

SELECT * INTO #table FROM(


SELECT [Div].* FROM [Div] JOIN deleted
ON [Div].[Diviziune_Id] = deleted.[Diviziune_Id] AND deleted.[Sarcina_Prioritatea] =
3 ) AS [TABLE]

IF EXISTS (SELECT * FROM #table)


BEGIN
PRINT 'Nu se poate de sters sarcina data din
diviziune!' ROLLBACK
END
GO
DELETE FROM [Sar]
WHERE [Sar].[Sarcina_Prioritatea] = 3;

32
Figura 3.6.1 – Rezultatul scriptului T-SQL

Figura 3.6.2 – Rezultatul procesării

3.7 Crearea procedurilor stocate


- Sa se selecteze sarcinile din toate proiectele care au prioritatea mai mare decit 1 si mai
mic decit 3
IF OBJECT_ID('SARCINI_PRIORITATE','P') IS NOT
NULL DROP PROCEDURE [SARCINI_PRIORITATE];
GO
CREATE PROCEDURE [SARCINI_PRIORITATE]
@MIN INT = 1,
@MAX INT = 3
AS
SELECT * FROM
( SELECT * FROM [Sar]
WHERE [Sar].[Sarcina_Prioritatea]>@MIN )
AS [Sa]
WHERE [Sa].[Sarcina_Prioritatea]<@MAX;
GO

- De comparat timpurile limita fiecarui proiect cu cel mai mare timpul limita a proiectelor
IF OBJECT_ID('TIMPURILE_LIMITA','P') IS NOT NULL
DROP PROCEDURE [TIMPURILE_LIMITA];
GO
CREATE PROCEDURE [TIMPURILE_LIMITA]
AS
SELECT [Pro].*,(SELECT MAX([Pro].[Proiect_TimpLimit]) FROM [Pro]) FROM [Pro];
GO

- Sa se selecteze untilizatorii care au macar un


proiect IF OBJECT_ID('AU_PROIECT','P') IS NOT NULL
DROP PROCEDURE
[AU_PROIECT]; GO
CREATE PROCEDURE
[AU_PROIECT] AS
SELECT * FROM [U]
WHERE [U].[Utilizator_Id] IN (SELECT [UP].[Utilizator_Id] FROM [UP])
GO

- Din toate sarcinile existente in baza de date de afisat sarcinile care au proprietatea mai mare
33
-- decit alta sarcina
IF OBJECT_ID('CEA_MAI_MARE_PRIORITATE','P') IS NOT
NULL DROP PROCEDURE [CEA_MAI_MARE_PRIORITATE]; GO

CREATE PROCEDURE [CEA_MAI_MARE_PRIORITATE]


AS
SELECT * FROM [Sar]
WHERE [Sar].[Sarcina_Prioritatea]>ANY(SELECT [Sar].[Sarcina_Prioritatea] FROM [Sar])
GO

- Sa se afiseze Diviziunea cu cele mai multe sarcini din toate


proiectele IF OBJECT_ID('DIV_CU_CELE_MAI_MULTE_SARCINI','P') IS NOT NULL
DROP PROCEDURE
[DIV_CU_CELE_MAI_MULTE_SARCINI]; GO
CREATE PROCEDURE
[DIV_CU_CELE_MAI_MULTE_SARCINI] AS
SELECT * FROM (
SELECT [Div].[Diviziune_Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]) AS [DI]
WHERE [DI].[NR_Sarcini] >= ALL (SELECT [DID].[NR_Sarcini] FROM
( SELECT [Div].[Diviziune_Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [DID]);
GO

- Sa se prezinte care proiecte sunt active


IF OBJECT_ID('CARE_PROIECTE_SUNT_ACTIVE','P') IS NOT
NULL DROP PROCEDURE [CARE_PROIECTE_SUNT_ACTIVE]; GO

CREATE PROCEDURE [CARE_PROIECTE_SUNT_ACTIVE]


AS
SELECT * FROM [Pro] AS [P]
WHERE EXISTS (SELECT * FROM [UP] WHERE [UP].[Proiect_Id]=[P].[Proiect_Id]);
GO

- Sa se afiseze denumirea diviziunii si numarul de repetari a ei in diferite proiecte


carui identificator
- este mai mic sau egal ca 2 si numarul de repetari trebuie sa fie mai mic ca 2.
IF OBJECT_ID('DIV_PROCESARE','P') IS NOT NULL
DROP PROCEDURE [DIV_PROCESARE];
GO
CREATE PROCEDURE [DIV_PROCESARE]
AS
SELECT [Div].[Diviziune_Nume],COUNT([Div].[Proiect_Id]) FROM [Div]
WHERE [DiV].[Proiect_Id] <= 2
GROUP BY [Div].[Diviziune_Nume]
HAVING COUNT([Div].[Proiect_Id]) <= 2;
GO

- Selecteaza proiectul cu cea mai mica suma medie de


sarcini IF OBJECT_ID('PRO_CEA_MAI_MICA_SM','P') IS NOT NULL
DROP PROCEDURE [PRO_CEA_MAI_MICA_SM];
GO
CREATE PROCEDURE
[PRO_CEA_MAI_MICA_SM] AS
SELECT [SARCOUNTAVG].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],AVG([SARCOUNT].[NR_Sarcini]) AS [AVG_SARCINNI] FROM (

34
SELECT [Div].[Proiect _Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
HAVING COUNT([Sar].[Sarcina_Id])<5
) AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTAVG]
WHERE [SARCOUNTAVG].[AVG_SARCINNI] = (SELECT MIN([SARCOUNTAVGD].[AVG_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],AVG([SARCOUNTD].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
HAVING COUNT([Sar].[Sarcina_Id])<5
) AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTAVGD]
);
GO

-- Sa se afiseze proiectul cu cele mai putine sarcini


IF OBJECT_ID('PRO_CEA_MAI_PUTINE_SARCINI','P') IS NOT
NULL DROP PROCEDURE [PRO_CEA_MAI_PUTINE_SARCINI];
GO
CREATE PROCEDURE [PRO_CEA_MAI_PUTINE_SARCINI]
AS
SELECT [SARCOUNTSUM].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],SUM([SARCOUNT].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTSUM]
WHERE [SARCOUNTSUM].[SUM_SARCINNI] = (SELECT MIN([SARCOUNTSUMD].[SUM_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],SUM([SARCOUNTD].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect _Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini] FROM [Div]
JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTSUMD]
);
GO

-- Sa se afiseze proiectul cu cele mai multe sarcini


IF OBJECT_ID('PRO_CEA_MAI_MULTE_SARCINI','P') IS NOT NULL
DROP PROCEDURE [PRO_CEA_MAI_MULTE_SARCINI];
GO
CREATE PROCEDURE [PRO_CEA_MAI_MULTE_SARCINI]
AS
SELECT [SARCOUNTSUM].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],SUM([SARCOUNT].[NR_Sarcini]) AS [SUM_SARCINNI] FROM (
SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]

35
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTSUM]
WHERE [SARCOUNTSUM].[SUM_SARCINNI] = (SELECT MAX([SARCOUNTSUMD].[SUM_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],SUM([SARCOUNTD].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
) AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTSUMD]
);
GO

- Selecteaza proiectul cu cea mai mare suma medie de


sarcini IF OBJECT_ID('PRO_CEA_MAI_MARE_SM','P') IS NOT NULL
DROP PROCEDURE [PRO_CEA_MAI_MARE_SM];
GO
CREATE PROCEDURE
[PRO_CEA_MAI_MARE_SM] AS
SELECT [SARCOUNTAVG].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],AVG([SARCOUNT].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTAVG]
WHERE [SARCOUNTAVG].[AVG_SARCINNI] = (SELECT MAX([SARCOUNTAVGD].[AVG_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],AVG([SARCOUNTD].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS
[SARCOUNTAVGD] );
GO

- uniunea
- Sa se afiseza toate sarcinile proiectului sub denumirea Personal project.
IF OBJECT_ID('UNION','P') IS NOT NULL
DROP PROCEDURE [UNION];
GO
CREATE PROCEDURE [UNION]
AS
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] =
'TOATE SARCINILE')
UNION ALL
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'IN PROGRESS')
UNION ALL
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]

36
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'TERMINATE');
GO
- intersectie
- Sa se afiseze proiectele comune a utilizatorului Osipov Victor si Mihail
Urmanshi IF OBJECT_ID('INTERSECT','P') IS NOT NULL
DROP PROCEDURE
[INTERSECT]; GO
CREATE PROCEDURE
[INTERSECT] AS
SELECT * FROM [Pro]
WHERE [Pro].[Proiect_Id] = ( SELECT
[UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Osipov' AND [U].[Utilizator_Prenume] = 'Victor')

= 'Urmanschi' AND [U].[Utilizator_Prenume] = 'Mihail'));


GO
-- diferenta
-- Sa se afiseze identificatoarele proiectelor care apartin lui Osipov Victor si nu lui Vovc
Artiom IF OBJECT_ID('DIFFERENCE','P') IS NOT NULL
DROP PROCEDURE
[DIFFERENCE]; GO
CREATE PROCEDURE
[DIFFERENCE] AS
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Osipov' AND [U].[Utilizator_Prenume] = 'Victor')

= 'Vovc' AND [U].[Utilizator_Prenume] = 'Artiom');


GO
-- produsul cartezian
-- Sa se afiseze produsul cartezian al tuturor proiectelor si a tuturor utilizatorilor
IF OBJECT_ID('PRODUSCARTEZIAN','P') IS NOT
NULL DROP PROCEDURE [PRODUSCARTEZIAN];
GO
CREATE PROCEDURE
[PRODUSCARTEZIAN] AS
SELECT [U].*,[Pro].* FROM [Pro] CROSS JOIN
[U] ORDER BY [U].[Utilizator_Id] ASC;
GO
-- complimentul activ
-- Sa se afiseze complimentul activ al relatiei Diviziune
IF OBJECT_ID('COMPLIMENTACTIVE','P') IS NOT
NULL DROP PROCEDURE [COMPLIMENTACTIVE];
GO
CREATE PROCEDURE
[COMPLIMENTACTIVE] AS
SELECT * FROM (
(SELECT [Div].[Diviziune_Id] FROM [Div]) AS [DivId]
CROSS JOIN
(SELECT [Div].[Diviziune_Nume] FROM [Div]) AS [DivNume]
CROSS JOIN
(SELECT [Div].[Proiect_Id] FROM [Div]) AS [DivProiect])
EXCEPT
SELECT * FROM [Div];
GO

37
- teta jonctiune
- Sa se afiseze divizunea care are sarcina cu denumirea sa inceapa cu
Setarea IF OBJECT_ID('THETAJOIN','P') IS NOT NULL
DROP PROCEDURE
[THETAJOIN]; GO
CREATE PROCEDURE
[THETAJOIN] AS
SELECT * FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id] AND [Sar].[Sarcina_Nume] LIKE 'Setarea %';
GO
- jonctiune naturala
- Sa se afiseze proiectele si utilizatorii dezovoltate de fiecare utilizator
IF OBJECT_ID('[NATURALJOIN]','P') IS NOT NULL
DROP PROCEDURE [NATURALJOIN];
GO
CREATE PROCEDURE [NATURALJOIN]
AS
SELECT [UP].[Proiect_Id],[U].* FROM [UP] JOIN [U]
ON [UP].[Utilizator_Id] = [U].[Utilizator_Id];
GO
- jonctiunea externa
- jonctionea left join
- Sa se afiseze toate diviziunile si sarcinile prin left
join IF OBJECT_ID('LEFTJOIN','P') IS NOT NULL
DROP PROCEDURE
[LEFTJOIN]; GO
CREATE PROCEDURE
[LEFTJOIN] AS
SELECT * FROM [Div] LEFT OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id];
GO
- jonctionea right join
- Sa se afiseze toate diviziunile si sarcinile prin right
join IF OBJECT_ID('RIGHTJOIN','P') IS NOT NULL
DROP PROCEDURE
[RIGHTJOIN]; GO
CREATE PROCEDURE
[RIGHTJOIN] AS
SELECT * FROM [Div] RIGHT OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id];
GO
- jonctionea full join
- Sa se afiseze toate diviziunile si sarcinile prin full
join IF OBJECT_ID('FULLJOIN','P') IS NOT NULL
DROP PROCEDURE
[FULLJOIN]; GO
CREATE PROCEDURE
[FULLJOIN] AS
SELECT * FROM [Div] FULL OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id];
GO
- semijonctiunea
- Sa se reprezinte diviziunile care au cel putin o sarcina
IF OBJECT_ID('SEMIJONCTIUNEA','P') IS NOT NULL
DROP PROCEDURE [SEMIJONCTIUNEA];
GO
CREATE PROCEDURE [SEMIJONCTIUNEA]
AS
SELECT DISTINCT [Div].* FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id];
GO

38
- divizarea
- Sa se prezite divizarea fara pierderi pentru relatia Diviziuni IF
OBJECT_ID('DIVIZAREA_FARA_PIERDERI','P') IS NOT NULL
DROP PROCEDURE
[DIVIZAREA_FARA_PIERDERI]; GO
CREATE PROCEDURE
[DIVIZAREA_FARA_PIERDERI] AS
SELECT * FROM
(SELECT [Div].[Diviziune_Id],[Div].[Diviziune_Nume] FROM [Div]) AS
[D1] JOIN
(SELECT [Div].[Diviziune_Id],[Div].[Proiect_Id] FROM [Div]) AS
[D2] ON [D1].[Diviziune_Id] = [D2].[Diviziune_Id];
GO
- Sa se prezinte divizarea cu pierderi pentru relatia Diviziuni
IF OBJECT_ID('DIVIZAREA_CU_PIERDERI','P') IS NOT
NULL DROP PROCEDURE [DIVIZAREA_CU_PIERDERI]; GO

CREATE PROCEDURE [DIVIZAREA_CU_PIERDERI]


AS
SELECT * FROM
(SELECT [Div].[Proiect_Id],[Div].[Diviziune_Nume] FROM [Div]) AS
[D1] JOIN
(SELECT [Div].[Proiect_Id],[Div].[Diviziune_Id] FROM [Div]) AS
[D2] ON [D1].[Proiect_Id] = [D2].[Proiect_Id];
GO

EXEC [UNION];
EXEC [INTERSECT];
EXEC [DIFFERENCE];
EXEC [PRODUSCARTEZIAN];
EXEC [COMPLIMENTACTIVE];
EXEC [THETAJOIN];
EXEC [NATURALJOIN];
EXEC [LEFTJOIN];
EXEC [RIGHTJOIN];
EXEC [FULLJOIN];
EXEC [SEMIJONCTIUNEA];
EXEC [DIVIZAREA_FARA_PIERDERI];
EXEC [DIVIZAREA_CU_PIERDERI];
EXEC [SARCINI_PRIORITATE] @MIN = 1,@MAX = 3;
EXEC [TIMPURILE_LIMITA];
EXEC [AU_PROIECT];
EXEC [CEA_MAI_MARE_PRIORITATE];
EXEC [DIV_CU_CELE_MAI_MULTE_SARCINI];
EXEC [CARE_PROIECTE_SUNT_ACTIVE];
EXEC [DIV_PROCESARE];
EXEC [PRO_CEA_MAI_MICA_SM];
EXEC [PRO_CEA_MAI_PUTINE_SARCINI];
EXEC [PRO_CEA_MAI_MULTE_SARCINI];
EXEC [PRO_CEA_MAI_MARE_SM];

39
Figura 3.7.1 – Rezultatul scriptului T-SQL

40
Concluzii
O bază de date este un instrument pentru colectarea și organizarea informațiilor. Bazele de date pot
stoca informații despre persoane, produse, comenzi sau orice altceva. Multe baze de date încep sub formă de
liste într-un editor de text sau într-o foaie de calcul. Pe măsură ce lista crește, încep să apară redundanțe și
inconsistențe în datele prezente. Datele devin greu de înțeles în formă de listă, iar posibilitățile de a căuta și a
extrage subseturi de date pentru revizuire sunt limitate. Odată ce încep să apară aceste probleme, este o idee
bună să se transfere datele într-o bază de date creată de un sistem de gestionare al bazelor de date.
În acest proiect am analizat aplicația Kanboard care oferă posibilitatea de a organiza sarcinile pe care
le-am analizat în timp. Aceasta aplicatie kanboard permite să colaboram cu colegii din companie mai eficient.
Aceasta aplicatie folosește indirect principiul de „Divide et Impera” – divizează și stăpînește. Dacă avem un
proiect amplu și nu știm de la ce să ne apucam dar știm exact care sunt sarcinile în soluție ne poate veni
Kanboard-ul in ajutor. Aplicația dată în mare parte utilizează bază de date, ca exemplu o sarcină reprezintă în
sine o relație. În baza de date a aplicației Kanboard sunt patru relații de bază: Utilizator, Proiect, Diviziune,
Sarcina, ceea ce am reprezentat in aceasta lucrare.

41
Anexa A - Scriptul T-SQL bazei de date Kanborad
USE [master];
GO

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.1
___________________________________________________
-
____________________________________________________________________________________________________
___

IF DB_ID('Kanboard') IS NOT NULL


DROP DATABASE [Kanboard];

CREATE DATABASE [Kanboard]


ON
(
NAME = KanboardDB_data,
FILENAME = 'A:\WorkSpace\(BDC) laboratory\Proiect de
curs\KanboardDB\Kanboard.mdf', SIZE = 250MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 25MB
)
LOG ON
(
NAME = KanboardDB_log,
FILENAME = 'A:\WorkSpace\(BDC) laboratory\Proiect de
curs\KanboardDB\Kanboard.ldf', SIZE = 5MB,
FILEGROWTH = 5MB
);
GO
USE [Kanboard];
GO

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.2
___________________________________________________
-
____________________________________________________________________________________________________
___

-- UTLIZATOR
IF OBJECT_ID('Utilizator','U') IS NOT NULL
DROP TABLE [Utilizator];

CREATE TABLE [Utilizator] (


[Utilizator_Id] INT NOT NULL IDENTITY(1,1),
[Utilizator_Nume] VARCHAR(255),
[Utilizator_Prenume] VARCHAR(255),
[Utilizator_Login] VARCHAR(255) NOT NULL,
[Utilizator_Parola] VARCHAR(255) NOT NULL,
CONSTRAINT [CHECK_Utilizator_Id] CHECK([Utilizator_Id]>0),
CONSTRAINT [UNIQUE_Utilizator_Login]
UNIQUE([Utilizator_Login]), );

-- PROIECT

42
IF OBJECT_ID('Proiect','U') IS NOT NULL
DROP TABLE [Proiect];

CREATE TABLE [Proiect] (


[Proiect_Id] INT NOT NULL IDENTITY(1,1),
[Proiect_Nume] VARCHAR(255) NOT NULL CONSTRAINT [DEFAULT_PROIECTNUME] DEFAULT 'NO
NAME', [Proiect_Descriere] TEXT CONSTRAINT [DEFAULT_PROIECTDESCRIERE] DEFAULT NULL,
[Proiect_TimpLimit] DATETIME NOT NULL CONSTRAINT [DEFAULT_PROIECTTIMPLIMITA]
DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT [CHECK_Project_Id]
CHECK([Proiect_Id]>0), );

-- TABEL ADAUGATOR PENTRU CREAREA RELATIEI N LA N IF


OBJECT_ID('Utilizator_Proiect','U') IS NOT NULL
DROP TABLE [Utilizator_Proiect];

CREATE TABLE [Utilizator_Proiect] (


[Utilizator_Id] INT NOT NULL,
[Proiect_Id] INT NOT NULL,
);

-- DIVIZIUNE
IF OBJECT_ID('Diviziune','U') IS NOT NULL
DROP TABLE [Diviziune];

CREATE TABLE [Diviziune] (


[Diviziune_Id] INT NOT NULL IDENTITY(1,1),
[Diviziune_Nume] VARCHAR(255) NOT NULL,
[Proiect_Id] INT NOT NULL,
);

-- SARCINA
IF OBJECT_ID('Sarcina','U') IS NOT NULL
DROP TABLE [Sarcina];

CREATE TABLE [Sarcina] (


[Sarcina_Id] INT NOT NULL IDENTITY(1,1),
[Sarcina_Nume] VARCHAR(255) NOT NULL,
[Sarcina_Descriere] TEXT NOT NULL,
[Sarcina_Prioritatea] INT NOT NULL CONSTRAINT [DEFAULT_SARCINAPRIORITATEA] DEFAULT
1, [Diviziune_Id] INT NOT NULL,
);

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.4
___________________________________________________
-
____________________________________________________________________________________________________
___

ALTER TABLE [Utilizator]


ADD CONSTRAINT [K_UTILIZATORID] PRIMARY KEY([Utilizator_Id]);

ALTER TABLE [Proiect]


ADD CONSTRAINT [K_PROIECTID] PRIMARY KEY([Proiect_Id]);

ALTER TABLE [Utilizator_Proiect]


ADD CONSTRAINT [K_UTILIZATORIDPROIECTID] PRIMARY KEY([Utilizator_Id],[Proiect_Id]),

43
CONSTRAINT [FK_UTILIZATORID] FOREIGN KEY([Utilizator_Id])
REFERENCES [Utilizator]([Utilizator_Id]),
CONSTRAINT [FK_PROIECTID] FOREIGN KEY([Proiect_Id]) REFERENCES [Proiect]([Proiect_Id]);

ALTER TABLE [Diviziune]


ADD CONSTRAINT [K_DIVIZIUNEID] PRIMARY KEY([Diviziune_Id]),
CONSTRAINT [FK_DIVIZIUNEPROIECTID] FOREIGN KEY([Proiect_Id])
REFERENCES [Proiect]([Proiect_Id]);

ALTER TABLE [Sarcina]


ADD CONSTRAINT [K_SARCINAID] PRIMARY KEY([Sarcina_Id]),
CONSTRAINT [FK_SARCINADIVIZIUNEID] FOREIGN KEY([Diviziune_Id])
REFERENCES [Diviziune]([Diviziune_Id]);

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.5
___________________________________________________
-
____________________________________________________________________________________________________
___

- KANBOARD -> DATABASE DIAGRAMS

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.6
___________________________________________________
-
____________________________________________________________________________________________________
___

INSERT INTO [Utilizator]


([Utilizator_Nume],[Utilizator_Prenume],[Utilizator_Login],[Utilizator_Parola])
VALUES
('Vovc','Artiom','vovc.artiom@gmail.com','12345'),
('Osipov','Victor','osipov.victor@gmail.com','23423523'),
('Urmanschi','Mihail','urmanschi.mihail@gmail.com','SDF3234'),
('Turcanu','Simion','turcanu.simion@gmail.com','4T3R3453'),
('Saranciuc','Dorian','saranciuc.dorian@gmail.com','453FDG'),
('Postaru','Andrei','postaru.andrei@gmail.com','HHGGFBFB'),
('Manciu','Ion','manciu.ion@gmail.com','1234ARSF5'),
('Casciuc','Roman','casciuc.roman@gmail.com','SFQWEEEQWE'),
('Cotelea','Vitalie','cotelea.Vitalie@gmail.com','LDFFSEWREW'),
('John','Snow','john.snow@gmail.com','WINTERISCOMING');

INSERT INTO [Proiect] ([Proiect_Nume],[Proiect_Descriere],[Proiect_TimpLimit])


VALUES
(DEFAULT,DEFAULT,CURRENT_TIMESTAMP),
('Personal project',NULL,CURRENT_TIMESTAMP),
('Kanboard','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Note pad','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Jurnal','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Catalog','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Universitate','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
('Scoala','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP),
(DEFAULT,NULL,CURRENT_TIMESTAMP),
('Test','descrierea proiectului .... mult mult text',CURRENT_TIMESTAMP);

44
INSERT INTO Utilizator_Proiect (Utilizator_Id,Proiect_Id)
VALUES
(1,5),
(1,2),
(1,3),
(1,4),
(2,2),
(2,3),
(7,5),
(6,5),
(2,1),
(2,4),
(2,5),
(3,5),
(4,5);

INSERT INTO [Diviziune] ([Diviziune_Nume],[Proiect_Id])


VALUES
('IN PROGRESS',1),
('IN PROGRESS',2),
('IN PROGRESS',3),
('IN PROGRESS',4),
('IN PROGRESS',5),
('TOATE SARCINILE',1),
('TOATE SARCINILE',2),
('TOATE SARCINILE',3),
('TOATE SARCINILE',4),
('TOATE SARCINILE',5),
('TERMINATE',1),
('TERMINATE',2),
('TERMINATE',3),
('TERMINATE',4),
('TERMINATE',5);

INSERT INTO [Sarcina] ([Sarcina_Nume],[Sarcina_Descriere],[Sarcina_Prioritatea],


[Diviziune_Id]) VALUES
('Crearea cererilor','asdasdasdasdasd sdasd asda sd asdas das d',DEFAULT,2),
('Modificarea interfetei','asdasdasdasdasd sdasd asda sd asdas das d',3,2),
('Modificarea logicii','asdasdasdasdasd sdasd asda sd asdas das d',2,2),
('Setarea timpului','asdasdasdasdasd sdasd asda sd asdas das d',1,2), ('Lupta de
tron','asdasdasdasdasd sdasd asda sd asdas das d',3,2),
('Victorie','asdasdasdasdasd sdasd asda sd asdas das d',DEFAULT,7),
('Stiinta','asdasdasdasdasd sdasd asda sd asdas das d',DEFAULT,7), ('Setarea
datelor','asdasdasdasdasd sdasd asda sd asdas das d',1,7),
('Setarea constringerilor','asdasdasdasdasd sdasd asda sd asdas das
d',DEFAULT,7), ('Analiza sistemului','asdasdasdasdasd sdasd asda sd asdas das
d',2,12), ('Content gratis','asdasdasdasdasd sdasd asda sd asdas das
d',DEFAULT,12), ('Marirea eficientii','asdasdasdasdasd sdasd asda sd asdas das
d',DEFAULT,12), ('Tratarea erorilor','asdasdasdasdasd sdasd asda sd asdas das
d',DEFAULT,12), ('T1','T1',DEFAULT,1),
('T2','T2',DEFAULT,1);

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.7
___________________________________________________
-
____________________________________________________________________________________________________
___

45
IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE
SYS.schemas.name='Utilizatori') DROP SCHEMA [Utilizatori];
GO
CREATE SCHEMA [Utilizatori];
GO
ALTER SCHEMA [Utilizatori] TRANSFER [dbo].[Utilizator];
GO
IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE SYS.schemas.name='Proiecte')
DROP SCHEMA [Proiecte];
GO
CREATE SCHEMA [Proiecte];
GO
ALTER SCHEMA [Proiecte] TRANSFER [dbo].[Proiect];
ALTER SCHEMA [Proiecte] TRANSFER [dbo].[Diviziune];
ALTER SCHEMA [Proiecte] TRANSFER [dbo].[Sarcina];
GO
IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE
SYS.schemas.name='Relatii') DROP SCHEMA [Relatii];
GO
CREATE SCHEMA [Relatii];
GO
ALTER SCHEMA [Relatii] TRANSFER [dbo].[Utilizator_Proiect];
GO

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.8
___________________________________________________
-
____________________________________________________________________________________________________
___

IF EXISTS(SELECT * FROM [master].[dbo].[syslogins] WHERE [name]='LOGIN_First'


AND [dbname]='Kanboard')
DROP LOGIN [LOGIN_First];

CREATE LOGIN [LOGIN_First]


WITH PASSWORD = '1111', DEFAULT_DATABASE = [Kanboard];

IF EXISTS(SELECT * FROM [master].[dbo].[sysusers] WHERE [name]='USER_First')


DROP USER [USER_First];

CREATE USER [USER_First] FOR LOGIN [LOGIN_First]


WITH DEFAULT_SCHEMA = [Utilizatori];
EXEC SP_ADDSRVROLEMEMBER 'LOGIN_First','sysadmin';
EXEC SP_ADDROLEMEMBER 'db_datareader', 'USER_First';

IF EXISTS(SELECT * FROM [master].[dbo].[syslogins] WHERE [name]='LOGIN_Second'


AND [dbname]='Kanboard')
DROP LOGIN [LOGIN_Second];

CREATE LOGIN [LOGIN_Second]


WITH PASSWORD = '2222', DEFAULT_DATABASE = [Kanboard];

IF EXISTS(SELECT * FROM [master].[dbo].[sysusers] WHERE [name]='USER_Second')


DROP USER [USER_Second];

CREATE USER [USER_Second] FOR LOGIN [LOGIN_Second]


WITH DEFAULT_SCHEMA = [Proiecte];
EXEC SP_ADDSRVROLEMEMBER 'LOGIN_Second','sysadmin';

46
EXEC SP_ADDROLEMEMBER 'db_datawriter', 'USER_Second';

SELECT SUSER_NAME(),USER_NAME();
EXEC AS USER = 'USER_First';
SELECT SUSER_NAME(),USER_NAME();
INSERT INTO [Proiecte].[Sarcina]
([Sarcina_Nume],[Sarcina_Descriere],[Sarcina_Prioritatea],[Diviziune_Id])
VALUES
('TEST1','TEST1',DEFAULT,2);
SELECT * FROM [Utilizatori].[Utilizator];
REVERT;
EXEC AS USER = 'USER_Second';
SELECT SUSER_NAME(),USER_NAME();
INSERT INTO [Proiecte].[Sarcina]
([Sarcina_Nume],[Sarcina_Descriere],[Sarcina_Prioritatea],[Diviziune_Id])
VALUES
('TEST2','TEST2',DEFAULT,2);
SELECT * FROM [Proiecte].[Proiect];
REVERT;
SELECT SUSER_NAME(),USER_NAME();

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.9
___________________________________________________
-
____________________________________________________________________________________________________
___

IF OBJECT_ID('VIEW_First','V') IS NOT NULL


DROP VIEW [VIEW_First];

GO
CREATE VIEW [VIEW_First]
WITH SCHEMABINDING
AS
SELECT
[Relatii].[Utilizator_Proiect].[Utilizator_Id],
[Relatii].[Utilizator_Proiect].[Proiect_Id]
FROM [Relatii].[Utilizator_Proiect]
GO
DROP TABLE [Relatii].[Utilizator_Proiect];

IF OBJECT_ID('VIEW_Second','V') IS NOT NULL


DROP VIEW [VIEW_Second];

GO
CREATE VIEW [VIEW_Second]
AS
SELECT
[Proiecte].[Proiect].[Proiect_Nume],
[Proiecte].[Proiect].[Proiect_Descriere],
[Proiecte].[Proiect].[Proiect_TimpLimit]
FROM [Proiecte].[Proiect]
WHERE [Proiecte].[Proiect].[Proiect_Nume] LIKE 'NO%'
WITH CHECK OPTION
GO
UPDATE [VIEW_Second]
SET [VIEW_Second].[Proiect_Nume] = 'NU ESTE DENUMIRE'

47
WHERE [VIEW_Second].[Proiect_Nume] LIKE 'NO%';

--
____________________________________________________________________________________________________
___
- _______________________________________________ 2.10
__________________________________________________
-
____________________________________________________________________________________________________
___

IF OBJECT_ID('Div','SN') IS NOT NULL


DROP SYNONYM [DIV];
CREATE SYNONYM [Div] FOR [Kanboard].[Proiecte].[Diviziune];

IF OBJECT_ID('Pro','SN') IS NOT NULL


DROP SYNONYM [Pro];
CREATE SYNONYM [Pro] FOR [Kanboard].[Proiecte].[Proiect];

IF OBJECT_ID('Sar','SN') IS NOT NULL


DROP SYNONYM [Sar];
CREATE SYNONYM [Sar] FOR [Kanboard].[Proiecte].[Sarcina];

IF OBJECT_ID('UP','SN') IS NOT NULL


DROP SYNONYM [UP];
CREATE SYNONYM [UP] FOR [Kanboard].[Relatii].[Utilizator_Proiect];

IF OBJECT_ID('U','SN') IS NOT NULL


DROP SYNONYM [U];
CREATE SYNONYM [U] FOR [Kanboard].[Utilizatori].[Utilizator];

SELECT * FROM [U];

--
____________________________________________________________________________________________________
___
- _______________________________________________ END CAP 2
_____________________________________________
-
____________________________________________________________________________________________________
___

--
____________________________________________________________________________________________________
___
- _______________________________________________ 3.1
___________________________________________________
-
____________________________________________________________________________________________________
___

- uniunea
- Sa se afiseza toate sarcinile proiectului sub denumirea Personal project.
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'TOATE
SARCINILE') UNION ALL
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]

48
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'IN PROGRESS')
UNION ALL
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'TERMINATE');
- intersectie
- Sa se afiseze proiectele comune a utilizatorului Osipov Victor si Mihail
Urmanshi SELECT * FROM [Pro]
WHERE [Pro].[Proiect_Id] = ( SELECT
[UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Osipov' AND [U].[Utilizator_Prenume] = 'Victor')
INTERSECT
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Urmanschi' AND [U].[Utilizator_Prenume] = 'Mihail'));
- diferenta
- Sa se afiseze identificatoarele proiectelor care apartin lui Osipov Victor si nu lui Vovc
Artiom SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Osipov' AND [U].[Utilizator_Prenume] = 'Victor')
EXCEPT
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Vovc' AND [U].[Utilizator_Prenume] = 'Artiom');
- produsul cartezian
- Sa se afiseze produsul cartezian al tuturor proiectelor si a tuturor utilizatorilor

- complimentul activ
- Sa se afiseze complimentul activ al relatiei Diviziune
SELECT * FROM (
(SELECT [Div].[Diviziune_Id] FROM [Div]) AS [DivId]
CROSS JOIN
(SELECT [Div].[Diviziune_Nume] FROM [Div]) AS [DivNume]
CROSS JOIN
(SELECT [Div].[Proiect_Id] FROM [Div]) AS [DivProiect])
EXCEPT
SELECT * FROM [Div];
- teta jonctiune
- Sa se afiseze divizunea care are sarcina cu denumirea sa inceapa cu
Setarea SELECT * FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id] AND [Sar].[Sarcina_Nume] LIKE 'Setarea %'
- jonctiune naturala
- Sa se afiseze proiectele si utilizatorii dezovoltate de fiecare utilizator

- jonctiunea externa
- jonctionea left join
- Sa se afiseze toate diviziunile si sarcinile prin left
join SELECT * FROM [Div] LEFT OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id]
- jonctionea right join
- Sa se afiseze toate diviziunile si sarcinile prin right
join SELECT * FROM [Div] RIGHT OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id]
- jonctionea full join
- Sa se afiseze toate diviziunile si sarcinile prin full join
SELECT * FROM [Div] FULL OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id]

49
- semijonctiunea
- Sa se reprezinte diviziunile care au cel putin o
sarcina SELECT DISTINCT [Div].* FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id]
- divizarea
- Sa se prezite divizarea fara pierderi pentru relatia Diviziuni
SELECT * FROM
(SELECT [Div].[Diviziune_Id],[Div].[Diviziune_Nume] FROM [Div]) AS
[D1] JOIN
(SELECT [Div].[Diviziune_Id],[Div].[Proiect_Id] FROM [Div]) AS
[D2] ON [D1].[Diviziune_Id] = [D2].[Diviziune_Id];
- Sa se prezinte divizarea cu pierderi pentru relatia Diviziuni
SELECT * FROM
(SELECT [Div].[Proiect_Id],[Div].[Diviziune_Nume] FROM [Div]) AS [D1]
JOIN
(SELECT [Div].[Proiect_Id],[Div].[Diviziune_Id] FROM [Div]) AS [D2]
ON [D1].[Proiect_Id] = [D2].[Proiect_Id];

--
____________________________________________________________________________________________________
___
- _______________________________________________ 3.2
___________________________________________________
-
____________________________________________________________________________________________________
___

- Sa se afiseze proiectul cu cele mai putine sarcini


SELECT [SARCOUNTSUM].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],SUM([SARCOUNT].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
) AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTSUM]
WHERE [SARCOUNTSUM].[SUM_SARCINNI] = (SELECT MIN([SARCOUNTSUMD].[SUM_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],SUM([SARCOUNTD].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
) AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTSUMD]
);
- Sa se afiseze proiectul cu cele mai multe
sarcini SELECT [SARCOUNTSUM].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],SUM([SARCOUNT].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTSUM]
WHERE [SARCOUNTSUM].[SUM_SARCINNI] = (SELECT MAX([SARCOUNTSUMD].[SUM_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],SUM([SARCOUNTD].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]

50
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
) AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTSUMD]
);
- Selecteaza proiectul cu cea mai mare suma medie de
sarcini SELECT [SARCOUNTAVG].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],AVG([SARCOUNT].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTAVG]
WHERE [SARCOUNTAVG].[AVG_SARCINNI] = (SELECT MAX([SARCOUNTAVGD].[AVG_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],AVG([SARCOUNTD].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS
[SARCOUNTAVGD] );

--
____________________________________________________________________________________________________
___
- _______________________________________________ 3.3
___________________________________________________
-
____________________________________________________________________________________________________
___

- Sa se afiseze denumirea diviziunii si numarul de repetari a ei in diferite proiecte


carui identificator
- este mai mic sau egal ca 2 si numarul de repetari trebuie sa fie mai mic ca 2.
SELECT [Div].[Diviziune_Nume],COUNT([Div].[Proiect_Id]) FROM [Div]
WHERE [DiV].[Proiect_Id] <= 2
GROUP BY [Div].[Diviziune_Nume]
HAVING COUNT([Div].[Proiect_Id]) <= 2;

- Selecteaza proiectul cu cea mai mica suma medie de


sarcini SELECT [SARCOUNTAVG].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],AVG([SARCOUNT].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
HAVING COUNT([Sar].[Sarcina_Id])<5
) AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTAVG]
WHERE [SARCOUNTAVG].[AVG_SARCINNI] = (SELECT MIN([SARCOUNTAVGD].[AVG_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],AVG([SARCOUNTD].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]

51
HAVING COUNT([Sar].[Sarcina_Id])<5
) AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTAVGD]
);

--
____________________________________________________________________________________________________
___
- _______________________________________________ 3.4
___________________________________________________
-
____________________________________________________________________________________________________
___

- IN
- Sa se selecteze untilizatorii care au macar un proiect
SELECT * FROM [U]
WHERE [U].[Utilizator_Id] IN (SELECT [UP].[Utilizator_Id] FROM [UP])

- ANY
- Din toate sarcinile existente in baza de date de afisat sarcinile care au proprietatea mai mare
- decit alta sarcina
SELECT * FROM [Sar]
WHERE [Sar].[Sarcina_Prioritatea]>ANY(SELECT [Sar].[Sarcina_Prioritatea] FROM [Sar])

- ALL
- Sa se afiseze Diviziunea cu cele mai multe sarcini din toate proiectele
SELECT * FROM (
SELECT [Div].[Diviziune_Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]) AS [DI]
WHERE [DI].[NR_Sarcini] >= ALL (SELECT [DID].[NR_Sarcini] FROM
( SELECT [Div].[Diviziune_Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [DID]);

- EXISTS
- Sa se prezinte care proiecte sunt active
SELECT * FROM [Pro] AS [P]
WHERE EXISTS (SELECT * FROM [UP] WHERE [UP].[Proiect_Id]=[P].[Proiect_Id]);

--
____________________________________________________________________________________________________
___
- _______________________________________________ 3.5
___________________________________________________
-
____________________________________________________________________________________________________
___

- De comparat timpurile limita fiecarui proiect cu cel mai mare timpul limita a proiectelor
SELECT [Pro].*,(SELECT MAX([Pro].[Proiect_TimpLimit]) FROM [Pro]) FROM [Pro];

- Sa se selecteze sarcinile din toate proiectele care au prioritatea mai mare decit 1 si mai
mic decit 3
SELECT * FROM
( SELECT * FROM [Sar]

52
WHERE [Sar].[Sarcina_Prioritatea]>1
) AS [Sa]
WHERE [Sa].[Sarcina_Prioritatea]<3;

--
____________________________________________________________________________________________________
___
- _______________________________________________ 3.6
___________________________________________________
-
____________________________________________________________________________________________________
___

GO
CREATE TRIGGER [TRIGGER_Utilizator]
ON [Utilizatori].[Utilizator]
FOR UPDATE
AS
IF UPDATE([Utilizator_Nume])
BEGIN
IF EXISTS (SELECT * FROM inserted WHERE LOWER([Utilizator_Nume]) = 'no name')
ROLLBACK;
END

GO
UPDATE [U]
SET [Utilizator_Nume] = 'NO NAME'
WHERE [Utilizator_Prenume] = 'Artiom';

GO
CREATE TRIGGER [TRIGGER_Utilizator_Delete]
ON [Proiecte].[Sarcina]
FOR DELETE
AS
IF OBJECT_ID('temodb..#table') IS NOT NULL
DROP TABLE #table;

SELECT * INTO #table FROM(


SELECT [Div].* FROM [Div] JOIN deleted
ON [Div].[Diviziune_Id] = deleted.[Diviziune_Id] AND deleted.[Sarcina_Prioritatea] =
3 ) AS [TABLE]

IF EXISTS (SELECT * FROM #table)


BEGIN
PRINT 'Nu se poate de sters sarcina data din
diviziune!' ROLLBACK
END
GO
DELETE FROM [Sar]
WHERE [Sar].[Sarcina_Prioritatea] = 3;

--
____________________________________________________________________________________________________
___
- _______________________________________________ 3.7
___________________________________________________
-
____________________________________________________________________________________________________
___

53
- Sa se selecteze sarcinile din toate proiectele care au prioritatea mai mare decit 1 si mai
mic decit 3
IF OBJECT_ID('SARCINI_PRIORITATE','P') IS NOT
NULL DROP PROCEDURE [SARCINI_PRIORITATE];
GO
CREATE PROCEDURE [SARCINI_PRIORITATE]
@MIN INT = 1,
@MAX INT = 3
AS
SELECT * FROM
( SELECT * FROM [Sar]
WHERE [Sar].[Sarcina_Prioritatea]>@MIN )
AS [Sa]
WHERE [Sa].[Sarcina_Prioritatea]<@MAX;
GO

- De comparat timpurile limita fiecarui proiect cu cel mai mare timpul limita a proiectelor
IF OBJECT_ID('TIMPURILE_LIMITA','P') IS NOT NULL
DROP PROCEDURE [TIMPURILE_LIMITA];
GO
CREATE PROCEDURE [TIMPURILE_LIMITA]
AS
SELECT [Pro].*,(SELECT MAX([Pro].[Proiect_TimpLimit]) FROM [Pro]) FROM [Pro];
GO

- Sa se selecteze untilizatorii care au macar un


proiect IF OBJECT_ID('AU_PROIECT','P') IS NOT NULL
DROP PROCEDURE
[AU_PROIECT]; GO
CREATE PROCEDURE
[AU_PROIECT] AS
SELECT * FROM [U]
WHERE [U].[Utilizator_Id] IN (SELECT [UP].[Utilizator_Id] FROM [UP])
GO

- Din toate sarcinile existente in baza de date de afisat sarcinile care au proprietatea mai mare
- decit alta sarcina
IF OBJECT_ID('CEA_MAI_MARE_PRIORITATE','P') IS NOT
NULL DROP PROCEDURE [CEA_MAI_MARE_PRIORITATE]; GO

CREATE PROCEDURE [CEA_MAI_MARE_PRIORITATE]


AS
SELECT * FROM [Sar]
WHERE [Sar].[Sarcina_Prioritatea]>ANY(SELECT [Sar].[Sarcina_Prioritatea] FROM [Sar])
GO

- Sa se afiseze Diviziunea cu cele mai multe sarcini din toate


proiectele IF OBJECT_ID('DIV_CU_CELE_MAI_MULTE_SARCINI','P') IS NOT NULL
DROP PROCEDURE
[DIV_CU_CELE_MAI_MULTE_SARCINI]; GO
CREATE PROCEDURE
[DIV_CU_CELE_MAI_MULTE_SARCINI] AS
SELECT * FROM (
SELECT [Div].[Diviziune_Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]) AS [DI]
WHERE [DI].[NR_Sarcini] >= ALL (SELECT [DID].[NR_Sarcini] FROM
( SELECT [Div].[Diviziune_Id],COUNT([Sar].[Sarcina_Id]) AS
[NR_Sarcini] FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]

54
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [DID]);
GO

-- Sa se prezinte care proiecte sunt active


IF OBJECT_ID('CARE_PROIECTE_SUNT_ACTIVE','P') IS NOT
NULL DROP PROCEDURE [CARE_PROIECTE_SUNT_ACTIVE];
GO
CREATE PROCEDURE [CARE_PROIECTE_SUNT_ACTIVE]
AS
SELECT * FROM [Pro] AS [P]
WHERE EXISTS (SELECT * FROM [UP] WHERE [UP].[Proiect_Id]=[P].[Proiect_Id]);
GO

- Sa se afiseze denumirea diviziunii si numarul de repetari a ei in diferite proiecte


carui identificator
- este mai mic sau egal ca 2 si numarul de repetari trebuie sa fie mai mic ca 2.
IF OBJECT_ID('DIV_PROCESARE','P') IS NOT NULL
DROP PROCEDURE [DIV_PROCESARE];
GO
CREATE PROCEDURE [DIV_PROCESARE]
AS
SELECT [Div].[Diviziune_Nume],COUNT([Div].[Proiect_Id]) FROM
[Div] WHERE [DiV].[Proiect_Id] <= 2
GROUP BY [Div].[Diviziune_Nume]
HAVING COUNT([Div].[Proiect_Id]) <= 2;
GO

- Selecteaza proiectul cu cea mai mica suma medie de


sarcini IF OBJECT_ID('PRO_CEA_MAI_MICA_SM','P') IS NOT NULL
DROP PROCEDURE [PRO_CEA_MAI_MICA_SM];
GO
CREATE PROCEDURE
[PRO_CEA_MAI_MICA_SM] AS
SELECT [SARCOUNTAVG].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],AVG([SARCOUNT].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
HAVING COUNT([Sar].[Sarcina_Id])<5
) AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTAVG]
WHERE [SARCOUNTAVG].[AVG_SARCINNI] = (SELECT MIN([SARCOUNTAVGD].[AVG_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],AVG([SARCOUNTD].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
HAVING COUNT([Sar].[Sarcina_Id])<5
) AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS
[SARCOUNTAVGD] );
GO

- Sa se afiseze proiectul cu cele mai putine sarcini


IF OBJECT_ID('PRO_CEA_MAI_PUTINE_SARCINI','P') IS NOT
NULL DROP PROCEDURE [PRO_CEA_MAI_PUTINE_SARCINI]; GO

55
CREATE PROCEDURE [PRO_CEA_MAI_PUTINE_SARCINI]
AS
SELECT [SARCOUNTSUM].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],SUM([SARCOUNT].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTSUM]
WHERE [SARCOUNTSUM].[SUM_SARCINNI] = (SELECT MIN([SARCOUNTSUMD].[SUM_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],SUM([SARCOUNTD].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTSUMD]
);
GO

-- Sa se afiseze proiectul cu cele mai multe sarcini


IF OBJECT_ID('PRO_CEA_MAI_MULTE_SARCINI','P') IS NOT
NULL DROP PROCEDURE [PRO_CEA_MAI_MULTE_SARCINI]; GO

CREATE PROCEDURE [PRO_CEA_MAI_MULTE_SARCINI]


AS
SELECT [SARCOUNTSUM].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],SUM([SARCOUNT].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect _Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini] FROM [Div]
JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTSUM]
WHERE [SARCOUNTSUM].[SUM_SARCINNI] = (SELECT MAX([SARCOUNTSUMD].[SUM_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],SUM([SARCOUNTD].[NR_Sarcini]) AS [SUM_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id] )
AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTSUMD]
);
GO

- Selecteaza proiectul cu cea mai mare suma medie de


sarcini IF OBJECT_ID('PRO_CEA_MAI_MARE_SM','P') IS NOT NULL
DROP PROCEDURE [PRO_CEA_MAI_MARE_SM];
GO
CREATE PROCEDURE
[PRO_CEA_MAI_MARE_SM] AS
SELECT [SARCOUNTAVG].[Proiect_Id] FROM (
SELECT [SARCOUNT].[Proiect_Id],AVG([SARCOUNT].[NR_Sarcini]) AS [AVG_SARCINNI] FROM (
SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]

56
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
) AS [SARCOUNT]
GROUP BY [SARCOUNT].[Proiect_Id]
) AS [SARCOUNTAVG]
WHERE [SARCOUNTAVG].[AVG_SARCINNI] = (SELECT MAX([SARCOUNTAVGD].[AVG_SARCINNI]) FROM(
SELECT [SARCOUNTD].[Proiect_Id],AVG([SARCOUNTD].[NR_Sarcini]) AS [AVG_SARCINNI] FROM
( SELECT [Div].[Proiect_Id],COUNT([Sar].[Sarcina_Id]) AS [NR_Sarcini]
FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id] = [Sar].[Diviziune_Id]
GROUP BY [Div].[Diviziune_Id],[Div].[Proiect_Id]
) AS [SARCOUNTD]
GROUP BY [SARCOUNTD].[Proiect_Id]
) AS [SARCOUNTAVGD]
);
GO

- uniunea
- Sa se afiseza toate sarcinile proiectului sub denumirea Personal
project. IF OBJECT_ID('UNION','P') IS NOT NULL
DROP PROCEDURE
[UNION]; GO
CREATE PROCEDURE
[UNION] AS
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] =
'TOATE SARCINILE')
UNION ALL
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'IN PROGRESS')
UNION ALL
SELECT * FROM [Sar]
WHERE [Sar].[Diviziune_Id] IN (SELECT [Div].[Diviziune_Id] FROM [Div]
WHERE [Div].[Proiect_Id] IN (SELECT [Pro].[Proiect_Id] FROM [Pro]
WHERE [Pro].[Proiect_Nume] = 'Personal project')AND [Div].[Diviziune_Nume] = 'TERMINATE');
GO
- intersectie
- Sa se afiseze proiectele comune a utilizatorului Osipov Victor si Mihail Urmanshi
IF OBJECT_ID('INTERSECT','P') IS NOT NULL
DROP PROCEDURE [INTERSECT];
GO
CREATE PROCEDURE [INTERSECT]
AS
SELECT * FROM [Pro]
WHERE [Pro].[Proiect_Id] = (
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Osipov' AND [U].[Utilizator_Prenume] = 'Victor')
INTERSECT
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Urmanschi' AND [U].[Utilizator_Prenume] = 'Mihail'));

- diferenta
- Sa se afiseze identificatoarele proiectelor care apartin lui Osipov Victor si nu lui Vovc
Artiom IF OBJECT_ID('DIFFERENCE','P') IS NOT NULL
DROP PROCEDURE [DIFFERENCE];
GO

57
CREATE PROCEDURE [DIFFERENCE]
AS
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Osipov' AND [U].[Utilizator_Prenume] = 'Victor')
EXCEPT
SELECT [UP].[Proiect_Id] FROM [UP]
WHERE [UP].[Utilizator_Id] = (SELECT [U].[Utilizator_Id] FROM [U] WHERE [U].[Utilizator_Nume]
= 'Vovc' AND [U].[Utilizator_Prenume] = 'Artiom');

- produsul cartezian
- Sa se afiseze produsul cartezian al tuturor proiectelor si a tuturor utilizatorilor
IF OBJECT_ID('PRODUSCARTEZIAN','P') IS NOT
NULL DROP PROCEDURE [PRODUSCARTEZIAN];
GO
CREATE PROCEDURE
[PRODUSCARTEZIAN] AS
SELECT [U].*,[Pro].* FROM [Pro] CROSS JOIN
[U] ORDER BY [U].[Utilizator_Id] ASC;
GO
- complimentul activ
- Sa se afiseze complimentul activ al relatiei Diviziune
IF OBJECT_ID('COMPLIMENTACTIVE','P') IS NOT NULL
DROP PROCEDURE [COMPLIMENTACTIVE];
GO
CREATE PROCEDURE [COMPLIMENTACTIVE]
AS
SELECT * FROM (
(SELECT [Div].[Diviziune_Id] FROM [Div]) AS [DivId]
CROSS JOIN
(SELECT [Div].[Diviziune_Nume] FROM [Div]) AS [DivNume]
CROSS JOIN
(SELECT [Div].[Proiect_Id] FROM [Div]) AS [DivProiect])
EXCEPT
SELECT * FROM [Div];
GO
- teta jonctiune
- Sa se afiseze divizunea care are sarcina cu denumirea sa inceapa cu
Setarea IF OBJECT_ID('THETAJOIN','P') IS NOT NULL
DROP PROCEDURE
[THETAJOIN]; GO
CREATE PROCEDURE
[THETAJOIN] AS
SELECT * FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id] AND [Sar].[Sarcina_Nume] LIKE 'Setarea %';
GO
- jonctiune naturala
- Sa se afiseze proiectele si utilizatorii dezovoltate de fiecare utilizator
IF OBJECT_ID('[NATURALJOIN]','P') IS NOT NULL
DROP PROCEDURE [NATURALJOIN];
GO
CREATE PROCEDURE [NATURALJOIN]
AS
SELECT [UP].[Proiect_Id],[U].* FROM [UP] JOIN [U]
ON [UP].[Utilizator_Id] = [U].[Utilizator_Id];
GO
- jonctiunea externa
- jonctionea left join
- Sa se afiseze toate diviziunile si sarcinile prin left
join IF OBJECT_ID('LEFTJOIN','P') IS NOT NULL
DROP PROCEDURE [LEFTJOIN];

58
GO
CREATE PROCEDURE [LEFTJOIN]
AS
SELECT * FROM [Div] LEFT OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id];
GO
- jonctionea right join
- Sa se afiseze toate diviziunile si sarcinile prin right
join IF OBJECT_ID('RIGHTJOIN','P') IS NOT NULL
DROP PROCEDURE
[RIGHTJOIN]; GO
CREATE PROCEDURE
[RIGHTJOIN] AS
SELECT * FROM [Div] RIGHT OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id];
GO
- jonctionea full join
- Sa se afiseze toate diviziunile si sarcinile prin full
join IF OBJECT_ID('FULLJOIN','P') IS NOT NULL
DROP PROCEDURE
[FULLJOIN]; GO
CREATE PROCEDURE
[FULLJOIN] AS
SELECT * FROM [Div] FULL OUTER JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id];
GO
- semijonctiunea
- Sa se reprezinte diviziunile care au cel putin o sarcina
IF OBJECT_ID('SEMIJONCTIUNEA','P') IS NOT NULL
DROP PROCEDURE [SEMIJONCTIUNEA];
GO
CREATE PROCEDURE [SEMIJONCTIUNEA]
AS
SELECT DISTINCT [Div].* FROM [Div] JOIN [Sar]
ON [Div].[Diviziune_Id]=[Sar].[Diviziune_Id];
GO
- divizarea
- Sa se prezite divizarea fara pierderi pentru relatia Diviziuni IF
OBJECT_ID('DIVIZAREA_FARA_PIERDERI','P') IS NOT NULL
DROP PROCEDURE
[DIVIZAREA_FARA_PIERDERI]; GO
CREATE PROCEDURE
[DIVIZAREA_FARA_PIERDERI] AS
SELECT * FROM
(SELECT [Div].[Diviziune_Id],[Div].[Diviziune_Nume] FROM [Div]) AS
[D1] JOIN
(SELECT [Div].[Diviziune_Id],[Div].[Proiect_Id] FROM [Div]) AS
[D2] ON [D1].[Diviziune_Id] = [D2].[Diviziune_Id];
GO
- Sa se prezinte divizarea cu pierderi pentru relatia Diviziuni
IF OBJECT_ID('DIVIZAREA_CU_PIERDERI','P') IS NOT
NULL DROP PROCEDURE [DIVIZAREA_CU_PIERDERI]; GO

CREATE PROCEDURE [DIVIZAREA_CU_PIERDERI]


AS
SELECT * FROM
(SELECT [Div].[Proiect_Id],[Div].[Diviziune_Nume] FROM [Div]) AS
[D1] JOIN
(SELECT [Div].[Proiect_Id],[Div].[Diviziune_Id] FROM [Div]) AS
[D2] ON [D1].[Proiect_Id] = [D2].[Proiect_Id];
GO

59
EXEC [UNION];
EXEC [INTERSECT];
EXEC [DIFFERENCE];
EXEC [PRODUSCARTEZIAN];
EXEC [COMPLIMENTACTIVE];
EXEC [THETAJOIN];
EXEC [NATURALJOIN];
EXEC [LEFTJOIN];
EXEC [RIGHTJOIN];
EXEC [FULLJOIN];
EXEC [SEMIJONCTIUNEA];
EXEC [DIVIZAREA_FARA_PIERDERI];
EXEC [DIVIZAREA_CU_PIERDERI];
EXEC [SARCINI_PRIORITATE] @MIN = 1,@MAX = 3;
EXEC [TIMPURILE_LIMITA];
EXEC [AU_PROIECT];
EXEC [CEA_MAI_MARE_PRIORITATE];
EXEC [DIV_CU_CELE_MAI_MULTE_SARCINI];
EXEC [CARE_PROIECTE_SUNT_ACTIVE];
EXEC [DIV_PROCESARE];
EXEC [PRO_CEA_MAI_MICA_SM];
EXEC [PRO_CEA_MAI_PUTINE_SARCINI];
EXEC [PRO_CEA_MAI_MULTE_SARCINI];
EXEC [PRO_CEA_MAI_MARE_SM];

60

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

  • PSI Lab 3
    PSI Lab 3
    Document10 pagini
    PSI Lab 3
    Nicolae
    Încă nu există evaluări
  • Lab 4 TMPS BridgePattern
    Lab 4 TMPS BridgePattern
    Document4 pagini
    Lab 4 TMPS BridgePattern
    Guzun Ion
    Încă nu există evaluări
  • Amoo 7
    Amoo 7
    Document4 pagini
    Amoo 7
    AlionaCrigan
    Încă nu există evaluări
  • PAM
    PAM
    Document3 pagini
    PAM
    nicu zuza
    Încă nu există evaluări
  • TAP Lab5 Popov Biatrice CR 191
    TAP Lab5 Popov Biatrice CR 191
    Document6 pagini
    TAP Lab5 Popov Biatrice CR 191
    Alina Axenti
    Încă nu există evaluări
  • Teoria Sistemelor Nr2
    Teoria Sistemelor Nr2
    Document10 pagini
    Teoria Sistemelor Nr2
    liveplayer
    Încă nu există evaluări
  • LL4 BD
    LL4 BD
    Document6 pagini
    LL4 BD
    Anya Mr
    Încă nu există evaluări
  • Examen PW
    Examen PW
    Document71 pagini
    Examen PW
    DorinRotaru
    Încă nu există evaluări
  • LL3 (Amoo)
    LL3 (Amoo)
    Document6 pagini
    LL3 (Amoo)
    Eric Semeniuc
    Încă nu există evaluări
  • Programarea in Retea Lab 3 Iepuras Daniel TI-171
    Programarea in Retea Lab 3 Iepuras Daniel TI-171
    Document8 pagini
    Programarea in Retea Lab 3 Iepuras Daniel TI-171
    DanuIepuras
    Încă nu există evaluări
  • PSLab 3
    PSLab 3
    Document14 pagini
    PSLab 3
    Victor Turculet
    Încă nu există evaluări
  • Lab2 La Programare in Windows
    Lab2 La Programare in Windows
    Document12 pagini
    Lab2 La Programare in Windows
    Andrei Barbalat
    Încă nu există evaluări
  • TAP Lab2
    TAP Lab2
    Document4 pagini
    TAP Lab2
    Adrian Bodorin
    Încă nu există evaluări
  • Examen TIDPP
    Examen TIDPP
    Document3 pagini
    Examen TIDPP
    Rosca Doinita
    Încă nu există evaluări
  • Raport 6
    Raport 6
    Document3 pagini
    Raport 6
    Dekionlolz В
    Încă nu există evaluări
  • Lab 1 GC
    Lab 1 GC
    Document4 pagini
    Lab 1 GC
    Ion Popescu
    Încă nu există evaluări
  • Lab 3 LFA
    Lab 3 LFA
    Document3 pagini
    Lab 3 LFA
    Fil Gorea
    Încă nu există evaluări
  • LL7 Baze de Date
    LL7 Baze de Date
    Document5 pagini
    LL7 Baze de Date
    Anya Mr
    Încă nu există evaluări
  • Lucrare de Laborator Nr1 SDA Ciobanu Cristina TI-194
    Lucrare de Laborator Nr1 SDA Ciobanu Cristina TI-194
    Document14 pagini
    Lucrare de Laborator Nr1 SDA Ciobanu Cristina TI-194
    David Turner
    Încă nu există evaluări
  • Somipp Linux 1 UTM
    Somipp Linux 1 UTM
    Document10 pagini
    Somipp Linux 1 UTM
    Cristi Poselețchi
    Încă nu există evaluări
  • TAP Lab6 Popov Biatrice - CR 191
    TAP Lab6 Popov Biatrice - CR 191
    Document6 pagini
    TAP Lab6 Popov Biatrice - CR 191
    Alina Axenti
    Încă nu există evaluări
  • Lab7 AMOO
    Lab7 AMOO
    Document11 pagini
    Lab7 AMOO
    Сергей Борта
    Încă nu există evaluări
  • Lab 1 BD
    Lab 1 BD
    Document7 pagini
    Lab 1 BD
    Augusta Bucataru
    Încă nu există evaluări
  • A1
    A1
    Document11 pagini
    A1
    Amarfii Sergiu
    Încă nu există evaluări
  • Lucrare de Laborator nr.4 Florea Cristina
    Lucrare de Laborator nr.4 Florea Cristina
    Document9 pagini
    Lucrare de Laborator nr.4 Florea Cristina
    Cristina Florea
    Încă nu există evaluări
  • Laboratorul 5
    Laboratorul 5
    Document7 pagini
    Laboratorul 5
    ion
    Încă nu există evaluări
  • Iepuras Daniel LAB 3 TS
    Iepuras Daniel LAB 3 TS
    Document8 pagini
    Iepuras Daniel LAB 3 TS
    DanuIepuras
    Încă nu există evaluări
  • Vasilachi Igor Lab 5 BDC v1
    Vasilachi Igor Lab 5 BDC v1
    Document8 pagini
    Vasilachi Igor Lab 5 BDC v1
    Fil Gorea
    Încă nu există evaluări
  • Grafica Pe Calculator Lab 1 Java
    Grafica Pe Calculator Lab 1 Java
    Document4 pagini
    Grafica Pe Calculator Lab 1 Java
    Calc 182
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document6 pagini
    Lab 1
    Ion Popescu
    Încă nu există evaluări
  • TW Atestare
    TW Atestare
    Document4 pagini
    TW Atestare
    yamahahohnerc70
    Încă nu există evaluări
  • SOMIPP Lab1
    SOMIPP Lab1
    Document6 pagini
    SOMIPP Lab1
    violina
    Încă nu există evaluări
  • LL2 Baze de Date
    LL2 Baze de Date
    Document15 pagini
    LL2 Baze de Date
    Anya Mr
    Încă nu există evaluări
  • Proiect de Curs BDC
    Proiect de Curs BDC
    Document27 pagini
    Proiect de Curs BDC
    Ion Boika
    Încă nu există evaluări
  • Examen IOC Chirtoacă Maxim
    Examen IOC Chirtoacă Maxim
    Document3 pagini
    Examen IOC Chirtoacă Maxim
    Maxim Chirtoacă
    Încă nu există evaluări
  • Laborator 3
    Laborator 3
    Document17 pagini
    Laborator 3
    DorelDjj
    Încă nu există evaluări
  • SOMIPP Labs
    SOMIPP Labs
    Document107 pagini
    SOMIPP Labs
    Ionel Boaghe
    Încă nu există evaluări
  • Lab2 TMPS
    Lab2 TMPS
    Document4 pagini
    Lab2 TMPS
    Ion Cornea
    Încă nu există evaluări
  • Lucrare de Curs LFPC
    Lucrare de Curs LFPC
    Document17 pagini
    Lucrare de Curs LFPC
    mikeylino
    Încă nu există evaluări
  • Laborator 1 Cucu Eugeniu
    Laborator 1 Cucu Eugeniu
    Document5 pagini
    Laborator 1 Cucu Eugeniu
    Cucu Eugen
    Încă nu există evaluări
  • Lab 1 SDA Var 10
    Lab 1 SDA Var 10
    Document6 pagini
    Lab 1 SDA Var 10
    Vladimir Zgardan
    Încă nu există evaluări
  • Baze de Data Lab4
    Baze de Data Lab4
    Document2 pagini
    Baze de Data Lab4
    DanuIepuras
    0% (1)
  • PS TS
    PS TS
    Document14 pagini
    PS TS
    Victor Turculet
    Încă nu există evaluări
  • AI-191 Medinschi Ion SO4
    AI-191 Medinschi Ion SO4
    Document5 pagini
    AI-191 Medinschi Ion SO4
    Carolin
    Încă nu există evaluări
  • Lab1 La Programare in Windows
    Lab1 La Programare in Windows
    Document4 pagini
    Lab1 La Programare in Windows
    Micael Coye
    Încă nu există evaluări
  • AMOO Lab3
    AMOO Lab3
    Document6 pagini
    AMOO Lab3
    sergiu
    Încă nu există evaluări
  • AMOO3 Morcotilo Nichita FINAL
    AMOO3 Morcotilo Nichita FINAL
    Document11 pagini
    AMOO3 Morcotilo Nichita FINAL
    Никита Мк.
    Încă nu există evaluări
  • Lab 2 BD
    Lab 2 BD
    Document19 pagini
    Lab 2 BD
    Augusta Bucataru
    Încă nu există evaluări
  • Raspunsuri AMSI
    Raspunsuri AMSI
    Document11 pagini
    Raspunsuri AMSI
    Cristina Florea
    Încă nu există evaluări
  • Capitolul II Limbajul UML
    Capitolul II Limbajul UML
    Document34 pagini
    Capitolul II Limbajul UML
    torjocf
    Încă nu există evaluări
  • LL1 Baze de Date
    LL1 Baze de Date
    Document10 pagini
    LL1 Baze de Date
    Anya Mr
    Încă nu există evaluări
  • BDC Lab1
    BDC Lab1
    Document11 pagini
    BDC Lab1
    Radu Madiudin
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document6 pagini
    Lab 4
    violina
    Încă nu există evaluări
  • TW Lab 6
    TW Lab 6
    Document6 pagini
    TW Lab 6
    DanuIepuras
    Încă nu există evaluări
  • Despre UML
    Despre UML
    Document51 pagini
    Despre UML
    Danu Botnari
    Încă nu există evaluări
  • Raport Abonamente
    Raport Abonamente
    Document26 pagini
    Raport Abonamente
    Andrea Tonu
    Încă nu există evaluări
  • Graf 1
    Graf 1
    Document49 pagini
    Graf 1
    Diana Nicoleta Penghiş
    Încă nu există evaluări
  • Programare Orientata Pe Obiecte I
    Programare Orientata Pe Obiecte I
    Document111 pagini
    Programare Orientata Pe Obiecte I
    VFeri
    100% (1)
  • Material Studiu ID
    Material Studiu ID
    Document31 pagini
    Material Studiu ID
    AndreeaPopescu
    Încă nu există evaluări
  • Paradigma Programarii Orientate Pe Obiect
    Paradigma Programarii Orientate Pe Obiect
    Document9 pagini
    Paradigma Programarii Orientate Pe Obiect
    Cosmin Cristea
    Încă nu există evaluări
  • SarcinaLaborator 2
    SarcinaLaborator 2
    Document2 pagini
    SarcinaLaborator 2
    Amarfii Sergiu
    Încă nu există evaluări
  • SarcinaLaborator 1
    SarcinaLaborator 1
    Document1 pagină
    SarcinaLaborator 1
    Amarfii Sergiu
    Încă nu există evaluări
  • Tornado Instructiune
    Tornado Instructiune
    Document20 pagini
    Tornado Instructiune
    Amarfii Sergiu
    Încă nu există evaluări
  • IndrumarLLab PSI RO V 31 08 2020
    IndrumarLLab PSI RO V 31 08 2020
    Document105 pagini
    IndrumarLLab PSI RO V 31 08 2020
    Dorin Osipov
    Încă nu există evaluări
  • A1
    A1
    Document11 pagini
    A1
    Amarfii Sergiu
    Încă nu există evaluări
  • PS Indrumar Fiod
    PS Indrumar Fiod
    Document55 pagini
    PS Indrumar Fiod
    Amarfii Sergiu
    Încă nu există evaluări
  • Lista Subiecte Examen FR
    Lista Subiecte Examen FR
    Document2 pagini
    Lista Subiecte Examen FR
    Amarfii Sergiu
    Încă nu există evaluări
  • PS Indrumar Fiod PDF
    PS Indrumar Fiod PDF
    Document106 pagini
    PS Indrumar Fiod PDF
    Amarfii Sergiu
    Încă nu există evaluări
  • Curs 7
    Curs 7
    Document9 pagini
    Curs 7
    Tibi Dascalu
    Încă nu există evaluări
  • Autoîncărcarea Obiectelor
    Autoîncărcarea Obiectelor
    Document4 pagini
    Autoîncărcarea Obiectelor
    Amarfii Sergiu
    Încă nu există evaluări
  • Intreb Part1
    Intreb Part1
    Document7 pagini
    Intreb Part1
    Amarfii Sergiu
    Încă nu există evaluări
  • Schema Principala Dieta Rina
    Schema Principala Dieta Rina
    Document1 pagină
    Schema Principala Dieta Rina
    Celatuchiac
    100% (2)
  • Boli Profesionale
    Boli Profesionale
    Document22 pagini
    Boli Profesionale
    Nicoleta Leca
    Încă nu există evaluări
  • Chestionar Pentru Examen
    Chestionar Pentru Examen
    Document4 pagini
    Chestionar Pentru Examen
    Amarfii Sergiu
    Încă nu există evaluări
  • 42018mod15sesiunea 2olarud3666
    42018mod15sesiunea 2olarud3666
    Document158 pagini
    42018mod15sesiunea 2olarud3666
    Amarfii Sergiu
    Încă nu există evaluări
  • Plante Pe Cale de Disparitie
    Plante Pe Cale de Disparitie
    Document15 pagini
    Plante Pe Cale de Disparitie
    Alina Draghia
    Încă nu există evaluări
  • Ticket
    Ticket
    Document1 pagină
    Ticket
    Amarfii Sergiu
    Încă nu există evaluări
  • XII - Limba Si Literatura Romana
    XII - Limba Si Literatura Romana
    Document310 pagini
    XII - Limba Si Literatura Romana
    DragoşStrăinu
    Încă nu există evaluări