Pergunta

Nós estamos olhando para a actualização (reescrevendo) nosso sistema que armazena informações sobre quando as pessoas podem reservar quartos etc. durante o dia. Agora nós armazenar o início ea hora ea data da sala está disponível em uma tabela, e em outro que armazenar os horários de compromissos individuais.

Na superfície parecia uma ideia lógica para armazenar as informações dessa maneira, mas como o tempo passou eo sistema ficou sob carga pesada, começamos a perceber que esta estrutura de dados parece ser ineficiente. (Torna-se uma operação intensiva para procurar todos os quartos para horários disponíveis e calcular quando os quartos estão disponíveis. Se a sala está disponível para um determinado tempo, é o tempo que é tempo suficiente disponível para acomodar o tempo solicitado).

Temos ido em círculos sobre como tornar o sistema mais eficiente, e nós sentimos que tem que haver uma maneira melhor de abordar esta questão. Alguém tem sugestões sobre como ir sobre isso, ou tem algum lugar para onde olhar sobre como construir algo assim?

Foi útil?

Solução

Eu encontrei este livro para ser inspirador e uma leitura obrigatória para qualquer tipo de banco de dados envolvendo gerenciamento de tempo / restrições:

Desenvolvendo Aplicações de Banco de Dados Orientado a Tempo em SQL

( Adicionado pelo editor : o livro está disponível on-line, via home page do Richard Snodgrass 's. é um bom livro.)

Outras dicas

@ Radu094 apontou-lo a uma boa fonte de informações -. Mas vai ser difícil ir processamento que

Em um nível terrivelmente pragmática, você já pensou em gravar compromissos e informações disponíveis em uma única tabela, em vez de em duas tabelas? Para cada dia, a fatia de tempo para dentro 'nunca disponível' (antes do escritório aberto, após o fechamento do escritório - se é que isso acontece), 'disponível - pode ser alocado', e 'não disponível'. Estes (ou dois) três classes de reservas seria registada em intervalos contíguos (com o tempo de início e fim de cada intervalo de um único registo).

Para cada quarto e cada data, é necessário criar um conjunto de 'não estiver em uso' reservas (dependendo se você vai com 'nunca disponível', o conjunto pode ser um 'disponível' record ou pode incluir o turno da manhã e deslocamento final de registros 'nunca disponíveis', também).

Em seguida, você tem que descobrir o que perguntas que você está pedindo. Por exemplo:

  • Can I livro Quarto X no dia Y entre T1 e T2?
  • Existe algum quarto disponível no dia Y entre T1 e T2?
  • Em que ocasiões no dia Y é quarto X ainda está disponível?
  • Em que ocasiões no dia Y é um quarto com recursos de áudio-visual e capacidade para 12 pessoas disponíveis?
  • Quem tem espaço X reservado durante a manhã do Dia Y?

Este é apenas um pequeno subconjunto das possibilidades. Mas com um pouco de cuidado e atenção ao detalhe, as consultas se tornar administrável. Validação dos constrangimentos no DBMS será mais difícil. Ou seja, garantindo que, se o tempo [T1..T2) é reservado, então ninguém livros else [T1 + 00: 01..T2-00: 01) ou qualquer outro período de sobreposição. Consulte Interval Álgebra rel="nofollow noreferrer"> de Allen na Wikipedia e em outros lugares (incluindo este em uci.edu ).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top