Фактографические информационные системы
Фактографические информационные системы оперируют фактическими сведениями, представляемыми в виде специальным образом организованных совокупностей формализованных записей данных. В фактографических ИС регистрируются факты – конкретные значения данных (атрибутов) об объектах реального мира. Основная идея таких систем заключается в том, что все сведения об объектах (фамилии людей и названия предметов, числа, даты) сообщаются компьютеру в каком-то заранее обусловленном формате (например, дата – в виде комбинации ДД.ММ.ГГГГ). Информация, с которой работает фактографическая ИС, имеет четкую структуру, позволяющую машине отличать одно данное от другого, – например, фамилию от должности человека, дату рождения от роста и т. п.
Фактографический поиск представляет собой поиск фактов, непосредственно отвечающих на запрос. Поэтому фактографическая система способна давать однозначные ответы на поставленные вопросы, например: “Сколько велосипедов марки А-18 продал магазин “Спорт” в июне 2004 г.?”, “Кто из работников фирмы с датой рождения не ранее 1 января 1970 г. имеет водительские права?”, “Какие культурно-исторические памятники Санкт-Петербурга включены в список ЮНЕСКО?” и т. д.
Центральным функциональным звеном фактографических информационных систем являются системы управления базами данных.
Современные СУБД оперируют огромными массивами информации, объемы которых достигают десятков терабайт. Выполняя запрос пользователя они должны обеспечит время отклика порядка нескольких секунд. Для этого во всех СУБД организован метод ускоренного доступа к данным. В настоящее время в СУБД используется два метода организации прямого доступа: индексирование и хэширование.
Метод индексирования основан на использовании индексов. Индекс это специальная структура создаваемая автоматически или по запросу пользователя. Индекс похож на предметный указатель книг. Работа с ним выглядит, так же как и с предметным указателем. Разница лишь в том, что СУБД делает все автоматически. В индексах все значения хранятся упорядоченно, каждому значению соответствует указатель на строку таблицы. Индекс занимает значительно меньший объем, чем таблица, а также упорядоченное хранение информации значительно ускоряет ее поиск.
Основная идея хэширования – организация ассоциативной памяти для хранения строк таблицы. Место строки вычисляется хэш-функцией, аргументы которой фактографические описания, а результат – целое число в диапазоне номеров строк таблицы. Идеальная хэш-функция должна давать разные значения номеров строк для разных ключевых атрибутов. Однако построить такую функцию не всегда удается.
Доступ к данным при хэшировании производится так. В начале работы с БД таблица состоит из пустых строк. Когда строка с данными заносится в таблицу, для нее вычисляется значение хэш-функции и результат трактуется как номер строки таблицы, в которую она должна быть записана. Если эта строка уже занята, то по некоторому алгоритму производится проверка следующих строк таблицы до тех пор, пока не будет обнаружено свободное место (при этом, как правило, считается, что таблица имеет кольцевую структуру). В это место и помещается записываемая строка. Для поиска данных используется аналогичный алгоритм. Сначала вычисляется значение хэш-функции для требуемого значения фактографического описания и проверяется строка таблицы, номер которой вычислен хэш-функцией. Если описание, по которому происходит доступ, соответствует значению ключа строки, то поиск заканчивается. В противном случае проверяются следующие строки таблицы до обнаружения строки с нужным значением или пустой строки. Пустая строка свидетельствует об отсутствии заданного описания — процедура занесения данных обязательно использовала бы ее, если бы оно существовало.
Если таблица заполнена не более чем на 60%, то для размещения в ней новой строки необходимо проверить в среднем не более двух ячеек. Иногда для устранения коллизий, возникающих, если хэш-функция выдает номер занятой строки, используют не линейный просмотр, а более сложные методы.
База данных бесполезна, если отсутствуют средства доступа к информации в ней. Для получения информации из БД пользователи направляют СУБД запросы. СУБД обрабатывает их и отправляет результаты обработки пользователям. Запросы формулируются на специальном «языке запросов». Фактическим стандартом такого языка для современных реляционных СУБД стал SQL (Structured Query Language — структурный язык запросов). В текущий стандарт языка SQL входят операторы такие как: «ВЫБРАТЬ ДАННЫЕ ИЗ БД», «ДОБАВИТЬ ДАННЫЕ В БД», «УДАЛИТЬ ДАННЫЕ ИЗ БД» и т.п.
Таблицы невозможно хранить и обрабатывать, если в базе отсутствуют «данные о данных» (метаданные), например, описатели таблиц, столбцов и т.д. Метаданные также представлены в табличной форме и хранятся в словаре данных.