Documente Academic
Documente Profesional
Documente Cultură
Cerințe:
1. Să se realizeze modelul entitate-legătură
2. Să se facă trecerea la modelul relaţional (să se detalieze operaţiile
effectuate pentru fiecare entitate în parte)
3. Să se creeze o bază de date care să conţină:
3.1. Minim 9-10 tabele, volum mare de informaţii reale –
minim 20 înregistrări în fiecare tabel
3.2. Legături între tabele;
3.3. Integritatea referenţială pentru a efectua corect operaţiile de
actualizare (adăugare, ştergere, modificare);
3.4. Chei primare şi chei externe;
3.5. Reguli de ştergere şi modificare în cascadă pentru entităţile
cu chei externe.
4. Să se verifice calitatea proiectării bazei de date cu ajutorul
formelor normale (se va normaliza baza de date până la FNBC -
inclusiv).
5. Să se indexeze baza de date creată (crearea minim a unui index).
6. Să se facă testarea bazei de date prin efectuarea de diferite operaţii
asupra ei. Trebuie să existe cel puţin o interogare din fiecare tip (în
total minim 15 interogări), 2 funcţii diferite (care să nu facă un
simplu select), 2 proceduri stocate, şi 1 trigger.
Rezolvare:
1&2:
Modelul entitate-legătură
Database diagram
3:
Tabele:
→ edituri: conține următoarele informații despre o editură: id-ul, id-
ul directorului, numele, data înființări, adresa
→ directori: conține următoarele informații despre un director: id,
nume, vârsta, adresa
→ reviste: stochează informații despre o revistă precum: id-ul, id-ul
editurii, numele, descrierea, genul, data și numărul
→ revista_articol: tabelă de legătură între revistă și articol
→ articol: informații despre un articol: id-ul, id-ul categoriei, titlul,
text-ul paragrafului
→ categorii: conține următoarele informatții despre o categorie: id-
ul și numele
→ autori: conține următoarele informatții despre un autor: id-ul, id-
ul funcției, numele și vârsta
→ autor_articol: tabelă de legătură între autor și articol
→ functii: conține următoarele informatții despre o funcție: id-ul și
numele acesteia
5:
Indecși:
→ CREATE INDEX UNIQUE_EDITURA ON edituri (nume,
data_infiintare)
→ CREATE INDEX UNIQUE_ARTICOL ON articole
(id_categorie, titlu)
→ CREATE INDEX UNIQUE_REVISTA ON edituri (nume,
descriere)
6:
Funcții:
→ CREATE FUNCTION NumarDeRevistePerioada
( @nume_revista VARCHAR(50) )
RETURNS TABLE
AS
RETURN (
SELECT COUNT(*) as result FROM revista_articol where
id_revista = (select id from reviste where nume = @nume_revista)
);
RETURNS TABLE
AS
RETURN (
SELECT COUNT(*) as result FROM reviste where nume =
@nume_revista and data between @start and @final)
);
Proceduri Stocate:
→ CREATE PROCEDURE UpdateOldArticlesTitle
AS
DECLARE @id int
OPEN cursorT
FETCH NEXT FROM cursorT INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE dbo.articole SET titlu ='OLD' + titlu where id= @id;
FETCH NEXT FROM cursorT INTO @id
END
CLOSE cursorT
DEALLOCATE cursorT
→ CREATE PROCEDURE DetaliiRevista
(@id int
@nume varchar(50) OUTPUT,
@descriere varchar(5) OUTPUT,
@gen varchar(50) OUTPUT)
AS
BEGIN
SELECT @nume = nume, @descriere=descriere, @gen = gen from reviste where id= @id;
END
Triggere:
→ create trigger reminder ON dbo.edituri
after insert as
RAISERROR ('Nu uita sa adaugi un director nou', 16, 10);
Interogari:
1) select id from edituri where nume like ‘Niculescu’;
2) delete from categorii where nume = ‘SF’;
3) update edituri set name = ‘Editura Politehnica’ where id = 3;
4) select count(*) from reviste_articol where id_revista > 10;
5) select * from edituri join directori on
edituri.id_director=directori.id limit 10;
6) update reviste set numar = numar + 1 where id between 10 and
15;
7) delete from functii where nume like ‘%asistent%’;
8) select nume, numar, data from reviste where id between 5 and 9;
9) select count(id) as numar_autori from autori;
10) select nume, descriere from reviste where numar > 2;
11) select * from revista_articol join reviste on
revista_articol.id_revista = reviste.id
12) delete from revista_articol where id_articol > 15 and id >35;
13) update articole set titlu = ‘test’ where id in (15,16,17);
14) update directori set nume = ‘Popescu Mihai’ where id =4;
15) delete from autor_articol where id in (8,9);