У нас есть база данных на основе PostgreSQL для нашей информационной системы, которую мы сейчас разрабатываем.Так как вопрос об удалении является тем, что я не хотел бы полностью решить, это начинает беспокоить меня, так как проект уже запущен, база данных медленно заполняется, и наступает момент, когда пользователи действительно захотят удалить не относящиеся к делу данные..
В нашем случае, что будет удалено пользователями, это своего рода «работа», которую мы выполняем для наших клиентов.Как только работа завершена, пользователи обычно не хотят, чтобы она была указана на веб-странице, поэтому они удаляют ее.Сначала (когда система находилась в фазе тестирования, чтобы не было никакого вреда), удаление пользователя было настоящим УДАЛЕНИЕМ из базы данных.Поскольку он был прекрасно настроен на каскад до самого низа нашего графа сущностей, он действительно удалил все.И тоже заняло много времени.Теперь, когда мы начали использовать систему по-настоящему, я боялся случайных удалений и сделал невозможным для пользователей что-либо удалять.
Я думаю, что самый важный вопрос: «Что именно означает« удаление »работы в нашей сфере бизнеса?»В нашем случае есть два момента:
- Пользователи больше не хотят видеть список работ (если они явно не запрашивают список старых работ, который я поэтому должен сохранить)
- Некоторые данные задания утеряны навсегда, и сохраняется только некоторый базовый обзор статуса задания
Я прочитал много статей о том, почему мягкое удаление хорошо, и много опочему это не так (например, здесь ).То, что мне кажется лучшей альтернативой, - это перемещение удаленного задания в какую-либо архивную таблицу.В то же время я бы удалил данные задания, которые больше не нужны.Хорошим следствием этого является то, что мне не придется настраивать все мои запросы для обработки какого-либо столбца «DeletedOn», и основная таблица заданий не будет загромождена неактивными заданиями.
Проблема, с которой я столкнулся при этомэто скорее технический вопрос: если я все еще хочу сохранить ссылки на другие объекты на удаленную работу, каков наилучший способ сделать это?Поскольку у меня есть внешние ключи для таблицы заданий, настроенной в других объектах, я не могу просто переместить задание в другую таблицу, DB не разрешит мне.
Каков обычный и хорошо проверенный подход к этому?