- •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.1. Введение
Та часть реляционной модели, в которой рассматриваются операторы манипулирова- ния данными, существенно эволюционировала со времени публикации Коддом статей [5.1], [6.1]. Однако, как и раньше, основным ее компонентом является так называемая реляционная алгебра, которая, в основном, состоит из набора операторов, использую- щих отношения в качестве операндов и возвращающих отношения в качестве результата. В главе 3 кратко обсуждались операторы выборки, проекции и соединения. В данной гла- ве эти и некоторые другие операторы рассматриваются более подробно.
В [6.1] Кодд определяет так называемую "начальную" алгебру, т.е. набор из восьми операторов, символически показанный на рис. 6.1. Определяя именно эти восемь опера- торов, Кодд преследовал особую цель, речь о которой пойдет в следующей главе. Одна- ко важно понимать, что алгебра этими восемью операторами не исчерпывается. На са- мом деле можно было бы определить любое число операторов, которые удовлетворяли бы простому необходимому условию: "отношение на входе — отношение на выходе" (множество таких операторов действительно предлагалось разными авторами; см., на- пример, [6.10]). В этой главе мы сначала рассмотрим операторы Кодда (или, по крайней мере, его версию этих операторов), а затем используем их в качестве основы для обсуж- дения различных алгебраических идей. В продолжение этой темы обсуждаются способы, с помощью которых данный первоначальный набор операторов можно расширить в том или ином направлении.
Обзор операций начальной алгебры
Как утверждалось выше, реляционная алгебра в том виде, в котором она была опре- делена Коддом в [6.1], состоит из восьми операторов, составляющих две группы по че- тыре оператора.
1. Традиционные операции над множествами: объединение, пересечение, разность и декартово произведение (все они модифицированы с учетом того, что их операн- дами являются отношения, а не произвольные множества).
2. Специальные реляционные операции: выборка, проекция, соединение и деление. Ниже приведены упрощенные определения этих восьми операторов (рис. 6.1).
Выборка Возвращает отношение, содержащее все кортежи из заданного от-
ношения, которые удовлетворяют указанным условиям. Операцию выборки также иногда называют операцией ограничения, поэтому далее в этой книге будет также употребляться термин ограничение, если подразумевается данная алгебраическая операция
Выборка
Проекция
Произведение
ГПрОИЗЕ
а |
X |
а |
У |
Ь |
X |
Ь |
У |
с |
X |
с |
У |
Соединение
Пересечение
Разность
Гсоединеь |
|
|
---|---|---|
Ы |
с1 |
|
а2 |
Ы |
с1 |
аЗЬ2с2-♦Деление —^
а |
X |
а |
У |
а |
Z |
Ь |
X |
с |
У |
Рис б / Первоначальные восемь операторов (обзор)
Проекция Возвращает отношение, содержащее все кортежи (подкортежи) за-
данного отношения, которые остались в этом отношении после ис- ключения из него некоторых атрибутов
Произведение Возвращает отношение, содержащее все возможные кортежи, кото- рые являются сочетанием двух кортежей, принадлежащих соответст- венно двум заданным отношениям
Объединение Возвращает отношение, содержащее все кортежи, которые принад- лежат либо одному из двух заданных отношений, либо им обоим
Пересечение Возвращает отношение, содержащее все кортежи, которые принад- лежат одновременно двум заданным отношениям
Разность Возвращает отношение, содержащее все кортежи, которые принад-
лежат первому из двух заданных отношений и не принадлежат вто- рому
Соединение Возвращает отношение, содержащее все возможные кортежи, кото- рые представляют собой комбинацию атрибутов двух кортежей, принадлежащих двум заданным отношениям, при условии, что в этих двух комбинируемых кортежах присутствуют одинаковые значения в одном или нескольких общих для исходных отношений атрибутах (причем эти общие значения в результирующем кортеже появляются один раз, а не дважды)
Деление Для заданных двух унарных отношений и одного бинарного возвра-
щает отношение, содержащее все кортежи из первого унарного от- ношения, которые содержатся также в бинарном отношении и соот- ветствуют всем кортежам во втором унарном отношении
На этом закончим краткий обзор первоначальных операторов. План остальной части главы такой: в следующем разделе повторно и более подробно рассматривается вопрос реляционного замыкания. Затем в разделах 6.3 и 6.4 детально обсуждаются восемь пер- воначальных операторов, предложенных Коддом, а в разделе 6.5 даются некоторые при- меры их использования для построения запросов. В разделе 6.6 рассматривается более общий вопрос о назначении реляционной алгебры. В разделе 6.7 описывается несколько полезных расширений начальной алгебры Кодда, в частности два важных оператора — EXTEND и SUMMARIZE. В разделе 6.8 приводятся операторы отображения между отноше- ниями, которые включают атрибуты, принимающие в качестве значений другие отноше- ния, и между отношениями с атрибутами, которые принимают только скалярные значе- ния. В разделе 6.9 рассматривается реляционное сравнение. И наконец в разделе 6.10 приводится краткое заключение.
И еще два предварительных замечания.
По очевидным причинам мы часто будем использовать фразы наподобие "X явля- ется выборкой из R" (где R — некоторая переменная-отношение), в то время как более корректно следовало бы говорить "X — выборка из отношения, которое яв- ляется текущим значением переменной-отношения R" или даже "X — это пере- менная, текущим значением которой является выборка из отношения, которое яв- ляется текущим значением переменной-отношения R". Мы надеемся, что такое со- кращение не приведет к путанице.
Обсуждение SQL-операторов, соответствующих операторам реляционной алгеб- ры, мы откладываем до главы 7 по причинам, которые будут объяснены в этой главе позднее.