Sunteți pe pagina 1din 11

GESTIUNEA PROIECTELOR

O instituţie de învăţământ superior desfăşoară activitatea de cercetare pe bază de proiecte.


Fiecare proiect are un director de proiect şi o echipă de realizare. O persoană poate fi director
de proiect în mai multe proiecte şi în acelaşi timp membru în echipele altor proiecte. Proiectele
pot fi finanţate din surse interne (la nivel naţional) sau din surse externe (proiecte cu finanţare
de la Uniunea Europeană). Astfel, atributul tip din relaţia (tabela) PROIECT dă tipul proiectului:
tip = 1 pentru proiectele cu finanţare internă,
tip = 2 pentru proiectele cu finanţare externă.
Atributul denumire din relaţia (tabela) FUNCTIA are valorile: profesor / conferenţiar / lector /
asistent / cercetător I / cercetător II / cercetător III.

Aplicaţia gestiunea proiectelor se realizează cu ajutorul următoarelor relaţii (tabele), populate


pentru exemplificare:

PROIECT [cod_proiect, titlul, tip, valoare, cod_director, data_inceput, data_finala]

cod_proiect titlul tip valoare cod_director data_inceput data_finala


P234 Titlul 1 1 10000 11 12.05.2013 12.05.2016
P235 Titlul 2 2 25000 11 01.06.2014 01.06.2016
P300 Titlul 3 2 15000 15 01.12.2015 01.12.2017
P305 Titlul 4 1 18000 12 15.04.2013 14.03.2016
P399 Titlul 5 2 30000 17 20.08.2016 30.06.2018
Tabela PROIECT

Cheia primară este (cod_proiect). Atributul cod_director conţine marca (sau ID_angajat)
persoanei responsabile cu gestiunea proiectului.

FUNCTIA [cod_functie, denumire]

cod_functie denumire
cd1 profesor
cd2 conferentiar
cd3 lector
cd4 asistent
cs1 cercetator I
cs2 cercetator II
cs3 cercetator III
Tabela FUNCTIA

Cheia primară este (cod_functie).

1
ECHIPA [cod_proiect, marca]
cod_proiect marca
P234 11
P234 12
P234 15
P234 22
P234 21
P235 11
P235 12
P235 13
P300 15
P300 21
P300 22
P300 14
P305 12
P305 17
P399 17
P399 16
P399 19
Tabela ECHIPA
Cheia primară este (cod_proiect, marca).

PERSONAL [marca, nume, CNP, cod_functie, tel, email]

marca nume CNP cod_functie tel mail


11 Popescu Andrei 15809 cd1 07242 pa@x.ro
12 Ionescu Radu 16308 cd3 07253 ir@z.ro
13 Petre Ion 15004 cd1 07444 pi@y.ro
14 Anton Vlad 17007 cd2 07266 av@x.ro
15 Cristea Valeria 27003 cd3 07281 cv@y.ro
16 Bondescu Dan 16810 cs2 07225 bd@x.ro
17 Munteanu Dana 27311 cs1 07244 md@x.ro
18 Rosu Ana 26107 cd2 07313 ra@z.ro
19 Cretu Marian 15303 cd1 07322 cm@z.ro
20 Popescu Valentin 16910 cs1 07267 pv@x.ro
21 Pop Gheorghe 18512 cd4 07285 pg@y.ro
22 Lungescu Razvan 16502 cs3 07451 lr@y.ro
Tabela PERSONAL

Cheia primară este ( marca).

2
Schema legăturilor dintre tabelele bazei de date
Observaţii.
 Atributul cod_functie din tabela PERSONAL este o cheie externă şi asigură legătura cu
tabela FUNCTIA.
 Atributul cod_director din tabela PROIECT este o cheie externă şi asigură legătura cu
tabela PERSONAL.

Pentru interogările formulate se vor prezenta rezolvările utilizând operaţiile algebrei relaţionale
şi limbajul SQL din Microsoft Access.

P1. Care sunt directorii proiectelor în derulare ?

Lista: | cod_proiect | titlul | nume director |


Data curentă este 03.01.2017.

Algebră relaţională

R1 = SELECT (PROIECT; data curenta < data_finala)


R2 = EQUI-JOIN (R1, PERSONAL; cod_director = marca)
R3 = PROJECT (R2; cod_proiect, titlul, nume)

3
Explicaţii
Relaţia R1 va conţine două tupluri selectate din relaţia PROIECT şi anume linia 3 şi linia 5 care
îndeplinesc condiţia de selecţie (proiectele sunt în derulare):
data curenta < data_finala.
Relaţia R2, rezultă în urma aplicării joncţiunii pe egalitate relaţiilor R1 şi PERSONAL.
Relaţia R2 are următoarea schemă:
[cod_proiect, titlul, tip, valoare, cod_director, data_inceput, data_finala, marca, nume, CNP,
cod_functie, tel, email].
Relaţia R2 are gradul 13 rezultat din suma gradelor relaţiilor: R1(PROIECT) care are gradul 7 cu
PERSONAL care are gradul 6.
În final, prin proiecţia relaţiei R2 pe atributele: cod_proiect, titlul, nume se obţine lista cerută:
directorii proiectelor în derulare.

SQL Access
SELECT cod_proiect, titlu, nume
FROM proiect, personal
WHERE DATE()<data_finala
AND
marca=cod_director;

Lista rezultat pentru P1 (SQL Access)

P2. Lista colectivului proiectului cu codul ‘P234’.

Lista: | marca | nume | CNP |

Algebră relaţională

R1 = SELECT (ECHIPA; cod_proiect = ‘P234’)


R2 = NATURAL JOIN (R1, PERSONAL; marca)
R3 = PROJECT (R2; marca, nume, CNP)

SQL Access
SELECT echipa.marca, nume, cnp
FROM echipa, personal
WHERE echipa.marca=personal.marca
AND
echipa.cod_proiect="P234";

4
Lista rezultat pentru P2 (SQL Access)

P3. Care este valoarea totală a proiectelor finalizate în anul 2016, pe tipuri de finanţare?

Algebră relaţională
Varianta 1
R1 = SELECT (PROIECT; (data_finala ≥ 01.01.2016) and (data_finala ≤ 31.12.2016))
R2 = SELECT (R1; tip = 1)
R3 = SUM (R2, valoare)
Q1 = SELECT (PROIECT; (data_finala ≥ 01.01.2016) and (data_finala ≤ 31.12.2016))
Q2 = SELECT (Q1; tip = 2)
Q3 = SUM (Q2, valoare)

Varianta 2
R1 = SELECT (PROIECT; (data_finala ≥ 01.01.2016) and (data_finala ≤ 31.12.2016))
R2 = SUM (R1, valoare; tip)

Observatie.
Varianta 2 calculează direct valoarea totală a proiectelor finalizate în 2016 pentru fiecare
valoare a atributului de regrupare tip. Relaţia R2 are două atribute: valoare şi tip şi două tupluri
(linii în tabelă), corespunzând celor două tipuri de finanţare.
Această variantă are o transpunere directă în MS Access, aşa după cum rezultă din secvenţa de
mai jos.

SQL Access

SELECT sum(valoare) AS valoare_totala, tip


FROM proiect
WHERE year(data_finala)=2016
GROUP BY tip;

5
Lista rezultat pentru P3 (SQL Access)

P4. Ce funcţii au directorii proiectelor finalizate în anul 2016?

Lista: | cod_proiect | titlul | nume director | cod_functie | denumire |

Algebră relaţională

R1 = SELECT (PROIECT; (data_finala ≥ 01.01.2016) and (data_finala ≤ 31.12.2016))


R2 = EQUI- JOIN (R1, PERSONAL; cod_director = marca)
R3 = EQUI- JOIN (R2, FUNCTIA; cod_director = marca)
R4 = PROJECT (R3; cod_proiect, titlul, nume, cod_functie, denumire)

SQL Access

SELECT cod_proiect, titlu, nume AS nume_director, personal.cod_functie, denumire


FROM proiect, personal, functia
WHERE marca=cod_director
AND
functia.cod_functie=personal.cod_functie
AND
YEAR(data_finala)=2016;

Lista rezultat pentru P4 (SQL Access)

6
P5. Să se listeze directorii care gestionează în prezent mai mult de un proiect.

Lista: | cod_director | nume director | numar proiecte gestionate |

Algebră relaţională

R1 = SELECT (PROIECT; data curenta < data_finala)


R2 = COUNT (R1; cod_director)
R3 = SELECT (R2; count > 1)
R4 = EQUI-JOIN (R3, PERSONAL; cod_director = marca)
R5 = PROJECT (R4; cod_director, nume, count)

Explicaţii.
Relaţia R2 are schema [cod_director, count]. Dintre tuplurile acestei relaţii sunt selectate cele
pentru care count > 1 şi se obţine relaţia R3.
Relaţia R4, rezultată prin aplicarea operaţiei de joncţiune pe egalitate are structura: [marca,
nume, CNP, cod_functie, tel, email, cod_director, count], având în fiecare tuplu, valori egale
pentru atributele: marca şi cod_director.

SQL Access

SELECT cod_director, nume, numar_proiecte


FROM [SELECT COUNT(*) AS numar_proiecte, cod_director
FROM proiect
GROUP BY cod_director]. AS tmp, personal
WHERE marca=cod_director and numar_proiecte>=2;

Lista rezultat pentru P5 (SQL Access)

P6. Care este valoarea medie a proiectelor cu finanţare externă?

Algebră relaţională

R1 = SELECT (PROIECT; tip = 2)


R2 = MEAN (R1, valoare)

7
SQL Access
Varianta 1:
SELECT AVG(valoare) AS valoare_medie
FROM proiect
WHERE tip="2";

Varianta 2:
SELECT SUM(valoare)/COUNT(*) AS valoare_medie
FROM proiect
WHERE tip="2";

Lista rezultat pentru P6 (SQL Access)

P7. Care este titlul şi valoarea contractelor gestionate de directori cu funcţia de lector?

Lista: | cod_proiect | titlul | valoare | cod_director | nume director |

Algebră relaţională

R1 = SELECT (FUNCTIA; denumire = ‘lector’)


R2 = NATURAL JOIN (R1, PERSONAL; cod_functie)
R3 = EQUI-JOIN (R2, PROIECT; cod_director = marca)
R4 = PROJECT (R3; cod_proiect, titlul, valoarea, cod_director, nume)

SQL Access

SELECT cod_proiect, titlu, valoare, cod_director, nume AS nume_director


FROM proiect, personal, functia
WHERE cod_director=marca
AND
personal.cod_functie=functia.cod_functie
AND
denumire="lector";

8
Lista rezultat pentru P7 (SQL Access)

P8. Care sunt persoanele care nu sunt cuprinse în proiectele de cercetare ale instituţiei?

Lista: | marca | nume | denumire (functie) |

Algebră relaţională

R1 = PROJECT (PERSONAL; marca)


R2 = PROJECT (ECHIPA; marca)
R3 = DIFFERENCE (R1, R2)
R4 = NATURAL JOIN (R3, PERSONAL; marca)
R5 = NATURAL JOIN (R4, FUNCTIA; cod_functie)
R6 = PROJECT (R5; marca, nume, denumire)

Explicaţii.
Relaţia R3 are un singur atribut, marca. Tuplurile relaţiei R3 conţin mărcile angajaţilor din
PERSONAL care nu se regăsesc în ECHIPA, adică acele persoane care nu sunt cuprinse în
proiectele de cercetare ale instituţiei.
Relaţia R4 are structura:
[marca, nume, CNP, cod_functie, tel, email]
Relaţia R5 are structura:
[marca, nume, CNP, cod_functie, tel, email, denumire]
Se obţin astfel informaţiile de care avem nevoie în lista cerută (marca, nume, denumire), prin
aplicarea operaţiei de proiecţie relaţiei R5.

SQL Access

SELECT marca, nume, denumire


FROM personal, functia
WHERE marca NOT IN
(SELECT marca FROM echipa)
AND
personal.cod_functie=functia.cod_functie;

9
Lista rezultat pentru P8 (SQL Access)

P9. Lista persoanelor cuprinse în proiectele de cercetare ale instituţiei (ca membru în echipă
sau director de proiect) şi numărul de proiecte.

Lista: | marca | nume | denumire (functie) | numar de proiecte |

Algebră relaţională

R1 = COUNT (ECHIPA; marca)


R2 = NATURAL JOIN (R1, PERSONAL; marca)
R3 = NATURAL JOIN (R2, FUNCTIA; cod_functie)
R4 = PROJECT (R4; marca, nume, denumire, count)

SQL Access

SELECT tmp.marca, nume, denumire, nr_de_proiecte


FROM [SELECT marca, COUNT(*) AS nr_de_proiecte
FROM echipa
GROUP BY marca]. AS tmp,
personal, functia
WHERE tmp.marca=personal.marca
AND
personal.cod_functie=functia.cod_functie;

10
Lista rezultat pentru P9 (SQL Access)

P10. Care sunt primele două proiecte, ca valoare, cu finanţare externă?

Lista: | cod_proiect | titlul | tip | valoare |

SQL Access

SELECT TOP 2 cod_proiect, titlu, tip, valoare


FROM proiect
WHERE tip='2'
ORDER BY valoare DESC;

Lista rezultat pentru P10 (SQL Access)

11

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