Триггер не будет работать для этого. Предположительно, вам понадобится какой-то способ определить, к какой таблице (посещенная, неработающая, отфильтрованная, посещающая) ссылка должна быть перемещена при ее удалении, но нет способа сообщить триггеру, куда должна перейти ссылка.
Вы можете использовать пару не триггерных функций для инкапсуляции процесса, подобного этому:
- Ссылка переходит в таблицу ссылок.
- Переместить ссылку на «посещающую» таблицу.
- В зависимости от результата попытки ссылки, переместите ее из таблицы «посещение» в таблицы «посещение», «сломано» или «отфильтровано».
Вы можете использовать хранимую процедуру, чтобы позаботиться о каждом из переходов, но я не знаю, выиграете ли вы что-нибудь по сравнению с инструкциями INSERT ... SELECT
и DELETE
.
Однако, если у вас действительно есть что-то для триггеров (и, эй, кому не нравятся триггеры?), То вы можете использовать свою исходную таблицу из шести столбцов, добавить метку времени последнего доступа и периодически делать какие-то до:
delete from link_table
where last_accessed < some_time
and (visited = 't' or filtered = 't' or broken = 't')
Тогда вы могли бы использовать триггер DELETE для перемещения ссылки на одну из ваших архивных таблиц на основе логических столбцов.