Классика баз данных - статьи

       

Значения атрибутов производных классов сохраняются


Значения атрибутов производных классов сохраняются в одной общей таблице ChildAttValue. Состав и структура полей данной таблицы соответствует хорошо известному методу ОРО, названному "Сущность-Атрибут-Значение" (САЗ) [4]. В отличие от классической реализации, использующей для сохранения значений атрибутов всех классов иерархии единую таблицу, в нашем случае в ChildAttValue сохраняются только значения атрибутов производных классов. В итоге мы реализовали метод, который комбинирует в себе архитектурные решения двух известных паттёрнов ОРО. Этот подход имеет следующие преимущества:


  1. Для извлечения значений атрибутов базового класса, которые необходимы для всех классов иерархии, требуется выполнить лишь одну операцию выборки данных из таблицы;
  2. В структуре БД присутствует лишь одна таблица, представляющая иерархию классов, что позволяет физически группировать экземпляры подобных классов;
  3. Минимизация дискового пространства, т.к. в базовой таблице хранятся значения атрибутов, присутствующих во всех классах. А в ChildAttValue сохраняются не пустые (не NULL) значения атрибутов.


В представленной реализации поддерживается обширная метаинформация (КО1), которая сохраняет информацию как об иерархии атомарных литеральных типов (классы, унаследованные от Literal), так и о иерархии классов предметной области (например, о MasterTable, DetailTable). Возможная реализация иерархии атомарных литеральных типов в среде РСУБД Microsoft SQL Server 2005 представлена в работе [5]. Ключевой особенностью, в разрезе нашего обсуждения, является возможность объявления атрибутов для литеральных типов и задания для них значений. При трансформации таблиц в классы (КО3) каждое поле таблицы преобразуется в атрибут класса, при этом тип атрибута определяется в соответствии с типами данных (классами), имеющимися в метамодели (КО1). Так, поле Fld01 (DetailTable) типа Integer трансформируется в атрибут Att01 (DetailClass), типом которого является атомарный литерал IntLiteral. При этом внешний ключ MFld01 (DetailTable), который также является целым числом, преобразуется в атрибут Att01 (DetailClass), типом которого выступает класс MasterClass.

Содержание  Назад  Вперед