Математическое моделирование: методы, алгоритмы, технологии
С. В. Мещеряков, В. М. Иванов
Реализация модели данных для описания иерархических объектов с произвольными атрибутами
В работе [3] описана структура данных для моделирования многоуровневых объектов с произвольным набором атрибутов. Такое решение позволяет добавлять любое количество объектов и их параметров стандартных типов без изменения структуры данных. В процессе реализации разработанной модели данных возникла потребность классифицировать производственные объекты по различным признакам. Классификация имеет характер иерархической, и любой объект может быть классифицирован не один раз. Для этого в модель данных добавлены
таблицы классов и соответствующие реляционные связи между ними.
Классификация иерархических объектов
Классификация объектов описывается связкой таблиц (см. рисунок): о^есисЫяея, ец_с1а5-51Пег8. ея_с1а$8е5, ея_с1аз8_1тк, ея_с1а58_рагт5.
Таблица о1уес1_с1а85е5 предназначена для хранения информации о классах объектов. Каждый класс объекта связан с некоторым набором атрибутов (параметров). В объектной структуре хранятся либо значения параметров.
41 НОТ ШШ Ю1£&Н
ю ште»ея
1нте4ея <«е>
5ек1ашсп
1хте0ея
1шеоея ■»2>
аияшмг
М/АЯСКАЯШО.
СК»И(10)
вем*цю>
•»,: и ИТЕОЕЯ <*!>
1НТЕЭЕ» <*2>
вчр>1« Л 1МГЕ4ЕЯ ««■
1 ШТЕЭЕЯ
ГШАТ(15)
даАЯСиАЮ»!)
ечряе»_1в={ зрог5_1в
едрав»Тс1=грр(!е5\<1
• ч. с!яи>*1ВГС
зеякщк»
мои**"»* КиАЯСНАЯ«0)
СКАЖЮ)
в<5(!у.к1=вчру_1а
вчру/к1»вар1 оЬ|1_«1*>Ь)М<1
$ея'ац10)
С«»«»)
щте»ея
«чрг*» 14 1итеоея <*>
иуарснаяг&о)
р|т_ивг> Сная<(0>
¡п_и 1нте4ея ш7е0ея
ЗЕЯМЦЮ) смтейе» оь1_п1т» №мясная<254) <л_л сиая(*)
оЬ)1_К|' ОЬ)!_К( 0ь)|_1£ "сг11сз_!<1 0ь|1 _|<>»ргп1_|0
• <ЭР1»* >4 36Я1ЛЦ10)
смайнэ;,
еллт« СНАЙ1Й)
ркп ЛП» СМАК(1Г>
1|гМ>Ы«о#тк СНАЙ(18)
мгсоей • 1ите0ея <(и>
ШГвОЕЯ ЗМАШЧТ ■<Лс(1 СИ*Я(1>
1мтеоея <1и> р1м.к 1нтеоея ча>
Структура данных для хранения иерархических объектов
Математическое моделирование: методы, алгоритмы, технологии
либо ссылки на соответствующие справочные таблицы.
Таблица object_classes (табл. 1) содержит записи, которые связывают описание объекта с позицией классификатора. Любой объект может быть связан с несколькими разными классификаторами. Такая уникальность обеспечивается специальным индексом в базе данных. Пользователям, не имеющим привилегий администратора базы данных (DBA), предоставлено право только на выборку данных. Все операции модификации выполняются посредством специальных хранимых процедур.
описание eq_class_link в табл. 1); поле может принимать значения 'у' или "п' в зависимости от потребности установить связь объект - класс.
Имеющиеся объекты можно связать с классом и классификатором (добавить запись в таблицу) путем вызова хранимой процедуры. Другие хранимые процедуры модифицируют существующую связь объект - класс (переклас-сификация) или удаляют связь (отмена классификации объекта).
Когда объект переклассифицируется, полю valid автоматически присваивается значение "у'. При отмене классификации если ID объекта не
Таблица 1
Описание таблиц СУБД для хранении классификаторов ооъектов
Ноле данных Описание
Идентификатор Тип поля
object classes
obji id INTEGER NOT NULL Первичный ключ
eg es id INTEGER NOT NULL Первичный ключ классификатора
cqcjd INTEGER NOT NULL Первичный ключ позиции классификатора
classlevel SMALLINT NOT NULL Уровень иерархии класса
valid CHAR(l) Признак того, что объект классифицирован (v/n)
eq_classi fiers
eqcsjd SERIAL NOT NULL Первичный ключ классификатора
eqcs_name NVARCHAR(XO.O) NOT NULL Наименование классификатора
eqcs sien CHAR(IO) Сигнатура классификатора
eq_cl asses
eqc id SERIAL NOT NULL Первичный ключ элемента классификатора
eqcsjd INTEGER NOT NULL Ссылка на описание классификатора, к которому относится элемент
parentjd INTEGER Ссылка на родительский класс, находящийся в том же классификаторе
classlevel SMALLINT NOT NULL Уровень иерархии классификатора
eqc name N V ARCH AR( 80.0) NOT NULL Наименование элемента классификатора
eqc sign CHAR(IO) Сигнатура класса
eq class Jink
eqc id from INTEGER NOT NULL Ссылка на основной класс
eqc id_to INTEGER NOT NULL Ссылка на дополнительный класс
eq class parms
eqcp id SERIAL NOT NULL Первичный ключ
eqpdes id INTEGER NOT NULL Ссылка на описание параметра
eqc id INTEGER NOT NULL Ссылка на элемент классификатора
Атрибуты (колонки) таблицы object_classes: eqcsjd — ссылка на таблицу классификаторов объектов eq_classifiers;
eqc_id — ссылка в таблице eq_classes на класс, которому назначен объект;
valid — признак правильной классификации объекта, который используется для автоматического установления связи объект - класс при добавлении эквивалентных классов (см.
указан (null), то все связи с соответствующим классом удаляются, а если позиция классификатора не указана, то удаляются все связи объекта со всеми классами.
Таблица eq_classifiers (см. табл. 1) содержит первичные ключи и наименования классификаторов. используемых для классификации объектов, описания которых находятся в иерархической таблице objects_tree.
Научно-технические ведомости СПбГПУ 1' 2009. Информатика. Телекоммуникации. Управление
Наименования классификаторов уникальны. Поле сигнатуры классификатора eqcs_sign может содержать любую символьную строку в верхнем регистре либо null. Если не пусто, то значение строки должно быть уникальным. Уникальность проверяется специальным триггером. Пользователи без привилегий DBA имеют право только на выборку данных.
Модификация данных выполняется хранимыми процедурами. Помимо добавления нового классификатора в таблицу eq_classes добавляется корневой класс с тем же именем, что и у классификатора, и значением поля classlevel=(). В процедуре удаления классификатора вместе с ним удаляются все подчиненные классы.
Таблица eq_classes (см. табл. 1) содержит иерархию элементов классификатора, используемых для классификации объектов, описания которых находятся в иерархической таблице objects_tree.
Наименования элементов, имеющих общего предка, уникальны. Сигнатура класса eqc_sign может содержать любую символьную строку в верхнем регистре либо null. Если не пусто, то значение строки должно быть уникальным в сочетании со значением поля eqcs_id. Уникальность проверяется специальным триггером. Пользователи без привилегий DBA имеют право только на выборку данных.
Все операции модификации данных выполняются только через хранимые процедуры. В случае вставки новый элемент добавляется как подчиненный для указанного класса. В случае редактирования процедура пытается модифицировать наименования указанного класса и подчиненного. Если редактируемый элемент относится к другому классификатору, то он вместе со всей цепочкой подчиненных классов переназначается другому классификатору с указанным parent_id. В случае удаления эта процедура выполняется рекурсивно для элемента классификатора и всех его подчиненных элементов, а также удаляются все их связи с объектами. Если класс является корневым элементом классификатора (без предков), то удаляется весь классификатор целиком, а также его описание в таблице eq_classifiers.
Таблица eq_class_link (см. табл. 1) специфицирует эквивалентные классы. Эквивалентность означает, что все объекты, принадлежащие основному классу (т. е. классу, в котором они были созданы), будут принадлежать и дополнительным классам. Принадлежность
основному и дополнительным классам описывается в таблице object_classes.
Оба поля eqc_id_from и eqc_id_to содержат ссылки на поле eqc_id таблицы eq_classes. Эквивалентность классов устанавливается хранимой процедурой. На событие удаления связи между классами процедура автоматически удаляет записи, которые связывают объекты основного класса с дополнительными классами в таблице object_classes. Пользователи без привилегий DBA имеют право только на выборку данных.
В таблице eq_class_parms (см. табл. 1) хранится набор параметров для основных и подчиненных классов объектов. В таблице содержатся ссылки, которые определяют набор параметров, прописанных для основного и подчиненных классов, и устанавливаются связи между этими параметрами в таблице eq_param_ descr и классом в таблице eq_classes.
Записи добавляются в таблицу специальной хранимой процедурой, которая возвращает значение eqcp_id добавленной записи.
Пример 1. Используя значения objt_id для классификации университета (см. пример 1 в работе [3]), можно описать иерархию классов, как показано в табл. 2.
Создание представлений для объектной структуры данных
Для удобства доступа к данным из приложения рекомендуется создать необходимые представления. Преобразование данных в таких представлениях можно реализовать операторами запроса с вызовом хранимых процедур.
Пример 2. Приведем пример создания представления v_obj для извлечения информации о подразделениях университета:
CREATE VIEW v_obj
(objt_id,dlv_id,obj_name.ch_ar.in_id.inv_ num.date_bom.chief_name) AS
SELECT tl.objt_id. tl.dlvjd, tl.obj_name. 11 ,ch_ar,
(select {+INDEX(v 'ixl')} Lvalue from eq_param_values v, eq_param_descr d where v.objt_id=tl.objt_id and v.eqpdes_id=d.eqpdes_id and d.prm_sign='INV_NUM')in_id, (select inv_num from bux_inv_num where in_id=(select {+INDEX(v 'ixl')} Lvalue from eq_param_values v. eq_ param_descr d
4-
Математическое моделирование: методы, алгоритмы, технологии
Таблица 2
Примеры заполнения габлин СУБД для хранения классификаторов объектов
¿^classifiers
eqcs id eqcs name eqcs sien
4 Университеты UNIV
eg ...classes
eqc id eqcsjd parent id classlevel eqc name eqc_sicn
6 4 0 Университеты UNIV
7 4 6 1 Институты INST
8 4 7 2 Факультеты DEP
9 4 8 3 Лаборатории LAB
object_classcs
objt id eqcs id eqc id classlevel valid
101 4 7 1 Y
102 4 7 1 Y
201 4 8 2 Y
202 4 8 2 Y
301 4 9 3 Y
302 4 9 3 Y
303 4 9 3 Y
class_parms
eqcpjd eqpdesjd eqcjd
51 1001 8
52 1002 8
53 1003 8
where v.objt_id=tl.objt_id and v.eqpdes_id=d.eqpdes_id and d.prm_sign='INV_NUM'))inv_num. (select {+INDEX(v 'ixl')} slr2date(value) from eq_param_values v. eq_param_descr d where v.objt_id=tl.objt_id and v.eqpdes_id=d.eqpdes_id and d.prm_sign=rDATE_BORN')date_
born,
(select )+INDEX(Vixl')} value[1.40] from eq_param_values v, eq_param_descr d where v.objt_id=tl.objt_id and v.eqpdes_id=d.eqpdes_id and d.prm_sign='CHIEF')chief_name FROM
objects_tree tl. eq_classes t2. object_classes t3. objects_tree t4. objects_parents t5 WHERE t2.eqc_sign='DEP' AND t3.objt_id=tl.objt_id AND t4.objt_id=t5.prnt_id AND t5.chld_id=tl.objt_id AND t2.eqc_id=t3.eqc_id WITH CHECK OPTION; GRANT SELECT ON v_obj TO PUBLIC:
В представлении v_obj подразделения выделяются из других объектов по условию eqc. sign='DEP' (см. пример 1). Атрибуты объектов,
такие, как инвентарный номер, дата образования и руководи! ель. выбираются по сигнатурам соответственно INV NUM, DATE_BORN и CHIEF. Применительно к атрибуту inv_num (инвентарный номер) поля in_id и inv_num выбираются из справочной таблицы buxjnv_num. Функция str2date, определенная пользователем, преобразует строку date_born (дата образования) в значение типа datetime с учетом разделителя в настройках локали. Для улучшения производительности базы данных в строковом параметре chief_name (руководитель) берутся только первые 40 символов.
Выборка из представления v_obj дает список подразделений с их атрибутами. Результат выполнения следующего SQL-запроса показан в табл.3:
SELECT obj_name, inv_num. date_born, chief_name FROM v_obj
Практическая реализация
Представленная в статье структура данных является смешанной объектно-реляционной и иерархической. Она предназначена для хранения многоуровневых объектов, имеющих произвольный набор атрибутов (параметров) различного типа, а также для их классифика-
Таблица 3
Пример выборки SELECT
obj name inv num date born chief name
Механико-машиностроительный факультет 123201 01/01/1907 Профессор Радкевич M.M.
Факультет вычислительной техники 123202 01/09/1996 Профессор Чсрноруцкий И.Г.
Научно-технические ведомости СПбГПУ 1* 2009. Информатика. Телекоммуникации. Управление
ции. Объекты базы данных могут быть созданы как на платформе Informix Universal Server, так и Informix Dynamic Server [l, 4] и позволяют решать общеизвестные проблемы в информационных системах.
Структура данных успешно внедрена на нефтеперерабатывающем предприятии [2] при решении задач учета и планирования ремонтов эксплуатируемого оборудования различных типов, таких, как резервуары для хранения нефтепродуктов, сосуды под давлением, нагревательные печи, насосы и компрессоры, предохранительные клапаны, магистральные трубопроводы, здания и сооружения, грузоподъемные механизмы, электрическое и прочее вспомогательное оборудование, а также учета и планирования производственного персонала.
Классификация эксплуатируемого оборудования является универсальной и многоуровневой. Например, классификатор производственных подразделений имеет более четырех уровней иерархии, включая предприятия, цеха, установки или рабочие участки, узлы и даже их компоненты. Набор атрибутов для различных типов оборудования насчитывает сотни параметров. в то время как общая техническая база составляет в среднем 30 тыс. единиц в каждом из 80 цехов.
Таким образом, представленная структура данных обладает следующими преимуществами по сравнению с традиционными аналогами:
структура данных и хранимые процедуры являются готовым решением и могут быть использованы в клиент-серверных приложениях, высвобождая разработчиков от создания таблиц, индексов, внешних ключей, ссылок
между таблицами, типовых хранимых процедур модификации данных;
производительность базы данных не чувствительна к количеству учетных записей, как показано в выражении
V ~ In 77 ,
I
где v.— скорость поиска с использованием индекса /, п — количество записей в таблице, и подтверждена четырехлетней эксплуатацией базы данных в условиях промышленного предприятия;
каждый объект может быть классифицирован неограниченное количество раз по различным признакам:
добавление объектов иерархии и классификаторов выполняется без модификации структуры данных;
для имеющихся объектов есть возможность добавлять новые атрибуты путем непосредственного присвоения значений либо посредством связи со справочной таблицей;
при добавлении или модификации атрибутов не нужно изменять ни код приложения, ни структуру базы данных (дополнительные колонки, новые индексы).
Структура данных поддерживается в актуальном состоянии администратором базы данных посредством специального приложения, позволяющего просматривать и модифицировать иерархию объектов и их классификаторов, набор параметров и их значений.
Данная статья является русским аналогом публикации на английском языке:
S. V. Mescheryakov. A Successful Implementation of a Data Structure for Storing Multilevel Objects with Varying Attributes. IBM. Informix Developer Zone. 2002 (http://www.ibm.com).
CI IИ СОК Л И ГЕР АТУ Р Ы
1. Грачев А. Объектно-реляционная СУБД Informix Universal Server// Informix Magazine / RE. 1998. № 1 (http://www.florin.ru/win/informix_maga-zine/1 _98/5_0. ht ml)
2. КИНЕФ: Кнришскии нефтеперерабатывающий завод (http://www.kinef.ru)
3. Мещеряков С.В., Иванов В.М. Моделирование иерархических объектов с произвольным набором атрибутов // Научно-технические ведомости СПбГПУ. 2009. № 1.
4. Sanchez A. Informix Dynamic Server with Universal Data Option: Best Practices. Informix Press. 1999.