DML
Процедурный DML позволяет получить данные языка, как правило, такие операторы встраиваются в программу на высокоуровневых языках, где учтены конструкции для циклической обработки, cоответственные операторы ДМЛ заменяются перед вызовом функций соответствующих языков.
Непроцедурные или деклоративные ДМЛ описывают только то, какой результат будет получен и сама СУБД транслирует выражение ДМЛ прямо в низкоуровневый язык.
Хотя чистый SQL не процедурный язык, существуют его процедурные расширения, позволяющие организовать циклическое базовые конструкции:
• Для СУБД MSAccess — это язык VBA.
• Для Oracle — PLSQL
Наиболее важные для эксплутации БД процедурные расширения выполняют, как правило, главную задачу — это сохранить целостность данных, при нарушении нормализации.
Курсоры — селект только одно строку, если нужно несколько, используется курсор
◦ Он действует как указатель на конкретную строку результатов запроса.
◦ Курсор должен быть объявлен и открыт перед использованием, и закрыт по окончанию использования.
◦ Для обращения к след. строке, курсор передвигается на единицу.
◦ Выбор конкретной строки запроса осуществляется с помощью оператора FETCH.
На сегоднешний день имеются хорошие альтернативы курсору:
1. Патерн MVC – model view controller.
2. Патерн View.
Подпрограмма – хранимые процедуры или хранимые функции. Именованные блоки процедурного языка, которые могут принимать параметры и вызываться на выполнение.
• Параметров мб несколько.
• И процедуры и функции могут модифицировать и возвращать данные, передаваемые в качестве параметра.
• Параметр должен иметь конкретное имя и конкретный тип данных.
|
• К ним может пристроено добавочное обозначение
◦ in – входное
◦ out – выходное
◦ in/out
Тригеры — определяет действие, которое должно быть препринято базой, при возникновении в приложении некоторого события.
Используется для:
1. Осуществление ограничения ссылочной целостности.
2. Комплексных ограничений предметной области.
3. Для контроля изменений данных.
Тело тригера - код внутри тригера.
Базируется на модели — событие, условие, действие.
Как события в СУБД Oracle мб рассмотрены:
1. Операторы insert, update, delete применяемые к указанной таблице или к указанному представлению
2. Операторы create, alter, drop – применяемые к любому объекту схемы.
3. Запуск БД или остановка экземпляра.
4. Регистрация пользователя в системы и выход из системы.
5. Конкретное сообщение об ошибке или вообще сообщение об ошибке.
Можно так же определить когда должен сработать тригер — до или после события.
Действия которое должно быть препринято:
1. Операторы SQL
2. Код на высокоуровневом языке.
Которые должны быть выполнены, если выдается активизирующий оператор (событие произошло) и условие активации равно true.
Условия (как правило предикат), которые определяет действие, которое должно быть выполнено в обязательном порядке:
Существует 2 типа тригеров, которые запускаются разными ключевыми словами:
1. for, each, row – для каждой строк. Строковые тригеры.
2. new – новое значение.
Представление или view – это динамический результат одной или нескольких реляционных операций с базовыми отношениями, с целью создания нового отношения.
|
Особенности представления:
1. Виртуальное отношение — реально в структуре базы такой таблицы нет, но оно создается по требованию отдельно пользователя, в момент его поступления.
2. Представления имеют динамический характер. Изменения в базовых отношениях, которые могут повлиять на конкретное представление немедленно в него переносятся.
3. Имеет более жесткий механизм контроля доступа, чем просто назначения прав для таблицы.
Ограничения на изменения, которые можно заводить через представления:
1. Допускаются обновления через вью, которое определено на основе простого запроса к единственному базовому отношению и содержит первичный или потенциальный ключ этого отношения.
2. Обновления не допускаются в любых представлениях, опреденных на основе нескольких базовых отношений.
3. Обновления не допускаются в любых представлениях, включающих операции агригирования или групирования.
СУБД постоянно хранит в базе определение представления (запрос на представление) и если обнаруживается ссылка на представление СУБД применяет один из 2-х подходов:
1. Замена представления — СУБД преобразует исходный запрос в эквивалентный запрос к таблицам, использованный в определение представления.
2. Матеарилизация представления — готовое представления уже хранится в БД в виде временной таблицы, а его актуальность постоянно поддерживается по мере обновления всех таблиц основной базы.
Средства поддержки целостности данных
Включает средства задания ограничений, которые вводятся для защиты базы от нарушения согласованности данных.
|
5 типов:
1. Обязательные данные.
2. Целостность сущностей.
3. Ссылочная целостность.
4. Ограничения для доменов.
5. Корпоративные ограничения.
Все ограничения определяются в операторах create and alter table.
Для некоторых столбцов требуется наличие в каждой строке таблицы конкретного и допустимого значения отличного от NULL.
Значение NULL служит для представления данных, которые в данный момент отсутствуют, недоступны или неопределены.
Применения NULL может вызвать проблему на этапе реализации, связанной с переходом к 3-х значной логике. Следовательно использование нул спорно.
Для разрешения это коллизии предусматривает спецификатор not null, он указывается для конкретных столбцов.
По умолчанию для всех столбцов применяется спецификатор нул.
В базом отношении ни одни атрибут первичного ключа не может содержать значение типа NULL. Для задания этого ограничения стандарт ИСО использует конструкцию primary key в операторах create and alter table. Он может состоять из одного или нескольких столбцов.
Эта конструкция указывается в определение таблицы только один раз, для альтернативных ключей используется ключевое слов unique — уникальный. Целесообразно явно прописывать нот нул.
СУБД отвергает любые попытки выполнения insert or update, которые влекут за собой создание повторяющегося значение в любом потенциальном ключе.
Ссылочная целостность
Если в отношении существует внешний ключ, то либо знаечение внешнего ключа должно соответствовать значению потенцеального ключа некоторого кортежа в его базовом отношении, либо этот внешний ключ должен состоять из значения null полностью.
Ссылочная ценность - если поле внешнего ключа содержит некоторое значение, то оно обязательно должно ссылаться на существующую допустимую строку в родительской таблице.
Стандарт ISO предусматривает механизм определения внешних ключей: в операторах create table(создать) и alter table(изменить) предусматривается конструкция foreign key, тогда система отклоняет выполнение любых операторов insert или update, если с их помощью предпринимается попытка создать в дочерней таблице значение внешнего ключа, несоответствующее ни одному потенциальному ключу родительской таблице.
Действия системы выполняемые при поступлении операторов update или delete, которые содержит попытку обновить или удалить значение потенциального ключа в родительской таблице (если ему соответствуют какие то строки дочерней таблицы), зависят от принятых правил поддержки ссылочной ценности. Эти правила явно указываются в конструкции foreign key.
В SQL предусмотрены 4 варианта допустимых действий:
1) каскадное удаление (cascade) — удаление строки из родительской таблицы, сопровождается автоматическим удалением всех ссылающихся на нее сторк дочерней таблицы, дальше эта операция повторяется рекурсивно (каскадно) для всех ниже лежащих таблиц иерархии.
2) Set null (более мягкий) — выполняется удаление строки из родительской таблицы, а во внешние ключи всех ссылающихся на нее строк дочерней таблицы заносится null. Этот вариант пременим только в том случае если в определении столбца внешнего ключа отсутствует ключевое слово not null.
3) Set default (значение по умолчанию) — выполняется удаление строки из родительской таблицы, а во внешние ключи всех ссылающихся на нее строк дочерней таблицы заносится предопределенное значение по умолчанию. Варинта применим тогда, когда в определении столбца внешнего ключа присутствует ключевое слово default и значение по default задано.
4) NO ACTION — операция удаления строки из родительской таблицы отвергается и пользователю посылается уведомление об ошибке.
Те же правила применяются в SQL если значение потенциального ключа в родительской таблице обновляется.
Для реализации ссылочной ценности удобно исмользовать механизм триггеров.
Ограничения для доменов: Каждый столбец имеет собственный домен (некоторый набор допустимых значений).
Стандарт ISO предусматривает два механизма определения доменов (это естественно происходит при создании таблицы и при изменении таблицы):
1) create table:CHECK (search Condition)
2) можно отдельно использовать оператор CREATE DOMAIN, каждому создаваемому домену присваивается: имя, тип данных (data type), и могут быть другие необязательные значения.
Удаление домена можно произвести с помощью DROP DOMAIN. Домен может быть удален каскадно.
При проектировании базы нужно максимально ограничивать самодеятельность пользователя, при заполнении строк таблицы, в том числе использовать выпадающие списки, ограничивать типы данных, ограничивать варианты регистров и тд.
Корпаративные ограничения целостности — это дополнительные правила поддержки целостности данных, определяемые пользователями или администраторами базы данных для конкретного бизнес процесса.
Стандарт ISO позволяет создать деловой регламент двумя вариантами:
1. в операторках create table и alter table пишется CHECK и ключевое слово UNIQUE.
2. CREATE ASSERTION
Обобщение целостности:
1) обязательность наличия данных указывается с помощью ключевого слова NOT NULL
2) Ограничение для доменов, задаются либо с помощью конструкции CHECK либо посредством создания соответствующего домена с момощью CRATE DOMAIN.
3) Первичные ключи определяются с помощью конструкции primary key, альтернативные ключи описываются с помощью комбинации ключевых слов not null и unique, внешние ключи описываются с помощью foreign key.
4) Корпоративное ограницение то есть бизнес предприятие задаются с помощью конструкции check и unique или с помощью create assertion.
5) Существуют 4 типа реализации ссылочной ценности: каскадное удаление, подстановка значения null, подставление значения по умолчанию или предупреждение о такой операции.