我正在尝试为以下场景找到最佳设计 - 一个存储舞蹈比赛结果的应用程序。
一个事件包含多轮,每轮包含许多表演(每支舞一个)。每场表演都由许多评委进行评判,评委会返回一张计分表。
有两种类型的轮次,最后一轮(包含 6 对或更少的舞蹈对)或正常轮(包含超过 6 个舞蹈对)。每个都需要稍微不同的行为和数据。
在最后一轮的情况下,每张计分表都包含决赛中 6 对夫妇的有序列表,显示法官将哪对夫妇排在第 1 名、第 2 名等。我称这些排名为“计分表包含 6 个排名”。一个位置包含一对夫妇的号码,这对夫妇是什么地方
在正常轮次的情况下,每个计分表包含一组无序的 M 对(M < 进入轮次的对数 - 由比赛组织者确定的确切值)。我将这些回忆称为:“M 回忆的记分表”。召回不包含分数或排名
例如在决赛中
- 第一名:56对
- 第二名:情侣234
- 第三名:情侣198
- 第四名:情侣98
- 第五名:情侣3
- 第六名:情侣125
为正常一轮以下夫妇被召回54,67,201,104,187,209,8,56,79,35,167,98
我的天真版本实现为
事件 - has_one final_round, has_many rounds
final_round - has_many final_performances final_performance - has_many final_scoresheets final_scoresheet - has_many 排名
回合 - has_many 表现 表现 has_many scoresheets scoresheet has_many 回忆
但是我不喜欢这需要的重复,而且我有几个并行的层次结构(用于回合、性能和计分表),这将是一个痛苦的维护。