Курсовая работа: Язык описания информационных моделей EXPRESS
Однако в отношении поддержки эволюции схем паттерн довольно критичен, поскольку все запросы, основанные на полиморфных операциях, требуют модификации с учетом каждого нового наследуемого класса, включаемого в прикладную модель.
6.3.4 Паттерн AllClasses–OneTable
Паттерн AllClasses–OneTable предполагает использование единой таблицы Instances для представления дескрипторов объектов всех классов. В столбцах таблицы хранятся идентификатор объекта и его тип. Контекст использования паттерна связан с представлением атрибутов классов в виде самостоятельных таблиц. В этом случае связь между таблицами экземпляров классов и значений их атрибутов осуществляется через внешние ключи записей объектов (см. раздел 6.4.2.2). Предполагается, что значения атрибутов одного и того же типа хранятся в единой таблице независимо от их вхождения в состав того или иного класса. Тем самым достигается существенная для схемо-независимой стратегии инвариантность реляционной схемы по отношению к прикладным моделям. Связь простого объекта с его классом осуществляется через внешний ключ записи в таблице классов Entities (см. раздел 6.5). Для сложных объектов предусмотрен внешний ключ записи в соответствующей таблице сложных классов Complex_Entities.
6.3.5 Паттерн BLOB
Паттерн BLOB также предполагает использование единой таблицы BLOB Instances для представления объектов всех классов. Однако в отличие от паттерна AllClasses–OneTable в данной таблице используется дополнительный столбец для хранения значений атрибутов, упакованных в бинарную или текстовую строку переменной длины. Задача упаковки значений в строку и их распаковки для клиентских приложений ложится непосредственно на промежуточный слой программного обеспечения. Хотя чтение и запись данных объекта осуществляются за одну операцию обращения к таблице, дополнительные расходы приходятся на обработку строк промежуточным слоем. По существу в этом случае BLOB стратегия объединяет в себе паттерны наследования, агрегации и ассоциации.
Возможны разновидности данного паттерна, связанные с различными способами представления строки значений атрибутов как в бинарном формате, так и в одном из текстовых метаформатов. В частности, применительно к метамодели EXPRESS стандарт STEP определяет формат текстового кодирования прикладных данных (ISO-10303-21) и несколько альтернативных способов XML разметки документов (ISO-10303-28), порождаемых соответствующей прикладной моделью данных, специфицируемой на языке EXPRESS.
Главным недостатком BLOB паттерна является невозможность разрешения запросов и реализации объектных операций непосредственно средствами реляционной СУБД. В данном случае она играет роль простого хранилища, а эти функции выполняет промежуточный слой. Как паттерн схемо-независимой стратегии он не требует больших затрат на поддержку реляционной схемы при эволюции прикладной модели, поскольку связанные с этими изменениями функции затрагивают лишь промежуточный слой.
6.4 Отображение атрибутов
Атрибуты классов представляются либо столбцами соответствующих таблиц объектов классов, либо самостоятельными таблицами. Как и в случае паттернов отображения классов, альтернативы представления атрибутов во многом определяются применяемой схемо-зависимой или схемо-независимой стратегией объектно-реляционного отображения. Рассмотрим их, следуя введенной классификации паттернов отображения атрибутов простых, селективных, агрегатных типов и ассоциаций.
6.4.1 Представление простых типов
Соответствие базовых типов языка EXPRESS типам данных в SQL достаточно прозрачно. В таблицу 1 сведены базовые типы EXPRESS и возможные способы их представления в некоторых популярных коммерческих и свободно распространяемых реляционных СУБД.
Таблица 1. Соответствие базовых типов EXPRESS и SQL в реляционных СУБД
ЕXPRESS | MySQL | PostgreSQL | Oracle |
INTEGER | INTEGER | INTEGER | INTEGER |
REAL |
REAL, DOUBLE PRECISION |
FLOAT8, DOUBLE PRECISION |
NUMBER, DOUBLE PRECISION |
REAL(n) | FLOAT(n) | NUMERIC(n) | NUMBER(n) |
NUMBER |
REAL, DOUBLE PRECISION |
FLOAT8, DOUBLE PRECISION |
NUMBER, DOUBLE PRECISION |
BOOLEAN |
CHAR(1), TINYINT |
CHAR(1), SMALLINT |
CHAR(1), INTEGER |
LOGICAL |
CHAR(1), TINYINT |
CHAR(1), SMALLINT |
CHAR(1), INTEGER |
ENUMERATION |
VARCHAR(128), INTEGER |
VARCHAR(128), INTEGER |
VARCHAR2(128), INTEGER |
STRING |
TEXT (up to 64K), LONGTEXT (up to 4Gb) |
TEXT (about 1Gb) |
VARCHAR2(4000), LONG (up to 2Gb) |
STRING(n) | VARCHAR(n) | VARCHAR(n) | VARCHAR2(n) |
STRING(n) FIXED | CHAR(n) | CHAR(n) | CHAR(n) |
BINARY |
BLOB (up to 64K), LONGBLOB (up to 4Gb) |
BYTEA | LONG RAW (up to 2Gb) |
BINARY(n) | VARCHAR(n) BINARY | VARBIT(n) | RAW(n) |
BINARY(n) FIXED | CHAR(n) BINARY | BIT(n) | RAW(n) |
ENTITY (reference) |
VARCHAR(128), FOREIGN KEY |
VARCHAR(128), FOREIGN KEY |
VARCHAR2(128), FOREIGN KEY |
Помимо указанных вариантов представления точности числовых значений и ограничений длины строковых и двоичных переменных, важные отличия затрагивают способы представления атрибутов типа BOOLEAN, LOGICAL и ENUMERATION. С точки зрения семантики языка EXPRESS значения этих типов упорядочены, и для них определены операции сравнения. Поэтому, если предполагается реализация запросов с использованием подобных операций, более предпочтительным выглядит представление переменных этих типов как целых чисел. В этом случае функция интерпретации значений в терминах исходной прикладной модели возлагается на промежуточный программный слой, возможно, с использованием словарей метаданных. Значения, представленные в виде символьных строк, интерпретируются непосредственно клиентскими приложениями. Средствами СУБД может контролироваться также и корректность данных, для чего должны быть наложены соответствующие ограничения на область допустимых значений.
6.4.2 Отображение атрибутов простых типов
6.4.2.1 Паттерн Attribute–Column
Реализация паттерна представления атрибутов простых типов в виде столбцов соответствующих таблиц объектов довольно прозрачна и естественна для применения в рамках схемо-зависимой стратегии. В этом случае каждая таблица объектов классов включает в себя соответствующий столбец для представления значений простого атрибута. Тип столбца определяется возможными вариантами представления базовых типов языка EXPRESS, рассмотренными в предыдущем разделе. В качестве имени столбца могут быть выбраны либо имя атрибута, уникальное в пределах класса, либо конкатенация имен класса и атрибута, уникальная в пределах информационной схемы.
6.4.2.2 Паттерн Attribute–Table
Данный паттерн предполагает использование самостоятельных таблиц для представления простых однотипных атрибутов. Его применение возможно лишь в рамках схемо-независимой и смешанной стратегий с одновременным использованием таблиц метаданных. Привязка значений атрибутов к дескрипторам объектов осуществляется по внешним ключам записей объектов в таблице Instances, представленным в таблицах атрибутов. Для идентификации хранимых величин как значений атрибутов определенных классов в них также хранятся внешние ключи записей метаинформации о соответствующих атрибутах в таблице Attributes в составе системы таблиц метаданных.
Независимо от принадлежности различным классам значения однотипных атрибутов хранятся в одной таблице. Для представления всех атрибутов простых типов, допускаемых метамоделью языка EXPRESS, в общей реляционной схеме достаточно иметь фиксированный набор из шести таблиц: Integer_Attributes, Real_Attributes, Logical_Attributes, String_Attributes, Binary_Attributes и Enum_Attributes. Предполагается, что в схеме хранения данные типа NUMBER всегда представимы типом REAL, а данные типа BOOLEAN — типом LOGICAL.
6.4.3 Отображение ассоциаций
Язык EXPRESS допускает определение разного рода ассоциативных отношений между классами, отличающихся как по типу, так и по кратности. Ассоциации однонаправлены в том смысле, что ассоциируемый объект может быть получен по соответствующей ссылке из объекта, содержащего ассоциативную связь. Вместе с тем, допускается задание двунаправленных связей с помощью определения обратных атрибутов (INVERSE) в ассоциируемом классе. При определении прямой и обратной ассоциации допустимо указание диапазона кратности связи как ограничения, налагаемого на количество объектов, участвующих в ней как со стороны ассоциируемых, так и со стороны ассоциирующих объектов.
Ассоциации один-к-одному” реализуются как простые атрибуты, имеющие тип объектной ссылки. Ассоциации “один-ко-многим” представляются средствами языка как агрегаты простых ассоциативных отношений. Ассоциации вида “многие-ко-многим непосредственно конструкциями языка не поддерживаются, однако могут быть представлены в прикладной модели в виде дополнительных объектов, через которые на основе множественных ассоциаций могут быть установлены требуемые отношения между прикладными объектами.
Рассмотрим задачу отображения множественных ассоциаций вида “один-ко-многим” как наиболее типовой случай, к которому могут быть непосредственно редуцированы ассоциации “один-к-одному и “многие-ко-многим”. Видятся три наиболее содержательных случая представления ассоциаций и соответствующих им паттерна отображения.
6.4.3.1 Паттерн ForeignKeyAssociation
Данный паттерн применим к прямым множественным ассоциациям при условии, что соответствующая обратная ассоциация является простой. Иными словами, с каждым объектом, участвующим в связи, может быть ассоциировано некоторое множество объектов. Однако каждый объект таких множеств может участвовать только в одной обратной ассоциации этой связи. Паттерн реализуется в рамках схемо-зависимой стратегии путем включения в таблицу ассоциированного класса <Associated_Class> (класса, на который содержится ссылка в классе ассоциации) внешнего ключа на таблицу <Associating_Class>. Имя ключа может соответствовать имени связи в соответствующей спецификации <Associating_Class>. В случае упорядоченных множественных ассоциаций (LIST или ARRAY OF ENTITY) может потребоваться дополнительный столбец в таблице <Associated_Class> для хранения индекса ассоциации. Если связь реализуется как элемент вложенной агрегатной конструкции, то в данной таблице предусматривается необходимое число столбцов индексов для каждого из упорядоченных множеств, участвующих в ней. Аналогично, если связь реализуется как элемент селективной конструкции, то в таблицу добавляется соответствующий столбец для представления дискриминатора. Более подробно эти случаи описаны в паттернах отображения селективных и агрегатных конструкций.
Чтение ассоциирующего объекта реализуется посредством одной операции соединения или двух операций запроса к таблицам <Associated_Class> и <Associating_Class>, один из которых является множественным. Запись объекта также сопряжена с множественной операцией модификации внешних ключей в записях ассоциированных объектов. Затраты памяти в реализации паттерна близки к оптимальным, поскольку издержки приходятся лишь на хранение дополнительного внешнего ключа, а иногда и индекса ассоциации в таблице <Associated_Class>, для каждой связи, в которой ассоциируемый класс участвует.
6.4.3.2 Паттерн ClassAssociation
Данный паттерн позволяет непосредственно представить множественные ассоциативные отношения в результате использования отдельной таблицы в рамках схемо-зависимой стратегии. Такая таблица <Class1>_<Class2>_Associations создается для каждой пары классов, участвующих в ассоциативной связи, и содержит пары внешних ключей записей в таблицах классов ассоциируемых и ассоциирующих объектов.
В отличие от предыдущего, данный паттерн обеспечивает представление произвольных ассоциативных отношений, не ограниченных кратностью обратных ассоциаций.
6.4.3.3 Паттерн GenericAssociation
Данный паттерн соответствует схемо-независимой стратегии. Он реализует идею унифицированного представления всех видов ассоциаций, участвующих в прикладной модели, одной таблицей Associations. Ассоциативные связи в таблице устанавливаются через ссылки на дескрипторы прикладных объектов в таблице Instances в виде внешних ключей соответствующих записей в ней. Поскольку для реализации схемо-независимой стратегии важна привязка элементов данных к прикладной модели, для каждой ассоциации в таблице Associations хранится также ссылка на метаинформацию о соответствующем атрибуте, представленную в таблице Attributes. Если ассоциация устанавливается как элемент агрегатной или селективной конструкции, то указывается также ссылка на соответствующую запись в таблицах Aggregates или Selections. Таким образом, таблица Associations хранит множество записей обо всех видах ассоциаций прикладных данных, контексте их использования в составе агрегатных или селективных конструкций и их привязке к прикладной информационной модели, представимыми соответствующими таблицами метаданных.
6.4.4 Отображение селективных типов
Поскольку селективные типы данных в языке EXPRESS по существу являются альтернативным представлением других базовых типов, паттерны их отображения тесно связаны с соответствующими паттернами отображения тех базовых типов, на которых они основаны. Важно отметить, что селективные типы могут быть основаны на простых типах данных, ассоциативных типах, агрегатах различного вида и на ранее предопределенных селективных типах иной организации. Дискриминатор установки селективного элемента данных в одно из альтернативных состояний в реляционной схеме представим столбцом в таблице хранения значений атрибутов объектов. Тип столбца дискриминатора соответствует рассмотренным способам отображения данных перечислимого типа ENUMERATION (см. раздел 6.4.1). А способ представления самого состояния элемента определяется одним из паттернов отображения атрибутов базовых типов. Поскольку в качестве базовых могут выступать пользовательские типы данных, эквивалентные с точки зрения способов представления в реляционной схеме, то для исключения избыточности и минимизации затрат памяти целесообразно выделить подмножество неэквивалентных базовых типов и предусмотреть способы их адекватного реляционного представления. При этом дискриминатор селективного элемента позволит однозначно идентифицировать, в каком именно состоянии хранимые данные находятся.
Удобно различать два встречаемых на практике случая определения селективного типа. Первый случай соответствует селективным типам, базируемым только на простых и ассоциативных типах данных, учитывая возможный вложенный характер составных типов. Второй общий случай охватывает все возможные варианты определения селективного типа на основе произвольной комбинации базовых, в том числе и с участием агрегатов.