- •Примерный перечень вопросов и типовых заданий для промежуточного контроля по учебной дисциплине «Базы данных»
- •Тема 1. Введение, основные понятия определения. Этапы развития баз данных. Принципы организации современных бд и субд
- •Тема 2. Реляционная модель данных, реляционная алгебра
- •Тема 3.Язык sql. Формирование запросов к базе данных
- •Тема 4. Операторы манипулирования данными языке sql
- •Тема 5. Проектирование баз данных
- •Тема 6. Многопользовательский режим работы с бд. Модели «клиент-сервер» в системах баз данных. Архитектура серверов баз данных
- •Тема 7. Транзакции, оперативная обработка транзакций (oltp)
- •Тема 8. Встроенный sql. Понятие курсора
- •Тема 9. Хранимые процедуры как базовый компонент серверной части информационных систем
- •Тема10. Триггеры как механизм поддержки семантической целостности в бд
- •Тема 11. Физические модели баз данных
- •11.2.1. Стратегия разрешения коллизий с областью переполнения
- •11.2.2. Организация стратегии свободного замещения
- •Полученное b-дерево может быть представлено так, как изображено на рис. 11.5
- •Моделирование отношения 1:м с использованием однонаправленных указателей
- •Основной файл f1
- •Структура подчиненного файла:
- •Алгоритм нахождения нужных записей подчиненного файла
- •1) Добавление записи на первое место в цепочке;
- •2) Добавление записи в конец цепочки;
- •3) Добавление записи на заданное место в цепочке.
- •Типовые задания
Тема10. Триггеры как механизм поддержки семантической целостности в бд
Приведите формат оператора создания триггера. Чем отличаются триггера After и Insdead of? Какой командой можно запустить триггер? Простейший оператор создания триггера типа DML имеет вид:
CREATE TRIGGER имя_триггера
ON [таблица | представление ]
[ WITH ENCRYPTION ]
{
{FOR | AFTER | INSTEAD OF }{[DELETE] [,] [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
{ IF UPDATE (столбец_i)
[ {AND | OR} UPDATE (столбец_j)]
[ … n]
| IF (COLUMNS_UPDATED() {побитовый_оператор} битовая_маска )
{оператор_сравнения} битовая_маска_столбца [… n ]
}
инструкции_SQL [ … n ]
}
} В параметре FOR задается тип триггера AFTER (после выполнения операции модификации) и INSTEAD OF (вместо выполнения операции модификации) . Триггер AFTER запускается после успешного завершения SQL. Триггер типа INSTEAD OF запускается вместо операции модификации
Могут ли быть параметры триггера и как они ему передаются?
ALTERprocskolko@idint,@sumintoutputasif exists (select * from sotr where ID_Poraz = @id)select @sum = COUNT(*) from sotr where ID_Poraz = @idelse select @sum = 0print @sumтут входной айди - задает номер отдела, а выходному "сум" присваетвается значение = количеству работников отдела
Что такое DRIи какое отношение эта аббревиатура имеет к триггерам? Как согласуется понятие DRI и механизм срабатывания триггеров, приведите примеры.При написании триггеров всегда надо помнить об этом, потому что при нарушении правил целостности по связям (DRI Declarative Referential Integrity) триггер просто может никогда не сработать.CREATE TRIGGER DEL_EXEMP ON dbo.EXEMPLAR
/* мы создаем триггер для таблицы EXEMPLAR */
FOR DELETE /* только для операции удаления */
AS
/* опишем локальные переменные */
DECLARE @Ntek int /* количество оставшихся экземпляров удаленной книги */
DECLARE @DEL_EX VARCHAR(12) /* шифр удаленного экземпляра*/
Begin /* по временной системной таблице, содержащей удаленные записи, определяем шифр книги, соответствующей последнему удаленномуэкземпляру */
SELECT @DEL_EX = ISBN From deleted
/* вызовем хранимую процедуру, которая определит количество экземпляров книги с заданным шифром */
EXEC @Ntek = COUNT_EX @DEL_EX
/* Если больше нет экземпляров данной книги, то мы удаляем запись о книге из таблицы BOOKS */
IF @Ntek = 0 DELETE from BOOKS WHERE BOOKS.ISBN = @DEL_EX
END
При наличии данных в подчинённых таблицах, триггер сработает некорректно.
CREATE TRIGGER DELL_BOOKS
ON [dbo].[BOOKS]
-- задали тип триггера
INSTEAD OF DELETE
AS
-- опишем переменную, в которую поместим шифр удаляемой книги
declare @ISBN varchar(14)
-- используя системную таблицу Deleted определеим значение шифра -- удаляемой книги и присвоим его нашей внутренней переменной @ISBN
Select @ISBN=ISBN from Deleted
-- удалим сначала из подчиненных таблиц все записи с заданным
-- значением шифра книги
Delete from BOOKS_CAT where BOOKS_CAT.ISBN=@ISBN
Delete from Relation_93 where RELATION_93.ISBN= @ISBN
-- Теперь удалим книгу
Delete from books where Books.isbn= @ISBN
Верный вариант, который согласует всё это с DRI.