2008-11-17 2 views
2

Каков наилучший способ определить, просмотрел ли пользователь кусок данных, например, как обновление комментария. Эти два решения я думал о них являются ....Лучший способ определить, просмотрел ли пользователь данные

  1. Используйте отдельную таблицу, которая имеет строку для каждого пользователя и идентификатора данных просматриваемого и вставок в когда элемент последнего просмотра.

  2. Используйте ту же таблицу и добавьте строку для каждого пользователя, когда элемент будет изменен, и удалите эту строку, когда пользователь действительно просмотрит данные.

Оба метода решить эту проблему, но в растворе 2 максимальные строки для таблицы не будет в худшем случае равно, что из раствора 1, никто рассматривать ничего, а в лучшем случае имеет 0 строк, все было просмотрено. Я знаю, что в решении 2 вы не можете определить, когда он был просмотрен.

Мысли?

Редактировать: Я использовал сообщение для обновления в качестве примера. В реальном приложении новые пользователи не ожидали бы просмотра или чтения старых данных. Для них это ничего не значит, потому что они просто присоединились.

ответ

3

Это должен быть вариант 1:

Таблица 1 (комментарий)

  • comment_id
  • комментарий

Таблица 2 (comment_view)

  • comment_id
  • user_id

Вариант 2 не будет работать, потому что каждый новый пользователь будет иметь каждый существующий комментарий «отмечен читать.»

3

Вам нужно знать, когда и сколько раз они просматривали кусок данных?

Если нет, я бы сохранил таблицу с FK обновленной информацией и FK для пользователя. затем простую проверку, чтобы посмотреть, не просмотрели ли они:

select count(*) from DataAlerts where dataid = 1 and userid = 1 

при обновлении данных вставить записи для данных и пользователей.

, когда пользователь просматривает удаление этого пользователя.

2

Вариант 1 является лучшим подходом здесь - как правило, удаление чего-либо, указывающее на то, что что-то произошло, - это странный способ делать что-то в базе данных, и, как указано выше, ng.mangine, он даже не работает (если только вы добавляйте строки в эту таблицу каждый раз, когда есть новый пользователь, но THAT почти наверняка является узким местом и главной проблемой - подумайте о том, что произойдет, когда у вас есть миллион комментариев и новый пользователь присоединяется).

Вариант 1 намного яснее; только подумайте об изменении его, если вы столкнулись с проблемами производительности (или если вам известно заранее, что ваш трафик потребует более оптимизированной стратегии, такой как бит-векторы по каждой теме, представляющей чтение/непрочтение для каждого пользователя системы).

1

Вариант 2 представляет собой необычного способа делать вещи, которые в мире база данных являются способом сказать это мощи работать, но это, вероятно, лучше идти с более традиционным подходом, как Вариант 1.

Смежные вопросы