Главная » SQL, Базы данных » ОБНОВЛЕНИЕ ДАННЫХ В ПРЕДСТАВЛЕНИЯХ

0

Представления — это переменные отношения и поэтому (как и все  переменные) должны быть обновляемыми по определению. Но задача  обновления представлений всегда рассматривалась как очень сложная. Проблема обновления данных в представлениях может быть сформулирована следующим образом. Пусть дана некоторая операция обновления данных в заданном  представлении. Какие обновления и в какие исходные базовые переменные отношения нужно внести, чтобы реализовать исходное обновление представления? Формальное описание проблемы выглядит так. Пусть D — это база данных, а V — представление, определенное на D (т.е. представление, определение которого является функцией X на множестве D), следующим образом (как показано в разделе 10.3).

V   =   X    (   D   )

Теперь предположим, что uо — это операция обновления в представлении V. Так как uо можно считать операцией, результат выполнения которой состоит в изменении ее фактического параметра, то допустимо представить ее в следующем виде.

UO    (   V   )    =   UO    (   X    (   D   )    )

Тогда проблема выполнения обновления в представлении сводится к поиску  такой операции обновления uо’ на множестве D, для которой истинно следующее выражение.

UO    (   X    (   D   )    )    =   X    (   UO’     (   D   )    )

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

Следует подчеркнуть, что на протяжении последних лет проблема обновления представлений была предметом ряда важных исследований, в результате проведения которых было разработано множество различных подходов к решению этой проблемы. Подробные сведения об этих исследованиях можно найти,  например, в [10.4], [10.7]—[10.10], [10.12]. К ним относятся, в частности, предложения Кодда (Codd) по реляционной модели RM/V2 [6.2]. В этой главе  изложен относительно новый подход [10.6], [10.11],  менее произвольный  (характеризующийся наличием лучшего теоретического обоснования) по сравнению с применявшимися ранее подходами. Но самым важным его преимуществом является совместимость с наилучшими средствами предыдущих  подходов. Кроме того, новый подход позволяет считать обновляемым гораздо более широкий класс представлений по сравнению с прежними подходами. При этом подходе фактически все представления считаются потенциально обновляемыми,  при том условии, что не нарушаются установленные ограничения целостности.

Еще раз о золотом правиле

Напомним первую (более простую) версию золотого правила, представленную в предыдущей главе.

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

Другая (немного менее формальная) версия этого золотого правила приведена ниже.

Ни одна переменная отношения ни при каких условиях не должна противоречить своему собственному предикату.

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

При определении этого правила подчеркивалось, что оно применимо ко всем  переменным отношения, как к базовым, так и к производным. В частности, было указано,

что производные переменные отношения также имеют предикаты, как и должно быть

согласно принципу взаимозаменяемости. Таким образом, эти предикаты должны быть известны системе, что позволит ей правильно выполнять обновления представлений. Что же собой представляет предикат представления? Очевидно, что нам прежде всего необходим набор правил вывода предиката, такой что если известен предикат (предикаты) на входе (входах) любой реляционной операции, то с его помощью можно определить предикат на выходе этой операции. Если будет получен такой набор правил, то мы сможем вывести предикат представления из предиката базовой переменной отношения (или переменных отношения), в  терминах которой прямо или косвенно было определено это представление. (Безусловно, предикаты для всех базовых переменных отношения можно считать известными: они представляют собой логическую конъюнкцию всех ограничений, которые были объявлены для данной базовой переменной отношения.)

На самом деле, определить требуемый набор правил очень легко — они следуют непосредственно из определений реляционных операторов. Например, если А и В — две произвольные переменные отношения некоторого типа, имеющие предикаты, соответственно, РА и РВ, а представление С определено как A INTERSECT В, то очевидно, что предикат PC этого представления будет определяться выражением (PA) AND (РВ). Доказательство этого утверждения приведено ниже.

■     Кортеж t появится в представлении с лишь при том условии, что он присутствует одновременно и в представлении А, и в представлении в.

■   Если кортеж t присутствует в представлении А, то выражение РА (t) должно  быть истинным (здесь выражение "PA(t)" применяется как обозначение  высказывания, которое становится результатом конкретизации предиката РА с использованием значений атрибутов t в качестве формальных параметров).

■     Аналогичным образом, если кортеж t присутствует в представлении В, то должно быть истинным выражение РВ (t).

■     Следовательно, должно быть также истинным выражение РА (t)   AND РВ (t); это означает, что предикат РС представляет собой результат конкатенации предикатов РА и РВ (что и требовалось доказать).

О других реляционных операторах речь пойдет ниже в этом же разделе.

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

сверх унаследованных ограничений [3.3]. Поэтому для производных переменных  отношения  желательно  иметь  возможность  явно  устанавливать  требуемые  ограничения (например,  вводить  ограничения  потенциального  ключа  для  представления).  Язык Tutorial D действительно поддерживает такую возможность. Однако для упрощения изложения в дальнейшем мы будем чаще всего игнорировать эту возможность.

Принципы создания механизма обновления представлений

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

1.          Проблема обновляемое™ представлений является семантической, а не синтакси ческой. Другими словами, ее решение не зависит от выбранной формы записи оп ределения представления. Например, два приведенных ниже представления се мантически эквивалентны.

VAR V VIEW

S WHERE STATUS > 25 OR CITY = ‘Paris’ ;

VAR V VIEW

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

Очевидно, эти оба представления должны быть одновременно либо обновляемыми, либо   не   обновляемыми   (в   действительности   они,   безусловно,   должны   быть обновляемыми).  Однако  вопреки  этому   утверждению  и  в  стандарте  SQL,  и  в большинстве существующих на данный момент продуктов SQL, принят совершенно необоснованный  подход,  что  первое  из  приведенных  представлений  должно  быть обновляемым, а второе — нет (подробности приведены в разделе 10.6).

2.          Как следует из приведенных выше рассуждений, механизм обновления представ лений должен действовать правильно и в тех частных случаях, когда представление на самом деле является базовой переменной отношения, поскольку любая базо вая переменная отношения в семантически неотличима от представления V, оп ределенного на основании  операции в U NION в, или в I N TE R S EC T В , ИЛ И

В WHERE TRUE, или любого другого выражения, тождественно эквивалентного переменной отношения в. Таким образом, правила обновления, установленные, например, для представления, которое определено с помощью операции объеди нения v =   в UNION В, должны давать тот же результат, как и в случае, когда

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

3.          В применяемых правилах обновления должна соблюдаться симметричность во всех случаях, когда она имеет смысл. Например, правило удаления кортежа из представления, определенного как пересечение V = A INTERSECT В, не ДОЛЖНО допускать произвольного удаления кортежа из переменной отношения А, но не из в, даже в том случае, если и такое одностороннее удаление кортежа наверняка по влечет за собой в дальнейшем удаление этого кортежа из рассматриваемого пред ставления. В подобном случае должно быль предусмотрено удаление кортежа из обеих переменных отношения А и B. (Другими словами, не должно быть какойлибо неоднозначности. Всегда должен существовать единственный способ реализа ции данного обновления, который эффективно осуществляется во всех случаях.

В частности, не должно быть никаких логических различий между представления ми, определенными какА INTERSECT Bи B  INTERSECT  А.)

4.          В правилах обновления должны учитываться любые соответствующие активизи руемые действия, включая, в частности, конкретные действия, касающиеся под держки ссылочной целостности, такие как каскадное удаление.

5.           Для упрощения синтаксиса желательно рассматривать операцию UPDATE как со кращенную запись последовательности операций удаления и вставки (DELETE— INSERT); именно так мы и будем ее рассматривать. Это сокращение вполне при емлемо при соблюдении следующих условий.

■     Не должно осуществляться никаких проверок предикатов переменных отно шения в ходе выполнения любого требуемого обновления. Под этим подразу мевается, что расширенная запись операции UPDATE выглядит как DELETEINSERT—проверка, а не как DELETE—проверка—INSERT—проверка. При чина этого состоит в том, что операция DELETE может на время нарушить истинность предиката переменной отношения, притом что законченная опе рация UPDATE ее не нарушает. Например, предположим, что переменная от ношения R содержит ровно 10 кортежей, и рассмотрим воздействие операции UPDATE на некоторый кортеж переменной отношения R, при том условии, что согласно предикату этой переменной отношения R, в ней не может содержать ся меньше 10 кортежей. Очевидно, что проверка результатов выполнения опе рации DELETE завершится неудачей из-за нарушения условий предиката.

■   Триггерные процедуры также никогда не должны активизироваться в  ходе  выполнения любой операции обновления. (Фактически  триггерные процедуры активизируются после завершения операции,  непосредственно перед проверкой предиката отношения.)

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

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

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

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

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

Операции INSERT И DELETE ДОЛЖНЫ быть, насколько это возможно, взаимообратными.

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

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

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

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

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

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

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

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

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

правилам, рассматриваемым в этом разделе.

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

VAR UV VIEW

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

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

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

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

■     Теперь предположим, что в представление uv нужно вставить кортеж вида ( S 7 , Jones, 50, Paris). Этот кортеж удовлетворяет одновременно двум преди катам — S WHERE  STATUS  >  25 И S WHERE  CITY =   ‘ Paris’. ЛОГИЧНО предположить, что он будет вставлен в обе переменные отношения, удовлетворяющие каждому из этих предикатов. Тем не менее, следует заметить, что вставка кортежа в одну из переменных отношения будет иметь побочный эффект, вследствие кото рого кортеж окажется автоматически вставленным и в другую переменную отно шения. Таким образом, вторую операцию вставки INSERT ЯВНО ВЫПОЛНЯТЬ не тре буется.

Теперь рассмотрим две различные базовые переменные отношения, SA и SB. Переменная отношения SA содержит информацию о поставщиках, для которых значение атрибута STATUS превышает 25, а в переменной отношения SB содержатся сведения о поставщиках из Парижа (рис. 10.3). Предположим, что представление uv определено как объединение SA UNION SB, и вновь  рассмотрим  операцию вставки INSERT двух уже упомянутых выше кортежей.  Вставка кортежа (S6, Smith, 50,Rome) в представление UV приведет к вставке кортежа в базовую переменную отношения SA, что, по-видимому, и требуется. Однако вставка кортежа (S7, Jones, 50, Paris) в представление UV приведет к вставке кортежа в обе переменные отношения SA и SB! Полученный результат логически корректен, хотя интуитивно и не совсем понятен (именно этот результат в предыдущем подразделе был назван "несколько неожиданным"). С точки  зрения  автора подобные "неожиданности"могут    иметь    место     исключительно    как    следствие    плохо спроектированной структуры базы  данных. В частности, на его взгляд, если проект базы данных позволяет

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

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

Рис. 10.3. Базовые переменные отношения SA и SB (пример значений атрибутов)

Теперь рассмотрим правила удаления кортежей из представлений типад UNION в.

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

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

И наконец, рассмотрим правило выполнения операции обновления.

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

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

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

(S5, Adams , 3 0 , Athens) в представлении UV с преобразованием в (S5, Adams, 15, Paris) приведет к удалению старого кортежа из переменной отношения SA и его вставке в переменную отношения SB.

Операция пересечения

Приведем правила обновления представлений вида A INTERSECT В.  Причем в данном случае ограничимся просто формулированием правил без  каких-либо дополнительных пояснений (они аналогичны пояснениям для  правил обновления объединений). Единственное, о чем следует сказать, — это то, что для представлений вида A INTERSECT в предикат принимает вид  (PA) AND (PB). Подготовку примеров применения приведенных ниже правил оставляем читателю в качестве упражнения.

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

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

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

автоматически появится и в переменной отношения в). Если измененный кортеж все еще отсутствует в переменной отношения в, то он будет вставлен и в эту переменную отношения.

Операция разности

Ниже приведены правила обновления представлений вида A MINUS в (для представлений данного  вида  предикат  переменной  отношения  можно  записать как (PA)   AND  NOT    (PB)).

■     Правило INSERT. Новый кортеж должен удовлетворять предикату РА и не должен удовлетворять предикату РВ. Новый кортеж вставляется в переменную отношения А.

■     Правило DELETE. Удаляемый из представления кортеж удаляется из переменной отношения А.

■     Правило UPDATE. Обновляемый кортеж должен быть таким, чтобы его обновлен ная версия удовлетворяла предикату РА и не удовлетворяла предикату РВ. Кортеж удаляется из переменной отношения А без выполнения активизируемых действий и проверки предиката. Затем обновленная версия кортежа вставляется в перемен ную отношения А.

Операция сокращения

Допустим, что выражение для определения представления V можно задать в следующем виде: A WHERE p, а предикатом переменной отношения А является РА. Тогда предикат представления v примет следующий вид.

(PA)   AND  (p)

Например, предикат для операции сокращения S WHERE CITY = ‘London’  будет иметь  вид  (PS)  AND  (CITY  =  ‘London’),  где  PS  является  предикатом  переменной отношения с данными о поставщиках. Приведем правила обновления для представлений ВИДа A  WHERE  p.

■     Операция INSERT. НОВЫЙ кортеж должен удовлетворять предикату РА и условию р.

Новый кортеж вставляется в переменную отношения А.

■     Операция DELETE. Удаляемый кортеж удаляется из переменной отношения А.

■     Операция UPDATE. Обновляемый кортеж должен быть таким, чтобы его обновлен ная версия удовлетворяла и предикату РА, и условию р. Кортеж удаляется из пере менной отношения А без запуска каких-либо активизируемых действий и провер ки предиката. Затем в переменную отношения А вставляется обновленная версия кортежа.

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

VAR LS VIEW

S WHERE CITY = ‘London’ ;

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

Рис. 10.4. Представление LS (пример значений)

■     Попытка вставить в представление LS кортеж вида (S 6 , Green, 20, London) бу дет завершена успешно. Новый кортеж будет вставлен в переменную отношения s и, следовательно, появится также в представлении LS.

■     Попытка вставить в представление LS кортеж вида   ( S 1 , Green, 20, London) окончится неудачей, поскольку этот кортеж не удовлетворяет предикату перемен ной отношения S (и, следовательно, представления LS). Причина ошибки в том, что этот кортеж нарушает требование уникальности потенциального ключа {S#}.

■     Попытка вставить в представление LS кортеж вида (Sб,Green, 20, Athens) за вершится неудачно, поскольку этот кортеж нарушает условие CITY =   ‘ London’.

■     Попытка удалить из представления LS кортеж  ( S 1 , Smith, 20, London)  завер шится успешно. Кортеж будет удален из переменной отношения S и, следователь но, из представления LS.

■     Попытка обновить в представлении LS кортеж (S1, Smith, 20, London) с преоб разованием в (S6, Green, 20, London) завершится успешно. Попытки обновить тот же кортеж ( S 1 , Smith, 20, London) с преобразованием в (S1, Smith, 20, London) или в (S1, Smith, 20, Athens) будут неудачными (в каждом конкрет ном случае объясните, почему).

Операция проекции

Этот раздел также начинается с рассмотрения соответствующего предиката. Пусть атрибуты переменной отношения А (с предикатом РА) разделены на две непересекающиеся группы, допустим, X и Y . Полагая, что X и Y представляют собой отдельные составные атрибуты, рассмотрим проекцию А{Х} переменной отношения А по атрибуту х. Обозначим один из кортежей этой проекции через (х). Тогда должно быть очевидно, что предикатом для этой проекции, по сути, будет следующий предикат: "Для всех таких х существует такое значение у из домена значений атрибута Y, что кортеж (х, у) удовлетворяет предикату РА". Например, рассмотрим проекцию переменной отношения S по атрибутам S#, SNAME и CITY. Для каждого кортежа (s, п, с), который входит в данную проекцию, существует значение статуса t, такое что кортеж ( s , n ,t ,c )  удовлетворяет предикату переменной отношения S.

Ниже приведены правила обновления проекцииА{х}.

■  Правило INSERT. Пусть (х) — кортеж, который должен быть вставлен, и пусть у — значение, выбираемое по умолчанию из области значений атрибута Y  (было бы ошибкой, если бы такое применяемое по умолчанию значение не существовало, т.е. для атрибута Y применялось бы правило "значения по умолчанию запрещены"). Тогда кортеж (х, у), который должен удовлетворять предикату РА, будет вставлен в переменную отношения А.

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

■  Правило DELETE. Из переменной отношения А будут удалены все кортежи, у которых значение  атрибута  х  совпадает  со  значением  атрибута  кортежа,  удаляемого  из представления А {X}.

Примечание. На практике желательно, чтобы множество атрибутов X включало хотя бы один потенциальный ключ переменной отношения А, для того чтобы кортежу, удаляемому из проекции А{Х}, соответствовал единственный кортеж в переменной отношения А. Тем не менее, нет никаких резонных оснований превращать это пожелание в жесткое требование. Аналогичная оговорка относится и к операции UPDATE (см. ниже).

■  Правило UPDATE. Пусть (х) — это кортеж, который необходимо обновить, а (х’

) — это обновленная версия кортежа (х). Допустим, что а — это кортеж переменной отношения А, имеющий те же значения атрибутов х, что и кортеж X, а значения атрибутов  множества  Y  в  кортеже  а  равны  у.  Тогда  вначале  из  переменной отношения А будут удалены все кортежи а,  отвечающие указанным выше требованиям, причем без выполнения  активизируемых процедур и проверки предиката отношения. После этого для каждого определенного выше значения у в переменную отношения А  будет вставлен кортеж (х’ , у), если он удовлетворяет предикату РА.

Примечание. Именно в этом определении присутствуют те "небольшие  усовершенствования", касающиеся операции проекции, которые упоминались в правиле 5 обновления в подразделе "Принципы создания механизма обновления представлений" (который находится в начале текущего раздела). Обратите внимание, что на последнем этапе выполнения правила для операции UPDATE (этапе вставки) в каждом вставляемом кортеже восстанавливаются предыдущие значения атрибутов Y вместо обычной замены значениями, используемыми по умолчанию, как это имеет место при выполнении самостоятельных операций INSERT.

Примеры. Пусть представление SC определено с помощью следующего выражения.

SC  {  S#,  CITY  }

На рис. 10.5 показан пример содержимого этого представления.

Рис. 10.5. Представление SC (значения, взятые для примера)

■     Попытка вставить в представление SC кортеж  ( S 6 , Athens)  будет успешной.

В результате этой операции в переменную отношения s будет вставлен кортеж ( S6, n, t,Athens), где л и t являются значениями, которые используются по умолчанию для атрибутов SNAME и STATUS, соответственно.

■  Попытка вставить в представление SC кортеж (S1, Athens) окончится неудачей, так как этот кортеж не удовлетворяет предикату переменной отношения S (а значит, и представления SC). В частности, вставка этого кортежа нарушает требование уникальности потенциального ключа {S#}.

■     Попытка удалить из представления SC кортеж  (s1,London)  будет успешной.

Кортеж поставщика с номером S1 будет удален из переменной отношения S.

■     Попытка обновить кортеж ( S 1 , London) представления SC с преобразованием в ( S 1 , Athens) будет успешной. Это приведет к обновлению в переменной отно шения   S   кортежа    ( S 1 , Smith, 2 0 ,  London)    с   преобразованием   в   кортеж ( S 1 , Smith, 2 0 , Athens), но не в кортеж (S1,n, t,Athens), где п и t — соот ветствующие значения по умолчанию. Обязательно обратите на это внимание.

■     Попытка обновить в представлении SC тот же кортеж (SI, London) с преобразо ванием в ( S 2 , London) окончится неудачей (объясните, почему именно).

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

Операция расширения

Пусть представление V создано с помощью следующего определяющего выражения.

EXTEND  A ADD   ехр AS   X

Как обычно, предполагается, что предикатом переменной отношения А является РА.

Тогда предикат РЕ представления V будет иметь такой вид, как показано ниже.

«РА (  а   )   AND  е. X =  ехр   (   а   )

Здесь е — это кортеж представления V, а а — кортеж, который остается после удаления компонента X кортежа е (т.е. а — это проекция кортежа е по всем атрибутам переменной отношения А). На немного формализованном обычном  языке эту операцию можно описать следующим образом.

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

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

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

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

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

Примеры. Пусть представление VPX определено с помощью следующего выражения.

EXTEND P ADD ( WEIGHT * 454 ) AS GMWT

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

Рис. 10.6. Представление VPX (эти значения приведены в качестве примера)

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

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

(объясните, почему).

■     Попытка вставить кортеж (P1, Cog, Red, 12, Paris, 5448) окончится неудачей

(объясните, почему).

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

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

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

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

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

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

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

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

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

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

мы считаем эти операции допустимыми, полностью признавая тот факт, что обновление

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

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

Рассмотрим соединение J = A JOIN В. Здесь (как и в разделе 7.4 главы 7) переменные отношения А, в и J, соответственно, имеют заголовки {х, Y}, {Y,  Z} и

{X, Y, Z}. Пусть РА и РВ — это предикаты переменных отношения А И В. Тогда предикат PJ представления J будет иметь следующий вид.

РА  (  а  )   AND  РВ   (  Ь  )

Здесь для каждого заданного кортежа соединения j кортеж а является "относящейся к А частью" кортежа j (т.е. а — это кортеж, порождаемый из кортежа j посредством операции проекции, исключающей компонент Z), а Ъ является "относящейся к в частью" кортежа j (т.е. кортежем, порождаемым из кортежа j  посредством операции проекции, исключающей компонент х). Другими словами, каждый кортеж в соединении является таковым, что часть его, относящаяся к А, удовлетворяет предикату РА, а часть, относящаяся к в, удовлетворяет предикату РВ. Например, предикат для соединения переменных отношения s и SP по атрибуту s# можно сформулировать следующим образом.

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

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

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

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

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

.Теперь проверим возможность применения сформулированных правил ко всем трем существующим типам соединений.

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

Глава 10. Представления     417

Случай 1: соединения типа "один к одному"

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

Примеры

■     В качестве первого примера читателю предлагается рассмотреть результат приме нения приведенных выше правил к соединению переменной отношения с данны ми о поставщиках S с самой собой (только) по атрибуту номера поставщикаs#.

■     Во втором примере предположим, что в базе данных поставщиков и деталей со держится еще одна переменная отношения, SR, с атрибутами S# и REST, где атри бут s# идентифицирует поставщика, а атрибут REST содержит данные о его люби мом ресторане. Предположим, что в переменной отношения SR представлены не все поставщики, сведения о которых имеются в переменной отношения S. Читате лю предлагается рассмотреть результат применения правил обновления соедине ния к представлению, определенному как соединение s JOIN SR. Что изменится, если поставщик будет представлен в переменной отношения SR, но не будет пред ставлен в переменной отношения S?

Случай 2: соединения типа "один ко многим"

Здесь термин "один ко многим" можно заменить более точным термином "(нуль или один) к (нулю или многим)". Другими словами, имеет место ограничение целостности, гарантирующее, что для каждого кортежа из  переменной отношения в существует не больше одного соответствующего кортежа в переменной отношения А. Обычно это означает, что множество атрибутов Y, по которому выполняется операция соединения, должно содержать подмножество (скажем, к), такое что к является потенциальным ключом для переменной отношения А и соответствующим внешним ключом для переменной отношения в.

Примечание. Если выполняются сформулированные выше требования, то выражение

"нуль или один" можно заменить выражением "точно один".

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

S  JOIN  SP

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

■     Попытка вставить в представление SSP кортеж (S4,Clark,20,London,Рб,100) будет завершена успешно и приведет к вставке кортежа (S4, Рб, 100) в перемен ную отношения SP (в результате чего новый кортеж появится и в представлении).

■     Попытка вставить в представление SSP кортеж (S5, Adams , 3 0 , Athens, Рб, 100) будет завершена успешно и приведет к вставке кортежа (S5, Рб, 100) в перемен ную отношения SP (следовательно, новый кортеж добавится и к представлению).

■ Попытка вставить в представление SSP кортеж (S6, Green, 20, London, Р6,  100) будет завершена успешно и приведет к вставке кортежа (S6, Green, 20, London) в переменную  отношения  S  и  к  вставке  кортежа  (S6,  Р6,100)  в  переменную  отношения  SP  (в  результате  чего  новый  кортеж  появится   и  в  представлении). Примечание. Примем на время такое предположение,  что возможно существование кортежей SP без соответствующего кортежа s. Кроме того, допустим, что переменная отношения SP уже включает некоторые кортежи с номером поставщика S6, но в их число не входят кортежи с номером поставщика S6 и номером детали Р1. При таких условиях операция  INSERT, которая применялась в описанном выше примере, будет иметь побочный эффект, связанный со вставкой в представление некоторых дополнительных   кортежей,   а   именно   кортежей,   полученных   в    результате соединения  кортежа  (S6,  Green,  2 0 ,  London)  с  каждым  из  тех  ранее  существовавших кортежей SP, которые относятся к поставщику S6.

Рис. 10.7. Представление SSP (значения для примера)

■     Попытка вставить в представление SSP кортеж (S4,clark, 20, Athens, Рб, 100)

окончится неудачей (объясните, почему).

■     Попытка вставить в представление SSP кортеж (SI, Smith, 20, London, PI, 400)

окончится неудачей (объясните, почему).

■     Попытка удалить из представления SSP кортеж ( S 3 , Blake, 30, Paris, P2, 200) завершится успешно и приведет к удалению кортежа (S3, Blake, 30, Paris) из переменной отношения S и кортежа (S3, Р2, 2 00) из переменной отношения SP.

■     Попытка удалить из представления SSP кортеж (S1, Smith, 20, London, P1, 300) завершится "успешно" (с определенными оговорками; см. приведенное ниже примечание) и приведет к удалению кортежа ( S 1 , Smith, 2 0 , London) из пере менной отношения S и кортежа ( S l , Pl ,300 ) из переменной отношения SP.

Примечание. В действительности, общий результат приведенной операции удаления будет зависеть от установленного правила удаления внешнего ключа, связывающего отношения с данными о поставках и поставщиках. Если указана опция NO ACTION или RESTRICT, то данная операция  удаления окончится неудачей. Если указана опция CASCADE, то операция удаления будет иметь побочный

эффект, который выразится в дополнительном удалении из переменной отношения SP всех остальных кортежей (а значит, и кортежей  представления SSP), содержащих данные о поставщике с номером S1.

. ■ Попытка обновить в представлении SSP кортеж (S1, Smith, 20,London,  P1, 3 00)  с  преобразованием  в  ( S 1 ,  Smith,  20,  London,  P1,  400)  будет  успешно завершена  и  приведет  к  обновлению  кортежа  (S1,   P1,   300)   в   переменной отношения SP с преобразованием в (Sl , Pl ,400).

■     Попытка обновить в представлении SSP кортеж (SI, Smith, 20, London, P1, 300)

с преобразованием в (S1, Smith, 2 0 , Athens, PI, 400) будет успешно завершена

и приведет к обновлению кортежа (S1, Smith, 20, London) в переменной отно

шения S с преобразованием в ( S 1 , Smith,20,Athens) и кортежа ( S l , Pl ,300)

в переменной отношения SP с преобразованием в ( S 1 , P1, 400).

■     Попытка обновить в представлении SSP кортеж ( S 1 , Smith, 20, London, P1, 300) с преобразованием в (S6, Smith, 20, London, P1, 300) будет завершена "успеш но" (с определенной оговоркой; см. приведенное ниже примечание) и приведет к обновлению кортежа (S1, Smith, 20, London) в переменной отношения S с пре образованием в ( S 6 , Smith, 20, London) и кортежа ( S l,Pl ,3 00) в переменной отношения SPC преобразованием в (S6, Р1, 300).

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

Случай 3: соединения типа "многие ко многим"

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

Примеры. Предположим, что обсуждаемое представление определено с помощью следующего выражения.

S  JOIN  P

Это соединение переменных отношения S и Р по атрибуту CITY имеет тип "многие ко многим". Пример содержимого данного представления показан на рис. 10.8.

■     Вставка в представление кортежа ( S 7 , Bruce, 15, Oslo, P8,Wheel, White, 25) будет успешно завершена и приведет к вставке кортежа (S7, Bruce, 15, Oslo) в переменную отношения S и кортежа ( Р 8 , Wheel, White, 25, Oslo) в перемен ную отношения Р (в результате указанный кортеж появится в представлении).

■     Вставка в представление кортежа  (SI, Smith, 20, London, P7, Washer, Red, 5) будет успешно завершена и приведет к вставке кортежа  (Р7, Washer, Red, 5, London) в переменную отношения Р (в результате чего в представление попадут два кортежа — кортеж (S1, Smith, 20, London, P7,Washer, Red, 5), заданный в операции вставки, и кортеж (S4, Clark, 20, London, P7,Washer,Red, 5 ) ) .

Рис. 10.8. Результат соединения переменных отношения S и Р по атрибуту CITY

■     Вставка в представление кортежа   (S6, Green, 20, London, Р7, Washer, Red, 5) будет успешно завершена и приведет к вставке кортежа (S6, Green, 20, London) в переменную отношения S и кортежа (Р7,Washer,Red, 5, London) в переменную отношения р (в результате в представление будет добавлено шесть новых кортежей).

■     Удаление из представления кортежа   (SI, Smith, 20, London, PI,Nut, Red, 12) будет успешно завершено и приведет к удалению кортежа (SI, Smith, 20, London) из переменной отношения S и кортежа (PI,Nut,Red, 12,London) из переменной отношения Р (в результате из представления будут удалены четыре кортежа).

Предлагаем читателю подготовить дополнительные примеры самостоятельно в качестве упражнения.

Прочие операции

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

■     Переименование. Тривиальный случай.

■     Декартово произведение. Как уже отмечалось в разделе 7.4 главы 7, декартово про изведение   является   частным   случаем   естественного  соединения   (операция A JOIN В вырождается в операцию A TIMES В, если отношения А и в не имеют общих атрибутов). Поэтому правила обновления для операции декартова произве дения (A TIMES в) являются частным случаем правил обновления для операции соединения (конечно, как и правила обновления для операции пересечения A  INTERSECT В).

■     Формирование итогов. Операция формирования итогов (SUMMARIZE) тоже не яв ляется элементарной и определяется в терминах операции расширения. Поэтому правила обновления для операции формирования итогов являются производными от правил обновления для операции расширения.

Примечание. Общепринятое мнение, что на практике оканчивается неудачей основная часть попыток выполнить обновление представлений, которые определены с

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

SUMMARIZE SP BY { S# } ADD SUM ( QTY ) AS TOTQTY

Тогда попытка удаления кортежа, скажем, для поставщика с номером S1,  будет вполне успешной. Однако попытка обновить кортеж, скажем, (S4, 900), с преобразованием в (S4, 800) окончится неудачей, поскольку эта попытка нарушает ограничение, согласно которому значение атрибута  TOTQTY должно быть равным сумме всех соответствующих отдельных значений QTY. Попытка вставить кортеж (S5,  0) тоже приведет к ошибке,  но уже по другой причине (укажите, по какой именно).

■     Группирование и разгруппирование. Все замечания, которые были сделаны для опе рации формирования итогов, справедливы и для этих операций [3.3].

■     Транзитивное замыкание Tclose. И в данном случае справедливы почти такие же замечания.

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

По теме:

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