- •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.9. База данных поставщиков и деталей
На протяжении почти всей этой книги используется пример, названный нами базой данных поставщиков и деталей (поддерживаемой, как уже упоминалось в главе 1, вымышленной компанией KnowWare, Inc.). Назначение настоящего раздела — позна-
комить читателя с этой базой данных, которая будет служить примером для ссылок в последующих главах. На рис. 3.8 показано множество значений ее данных. Именно эти конкретные значения будут фактически использоваться в дальнейшем (где это имеет смысл). На рис. 3.9 показано определение базы данных, для которого снова использу- ется (несколько измененный) язык Tutorial D. В частности, обратите внимание на спецификации первичных и внешних ключей. Кроме того, обратите внимание на то, что несколько столбцов имеют типы данных, которым присвоено название, аналогич- ное названию соответствующего столбца. Столбцы STATUS и CITY определены как имеющие не пользовательский, а встроенный тип данных— INTEGER (целое) и CHAR (строка символов произвольной длины) соответственно. Наконец, необходимо отме- тить, что в отношении значений, показанных в столбцах на рис. 3.8, должно быть сде- лано одно важное замечание, однако мы еще не готовы к этому. Поэтому обсуждение упомянутого замечания будет отложено до главы 5, точнее — до подраздела "Внутренний уровень" в разделе 5.2.
s# |
SNAME |
STATUS |
CITY |
|
SP |
S# |
P# |
QTY |
SI |
Smith |
20 |
London |
|
SI |
PI |
300 | |
S2 |
Jones |
10 |
Paris |
|
SI |
P2 |
200 | |
S3 |
Black |
30 |
Paris |
|
SI |
P3 |
400 | |
S4 |
Clark |
20 |
London |
|
SI |
P4 |
200 | |
S5 |
Adams |
30 |
Athens |
|
SI |
P5 |
100 | |
|
|
|
|
|
SI |
P6 |
100 | |
P# |
PNAME |
COLOR |
WEIGHT |
CITY |
|
S2 |
PI |
300 |
PI |
Nut |
Red |
12.0 |
London |
|
S2 |
P2 |
400 |
P2 |
Bolt |
Green |
17.0 |
|
|
S3 |
P2 |
200 |
P3 |
Screw |
Blue |
17.0 |
Rome |
|
S4 |
P2 |
200 |
P4 |
Screw |
Red |
14.0 |
London |
|
S4 |
P4 |
300 |
P5 |
Cam |
Blue |
12.0 |
Paris |
|
S4 |
P5 |
400 |
P6 |
Cog |
Red |
19.0 |
London |
|
|
|
Рис. 3.8. База данных поставщиков и деталей (пример значений) В базе данных предполагается следующая семантика.
Переменная-отношение S представляет поставщиков. Каждый поставщик имеет уникальный номер (S#); имя (SNAME), необязательно уникальное (хотя оно может быть уникальным, как в случае, представленном на рис. 3.8); значение рейтинга или статуса (STATUS); место расположения (CITY). Предполагается, что каждый поставщик находится только в одном городе.
Переменная-отношение Р представляет детали (точнее, виды деталей). У каждого вида детали есть номер детали (Р#), который является уникальным; название дета- ли (PNAME); цвет (COLOR); вес (WEIGHT); город, где хранится этот вид деталей (CITY). Предполагается (где это имеет значение), что вес детали приведен в фунтах. Так- же предполагается, что каждый отдельный вид детали имеет только один цвет и хранится на складе только в одном городе.
■ Переменная-отношение SP представляет поставки. Она в известном смысле слу- жит для организации логической связи двух других переменных-отношений. На- пример, первая строка переменной-отношения SP на рис. 3.8 связывает поставщика с номером 'S1' из переменной-отношения S с соответствующей деталью, имеющей номер 'Р1' в переменной-отношении Р, т.е. представляет факт поставки деталей типа ' Р1' поставщиком с номером ' S1' (а также указывает количество деталей — 300 штук). Таким образом, каждая поставка характеризуется номером поставщика (St), номером детали (Pi) и количеством (QTY). Предполагается, что в одно и то же время может быть не более одной поставки для одного поставщика и одной детали, поэтому для каждой поставки комбинация значений столбцов Si и Pi уни- кальна с точки зрения набора текущих поставок, представленных в переменной- отношении SP.
Замечание. На рис. 3.8 умышленно показано одно значение поставщика (с номе- ром ' S5'), для которого не существует ни одной поставки.
TYPE Si ... ; TYPE NAME ... ; TYPE Pi ... ; TYPE COLOR ... ; TYPE WEIGHT ... ; TYPE QTY ... ;
VAR S BASE RELATION { Si Si,
SNAME NAME,
STATUS INTEGER,
CITY CHAR } PRIMARY KEY { Si } ;
VAR P BASE RELATION
{ Pi Pi,
PNAME NAME, COLOR COLOR, WEIGHT WEIGHT, CITY CHAR } PRIMARY KEY { Pi } ;
VAR SP BASE RELATION
{ si si, Pi Pi,
QTY QTY }
PRIMARY KEY { Si, Pi }
FOREIGN KEY { Si } REFERENCES S
FOREIGN KEY { Pi } REFERENCES P ;
Рис. 3.9. База данных поставщиков и деталей (определение данных)
Как отмечалось выше (в главе 1, раздел 1.3), детали и поставщиков можно рассмат- ривать как сущности, а поставку — как связь между определенным поставщиком и оп- ределенной деталью. Однако в том же разделе было указано, что связи можно понимать как особый вид сущностей. Одно из преимуществ реляционных баз данных состоит именно в том, что все сущности, независимо от того, что на самом деле они могут яв- ляться связями, представляются одним универсальным способом, а именно — с помо- щью строк, объединенных в отношения, как показано в нашем примере.
И еще пара последних замечаний.
Во-первых, наша база данных поставщиков и деталей исключительно проста, го- раздо проще любой реальной базы данных, которая может встретиться на практи- ке. Большинство реальных баз данных включает значительно больше сущностей и связей (и намного больше видов сущностей и связей). Но несмотря на это предло- женный здесь простой пример вполне подходит для иллюстрации большинства вопросов, обсуждаемых в оставшейся части книги, и (как уже отмечалось) будет использоваться как основа для большинства (но не для всех) примеров в несколь- ких последующих главах.
Во-вторых, безусловно, не было бы ошибкой, если бы мы использовали более описательные названия переменных-отношений, подобные SUPPLIERS (постав- щики), PARTS (детали) и SHIPMENTS (поставки), вместо сокращенных названий S, Р и SP. Более того, на практике рекомендуется использовать именно такие описа- тельные названия. Однако в нашем конкретном случае в последующих главах на- звания этих переменных-отношений будут употребляться так часто, что целесооб- разнее использовать именно короткие названия. Многократно употребляемые длинные названия зачастую способны вызвать раздражение.