- •Isbn 5-8459-0138-3 (рус) isbn 0-201-38590-2 (англ)
- •Глава 2. Архитектура системы баз данных 65
- •Глава 6. Реляционная алгебра 192
- •Глава 7. Реляционное исчисление 243
- •Глава 8. Целостность данных 301
- •Глава 9. Представления 350
- •Часть 111
- •Часть IV
- •Глава 14. Восстановление 544 14.1. Введение 544
- •Глава 15. Параллельность 566
- •Часть V
- •Глава 16. Защита данных 602
- •Глава 17. Оптимизация 639
- •Глава 18. Отсутствующая информация 693
- •Глава 19. Наследование типов 725
- •Глава 20. Распределенные базы данных 767
- •Глава 21. Поддержка принятия решений 813
- •Глава 22. Хронологические базы данных 853
- •Глава 23. Логические системы управления базами данных 899
- •Часть VI
- •Глава 24. Объектные базы данных 944
- •Глава 25. Объектно-реляционные базы данных 999
- •Часть I (четыре главы) — это обширное введение в теорию баз данных вообще и реляционных баз данных в частности. Здесь также излагаются основы стандартно- го языка баз данных sql.
- •Часть IV. Две главы данной части — это несколько пересмотренные и расширен- ные версии глав 13 и 14 предыдущего издания.
- •Часть VI. Глава 24 является полностью переписанной и значительно улучшенной версией глав 22-24. Глава 25 почти полностью обновлена.
- •Часть I
- •Часть I состоит из четырех вводных глав.
- •1.1. Вводный пример
- •1.2. Что такое система баз данных
- •1.3. Что такое база данных Перманентные данные
- •1.4. Назначение баз данных
- •1.5. Независимость данных
- •1.6. Реляционные и другие системы
- •1.7. Резюме
- •2.1. Введение
- •2.2. Три уровня архитектуры
- •Внешний уровень (представления отдельных пользователей)Концептуальный уровень (обобщенное представление пользователей)
- •2.3. Внешний уровень
- •Отображение "внешний/концептуальный" схемы
- •Определение структур хранения (внутренняя схема)
- •Внешнее представление а Концептуальная схема
- •2.4. Концептуальный уровень
- •2.5. Внутренний уровень
- •2.6. Отображения
- •2.7. Администратор базы данных
- •2.8. Система управления базой данных
- •2.9. Система управления передачей данных
- •2.10. Архитектура "клиент/сервер"
- •2.11. Утилиты
- •2.12. Распределенная обработка
- •2.13. Резюме
- •3.1. Введение
- •3.2. Реляционная модель
- •3.3. Отношения и переменные-отношения
- •3.4. Смысл отношений
- •3.5. Оптимизация
- •3.6. Каталог
- •3.7. Базовые переменные-отношения и представления
- •3.8. Транзакции
- •3.9. База данных поставщиков и деталей
- •3.10. Резюме
- •Глава 4
- •4.1. Введение
- •4.2. Обзор языка sql
- •4.3. Каталог
- •4.4. Представления
- •4.5. Транзакции
- •4.6. Внедрение sql-операторов
- •4.7. Несовершенство языка sql
- •4.8. Резюме
- •Часть 9. Управление внешними данными (sql/med) Часть 10. Связь с объектным языком (sql/olb)
- •Часть II
- •Глава 5
- •5.1. Введение
- •5.2. Домены
- •5.3. Значения отношений
- •5.4. Переменные-отношения
- •5.5. Средства sql
- •5.6. Резюме
- •6.1. Введение
- •6.2. Реляционная замкнутость
- •6.3. Синтаксис
- •6.4. Семантика
- •6.5. Примеры
- •6.5.1. Получить имена поставщиков детали с номером 'р2'
- •6.5.2. Получить имена поставщиков по крайней мере одной красной детали
- •6.5.3. Получить имена поставщиков всех типов деталей
- •6.5.4. Получить номера поставщиков по крайней мере тех типов деталей, которые поставляет поставщик с номером 's2'
- •6.5.5. Получить все пары номеров поставщиков, находящихся в одном городе
- •6.5.6. Получить имена поставщиков, которые не поставляют деталь с номером 'р2'
- •6.6. Зачем нужна реляционная алгебра
- •6.7. Дополнительные операторы
- •6.8. Группирование и разгруппирование
- •6.9. Реляционные сравнения
- •6.10. Резюме
- •7.1. Введение
- •7.2. Исчисление кортежей
- •7.3. Примеры
- •7.3.5. Найти имена поставщиков по крайней мере одной детали, поставляемой поставщиком с номером 's2'
- •7.3.6. Выбрать имена поставщиков всех типов деталей
- •7.3.7. Определить имена поставщиков, которые не поставляют деталь с номером 'р2'
- •7.3.8. Определить номера поставщиков по крайней мере всех типов деталей, поставляемых поставщиком с номером *s2'
- •7.4. Сравнительный анализ реляционного исчисления и реляционной алгебры
- •7.5. Вычислительные возможности
- •7.5.1. Определить номера и вес в граммах всех типов деталей, вес которых превышает 10 ооо г
- •7.6.1. Выбрать номера поставщиков из Парижа со статусом, большим 20
- •7.7.1. Указать цвета деталей и названия городов, в которых находятся детали "не из Парижа" с весом, превышающим 10 фунтов
- •7.7.2. Для всех деталей указать номер и вес в граммах
- •7.7.3. Выбрать информацию обо всех парах поставщиков и деталей, находящихся в одном городе
- •7.7.4. Найти все пары названий городов, таких, что поставщик из первого города поставляет деталь, находящуюся во втором городе
- •7.7.5. Выбрать все пары номеров поставщиков, таких, что оба поставщика в каждой паре находятся
6.2. Реляционная замкнутость
Уже не раз отмечалось, что результат выполнения любой операции над отношением также является отношением. Эта особенность называется свойством реляционной замкнутости и впервые упоминается в главе 3. Там же делается вывод: поскольку результат выполнения лю- бой операции имеет тот же тип, что и исходные объекты (отношения), результат одной опера- ции может использоваться в качестве исходных данных для другой. Другими словами, можно записывать вложенные реляционные выражения, т.е. выражения, в которых операнды са- ми представлены реляционными выражениями, причем произвольной сложности. (Есть явная аналогия между возможностями использования вложенных реляционных выражений в реля- ционной алгебре и вложенных арифметических выражений в обычной арифметике. Действи- тельно, тот факт, что отношения с точки зрения реляционной алгебры являются замкнутыми, исключительно важен для нее по тем же причинам, по которым в обычной алгебре важен тот факт, что с ее точки зрения множество чисел также является замкнутым.)
При обсуждении свойства реляционной замкнутости в главе 3 сознательно умалчи- вался один существенный момент. Напомним, что отношение имеет две части — заго- ловок и тело. Нестрого говоря, заголовок — это атрибуты, а тело — это кортежи. Заго- ловок для базового отношения, т.е. значения базовой переменной-отношения, очевидно, вполне конкретен и известен системе, поскольку он задается как часть определения со- ответствующей базовой переменной-отношения. Ну а как же в случае производных от- ношений? Например, рассмотрим следующее выражение.
S JOIN Р
Оно представляет собой соединение отношения поставщиков и отношения деталей по совпадению значения названия города (поскольку только атрибут CITY является общим для этих двух отношений). Мы знаем, что собой представляет тело результата данного соединения. А какой же будет у него заголовок? Обязательное наличие заголовка дикту- ется реляционной замкнутостью, и системе должно быть известно, что он собой пред- ставляет (в равной степени это необходимо знать и пользователю, как мы скоро увидим). Иначе говоря, результат обязательно— непременно!— должен иметь вполне опреде- ленный тип отношения. Поэтому, если рассматривать свойство реляционной замкнуто- сти более строго, каждая реляционная операция должна быть определена таким образом, чтобы выдавать результат с надлежащим типом отношения (в частности, с соответст- вующим набором имен атрибутов или заголовком)1.
Основная причина, по которой мы требуем, чтобы каждое результирующее отноше- ние обязательно имело соответствующий набор имен атрибутов, заключается в необхо- димости иметь возможность ссылаться на эти имена атрибутов в последующих опера- циях, в частности в последующих операциях, расположенных на более глубоких уровнях вложенного выражения. Например, если бы мы не знали, что результат вычисления вы- ражения S JOIN Р включает атрибут с именем CITY, то мы просто не смогли бы даже за- писать выражение, подобное следующему.
(S JOIN Р) WHERE CITY = 'Athens'
Другими словами, необходим такой встроенный в реляционную алгебру набор пра- вил вывода типов (отношений), чтобы можно было вывести тип (отношения) на выходе произвольной реляционной операции, зная тип или типы (отношения) на входе этой опе- рации. Задав такие правила для всех операций, можно гарантировать, что для реляцион- ного выражения любой сложности будет вычисляться результат, имеющий вполне опре- деленный тип (отношения) и, в частности, известный набор имен атрибутов.
Для достижения этой цели в качестве предварительного действия введем новый опе- ратор RENAME, предназначенный для переименования атрибутов в определенном отноше- нии. Точнее, для заданного отношения оператор RENAME возвращает другое отношение, которое идентично начальному, за исключением того, что по крайней мере один из атри- бутов имеет другое имя. (Заданное отношение, конечно же, может быть результатом вы- числения реляционного выражения, возможно, включающего другие алгебраические операции.) Например, можно написать следующее.
S RENAME CITY AS SCITY
С помощью этого выражения (обратите внимание, что рассматриваемая запись явля- ется выражением, а не "командой" или оператором, а значит, может быть вложена в другие выражения) вычисляется отношение, имеющее то же самое тело, что и отноше- ние S, но с именем атрибута SCITY вместо CITY.
s# |
SNAME |
STATUS |
SCITY |
SI |
Smith |
20 |
London |
S2 |
Jones |
10 |
Paris |
S3 |
Black |
30 |
Paris |
S4 |
Clark |
20 |
London |
S5 |
Adams |
30 |
Athens |
Важно отметить, что выражение RENAME не изменяет базовую переменную-отношение поставщиков в базе данных — оно является выражением (точно так, как и выражение S JOIN SP) и, следовательно, выдает некоторый результат (в данном случае этот резуль- тат очень похож на текущее значение переменной-отношения поставщиков).
Вот еще один пример (на этот раз переименовывается сразу несколько атрибутов).
Р RENAME PNAME AS PN, WEIGHT AS WT
Результат вычисления этого выражения будет выглядеть следующим образом.
р# |
PN |
COLOR |
WT |
CITY |
Р1 |
Nut |
Red |
12.0 |
London |
Р2 |
Bolt |
Green |
17.0 |
Paris |
РЗ |
Screw |
Blue |
17.0 |
Rome |
Р4 |
Screw |
Red |
14.0 |
London |
Р5 |
Cam |
Blue |
12.0 |
Paris |
Р6 |
Cog |
Red |
19.0 |
London |
Стоит явно подчеркнуть: наличие оператора RENAME означает, что (в отличие от языка SQL) в реляционной алгебре не требуется использовать механизм уточнения имен атри- бутов наподобие S.St.