Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга по БД(Вальке А.А.).doc
Скачиваний:
18
Добавлен:
29.04.2019
Размер:
4.5 Mб
Скачать

Грачев А.Ю. Введение в СУБД Informix

Оглавление

Оглавление 1

Предисловие 4

Введение 6

Информационная система 6

База данных и система управления базами данных 6

Понятие о модели и схеме базы данных 8

Основные задачи и функции 8

Глава 1 Обзор основных архитектур баз данных 10

1.1. Архитектура на основе разделяемых файлов 10

1.2. Архитектура “Хост-терминал” 13

1.3. Архитектура “Клиент-Сервер” 14

Основная идея архитектуры “клиент-сервер” 14

Пример реализации: X Window System 11 15

Реализация архитектуры “клиент-сервер” для баз данных 15

1.4. Архитектура с использованием сервера приложений (трехзвенная архитектура) 21

1.5. Упражнения 23

Глава 2 Модели данных 24

2.1. Уровни восприятия данных 24

2.2. Иерархическая модель данных 26

2.3. Сетевая модель данных 29

2.4. Реляционная модель данных 32

2.5. Объектно-реляционная модель данных 36

Глава 3 Реализация информационных систем на основе продуктов Informix Software 38

3.1. Обзор продуктов Informix 38

3.2. Варианты построения систем 42

3.3. Выбор оптимальной конфигурации 48

Глава 4 Математические основы реляционных СУБД 51

4.1. Основные понятия 51

4.2. Ключи 52

4.3. Основные операции над таблицами и их интерпретация 54

4.4. Нормализация 56

4.5. Упражнения 67

Глава 5 Язык SQL 68

5.1. Типы данных, доступные в SQL 68

5.2. SQL-операторы создания схемы базы данных 72

5.3. Основные SQL-операторы для доступа и модификации данных 75

5.4. Управление транзакциями 79

5.5. Продвинутые варианты оператора поиска 81

5.5.1. Поиск по нескольким таблицам 81

5.5.2. Устранение повторения данных в операторе SELECT 83

5.5.3. Вычисления внутри оператора SELECT 83

5.5.4. Логические выражения в условии SQL-операторов 88

5.5.5. Слияние двух выборок 91

5.5.6. Сортировка выборки 92

5.5.7. Вставка в таблицу нескольких строк одновременно 92

5.6. Использование SQL в языках программирования 94

5.7. Программирование сервера базы данных 103

5.7.1. Динамический SQL 103

5.7.3. Хранимые процедуры 106

5.7.4. Триггеры 111

5.8. Ограничители (задание целостности на уровне схемы) 117

5.9. Разграничение в SQL прав пользователей 124

5.9.1. Права доступа 124

5.9.2. Права на уровне базы данных 124

5.9.3. Права на таблицы 126

5.9.4. Права на хранимые процедуры 128

5.9.5. Кто и как следит за соблюдением прав 129

5.9.6. Механизм ролей 129

5.9.7. Псевдотаблицы (VIEW) 131

5.9.7. Синонимы 133

5.10. Управление одновременным доступом к данным 135

5.10.1. Что бывает, когда несколько человек одновременно пытаются обновить одни и теже данные 135

5.10.2. Открытие базы данных только для себя 135

5.10.3. Блокирование таблицы 136

5.10.4. Механизм блокирования записей и уровни изоляции 137

5.10.5. Управление ожиданием снятия блокировок 139

5.10.6. Тупиковые ситуации 140

5.11. Повышение скорости обработки запросов. 141

5.11.1. Индексы 141

5.11.2. Буферизация журнала транзакций 145

5.11.3. Блокировка на уровне записей и страниц 146

5.11.4. Эффективное построение запросов 146

5.11.5. Сортировка и поиск по коротким полям. Классификаторы 148

5.12. Объектное расширение SQL в Informix DS/Universal Data Option 150

5.12.1. Зачем нужна поддержка объектов в серверах БД? 150

5.12.3. Внедрение объектно-ориентированной технологии 156

5.12.4. Реализация объектного подхода в Informix 158

5.12.5. Итак… 164

Глава 6. Устройство Informix Dynamic Server 165

6.1. Внутренняя архитектура DSA 165

6.2. Механизм хранения данных 167

6.3. Инсталляция продукта 170

6.4. Запуск и останов сервера 173

6.5. Работа с русским языком 175

Глава 7. Эксплуатация информационных систем 177

7.1. Администрирование серверов баз данных 177

7.2. Обеспечение сохранности данных. 178

7.2.1. Технологии постоянного дублирования 179

7.2.2. Архивация 180

7.2.3. Так как же обеспечить сохранность данных? 181

7.3. Архивирование и восстановление данных 182

7.3.1. Что нужно архивировать 182

7.3.2. Утилиты архивации и восстановления 182

7.3.3. Создание архивов утилитой ontape 183

7.3.4. Восстановление из архивов утилитой ontape 185

7.3.5. Как узнать “когда”? 186

7.3.6. Практические советы 189

7.4. Средства контроля за доступом 191

7.4.1 Как работает аудитинг? 191

7.4.2. Конфигурирование списков протоколируемых событий 193

7.4.3. Задание файлов, запуск и остановка механизма аудитинга 195

7.4.4. Анализ протокола 196

7.4.5. Практические советы или Что делать, если вы хотите… 197

7.5. Реагирование на чрезвычайные ситуации 199

7.6. Мониторинг текущего состояния сервера базы данных 203

7.7. Достижение требуемой производительности 206

Заключение 212

Приложение 2. Миграция старых приложений в Informix 244

2. Общие принципы предлагаемой технологии 245

3. Как портировать приложение 247

Литература 248

Предисловие

В какой-то момент сложилась ситуация1), что огромный интерес в Росси и других странах бывшего СССР к современным технологиям систем управления базами данных вообще, и к продукции одного из лидера в данной области фирмы Informix Software, в частности, был слабо подкреплен печатными изданиями. Существовали, конечно, специализированные журналы, многие компьютерные издания также имели специальные разделы по базам данных. В этих изданиях было опубликовано немало статей, посвященных продукции фирмы Informix. В тоже время получить какую-либо комплексную, систематизированную информацию было не так просто. Именно тогда родилась и осуществилась идея о написании такой книги, книги которую вы сейчас держите в руках.

Данная книга посвящена практическим и теоретическим вопросам использования программных продуктов фирмы Informix. Одновременно затрагиваются и в достаточной степени обсуждаются общие вопросы построения систем с использованием баз данных.

Можно выделить несколько категорий читателей, которым данная книга будет безусловно полезна и кому она, в первую очередь, предназначена. Основная цель данной книги - помочь разработчикам, которые только-только познакомились с технологией современных систем управления базами данных, выбрать наиболее подходящие для себя решения, выбрать правильные продукты и, наконец, сделать первые реальные шаги по воплощению своих идей в реальные приложения.

Книга будет полезна и тем, кто уже практически знаком с продукцией и технологией фирмы Informix Software, разрабатывает новые приложения или эксплуатирует уже существующие программы на основе этой продукции и технологии. Для таких читателей книга даст возможность увидеть перспективы развития своих систем, подскажет какие-то решения и даст практические, реальные советы по администрированию и конфигурированию приложений на базе продукции Informix. При этом данная книга не заменяет собой техническую документацию, а пытается дать комплексный подход к решению возникающих задач.

Книга, помимо описания конкретных решений и продуктов, содержит и популярное описание таких базовых концепций, как описание основных моделей данных, описание основ и синтаксиса языка SQL. Это делает книгу полезной тем программистам, которые пока не сталкивались с новыми технологиями, но хотят повысить свой уровень. По этой же причине книга будет интересна и полезна студентам программистских кафедр.

Безусловно, книга должна помочь специалистам по проектированию систем на основе баз данных, которые пока не сталкивались с продукцией Informix, ибо эта книга содержит описание отдельных продуктов Informix, варианты их взаимодействия, дает информацию по интеграции различных информационных систем.

Что касается структуры книги, то она построена по принципу последовательного изложения от простого к сложному, от общего к частному. Каждая из глав относительно независима от остальных, хотя при чтении рекомендуется придерживаться имеющегося порядка изложения материала. Те из читателей, кто уже хорошо знаком с технологией “клиент-сервер” могут пропустить первую главу. Читатели, знающие основы реляционных баз данных, могут пропустить Главу 4.

Книга состоит из глав (например Глава 6. Обзор продуктов Informix). Главы делятся на параграфы (например, Параграф 5.1. Типы данных, доступные в SQL ). Параграфы делятся на пункты (например, Пункт 5.5.1. Поиск по нескольким таблицам). В пунктах могут быть подпункты, они не имеют нумерации.

******************

Данная книга никогда бы не появилась на свет, если бы не постоянная поддержка со стороны моей жены, Светланы. Также хотелось бы выразить благодарность всем сотрудникам Московского представительства Informix Software за помощь в написании и разработке данного издания. Особую благодарность хотелось бы выразить старейшему представителю Informix Software в России, моему начальнику Ховарду Залкину.

Введение

Основная тема, которой мы намерены следовать, является практическое введение в технологию разработки современных информационных систем на базе системы управления базами данных Informix Software. Прежде всего, стоит определиться с основными терминами и понятиями.

Информационная система

Информационная система вообще - это некий механизм для хранения, поиска, извлечения и модификации некоторой информации. Прообразом современных информационных систем могут служить мудрецы и летописцы, им на смену пришли архивы и библиотечное дело. Современные информационные системы базируются на компьютерной технологиях. Задачи информационных систем остались, тем не менее, прежними.

Классический пример информационной системы - это система резервирования авиабилетов. В ней хранится информация о рейсах, о том, сколько и какого класса места есть на каждом рейсе, сколько билетов продано и сколько зарезервировано и т.д.

Оператор, работая с такой системой, ничего не знает про то, как хранится и обновляется информация, про то, как вообще сделана эта система. Оператор знает как работать с этой системой - для бронирования авиабилета он выбирает кнопку с названием "Забронировать место", а не "добавить такие-то данные в такой-то файл". Тем не менее, нажатие этой кнопки приводит именно к некоторым изменениям в данных, отражающих факт резервирования билета на какой-то рейс. А другой оператор, попытающийся зарезервировать билеты на этот же самый рейс, должен увидеть на одно свободное место меньше.

Информационная система - это комплексная система, включающая организационную часть, аппаратное и программное обеспечение и, собственно, информацию. В той же системе резервирования авиабилетов есть и терминалы для работы операторов, и компьютеры, в которых хранится вся эта информация, и специальная служба, которая отвечает за установку новых рабочих мест и т.д. Для занесения информации о новых рейсах существует специальная методика и есть люди, отвечающие за своевременное обновление такой информации.

База данных и система управления базами данных

База данных - это набор структурированной информации, предназначенный для совместного использования несколькими пользователями одновременно. Отдельные элементы данных в базе данных связаны между собой логическими связями, взаимозависимы. Именно понятие “структурированная” и “для совместного использования” отличают базу данных от простых файлов с данными, которые тоже являются наборами данных.

Структурированность означает, что данные имеют некоторую логическую структуру, некоторую схему, модель, которая связывает между собой разные данные. В файле же есть только физический порядок - “первый”, “следующий за” и т.д. В базе данных связи имеют логическую связь “стоит столько-то”, “называется так-то” и т.д. В качестве способа хранения базы данных может использоваться файл или группа файлов. Но для файла операции доступа будут иметь вид "найти запись номер 5" или "прочитать запись, байты с 30 по 37 которой имеют значение "секретно"". Доступ же к базе данных будет иметь вид типа "найти название документа, у которого стоит гриф "секретно"".

В рассматриваемом нами примере резервирования авиабилетов, база данных - это информация о рейсах, список проданных билетов и т.д. Информация является связанной, то есть билеты на рейсы существуют не сами по себе, а должны быть согласованы с рейсами. Например, при отмене того или иного рейса надо также каким-то образом обрабатывать проданные на него билеты. Стоит отметить, что даже если по своему назначению и по своим внутренним связям две базы данных идентичны, но описывают разные реальные объекты, то есть, содержат разные данные, то это будут две разные базы данных. Hапример, если авиакомпании "Внуковские авиалинии" и АЭРОФЛОТ используют систему резервирования билетов, купленную у одной и той же фирмы, но используют их независимо, то это будут разные базы данных. Итак, основная ценность базы данных заключается в самих данных, в возможности находить, модифицировать эти данные.

Кроме того, база данных предполагает наличие некоторого программного обеспечения, позволяющего пользователям работать с базой данной. Это программное обеспечение разрабатывается с помощью инструменталььных программных средств, называемых системой управления базами данных (СУБД). С помощью СУБД можно создавать базы данных, модифицировать данные в базе данных, вносить новые данные, разрабатывать пользовательские приложения не заботясь при этом о способе физического представления данных. Кроме того, СУБД должна выполнять некоторые задачи по администрированию и поддержанию непротиворечивости данных. То есть СУБД - это инструмент, с помощью которого создается та или иная конкретная база данных.

В примере про систему резервирования билетов к СУБД относятся как средства, с помощью которых разработаны программа, с которой работают операторы, сидящие в авиакассах, так и программа, с помощью которой администратор меняет список рейсов. Утилита, с помощью которой по ночам создается резервная копия всей базы, также относится к СУБД.

Еще раз отметим разницу между базой данных и системой управления базой данных. Если какая-то фирма пишет в объявлении, что она продает базу данных, то это означает, что она продает информацию. Если же в рекламе написано о СУБД, то следует ожидать, что Вам предложат программные средтсва, с помощью которых Вы соберете свою собственную базу данных. Хотя, в реальной жизни, понятия базы данных и системы управления базой данных часто смешивают.

Иногда к СУБД относят и те прикладные программы, которые предназначены для доступа пользователей к базе данных. Стоит четко отличать СУБД от прикладных программ. Другие авторы относят прикладные программы, работающие с базой данных к самому понятию “база данных”. В этом случае понятие базы данных становится очень близким к понятию “информационная система”. Мы же, в дальнейшем рассмотрении прикладные программы будем выносить в свою собственную категорию (называемую, также, приложениями).

Помимо базы данных, иногда встречается и другой термин - “банк данных”. Однозначного толкования данного термина не существует, но обычно его употребляют или вместо термина база данных, или для обозначения нескольких баз данных, логически связанных между собой.

Понятие о модели и схеме базы данных

Для каждой конкретной базы данных существует схема базы данных. Схема базы данных описывает взаимоотношение между данными, структуру отдельных компонент, правила модификации и взаимозависимость между данными.

В примере про резервирование авиабилетов схема базы данных определяет, что для каждого рейса в базе данных хранится такая информация, как общее количество билетов для каждого класса, что каждый рейс характеризуется временем вылета и продолжительностью роейса и т.д. Именно схема базы данных определяет, что в базе данных не может быть занесена информация о двух билетах на одно и тоже место, при удалении рейса из списка также должны быть аннулированы проданные на этот место билеты и т.д.

Понятие модель данных относится к тем принципам, на основе которых построена схема базы данных. При разработке баз данных обычно используются специальные инструментальные программные средства, то есть СУБД. Так как СУБД, с помощью которой реализована та или иная база данных, как правило, позволяет использовать вполне определенные принципы построения схемы базы данных, то понятие модели данных относится и к СУБД.

Конечно же, если для разработки базы данных использовался язык низкого уровня типа С/С++, или даже ассемблер, то говорить о том, какая модель данных поддерживается данным инструментом, бессмысленно. С помощью таких инструментальных средств можно разработать любую базу данных с любой моделью данных. Однако использование таких низкоуровневых средств разработки встречается чрезвычайно редко, так как разработка, отладка и сопровождение реализованной базы данных будет стоить очень дорого, а временные затраты будут большими.

Более подробному рассмотрению различных моделей данных будет посвящена отдельная глава.

Основные задачи и функции

Рассмотрим те задачи, которые должны быть решены при разработке информационной системы, то есть те функции, которые должна позволять реализовывать система управления базами данных.

  1. Обеспечивать работу пользователя (оператора) по извлечению и модификации данных.

  2. Обеспечивать одновременный доступ нескольких пользователей к базе данных.

  3. Предоставлять возможность выполнения административных действий по поддержанию работоспособности информационной системы.

  4. Обеспечивать идентификацию и разграничение прав доступа разных пользователей к разным данным;

  5. Обеспечивать целостность и непротиворечивость данных в случае аппаратных и программных сбоев;

  6. Защищать данные от несакционированного доступа;

Рассмотрим эти требования более подробно.

Обеспечивать работу пользователя (оператора) по извлечению и модификации данных. Вообще говоря, это основная, видимая сторона любой информационной системы. Механизм реализации этих возможностей может и должен быть скрыт от пользователя, то есть пользователь просто нажимает некоторую кнопку (например, “Зарезервировать билет”), а уж как это реализовано внутри - это должно быть скрыто.

Обеспечивать одновременный доступ нескольких пользователей к базе данных. При одновременной работе нескольких операторов по резервированию авиабилетов не должны возникать конфликты типа того, что оба видят на экране своих терминалов свободное место под номером “4F” и оба выписывают на него билеты. С другой стороны, недопустима ситуация, когда один оператор, работая с тем или иным рейсом, делает невозможной работу других операторов с этим же рейсом.

Предоставлять возможность выполнения административных действий по поддержанию работоспособности информационной системы. В реальной информационной системе очень важно обеспечить технологичность, то есть информационная система позволять добавлять или удалять пользователей, настраиваться на новые аппаратные ресурсы и т.д.

Обеспечивать идентификацию и разграничение прав доступа разных пользователей к разным данным. В реальных информационных системах должно существовать разграничение по правам доступа к данным. Какие-то пользователи могут и читать и модифицировать данные, какие-то пользователи могут только читать, а кто-то вообще может только вводить данные, а читать не имеет право. Например, любой посетитель в аэропорту может иметь возможность просмотреть список коммерческих рейсов и количество свободных мест на них. Изменять эти данные он не имеет право, это должен делать кассир, предварительно получив деньги. Доступ же к информации по грузовым и заказным рейсам для обычного посетителя вообще должен быть закрыт.

Обеспечивать целостность и непротиворечивость данных в случае аппаратных и программных сбоев. Несмотря на то, что за последнее время надежность аппратной части существенно выросла, абсолютно надежной техники не бывает. В случае внезапного выключения и последующего включения компьютера, на котором работает сервер базы данных, информация не должна быть искажена. Также информационная система должна быть максимально устойчива к программным ошибкам (или к злому умыслу). Например, следует исключить возможность выдачи билета на несуществующий рейс. В случае выхода аппаратуры из строя, должна существовать возможность восстановить работоспособность системы с минимальными потерями информации.

Защищать данные от несакционированного доступа. В современных информационных системах все данные, или, по крайней мере, их значительная часть, является конфиденциальной. Помимо разграничения доступа для разных категорий пользователей, информационная система должна обеспечивать защиту от попыток получить доступ к данным тем лицам, которые не являются пользователями информационной системы.