Смекни!
smekni.com

Организация хранения данных и выполнения запросов в динамической информационной модели DIM (стр. 2 из 4)

Рис. 3. История объектов

Рис. 3 иллюстрирует изменение объекта класса Шина, ставшее возможным после введение дополнительного параметра Нить. В таком случае объект Шина 1, определенный значениями идентификационных параметров О1, М1, получает значение параметра Дата смерти в момент изменения, а на смену этому объекту-предшественнику возникают 2 объекта-последователя Шина 2, Шина 3 с тем же значением параметра Обозначение, но с другими значениями параметра Модель, а также со значениями дополнительного параметра Нить. Момент рождения этих объектов-последователей определяется моментом смерти объекта-предшественника. Отметим, что в общем случае несколько объектов-предшественников могут заменяться некоторым количеством объектов-последователей. Заметим также, что если значение дополнительного параметра определить для всех объектов класса, то такой параметр можно перевести в группу обязательных главных неидентификационных параметров (MNPO) без изменения истории объектов. В этом случае при добавлении нового объекта в класс определение значения этого параметра станет обязательным (для дополнительных параметров это не так). Если же параметр перевести в группу главных идентификационных параметров, то потребуется изменение класса и всех объектов, что также потребует отношения истории.

При помощи отношения взаимодействия (см. [1, 3]) определяются все изменения в базе данных. В частности, это изменения, определяющие историю объектов и классов. Рис. 4 иллюстрирует схему взаимодействия, в которой участвуют объекты четырех классов:

Рис. 4. Схема взаимодействия

• объект класса Откуда имеет роль источника взаимодействия;

• объект класса Куда имеет роль направления взаимодействия;

• объект класса Что имеет роль объекта взаимодействия;

• объект класса Как имеет роль процесса взаимодействия.

Рис. 5 иллюстрирует взаимодействие, при котором происходит добавление дополнительного параметра Нить в класс Шина. В этом случае источником взаимодействия является пользователь, который вызывает это взаимодействие, в качестве направления взаимодействия выступает Система, в качестве объекта взаимодействия - класс Шина, представляющий собой объект схемы метауровня (см. далее), а в качестве процесса взаимодействия - класс Изменение параметров класса.

Рис. 5. Взаимодействие объектов

Отметим, что указанная схема взаимодействия является достаточно общей для описания любых процессов изменения информации в базе данных. Так, оно используется не только для манипулирования всеми данными пользователем, но и для таких процессов, как продажа продукции (источник - продавец, направление - покупатель, объект взаимодействия - продукция, процесс взаимодействия - класс Продажа, определяющий программные действия изменения данных) или изготовления детали (источник - сырье, направление - деталь, объект взаимодействия - станок, процесс взаимодействия - класс Изготовление, определяющий объект Рабочий, изготавливающий деталь и программные действия изменения данных).

3.Описание метауровня хранения данных

Поскольку необходима организация динамической СУБД, в которой могут изменяться не только объекты, но и их типы, определяемые изменением классов и параметров, то для описания классов объектов, параметров объектов и связей (отношений) классов и объектов используется метауровень, который представляет собой реляционную базу данных с набором таблиц, содержащих в себе все нужные значения. При этом выбор в качестве платформы реляционной СУБД может быть сделан позже на основе анализа удачности выбора той или иной платформы для метауровня. В таблицах метауровня мы как объекты будем представлять информацию о классах как объектах. Поскольку параметры каждого класса могут меняться, то информацию о параметрах классов мы также будем представлять в других таблицах, связывая их с таблицей классов реляционными связями. Объекты каждого класса будем держать в отдельных таблицах, связывая их с классами таблицы классов. Подобным образом поступим и со значениями параметров объектов, помещая их в отдельные таблицы, связанные с соответствующими таблицами параметров и объектов реляционными связями. Отметим, что каждый класс, параметр, объект имеет свой уникальный идентификатор (IdClass, IdParamter, IdObj) для установления упомянутых связей между таблицами, а также 2 атрибута Дата рождение и Дата смерти, определяющими период жизни соответствующего данного (при изменении класса, параметра, объекта их объектные идентификаторы также изменяются).

На рис. 6 приведена схема организации метауровня DIM. Поясним ее.

Главными в модели являются таблица Class классов объектов, таблица объектов соответствующего класса Obj_IdClass, где IdClass - идентификатор класса, Parameters, определяющая параметры объектов, и значение каждого параметра объекта (через таблицу типа Val_IdParameter). При этом каждый класс, объект, параметр определяются уникальным идентификатором соответственно IdClass, IdObject и IdParameter.

Таблица Class классов объектов определяется для каждого класса:

• объектный идентификатор класса;

• имя класса, через поле NameClass;

• его родительские и дочерние классы (через таблицы ClassInheritance наследования - граф наследования с дугами типа TypeGroup);

• классы, которые включены, и классы, в которые включен данный класс (через таблицу ClassIn- clusion - граф включения классов);

• классы взаимодействия (через таблицу ClassInteraction);

• уровень класса в графе наследования LevelInheritance;

• тип класса TypeClass;

• метка списка помеченных объектов класса; хранится в поле MarkList;

• связи данного класса, хранятся в поле RelRef, представляющий собой объект типа Map, в котором содержатся ключ - идентификатор связанного класса и значение - виды связей;

• параметры класса (через таблицу Parameter, так как все имена параметров уникальны и прикреплены к какому-то классу и через таблицу GroupParam);

• объекты класса (через таблицу Obj_IdClass);

• историю класса (через таблицу ClassHistory).

Отметим, что связи класса с другими классами можно получать как через таблицы классов ClassInheri- tance, ClassInclusion, ClassInteraction, ClassHistory (основной способ хранения информации о связях класса), так и через поле RelRef (дополнительный способ для ускорения получения этой информации).

Для того чтобы дублирование информации в поле RelRef не привело к коллизиям, перед каждым изменением какой-либо связи в одной из перечисленных четырех таблиц информация в поле RelRef помечается как недействительная, а после изменения обновляется. Такой режим ведет к сохранению целостности базы данных.

Таблица Obj_IdClass объектов класса определяет для каждого объекта:

• идентификатор объекта IdObject;

• поле Mark для пометки объекта, участвующего в выборке, если стоит значение 0 или null - объект не помечен, он не участвует в выборке, если 1, то объект помечен;

• NextIdObject - объектный идентификатор следующего объекта в списке помеченных объектов; через это поле осуществляется альтернативная организация списка, которая обеспечивается внешним индексом по этому полю на ту же таблицу;

• префикс IdClass из названия таблицы является идентификатором класса, объекты которого добавлены в данную таблицу; связь включения между объектами определяется либо в таблице ObjInclusion_IdIncluding_IdIncluded_IdInclusion, либо в таблице ObjInclusion_IdIncluding_IdIncluded, где вместо IdIncluding, IdIncluded, IdInclusion находятся идентификаторы классов: включающего, включения, связи включения;

Рис. 6. Схема метауровня

• связь наследования между объектами определяется в следующих таблицах ObjInheri- tance_IdParent_IdChild, где вместо IdParent, IdChild находятся идентификаторы классов;

• параметры объекта (через таблицы GroupParam и Parameters);

• значение параметров через таблицу с именами Val_IdParameter, где вместо IdParameter находится идентификатор параметра;

• список значений параметра в соответствующий момент времени через таблицу с именем Val- Time_IdParameter, где вместо IdParameter находится идентификатор параметра;

• связанные через таблицу ObjInteraction_IdF_IdT_IdW_IdH взаимодействия объекты, где IdF, IdT, IdW, IdH - идентификаторы объектов, имеющих соответственно роли Откуда, Что, Куда, Как.

Таблица Parameters определяет параметры объектов и для каждого параметра:

• объектный идентификатор IdParameter;

• его имя;

• тип (через таблицу Types);

• значение каждого параметра IdParameter каждого объекта IdObject через таблицы с именами типа Val_IdParameter;

• список значений динамического параметра IdParameter в определенный момент времени DateTime для каждого объекта IdObject через таблицы с именами типа ValTime_IdParameter.

Поле LevelInheritance класса определяет уровень класса в графе наследования, представляемого таблицей ClassInheritance:

0 - класс является изолированной вершиной графа наследования;

1 - класс является корневым в наследовании;

2 - класс не является ни корневым, ни висячим в графе наследования;

3 - класс является висячим в наследовании.

Поле TypeClass класса определяет тип класса:

0 - класс объектов, не являющихся связями других объектов;

1 - класс объектов, являющихся связями в отношении включения других объектов;

2 - класс объектов, являющихся связями во взаимодействии других объектов.

Каждый класс может содержать 3 группы параметров с именами:

MIPO - Main Identification Parameters of Objects - TypeGroup = 0;

MNPO - Main Nonidentification Parameters of Objects - TypeGroup = 1;

APO - Addinional Parameters of Objects - TypeGroup = 2.

Эти группы параметров определяют спецификацию объектов класса. При этом параметры из списка MIPO являются идентификационными (любые 2 объекта класса не должны иметь одинаковый набор этих значений); параметры из списка MNPO являются другими обязательными параметрами объектов класса, а параметры из списка APO необязательные для того или иного объекта класса. Обязательным является наличие хотя бы одной из групп параметров MIPO или MNPO.