Describo un poco la situación:
Imagina un negocio, dicho negocio tiene un número variable de trabajadores. El horario del negocio se establece en función de intersección de horarios de cada empleado.
He pensado dos formas de solucionar esta situación:
1) Almacenando los intervalos de horario de cada empleado en un campo "horario" de la tabla "empleados" (BD mysql) como si fuera un array encadenado, tal que así:
Código:
Soy consciente de que la sintaxis quizás no es correcta (muy posiblemente), mi interés es que se entienda, así que explico un poco la intención: Cada uno de los parámetros del array horario es un día de la semana, cada uno de ellos a su vez contiene otro array cuyos parámetros son los intervalos del horario de ese trabajador ese día de la semana y a su vez estos "intervalos" son arrays de dos parámetros (hora de inicio y de fin del intervalo). Así que si por ejemplo accedemos a Lunes[0] nos devolvería el array de intervalos de ese día, si accedemos a Lunes([0],[0]) nos devolvería el primer intervalo del Lunes y de forma análoga si accediéramos a: Lunes([0],[0],[0]) nos devolvería a que hora se inicia el primer intervalo del lunes.horario_array (Lunes_array(intervarlo1_array(09:30,14:00),intervarlo2_array(17:30,16:00)) Martes, Miercoles, Jueves, Viernes, Sabado, Domingo)
2) Creando una tabla en la BD cuyas columnas fueran los días de la semana y cuyas filas fueran los intervalos de tiempo del día, como unidad de tiempo tendríamos 5 minutos (así que en este eje tendríamos 288 "filas") de forma que marcando un valor 1 en la intersección de 09:05-09:10 con Lunes, otro con 09:10-09:15 en el mismo día, etc.. se entendería que la duración del intervalo en el que esa persona trabaja son las celdas de la tabla donde hay un 1 y resumiendo sería de 09:05 a 09:15.
Mi duda es la siguiente... obviamente luego hay que trabajar con todos estos valores y no se que solución es la más eficiente... primero pensé que la 1), porque solo sería añadir un campo más a la tabla de empleados, pero luego vi que quizás el algoritmo para leer ese array y hacer "cálculos", véase comprobar si una hora:minutos dados entran dentro del horario de esa persona, por ejemplo... podría ser bastante confuso de desarrollar. Así que pensé en la opción 2), el problema que tiene es que habría una tabla por cada empleado y claro, teniendo en cuenta que no hablo de un solo negocio, este podría representar un montón de tablas.
Estoy abierto a nuevas ideas, consejos o sugerencias.
PD: Como no se cual es el lugar adecuado para este post, dada la naturaleza ambigua de la duda, lo posteo también en la sección de mysql.