Если вы используете ASP.NET MEmbership и анонимный поставщик для анонимных пользователей, то каждый анонимный пользователь получает строку, созданную в таблице aspnet_Users, как только вы скажете Profile.Save(). В этом случае вы можете отслеживать как анонов, так и зарегистрированных пользователей, просматривающих определенную страницу. Все, что вам нужно сделать, это записать идентификатор пользователя aspnet_user и QuestionID.
Однако я категорически не рекомендую это делать на уровне базы данных, так как он может взорвать вашу базу данных. Если у вас 10 000 вопросов и 1000 зарегистрированных пользователей и 100 000 анонимных пользователей, и если каждый пользователь посещает 10 вопросов в среднем, то в итоге вы получите 1M строк в таблице отслеживания. Достаточно немного нагрузки.
Кроме того, выполнение SELECT COUNT() в таблице отслеживания - это довольно определенная загрузка базы данных, особенно вы делаете это почти на каждом просмотре страницы на своем форуме. Лучше всего держать счетчик в таблице вопросов по каждому вопросу. Всякий раз, когда вы получаете уникального пользователя, который смотрит на страницу, вы просто увеличиваете счетчик.
Также не создавайте отношения FK к таблице пользователей из таблицы отслеживания. Вам нужно будет очистить таблицу aspnet_users, так как она со временем закроет много анонимных пользователей, которые, скорее всего, никогда не вернутся. Таким образом, страница отслеживания должна иметь только поле userID и FK. Кроме того, вам придется очищать таблицу отслеживания с течением времени, а также продолжать получать миллионы строк. Вот почему счетчик TotalView должен находиться в таблице «Вопрос» и никогда не использовать SELECT COUNT() для вычисления количества просмотров при отображении страницы.
Ответит ли это на ваш вопрос?
Помог ли вам этот ответ? – oazabir