Нужно ли хранить данные в базе после их удаления пользователем?
Есть несколько связанных таблиц в БД. По ним происходит какое-то действие (например, звонок). По результатам звонка все данные аккумулируются и в виде json записываются в таблицу статистики звонков. Там сохраняются не только идентификаторы сущностей, которые были в процессе звонка, но и их контент, те делается снимок этих сущностей на момент звонка.
Если пользователь при редактировании, затем, удаляет эти сущности, нужно ли их только помечать на удаление (что требует правило целостности БД и тд.тп.), или их можно и нужно удалять, чтобы вечно не хранить все как Плюшкин?
Удаление - необратимо. Следует рассмотреть допустимость необратимого удаления с точки зрения логики предметной области. А без полной конкретизации можно сколько угодно языком чесать - толку не будет.
От чего зависит? Со временем все равно большая часть сущностей меняется, тексты правятся, связи меняются....даже, если статистика будет как-то перестраиваться, я не смогу использовать "сырые" данные сущностей, тк на момент звонка они были другие с большой долей вероятности.
Зависит от требований конкретного проекта и конкретной задачи. Иногда нужно обязательно удалять, иногда можно не удалять, иногда нельзя удалять ни в коем случае.
Вы в вопросе, на самом деле, даже не описали задачу нормально.
Вот сейчас у вас прозвучало слово "статистика" - для неё, может, и надо удалять. А может и нет - мы ведь не знаем как по бизнес-процессу удаление сущности должно влиять на эту статистику. Если бы это была не статистика, а логи, то там нельзя было бы удалять, потому что это убивает весь смысл логирования (но иногда можно, потому что логирование тоже бывает разное).
Думаю, что нашла... человеческий фактор. Нельзя думать, что все люди сознательные и ответственные, есть и нехорошие с злыми намерениями, и просто раздолбаи. Буду хранить, мало того, введу столбец с идентификатором пользователя, который удалил данные.
Если ты по tos и законам не имеешь права их дальше хранить - нужно делать безвозвратное удаление.
В остальных случаях - лучше помечать. И это, в основном, не для целостности, а для производительности и гибкости нужно (вдруг пользователь передумает и захочет восстановить, например)