Je crée une page Web pour placer des paris sur tous les matchs du prochain tournoi de football Euro 2012. Besoin d'aide pour décider de l'approche à adopter pour la phase à élimination directe.
J'ai créé une maquette ci-dessous, dont je suis assez satisfait quand il s'agit de stocker les résultats de tous les matchs de phase de groupes "connus". Cette conception permet de vérifier très facilement si un utilisateur a placé une mise correcte ou non.
Mais quelle est la meilleure façon de stocker les quarts et demi-finales? Ces matchs dépendent du résultat de la phase de groupes.
Une approche à laquelle j'ai pensé consistait à ajouter TOUTES les correspondances au matches
tableau, mais attribuer différentes variables ou identifiants aux équipes à domicile / à l'extérieur pour les matches de la phase à élimination directe. Et puis avoir une autre table avec ces identifiants mappés aux équipes ... Cela pourrait fonctionner, mais ne semble pas correct.
la source
Réponses:
Je commencerais par essayer de corriger toutes les informations prédéterminées dans le modèle lui-même, y compris
Certaines de ces informations seront des données dans des tableaux, d'autres seront de la logique codifiée dans des vues.
Quelque chose comme ça peut-être:
Les informations telles que les équipes jouent au T1 n'ont jamais besoin d'être stockées directement car elles peuvent être calculées à partir des résultats de la phase de groupes. Les seuls changements à apporter au fur et à mesure que le tournoi progresse sont des insertions dans le
result
tableau.la source
Je pense que l'utilisation de l'ID d'équipe est la bonne solution. Un autre niveau d'abstraction pour toutes les phases finales ajoute simplement une complexité inutile pour pas beaucoup d'avantages autres que le préchargement du tableau des correspondances avec des données.
La structure des données semble assez solide pour supporter cela. Les quarts et les demi-finales devraient être ajoutés à la table des matches une fois que les résultats de match initiaux sont entrés.
... alors cela pourrait éventuellement être fait avec une requête. Encore une fois, la complexité de la requête ne vaut peut-être pas la peine selon le nombre d'équipes
la source
C'est une bonne idée de stocker toutes les correspondances dans le tableau "correspondances". Cependant, j'ajouterais un champ supplémentaire "classement", car plus tard, vous en aurez besoin pour construire un arbre binaire pour interroger efficacement la table en mémoire. C'est un problème d'algorithme de classement classique et vous pouvez google pour le tournoi de code gris pour plus d'informations ou consulter mon historique de stackoverflow. Fondamentalement, un tournoi est un arbre binaire. Voici un bon article sur les codes gris: http://villemin.gerard.free.fr/Wwwgvmm/Numerati/CodeGray.htm . Malheureusement c'est français. Voici comment générer un arbre binaire à partir du classement: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229068 .
la source