- •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).