Семантические базы данных


Zulu поддерживает работу с реляционными базами данных, используя сервис Borland Database Engine (BDE) компании Inprise. Основной объектом, с которым оперирует BDE, является база данных. Это может быть действительная база данных, например Microsoft SQL Server или база данных Microsoft Access, а может быть совокупность таблиц Paradox или dBase. Zulu также оперирует понятием база данных, однако, здесь под этим термином подразумевается совокупность таблиц и связей между ними, объединенных для выполнения запроса к реальной базе данных с целью получить заданный пользователем срез информации. База данных Zulu задается файлом-описателем базы данных, имеющий расширение ZB, именуемый в дальнейшем zb-файлом.
Физически файлы таблиц могут располагаться в удобном для пользователя месте (на сервере, на локальной машине в отдельном каталоге, в том же каталоге, что и файлы графической базы данных). Желательно чтобы файл описателя базы данных хранился в том же каталоге, что и файл графической базы данных. Описатель базы данных Zulu хранит следующую информацию:

  • Список таблиц, участвующих в запросе;
  • Если необходимо - набор Справочников;
  • Набор запросов, задающих правила выбора значений из таблиц и содержащих ссылки на таблицы, из которых выполняется выборка, связи между таблицами, набор полей для вывода с пользовательскими названиями.

Рассмотрим пример базы данных, связывающей объекты слоя "Адресные точки" с семантической информацией - адресом здания. Допустим, что адрес дома задается названием улицы или проспекта, типом ("улица", "проспект", "набережная" и т.д.) и номером дома. Базовой таблицей для задания адреса будет таблица address.db, связывающая идентификаторы элементов слоя (поле Sys) с кодом адреса и номером дома. Таблица addrcode.db будет связывать код адреса с парой идентификаторов названия улицы и типа, соответственно названия ("Невский", "Гороховая", "Сенная" и т.д.) будут храниться в таблице street.db, а типы ("проспект", "улица", "площадь" и т.д.) - в таблице strtype.db. Нам же нужно получить для запрашиваемого элемента слоя информацию в виде названия, типа и номера дома. Таким образом, схема данных для нашего примера будет иметь вид, представленный на рисунке ниже:

Для создания описателя базы данных, который реализует этот пример необходимо выполнить следующее:

  • Набрать список таблиц, участвующих в запросе (в данном случае таблицы address.db, addrcode.db, street.db, strtype.db);
  • Из выбранных таблиц набрать список полей, участвующих в запросе (в нашем примере все поля участвуют в запросе);
  • Добавить связи между полями таблиц.
  • В нашем случае, как видно из рисунка, надо указать следующие связи:
    Address.AddrCode->AddrCode.Addr_Code,
    AddrCode.Street_Code->Street.Street_Code,
    AddrCode.Type_Code->StrType.Street_Type
  • Указать поле связи с картой (для рассматриваемого примера - поле Address.Sys);
  • Оставшиеся поля, не вошедшие в связи, будут отображаться в результатах запроса. Для них можно задать пользовательские название, которые будут отображаться в браузере базы данных. Так, в нашем примере для поля Address.Bld_No название зададим как "Номер дома", для Street.Name - "Название", а для Strtype.Name - "Тип";
  • Задать название базы данных (например - "Адресные точки"), после чего сохранить описатель в файле с расширением .zb.

Как видно из примера, приведенного выше, создание базы данных состоит из нескольких этапов:

  1. Создание описателя баз данных (см. Создание описателя баз данных).
  2. Создание структуры таблиц с помощью СУБД, таблицы в формате Paradox могут быть созданы непосредственно в системе Zulu (см. Создание таблицы).
  3. При необходимости создание и включение таблиц - справочников (см. Создание справочника).
  4. Создание запроса, в котором определяются все поля, входящие в семантическую БД (см. Создание запроса).
  5. При необходимости установка связей между таблицами (см. Создание запроса).
  6. При необходимости создание форм вывода (см. Создание формы).
  7. Подключение семантической БД к объектам слоя (см. Подключение базы данных к объектам).

Раздел включает в себя следующие подразделы: