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.

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).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CREAR CUADRO [dbo].[FriendBookUpdates]( [Id] [identificador único] NO NULL, [Fecha de publicación] [datetime] NO NULL, [Cuerpo] [nvarchar](256) NO NULL, [UserId] [identificador único] NO NULL, CONSTRAINT [PK_FriendBookUpdates] PRIMARIO CLAVE CLUSTERED ( [Id] ASC )CON (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = EN, ALLOW_PAGE_LOCKS = EN) EN [PRIMARIO] ) EN [PRIMARIO] IR A -- etc... |
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.

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.

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".

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).

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".

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.