Например пользователь лайкает видео. У видео есть метки например: США, война, Сирия.
В MySQL есть таблица меток
id | tag
1 | USA
2 | Siria
3 | war
После того как пользователь лайкает видео, надо чтобы метки приставились к пользователю и дальше приплюсовывались к нему, если пользователь лайкает еще одно видео, с такими же метками. То есть он лайкнул видео, с меткой США. И в БД надо положить пользователь с id 1 полюбил метку usa 1 раз, если еще раз лайкнет, то уже 2 раза полюбил эту метку.
Как осуществить это, какие таблицы надо сделать ?
Первый подход. Делаем таблицу user_tags с полями user_id и tag_id. Каждый раз, когда пользователь лайкает видео, записываем метки в таблицу:
insert into user_tags (user_id, tag_id) values (user, tag);
Когда нужно посчитать, сколько раз пользователь лайкнул ту или иную метку, делаем такой запрос:
select count(user_id) form user_tags where tag_id = 1;
Плюс: простая вставка. Минусы: быстро растущая таблица и необходимость использования статистической функции при каждой выборке.
Второй подход. Делаем таблицу user_tags с полями user_id, tag_id и quantity. Первые два делаем составным ключом. При записи проверяем, есть ли в базе запись с таким ключом. Если есть, то делаем update, увеличивая на 1 число в quantity. Если нет, делаем insert, вставляя в quantity 1.
Плюсы: более компактная таблица, простые поиск и выборка. Минус: более сложная логика вставки записей.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей