Объектные типы (схемы классов)
Подробное рассмотрение возможных способов представления объектных типов в терминах 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
И, поскольку этот запрос основывается на наследуемом семантическом значении ( соответсвующем выражению "фактический адрес"), то он будет возвращать информацию о фактичеких адресах всех клиентов независимо от того, являются ли они физическими или юридическими лицами. Этот запрос будет работать независимо от наличия и количества классов производных от класса "Клиент" даже если на момент создания запроса эти классы еще не описаны.