Может быть трудно сделать это с constraints
на реальном столе без использования trigger
или instead of trigger
(как любезно прокомментировал Эдвард), что звучит как куча проблем в будущем. Тьфу.
Я бы предложил следующее:
- ограничить разрешения для таблицы, чтобы люди не могли вставлять / обновлять таблицу
- используйте
stored procedure
для вставки / обновления
- поместите бизнес-логику, изложенную в вашем вопросе, в
stored procedure
Таким образом, ваши данные должны быть в безопасности от нежелательных обновлений, однако разработчики приложений могут просто выбросить свои данные в базу данных: ваш stored procedure
. Затем вы также можете красиво обрабатывать ошибки (люди, пытающиеся нарушить вашу бизнес-логику).
Обратите внимание, что если вы планируете обрабатывать большие объемы данных, стоит приложить усилия для оптимизации вашего stored procedure
.