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

       

Запросы с путевыми выражениями


Цели перезаписи запросов, разъясненные выше, являются даже более существенными в объектно-ориентированных приложениях, в которых обычно генерируются усложенные запросы с «путевыми выражениями», связывающими разнообразные коллекции объектов [BTA90, LLOW91, LLPS91]. В таких приложениях как сложность логики, так и объем данных гораздо больше, чем в тридиционных приложениях СУБД [HSS88]. В результате возрастает важность оптимизации запросов.

Ниже приводится пример запроса с путевым выражением, представленный в синтаксисе Object SQL [BTA90]. Этот запрос является немного измененным примером, представленным в [BTA90]. База данных в примере содержит записи о пациентах. Медицинские записи являются множественными характеристиками пациентов. Все обращения к данным производятся через методы. Для заданной записи пациента медицинские записи возвращаются функцией get_medical_records. В примере выбираются записи о пациентах мужского пола, которым поставлен диагноз «малярия» (malaria) или «оспа» (smallpox) до '10/10/89'. В разделе FROM перечисляются пациенты, а в разделе WHERE пациенты ограничиваются до лиц мужского пола, и проверяется наличие диагнозов малярии или оспы, поставленных до указанной даты.

SELECT DISTINCT P FROM Patient p IN Patient_Set WHERE p.sex == 'male' && EXISTS ( SELECT r FROM Medical_record r IN p.get_medical_record() WHERE r.get_date() < '10/10/89' && (r.get_diagnosis() == 'Malaria' r.get diagnosis() == 'Smallpox');

В подобных запросах существенным образом используются путевые выражения, в которых для данной записи родственная информация получается через путь (например, взятие медицинских записей пациента). Запросы с путевыми выражениями очень распространены в сложных приложениях, таких как CAD/CAM. В общем случае запрос может включать много путевых выражений, и длина каждого из них может быть больше единицы. Нахождение эффективного плана выполнения для таких путевых выражений является проблемой, очень похожей на проблему оптимизации (вложенных) подзапросов SQL.

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