Je conçois un programme de simulation de baseball et j'ai rencontré un problème avec la conception du schéma boxscore. Le problème que j'ai, c'est que je veux suivre le nombre de points marqués à chaque manche. La façon dont je le fais dans le programme réel est d'utiliser un tableau dynamique qui grandit pour chaque manche jouée.
Pour ceux qui ne connaissent pas le jeu de baseball, les matchs durent généralement neuf manches, sauf si le match est toujours à égalité à la fin de la 9e manche. Les jeux de baseball ont donc une longueur indéterminée, ce qui signifie que je ne peux pas concevoir la base de données pour avoir seulement 9 colonnes pour les points marqués à chaque manche (enfin techniquement 18 (9 manches * 2 équipes). Une idée que j'ai eue est de sérialiser le tableau et le coder en Base64 avant de le stocker dans la base de données. Cependant, je ne sais pas si c'est une bonne technique à utiliser et je me demandais si quelqu'un avait une meilleure idée.
Au cas où cela compte, la base de données que je développe est PostgreSQL.
Toutes les suggestions sont grandement appréciées! Merci!
la source
Je ne pense pas qu'il y ait quelque chose de mal à avoir juste une colonne
pour 1 à 9 et au-delà. C'est l'un des rares endroits où l'utilisation d'un tableau peut être raisonnable.
la source
Donc ce que je vois ici est un peu contradictoire car les manches ne sont pas vraiment directement un attribut de jeux, sauf indirectement. Mais c'est peut-être juste moi. Personnellement, je suggérerais quelque chose de plus comme une table RunsScored et je le ferais revenir à une table GamesHeader, en quelque sorte, alors pensez à:
Cela vous donnera le maximum de manche joué pour un jeu particulier, et vous pouvez affiner davantage par PlayerID -> TeamID pour trouver plus de détails si vous le souhaitez. Je ne sais pas trop ce que cela pourrait être.
J'affinerais probablement cette deuxième table pour qu'elle ne soit pas RunsScored mais quelque chose sur AtBat parce que c'est vraiment ce que vous suivez. Je voulais juste montrer comment vous pouvez dénormaliser la manche hors de la table de jeu. Je modifierais mon modèle pour qu'il coule comme ça, si c'était mon projet. HTH. YMMV.
Notez également que je suis un gars TSQL, mais je pense que les concepts exprimés ci-dessous fonctionnent assez bien pour expliquer mon concept. La sémantique des langues ne s'alignera probablement pas.
la source