Это было немного сложнее, чем я сначала подумал:)
Как поведение приложения / пользователя?Когда мы должны сделать большую часть работы?При вставке данных или при извлечении данных.
Мне нужно будет сделать предположения о том, какие операции будут наиболее распространенными.Я бы предположил, что выборка данных будет немного более распространенной, так как многие пользователи увидят уведомление о непрочитанных сообщениях, но только одну «вставку» нового сообщения?
Поэтому я бы поставил работу по вставке новогозамечает, но, тем не менее, это может плохо закончиться, когда пользователи начнут переходить к вашему приложению.
Но я думаю, что модель должна быть установлена перед любой оптимизацией, это более важно.Оптимизациями позже можно будет управлять, используя денормализацию , планирование и т. Д. Я бы не стал трогать триггеры, они немного прикольные ИМХО.
Я также сделаю другой подход.
Пользователь пишет новое сообщение :
Как найти непрочитанные сообщения пользователей :
- Выберите категории, которые были обновлены с тех пор, как пользователь в последний раз просматривал их (грязные?).
- Выберите все сообщения из тех категорий, которых нет в 'user_message_noticed' (см. Ниже).
Пользователь прочитал сообщение
- Вставьте строку в схему * user_message_noticed *, которая связывает сообщения и пользователей.Идентификатор категории есть, поэтому мы можем быстрее выполнить выше без дополнительного объединения.
Для всех сообщений, прочитанных из этой категории - Обновление * user_category ™ (имеет много много) сдата, когда пользователь прочитал все сообщения.
Но иногда, вы не можете уйти от выполнения реальной работы.