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

       

Выборка объектов по значениям.


Отметим, что оператор выборки WHERE представляется явно недостаточным, если целью выборки является выборка сложных объектов, отвечающих определенным условиям. Это связано с тем, что условие отбора оператора WHERE применяется к кортежам, но данные каждого объекта могут быть представлены в R-переменной множеством кортежей. Предположим, например, что речь идет об объектах типа t, у которых в компоненте а хранится значение отношения R(…, x, …), и необходимо найти объекты (т.е. получить ссылки на объекты), компонент а которых содержит, по меньшей мере, один кортеж со значением атрибута x = 1 и, по меньшей мере, один кортеж со значением х=2. Поскольку атрибут х в одном кортежа не может одновременно равняться и единице и двойке, выражение Object(t.a WHERE x = 1 AND x =2) является попросту бессмысленным.

Для решения подобных задач предлагается операцию выборки объектов типа t по значениям. Эта операция имеет вид Rvar<cond1, cond2,…>, где Rvar - выражение, определяющее R-переменную (это может быть, например, имя объектного типа, или имя ссылки на объекты этого типа), а каждое condi представляет собой условие, применимое в операции WHERE.

Замечание. Выражение <cond1, cond2,…> вычисляется как (Object (t WHERE cond1) INTERSEPT Object (t WHERE cond2) INTERSEPT … ) и, следовательно, представляет собой групповую ссылку на те существующие в системе объекты типа t, которые удовлетворяют заданным условиям. Конечным этапом выборки по значениям является выборка из R-переменной Rvar по атрибуту, содержащему объектный идентификатор. Например значение t<cond1, …>.a вычисляется как t WHERE EXIST (Object(t) JOIN (Object (t WHERE cond1) INTERSEPT … )) и представляет собой подмножество значения R-переменной компонента t.а, которое содержит информацию только о тех объектах, для которых выполняются все перечисленные условия.



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