@NewTypes
На себя

Как спроектировать таблицы БД для реализации уведомлений как на toster.ru или stackoverflow?

Посоветуйте как можно реализовать структуру БД, чтобы уведомлять пользователей о новых сообщениях на сайте с минимальным количеством запросов к базе?
Дело плохо вяжется. Сел разбираться и создал таблицу notifications со столбцами postid, userid. В профиль пользователя добавил столбец notify, если значение 1 - проверяем уведомления, 0 - не делаем запросов (честно, сомневаюсь в этом).
Например, пользователь зашел на страницу с id = 2. Проверям, нужно ли уведомлять пользователя, если да, проверяем в notifications таблице пользовательский id (userid) и id страницы (postid), если она есть - удаляем строку (мы уже уведомили пользователя и нам она не нужна).
Правильным ли путем иду я? А как правильно проверять все строки в таблице notifications на нахождение в них определенного пользователя, чтобы потом если он там отсутствует отмечать это в его профиле? Под правильной проверкой я подразумеваю минимум операций с базой и своевременную проверку.

Большое спасибо всем за советы!
  • Вопрос задан
  • 3658 просмотров
Решения вопроса 1
@patient
Как вариант, создание таблицы, в которую будет заноситься id пользователя, id поста, количество комментариев и дата последнего доступа к посту.

Имея такую структуру всегда можно получить список просмотренного, выбрать посты по id из этого списка и сравнить, в каких из них изменилось количество комментариев. Итого два запроса. Также при выводе постов можно получать список «просмотренного», сравнивать количество и помечать посты с новыми комментариями.

Можно ускорить используя вместо базы какое-нибудь key-value хранилище.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Достаточно одной таблицы notifications с уником id и ключём user_id и enable; и поля в таблице notify в таблице users. Когда создаётся упоминание, то добавляем строку в таблицу notifications и ставим пометку в notify в таблице users. Когда смотрим уведомления, то меняем notify в таблице users и enable в notifications.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы