Программирование >>  Хронологические базы данных 

1 ... 111 112 113 [ 114 ] 115 116 117 ... 348


Каждый кортеж е в результирующем отношении операции расширения имеет следующие свойства: 1) кортеж а, получаемый из кортежа е посредством операции проекции, исключающей компонент X, удовлетворяет предикату РА; 2) значение компонента Xравно результату вычисления выражения ехр для кортежа а.

Приведем правила обновления для представлений, определяемых с помощью операции расширения.

Правило INSERT. Пусть е - это кортеж, который нужно вставить. Он должен удовлетворять предикату РЕ. В переменную-отношение А будет вставлен кортеж а, порожденный из кортежа е посредством операции проекции, исключающей компонент X.

Правило DELETE. Пусть е - это кортеж, который нужно удалить. Из переменной-отношения А будет удален кортеж а, порожденный из кортежа е посредством операции проекции, исключающей компонент X.

Правило UPDATE. Пусть е - это кортеж, который нужно обновить, а е - обновленная версия кортежа е, причем кортеж е должен удовлетворять предикату РЕ. Сначала из переменной-отношения А без выполнения триггерных процедур и проверки предиката этой переменной-отношения будет удален кортеж а, который порожден из кортежа е посредством операции проекции, исключающей компонент X. Затем в переменную-отношение А будет вставлен кортеж а, который порожден из кортежа е посредством операции проекции, исключающей компонент X.

Примеры. Пусть представление VPX определено с помощью следующего выражения. EXTEND Р ADD ( WEIGHT * 454 ) AS GMWT

На рис. 9.6 приведен пример возможных значений этого представления.

PNAME

COLOR

WEIGHT

CITY

GMWT

12.0

London

5448.0

Bolt

Green

17.0

Paris

7718.0

Screw

Blue

17.0

Rome

7718.0

Screw

14.0

London

6356.0

Blue

12.0

Paris

5448.0

19.0

London

8626.0

Puc. 9.6. Представление VPX (значения для примера)

Попытка вставить кортеж (P7, Cog, Red, 12, Paris, 5 4 4 8) будет завершена успешно и приведет к вставке кортежа (Р7, Cog, Red, 12, Paris) в переменную-отношение Р.

Попытка вставить кортеж (Р7, Cog, Red, 12, Paris, 5449 ) потерпит неудачу (почему?).

Попытка вставить кортеж (Р1, Cog, Red, 12, Paris, 5448) потерпит неудачу (почему?).

Попытка удалить кортеж с ключом Р1 будет успешной и приведет к удалению кортежа с ключом Р1 из переменной-отношения Р.



Попытка обновить кортеж с ключомPIк виду (PI, Nut, Red, 10, Paris, 4540) будет успешной и приведет к замене кортежа (Р1, Nut, Red, 12, London) в переменной-отношении Р кортежем (Р1, Nut, Red, 10, Paris).

Закончится неудачей попытка обновить тот же кортеж посредством замены номера детали номером Р2 (без изменения остальных атрибутов) или попытка его приведения к виду, в котором значение атрибута GMWT не будет равно значению атрибута WEIGHT, умноженному на 454 (в каждом случае укажите причину неудачи).

Операция соединения

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

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

обычно предполагалось (неявно), что отдельный кортеж базовой переменной-отношения всегда можно обновить независимо от всех остальных кортежей этой базовой переменной-отношения;

в то же время очевидно (явно), что обновить отдельный кортеж представления независимо от всех остальных кортежей этого представления возможно не всегда.

Например, в [11.2] Кодд показал, что из результата определенного соединения невозможно удалить хотя бы один кортеж, так как это приведет к получению отношения, которое вовсе не является соединением двух каких-либо отношений (это, в свою очередь, означает, что результат, возможно, не будет удовлетворять предикату переменной-отношения представления). Исторически сложилось так, что подобные операции обновления представлений полностью отбрасывались ввиду невозможности сделать эти операции полностью идентичными обновлениям базовых переменных-отношений.

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



исходных переменных-отношений может оказывать побочный эффект на представления. Однако такие побочные эффекты неизбежны и необходимы, так как в противном случае возникает опасность, что представление перестанет удовлетворять своему предикату.

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

Рассмотрим соединение J = А JOIN В. Здесь (как и в разделе 6.4 главы 6) переменные-отношения А, В и J имеют заголовки {X, Y}, {Y, Z} и {X, Y, Z} соответственно. Пусть РА и РВ - это предикаты переменных-отношений А и В. Тогда предикат PJ представления J будет иметь следующий вид.

РА ( а ) кт РВ ( b )

Здесь для каждого заданного кортежа j соединения а является А-частью кортежа j (т.е. а - это кортеж, порождаемый из кортежа j посредством операции проекции, исключающей компонент Z), а b является В-частью кортежа j (т.е. кортежем, порождаемым из кортежа j посредством операции проекции, исключающей компонент X). Другими словами.

Каждый кортеж в соединении таков, что А-часть удовлетворяет предикату рд а В-часть удовлетворяет предикату РВ.

Например, предикат для соединения переменных-отношений S и SP по атрибуту SI можно сформулировать следующим образом.

Каждый кортеж (S, п, t, с, р, q) в соединении таков, что кортеж (s, п, t, с) удовлетворяет предикату переменной-отношения S, а кортеж (s, р, q) удовлетворяет предикату переменной-отношения SP.

Приведем правила обновления представлений вида J = А JOIN В.

Правило INSJERT. Новый кортеж j должен удовлетворять предикату PJ. Если А-часть кортежа j не входит в переменную-отношение А, то она вставляется в А. Если В-часть не присутствует в переменной-отношении В, то она вставляется в В.

Правило DELETE. А-часть удаляемого кортежа удаляется из переменной-отношения А и В-часть удаляемого кортежа удаляется из переменной-отношения В.

Правило UPDATE. Обновляемый кортеж должен быть таким, чтобы его обновленная версия удовлетворяла предикату PJ. А-часть этого кортежа удаляется из переменной-отношения А без выполнения каких-либо триггерных процедур и проверки предиката, а В-часть кортежа удаляется из переменной-отношения В, опять же, без выполнения каких-либо триггерных процедур и проверки предиката.

Оптетим, что операция INSERT мо.жет иметь побочный эффект, вследствие которого В-часть кортежа j будет вставлена в переменную-отношение В, как в случае с представлениями, основанными на объединении, пересечении и вычитании (см. выше). Аналогичное замечание касается правил для представлений, основанных на операциях DELETE и UPDATE. Для краткости мы не будем вам докучать, детально рассматривая возможность побочных эффектов в каждом случае.



1 ... 111 112 113 [ 114 ] 115 116 117 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика