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

1 ... 108 109 110 [ 111 ] 112 113 114 ... 348


ются в операции удаления (как было сказано выше, операции обновления (UPDATE) можно игнорировать). Предположим противное, т.е. что существует некоторый тип представлений (скажем, представлений, определяемых на основе операции объединения), для которых операции INSERT отображаются в операции DELETE в исходных переменных-отношениях. Но тогда операции INSERT для базовых переменных-отношений также должны в каких-то случаях отображаться в операции DELETE! Этот вывод непосредственно следует из утверждения (как мы уже убедились в ходе рассуждений в п. 2), что любую базовую переменную-отношение В можно представить в виде семантически идентичного представления V = В UNION В. Аналогичное рассуждение можно применить и для представлений остальных типов (представлений на основе операций выборки, проекции, пересечения и т.д.). Однако утверждение, что в базовых переменных-отношениях операции вставки данных могут в действительности представляться операциями удаления, - очевидный абсурд. Таким образом, утверждение, что операции INSERT и DELETE в представлениях отображаются в соответствующие операции INSERT и DELETE в базовых переменных-отношениях, является истинным.

7. В общем случае правила обновления при их применении к заданному представлению V определяют операции, которые должны быть применены к переменным-отношениям, на которых определено данное представление V. Эти правила должны правильно срабатывать даже в том случае, когда те переменные-отношения, на основе которых определено данное представление, в свою очередь, также являются представлениями. Другим словами, правила должны допускать возможность рекурсивного применения. Конечно, если попытка обновить исходную переменную-отношение по каким-то причинам завершится неудачно, то и исходная операция обновления не будет выполнена. Другими словами, обновления в представлениях выполняются по принципу все или ничего , точно так, как и в случае базовых переменных-отношений.

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

9. Не должно существовать никаких веских причин, чтобы в любом заданном представлении одни операции обновления разрешались, а другие - нет (например, разрешена операция DELETE, но запрещена операция INSERT).

10. Операции INSERT и DELETE должны быть, насколько это возможно, обратными по отношению одна к другой.

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



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

Далее мы по очереди рассмотрим отдельные операции реляционной алгебры (объединение, пересечение и вычитание), а затем - все остальные операции.

Замечание. В первых трех случаях, в частности, подразумевается, что речь идет о представлении, определяющее выражение которого имеет соответственно одну из следующих трех форм: А UNION В, А INTERSECT В и А MINUS В, где А и В, в свою очередь, являются некоторыми реляционными выражениями (т.е. необязательно представляют базовые пере-менные-отнощения). Переменные-отнощения А и В должны иметь один и тот же реляционный тип. Соответствующие предикаты данных переменных-отнощений - это РА и РВ.

Операция объединения

Приведем правило вставки для представления вида А UNION В.

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

Замечание. Конкретное определение выполняемой процедуры, использованное при формулировке правила (вставить сначала в переменную-отношение А, а затем - в переменную-отношение В), следует воспринимать только как педагогический прием. Не нужно полагать, что СУБД должна будет выполнять операцию вставки именно в той последовательности, которая указана в определении правила. На самом деле это замечание следует из принципа симметрии (принцип 3 из предыдущего подраздела), поскольку при вставке кортежа ни одна из переменных-отношений А или В не имеет преимуществ перед другой. Аналогичные соображения относятся ко всем правилам, рассматриваемым в этом разделе.

Пояснение. Новый кортеж должен удовлетворять по крайней мере одному из предикатов РА или РВ, так как в противном случае данный кортеж не будет включен в объединение А UNION В, поскольку он не будет удовлетворять предикату производной перемен-

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



ной-отношения для объединения А UNION В, а именно - (РА) OR (РВ). (Кроме того, мы предполагаем, хотя такое предположение и не строго обязательно, что новый кортеж не должен в данный момент присутствовать ни в переменной-отношении А, ни в переменной-отношении В, так как в противном случае это означало бы попытку вставить уже существующий кортеж.) Если предположить, что перечисленные условия удовлетворяются, то новый кортеж будет вставлен в переменную-отношение А или переменную-отношение В в зависимости от того, к какой из них этот кортеж логически принадлежит (возможно, к обеим).

Примеры. Пусть представление UV определено следующим образом.

VAR UV VIEW

( S WHERE STATUS > 25 ) UNION ( S WHERE CITY = Paris ) ;

Ha рис. 9.2 приведены возможные значения в этом представлении для нашего примера базы данных.

SNAME

STATUS

CITY

Jones

Paris

Blake

Paris

Adams

Athens

Puc. 9.2. Представление UV (пример значений)

Пусть кортеж, который необходимо вставить в представление UV, имеет вид (S6, Smith, 50, Rome). Этот кортеж удовлетворяет предикату S WHERE STATUS > 25, но не удовлетворяет предикату S WHERE CITY = Paris. Следовательно, новый кортеж вставляется в переменную-отношение, удовлетворяющую предикату S WHERE STATUS > 25. В соответствии с правилами вставки кортежей в представление на основе выборки (которые вполне очевидны; см. ниже) новый кортеж будет вставлен в базовую переменную-отношение поставщиков, и по этой причине он также появится в представлении, что и ожидалось.

Теперь предположим, что в представление UV требуется вставить кортеж вида (S7, Jones, 50, Paris). Этот кортеж удовлетворяет одновременно двум предикатам- S WHERE STATUS > 25 и S WHERE CITY = Paris. Логично предположить, что он будет вставлен в обе переменные-отношения, удовлетворяющие каждому из этих предикатов. Тем не менее следует заметить, что вставка кортежа в одну из переменных-отношений будет иметь побочный эффект, вследствие которого кортеж окажется автоматически вставленным и в другую переменную-отношение. Таким образом, вторую операцию вставки явно выполнять не нужно.

Рассмотрим две различные базовые переменные-отношения, SA и SB. Переменная-отношение SA содержит информацию о поставщиках, для которых значение атрибута STATUS превышает 25. а в переменной-отношении SB содержатся сведения о поставщиках из Парижа (рис. 9.3). Предположим, что представление UV определено как объединение

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



1 ... 108 109 110 [ 111 ] 112 113 114 ... 348

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