Consultando Json en columna de bases de datos relacionales. Haciendo consultas a Json en Oracle

0
12729

Consultando Json en columna de bases de datos relacionales. Haciendo consultas a Json en Oracle

Estamos acostumbrados a pensar en modelos relacionales para nuestros sistemas y en el camino tenemos el problema de diccionarios y estructuras que no queremos guardar en una columna hasta que pensamos que sería ideal guardar y consultar datos no relacionales y que mantengan una estructura variable como Json.

Esta pregunta en la mayoría de casos se responde en bases de datos no relacionales y a su vez en estructuras Json para explotar sus múltiples ventajas y sencillez.

Pero no existe solamente esta respuesta. También podemos lograrlo desde nuestro contexto relacional.

Hoy les traemos una implementación de persistencia y consulta de Json en columnas de Bases de Datos Relacionales de Oracle.

Esta es una serie de artículos que ejemplifican cómo utilizar Json en Bases de datos Oracle, Mysql y Postgres.

A partir de la versión Oracle Database 12.1.0.2 brinda soporte para persistencia de Json dentro de bases de datos relacionales.

Es importante aclarar que en Oracle no existe un tipo Json nativo pero estas versiones incorporaron soporte a partir de funciones nativas.

Para este artículo utilizamos como ejemplo el siguiente modelo.

Debemos implementar un sistema que permita guardar información relativa a una Persona y los registros de las Pesadas que se realiza la misma en balanzas para darle seguimiento a un plan de dieta saludable.

Teniendo esta información vamos a necesitar consultar como va el plan de dieta de cierta Persona y su progreso a partir de la información de las pesadas. Además necesitamos el peso promedio de las personas asociadas al sistema.

Model uml

 

Las pesadas tienen la siguiente información.

 

Primero vamos a crear la consulta para persistir este modelo.

En la creación de la tabla podemos notar que Pesadas es CLOB. Recordando que Oracle no tiene tipo de dato nativo para Json, normalmente debemos utilizar un tipo de dato que permita almacenar gran volumen de datos por eso elegimos CLOB.

 

Luego, debemos crear una CONSTRAINT para que Oracle valide PESADAS como un Json. Esto impedirá que tengamos en el campo PESADAS json no válidos.

 

Ya tenemos el modelo en Oracle.
Insertemos datos de prueba:

 

Ahora vamos a consultar como va el plan de dieta de “Alam” y su progreso a partir de la información de las pesadas.

Resultado:

 

En esta consulta hemos utilizado la función JSON_TABLE para consultar valores de un arreglo dentro de un Json.

Podríamos además consultar el peso promedio de las personas que acuden al sistema.

 

Resultado

 

En la consulta que vemos, utilizamos la función JSON_VALUE para obtener un elemento del Json y luego le hacemos avg para el promedio.

 

Ventajas

  1. A partir de la versión Oracle 12.1.0.2 podemos consultar Json en base de datos relacionales sin utilizar otros tipos de almacenamiento.
  2. Utilizando las funciones de Oracle para Json, las consultas son rápidas y emulan comportamientos relacionales.
  3. Las consultas SQL a Json son muy similares a las de otros motores como Mysql o Postgres.
  4. Los campos internos de Json son indexables para ganar en performance.

Desventajas

  1. Las versiones anteriores de Oracle 12.1.0.2 no cuentan con todo el potencial descrito.
  2. Las funciones de Oracle para Json necesitan un estudio previo para su utilización.
  3. Las funciones de Json en base de datos relacionales varían para Oracle, Mysql o Postgres.
  4. Algunos framework no brindan soporte para funciones de Json, por lo que se deben ejecutar consultas nativas.

Conclusiones

En el presente artículo hemos mostrado cómo crear y consultar campos Json en una base de datos relacionales Oracle. A partir de esto tenemos la oportunidad de darle mayor valor y protagonismo a nuestras bases de datos. En próximos artículos estaremos ejemplificando cómo mejorar la performance de las consultas Json e implementar y consultar Json en bases de datos Mysql o Postgres.

Dejar respuesta

Please enter your comment!
Please enter your name here