49515 (Язык описания информационных моделей EXPRESS), страница 5

2016-07-30СтудИзба

Описание файла

Документ из архива "Язык описания информационных моделей EXPRESS", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49515"

Текст 5 страницы из документа "49515"

declare

l_Sch_ID Schemas.sch_id%TYPE;

l_Ent_ID Entities.ent_id%TYPE;

begin

lb_defined_types.register_defined_type

('Label','string',l_Sch_ID);

lb_defined_types.register_defined_type

('ActorRole','Label',l_Sch_ID);

lb_defined_types.register_defined_type

('AddressTypeEnum','enumeration',l_Sch_ID);

lb_defined_types.save_enum_type('OFFICE');

lb_defined_types.save_enum_type('HOME');

lb_defined_types.save_enum_type('USERDEFINED');

l_Ent_ID := lb_entity.register_entity

('Organization',l_Sch_ID,false);

lb_entity.save_attribute('Id','integer',1,'','',0,'E');

lb_entity.save_attribute('Name','Label',2,'','',0,'E');

lb_entity.save_attribute

('Description','string',3,'','',1,'E');

lb_entity.save_attribute

('Roles','aggregate',4,'','',0,'E');

lb_entity.save_attribute

('Addresses','aggregate',5,'','',0,'E');

lb_entity.save_attribute

('IsRelatedBy','OrganizationRelationship',

6,'OrganizationRelationship','RelatedOrganizations',0,'I');

lb_entity.save_attribute

('Relates','OrganizationRelationship',

7,'OrganizationRelationship','RelatingOrganization',0,'I');

lb_entity.save_attribute

('Engages','Person',8,'Person','EngagedIn',0,'I');

l_Ent_ID := lb_entity.register_entity

('Address',l_Sch_ID,false);

lb_entity.save_attribute

('Purpose','AddressTypeEnum',1,'','',0,'E');

lb_entity.save_attribute

('UserDefinedPurpose','string',2,'','',1,'E');

lb_entity.save_attribute

('OfPerson','Person',3,'Person','Addresses',0,'I');

lb_entity.save_attribute

('OfOrganization','Organization',

4,'Organization','Addresses',0,'I');

l_Ent_ID := lb_entity.register_entity

('PostalAddress',l_Sch_ID,false);

lb_entity.save_inheritance_relations('Address',false);

lb_entity.save_attribute

('AddressLines','aggregate',1,'','',0,'E');

end;

При непосредственной работе с данными адаптер схемо-независимой стратегии осуществляет динамическую трансляцию базовых операций манипулирования объектами того или иного типа в соответствующую последовательность вызовов PL/SQL функций и процедур. На следующем примере можно проследить логику генерации подобных последовательностей. Аналогичным образом реализуются операции модификации, удаления и поиска объектов на основе хранимых идентификаторов, объектных типов и маршрутов навигации.

-- Фрагмент исходного файла с данными в формате ISO-10303-21

#10=POSTALADDRESS(.OFFICE., $,

('25, B.Kommunisticheskaya str., Moscow, 109004, Russia'));

#11=ORGANIZATION(770901001, 'ISP RAS', $,

('Research','Development','Teaching'), (#10));

-- Фрагмент PL/SQL скрипта для занесения данных в БД

DECLARE

type Agg_Level_Type is table of

Aggregates.agg_type%TYPE index by binary_integer;

type Agg_Level_ID is table of

Aggregates.agg_id%TYPE index by binary_integer;

l_Sch_ID Schemas.sch_id%TYPE;

l_Ent_ID Entities.ent_id%TYPE;

l_Ins_ID Instances.ins_id%TYPE;

l_Atr_ID Attributes.atr_id%TYPE;

l_Agg_Type Agg_level_Type;

l_Agg_ID Agg_level_ID;

BEGIN

l_Ent_ID := lb_entity.get_entity('Organization',l_Sch_ID);

l_Ins_ID := lb_instance.init_instance

(l_Ent_ID,l_MO_ID,l_Rep_ID,'#11');

lb_instance.init_attribute_list(l_Ent_ID);

l_Atr_ID := lb_entity.get_attribute(1);

lb_instance.put_simple_attribute_i

(l_Ins_ID,l_Atr_ID,770901001);

l_Atr_ID := lb_entity.get_attribute(2);

lb_instance.put_simple_attrib_s

(l_Ins_ID,l_Atr_ID,'ISP RAS');

l_Atr_ID := lb_entity.get_attribute(4);

l_Agg_Type(1) := lb_defined_types.get_type

('ActorRole',l_Sch_ID);

l_Agg_ID(1) := lb_instance.put_aggregate(l_Agg_Type(1),

NULL,NULL,l_Atr_ID,l_Ins_ID,l_MO_ID,NULL,NULL);

lb_instance.put_element_s(0,'Research',

NULL,l_Agg_ID(1),NULL);

lb_instance.put_element_s(1,'Development',

NULL,l_Agg_ID(1),NULL);

lb_instance.put_element_s(2,'Teaching',

NULL,l_Agg_ID(1),NULL);

l_Atr_ID := lb_entity.get_attribute(5);

l_Agg_Type(1) := lb_defined_types.get_type

('Address',l_Sch_ID);

l_Agg_ID(1) := lb_instance.put_aggregate

(l_Agg_Type(1),NULL,NULL,l_Atr_ID,l_Ins_ID,

l_MO_ID,NULL,NULL);

lb_instance.put_association

(l_Ins_ID,l_Atr_ID,'#10',0,l_Agg_ID(1),NULL);

l_Ent_ID := lb_entity.get_entity

('PostalAddress',l_Sch_ID);

l_Ins_ID := lb_instance.init_instance

(l_Ent_ID,l_MO_ID,l_Rep_ID,'#10');

lb_instance.init_attribute_list(l_Ent_ID);

l_Atr_ID := lb_entity.get_attribute(1);

lb_instance.put_simple_attribute_e

(l_Ins_ID,l_Atr_ID,'office');

l_Atr_ID := lb_entity.get_attribute(3);

l_Agg_Type(1) := lb_defined_types.get_type

('Label',l_Sch_ID);

l_Agg_ID(1) := lb_instance.put_aggregate(l_Agg_Type(1),

NULL,NULL,l_Atr_ID,l_Ins_ID,l_MO_ID,NULL,NULL);

lb_instance.put_element_s(0,'25, B.Kommunisticheskaya

str.,Moscow, 109004, Russia',NULL,l_Agg_ID(1),NULL);

END;

7.2 Схемо-зависимая стратегия

Альтернативу рассмотренному способу реализации объектно-реляционного отображения составляет разработанный вариант схемо-зависимой стратегии, основанный на использовании паттернов отображения классов и атрибутов OneInheritancePath–OneTable, Attribute–Column, ClassAssociation, ClassSelect и ClassAggregate. Данный вариант представляет собой попытку оптимизировать реляционную схему для наиболее эффективной работы с данными внутри одной прикладной модели. Подобная постановка задачи возникает довольно часто на практике и представляет интерес для приложений, оперирующих с одной, возможно масштабной, междисциплинарной прикладной моделью. Указанное сочетание паттернов отображения приводит к большому количеству таблиц, требуемых для адекватного представления объектно-ориентированных данных. Однако при этом оно обеспечивает более эффективную реализацию базовых операций манипулирования объектами. Паттерн OneInheritancePath–OneTable использует преимущества сериализованного представления атрибутов конкретных классов и упрощает компоновку наследуемых атрибутов для объектов выбранных типов. Перечисленные паттерны отображения исключают многоуровневую косвенную адресацию при доступе к таблицам атрибутов и обеспечивают высокую эффективность реализации вспомогательных операций сборки значений из таблиц атрибутов при чтении объектов и их рассылку по соответствующим таблицам при записи и модификации объектов.

Реализация адаптера посредника для схемо-зависимой стратегии существенно отличается от реализации схемо-независимой стратегии. Во-первых, реляционная схема для СУБД генерируется соответствующим CASE инструментом для каждой прикладной модели, специфицированной на языке EXPRESS. Ниже представлен фрагмент описания такой схемы на языке SQL для прикладной модели ActorResource, приведенной ниже. Во-вторых, одновременно со схемой генерируются исходные тексты пакета процедур на языке PL/SQL для манипулирования объектами данной прикладной модели. Каждая процедура пакета ориентирована на работу с объектами определенного типа и имеет специфический для него интерфейс. Поддержка подобных хранимых процедур со стороны реляционной СУБД существенно упрощает реализацию адаптера для посредника и позволяет повысить эффективность его работы за счет компиляции соответствующих директив манипулирования объектами в среде самой СУБД. В-третьих, не требуется какая-либо работа с метаданными, поскольку организация таблиц данных следует структурным особенностям прикладной информационной модели и позволяет явно адресоваться к ним при работе.

-- создание таблицы для описателей объектов схемы

ActorResource

CREATE TABLE actorresource_instance (

PID INTEGER DEFAULT 1 NOT NULL PRIMARY KEY,

Title VARCHAR2(128) NOT NULL,

Entity VARCHAR2(128) NOT NULL,

Model INTEGER NOT NULL,

Commentary VARCHAR2(4000),

FOREIGN KEY (Model) REFERENCES model(PID)

ON DELETE CASCADE

);

CREATE SEQUENCE sq$actorresource_instance;

CREATE UNIQUE INDEX i$actorresource_title_model

ON actorresource_instance (Title, Model);

CREATE INDEX i$actorresource_entity_model

ON actorresource_instance (Entity, Model);

CREATE INDEX i$actorresource_model

ON actorresource_instance (Model);

-- таблица для объектов типа Organization

CREATE TABLE actorresource_organization (

PID INTEGER DEFAULT 1 NOT NULL PRIMARY KEY,

Instance INTEGER NOT NULL,

Id_ INTEGER NOT NULL,

Name_ VARCHAR2(255) NOT NULL,

Description_ VARCHAR2(4000),

FOREIGN KEY (Instance) REFERENCES

actorresource_instance(PID) ON DELETE CASCADE

);

CREATE SEQUENCE sq$actorresource_organization;

CREATE INDEX i$actorresource_organization

ON actorresource_organization (Instance);

CREATE TABLE actorresource_organizat_3 (

PID INTEGER DEFAULT 1 NOT NULL PRIMARY KEY,

Parent INTEGER NOT NULL,

Element_Index1 INTEGER,

Element_Value VARCHAR2(255),

FOREIGN KEY (Parent) REFERENCES

actorresource_organization(PID) ON DELETE CASCADE

);

CREATE SEQUENCE sq$actorresource_organizat_3;

CREATE INDEX i$actorresource_organizat_3

ON actorresource_organizat_3 (Parent);

CREATE TABLE actorresource_organizat_4 (

PID INTEGER DEFAULT 1 NOT NULL PRIMARY KEY,

Parent INTEGER NOT NULL,

Element_Index1 INTEGER,

Element_Value VARCHAR2(128),

FOREIGN KEY (Parent) REFERENCES

actorresource_organization(PID) ON DELETE CASCADE

);

CREATE SEQUENCE sq$actorresource_organizat_4;

CREATE INDEX i$actorresource_organizat_4

ON actorresource_organizat_4 (Parent);


7.3 BLOB стратегия

Наконец, третий разработанный вариант реализации адаптера основан на применении BLOB&Text&XML_Encoding паттернов для реляционного представления объектов классов и их атрибутов. Этот вариант воспроизводит упрощенную схему СН стратегии за счет упакованного представления значений атрибутов объекта в виде бинарной или текстовой строки. Сами строки хранятся как элементы записей в таблице объектов BLOB_Instances. Как следствие, таблицы представления простых и сложных атрибутов отсутствуют. Модифицированная таблица Associations хранит ассоциации всех видов и используется для реализации навигационных запросов по ним. Из таблиц метаданных поддерживаются лишь Schemas, Entities, Entities_To_Schemas, Inheritance_Relations, Complex_Entities и Complex_Entities_To_Entities, записи которых воспроизводят отношения наследования классов в прикладной модели и используются для реализации запросов по типам объектов. Соответствующий CASE инструмент позволяет сгенерировать скрипт инициализации таблиц метаданных по спецификации прикладной информационной модели на языке EXPRESS.

Разработанный на языке PL/SQL пакет процедур предоставляет базовый набор операций манипулирования объектами и их поиска по идентификаторам, типам и навигационным маршрутам в рамках BLOB стратегии. Поскольку значения атрибутов объекта представлены в БД единой строкой, функции по упаковке и распаковке строк целиком ложатся на адаптер посредника. В силу этой же причины в рамках BLOB стратегии невозможно выполнение более тонких запросов на основе атрибутных свойств объектов непосредственно средствами СУБД.


8. Рекомендации использования

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

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

Частично компенсировать данные недостатки, а также сократить количество необходимых реляционных таблиц позволяет упрощенный вариант реализации схемо-независимой стратегии, основанный на представлении значений атрибутов, упакованных в единую бинарную или текстовую строку (BLOB) и хранимых как элементы записей в таблице объектов. Недостатком данной стратегии является невозможность непосредственной реализации запросов и базовых операций манипулирования объектами средствами самой СУБД. Вся нагрузка здесь ложится на промежуточный слой, выполняющий операции упаковки/распаковки строк со значениями атрибутов. Реализованный вариант BLOB стратегии, описанный в настоящей статье, позволяет разгрузить слой-посредник и выполнить простые запросы по идентификаторам объектов, их типам, а также навигационным маршрутам средствами СУБД, поскольку использует дополнительную систему таблиц для хранения отношений наследования и ассоциативных связей между отдельными объектами.

Наиболее эффективную реализацию запросов и операций манипулирования объектами обеспечивает разработанный вариант схемо-зависимой стратегии, основанный на сериализованном представлении атрибутов конкретных классов. Данная стратегия рекомендуется для использования в приложениях, оперирующих с одной прикладной моделью, включающей несколько сотен классов. Ее недостатками являются большое количество используемых таблиц, критичное для большинства реализаций современных реляционных СУБД, чувствительность к эволюции прикладной модели, а также необходимость применения CASE инструментария для генерации реляционной схемы и процедур, реализующих запросы и операции манипулирования объектами. Подобный инструментарий позволяет существенно упростить сопровождение и администрирование базы данных, эксплуатирующей данную стратегию объектно-реляционного отображения.

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

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4100
Авторов
на СтудИзбе
670
Средний доход
с одного платного файла
Обучение Подробнее