Вводная лекция по Informix. Конспект
Для начала несколько определений, которые, впрочем, всем
известны и ничего не определяют.
Понятие "Система Управления Базами Данных" (СУБД), она же
DBMS (DataBase Managment System) может означать, по большому
счету, все что угодно.
В самом общем случае это собственно база данных, которая
предполагает какой либо метод сохранения информации на диске и
возможности доступа и манипуляции с нею, и набор программных
продуктов, предоставляющий пользователю все допустимые в базе
средства работы с данными.
Набор программных средств манипуляции данными СУБД
удовлетворяет свойствам полноты (консистентности). Полагаю, что
коммерческие варианты СУБД стремятся быть еще и замкнутыми,
т.е. самодостаточными, не требующими и не поддающимися
расширению.
АРХИТЕКТУРА КЛИЕНТ-СЕРВЕР
Очень многие СУБД разделяют свою работу на два уровня по
системе "Клиент-Сервер". Хитрость состоит в том, что не только
пользователь, но и программист этого не замечает. Разделение
функций его задачи выполняется автоматически системой.
Итак, двухуровневая система "Клиент-Сервер" это:
1. КЛИЕНТ - Программа обработки, она же пользовательская, она
же прикладная программа. Занимается обычно интерфейсом с
пользователем, а всю фактическую работу с базой данных
возлагает на плечи БД-сервера.
2. СЕРВЕР БАЗЫ ДАННЫХ - базис (database engine), он же ядро
базы данных. Отдельная программа, выполняемая как отдельный
процесс. Передает выбранную из базы информацию по
межпроцессному каналу клиенту. Именно он, и только он
фактически работает с данными, занимается их размещением на
диске.
В первый момент может возникнуть вопрос, а зачем такие
сложности? Вот несколько соображений в пользу такого подхода.
Представьте, вы работаете в сети, ваша программа обработки
идет на одном компьютере, а сама база данных хранится на
другом. Тут разделение выглядит совершенно естественным: клиент
- ваша программа (точнее, та ее часть, которая отвечает за
интерфейс с вами), гонит по сети запросы на обработку самих
данных на другой компьютер, а там БД-сервер их прочитывает,
выполняет требуемое, и по сети гонит ответы вам. При этом по
сети передается только полезная информация.
Другое соображение: постоянно идет работа по
совершенствованию самого метода хранения и обработки
информации, и если его реализация (т.е. БД-сервер) сменилась,
та вам не потребуется перелопачивать и перекомпилировать с
новыми библиотеками все свои разработанные программы, а
достаточно будет инсталлировать новый БД-сервер взамен старого
и перевести свои базы данных в формат нового сервера (применив
для этого прилагаемую к нему утилиту). Естественно, все это
можно проделать, если новый сервер придерживается тех же правил
обмена между ним и пользовательской программой, что и старый,
что, впрочем, наверняка имеет место.
Всвязи с СУБД INFORMIX нас, естественно, интересует только
одна модель данных - реляционная. Сетевых и иерархических
моделей рассматривать здесь я не буду. Можно, конечно, дать
строгое определение реляционной модели данных по Э.Ф. Кодду, но
ведь ни одну из коммерческих СУБД нельзя назвать реляционной в
строгом смысле этого слова.
ОСНОВНЫЕ ОБЪЕКТЫ РЕЛЯЦИОННОЙ БАЗЫ ДАННЫХ
(DATABASE) Реляционная База Данных:
это множество прямоугольных таблиц с данными. Никаких
дополнительных сведений и ссылок не хранится.
(TABLE) Таблица
прямоугольная таблица, состоящая из СТРОК и СТОЛБЦОВ. Задать
таблицу - значит указать, из каких столбцов она состоит.
Обращаю внимание поклонников DBase - то, что в DBase называлось
базой данных, в INFORMIX называется таблицей.
(ROW) Строка
запись, состоящая из полей - столбцов. В каждом поле сидит его
значение, либо значение NULL - "пусто". Строк в таблице может
быть сколько угодно. Физический порядок их расположения друг
относительно друга неопределен.
(COLUMN) Столбец
Каждый столбец в таблице имеет собственные имя и тип.
В INFORMIX допустимы следующие типы столбцов:
INTEGER SERIAL - автоматический счетчик
SMALLINT CHAR(n) DATE
FLOAT DECIMAL(m,n) DATETIME qualif1 TO qualif2
REAL MONEY(m,n) INTERVAL qualif1 TO qualif2
где qualif \in {YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,FRACTION(n)}
возможны и другие типы, в зависимости от реализаций.
Реляционная модель идейно проста - основной ее принцип -
"База Данных обеспечивает хранение и выдачу информации из своих
прямоугольных таблиц, и ничего не желает знать о логической
структуре данных, которую на ней реализовывают." Все логические
отношения и связи между разными таблицами вынесены наружу
"Исполнителя База Данных" и отданы на откуп программисту. Такой
подход позволяет просто и эффективно реализовывать саму базу
данных, соответственно и быстродействие и мощность реляционных
баз удается держать на весьма высоком уровне.
Физическую целостность базы данных обычно поддерживает сам
метод доступа, сервер базы.
Но логическая (внешняя) структура пользовательской базы
может быть весьма сложной. Для поддержания целостности
логической структуры базы данных в реляционной базе имеется
механизм транзакций. Транзакция - это объединение нескольких
простых операторов манипулирования данными, которые должны быть
выполнены только вместе, а если это не удается, то база
вернется в состояние, предшествующее выполнению самого первого
из них.
ПОНЯТИЯ, СВЯЗАННЫЕ С РЕЛЯЦИОННОЙ БАЗОЙ ДАННЫХ
РЕЛЯЦИОННЫЕ МЕТОДЫ МАНИПУЛИРОВАНИЯ ТАБЛИЦАМИ. Запросы на поиск.
Соединение таблиц. Внешнее соединение таблиц.
Представьте, что вам нужно в таблице "КАДРЫ" хранить
данные о личном составе предприятия. О каждом человеке
желательно помнить его фамилию, зарплату, пол, и т.д., а также
название подразделения, в котором он работает. Но название
подразделения длинно, самих подразделений немного, зато строк в
таблице "КАДРЫ" много. Для экономии места применяется
стандартный реляционный метод: в таблице "КАДРЫ" хранится не
само название, а только его короткий код, и создается еще одна
таблица, с помощью которой мы будем определять название
подразделения по его коду. Табличку эту мы, естественно,
назовем "ПОДРАЗДЕЛЕНИЯ", и будет в ней всего два столбца:
столбец "КОД" и второй "название подразделения". И вот мы
подошли к самому главному, что есть в реляционной базе, к
"СОЕДИНЕНИЮ ТАБЛИЦ" по значению столбца (оно же соединение по
ключу, по коду). Когда нам потребуются данные о человеке по
фамилии Иванов, мы захотим увидеть название подразделения в
котором он работает, а не малопонятный код. Значит поиск данных
об Иванове нужно вести в двух таблицах. Сперва мы найдем в
таблице "КАДРЫ" строчку, в которой в столбце ФАМИЛИЯ стоит
значение "Иванов", мы возьмем в этой строчке значение кода
подразделения, и будем искать в таблице "ПОДРАЗДЕЛЕНИЯ" строку,
со значением в столбце КОД равным коду из строки с с Ивановым.
А найдя мы соединим данные из строки с Ивановым и з первой
таблицы и из строки с кодом из второй, получив одну, общую
строку.
ИНДЕКСАЦИЯ
Индекс таблицы - это вспомогательный файл, который создается
для того, чтобы ускорить выполнение реляционных операций с
участием этой таблицы. Индекс строится для определенного
столбца (или совокупности столбцов) таблицы. Он состоит из пар
вида {Значение столбца, физический адрес соответствующей строки
на диске} и отсортирован по значению столбца в порядке
возрастания или убывания. Для одной и той же таблицы может
существовать несколько индексов. Не следует путать индекс,
построенный для совокупности нескольких столбцов таблицы, и
несколько различных индексов, построенных для отдельных
столбцов.
Если индекс создан, то при выполнении операций с таблицей
система будет пользоваться им автоматически.
Перечислим коротко ряд рекомендаций по индексации таблиц.
1. Индексируют те столбцы, по которым наиболее часто
производятся операции поиска, сортировки, соединения,
группирования.
2. При соединении таблиц полезнее иметь индекс для той из них,
которая содежит большее число строк.
3. Индексирование замедляет операции вставки, удаления или
изменения строк, поскольку эти операции должны быть выполнены
не только над таблицей, но и над ее индексами. Поэтому иногда
перед массовым занесением строк в таблицу ее индексы
уничтожают, а затем вновь создают.
Индексы бывают уникальные и неуникальные. Если вы создаете
уникальный индекс по некоторому столбцу, то система
гарантирует, что в данном столбце не будет повторяющихся
значений.
Выделяется кластеризованные индексы. При построении таких
индексов данные таблицы физически упорядочиваются на диске в
соответствии с упорядоченностью строк индекса. Поскольку
операционная система поддерживает буферизацию дискового обмена,
физически упорядоченные данные оказываются в буферном кэше
вместе, можно сказать, "автоматически". Следовательно, скорость
обработки запросов возрастает. Для каждой таблицы может
существовать только один кластеризованный индекс, что следует
из его определения.
СИСТЕМНЫЙ ЖУРНАЛ (logfile), он же журнал транзакций.
Запись всех изменений, происходящих в базе данных.
Контрольные точки.
Откатка.
Транзакции.
Оператор начала транзакции.
Оператор нормального завершения транзакции.
Оператор ненормального завершения транзакции - откатка к
предыдущей контрольной точке.
Базы данных в режиме ANSI.
Прогон базы данных по системному журналу из backup копии.
МНОГОПОЛЬЗОВАТЕЛЬСКИЙ РЕЖИМ ОБРАБОТКИ БАЗЫ ДАННЫХ
БЛОКИРОВАНИЕ (locking), оно же запирание.
Сервер базы блокирует строки и таблицы во избежание коллизий
при записи в одну и ту же строку. Строки блокируются
автоматически (неявно). В блокированную строку нельзя писать,
но можно смотреть. На время выполнения транзакции все
измененные в ней строки блокируются. Можно заблокировать всю
таблицу целиком явной командой блокировки. Таблицы можно
блокировать не только от записи, но и от просмотра. Программе
можно задавать режим: ждать/ не ждать блокированных строк
оператором SET LOCK MODE.
ПРАВА ДОСТУПА В БАЗЕ ДАННЫХ, которые могут иметь пользователи.
На уровне базы данных определены следующие уровни прав:
- пользовательский
- право на ресурсы
- администратор базы данных
На уровне таблиц можно давать пользователям (и отбирать у них)
следующие привилегии:
- читать строки
- вставлять строки
- изменять изменять
- уничтожать строки
- переопределять таблицу.
SQL - СТРУКТУРНЫЙ ЯЗЫК ЗАПРОСОВ
ANSI (American National Standart Institute) разработал
Структурный Язык Запросов (SQL) - Structured Query Language для
определения, манипуляции и контролирования данных. Содержит 4
группы операторов.
В SQL выделяются следующие группы операторов:
Операторы описания данных:
CREATE, DROP, ALTER
Операторы манипуляции данными:
INSERT, DELETE, SELECT, UPDATE
Операторы задания прав доступа:
GRANT / REVOKE , LOCK / UNLOCK , SET LOCK MODE
Операторы защиты и восстановления данных, и прочие:
Transaction, Audit trail, Logfile
ЯЗЫК ПРОГРАММИРОВАНИЯ 4-ГО ПОКОЛЕНИЯ 4GL
Включает следующие возможности:
Средства стандартных языков программирования 3-го поколения.
Программные переменные.
Изготовление операторов по ходу программы.
Операторы манипуляции базой данных. SQL.
Переброска данных из базы данных в програмные переменные, и обратно.
Курсоры.
Печать результатов запросов. Отчеты.
Экранный обмен с пользователем.
Меню. Окна.
Экранные формы, экранные поля, экранные массивы.
Файл описания экранной формы.
Файлы с исходными текстами.
Описание состава программы.
ПРОДУКТЫ INFORMIX ДЛЯ ОБРАБОТКИ БАЗ ДАННЫХ
Программное обеспечение Informix содержит следующие компоненты:
I. СЕРВЕРЫ БАЗЫ ДАННЫХ:
Informix-SE.
Сервер для многопользовательских баз данных INFORMIX, на нижнем
уровне обеспечивающий работу всех программ, обращающихся к
базам данных INFORMIX.
Informix-NET.
Сетевое дополнение к INFORMIX-SE. Превращает его в сервер
удаленных баз данных. Работает поверх сетевого протокола
TCP/IP.
Informix-OnLine.
Современный OLTP (On-Line-Transaction-Processing) базис баз
данных. В отличие от SE взял физическое хранение данных в свои
руки, отнимает у операционной системы логический раздел(ы)
диска и самостоятельно работает с ними на низком уровне. В 2-4
раза быстрее SE, однако более сложен в настройке на конкретный
компьютер, требует от администратора OnLine базы данных хороших
познаний в операционной системе. Имеет много дополнительных
возможностей по сравнению с SE, в том числе хранение таких
типов данных как Binary Large Objects, текстовых и байтовых, а
также символьных строк переменной длины как полей в базе
данных, разделяемую буферизацию данных, буферизацию транзакций,
зеркальный диск, автоматическое восстановление после системных
сбоев, автоматический backup.
Informix-STAR.
Сетевое дополнение к INFORMIX-OnLine. Превращает его в сервер
распределенной базы данных. Разрешает одновременный доступ к
данным нескольких INFORMIX-STAR систем. Работает поверх
протокола TCP/IP. Естественно, в MS-DOSе отсутствует.
II. ДИАЛОГОВАЯ СИСТЕМА ПОДДЕРЖКИ И АДМИНИСТРИРОВАНИЯ
БАЗ ДАННЫХ ДЛЯ ПОДГОТОВЛЕННЫХ ПОЛЬЗОВАТЕЛЕЙ.
Informix-SQL.
Система управления и поддержки баз данных. Содержит 5 компонент:
- интерпретатор языка SQL.
- экранные формы для просмотра и изменения таблиц базы данных.
- генератор отчетов.
- организация пользовательких меню.
- диалоговое описание структуры таблиц.
III. ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА РАЗРАБОТКИ
ПОЛЬЗОВАТЕЛЬСКИХ ПРИЛОЖЕНИЙ.
Informix-4GL.
Основное инструментальное средство для программирования баз
данных и создания пользовательских приложений на языке 4GL.
Включает:
- компилятор с 4GL на Си и далее, в машинный код.
- генератор и компилятор экранных форм 4GL.
- описание и поддержка многомодульных программ
(а ля make).
Все это собранно в единую интегрированную среду-оболочку
поддержки программирования, управляемую меню.
Язык 4GL содержит в себе:
а. Операторы SQL - для работы с данными.
б. Программные операторы - IF, CASE, CALL, FUNCTION, FOR,
WHILE, GOTO, DEFINE и т.д.
в. Операторы экранного обмена - меню, окна, ввод-вывод через
экранные формы и экранные массивы.
г. Перехват и обработка исключительных ситуаций
Informix-4GL-RDS+ID.
Rapid Development Sistem and Interactive Debugger
То же самое, только компилируются программы гораздо быстрее, но
не до выполнимого кода, а до "псевдо"-кода, который выполняется
runner'ом. Диалоговый Отладчик 4GL программ использует "псевдо"-код.
Informix-ESQL/C.
EmbeddedSQL/C (Вложенный в Си SQL)
Система Программирования Баз Данных на языке Си, к которому
добавлены операторы языка SQL.
- представляет собой компилятор-препроцессор, который превра
щает программный код, написанный на ESQL/C (Си с SQL), в
чистый Си код, который дальше транслируется обычным Си ком
пилятором. Не имеет среды-оболочки.
C-ISAM.
Библиотека подпрограмм индексно-последовательного метода
доступа для языка Си, на котором реализован INFORMIX-SE.
IV. ОБЕСПЕЧЕНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ПРИЛОЖЕНИЙ INFORMIX
Informix-RunTime.
Компонента Informix, которую необходимо установить на машину,
чтобы на ней могли работать пользовательские программы,
изготовленные с использованием средств разработки Informix.
(SQL, ESQL, 4GL - для каждого из них требуется своя собственная
версия RunTime). Представляет собой совокупность служебных
файлов с системными сообщениями, программ, интерпретирующих
псевдокод для 4GL-RDS, и программ выполнения отчетов, меню и
экранных форм Informix-SQL. Дополнительно к Informix-RunTime
необходимо иметь один из серверов базы данных SE или OnLine,
поставляемых как отдельные продукты.
V. СИСТЕМЫ АВТОМАТИЗАЦИИ КОНТОРСКОЙ ДЕЯТЕЛЬНОСТИ
Wingz.
Электронная таблица с трехмерной графикой для обработки данных
большого объема (32.768 строк и столько же столбцов, до
биллиона элементов). Таблица дополнена возможностями 140
встроенных функций на все случаи жизни и собственным языком
HiperScript для написания прикладных программ. Может выполнять
как стандартные операции над базами данных, так и строить
объемные цветные иллюстрации достижений вашей деятельности.
Возможно вращение и движение по графическому изображению,
использование данных из баз данных INFORMIX. Позволяет в
рабочей области, на одной странице разместить тексты, числа,
графы и графические изображения.
SmartWareII.
Интегрированная система, объединяющая базу данных, электронную
таблицу с деловой графикой, текстовый процессор и сетевые
возможности. Имеется собственный язык для создания
пользовательских программ. Используется язык QBE для доступа к
базе данных. В создании отчетов могут участвовать до 100
файлов. Текстовый процессор имеет словарь синонимов и может
выполнять орфографическую проверку написания 140.000 слов,
конвертирует файлы из других редакторов. Работает в
операционных системах UNIX и DOS. Могут использоваться данные
из баз данных INFORMIX-SQL.
VI. Прочее.
Informix-QuickStep.
Интерактивный генератор отчетов. Позволяет создавать отчет без
программирования, используя систему выпадающих меню. На выходе
получаетыся отчет, а также генерится программа на 4GL, этот
отчет производящая.
Informix-FORMS.
Генератор экранных форм и программного 4GL кода для работы с
ними. Для Informix-4GL.
Informix-Menu.
Позволяет сгенерить систему меню, объединяющую прикладные
программы на уровне вызова выполнимых модулей и Shell-процедур.
Informix-Optical.
Пакет обеспечивает создание и работу с информационно поисковыми
системами, использующими Informix-Online (и его возможности по
хранению изображений, звуков, и т.п. BLOBов) в качестве
средства хранения, индексирования и доступа к данным,
"зашиваемым" на перезаписываемых оптических WORM дисках (Write
Once Read Many).
VII. Новое поколение - графические средства разработки.
Informix-GX.
Графический интерпретатор псевдокода, получаемого в результате
быстрой компиляции 4GL-программ. Выполняет псевдо-код не в
алфавитно-цифровом режиме, а в графическом окошке - клиенте
MSWindows 3.1 или X-Window OSF/Motif. Позволяет понизить
скорость перерисовки экрана прикладной программы на
SPARC-станции до уровня алфавитно-цифрового терминала. Для In╜
formix-4GL Compiler поставляется в виде библиотеки, замещающей
стандартные функции библиотеки curses для рисования на АЦТ.
Informix-4GL for Windows.
Старый знакомый 4GL версии 4.12, только в среде MS Windows.
Включает компилятор 4GL и среду-оболочку для программиста со
стандартным для MS-Windows мышино-оконным интерфейсом.
Informix-NET/PC.
Позволяет клиентским приложениям на PC обращаться к удаленным
базам данных, расположенных на Unix серверах: умеет обращаться
как к SE+NET, так и к OnLine+Star. В пакеты Informix for MS
Windows (Hyperscript, 4GL, NewEra) включается по умолчанию.
Informix-HyperScript.
Система, не имеющая ничего общего с линией SQL продуктов фирмы
Informix. Это система для организации доступа к разнообразным
данным (графическим, текстовым, мультимедиа) в виде
гипертекста. Имеет собственный язык для
описания/программирования приложений. Имеет графический
генератор диалогов (наподобие Visual Basic). Есть версии для
Unix/X-Windows, NeXT, MS/Windows, Macintosh. Является
естественным развитием-продолжением пакета Wingz. Wingz включен
как подмножество HyperScript
Informix-ViewPoint/DBA.
Нечто вроде ISQL для MS Windows. Экранные (пардон, графические)
формы для работы с базой данных Informix. С естественными для
графических приложений прибамбасами (шрифты, картинки, мышка.)
Генератор отчетов. Средство гля генерации-разработки этих самых
форм. DBA - дополнительный пакет администратора базы данных,
необходимый для работы ViewPoint, DBA используется,чтобы
создать так называемое SuperView - этакая единая квази-таблица
структура, описывающая логику и взаимоотношения таблиц и полей
базы данных. ViewPoint нужно по одному на каждого пользователя,
а DBA необходимо и достаточно одного на всю локальную сеть.
Informix-NewEra.
Условное название - Informix-4GL++. Объектно-ориентированный
язык программирования. Позволяет программировать графические
прикладные интерфейсы для баз данных Informix. Частично
совместим с 4GL (кроме операторов экранного обмена).
Наконец-то Informix сделал шаг в сторону разработчиков
графических приложений. Имеются версии для Motif X-Windows и
для MS-Windows.
Last-modified: Tue, 25 Nov 1997 07:10:21 GMT