00:00 / 00:00

Fecha publicación: 7 mar 2023

Moon Modeler

En el mundo relacional estamos acostumbrados a que hayan multitud de herramientas para crear diagramas de bases de datos, pero en el mundo NoSQL no es tán normal encontrarlas, ¿Qué limitaciones nos podemos encontrar cuando intentamos modelar una base de datos documental con una herramienta relacional?

  • Las bases de datos documentales admiten campos de tipo array.
  • Las bases de datos documentales admiten campos de tipo objeto que a su vez pueden tener otros campos de tipo array o objeto.

MoonModeler es una herramienta comercial de modelado específica para MongoDB que cubre estas necesidades, tiene una versión de prueba gratuita de 14 días, y dos versiones, la básica y la pro (para chequear el precio de estas versiones de moon modeler puedes pinchar en este enlace)

Manos a la obra

En cuanto abrimos Moon Modeler nos pregunta qué tipo de proyecto montar si Mongo o Mongoose, e nuestro caso elegimos Mongo, y nos lleva un lienzo en blanco.

Imagínate que queremos modelar una colección de usuarios y roles:

  • Tenemos los datos de usuario.

  • Dentro embebemos un array de roles (un array de strings).

  • Para crear una colección en el toolbox de arriba tenemos la opción de Collection, pinchamos y creamos la misma clickando en el canvas.

En el toolbar hay un botón llamado Collection que nos permite crear una nueva colección

  • La edición básica es muy sencilla, doble click en la colección, y ya podemos cambiar el nombre de la misma.

Cuando abrimos el dialogo de edición podemos cambiar directamente el campo nombre

  • Si queremos editar o añadir campos nos vamos al tab de fields, aqui podemos añadir el campo

    • login :string
    • name : string
    • email : string

En el dialogo de edición tenemos un grid en el que podemos ir añadiendo y modificando campos

  • Vamos ahora a por lo roles, esto es interesante porque es un campo de tipo array, fíjate que a la derecha tenemos el checkbox ARR, lo marcamos y ya tenemos un array de strings.

Podemos añadir campos de tipo simple y arrays

Si cerramos el diálogo podemos ver el resultado.

El resultado de la edicion se refleja en la tabla

  • Eso no es ha estado mal, pero imagínate que además del rol, tenemos que indicar si es de solo lectura, y si ha expirado ¿Cómo podemos modelar esto? Creando un subdocumento, para ello cambiamos el campo rol a tipo objeto, y desplegando podemos ver cómo podemos añadir campos al subdocumento (en el lateral derecho), añadimos estos campos, y ahora vemos como ha quedado:

Cuando declaramos un campo de tipo object, podemos definir los campos que lo conforman (opcion children)

Como curiosidad, podemos anidar todos los niveles de subdocumentos, aunque aquí la edición se hace un poco rara.

Vale ya tenemos una colección con subdocumentos, ¿Pero qué pasa si necesito tener más de una colección y relacionarlas? Vamos a ver esto con un ejemplo, imagínate que somos un proveedor genérico de identidad y tenemos un montón de empresas clientes, y una empresa cliente tiene muchos usuarios, vamos a crear una colección de empresas (siguiente la misma aproximación de pinchar en collection).

Ahora pinchamos en reference, y pinchando en companies y después users nos crea la relación de uno a muchos.

En el toolbar hay una opción reference que nos permite conectar dos tablas

En cuanto a los conectores de relación, tiene un cálculo de path básico, aunque esto no suele ser problema en una base de datos documental, ya que no solemos tener muchas colecciones.

En cuanto a informes: nos permite exportar el modelo a PDF o HTML, esta última opción es interesante, nos crea un sitio con varias páginas (diagrama, colecciones y relaciones).

report.png

Podemos generar informes en PDF y HTML

Otro punto interesante es que podemos generar un script para crear las colecciones con su JSON Schema.