Каков наилучший способ реализовать мягкое удаление? - PullRequest
41 голосов
/ 16 сентября 2008

В данный момент мы работаем над проектом, и мы должны реализовать мягкое удаление для большинства пользователей (пользовательских ролей). Мы решили добавить поле «is_deleted = '0'» для каждой таблицы в базе данных и установить его в «1», если определенные роли пользователя нажимают кнопку удаления в определенной записи.

Для будущего обслуживания сейчас каждый запрос SELECT должен убедиться, что он не включает записи, где is_deleted = '1'.

Есть ли лучшее решение для реализации мягкого удаления?

Обновление: я должен также отметить, что у нас есть база данных аудита, которая отслеживает изменения (поле, старое значение, новое значение, время, пользователь, ip) для всех таблиц / полей в базе данных приложения.

Ответы [ 14 ]

0 голосов
/ 21 мая 2014

@ AdditionalCriteria ("this.status <> 'удалено'")

поместите это поверх вашей @ сущности

http://wiki.eclipse.org/EclipseLink/Examples/JPA/SoftDelete

0 голосов
/ 27 июня 2011

Создайте другую схему и предоставьте все это в вашей схеме данных. Внедрите VPD в новую схему, чтобы каждый запрос имел предикат, позволяющий выбирать только не удаленную строку, добавленную к нему. http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/cmntopc.htm#CNCPT62345

0 голосов
/ 16 сентября 2008

используйте представление, функцию или процедуру, которая проверяет is_deleted = 0, т. Е. Не выбирайте непосредственно в таблице на случай, если таблицу нужно будет изменить позже по другим причинам

и индексировать столбец is_deleted для больших таблиц

, поскольку у вас уже есть контрольный журнал, отслеживание даты удаления является излишним

0 голосов
/ 16 сентября 2008

Я предпочитаю сохранять столбец состояния, чтобы использовать его для нескольких различных конфигураций, т. Е. Опубликованных, личных, удаленных, needsAproval ...

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