- •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. Выбрать все пары номеров поставщиков, таких, что оба поставщика в каждой паре находятся
1.6. Реляционные и другие системы
Как уже упоминалось в конце раздела 1.3, СУБД, базирующиеся на реляционной мо- дели данных ("реляционные системы"), в настоящее время стали преобладающими на рынке баз данных. Более того, подавляющее большинство научных исследований в об- ласти баз данных в течение последних 30 лет было посвящено (иногда косвенно) именно этой модели. Фактически введение реляционной модели в 1969 и 1970 годах было, несо- мненно, наиболее важным событием в истории развития теории баз данных. По этим причинам, а также учитывая то, что реляционная модель основана на определенных ма- тематических и логических принципах и, следовательно, идеально подходит для изложе- ния теоретических концепций систем баз данных, основное внимание в настоящей книге уделяется (как уже отмечалось в разделе 1.1) именно реляционным системам и реляци- онному подходу.
Что мы подразумеваем под реляционной системой? К сожалению, на данном этапе обсуждения невозможно дать полный ответ на этот вопрос. Однако можно (и нужно!) дать хотя бы приблизительный ответ, который в дальнейшем будет существенно уточ- нен. Итак, кратко и не совсем точно реляционная система — это система, основанная на следующих принципах.
Данные передаются пользователю в виде таблиц (и никак иначе).
Пользователю предоставляются операторы (например, для выборки данных), по- зволяющие генерировать новые таблицы на основании уже существующих. Напри- мер, в системе обязательно должны присутствовать оператор ограничения, предна- значенный для получения подмножества строк заданной таблицы, и оператор про- екции, позволяющий получить подмножество ее столбцов. Однако подмножество строк и подмножество столбцов некоторой таблицы, безусловно, можно рассмат- ривать как новые таблицы.
Замечание. Причина, по которой такие системы называют реляционными, состоит в том, что английский термин "relation" (отношение), по сути, представляет собой приня- тое математическое название для таблицы. Поэтому на практике термины отношение и таблица в большинстве случаев можно считать синонимами, по крайней мере для не- формальных целей. (Обсуждение этого вопроса будет продолжено в главах 3 и 5.) Воз- можно, следует добавить, что причина, несомненно, заключается не в том, что термин отношение (relation) "по существу— просто математическое название для" связи (relationship) в терминах диаграмм "сущность-связь" (см. раздел 1.3). На самом деле ме- жду реляционными системами и подобными диаграммами существует совсем незначи- тельная прямая связь, что будет показано в главе 13.
Как уже отмечалось, в дальнейшем будет дано более точное определение, а сейчас мы будем использовать приведенное выше. На рис. 1.7 представлен пример структуры дан- ных и операторов, используемых в реляционных системах. Данные (рис. 1.7, а) пред-
ставлены одной таблицей под названием CELLAR (в действительности это еще одна вер- сия таблицы CELLAR (см. табл. 1.1), просто уменьшенная для того, чтобы с ней было лег- че работать). На рис. 1.7, б показаны два примера выборки данных: один — с получени- ем подмножества строк (оператор ограничения), а другой — с получением подмножества столбцов (оператор проекции).
Замечание. Оба варианта выборки осуществляются с помощью оператора SELECT языка SQL, упомянутого выше в этой главе.
Теперь мы можем различать реляционные и не реляционные системы по следую- щим признакам. Как уже отмечалось, пользователь реляционной системы видит дан- ные в виде таблиц и никак иначе. Пользователь не реляционной системы, напротив, видит данные, представленные в других структурах: либо вместо таблиц реляционной системы, либо наряду с ними. Для работы с этими другими структурами применяются другие операции. В частности, в иерархической системе (например, IMS фирмы IBM) данные представляются пользователю в форме набора древовидных структур (иерархий), а среди операций работы с иерархическими структурами есть операции перемещения по иерархическим указателям (навигации) вверх и вниз по ветвям де- ревьев. (Реляционные системы, как мы видели, не имеют таких указателей, и это очень важная их отличительная особенность.)
|
|
|
| |
а) Дана таблица: CELLAR |
WINE |
YEAR |
BOTTLES |
|
|
Chardonnay |
1996 |
4 |
|
|
Fume Blanc |
1996 |
2 |
|
|
Pinet Noir |
1993 |
CO |
|
|
Zinfandel |
1994 |
9 |
|
|
|
|
| |
б) Примеры операторов: |
|
|
| |
1. Подмножество строк: Результат: |
WINE |
YEAR |
BOTTLES |
|
SELECT WINE, YEAR, BOTTLES |
Chardonnay |
1996 |
4 |
|
FROM CELLAR |
Fume Blanc |
1996 |
2 |
|
WHERE YEAR > 1995 ; |
|
|
| |
2. Подмножество столбцов: Результат: |
WINE |
BOTTLES |
| |
SELECT WINE, BOTTLES |
Chardonnay |
4 |
| |
FROM CELLAR ; |
Fume Blanc |
2 |
| |
|
Pinet Noir |
3 |
| |
|
Zinfandel |
9 |
| |
|
|
|
1 |
Рис. 1.7. Структура данных и операторы в реляционной системе (примеры)
Рассмотрим этот вопрос немного подробнее. На практике системы баз данных мо- гут быть легко распределены по категориям в соответствии со структурами данных и операторами, которые они предоставляют пользователю. Прежде всего, старые (доре- ляционные) системы можно разделить на три большие категории, а именно: системы инвертированных списков (inverted list), иерархические (hierarchic) и сетевые
(network)3. В данной книге мы не будем подробно рассматривать эти категории, по- скольку, по крайней мере с точки зрения технологии, их можно считать устаревшими. (Учебное описание всех трех систем можно найти в [1.5], если вас это интересует.) Кроме того, необходимо отметить, что термин сетевая (система) в данном случае не имеет ничего общего с коммуникационной сетью, а относится лишь к структуре дан- ных и операторам, которые поддерживаются данной системой.
Замечание. Сетевые системы иногда называют системами CODASYL или система- ми DBTG по имени группы, которая их предложила — Data Base Task Group (DBTG) of the Conference on Data Systems Languages (CODASYL). Пожалуй, наиболее извест- ной из таких систем была IDMS корпорации Computer Associates International, Inc. По- добно иерархическим системам (но в отличие от реляционных), все такие системы, кроме всего прочего, предоставляли в распоряжение пользователя внутренние указа- тели на элементы данных.
Первые реляционные продукты начали появляться в конце 1970-х и начале 1980-х годов. Во время написания этой книги преобладающее большинство СУБД были реля- ционными и предназначались для работы на практически любой программной и аппа- ратной компьютерной платформе. Среди них ведущими (в алфавитном порядке) явля- лись следующие: DB2 (всевозможные версии) корпорации IBM; Ingres II корпорации Computer Associates International, Inc.; Informix Dynamic Server корпорации Informix Software, Inc.; Microsoft SQL Server корпорации Microsoft; Oracle 8i корпорации Oracle и Sybase Adaptive Server компании Sybase, Inc.
Замечание. Если нам придется ссылаться на эти продукты ниже в настоящей книге, мы будем называть их (как это делается в большинстве случаев) сокращенными имена- ми: DB2, Ingres, Informix, SQL Server, Oracle и Sybase.
В последнее время стали появляться объектно-ориентированные и объектно- реляционные продукты4. Большинство объектно-реляционных СУБД основывается на совместимых снизу вверх расширениях оригинальных реляционных продуктов, как это случилось с DB2 или Informix. Существующие объектно-ориентированные системы представляют собой попытки сделать что-то совершенно отличное, как это имеет место в случае с системой GemStone корпорации GemStone Systems, Inc. и системой Versant ODBMS компании Object Technology. Мы рассмотрим эти новые системы в части VI.
3 По
аналогии с реляционной моделью в ранних
изданиях книги использовались термины
мо-
дель
инвертированных
списков, иерархическая модель
и
сетевая модель
(они
также использова-
лись в других
книгах). Однако это не совсем верно,
поскольку по сравнению с реляционной
моде-
лью "модели" инвертированного
списка, иерархическая и сетевая были
определены после
свер-
шившегося факта, т.е.
соответствующие коммерческие продукты
были реализованы раньше,
а
"модели
" были определены впоследствии
"по
индукции " (в этом контексте изящный
термин для
приблизительной оценки)
из уже существующих реализаций.
4 Термин
объект
здесь
имеет довольно специфическое значение,
которое будет подробно по-
яснено в
части VI. А пока мы будем использовать
этот термин в его обычном общем
смысле,
кроме случаев явного указания
на противоположное.