martes, 11 de agosto de 2015

Constructor de Consultas SQL (genera tus propios informes de detalle simple)


Hoy les dejo un trabajo que hice hace un tiempo, con el objetivo de que los usuarios finales puedan generar sus propias consultas a las base de datos, sin tener los conocimientos (obvio, no poseen conocimiento del modelo de datos y acceso a la base de datos) adecuados del Lenguaje de consulta estructurado (SQL), muy famoso para recuperar datos desde una sistema de gestor de base de datos. (por ejemplo, oracle, informix, sql server, mysql, postgresql, sybase, etc)

Existen algunos escenarios comunes que suceden cotidianamente en la mayoría de las empresas, primero los usuarios finales obtienen información a partir de los sistema de información y en caso que no puedan disponer de esta información, el área de sistemas debe modificar el sistema o generar el informe deseado. Algunas empresas disponen de un Data Warehouse, pero no todos los usuarios pueden acceder o simplemente la empresa no cuenta con un Sistema de Procesamiento Analítico en Línea OLAP.  

Entonces mi humilde aporte fue desarrollar un sistema en ambiente WEB y en PowerBuilder, que permita generar consultas dinámicas (SQL)  en donde el usuario final selecciona las entidades (tablas) que el desea y de estas sus atributos o propiedades (campos)  y el sistema se encarga de identificar las relaciones entre las entidades. Para ello, tuve que buscar lo siguiente en el estado del arte:

  • Modelo de Información denominado Metamodelo, que nos permite registrar los modelos conceptuales de una base de datos, teniendo el dominio del repositorio. Acá se facilita la modelización del conocimiento de la información en forma de dominios independientes y sus relaciones entre los elementos de dichos dominios. (ver figura 1)
  • Diseñar la arquitectura del sistema.
  • Tener mis Stakeholders que me apoyarían en este trabajo.
Veamos algunos conceptos

Un metamodelo describe el contenido de un modelo bien formado. Un modelo de datos permite definir las necesidades de información de su organización. 

Metamodelo = un modelo de información para describir modelos.

Los modelos de información que se tiene en la empresa se pueden representan internamente en un metamodelo, registrando el nombre del modelo, sus entidades, los atributos de las entidades y  sus relaciones, en otras palabras, podemos describir explícita mente la forma de representar un modelo de información expresado en términos de sus entidades, atributos y relaciones mediante otro conjunto de entidades, atributos y relaciones.


Figura 1

En la figura 1, se tiene un Ámbito Cognitivo  : Donde se modeliza el conocimiento del dominio de un modelo independiente.y un Ámbito Estructural: Donde se describe el tipo de escenario que soportará el  constructor de consulta representado en un tecnología independiente de la base de datos.

Tengo dos formas para exponer lo que explico, primero es la creación de un modelo genérico para la representación de dominios de conocimiento sobre un modelo. Segundo, es la de representar el conocimiento del modelo  concreto utilizando el modelo genérico de la figura 2.:


Figura 2: Modelo genérico

Un modelo genérico de conocimiento va a permitir conocer el Nivel de conceptualización, el acceso a los elementos de Conocimiento del dominio de forma flexible. Los modelos de  Información genéricos pueden servir para crear dominios de Información que describan toda la actividad asociada a un  Entorno de necesidad de información de una organización.

Como hemos visto, un modelo genérico nos permitirá representar y registrar elementos de conocimiento, es decir, con esto podemos representar entidades, relaciones y atributos que forman un esquema de base de datos más sencillo frente a  otros esquemas.  (Los Lagos de datos o los data warehousing) jejeje.

Figura 3: formando la idea


Proceso de diseño del constructor de consulta

Figura 4: Esquematiza los dominios que modelizan nuestro análisis y estudio del tema.

Nacimiento del MetaModelo


Figura 5: Nacimiento del MetaModelo.
Metamodelo describe el contenido de un modelo bien formado


Los modelos de información que conocemos actualmente se pueden representan internamente en el metamodelo, registrando el nombre del modelo, sus entidades, los atributos de las entidades y  sus relaciones, en otras palabras, podemos describir explícitamente la forma de representar un modelo de información expresado en términos de sus entidades, atributos y relaciones mediante otro conjunto de entidades, atributos y relaciones. De esta forma y con este nivel de meta descripción podemos generar y realizar operaciones sobre los modelos. Nuestro metamodelo nos permitirá almacenar metaindividuos, metarrelaciones y metapropiedades. El ejemplo del modelo estará registrado en nuestro metamodelo para que nuestro Constructor de consulta pueda funcionar y así lograr nuestro objetivo.


Figura 6: Un modelo de datos físico


Las siguientes figuras  expresan todo lo anterior mencionado:

En la figura 7, el sistema lista las entidades que están en el metamodelo y el usuario selecciona las que desea consultar.


Figura 7: selección de entidades

Posterior a la selección,  me salto las condiciones de búsqueda o filtros y en  la figura 8, se lista como el sistema genera el SQL correspondiente apoyado con un algoritmo de heurística en base al metamodelo.


Figura 8: Consultor genera SQL 

Finalizando mi articulo puedo comentar que gracias a la conceptualización del modelo denominado metamodelo, podemos resolver  e independizar el conocimiento estructurado y utilizar técnicas y algoritmo precisos que nos aseguran una consulta SQL bien formada que finalmente nos traerá los datos necesarios que se almacenan en una base de datos. El usuario final no se preocupa de manejar el lenguaje de consulta SQL y le deja la tarea al sistema de seleccionar los caminos y accesos entre las entidades y atributos, buscando el mejor camino con el mínimo esfuerzo. Y ahorrar ya que este es un sistema desarrolla en NetBeans en Java Server Page y Tomcat como contenedor de servlets y servicio WEB.

Nos vemos :)
Más detalle a mi correo lpizarrofx@gmail.com

































Envió Correo en forma secuencial

Hola estimados(as) Hoy les dejo un código en Java que permite enviar correos, usando una base de datos, por ejemplo Mysql. Lo que adjunto...