Вопрос

Я создаю веб-сайт управления контентом, который также включает другие функции. Когда член администратора удаляет элемент через панель администратора, я бы хотел, чтобы этот пункт был перемещен в «корзину BIN» в течение 30 дней (затем автоматически удаляется).

Какой лучший способ реализации этой функции?

Одна идея у меня было, чтобы иметь «удаленную колонку» в моем столе, а затем только показывать записи WHERE Hide=0. Отказ Однако это будет означать необходимость помнить, чтобы поставить это условие на месте каждый раз, когда я SELECT из таблицы.

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

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

Если у кого-то есть какие-либо другие идеи, это будет наиболее ценится.

Спасибо.

Это было полезно?

Решение

Большинство реализаций, которые я знаю, используя deleted Столбец (не булева, а временной меткой, поэтому вы можете сказать, когда он был удален). Да, вам нужно будет добавить это во все ваши запросы, но, возможно, вы используете слой ORM, поэтому вам нужно только добавить его один раз? Я бы предложил идти таким образом.

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

Если вы хотите использовать один RecycleBin стол, вы можете рассмотреть сериализацию рядов и положить их в value столбец вместо того, чтобы хранить все отдельные столбцы. Конечно, это только работает, если вам не нужно запросить содержимое отдельных столбцов удаленных элементов, поскольку это будет очень дорого.

Другие советы

Использование столбца из ашелет является хорошей техникой.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top