Skip to content

Latest commit

 

History

History
144 lines (95 loc) · 5.34 KB

File metadata and controls

144 lines (95 loc) · 5.34 KB

Filmorate - кинопоиск для своих

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

Технологии, применяемые в проекте

  • Spring boot
  • Maven
  • PostgreSQL

Диаграмма базы данных

ER model

diagram

Описание базы данных в текстовом виде

FILM

Содержит информацию о фильмах.

Таблица состоит из полей:

  • idprimary key — идентификатор фильма;
  • name — название фильма (не может быть пустым);
  • description — описание фильма;
  • mpa_idforeign key (отсылает к таблице mpa) — идентификатор жанра;
  • release_date — год выхода;
  • duration — продолжительность фильма в минутах;

MPA

Содержит информацию о рейтингах ассоциации кинокомпаний (англ._ Motion Picture Association,_ сокращённо МРА).

Таблица состоит из полей:

  • idprimary key — идентификатор рейтинга;
  • name — возрастной рейтинг, например:
    • PG — детям рекомендуется смотреть такой фильм с родителями;
    • PG-13 — детям до 13 лет смотреть такой фильм нежелательно.

FILM_GENRE

Связывает фильмы с жанрами.

Таблица состоит из полей:

  • film_idprimary key (отсылает к таблице film) — идентификатор фильма;
  • genre_idprimary key (отсылает к таблице genre) — идентификатор жанра.

GENRE

Содержит информацию о жанрах кино.

Таблица состоит из полей:

idprimary key — идентификатор жанра;

  • name — название жанра, например:
    • Комедия — комедия;
    • Драма — драма.

FILM_LIKES

Связывает фильмы с пользователями, которые их оценили.

Таблица состоит из полей:

  • film_idprimary key (отсылает к таблице film) — идентификатор фильма;
  • user_idprimary key (отсылает к таблице user) — идентификатор пользователя;

USER_ACCOUNT

Содержит информацию о пользователях.

Таблица состоит из полей:

  • idprimary key — идентификатор пользователя;
  • email — электронная почта пользователя;
  • login — логин пользователя (не может быть пустым);
  • name — имя пользователя;
  • birthday — дата рождения пользователя;

FRIENDSHIP

Связывает пользователей, которые являются друзьями, и указывает, подтверждена ли эта дружба.

Таблица состоит из полей:

  • idprimary key — уникальный идентификатор;
  • user_idforeign key (отсылает к таблице user) — идентификатор пользователя;
  • friend_idforeign key (отсылает к таблице user) — идентификатор друга пользователя;
  • friend_status_confirm — статус подтверждения дружбы, например:
    • truefriend_id подтвердил дружбу с пользователем user_id;
    • falsefriend_id не подтвердил дружбу с пользователем user_id;

Примеры запросов

Получение списка всех фильмов
SELECT *
FROM FILM  
Получение списка всех пользователей
SELECT *
FROM USER_ACCOUNT  
Получение списка `?` наиболее популярных фильмов
SELECT f.name, COUNT(fl.user_id) AS total_likes
FROM FILM AS f
       LEFT JOIN FILM_LIKES AS fl ON f.id = fl.film_id
GROUP BY f.id
ORDER BY total_likes DESC
LIMIT ? -- подставить количество фильмов для вывода  
Получение списка общих друзей с другим пользователем
SELECT u.id as friend_id, u.email, u.login, u.name, u.birthday
FROM USER_ACCOUNT u
       JOIN (SELECT friend_id FROM FRIENDSHIP WHERE user_id = ?) fs1
       JOIN (SELECT friend_id FROM FRIENDSHIP WHERE user_id = ?) fs2
ON fs1.friend_id = fs2.friend_id
WHERE u.id = fs1.friend_id;