Reestructuración de datos (Laravel a APIX)

De 22 tablas (SQL) se pasa a 3 colecciones (MongoDB).

En vez una base de datos para toda la información, se utilizan múltiples bases de datos: una única base de datos para perfiles de usuario y datos perdurables de gimnasio (incluyendo planes, programas, clases, videos, galerias, etc).

Adicionalmente, cada gimnasio tendrá una base de datos propia en la que se almacenará la información propia de las instancias de clase, con la que se pretende aislar la actividad de instancias de clases de un gimnasio de las de otro.


Los principios u objetivos en que guían y en los que se basa esta reestructuración:

  • Optimizar el rendimiento de las operaciones más utilizadas.
  • Las operaciones agrupadas por tipo de usuario son de mayor a menor: Usuarios, Profesores, Admins.

    La operación más frecuente es la consulta de cupos disponibles y las de clases, luego las operaciones de reserva/cancelacion, luego las de toma de clase, revisión de asistencias y finalmente, la menos frecuente, las utilizadas para conformar reportes.

  • Eficiencia de la base de datos: Desfragmentar información, anidarla o moverla a otra base de datos cuando haga sentido.
  • Como el usuario de Boxmagic sólo ve un gimnasio a la vez (su gimnasio activo), separar ciertos datos como los de las reservas para una clase, fecha y horario específicos, es lógico y trae mejoras de desempeño significativas.

  • La información se debe computar sólo al haber cambios.
  • Toda información que solo cambie al hacerse una operación debe quedar guardada de forma que optimice su consulta, de este modo por mucho que se consulte, por ejemplo, la cantidad de cupos disponible para una instancia de clase, no implicará un aumento de la actividad de procesamiento.

Base de datos

Boxmagic

Se unirán en documentos de la colección de gimnasios.

Gimnasios

box
...
tipo_box
...
tipo
...
pais
...
planes
...
programas
...
planes_programas
...
clases
...
dias_clases
...
gallery
...
video
...
video_programas
...
eventos
...
feriados
...
Se unirán en documentos de la colección de perfiles de usuario.

Perfiles

users
...
box_usuario
...
role_user
...
mensualidad
...
pago_mensualidad
...
reservas
...
Base de datos

Instancias

Se unirán en documentos de instancias de clase en colecciones separadas por gimnasio. (Cada gimnasio tiene una colección con ID igual al gimnasioID).

gimnasioID

cupos_reservas
...
reservas
...
Se pasará al

Código del back-end (API X)

roles
...
pais
...
Del Camilo, con el 🫀