- •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. Выбрать все пары номеров поставщиков, таких, что оба поставщика в каждой паре находятся
7.5. Вычислительные возможности
Несмотря на то что ранее об этом не упоминалось, в определенном нами реляци- онном исчислении уже есть аналоги алгебраических операторов EXTEND и SUMMARIZE, и вот почему.
Одной из допустимых форм прототипа кортежа является параметр операция выборки кортежа>, компонентами которого могут быть произвольные подпара- метры <выражениё>.
В параметре <логическое выражениё> сравниваемыми элементами могут быть произвольные подпараметры <выражение>.
Первым или единственным аргументом в параметре <вызов обобщающей функции> является подпараметр реляционная операция?.
Замечание. Здесь мы ссылаемся на полное определение языка Tutorial D, которое приводится в [3.3].
Мы считаем, что не стоит приводить здесь все имеющие место синтаксические и се- мантические подробности; достаточно лишь рассмотреть несколько типичных примеров (сами примеры также несколько упрощены).
7.5.1. Определить номера и вес в граммах всех типов деталей, вес которых превышает 10 ооо г
( PX.Pi, РХ.WEIGHT * 454 AS GMWT )
WHERE PX.WEIGHT * 454 > WEIGHT ( 10000 )
Обратите внимание, что спецификация AS GMWT в прототипе кортежа дает имя соответствующему атрибуту результата. Поэтому такое имя недоступно для ис- пользования в предложении WHERE и выражение РХ.WEIGHT * 454 должно быть ука- зано в двух местах.
7.5.2. Выбрать сведения обо всех поставщиках, добавив для каждого из них литеральное значение
* Поставщик'
( SX, 'Поставщик' AS TAG )
7.5.3. Выбрать сведения о каждой поставке и указать полные данные о входящих в нее типах деталей и общий вес поставки
( SPX, PX.WEIGHT * SPX.QTY ) AS SHIPWT WHERE PX.Pi = SPX.Pi
7.5.4. Для каждой детали выбрать номер и общий объем поставки в штуках
( PX.Pi, SUM ( SPX WHERE SPX.Pi = PX.Pi, QTY ) AS TOTQTY )
7.5.5. Определить общее количество поставляемых деталей
SUM (SPX, QTY ) AS GRANDTOTAL )
7.5.6. Для каждого поставщика указать номер и общий объем поставки в штуках
( SX.Si, COUNT ( SPX WHERE SPX.Si = SX.Si J AS i_0F_PARTS )
7.5.7. Указать названия городов, в которых находится более пяти красных деталей
RANGEVAR PY RANGES OVER Р; PX.CITY
WHERE COUNT ( PY WHERE PY.CITY = PX.CITY
AND PY.COLOR = COLOR ( 'Red' ) ) > 5
7.6. Исчисление доменов
Как указывалось в разделе 7.1, реляционное исчисление, ориентированное на домены (или исчисление доменов), отличается от исчисления кортежей тем, что в нем вместо пе- ременных кортежей используются переменные доменов, т.е. переменные, принимающие свои значения в пределах домена, а не отношения. В этой книге мы лишь кратко рас- смотрим исчисление доменов. С практической точки зрения большинство очевидных различий между версиями исчисления доменов и исчисления кортежей основано на том, что версия для доменов поддерживает дополнительную форму параметра <логическое выражение>, который мы будем называть условием принадлежности. В общем виде ус- ловие принадлежности можно записать так.
R ( пара, пара, ... )
Здесь R— имя переменной-отношения, а каждый параметр пара имеет вид A:v, где А — атрибут переменной-отношения R, a v — имя переменной домена или литерал. Про-
верка условия дает значение истина тогда и только тогда, когда в текущем значении пе- ременной-отношения R существует кортеж, имеющий указанные значения для указанных атрибутов. Например, рассмотрим результат вычисления следующего выражения.
SP ( S§:Sf('Sl'), Р#:Р#('PI') )
Он будет иметь значение истина тогда и только тогда, когда в переменной- отношении SP будет существовать кортеж со значением атрибута St, равным ' S1', и зна- чением атрибута Pt, равным 'Р1'. Аналогично условие принадлежности
SP ( Si:SX, Р#:РХ )
принимает значение истина тогда и только тогда, когда в переменной-отношении SP су- ществует кортеж со значением атрибута St, эквивалентным текущему значению пере- менной домена SX (какому бы то ни было), и значением атрибута Pt, эквивалентным те- кущему значению переменной домена РХ (опять же, какому бы то ни было). Далее будем подразумевать существование следующих переменных доменов.
Домен |
Переменная домена |
St |
SX, SY, ... |
Pt |
PX, PY, ... |
NAME |
NAMEX, NAMEY, ... |
COLOR |
COLORX, COLORY, ... |
WEIGHT |
WEIGHTX, WEIGHTY, .. |
QTY |
QTYX, QTYY, ... |
CHAR |
CITYX, CITYY, ... |
INTEGER |
STATUSX, STATUSY, .. |
Ниже приведено несколько примеров выражений исчисления доменов. SX
SX WHERE S ( St:SX )
SX WHERE S ( St:SX, CITY:'London' ) ( SX, CITYX ) WHERE S ( S#:SX, CITY:'London' ) AND SP ( St:SX, Pi: Pi ( 'P2' ) )
( SX, PX ) WHERE S (Si:SX, CITY:CITYX ) AND P ( Pi:PX, CITY:CITYY ) AND CITYX * CITYY
Если говорить нестрого, первое выражение означает множество всех номеров по- ставщиков, второе — множество всех номеров поставщиков в переменной- отношении S, третье — подмножество номеров поставщиков из Лондона. Следую- щее выражение — это выраженный в терминах исчисления доменов запрос "Определить номера поставщиков и названия городов, в которых находятся постав- щики детали с номером 'Р2'" (вспомните, что в этом запросе, выраженном в терми- нах исчисления кортежей, использовался квантор существования). И последнее вы-
ражение — это представленный в терминах исчисления доменов запрос "Найти все такие пары номеров поставщиков и номеров деталей, для которых поставщик и де- таль находятся в одном городе".
Ниже приведено несколько примеров из числа рассмотренных в разделе 7.3, но на этот раз выраженных в терминах исчисления доменов (часть из них несколько изменена).