Во многих базах данных, над которыми я сейчас работаю, я не могу просто удалить запись по ряду причин, в том числе и позже, когда они могут отображаться позже (например, продукта, которого больше нет) или просто ведение истории того, что было.
Итак, мой вопрос, как лучше всего истечь запись.
Я часто добавляю столбец date_expired
, который является полем даты и времени. Обычно я запрашиваю либо где date_expired = 0
, либо date_expired = 0 OR date_expired > NOW()
, в зависимости от того, истекает ли срок действия данных в будущем. Аналогично этому, я также добавил поле вызова expired_flag
. Если для этого параметра установлено значение true / 1, запись считается просроченной. Это, пожалуй, самый простой способ, хотя вам нужно помнить о необходимости включать выражение expire в любое время, когда вам нужны только текущие элементы.
Другой метод, который я видел, - это перемещение записи в архивную таблицу, но это может стать довольно грязным, когда существует большое количество таблиц, которым требуются таблицы истории. Это также усложняет извлечение значения (скажем, страны), поскольку сначала необходимо выполнить левое соединение (например), а затем выполнить второй запрос, чтобы найти фактическое значение (или повторить запрос с измененным левым соединением).
Другой вариант, который я еще не видел и не пытался полностью сам, - это иметь таблицу, которая содержит либо все данные из всех записей с истекшим сроком действия, либо некоторую их форму - какую-то таблицу истории. В этом случае поиск будет еще более сложным, поскольку вам потребуется поискать, возможно, массивную таблицу, а затем анализировать данные.
Есть ли другие решения или модификации, которые лучше?
Я использую MySQL (с PHP), поэтому я не знаю, есть ли у других баз данных более эффективные методы для решения этой проблемы.