как хранить упоминания пользователей - PullRequest
2 голосов
/ 22 сентября 2011

Я хочу реализовать упоминания пользователей с @username, как в Twitter.Но в моем приложении имя пользователя может измениться.Мой подход заключается в том, чтобы проанализировать сообщение перед сохранением в базу данных и преобразовать все @username в @userId.Что ты думаешь об этом?У кого-нибудь есть лучшая альтернатива?

Ответы [ 3 ]

5 голосов
/ 22 сентября 2011

Сохраните исходный текст, как есть, и создайте таблицу связанных записей с uid и именем пользователя.

Пример схемы:

post [table]

id
text

user_mention [таблица]

id
post_id
user_id_mentioned
user_name_mentioned

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

Если пользователь меняет свое имя пользователя, у вас теперь есть опция для обновления сообщения с помощьюновое имя пользователя или имеющая ссылку на старое имя пользователя для правильного пользователя.

Мое правило - никогда и никогда не изменять оригинальный неструктурированный текст перед сохранением в базе данных (но проверяйте его наизбегайте инъекций и прочего) и изменяйте данные only на выходе.Это означает, что у вас всегда есть введенные пользователем данные, и вы никогда не знаете, когда они будут полезны.

Может быть, однажды вас заинтересует, кто менял свое имя пользователя после того, как его упомянули n раз?Или другой отчет, который вы не можете получить, потому что вы изменили неструктурированные данные.Вы никогда не знаете, когда вам понадобятся исходные данные, и в этом случае вы получаете дополнительный бонус, заключающийся в том, что с вашим текстом легче работать.

0 голосов
/ 22 сентября 2011

Да, я думаю, что это хорошо. Сам Twitter не просто использует Usernames, он использует UserIDs.

Он получает идентификатор пользователя твитера, а затем ищет его, чтобы получить фактическое имя пользователя.

Документация: Упоминает и Поиск

Каждый пользователь должен иметь уникальный идентификатор. Вы должны сопоставить идентификаторы с именем пользователя, прежде чем отправлять его в любое место, которое будет видно пользователям.

0 голосов
/ 22 сентября 2011

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

Обратите внимание, что это будет сложнее для не динамического контента, такого как отправленные электронные письма и т. Д.

Кроме того, я хотел бы убедиться, что имена пользователей отображаются таким образом, чтоясно, что это не слова, опубликованные ОП, в противном случае пользователи могли бы вставлять текст в чужие сообщения.

...