Cita:
|
Empezado por luisgutierrezb
Pues al restar habitaciones puede ser que alguien haya reservado la 2 y otro la 3 casi al mismo tiempo y por la resta el programa crea que le ganaron la habitacion, quiero imaginarme que se usa una BD "decente" la cual te debe soportar triggers y ahi en un before insert o before update segun como se manejen las tablas, que revise la habitacion, ya que ahi se haria la cola de actualizaciones a la BD...
|
El tema que comentas no tiene mayor problema, esto se puede detectar mas o menos de forma facil de varias formas, ejemplo sencillo, tenemos una tabla llamadas HABITACIONES con un unico registro y un campo llamado CANTIDAD:
-Iniciar una transaccion
-Digamos que queremos reservar 2 habitaciones:
UPDATE HABITACIONES SET CANTIDAD=CANTIDAD-2 WHERE CANTIDAD>2
-Comprobamos el numero de registros que ha modificado el update, y si es igual a 0, no tenemos habitaciones libres suficientes y cancelamos la transaccion.
Esto se puede aplicar igualmente al problema de gluglu, todo consiste en hacer el update con una condicion WHERE adecuada que no
se cumplira si otro usuario ha realizado un update sobre el mismo registro antes, o si no se cumplen los requisitos (en este caso que haya menos habitaciones
de las que queremos restar). Ni siquiera se necesitan usar transacciones si el proceso de reserva implica modificar un solo registro, solo harian falta
transacciones en el caso de que haya que modifica mas de un registro.