Estou projetando um programa de simulação de beisebol e tive um problema ao projetar o esquema boxscore. O problema que tenho é que quero acompanhar quantas execuções são pontuadas em cada turno. A maneira como faço isso no programa atual é usar uma matriz dinâmica que cresce para cada turno jogado.
Para aqueles que não estão familiarizados com o jogo de beisebol, os jogos costumam ter nove entradas, a menos que o jogo ainda esteja empatado no final do nono turno. Portanto, os jogos de beisebol têm um comprimento indeterminado, o que significa que não posso projetar o banco de dados para ter apenas 9 colunas para as execuções pontuadas a cada turno (bem tecnicamente 18 (9-innings * 2-equipes). Uma idéia que tive foi serializar a matriz e codificá-lo como Base64 antes de armazená-lo no banco de dados.No entanto, eu não sei se isso é uma boa técnica para usar e eu queria saber se alguém tem uma idéia melhor.
Caso isso importe, o banco de dados em que estou desenvolvendo é o PostgreSQL.
Todas as sugestões são muito apreciadas! Obrigado!
fonte
Eu não acho que haja algo errado em apenas ter uma coluna
para 1 a 9 e além. Esse é um dos poucos lugares em que o uso de uma matriz pode ser razoável.
fonte
Então, o que estou vendo aqui é um pouco contraditório, porque as entradas não são realmente diretamente um atributo dos jogos, exceto indiretamente. Mas talvez seja só eu. Pessoalmente, sugeriria algo mais como uma tabela RunsScored e o vincularia a uma tabela GamesHeader, de algum tipo, então considere:
Isso lhe dará o máximo de Inning jogado para um jogo em particular, e você pode refinar ainda mais por PlayerID -> TeamID para descobrir mais detalhes, se quiser. O que esses podem ser, não tenho certeza.
Eu provavelmente refino a segunda tabela para não ser RunsScored, mas algo sobre o AtBat, porque é isso que você está rastreando. Eu só queria mostrar como você poderia desnormalizar o turno da mesa de jogo. Eu ajustaria meu modelo para fluir dessa maneira, se esse fosse meu projeto. HTH. YMMV.
Observe também que sou do tipo TSQL, mas acho que os conceitos expressos abaixo funcionam muito bem para explicar meu conceito. A semântica da linguagem provavelmente não se alinhará.
fonte