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

       

Объектные типы (схемы классов)


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

Рассмотрим два класса - A,В - где В наследуется от А. В пространстве определений типов O-системы данная ситуация выглядит следующим образом.

Обратим внимание на то, что отличает между собой типы А и В. Это некоторая разность

B = В - А. В данном случае
B означает, что множество имен атрибутов класса составляющих эту
впервые определено в типе В. Можно описать
A = A. С другой стороны A=
A, B =
A+
B (или B=A+
B что фактически описывает операцию наследования существующую в O-языках; возможен вариант описывающий множественное наследование B=A1+A2+...+Ak+
B).

Для того чтобы лучше описать структуру этих таблиц необходимо вернуться к рис.4 изображающему пространство R*O-системы (рис. 8).

Рис 8. проекция R*O-системы на плоскость SC-SR (Классы состоят из

являющихся набором имен сущностей)

Каждый класс может быть представлен как сумма

. В данном случае класс A =
A, а класс B =
A +
B.
-ы являются непересающимися подмножествами простанства определения типов классов. Каждая из этих

содержит именованные ( здесь: x1, x2, y1) поля различных сущностей ( здесь: сущности ADDR и LegIn).

Вся эта информация может быть описана с помощью трех отношений.

1.CLASSES - определяет существующие в системе классы.



Столбец Тип Ключ Описание
ClassID TypeCID Primary Идентификатор класса ( и
)
ClassName char[…] Имя класса

Из того факта, что каждой

, существующей в системе, может быть поставлен в соответствие некоторый класс, в котором описываются поля входящие в эту
, следует что число классов равно числу
(и наоборот). Таким образом можно сказать, что отношение CLASSes описывает также все
которые существуют в данной системе.

2.DELTAS - содержит информацию о том из каких Ж состоит класс.

Столбец Тип Ключ Описание
ClassID TypeCID Primary, references CLASSes (ClassID) Идентификатор класса
DeltaID TypeCID Primary, references CLASSes (ClassID) Идентификатор
<
Поскольку каждой существующей в системе
соответствует некоторый класс, данная таблица содержит также полную информацию о наследовании для всех существующих в системе классов.

3.ATTRIBUTES - содержит информацию обо всех существующих в системе атрибутах классов, опрелделяет в какие
и, соответственно, в какие классы эти атрибуты входит.

Столбец Тип Ключ Описание
SemanticID TypeSID Primary Идентификатор элемента схемы классов
DeltaID TypeCID References CLASSes (ClassID) Идентификатор
-ы содержащей его (так же можно рассматривать как идентификатор класса где описан этот атрибут)
Name Char[…]   Имя поля
TableName Char[…]   Табличный тип данного поля (имя отношения кортежем которого это поле является)
Здесь каждому атрибуту любого из описанных в системе классов ставится в соответствие уникальный идентификатор SemanticID. Поскольку информация о семантическом значении (наравне с OID) является существенной для любого кортежа R*O-системы, содержащей пользовательские данные, каждый кортеж должен содержать поле SID, в котором это значение будет сохраняться. Это поле должно быть объявлено как внешний ключ ссылающийся на поле SemanticID таблицы SCHEME.

Отношения CLASSes, DELTAs и ATTRIBUTes, являющиеся фактически каталогом классов, вместе с полем SID, существующем во всех таблицах данных, являются механизмом, позволяющим определить семантическое значение (смысл) записи в контексте класса объекта, атрибутом которого эта запись является. Можно также предположить, что спроектированный соответствующим образом каталог классов может сохранять всю информацию о классах (константы, методы и т.д.).

После введения отношения OIDs и каталога классов R-проекция R*O-системы примет следующий вид (рис.9).



Рис. 9. R-проекция после введения отношения T_OID и каталога классов (на рисунке из каталога классов имеется только отношение ATTRIBUTes)

Объекту R*O-системы, имеющего атрибут, являющийся кортежем отношения, тем самый присущ смысл характерный для данного отношения.



Пример: Если объект включает кортеж отношения адрес, то он является адресуемым объектом в самом что ни на есть бытовом смысле этого слова - ему можно направить почтовую корреспонденцию и определить его положение на карте

С другой стороны для каждого кортежа R*O системы определено его семантическое значение (смысл) в контексте содержащего его объекта. Это семантическое значение можно использовать для поиска и выборки информации.

Пример: мы можем получить информацию о фактических адресах клиентов или о юридических адресах фирм.

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

Пример: Описав класс "Клиент" создадим запрос возвращающий информацию о фактических адресах клиентов.

SELECT ... FROM Client.postaddress

И, поскольку этот запрос основывается на наследуемом семантическом значении ( соответсвующем выражению "фактический адрес"), то он будет возвращать информацию о фактичеких адресах всех клиентов независимо от того, являются ли они физическими или юридическими лицами. Этот запрос будет работать независимо от наличия и количества классов производных от класса "Клиент" даже если на момент создания запроса эти классы еще не описаны.


Содержание раздела