Три манифеста баз данных ретроспектива и перспективы



         

Путевые выражения


Для навигации между подобъектами сложных объектов и по связям между разными объектами в OQL поддерживается специальный вид выражений, называемых путевыми (path expression ). Эти выражения определяются в так называемой точечной нотации (вместо операции “.” можно использовать и операцию “->”). Рассмотрим несколько простых примеров. Предположим, что в классах DEPT и EMP , кроме связи CONSISTS _ OF - WORKS определена еще и связь “один-к-одному” MANAGED _ BY - MANAGER _ OF :

class DEPT {

...
relationship EMP managed_by
inverse EMP :: manager_of
... }

class EMP {

...
relationship DEPT manager_of
inverse DEPT :: managed_by
... }

Пример 2.7. Для получения объекта типа EMP , соответствующего менеджеру отдела main _ department достаточно написать выражение

main_department.managed_by

Если же требуется получить имя менеджера отдела main _ department , то можно воспользоваться путевым выражением

main_department.managed_by.EMP_NAME

Пример 2.8. Получить имена всех сотрудников отдела main _ department.

Кажется, что запрос очень похож на предыдущий, и что для него годится выражение

main_department.consists_of.EMP_NAME

Но в данном случае мы имеем связь “один-ко-многим”, и хотя у каждого служащего имеется только одно имя, такие путевые выражения в OQL не допускаются. Правильной формулировкой запроса является следующая:

SELECT E.EMP_NAME
     FROM main_department.consists_of AS E

Предикаты и логические операции

В спецификации OQL , как и в стандарте языка SQL , термин предикат обозначает условное выражение, которое может участвовать в запросе. Но семантика похожих на SQL конструкций языка OQL существенно отличается, что мы покажем в следующем примере.

Пример 2.9. Получить номера отделов и имена сотрудников отделов, с размером зарплаты, большим 10000 руб., работающих в отделах с числом сотрудников, большим 40 человек, и со средним размером зарплаты, большим 20000 руб.

SELECT STRUCT (DEPT_NO : D.DEPT_NO, EMP_NAME : E.EMP_NAME )

     FROM DEPARTMENTS D,

          D.CONSISTS_OF E



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