如何删除此并行层次结构
我正在尝试为以下情况找到最佳的设计,以存储舞蹈比赛的结果。
一个事件包含多个回合,每个回合包含多个表演(每个舞曲一个)。每次表演都由许多评委进行评判,他们会返回得分表。
共有两种类型的回合,最后一轮(包含6个或者更少的舞蹈对)或者普通回合(包含6个以上的舞蹈对)。每个都需要略有不同的行为和数据。
在最后一轮的情况下,每个计分表都包含决赛中6对夫妇的有序列表,显示法官在第一对,第二等对中的一对。我将这些位置称为"一个计分表包含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回合
final_round has_many final_performances
final_performance has_many final_scoresheets
final_scoresheet has_many排名
回合has_many性能
性能has_many成绩表
计分表has_many回忆
但是,我不喜欢这样做所需要的重复,而且我有几个并行的层次结构(用于回合,性能和记分表),要维护它们很麻烦。
解决方案
回答
这需要一些我没有的领域知识,但是在我看来,有序与无序的情况有点无关紧要。如果每对夫妇都有一个分数,那么可以从每对夫妇的分数中推断出最后一轮的顺序,对吗?这意味着最后一轮的数据结构将与其他每轮的数据结构类似,由多个(配对,得分)集组成。
回答
如果不知道具体情况,很难给出明确的建议。但是根据我的阅读,似乎并行层次结构可能不是必需的。
尚不清楚final_performance是否与性能真正不同。我猜他们的得分是不同的。这应该反映在final_scoresheet中的差异中,并且我们可能假设我们需要使final_performance不同,因为它必须包含final_scoresheets。也许我们可能只有一个绩效对象,而不是让绩效中包含的计分表将舍入对象与绩效相关联:
round.getScoresheet(couple,dance)
而不是
round.getPerformance(couple,dance).getScoresheet()
我还想知道我们是否需要放置和召回的对象:它们是否可以只是从计分表中检索出来的夫妇的(排序的)列表?如果是这样,那么我们就消除了三节课。
包含优先于继承。