Общие сведения о QL

Завершено

QL — это декларативный объектно-ориентированный язык запросов, оптимизированный для эффективного анализа иерархических структур данных; В частности, базы данных, представляющие артефакты программного обеспечения.

База данных — это организованная коллекция данных. Наиболее часто используемая модель базы данных — реляционная модель, которая хранит данные в таблицах. SQL (язык SQL) — это наиболее часто используемый язык запросов для реляционных баз данных.

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

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

В этом уроке вы узнаете о основных функциях языка программирования QL, чтобы вы могли писать собственные пользовательские запросы или лучше понимать существующие доступные запросы с открытым исходным кодом.

Синтаксис QL

Синтаксис QL аналогичен SQL. Однако семантика QL основана на datalog, декларативном языке программирования логики часто используется в качестве языка запросов. В связи с этим QL преимущественно используется как язык логики, а все операции в QL являются логическими. Кроме того, QL наследует рекурсивные предикаты из журнала данных и добавляет поддержку агрегатов, что делает даже сложные запросы краткими и простыми. Например, рассмотрим базу данных, содержащую связи типа "родители — потомки" для людей. Если вы хотите найти число потомков человека, обычно вы:

  1. Найдите потомка данного человека; то есть ребенок или потомок ребенка.
  2. Подсчитать количество потомков, найденных с помощью предыдущего шага.

При написании этого процесса в QL она очень похожа на описанную структуру. Обратите внимание, что для поиска всех потомков данного лица в примере используется рекурсия, а для подсчета количества потомков — статистическое выражение. Перевод этих шагов в окончательный запрос без добавления сведений о процедуре невозможен из-за декларативной природы языка. Код QL должен выглядеть следующим образом:

Person getADescendant(Person p) {
  result = p.getAChild() or
  result = getADescendant(p.getAChild())
}

int getNumberOfDescendants(Person p) {
  result = count(getADescendant(p))
}

Ориентация на объекты

Важная особенность QL — объектная ориентация. Преимущества ориентации объектов хорошо известны. Он увеличивает модульность, включает скрытие информации и позволяет повторно использовать код. QL предоставляет все эти преимущества без ущерба для своей логической основы. Это достигается путем определения простой объектной модели, в которой классы моделируются в виде предикатов, а наследование осуществляется как импликация. Библиотеки, доступные для всех поддерживаемых языков, позволяют широко использовать классы и наследование.

QL и языки программирования общего назначения

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

  • QL не имеет каких-либо императивных функций, таких как назначения переменным или операциям файловой системы.
  • QL работает с наборами кортежей, и запрос можно рассматривать как сложную последовательность операций набора, определяющих результат запроса.
  • Семантика на основе набора QL делает ее очень естественной для обработки коллекций значений, не беспокоясь о эффективном хранении, индексировании и обходе их.

В объектно-ориентированных языках программирования создание экземпляра класса подразумевает создание объекта путем выделения физической памяти для хранения состояния этого экземпляра класса. В QL классы — это просто логические свойства, описывающие наборы уже существующих значений.