
Kasutan SQL Server Management Stuudio

1. Loome andmebaas MOVIES:


2. Tabelite nummerdus:

person — Inimesed (näitlejad, režissöörid jne)
picture — Inimeste fotod
position — Ametid (näitleja, režissöör jne)
person_in_movie — Inimeste ja filmide seosed ning nende rollid
quote — Tsitaadid, mida tegelased on öelnud
movie — Filmid
genre — Žanrid
movie_genre — Filmide ja žanrite seos (mitu-mitmele)
production_company — Filmitootmisettevõtted
movie_by_production_company — Filmide ja tootmisettevõtete seos (mitu-mitmele)










3. Ühenduste loomine:
















person
on seotud tabelitega picture
ja person_in_movie
person_in_movie
on seotud tabelitega movie
, position
ja quote
movie
on seotud tabelitega movie_genre
ja movie_by_production_company
movie_by_production_company
on seotud tabeliga production_company
movie_genre
on seotud tabeliga genre
4. Protseduuride loomine:
1️⃣Protseduur 1:
Kõigi filmide ja nende žanrite saamine
2️⃣Protseduur 2:
Näitlejate kuvamine konkreetse filmi kohta
3️⃣Protseduur 3:
Tsiteeringute kuvamine koos näitlejanime ja filmi pealkirjaga
CREATE PROCEDURE usp_GetMoviesWithGenres
AS
BEGIN
SELECT
m.title AS MovieTitle,
g.genre_name AS Genre
FROM movie m
INNER JOIN movie_genre mg ON m.movie_ID = mg.movie_ID
INNER JOIN genre g ON mg.genre_ID = g.genre_ID;
END;
CREATE PROCEDURE usp_GetActorsByMovie
@movieTitle NVARCHAR(100)
AS
BEGIN
SELECT
p.first_name + ' ' + p.last_name AS ActorName,
pim.role
FROM person p
INNER JOIN person_in_movie pim ON p.person_ID = pim.person_ID
INNER JOIN movie m ON pim.movie_ID = m.movie_ID
INNER JOIN position pos ON pim.position_ID = pos.position_ID
WHERE m.title = @movieTitle AND pos.position_name = 'Actor';
END;
CREATE PROCEDURE usp_GetQuotesWithContext
AS
BEGIN
SELECT
q.quote_text,
p.first_name + ' ' + p.last_name AS PersonName,
m.title AS MovieTitle
FROM quote q
INNER JOIN person_in_movie pim ON q.person_in_movie_ID = pim.person_in_movie_ID
INNER JOIN person p ON pim.person_ID = p.person_ID
INNER JOIN movie m ON pim.movie_ID = m.movie_ID;
END;
1️⃣Protseduur 1 kontroll:
EXEC usp_GetMoviesWithGenres;
2️⃣Protseduur 2 kontroll:
EXEC usp_GetActorsByMovie @movieTitle = 'Inception';
EXEC usp_GetActorsByMovie @movieTitle = 'The Godfather';
EXEC usp_GetActorsByMovie @movieTitle = 'Interstellar';
EXEC usp_GetActorsByMovie @movieTitle = 'The Dark Knight';
EXEC usp_GetActorsByMovie @movieTitle = 'Forrest Gump';
3️⃣Protseduur 3 kontroll:
EXEC usp_GetQuotesWithContext;



5. Loome 2 triggeri
Lisame uus inimene person tabellisse
CREATE TRIGGER Person_Insert
ON person
AFTER INSERT
AS
BEGIN
INSERT INTO log_table (username, action, table_name, action_time)
SELECT
SUSER_SNAME(),
CONCAT(
'INSERT person: ',
'Name: ', i.first_name, ' ', i.last_name,
', Birth: ', CONVERT(varchar, i.birth_date, 23)
),
'person',
GETDATE()
FROM inserted i;
END;
Uuendame pildinimi picture tabellis
CREATE TRIGGER Picture_Update
ON picture
AFTER UPDATE
AS
BEGIN
INSERT INTO log_table (username, action, table_name, action_time)
SELECT
SUSER_SNAME(),
CONCAT(
'UPDATE picture: ',
'Old file - ', d.picture_file_name, ' (person_ID ', d.person_ID, ') > ',
'New file - ', i.picture_file_name, ' (person_ID ', i.person_ID, ')'
),
'picture',
GETDATE()
FROM deleted d
INNER JOIN inserted i ON d.picture_ID = i.picture_ID;
END;
6. Loome 2 kasutajat
admin
saab teha kõike kõikidega tabelitega
kastujaMOVIES
saab lisada ja kontrollida andmed tabelites: person, pictures
-- Admini sisselogimise ja kasutaja loomine
CREATE LOGIN admin WITH PASSWORD = 'StrongAdminPass123!';
CREATE USER admin FOR LOGIN admin;
-- Täielikud õigused admin kasutajale
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: dbo TO admin;
-- kasutajaMOVIES sisselogimise ja kasutaja loomine
CREATE LOGIN kasutajaMOVIES WITH PASSWORD = 'KasutajaPass456!';
CREATE USER kasutajaMOVIES FOR LOGIN kasutajaMOVIES;
-- Piiratud õigused kasutajale kasutajaMOVIES (ainult tabelid person ja picture)
GRANT SELECT, INSERT, UPDATE ON person TO kasutajaMOVIES;
GRANT SELECT, INSERT, UPDATE ON picture TO kasutajaMOVIES;
admin õiguste kontroll
SELECT * FROM genre;
SELECT * FROM movie;
SELECT * FROM movie_by_production_company;
SELECT * FROM movie_genre;
SELECT * FROM person_in_movie;
SELECT * FROM position;
SELECT * FROM production_company;
SELECT * FROM quote;
SELECT * FROM log_table;
SELECT * FROM person;
SELECT * FROM picture;


kasutajaMOVIES õiguste kontroll
SELECT * FROM genre;
SELECT * FROM movie;
SELECT * FROM movie_by_production_company;
SELECT * FROM movie_genre;
SELECT * FROM person_in_movie;
SELECT * FROM position;
SELECT * FROM production_company;
SELECT * FROM quote;
SELECT * FROM log_table;
SELECT * FROM person;
SELECT * FROM picture;


Logitabeli log_table
vaatamine
admin
kasutajaMOVIES

