Я думаю, что необходимо де-нормализовать базу данных для пользовательских уведомлений.Например, при пометке поста (который должен учитывать пользователь) мы добавляем столбец flag ENUM('yes', 'no')
(или столбец статуса).Найти помеченные события для пользователя можно, посчитав с предложением WHERE user_id='XX' AND flag='yes'
.
Эта нормализованная структура в порядке;но что, если у нас есть разные типы уведомлений;например, флаги для постов, комментариев, фотографий ... Это означает, что нам нужно сосчитать несколько таблиц, когда пользователь только посещает страницу своего профиля.Это более серьезно для кросс-проекта, такого как stackexchange, так как мы получаем уведомления для разных сайтов.
Я думаю, что нормализация может помочь добавить столбцы уведомлений в пользовательскую таблицу как
post_flags tinyint(3),
comment_flags tinyint(3),
photo_flags tinyint(3),
В этом случае нам нужно выполнить дополнительный запрос записи для обновления столбцов пользовательских флагов при каждом соответствующем действии.Например, при пометке сообщения: UPDATE users SET post_flags=post_flags+1 WHERE user_id='XX'
.Моя задача - обеспечить выполнение последнего запроса, чтобы избежать несоответствия между этим числом и количеством помеченных сообщений;но я думаю, что это может быть обеспечено с помощью TRANSACTION
.
Таким образом, мы получаем все уведомления одним запросом для часто посещаемых страниц профиля.
Я на правильном пути?или для этого характерен другой хитрый подход?