Социальная сеть, которая поможет выбрать кино на основе того, какие фильмы вы и ваши друзья смотрите и какие оценки им ставите.
- Spring boot
- Maven
- PostgreSQL
Описание базы данных в текстовом виде
FILM
Содержит информацию о фильмах.
Таблица состоит из полей:
id— primary key — идентификатор фильма;name— название фильма (не может быть пустым);description— описание фильма;mpa_id— foreign key (отсылает к таблицеmpa) — идентификатор жанра;release_date— год выхода;duration— продолжительность фильма в минутах;
MPA
Содержит информацию о рейтингах ассоциации кинокомпаний (англ._ Motion Picture Association,_ сокращённо МРА).
Таблица состоит из полей:
id— primary key — идентификатор рейтинга;name— возрастной рейтинг, например:PG— детям рекомендуется смотреть такой фильм с родителями;PG-13— детям до 13 лет смотреть такой фильм нежелательно.
FILM_GENRE
Связывает фильмы с жанрами.
Таблица состоит из полей:
film_id— primary key (отсылает к таблицеfilm) — идентификатор фильма;genre_id— primary key (отсылает к таблицеgenre) — идентификатор жанра.
GENRE
Содержит информацию о жанрах кино.
Таблица состоит из полей:
id — primary key — идентификатор жанра;
name— название жанра, например:Комедия— комедия;Драма— драма.
FILM_LIKES
Связывает фильмы с пользователями, которые их оценили.
Таблица состоит из полей:
film_id— primary key (отсылает к таблицеfilm) — идентификатор фильма;user_id— primary key (отсылает к таблицеuser) — идентификатор пользователя;
USER_ACCOUNT
Содержит информацию о пользователях.
Таблица состоит из полей:
id— primary key — идентификатор пользователя;email— электронная почта пользователя;login— логин пользователя (не может быть пустым);name— имя пользователя;birthday— дата рождения пользователя;
FRIENDSHIP
Связывает пользователей, которые являются друзьями, и указывает, подтверждена ли эта дружба.
Таблица состоит из полей:
id— primary key — уникальный идентификатор;user_id— foreign key (отсылает к таблицеuser) — идентификатор пользователя;friend_id— foreign key (отсылает к таблицеuser) — идентификатор друга пользователя;friend_status_confirm— статус подтверждения дружбы, например:true—friend_idподтвердил дружбу с пользователемuser_id;false—friend_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;