Скачиваний:
32
Добавлен:
01.04.2014
Размер:
418.3 Кб
Скачать

Пересечение

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

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

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

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

Вычитание

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

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

DELETE. Кортеж, который нужно удалить из представления, удаляется из А.

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

17.7. Обновление представлений других видов

Ниже рассматриваются оставшиеся операции реляционной алгебры — выборка, про­екция, соединение и т.п.

Выборка

Рассмотрим операцию выборки общего вида:

A WHERE условие

Предикат отношения, которое является результатом показанной операции выбор­ки, примет следующий вид: (PA) AND (условие). Например, предикат отношения для выборки s where city = 'London' примет вид (ps) and (city = 'London'), где PS является предикатом отношения S. Из этого следует, например, что любой кортеж t, выбран­ный для вставки в представление, которое определено как выборка, должен удовле­творять условиям PS(t) и t.CITY = 'London', в противном случае операция insert за­вершится неудачей.

Приведем правила обновления представлений вида A where условие.

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

DELETE. Кортеж, который нужно удалить, удаляется из А.

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

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

S WHERE CITY = 'London'

На рис. 17.4 показана таблица значений этого представления

LS

S#

SNAME

STATUS

CITY

S1

S4

Smith

Clark

20

20

London

London

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

• Попытка вставить кортеж (S6, Green, 20, London) в представление LS будет вы­полнена успешно. Новый кортеж будет вставлен в отношение S и, следовательно, появится в представлении LS.

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

• Попытка вставить кортеж (S6, Green, 20, Athens) завершится неудачей, так как этот кортеж не удовлетворяет условию city = 'London'.

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

• Попытка обновить кортеж (S 1, Smith, 20, London) кортежем (S6, Green, 20, London) будет выполнена успешно. Попытка обновить кортеж (S1, Smith, 20, London) корте­жем (S2, Smith, 20, London) или кортежем (S 1, Smith, 20, Athens) потерпит неудачу (ответьте, почему это происходит в каждом случае?).

Проекция

Этот раздел также начнется с записи соответствующего предиката. Пусть атрибуты отношения А разделены на две несвязанные группы — Х и У. Будем рассматривать Х и У как составные атрибуты. Следовательно, данный кортеж {Х:х} появится в проек­ции А[Х] тогда и только тогда, когда существует значение y из области значений ат­рибута Y, такое что кортеж [Х:х, У:у] входит в А. Например, рассмотрим проекцию описанного ранее отношения S по атрибутам S#, SNAME и CITY. Для каждого кор­тежа (s, п, с), который входит в проекцию, существует значение статуса t, такое что кортеж (s, n, t, с) принадлежит отношению S.

Ниже приведены правила обновления проекций.

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

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

DELETE. Из А будут удалены все кортежи, в которых значение Х совпадает со значением Х в удаляемом из представления А[Х] кортеже.

Замечание. На практике желательно, чтобы множество атрибутов А" включало хотя бы один потенциальный ключ, тогда удаляемому из проекции А [Х] кортежу будет соответствовать единственный кортеж а в отношении А. Тем не менее, нет ника­ких логических причин превращать это пожелание в жесткое требование. Анало­гичные соображения также применимы к операции update (см. ниже).

UPDATE. Пусть (х)— кортеж, который нужно обновить, а (x')— обновленная версия кортежа (х). Пусть а— кортеж отношения А, в котором то же значение х атрибута X. Пусть у — значение атрибута Y в кортеже А. Сначала из А будут уда­лены все подобные кортежи а без запуска триггеров и без выполнения проверок предикатов отношений. После этого в отношение А для каждого значения у будет вставлен кортеж (х', у), который удовлетворяет предикату РА.

Замечание. Здесь продемонстрированы "незначительные усовершенствования", которые упоминались в принципах обновления выше в этой главе. В частности, сле­дует заметить, что последний этап вставки в правиле для операции update восстанав­ливает предыдущее значение атрибута Y в каждом вставляемом кортеже — это пра­вило не заменяет предыдущее значение атрибута У значением, используемым по умолчанию, как это делается при выполнении отдельных операций вставки.

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

sc [ s#, city ]

На рис. 17.5 это представление показано в виде таблицы.

SC

s#

CITY

S1

London

32

Paris

S3

Paris

S4

London

S5

Athens

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

• Попытка вставить в представление SC кортеж (S6, London) будет успешно выпол­нена. В результате этой операции в отношение S будет вставлен кортеж (S6, п, t, London), где п и / являются значениями, которые используются по умол­чанию для атрибутов S.SNAME и S.STATUS соответственно.

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

• Попытка удалить из представления SC кортеж (S1, London) будет выполнена ус­пешно. Кортеж будет удален из отношения S.

• Попытка обновить кортеж (S1, London) кортежем (S1, Athens) будет выполнена успешно. Это приведет к замене в отношении S кортежа (S1, Smith, 20, London) кортежем (S1, Smith, 20, Athens), а не (S1, п, t, Athens), пожалуйста, запомните это.

• Попытка обновить в SC тот же кортеж (S1, London) кортежем (S2, London) завер­шится неудачей (укажите причину).

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

Расширение

Предикат РЕ отношения Е, которое является результатом операции расширения

EXTEND A ADD exp AS X,

примет следующий вид:

PA ( а ) AND е.Х = exp ( a )

Здесь е— это кортеж отношения Е, а а— проекция кортежа е по всем атрибутам отношения А. Иначе это можно сформулировать следующим образом:

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

Приведем правила обновления представления вида Е = extend A add exp as X.

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

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

UPDATE. Пусть е— кортеж, который нужно обновить, a e'— обновленная вер­сия кортежа е. Сначала из А без запуска триггеров и без выполнения проверок предикатов отношений будет удален кортеж а, порожденный кортежем е посред­ством проекции, исключающей значение е.Х. Затем в А будет вставлен кортеж а', порожденный кортежем е' посредством проекции, исключающей значение e'.X.

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

EXTEND P ADD ( WEIGHT * 454 ) AS GMWT

На рис. 17.6 приведена таблица значений представления РХ.

РХ

р#

PNAME

COLOR

WEIGHT

CITY

GMWT

pi

Nut

Red

12

London

5448

Р2

Bolt

Green

11

Paris

7718

РЗ

Screw

Blue

17

Rome

7718

Р4

Screw

Red

14

London

6356

Р5

Cam

Blue

12

Paris

5448

Р6

Cog

Red

19

London

8626

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

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

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

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

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

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

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

Соединение

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

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

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

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

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

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

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

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

PA ( a ) AND РВ ( b ),

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

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

Например, предикат для соединения часто обсуждаемых в этой книге отношений S и SP по атрибуту S# можно сформулировать так:

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

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

INSERT. Новый кортежу должен удовлетворять предикату PJ. Если A-часть кор­тежа у не входит в А, то А-частъ вставляется в А(///). Если B-часть не присутствует в В, то B-часть вставляется в В.

DELETE. А-часть удаляемого кортежа удаляется из А. В-часть удаляемого корте­жа удаляется из В.

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

//// Заметьте, что операция INSERT может иметь побочный эффект, вследствие которого B-часть корте­жа у будет вставлена в В, как в случае с представлениями, описанными выше. Аналогичные соображения применимы к правилам для операций DELETE и UPDATE. Для краткости возможность побочных эффек­тов не будет упоминаться в каждом правиле./////

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

Примеры:

• В качестве первого примера читателю предлагается рассмотреть эффект примене­ния правил на соединении отношения S (с информацией о поставщиках) с самим собой только по номеру поставщика (атрибут S#).

• Рассмотрим второй пример. Предположим, что база данных поставщиков и дета­лей содержит еще одно отношение SR { S#, REST }, где атрибут S# идентифици­рует поставщика, а атрибут REST содержит информацию о любимом ресторане поставщика. Предположим, что не все поставщики представлены в отношении SR. Читателю предлагается рассмотреть эффект применения изложенных правил на соединении отношений S и SR (по атрибуту S#). Что изменится, если поставщик будет представлен в отношении SR и не будет представлен в отношении S?

Тип 2 (один-ко-многи-м). Термин "один-ко-многим" можно заменить более точным термином "(нуль-или-один)-к-(нулю-или-многим)". Другими словами, существует стандартное для СУБД ограничение целостности, гарантирующее, что для каждого кортежа из В существует не более одного соответствующего кортежа в А. Точнее, множество атрибутов Y, по которому выполняется соединение, должно содержать подмножество К, такое что К является потенциальным ключом для А и соответст­вующим внешним ключом для В.

Замечание. Если сформулированные выше требования выполняются и если внеш­ний ключ определен с помощью инструкции nulls not allowed, то выражение "нуль или один" можно заменить выражением "точно один".

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

s join sp

Это, конечно, соединение с внешним согласованным потенциальным ключом. Об­разцы данных представления SSP показаны на рис. 17.7.

SSP

S#

SNAME

STATUS

CITY

P#

OTY

Sl

Smith

20

London

PI

300

Sl

Smith

20

London

P2

200

Sl

Smith

20

London

P3

400

Sl

Smith

20

London

P4

200

Sl

Smith

20

London

P5

100

Sl

Smith

20

London

P6

100

S2

Jones

10

Paris

PI

300

S2

Jones

10

Paris

P2

400

s3

Blake

30

Paris

P2

200

S4

dark

20

London

P2

200

S4

dark

20

London

P4

300

S4

dark

20

London

P5

400

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

• Попытка вставить кортеж (S4, dark, 20, London, P6, 100) в представление SSP бу­дет завершена успешно и приведет к вставке кортежа (S4, P6, 100) в отношение SP (следовательно, новый кортеж появится в представлении).

• Попытка вставить кортеж (S5, Adams, 30, Athens, P6, 100) в представление SSP будет завершена успешно и приведет к вставке кортежа (S5, P6, 100) в отношение SP (следовательно, новый кортеж появится в представлении).

• Попытка вставить кортеж (S6, Green, 20, London, P6, 100) в представление SSP будет завершена успешно и приведет к вставке кортежа (S6, Green, 20, London) в отношение S и к вставке кортежа (S6, P6, 100) в отношение SP (следовательно, новый кортеж появится в представлении).

Замечание. Предположим на мгновение, что возможно присутствие кортежей в отношении SP без соответствующих кортежей в отношении S. Более того, пред­положим, что отношение SP уже содержит несколько кортежей с номером по­ставщика S6 (но в этом отношении отсутствует кортеж с поставщиком S6 и дета­лью Р1). Тогда последняя из перечисленных операций вставки приведет к вставке дополнительных кортежей в представление, а именно: в отношении появятся со­единения кортежа (S6, Green, 20, London) и тех кортежей поставщика S6, которые ранее присутствовали в отношении SP.

• Попытка вставить кортеж (S4, dark, 20, Athens, P6, 100) в представление SSP за­вершится неудачей (почему?).

• Попытка вставить кортеж (S5, Adams, 30, London, P6, 100) в представление SSP завершится неудачей (почему?).

• Попытка вставить кортеж (Sl, Smith, 20, London, PI, 400) в представление SSP за­вершится неудачей (почему?).

• Попытка удалить кортеж (S3, Blake, 30, Paris, P2, 200) из представления SSP будет выполнена успешно и приведет к удалению кортежа (S3, Blake, 30, Paris) из отно­шения S и кортежа (S3, P2, 200) из отношения SP.

• Попытка удалить кортеж (S 1, Smith, 20, London, P 1, 300) из представления SSP условно будет выполнена успешно (см. замечание ниже) и приведет к удалению кортежа (Sl, Smith, 20, London) из отношения S и кортежа (Sl, P1,300) из отношения SP.

Замечание. На самом деле общий эффект приведенной операции удаления будет за­висеть от правила удаления внешнего ключа из SP.S# в S.S#. Если используется пра­вило restrict, то операция удаления завершится неудачей. Если используется пра­вило cascade, то удаление будет иметь побочный эффект, который приведет к уда­лению из отношения SP других кортежей, содержащих данные о поставщике Sl.

• Попытка обновить кортеж (Sl, Smith, 20, London, P1, 300) в представлении SSP кортежем (Sl, Smith, 20, London, PI, 400) будет успешно завершена и приведет к обновлению кортежа (Sl, P1, 300) в отношении SP кортежем (Sl, P1, 400).

• Попытка обновить кортеж (Sl, Smith, 20, London, PI, 300) в представлении SSP корте­жем (Sl, Smith, 20, Athens, PI, 400) будет успешно завершена и приведет к обновлению кортежа (Sl, Smith, 20, London) в отношении S кортежем (Sl, Smith, 20, Athens) и кор­тежа (Sl, P1,300) в отношении SP кортежем (Sl, P1,400).

• Попытка обновить кортеж (Sl, Smith, 20, London, P1, 300) в представлении SSP кортежем (S6, Smith, 20, London, PI, 300) будет условно успешно завершена (см. замечание ниже) и приведет к обновлению кортежа (Sl, Smith, 20, London) в от­ношении S кортежем (S6, Smith, 20, London) и кортежа (Sl, PI, 300) в отношении SP кортежем (S6, P1, 300).

Замечание. На самом деле эффект приведенной операции обновления будет зави­сеть от правила обновления внешнего ключа из SP.S# в S.S#. Детальное рассмот­рение оставлено в качестве упражнения читателю.

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

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

S JOIN P

Это соединение отношений S и Р по атрибуту CITY. Образцы данных показаны на рис.17.8.

s#

SNAME

STATUS

CITY

P#

PNAME

COLOR

WEIGHT

Sl

Smith

20

London

PI

Nut

Red

12

Sl

Smith

20

London

P4

Screw

Red

14

Sl

Smith

20

London

P6

Cog

Red

19

S2

Jones

10

Paris

P2

Bolt

Green

17

S2

Jones

10

Paris

P5

Cam

Blue

12

S3

Blake

30

Paris

P2

Bolt

Green

17

S3

Blake

30

Paris

P5

Cam

Blue

12

S4

dark

20

London

PI

Nut

Red

12

S4

dark

20

London

P4

Screw

Red

14

S4

dark

20

London

P6

Cog

Red

19

Рис. 17.8. Соединение отношений S и Р по атрибуту CITY

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

• Вставка кортежа (Sl, Smith, 20, London, P7, Washer, Red, 5) будет успешно завер­шена и приведет к вставке кортежа (P7, Washer, Red, 5, London) в отношение Р (следовательно, в представление попадет два кортежа— (Sl, Smith, 20, London, P7, Washer, Red, 5) и (S4, dark, 20, London, P7, Washer, Red, 5)).

• Вставка кортежа (S6, Green, 20, London, P7, Washer, Red, 5) будет успешно завер­шена и приведет к вставке кортежа (S6, Green, 20, London) в отношение S и кор­тежа (P7, Washer, Red, 5, London) в отношение Р (следовательно, в представление попадет шесть кортежей).

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

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

Другие операции

В этом разделе кратко описаны оставшиеся операции реляционной алгебры: декарто­во произведение, 9-соединение, переименование, деление и операция подведения итогов.

Декартово произведение. Так как декартово произведение является частным слу­чаем естественного соединения (A join В вырождается в A times Д, если А и В не имеют общих атрибутов), то правила для декартова произведения (A times В) яв­ляются частным случаем правил обновления соединений (A join В). Детальный анализ правил оставлен в качестве упражнения.

• -соединение. Это выборка декартова произведения. Следовательно, правила об­новления таких представлений можно получить из правил обновления для декар­товых произведений.

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

Деление. Деление (как и -соединение) не совсем примитивная операция, поэтому соответствующие правила можно получить из уже изложенных (в частности, из правил для вычитания, проекции и декартова произведения). Как и прежде, де­тальное изложение правил для данной операции оставлено в качестве упражнения для читателя, но следует заметить, что представления, полученные с помощью операции деления, возможно, вообще не являются обновляемыми (точно укажите причину).

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

Замечание о целевых отношениях

Завершим обсуждение проблемы обновления представлений следующим утвержде­нием. Пусть, например, представление, построенное с помощью операции соедине­ния, является обновляемым. Тогда нет никаких причин использовать в качестве целе­вых отношений в операциях insert, delete и update именованные отношения. Поэтому если выражение insert into ssp корректно (представление SSP приводилось выше в этой главе), то выражение insert into (s join sp) также должно быть корректным. Конечно, аналогичные соображения применимы и для реляционных операций при­своения.

Для демонстрации предположим, что представление LSSP определено с помощью следующего выражения:

( S WHERE CITY = 'London' ) JOIN SP

Исходя из обычных образцов данных, попытка вставить кортеж (S6, Green, 20, London, P6, 100) будет успешно завершена и приведет к вставке кортежа (S6, Green, 20, London) в отношение S и кортежа (S6, P6, 100) в отношение SP. Точнее, первый из двух кортежей — (S6, Green, 20, London) — будет вставлен не непосредственно в отношение S, а в выборку s where city = 'London'. Далее в игру вступает правило вставки корте­жей в выборку, что и приводит к желаемому результату. Тем не менее, следует отметить один важный аспект: целевое отношение промежуточной операции insert представле­но не именованным отношением, а выражением с операцией выборки.

Соседние файлы в папке Дейтл Введ в БД