Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Encontrar slots gratuitos em um sistema de reservas


Provavelmente um exagero para o seu aplicativo - mas:

Uma maneira relativamente simples de melhorar suas pesquisas em detrimento de tornar o processo de 'escrita' mais complicado, seria alterar a tabela de reservas para torná-la uma tabela de 'disponibilidade'.

Adicione uma coluna booleana para indicar se o slot está livre ou reservado (ou melhor ainda, coloque o id do cliente que reservou e use 0 se o slot estiver livre).

Comece com um único slot grátis, 1º de janeiro de 2009 -> 31 de dezembro de 20??

Quando você receber uma reserva, divida o slot gratuito em 3 (duas inserções e uma atualização), o slot reservado e os dois slots disponíveis.

Continue fazendo isso e, à medida que o período de tempo ficar mais fragmentado, o processo de reserva consistirá em um dos seguintes:
  • Atribuir um 'espaço disponível' inteiro a alguém (uma atualização)
  • Dividir um 'espaço disponível' em dois (uma atualização e uma inserção)
  • Dividir um slot em 3 (como acima) se alguém reservar a seção do meio de um slot disponível.

Isso não é incrivelmente complicado de gerenciar e o processo de pesquisa se torna uma consulta simples:encontrar quaisquer slots no período de tempo necessário que estejam disponíveis (reservado=falso ou customerid=0, independentemente do caminho que você escolher) onde enddate - startdate>=o número de dias que você deseja.

Ele dobra o tamanho da tabela de reservas/disponibilidade e torna as reservas menos simples, mas a desvantagem é que o processo de pesquisa é o mais fácil possível.