- •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. Выбрать все пары номеров поставщиков, таких, что оба поставщика в каждой паре находятся
3.3. Отношения и переменные-отношения
Если предположить, что реляционная база данных — это, по существу, просто база данных, в которой данные представлены в виде таблиц (а это так и есть), то возникает резонный вопрос: почему же мы называем такую базу данных именно реляционной, а не, скажем, табличной? Ответ прост (фактически он был дан еще в главе 1): термин "relation" (отношение) — это математическое название таблицы (точнее, определенного вида таблиц; подробности приводятся в главе 5). Например, можно сказать, что база данных отделов и служащих, представленная на рис. 3.1, содержит два отношения.
В настоящее время в неформальном контексте термины "отношение" и "таблица" принято считать синонимами. На практике в подобном контексте термин "таблица" ис- пользуется гораздо чаще, чем термин "отношение". На обсуждении этого вопроса стоит немного задержаться, чтобы выяснить, почему все-таки термин "отношение" поставлен на первое место. Вкратце это объясняется следующим.
Как уже отмечалось, реляционные системы основаны на реляционной модели. Ре- ляционная модель, в свою очередь, — это абстрактная теория данных, основанная на некоторых положениях математики (в основном, теории множеств и логики предикатов).
Принципы реляционной модели были изначально заложены в 1969 и 1970 годах Е.Ф. Коддом (E.F. Codd), который в то время был исследователем, работавшим в корпорации IBM. В конце 1968 года Кодд, математик по образованию, впервые пришел к заключению, что математические дисциплины можно использовать для привнесения в область управления базами данных строгих принципов и точности. Именно этих качеств недоставало данной области в то время. Идеи Кодда впервые подробно были изложены в ставшей классической статье "A Relational Model of Data for Large Shared Data Banks" (см. [5.1] в главе 5).
С того времени эти идеи стали общепринятыми и оказали весьма существенное влия- ние на все аспекты технологии баз данных, а также на другие области, такие как искус- ственный интеллект, обработка естественных языков и разработка аппаратных систем.
В реляционной модели, как она изначально была сформулирована Коддом, умышленно применялись определенные термины. Например, сам термин "отношение" практически не использовался в то время в теории информационных технологий, хотя такое понятие ино- гда употреблялось в других областях. Суть заключалась в том, что многие распространен- ные тогда термины были очень нечеткими — им не хватало точности, необходимой для такой формальной теории, которую предложил Кодд. Например, рассмотрим термин "запись". В разное время и в различных контекстах он мог означать экземпляр записи или тип записи, логическую запись или физическую запись, хранимую запись или виртуальную запись, а возможно, и еще что-нибудь. Поэтому в формальной реляционной модели термин "запись" не используется вообще — вместо него применяется термин "кортеж" (tuple), точ- ное определение которого дал сам Кодд, когда впервые его ввел. Мы не станем приводить здесь это определение, а лишь отметим, что термин "кортеж" приблизительно соответству- ет понятию строки (так же, как термин "отношение" приблизительно соответствует поня- тию таблицы). При дальнейшем изучении более формальных аспектов реляционных систем в части II мы будем использовать более формальную терминологию, однако здесь мы не станем придерживаться строго формальных терминов, а воспользуемся более привычными, такими как "строка" и "столбец". Однако один формальный термин мы все-таки будем ис- пользовать довольно часто — это термин "отношение".
Снова обратимся к базе данных отделов и сотрудников, представленной на рис. 3.1. Заметим, что таблицы DEPT и ЕМР в базе данных фактически являются переменными от- ношений, т.е. их значения — это значения отношений (различные значения отношений в разное время). Предположим, например, что таблица ЕМР в данный момент имеет значе- ние (значение отношения), которое показано на рис. 3.1, и далее предположим, что мы удалили строку о сотруднике с фамилией Saito (его номер — 'Е4').
DELETE ЕМР WHERE EMPt = 'Е4' ; Результат выполнения этой операции показан на рис. 3.3.
ЕМР
ЕМР# |
ENAME |
DEPT# |
SALARY |
Е1 |
Lopez |
Dl |
40K |
Е2 |
Cheng |
Dl |
42K |
ЕЗ |
Finzi |
D2 |
30K |
Рис. 3.3. Переменная-отношение ЕМР после удаления строки сотрудника с кодом 'Е4'
Концептуально это можно прокомментировать таким образом: старое значение отно- шения ЕМР было заменено в целом совершенно другим, новым значением отношения. Ко- нечно, старое значение (с четырьмя строками) и новое значение (с тремя строками) очень похожи, но концептуально они являются разными. На самом деле данная операция удале- ния строки, по сути, — это просто другой, упрощенный способ записи для определенной операции реляционного присвоения, которая могла бы выглядеть примерно так.
ЕМР := ЕМР MINUS ( ЕМР WHERE EMPi = 'Е4' ) ;
(Замечание. Как первоначальный оператор DELETE, так и равносильный ему оператор присвоения записаны на языке Tutorial D [3.3]. Ключевое слово MINUS используется в язы- ке Tutorial D для реляционной операции разности. Подробности приводятся в главе 6.)
Как и при любом присвоении, здесь с концептуальной точки зрения сначала вычис- ляется выражение, расположенное справа от знака присвоения, а затем результат при- сваивается переменной, которая записана перед знаком присвоения (по определению перед знаком присвоения может быть, естественно, только переменная). В целом, как уже отмечалось, задача заключается в том, чтобы заменить "старое" значение отноше- ния ЕМР "новым".
Естественно, что операции INSERT и UPDATE также по существу являются другой фор- мой записи соответствующих реляционных операций присвоения.
Но вот что огорчает: во многих публикациях термин отношение используется, когда в действительности подразумевается переменная отношения (а также тогда, когда подра- зумевается само отношение, т.е. значение отношения). А это, как показывает практика, приводит к недоразумениям. Поэтому в дальнейшем здесь мы будем четко различать пе- ременные отношений и сами отношения. Следуя примеру публикации [3.3], для пере- менной отношения (relation variable) будем использовать термин переменная- отношение (сокращенный английский вариант— relvar), и только его, во всех случаях, когда речь будет идти не об отношении, а о переменной отношения.
Замечание. Следует предупредить читателя, что термин "relvar" (переменная- отношение) не является общепринятым, хотя должен быть таковым! Мы действительно считаем, что очень важно различать сами отношения (т.е. значения отношений) и пере- менные отношений, хотя предыдущие издания настоящей книги также этим грешили и большая часть литературы по базам данных не придает этому значения.