Как спроектировать таблицы БД для реализации уведомлений как на toster.ru или stackoverflow?
Посоветуйте как можно реализовать структуру БД, чтобы уведомлять пользователей о новых сообщениях на сайте с минимальным количеством запросов к базе?
Дело плохо вяжется. Сел разбираться и создал таблицу notifications со столбцами postid, userid. В профиль пользователя добавил столбец notify, если значение 1 - проверяем уведомления, 0 - не делаем запросов (честно, сомневаюсь в этом).
Например, пользователь зашел на страницу с id = 2. Проверям, нужно ли уведомлять пользователя, если да, проверяем в notifications таблице пользовательский id (userid) и id страницы (postid), если она есть - удаляем строку (мы уже уведомили пользователя и нам она не нужна).
Правильным ли путем иду я? А как правильно проверять все строки в таблице notifications на нахождение в них определенного пользователя, чтобы потом если он там отсутствует отмечать это в его профиле? Под правильной проверкой я подразумеваю минимум операций с базой и своевременную проверку.
Как вариант, создание таблицы, в которую будет заноситься id пользователя, id поста, количество комментариев и дата последнего доступа к посту.
Имея такую структуру всегда можно получить список просмотренного, выбрать посты по id из этого списка и сравнить, в каких из них изменилось количество комментариев. Итого два запроса. Также при выводе постов можно получать список «просмотренного», сравнивать количество и помечать посты с новыми комментариями.
Можно ускорить используя вместо базы какое-нибудь key-value хранилище.
Да, хороший вариант. Спасибо.
Я рассматривал его в качестве запасного, но подсознательно мне казалось, что существуют проблемы. После обрисовки, кажется довольно неплохим и логичным.
@patient а вы можете подсказать, как проверять количество новых комментариев каждый раз? Подразувевается, что я не могу каждый раз дергать количество комментариев у постов, отмеченных как отслеживаемые. Их может быть с десяток, плюс, я не один, кто отслеживает.
На самом деле вопрос давно решен (сразу после). Я упустил такую деталь как обновление количества постов при визите. Само собой что проблема надумана, так как свои посты сразу заносятся в просмотренные.. Посыпаю голову пеплом. А к таблице постов я просто добавил столбец с количеством комментариев. И при добавлении-удалении комментария к посту, я просто прибавляю или отнимаю 1 от общего числа.
В будущем возможно отдам на аутсорс, но пока меня устраивает и такая быдлоархитектура;)
Достаточно одной таблицы notifications с уником id и ключём user_id и enable; и поля в таблице notify в таблице users. Когда создаётся упоминание, то добавляем строку в таблицу notifications и ставим пометку в notify в таблице users. Когда смотрим уведомления, то меняем notify в таблице users и enable в notifications.