Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
фактограф АИС.docx
Скачиваний:
12
Добавлен:
12.11.2019
Размер:
405.87 Кб
Скачать

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].