ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
B
B-дерево, 193
А
Автоматическая навигация, 33
Администратор базы данных, 136, 186
— системный, 136
— транзакций, 163
Алгебра реляционная, 234
Анализ на непротиворечивость, 169
Аргумент (динамический SQL), 182
Ассоциация, 241
Атомарность значений данных, 24
— операций, 164
— транзакций, 163
Атрибут, 26
Б
База данных, 186
— —по умолчанию, 195
— —
пользовательская, 186
— — реляционная, 22
— — системная, 186
Безопасность данных, 132
— представления, 133
Блок условия, 211
Блокирование, 169
Блокировка монопольная, 169
— совместная, 170
В
Вариант CHECK, 118
— GRANT, 138
Восстановление, 166
Г
Генератор деклараций DCLGEN, 155
— планов прикладных задач, 35
Генерация кода, 38
Граф ожидания, 179
Группа памяти, 188
— — по умолчанию, 196
— повторяющаяся, 25
Д
Данные скрытые, 128
Домен, 231
Е
Единица блокирования, 176
— восстановления, 166
Ж
Журнал, 163
З
Зависимость от незафиксированного обновления, 167
— функциональная, 249
Запись хранимая, 190
Значение неопределенное, 45
— — в арифметическом выражении, 55
— — в индексе с параметром UNIQUE, 47
— — в предложении SELECT DISTINCT, 60
— — в предложении UPDATE, 98
— — в сравнениях, 59
— — во встроенном языке, 149
— — во фразе GROUP BY, 86
— — во фразе ORDER BY, 60
— — при проектировании базы данных, 252
И
Идентификатор записи, 191
— санкционирования доступа, 132
Импликация, 81
Имя, 43
— представления, 116
— уточненное, 53
Индекс, 138, 187, 188, 190
— кластеризации, 190
Интерфейс интерактивный, 197
Исключение дубликатов, 54
К
Каталог, 39, 109
Квантор, 77
— общности FORALL, 79
— существования, 77
Классификация связей, 241
— сущностей, 240
Кластеризация внутритабличная, 190
— межтабличная, 190
Ключ альтернативный, 233
— внешний, 234
— возможный, 233
Команда BIND, 201
— DISPLAY FORM, 204
— DISPLAY REPORT, 205
— DRAW COND, 212
— FREE, 201
— PRINT REPORT, 205
— REBIND, 201
— RUN QUERY, 204
— DRAW, 210
Константы, 45
Кортеж, 231
Курсор, 151
—, стабильноcть его, 175
М
Макетирование, 223
Манипулирование данными, 28
Модель данных реляционная, 25
Модуль запросов к базе данных, 34
— языка программирования интерфейсный, 37
Н
Навигация, 31
— автоматическая, 221
— ручная, 221
Независимость данных, 40, 222
— логическая, 222
— физическая, 40
Нормализация, 240, 248
О
Области рабочая QUERY, 204
— дескрипторов SQLDA, 183
— рабочая FORM, 205
— рабочая временная, 204
— связи SQLCA, 183
Обновление данных, 98
— —
незафиксированное, 167
— —утраченное, 167
Обозначение, 241
Обстановка операционная системы DB2, 20
Ограничение санкционирования доступа, 132
Оператор сравнения ALL, 71
— — ANY, 71
Операция декартова произведения, 236
— деления, 237
— присваивания реляционная, 238
— проекции, 236
— разности, 236
— соединения, 237
Отношение, 232
— базовое, 234
Отношения, совместимые по объединению, 235
Отчет, 204
П
Параметр UNIQUE, 47
— динамического SQL, 182, 184
Переменная включающего языка, 146
— индикаторная, 149
— системная USER, 134
План прикладной задачи, 35, 38
Подзапрос, 72
— коррелированный, 74
Подтип сущностей, 251
Поле SQLCODE, 147
Пользователь, 28
Предикат BETWEEN, 57
— IN, 57
— — с подзапросами, 72
— LIKE, 58
Предлжение DELETE CURRENT, 153
— INSERT встроенного языка, 150
— ALTER TABLE, 46
— CLOSE, 151
— COMMENT ON, 112
— COMMIT, 155
— CREATE INDEX, 47
— CREATE SYNONYM, 113
— CREATE TABLE, 43, 46
— CREATE VIEW, 115
— DECLARE CURSOR, 151
— DECLARE TABLE, 146
— DELETE, 99
— DELETE встроенного языка, 150
— DROP INDEX, 48
— DROP SYNONYM, 113
— DROP TABLE, 46
— DROP VIEW, 118
— EXECUTE, 182
— FETCH, 151
— GRANT, 135
—INCLUDE (декларация), 155
— INCLUDE SQLCA, 147
— INCLUDE SQLDA, 183
— INSERT, 100
— LOCK TABLE, 174
— OPEN курсор, 152
— PREPARE, 181
— REVOKE, 135
— ROLLBACK, 156
— SELECT, 53
— SELECT вложенное, 72
— SELECT встроенного языка, 148
— SELECT единичное, 148
— SELECT обработка, 90
— SELECT*, 55
— UPDATE, 98
— UPDATE CURRENT, 153
— UPDATE встроенного языка, 149
— WHENEVER, 155
Представление, условие обновляемости, 121
Представления, 29
Преимущества реляционных систем, 220
Прекомпилятор, 34
Привилегия, 135
— BCTRL, 140
— DBADM, 140
— DBMAINT, 140
— SYSADM, 140
— SYSOPR, 140
— административная, 140
— требуемая пользователю, 140
Приложение интерактивное, 21
— пакетное, 21
Принцип двухрежимный, 145
Проверка полномочий, 38
—правильности плана, 201
Программа управления хранимыми данными, 36
Проектирование базы данных, 240
Производительность системы, 225
Пространство индексное, 186
— табличное, 186
— — по умолчанию, 189
— — простое, 189
— — табличное сегментированное, 190
Протокол упреждающей записи в журнал, 166
Процедура проверки достоверности, 192
— редактирования, 191
Процессор SPUFI, 199
Псевдоним, 66
ПсевдоЯОД, 245
Пул буферный, 196
Путь доступа, 38
Р
Реорганизация, 189
Реструктуризация, 126
С
Свойство, 240
Связь, 240
Сегментирование пространства, 189
Синоним, 113
Система R*, 230
— SQL/DS, 230
— реляционная, 238
Ситуация тупиковая, 176
Словарь данных (каталог), 109
Спецификация DISTINCT, 53
Средство программное DL/1 Extract, 22
— — DXT, 22
— — QMF, 22
Степень отношения, 233
Страница, 186
Супервизор стадии исполнения, 35
Сущность, 240
— ассоциативная, 240
— стержневая, 240
—
характеристическая, 240
Т
Таблица, 42
— базовая, 42
— виртуальная, 30
— каталога, 109
— хранимая, 186
Тип данных, 44
Точка синхронизации, 165
Транзакция, 162
У
Умолчание системное, 188
Управление параллельными процессами, 166
Уровень изоляции, 175
Утилита, 202
Ф
Фиксация автоматическая, 163
— двухфазная, 165
Форма отношения нормальная, 248
— отчета по умолчанию, 204
Фраза FOR UPDATE, 152
— GROUP BY, 85
— HAVING, 86
— NOT NULL, 45
— ORDER BY (определение курсора), 152
— ORDER BY (предложение SELECT), 56
— USING (предложения EXECUTE), 182
— USING (предложение FETCH), 184
Функция стандартная AVG, 83
— — COUNT (*), 83
— — MIN, 83
— — SUM, 83
— — МАХ, 83
Х
Характеристика, 241
Ц
Целостность по ссылкам, 99, 234
— — сущностям, 234
Ч
Число кардинальное отношения, 233
Чтение повторяемое, 175
Э
Эквисоединение, 62
Элемент образца, 212
Я
Язык QBE, 210
— SQL встроенный, 145
— SQL динамический, 180
— SQL интерактивный, 197
— SQL статический, 185
[1]
В этой книге мы будем использовать термин «MVS» для обозначения как стандартной операционной системы MVS (т. е. системного продукта фирмы IBM «Multiple Virtual Systems»), так и расширенной ее версии, называемой MVS/XA («MVS/Extended Architecture»). Каждая ссылка в этом тексте на MVS относится в равной степени к обеим ее версиям.
[2]
В интересах точности следует заметить, что TSO в действительности не является «подсистемой» в том специальном смысле, в котором этот термин используется в MVS Скорее она является неотъемлемой частью самой MVS. Можно приобрести систему MVS без IMS или CICS, но нельзя без TSO. Но эти различия не представляются важными для наших целей, и для простоты мы будем рассматривать в этой книге все три компонента как подсистемы.
[3]
Для читателей, хорошо знающих MVS и/или TSO, заметим, что пакетное приложение TSO есть не что иное, как обычное пакетное приложение MVS, которое исполняется под управлением телемонитора TSO (ТМР). См. раздел 14.9.
[4]
Формат хранимых данных — это, конечно, не единственное, чем отличаются эти две системы. Имеется ряд других отличий, о которых упоминается ниже. Большинство из них связано с тем фактом, что система DB2 специально разработана для обстановки больших систем (MVS). Например, объем данных в базе данных, которые могут запоминаться в интерактивном режиме в системе DB2, ограничивается только объемом памяти, доступной в таком режиме, в то время как система SQL/DS ограничивается единственной базой данных, функционирующей в интерактивном режиме, объемом 64 гигабайта (теоретический максимум; практический максимум несколько меньше). Подобным образом механизм безопасности данных системы DB2 значительно более тщательно разработан, чем в SQL/DS, отражая тог факт, что существует, вероятно, намного больше пользователей и намного больше категорий пользователей для установки DB2, чем для SQL/DS. Детальный разбор всех таких различий не является целью этой книги.
[5]
В этой книге предложения SQL, команды и т. п. для ясности записываются прописными буквами. На практике же обычно более удобно вводить такие предложения и команды строчными буквами. Система DB2 допускает то и другое.
[6]
В фирменных руководствах по системе термины «RUNTIME SUPERVISOR» или «STORED DATA MANAGER» не используются.
[7] Он оставляет также копию каждого такого предложения
SQL в модифицированом исходном модуле в форме комментария.
[8]
Точнее, план хранится в справочнике
DB2, который в действительности является расширением каталога, предназначенным только для использования самой системой. С точки зрения пользователя разница между ними состоит в том, что каталог в отличие от справочника имеет форму, позволяющую делать к нему запросы с помощью обычных предложений SQL (см. главу 7).
[9]
Кроме того, в качестве имен не могут использоваться ключевые слова языка SQL (CREATE, TABLE, SELECT и т. д.). Первая литера любого имени должна быть буквой (А—Z или одной из специальных литер ^, $, @), а остальные литеры — буквами, цифрами (0-9) или знаком подчеркивания. Имена таблиц и столбцов могут содержать максимум 18 литер, а имена пользователей—максимум 8 литер.
[10]
Если n>254, то поле является и «длинным полем», и объектом строгих ограничений. Длинные поля предназначены для того, чтобы иметь дело с данными в свободном формате, такими, как длинные текстовые строки, а не с простыми форматизированными данными, например номер поставщика или объем поставки. По существу, единственной операцией, в которой могут в качестве операндов использоваться такие поля, является операция присваивания базе данных (INSERT или UPDATE) либо из базы данных (SELECT). He допускаются какие-либо операции, которые предполагают сравнение с длинным полем Поэтому, например, длинные поля не могут быть индексированными, на них нельзя ссылаться во фразах WHERE, GROUP BY или ORDER BY и т. п. Две последние фразы рассматриваются в главах 4 и 5.
[11]
В связи с этим фактом можно сказать, что реляционные таблицы образуют замкнутую систему относительно операторов выборки данных языка, подобного SQL. Вообще говоря, замкнутая система—это совокупность (возможно, бесконечная) объектов некоторого типа, например OBJS, и соответствующая совокупность операторов, например OPS, таких, что а) операторы из OPS применяются ни к объектам из OBJS и б) результат применения любого такого оператора к любому такому объекту (любым таким объектам) является другим объектом из OBJS. Практический смысл этого соображения (в частности, для случая отношений) заключается в следующем. Поскольку результатом одной операции SELECT является другое отношение, то, по крайней мере, принципиально возможно применить другую операцию SELECT к этому результату, конечно, предусматривая, чтобы он был где-либо сохранен. Это означает, также, опять-таки принципиально, что операции SELECT могут быть вложенными друг в друга. Такая возможность иллюстрируется в разделах 5.2, 6.4 и 8.1.
[12]
Все они имеют значение истинности «неизвестно».
При наличии неопределенных значений необходимо принять трехзначную логику, значениями истинности в которой являются: истина, ложь и неизвестно.
«Неизвестно» в действительности представляет собой, по сути дела, неопределенное значение истинности. Предложение SELECT осуществляет выборку записей, для которых предикат WHERE имеет значение истина, т. е. не ложь и не неизвестно.
[13] Подзапрос может включать также фразы GROUP BY и HAVING. Однако комбинация ORDER BY и UNION недопустима.
[14] Между прочим, этот пример иллюстрирует важный момент, заключающийся в том, что порядок кванторов существен в выражениях, содержащих кванторы обоих типов Выражение FORALLx(EXISTSy (y>x)) истинно. Однако выражение EXISTSy(FORALLx(yx))—«существует действительное у такое, что для всех действительных х справедливо у больше х», т.е. «существует некоторое число, большее всех других чисел», — которое получается из предыдущего выражения просто перестановкой порядка кванторов, является ложным.
[15] EXISTS (существует) также рассматривается как стандартная функция, но она отличается от функций, обсуждаемых в данном разделе, тем, что она возвращает значение истинности, а не арифметическое или строковое значение, т. е это не числовая функция.
[16] Этого результата («группы внутри групп» и т. д.) можно достигнуть, однако, с помощью QMF. См. главу 15.
[17]
Каталог не является одинаковым в различных реализациях языка SQL, поскольку он по необходимости содержит для конкретной системы много информации, специфичной для этой системы. В частности, каталоги DB2 и SQL/DS различны.
[18]
Не следует, конечно, понимать этот абзац таким образом, что имеется фактически единственное лицо, которое на все время является системным администратором, даже если это лицо, например, покидает компанию. Имеется, скорее, один неизменный идентификатор санкционирования, который рассматривается системой как идентифицирующий системного администратора. Каждый, кто может войти в систему с этим идентификатором (и может выдержать тесты на достоверность), будет считаться системным администратором, пока он или она не выйдет из системы. Эти тесты на достоверность могут и, конечно, должны время от времени изменяться.
[19]
На самом деле, внутренняя структура этих наборов данных VSAM значительно отличается во всяком случае от структуры, которая предполагается для VSAM, поскольку управление всем их пространством осуществляется DB2, а не средствами VSAM (см главу 13). Таким образом, попытка понять их содержимое была бы нетривиальной задачей, даже если бы их можно было обработать с помощью обычных обращений к VSAM.
[20] Мы ограничимся при этом лишь обстановкой прикладного программировании. Предложения COMMIT и ROLLBACK могут быть введены и в интерактивном режиме, но делать это на практике не рекомендуется, как будет ясно позднее в этой главе, поскольку это обычно означает, что блокировки будут установлены на нежелательно долгое время.
[21]
При определенных условиях, которые здесь детально не обсуждаются, эта блокировка будет сниматься в следующей точке синхронизации, а не при завершении программы. В частности, это будет происходить в случае, если предложение LOCK TABLE вводится через DB2I (что само по себе маловероятно).
[22] Сегментированное пространство может иметь несколько групп памяти для каждого сегмента (см. раздел 13.3).
[23] Интересно отметить, что пространство памяти в 64 гигабайта со страни-1|яМ11 по 4К эквивалентно приблизительно 128 токам, т. е. 32 устройствам пря-Мпго доступа IBM 3380.
[24] Установка системы всегда располагает факультативной возможностью вообще не использовать какую-либо группу памяти для заданного пространства или его сегмента. Если это так, то для определения, расширения и удаления наборов данных необходимым образом следует использовать утилиту обслуживания методов доступа VSAM. Подробное обсуждение этих вопросов выходит за рамки данной книги.
[25]
Нельзя отрицать, что сегодня большинство систем, даже систем реляционного типа, тем не менее действительно проявляет весьма зависимое от ситуации и непредсказуемое поведение в некоторых областях. Для примера можно сослаться на обработку обновления представления в системе DB2, при которой действительно обнаруживается в некоторой степени неприятный произвол (см. раздел 8.4). Но такой произвол имеет тенденцию проявиться именно в тех вопросах, где реализация отклонилась от базовой теории. Так, важнейшим компонентом реляционной модели данных является понятие первичного ключа (см. Приложение А). Однако в системе DB2 такие ключи не поддерживаются, и это упущение является непосредственной причиной упоминаемого выше произвола. Конечно, система DB2—не единственный «правонарушитель» в этом отношении; подобная критика относится к большинству других систем, известных в момент написания этой книги, однако DB2 может служить для иллюстрации нежелательных последствий пренебрежения предписаниями модели, положенной в ее основу.
[26]
Дополнительным доказательством такого признания может служить тот факт, что Ассоциация по вычислительной технике (The Association for computing Machinery—ACM) присудила Тьюринговскую премию за 1981 год доктору Кодду, первому архитектору реляционной модели, за его работы, посвященные этой модели. Тьюринговская премия присуждается ежегодно за важнейшие работы в области информатики. По всеобщему признанию, она является наиболее престижной наградой во всей информатике.
[27]
Такая операция, как ALTER TABLE, в языке .SQL может рассматриваться не как изменение степени отношения с n на n+l, а, скорее, как создание нового отношения степени n+1 из отношения степени п.
[28]
' Под «соединением» здесь понимается либо естественное соединение, либо эквисоединение.
[29]
Это предложение включает также комментарий и ключевое слово FIELDS. Ни то ни другое не является частью реального ЯОД системы DB2.
Содержание раздела