- Principios de las operaciones de base de datos en MQL5
- Conceptos básicos de SQL
- Estructura de las tablas: tipos de datos y restricciones
- POO (MQL5) e integración SQL: concepto de ORM
- Crear, abrir y cerrar bases de datos
- Ejecutar consultas sin enlace de datos MQL5
- Comprobar si una tabla existe en la base de datos
- Preparar consultas vinculadas: DatabasePrepare
- Borrar y reiniciar consultas preparadas
- Vincular datos a parámetros de consulta: DatabaseBind/Array
- Ejecutar consultas preparadas: DatabaseRead/Bind
- Leer campos por separado: funciones DatabaseColumn
- Ejemplos de operaciones CRUD en SQLite mediante objetos ORM
- Transacciones
- Importar y exportar tablas de bases de datos
- Imprimir tablas y consultas SQL en registros
- Ejemplo de búsqueda de una estrategia de trading mediante SQLite
POO (MQL5) e integración SQL: concepto de ORM
El uso de una base de datos en un programa MQL implica que el algoritmo se divide en 2 partes: la parte de control se escribe en MQL5, y la parte de ejecución se escribe en SQL. Como resultado, el código fuente puede empezar a parecer un mosaico y requerir atención para mantener la coherencia. Para evitarlo, los lenguajes orientados a objetos han desarrollado el concepto de mapeo objeto-relacional (ORM, por sus siglas en inglés), es decir, el mapeo de objetos a registros de tablas relacionales y viceversa.
La esencia del enfoque consiste en encapsular todas las acciones del lenguaje SQL en clases/estructuras de una capa especial. Como resultado, la parte de aplicación del programa puede escribirse en un lenguaje puramente POO (programación orientada a objetos), como por ejemplo, MQL5, sin distraerse con los matices de SQL.
En presencia de una implementación ORM completa (en forma de «caja negra» con un conjunto de todos los comandos), un desarrollador de aplicaciones generalmente tiene la oportunidad de no aprender SQL.
Además, ORM permite cambiar «imperceptiblemente» el «motor» del SGBD si es necesario. Esto no es particularmente relevante para MQL5, porque solo la base de datos SQLite está integrada en él, pero algunos desarrolladores prefieren utilizar DBMS completos y conectarlos a MetaTrader 5 mediante la importación de DLLs.
El uso de objetos con constructores y destructores es muy útil cuando necesitamos adquirir y liberar recursos automáticamente. Hemos tratado este concepto (RAII, Resource Acquisition Is Initialization) en la sección Gestión de descriptores de archivos; sin embargo, como veremos más adelante, el trabajo con la base de datos también se basa en la asignación y liberación de distintos tipos de descriptores.
En la siguiente imagen se muestra esquemáticamente la interacción de diferentes capas de software al integrar la programación orientada a objetos (POO) y SQL en forma de ORM.
ORM, Mapeo Objeto-Relacional
Además, un «envoltorio» de objetos (no sólo un ORM específico de la base de datos) automatizará la preparación y transformación de los datos, además de comprobar su corrección para evitar algunos errores.
En las siguientes secciones, mientras recorremos las funciones integradas para trabajar con la base, implementaremos los ejemplos, construyendo gradualmente nuestra propia capa ORM sencilla. Debido a algunas especificidades de MQL5, nuestras clases no podrán proporcionar un universalismo que cubra el 100 % de las tareas, pero serán útiles para muchos proyectos.