
Замечание
Для таблиц не должны действовать ограничения ссылочной целостности, заданные на физическом уровне, например, так:
CONSTRAINT rStoreCards
FOREIGN KEY (C_Code2) REFERENCES Store
В противном случае при попытке удалить запись из главной таблицы генерируется исключение. Если есть такие ограничения, то их можно удалить, например, с помощью программы SQL Explorer.
Аналогичным способом можно реализовать и обновление столбцов связи (ключевых столбцов) связанных таблиц, заключающееся в том, что при изменении значения столбца связи главной таблицы соответственно изменяются значения столбца связи всех связанных записей подчиненной таблицы.
Например: CREATE TRIGGER ChangeStore FOR Store
ACTIVE BEFORE UPDATE
AS
BEGIN IF (OLD.S_Code <> NEW.S_Code)
THEN UPDATE Cards
SET C_Code2 = NEW.S_Code
WHERE C_Code2 = OLD.S_Code;
END
При изменении столбца S_code, используемого для связи главной таблицы store с подчиненной таблицей cards, автоматически изменяются значения столбца связи C_code2 соответствующих записей подчиненной таблицы.
Замечание
Чтобы столбец связи главной таблицы можно было редактировать, по нему не должен быть создан ключ. Если ключ создан, то его следует удалить, например, с помощью программы SQL Explorer. Более кардинальным решением проблемы является создание таблицы заново с помощью инструкции ALTER TABLE.
Поскольку использование триггеров не допускает существования ограничений на физическом уровне (при определении структуры таблиц), необходимо обеспечить также занесение значения в столбец связи подчиненной таблицы при добавлении в нее новой записи.
Создание генераторов
Напомним, что, в отличие от базы данных Paradox, для таблиц InterBase отсутствует автоинкрементный тип, обеспечивающий автоматическую установку уникальных значений. Поэтому для обеспечения уникальности значений ключевых столбцов совместно с триггерами используются генераторы. Генератор возвращает уникальное целочисленное значение.
С помощью языка SQL-сервера можно создать генератор и установить для него начальное значение.
Генератор создается следующией инструкцией:
CREATE GENERATOR <Имя генератора>;
Начальное значение задается инструкцией:
SET GENERATOR <Имя генератора> ТО <Начальное эначение>;
Начальное значение представляет собой целое число, начиная с которого формируется числовой ряд.
Обращение к созданному генератору выполняется с помощью функции: GET_ID
(<Имя генератора>,<Шаг>);
Эта функция возвращает значение, увеличенное на целочисленный шаг относительно предыдущего значения генератора