|
Программирование >> Хронологические базы данных
SA UNION SB, и вновь рассмотрим операцию вставки двух уже упомянутых выше кортежей. Вставка кортежа (S6, Smith, 50, Rome) в представление UV приведет к вставке кортежа в базовую переменную-отношение SA, что, по-видимому, и требуется. Однако вставка кортежа (S7, Jones, 50, Paris) в представление UV приведет к вставке кортежа в обе переменные-отношения SA и SB! Полученный результат логически корректен, хотя интуитивно и не совсем понятен (именно этот результат в предыдущем подразделе был назван несколько неожиданным ). В моем понимании подобные неожиданности могут иметь место исключительно как следствие плохо спроектированной структуры базы данных. В частности, на наш взгляд, если проект базы данных позволяет одним и тем же кортежам появляться (т.е. удовлетворять их предикатам) в разных базовых переменных-отношениях, это, определенно, плохой проект. Такая позиция (возможно, спорная) детально рассматривается в разделе 12.6 главы 12.
Puc. 9.3. Базовые переменные-отношения SA и SB (пример значений атрибутов) Теперь сосредоточимся на правилах удаления кортежей из представлений типа А UNION В. Правило DELETE. Если удаляемый кортеж принадлежит переменной-отношению А, то он удаляется из нее (заметьте, что данное удаление может иметь побочный эффект, вследствие которого этот же кортеж будет удален и из переменной-отношения В). Если после удаления кортежа из переменной-отношения А этот кортеж все еще остается в переменной-отношении В, то он будет удален и из переменной-отношения В. В качестве упражнения придумайте примеры, иллюстрирующие данное правило. Следует заметить, что удаление кортежа из переменной-отношения А или В может привести к каскадному удалению или к запуску триггерных процедур. И наконец, рассмотрим правило операции обновления. Правило UPDATE. Обновляемый кортеж должен быть таким, чтобы его обновленная версия удовлетворяла либо предикату РА, либо предикату РВ, либо обоим этим предикатам одновременно. Если кортеж принадлежит переменной-отношению А, то его удаляют из нее без запуска каких-либо триггерных процедур (каскадное удаление и т.п.), запускаемых при обычной операции удаления. Кроме того, проверка удовлетворения предиката переменной-отношения А не выполняется. Следует заметить, что эта операция удаления может иметь побочный эффект, вследствие которого выбранный кортеж будет удален и из переменной-отношения В. Если после удаления из переменной-отношения А обновляемый кортеж все еще сохраняется в переменной-отношении В, то он удаляется из этой переменной-отношения (опять же, без проверки ее предиката и запуска каких-либо триггерных процедур). Далее, если обновленная версия кортежа удовлетворяет предикату РА, кортеж вставляется в переменную-отношение А (эта операция может иметь побочный эффект, вследствие которого новая версия данного кортежа может появиться и в переменной-отношении В). И наконец, если обновленная версия кортежа удовлетворяет предикату РВ, то кортеж вставляется в переменную-отношение В, но только в том случае, если он не был вставлен в данную переменную-отношение в результате побочного эффекта от вставки обновленного кортежа в переменную-отношение А. Приведенное выше правило обновления, по сути, состоит из правила удаления, за которым следует правило вставки, за исключением того, что, как указывалось и ранее, после удаления старой версии кортежа не выполняются проверка предикатов и запуск триггерных процедур (все триггерные процедуры, связанные с операцией обновления, концептуально выполняются после завершения всех операций удаления и вставки, непосредственно перед проверкой предикатов). Необходимо отметить одно важное следствие такого рода трактовки операции обновления, которое состоит в том, что после выполнения операции обновления представления измененный кортеж может мигрировать из одной переменной-отношения в другую. В базе данных, показанной на рис. 9.3, обновление кортежа (S5, Adams, 30, Athens) в представлении UV в виде (S5, Adams, 15, Paris) приведет к удалению старого кортежа из переменной-отношения SA и его вставке в переменную-отношение SB. Операция пересечения Приведем правила обновления представлений вида А INTERSECT В. Причем в данном случае ограничимся формулированием правил без каких-либо дополнительных пояснений (они аналогичны пояснениям для правил обновления объединений). Единственное, о чем следует сказать, - это то, что для представлений вида А INTERSECT В предикат принимает вид (РА) AND (РВ). Примеры для приведенных ниже правил предлагаем читателю привести самостоятельно в качестве упражнения. Правило INSERT. Новый кортеж должен удовлетворять предикатам РА и РВ одновременно. Если новый кортеж на текущий момент отсутствует в переменной-отношении А, то он будет вставлен в эту переменную-отношение (заметьте, что операция вставки может иметь побочный эффект, вследствие которого новый кортеж появится и в переменной-отношении В). Если новый кортеж все еще отсутствует в переменной-отношении В, то он будет вставлен в эту переменную-отношение. Правило DELETE. Удаляемый из представления кортеж удаляется из переменной-отношения А (заметьте, что эта операция удаления может иметь побочный эффект, в результате которого удаляемый кортеж исчезнет и из переменной-отношения В). Если удаляемый кортеж все еще присутствует в переменной-отношении В, то он будет удален и из этой переменной-отношения. Правило UPDATE. Обновляемый кортеж должен быть таким, чтобы его обновленная версия удовлетворяла одновременно обоим предикатам РА и РВ. Кортеж удаляется из переменной-отношения А без запуска триггерных процедур и проверки предиката этой переменной-отношения (заметим, что данная операция может иметь побочный эффект, вследствие которого кортеж будет удален и из переменной-отношения В). Если до этого момента обновляемый кортеж все еще не был удален из переменной-отношения В, то он будет удален из нее, опять же, без запуска триггерных процедур и проверки предиката. Далее, если обновленная версия кортежа в данный момент в переменной-отношении А отсутствует, то измененный кортеж будет вставлен в переменную-отношение А (заметьте, что операция вставки также может иметь побочный эффект, вследствие которого новый кортеж автоматически появится и в переменной-отношении В). Если измененный кортеж все еще отсутствует в переменной-отношении В, то он будет вставлен и в эту переменную-отношение. Операция вычитания Ниже приведены правила обновления представлений вида А MINUS В (для представлений данного вида предикат переменной-отношения можно записать так: (РА) AND NOT (РВ)). Правило INSERT. Новый кортеж должен удовлетворять предикату РА и не должен удовлетворять предикату РВ. Новый кортеж вставляется в переменную-отношение А. Правило DELETE. Удаляемый из представления кортеж удаляется и из переменной-отношения А. Правило UPDATE. Обновляемый кортеж должен быть таким, чтобы его обновленная версия удовлетворяла предикату РА и не удовлетворяла предикату РВ. Кортеж удаляется из переменной-отношения А без выполнения триггерных процедур и проверки предиката. Затем обновленная версия кортежа вставляется в переменную-отношение А. Операция выборки Допустим, что выражение определения представления V можно задать в следующем виде: А WHERE р. И пусть РА будет предикатом переменной-отношения А. Тогда предикат представления V примет следующий вид: (РА) AND (р). Например, предикат для операции выборки S WHERE CITY = London будет иметь вид (PS) AND (CITY = London), где PS является предикатом переменной-отношения поставщиков. Приведем правила обновления для представлений вида А WHERE р. Операция INSERT. Новый кортеж должен удовлетворять предикату РА и условию р. Новый кортеж вставляется в переменную-отношение А. Операция DELETE. Удаляемый кортеж удаляется из переменной-отношения А. Операция UPDATE. Обновляемый кортеж должен быть таким, чтобы его обновленная версия удовлетворяла предикату РА и условию р. Кортеж удаляется из переменной-отношения А без запуска каких-либо триггерных процедур и проверки предиката. Затем в переменную-отношение А вставляется обновленная версия кортежа. Примеры. Пусть представление LS определено следующим образом. VAR LS S WHERE CITY = London ; На рис. 9.4 приведен пример значений для этого представления.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |