J'essaie de trouver le meilleur design pour le scénario suivant - une application pour stocker les résultats des compétitions de danse.Comment faire pour supprimer cette hiérarchie parallèle
Un événement contient plusieurs tours, chaque tour contient un certain nombre de performances (une par danse). Chaque performance est jugée par de nombreux juges, qui retournent une feuille de match.
Il existe deux types de rondes, une ronde finale (contenant 6 couples de danse ou moins) ou une ronde normale (contenant plus de 6 couples de danse). Chacun nécessite un comportement et des données légèrement différents. Dans le cas d'un tour final, chaque feuille de match contient une liste ordonnée des 6 couples de l'épreuve finale qui couple le juge classé 1er, 2e, etc. J'appelle ces classements «une feuille de pointage contient 6 classements». Dans le cas d'un tour normal, chaque feuille de match contient un ensemble non ordonné de M couples (M < le nombre de couples entrés dans le tour - valeur exacte déterminé par l'organisateur de la compétition). J'appelle ces rappels: "une feuille de score comme M rappelle". Un rappel ne contient pas un score ou un classement
par exemple Dans une finale
- 1ère place: En couple 56
- 2ème place: deux 234
- 3ème place: En couple 198
- 4ème place: En couple 98
- 5e place: deux 3
- 6e place: En couple 125
Pour un tour normale couples suivants sont rappelés 54,67,201,104,187,209,8,56,79,35,167,98
Ma version naïve de c'est implémenté comme
événement - has_one final_round , has_many arrondit
final_round - has_many final_performances final_performance - has_many final_scoresheets final_scoresheet - has_many 0
classementronde - perforomances has_many performances has_many feuille de pointage feuille de match has_many rappelle
Cependant, je n'aime pas la duplication que cela exige, et j'ai plusieurs hiérarchies parallèles (pour la deuxième ronde, la performance et feuille de match) qui va être une douleur Maintenir.