Ответ 1
Вообще говоря, с базами данных вы редко удаляете что-либо. Вы можете пометить его как удаленный, но, как правило, вы храните его в своей базе данных хотя бы какое-то время.
Есть много причин для этого. Некоторые из них являются законными. У вас могут быть требования хранить данные за определенный период. Некоторые из них являются техническими. Иногда это просто защита. Возможно, вам потребуется восстановить информацию. Пользователь может запросить, чтобы их учетная запись была вновь открыта или она была заблокирована из-за спама, но это было связано с тем, что учетная запись была скомпрометирована и теперь восстановлена.
Старые данные могут быть удалены или заархивированы, но это может занять месяцы или даже годы.
Лично я просто передаю соответствующие данные столбцу состояния (например, 1 = активен, 0 = удален), а затем просто измените статус, а не удалите его в 99% случаев.
Здесь важна целостность данных. Позвольте мне привести вам пример.
Предположим, что у вас есть два объекта:
User: id, nick, name, email
Message: id, sender_id, receiver_id, subject, body
Вы хотите удалить конкретного пользователя. Что вы делаете с сообщениями, которые они отправили и получили? Эти сообщения будут отображаться в чужой папке "Входящие" или отправлены, чтобы вы не могли их удалить. Устанавливаете ли соответствующее поле в сообщении значение NULL? Это не имеет большого значения ни потому, что это сообщение действительно пришло (или перешло) к кому-то, даже если они больше не активны.
Вам лучше просто пометить этого пользователя как удаленный и сохранить их. Это облегчает эту и подобные ситуации.
Вы также указываете темы форума и так далее. Вы также не можете удалить их (если нет других причин для этого, таких как спам или злоупотребление), потому что они являются контентом, связанным с другим контентом (например, сообщениями форума, на которые были получены ответы).
Единственными данными, которые вы можете безопасно и разумно удалить, являются дочерние данные. Это действительно разница между агрегацией и составом. Взаимодействие с пользователем и сообщением выше. Примером композиции являются House and Room. Вы удаляете Дом, и все комнаты идут. Комнаты не могут существовать без Дома. Это композиция или, в терминах отношения сущности, отношения родитель-потомок.
Но вы найдете больше примеров агрегации, чем состав (по моему опыту), поэтому вопрос становится: что вы делаете с этими данными? Это действительно сложно стереть все следы кого-то, не удаляя вещи, которые вам не нужно. Просто отметьте их как удаленные, заблокированные или неактивные и обработайте их таким образом.