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

       

Раскрытие ссылки.


Еще одним следствием того, что данные в R-переменных представлены в однородном виде, является возможность использования групповых операций при работе со ссылками. В основе данного предложения лежит то, что, если объекты типа t содержат поле xref, ссылающееся на объекты типа t*, то R-переменная типа t может быть соединена с R-переменной типа t* с условием эквивалентности значений атрибутов xref и Object(t*). Назовем эту операцию раскрытием ссылки. В общем случае она выглядит как RVar EXPAND RefAttr, где RefAttr является сслочным атрибутом R-переменной RVar.

Предположим, что нами определен объектный тип t, содержащий компонент an, типа-множества SET OF R. В свою очередь, кортежный тип R содержит атрибут xref, являющейся ссылкой на объект типа t*. Таким образом, объектный тип t связан по ссылке с объектным типом t*.Рассмотрим операцию раскрытия ссылки t EXPAND(a.xref). Применив ее к отношениям типов t(Object(t), a1.x1, … , an.xref, … , az.xn) и t*(Object(t*), a*1.x1*, …, a*z.xm*), мы получим отношение со схемой (Object(t), a1.x1, …, an.xi.a*1.x1*, …, an.xi.a*z.xm*, … , az.xn).

Операция раскрытия ссылки t EXPAND(a.хref), вычисляется как t JOIN an.Xref (t* RENAME Object(t*), a*.x1*, … , a*.xn* AS a.xref,a.xi.a*x1*, … , a.xi.a*xn*)

, где a*.х* - атрибуты R-переменной объектного типа t*.

Как видно, операция раскрытия ссылки является быть более сложной, чем просто эквисоединение. Дело в том, что типы t и t* могут иметь компоненты и атрибуты компонентов с одинаковыми именами. Более того - возможен случай, когда типы t и t* являются одним и тем же типом (например, объекты, описывающие людей, содержат ссылки на объекты, описывающие родителей - тех же людей). Для того, что бы избежать подобных конфликтов, операция раскрытия ссылки уточняет имена компонентов того типа, на который указывает ссылочное поле, именем этого ссылочного поля.

Например, если объектный тип t содержит компонент a с атрибутом xref, который ссылается на объект, содержащий компонент a* с атрибутом x*, то операция раскрытия ссылки, использующая точечную нотацию, уточнит имя последнего атрибута как a.xref.a*.x*.

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