Estou criando uma página da web para fazer apostas em todos os jogos do próximo torneio de futebol da Euro 2012. Precisa de ajuda para decidir qual abordagem adotar para a fase eliminatória.
Eu criei uma maquete abaixo, com a qual estou bastante satisfeito em armazenar os resultados de todas as partidas "conhecidas" da fase de grupos. Esse design facilita a verificação de se um usuário fez uma aposta correta ou não.
Mas qual é a melhor maneira de armazenar as quartas e meias-finais? Essas partidas dependem do resultado na fase de grupos.
Uma abordagem em que pensei foi adicionar TODAS as partidas à matches
tabela, mas atribuir diferentes variáveis ou identificadores às equipes da casa / fora das partidas na fase eliminatória. E depois tenha outra tabela com os identificadores mapeados para as equipes ... Isso pode funcionar, mas não parece certo.
fonte
Respostas:
Eu começaria tentando consertar todas as informações predeterminadas no próprio modelo, incluindo
Algumas dessas informações serão dados em tabelas, outras serão lógicas codificadas em visualizações.
Algo assim talvez:
Informações como as equipes jogam no primeiro trimestre nunca precisam ser armazenadas diretamente, porque podem ser calculadas a partir dos resultados da fase de grupos. As únicas alterações a serem feitas à medida que o torneio avança são inseridas na
result
tabela.fonte
Eu acho que usar o ID da equipe é o caminho certo a seguir. Outro nível de abstração para todas as rodadas finais adiciona complexidade desnecessária para outros benefícios que não sejam o pré-carregamento da tabela de correspondências com dados.
A estrutura de dados parece bastante sólida para suportar isso. As quartas e meias-finais precisariam ser adicionadas à tabela de correspondências assim que os resultados da correspondência inicial fossem entregues. Se as correspondências forem atribuídas aleatoriamente, esta é uma operação manual, no entanto, se elas estiverem em uma ordem específica ...
... então isso poderia ser feito com uma consulta. Novamente, a complexidade da consulta pode não valer o esforço, dependendo do número de equipes
fonte
É uma boa ideia armazenar todas as correspondências na tabela "correspondências". No entanto, eu adicionaria um campo adicional "ranking" a ele, porque mais tarde você precisará criar uma árvore binária para consultar com eficiência a tabela na memória. É um problema clássico de algoritmo de classificação e você pode procurar no google pelo torneio de código cinza para obter mais informações ou procurar no meu histórico de stackoverflow. Basicamente, um torneio é uma árvore binária. Aqui está um bom artigo sobre códigos cinza: http://villemin.gerard.free.fr/Wwwgvmm/Numerati/CodeGray.htm . Infelizmente é francês. Aqui está como gerar uma árvore binária a partir da classificação: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229068 .
fonte