Сифилис - Лечение кожи

Практикум — Тема 10 — Триггеры как механизм поддержки семантической целостности БД

Место триггеров в цифровой схемотехнике

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

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

логической единицы (далее — 1) или логического нуля (далее — 0). Установившиеся значения своих выходов триггер запоминает («защелкивает» их) и сохраняет, пока не возникнет очередное изменение его входных сигналов.

Задания

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

Такая схема может быть создана подключением двухвходного элемента И последовательно с каждого входом триггера. Объединив два входа элементов И, получим новый вход триггера. Добавление его означает, что выходы Q и Q̃ изменяют состояние, когда сигнал на нем является высоким, и, следовательно, он может быть использован в качестве тактового C-ввода, как показано на рисунке ниже.

Когда сигнал на С-входе находится на уровне 0, то выходы двух элементов И — также на уровне 0 (логика элемента И), независимо от состояния двух входов S и R, а два выхода Q и Q̃ «защелкнуты» в последнем установившемся состоянии.

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

  1. Изучить типы триггеров, которые могут создаваться на сервере MS SQL Server 2000.
  2. Изучить операторы описания триггеров разных типов и ограничения, накладываемые на допустимые операторы внутри тела триггера.
  3. Изучить порядок создания и методы отладки триггеров на сервере MS SQL Server 2000.
  4. Разработать пять триггеров для учебной базы данных «Библиотека», предложенных вашим преподавателем из заданий, описанных в работе.
  5. Подготовить отчет о проделанной работе в электронном виде.

Часто бывает необходимо отключить на некоторое время работу триггера без его фактического удаления. Этого можно достигнуть используя конструкцию ALTER TABLE {amp}lt;имя_таблицы{amp}gt; DISABLE TRIGGER {amp}lt;

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

Перед началом выполнения заданий напомним, что триггеры — это системные хранимые процедуры, которые связаны с конкретной таблицей. Для вызова редактора триггеров необходимо выделить таблицу, по правой кнопке контекстного меню перейти в раздел Все задачи {amp}gt; Manage triggers, и вы попадаете в редактор триггеров (рис. 1).

Рис. 1. Начальное состояние редактора триггеров при создании нового триггера

Задание 1. Разработать триггер, который удалял бы запись о книге в том случае, если удаляется последний экземпляр данной книги. Для какой таблицы вы будете писать этот триггер? При написании триггера помните, что с таблицей «Книги» у нас связаны таблицы «Авторы» и «Системный каталог».

Однако они связаны отношением «многие-ко-многим», для чего используются связующие таблицы. Удалить данные о книге нельзя, если на нее есть ссылки в этих связующих таблицах. Предусмотрите предварительное удаление данных из связующих таблиц. Проверьте работу данного триггера.

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

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

Попробовать удалить экземпляр книги, который не находится на руках у читателя.

Проверить работу двух триггеров, попробовав удалить последний экземпляр книги, который находится на руках у читателя.

Задание 3. Разработать триггер, который контролировал бы выдачу книг читателю и при превышении количества трех не сданных книг на руках не позволял бы выдать данному читателю еще одну книгу.

Задание 4. Разработать триггер, который добавлял бы один экземпляр при вводе новой книги. Действительно, мы определили, что книги у нас в каталоге присутствуют только в том случае, если они есть в нашей библиотеке, поэтому при вводе новой книги в таблицу «Экземпляр» должен добавляться один экземпляр данной книги.

Задание 5. Разработать триггер типа INSTEAD OF для таблицы «Читатели». Данный триггер должен проверять, есть ли информация хотя бы об одном из телефонов для оперативной связи с читателем, и если такой информации нет, то не вводить данные о читателе.

Задание 6. Разработать триггер, который при изменении значения поля, символизирующего присутствие экземпляра книги в библиотеке, например YES_NO, с ‘1’ на ‘0’ автоматически заменял бы значения в полях «Дата выдачи», «Дата возврата» и «Номер читательского билета» на неопределенное.

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

Задание 7. Разработать триггер, который не позволяет удалить читателя, если за ним числится хотя бы одна книга из библиотеки.

Задание 8. Разработать триггер, который при удалении экземпляра книги проверял бы, сколько экземпляров данной книги осталось в библиотеке, и если остался только один экземпляр, то повышал бы стоимость данной книги на 15 % как редкой и ценной.

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

Триггер, запоминающий входную информацию по фронту, может быть построен из двух триггеров, работающих по
потенциалу. Сигнал синхронизации будем подавать на эти триггеры в противофазе. Схема такого триггера
приведена на рисунке 12.

Рисунок 15. Схема D-триггера, работающего по фронту

Рассмотрим работу схемы триггера, приведенной на рисунке 12 подробнее. Для этого воспользуемся
временными диаграммами, показанными на рисунке 13. На этих временных диаграммах обозначение Q΄
соответствует сигналу на выходе первого триггера.

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

Рисунок 16. Временные диаграммы D-триггера

ПОДРОБНЕЕ ПРО:  Антибиотики при фурункулах на лице

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

Обратите внимание, что сигнал на выходе всей схемы в целом не зависит от сигнала на входе «D» схемы. Если
первый триггер пропускает сигнал данных со своего входа на выход, то второй триггер в это время находится в
режиме хранения и поддерживает на выходе предыдущее значение сигнала, то есть сигнал на выходе схемы тоже не
может измениться.

В результате проведённого анализа временных диаграмм мы определили, что сигнал в схеме, приведенной на
рисунке 12 запоминается только в момент изменения сигнала на синхронизирующем входе «C» с единичного
потенциала на нулевой.

Динамические D триггеры выпускаются в виде
готовых микросхем или входят в виде готовых блоков в составе больших интегральных схем, таких как базовый
матричный кристалл (БМК) или программируемых логических интегральных схем (ПЛИС).

Условно-графическое обозначение D триггера, запоминающего информацию по фронту тактового сигнала,
приведено на рисунке 12.

Рисунок 17. Условно-графическое обозначение D-триггера

То, что триггер запоминает входной сигнал по фронту, отображается на условно-графическом обозначении треугольником, изображённым на выводе
входа синхронизации. То, что внутри этого триггера находится два триггера, отображается в
среднем поле условно-графического изображения двойной буквой T.

Иногда при изображении динамического входа указывают, по какому фронту триггер (или триггеры) изменяет
своё состояние. В этом случае используется обозначение входа, как это показано на рисунке 15.

Рисунок 18. Обозначение динамических входов

На рисунке 18 а обозначен динамический вход, работающий по переднему (нарастающему) фронту сигнала. На
рисунке 18 б обозначен динамический вход, работающий по заднему (спадающему) фронту сигнала.

Промышленностью выпускаются готовые микросхемы, содержащие динамические триггеры. В качестве примера
можно назвать микросхему 1533ТМ2. В этой микросхеме содержится сразу два динамических триггера. Они изменяют
своё состояние по переднему фронту сигнала синхронизации.

Дата последнего обновления файла
22.04.2014

Классификация

1. Асинхронный RS-триггер – схема, которая изменяет состояние сразу при изменении входных сигналов. Для рассматриваемого типа устройств ими являются сигналы на информационных входах R (сброс) и S (установка).

2. Синхронный RS-триггер, управляемый статически, работа которого синхронизирована с уровнем определенного тактового сигнала.

3. Триггер по п.2 с динамическим управлением, работа которого синхронизирована с моментами появления фронтов (или спадов) тактового сигнала.

Таким образом, если изменения состояния выходов происходят только при наличии тактового сигнала, который подается на отдельный тактовый вход C, то триггер является синхронным. В противном случае схема считается асинхронной.

1. Создание триггера

Триггеры — это методы, с помощью которых разработчик приложений для MS SQL Server может обеспечить целостность базы данных. Это тип хранимой процедуры, которая активизируется при попытке изменения данных в таблице, для которой определен триггер.

SQL Server выполняет эту процедуру при операциях добавления, обновления и удаления (INSERT, UPDATE, DELETE) в данной таблице. Поскольку триггер применяется после выполнения операции, он представляет собой последнее слово в модификации.

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

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

Хотя триггер — это разновидность хранимой процедуры, его нельзя вызвать непосредственно: он реагирует только на события, для которых определен.

В MS SQL SERVER 2000 появился новый вид триггера — INSTEAD OF-триггер. Его принципиальное отличие от обычных (AFTER) триггеров состоит в том, что он выполняется не после выполнения операции вставки, изменения или удаления, а вместо нее.

Наиболее общее применение триггера — поддержка целостности в базах данных.

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

RS-триггер на логических элементах

Простейший способ его сделать – соединить вместе пару двухвходовых логических элементов И-НЕ. При этом обратная связь с выхода одного элемента подается на вход другого (см. схему ниже).

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

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

Сколько входов и выходов имеет RS-триггер? Из схемы выше видно, что он содержит S-вход и R-вход, которые служат, соответственно, для установки и сброса схемы, а также прямой Q и инверсный Q̃ выходы.

В синхронном устройстве имеется еще и вход C для тактовых импульсов.

3. Использование вложенных триггеров

Пример 1. Триггеры вставки и обновления

Эти триггеры удобны, поскольку они могут поддерживать условия ссылочной целостности и обеспечивать правильность данных перед вводом в таблицу. Обычно триггеры применяются для обновления столбцов отсчета времени или для проверки данных в определенных столбцах на соответствие требуемому критерию.

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

В приведенном ниже примере триггер выполняется всегда, когда в таблицу Sales вставляется строка или выполняется ее модификация. Если дата зака­за не находится в пределах первых 15 дней месяца, строка в таблицу не вводится.

CREATE TRIGGER Tri_Ins_Sales ON SalesFOR INSERT, UPDATEAS/* Объявить необходимые локальные переменные */DECLARE @nDayOfMonth TINYINT/* Найти информацию о добавленной записи */SELECT @nDayOfMonth = DatePart (day, i.

ord_date)FROM Sales s, Inserted iWHERE s.stor_id = i.stor_idAND s.ord_num = i.ord_numAND s.title_id = i.title_id/* Проверить критерий отказа и в случае необходимостипослать сообщение об ошибке */IF @nDayOfMonth {amp}gt;

15BEGIN/* Примечание: всегда сначала производите откат. Вы можете не знать,какого рода ошибка обработки произошла, что может вызватьнеоправданно продолжительное время блокировки */ROLLBACK TRANRAISERROR(‘Выполняются только заказы, поданные в первые15 дней месяца’, 16, 10 )END

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

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

Столбцы таблицы Inserted в точности совпадают со столбцами рабочей таблицы. Сравнение можно выполнить по столбцам, как это сделано в данном примере, где для проверки правильности дат продажи сравниваются столбцы таблицы Sales.

IF UPDATE(au_lname) AND (@@ROWCOUNT=1) BEGIN …END

Код внутри блока выполняется только в том случае, если обновляется столбец au_lname. Всегда помните, что обновляемый столбец изменяется не во всех случаях. Если возникает необходимость в каких-либо изменениях, многие приложения, включая большинство корпоративных систем, просто обновляют всю строку.

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

Операция UPDATE задействует обе системные таблицы. В таблице Inserted хранятся новые значения, а в таблице Deleted — старые. Поэтому при анализе изменений вы можете использовать обе эти таблицы.

ПОДРОБНЕЕ ПРО:  Фурункулез заразен или нет

NUM_READER = NULL

Пример 2. Триггеры удаления

Триггеры удаления (delete triggers) обычно применяются в двух случаях: предотвращение удаления строк, которое может вызвать проблемы с целостностью данных, например строки, используемой в качестве внешнего ключа к другим таблицам, и выполнение каскадных операций удаления дочерних (children) строк главной (master) строки.

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

В следующем примере использование переменной @@ROWCOUNT позволяет предотвратить удаление более одной строки. Этот триггер выполняется всегда, когда пользователь пытается удалить строку из таблицы Stores. Если информация касается продаж, то триггер препятствует выполнению этого запроса.

CREATE TRIGGER Tri_Del_Stores ON StoresFOR DELETEAS/* Проверка количества модифицируемых строк и запрещение удаления более одной строки за один раз */IF @@ ROWCOUNT {amp}gt; 1BEGINROLLBACK TRANRAISERROR (‘За один раз можно удалить только одну строку.

‘, 16, 10 )END/* Объявление временной переменной для сохранения уничтожаемой информации */DECLARE @ StorID char (4)/* Получение значения удаляемой строки */SELECT @StorID = d.stor_idFROM Stores s, Deleted dWHERE s.stor_id *= d.

stor_idIF EXISTS (SELECT *FROM SalesWHERE stor_id = @storID)BEGINROLLBACK TRANRAISERROR (‘Эта информация не может быть удалена, поскольку имеется соответствующая запись в таблице Sales.’, 16, 10)END

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

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

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

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

Пример 3. INSTEAD OF-триггеры

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

INSTEAD OF-триггеры отличаются от обычных (AFTER) триггеров тем, что они выполняются не после выполнения операции, приведшей к его срабатыванию, а вместо нее, cо всеми вытекающими последствиями, например, такими как возможность их использования совместно с ограничениями целостности.

Системные таблицы Inserted и Deleted используются в них так же, как и в AFTER-триггерах. Тело триггера может дублировать операцию, которая вызвала его срабатывание, но это не обязательное условие.

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

Приведем пример использования INSTEAD OF-триггера.

CREATE TRIGGER Check_Job ON Jobs FOR DELETE AS IF EXISTS (SELECT * FROM Employee e JOIN Deleted d ON e.job_id=d.job_id) BEGIN ROLLBACK TRAN END

Кстати, отметим, что в отличие от примера 2, этот триггер позволяет удалять сразу несколько строк. Однако такой триггер сможет работать корректно, только если разорвать связь между таблицами Employees и Jobs, чтобы перед выполнением триггера не отрабатывались DRI.

CREATE TRIGGER Check_Job ON Jobs INSTEAD OF DELETE AS DELETE FROM Jobs FROM Jobs j JOIN deleted d on d.job_id = j.job_id WHERE j.job_id NOT IN (SELECT DISTINCT Job_id FROM Employee)

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

Проверка DRI выполняется сразу при выполнении операции, то есть раньше, чем выполнение AFTER-триггера. При использовании INSTEAD OF-триггера операция по сути не выполняется, а управление передается триггеру, поэтому DRI не будет выполняться.

Как уже было сказано, таблица Inserted содержит добавленные строки, а таблица Deleted — удаленные. Нетрудно догадаться, что при выполнении операции изменения будет использована и таблица Inserted, и таблица Deleted.

Триггеры можно встраивать друг в друга. Допускается 32 уровня вложенности. Если операции вложенного триггера нежелательны, SQL Server можно сконфигурировать так, чтобы отключить их.

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

Примечание: Уровень вложенности триггера можно проверить в любое время, опросив значение, установленное в переменной @@NESTLEVEL. Оно должно находиться а пределах от 0 до 32.

Вложенные триггеры могут привести к рекурсии. Рекурсия бывает двух видов — прямая и косвенная. Прямая рекурсия получается в случае, если срабатывание триггера приводит к изменениям, которые вновь вызывают его же.

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

Прямую рекурсию можно отключить (и включить) с помощью опции базы данных RECURSIVE_TRIGGERS. Отключить (и включить) косвенную рекурсию, равно как и вложенность триггеров вообще, можно с помощью серверной опции nested triggers.

Следует отметить, что INSTEAD OF-триггеры по своей природе не подвержены прямой рекурсии.

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

Состояние «Установлен»

Рассмотрим, как происходит работа RS-триггера в этом состоянии, задаваемом значениями R = 0 и S = 1. Поскольку на вход R элемента И-НЕ Y подан уровень 0, то Q̃ =1 (логика И-НЕ). С выхода Y сигнал Q̃ также подан обратно на элемент X (вход «A»). Поскольку S = A = 1, то Q = 0.

Если устанавливается R = 1, а вход S по-прежнему равен 1, то на входах Y имеем B = 0 и R = 1, а его выход Q̃ =1, т. е. он не изменился. Итак, если S = 1, то RS-схема триггера «защелкивается» в состоянии «Установлен» Q = 0 и Q̃ = 1, а смена сигнала R его не изменяет.

В этом втором устойчивом состоянии Q̃ = 0, а Q = 1, и задается оно входами R = 1 и S = 0. Поскольку у элемента Х вход S = 0, то его выход Q =1 (логика И-НЕ). Сигнал Q подается обратно на элемент Y (вход «В»), и так как R = B = 1, то Q̃ = 0.

ПОДРОБНЕЕ ПРО:  Мазок на впч у женщин

Если S становится равен 1 при R = 1, то Q̃ остается равен лог 0, т. е. он не изменяется. Итак, при R =1 схема триггера снова «защелкивается» в состоянии «Сброшен» Q̃ = 0 и Q = 1, сохраняемом при любом сигнале S.

Выходной
сигнал Q сохраняется до прихода оче­редного тактового импульса. При чем эта
информация хранится в D-триггере, пока не придет следующий бит (0 или 1) информации.
По сути это ячейка памяти.

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

Одним из них является SQL Server Enterprise Manager, другим — системные процедуры sp_help и sp_depends. Для того чтобы посмотреть текст триггера через Enterprise Manager, выполните следующие действия:

  1. В Enterprise Manager выберите сервер и базу данных, с которой вы хотите работать.
  2. Откройте таблицу в режиме проектирования командой Design Table и в ее окне нажмите кнопку Triggers на панели инструментов.
  3. Появится диалоговое окно создания триггера, где можно посмотреть текст любого из установленных триггеров.

Системные хранимые процедуры sp_help и sp_depends уже были описаны в теме «Хранимые процедуры».

Для того чтобы изменить функциональность триггера, можно либо удалить его и создать новый с соответствующими изменениями, либо изменить уже существующий. Для того чтобы изменить существующий триггер в T-SQL существует команда ALTER TRIGGER.

Можно также изменить триггер с помощью Enterprise Manager. Для этого после входа в Enterprise Manager надо просто внести изменения и применить их.

Рис. 5.D-триггер синхронизируемый
фронтом (динамическое управление). Условное обозначение и временные диаграммы.

Если вход D
замкнуть с инверсным выходом, то останется только один вход С. При подаче на
вход С импульсов триггер переключается в противоположное состояние. Таким образом,
триггер осуществляет деление частоты входных импульсов на 2. В таком режиме
D-триггер работает счетным или Т-триггером.

Сводим результаты в таблицу

Состояние S R Q Описание
Установка 1 1 Выход Q̃ =1
1 1 1 без изменений
Сброс 1 1 Выход Q̃ =0
1 1 1 1 без изменений
Недопустимое 1 1 состояние ошибки

Видно, что когда S = R = 1, то Q и Q̃ могут быть равны как 1, так и 0 (но не одновременно!) в зависимости от уровней входов S или R перед возникновением данного состояния выходов. Таким образом, при условии S = R = 1 нельзя изменить состояние выходов Q и Q̃. Оно может измениться только при смене уровня с 1 на 0 на одном из входов.

Значение S = R = 0 является нежелательным или недопустимым состоянием, и его следует избегать. Состояние S = R = 0 вызывает установку обоих выходов Q и Q̃ на уровне 1, в то время как состояние Q̃ всегда должно быть обратно Q.

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

Результатом является то, что триггер теряет контроль над Q и Q̃, и если два входа теперь перейдут к состоянию 1, то схема становится неустойчивой и переключается в неопределенное состояние.

5. Удаление триггеров

DROP TRIGGER [владелец.]имя_ триггера [,… n]

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

DROP TRIGGER Tri_Del_Authors

Диаграмма переключения RS-триггера

Сказанное в предыдущем разделе иллюстрирует следующая диаграмма переключения.

Как видно, при S = R = 0 возникает дисбаланс (неопределенность) состояния выходов. Он может привести к переключению одного из выходов быстрее, чем другого, в результате чего произойдет переключение триггера в то или иное состояние, которое может не совпадать с требуемым, и данные будут повреждены. Это неустойчивое состояние обычно называют мета-стабильным.

Таким образом, подобный триггер-защелка может быть переведен в состояние «Установлен» путем подачи 0 на его S-ввод (при наличии 1 на R-вводе) и переведен в состояние «Сброшен» подачей 0 на R-ввод (при наличии 1 на S-вводе).

Переключение состояния выходов происходит с небольшой задержкой относительно изменения сигнала на одном из входов без использования тактового сигнала. Следовательно, рассмотренная выше схема представляет асинхронный RS-триггер.

Модифицируем схему триггера

Как мы видели выше, базовые элементы И-НЕ рассмотренного RS-триггера работают так, что при его установке Q̃ = 1 и Q = 0, а при его сбросе Q̃ = 0 и Q = 1, хотя логичнее было бы в первом состоянии иметь Q = 1, а во втором — Q = 0.

Таким образом, для правильной работы схемы триггера его входные сигналы нужно проинвертировать. Тогда переключения его состояний будут происходить при подаче положительных входных сигналов. Для этого в схему нужно добавить два дополнительных И-НЕ элемента, присоединенных как инверторы к S̃- и R̃-входам, как показано на рисунке ниже. Здесь на входах элементов И-НЕ уже представлены инверсные входные сигналы.

Так же, как и с использованием И-НЕ элементов, можно построить простой RS-триггер с использованием двух ИЛИ-НЕ элементов, соединенных по такой же схеме. Она будет работать аналогичным образом, как и рассмотренная выше схема И-НЕ.

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

Регистры на триггерах

RS-триггер способен сохранять 1 бит цифровой информации. Если необходимо хранить несколько бит, например, цифровое двоичное слово из нескольких двоичных разрядов (в микроконтроллерах обычно 8 или 16), то триггеры могут соединяться параллельно, образуя регистры.

Это простейшие устройства для временного хранения набора двоичных цифровых разрядов, в которых каждый триггер сохраняет значение одного разряда (0 или 1. т. е. один бит). Так, показанный ниже 4-разрядный регистр на RS-триггерах содержит четыре отдельных триггера.

Любое двоичное число от (0000)2 до (1111)2 может быть сохранено в этом регистре просто путем установки или сброса соответствующего триггера. Давайте предположим, что первый триггер установлен (Q1 = 1), второй сброшен (Q2 = 0), третий также сброшен (Q3 = 0), а четвертый установлен (Q4 = 1). Тогда двоичное число, записанное в регистр, будет (1001)2.

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

Практикум - Тема 10 - Триггеры как механизм поддержки семантической целостности БД

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

Adblock
detector