Ассоциативные качества. Ссылки.
Межобъектные ассоциации представляются в модели "объект-качество" точно так же как и любая другая информация об объектах, то есть как качество. В дальнейшем мы будем называть такое качество ассоциативным. На уровне представления такое ассоциативное качество в самом общем виде может быть описано как отношение Qa со схемой [DOID:ref1 .... DOID:refi, Dj,...,Dn] где ref1 .... refi атрибуты, содержащие OID ассоциированных объектов (т.е. эти атрибуты определены на домене DOID), а Dj,...,Dn - атрибуты содержащие другую информацию об этой ассоциации.
Замечание. Поскольку OID представляют объекты, отношение Qa может интерпретироваться системой как ассоциация объектов со схемой [O:O1 .... O:Oi, Dj,...,Dn], где O1 .... Oi - ассоциируемые объекты принадлежащие множеству объектов O., и даже (если системой поддерживается такой контроль типов) как ассоциация объектов со схемой [c1:O1 .... сi:Oi, Dj,...,Dn] где O1 .... Oi - ассоциируемые объекты принадлежащие классам c1 … ci. В последнем случае классы c1 … ci рассматриваются как домены отношений. Таким образом, модель "объект-качество" не противоречит подходу предлагаемому Дейтом, где класс и домен рассматриваются как эквивалентные понятия.
Обратим особое внимание на то, что речь идет о качестве, и, следовательно, существуют объекты, описываемые различными значениями этого качеством. Таким образом, ассоциативное качество подразумевает, что помимо ассоциируемых объектов существует объект, который может быть назван ассоциирующим. Это становиться ясным когда мы перейдем на уровень хранения и рассмотрим соответсвующее качеству Qa отношение Ra, которое будет иметь схему [DOID:OID, S, DOID:ref1 .... DOID:refi, Dj,...,Dn ]. Здесь атрибут OID (из K-части) как и везде содержит OID описываемого (ассоциирующего) объекта, а атрибуты refOID1 .... refOIDi (из Q-части) содержат OID связанных с ним ассоциируемых объектов.
Атрибуты ref1 .... refi входящие в Q-часть отношения Rа могут и должны рассматриваться как внешние ключи, для которых в качестве первичного ключа выступает атрибут OID стержневого отношения R0.
Следствием этого является существование ссылочной целостности, то есть невозможности уничтожить объект в том случае, если в системе существует ассоциативная запись (кортеж отношения со схемой Ra), содержащая OID этого объекта в одном из полей ref1 .... refi.
Частным, но очень важным случаем ассоциаций является существующие в объектных системах ссылки. Любая ссылка в модели "объект-качество" рассматривается как значения качества (типа) "объектная ссылка". По сути дела речь идет о качестве Qref, которое на уровне представления в самом общем виде можно рассматривать как 1-арное отношение со схемой [DOID:ref], где единственный атрибут ref определен на домене DOID. Значением этого качества может являться OID одного из существующих в системе объектов.
Интересным эффект возникает в связи с тем, что на уровне представления качество "объектная ссылка" содержит один единственный атрибут с именем ref. Для того, что бы обратиться к значению, содержащемуся в объектной ссылке, имя ref можно не указывать. Например, если объект o ссылается на другой объект посредством атрибута-ссылки r, то для записи этого вместо выражения вида o.r.ref, достаточно выражения вида o.r , который используется в традиционных объектных системах. Поскольку ссылки являются основным механизмом описания связей между объектами в традиционных объектных системах, то система, основанная на модели "объект-качество", должна по умолчанию поддерживать качество "объектная ссылка" а также особенности использования этого качества.
Следует особо отметить, что ассоциация, являющаяся на объектном уровне направленной (ассоциирующий объект ссылается на ассоциируемые объекты), на уровне хранения (реляционном уровне) является симметричной. Например множество ссылок образует на уровне хранения отношение Rref со схемой [DOID:OID, S, DOID:ref]. Конечно мы по прежнему можем подразумевать, что один объект, OID которого содержится в поле "OID" (К-часть), ссылается на другой объект, OID которого содержится в поле "ref" (Q-часть).Однако фактически отношение Rref является симметричной ассоциации объектов, что позволяет описать связь (между объектами) как связь типа многие-ко-многим.
Такой подход дает некоторые возможности, недоступные в традиционных объектных системах. Например, для любого объекта возможно определить объекты, ссылающиеся на него - для этого достаточно отобрать кортежи отношения Rref у которых в поле ref содержится OID данного объекта. В традиционных объектных системах для того, что бы получить такую информацию придется перебрать и проанализировать все существующие объекты, что представляется практически неосуществимым.