Может будут какие-то идеи. Есть таблица t1, в ней есть аттрибут number (primary key), другие аттрибуты и аттрибут deleted "boolean", дефолтное значение false. На основании таблицы t1 сделано вью v1, которая показывает все строки таблицы кроме тех, в которых deleted "boolean".
Столкнулся с проблемой. Пользователь вводит создаёт запись с number, потом "удаляет" созданную запись (т.е. поле deleted становится true). Она пропадает из v1, но остаётся в t1. Соответственно - при попытке снова создать запись с тем же number - мы сталкиваемся с тем, что в v1 - она есть, а в t1 - нет, т.е. пользователь думает, что может создать запись с таким номером. Решение "влоб" - при валидации number проверять его по t1, но это некрасиво.
Что бы хотелось сделать - при попытке создать запись с тем же номером, если такой номер существует и deleted 'true' - то мы обновляем запись, в т.ч. "восстанавливая" дефолтное значение аттрибута deleted, если же 'deleted' false, то такую операцию мы не выполняем.
Поскольку основная концепция этой затеи сделать так, чтобы в случае случайного удаления данных - их можно было восстановить (пускай и руками), то наверное самым норм решением будет действительно изменение схемы данных.
DELETE будет действительно удалять из t1, на него будем вешать триггер, что при удалении - удалённая строка попадает в t2, в которой number это уже не PK, куда мы также можем сохранить время удаления для упрощения поиска.