Ах, это напоминает мне кое о чем, что я делал в моем предыдущем запуске Pageflakes. Нам приходилось выдавать оповещения, уведомления отдельным пользователям и позволять каждому пользователю отмечать их как прочитанные.
Во-первых, мы думали сделать это обычным способом. создать таблицу уведомлений, имеющую идентификатор пользователя, заголовок уведомления и флаг чтения. Но это сильно фрагментируется со временем, становится все медленнее и медленнее, и индексы необходимо перестраивать и т. Д., Поскольку миллионы уведомлений добавляются / обновляются / удаляются.
Итак, мы выбрали альтернативу. Мы добавили таблицу уведомлений с идентификатором пользователя, но в ней есть гигантский столбец char, в котором содержится XML, содержащий все уведомления, которые может видеть пользователь. Поскольку вам никогда не нужно выполнять поиск среди пользователей, один пользователь всегда будет смотреть только на уведомления этого пользователя. Это означает, что таблица уведомлений может в худшем случае иметь такое же количество строк, что и пользовательская таблица, и никогда больше. И мы не добавляем / не обновляем / не удаляем строки в этой таблице часто, поэтому нет проблем с фрагментацией БД, перестроением индекса и т. Д.
Вы можете попробовать то же самое. Создайте таблицу уведомлений, которая имеет:
Notification:
=============
UserID int FK to user table
RecentNotifications char(4000)
ArchivedNotifications char(4000)
В RecentNotifications вы храните XML, содержащий уведомления, которые необходимо показать пользователю. Архивные уведомления содержат архивные сообщения, которые пользователь может видеть, когда пользователь переходит на какую-либо страницу уведомлений.
Вы можете использовать xml для его хранения:
<notifications>
<notification title="" datetime="" read="yes/no" />
</notifications>
Это отвечает на ваш вопрос?