Andmebaas MOVIES

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

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

Создаем первую таблицу 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_movie
  • JOIN 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 триггера