¿Qué es QL?
QL es un lenguaje de consulta declarativo orientado a objetos optimizado para permitir el análisis eficaz de las estructuras de datos jerárquicas; en concreto de las bases de datos que representan artefactos de software.
Una base de datos es una colección organizada de datos. El modelo de base de datos más usado es un modelo relacional que almacena datos en tablas. SQL (Lenguaje de consulta estructurado) es el lenguaje de consulta más usado para bases de datos relacionales.
El propósito de un lenguaje de consulta es proporcionar una plataforma de programación donde pueda hacer preguntas sobre la información almacenada en una base de datos. Un sistema de administración de bases de datos administra el almacenamiento y la administración de datos, y proporciona el mecanismo de consulta. Normalmente, una consulta hace referencia a las entidades de base de datos pertinentes y especifica varias condiciones (denominadas predicados) que los resultados deben cumplir. La evaluación de consultas implica comprobar estos predicados y generar los resultados. Algunas de las propiedades deseables de un buen lenguaje de consulta y su implementación incluyen:
- Especificaciones declarativas: una especificación declarativa describe las propiedades que debe cumplir el resultado, en lugar de proporcionar el procedimiento para calcularlo. En el contexto de los lenguajes de consulta de base de datos, las especificaciones declarativas abstraen los detalles del sistema de administración de bases de datos subyacente y las técnicas de procesamiento de consultas. Esto simplifica significativamente la escritura de consultas.
- Expresividad: un lenguaje de consulta eficaz permite escribir consultas complejas. Esto permite que el lenguaje se pueda aplicar de forma amplia.
- Ejecución eficaz: las consultas pueden ser complejas y las bases de datos pueden ser muy grandes, por lo que es fundamental que la implementación de un lenguaje de consulta procese y ejecute consultas de forma eficaz.
En esta unidad, obtendrá información sobre las características básicas del lenguaje de programación QL para que pueda escribir consultas personalizadas propias o comprender mejor las consultas de código abierto disponibles que ya existen.
Sintaxis de QL
La sintaxis de QL es similar a la de SQL, pero la semántica de QL se basa en Datalog, un lenguaje de programación lógico declarativo que se usa a menudo como un lenguaje de consulta. Esto convierte a QL principalmente en un lenguaje lógico, y todas las operaciones de QL son operaciones lógicas. Además, QL hereda predicados recursivos de Datalog y agrega compatibilidad con agregados, lo que convierte las consultas complejas en concisas y sencillas. Por ejemplo, considere una base de datos que contiene relaciones de elementos primarios y secundarios para personas. Si desea encontrar el número de descendientes de una persona, lo normal es que:
- Busque un descendiente de esa persona, es decir, un hijo o un descendiente de un hijo.
- Cuente el número de descendientes encontrados mediante el paso anterior.
Al escribir este proceso en QL, se parece mucho a la estructura anterior. Observe que en el ejemplo se usa la recursividad para buscar a todos los descendientes de esa persona y un agregado para contar el número de descendientes. La traducción de estos pasos a la consulta final sin agregar detalles de procedimientos posiblemente se debe a la naturaleza declarativa del lenguaje. El código QL debería tener un aspecto parecido al siguiente:
Person getADescendant(Person p) {
result = p.getAChild() or
result = getADescendant(p.getAChild())
}
int getNumberOfDescendants(Person p) {
result = count(getADescendant(p))
}
Orientación a objetos
La orientación de objetos es una característica importante de QL. Las ventajas de la orientación a objetos son muy conocidas: aumenta la modularidad, permite ocultar información y permite reutilizar el código. QL ofrece todas estas ventajas sin poner en peligro su base lógica. Esto se logra mediante la definición de un modelo de objetos sencillo donde las clases se modelan como predicados y la herencia como implicación. Las bibliotecas disponibles para todos los lenguajes admitidos usan las clases y la herencia de forma amplia.
QL y lenguajes de programación de uso general
Estas son algunas diferencias conceptuales y funcionales destacadas entre los lenguajes de programación de uso general y QL:
- QL no tiene ninguna característica imperativa, como asignaciones a variables u operaciones del sistema de archivos.
- QL funciona en conjuntos de tuplas, y una consulta se puede visualizar como una secuencia compleja de operaciones de conjuntos que define el resultado de la consulta.
- La semántica basada en conjuntos de QL hace que sea muy natural procesar colecciones de valores sin tener que preocuparse de almacenarlos, indexarlos y atravesarlos de forma eficaz.
En los lenguajes de programación orientados a objetos, crear una instancia de una clase implica crear un objeto mediante la asignación de memoria física para contener el estado de esa instancia de la clase. En QL, las clases son meras propiedades lógicas que describen conjuntos de valores ya existentes.