- •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.1. Введение
Как отмечалось в главе 3, представление, по сути, является именованным выражением реляционной алгебры (или чем-либо, что равносильно выражению реляционной алгебры). Например:
VAR GOOD_SOPPLIER VIEW
( S WHERE STATUS > 15 ) { Si, STATUS, CITY } ;
	 
	GOOD
	SUPPLIERS 
	
	
| 
				 s#  | 
				 SNAME  | 
				 STATUS  | 
				 CITY  | 
| 
				 SI  | 
				 Smith  | 
				 20  | 
				 London  | 
| 
				 S2  | 
				 Jones  | 
				 10  | 
				 Paris  | 
| 
				 S3  | 
				 Blake  | 
				 30  | 
				 Paris  | 
| 
				 S4  | 
				 Clark  | 
				 20  | 
				 London  | 
| 
				 S5  | 
				 Adams  | 
				 30  | 
				 Athens  | 
Рис. 9.1. Представление GOOD SUPPLIER как заданный фрагмент базовой переменной-отношения S (незатененные части таблицы)
В главе 3 также было показано, что любое представление в некотором смысле можно считать просто окном для просмотра данных. Любые изменения, вносимые в исходную базовую таблицу, будут автоматически и мгновенно отображаться в представлении (как в окне), конечно, если они попадут в область видимости данного представления. И наоборот, все изменения, вносимые в представление, будут автоматически переноситься в данные исходной базовой таблицы, в результате чего станут видимы и в самом представлении.
В реальной ситуации многие пользователи могут даже не предполагать, что G00D_SUPPLIER — это представление. Одни пользователи могут знать об этом, а также о том, что существует реальная переменная-отношение S, тогда как другие могут искренне верить, что GOOD_SUPPLIERS — настоящая переменная-отношение. Но в любом случае главное то, что с представлением можно работать так, как будто оно является настоящей переменной-отношением. Приведем пример запроса к представлению GOOD SUPPLIER.
GOODJUPPLIER WHERE CITY Ф 'London' ;
Ниже показан результат выполнения этого запроса.
| 
			 s#  | 
			 STATUS  | 
			 CITY  | 
| 
			 S3 S5  | 
			 30 30  | 
			 Paris Athens  | 
Этот запрос, безусловно, похож на обычный запрос к обычной "реальной" переменной-отношению. Как отмечалось в главе 3, система обрабатывает запросы подобного типа путем их преобразования в запросы к базовой переменной-отношению (или базовым переменным-отношениям). Подобное преобразование осуществляется посредством замены в определении запроса всех вхождений имени представления тем выражением, которое его определяет. В нашем примере после процедуры подстановки будет получен следующий запрос.
( ( S WHERE STATUS > 15 ) { St, STATUS, CITY } )
WHERE CITY Ф 'London' ;
Данное выражение можно легко преобразовать в более простую форму.
( S WHERE STATUS > 15 AND CITY Ф 'London' )
{ St, STATUS, CITY } ;
Результат вычисления последнего выражения совпадает с приведенным выше результатом запроса к представлению.
В этой связи необходимо отметить, что процесс подстановки (т.е. процесс замены имени представления определяющим его выражением) выполняется корректно вследствие реляционного свойства замкнутости. Свойство замкнутости (кроме всего прочего) означает, что в любом месте выражения, где разрешено использовать имя переменной-отношения R, вместо него можно применять некоторое выражение X (естественно, предполагается, что в результате вычисления выражения X мы получим отношение того же типа, что и R). Другими словами, представления работают точно, поскольку для реляционной алгебры множество всех отношений замкнуто, и это еще один пример, подтверждающий фундаментальное значение свойства реляционной замкнутости.
Операции обновления на представлениях обрабатываются аналогично. Например, рассмотрим следующую операцию.
UPDATE G00D_SUPPLIER WHERE CITY = 'Paris' STATUS := STATUS + 10 ;
При обработке она будет приведена к такому виду.
UPDATE S WHERE STATUS > 15 AND CITY = 'Paris' STATUS := STATUS + 10 ;
Для операций INSERT и DELETE применяется тот же подход.
Дополнительные примеры
В этом подразделе представлено несколько примеров, на которые в дальнейшем мы будем ссылаться.
1. VAR REDPART VIEW
( ( Р WHERE COLOR = COLOR ( 'Red' ) ) { ALL BUT COLOR } )
RENAME WEIGHT AS WT ;
В представлении REDPART присутствуют атрибуты Pi, PNAME, WT и CITY. В него помещаются только те кортежи, которые описывают красные детали.
2. VAR PQ VIEW
SUMMARIZE SP PER P { Pi } ADD SUM j QTY ) AS TOTQTY ;
В отличие от представлений GOOD SUPPLIER и REDPARTS, представление PQ не является простым подмножеством данных, получаемым посредством операции выборки или проекции некоторой базовой переменной-отношения. Это представление можно рассматривать как статистический итог или результат обобщения данных исходной переменной-отношения.
3. VAR CITY_PAIR VIEW
( ( S RENAME CITY AS SCITY ) JOIN SP JOIN
( P RENAME CITY AS PCITY ) ) { SCITY, PCITY } ;
Пара имен городов (x, у) появляется в представлении CITY_PAIR тогда и только тогда, когда поставщик, находящийся в городе х, поставляет детали, которые хранятся в городе у. Например, поставщик с номером ' S1' поставляет детали с номером 'Р1'. При этом данный поставщик находится в Лондоне и поставляемые им детали хранятся также в Лондоне. В результате в представлении CITY PAIR будет присутствовать пара названий городов (' London', ' London').
4. VAR HEAVY REDPART VIEW
REDPART WHERE WT > WEIGHT ( 12.0 ) j
В этом примере демонстрируется, как одно представление определяется через другое.
Определение и удаление представлений
Синтаксис оператора определения представления выглядит следующим образом.
VAR <имя перемежой-отношения> VIEW реляционное выражетё>
<список определения потенциальных ключей>}
В приведенном выражении параметр <список определения потенциальных ключей> может быть пустым, поскольку система должна уметь определять потенциальные ключи представления самостоятельно [10.6]. Например, в случае представления G00D_SUPPLIER системе должно быть известно, что единственным потенциальным ключом, о котором может идти речь, является ключ {Si}, унаследованный от исходной базовой переменной-отношения S.
Как уже отмечалось (используя терминологию ANSI/SPARC, обсуждавшуюся в главе 2), определения представлений объединяют функции внешней схемы и функции отображения уровня "внешний-концептуальный", поскольку они описывают и сам внешний объект (т.е. представление), и способ его отображения на концептуальный уровень (т.е. на одну или несколько исходных базовых переменных-отношений).
Замечание. Некоторые определения представлений задают не отображение уровня "внешний-концептуальный", а отображение уровня "внешний-внешний". Представление HEAVY REDPART из предыдущего раздела относится именно к такой категории представлений.
Синтаксис оператора удаления представления имеет следующий вид.
DROP VAR <ит переменной-отношения> ;
Здесь параметр <имя переменвой-отношения> определяет имя удаляемого представления. В главе 5 было установлено, что попытка удалить базовую переменную-отношение завершится неудачей, если существует хотя бы одно определение представления, ссылающееся на удаляемую переменную-отношение. Аналогично следует полагать, что удаление представления, на которое имеется ссылка в определении какого-либо другого представления, также приведет к ошибке. Дополнительно (по аналогии со ссылочными ограничениями) можно расширить оператор определения представления, включив в него опцию RESTRICT или CASCADE. Опция RESTRICT, подразумеваемая по умолчанию, означает, что попытка удаления любой переменной-отношения, на которую имеется ссылка в определении данного представления, будет отклонена. А опция CASCADE допускает такое удаление, но при этом также удаляются все представления, которые ссылаются на данное.
Замечание. Стандартная версия языка SQL не поддерживает подобной опции в операторе определения представления, однако она включена в оператор DROP. Также не оговорено, какое значение опции будет использоваться по умолчанию; требуется явно указывать одно из значений опции (см. раздел 9.6).
