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

262 Понимание sql

______________________________________________________________________

ГЛ. 20

УДАЛЕНИЕ ПРЕДСТАВЛЕНИЙ

Синтаксис удаления представления из базы данных подобен синтаксису

удаления базовых таблиц:

DROP VIEW < view name >

В этом нет необходимости, однако, сначала надо удалить все содержание как

это делается с базовой таблицей, потому что содержание представления не

является созданым и сохраняется в течении определеной команды. Базовая

таблица из которой представление выводится, не эффективна когда представ-

ление удалено.

Помните, вы должны являться владельцем представления чтобы иметь воз-

можность удалить его.

=============== РЕЗЮМЕ ==============

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

отслеживать и обрабатывать содержание вашей базы данных, значительно

расширилась. Любые вещи которые вы можете создать с запросом, вы

всегда сможете определить как представление. Запросы этих представлений,

фактически, запрос запроса.

Использование представлений и для удобства и для защиты, также удобно

как и многие возможности представлений для форматирования и получения

значений из постоянно меняющегося содержания вашей базы данных. Име-

ется один главный вывод относительно представлений, это способность к мо-

дификации, которую мы выбрали в отличии от Главы 21. Как показано, вы

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

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

ление, но это не всегда возможно.

ВВЕДЕНИЕ: ПРЕДСТАВЛЕНИЯ 263

______________________________________________________________________

*************** РАБОТА С SQL *************

1. Создайте представление которое бы показывало всех заказчиков которые

имеют самые высокие оценки.

2. Создайте представление которое бы показывало номер продавца в каждом

городе.

3. Создайте представление которое бы показывало усредненый и общий поряд-

ки для каждого продавца после его имени. Предполагается, что все имена -

уникальны.

4. Создайте представление которое бы показывало каждого продавца с много-

числеными заказчиками.

( См. Приложение A для ответов. )

21

ИЗМЕНЕНИЕ ЗНАЧЕНИЙ

С ПОМОЩЬЮ ПРЕДСТАВЛЕНИЙ

266 Понимание sql

______________________________________________________________________

ГЛ. 21

ЭТА ГЛАВА РАССКАЗЫВАЕТ О КОМАНДАХ МОДИФИКАЦИИ

ЯЗЫКА DML - ВСТАВИТЬ(INSERT), ИЗМЕНИТЬ(UPDATE), и

УДАЛИТЬ(DELETE) - когда они применяются для представлений.

Как упомянуто в предыдущей главе, использование команд модификации в

представлениях - это косвенный способ использования их в ссылочных таб-

лицах с помощью запросов представлений. Однако, не все представления

могут модифицироваться.

В этой главе, мы будем обсуждать правила определяющие, является ли

представление модифицируемым. Кроме того, вы обучитесь использованию

предложения WITH CHECK OPTION, которое управляет указанными

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

Как упомянуто в Главе 18, это, в некоторых случаях, может быть желатель-

ным вариантом непосредственного ограничения таблицы.

==== МОДИФИЦИРОВАНИЕ ПРЕДСТАВЛЕНИЯ =====

Один из наиболее трудных и неоднозначных аспектов представлений -

непосредственное их использование с командами модификации DML.

Как упомянуто в предыдущей главе, эти команды фактически воздейст-

вуют на значения в базовой таблице представления.

Это является некоторым противоречием. Представление состоит из ре-

зультатов запроса, и когда вы модифицируете представление, вы моди-

фицируете набор результатов запроса. Но модификация не должна воз-

действовать на запрос ; она должна воздействовать на значения в табли-

це к которой был сделан запрос, и таким образом изменять вывод запро-

са. Это не простой вопрос. Следующий оператор будет создавать предс-

тавление показанное на Рисунке 21.1:

CREATE VIEW Citymatch (custcity, salescity)

AS SELECT DISTINCT a.city, b.city

FROM Customers a, Salespeople b

WHERE a.snum = b.snum;

Это представление показывает все совпадения заказчиков с их продавца-

ми так, что имеется по крайней мере один заказчик в городе_заказчика

обслуживаемый продавцом в городе_продавца.

Например, одна строка этой таблицы - London London - показывает, что

имеется по крайней мере один заказчик в Лондоне,обслуживаемый продав-

цом в Лондоне.

Эта строка может быть произведена при совпадении Hoffmanа с его прода-

вцом Peel, причем если оба они из Лондона.

ИЗМЕНЕНИЕ ЗНАЧЕНИЙ С ПОМОЩЬЮ ПРЕДСТАВЛЕНИЯ 267

______________________________________________________________________

=============== SQL Execution Log ==============

| |

| SELECT * |

| FROM Citymatch; |

| =============================================== |

| custcity salescity |

| --------- --------- |

| Berlin San Jose |

| London London |

| Rome London |

| Rome New York |

| San Jose Barselona |

| San Jose San Jose |

| |

================================================

Рисунок 21.1: Представление совпадения по городам

Однако, то же самое значение будет произведено при совпадении

Clemens из Лондона, с его продавцом, который также оказался с именем

- Peel. Пока отличающиеся комбинации городов выбирались конкретно,

только одна строка из этих значений была произведена.

Даже если вы не получите выбора используя отличия, вы все еще будете

в том же самом положении, потому что вы будете тогда иметь две строки в

представлении с идентичными значениями, то-есть с обоими столбцами рав-

ными " Lоndon London ". Эти две строки представления будут отличаться

друг от друга, так что вы пока не сможете сообщить, какая строка представ-

ления исходила из каких значений базовых таблиц( имейте в виду, что зап-

росы не использующие предложение ORDER BY, производят вывод в произ-

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

представлений, которые не могут использовать ORDER BY. Таким образом,

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

Это означает, что мы будем снова обращаться к выводу строк которые не мо-

гут быть точно связаны с указаными строками запрашиваемой таблицы.

Что если вы пробуете удалить строку ” London London ” из представления?

Означало бы это удаление Hoffmanа из таблицы Заказчиков, удаление Clemens

из той же таблицы, или удаление их обоих? Должен ли SQL также удалить

Peel из таблицы Продавцов? На эти вопросы невозможно ответить точно, по-

этому удаления не разрешены в представлениях такого типа.

Представление Citymatch - это пример представления только_чтение, оно мо-

жет быть только запрошено, но не изменено.

Соседние файлы в папке ПОНИМАНИЕ SQL