Главная » SQL, Базы данных » ПРЕДИКАТЫ ПЕРЕМЕННОЙ ОТНОШЕНИЯ И ПРЕДИКАТЫ БАЗЫ ДАННЫХ

0

Безусловно, что в общем любая конкретная переменная отношения может становиться объектом действия многих ограничений. Предположим, что R — переменная отношения. В таком случае предикатом переменной отношения R является результат применения логической операции "И", или операции  конъюнкции ко всем ограничениям, которые распространяются на переменную отношения R (иными словами, в которых она упоминается). Следует учитывать, что здесь возникает определенная опасность противоречивого

толкования: как уже было сказано, каждое отдельное ограничение само является предикатом в полном смысле этого понятия, но предикат переменной отношения для R — это конъюнкция всех отдельных предикатов, которые относятся к R. Например, если для упрощения предположим, что только шесть ограничений, описанных в разделе 9.1, относятся к базе данных поставщиков и деталей (не считая априорных ограничений), то предикат переменной отношения для  поставщиков является конъюнкцией ограничений с номерами 1, 2, 4, 5 и 6, а предикат переменной отношения для поставок — конъюнкцией предикатов с номерами 5 и 6. Обратите внимание, что эти два предиката переменной отношения в некотором смысле "перекрываются", поскольку они имеют некоторые общие составляющие ограничения5.

Теперь допустим, что R — переменная отношения, a RP — предикат переменной отношения для R. Итак, безусловно, ни в коем случае нельзя допускать, чтобы переменная R приобретала такое значение, что его подстановка в RP вместо R (а также любая другая

необходимая подстановка фактических параметров вместо формальных параметров, которая должна быть выполнена в RP), становилась причиной того, чтобы  предикат  RP принимал значение FALSE. Итак, теперь мы можем ввести золотое правило (первую версию), которое имеет большое значение при анализе ограничзний целостности.

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

Теперь предположим, что D является базой данных6 и что D включает переменные отношения Rl, R2, …, Rn (и только эти переменные отношения).  Допустим, что предикатами переменной отношения для этих переменных отношения, соответственно, являются RP1, RP2, …, RPn. Тогда предикат базы данных для D, скажем, DP, представляет собой конъюнкцию всех таких предикатов переменной отношения.

DP ≡ RP1 AND RP2 AND … AND RPn

Ниже приведена расширенная (более общая и фактически окончательная) версия золотого правила.

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

5  В предыдущем издании данной книги было приведено определение, что предикат переменной от ношения для переменной отношения R представляет собой конъюнкцию всех ограничений переменной отношения, которые относятся к R (где, как указано в разделе 9.2, ограничением переменной отноше ния называется ограничение, в котором упоминается только одна переменная отношения). Но теперь, в соответствии с [3.3], мы принимаем определение, что предикат переменной отношения R является конъюнкцией всех ограничений, а не только ограничений переменной отношения, которые относятся к

R. Автор приносит свои извинения всем, кто считает такое изменение в терминологии причиной допол нительной путаницы.

6  D, безусловно, также является переменной (см. аннотацию к [3.3]) и поэтому служит объектом дей ствия ограничений целостности.

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

Примечание. Как уже было сказано, два разных предиката переменной отношения, RPi и RPj (i j), могут иметь некоторые общие составляющие ограничения. Из этого следует, что одно и то же ограничение может появиться в предикате базы данных DP несколько раз. С логической точки зрения такое положение дел не влечет за собой какихлибо затруднений, поскольку если с — ограничение, то выражение с AND с логически эквивалентно просто с. Итак, хотя, безусловно, в такой ситуации желательно, чтобы система вычисляла ограничение с один, а не два раза, эта проблема относится к реализации, а не к модели.

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии