23.9.4. Языки запросов

Во многих СУБД используется еще один важный класс языков. С появлением интерфейсов конечных пользователей СУБД возникла потребность в языках, с помощью которых можно было бы формулировать запросы к системе базы данных. Такие языки стали называть языками запросов. Первоначально их роль выполняли декларативные языки высокого уровня, которые обеспечивали выборку требуемых данных из базы данных. Однако впоследствии их функции значительно трансформировались. Языки запросов стали предоставлять полные функциональные возможности для операций над базой данных, в том числе вставку новых данных, обновление, удаление и выборку данных. 3.8.5. Автономные и включающие языки

Некоторые СУБД располагают такими языками, которые не только реализуют функции определения данных и манипулирования данными, но и обладают управляющими структурами и другими средствами, свойственными традиционным языкам программирования. Благодаря этому они могут использоваться как функционально полное инструментальное средство для создания приложений систем баз данных. Такие языки называют автономными. В качестве примера приведем упоминавшийся ранее язык dBase, построенный в стиле языков структурного программирования, или язык PL/SQL Oracle.

В случаях, когда СУБД не располагает автономным языком, она обычно обладает интерфейсами прикладного программирования для создания и использования приложений. Благодаря этому приложения могут разрабатываться с помощью расширения традиционных языков программирования операторами (командами, функциями, процедурами и т.п.), исполнение которых может запрашиваться через API. Таким образом будет восполняться функциональная неполнота языков СУБД. Язык программирования выступает при этом в роли включающего языка по отношению к языкам СУБД, и прикладные системы реализуются на таком расширенном языке. Интерфейсы прикладного программирования предусмотрены во многих СУБД.

В процессе эволюции СУБД и языков программирования стало ясно, что использование включающих языков и ЯМД вынуждает разработчиков приложений иметь дело с комбинацией двух совершенно различных с концептуальной точки зрения инструментальных средств и имеет серьезные недостатки. Эти два разработанные независимо друг от друга языка базируются на разных системах понятий, поддерживают разные системы типов данных и обладают в связи с этим различными функциональными механизмами, а иногда и "разномасштабными" технологиями. Такая ситуация называется несоответствием импеданса.

Для решения проблемы несоответствия импеданса приходится дополнять реализуемую модель данных неестественными для нее объектами и операциями над ними с тем, чтобы синхронизировать обработку данных в прикладной программе и механизмы управления данными в СУБД. Следствием ее часто бывает и недостаточно высокая производительность всего комплекса системы базы данных, не поддающегося оптимизации именно в силу его неоднородности.