
- •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. Выбрать все пары номеров поставщиков, таких, что оба поставщика в каждой паре находятся
Глава 4
Введение в язык SQL
4.1. Введение
Как отмечалось в главе 1, SQL является стандартным языком для работы с реляцион- ными базами данных и в настоящее время поддерживается практически всеми продукта- ми, представленными на рынке. Он был разработан в компании IBM Research в начале 1970-х годов [4.8], [4.9], [4.28]. Первой серьезной реализацией этого языка был продукт- прототип System R компании IBM [4.1]—[4.3], [4.11]—[4.13]; впоследствии он был реали- зован в многочисленных коммерческих продуктах как компании IBM [4.20], так и других изготовителей. В этой главе представлено введение в язык SQL, а дополнительные ас- пекты, касающиеся таких вопросов, как целостность, защита и т.п., обсуждаются в по- следующих главах, специально посвященных этим темам. При обсуждении языка мы бу- дем основываться (если не утверждается противное) на текущем стандарте, неформально называемом SQL/92 (иначе — SQL-92 или просто SQL2 [4.22], [4.23]). Его официальное название— Международный стандарт языка баз данных SQL (1992) (International Standard Database Language SQL).
Замечание. Необходимо сразу же добавить, что разработка следующего нового стандарта SQL3 близится к завершению и его утверждение ожидается в конце 1999 года. К этому вре- мени данная книга уже появится в продаже и текущий стандарт, возможно, будет называться SQL/99, а не SQL/92. Однако мы сочли, что, если при обсуждении языка основываться на еще не утвержденном стандарте SQL3, это может привести к недоразумениям, поскольку совер- шенно очевидно, что ни один продукт еще не поддерживает данный стандарт. Поэтому мы решили рассмотреть стандарт SQL3 отдельно, в приложении Б. Во всяком случае, и это необ- ходимо отметить, ни один из коммерческих продуктов к моменту написания книги не под- держивал в полной мере даже стандарт SQL/921. Те языки, которые обычно поддерживаются отдельными продуктами, можно назвать "надмножествами подмножества" языка SQL/92. Другими словами, любой продукт, не поддерживающий некоторых аспектов стандарта, в дру- гих отношениях, возможно, превосходит его. Например, СУБД IBM DB2, безусловно, не под- держивает всех функциональных возможностей, предусмотренных стандартом SQL/92 в от- ношении обеспечения целостности данных, тем не менее она превосходит стандарт в отноше- нии правил, связанных с обновлением представлений.
И еще несколько предварительных замечаний.
' На самом деле ни один из продуктов, по-видимому, и не смог бы поддерживать в полной ме- ре стандарт SQL/92, поскольку в этом стандарте на сегодняшний день содержится множество расхождений, ошибок и противоречий. Подробно этот вопрос рассматривается в [4.19].
■ Язык SQL первоначально разрабатывался конкретно как подъязык данных. Одна- ко после включения в стандарт в конце 1996 года такого средства, как постоянные хранимые модули (Persistent Stored Modules — PSM), язык стал полностью вычис-
лительным (и сейчас в нем имеются процедурные операторы, например CALL, RETURN, SET, CASE, IF, LOOP, LEAVE, WHILE, REPEAT, а также несколько связанных с ними функциональных возможностей, например можно использовать переменные и обработчики исключительных ситуаций). Поэтому во многих случаях отпала не- обходимость в объединении SQL с каким-то отдельным "основным" языком для разработки полнофункционального приложения. Однако в этой книге возможно- сти PSM рассматриваться не будут.
Вас не должно удивлять, что в языке SQL вместо терминов отношение и перемен- ная-отношение используется термин таблица (см. главу 3). Именно этот термин используется стандартом языка SQL и поддерживающими его продуктами, поэто- му в соответствии с ними мы будем использовать указанный термин в данной гла- ве (и везде, где пойдет речь о языке SQL). Кроме того, в языке SQL не употребля- ются термины заголовок и тело (таблицы или отношения).
Необходимо подчеркнуть, что SQL — язык очень большого объема. Документ по его стандарту [4.22] содержит свыше 600 страниц (а описание стандарта SQL3 — в два раза больше). Поэтому в книге, подобной этой, невозможно дать исчерпы- вающее описание языка. Достаточно полно мы сможем рассмотреть лишь самые важные его аспекты. Хотелось бы предупредить читателя, что приведенное здесь описание языка во многих случаях беглое и поверхностное. В частности, мы, не колеблясь, опустили материал, не относящийся непосредственно к обсуждаемой теме, и для краткости сделали существенные упрощения. Более полное (но также учебное) описание языка SQL можно найти в [4.4], [4.19] и [4.27].
И наконец, нельзя не сказать о том (как уже неоднократно отмечалось в предыду- щих главах), что языку SQL еще очень далеко до совершенного реляционного языка. В нем много недостатков, появившихся в результате как недоделок, так и переделок. Однако как бы там ни было, это — стандарт, он поддерживается прак- тически всеми продуктами, представленными на рынке, и поэтому каждый спе- циалист по базам данных должен быть знаком с этим языком, по крайней мере в том объеме, который охватывает эта книга.