Filmorate — это приложение для оценки фильмов и управления списками друзей.
На данной диаграмме представлены основные сущности проекта:
- users — таблица пользователей, которая хранит основную информацию: имя, логин, email, дату рождения.
- films — таблица фильмов, которая содержит название фильма, описание, дату релиза и продолжительность.
- genres — таблица жанров, связанных с фильмами через таблицу
film_genres. - mpa_ratings — таблица рейтингов MPA, хранящая возрастные ограничения фильмов.
- friendships — таблица дружбы между пользователями с указанием статуса.
- friendship_status — таблица для статусов дружбы (например, подтверждённая или неподтверждённая дружба).
- film_likes — таблица лайков пользователей к фильмам.
- film_genres — таблица связей между фильмами и жанрами.
id— уникальный идентификатор пользователя (primary key).name— имя пользователя.login— уникальный логин пользователя.email— электронная почта пользователя.birthday— дата рождения пользователя.
id— уникальный идентификатор фильма (primary key).name— название фильма.description— описание фильма, ограниченное 200 символами.release_date— дата выхода фильма.duration— продолжительность фильма в минутах.mpa_rating_id— идентификатор рейтинга MPA (внешний ключ на таблицуmpa_ratings).
id— уникальный идентификатор жанра (primary key).genre— название жанра (например, Комедия, Драма).
id— уникальный идентификатор рейтинга MPA (primary key).rating— значение рейтинга MPA (например, G, PG, R).
user_id— идентификатор пользователя (внешний ключ на таблицуusers).friend_id— идентификатор друга (внешний ключ на таблицуusers).status_id— статус дружбы (внешний ключ на таблицуfriendship_status).- Первичный ключ — комбинация
user_idиfriend_id.
film_id— идентификатор фильма (внешний ключ на таблицуfilms).genre_id— идентификатор жанра (внешний ключ на таблицуgenres).- Первичный ключ — комбинация
film_idиgenre_id.
film_id— идентификатор фильма (внешний ключ на таблицуfilms).user_id— идентификатор пользователя, который поставил лайк (внешний ключ на таблицуusers).- Первичный ключ — комбинация
film_idиuser_id.
id— уникальный идентификатор статуса дружбы (primary key).status— описание статуса (например, Подтверждено, Неподтверждено).
INSERT INTO films (name, description, release_date, duration, mpa_rating_id)
VALUES ('Кин-дза-дза!', 'комедия', '1986-01-01', 135, 2);-- Пример: фильм с id = 1 получает жанр с id = 1 и 4
INSERT INTO film_genres (film_id, genre_id) VALUES (1, 1);
INSERT INTO film_genres (film_id, genre_id) VALUES (1, 4);INSERT INTO users (name, login, email, birthday)
VALUES ('Иван Данко', 'red.heat', 'ivan.danko@yahoo.com', '1976-06-15');INSERT INTO film_likes (film_id, user_id)
VALUES (1, 1); -- Пример: пользователь с id = 1 ставит лайк фильму с id = 1INSERT INTO friendships (user_id, friend_id, status_id)
VALUES (1, 2, 1); -- Пример: пользователь с id = 1 добавляет друга с id = 2, статус = 1 (подтверждено)SELECT f.name, COUNT(fl.user_id) AS likes
FROM films f
LEFT JOIN film_likes fl ON f.id = fl.film_id
GROUP BY f.id
ORDER BY likes DESC
LIMIT 10;SELECT u.id, u.name
FROM users u
JOIN friendships f ON u.id = f.friend_id
WHERE f.user_id = 1; -- Пример: получить друзей пользователя с id = 1