Сегодня мы расскажем об операциях выборки LeoBase — поиске и проекции.
СУБД LeoBase обладает мощной и гибкой системой поиска. Он возможен по произвольной логической комбинации ключевых полей из любых баз комплекса, причем, осуществляется без перебора, присущего на определенном этапе большинству СУБД. Ядро LeoBase обладает встроенным оптимизатором поиска, что в ряде случаев позволяет значительно увеличить общее быстродействие системы. Результаты поиска могут комбинироваться с текущим множеством выделенных записей по правилам булевой алгебры. Это позволяет организовать сложный, многоитерационный поиск.
При формировании запроса поддерживаются логические комбинации AND, OR, NOT над ключевыми выражениями, которые могут быть представлены отношением, диапазоном и шаблоном, поддерживается и приоритет обработки различных частей запроса. Встроенная система анализа запросов позволяет свести их выполнение для программиста к заданию строки запроса по определенным правилам и непосредственного вызова функции поиска СУБД. Основным элементом запроса на поиск является терм — минимальная единица поискового выражения, состоящая из аргументов, знаков отношения, ключевого поля и необязательного пути, по которому нужно пройти от активной БД, чтобы попасть в базу, где находится ключевое поле. К любому виду терма может быть применена операция отрицания, изменяющая его значение на противоположное. Строка поиска в LeoBase представляет собой логическую комбинацию термов.
Поиск документов в "ЮрИнформ" ведется от БД "Документы" и сначала проходит по ключевым полям из других БД (классификаторы, органы принятия), причем, состояние после проведения запроса по каждой БД сохраняется, а затем они соотносятся с помощью побитового AND. При поиске документа по номеру возможно задание только первых его цифр, и поиск будет проведен по начальному фрагменту строки. Результатом запроса является результат логического пересечения множеств выделенных записей.
Если в строке запроса присутствуют ключи только из активной БД (так называется база, с которой в тот момент идет работа) и подчиненных БД (связанных с первой специальными полями — реляционными ссылками), то результат поиска строго однозначен. В противном случае возможны различные интерпретации одного и того же запроса. Поэтому LeoBase по умолчанию позволяет задать ключи только из активной и подчиненных баз. Для того, чтобы получить возможность задавать в запросе ключи из баз, являющихся командными по отношению к активной (т.е. те, которые содержат в себе реляционные ссылки на активную БД), необходимо установить расширенный режим поиска. Поиск в данном режиме проводится LeoBase с использованием процедуры проекции, который хотя и универсален, однако включает в себя много действий, непосредственно не относящихся к выполнению запроса (запись в состояние, назначение активной БД и др.). Язык запроса, существующий в LeoBase сегодня, пока не позволяет указывать в описании подобного запроса последовательность его выполнения. Разрабатываемый в настоящее время язык выполнения запросов LQL позволит непосредственно в строке поиска указать, какая база является активной для какой части запроса, на какую базу делать проекцию и когда проводить пересечение. С помощью этого языка сложные запросы можно будет реализовывать значительно быстрее.
Не менее важную роль в LeoBase играет другая операция выборки — операция проекции. Как процедура, она представляет собой отображение одного множества выделенных записей (или одной записи) активной БД на все записи другой БД, причем, результат проекции, как показано ниже, зависит от пути, по которому она проходила. Забегая вперед, скажем, что путем в LeoBase называется прямая связь двух БД с помощью реляционной ссылки. Таким образом, проекция может быть проведена на любую БД комплекса, имеющую путь к активной. Результатом проекции является множество выделенных записей, при этом активной становится та БД, на которую делалась проекция.
Проекция — мощная операция, позволяющая в ряде случаев максимально эффективно выполнять запросы на выборку. Рассмотрим конкретный пример. Для юриста-пользователя ИПС важной функцией системы представляется возможность узнать, на какие нормативные акты ссылается документ, а также — какие акты ссылаются на него. В "ЮрИнформ" данная задача остроумно решена благодаря процедуре проекции. На приведенной ниже схеме изображены две БД комплекса, участвующие в данной операции. Это — БД «Документы», содержащая список документов, и специальная БД-переходник. Записи этой промежуточной БД содержат два поля реляционных ссылок, которые называются Owner (ссылка-владелец) и Member (ссылка-член). Запись в поле Owner указывает на документ, содержащий юридическую отсылку (в "ЮрИнформ" — гипертекстовый переход), а в поле Member — на номер записи документа, на который ссылаются. Таким образом, связи, отражающие отношения между документами (на схеме они показаны стрелками), реализованы через множество пар. В результате при проекции одного из элементов (на схеме — первого) базы "Документы", через поля ссылок Owner и Member базы-переходника, обратно на ту же БД, появляется список нормативных актов, на которые ссылается документ. Причем, это не просто справочный перечень, а полноценная, готовая к работе подборка, каждый документ которой можно просматривать, печатать и т. д. В случае же, когда проекция делается в обратном порядке — в списке содержатся названия нормативных актов, которые ссылаются на начальный документ!
Понятно, что если бы не механизм проекции, выполнение данного примера потребовало бы от программиста конструирования сложного запроса на поиск, а выполнение этого запроса (путем перебора всех данных базы) потребовало бы гораздо больше времени.
Владимир КОТЛЯРОВ,
"СофтИнформ", тел. 228-00-48,
e-mail: ui@activ.minsk.by
Горячие темы