Sunteți pe pagina 1din 5

Creare baze de date:

I. Se dă următoarea structură a bazei de date:

Discipline (CodDisciplina, DenumireDisciplina, NrOre)


Module (CodModul, NumeModul, DataIncepModul, DataSfModul,
Taxa)
Structura (CodDisciplina, CodModul)
Studenti (CNPStudent, Nume, Prenume, Adresa, Telefon)
ParticipareLaModule (CodModul, CNPStudent, ProcentDiscount)
Să se creeze baza de date în SQL Server ţinând cont de următoarele reguli:

Field name Data type Constraints


CodDisciplina int (numerotare
automata din 100
in 100)
DenumireDisciplina nvarchar(200) Not null
NrOre int >0
CodModul uniqueidentifier
(newID())
NumeModul nvarchar(200) Not null
DataIncepModul datetime
DataSfModul datetime
Taxa money >0
CNPStudent char(13)
Nume nvarchar(100) Not null
Prenume nvarchar(100) Not null
Adresa nvarchar(200)
Telefon char(15)
ProcentDiscount smallmoney >=0
DECLANŞATORI (TRIGGERS)
II. Fie tabelul ANGAJATI (CodAngajat, Nume, Functie, Salariu, CodDepartament)

1. Realizaţi un trigger pentru operaţia de ştergere care să nu permită ştergerea


angajaţilor care au CodDepartament=1

2. Realizaţi un trigger care să nu permită modificarea salariului unui angajat la o


valoare mai mică decât salariul pe care îl are în momentul actualizării.

3. Realizaţi un trigger care să adauge în tabelul ARHIVA_ANGAJATI toţi angajaţii ce


vor fi sterşi din tabelul angajaţi.

Tabelul Arhiva_Angajati are următoarele câmpuri:

- CodA – int (cu incrementare automata)

- Nume – nvarchar(25)

- DataPlecare – datetime

Data plecării se va completa automat cu data la care a fost şters angajatul.


Vederi (Views)
III. Utilizând baza de date realizată la punctul I să se rezolve
următoarele cerinţe prin crearea de vederi (views):
1. Să se afişeze data sistemului, ora sistemului + diverse variante: anul, luna,
ziua, trimestrul, săptămâna (datepart)
2. Să se afişeze disciplinele de la modulul „Info”.
3. Să se afişeze cursanţii dintr-o anumită localitate.
4. Sa se afişeze cursanţii din Bucureşti şi Sibiu.
5. Sa se afişeze cursanţii din provincie.
6. Să se afişeze cursanţii al căror nume începe cu litera "A" (wildcards: % şi
_)
7. Să se afişeze numărul de cursanţi dintr-o anumită localitate.
8. Să se afişeze taxa totală încasată pe fiecare disciplină.
9. Să se afişeze taxa totală încasată pe fiecare localitate.
10. Să se afişeze cursanţii înscrişi pe fiecare modul.
11. Să se afişeze cursanţii care nu sunt înscrişi la nici un modul.
Proceduri stocate (Stored Procedures)
IV. Utilizând baza de date realizată la punctul I să se rezolve
următoarele cerinţe:
1. Să se creeze o procedură stocată pentru a afişa datele unui cursant
(student) al cărui CNP este specificat ca parametru. În cazul în care
parametrul nu este specificat (rămâne NULL) se va afişa un mesaj de
eroare.
2. Să se creeze o procedură stocată pentru a determina taxa maximă de
plată. Procedura va contine un parametru de tip OUTPUT care va
prelua valoarea taxei maxime din toate modulele.
3. Se doreşte calculul unei reduceri pentru toţi cursanţii (studenţii). Suma
finală de plată va fi egală cu valoarea taxei iniţiale din care se scade
15% din taxa maximă de plată.
Funcţii de tip utilizator (User defined functions)

V. Utilizând baza de date realizată la punctul I să se rezolve următoarele


cerinţe:

Funcţii de tip tabelar (table valued functions)

1. Realizaţi o funcţie prin intermediul căreia să se determine care sunt primele 3


module cu cele mai multe discipline alocate. Funcţia va returna codurile şi
denumirile modulelor şi numărul total de discipline.
Sa se folosească funcţia în cadrul unei proceduri stocate ce afişează lista
modulelor cu discipline importante, incepute dupa data de 1/10/ 2008 :

2. Realizati o functie prin care sa se afiseze disciplinele aferente unui modul


precizat ca parametru.

Funcţii de tip scalar (scalar functions)


1. Se doreşte alocarea unui cod fiecărui cursant în parte. Codurile vor fi alcătuite
din iniţiala prenumelui, iniţiala numelui de familie şi anul naşterii.

2. Sa se creeze o functie pentru a determina taxa neta totală de plată pentru un


modul precizat ca parametru. Se va utiliza funcţia în afişarea listei modulelor
existente.