SQL - улучшить схему для подсчета непрочитанных сообщений - PullRequest
2 голосов
/ 29 марта 2012

У меня есть простая схема сообщений, где «поток» связывает 2 или более пользователей с потоком сообщений. Каждое сообщение принадлежит одной теме. Он работает так же, как SMS-сообщения или сообщения Facebook.

Мне нужно только посчитать, сколько потоков имеют новые сообщения для данного пользователя. Когда пользователь открывает поток, мне нужно обновить базу данных (только для этого пользователя), указывая, что он посмотрел на поток. Учитывая эти 2 таблицы, как мне улучшить мою схему для хранения данных «обновленного потока» для каждого пользователя в каждом потоке?

MessageThreads:
ThreadId
lastUpdated

MessageThreadUsers:
threadFK
userFK

Я подумываю добавить эту таблицу (но есть ли лучший способ ???)

UserThreads
userFK
threadFK
lastChecked

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Вы должны иметь возможность просто добавить столбец lastChecked в таблицу MessageThreadUsers.Затем вы можете сравнить это значение с полем lastUpdated в MessageThreads, чтобы определить, есть ли у пользователя новые сообщения.Или что-то вроде ниже должно дать вам общее количество новых сообщений.

SELECT COUNT(mtu.*) FROM MessageThreadUsers mtu JOIN MessageThreads mt ON mt.threadID = mtu.threadFK WHERE mtu.lastChecked < mt.lastUpdated GROUP BY mtu.userFK
0 голосов
/ 29 марта 2012

А как насчет логического значения unread в MessageThreads? Когда поток обновляется, unread устанавливается на true. Когда пользователь проверяет поток, установите его на false.

Просто мысль.

...