целостности можно провести только после завершения транзакции, состоящей из последовательности операций: 1. вставки кортежа «X» в отношение «А» с нулевой ссылкой на отношение «В»; 2. вставки кортежа «У» отношение «В» со ссылкой на кортеж «X» отношения «А»; 3. исправления ссылки в кортеже «X» с NULL на ссылку на кортеж «У». Ограничение, приведенное в примере 1, может быть только ограничением с отложенной проверкой. 1.1.13. Реализация декларативных ограничений целостности средствами SQL Общие принципы реализации ограничений средствами SQL Стандарт SQL не предусматривает процедурных ограничений целостности, реализуемых при помощи триггеров и хранимых процедур [2, 18, 22]. В стандарте SQL 92 отсутствует понятие "триггер", хотя триггеры имеются во всех промышленных СУБД SQL-типа. Таким образом, реализация ограничений средствами конкретной СУБД обладает большей гибкостью, нежели с использованием исключительно стандартных средств SQL. Стандарт SQL позволяет задавать декларативные ограничения следующими способами: • Как ограничения домена. • Как ограничения, входящие в определение таблицы. • Как ограничения, хранящиеся в базе данных в виде независимых утверждений (assertion). Допускаются как немедленно проверяемые, так и ограничения с отложенной проверкой. Режим проверки отложенных ограничений можно в любой момент изменить так, чтобы ограничение проверялось: 1. После исполнения каждого оператора, изменяющего содержимое таблицы, к которой относится данное ограничение. 28 |
Определение 12. Ограничения целостности базы данных представляют ограничения, накладываемые на значения двух или более связанных между собой отношений (в том числе отношение может быть связано само с собой). Пример 13. Ограничение целостности ссылок (см. гл. 3), задаваемое внешним ключом отношения, является ограничением базы данных. Пример 14. Ограничение на таблицы DEPART и PERSON из примера 1 является отношением базы данных, т.к. оно связывает данные, размещенные в различных таблицах. Проверка ограничения. К моменту проверки ограничения базы данных должны быть проверены ограничения целостности отношений. Ограничение базы данных может быть как немедленно проверяемым ограничением, так и ограничением с отложенной проверкой. Ограничение отношения, являющееся ограничением внешнего ключа может быть как немедленно проверяемым ограничением, так и отложенным ограничением. Действительно, в простейшем случае, если кортеж отношения должен ссылаться на кортеж отношения , то проверку ограничения ссылочной целостности можно производить сразу после любой из операций вставки, обновления или удаления в любом из отношений или . В более сложном случае, предположим, что кортеж отношения должен ссылаться на кортеж отношения , а кортеж отношения должен в свою очередь ссылаться на кортеж отношения (циклическая ссылка). Очевидно, что сразу после вставки кортежа отношение ссылочная целостность обязательно нарушена, т.к. кортежа еще нет в отношении . Проверку ссылочной целостности можно провести только посл завершения транзакции, состоящей из последовательности операций: 1. вставки кортежа в отношение с нулевой ссылкой на отношение , 2. вставки кортежа отношение со ссылкой на кортеж отношения , 3. исправления ссылки в кортеже с NULL на ссылку на кортеж . Ограничение, приведенное в примере 1, может быть только ограничением с отложенной проверкой. Реализация декларативных ограничений целостности средствами SQL Общие принципы реализации ограничений средствами SQL Стандарт SQL не предусматривает процедурных ограничений целостности, реализуемых при помощи триггеров и хранимых процедур. В стандарте SQL 92 отсутствует понятие "триггер", хотя триггеры имеются во всех промышленных СУБД SQL-типа. Таким образом, реализация ограничений средствами конкретной СУБД обладает большей гибкостью, нежели с использованием исключительно стандартных средств SQL. Стандарт SQL позволяет задавать декларативные ограничения следующими способами: Как ограничения домена. Как ограничения, входящие в определение таблицы. Как ограничения, хранящиеся в базе данных в виде независимых утверждений (assertion). Допускаются как немедленно проверяемые, так и ограничения с отложенной проверкой. Режим проверки отложенных ограничений можно в любой момент изменить так, чтобы ограничение проверялось: |