- •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.8. Группирование и разгруппирование
Поскольку значениями атрибутов отношений могут быть другие отношения, было бы желательным наличие дополнительных реляционных операторов, называемых операто- рами группирования и разгруппирования [3.3]. Рассмотрим сначала пример операции группирования.
SP GROUP ( PI, QTY ) AS PQ
Результат выполнения этого выражения будет выглядеть так, как показано на рис. 6.12.
Замечание. Этот рисунок наверняка будет очень полезен при разборе последующих пояснений, поскольку они, к сожалению (но неизбежно), несколько абстрактны.
S#
SI
S2
S3
S4
P# |
QTY |
PI P2 |
300 400 |
| |
P# |
QTY |
P2 |
200 |
| |
P# |
QTY |
P2 P4 P5 |
200 300 400 |
Рис. 6.12. Группирование отношения SPno атрибуту St Начнем с того, что исходное выражение SP GROUP ( PI, QTY ) AS PQ
можно прочесть как "сгруппировать отношение SP по атрибуту Si", поскольку атри- бут Si является единственным атрибутом отношения SP, не упомянутым в предложении GROUP. В результате получится отношение, заголовок которого выглядит так.
{ Si Si, PQ RELATION { Pi Pi, QTY QTY } }
Другими словами, он состоит из атрибута PQ, принимающего в качестве значений от- ношения (PQ, в свою очередь, имеет атрибуты Pi и QTY), а также из всех остальных атри- бутов отношения SP (в нашем случае "все остальные атрибуты" — это атрибут S#). Тело этого отношения содержит ровно по одному кортежу для всех различных значений атри- бута S# исходного отношения SP (и никаких других кортежей). Каждый кортеж в теле содержит соответствующее значение атрибута St (обозначим его через s), а также значе- ние атрибута PQ (обозначим его через pq), полученное следующим образом.
Каждый кортеж отношения SP концептуально заменяется кортежем (обозначим его через х), в котором компоненты Pt и QTY как бы "упакованы" в один компо- нент, принимающий в качестве значений кортежи (обозначим его через у).
Компоненты у всех кортежей х, значение St которых равно s, "группируются" в отношение pq, и таким образом получается результирующий кортеж, в котором значение St равно s, а значение PQ равно pq.
Окончательный результат будет выглядеть так, как показано на рис. 6.12. | Перейдем теперь к операции разгруппирования. Пусть SPQ— это отношение, пока- занное на рис. 6.12. Тогда выражение
SPQ UNGROUP PQ
возвращает нас к отношению SP (как и следовало ожидать). Точнее, оно выдает в ка- честве результата отношение, заголовок которого выглядит так.
{ St St, Pt Pt, QTY QTY }
Иными словами, его заголовок состоит из атрибутов Pt и QTY (полученных из атрибу- та PQ), а также из всех остальных атрибутов отношения SPQ (в нашем случае это только атрибут St). Тело полученного отношения содержит ровно по одному кортежу для каж- дой комбинации кортежа отношения SPQ с кортежем значения PQ, являющегося элемен- том кортежа SPQ (других кортежей в нем нет). Каждый такой кортеж содержит соответ- ствующее значение атрибута St (обозначим его через s), а также значения атрибутов Pt и QTY (обозначим их через р и q), которые получены следующим образом.
Каждый кортеж отношения SPQ мысленно заменяется множеством кортежей, ко- торое содержит по одному кортежу (обозначим его через х) для каждого кортежа из значения PQ. Каждый кортеж х содержит компонент St (обозначим его через s), равный компоненту St рассматриваемого кортежа SPQ, а также компонент (обозначим его через у), равный некоторому кортежу из компонента PQ рассмат- риваемого кортежа SPQ.
Компоненты у каждого такого кортежа х, значение St которых равно s, "разворачиваются" в отдельные компоненты Pt и QTY (обозначим их через р и q). В результате получается кортеж, значение компонента St которого равно s, значе- ние компонента Pt равно р и значение компонента QTY равно q.
Таким образом, в результате разгруппирования получилось отношение SP. |
Операторы GROUP и UNGR0UP иначе называют средствами "вложения" и "извлечения" отношений. Однако мы предпочитаем использовать термины "группирование" и "разгруппирование", поскольку термины "вложение" и "извлечение" тесно связаны с №2-отношениями — концепцией, которую мы считаем противоречивой и которая здесь не рассматривается.
Для полноты в завершение этого раздела сделаем несколько замечаний относительно обратимости операций группирования и разгруппирования (эти замечания, возможно, будут не совсем понятными при первом чтении). Итак, если определенным образом сгруппировать некоторое отношение г, то всегда будет существовать обратная операция разгруппирования, позволяющая вернуться к отношению г. Однако если сначала раз- группировать некоторое отношение г, то обратная операция группирования, возвра- щающая нас к отношению г, будет существовать не всегда. Приведем один пример (он основан на примере из статьи [5.4]). Предположим, что сначала выполняется разгруппи- рование отношения TWO (рис. 6.13) с получением в качестве результата отношения THREE. Теперь, если сгруппировать отношение THREE по атрибуту А, в результате получится не отношение TWO, а отношение ONE.
TWO THREE ONE |
RVX | ||||||||
|
| ||||||||
1 |
|
X |
| ||||||
|
|
а b |
| ||||||
|
| ||||||||
1 |
|
X |
| ||||||
|
|
а с |
| ||||||
|
| ||||||||
А |
X |
| |||||||
1 |
а |
| |||||||
1 |
b |
| |||||||
1 |
с |
| |||||||
А |
RVX |
| |||||||
1 |
|
| |||||||
|
X |
|
| ||||||
|
|
а |
|
| |||||
|
|
b |
|
| |||||
|
|
с |
|
| |||||
|
|
|
Рис. 6.13. Операции разгруппирования и группирования необязательно являются обра- тимыми
Обратите внимание на то, что в отношении ONE атрибут RVX (обязательно) функцио- нально зависит от А, задавая тем самым потенциальный ключ (подробности приводятся в главах 8 и 9). Если теперь разгруппировать отношение ONE, можно снова вернуться к от- ношению THREE, а отношение THREE, очевидно, может быть сгруппировано так, чтобы в результате получилось отношение ONE. Таким образом, для этой пары отношений опера- ции группирования и разгруппирования действительно являются обратными. В общем случае решающим моментом в вопросе обратимости операции разгруппирования являет- ся функциональная зависимость. В действительности для отношения г с атрибутом RVX, принимающим в качестве значений отношения, операция разгруппирования (относительно атрибута RVX) обратима тогда и только тогда, когда выполнены два сле- дующих условия.
■ Ни один кортеж отношения г не принимает в качестве значения атрибута RVX пус- тое отношение.
■ Атрибут RVX функционально зависит от комбинации всех остальных атрибутов от- ношения г. Иначе говоря, у отношения г должен быть потенциальный ключ, не содержащий атрибут RVX как компонентов.