Механизм оценок и добавления в закладки со стороны БД
Допустим, есть сайт про фильмы, например Кинопоиск. Пользователь может взаимодействовать с фильмом, то есть поставить ему оценку, написать отзыв, добавить в любимое и кинуть в закладки.
В БД есть таблица users с данными пользователя, есть таблица films с данными фильма. Необходима таблица взаимодействий пользователя с фильмом. У меня есть три варианта и я не могу решить, какой из них будет лучше в дальнейшем. И есть ли вообще какая-то существенная разница.
Первый вариант: 1 таблица users_films. Поля: user_id, film_id, rate, review, favorite, bookmark.
При первом взаимодействии добавляется запись, при дальнейших обновляется. Пользователь кидает фильм в закладки, в таблице появляется запись с пустыми полями, кроме user_id, film_id и bookmark, в котором появляется цифра 1. Через некоторое время пользователь ставит оценку, запись обновляется, заполняется поле с оценкой, а полю boookmark присваивается 0.
Второй вариант: 2 таблицы users_films и users_films_bookmarks. Поля те же, за исключением bookmark. Мне кажется, что добавление в закладки - это слегка иной механизм, в отличие от оценки. Пользователь кидает фильм в закладки, в таблице users_films_bookmarks появляется запись. Через некоторое время пользователь ставит оценку, появляется запись в таблице users_films, а из users_films_bookmarks она удаляется.
Третий вариант: отдельная таблица для каждого действия. users_films_rates, users_films_reviews, users_films_favorites, users_films_bookmarks. Этот вариант мне кажется самым неудачным, потому что плодит большое количество таблиц. Если добавится, например, такая же таблица с режиссёрами, то нужно будет делать ещё 4 таблицы для взаимодействия с ними. И так с каждой новой таблицей.
Скажите, пожалуйста, какой из вариантов наиболее оптимален и почему? Или может есть варианты получше?