РУКОВОДСТВО ПО РЕЛЯЦИОННОЙ СУБД DB2

         

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ


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.


Содержание раздела