Modelo de base de datos para una lista de personal 24/7 en un casino

Actualmente utilizamos una lista basada en lápiz / papel para administrar el personal de juegos de mesa en el casino. Cada fila es un empleado, cada columna es un bloque de tiempo de 20 minutos y cada celda representa a qué tabla se asigna el empleado, o alternativamente se le ha asignado un descanso. La hora de inicio y finalización de los turnos para los empleados varía al igual que los juegos / habilidades que pueden ofrecer. Necesitamos mantener una copia de las listas durante 7 años. Con el papel, esto es bastante fácil, quiero desarrollar una aplicación digital y tengo dificultades para almacenar los datos en una base de datos para archivar.

Soy bastante nuevo para trabajar con bases de datos, creo que entiendo cómo modelar los datos para una base de datos gráfica como neo4j, pero tuve dificultades a la hora de trabajar con el tiempo. He intentado aprender sobre bases de datos RDBMS como MySQL, a continuación es cómo creo que se deben modelar los datos. Indique si voy en la dirección equivocada o si un tipo de base de datos diferente sería más apropiado, ¡sería muy apreciado!

Datos básicos
Aquí hay algunos datos básicos con los que trabajar antes de tener en cuenta la programación / tiempo.

Empleado
- Número de identificación
- Nombre
- Habilidades (Blackjack, Baccarat, Ruleta, etc.)

Mesa
- Número de identificación
- Habilidad / Tipo (solo puede ser una habilidad)

¿Puede ser mejor almacenar los datos de la lista como un archivo como JSON? Los datos sensibles al tiempo no serían un gran problema entonces. El beneficio de ser digital con una base de datos serían las consultas, esto podría ayudar a ayudar a las tareas que consumen mucho tiempo donde el error humano es común.

Posibles consultas
Nota: El personal que está en turno está en un descanso o en el piso (asignado a una mesa), las habilidades tienen un tipo mayor o menor basado en la dificultad para aprender.

¿Qué personal ha estado en el piso por 80 minutos o más? (Se deben tomar un descanso)¿A qué mesas abiertas puedo asignar este empleado según su conjunto de habilidades?Necesito un empleado que tenga habilidad de Baccarat pero que aún no haya sido asignado a una mesa de Baccarat.¿Qué empleado (s) estaba en esta mesa durante este período de tiempo?¿Dónde estaba este empleado en este momento?¿Quién está en turno ahora?¿Cuántos empleados en turno pueden tratar al Blackjack?¿Cuántos empleados tienen 3 habilidades principales?¿Qué personal ha tenido la habilidad de Baccarat durante al menos 3 meses?

Estas consultas también se pueden ordenar por orden alfabético o tiempo, habilidad, etc.

Estoy bastante seguro de que sé cómo realizar estas consultas con cifrado para neo4j, siempre y cuando modelé los datos correctamente. No estoy tan informado con las consultas de SQL, lo he leído puede complicarse un poco dependiendo de la consulta y la estructura.

-------------------------------------------------- --------------------------------------

MYSQL específico

Una tabla de empleados podría contener propiedades como su número de identificación y su nombre, pero tengo razón en que, por sus habilidades y cambios, estas serían tablas separadas que hacen referencia al empleado por un entero único (¿creo que esto se llama una clave externa?).

Otra tabla podría almacenar las mesas de juego, estas tendrían su propia identificación y harían referencia a una habilidad / tipo de juego con una clave externa.

Para registrar datos como la lista de lápiz / papel, cada día podría haber una tabla con columnas que empiecen desde 0000 y aumenten en 20 en valor hasta llegar a 2340? Antes de las columnas de tiempo, podría tener una para el personal donde cada empleado está representado con su clave externa, las columnas de tiempo tendrían claves externas para las tablas de juego asignadas, los datos de la fila están obligados a tener muchas celdas que no están pobladas desde entonces el turno de empleados no será 24/7. Si estoy usando claves externas para hacer referencia a las mesas de juego, ¿tengo un problema ahora cuando el empleado está en un descanso? ¿A menos que trate la primera entrada de la mesa de juego como un descanso?

Puede que tenga que complicar aún más las cosas, sin embargo, con el tiempo, la administración intentará diferentes diseños de mesas de juego, algunas de las mesas de juego se pueden convertir de, por ejemplo, Blackjack a Baccarat. es probable que esto ocurra un poco más de 7 años. ¿Desearía crear nuevas entradas en la tabla de juegos o agregar una columna para usar una clave externa y referirme a una nueva tabla que almacena el historial de tipos de juegos durante períodos de tiempo? Los empleados también aprenderán a repartir nuevos juegos durante su carrera, muy rara vez también se les puede quitar la habilidad.

-------------------------------------------------- --------------------------------------

Neo4j Específico

Con estos datos, ¿tendría un empleado y un nodo de tabla que tengan una asignación de bordes de relación "isA" a empleados o tablas reales? Me imagino que con las habilidades para los dos tipos sería mejor con un nodo de Habilidad y establecer relaciones como eso: Blackjack-> isA-> Skill, Employee-> hasSkill-> Blackjack, Table-> typeIs-> Blackjack?

HORA
Encuentro dificultad cuando quiero que esta base de datos funcione ahora con una línea de tiempo. He encontrado las siguientes sugerencias para conectar nodos con el tiempo:

Unix Epoch parece ser una recomendación común?¿Conectando los nodos a una gráfica año / mes / día?Lucene línea de tiempo? (No sé mucho sobre esto o cómo trabajar con él, he visto que algunos lo mencionan)

Y algunos casos sobre cómo se relacionan el tiempo y los datos:

El personal ha variado los días y las horas de inicio / finalización de una semana a otra, esto podría ser el nodo de cambio con propiedades {shiftStart, shiftEnd, actualStart, actualEnd}, el personal puede llegar tarde o enfermarse durante el turno. ¿Sería esta la manera correcta de vincular cada turno a un empleado? Empleado (nodo) -> Turnos (groupNode) -> Shift (nodo)

Las tablas y el personal pueden tener datos de habilidades modificados, con datos archivados esto podría ser un problema, creo que la solución es tener propiedades de tiempo en la relación con la habilidad?

Abrimos y cerramos mesas a lo largo del día, cada mesa tiene horarios de apertura / cierre para cada día, esto podría cambiar en un mes dependiendo de lo que quiera la administración, además, los horarios no son estrictos, por varias razones que un gerente puede abrir o cerrar mesas durante el turno. El estado abierto / cerrado de un nodo de la tabla solo puede ser relevante para las consultas durante el turno, lo que me confunde, ya que me gustaría esto para las consultas, pero para el archivo con tiempo no tiene sentido.

Es con las consultas que tengo problemas para decidir cuándo usar un nodo o agregar una propiedad a un nodo. Para un empleado, tienen un nombre y un número de identificación. Si quisiera encontrar a un empleado por su número de identificación, ¿sería mejor tener eso como un nodo propio? Sería más correcto, en lugar de ir a través de todos los empleados para ese número de identificación único.

También me he topado con etiquetas recientemente, puedo entender que serían útiles para escribir los nodos de tabla y de empleado en lugar de agruparlos en un nodo. Con los turnos para un empleado, creo que debería seguir agrupándose con un nodo de turnos. Si tuviera que realizar consultas en clave para los empleados que trabajan turnos durante un período de tiempo, una etiqueta podría ser apropiada, sin embargo, si se aplica a nodos de turno individuales o ¿Cambia el nodo de grupo que enlaza de nuevo al empleado? ¿Es posible que deba agregar una propiedad a los nodos de turno individuales o la relación con el nodo de grupo de turnos? No estoy seguro de si debería haber un nodo de grupo de turnos, supongo que reducir los bordes de conexión al nodo de empleado sería óptimo para las consultas.

-------------------------------------------------- --------------------------------------

Si hay recursos excelentes que puedo aprender sobre el desarrollo de bases de datos que serían excelentes, hay tanta información y opciones que es difícil saber con qué empezar. Gracias por tu tiempo :)

Respuestas a la pregunta(1)

Su respuesta a la pregunta