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

       

R-переменные и ссылки.


Рассмотрим введенную ранее групповую операцию Object(x), возвращающую OID всех объектов, данные о которых содержатся в R-переменной x. Например, выражение Object(t) вернет OID всех существующих в системе объектов класса t.

Пример. Предположим, что существует групповая переменная someSales ссылочного типа Sales. После выполнения операции

someSales := Object(Sales WHERE IsPayed = TRUE);

эта переменная будет содержать ссылки на объекты типа Sales, описывающие уже оплаченные продажи.

Вспомним, что ссылки разыменовываются, то есть любая операция, отличная от операций присваивания и сравнения, выполняется не над ссылкой, а над объектом, на который эта ссылка указывает. Это замечание справедливо и для операции обращения к компоненту объекта. Если существует ссылка o на объект класса t, то выражение o.a описывает обращение к компоненту a объекта (или объектов), на который указывает ссылка o. Соответственно, выражение reft.a можно рассматривать как имя R-переменной, значение которой представляет собой совокупность значений компонента a тех объектов типа t, ссылки на которые содержатся в переменной reft. Значение R-переменной reft.a вычисляется как t.a JOIN reft.

Отметим явную аналогию, которая существует между именем R-переменной t.a, содержащей совокупность значений компонентов a всех существующих в системе объектов типа t, и именем R-переменной reft.a, описывающим такую же совокупность для группы объектов, определяемой ссылкой reft (эта группа, возможно, состоит из одного объекта). Схемы этих переменных полностью совпадают. И в том, и другом случае подразумевается, что речь идет о совокупности значений компонента а некоторой группы объектов. Такая аналогия подразумевает, что эти переменные могут использоваться в одних и тех же операциях.

Пример. Уже описанная переменная someSales ссылочного типа Sales после операции

someSales := Object(someSales.SaleItems WHERE Price > 100);

будет содержать ссылки на объекты типа Sales, описывающие уже оплаченные продажи, содержащие строки продаж с ценой больше, чем 100.



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