Создаем базу данных

Можно создать таблицу двумя вариантами


Создаем первую таблицу person

таблица movie

таблица picture








Теперь у нас есть таблицы

После создания таблицы, мы заполним каждую по 5 записей, начнем с person (пример будет, другие будут так же заполняться)



Заполняем таблицу pictire и делаем свзять с таблицей person

После добавления связи добавляем и проверяем, чтобы свзять появилась


Заполняем таблицу movie_by_production_company и делаем связь с 2 таблицами movie и production_company
Добавляем первую свзять

Добавляем вторую связь

Проверяем


Все вышло, наведя курсор, так же видим названия

Добавляем связи и заполняем таблицу movie_genre
Первая свзять с movie

Вторая связь

Заполняем таблицу

Заполненая талица

Заполняем таблицу person_in_movie так же делаем связи с таблицами person, movie, position (картинки)





Последние делам связь и заполняем таблицу quote

После создания связи заполняем таблицу

При заполнении таблицу, увидила, не большую ошибку, исправляем ее, меняем quote_text с int -> varchar(1000) цитата


Смотрим заполненые свзязи:

Создаем 3 процедуры на основе связанных (JOIN) таблиц.
1 Процедура

Теперь будем создавать процедуры, первая процедура на показания названий фильмов по жанру

SELECT m.title
→ Мы хотим получить названия фильмов (title) из таблицыmovie.FROM movie m
→ Таблицаmovieполучает псевдонимm.JOIN movie_genre mg ON m.id = mg.movie_id
→ Мы соединяем таблицуmovieс таблицейmovie_genre, чтобы найти жанры, связанные с фильмами.JOIN genre g ON mg.genre_id = g.id
→ Мы соединяемmovie_genreс таблицейgenre, чтобы узнать название жанра.WHERE g.genre_name LIKE CONCAT('%', genreName, '%');
→ Мы отфильтровываем только те фильмы, у которых жанр соответствует всписаному значению (букве, началу dr и т.д.)
Например:
Ввела “F”

Результат, у них содержаться в название жанра буква “F” (Sci-Fi, Fantasy)

Чутка изменим процедуру

Добавла, чтобы красиво отображал так же найденый жанр и изменила первый стобец, для более понятного. Итого мы имеем

2 Процедура
Процедура get_quotes_by_character показывает все цитаты, которые были произнесены определённым персонажем (ролью) в фильме

ELECT quote.quote_text
→ Хотим взять текст цитаты из таблицыquote.movie.title AS movie_title
→ Берём название фильма из таблицыmovieи называем столбецmovie_title.person_in_movie.role AS role_name
→ Показываем роль персонажаFROM quote
→ Указываем, что начинаем с таблицыquote, которая хранит все цитаты.JOIN person_in_movie ON quote.person_in_movie_id = person_in_movie.id
→ Связываем таблицуquoteс таблицейperson_in_movieJOIN movie ON person_in_movie.movie_id = movie.id
→ Присоединяем таблицуmovie, чтобы получить название фильма, из которого цитата.WHERE person_in_movie.role LIKE CONCAT('%', characterName, '%')
→ Это фильтр:- Показываем только те строки, где роль персонажа содержит введённый текст.
%означает: «любой текст до и после».

Пробудем ее активировать.

В значение вводим Rose – персонаж

И мы видим саму цитату, с какого фильма и роль (которую ввели Rose)
3 Процедура
Показывает названия всех фильмов, которые были сняты любой студией, имя которой вводит пользователь (т.к ike можно одно слово вводить)

- SELECT movie.title AS movie_title
→ Берём название фильма из таблицыmovie, и даём этому столбцу красивое имяmovie_title - production_company.company_name
→ Также выбираем название студии, которая снимала фильм. - FROM movie
→ Указываем, что начальная таблица — этоmovie - JOIN movie_by_production_company ON movie.id = movie_by_production_company.movie_id
→ Это соединение через промежуточную таблицу, которая связывает фильмы со студиями - JOIN production_company ON movie_by_production_company.production_company_id = production_company.id
→ Берёмproduction_company_idиз промежуточной таблицы, и находим по нему студию в таблицеproduction_company - WHERE production_company.company_name LIKE CONCAT(‘%’, companyName, ‘%’)
→ Это фильтр — ищем студии, чьё имя содержит текст, введённый пользователем,%— означает любую последовательность символов,LIKE— ищет по частичному совпадению

Пробуем выполнить процедуру

Получаемый результат


Добавилиа еще одного, чтобы проверить.
Создание пользователя
phpMyAdmin -> Учетная запись

Добавить пользователя

Вводим данные

Вперед, далее редактируем пользователя и даем ему привелегии


Даю права для базы данных movie

Так же администратору даю права на процедуры все 3



Сделаем второго пользователя, который имеет доступ только к двум таблицам (person, pictures)







Мы дошли до того, что для пользователя user_movie добавляем таблицу person, а так же выбираем то что он может с ней делать

SELECT – > я считаю подходит для kontrollida andmed tabelites
INSERT -> я считаю подходит для lisada andmed tabelites
UPDATE -> я считаю подходит для lisada andmed tabelites
DELETE -> я считаю подходит для kontrollida andmed tabelites т.к удаления записей тоже иногда необходима как контролировать их
После “Вперед”

тоже самое делаем для таблицы picture



Создаем триггеры
Нанем с того, что не обходимо сделать таблицу logi


Начинаем делать тригерры, чтобы записывались действия в logi
Триггер 1: INSERT в person_in_movie


Добавляем тригер на добавления

Что делает:
Добавляет запись в таблицу logi (журнал действий), когда добавляют нового персонажа в фильм.
Что сохраняется:
table_name: имя таблицы —'person_in_movie'action_type: тип действия —'INSERT'details: текст, например:
Добавлен персонаж “Jack Dawson” (person_id=1) в movie_id=5
Используется NEW. — это доступ к значениям новой строки, которая только что добавляется.
Проверяем


Так же улутщаем код, добавляем с большой буквы, время когда добавили

Через 5 удачно все же сделала

все красиво, все вспомогательное удалила (person_id=’, NEW.person_id, ‘) в movie_id=’, NEW.movie_id)

Добавляем, чтобы видить связаные таблицы

FROM person_in_movie pim – даём ей псевдоним pim
JOIN movie m ON NEW.movie_id = m.id – присоединяем таблицу movie, даем псевдоним m, NEW.movie_id — значение из новой вставляемой строки
JOIN position p ON NEW.position_id = p.id – присоединяем таблицу position, даем псевдоним p, NEW.position_id — значение из новой строки
WHERE pim.id = NEW.id – выбрать именно ту строку из person_in_movie, которая только что добавляется или обновляется.
Проверяем

Триггер 2: UPDATE в movie
Перейди во вкладку “Триггеры” → Создать триггер

Присоздании триггера, взяли лучшее с прошлого триггера


Проверяем




Конечно не влезло, но исправим!
Триггер 3: DELETE из movie_genre
Перейди во вкладку “Триггеры” → Создать триггер


Пробуем, я добавила 2 жанра к фильмам чтобы их удалять



Добавляем пользователя в таблицу logi

Идем сюда

и все по очереди изменяем, чтобы у нас появилась возможность видить инфомацию о пользователи.



Далее проверяем записывает ли пользователя

Проверила все триггеры записывают информацию о пользователе, все 3 триггера

