sql >> Base de Datos >  >> RDS >> Database

Modelo de Base de Datos para el Sistema de Reservas de una Autoescuela. Parte 2

Construyamos más cambios en el modelo de datos, que creé en mi publicación de blog anterior, como tener un enfoque automatizado para asignar un instructor y un vehículo a una lección, facturar a los clientes y realizar un seguimiento de ellos.

En primer lugar, necesito crear una lógica en el lado de la aplicación para asignar un instructor y un vehículo a las lecciones antes de que realmente se lleven a cabo. Lo principal que debe asegurarse aquí es la disponibilidad, es decir, se puede asignar un instructor o un vehículo a una lección solo si ambos están disponibles a la hora programada de la lección.

Necesito construir dos tablas separadas para realizar un seguimiento de la ocupación de los instructores y el vehículo, respectivamente. Quizás se pregunte por qué tengo la intención de realizar un seguimiento de la ocupación en lugar de la disponibilidad. La respuesta es, si hacemos un seguimiento de la ocupación en lugar de la disponibilidad, entonces no necesitamos crear más tablas para almacenar la indisponibilidad de los recursos debido a las vacaciones planificadas por los instructores o algún servicio programado para los vehículos. En caso de indisponibilidad planificada, los registros se insertan en las tablas de ocupación en consecuencia.

Asumo aquí que los instructores y los vehículos solo están disponibles durante el horario comercial, digamos de 8:00 a. m. a 6:00 p. m., en los días hábiles definidos por la escuela. Por lo tanto, puedo decir que un instructor está disponible a una hora específica en un día hábil si no encuentro el detalle de su ocupación para la hora y el día especificados en el staff_occupancy mesa.

La estructura de la tabla staff_occupancy es el siguiente:

Algunas variaciones se pueden poner según sea necesario. Por ejemplo, debe haber al menos un intervalo de 15 minutos entre dos lecciones posteriores para un instructor.

La estructura para la tabla vehicle_occupancy es el siguiente:

La asignación de instructor y vehículo se registra en la reservation mesa. Ya había agregado dos columnas, staff_id y vehicle_id , en esta tabla. Obviamente, estas asignaciones se realizarán en función de su disponibilidad.

Además, mantendré reservation_id en el staff_occupancy y vehicle_occupancy mesas, para que en caso de cancelación de una lección, la ocupación relevante de personal y vehículo pueda liberarse fácilmente. Pero mantendré ambas columnas como anulables ya que la ocupación de instructores y vehículos no será necesariamente a causa de reservas. ¿Qué pasa si un instructor se va de licencia? ¿O uno de los vehículos va al centro de servicio por un día?

Para permitir la eliminación temporal en tales escenarios, agregaré una columna llamada is_active en ambas tablas.

Facturación

Para el requisito de facturación, crearé una tabla, a saber, invoice , para almacenar detalles de facturación, incluido customer_id y reservation_id . Aquí, la facturación se realiza a los clientes, pero en función de las lecciones realizadas para el cliente. Por lo tanto, necesitamos el reservation_id columna en la tabla de facturas también, de modo que en cualquier momento dado, uno puede obtener un informe sobre la facturación detallada en función de una reserva para un cliente. También crearé una columna, a saber, invoice_status_id , en la tabla para almacenar el estado de las facturas.

Modelo de base de datos

Aquí está la estructura de la base de datos actualizada diseñada en Vertabelo:



Conclusión

A estas alturas, debe haber comenzado a creer que el modelado de datos para un sistema de reservas de una autoescuela es tan interesante y encantador como aprender a conducir.

Siéntase libre de publicar sus preguntas y sugerencias sobre el artículo. Estoy más que feliz de responderlas e incorporar sus sugerencias en mi próximo artículo.