|
Программирование >> Хронологические базы данных
Каждый кортеж е в результирующем отношении операции расширения имеет следующие свойства: 1) кортеж а, получаемый из кортежа е посредством операции проекции, исключающей компонент X, удовлетворяет предикату РА; 2) значение компонента Xравно результату вычисления выражения ехр для кортежа а. Приведем правила обновления для представлений, определяемых с помощью операции расширения. Правило INSERT. Пусть е - это кортеж, который нужно вставить. Он должен удовлетворять предикату РЕ. В переменную-отношение А будет вставлен кортеж а, порожденный из кортежа е посредством операции проекции, исключающей компонент X. Правило DELETE. Пусть е - это кортеж, который нужно удалить. Из переменной-отношения А будет удален кортеж а, порожденный из кортежа е посредством операции проекции, исключающей компонент X. Правило UPDATE. Пусть е - это кортеж, который нужно обновить, а е - обновленная версия кортежа е, причем кортеж е должен удовлетворять предикату РЕ. Сначала из переменной-отношения А без выполнения триггерных процедур и проверки предиката этой переменной-отношения будет удален кортеж а, который порожден из кортежа е посредством операции проекции, исключающей компонент X. Затем в переменную-отношение А будет вставлен кортеж а, который порожден из кортежа е посредством операции проекции, исключающей компонент X. Примеры. Пусть представление VPX определено с помощью следующего выражения. EXTEND Р ADD ( WEIGHT * 454 ) AS GMWT На рис. 9.6 приведен пример возможных значений этого представления.
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. Для краткости мы не будем вам докучать, детально рассматривая возможность побочных эффектов в каждом случае.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |