Între entitatea Facultate și entitatea Departament există o asociere de tip n:1 Intre entitatea Departament și entitatea Specializare există o asociere de tip n:1 Între entitatea Student și entitatea Specializare există o asociere de tip 1:n cu atributul specific "anStudiu" Între entitatea Student și entitatea Curs există o asociere de tip n:n cu atributele specifice "DataExaminarii", "Nota" Între entitatea Departament și entitatea Profesor există o asociere de tip n:1 Între entitatea Profesor și entitatea Curs există o asociere de tip n:n Între entitatea Departament și entitatea Profesor există asocierea "conduce" de tipul 1:1
--Crearea tabelului "tFacultati" in schema "Scoala"
create table scoala.tFacultati
( codFac char(10) primary key, --Constrângerea de tip cheie va primi o denumire aleasă de sistem denumire varchar(40) --Denumire acceptă și valori nule ) --Obs.: nu am atribuit denumire constrangerii primary key
( codSpec char(10) constraint pk_specializare primary key, denumire varchar(40) not null, codDep char(10) not null constraint fk_dep foreign key references tDepartamente(codDep) ) --Transferul tabelelor "tDepartamente" si "tSpecializari" din schema "dbo" în schema "scoala" alter schema scoala transfer dbo.tDepartamente alter schema scoala transfer dbo.tSpecializari --Crearea tabelului "tStudenti" create table tStudenti ( codStud char(10) constraint pk_student primary key, nume varchar(40) not null, cnp char(13), codJudet char(10) not null, localitate varchar(40), anStudiu tinyint, codSpec char(10) not null constraint fk_spec foreign key references scoala.tSpecializari(codSpec) ) /* Mentiune : Coloanele "CodJudet" si "Localitate" contin informatii redundante Eliminarea redundanței se poate face creând un tabel denumit tLocalizari ( codLoc, codJudet, Localitate) cu cheia primară codLoc CodLoc va deveni cheie străina în tabelul tStudenti */ alter schema scoala transfer dbo.tStudenti create table tCursuri ( codCurs char(10) constraint pk_curs primary key, denumire varchar(40) not null, tipCurs char constraint ck_curs check (tipCurs in ('B','O','F')), nrCredite tinyint ) create table scoala.tNote ( codCurs char(10) constraint fk_curs foreign key references scoala.tCursuri(codCurs), codStud char(10) constraint fk_student foreign key references scoala.tStudenti(codStud), dataExaminarii smalldatetime, nota tinyint, constraint pk_note primary key (codCurs,codStud) ) /* Crearea tabelului tProfesori fara specificarea constrangerilor de tip cheie primara si straina */ create table scoala.tProfesori ( codProf char(10), Nume varchar(30), grad char(10), codDep char(10) ) create table scoala.tCursProfesori ( codCurs char(10), codProf char(10), activitatePredare char ) -- Modificarea structurii tabelelor -- 1. Sa se adauge coloana 'adresa' de tip varchar(50) tabelului 'tFacultati' alter table scoala.tFacultati add adresa varchar(50) --Nu 'alter column' -- 2. Sa se impuna constrangerea 'not null' coloanei 'nrCredite' din tabelul 'tCursuri' alter table scoala.tCursuri alter column nrCredite tinyint not null -- 3. Sa se modifice tipul coloanei 'grad' din tabelul 'tProfesori' din char(10) in char alter table scoala.tProfesori alter column grad char -- 4. Sa se adauge coloanei 'grad' constrangerea de tip validare luind in calcul semnificatia A (asistent), L (lector), C (conferential), P (profesor) alter table scoala.tProfesori add constraint ck_grad check (grad in ('A','L','C','P')) -- 5 Sa se adauge coloanei 'nota' constrangerea de tip validare 1<=nota nota<=10
alter table scoala.tProfesori
-- 5. Utilizand procedura stocata de sistem SP_rename sa redenumeasca coloana 'grad' in 'gradDidactic' execute sp_rename 'scoala.tProfesori.grad','gradDidactic','column' -- Nu functioneaza din cauza constrangerii asociate coloanei 'grad' -- Stergem constrangerea alter table scoala.tProfesori drop constraint ck_grad -- Apelam procedura stocata sp_rename execute sp_rename 'scoala.tProfesori.grad','gradDidactic','column' -- Refacem constrangerea alter table scoala.tProfesori add constraint ck_grad check (gradDidactic in ('A','L','C','P')) -- 6. Sa se adauge tabelului 'tProfesori' constrangerea de tip cheie primara alter table scoala.tProfesori add constraint pk_prof primary key (codProf) -- Nu merge deoarecere coloana 'codProf' permite si valori nule -- Adaugam constrangerea 'not null' coloanei 'codProf' alter table scoala.tProfesori alter column codProf char(10) not null --Executam comanda din nou alter table scoala.tProfesori add constraint pk_prof primary key (codProf) -- 7. Sa se adauge tabelului 'tProfesori' constrangerea de tip foreign key alter table scoala.tProfesori add constraint fk_depProf foreign key (codDep) references scoala.tDepartamente(codDep) -- 8. Sa se adauge tabelului 'tCursProfesori' constrangerea de tip primary key alter table scoala.tCursProfesori add constraint pk_cursprof primary key (codCurs,codProf) -- Nu functioneaza deoarece coloanele codCurs si codProf permit valori nule alter table scoala.tCursProfesori alter column codCurs char(10) not null alter table scoala.tCursProfesori alter column codProf char(10) not null --Executam comanda din nou alter table scoala.tCursProfesori add constraint pk_cursprof primary key (codCurs,codProf) -- 9. Sa se adauge tabelului 'tCursProfesori' constrangerile de tip foreign key alter table scoala.tCursProfesori add constraint fk_cursProf foreign key (codCurs) references scoala.tCursuri(codCurs) alter table scoala.tCursProfesori add constraint fk_prof foreign key (codProf) references scoala.tProfesori(codProf) -- 10. Sa se adauge cauzele on delete cascade si on update cascade constrangerii fk_student de tip foreign key corespunzatoare tabelului tNote -- Stergem constrangerea alter table scoala.tNote drop constraint fk_student -- Refacem constrangerea cu adaugarea clauzelor 'on delete cascade' si 'on update cascade' alter table scoala.tNote add constraint fk_student foreign key (codStud) references scoala.tStudenti(codStud) on delete cascade on update cascade -- 11. Sa se adauge tabelului 'tStudenti' coloana calculata, data nasterii, prin extragerea ei din CNP alter table scoala.tStudenti add dataNasterii as convert (smalldatetime, substring (CNP,2,6), 12) --12 inseamna stilul ISO (aallzz) fara separatori -- 12. Sa se adauge tabelului 'tStudenti' constrangerile de tip default corespunzatoarea coloanei codJudet 'ag' si localitate 'Pitesti' alter table scoala.tStudenti add constraint df_judet default 'AG' for codJudet alter table scoala.tStudenti add constraint df_loc default 'Pitesti' for localitate -- 13. Sa se modifice denumirea coloanei 'codProf' din tabelul 'tDepartamente' in 'codDirectorDep' execute sp_rename 'scoala.tDepartamente.codProf','codDirectorDep','column' -- 14. Sa se adauge constrangerea de tip foreign key pentru coloana codDirectorDep alter table scoala.tDepartamente add constraint fk_directordep foreign key (codDirectorDep) references scoala.tProfesori(codProf) -- 15. Sa se adauge constrangerea de tip unic tabelului 'tStudenti' corespunzatoare coloanei 'CNP' alter table scoala.tStudenti add constraint uq_cnp unique (cnp)