Sunteți pe pagina 1din 6

Exerci ii Capitolul 5

EXERCI II CAPITOLUL 5 5.1. n baza de date proprie din SQL Server sau Oracle aduga i tabelul AP cu urmtoarea schem: AP(IdAngajat,Nume,Prenume,Adresa,IdProiect ,NrOre)

n acest tabel introduce i urmtoarele linii de date: (1,Nume1,Prenume1,Adresa1,P1,100) (1,Nume1,Prenume1,Adresa1,P2,200) (2,Nume2,Prenume2,Adresa2,P1,300) (2,Nume2,Prenume2,Adresa2,P2,400) Crea i triggerul pentru verificarea dependen elor func ionale care nu sunt determinate de cheia primar a rela iei: IdAngajatNume,IdAngajatPrenume,IdAngaja tAdresa. n sistemul SQL Server triggerul se poate crea prin execu ia fiierului script Program_5_1.sql. Pentru sistemul
202

Exerci ii Capitolul 5

Oracle se creaz un triggger cu func ionare similar. Dup crearea triggerului ncerca i s introduce i urmtorul tuplu: (1,Nume1,PrenumeX,Adresa1,P3,50); Ce mesaj obtine i la execu ia acestei instruc iuni? Care este con inutul tabelului AP dup aceast execu ie? Care ar putea fi forma corect a acestei instruc iuni? 5.2. Elimina i triggerul de verificare a dependen elor func ionale n rela ia AP i crea i o procedur stocat pentru aceeai opera ie. n SQL Server procedura stocat se creaz prin execu ia scriptului Program_5_6a.sql, iar n Oracle prin execu ia scriptului Program_5_8a.sql. Apela i procedura stocat i verifica i execu ia corect a opera iei de verificare a dependen elor func ionale n rela ia AP. 5.3. n baza de date proprie din SQL Server sau Oracle adauga i tabelul AFS cu urmtoarea schema: AFS(IdAngajat,Nume,Prenume,Adresa,Functie, Salariu)

203

Exerci ii Capitolul 5

Se consider c atributul cheie primar IdAngajat nu este de tip IDENTITY (n SQL Server) sau nu folosete o secven (n Oracle). n acest tabel introduce i urmtoarele linii de date:
(1,Nume1,Prenume1,Adresa1,Functie1,10000) (2,Nume2,Prenume2,Adresa2,Functie2,20000) (3,Nume3,Prenume3,Adresa3,Functie3,30000)

Crea i triggerul pentru impunerea dependen ei func ionale FunctieSalariu care nu este determinat de cheia primar a rela iei prin execu ia fiierului script Program_5_3.sql pentru SQL Server sau a fiierului Program_5_7.sql pentru Oracle. Dup crearea triggerului ncerca i s introduce i urmtoarele date n tabelul AFS (sau n vederea asociat): (4,Nume4,Prenume4,Adresa4,Functie3 ,300); Ce mesaj obtine i la execu ia acestei instruc iuni? Care este con inutul tabelului AFS dup aceast execu ie? Care ar putea fi forma corect a acestei opera ii? 5.4. Crea i o procedur stocat care s verifice dependen a func ional FunctieSalariu n tabelul AFS. Pentru sistemul Oracle procedura se creeaz prin execu ia scriptului din fiierul Program_5_6a.sql. Pentru sistemul SQL Server scrie i i executa i o procedur Transact-SQL cu func ionare similar. Distruge i triggerul creat n execrci iile precedente
204

Exerci ii Capitolul 5

pentru acest tabel (cu instruc iunea DROP TRIGGER) i apela i procedura stocat nainte de inserarea datelor n tabelul AFS. Verifica i func ionarea corect a inserrii. 5.5. n baza de date proprie din sistemul SQL Server sau Oracle aduga i tabelul EPD cu urmtoarea schema: EDP(IdElev,IdDisciplina,IdProfesor).

n acest tabel introduce i urmtoarele linii de date: (E1, D1 ,P1) (E1, D2 ,P2) (E2, D1 ,P1) (E2, D2 ,P2) Crea i triggerul pentru impunerea dependen ei func ionale IdProfesorIdDisciplina care nu este determinat de cheia primar a rela iei (IdElev,IdDisciplina). Pentru sistemul SQL Server triggerul se poate crea prin execu ia fiierului script Program_5_4.sql. Pentru sistemul Oracle scrie i i executa i un program PL/SQL de creare a unui
205

Exerci ii Capitolul 5

trigger cu func ionare similar. Dup crearea triggerului ncerca i s introduce i urmtoarele date n tabelul EDP: (E3,D3,P1); Ce mesaj obtine i la execu ia acestei instruc iuni? Care este con inutul tabelului EDP dup aceast execu ie? Care ar putea fi forma corect a acestei instructiuni? 5.6.* n baza de date proprie din SQL Server sau Oracle defini i rela ia MP: MP(IdMedic,Nume,Prenume,IdPacient,DataCons ultatiei,Diagnostic) n aceast rela ie trebuie s fie respectate urmtoarele dependen e func ionale: IdMedicNume, IdMedicPrenume,{IdMedic,IdPacient,DataCo nsultatiei}Diagnostic. Dezvolta i o procedur stocat (Transact-SQL sau PL/SQL) care s verifice i s impun dependen ele func ionale care nu sunt determinate de cheia rela iei (IdMedicNume,IdMedicPrenume). Aceast procedur trebuie s testeze valorile care urmeaz s fie inserate i s nu admit introducerea unui nou tuplu care are valoarea atributului IdMedic egal cu valoarea acestuia dintr-un tuplu oarecare, dar valori diferite ale unuia din atributele Nume sau Prenume. Dup crearea triggerului insera i urmtoarele linii n tabelul MP:
(1,Nume1,Prenume1,100,03.04.2003,D1) (1,Nume1,Prenume1,200,03.04.2003,D1) (2,Nume2,Prenume2,100,07.04.2003,D2)

Verifica i impunerea dependen elor func ionale care nu sunt determinate de cheia rela iei (IdMedicNume,IdMedicPrenume) ncercnd s insera i tuplul:
206

Exerci ii Capitolul 5

(1,Nume1,PrenumeX,300,07.07.2003,D4).

Dac programul func ioneaz corect, acest tuplu trebuie s fie rejectat, dat fiind c violeaz dependen a func ional IdMedicPrenume. 5.7.* n baza de date proprie din sistemul SQL Server sau Oracle defini i rela ia SE: SE(IdStudent,Nume,Prenume,IdDisciplina,Dat aExamen,Nota) n aceast rela ie trebuie s fie respectate urmtoarele dependen e func ionale: IdStudentNume, IdStudentPrenume,{IdStudent,IdDisciplina ,DataExamen}Nota. Dezvolta i un trigger (TransactSQL sau PL/SQL) care s verifice i s impun dependen ele func ionale care nu sunt determinate de cheia rela iei (IdStudentNume,IdStudentPrenume). Acest trigger trebuie s testeze valorile care se insereaz i s nu admit introducerea unui tuplu care are valoarea atributului IdStdudent egal cu valoarea acestuia dintr-un tuplu oarecare, dar are valori diferite ale unuia din atributele Nume sau Prenume. Insera i urmtoarele linii n tabelul SE: (1,Nume1,Prenume1,100,03.04.2003,8) (1,Nume1,Prenume1,200,03.04.2003,7) (2,Nume2,Prenume2,100,07.04.2003,9) Verifica i impunerea dependen elor func ionale care nu sunt determinate de cheia rela iei: (IdStudentNume,IdStudentPrenume) ncercnd s insera i tuplul: (1,Nume1,PrenumeX,300,07.07.2003,10). Dac programul func ioneaz corect, acest tuplu trebuie s fie rejectat, dat fiind c violeaz dependen a func ional IdStudentPrenume.
207

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