- •Часть 2. Реляционная модель.
- •Глава 4. Реляционные объекты данных: домены и отношения.
- •4.1. Вводный пример
- •4.2. Домены
- •4.3. Отношения
- •4.4. Виды отношений
- •4.5. Отношения и предикаты
- •4.6. Реляционные базы данных
- •4.7. Резюме
- •Глава 8.
- •8.1. Введение
- •8.2. Определение данных
- •8.3. Обработка данных: операции выборки
- •8.3.1. Получить цвета и города для деталей "не из Парижа" с весом, большим десяти
- •8.3.2. Для всех деталей получить номер детали и ее вес в граммах
- •8.3.3. Получить полную информацию обо всех поставщиках
- •8.3.4. Получить информацию обо всех парах поставщиков и деталей, совмещенных в одном городе
- •8.3.5. Получить все пары имен городов, таких что поставщик, находящийся в первом городе, поставляет деталь, хранящуюся во втором городе
- •8.3.6. Получить все пары номеров поставщиков, таких что оба поставщика в каждой паре размещаются в одном и том же городе
- •8.3.7. Получить общее число поставщиков
- •8.3.8. Получить максимальное и минимальное количество для детали р
- •8.3.9. Для каждой поставляемой детали получить номер детали и общее количество поставки
- •8.3.10. Получить номера для всех деталей, поставляемых более чем одним поставщиком
- •8.3.11. Получить имена поставщиков, поставляющих деталь р2
- •8.3.12. Получить имена поставщиков, поставляющих по крайней мере одну красную деталь
- •8.3.13. Получить номера поставщиков, статус которых меньше текущего максимального статуса в таблице s
- •8.3.14. Получить имена поставщиков, поставляющих деталь р2
- •8.3.15. Получить имена поставщиков, которые не поставляют деталь р2
- •8.3.16. Получить имена поставщиков, поставляющих все детали
- •8.3.17. Получить номера деталей, которые или весят более 16 фунтов, или поставляются поставщиком s2, или и то и другое
- •8.4. Обработка данных: операции обновления
- •Table-term
- •I join-table-expression
- •8.6. Условные выражения
- •8.7. Скалярные выражения
- •8.8. Встроенный sql
- •8.8.1. Единичный select. Получить статус и город для поставщика, чей номер поставки задан базовой переменной givens#
- •8.8.2. Insert. Вставить новую деталь в таблицу р (номер детали, ее назв. И вес определены базовыми переменными р#, pname, pwt соответственно, цвет и город неизвестны)
- •8.8.3, Update. Увеличить статус всех поставщиков из Лондона на значение, определенное базовой переменной raise
- •8.8.4. Delete. Удалить все поставки для поставщиков из города,
- •8.9. Резюме
4.4. Виды отношений
В этом разделе мы определим некоторые из видов отношений, встречающихся в реляционных системах (однако обратите внимание, что не все системы поддерживают каждый из этих видов).
1. Прежде всего, именованное отношение — это переменная отношения, определенная в СУБД посредством операторов create base relation, create view и create snapshot (в используемом нами синтаксисе). Об операторе create view рассказывалось в главе 3, а об операторе create snapshot речь пойдет далее в этой главе.
2. Базовым отношением называется именованное отношение, которое не является производным (т.е. базовое отношение является автономным). На практике базовые — это те отношения, которые считаются достаточно важными (среди рассматриваемых в базе данных), и проектировщик базы данных счел нужным дать им название и сделать их непосредственной частью базы данных, в отличие от менее важных временных отношений (таких как, например, результат запроса).
3. Производным отношением называется отношение, определенное (посредством реляционного выражения) через другие именованные отношения и, в конечном счете, через базовые отношения.
Предостережение. Помните, что некоторые авторы под "производным" подразумевают "выражаемое" (смотрите следующий пункт).
4. Выражаемым отношением называется отношение, которое можно получить из набора именованных отношений посредством некоторого реляционного выражения. Конечно, каждое именованное отношение является выражаемым отношением, но не наоборот. Базовые отношения, представления, снимки (об этом ниже), промежуточные и окончательные результаты отчетов — все это выражаемые отношения. Иначе говоря, множество всех выражаемых отношений — это в точности множество всех базовых отношений и всех производных отношений.
5. Представлением называется именованное производное отношение. (Представления, как и базовые отношения, являются переменными отношений.) Представления виртуальны — они представлены в системе исключительно через определение в терминах других именованных отношений.
6. Снимки (snapshot) — это именованные производные отношения, такие же, как представления (и подобно представлениям они являются переменными отношений). Однако в отличие от представлений снимки реальны, а не виртуальны, т.е. представлены не только с помощью определения в терминах других именованных отношений, но и также (по крайней мере, концептуально) своими отдельными данными. Вот пример:
CREATE SNAPSHOT SC AS
( ( S JOIN SP ) WHERE P# = 'P2' ) [ S#, CITY ]
REFRESH EVERY DAY ;
Создание снимка похоже на выполнение запроса, за исключением того, что результат такого запроса сохраняется в базе данных под определенным именем (SC в нашем примере) как отношение, доступное только для чтения, и периодически (в нашем примере — каждый день) снимок "обновляется", т.е. его текущее значение сбрасывается, запрос выполняется снова и его результат становится новым значением снимка. Применение снимков будет обсуждаться в следующих частях книги.
7. Результатом запроса называется неименованное производное отношение, служащее результатом некоторого определенного запроса. База данных не обеспечивает постоянного существования для результатов запросов (чтобы сохранить результат запроса, его можно присвоить некоторому именованному отношению).
8. Промежуточным результатом называется неименованное производное отношение, являющееся результатом некоторого реляционного выражения, вложенного в другое, большее выражение. Например, рассмотрим такое выражение:
( ( S JOIN SP ) WHERE Р# = 'Р2' ) [ S#, CITY ]
Отношение, являющееся результатом выражения s join sp, будет промежуточным результатом; назовем его tempi. Тогда отношение, являющееся результатом выражения tempi where p# = 'р2', также будет промежуточным результатом; назовем его ТЕМР2. А отношение, являющееся результатом выражения ТЕМР2 [s#, city], будет окончательным результатом. База данных не обеспечивает постоянного существования для промежуточных результатов, как и для окончательных результатов (в действительности, как уже упоминалось в главе 3, они могут не существовать в виде полной материализованной таблицы как таковой).
9. И, наконец, хранимым отношением называется отношение, которое поддерживается в физической памяти "непосредственным" образом (конечно, при подходящем определении "непосредственности"; более подробное обсуждение этого вопроса выходит за рамки данной главы).
В заключение добавим, что хранимое отношение не всегда совпадает с базовым отношением. Набор хранимых отношений должен быть таким, чтобы все базовые отношения, а значит, и все выражаемые отношения можно было произвести из него; но при этом не требуется, чтобы все хранимые отношения были базовыми отношениями, и не требуется, чтобы все базовые отношения были хранимыми. Более подробное обсуждение этого вопроса было приведено в главе 3.