Добавить в избранное   Сделать стартовой   Главная   E-mail   Форум   Мой блог 
   
Cертификации

Errors

ETL

FAQ (по темам)

GIS

Web

wiki

Администрирование

Безопасность

Книги
Oracle, ...

Новости

ОС

Программирование

Проектирование БД

Производительность

Скачать

Советы

Тестирование

Установка

FAQ - по базам данных
FAQ - по базам данных
Установка СУБД
Oracle
Sybase
MySQL
PostgreSQL
MS SQL Server
Interbase, Firebird
Другие DB
Администрирование
Oracle
MySQL
Sybase
PostgreSQL
MS SQL Server
Interbase, Firebird
IBM DB2
Другие DB
Проектирование БД
Статьи
ETL
Теория БД
ErWin
Designer 2000
PowerDesigner
Хранилища данных
CASE средства
OLAP
Бизнес - анализ (BI)
Производительность
Oracle
MSSQL
Interbase, Firebird
IBM DB2
MySQL
PostgreSQL
SYBASE
Безопасность БД
Oracle
MS SQL Server
Инъекция SQL
Программирование
Transact-SQL
PL/SQL
C++
XML
SQL
PostgreSQL
MDX
Java
VBA Excel
Книги по базам
Oracle
Заказ книг
ОС
Установка и настройка
UBUNTU
ОС
Установка и настройка
UBUNTU
FAQ
FAQ - по базам данных
Главная arrow ErWin arrow Триггеры и Хранимые Процедуры ERwin

Триггеры и Хранимые Процедуры ERwin

Печать E-mail
Оглавление
Триггеры и Хранимые Процедуры ERwin
Страница 2
Страница 3
 AllFusion ERwin Data Modeler 7 (ERwin)
   Автоматизируя создание кода SQL, ERwin тем самым позволяет Вам использовать две усовершенствованные возможности - триггеры и хранимые процедуры, которые поддерживаются некоторыми СУБД SQL. Триггеры и хранимые процедуры - это именованные блоки кода SQL, которые заранее откомпилированы и хранятся на сервере для того, чтобы быстро производить выполнение запросов, валидацию данных и выполнять другие, часто вызываемые функции.

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

В этой главе Вы узнаете, как:

· Управлять операциями вставки, обновления и удаления таким образом, чтобы поддерживать целостность данных.

· Связывать правила ссылочной целостности, устанавливаемые по умолчанию, со связями ERwin.

· Использовать шаблоны и макрокоманды ERwin для автоматизации процесса создания триггеров и хранимых процедур.

· Переопределять триггеры ссылочной целостности, устанавливаемые ERwin по умолчанию.

· Создавать адаптированные к конкретной ситуации шаблоны для задания хранимых процедур.

· Связывать хранимые процедуры с отдельными сущностями.

· Связывать хранимые процедуры со схемой базы данных.

Что такое триггеры?

Триггером называется именованный набор прекомпилированных команд SQL, хранящийся на сервере, который автоматически выполняется, когда происходит заданное событие. Например, триггер может выполняться при вставке, изменении или удалении строки в существующей таблице. Триггер сообщает СУБД, как нужно выполнять команды SQL INSERT, UPDATE или DELETE, чтобы выполнялись нормальные правила (business rules) организации.

Триггер ссылочной целостности - особый вид триггера, используемый для поддержания целостности между двумя таблицами, которые связаны между собой. Если строка в одной таблице вставляется, изменяется или удаляется, то триггер ссылочной целостности (который мы далее будем называть RI-триггером) сообщает СУБД, что нужно делать с теми строками в других таблицах, у которых значение внешнего ключа совпадает со значением первичного ключа вставленной (измененной, удаленной) строки.

Предположим, например, что в фирме проката видеопродукции существует правило, согласно которому фильм нельзя удалять из списка, если какие-то копии этого фильма в данный момент находятся на руках. Что произойдет, если Вы попытаетесь удалить название фильма, в то время как копия этого фильма находится на руках? Если Ваша СУБД поддерживает RI-триггеры, то команда DELETE языка SQL может быть обработана одним из следующих способов:

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

· Фильм удаляется из таблицы MOVIE и все строки в таблицах MOVIE-COPY и MOVIE-RENTAL-RECORD с тем же номером фильма, что и у удаленной строки, также автоматически удаляются. Правило ссылочной целостности, передающее изменение от одной таблицы к другой, называется CASCADE. Обратите внимание, что если Вы примените это правило ссылочной целостности к данной ситуации с фильмом, у Вас не будет возможности проследить за той копией удаленного фильма, которая находится на руках. Для таких ситуаций Вы можете переопределить триггер ссылочной целостности, устанавливаемый по умолчанию, так что информация о копии фильма и о том, у кого она находится, не стиралась бы случайно.

· Фильм удаляется из таблицы MOVIE, но номеру фильма для той копии, которая находится на руках, в таблице MOVIE-RENTAL-RECORD автоматически присваивается нулевое значение (пустое поле), что говорит о том, что Вы больше не планируете работать с этим фильмом. После того как последняя копия фильма будет возвращена, ее можно выставить для окончательной продажи, а не возвращать на нормальный склад для последующейсдачи в прокат. Правило ссылочной целостности, изменяющее текущее значение данных на нулевое, называется SET NULL.

· Хотя Вы и не можете использовать триггеры для усиления ссылочной целостности, если у Вас установлена РС-ориентированная СУБД, ERwin все-таки предоставляет альтернативный способ усиления ссылочной целостности в случае СУБД Fox Pro. См. руководство по ERwin для РС-ориентированных СУБД, ERwin Desktop Database Guide, разд. 'Усиление ссылочной целостности для таблиц Fox Pro'.

ERwin располагает шестью RI-триггерами, устанавливаемыми по умолчанию, которые Вы можете связывать с сущностями, чтобы указывать Вашей СУБД, как ей усиливать ссылочную целостность. В особых ситуациях Вы можете переопределить код, генерируемый ERwin по умолчанию, изменяя эти шаблоны триггеров в соотсветствии с Вашей ситуацией.

Что такое хранимые процедуры?

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

Например, в конце каждого месяца фирма по прокату видеопродукции может захотеть получить список всех фильмов, которые никто не брал в последние 30 дней, и выставить их на распродажу. Чтобы ускорить выполнение этого рутинного запроса, Вам нужно создать хранимую процедуру под названием 'sp_norental', выдающую список всех фильмов, которые никто не брал за последний месяц. В последний день каждого месяца, когда Вы выбираете эту процедуру из меню клиентского приложения, клиент пересылает по сети на сервер только имя хранимой процедуры, и сервер автоматически выполняет все коды, связанные с этим именем. Поскольку весь код процедуры хранится на сервере, Вам не нужно писать все команды SQL, нужные для выполнения запроса, и пересылать их по сети каждый раз, когда Вы хотите найти фильмы, на которые нет спроса, и убрать их со склада.

Поскольку триггеры и хранимые процедуры имеют большое значение для ускорения работы и поддержания целостности, ERwin располагает специальными редакторами Trigger и Stored Procedure со встроенными шаблонами и мощными макрокомандами, которые могут существенно ускорить процесс создания этих процедур SQL.

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

RI-триггеры, устанавливаемые ERwin по умолчанию

Для того чтобы создать триггер, Вам в обычном случае требуется ввести нужный код SQL и поместить его на сервер. Чтобы сэкономить Ваше время, ERwin предлагает Вам набор шаблонов RI-триггеров, устанавливаемых по умолчанию, которые используют для автоматической генерации кода SQL предопределенные макрокоманды. Макрокоманды ERwin содержат скелетный код языка SQL, в который вставляются при генерации физической схемы базы данных имена таблиц и другие переменные. Ниже приводятся примеры макро-кода триггера ERwin и расширенного кода, который экспортируется из ЕRwin на сервер в процессе генерации схемы.

/* ERwin Builtin %Datetime */


/* %Parent %Verbphrase %Child ON PARENT DELETE RESTRICT */


if exists (


select * from deleted, %Child


where


/* %%JoinFKPK(%Child, deleted, ' = ', ' and') */


%JoinFKPK(%Child, deleted, ' = ',' and')


)


begin


select @errno = 30001,


@ errmsg = 'Cannot DELETE '%Parent' because '%Child' exists. '


goto error


end

Рис. 16.2. Пример макрокода - часть шаблона RI-триггера.

create trigger tDMOVIE on MOVIE for DELETE as


/* ERwin Builtin Wed Aug 24 20:33:33 1994 */


/* DELETE trigger on MOVIE */


begin


declare @errno int,


@ errmsg varchar(255)


/* ERwin Builtin Wed Aug 24 20:33:33 1994 */


/* MOVIE is in stock as MOVIE_COPY ON PARENT DELETE RESTRICT */


if exists (


select * from deleted, MOVIE_COPY


where


/* %JoinFKPK(MOVIE_COPY,deleted, ' = ',' and') */


MOVIE_COPY.master_number = deleted.movie_number


)


begin


select @errno = 30001,


@errmsg = 'Cannot DELETE 'MOVIE' because 'MOVIE_COPY' exists. '


goto error


end


/* ERwin Builtin Wed Aug 24 20:33:33 1994 */


return


error:


raiserror @errno @errmsg


rollback transaction


end


go

Рис. 16.3. Код SQL, расширенный в процессе генерации схемы.

Как просмотреть код триггера, устанавливаемого по умолчанию, для сущности

1. Щелкните правой кнопкой мыши по сущности и дайте команду меню Editor '<DB> Trigger'. ERwin открывает окно, предназначенное только для чтения, в котором показан расширенный код для каждого RI-триггера, связанного с этой сущностью.

Как создаются триггеры ERwin

ERwin создает RI-триггеры автоматически. Когда Вы строите свою модель данных, ERwin автоматически связывает шаблон RI-триггера, устанавливаемого по умолчанию, с каждой сущностью связи. На то, какой именно шаблон триггера будет присвоен связи и на генерируемый им код SQL влияют три критерия:

· Правило ссылочной целостности, которое он применяет к связи (RESTRICT, CASCADE, SET NULL, SET DEFAULT, NONE).

· Тип связи, с которым он связан (идентифицирующая или неидентифицирующая).

· Роль сущности в связи (родительская или дочерняя).

Правила ссылочной целостности

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

Правило ссылочной целостности

Что оно делает

RESTRICT

Запрещает СУБД производить требуемое изменение (INSERT, UPDATE или DELETE).

CASCADE

Производит требуемое изменение в первой таблице и распространяет его на связанные с ней таблицы.

SET NULL

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

SET DEFAULT

Работает. как SET NULL, с той разницей, что вместо нулевого значения присваивает внешним ключам значение по умолчанию.

NONE

Ничего не делает (ERwin не усиливает ссылочную целостность).

ERwin создает RI-тригеры автоматически, связывая шаблоны триггеров со всеми связями. Вы можете переопределить код SQL, генерируемый ERwin, адаптируя эти шаблоны для своей ситуации. См. в этой главе разд. 'Изменение режима RI-триггера для связи' и 'Переопределение RI-триггеров, устанавливаемых по умолчанию' об изменении поведения триггеров, устанавливаемых по умолчанию.

RI-триггеры и типы связей

Шаблоны RI-триггеров в ERwin связываются с сущностями, исходя из типа связи и роли сущности в этой связи. Тип связи и роль сущности определяют, какое правило ссылочной целостности будет, по умолчанию, усилено присвоенным шаблоном триггера. Тип связи может быть: идентифицирующая, неидентифицирующая (nulls allowed), неидентифицирующая (no nulls), связь подтипа.

Роль сущности в связи может быть - родительская (Parent) или дочерняя (Child) сущность. Если сущность является родительской в данной связи, то ERwin присваивает ей шаблон триггера для родительской сущности. Если сущность является дочерней в данной связи, то ERwin присваивает ей шаблон триггера для дочерней сущности. Код триггера, который генерируется шаблоном триггера для родительской сущности, указывает СУБД, что нужно делать при вставке, изменении или удалении строки в родительской таблице связи. Код триггера, который генерируется шаблоном триггера для дочерней сущности, указывает СУБД, что нужно делать при вставке, изменении или удалении строки в дочерней таблице связи.

Ниже приводится таблица, в которой описано, как ERwin присваивает связи правила ссылочной целостности. Например, по умолчанию для триггера Parent Delete для идентифицирующей связи устанавливается правило RESTRICT. Это правило указывает СУБД, что нужно запретить требуемое изменение данных.

 

Роль сущности

Тип связи

Шаблон RI-триггера

Идентифици-рующая связь

Неидентифи-цирующая
(nulls allowed)

Неидентифи-цирующая
(no nulls)

Cвязь подтипа

Child Delete

None

None

None

None

Child Insert

Restrict

Set Null

Restrict

Restrict

Child Update

Restrict

Set Null

Restrict

Cascade

Parent Delete

Restrict

Set Null

Restrict

Cascade

Parent Insert

None

None

None

None

Parent Update

Restrict

Set Null

Restrict

Cascade

С одной сущностью можно связать до шести шаблонов RI-триггеров, в зависимости от ее роли в разных связях. Если сущность является в какой-то связи родительской, то с ней можно связать триггеры parent insert, update и delete. Если сущность является в какой-то связи дочерней, то с ней можно связать триггеры сhild insert, update и delete.


 
 
« Пред.   След. »
Взаимосвязанные статьи
     

Последние добавленные статьи
Поиск
Ссылки
Главная
Скачать
Курсы
Роль АБД (SYSDBA)
Карта сайта
Автостекла
Контакты
Войти на сайт
Популярные статьи
Online - тесты
1Z0-042
Rambler's Top100 МЕТА - Украина. Рейтинг сайтов хостинг от freehost.com.ua

Все права защищены.SYSDBA 2010 | Если у Вас есть хороший материал пришлите его нам.