Jump to content

duda para reserva de dato con mysql y visual basic 2010


Recommended Posts

estoy haciendo un programita de buses en donde son varios puestos de venta de pasajes y me asalta la siguiente duda

 

como puedo hacer para que no se compren dos pasajes identicos al mismo tiempo ?

 

 

me explico al momento de comprar pasaje se reserva el asiento, como evito que se realicen dos ventas del mismo asiento en el mismo bus en el mismo momento?????

 

cualquier idea seria de mucha ayuda

 

 

gracias.....

Link to comment
Share on other sites

Se me ocurren 3 opciones:

- Puedes reservar manteniendo el dato en una tabla adicional; por lo tanto, la consulta de disponibilidad de asientos tiene que hacer un JOIN (o NOT IN) con esta tabla... Cuando se concreta la venta (o se cancela), se elimina el registro de esta tabla y se inserta en la tabla de ventas...

- En la misma tabla, pero con un indicador de estado tipo "en venta"... cuando se concreta la venta puedes cambiar el estado a "vendido"...

- No hacer la reserva, sino que consultar junto antes de insertar la venta... Si justo se vendió un milisegundo antes, le devuelves el mensaje al usuario que se vendió...

 

 

Aun así, veo un par de problemas con las reservas:

 

- Que pasa si se pierde la conexión con el servidor... Cualquiera de las 2 opciones dejará amarrados esos asientos y no se podrán vender... A no ser que todos los usuarios tengan la facultad de poder eliminar esos registros y "tomar posesión" de esos asientos...

- Considerando que entre la selección del asiento y el cierre efectivo de la venta hay un tiempo razonable (un par de minutos), reservar los asientos se puede convertir en una menor venta... Por ejemplo, un cliente selecciona el asiento 5 a las 10:00... esta venta se cancelará a las 10:05... Este es el único asiento disponible en el bus... En otro punto, otro cliente consulta por disponibilidad a las 10:01... El usuario verá que el bus está lleno, pero el asiento 5 está reservado... le va a decir al cliente que esperen un par de minutos a ver si se concreta la venta del otro punto... esperan hasta las 10:03 y sigue reservado... el usuario tiene 3 opciones... 1. llama por teléfono al otro vendedor para preguntar qué onda... 2. le dice al cliente que espere 2 minutos más... 3. le dice al cliente que no quedan asientos...

 

Sono+

Link to comment
Share on other sites

bueno finalmente lo que se me ocurrio fue simplemente al momento de comprar validad si el asiento en esa fecha y hora estaba vendido, de no estarlo continua la venta grabacion de datos e impresion de boleto, y si estaba ocupado arrojaba error indicando que estaba ocupado y dando la opcion de reelegir otro asiento

Link to comment
Share on other sites

Hola amigo, sólo como comentario, debes tener cuidado con la concurrencia de los datos ya que después que tu lees el estado de un campo, otra sessión puede modificar ese valor y cuando intentes actualizar el valor este ya no es el mismo, si entiendo lo que estás haciendo, podrías vender dos veces el mismo boleto, mira:

 

sesión 1: lee estado del asiento X que está en "D" de disponible,

sessión 2: lee estado del asiento X que está en "D" de disponible,

sesión 1: actualiza el asiento X con "R" de reservado,

sesión 2: actualiza el asiento X con "R" de reservado(que ya estaba reservado!!)

sesión 1: imprime boleto

sesión 2: imprime boleto(que ya ha sido impreso!!!!)

 

Una posible solución es bloquear el registro al momento de leer el dato y desbloquearlo luego de actualizarlo, pero no te recomiento esta opción ya que puede haber cortes de comunicación que pueden dejar colgadas las tablas.

 

La otra opción un poco más simple pero no muy bonita es crear una tabla temporal con la PK bus, hora salida y asiento, de modo que si se puede insertar el asiento a reservar, es porque este está disponible, si dos sesiones tratan de reservar un asiento al "mismo tiempo" sólo el primero en llegar va a poder hacerlo ya que la PK te valida el dato.

Tal vez no sea una solución limpia, pero me parece que funciona, las actualizaciones de datos para reservas no funcionan a menos que bloquees el registro(al menos en las bases de datos que manejo).

 

Saludos y suerte!

Edited by xomarx69
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...