
- •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. Выбрать все пары номеров поставщиков, таких, что оба поставщика в каждой паре находятся
2.1. Введение
Теперь, после изучения вводной главы, можно познакомиться с архитектурой систе- мы баз данных. Наша цель — заложить фундамент, на котором будет строиться даль- нейшее изложение. Именно на этот фундамент мы будем опираться при описании общих понятий и объяснении структуры специфических систем баз данных. Однако это вовсе не означает, что каждая система баз данных обязательно должна отвечать конкретному фундаменту или что предложенная конкретная архитектура является единственно воз- можным вариантом. Например, "малые" системы (см. главу 1), весьма вероятно, не бу- дут поддерживать все аспекты предложенной архитектуры. Тем не менее рассматривае- мая архитектура с достаточной точностью описывает большинство систем (и не только реляционных). Более того, она практически полностью согласуется с архитектурой, предложенной исследовательской группой ANSI/SPARC (Study Group on Data Management Systems), — так называемой архитектурой ANSI/SPARC [2.1], [2.2]. Однако здесь мы не будем придерживаться терминологии ANSI/SPARC во всех деталях.
Замечание. Материал этой главы подобен материалу предыдущей в том смысле, что он является основой, необходимой для полного понимания структуры и возможностей современных систем баз данных. По этой причине он также носит несколько абстракт- ный характер, а следовательно, он достаточно "сухой". Учитывая это, как и в случае изу- чения главы 1, предварительно можно бегло просмотреть настоящую главу, а затем, по мере освоения излагаемого в книге материала, возвращаться к отдельным ее разделам, непосредственно связанным с той или иной изучаемой вами темой.
2.2. Три уровня архитектуры
Архитектура ANSI/SPARC включает три уровня: внутренний, внешний и концепту- альный (рис. 2.1). В общих чертах они представляют собой следующее.
Внутренний уровень (также называемый физическим) наиболее близок к физи- ческому хранилищу информации, т.е. связан со способами сохранения информа- ции на физических устройствах.
Внешний уровень (также называемый пользовательским логическим) наиболее близок к пользователям, т.е. связан со способами представления данных для от- дельных пользователей.
Концептуальный уровень (также называемый общим логическим или просто ло- гическим) является "промежуточным" уровнем между двумя первыми.
Внешний уровень (представления отдельных пользователей)Концептуальный уровень (обобщенное представление пользователей)
Внутренний уровень (представление физического хранения) |
Рис. 2.1. Три уровня архитектуры ANSI/SPARC
Если внешний уровень связан с индивидуальными представлениями пользователей, то концептуальный уровень связан с обобщенным представлением пользователей. Иначе говоря, может существовать несколько внешних представлений, каждое из которых со- стоит из более или менее абстрактного представления определенной части базы данных, и только одно концептуальное представление, состоящее из абстрактного представления базы данных в целом1. (Вспомните, что большинство пользователей интересует не вся база данных, а лишь ее некоторая ограниченная часть.) Также существует единственное внутреннее представление, отражающее способ физического хранения всей базы данных.
Для лучшего понимания этих идей рассмотрим пример, представленный на рис. 2.2. Здесь отображено концептуальное представление простой базы данных о персонале, а также соответствующие ему внутреннее и два внешних представления (одно — для поль- зователя, применяющего язык PL/I, а другое — для пользователя, применяющего язык COBOL). Конечно, этот пример полностью гипотетичен и мало похож на реальные сис- темы, поскольку в нем умышленно опущены многие не относящиеся к делу детали.
Рассматриваемый здесь пример нуждается в пояснениях.
' Называя некоторое представление абстрактным, мы имеем в виду лишь то, что оно включа- ет логические конструкции, ориентированные на пользователя (например, логические записи или поля), и не включает машинно-ориентированные конструкции (например, биты или байты).
На концептуальном уровне база данных содержит информацию о типе сущности с именем EMPLOYEE (служащий). Каждый экземпляр сущности EMPLOYEE включает атрибуты номера служащего EMPLOYEE_NOMBER (длиной шесть символов), номера отдела DEPARTMENT_NUMBER (длиной четыре символа) и зарплаты служащего SALARY (пять десятичных цифр).
На внутреннем уровне служащие представлены типом хранимой записи STORED_EMP, длина которой составляет 20 байт. Запись STORED_EMP содержит че- тыре хранимых поля: шестибайтовый префикс (возможно, содержащий управ- ляющую информацию, такую как флаги или указатели) и три поля данных, соот- ветствующие трем свойствам сущности, которая представляет служащего. Кроме того, записи ST0RED_EMP индексированы по полю ЕМР# с помощью индекса ЕМРХ, определение которого не показано.
Внешний (PL/I)
Внешний (COBOL)
DCL
EMPP,
EMPi CHAR(6),
SAL FIXED BIN(31)
01 EMPC.
02 EMPNO PIC X(6) 02 DEPTNO PIC X(4]
Концептуальный 1
EMPLOYEE
EMPLOYEE JJUMBER
DEPARTMENT NUMBER SALARY ~
CHARACTER (6) CHARACTER (4)
NUMERIC (5)
Внутренний
STORED EMP PREFIX EMPi
DEPTi PAY
OFFSET=0
OFFSET=12
TYPE=FULLWORD, OFFSET=16
OFFSET=6,
Рис. 2.2. Пример трех уровней представления базы данных
Пользователь, применяющий язык PL/I, имеет дело с соответствующим внеш- ним представлением базы данных. В нем каждый сотрудник представлен за- писью на языке PL/I, содержащей два поля (номера отделов не представляют интереса для данного пользователя, поэтому в представлении они опущены). Тип записи определен с помощью обычной структуры, соответствующей пра- вилам языка PL/I.
Аналогично пользователь, применяющий язык COBOL, имеет дело с собст- венным внешним представлением базы данных, в котором каждый сотрудник представлен записью на языке COBOL, содержащей, опять же, два поля (в данном случае опущен размер оклада). Тип записи определен с помощью обычного описания на языке COBOL в соответствии с принятыми в нем стан- дартными правилами.
Обратите внимание, что в каждом случае соответствующие элементы данных могут иметь различные имена. Например, к номеру сотрудника обращаются, как к полю EMPi в представлении для языка PL/I и как к полю EMPNO в представлении для языка COBOL. Этот же атрибут в концептуальном представлении имеет имя EMPLOYEE_NUMBER, а во внутреннем представлении— имя EMPi. Конечно, системе должны быть известны все эти соответствия. Например, она должна знать, что поле EMPNO в представлении для язы- ка COBOL образовано из концептуального поля EMPLOYEE_NUMBER, которое, в свою оче- редь, отвечает хранимому полю EMPI во внутреннем представлении. Такие соответствия, или отображения (mapping), явно не показаны на рис. 2.2 (дальнейшее обсуждение этих вопросов будет продолжено в разделе 2.6).
В данном случае не имеет особого значения, является ли рассматриваемая система реляционной или какой-нибудь иной. Но было бы полезно вкратце рассказать, как эти три уровня архитектуры обычно реализуются именно в реляционных системах.
Во-первых, концептуальный уровень в такой системе определенно будет реля- ционным в том смысле, что видимые на этом уровне объекты являются реляци- онными таблицами, а используемые операторы будут реляционными операто- рами (в частности, включая операторы выборки строк и столбцов, кратко рас- смотренные в главе 1).
Во-вторых, каждое внешнее представление, как правило, также будет реляцион- ным или достаточно близким к нему. Например, объявления записей в PL/I и COBOL, представленные на рис. 2.2, упрощенно можно считать аналогами объяв- ления реляционной таблицы в реляционной системе.
Замечание. Между прочим, следует иметь в виду, что термин "внешнее представ- ление" (часто— просто "представление") имеет, к сожалению, довольно специ- фический смысл в реляционном контексте, который не полностью совпадает со смыслом, приписанным ему в этой главе. Выяснение реляционного смысла данно- го термина и его обсуждение приводятся в главах 3 и 9.
■ В-третьих, внутренний уровень не будет реляционным, поскольку объекты на этом уровне не будут реляционными таблицами (сохраняемыми); наоборот, они будут объектами такого же типа, как и находящиеся на внутреннем уровне объ- екты любой другой системы (сохраняемые записи, указатели, индексы, хеширо- ванные значения и т.п.). В действительности реляционная модель как таковая не может сказать ничего существенного о внутреннем уровне. Она, как уже от- мечалось в главе 1, имеет отношение лишь к тому, как воспринимает базу дан- ных пользователь.
Теперь перейдем к более детальному исследованию трех уровней архитектуры, начи- ная с внешнего уровня. На рис. 2.3 показаны основные компоненты архитектуры и их взаимосвязь. На этот рисунок мы будем часто ссылаться в данной главе.