Modelado de datos

Modelado de datos de SQL a JSON con Hackolade

El modelado de datos de SQL a JSON es algo que toqué en la primera parte de mi "Serie "Pasar de SQL Server a Couchbase. Desde esa entrada de blog, me han llamado la atención algunas herramientas nuevas de Hackoladeque recientemente ha añadido a su herramienta soporte de primera clase para Couchbase.

En este post, voy a repasar el ejercicio de modelado tan sencillo que hice a mano, y mostrar cómo Hackolade de IntegrIT puede ayudar.

Estoy utilizando el mismo esquema SQL que utilicé en la anterior serie de entradas del blog; puedes encontrarlo en GitHub (en la carpeta SQLServerDataAccess/Scripts).

Revisión: Modelado de datos de SQL a JSON

En primer lugar, repasemos: la principal forma de representar relaciones en una base de datos relacional es mediante una relación clave/clave externa entre tablas.

A la hora de modelar en JSON, existen dos formas principales de representar las relaciones:

  • Referencial - Los conceptos tienen sus propios documentos, pero hacen referencia a otro(s) documento(s) mediante claves de documento.
  • Desnormalización - En lugar de dividir los datos entre documentos mediante claves, agrupe los conceptos en un único documento.

Empecé con un modelo relacional de carritos de la compra y usuarios de redes sociales.

Relational model of SQL before moving to JSON

En mi ejemplo, dije que una relación Cesta de la compra - a - Artículos de la cesta de la compra en una base de datos relacional probablemente estaría mejor representada en JSON por un único documento Cesta de la compra (que contiene Artículos). Este es el camino de la "desnormalización". Luego, sugerí que una relación Usuario de medios sociales - a - Usuario de medios sociales Actualización se representaría mejor en JSON con una relación referencial: las actualizaciones viven en sus propios documentos, separados del usuario.

Se trataba de un proceso totalmente manual. Para ese sencillo ejemplo, no fue difícil. Pero con modelos más grandes, sería útil tener alguna herramienta para ayudar en el modelado de datos SQL a JSON. No será completamente automático: todavía hay algo de arte en ello, pero las herramientas pueden hacer gran parte del trabajo por nosotros.

Empezar con un DDL de SQL Server

La siguiente parte asume que ya ha ejecutado los scripts SQL para crear las 5 tablas: ShoppingCartItems, ShoppingCart, FriendBookUsers, FriendBookUpdates y FriendBookUsersFriends. (Siéntase libre de probar esto en sus propias bases de datos, por supuesto).

El primer paso es crear un script DDL de su esquema. Puede hacerlo con SQL Server Management Studio.

En primer lugar, haga clic con el botón derecho del ratón en la base de datos que desee. A continuación, vaya a "Tareas" y luego a "Generar scripts". A continuación, aparecerá un asistente. Puedes hacer clic en "Siguiente" en cada paso, pero si nunca has hecho esto antes es posible que desees leer las instrucciones de cada paso para que entiendas lo que está pasando.

Por último, se generará un archivo SQL en la ruta especificada.

Será un archivo de texto con una serie de CREAR y ALTERAR al menos). He aquí un breve extracto de lo que he creado (se puede encontrar el versión completa en Github).

Por cierto, esto también debería funcionar con bases de datos SQL Azure.

Nota: Hackolade también funciona con otros tipos de DDL, no sólo SQL Server, sino también Oracle y MySQL.

Introduzca Hackolade

La siguiente parte asume que usted ha descargado e instalado Hackolade. Esta función solo está disponible en la edición Professional de Hackolade, pero hay disponible una versión de prueba gratuita de 30 días.

Una vez creado el archivo DDL, puede abrir Hackolade.

En Hackolade, crearás/editarás modelos que corresponden a modelos JSON: Couchbase (por supuesto) así como DynamoDB y MongoDB. Para este ejemplo, voy a crear un nuevo modelo Couchbase.

Create a new Couchbase model in Hackolade

En este punto, tienes un nuevo modelo que contiene un "Nuevo Cubo". Puede utilizar Hackolade como herramienta de diseño para representar visualmente los tipos de documentos que va a colocar en el cubo, las relaciones con otros documentos, etc.

Ya tenemos un modelo relacional y un archivo DDL de SQL Server, así que veamos qué puede hacer Hackolade con él.

Modelado de datos SQL a JSON mediante ingeniería inversa

En Hackolade, vaya a Herramientas → Ingeniería inversa → Archivo de lenguaje de definición de datos. Se le pedirá que seleccione un tipo de base de datos y una ubicación de archivo DDL. Yo seleccionaré "MS SQL Server" y el archivo "script.sql" de antes. Por último, pulsaré "Aceptar" para dejar que Hackolade haga su magia.

Hackolade procesará las 5 tablas en 5 tipos diferentes de documentos. Así, lo que se obtiene es algo muy parecido a un literal traducción.

SQL to JSON data modeling reverse engineering with Hackolade result

Este diagrama te da una vista de tu modelo. Pero ahora puedes pensar en él como un lienzo para construir tu modelo JSON definitivo. Hackolade te da algunas herramientas para ayudarte.

Desnormalización

Por ejemplo, Hackolade puede hacer sugerencias sobre la desnormalización al hacer el modelado de datos SQL a JSON. Vaya a Herramientas→Sugerir desnormalización. Verá una lista de tipos de documentos en "Selección de tabla". Intente seleccionar "shoppingcart" y "shoppingcartitems". Luego, en la sección "Parámetros", elige "Array in parent".

Suggest denormalization in Hackolade

Después de hacer esto, verá que el diagrama se ve diferente. Ahora, los artículos están incrustados en un array en shoppingcart, y hay líneas discontinuas que van a shoppingcartitems. En este punto, podemos eliminar shoppingcartitems del modelo (en algunos casos es posible que desee dejarlo, es por eso que Hackolade no lo elimina automáticamente al hacer el modelado de datos SQL a JSON).

Remove excess table in Hackolade

Fíjate en que aquí también hay otras opciones:

  • Incrustar matriz en matriz - Esto es lo que se ha demostrado anteriormente.
  • Incrustación de un subdocumento en un documento hijo - Si desea modelar de la manera opuesta (por ejemplo, almacenar la cesta de la compra dentro del artículo de la cesta de la compra).
  • Incorporación de ambos - Ambos array en enfoque padre y subdocumento.
  • Referenciación bidireccional - Representar una relación de muchos a muchos. En las tablas relacionales, esto suele hacerse con una "tabla de unión" o "tabla de asignación"

Tenga en cuenta también en cascada. Esto es para prevenir referencias circulares donde puede haber un padre, un hijo, un nieto, y así sucesivamente. Usted selecciona hasta qué punto desea la cascada.

Más limpieza

Hay un par de cosas más que puedo hacer para limpiar este modelo.

  • Añadir un campo "tipo. En Couchbase, puede que necesitemos distinguir los documentos del carrito de la compra de otros documentos. Una forma de hacerlo es añadir un campo "discriminador", normalmente llamado 'type' (pero puedes llamarlo como quieras). Puedo darle un valor "por defecto" en Hackolade "shoppingcart".
  • Eliminar el campo 'id' de la matriz incrustada. La tabla SQL necesitaba este campo para una relación de clave externa. Como todo está incrustado en un único documento, ya no necesitamos este campo.
  • Cambia el nombre del array a 'items. Una vez más, dado que la cesta de la compra está consolidada en un único documento, no necesitamos llamarla 'shoppingcartitems'. Basta con "artículos".

Clean up JSON data model in Hackolade

Salida

Un modelo de este tipo puede ser un documento vivo en el que trabaje su equipo. Los modelos de Hackolade se almacenan como documentos JSON. Puedes compartirlos con los miembros del equipo, registrarlos en el control de código fuente, etc.

También puede utilizar Hackolade para generar documentación estática sobre el modelo. Esta documentación puede utilizarse para guiar el desarrollo y la arquitectura de la aplicación.

Vaya a Archivo → Generar documentación → HTML/PDF. Puede elegir qué componentes incluir en la documentación.

Resumen

Hackolade es una herramienta de modelado NoSQL creada por la empresa IntegrIT. Es útil no sólo en la construcción de modelos desde cero, sino también en la ingeniería inversa para el modelado de datos SQL a JSON. Hay muchas otras características sobre Hackolade que no he cubierto en este post. Te animo a descargue hoy mismo una versión de prueba gratuita de Hackolade. También puede encontrar Hackolade en Twitter @hackolade.

Si tiene alguna pregunta sobre Couchbase Server, hágala en la sección Foros de Couchbase. Consulte también el Portal para desarrolladores de Couchbase para obtener más información sobre Couchbase para desarrolladores. No dude en póngase en contacto conmigo en Twitter @mgroves.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.