Объектно-ориентировочная база данных в среде Versant

В соответствии с архитектурой Versant, объекты класса могут сохраняться в БД, если их класс унаследован от PObject и разработан в соответствии с определенными правилами. Вместо стандартных нужно использовать предоставляемые СУБД элементарные типы данных, строки, контейнеры, вместо указателей - специальный шаблонный класс Link.

Каждый объект Versant имеет уникальный идентификатор. Большинство сущностей концептуального уровня должны иметь имя и описание (тип элемента, элемент ИУА, тип информационного слоя, слой). Базовым для классов, моделирующих эти сущности, является NamedObject. Этот класс предоставляет возможность работы с именем и описанием объекта. Многие задачи управления данными решаются при помощи запросов на Versant Query Language (VQL). В таких запросах часто требуется указывать идентификатор объекта. Классы, которые могут использоваться в запросах, наследуются от StoredObject. В класс StoredObject включен метод, формирующий строковое представление идентификатора.

Сущность "Тип элемента" описывает класс TypeObject. Он включает набор атрибутов - структуру описания элементов этого типа. Атрибуты описываются классом Attribute, унаследованным от StoredObject. Он содержит идентификатор типа атрибута и признак множественности, определяющий может ли атрибут иметь несколько значений. Одной из основных функций класса TypeObject является предоставление доступа к атрибутам.

Элемент "ИУА", являющийся узлом информационного слоя, описывается классом ObjectInstance. Он хранит конкретные значения атрибутов. Работа с атрибутами должна происходить в соответствии с информацией о типе, поэтому класс ObjectInstance содержит ссылку на TypeObject. Хранение значений атрибутов обеспечивает класс Value и производные от него. Класс Value определяет набор операций, которые можно производить со значениями любого типа. Это получение количества значений, установка значения по его строковому представлению и получение строкового представления значения. Эти операции должны быть переопределены в производных классах, инкапсулирующих хранение значений определенного типа. При работе с данными из клиентского приложения вводимая и отображаемая информация является текстовой. Поэтому для работы с большинством типов атрибутов указанных функций достаточно. Но при использовании этих данных в процессе анализа, например, интерпретатором языка запросов необходимо оперировать бинарным, а не строковым представлением хранимых значений.

Следующим элементом модели является класс LayerType, определяющий тип информационного слоя "ИУА". Он предоставляет операции добавления и удаления допустимых типов, проверку элемента на допустимость для данного слоя. Класс Layer, унаследованный от StoredObject, представляет собой слой "ИУА". Информация внутри слоя иерархически упорядочена. Механизмы работы с иерархической информацией инкапсулированы в классе Node. В класс Layer объявлено поле типа Node (Link) - это корень соответствующей иерархии. Класс Enterprise - предназначен для представления информации об "ИУА" предприятия.