Объектные типы (схемы классов)
Подробное рассмотрение возможных способов представления объектных типов в терминах 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[…] | Табличный тип данного поля (имя отношения кортежем которого это поле является) |
Отношения CLASSes, DELTAs и ATTRIBUTes, являющиеся фактически каталогом классов, вместе с полем SID, существующем во всех таблицах данных, являются механизмом, позволяющим определить семантическое значение (смысл) записи в контексте класса объекта, атрибутом которого эта запись является. Можно также предположить, что спроектированный соответствующим образом каталог классов может сохранять всю информацию о классах (константы, методы и т.д.).
После введения отношения OIDs и каталога классов R-проекция R*O-системы примет следующий вид (рис.9).
Рис. 9. R-проекция после введения отношения T_OID и каталога классов (на рисунке из каталога классов имеется только отношение ATTRIBUTes)
Объекту R*O-системы, имеющего атрибут, являющийся кортежем отношения, тем самый присущ смысл характерный для данного отношения.
Пример: Если объект включает кортеж отношения адрес, то он является адресуемым объектом в самом что ни на есть бытовом смысле этого слова - ему можно направить почтовую корреспонденцию и определить его положение на карте
С другой стороны для каждого кортежа R*O системы определено его семантическое значение (смысл) в контексте содержащего его объекта. Это семантическое значение можно использовать для поиска и выборки информации.
Пример: мы можем получить информацию о фактических адресах клиентов или о юридических адресах фирм.
Важным является то, что семантическое значение наследуется. Операция поиска и выборки информации на основании семантического значения действует не только для класса, в котором это семантическое значение определено, но и для всех классов являющихся его наследниками.
Пример: Описав класс "Клиент" создадим запрос возвращающий информацию о фактических адресах клиентов.
SELECT ... FROM Client.postaddress
И, поскольку этот запрос основывается на наследуемом семантическом значении ( соответсвующем выражению "фактический адрес"), то он будет возвращать информацию о фактичеких адресах всех клиентов независимо от того, являются ли они физическими или юридическими лицами. Этот запрос будет работать независимо от наличия и количества классов производных от класса "Клиент" даже если на момент создания запроса эти классы еще не описаны.