Nuevas características

Funcionalidad EXPAND sobre entidades relacionales

Cuando trabajamos con bases de datos relacionales las Entidades/Ontologías de Onesait Platform se mapean a tablas, y las tablas se relacionan entre ellas (relaciones de tipo 1-1, 1-N, N-N). La Plataforma permite relacionar las Entidades mediante una nueva funcionalidad que hemos incorporado en esta versión 5.3.0-Ultimatela funcionalidad EXPAND.

Esta nueva funcionalidad nos va permitir que al hacer una consulta, inserción o actualización, automáticamente la Plataforma sepa cómo trabajar con las Entidades relacionadas con la Entidad padre y nos devuelva los datos de estas.

Esta funcionalidad es especialmente interesante para usar junto a los Formularios de Plataforma (OP Forms), ya que nos permite trabajar con diversas Entidades desde una misma interfaz de usuario.

¿Cómo usar la funcionalidad?

Para entender cómo funciona la funcionalidad de EXPAND, utilizaremos un ejemplo con las tablas USER → USER_TOKEN, que tienen una relación 1-N (ONE TO MANY).

Paso 1: creación de relaciones

Entidad padre 

En primer lugar, crearemos las relaciones entre las Entidades en la Plataforma; las mismas que existen en nuestro modelo Java o en la misma base de datos relacional.

Para ello, nos dirigiremos a la Entidad padre (tabla USER), y añadiremos la relación con USER_TOKEN a través de la funcionalidad ya existente «Linked data».

Una vez añadida la referencia, cerramos el pop-up y se añadirá al JSON Schema el atributo «_references».

Entidad hija

En caso de que sea una relación bidireccional del mismo nivel (acceder a USER desde USER_TOKEN) , podríamos agregar la relación en la Entidad hija de la misma forma.

Paso 2: consultas sobre las Entidades 

Si hacemos una selección convencional, obtendremos lo siguiente:

Al haber creado las relaciones en el modelo de Entidades, ahora al hacer un «JOIN» de las dos tablas, nos vendrá la relación anidada, en este caso como es un ONE TO MANY será un array:

Paso 3: consultas con función EXPAND 

Se ha creado una función nueva denominada «EXPAND» con la que podremos realizar consultas que nos traigan todos los datos de la entidades relacionadas sin necesidad de hacer la consulta con los JOINS:

La función EXPAND() puede recibir argumentos, en caso de que se quiera limitar la anidación. Por ejemplo, para el caso anterior, si ponemos EXPAND(users), que es el nombre de la Entidad que relaciona la tabla API y la tabla USER en base de datos, solo nos traerá expandido ese atributo y el «api_operation» no vendrá:

Si indicamos argumentos en la función EXPAND(), hay que tener en cuenta que solo se tendrá un nivel de anidación, en caso de que las entidades relacionadas tengan a su vez otras relaciones, estas no se mostrarán, como es el caso de API->API_OPERATION->API_QUERY_PARAMETER.

Paso 4: inserciones

Para el ejemplo, utilizaremos el CRUD de Entidades, aunque esto aplica igualmente para inserciones a través del API Manager, IoT Broker, etc.

Podremos crear con la misma estructura JSON anidada las instancias de ambas entidades con una única inserción, por ejemplo:

Comprobamos la creación:

En caso de intentar insertar un registro con un ID que ya exista, se devolverá un error.

Paso 5: updates

Para el ejemplo actualizaremos un registro desde el CRUD de entidades.

De igual manera que en el insertpodemos actualizar el registro principal y los hijos en una única operación, anidando las instancias en el JSON.

En los hijos se contempla la operación de «UPSERT»; es decir, si no existe el registro a actualizar, se generará. De igual manera, si no se envía algún hijo relacionado con el padre, que existe en base de datos, este será borrado.

Por ejemplo, vamos a añadir a la instancia que hemos creado antes de usuario «administrator_test2» un token más y vamos a cambiar el valor «token» del existente:

Si lo comprobamos, veremos:

Ahora vamos a actualizar el usuario, dejando solo el último token añadido «Token2»:


Si estáis interesados en conocer más acerca de esta nueva funcionalidad de EXPAND en Onesait Platform, no dudéis en dejarnos un comentario o mandarnos un aviso en nuestro canal de soporte de Onesait Platform.

Imagen de cabeceraDan Dennis en Unsplash

✍🏻 Author(s)

Deja una respuesta