- •7.7.6. Определить общее количество поставщиков
- •7.7.7. Определить в поставках максимальное
- •7.7.8. Для каждой поставляемой детали указать номер и общий объем поставки в штуках
- •7.7.9. Указать номера всех типов деталей, поставляемых более чем одним поставщиком
- •7.7.10. Определить имена поставщиков детали с номером т2'
- •7.7.11. Определить имена поставщиков по крайней мере одной красной детали
- •7.7.12. Указать номера поставщиков, статус которых меньше текущего максимального статуса
- •7.7.13. Указать имена поставщиков детали с номером 'р2'
- •7.7.14. Выбрать имена поставщиков, которые не поставляют деталь с номером 'р2'
- •7.7.15. Определить имена поставщиков всех типов деталей
- •7.7.16. Определить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером 's2', либо и то, и другое
- •7.8. Резюме
- •8.2. Ограничения типа
- •8.3. Ограничения атрибута
- •8.4. Ограничения переменной-отношения
- •8.5. Ограничения баз данных
- •8.6. "Золотое правило"
- •8.7. Ограничения состояния и ограничения перехода
- •8.8. Ключи
- •3. Пусть r1 и r2 — ссылающаяся и ссылочная переменные-отношения соответственно.
- •8.9. Средства языка sql
- •8.10. Резюме
- •9.1. Введение
- •9.2. Для чего нужны представления
- •9.3. Выборка данных из представлений
- •9.4. Обновление данных в представлениях
- •9.5. Моментальные снимки
- •9.6. Поддержка представлений в языке sql
- •9.7. Резюме
- •Часть III
- •10.1. Введение
- •10.2. Основные определения
- •10.3. Тривиальные и нетривиальные зависимости
- •10.4. Замыкание множества зависимостей
- •10.5. Замыкание множества атрибутов
- •10.6. Неприводимые множества зависимостей
- •10.7. Резюме
- •Глава 1 1
- •I Переменные-отношения в знф I
- •11.2. Декомпозиция без потерь
- •11.3. Первая, вторая и третья нормальные формы
- •11.4. Сохранение зависимостей
- •11.5. Нормальная форма Бойса-Кодда
- •11.6. Замечание по поводу атрибутов, содержащих в качестве значений отношения
- •11.7. Резюме
- •12.1. Введение
- •12.2. Многозначные зависимости и четвертая нормальная форма
- •12.3. Зависимости соединения и пятая нормальная форма
- •Соединение по комбинации атрибутов j#,s#
- •Исходное состояние spj
- •12.4. Общая схема процедуры нормализации
- •12.5. Денормализация
- •12.6. Ортогональное проектирование (небольшое отступление от темы)
- •12.7. Другие нормальные формы
- •12.8. Резюме
- •12.3. Brosda V., Vossen g. Update and Retrieval Through a Universal Schema Interface // acm tods. — December, 1988. — 13, № 4.
- •12.5. Date c.J. Will the Real Fourth Normal Form Please Stand Up? // c. J. Date and Hugh Darwen. Relational Database Writings 1989-1991.— Reading, Mass.: Addison-Wesley, 1992.
- •12.20.Kent w. The Universal Relation Revisited // acm tods. — December, 1983. — 8, № 4.
- •12.22.Maier d., Ullman j.D. Fragments of Relations // Proc. 1983 sigmod Intern. Conf. On Management of Data. — San Jose, Calif. — May, 1983.
- •12.24.Maier d., Ullman j.D. Maximal Objects and the Semantics of Universal Relation Databases // acm tods. — March, 1983. — 8, № 1.
- •Глава 13
- •13.1. Введение
- •13.2. Общий подход
- •Каждыи экземпляр сущности ности «Произведение"
- •13.3. Модель "сущность/связь"
- •13.5. Проектирование базы данных с помощью метода er-моделирования
- •13.6. Краткий анализ er-модели
- •13.7. Резюме
9.6. Поддержка представлений в языке sql
В этом разделе будут рассмотрены средства поддержки представлений, существующие в языке SQL (к сожалению, на данный момент язык SQL не предусматривает поддержки моментальных снимков). Прежде всего, рассмотрим синтаксис оператора создания представления CREATE VIEW.
CREATE VIEW <имя представление AS <табличное выражение> { WITH [ <квалификатор> } CHECK OPTION ] ;
Здесь параметр <квалификатор> может принимать значение CASCADED или LOCAL, причем значение CASCADED принимается по умолчанию (и фактически это единственная разумная опция, как подробно объясняется в [4.19]), поэтому здесь опцию LOCAL мы рассматривать не будем.
Пояснения
Значение параметра <та6личное выражение> представляет собой определение представления. Формат этого выражения подробно описывается в приложении А.
Фраза WITH CHECK OPTION, если она указана, означает, что операции вставки (INSERT) и обновления (UPDATE) для данного представлении будут отменены в случае нарушения ограничений целостности, указанных в определении представления. Поэтому заметьте, что подобные операции будут завершаться выдачей ошибки лишь в том случае, когда определитель WITH CHECK OPTION указан явно, т.е. по умолчанию любые операции вставки и обновления кортежей будут завершаться успешно. На основании выводов, сделанных в разделе 9.4, можно заключить, что подобное поведение логически некорректно. Поэтому настоятельно рекомендуется всегда указывать опцию WITH CHECK OPTION в определениях любых создаваемых представлений9 [9.8].
Примеры
1. CREATE VIEW SUPPLIER
AS SELECT S.St, S.STATUS, S.CITY FROM S
WHERE S.STATUS > 15 WITH CHECK OPTION ;
2. CREATE VIEW REDPART
9 Безусловно, речь идет только об обновляемых представлениях. Как мы убедимся позже, в языке SOL представления часто не являются обновляемыми и наличие опции WITH CHECK OPTION в таких случаях недопустимо в соответствии с требованиями языка SOL.
AS SELECT P.Pt, P.NAME, P.WEIGHT AS WT, P.CITY
FROM P
WHERE P.COLOR = 'Red' WITH CHECK OPTION ;
3. CREATE VIEW PQ
AS SELECT SP.Pt, SUM ( SP.QTY ) AS TOTQTY FROM SP GROUP BY SP.Pt ;
В отличие от приведенного выше аналога этого представления (см. в разделе 9.1 подраздел "Дополнительные примеры"), данное представление не будет включать строк для деталей, которые не поставляются ни одним из поставщиков. Подробности приводятся в обсуждении примера 7.7.8 в главе 7.
4. CREATE VIEW CITY_PAIR
AS SELECT DISTINCT S.CITY AS SCITY, P.CITY AS PCITY FROM S, SP, P WHERE S.St = SP.St AND SP.Pt = P.Pt ;
5. CREATE VIEW HEAVY_REDPART
AS SELECT RP.Pt, RP.PNAME, RP.WT, RP.CITY
FROM REDPART AS RP
WHERE RP.WT > 12.0 WITH CHECK OPTION ;
Существующее представление может быть удалено с помощью SQL-оператора DROP VIEW, синтаксис которого приведен ниже.
DROP VIEW <имя представления> <режим> ;
В этом операторе (как и в SQL-операторах DROP TABLE и DROP DOMAIN) значением параметра <режим> могут быть опции RESTRICT и CASCADE. Если указана опция RESTRICT и на удаляемое представление имеются ссылки в определениях других представлений или ограничений целостности, то данная операция DROP будет признана ошибочной. Если указана опция CASCADE, то выполнение данной операции DROP завершится успешно и будет сопровождаться "каскадным" удалением всех представлений и ограничений целостности, определения которых ссылаются на данное удаляемое представление.
Выборка данных из представлений
Как было показано в разделе 9.3, для всех операций выборки данных из любых представлений в текущей версии стандарта языка SQL (SQL/92) гарантируется корректность выполнения. К сожалению, этого нельзя сказать о некоторых современных программных продуктах, как и о предыдущих версиях стандарта языка SQL (см. упр. 9.14).
Обновление данных в представлениях
Стандарт SQL/92 поддерживает весьма ограниченный набор операций обновления данных в представлениях. В качестве обновляемых, в основном, рассматриваются только те представления, которые являются производными от одной базовой таблицы и описаны с использованием некоторой комбинации операций выборки и
проекции. Более того, поддержка даже такого простейшего типа представлений трактуется неправильно, поскольку в стандарте языка SQL не используется понятие предиката переменной-отношения и, в частности, в SQL-таблицах разрешается наличие повторяющихся строк.
Ниже приведено более точное изложение правил обновляемости представлений в соответствии со стандартом языка SQL (этот список взят из [4.19], хотя здесь он несколько упрощен). Стандартом языка SQL предполагается, что представление является обновляемым только в том случае, если выполнены все следующие условия.
Табличное выражение, определяющее область видимости представления, должно быть выражением выборки, т.е. в него не должны непосредственно входить такие ключевые слова, как JOIN, UNION, INTERSECT и EXCEPT.
Предложение SELECT в выражении выборки не должно непосредственно содержать ключевое слово DISTINCT.
Каждый выбираемый элемент в предложении SELECT (после любых требуемых расширений этого списка, заданных шаблоном "звездочка" (*)) должен быть именем столбца (возможно, уточненным и при необходимости сопровождаемым фразой AS), представляющим простую ссылку на столбец исходной таблицы (см. п. 5).
Предложение FROM в выражении выборки должно содержать ровно одну ссылку на таблицу.
Данная ссылка на таблицу должна задавать либо базовую таблицу, либо обновляемое представление.
Замечание. Таблица, которую задает ссылка, является единственной исходной таблицей для рассматриваемого обновляемого представления (см. п. 3).
Заданное выражение выборки не должно включать предложения WHERE с подзапросом, в котором содержится предложение FROM, ссылающееся на ту же таблицу, что и основное предложение FROM, рассмотренное в п. 4.
Выражение выборки не должно включать предложения GROUP BY.
Выражение выборки не должно включать предложения HAVING.
Сделаем пару замечаний к перечисленным правилам.
Подход к обновляемости представлений в языке SQL следует принципу "все или ничего". Это значит, что по отношению к любому представлению все три операции, INSERT, UPDATE и DELETE, либо можно применять, либо нельзя. Например, в языке SQL невозможна ситуация, когда к некоторому представлению допускается применение операции DELETE, но запрещено применять операцию INSERT (хотя отдельные коммерческие программные продукты такую возможность поддерживают).
В языке SQL операция UPDATE либо применима к данному представлению, либо нет. Иначе говоря, в языке SQL недопустима ситуация, когда одни столбцы представления являются обновляемыми, а другие — нет (хотя некоторые коммерческие программные продукты в этом отношении пошли дальше стандарта).