Рекомендации по удалению данных при завершении учетной записи пользователя

На сайте, который имеет достаточную долю пользовательского контента, такого как темы форума, комментарии блога, представленные статьи, личные и публичные сообщения, профили пользователей и т.д.; какова наилучшая практика в отношении того, что делать с пользовательскими данными, если пользователь завершает свою учетную запись?

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

  • Частные сообщения между пользователями - Если цепочка разговора будет удален? Если да, то как вы делаете учетную запись для случаев преследования, когда юридические необходимы доказательства?
  • Вопросы или ответы форума. Если пользователь задал вопрос, должен ли удалить весь поток? Если они ответьте на вопрос, должен ли ответ удаляться?

Я задаю этот вопрос, поскольку я внедряю учетные записи пользователей в CMS. Я знаю, что Facebook недавно столкнулся с проблемой с их изменениями в их условиях использования, но как вы уравновешиваете желание удалить с учетом потребностей и инвестиций других пользователей, которые также участвовали?

Ответ 1

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

Есть много причин для этого. Некоторые из них являются законными. У вас могут быть требования хранить данные за определенный период. Некоторые из них являются техническими. Иногда это просто защита. Возможно, вам потребуется восстановить информацию. Пользователь может запросить, чтобы их учетная запись была вновь открыта или она была заблокирована из-за спама, но это было связано с тем, что учетная запись была скомпрометирована и теперь восстановлена.

Старые данные могут быть удалены или заархивированы, но это может занять месяцы или даже годы.

Лично я просто передаю соответствующие данные столбцу состояния (например, 1 = активен, 0 = удален), а затем просто измените статус, а не удалите его в 99% случаев.

Здесь важна целостность данных. Позвольте мне привести вам пример.

Предположим, что у вас есть два объекта:

User: id, nick, name, email
Message: id, sender_id, receiver_id, subject, body

Вы хотите удалить конкретного пользователя. Что вы делаете с сообщениями, которые они отправили и получили? Эти сообщения будут отображаться в чужой папке "Входящие" или отправлены, чтобы вы не могли их удалить. Устанавливаете ли соответствующее поле в сообщении значение NULL? Это не имеет большого значения ни потому, что это сообщение действительно пришло (или перешло) к кому-то, даже если они больше не активны.

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

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

Единственными данными, которые вы можете безопасно и разумно удалить, являются дочерние данные. Это действительно разница между агрегацией и составом. Взаимодействие с пользователем и сообщением выше. Примером композиции являются House and Room. Вы удаляете Дом, и все комнаты идут. Комнаты не могут существовать без Дома. Это композиция или, в терминах отношения сущности, отношения родитель-потомок.

Но вы найдете больше примеров агрегации, чем состав (по моему опыту), поэтому вопрос становится: что вы делаете с этими данными? Это действительно сложно стереть все следы кого-то, не удаляя вещи, которые вам не нужно. Просто отметьте их как удаленные, заблокированные или неактивные и обработайте их таким образом.

Ответ 2

Вы можете просто пометить пользователя как удаленный, а затем всякий раз, когда вы показываете контент, содержащий этого пользователя, вы показываете имя как "Экс-пользователь" или что-то в этом роде.

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

Ответ 3

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

Ответ 4

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

Итак, лучше заблокируйте учетную запись, но не каскадируйте-удалите что-либо по отношению к пользователю.

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