ASSERT A2 ON EMP: IF
ASSERT A2 ON EMP: IF JOB = "CLERK" THEN SAL BETWEEN 8000 AND 15000
Как и в запросах, с именем таблицы в утверждении целостности можно связывать метку. Эта метка может затем использоваться в блоках отображения внутри утверждения для определения некоторого свойства, которое соблюдаться для всех кортежей отношения, на котором основывается данной утверждение. Использование метки в условии показано в примере С5.
С5. Задать утверждение, что значение атрибут NEMPS каждой строки таблицы DEPT равно числу служащих в данном отделе.
ASSERT A3 ON DEPT X: NEMPS= (SELECT COUNT(*) FROM EMP WHERE DNO = X.DNO)
Другой класс составляют утверждения об одном или более отношениях в целом, а не об отдельных кортежах отношения. В утверждениях того класа не требуется фраза ON, так как соответствующее(ие) отношение(я) идентифицируе(ю)тся телом условия, как показано в примере С6.
С6. Задать утверждение, что ни одна строка в таблице ЕМР не может включать значение DNO, не присутствующее в таблице DEPT.
ASSERT A4: (SELECT DNO FROM EMP) IS IN (SELECT DNO FROM DEPT)
Представленные до сих пор утверждения иллюстрируют условия, которые должны соблюдаться статически. Другой класс утверждений имеет дело с переходами
(transition) в базе данных. В утверждении этого типа должно задаваться обстоятельства, при которых оно должно проверяться: при вставке, удалении или модификации кортежей в некотором отношении. Когда над кортежем данного отношения выполняется указанное действие, проверяется тело утверждени для определения допустимости такого перехода. Переход можно описать c в терминах значений OLD или NEW, которые представляют атрибуты кортежа до и после перехода. Если один оператор SEQUEL модифицирует много кортежей, условие проверяется для каждого кортежа, и, если для какого-либо кортежа утверждение нарушается, то отбрасывается весь оператор.
С7. Задать утверждение, что при каждом изменении зарплаты служащего, новая зарплата должна быть, по крайней мере, не меньше старой.
ASSERT A5 ON UPDATE OF EMP(SAL): NEW SAL >= OLD SAL
Содержание Назад Вперед