Изменение строк в той же таблице

Изменение строк в той же таблице

Прежде чем решать вопрос об использовании триггера для изменения строк в той же самой таблице, внимательно рассмотрите возможность завершения цикла вложенной деятельности. Если триггер выполняет действие, которое приводит к вызову этого же триггера, или это действие вызывает другой триггер, который выполняет действие, вызывающее данный же триггер, то результатом будет бесконечный цикл. По этой причине важно убедиться, что действия триггера никогда не приведут к вызову триггером самого себя, даже опосредованно.

Если при проектировании базы данных вы подошли к моменту, когда вам нужно написать триггер, который реализует зависимости данных между строками одной и той же таблицы, то, скорее всего, это сигнал о неправильной нормализации таблиц, если только эта зависимость не относится к иерархической структуре. Если фрагмент структуры строки влияет на (или на него влияет) изменение состояния другой строки, то такой сегмент должен быть в результате нормализации перенесен в другую таблицу с внешним ключом для поддержания правила зависимости.

Ссылающиеся на себя таблицы и деревья

Ссылающиеся на себя таблицы, которые реализуют древовидные структуры[125], являются особым случаем[126]. Каждая строка в подобной таблице является узлом дерева и может иметь зависимые строки. Любой узел потенциально может иметь две роли: одна- роль родителя для узлов ниже него, а другая - роль потомка узла более высокого уровня. Триггеры, скорее всего, будут нужны для всех событий DML: для модификации поведения ограничений ссылочной целостности и для поддержания мета- таблиц (графов), используемых в некоторых иерархических алгоритмах, делающих доступной запросам геометрию дерева. Триггеры для деревьев всегда должны быть спроектированы с условиями и переходами, которые защищают структуру от бесконечных циклов.

Изменение той же строки

Никогда не пытайтесь использовать оператор SQL для изменения или удаления той же самой строки, с которой оперирует триггер. Например, не рекомендуется использовать следующий вариант:

CREATE TRIGGER 0_30_SILLY FOR ATABLE

BEFORE UPDATE

AS

BEGIN

UPDATE ATABLE SET ACOLUMN - NEW.ACOLUMN

WHERE ID = NEW.ID;

END ^

Всегда используйте переменные NEW для модификаций в той же строке и никогда не пытайтесь удалять ту же строку в триггере.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Просмотр записей в таблице 

Из книги автора

Просмотр записей в таблице  После того как мы произвели копирование записной книжки в таблицу Phone.dbf, возникает естественное желание просмотреть из сценария введенные записи. Напишем для этой цели сценарий ListRecords1.js, результат работы которого представлен на рис. 9.10. Рис.


6.5 Хост в таблице маршрутизации IP

Из книги автора

6.5 Хост в таблице маршрутизации IP Предположим, что нужно переслать данные:Из: 130.15.12.131В: 192.45.89.5Быстрая проверка маски подсети показывает, что система назначения не принадлежит локальной подсети. В этом случае IP должен обратиться к локальной таблице маршрутизации.Таблица


7.2.6. Создание пользовательских цепочек в таблице filter

Из книги автора

7.2.6. Создание пользовательских цепочек в таблице filter Итак, у вас перед глазами наверняка уже стоит картинка движения пакетов через различные цепочки, и как эти цепочки взаимодействуют между собой! Вы уже должны ясно представлять себе цели и назначение данного сценария.


Редактирование текста в таблице

Из книги автора

Редактирование текста в таблице Работа с текстом, находящимся внутри таблицы, практически ничем не отличается от работы с обычным текстом. Для данных таблицы можно устанавливать любое форматирование, использовать привычные команды редактирования. Для перемещения


5.4. Сортировка данных в таблице

Из книги автора

5.4. Сортировка данных в таблице Сортировка данных – это одна из наиболее важных команд для организации таблицы. Целью сортировки часто является упорядочивание записей на основе выбранного критерия. Часто сортировку используют, если данные в таблице набирались


Изменение высоты строк

Из книги автора

Изменение высоты строк В некоторых случаях вам придется изменять высоту строк. Возможно, вы захотите увеличить размер шрифта содержимого какой-либо ячейки или разместить несколько строк текста в одной ячейке. Чтобы на экране или в распечатанном документе отображалось


Изменение столбцов в таблице

Из книги автора

Изменение столбцов в таблице Существующие столбцы в таблице могут быть изменены в нескольких отношениях, а именно:* имя столбца может быть изменено на другое имя, не используемое в таблице;* столбец может быть "перенесен" на другую позицию в системе упорядочивания


Форматирование текста в таблице

Из книги автора

Форматирование текста в таблице Текст, который вы будете вводить в таблицу, можно форматировать так же, как обычный, размещенный в документе Word, – можно изменять его шрифт, устанавливать формат абзаца, тип выравнивания и т. д.При этом надо научиться правильно выделять


Примечание к таблице 1

Из книги автора

Примечание к таблице 1 Передо мной стоит практически невыполнимая задача - на двух страницах внятно рассказать о четырех ноутбуках, на каждый из которых нужно как минимум по полосе. Проще всего привести таблицу спецификаций и проиллюстрировать ее фотографиями, однако


Ввод и форматирование текста в таблице

Из книги автора

Ввод и форматирование текста в таблице Для начала ввода текста в таблицу щелкните кнопкой мыши на нужной ячейке, чтобы установить в нее текстовый курсор, после чего начинайте набор текста. Если текст не будет помещаться в ячейку, ее высота автоматически увеличится, а


Типы данных в таблице

Из книги автора

Типы данных в таблице Для создания таблицы нужно знать названия необходимых полей и тип данных в каждом из них. Решение об использовании полей того или иного типа обычно принимается при проектировании базы данных, причем каждое поле должно содержать определенный тип