entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Como gestionar una BD en la que tengo que almacenar los dias de la semana y las horas

Actualmente estoy creando un proyecto web de reservar pistas de padel online.

Tiene un registro de usuarios, con una tabla de usuarios y otra de pistas, en la que tiene los campos id, nombre, y precio (aunque también tenía pensado que tuviera días y horas).

Pero no sé como gestionar la BD porque quiero que si algún usuario alquila una pista, esa hora aparezca en una tabla en rojo (por ejemplo) para que no se pueda coger.

¿Alguna idea de como gestionar la BD?

Muchas gracias!

1 Respuesta

3votos

Leonardo-Tadei Puntos227320

Hola Daniel,

para esto, lo más cómodo es guardar fecha y hora de inicio de la reserva y fecha y hora del final de la reserva en formato datetime.

Por ejemplo si reservo hoy por 2hs desde las 20, será:

Inicio = 2014-01-30 20:00:00
Fin = 2014-01-30 22:00:00

En la interfaz no hay problema en que pongas por ejemplo día y hora de inicio y cantidad de horas: sumas esas horas a la fecha de inicio y obtienes la fecha de finalización.

Después con las funcones de manejo de fechas y horas de la DB, obtenés todo lo que te haga falta:

DAY()
DAYOFMONTH()
HOUR()
MINUTE()
etc

Luego, haciendo querys, podés obtener si hay una reserva para esta hora o no, todas las reservas de una franaja horaria, etc y mostrarlas en una tabla HTML o validar si se puede reservar o no una cancha. Las funciones se pueden poner tanto en la parte del SELECT como en la aprte del WHERE para filtrar resultados.

En este enlace http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html tenés un listado de las funciones para manejo de fechas y horas.

Saludos!

0voto

danielreales7 comentado

Pero así cada vez que haya una nueva reserva, estoy creando un nuevo registro en la BD, y después si tengo que modificar alguna reserva u obtener los datos puede ser más complejo no?

Me han comentado una forma también de tener en una base de datos todas las horas por ejemplo de 9:00 a 23:00 para todos los días igual de lunes a domingo, y después saber si está disponible ese día o no.

Pero no se me ocurre ninguna forma para gestionar la BD claramente, estoy un poco liado y no tengo claro lo que quiero hacer.

Lo que quiero hacer es cuando el usuario loguea, aparezca una tabla con el día que estamos y se vea desde las 9:00 hasta las 23:00 las horas disponibles de cada pista y las ocupadas, si está ocupada no puede hacer reserva y si está libre puede hacerla.

Quiero hacerlo para cuando haga click en la celda y puede seleccionar si la va alquilar 1 hora u hora y media, según si ya está cogida más adelante.

0voto

Leonardo-Tadei comentado

Hola Daniel,

tal y como decís, cada vez que hay una Reserva nueva, se insertará un registro en la tabla. Por esto, borrar o editar una Reserva no es complicado: es borrar o editar 1 registro. Por otra parte, obtener datos, al menos con la estructura que te planteo, es hacer querys sobre la tabla de Reservas y tampoco es más complejo que hacerlo sobre otra tabla con fechas y horas.

Cuando se trata de almacenar datos, yo no creo que haya que salir a inventar nada: simplemente pongo sobre la mesa todo lo que se debe guardar y aplico las primeras 3 Formas Normales. Los datos Normalizados te garantizan poder acceder a cualquier registro y poder responder a cualquier query!

La Normalización no es una labor creativa: es aplicar las normas, por lo tanto, todo comentario es bienvenido si es sobre cómo aplicar la Normalización... las soluciones "creativas" siempre dan problemas, salvo la remota casualidad de que estén normalizadas ;-)

Volviendo al tema, mi sugerencia consiste en guardar en campos datetime fecha de inicio y de finalización de una Reserva para una Pista. La Normalización también permite guardar por ejemplo fecha y hora de inicio y cantidad de horas de Reserva, pero en ese caso, las querys se vuelven endiabladamente complejas.

En cualquier caso, podés poner en una nueva pregunta todos los datos relevantes a guardar y podemos darte una mano con la Normalización.

Saludos!!!

1voto

danielreales7 comentado

Claro, ya entendí como realizar eso, muchas gracias por todo!

Eso ya lo tengo claro, ahora el problema creo que será al pintar en una tabla unas celdas en verde o rojas según si existen esos datos en la BD o no.

Pero ya eso es otra cuestión, gracias por todo!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta