¿No usar sentencias SQL al programar mis aplicaciones contra una base de datos?

La mayoría de las herramientas del mercado requieren el uso de sentencias SQL para atacar bases de datos y realizar consultas o modificar la información.

En los últimos años se ha trabajado en la búsqueda de alternativas que faciliten la labor de programación de acceso a la información, como ejemplo pongo a continuación un extracto sacado de una página de MSDN del proyecto LINQ:

Consultas integradas en los lenguajes .NET

Después de dos décadas, la industria ha alcanzado un punto estable en la evolución de las tecnologías de programación orientada a objetos. Los programadores ahora están familiarizados con conceptos como las clases, objetos y métodos. Analizando la generación de tecnologías actual y siguiente, se hace evidente que el siguiente gran reto para la tecnología de la programación es reducir la complejidad del acceso e integrar la información que no se define de manera nativa utilizando la tecnología orientada a objetos. Las dos fuentes de información no orientadas a objetos más comunes son las bases de datos relacionales y XML.

En vez de añadir características específicas para el tratamiento de datos relacionales o XML a nuestros lenguajes de programación y motor de ejecución, con el proyecto LINQ hemos seguido un enfoque más general, y estamos añadiendo a .NET Framework facilidades de consulta de propósito general aplicables a todas las fuentes de información, y no solo a los datos relacionales o XML. Esta facilidad se llama ‘Consultas integradas en los lenguajes’ (Language Integrated Query – LINQ).

En Velneo ahora y desde 1996 cuando vió la luz el proyecto “Velázquez Visual” los programadores han desarrollado aplicaciones empresariales sin necesidad de utilizar sentencias SQL.

La base de datos modelo real de Velneo en este sentido se comporta de forma diferente a las bases de datos relacionales ya que todos los enlaces que se definen en la estructura de la base de datos entre las tablas tienen las siguientes características:

  • Son permanentes
  • Sólo se definen una vez
  • Permiten el acceso a todas las tablas enlazadas.
  • Dispone de enlaces en todas las direcciones:
    • A maestros: Enlace a tabla maestra.
    • A históricos: Singular de plural por índice, singular de plural por posición.
    • A registros de la propia tabla: Enlace a si misma, enlace a registros contiguos.
    • A cualquier tabla: Resolviendo cualquiera de sus índices de clave única.

A continuación podemos ver como tras una definición de estructura de base de datos, acceder a la información resulta sencillo, intuitivo y rápido. Sin escribir código, visualmente. En la siguientes imágenes vemos a la izquierda el esquema de tablas de una aplicación de facturación y a la derecha como visualmente un programador selecciona el nombre del país, de la marca, del artículo de la línea de una factura, es decir, atrapa el valor de un campo correspondiente a una tabla que esta a nivel de enlaces a 3 maestros o lecturas de distancia, en este caso ya que Velneo no pone límites al número de niveles.

Cuando se gestionan datos en los procesos, el programador dispone de sentencias especializadas que no requieren el uso de sentencias SQL y que facilitan la programación. En las siguientes imágenes podemos observar como el editor de procesos en función de si la instrucción tiene origen ficha de tabla o lista de tabla permite seleccionar funciones especificas asistiendo al programador en todo momento y evitando errores.

En la imagen siguiente podemos ver un ejemplo de un proceso desarrollado en Velneo:

Con esto no quiero indicar que SQL no tenga ventajas, al contrario, tiene y muchas, tal vez el problema haya sido la evolución de su implentación en los lenguajes de programación que durante mucho tiempo ha seguido requiriendo el uso de las sentencias WHERE y un mayor esfuerzo por parte del programador.

Cuando conoces Velneo por primera vez y estás acostumbrado al uso de SQL te puede resultar extraño no tener que crear ninguna sentencia para programar el acceso a la información, pero es fácil acostumbrarse a Velneo y sus ventajas.

 

Etiquetas: base de datos, , , , , , , , ,

Valorar la entrada
1 Puntos2 Puntos3 Puntos4 Puntos5 Puntos
(3 voto(s), 5,00 sobre 5)

Comentarios

  • David Martín
    Julio 29, 2008 - 19:53 #

    Muy, muy bueno este post Sr. Arboleya. En serio, he aprendido muchas cosas, bueno más bien he aclarado muchos conceptos que tenia algo difusos. ¡Muchas gracias, en serio!

    Valora este comentario: (1 voto, media: 5 de 5)
  • Manuel Tovar
    Julio 30, 2008 - 07:26 #

    Poderosa herramienta. Con razón se podría decir que Velneo es antes que nada (y entre otras cosas) una base de datos que facilita objetos visuales para su administración y explotación. Todas las bases de datos hacen más o menos lo mismo, pero en todas hay que conocer el SQL, lo cual requiere de un esfuerzo inicial además que todos los motores no siguen la misma sintaxis en las instrucciones. Sin embargo creo que conocer bien SQL es casi un lenguaje de programación por si mismo y de una tremenda utilidad. En ese sentido, si no disponemos en Velneo de SQL ¿qué ocurre en un caso como el que detallo a continuación?

    Me llama la atención una característica de Velneo mencionada en el artículo: los enlaces son permanentes.

    En ese sentido se me presenta una duda: Hay ocasiones en que una determinada consulta es circunstancial: responde a una necesidad muy puntual de un usuario (quizás algo caprichoso o “descerebrado”), por ejemplo, alguien solicita la relación de los productos vendidos por cliente pero consolidados por producto (el total de las unidades vendidas de cada producto) y ordenados de forma decreciente por el número de unidades vendidas en un periodo. A casi nadie se le ocurre armar una tabla de acumulados ni siquiera crear indices en las tablas de ventas pues se trata de una solicitud circunstancial, que lo más probable nunca vuelvan a pedir y que no importa que demore 30 ms o 2 minutos en procesarse pues no se va a repetir. Lo normal es utilizar una instrucción SQL que sería algo así más o menos:

    SELECT nombre_cliente, nombre_producto, SUM(unidades) AS cantidad

    FROM ventas LEFT JOIN clientes ON ventas_cliente = clientes_codigo LEFT JOIN productos ON ventas_producto = productos_codigo

    WHERE fecha_venta >= fecha1 AND fecha_venta <= fecha2

    GROUP BY nombre_cliente, nombre_producto, cantidad DESC

    En la primera línea se seleccionan los campos y se totalizan las unidades
    En la segunda línea se selecciona la tabla origen y se relaciona (temporalmente) la tabla de ventas con la de clientes y con la de productos para sacar los nombres en lugar de los códigos
    En la tercera línea se selecciona el periodo a considerar
    En la cuarta línea se indica que agrupe los datos resultantes y los ordene por nombre del cliente, nombre del producto y cantidades vendidas (descendente este último campo), es decir el producto más vendido el primero.

    y ya está. Desde cualquier programa administrador del motor de base de datos se puede ejecutar la consulta, el resultado se imprime, se exporta a Excel o lo que sea y se le entrega al solicitante. la sentencia se borra y no hemos tenido que modificar nada en la base de datos, no hay índices ni acumulados que quizás no vamos a volver a utilizar y que “pesan” en la base de datos, ni siquiera queda rastro de la solicitud. ¿Cómo se aborda este tipo de tareas en Velneo?, ¿con procesos?. Veo que V7 ya tiene un dataClient que permite moverse en las bases de datos, tablas y manipularlas. ¿Cómo hacen eso en V6?. ¿Tienen que crear objetos visuales para obtener el resultado de la consulta (o proceso)?.

    Quiero aclarar que la intención de este post no es polemizar, sino intentar tener las ideas claras sobre las ventajas y desventajas de la herramienta. No se a qué grupo pertenezco de los que habla Alfonso Gutierrez en el anterior post, creo que soy del grupo de los “duros de decidirse” o de los “brutos de entender”.

    Saludos cordiales a todos

    Manuel Tovar
    Barranquilla – COLOMBIA

    Valora este comentario: (1 voto, media: 5 de 5)
  • psuarez
    Julio 30, 2008 - 09:49 #

    Manuel, estoy totalmente de acuerdo con tu post sobre consultas de agrupación. Este de momento es para mi uno de los puntos flacos de Velneo que se podrían mejorar. Un intento tímido, aunque insuficiente, ha sido el objeto de hoja de cálculo. Si esta tuviese la visualización y propiedades de una rejilla sería mucho más potente.

    Saludos.

    Valora este comentario: (1 voto, media: 5 de 5)
  • jarboleya
    Julio 30, 2008 - 09:56 #

    Gracias por tu comentario Manuel,

    Tu pregunta me parece muy interesante, voy a intentar darte mi visión sobre lo que preguntas.

    Lo primero me gustaría comentarte que Velneo, desde mi punto de vista no es sólo una base de datos que facilita objetos visuales (aunque entiendo que la puedas ver así). Creo que Velneo es la integración de una base de datos, un lenguaje (herramienta) de programación de alto nivel y todos los recursos necesarios para la programación e implantación de aplicaciones. Por ese motivo la consideramos una “plataforma de desarrollo de aplicaciones empresariales”.

    Cuando digo enlaces permanentes me refiero a:

    1º) Sólo se crean una vez.
    2º) No requiere como ocurre en las sentencias SQL que continuamente estés resolviendo el enlace entre 2 tablas con la cláusula WHERE o JOIN pese a que habías definido en la estructura de la base de datos esa relación.

    Por eso cuando digo que son permanentes me refiero a que realmente persisten y sólo es preciso declarar la relación de las tablas una única vez.

    Sobre el ejemplo que propones te hago los siguientes comentarios:

    1º) Supongo que la sentencia que has escrito estás valorando que lo haga un programador. Es cierto que existen usuarios finales avanzados (pero son un minoría), por lo que pese a tener SQL cuando un usuario final necesite conseguir esa información salvo ese grupo de avanzados tendrá que recurrir a los servicios de un programador que puede estar en su empresa o ser un proveedor de servicios lo que supone tiempo y coste.

    2º) Un usuario final de una aplicación en Velneo sin necesidad de escribir SQL y sin conocer los nombres de los compos podría hacer uso de la navegación y obtener la lista de registros de la siguiente forma:

    - Busca el cliente y obtiene una rejilla con ese registro.
    - Navega a histórico de documentos de venta de ese cliente y obtiene la lista de facturas, por ejemplo.
    - Filtra entre fechas estos documentos utilizando la opción que existe en el vClient y vRunner, sin necesidad de usar ningún índice especial para el caso ni tampoco de código programado.
    - Navega a histórico de todas las líneas de venta y obtiene la lista de registros que quiere.
    - Lo más habitual (salvo que el número de artículos sea muy grande >40, por ejemplo, tiene una opción automática que es multipartir lista. En este caso por artículo y al hacerlo obtendrá tantas rejillas como artículos diferentes hay en la lista obtenida y en la rejilla de líneas de factura suelen estar totalizados los campos cantidad e importe por lo que obtiene las cantidad vendidas por cada uno, el importe vendido entre las fechas seleccionadas.

    Piensa que lo importante de esta solución aunque no es la que planteas al 100%, pues falta el resumen con todos los sumatorios de cada artículo, es muy utilizada por los clientes finales y, sobre todo, puede hacerlo ellos sin necesidad de recurrir a un programador.

    3º) Igual que en el caso anterior, una vez obtenida la lista de líneas de venta se puede exportar la lista a ASCII e importarla en Excel y obtener el informe a partir de esta información. Esto también lo puede hacer el usuario final sin necesidad de recurrir a un programador y sí es equivalente a lo que propones. De todas formas, es cierto, que un usuario que sabe navegar, exportar y usar así Excel ya es un usuario de cierto nivel, muchos usuarios seguro que recurrirían a un programador para obtenerlo.

    4º) Es cierto que con Velneo 6.x no podemos obtener directamente un sumatorio con la navegación. Esta característica de las sentencias SQL es muy potente como comentas, por eso es un Lenguaje de Consulta. En Velneo V7 dispondrás de ODBC y sí podrás hacer sentencias SQL contra la base de datos de Velneo obteniendo el sumatorio de un campo. Por eso en el artículo comento que SQL tiene muchas virtudes y también por ese motivo en Velneo V7 le hemos dado mucha importancia a que los programadores y los usuarios puedan tener un ODBC que les permita hacer consultas y operaciones con SQL.

    5º) Si te das cuenta al final de todo hablas de que el resultado hay que imprimirlo o enviarlo a Excel. En el caso de la Excel ya está comentado en el punto 3. En el caso del informe en Velneo existe un editor de informes personalizados, que es gratuito y de libre distribución para poder instalarlo en los clientes finales. Es decir, un programa que permite a los programadores y a los usuarios finales (avanzados) crear nuevos informes (fuera de la aplicación) es decir, se puede personalizar cualquier informe de la aplicación o crear nuevos informes sin tocar el código fuente de la aplicación. De esta forma nuestro cliente podría crear un informe con la agrupación por artículo y un cálculo para acumular las cantidades y ese informe ejecutarlo desde la rejilla de líneas de venta obtenida en el punto 2. Si quiere el informe lo puede dejar para reutilizarlo o eliminarlo ya que el fichero de personalización se gestiona de forma independiente.

    Resumiendo, estamos de acuerdo que siempre habrá cosas que se puedan hacer con SQL y que en Velneo resulten más complejas o puedan requerir programación y viceversa, pero para la gran mayoría del trabajo de programación que un desarrollador realiza las ventajas de no tener que crear sentencias SQL es, siempre desde mi punto de vista, muy muy ventajoso y rentable.

    Saludos.

    Valora este comentario: (2 votos, media: 3.5 de 5)
  • Manuel Tovar
    Julio 30, 2008 - 16:22 #

    Gracias Jesús por tu respuesta. Muy detallada. El programador de informes es una muy buena utilidad que no todos las herramientas tienen. No entiendo por qué. En VFP puedes dejar que el usuario final modifique el informe pero no crear informes nuevos ni nada de eso. Me parece que esa si es una ventaja muy importante.

    En efecto la sentencia del ejemplo no es para usuario final. Es para programador. Yo particularmente, en algunas aplicaciones, lo que hago es colocar un formulario para que el usuario final coloque la lista de los campos que desea obtener, los rangos de búsqueda y condiciones de búsqueda, los totales que desea y yo, por programación, le genero la sentencia SQL que luego ejecuto de forma transparente para el usuario. Es decir, un generador de sentencias SELECT. Es un proceso más o menos complejo. Una vez que funciona es muy práctico, pero es complejo de poner a punto.

    Gracias de nuevo por tus explicaciones. Me han ampliado mi visión de Velneo.

    Saludos cordiales

    Manuel Tovar
    Barranquilla – COLOMBIA

    Valora este comentario: (2 votos, media: 5 de 5)
  • jarboleya
    Julio 30, 2008 - 17:17 #

    Gracias a tí Manuel,

    Efectivamente eso que comentas de programarse un generador de consultas para el usuario final es algo para lo que Velneo 6.x no está pensado y su desarrollo sería mucho más laborioso de lo que comentas en VFP.

    Como te comentaba Velneo V7 nace con una visión abierta hacia los estándares, con el driver ODBC desde su primera versión y con previsión de soportar plugins y controles de terceros en futuras versiones a través de su API.

    Si analizamos la filosofía del Velneo, ese generador de consultas debería ser una herramienta implícita en el ejecutor sin necesidad de programación. No es la primera vez que se plantea y tomamos buena nota para, quien sabe, en el futuro disponer de esta funcionalidad de forma automática o a través de un plugin.

    Saludos.

    Valora este comentario: (3 votos, media: 4.3 de 5)
  • Victor
    Julio 31, 2008 - 12:09 #

    No se puede comparar la tecnología LINQ con el metodo de aceso a datos usado por Velneo.

    Es cierto que Velneo permite aceso a datos sin usar sentencias SQL lo cual tiene una parte muy positiva pero tambien una negativa, esta fuera de todo standard.

    LINQ es un paso más de SQL con un objetivo claro de acceso a datos y tratarlos de forma única sea cual sea su origen, por ejemplo XML. Esto aún no lo podemos realizar con Velneo, aunque si podemos realizarlo via programación.

    El modelo de acceso a datos de Velneo como bien dices data de 1996 y que a mi se parece muy bueno, apesar de lo que he comentado, creo que necesita algún paso más en V7.

    Un saludo

    Valora este comentario: (1 voto, media: 5 de 5)
  • RolandoCF
    Julio 31, 2008 - 16:13 #

    De hecho, Victor, por lo visto en la Beta Pública, se ve que se están haciendo avances en ese sentido. Lo que me llama mucho la atención, y no lo digo por ti, es ese afán de comparar y/o tratar de empatar herramientas de desarrollo, cuya naturaleza o concepción es intrinsecamente diferente. Lo que nos debiera ocupar a todos, es que la herramienta que pretendamos usar para nuestro trabajo, posea los atributos que necesitamos en una implantación real. Como es sabido, existen otros factores variables, que influyen a la hora de tomar la decisión, tales como complejidad de la tecnología, el nivel de preparación del usuario final, la dificultad de adaptación de las personas que trabajarán con el software, que suman a los costos de implementar la solución, más los inherentes a la escalabilidad del producto creado y sus mantenciones… En fin, mucho en qué pensar.

    Desde el hijo predilecto de Ashton Tate, a principios de los ‘80, dBase, la presencia de un lenguaje de consulta, ha formado el pilar de todo administrador de Bases de Datos. Es innegable que SQL predomina, como un estándar y al alcance de todos, pero, aunque pensemos que hoy estamos más adaptados a la tecnología emergente, siempre habrá personas que recurrirán a un experto: Analista-Programador, para encargarle una tarea sobre los datos de su sistema, no por desconocimiento de SQL, sino por que no tiene el tiempo para hacerlo. Ustedes saben lo que implica hacer una consulta a una BD con varias tablas y relaciones: pensar en lo que se quiere, buscar la info en las tablas, crear la consulta, probar, depurar la consulta, traspasar a informe, archivo o Excel y volver a procesarle… Definir el layout óptimo del informe… Comprobar que se está haciendo lo correcto… y más.

    Con Velneo: Qué se quiere, un vistazo a la estructura de la BD, crear la búsqueda, otro índice, formulario y/o rejilla, y listo. Casi de un plumazo.

    Sea como se quiera ver el tema, siempre van a recurrir a alguien más para hacer dicha labor. Dichosos aquellos usuarios que disponen de suficiente tiempo para hacerlo…

    Saludos,

    Rolando.

    Valora este comentario: (1 voto, media: 1 de 5)
  • danie-esceptico
    Agosto 1, 2008 - 21:56 #

    Amigo que usas SQL olvídate de manejar la tabla a tu antojo. Velneo es rígido, muchos informes de filas y columnas que ahora tal vez desarrollas no los podrás hacer de manera sencilla. Precisamente lo que le falta a la base de datos de veleno es eso: SQL.
    Ejemplo:
    Tabla con IDMES, Ventas mensuales euros,vendedor, zona, familia (muy simple).
    Ahora quiero en las columnas la Zona y en las filas el vendedor para el año 2007.
    Luego quiero en las filas con IDMES y Vendedor, en las columnas la familia, con subtotal por año.
    Luego…………….
    Con SQL: dos minutos y solucionado.
    Con Velneo: dos días y si lo consigues me lo cuentas

    Saludos.

    Valora este comentario: (3 votos, media: 2.3 de 5)
  • RolandoCF
    Agosto 2, 2008 - 05:07 #

    Danie-esceptico:

    “Dos días”… ¿Estás seguro que te toma 2 DIAS? No lo creo.

    RolandoCF-esceptico-de-Danie-esceptico.

    Saludos.

    Rolando.

    Valora este comentario: (1 voto, media: 1 de 5)
  • RolandoCF
    Agosto 2, 2008 - 05:17 #

    P.D.: Mi mensaje anterior fue breve, por las carcajadas que me han descompuesto un rato.

    Danie-esceptico: Para que te tomes 2 días hacerlo en Velneo, es porque te lo piden el Viernes a última hora, todos se fueron de finde y no trabajan ni Sábado y Domingo, por lo que debes tenerlo para el lunes…

    ¿2 minutos en SQL? Eres un as en SQL, entonces. Yo llevo más de 10 años trabajando en SQL, en consultas con varios JOIN y tablas con mas de 3.000.000 de registro y algunas con más de 50 campos. Las consultas más sencillas hacían JOIN entre 4 o 5 tablas… Y sea usando un asistente como el que trae AS400 o “picando” sentencia SQL, me tomaba unos 5 minutos escribirlo y luego, dependiendo de la carga de trabajo en el servidor y la complejidad de la consulta, tomaba entre 1 a 15 minutos para ver resultados…, en red local.

    Valora este comentario: (1 voto, media: 1 de 5)
  • RolandoCF
    Agosto 2, 2008 - 05:27 #

    Danie-esceptico:

    El lunes, al llegar (continuación) y mientras te preparas el café en la ofi, te haces la consulta con Velneo y, más encima, el resultado te lo imprimes reutilizando los informes que ya has creado… Con SQL, ¿lo imprimes a secas o usas Excel (para variar) para procesar lo último que te falta?…

    ¡Caramba! Cómo me ha calentado este tío…

    Ruego me disculpen, pero hay días y temas… Por favor, si hablais de SQL…, que sea con fundamentos… ¡2 minutos! ¡El computador es telépata…!

    Rolando.

    Valora este comentario: (2 votos, media: 3 de 5)
  • Manuel Tovar
    Agosto 2, 2008 - 16:17 #

    RolandoCF, las opiniones son como los ombligos: todos tenemos uno y todas son respetables. Yo hice el primer comentario porque realmente quería saber cómo se abordan esas consultas ocasionales en Velneo. No sabía de la dificultad aunque algo suponía. Jesús Arboleya explicó amablemente la manera de hacerlo y Danie-esceptico expresó su libre opinión sobre el tema, al igual que otros. Eso es válido y enriquece. Ayuda a comprender la herramienta, al novato como yo y al que la usa hace tiempo como tú. Comparar con otras herramientas ayuda a entenderla mejor, a conocer sus limitantes, sus ventajas, etc. y además compararla con otras es inevitable. Descalificar lo afirmado por un participante y reírse de él porque no estás de acuerdo sin esgrimir argumentos empobrece el debate, no ayuda a nadie y molesta a muchos.

    Saludos cordiales
    Manuel Tovar
    Barranquilla – COLOMBIA

    Valora este comentario: (1 voto, media: 5 de 5)
  • RolandoCF
    Agosto 2, 2008 - 17:49 #

    Sí, Manuel Tovar: tienes toda la razón. Me he portado mal y reconozco mi mala disposición respecto al tema. No voy a entrar a discutir el porqué, las justificaciones agravan las faltas y yo, no veo ninguna válida para respaldar mi actitud. Me disculpo y pido perdón a todos por este exabrupto, que hasta a mí me ha dejado sorprendido. Particularmente a danie-esceptico, que no justifica mi reacción a sus palabras. Ojalá él pueda leer mis palabras y mi arrepentimiento por lo dicho.

    Rolando.

    Valora este comentario: (7 votos, media: 4.4 de 5)
  • Manuel Tovar
    Agosto 2, 2008 - 18:42 #

    Gracias RolandoCF. Tu actitud te honra y de paso a este blog, creo yo.

    Saludos cordiales
    Manuel Tovar
    Barranquilla – COLOMBIA

    Valora este comentario: (3 votos, media: 5 de 5)
  • Oscar
    Abril 3, 2009 - 06:40 #

    Señores, Velneo es la Herramienta de desarrollo del Futuro!, desde que lo conozco (6 meses) ya he realizado 4 proyectos distintos, todos han salido de maravilla los clientes conformes, y de verdad que no requiere tanto esfuerzo como otras herramientas de desarrollo. Espero con ansias la version V7.
    Saludos

    Oscar.

    Valora este comentario: (2 votos, media: 5 de 5)

Comentar

Cerrar
Enviar por Correo