Мягкое удаление

Материал из Eludia
Версия от 11:35, 4 марта 2009; Do (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

В информационных системах, как правило, ни в коем случае не надо удалять никакие данные. В смысле так, чтобы совсем DELETE. Скрывать – конечно, но удалять – нет, не надо. Стреляные воробьи из числа менеджеров-постановщиков обязательно предусматривают для каждого типа документов поле "статус" со значениями вроде "активный", "архивный", "убитый" и т. д. Если вы используете Eludia, то хранить такой статус удобно в поле fake, которое есть в каждой таблице, а фильтры на него – в каждом запросе. Поскольку положительные значения соответствуют недозаполненным записям, а нулевое – актуальным, то удалённые записи, как правило, помечаются значением -1, остальные отрицательные числа вы можете использовать по своему вкусу. Пользователи (users) с fake = -1 лишены возможности авторизоваться в системе.

Фильтр fake = 0 выделяет актуальные записи, удалённые – fake = -1, все заполненные – fake IN (0, -1). Поскольку подобные варианты фильтра нужны в очень многих выборках, его формирование внесено в функции API Eludia.pm. При этом используется значение параметра $_REQUEST {fake} Например, процедура

sql_select_all (<<EOS, {fake => 'users'});
 SELECT
  users.*
  , roles.name
 FROM
  users
  LEFT JOIN roles ON users.id_role = roles.id
 WHERE
  1=1
EOS

вернёт выборку актуальных пользователей при пустом или нулевом $_REQUEST {fake} и выборку всех заполненных пользователей при $_REQUEST {fake} = '0,-1'.