Database Programming & Design

       

В DB2 поддерживаются следующие типы ограничений:


  • Ограничения NOT NULLS, запрещающие неопределенным значениям

    появляться в указанном столбце

  • Ограничения UNIQUE, запрещающие наличие значений-дубликатов в

    указанном столбце или группе столбцов

  • Ограничения PRIMARY KEY, специфицирующее указанный столбец или

    группу столбцов как одновременно обладающие свойствами UNIQUE и

    NOT NULL

  • Ограничения CHECK - предикаты, такие как BONUS Раздел WITH CHECK OPTION определения представлений,

    запрещающий занесение или удаление данных через представление,

    если это противоречит определению представлению

  • Ограничения FOREIGN KEY (называемые также ограничениям

    "ссылочной целостности"), устанавливающие контролируемую системой

    связь между двумя таблицами, "таблицей-предком" и

    "таблицей-потомком". Для каждого отличного от неопределенного

    значения внешнего ключа должно иметься совпадающее с ним значение

    ключа таблицы-предка.



    Ограничения представляют собой декларативные правила. Триггер

    больше похож на "джина", который просыпается и выполняет приказы

    при возникновении определенных событий. Вот некоторые из

    возможностей механизма триггеров DB2:

  • Триггер может быть активизирован при выполнении операций

    занесения, удаления или модификации строк указанной таблицы или

    при модификации определенных столбцов таблицы.

  • Можно потребовать срабатывания триггера до или после обработки

    события, которое его активизирует.

  • Триггер может срабатывать в точности один раз при активизации

    его оператором SQL или же вызываться для каждой строки,

    изменяемой оператором SQL.

  • При активизации триггер может вычислять предикат, называемый

    "условием триггера". Тогда тело триггера выполняется только если

    его условие истинно.

  • Тело триггера может состоять из одного или нескольких

    операторов SQL. В этих операторах могут использоваться

    специальные переменные, указывающие на значения строки или группы

    строк до и после активизации триггера. Если в тело триггера

    входят операторы модификации базы данных, то авторизация


    доступа производится от имени создателя триггера, а не того

    пользователя, оператор которого активизировал триггер. Это

    позволяет создателю триггера "инкапсулировать" некоторые

    привилегии в формы, доступные менее привилегированным

    пользователям.

    Рассмотрим, например, каким образом триггер может автоматически

    поддерживать столбец данных. Предположим, что база данных

    содержит таблицу STOCKS со столбцами SYMBOL, PRICE и HIGHPRICE.

    Текущая цена всегда поддерживается в столбце PRICE. Можно

    захотеть, чтобы при изменении текущей цены в столбце HIGHPRICE

    всегда оказывалось ее максимальное значение. Этого можно достичь

    путем создания следующего триггера:

    CREATE TRIGGER stockhigh

    NO CASCADE BEFORE UPDATE ON stocks

    REFERENCING NEW AS newrow

    FOR EACH ROW MODE DB2SQL

    WHEN (newrow.highprice IS NULL OR

    newrow.price > newrow.highprice)

    SET newrow.highprice = newrow.price;


    Содержание раздела