- •5.2. Фактографические аис
- •5 .2. Фактографические аис
- •5.2. Фактографические аис
- •5.2. Фактографические аис
- •5.2. Фактографические аис
- •5.3. Документальные ис
- •5.3. Документальные ис
- •290 Глава 5. Программные оболочки информационных систем
- •294 Глава 5. Программные оболочки информационных систем
- •5.4. Автоматизированные библиотечные информационные системы (абис)
5.2. Фактографические аис
279
Рис. 5.4. Основные понятия, связанные с отдельным файлом табличной БД
Подразумевается, что если в командах или программах (аргументы функций и выражений) фигурируют имена некоторых полей, то их значения соответствуют содержанию текущей записи текущего файла;
каждый файл и каждая запись могут в широких пределах обрабатываться независимо друг от друга (за исключением ситуаций проверки соответствия записей друг другу или це лостности БД);
навигация в БД — последовательность действий приложения (программы или пользователя в процессе диалога), при которой осуществляются изменения состояния файлов и записей (открытых, текущих файлов, активных записей). Изменение содержимого файлов при навигации необязательно. В процессе навигации просматривается или редактируется содержимое БД.
Вид представления записей на экране может быть не только табличным (отчет, запись в строке), но и картотечным (форматированный экран, запись на экране).
В последнем случае каждая запись выводится в виде определенной формы. Структура формы одинакова для всех записей, причем название полей соответствует названиям столбцов табличной формы представления базы данных, а их расположение задается пользователем.
Так как строки в таблице не упорядочены, невозможно выбрать строку по ее позиции — среди них не существует «первой», «второй», «последней». Любая таблица имеет один или несколько столбцов, значения в которых однозначно идентифицируют каждую ее строку. Такой столбец (или комбинация столбцов) называется первичным ключом (primary key).
В таблице person первичный ключ — это столбец prsn#, в таблице auto — столбец pdrv#. В этом столбце значения не могут дублироваться — в таблице person не должно быть строк, имеющих одно и то же значение в столбце prsn#. Если таблица удовлетворяет этому требованию, она называется отношением (relation).
Взаимосвязь таблиц является важнейшим элементом реляционной модели данных. Она поддерживается внешними ключами (external). Из рис. 5.3 видно, что Распутин (таблица person) разъезжает на автомобиле BMW (таблица лито) и держит деньги в Автобанке (таблица finances). Это следует из совпадения значений уникальных ключей (личный номер, номер водителя, номер владельца счета — PRSN# = DRV# = OVN# = 57 6).
Таблицы невозможно хранить и обрабатывать, если в базе данных отсутствуют «данные о данных» (метаданные), например описатели таблиц, столбцов и т. д. Метаданные также представлены в табличной форме и хранятся в словаре данных (DD — data dictionary) или описателе БД (DBD — data base definition) — служебном файле или системной таблице БД.
Помимо таблиц, в базе данных могут храниться и другие объекты, такие, как экр ан н ые формы, отчеты (reports), представления (views) и прикладные программы, работающие с базой данных.
Для пользователей информационной системы недостаточно, чтобы база данных просто отражала объекты реального мира. Важно, чтобы такое отражение было однозначным и непротиворечивым. В этом случае говорят, что база данных удовлетворяет условию целостности (integrity).
Для того чтобы гарантировать корректность и взаимную непротиворечивость данных, на базу данных накладываются некоторые ограничения, которые называют ограничениями целостности (data integrity constraints).
Существует несколько типов ограничений целостности. Требуется, например, чтобы значения в столбце таблицы выбирались только из соответствующего домена. На практике учитывают и более сложные ограничения целостности, например целостность по ссылкам (referential integrity). Ее суть заключается в том, что внешний ключ не может быть указателем на несуществующую строку в таблице.
280 Глава 5. Программные оболочки информационных систем Язык SQL
С целью стандартизации формального описания запросов к табличным (фактографическим) базам данных они формулируются на стандартном языке запросов (ЯМД — язык манипулирования данными), которым для многих СУБД является SQL [5].
Язык SQL имеет официальный стандарт — ANSI/ISO. Большинство разработчиков СУБД придерживаются этого стандарта, однако часто расширяют его для реализации новых возможностей обработки данных.
SQL не является языком программирования в традиционном представлении. На нем пишутся не программы, а запросы к базе данных. Поэтому SQL — декларативный язык. Это означает, что с его помощью можно сформулировать, что необходимо получить, но нельзя указать, как это следует сделать. В частности, в отличие от процедурных языков программирования (С, Pascal, Fortran), в языке SQL отсутствуют такие операторы, как if-then-else, for, while И т. Д.
Запрос на языке SQL состоит из одного или нескольких операторов, следующих один за другим и разделенных точкой с запятой. В табл. 5.2 перечислены некоторые операторы, которые входят в стандарт ANSI/ISO SQL.
В запросах на языке SQL используются имена, которые однозначно идентифицируют объекты базы данных. В частности, это — имя таблицы (person), имя столбца (profession), а также имена других объектов в базе, которые относятся к дополнительным типам (например, имена процедур и правил). Наряду с простыми, используются также сложные имена, например, квалифицированное имя столбца (qualified column name) определяет имя столбца и имя таблицы, которой он принадлежит (AU Т О.МАКЕ ).
Каждый столбец в любой таблице хранит данные определенных типов. Различают базовые типы данных — строки символов фиксированной длины, целые и вещественные числа, и дополнительные типы данных — строки символов переменной длины, денежные единицы, дату и время, логические данные (значения — Истина и Ложь). В языке SQL можно использовать числовые, строковые, символьные константы и константы типа Дата И Время.
Рассмотрим несколько примеров.
281
Запрос определить тип кузова и цвет всех автомобилей реализуется следующим образом:
SELECT BODY, COLOR FROM AUTO.
Результатом запроса будет таблица с двумя столбцами — body и color, которые взяты из исходной таблицы auto.
Таблица 5.2. Основные операторы языка SQL
Выбрать строку (группу строк) из таблицы базы данных Добавить строку (группу) в таблицу базы данных
Оператор I Выполняемое действие
Изменить строку (группу) таблицы базы данных Удалить строку (группу) из базы данных
SELECT. INSERT
UPDATE
DELETE
Предоставить привилегии пользователю
GRANT
REVOKE
Отменить привилегии пользователя
COMMIT
Запрос какие автомобили имеют марку «Жигули»?, сфор-мулированный на языке SQL, выглядит так:
SELECT *
FROM AUTO
WHERE make = 'ЖИГУЛИ'.
Результатом этого запроса также будет таблица, содержащая только те строки исходной таблицы, которые имеют в столбце маке значение жигули.
Запрос определить фамилии, адрес и профессии жителей Москвы, родившихся до 1980 г., будет записан следующим образом:
SELECT FIO, ADDRES, PROFESSION
FROM PERSONS
WHERE ADRESS = 'Москва'
AND YEAR < 1980.
282 Глава 5. Программные оболочки информационных систем
5.3. Документальные ИС
283
О дним из средств, обеспечивающих быстрый доступ к таблицам, являются индексы. Индекс — это служебная структура (указатель) базы данных, представляющая собой указатель на конкретную строку таблицы. Он содержит значения, взятые из одного или нескольких столбцов конкретной строки таблицы, и ссылку на эту строку. Значения в индексе упорядочены, что позволяет СУБД выполнять быстрый поиск в таблице.
Допустим, что сформулирован запрос к базе данных:
SELECT MAKE, YEAR, COLOR
FROM AUTO
WHERE BODY = 'СЕДАН';
Если индексов для данной таблицы не существует, то для выполнения этого запроса СУБД должна просмотреть всю таблицу auto, последовательно выбирая из нее строки и проверяя для каждой из них условие выбора (последовательное сканирование). Для больших таблиц такой запрос будет выполняться очень долго.
Если же был предварительно создан индекс по столбцу body таблицы auto, время поиска в таблице будет сокращено до минимума. Индекс будет содержать значения из столбца body и ссылку на строку с этим значением в таблице auto. При выполнении запроса СУБД вначале найдет в индексе значение седан (и сделает это быстро, так как индекс упорядочен, а его строки невелики), а затем по ссылке в индексе определит физическое расположение искомой строки.
Индекс создается оператором SQL create index (создать индекс) . В данном примере оператор
CREATE UNIQUE INDEX Индекс_кузова ON AUTO(BODY) ;
позволит создать индекс с именем Индекс_детали по столбцу Номер таблицы Деталь.
Для пользователя СУБД интерес представляют не отдельные операторы языка SQL, а некоторая их последовательность, оформленная как единое целое и имеющая смысл с его точки зрения. Каждая такая последовательность операторов языка SQL реализует определенное действие над базой данных. Оно осуществляется за несколько шагов, на каждом из которых над табли-
цами базы данных выполняются некоторые операции. Так, в банковской системе перевод некоторой суммы с краткосрочного счета на долгосрочный выполняется в несколько операций. Среди них — снятие суммы с краткосрочного счета, зачисление на
долгосрочный счет.
Если в процессе выполнения этого действия произойдет сбой, например, когда первая операция будет выполнена, а вторая — нет, то деньги будут потеряны. Следовательно, любое действие над базой данных должно быть выполнено целиком или не выполняться вовсе. Такое действие получило название транзакции.
Завершая обсуждение языка SQL, еще раз подчеркнем, что это — язык запросов. На нем нельзя написать сколько-нибудь сложную прикладную программу, которая работает с базой данных. Для этой цели в современных СУБД используются языки четвертого поколения (Forth Generation Language — 4GL), обладающие как основными возможностями процедурных языков третьего поколения (3GL), таких, как Си, Паскаль, Ада, так и возможностью встроить в текст программы операторы SQL, а также средствами управления интерфейсом пользователя (меню, формами, вводом пользователя и т. д.). Сегодня язык 4GL — это один из фактических стандартов средств разработки приложений, работающих с базами данных. Более подробное описание одного из 4GL (Adabas/Natural) читатель может найти, например, в [24].