
- •1. Определение информации. Основные проблемы, возникающие при хранении информации.
- •2. Отличительные особенности субд как программного продукта. Понятие экземпляра и базы данных.
- •3. Категории пользователей субд. Функциональные требования различных категорий пользователей к субд.
- •4. История развития субд. Особенности не реляционных моделей данных.
- •5. Общая характеристика моделей данных. Основные свойства. Понятие атрибутов, доменов.
- •6. Отношения модели данных. Понятия сущности и связи.
- •7. Ограничение целостности модели данных. Трехуровневая архитектура ansi/sparc.
- •8. Структурные компоненты модели данных в нотации idef1x. Понятия сущность, связь. Типы сущностей и связей.
- •9. Реляционная модель данных. Базовые структурные компоненты реляционной модели данных. Основные свойства.
- •10. Свойства реляционной модели данных. Представление сущности.
- •11. Свойства реляционной модели данных. Представление связи.
- •12. Требования целостности в реляционной модели данных.
- •13. Язык определения данных в реляционной модели данных. Основные возможности. Примеры.
- •14. Типы ограничений целостности, основные типы данных, основные операции реляционной модели данных.
- •15. Проектирование реляционных баз данных. Цели проектирования, основные этапы.
- •16. Проектирование реляционных баз данных. Проблемы обновления, удаления, добавления данных. Типы ограничений целостности.
- •17. Функциональная зависимость. Нормализация отношений. Концепция нормальных форм.
- •18. Первая и вторая нормальные форма. Определение. Аномалии, возникающие при нарушении. Примеры нарушения и нормализации.
- •19. Третья нормальная форма. Нормальная форма Бойса-Кодда. Определение. Аномалии, возникающие при нарушении. Примеры нарушения и нормализации.
- •20. Понятие многозначной зависимости. Примеры.
- •21. Четвертая и пятая нормальные формы. Определение. Аномалии, возникающие при нарушении. Примеры нарушения и нормализации.
- •22. Основные свойства sql, как языка программирования. Отличие от других языков программирования.
- •23. Основы построения sql- запросов. Источники данных запроса. Условия выборки кортежей. Примеры.
- •24. Левые, правые и полные соединения. Функции для работы с null значениями. Выборка уникальных записей. Примеры.
- •25. Использование подзапросов. Типы подзапросов. Примеры.
- •26. Коррелированные подзапросы. Особенности использования in, not in,exists, not exists.
- •27. Теоретико-множественные операции в sql-запросах. Примеры.
- •28. Агрегирующие функции. Группировка кортежей. Примеры.
- •29. Представления. Особенности использования. Примеры.
- •30. Триггеры в Transact sql. Пример реализации триггера.
- •31. Курсоры. Основные функции. Правила применения. Примеры.
- •32. Внутренние структуры данных. Двухуровневая система доступа к данным. Отношения каталогов.
- •33. Методы доступа к данным. Бинарные деревья.
- •34. Методы доступа к данным. Многоходовые деревья.
- •35. Методы доступа к данным. Сбалансированные деревья. Структура, правила следования. Основные свойства.
- •36. Операция вставки элемента в в-дерево. Проблема переполнения, методы решения. Пример.
- •37. Операция удаления элемента из в-дерева. Проблема антипереполнения. Методы решения. Пример
- •42. Индекс на основе битовых карт. Основные свойства.
- •43. Индекс на основе битовых карт. Структура листового блока. Операция добавления элемента.
- •44. Индекс на основе битовых карт. Операция обновления элемента. Блокировка записей.
- •45. Методы доступа к данным. Основные операции выполнения sql-выражения.
- •46. Методы доступа к данным. Типы соединений таблиц.
30. Триггеры в Transact sql. Пример реализации триггера.
Три́ггер (англ. trigger) — это хранимая процедура особого типа, исполнение которой обусловлено наступлением определенного события (действием) — по сути добавлением INSERT или удалением DELETE строки в заданной таблице, или модификации UPDATE данных в определенном столбце заданной таблицы реляционной БД.
Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в Транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции. Момент запуска триггера определяется с помощью ключевых слов BEFORE, триггер запускается до выполнения связанного с ним события; например, до добавления записи) или AFTER (после события). В случае если триггер вызывается до события, он может внести изменения в модифицируемую событием запись (конечно, при условии, что событие — не удаление записи). Некоторые СУБД накладывают ограничения на операторы, которые могут быть использованы в триггере (например, может быть запрещено, вносить изменения в таблицу, на которой «висит» триггер, и т. п.)
Кроме того, триггеры могут быть привязаны не к таблице, а к представлению (VIEW). В этом случае с их помощью реализуется механизм «обновляемого представления». В этом случае ключевые слова BEFORE и AFTER влияют лишь на последовательность вызова триггеров, так как собственно событие (удаление, вставка или обновление) не происходит.
В [] необязательные параметры
Создание триггера
CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { { FOR | AFTER | INSTEAD OF }
{ DELETE] [,] [INSERT] [ , ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ {
IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] | IF ( COLUMNS_UPDATED ( ) {bitwise_operator} updated_bitmask
) {comparison_operator} column_bitmask [...n] }] sql_statement [ ...n ] } }
trigger_name – название триггера
{ table | view } – имя таблицы или вьюхи на которую вешается триггер
[ WITH ENCRYPTION ] – шифровать или нет триггер
{ { FOR | AFTER | INSTEAD OF } – тип триггера (For – срабатывает до операции, After – после операции, INSTEAD OF - вместо)
{[DELETE] [,] [INSERT] [,] [UPDATE]} – операции на которые срабатывает триггер
[ WITH APPEND ] - Указывает, что требуется добавить триггер существующего типа. Не может быть использовано для триггеров INSTEAD OF или при явном указании триггера AFTER.
[ NOT FOR REPLICATION ] – не срабатывать при репликации
AS – после данного слова идет SQL скрипт самого триггера
IF UPDATE ( column ) – проверяет был ли изменен столбец column
IF (COLUMNS_UPDATED () – возвращает последовательность битов, которая показывает какие столбцы были изменена (например, табличка из столбцов Field1, Field2, Field3. Изменяем значение Field3. D результате после срабатывание триггера COLUMNS_UPDATED вернет нам 100 в двоичной системе или 4 в десятичной)
Для отката изменений используется
RAISERROR (‘Тест ошибки’, 16, 1) – вывод сообщения об ошибке
ROLLBACK TRANSACTION – откат изменений
В триггерах MSSQL существуют две системные таблицы Inserted и Deleted. В данных таблицах содержится полная структура (все поля) изменяемых таблиц и измененные данные.
при добавление, то в Inserted попадают добавляемые записи, а Deleted остается пустой
при удаление, то в Deleted попадают удаленные записи, а Inserted остается пустой.
при внесении изменения, то в Deleted попадают значения записей до изменения, а Inserted значения после изменения.
При изменении, добавлении или изменении сразу нескольких записей в MSSQL SERVER триггер срабатывает единожды. В Oracle триггер срабатывает на каждую запись для которой была выполнена операции.
Пример:
CREATE TRIGGER CheckSpec
ON WorkSalesTable
FOR INSERT, UPDATE
AS
declare @work_Id int, @worker_Id int, @rr int
SELECT @work_Id = workId, @worker_Id = workerId FROM inserted
SELECT @rr=count(*) FROM WorkWorker WHERE workId = @work_Id AND workerId = @worker_Id
if(@rr = 0)
BEGIN
raiserror('You Can not do it!',16,1)
ROLLBACK transaction
END
GO