Краткий ответ: Нет, ограничения SQL не могут сами по себе предотвратить изменение столбца Grade, если для параметра Finalized установлено значение «true» (но разрешить изменение в противном случае).
Существует несколько видов ограничений SQL : CHECK, DEFAULT, NOT NULL, UNIQUE, Primary Key и Foreign Key.
Каждый из них может ограничивать или влиять на значения столбцов, по отдельности или в комбинации, но не может препятствовать обновлению значенийэто разрешено.В частности, ни одно из этих ограничений не может предотвратить UPDATE до Grade и / или Finalized на основе предыдущих значений Grade и Finalized.
Триггер UPDATE может сделать это: сравнить новые и старые значения Grade, и еслиони отличаются и Finalized = 'true', откатите ОБНОВЛЕНИЕ с пояснительным сообщением об ошибке.
Однако приложение может и должно применять такое «бизнес-правило» более изящно.Само правило может использовать некоторые пояснения относительно того, когда значение Finalized может быть изменено.Например, разрешено ли менять оценку и одновременно устанавливать Finalized = 'false'?Логика триггера может обрабатывать такие детали, и было бы разумно установить их как отказоустойчивые, в то же время делая правила явными где-то в приложении (frontend / middleware / backend).