00:00 / 00:00
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.
- La edición básica es muy sencilla, doble click en la colección, y ya podemos cambiar el nombre de la misma.
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
- 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.
Si cerramos el diálogo podemos ver el resultado.
- 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:
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 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).
Otro punto interesante es que podemos generar un script para crear las colecciones con su JSON Schema.